ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICBEZWJ1Z2dpbmcgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKCQkJICAgICAgICAgICAgICAgYnkKCQlEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pCgkJQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZXN0IHZpZXdlZCB3aXRoIGZpeGVkIHdpZHRoIGZvbnRzIAoKT3ZlcnZpZXcgb2YgRG9jdW1lbnQ6Cj09PT09PT09PT09PT09PT09PT09PQpUaGlzIGRvY3VtZW50IGlzIGludGVuZGVkIHRvIGdpdmUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyB0byBkZWJ1ZwpMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZS4gSXQgaXNuJ3QgaW50ZW5kZWQgYXMgYSBjb21wbGV0ZSByZWZlcmVuY2UgJiBub3QgYQp0dXRvcmlhbCBvbiB0aGUgZnVuZGFtZW50YWxzIG9mIEMgJiBhc3NlbWJseS4gSXQgZG9lc24ndCBnbyBpbnRvCjM5MCBJTyBpbiBhbnkgZGV0YWlsLiBJdCBpcyBpbnRlbmRlZCB0byBjb21wbGVtZW50IHRoZSBkb2N1bWVudHMgaW4gdGhlCnJlZmVyZW5jZSBzZWN0aW9uIGJlbG93ICYgYW55IG90aGVyIHdvcnRod2hpbGUgcmVmZXJlbmNlcyB5b3UgZ2V0LgoKSXQgaXMgaW50ZW5kZWQgbGlrZSB0aGUgRW50ZXJwcmlzZSBTeXN0ZW1zIEFyY2hpdGVjdHVyZS8zOTAgUmVmZXJlbmNlIFN1bW1hcnkKdG8gYmUgcHJpbnRlZCBvdXQgJiB1c2VkIGFzIGEgcXVpY2sgY2hlYXQgc2hlZXQgc2VsZiBoZWxwIHN0eWxlIHJlZmVyZW5jZSB3aGVuCnByb2JsZW1zIG9jY3VyLgoKQ29udGVudHMKPT09PT09PT0KUmVnaXN0ZXIgU2V0CkFkZHJlc3MgU3BhY2VzIG9uIEludGVsIExpbnV4CkFkZHJlc3MgU3BhY2VzIG9uIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlClRoZSBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSBLZXJuZWwgVGFzayBTdHJ1Y3R1cmUKUmVnaXN0ZXIgVXNhZ2UgJiBTdGFja2ZyYW1lcyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQpBIHNhbXBsZSBwcm9ncmFtIHdpdGggY29tbWVudHMKQ29tcGlsaW5nIHByb2dyYW1zIGZvciBkZWJ1Z2dpbmcgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKRmlndXJpbmcgb3V0IGdjYyBjb21waWxlIGVycm9ycwpEZWJ1Z2dpbmcgVG9vbHMKb2JqZHVtcApzdHJhY2UKUGVyZm9ybWFuY2UgRGVidWdnaW5nIApEZWJ1Z2dpbmcgdW5kZXIgVk0Kcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSBJTyBPdmVydmlldwpEZWJ1Z2dpbmcgSU8gb24gcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSB1bmRlciBWTQpHREIgb24gcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQpTdGFjayBjaGFpbmluZyBpbiBnZGIgYnkgaGFuZApFeGFtaW5pbmcgY29yZSBkdW1wcwpsZGQKRGVidWdnaW5nIG1vZHVsZXMKVGhlIHByb2MgZmlsZSBzeXN0ZW0KU3RhcnRpbmcgcG9pbnRzIGZvciBkZWJ1Z2dpbmcgc2NyaXB0aW5nIGxhbmd1YWdlcyBldGMuCkR1bXB0b29sICYgTGNyYXNoClN5c1JxClJlZmVyZW5jZXMKU3BlY2lhbCBUaGFua3MKClJlZ2lzdGVyIFNldAo9PT09PT09PT09PT0KVGhlIGN1cnJlbnQgYXJjaGl0ZWN0dXJlcyBoYXZlIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzLgogCjE2ICBHZW5lcmFsIHByb3Bvc2UgcmVnaXN0ZXJzLCAzMiBiaXQgb24gcy8zOTAgNjQgYml0IG9uIHovQXJjaGl0ZWN0dXJlLCByMC1yMTUgb3IgZ3ByMC1ncHIxNSB1c2VkIGZvciBhcml0aG1ldGljICYgYWRkcmVzc2luZy4gCgoxNiBDb250cm9sIHJlZ2lzdGVycywgMzIgYml0IG9uIHMvMzkwIDY0IGJpdCBvbiB6L0FyY2hpdGVjdHVyZSwgKCBjcjAtY3IxNSBrZXJuZWwgdXNhZ2Ugb25seSApIHVzZWQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LAppbnRlcnJ1cHQgY29udHJvbCxkZWJ1Z2dpbmcgY29udHJvbCBldGMuCgoxNiBBY2Nlc3MgcmVnaXN0ZXJzICggYXIwLWFyMTUgKSAzMiBiaXQgb24gcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQpub3QgdXNlZCBieSBub3JtYWwgcHJvZ3JhbXMgYnV0IHBvdGVudGlhbGx5IGNvdWxkIApiZSB1c2VkIGFzIHRlbXBvcmFyeSBzdG9yYWdlLiBUaGVpciBtYWluIHB1cnBvc2UgaXMgdGhlaXIgMSB0byAxCmFzc29jaWF0aW9uIHdpdGggZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyBhbmQgYXJlIHVzZWQgaW4KdGhlIGtlcm5lbCBmb3IgY29weWluZyBkYXRhIGJldHdlZW4ga2VybmVsICYgdXNlciBhZGRyZXNzIHNwYWNlcy4KQWNjZXNzIHJlZ2lzdGVyIDAgKCAmIGFjY2VzcyByZWdpc3RlciAxIG9uIHovQXJjaGl0ZWN0dXJlICggbmVlZHMgNjQgYml0IApwb2ludGVyICkgKSBpcyBjdXJyZW50bHkgdXNlZCBieSB0aGUgcHRocmVhZCBsaWJyYXJ5IGFzIGEgcG9pbnRlciB0bwp0aGUgY3VycmVudCBydW5uaW5nIHRocmVhZHMgcHJpdmF0ZSBhcmVhLgoKMTYgNjQgYml0IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyAoZnAwLWZwMTUgKSBJRUVFICYgSEZQIGZsb2F0aW5nIApwb2ludCBmb3JtYXQgY29tcGxpYW50IG9uIEc1IHVwd2FyZHMgJiBhIEZsb2F0aW5nIHBvaW50IGNvbnRyb2wgcmVnIChGUEMpIAo0ICA2NCBiaXQgcmVnaXN0ZXJzIChmcDAsZnAyLGZwNCAmIGZwNikgSEZQIG9ubHkgb24gb2xkZXIgbWFjaGluZXMuCk5vdGU6CkxpbnV4IChjdXJyZW50bHkpIGFsd2F5cyB1c2VzIElFRUUgJiBlbXVsYXRlcyBHNSBJRUVFIGZvcm1hdCBvbiBvbGRlciBtYWNoaW5lcywKKCBwcm92aWRlZCB0aGUga2VybmVsIGlzIGNvbmZpZ3VyZWQgZm9yIHRoaXMgKS4KCgpUaGUgUFNXIGlzIHRoZSBtb3N0IGltcG9ydGFudCByZWdpc3RlciBvbiB0aGUgbWFjaGluZSBpdAppcyA2NCBiaXQgb24gcy8zOTAgJiAxMjggYml0IG9uIHovQXJjaGl0ZWN0dXJlICYgc2VydmVzIHRoZSByb2xlcyBvZiAKYSBwcm9ncmFtIGNvdW50ZXIgKHBjKSwgY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXIsbWVtb3J5IHNwYWNlIGRlc2lnbmF0b3IuCkluIElCTSBzdGFuZGFyZCBub3RhdGlvbiBJIGFtIGNvdW50aW5nIGJpdCAwIGFzIHRoZSBNU0IuCkl0IGhhcyBzZXZlcmFsIGFkdmFudGFnZXMgb3ZlciBhIG5vcm1hbCBwcm9ncmFtIGNvdW50ZXIKaW4gdGhhdCB5b3UgY2FuIGNoYW5nZSBhZGRyZXNzIHRyYW5zbGF0aW9uICYgcHJvZ3JhbSBjb3VudGVyIAppbiBhIHNpbmdsZSBpbnN0cnVjdGlvbi4gVG8gY2hhbmdlIGFkZHJlc3MgdHJhbnNsYXRpb24sCmUuZy4gc3dpdGNoaW5nIGFkZHJlc3MgdHJhbnNsYXRpb24gb2ZmIHJlcXVpcmVzIHRoYXQgeW91CmhhdmUgYSBsb2dpY2FsPXBoeXNpY2FsIG1hcHBpbmcgZm9yIHRoZSBhZGRyZXNzIHlvdSBhcmUKY3VycmVudGx5IHJ1bm5pbmcgYXQuCgogICAgICBCaXQgICAgICAgICAgIFZhbHVlCnMvMzkwIHovQXJjaGl0ZWN0dXJlCjAgICAgICAgMCAgICAgUmVzZXJ2ZWQgKCBtdXN0IGJlIDAgKSBvdGhlcndpc2Ugc3BlY2lmaWNhdGlvbiBleGNlcHRpb24gb2NjdXJzLgoKMSAgICAgICAxICAgICBQcm9ncmFtIEV2ZW50IFJlY29yZGluZyAxIFBFUiBlbmFibGVkLCAKCSAgICAgIFBFUiBpcyB1c2VkIHRvIGZhY2lsaXRhdGUgZGVidWdnaW5nIGUuZy4gc2luZ2xlIHN0ZXBwaW5nLgoKMi00ICAgIDItNCAgICBSZXNlcnZlZCAoIG11c3QgYmUgMCApLiAKCjUgICAgICAgNSAgICAgRHluYW1pYyBhZGRyZXNzIHRyYW5zbGF0aW9uIDE9REFUIG9uLgoKNiAgICAgICA2ICAgICBJbnB1dC9PdXRwdXQgaW50ZXJydXB0IE1hc2sKCjcgICAgICAgNyAgICAgRXh0ZXJuYWwgaW50ZXJydXB0IE1hc2sgdXNlZCBwcmltYXJpbHkgZm9yIGludGVycHJvY2Vzc29yIHNpZ25hbGxpbmcgJiAKCSAgICAgIGNsb2NrIGludGVycnVwdHMuCgo4LTExICA4LTExICAgIFBTVyBLZXkgdXNlZCBmb3IgY29tcGxleCBtZW1vcnkgcHJvdGVjdGlvbiBtZWNoYW5pc20gbm90IHVzZWQgdW5kZXIgbGludXgKCjEyICAgICAgMTIgICAgMSBvbiBzLzM5MCAwIG9uIHovQXJjaGl0ZWN0dXJlCgoxMyAgICAgIDEzICAgIE1hY2hpbmUgQ2hlY2sgTWFzayAxPWVuYWJsZSBtYWNoaW5lIGNoZWNrIGludGVycnVwdHMKCjE0ICAgICAgMTQgICAgV2FpdCBTdGF0ZSBzZXQgdGhpcyB0byAxIHRvIHN0b3AgdGhlIHByb2Nlc3NvciBleGNlcHQgZm9yIGludGVycnVwdHMgJiBnaXZlIAoJICAgICAgdGltZSB0byBvdGhlciBMUEFSUyB1c2VkIGluIENQVSBpZGxlIGluIHRoZSBrZXJuZWwgdG8gaW5jcmVhc2Ugb3ZlcmFsbCAKCSAgICAgIHVzYWdlIG9mIHByb2Nlc3NvciByZXNvdXJjZXMuCgoxNSAgICAgIDE1ICAgIFByb2JsZW0gc3RhdGUgKCBpZiBzZXQgdG8gMSBjZXJ0YWluIGluc3RydWN0aW9ucyBhcmUgZGlzYWJsZWQgKQoJICAgICAgYWxsIGxpbnV4IHVzZXIgcHJvZ3JhbXMgcnVuIHdpdGggdGhpcyBiaXQgMSAKCSAgICAgICggdXNlZnVsIGluZm8gZm9yIGRlYnVnZ2luZyB1bmRlciBWTSApLgoKMTYtMTcgMTYtMTcgICBBZGRyZXNzIFNwYWNlIENvbnRyb2wKCgkgICAgICAwMCBQcmltYXJ5IFNwYWNlIE1vZGUgd2hlbiBEQVQgb24KCSAgICAgIFRoZSBsaW51eCBrZXJuZWwgY3VycmVudGx5IHJ1bnMgaW4gdGhpcyBtb2RlLCBDUjEgaXMgYWZmaWxpYXRlZCB3aXRoIAogICAgICAgICAgICAgIHRoaXMgbW9kZSAmIHBvaW50cyB0byB0aGUgcHJpbWFyeSBzZWdtZW50IHRhYmxlIG9yaWdpbiBldGMuCgoJICAgICAgMDEgQWNjZXNzIHJlZ2lzdGVyIG1vZGUgdGhpcyBtb2RlIGlzIHVzZWQgaW4gZnVuY3Rpb25zIHRvIAoJICAgICAgY29weSBkYXRhIGJldHdlZW4ga2VybmVsICYgdXNlciBzcGFjZS4KCgkgICAgICAxMCBTZWNvbmRhcnkgc3BhY2UgbW9kZSBub3QgdXNlZCBpbiBsaW51eCBob3dldmVyIENSNyB0aGUKCSAgICAgIHJlZ2lzdGVyIGFmZmlsaWF0ZWQgd2l0aCB0aGlzIG1vZGUgaXMgJiB0aGlzICYgbm9ybWFsbHkKCSAgICAgIENSMTM9Q1I3IHRvIGFsbG93IHVzIHRvIGNvcHkgZGF0YSBiZXR3ZWVuIGtlcm5lbCAmIHVzZXIgc3BhY2UuCgkgICAgICBXZSBkbyB0aGlzIGFzIGZvbGxvd3M6CgkgICAgICBXZSBzZXQgYXIyIHRvIDAgdG8gZGVzaWduYXRlIGl0cwoJICAgICAgYWZmaWxpYXRlZCBncHIgKCBncHIyICl0byBwb2ludCB0byBwcmltYXJ5PWtlcm5lbCBzcGFjZS4KCSAgICAgIFdlIHNldCBhcjQgdG8gMSB0byBkZXNpZ25hdGUgaXRzCgkgICAgICBhZmZpbGlhdGVkIGdwciAoIGdwcjQgKSB0byBwb2ludCB0byBzZWNvbmRhcnk9aG9tZT11c2VyIHNwYWNlCgkgICAgICAmIHRoZW4gZXNzZW50aWFsbHkgZG8gYSBtZW1jb3B5KGdwcjIsZ3ByNCxzaXplKSB0bwoJICAgICAgY29weSBkYXRhIGJldHdlZW4gdGhlIGFkZHJlc3Mgc3BhY2VzLCB0aGUgcmVhc29uIHdlIHVzZSBob21lIHNwYWNlIGZvciB0aGUKCSAgICAgIGtlcm5lbCAmIGRvbid0IGtlZXAgc2Vjb25kYXJ5IHNwYWNlIGZyZWUgaXMgdGhhdCBjb2RlIHdpbGwgbm90IHJ1biBpbiAKCSAgICAgIHNlY29uZGFyeSBzcGFjZS4KCgkgICAgICAxMSBIb21lIFNwYWNlIE1vZGUgYWxsIHVzZXIgcHJvZ3JhbXMgcnVuIGluIHRoaXMgbW9kZS4KCSAgICAgIGl0IGlzIGFmZmlsaWF0ZWQgd2l0aCBDUjEzLgoKMTgtMTkgMTgtMTkgICBDb25kaXRpb24gY29kZXMgKENDKQoKMjAgICAgMjAgICAgICBGaXhlZCBwb2ludCBvdmVyZmxvdyBtYXNrIGlmIDE9RlBVIGV4Y2VwdGlvbnMgZm9yIHRoaXMgZXZlbnQgCiAgICAgICAgICAgICAgb2NjdXIgKCBub3JtYWxseSAwICkgCgoyMSAgICAyMSAgICAgIERlY2ltYWwgb3ZlcmZsb3cgbWFzayBpZiAxPUZQVSBleGNlcHRpb25zIGZvciB0aGlzIGV2ZW50IG9jY3VyIAogICAgICAgICAgICAgICggbm9ybWFsbHkgMCApCgoyMiAgICAyMiAgICAgIEV4cG9uZW50IHVuZGVyZmxvdyBtYXNrIGlmIDE9RlBVIGV4Y2VwdGlvbnMgZm9yIHRoaXMgZXZlbnQgb2NjdXIgCiAgICAgICAgICAgICAgKCBub3JtYWxseSAwICkKCjIzICAgIDIzICAgICAgU2lnbmlmaWNhbmNlIE1hc2sgaWYgMT1GUFUgZXhjZXB0aW9ucyBmb3IgdGhpcyBldmVudCBvY2N1ciAKICAgICAgICAgICAgICAoIG5vcm1hbGx5IDAgKQoKMjQtMzEgMjQtMzAgICBSZXNlcnZlZCBNdXN0IGJlIDAuCgogICAgICAzMSAgICAgIEV4dGVuZGVkIEFkZHJlc3NpbmcgTW9kZQogICAgICAzMiAgICAgIEJhc2ljIEFkZHJlc3NpbmcgTW9kZQogICAgICAgICAgICAgIFVzZWQgdG8gc2V0IGFkZHJlc3NpbmcgbW9kZQoJICAgICAgUFNXIDMxICAgUFNXIDMyCiAgICAgICAgICAgICAgICAwICAgICAgICAgMCAgICAgICAgMjQgYml0CiAgICAgICAgICAgICAgICAwICAgICAgICAgMSAgICAgICAgMzEgYml0CiAgICAgICAgICAgICAgICAxICAgICAgICAgMSAgICAgICAgNjQgYml0CgozMiAgICAgICAgICAgICAxPTMxIGJpdCBhZGRyZXNzaW5nIG1vZGUgMD0yNCBiaXQgYWRkcmVzc2luZyBtb2RlIChmb3IgYmFja3dhcmQgCiAgICAgICAgICAgICAgIGNvbXBhdGliaWxpdHkpLCBsaW51eCBhbHdheXMgcnVucyB3aXRoIHRoaXMgYml0IHNldCB0byAxCgozMy02NCAgICAgICAgICBJbnN0cnVjdGlvbiBhZGRyZXNzLgogICAgICAzMy02MyAgICBSZXNlcnZlZCBtdXN0IGJlIDAKICAgICAgNjQtMTI3ICAgQWRkcmVzcwogICAgICAgICAgICAgICBJbiAyNCBiaXRzIG1vZGUgYml0cyA2NC0xMDM9MCBiaXRzIDEwNC0xMjcgQWRkcmVzcyAKICAgICAgICAgICAgICAgSW4gMzEgYml0cyBtb2RlIGJpdHMgNjQtOTY9MCBiaXRzIDk3LTEyNyBBZGRyZXNzCiAgICAgICAgICAgICAgIE5vdGU6IHVubGlrZSAzMSBiaXQgbW9kZSBvbiBzLzM5MCBiaXQgOTYgbXVzdCBiZSB6ZXJvCgkgICAgICAgd2hlbiBsb2FkaW5nIHRoZSBhZGRyZXNzIHdpdGggTFBTV0Ugb3RoZXJ3aXNlIGEgCiAgICAgICAgICAgICAgIHNwZWNpZmljYXRpb24gZXhjZXB0aW9uIG9jY3VycywgTFBTVyBpcyBmdWxseSBiYWNrd2FyZAogICAgICAgICAgICAgICBjb21wYXRpYmxlLgogCSAgCgkgIApQcmVmaXggUGFnZShzKQotLS0tLS0tLS0tLS0tLQkgIApUaGlzIHBlciBjcHUgbWVtb3J5IGFyZWEgaXMgdG9vIGludGltYXRlbHkgdGllZCB0byB0aGUgcHJvY2Vzc29yIG5vdCB0byBtZW50aW9uLgpJdCBleGlzdHMgYmV0d2VlbiB0aGUgcmVhbCBhZGRyZXNzZXMgMC00MDk2IG9uIHMvMzkwICYgMC04MTkyIHovQXJjaGl0ZWN0dXJlICYgaXMgZXhjaGFuZ2VkIAp3aXRoIGEgMSBwYWdlIG9uIHMvMzkwIG9yIDIgcGFnZXMgb24gei9BcmNoaXRlY3R1cmUgaW4gYWJzb2x1dGUgc3RvcmFnZSBieSB0aGUgc2V0IApwcmVmaXggaW5zdHJ1Y3Rpb24gaW4gbGludXgnZXMgc3RhcnR1cC4gClRoaXMgcGFnZSBpcyBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgcHJlZml4IGZvciBlYWNoIHByb2Nlc3NvciBpbiBhbiBTTVAgY29uZmlndXJhdGlvbgooIGFzc3VtaW5nIHRoZSBvcyBkZXNpZ25lciBpcyBzYW5lIG9mIGNvdXJzZSA6LSkgKS4KQnl0ZXMgMC01MTIgKCAyMDAgaGV4ICkgb24gcy8zOTAgJiAwLTUxMiw0MDk2LTQ1NDQsNDYwNC01MTE5IGN1cnJlbnRseSBvbiB6L0FyY2hpdGVjdHVyZSAKYXJlIHVzZWQgYnkgdGhlIHByb2Nlc3NvciBpdHNlbGYgZm9yIGhvbGRpbmcgc3VjaCBpbmZvcm1hdGlvbiBhcyBleGNlcHRpb24gaW5kaWNhdGlvbnMgJiAKZW50cnkgcG9pbnRzIGZvciBleGNlcHRpb25zLgpCeXRlcyBhZnRlciAweGMwMCBoZXggYXJlIHVzZWQgYnkgbGludXggZm9yIHBlciBwcm9jZXNzb3IgZ2xvYmFscyBvbiBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIAooIHRoZXJlIGlzIGEgZ2FwIG9uIHovQXJjaGl0ZWN0dXJlIHRvbyBjdXJyZW50bHkgYmV0d2VlbiAweGMwMCAmIDEwMDAgd2hpY2ggbGludXggdXNlcyApLgpUaGUgY2xvc2VzdCB0aGluZyB0byB0aGlzIG9uIHRyYWRpdGlvbmFsIGFyY2hpdGVjdHVyZXMgaXMgdGhlIGludGVycnVwdAp2ZWN0b3IgdGFibGUuIFRoaXMgaXMgYSBnb29kIHRoaW5nICYgZG9lcyBzaW1wbGlmeSBzb21lIG9mIHRoZSBrZXJuZWwgY29kaW5nCmhvd2V2ZXIgaXQgbWVhbnMgdGhhdCB3ZSBub3cgY2Fubm90IGNhdGNoIHN0cmF5IE5VTEwgcG9pbnRlcnMgaW4gdGhlCmtlcm5lbCB3aXRob3V0IGhhcmQgY29kZWQgY2hlY2tzLgoKCgpBZGRyZXNzIFNwYWNlcyBvbiBJbnRlbCBMaW51eAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhlIHRyYWRpdGlvbmFsIEludGVsIExpbnV4IGlzIGFwcHJveGltYXRlbHkgbWFwcGVkIGFzIGZvbGxvd3MgZm9yZ2l2ZQp0aGUgYXNjaWkgYXJ0LgoweEZGRkZGRkZGIDRHQiBIaW1lbSAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEtlcm5lbCBTcGFjZSAgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKiogICAgICAgICAgKioqKioqKioqKioqKioqKgpVc2VyIFNwYWNlIEhpbWVtICh0eXBpY2FsbHkgMHhDMDAwMDAwMCAzR0IgKSogIFVzZXIgU3RhY2sgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKCQkJCSAgICAgICAgICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICogICAgICAgICAgICAgICoKCQkJCQkgICAgKiAgU2hhcmVkIExpYnMgICogICAgICAgICAgKiBOZXh0IFByb2Nlc3MgKiAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqICAgICB0byAgICAgICAqICAKCQkJCQkgICAgKiAgICAgICAgICAgICAgICogICAgPD09ICAgKiAgICAgUnVuICAgICAgKiAgPD09CgkJCQkJICAgICogIFVzZXIgUHJvZ3JhbSAqICAgICAgICAgICogICAgICAgICAgICAgICoKCQkJCQkgICAgKiAgIERhdGEgQlNTICAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoJIFRleHQgICAgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCiAgICAgICAgIAkJCSAgICAgICAgICAgICogICBTZWN0aW9ucyAgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKMHgwMDAwMDAwMCAgICAgICAgIAkJCSAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqKioqKioqKioqKioqKioqCgpOb3cgaXQgaXMgZWFzeSB0byBzZWUgdGhhdCBvbiBJbnRlbCBpdCBpcyBxdWl0ZSBlYXN5IHRvIHJlY29nbmlzZSBhIGtlcm5lbCBhZGRyZXNzIAphcyBiZWluZyBvbmUgZ3JlYXRlciB0aGFuIHVzZXIgc3BhY2UgaGltZW0gKCBpbiB0aGlzIGNhc2UgMHhDMDAwMDAwMCkuCiYgYWRkcmVzc2VzIG9mIGxlc3MgdGhhbiB0aGlzIGFyZSB0aGUgb25lcyBpbiB0aGUgY3VycmVudCBydW5uaW5nIHByb2dyYW0gb24gdGhpcwpwcm9jZXNzb3IgKCBpZiBhbiBzbXAgYm94ICkuCklmIHVzaW5nIHRoZSB2aXJ0dWFsIG1hY2hpbmUgKCBWTSApIGFzIGEgZGVidWdnZXIgaXQgaXMgcXVpdGUgZGlmZmljdWx0IHRvCmtub3cgd2hpY2ggdXNlciBwcm9jZXNzIGlzIHJ1bm5pbmcgYXMgdGhlIGFkZHJlc3Mgc3BhY2UgeW91IGFyZSBsb29raW5nIGF0CmNvdWxkIGJlIGZyb20gYW55IHByb2Nlc3MgaW4gdGhlIHJ1biBxdWV1ZS4KClRoZSBsaW1pdGF0aW9uIG9mIEludGVscyBhZGRyZXNzaW5nIHRlY2huaXF1ZSBpcyB0aGF0IHRoZSBsaW51eAprZXJuZWwgdXNlcyBhIHZlcnkgc2ltcGxlIHJlYWwgYWRkcmVzcyB0byB2aXJ0dWFsIGFkZHJlc3NpbmcgdGVjaG5pcXVlCm9mIFJlYWwgQWRkcmVzcz1WaXJ0dWFsIEFkZHJlc3MtVXNlciBTcGFjZSBIaW1lbS4KVGhpcyBtZWFucyB0aGF0IG9uIEludGVsIHRoZSBrZXJuZWwgbGludXggY2FuIHR5cGljYWxseSBvbmx5IGFkZHJlc3MKSGltZW09MHhGRkZGRkZGRi0weEMwMDAwMDAwPTFHQiAmIHRoaXMgaXMgYWxsIHRoZSBSQU0gdGhlc2UgbWFjaGluZXMKY2FuIHR5cGljYWxseSB1c2UuClRoZXkgY2FuIGxvd2VyIFVzZXIgSGltZW0gdG8gMkdCIG9yIGxvd2VyICYgdGh1cyBiZQphYmxlIHRvIHVzZSAyR0Igb2YgUkFNIGhvd2V2ZXIgdGhpcyBzaHJpbmtzIHRoZSBtYXhpbXVtIHNpemUKb2YgVXNlciBTcGFjZSBmcm9tIDNHQiB0byAyR0IgdGhleSBoYXZlIGEgbm8gd2luIGxpbWl0IG9mIDRHQiB1bmxlc3MKdGhleSBnbyB0byA2NCBCaXQuCgoKT24gMzkwIG91ciBsaW1pdGF0aW9ucyAmIHN0cmVuZ3RocyBtYWtlIHVzIHNsaWdodGx5IGRpZmZlcmVudC4KRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2UgYXJlIG9ubHkgYWxsb3dlZCB1c2UgMzEgYml0cyAoMkdCKQpvZiBvdXIgMzIgYml0IGFkZHJlc3NlcywgaG93ZXZlciwgd2UgdXNlIGVudGlyZWx5IHNlcGFyYXRlIGFkZHJlc3MgCnNwYWNlcyBmb3IgdGhlIHVzZXIgJiBrZXJuZWwuCgpUaGlzIG1lYW5zIHdlIGNhbiBzdXBwb3J0IDJHQiBvZiBub24gRXh0ZW5kZWQgUkFNIG9uIHMvMzkwLCAmIG1vcmUKd2l0aCB0aGUgRXh0ZW5kZWQgbWVtb3J5IG1hbmFnZW1lbnQgc3dhcCBkZXZpY2UgJiAKY3VycmVudGx5IDRUQiBvZiBwaHlzaWNhbCBtZW1vcnkgY3VycmVudGx5IG9uIHovQXJjaGl0ZWN0dXJlLgoKCkFkZHJlc3MgU3BhY2VzIG9uIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpPdXIgYWRkcmVzc2luZyBzY2hlbWUgaXMgYXMgZm9sbG93cwoKCkhpbWVtIDB4N2ZmZmZmZmYgMkdCIG9uIHMvMzkwICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICoqKioqKioqKioqKioqKioKY3VycmVudGx5IDB4M2ZmZmZmZmZmZmYgKDJeNDIpLTEgKiAgVXNlciBTdGFjayAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgpvbiB6L0FyY2hpdGVjdHVyZS4JCSAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqICAgICAgICAgICAgICAqCgkJICAgICAgICAgICAgICAgICAqICBTaGFyZWQgTGlicyAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICogICAgICAgICAgICAgICogIAoJCQkgICAgICAgICAqICAgICAgICAgICAgICAgKiAgICAgICAgICAqICAgIEtlcm5lbCAgICAqICAKCQkgICAgICAgICAgICAgICAgICogIFVzZXIgUHJvZ3JhbSAqICAgICAgICAgICogICAgICAgICAgICAgICoKCQkgICAgICAgICAgICAgICAgICogICBEYXRhIEJTUyAgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICBUZXh0ICAgICAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgogICAgICAgICAgICAJCQkgKiAgIFNlY3Rpb25zICAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgoweDAwMDAwMDAwICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqKioqKioqKioqKioqKioqCgpUaGlzIGFsc28gbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGxvb2sgYXQgdGhlIFBTVyBwcm9ibGVtIHN0YXRlIGJpdApvciB0aGUgYWRkcmVzc2luZyBtb2RlIHRvIGRlY2lkZSB3aGV0aGVyIHdlIGFyZSBsb29raW5nIGF0CnVzZXIgb3Iga2VybmVsIHNwYWNlLgoKVmlydHVhbCBBZGRyZXNzZXMgb24gcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpBIHZpcnR1YWwgYWRkcmVzcyBvbiBzLzM5MCBpcyBtYWRlIHVwIG9mIDMgcGFydHMKVGhlIFNYICggc2VnbWVudCBpbmRleCwgcm91Z2hseSBjb3JyZXNwb25kaW5nIHRvIHRoZSBQR0QgJiBQTUQgaW4gbGludXggdGVybWlub2xvZ3kgKSAKYmVpbmcgYml0cyAxLTExLgpUaGUgUFggKCBwYWdlIGluZGV4LCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYWdlIHRhYmxlIGVudHJ5IChwdGUpIGluIGxpbnV4IHRlcm1pbm9sb2d5ICkKYmVpbmcgYml0cyAxMi0xOS4gClRoZSByZW1haW5pbmcgYml0cyBCWCAodGhlIGJ5dGUgaW5kZXggYXJlIHRoZSBvZmZzZXQgaW4gdGhlIHBhZ2UgKQppLmUuIGJpdHMgMjAgdG8gMzEuCgpPbiB6L0FyY2hpdGVjdHVyZSBpbiBsaW51eCB3ZSBjdXJyZW50bHkgbWFrZSB1cCBhbiBhZGRyZXNzIGZyb20gNCBwYXJ0cy4KVGhlIHJlZ2lvbiBpbmRleCBiaXRzIChSWCkgMC0zMiB3ZSBjdXJyZW50bHkgdXNlIGJpdHMgMjItMzIKVGhlIHNlZ21lbnQgaW5kZXggKFNYKSBiZWluZyBiaXRzIDMzLTQzClRoZSBwYWdlIGluZGV4IChQWCkgYmVpbmcgYml0cyAgNDQtNTEKVGhlIGJ5dGUgaW5kZXggKEJYKSBiZWluZyBiaXRzICA1Mi02MwoKTm90ZXM6CjEpIHMvMzkwIGhhcyBubyBQTUQgc28gdGhlIFBNRCBpcyByZWFsbHkgdGhlIFBHRCBhbHNvLgpBIGxvdCBvZiB0aGlzIHN0dWZmIGlzIGRlZmluZWQgaW4gcGd0YWJsZS5oLgoKMikgQWxzbyBzZWVpbmcgYXMgcy8zOTAncyBwYWdlIGluZGV4ZXMgYXJlIG9ubHkgMWsgIGluIHNpemUgCihiaXRzIDEyLTE5IHggNCBieXRlcyBwZXIgcHRlICkgd2UgdXNlIDEgKCBwYWdlIDRrICkKdG8gbWFrZSB0aGUgYmVzdCB1c2Ugb2YgbWVtb3J5IGJ5IHVwZGF0aW5nIDQgc2VnbWVudCBpbmRpY2VzIAplbnRyaWVzIGVhY2ggdGltZSB3ZSBtZXNzIHdpdGggYSBQTUQgJiB1c2Ugb2Zmc2V0cyAKMCwxMDI0LDIwNDggJiAzMDcyIGluIHRoaXMgcGFnZSBhcyBmb3Igb3VyIHNlZ21lbnQgaW5kZXhlcy4KT24gei9BcmNoaXRlY3R1cmUgb3VyIHBhZ2UgaW5kZXhlcyBhcmUgbm93IDJrIGluIHNpemUKKCBiaXRzIDEyLTE5IHggOCBieXRlcyBwZXIgcHRlICkgd2UgZG8gYSBzaW1pbGFyIHRyaWNrCmJ1dCBvbmx5IG1lc3Mgd2l0aCAyIHNlZ21lbnQgaW5kaWNlcyBlYWNoIHRpbWUgd2UgbWVzcyB3aXRoCmEgUE1ELgoKMykgQXMgei9BcmNoaXRlY3R1cmUgc3VwcG9ydHMgdXAgdG8gYSBtYXNzaXZlIDUtbGV2ZWwgcGFnZSB0YWJsZSBsb29rdXAgd2UKY2FuIG9ubHkgdXNlIDMgY3VycmVudGx5IG9uIExpbnV4ICggYXMgdGhpcyBpcyBhbGwgdGhlIGdlbmVyaWMga2VybmVsCmN1cnJlbnRseSBzdXBwb3J0cyApIGhvd2V2ZXIgdGhpcyBtYXkgY2hhbmdlIGluIGZ1dHVyZQp0aGlzIGFsbG93cyB1cyB0byBhY2Nlc3MgKCBhY2NvcmRpbmcgdG8gbXkgc3VtcyApCjRUQiBvZiB2aXJ0dWFsIHN0b3JhZ2UgcGVyIHByb2Nlc3MgaS5lLgo0MDk2KjUxMihQVEVTKSoxMDI0KFBNRFMpKjIwNDgoUEdEKSA9IDQzOTgwNDY1MTExMDQgYnl0ZXMsCmVub3VnaCBmb3IgYW5vdGhlciAyIG9yIDMgb2YgeWVhcnMgSSB0aGluayA6LSkuCnRvIGRvIHRoaXMgd2UgdXNlIGEgcmVnaW9uLXRoaXJkLXRhYmxlIGRlc2lnbmF0aW9uIHR5cGUgaW4Kb3VyIGFkZHJlc3Mgc3BhY2UgY29udHJvbCByZWdpc3RlcnMuCiAKClRoZSBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSBLZXJuZWwgVGFzayBTdHJ1Y3R1cmUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpFYWNoIHByb2Nlc3MvdGhyZWFkIHVuZGVyIExpbnV4IGZvciBTMzkwIGhhcyBpdHMgb3duIGtlcm5lbCB0YXNrX3N0cnVjdApkZWZpbmVkIGluIGxpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaApUaGUgUzM5MCBvbiBpbml0aWFsaXNhdGlvbiAmIHJlc3VtaW5nIG9mIGEgcHJvY2VzcyBvbiBhIGNwdSBzZXRzCnRoZSBfX0xDX0tFUk5FTF9TVEFDSyB2YXJpYWJsZSBpbiB0aGUgc3BhcmUgcHJlZml4IGFyZWEgZm9yIHRoaXMgY3B1Cih3aGljaCB3ZSB1c2UgZm9yIHBlci1wcm9jZXNzb3IgZ2xvYmFscykuCgpUaGUga2VybmVsIHN0YWNrIHBvaW50ZXIgaXMgaW50aW1hdGVseSB0aWVkIHdpdGggdGhlIHRhc2sgc3RydWN0dXJlIGZvcgplYWNoIHByb2Nlc3NvciBhcyBmb2xsb3dzLgoKICAgICAgICAgICAgICAgICAgICAgIHMvMzkwCiAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAqICAxIHBhZ2Uga2VybmVsIHN0YWNrICoKCSAgICAqICAgICAgICAoIDRLICkgICAgICAgICoKICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICogICAxIHBhZ2UgdGFza19zdHJ1Y3QgKiAgICAgICAgCiAgICAgICAgICAgICogICAgICAgICggNEsgKSAgICAgICAgKgo4SyBhbGlnbmVkICAqKioqKioqKioqKioqKioqKioqKioqKiogCgogICAgICAgICAgICAgICAgIHovQXJjaGl0ZWN0dXJlCiAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAqICAyIHBhZ2Uga2VybmVsIHN0YWNrICoKCSAgICAqICAgICAgICAoIDhLICkgICAgICAgICoKICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICogIDIgcGFnZSB0YXNrX3N0cnVjdCAgKiAgICAgICAgCiAgICAgICAgICAgICogICAgICAgICggOEsgKSAgICAgICAgKgoxNksgYWxpZ25lZCAqKioqKioqKioqKioqKioqKioqKioqKiogCgpXaGF0IHRoaXMgbWVhbnMgaXMgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGRlZGljYXRlIGFueSByZWdpc3RlciBvciBnbG9iYWwgdmFyaWFibGUKdG8gcG9pbnQgdG8gdGhlIGN1cnJlbnQgcnVubmluZyBwcm9jZXNzICYgY2FuIHJldHJpZXZlIGl0IHdpdGggdGhlIGZvbGxvd2luZwp2ZXJ5IHNpbXBsZSBjb25zdHJ1Y3QgZm9yIHMvMzkwICYgb25lIHZlcnkgc2ltaWxhciBmb3Igei9BcmNoaXRlY3R1cmUuCgpzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqIGdldF9jdXJyZW50KHZvaWQpCnsKICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJlbnQ7CiAgICAgICAgX19hc21fXygibGhpICAgJTAsLTgxOTJcblx0IgogICAgICAgICAgICAgICAgIm5yICAgICUwLDE1IgogICAgICAgICAgICAgICAgOiAiPXIiIChjdXJyZW50KSApOwogICAgICAgIHJldHVybiBjdXJyZW50Owp9CgppLmUuIGp1c3QgYW5kaW5nIHRoZSBjdXJyZW50IGtlcm5lbCBzdGFjayBwb2ludGVyIHdpdGggdGhlIG1hc2sgLTgxOTIuClRoYW5rZnVsbHkgYmVjYXVzZSBMaW51eCBkb2Vzbid0IGhhdmUgc3VwcG9ydCBmb3IgbmVzdGVkIElPIGludGVycnVwdHMKJiBvdXIgZGV2aWNlcyBoYXZlIGxhcmdlIGJ1ZmZlcnMgY2FuIHN1cnZpdmUgaW50ZXJydXB0cyBiZWluZyBzaHV0IGZvciAKc2hvcnQgYW1vdW50cyBvZiB0aW1lIHdlIGRvbid0IG5lZWQgYSBzZXBhcmF0ZSBzdGFjayBmb3IgaW50ZXJydXB0cy4KCgoKClJlZ2lzdGVyIFVzYWdlICYgU3RhY2tmcmFtZXMgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KT3ZlcnZpZXc6Ci0tLS0tLS0tLQpUaGlzIGlzIHRoZSBjb2RlIHRoYXQgZ2NjIHByb2R1Y2VzIGF0IHRoZSB0b3AgJiB0aGUgYm90dG9tIG9mCmVhY2ggZnVuY3Rpb24uIEl0IHVzdWFsbHkgaXMgZmFpcmx5IGNvbnNpc3RlbnQgJiBzaW1pbGFyIGZyb20gCmZ1bmN0aW9uIHRvIGZ1bmN0aW9uICYgaWYgeW91IGtub3cgaXRzIGxheW91dCB5b3UgY2FuIHByb2JhYmx5Cm1ha2Ugc29tZSBoZWFkd2F5IGluIGZpbmRpbmcgdGhlIHVsdGltYXRlIGNhdXNlIG9mIGEgcHJvYmxlbQphZnRlciBhIGNyYXNoIHdpdGhvdXQgYSBzb3VyY2UgbGV2ZWwgZGVidWdnZXIuCgpOb3RlOiBUbyBmb2xsb3cgc3RhY2tmcmFtZXMgcmVxdWlyZXMgYSBrbm93bGVkZ2Ugb2YgQyBvciBQYXNjYWwgJgpsaW1pdGVkIGtub3dsZWRnZSBvZiBvbmUgYXNzZW1ibHkgbGFuZ3VhZ2UuCgpJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB0aGVyZSBhcmUgc29tZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZQpzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIHN0YWNrIGxheW91dHMgYXMgdGhlIHovQXJjaGl0ZWN0dXJlIHN0YWNrIGxheW91dCBkaWRuJ3QgaGF2ZQp0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgbGlua2FnZSBmb3JtYXRzLgoKR2xvc3Nhcnk6Ci0tLS0tLS0tLQphbGxvY2E6ClRoaXMgaXMgYSBidWlsdCBpbiBjb21waWxlciBmdW5jdGlvbiBmb3IgcnVudGltZSBhbGxvY2F0aW9uCm9mIGV4dHJhIHNwYWNlIG9uIHRoZSBjYWxsZXJzIHN0YWNrIHdoaWNoIGlzIG9idmlvdXNseSBmcmVlZAp1cCBvbiBmdW5jdGlvbiBleGl0ICggZS5nLiB0aGUgY2FsbGVyIG1heSBjaG9vc2UgdG8gYWxsb2NhdGUgbm90aGluZwpvZiBhIGJ1ZmZlciBvZiA0ayBpZiByZXF1aXJlZCBmb3IgdGVtcG9yYXJ5IHB1cnBvc2VzICksIGl0IGdlbmVyYXRlcyAKdmVyeSBlZmZpY2llbnQgY29kZSAoIGEgZmV3IGN5Y2xlcyAgKSB3aGVuIGNvbXBhcmVkIHRvIGFsdGVybmF0aXZlcyAKbGlrZSBtYWxsb2MuCgphdXRvbWF0aWNzOiBUaGVzZSBhcmUgbG9jYWwgdmFyaWFibGVzIG9uIHRoZSBzdGFjaywKaS5lIHRoZXkgYXJlbid0IGluIHJlZ2lzdGVycyAmIHRoZXkgYXJlbid0IHN0YXRpYy4KCmJhY2stY2hhaW46ClRoaXMgaXMgYSBwb2ludGVyIHRvIHRoZSBzdGFjayBwb2ludGVyIGJlZm9yZSBlbnRlcmluZyBhCmZyYW1lZCBmdW5jdGlvbnMgKCBzZWUgZnJhbWVsZXNzIGZ1bmN0aW9uICkgcHJvbG9ndWUgZ290IGJ5IApkZXJlZmVyZW5jaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSBjdXJyZW50IHN0YWNrIHBvaW50ZXIsCiBpLmUuIGdvdCBieSBhY2Nlc3NpbmcgdGhlIDMyIGJpdCB2YWx1ZSBhdCB0aGUgc3RhY2sgcG9pbnRlcnMKY3VycmVudCBsb2NhdGlvbi4KCmJhc2UtcG9pbnRlcjoKVGhpcyBpcyBhIHBvaW50ZXIgdG8gdGhlIGJhY2sgb2YgdGhlIGxpdGVyYWwgcG9vbCB3aGljaAppcyBhbiBhcmVhIGp1c3QgYmVoaW5kIGVhY2ggcHJvY2VkdXJlIHVzZWQgdG8gc3RvcmUgY29uc3RhbnRzCmluIGVhY2ggZnVuY3Rpb24uCgpjYWxsLWNsb2JiZXJlZDogVGhlIGNhbGxlciBwcm9iYWJseSBuZWVkcyB0byBzYXZlIHRoZXNlIHJlZ2lzdGVycyBpZiB0aGVyZSAKaXMgc29tZXRoaW5nIG9mIHZhbHVlIGluIHRoZW0sIG9uIHRoZSBzdGFjayBvciBlbHNld2hlcmUgYmVmb3JlIG1ha2luZyBhIApjYWxsIHRvIGFub3RoZXIgcHJvY2VkdXJlIHNvIHRoYXQgaXQgY2FuIHJlc3RvcmUgaXQgbGF0ZXIuCgplcGlsb2d1ZToKVGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciB0byByZXR1cm4gdG8gdGhlIGNhbGxlci4KCmZyYW1lbGVzcy1mdW5jdGlvbgpBIGZyYW1lbGVzcyBmdW5jdGlvbiBpbiBMaW51eCBmb3IgczM5MCAmIHovQXJjaGl0ZWN0dXJlIGlzIG9uZSB3aGljaCBkb2Vzbid0IApuZWVkIG1vcmUgdGhhbiB0aGUgcmVnaXN0ZXIgc2F2ZSBhcmVhICggOTYgYnl0ZXMgb24gcy8zOTAsIDE2MCBvbiB6L0FyY2hpdGVjdHVyZSApCmdpdmVuIHRvIGl0IGJ5IHRoZSBjYWxsZXIuCkEgZnJhbWVsZXNzIGZ1bmN0aW9uIG5ldmVyOgoxKSBTZXRzIHVwIGEgYmFjayBjaGFpbi4KMikgQ2FsbHMgYWxsb2NhLgozKSBDYWxscyBvdGhlciBub3JtYWwgZnVuY3Rpb25zCjQpIEhhcyBhdXRvbWF0aWNzLgoKR09ULXBvaW50ZXI6ClRoaXMgaXMgYSBwb2ludGVyIHRvIHRoZSBnbG9iYWwtb2Zmc2V0LXRhYmxlIGluIEVMRgooIEV4ZWN1dGFibGUgTGlua2FibGUgRm9ybWF0LCBMaW51eCdlcyBtb3N0IGNvbW1vbiBleGVjdXRhYmxlIGZvcm1hdCApLAphbGwgZ2xvYmFscyAmIHNoYXJlZCBsaWJyYXJ5IG9iamVjdHMgYXJlIGZvdW5kIHVzaW5nIHRoaXMgcG9pbnRlci4KCmxhenktYmluZGluZwpFTEYgc2hhcmVkIGxpYnJhcmllcyBhcmUgdHlwaWNhbGx5IG9ubHkgbG9hZGVkIHdoZW4gcm91dGluZXMgaW4gdGhlIHNoYXJlZApsaWJyYXJ5IGFyZSBhY3R1YWxseSBmaXJzdCBjYWxsZWQgYXQgcnVudGltZS4gVGhpcyBpcyBsYXp5IGJpbmRpbmcuCgpwcm9jZWR1cmUtbGlua2FnZS10YWJsZQpUaGlzIGlzIGEgdGFibGUgZm91bmQgZnJvbSB0aGUgR09UIHdoaWNoIGNvbnRhaW5zIHBvaW50ZXJzIHRvIHJvdXRpbmVzCmluIG90aGVyIHNoYXJlZCBsaWJyYXJpZXMgd2hpY2ggY2FuJ3QgYmUgY2FsbGVkIHRvIGJ5IGVhc2llciBtZWFucy4KCnByb2xvZ3VlOgpUaGUgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyIHRvIHNldCB1cCB0aGUgc3RhY2sgZnJhbWUuCgpvdXRnb2luZy1hcmdzOgpUaGlzIGlzIGV4dHJhIGFyZWEgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpZiB0aGUKcGFyYW1ldGVycyBmb3IgdGhlIGNhbGxlZSdzIGNhbm5vdCBhbGwgYmUgcHV0IGluIHJlZ2lzdGVycywgdGhlIHNhbWUKYXJlYSBjYW4gYmUgcmV1c2VkIGJ5IGVhY2ggZnVuY3Rpb24gdGhlIGNhbGxlciBjYWxscy4KCnJvdXRpbmUtZGVzY3JpcHRvcjoKQSBDT0ZGICBleGVjdXRhYmxlIGZvcm1hdCBiYXNlZCBjb25jZXB0IG9mIGEgcHJvY2VkdXJlIHJlZmVyZW5jZSAKYWN0dWFsbHkgYmVpbmcgOCBieXRlcyBvciBtb3JlIGFzIG9wcG9zZWQgdG8gYSBzaW1wbGUgcG9pbnRlciB0byB0aGUgcm91dGluZS4KVGhpcyBpcyB0eXBpY2FsbHkgZGVmaW5lZCBhcyBmb2xsb3dzClJvdXRpbmUgRGVzY3JpcHRvciBvZmZzZXQgMD1Qb2ludGVyIHRvIEZ1bmN0aW9uClJvdXRpbmUgRGVzY3JpcHRvciBvZmZzZXQgND1Qb2ludGVyIHRvIFRhYmxlIG9mIENvbnRlbnRzClRoZSB0YWJsZSBvZiBjb250ZW50cy9UT0MgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGEgR09UIHBvaW50ZXIuCiYgaXQgbWVhbnMgdGhhdCBzaGFyZWQgbGlicmFyaWVzIGV0Yy4gY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIHNldmVyYWwKZW52aXJvbm1lbnRzIGVhY2ggd2l0aCB0aGVpciBvd24gVE9DLgoKIApzdGF0aWMtY2hhaW46IFRoaXMgaXMgdXNlZCBpbiBuZXN0ZWQgZnVuY3Rpb25zIGEgY29uY2VwdCBhZG9wdGVkIGZyb20gcGFzY2FsIApieSBnY2Mgbm90IHVzZWQgaW4gYW5zaSBDIG9yIEMrKyAoIGFsdGhvdWdoIHF1aXRlIHVzZWZ1bCApLCBiYXNpY2FsbHkgaXQKaXMgYSBwb2ludGVyIHVzZWQgdG8gcmVmZXJlbmNlIGxvY2FsIHZhcmlhYmxlcyBvZiBlbmNsb3NpbmcgZnVuY3Rpb25zLgpZb3UgbWlnaHQgY29tZSBhY3Jvc3MgdGhpcyBzdHVmZiBvbmNlIG9yIHR3aWNlIGluIHlvdXIgbGlmZXRpbWUuCgplLmcuClRoZSBmdW5jdGlvbiBiZWxvdyBzaG91bGQgcmV0dXJuIDExIHRob3VnaCBnY2MgbWF5IGdldCB1cHNldCAmIHRvc3Mgd2FybmluZ3MgCmFib3V0IHVudXNlZCB2YXJpYWJsZXMuCmludCBGdW5jdGlvbkEoaW50IGEpCnsKCWludCBiOwoJRnVuY3Rpb25DKGludCBjKQoJewoJCWI9YysxOwoJfQoJRnVuY3Rpb25DKDEwKTsKCXJldHVybihiKTsKfQoKCnMvMzkwICYgei9BcmNoaXRlY3R1cmUgUmVnaXN0ZXIgdXNhZ2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpyMCAgICAgICB1c2VkIGJ5IHN5c2NhbGxzL2Fzc2VtYmx5ICAgICAgICAgICAgICAgICAgY2FsbC1jbG9iYmVyZWQKcjEJIHVzZWQgYnkgc3lzY2FsbHMvYXNzZW1ibHkgICAgICAgICAgICAgICAgICBjYWxsLWNsb2JiZXJlZApyMiAgICAgICBhcmd1bWVudCAwIC8gcmV0dXJuIHZhbHVlIDAgICAgICAgICAgICAgICAgY2FsbC1jbG9iYmVyZWQKcjMgICAgICAgYXJndW1lbnQgMSAvIHJldHVybiB2YWx1ZSAxIChpZiBsb25nIGxvbmcpIGNhbGwtY2xvYmJlcmVkCnI0ICAgICAgIGFyZ3VtZW50IDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsLWNsb2JiZXJlZApyNSAgICAgICBhcmd1bWVudCAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbC1jbG9iYmVyZWQKcjYJIGFyZ3VtZW50IDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZApyNyAgICAgICBwb2ludGVyLXRvIGFyZ3VtZW50cyA1IHRvIC4uLiAgICAgICAgICAgICAgc2F2ZWQgICAgICAKcjggICAgICAgdGhpcyAmIHRoYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkCnI5ICAgICAgIHRoaXMgJiB0aGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZApyMTAgICAgICBzdGF0aWMtY2hhaW4gKCBpZiBuZXN0ZWQgZnVuY3Rpb24gKSAgICAgICAgc2F2ZWQKcjExICAgICAgZnJhbWUtcG9pbnRlciAoIGlmIGZ1bmN0aW9uIHVzZWQgYWxsb2NhICkgIHNhdmVkCnIxMiAgICAgIGdvdC1wb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZApyMTMgICAgICBiYXNlLXBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWQKcjE0ICAgICAgcmV0dXJuLWFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkCnIxNSAgICAgIHN0YWNrLXBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZAoKZjAgICAgICAgYXJndW1lbnQgMCAvIHJldHVybiB2YWx1ZSAoIGZsb2F0L2RvdWJsZSApIGNhbGwtY2xvYmJlcmVkCmYyICAgICAgIGFyZ3VtZW50IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsLWNsb2JiZXJlZApmNCAgICAgICB6L0FyY2hpdGVjdHVyZSBhcmd1bWVudCAyICAgICAgICAgICAgICAgICAgc2F2ZWQKZjYgICAgICAgei9BcmNoaXRlY3R1cmUgYXJndW1lbnQgMyAgICAgICAgICAgICAgICAgIHNhdmVkClRoZSByZW1haW5pbmcgZmxvYXRpbmcgcG9pbnRzCmYxLGYzLGY1IGY3LWYxNSBhcmUgY2FsbC1jbG9iYmVyZWQuCgpOb3RlczoKLS0tLS0tCjEpIFRoZSBvbmx5IHJlcXVpcmVtZW50IGlzIHRoYXQgcmVnaXN0ZXJzIHdoaWNoIGFyZSB1c2VkCmJ5IHRoZSBjYWxsZWUgYXJlIHNhdmVkLCBlLmcuIHRoZSBjb21waWxlciBpcyBwZXJmZWN0bHkKY2FwYWJsZSBvZiB1c2luZyByMTEgZm9yIHB1cnBvc2VzIG90aGVyIHRoYW4gYSBmcmFtZSBhCmZyYW1lIHBvaW50ZXIgaWYgYSBmcmFtZSBwb2ludGVyIGlzIG5vdCBuZWVkZWQuCjIpIEluIGZ1bmN0aW9ucyB3aXRoIHZhcmlhYmxlIGFyZ3VtZW50cyBlLmcuIHByaW50ZiB0aGUgY2FsbGluZyBwcm9jZWR1cmUgCmlzIGlkZW50aWNhbCB0byBvbmUgd2l0aG91dCB2YXJpYWJsZSBhcmd1bWVudHMgJiB0aGUgc2FtZSBudW1iZXIgb2YgCnBhcmFtZXRlcnMuIEhvd2V2ZXIsIHRoZSBwcm9sb2d1ZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHNvbWV3aGF0IG1vcmUKaGFpcnkgb3dpbmcgdG8gaXQgaGF2aW5nIHRvIG1vdmUgdGhlc2UgcGFyYW1ldGVycyB0byB0aGUgc3RhY2sgdG8KZ2V0IHZhX3N0YXJ0LCB2YV9hcmcgJiB2YV9lbmQgdG8gd29yay4KMykgQWNjZXNzIHJlZ2lzdGVycyBhcmUgY3VycmVudGx5IHVudXNlZCBieSBnY2MgYnV0IGFyZSB1c2VkIGluCnRoZSBrZXJuZWwuIFBvc3NpYmlsaXRpZXMgZXhpc3QgdG8gdXNlIHRoZW0gYXQgdGhlIG1vbWVudCBmb3IKdGVtcG9yYXJ5IHN0b3JhZ2UgYnV0IGl0IGlzbid0IHJlY29tbWVuZGVkLgo0KSBPbmx5IDQgb2YgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyBhcmUgdXNlZCBmb3IKcGFyYW1ldGVyIHBhc3NpbmcgYXMgb2xkZXIgbWFjaGluZXMgc3VjaCBhcyBHMyBvbmx5IGhhdmUgb25seSA0CiYgaXQga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGNvbXBhdGlibGUgd2l0aCBvdGhlciBjb21waWxlcnMuCkhvd2V2ZXIgd2l0aCBJRUVFIGZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbiB1bmRlciBsaW51eCBvbiB0aGUKb2xkZXIgbWFjaGluZXMgeW91IGFyZSBmcmVlIHRvIHVzZSB0aGUgb3RoZXIgMTIuCjUpIEEgbG9uZyBsb25nIG9yIGRvdWJsZSBwYXJhbWV0ZXIgY2Fubm90IGJlIGhhdmUgdGhlIApmaXJzdCA0IGJ5dGVzIGluIGEgcmVnaXN0ZXIgJiB0aGUgc2Vjb25kIGZvdXIgYnl0ZXMgaW4gdGhlIApvdXRnb2luZyBhcmdzIGFyZWEuIEl0IG11c3QgYmUgcHVyZWx5IGluIHRoZSBvdXRnb2luZyBhcmdzCmFyZWEgaWYgY3Jvc3NpbmcgdGhpcyBib3VuZGFyeS4KNikgRmxvYXRpbmcgcG9pbnQgcGFyYW1ldGVycyBhcmUgbWl4ZWQgd2l0aCBvdXRnb2luZyBhcmdzCm9uIHRoZSBvdXRnb2luZyBhcmdzIGFyZWEgaW4gdGhlIG9yZGVyIHRoZSBhcmUgcGFzc2VkIGluIGFzIHBhcmFtZXRlcnMuCjcpIEZsb2F0aW5nIHBvaW50IGFyZ3VtZW50cyAyICYgMyBhcmUgc2F2ZWQgaW4gdGhlIG91dGdvaW5nIGFyZ3MgYXJlYSBmb3IgCnovQXJjaGl0ZWN0dXJlCgoKU3RhY2sgRnJhbWUgTGF5b3V0Ci0tLS0tLS0tLS0tLS0tLS0tLQpzLzM5MCAgICAgei9BcmNoaXRlY3R1cmUKMCAgICAgICAgIDAgICAgICAgICAgICAgYmFjayBjaGFpbiAoIGEgMCBoZXJlIHNpZ25pZmllcyBlbmQgb2YgYmFjayBjaGFpbiApCjQgICAgICAgICA4ICAgICAgICAgICAgIGVvcyAoIGVuZCBvZiBzdGFjaywgbm90IHVzZWQgb24gTGludXggZm9yIFMzOTAgdXNlZCBpbiBvdGhlciBsaW5rYWdlIGZvcm1hdHMgKQo4ICAgICAgICAgMTYgICAgICAgICAgICBnbHVlIHVzZWQgaW4gb3RoZXIgcy8zOTAgbGlua2FnZSBmb3JtYXRzIGZvciBzYXZlZCByb3V0aW5lIGRlc2NyaXB0b3JzIGV0Yy4KMTIgICAgICAgIDI0ICAgICAgICAgICAgZ2x1ZSB1c2VkIGluIG90aGVyIHMvMzkwIGxpbmthZ2UgZm9ybWF0cyBmb3Igc2F2ZWQgcm91dGluZSBkZXNjcmlwdG9ycyBldGMuCjE2ICAgICAgICAzMiAgICAgICAgICAgIHNjcmF0Y2ggYXJlYQoyMCAgICAgICAgNDAgICAgICAgICAgICBzY3JhdGNoIGFyZWEKMjQgICAgICAgIDQ4ICAgICAgICAgICAgc2F2ZWQgcjYgb2YgY2FsbGVyIGZ1bmN0aW9uCjI4ICAgICAgICA1NiAgICAgICAgICAgIHNhdmVkIHI3IG9mIGNhbGxlciBmdW5jdGlvbgozMiAgICAgICAgNjQgICAgICAgICAgICBzYXZlZCByOCBvZiBjYWxsZXIgZnVuY3Rpb24KMzYgICAgICAgIDcyICAgICAgICAgICAgc2F2ZWQgcjkgb2YgY2FsbGVyIGZ1bmN0aW9uCjQwICAgICAgICA4MCAgICAgICAgICAgIHNhdmVkIHIxMCBvZiBjYWxsZXIgZnVuY3Rpb24KNDQgICAgICAgIDg4ICAgICAgICAgICAgc2F2ZWQgcjExIG9mIGNhbGxlciBmdW5jdGlvbgo0OCAgICAgICAgOTYgICAgICAgICAgICBzYXZlZCByMTIgb2YgY2FsbGVyIGZ1bmN0aW9uCjUyICAgICAgICAxMDQgICAgICAgICAgIHNhdmVkIHIxMyBvZiBjYWxsZXIgZnVuY3Rpb24KNTYgICAgICAgIDExMiAgICAgICAgICAgc2F2ZWQgcjE0IG9mIGNhbGxlciBmdW5jdGlvbgo2MCAgICAgICAgMTIwICAgICAgICAgICBzYXZlZCByMTUgb2YgY2FsbGVyIGZ1bmN0aW9uCjY0ICAgICAgICAxMjggICAgICAgICAgIHNhdmVkIGY0IG9mIGNhbGxlciBmdW5jdGlvbgo3MiAgICAgICAgMTMyICAgICAgICAgICBzYXZlZCBmNiBvZiBjYWxsZXIgZnVuY3Rpb24KODAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkCjk2ICAgICAgICAxNjAgICAgICAgICAgIG91dGdvaW5nIGFyZ3MgcGFzc2VkIGZyb20gY2FsbGVyIHRvIGNhbGxlZQo5Nit4ICAgICAgMTYwK3ggICAgICAgICBwb3NzaWJsZSBzdGFjayBhbGlnbm1lbnQgKCA4IGJ5dGVzIGRlc2lyYWJsZSApCjk2K3greSAgICAxNjAreCt5ICAgICAgIGFsbG9jYSBzcGFjZSBvZiBjYWxsZXIgKCBpZiB1c2VkICkKOTYreCt5K3ogIDE2MCt4K3kreiAgICAgYXV0b21hdGljcyBvZiBjYWxsZXIgKCBpZiB1c2VkICkKMCAgICAgICAgICAgICAgICAgICAgICAgYmFjay1jaGFpbgoKQSBzYW1wbGUgcHJvZ3JhbSB3aXRoIGNvbW1lbnRzLgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDb21tZW50cyBvbiB0aGUgZnVuY3Rpb24gdGVzdAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoxKSBJdCBkaWRuJ3QgbmVlZCB0byBzZXQgdXAgYSBwb2ludGVyIHRvIHRoZSBjb25zdGFudCBwb29sIGdwcjEzIGFzIGl0IGlzbid0IHVzZWQKKCA6LSggKS4KMikgVGhpcyBpcyBhIGZyYW1lbGVzcyBmdW5jdGlvbiAmIG5vIHN0YWNrIGlzIGJvdWdodC4KMykgVGhlIGNvbXBpbGVyIHdhcyBjbGV2ZXIgZW5vdWdoIHRvIHJlY29nbmlzZSB0aGF0IGl0IGNvdWxkIHJldHVybiB0aGUKdmFsdWUgaW4gcjIgYXMgd2VsbCBhcyB1c2UgaXQgZm9yIHRoZSBwYXNzZWQgaW4gcGFyYW1ldGVyICggOi0pICkuCjQpIFRoZSBiYXNyICggYnJhbmNoIHJlbGF0aXZlICYgc2F2ZSApIHRyaWNrIHdvcmtzIGFzIGZvbGxvd3MgdGhlIGluc3RydWN0aW9uIApoYXMgYSBzcGVjaWFsIGNhc2Ugd2l0aCByMCxyMCB3aXRoIHNvbWUgaW5zdHJ1Y3Rpb24gb3BlcmFuZHMgaXMgdW5kZXJzdG9vZCBhcyAKdGhlIGxpdGVyYWwgdmFsdWUgMCwgc29tZSByaXNjIGFyY2hpdGVjdHVyZXMgYWxzbyBkbyB0aGlzICkuIFNvIG5vdwp3ZSBhcmUgYnJhbmNoaW5nIHRvIHRoZSBuZXh0IGFkZHJlc3MgJiB0aGUgYWRkcmVzcyBuZXcgcHJvZ3JhbSBjb3VudGVyIGlzCmluIHIxMyxzbyBub3cgd2Ugc3VidHJhY3QgdGhlIHNpemUgb2YgdGhlIGZ1bmN0aW9uIHByb2xvZ3VlIHdlIGhhdmUgZXhlY3V0ZWQKKyB0aGUgc2l6ZSBvZiB0aGUgbGl0ZXJhbCBwb29sIHRvIGdldCB0byB0aGUgdG9wIG9mIHRoZSBsaXRlcmFsIHBvb2wKMDA0MDAzN2MgaW50IHRlc3QoaW50IGIpCnsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGdW5jdGlvbiBwcm9sb2d1ZSBiZWxvdwogIDQwMDM3YzoJOTAgZGUgZjAgMzQgCXN0bQklcjEzLCVyMTQsNTIoJXIxNSkgIyBTYXZlIHJlZ2lzdGVycyByMTMgJiByMTQKICA0MDAzODA6CTBkIGQwICAgICAgIAliYXNyCSVyMTMsJXIwICAgICAgICAgICAjIFNldCB1cCBwb2ludGVyIHRvIGNvbnN0YW50IHBvb2wgdXNpbmcKICA0MDAzODI6CWE3IGRhIGZmIGZhIAlhaGkJJXIxMywtNiAgICAgICAgICAgICMgYmFzciB0cmljawoJcmV0dXJuKDUrYik7CgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEh1Z2UgbWFpbiBwcm9ncmFtCiAgNDAwMzg2OglhNyAyYSAwMCAwNSAJYWhpCSVyMiw1ICAgICAgICAgICAgICAjIGFkZCA1IHRvIHIyCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRnVuY3Rpb24gZXBpbG9ndWUgYmVsb3cgCiAgNDAwMzhhOgk5OCBkZSBmMCAzNCAJbG0JJXIxMywlcjE0LDUyKCVyMTUpICMgcmVzdG9yZSByZWdpc3RlcnMgcjEzICYgMTQKICA0MDAzOGU6CTA3IGZlICAgICAgIAlicgklcjE0ICAgICAgICAgICAgICAgIyByZXR1cm4KfQoKQ29tbWVudHMgb24gdGhlIGZ1bmN0aW9uIG1haW4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KMSkgVGhlIGNvbXBpbGVyIGRpZCB0aGlzIGZ1bmN0aW9uIG9wdGltYWxseSAoIDgtKSApCgpMaXRlcmFsIHBvb2wgZm9yIG1haW4uCjQwMDM5MDoJZmYgZmYgZmYgZWMgCS5sb25nIDB4ZmZmZmZmZWMKbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pCnsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGdW5jdGlvbiBwcm9sb2d1ZSBiZWxvdwogIDQwMDM5NDoJOTAgYmYgZjAgMmMgCXN0bQklcjExLCVyMTUsNDQoJXIxNSkgIyBTYXZlIG5lY2Vzc2FyeSByZWdpc3RlcnMKICA0MDAzOTg6CTE4IDBmICAgICAgIAlscgklcjAsJXIxNSAgICAgICAgICAgIyBjb3B5IHN0YWNrIHBvaW50ZXIgdG8gcjAKICA0MDAzOWE6CWE3IGZhIGZmIGEwIAlhaGkJJXIxNSwtOTYgICAgICAgICAgICMgTWFrZSBhcmVhIGZvciBjYWxsZWUgc2F2aW5nIAogIDQwMDM5ZToJMGQgZDAgICAgICAgCWJhc3IJJXIxMywlcjAgICAgICAgICAgICMgU2V0IHVwIHIxMyB0byBwb2ludCB0bwogIDQwMDNhMDoJYTcgZGEgZmYgZjAgCWFoaQklcjEzLC0xNiAgICAgICAgICAgIyBsaXRlcmFsIHBvb2wKICA0MDAzYTQ6CTUwIDAwIGYwIDAwIAlzdAklcjAsMCglcjE1KSAgICAgICAgIyBTYXZlIGJhY2tjaGFpbgoKCXJldHVybih0ZXN0KDUpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWFpbiBQcm9ncmFtIEJlbG93CiAgNDAwM2E4Ogk1OCBlMCBkMCAwMCAJbAklcjE0LDAoJXIxMykgICAgICAgIyBsb2FkIHJlbGF0aXZlIGFkZHJlc3Mgb2YgdGVzdCBmcm9tCgkJCQkJCSAgICAgICAgICAgIyBsaXRlcmFsIHBvb2wKICA0MDAzYWM6CWE3IDI4IDAwIDA1IAlsaGkJJXIyLDUgICAgICAgICAgICAgICMgU2V0IGZpcnN0IHBhcmFtZXRlciB0byA1CiAgNDAwM2IwOgk0ZCBlZSBkMCAwMCAJYmFzCSVyMTQsMCglcjE0LCVyMTMpICAjIGp1bXAgdG8gdGVzdCBzZXR0aW5nIHIxNCBhcyByZXR1cm4KCQkJCQkJCSAgICMgYWRkcmVzcyB1c2luZyBicmFuY2ggJiBzYXZlIGluc3RydWN0aW9uLgoKCQkJCQkJCSAgICMgRnVuY3Rpb24gRXBpbG9ndWUgYmVsb3cKICA0MDAzYjQ6CTk4IGJmIGYwIDhjIAlsbQklcjExLCVyMTUsMTQwKCVyMTUpIyBSZXN0b3JlIG5lY2Vzc2FyeSByZWdpc3RlcnMuCiAgNDAwM2I4OgkwNyBmZSAgICAgICAJYnIJJXIxNCAgICAgICAgICAgICAgICMgcmV0dXJuIHRvIGRvIHByb2dyYW0gZXhpdCAKfQoKCkNvbXBpbGVyIHVwZGF0ZXMKLS0tLS0tLS0tLS0tLS0tLQoKbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pCnsKICA0MDA0ZmM6CTkwIDdmIGYwIDFjICAgICAgIAlzdG0JJXI3LCVyMTUsMjgoJXIxNSkKICA0MDA1MDA6CWE3IGQ1IDAwIDA0ICAgICAgIAlicmFzCSVyMTMsNDAwNTA4IDxtYWluKzB4Yz4KICA0MDA1MDQ6CTAwIDQwIDA0IGY0ICAgICAgIAkubG9uZwkweDAwNDAwNGY0IAogICMgY29tcGlsZXIgbm93IHB1dHMgY29uc3RhbnQgcG9vbCBpbiBjb2RlIHRvIHNvIGl0IHNhdmVzIGFuIGluc3RydWN0aW9uIAogIDQwMDUwODoJMTggMGYgICAgICAgICAgICAgCWxyCSVyMCwlcjE1CiAgNDAwNTBhOglhNyBmYSBmZiBhMCAgICAgICAJYWhpCSVyMTUsLTk2CiAgNDAwNTBlOgk1MCAwMCBmMCAwMCAgICAgICAJc3QJJXIwLDAoJXIxNSkKCXJldHVybih0ZXN0KDUpKTsKICA0MDA1MTI6CTU4IDEwIGQwIDAwICAgICAgIAlsCSVyMSwwKCVyMTMpCiAgNDAwNTE2OglhNyAyOCAwMCAwNSAgICAgICAJbGhpCSVyMiw1CiAgNDAwNTFhOgkwZCBlMSAgICAgICAgICAgICAJYmFzcgklcjE0LCVyMQogICMgY29tcGlsZXIgYWRkcyAxIGV4dHJhIGluc3RydWN0aW9uIHRvIGVwaWxvZ3VlIHRoaXMgaXMgZG9uZSB0bwogICMgYXZvaWQgcHJvY2Vzc29yIHBpcGVsaW5lIHN0YWxscyBvd2luZyB0byBkYXRhIGRlcGVuZGVuY2llcyBvbiBnNSAmCiAgIyBhYm92ZSBhcyByZWdpc3RlciAxNCBpbiB0aGUgb2xkIGNvZGUgd2FzIG5lZWRlZCBkaXJlY3RseSBhZnRlciBiZWluZyBsb2FkZWQgCiAgIyBieSB0aGUgbG0JJXIxMSwlcjE1LDE0MCglcjE1KSBmb3IgdGhlIGJyICUxNC4KICA0MDA1MWM6CTU4IDQwIGYwIDk4ICAgICAgIAlsCSVyNCwxNTIoJXIxNSkKICA0MDA1MjA6CTk4IDdmIGYwIDdjICAgICAgIAlsbQklcjcsJXIxNSwxMjQoJXIxNSkKICA0MDA1MjQ6CTA3IGY0ICAgICAgICAgICAgIAlicgklcjQKfQoKCkhhcnRtdXQgKCBvdXIgY29tcGlsZXIgZGV2ZWxvcGVyICkgYWxzbyBoYXMgYmVlbiB0aHJlYXRlbmluZyB0byB0YWtlIG91dCB0aGUKc3RhY2sgYmFja2NoYWluIGluIG9wdGltaXNlZCBjb2RlIGFzIHRoaXMgYWxzbyBjYXVzZXMgcGlwZWxpbmUgc3RhbGxzLCB5b3UKaGF2ZSBiZWVuIHdhcm5lZC4KCjY0IGJpdCB6L0FyY2hpdGVjdHVyZSBjb2RlIGRpc2Fzc2VtYmx5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpJZiB5b3UgdW5kZXJzdGFuZCB0aGUgc3R1ZmYgYWJvdmUgeW91J2xsIHVuZGVyc3RhbmQgdGhlIHN0dWZmCmJlbG93IHRvbyBzbyBJJ2xsIGF2b2lkIHJlcGVhdGluZyBteXNlbGYgJiBqdXN0IHNheSB0aGF0IApzb21lIG9mIHRoZSBpbnN0cnVjdGlvbnMgaGF2ZSBnJ3Mgb24gdGhlIGVuZCBvZiB0aGVtIHRvIGluZGljYXRlCnRoZXkgYXJlIDY0IGJpdCAmIHRoZSBzdGFjayBvZmZzZXRzIGFyZSBhIGJpZ2dlciwgCnRoZSBvbmx5IG90aGVyIGRpZmZlcmVuY2UgeW91J2xsIGZpbmQgYmV0d2VlbiAzMiAmIDY0IGJpdCBpcyB0aGF0CndlIG5vdyB1c2UgZjQgJiBmNiBmb3IgZmxvYXRpbmcgcG9pbnQgYXJndW1lbnRzIG9uIDY0IGJpdC4KMDAwMDAwMDA4MDAwMDViMCA8dGVzdD46CmludCB0ZXN0KGludCBiKQp7CglyZXR1cm4oNStiKTsKICAgIDgwMDAwNWIwOglhNyAyYSAwMCAwNSAgICAgICAJYWhpCSVyMiw1CiAgICA4MDAwMDViNDoJYjkgMTQgMDAgMjIgICAgICAgCWxnZnIJJXIyLCVyMiAjIGRvd25jYXN0IHRvIGludGVnZXIKICAgIDgwMDAwNWI4OgkwNyBmZSAgICAgICAgICAgICAJYnIJJXIxNAogICAgODAwMDA1YmE6CTA3IDA3ICAgICAgICAgICAgIAliY3IJMCwlcjcKCgp9CgowMDAwMDAwMDgwMDAwNWJjIDxtYWluPjoKbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pCnsgCiAgICA4MDAwMDViYzoJZWIgYmYgZjAgNTggMDAgMjQgCXN0bWcJJXIxMSwlcjE1LDg4KCVyMTUpCiAgICA4MDAwMDVjMjoJYjkgMDQgMDAgMWYgICAgICAgCWxncgklcjEsJXIxNQogICAgODAwMDA1YzY6CWE3IGZiIGZmIDYwICAgICAgIAlhZ2hpCSVyMTUsLTE2MAogICAgODAwMDA1Y2E6CWUzIDEwIGYwIDAwIDAwIDI0IAlzdGcJJXIxLDAoJXIxNSkKCXJldHVybih0ZXN0KDUpKTsKICAgIDgwMDAwNWQwOglhNyAyOSAwMCAwNSAgICAgICAJbGdoaQklcjIsNQogICAgIyBicmFzbCBhbGxvd3MganVtcHMgPiA2NGsgJiBpcyBvdmVya2lsbCBoZXJlIGJyYXMgd291bGQgZG8gZnVuZQogICAgODAwMDA1ZDQ6CWMwIGU1IGZmIGZmIGZmIGVlIAlicmFzbAklcjE0LDgwMDAwNWIwIDx0ZXN0PiAKICAgIDgwMDAwNWRhOgllMyA0MCBmMSAxMCAwMCAwNCAJbGcJJXI0LDI3MiglcjE1KQogICAgODAwMDA1ZTA6CWViIGJmIGYwIGY4IDAwIDA0IAlsbWcJJXIxMSwlcjE1LDI0OCglcjE1KQogICAgODAwMDA1ZTY6CTA3IGY0ICAgICAgICAgICAgIAlicgklcjQKfQoKCgpDb21waWxpbmcgcHJvZ3JhbXMgZm9yIGRlYnVnZ2luZyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZ2R3YXJmLTIgbm93IHdvcmtzIGl0IHNob3VsZCBiZSBjb25zaWRlcmVkIHRoZSBkZWZhdWx0IGRlYnVnZ2luZwpmb3JtYXQgZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUgYXMgaXQgaXMgbW9yZSByZWxpYWJsZSBmb3IgZGVidWdnaW5nCnNoYXJlZCBsaWJyYXJpZXMsICBub3JtYWwgLWcgZGVidWdnaW5nIHdvcmtzIG11Y2ggYmV0dGVyIG5vdwpUaGFua3MgdG8gdGhlIElCTSBqYXZhIGNvbXBpbGVyIGRldmVsb3BlcnMgYnVnIHJlcG9ydHMuIAoKVGhpcyBpcyB0eXBpY2FsbHkgZG9uZSBhZGRpbmcvYXBwZW5kaW5nIHRoZSBmbGFncyAtZyBvciAtZ2R3YXJmLTIgdG8gdGhlIApDRkxBR1MgJiBMREZMQUdTIHZhcmlhYmxlcyBNYWtlZmlsZSBvZiB0aGUgcHJvZ3JhbSBjb25jZXJuZWQuCgpJZiB1c2luZyBnZGIgJiB5b3Ugd291bGQgbGlrZSBhY2N1cmF0ZSBkaXNwbGF5cyBvZiByZWdpc3RlcnMgJgogc3RhY2sgdHJhY2VzIGNvbXBpbGUgd2l0aG91dCBvcHRpbWlzYXRpb24gaS5lIG1ha2Ugc3VyZQp0aGF0IHRoZXJlIGlzIG5vIC1PMiBvciBzaW1pbGFyIG9uIHRoZSBDRkxBR1MgbGluZSBvZiB0aGUgTWFrZWZpbGUgJgp0aGUgZW1pdHRlZCBnY2MgY29tbWFuZHMsIG9idmlvdXNseSB0aGlzIHdpbGwgcHJvZHVjZSB3b3JzZSBjb2RlIAooIG5vdCBhZHZpc2FibGUgZm9yIHNoaXBtZW50ICkgYnV0IGl0IGlzIGFuICBhaWQgdG8gdGhlIGRlYnVnZ2luZyBwcm9jZXNzLgoKVGhpcyBhaWRzIGRlYnVnZ2luZyBiZWNhdXNlIHRoZSBjb21waWxlciB3aWxsIGNvcHkgcGFyYW1ldGVycyBwYXNzZWQgaW4KaW4gcmVnaXN0ZXJzIG9udG8gdGhlIHN0YWNrIHNvIGJhY2t0cmFjaW5nICYgbG9va2luZyBhdCBwYXNzZWQgaW4KcGFyYW1ldGVycyB3aWxsIHdvcmssIGhvd2V2ZXIgc29tZSBsYXJnZXIgcHJvZ3JhbXMgd2hpY2ggdXNlIGlubGluZSBmdW5jdGlvbnMKd2lsbCBub3QgY29tcGlsZSB3aXRob3V0IG9wdGltaXNhdGlvbi4KCkRlYnVnZ2luZyB3aXRoIG9wdGltaXNhdGlvbiBoYXMgc2luY2UgbXVjaCBpbXByb3ZlZCBhZnRlciBmaXhpbmcKc29tZSBidWdzLCBwbGVhc2UgbWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgZ2RiLTUuMCBvciBsYXRlciBkZXZlbG9wZWQgCmFmdGVyIE5vdicyMDAwLgoKRmlndXJpbmcgb3V0IGdjYyBjb21waWxlIGVycm9ycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklmIHlvdSBhcmUgZ2V0dGluZyBhIGxvdCBvZiBzeW50YXggZXJyb3JzIGNvbXBpbGluZyBhIHByb2dyYW0gJiB0aGUgcHJvYmxlbQppc24ndCBibGF0YW50bHkgb2J2aW91cyBmcm9tIHRoZSBzb3VyY2UuCkl0IG9mdGVuIGhlbHBzIHRvIGp1c3QgcHJlcHJvY2VzcyB0aGUgZmlsZSwgdGhpcyBpcyBkb25lIHdpdGggdGhlIC1FCm9wdGlvbiBpbiBnY2MuCldoYXQgdGhpcyBkb2VzIGlzIHRoYXQgaXQgcnVucyB0aHJvdWdoIHRoZSB2ZXJ5IGZpcnN0IHBoYXNlIG9mIGNvbXBpbGF0aW9uCiggY29tcGlsYXRpb24gaW4gZ2NjIGlzIGRvbmUgaW4gc2V2ZXJhbCBzdGFnZXMgJiBnY2MgY2FsbHMgbWFueSBwcm9ncmFtcyB0bwphY2hpZXZlIGl0cyBlbmQgcmVzdWx0ICkgd2l0aCB0aGUgLUUgb3B0aW9uIGdjYyBqdXN0IGNhbGxzIHRoZSBnY2MgcHJlcHJvY2Vzc29yIChjcHApLgpUaGUgYyBwcmVwcm9jZXNzb3IgZG9lcyB0aGUgZm9sbG93aW5nLCBpdCBqb2lucyBhbGwgdGhlIGZpbGVzICNpbmNsdWRlZCB0b2dldGhlcgpyZWN1cnNpdmVseSAoICNpbmNsdWRlIGZpbGVzIGNhbiAjaW5jbHVkZSBvdGhlciBmaWxlcyApICYgYWxzbyB0aGUgYyBmaWxlIHlvdSB3aXNoIHRvIGNvbXBpbGUuCkl0IHB1dHMgYSBmdWxseSBxdWFsaWZpZWQgcGF0aCBvZiB0aGUgI2luY2x1ZGVkIGZpbGVzIGluIGEgY29tbWVudCAmIGl0CmRvZXMgbWFjcm8gZXhwYW5zaW9uLgpUaGlzIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nIGJlY2F1c2UKMSkgWW91IGNhbiBkb3VibGUgY2hlY2sgd2hldGhlciB0aGUgZmlsZXMgeW91IGV4cGVjdCB0byBiZSBpbmNsdWRlZCBhcmUgdGhlIG9uZXMKdGhhdCBhcmUgYmVpbmcgaW5jbHVkZWQgKCBlLmcuIGRvdWJsZSBjaGVjayB0aGF0IHlvdSBhcmVuJ3QgZ29pbmcgdG8gdGhlIGkzODYgYXNtIGRpcmVjdG9yeSApLgoyKSBDaGVjayB0aGF0IG1hY3JvIGRlZmluaXRpb25zIGFyZW4ndCBjbGFzaGluZyB3aXRoIHR5cGVkZWZzLAozKSBDaGVjayB0aGF0IGRlZmluaXRpb25zIGFyZW4ndCBiZWluZyB1c2VkIGJlZm9yZSB0aGV5IGFyZSBiZWluZyBpbmNsdWRlZC4KNCkgSGVscHMgcHV0IHRoZSBsaW5lIGVtaXR0aW5nIHRoZSBlcnJvciB1bmRlciB0aGUgbWljcm9zY29wZSBpZiBpdCBjb250YWlucyBtYWNyb3MuCgpGb3IgY29udmVuaWVuY2UgdGhlIExpbnV4IGtlcm5lbCdzIG1ha2VmaWxlIHdpbGwgZG8gcHJlcHJvY2Vzc2luZyBhdXRvbWF0aWNhbGx5IGZvciB5b3UKYnkgc3VmZml4aW5nIHRoZSBmaWxlIHlvdSB3YW50IGJ1aWx0IHdpdGggLmkgKCBpbnN0ZWFkIG9mIC5vICkKCmUuZy4KZnJvbSB0aGUgbGludXggZGlyZWN0b3J5IHR5cGUKbWFrZSBhcmNoL3MzOTAva2VybmVsL3NpZ25hbC5pCnRoaXMgd2lsbCBidWlsZAoKczM5MC1nY2MgLURfX0tFUk5FTF9fIC1JL2hvbWUxL2JhcnJvdy9saW51eC9pbmNsdWRlIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyCi1mbm8tc3RyaWN0LWFsaWFzaW5nIC1EX19TTVBfXyAtcGlwZSAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAgIC1FIGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMKPiBhcmNoL3MzOTAva2VybmVsL3NpZ25hbC5pICAKCk5vdyBsb29rIGF0IHNpZ25hbC5pIHlvdSBzaG91bGQgc2VlIHNvbWV0aGluZyBsaWtlLgoKCiMgMSAiL2hvbWUxL2JhcnJvdy9saW51eC9pbmNsdWRlL2FzbS90eXBlcy5oIiAxCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdW1vZGVfdDsKdHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgX19zODsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdTg7CnR5cGVkZWYgX19zaWduZWRfXyBzaG9ydCBfX3MxNjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3UxNjsKCklmIGluc3RlYWQgeW91IGFyZSBnZXR0aW5nIGVycm9ycyBmdXJ0aGVyIGRvd24gZS5nLgp1bmtub3duIGluc3RydWN0aW9uOjI1MTUgIm1vdmUubCIgb3IgYmV0dGVyIHN0aWxsIHVua25vd24gaW5zdHJ1Y3Rpb246MjUxNSAKIkZpeG1lIG5vdCBpbXBsZW1lbnRlZCB5ZXQsIGNhbGwgTWFydGluIiB5b3UgYXJlIHByb2JhYmx5IGFyZSBhdHRlbXB0aW5nIHRvIGNvbXBpbGUgc29tZSBjb2RlIAptZWFudCBmb3IgYW5vdGhlciBhcmNoaXRlY3R1cmUgb3IgY29kZSB0aGF0IGlzIHNpbXBseSBub3QgaW1wbGVtZW50ZWQsIHdpdGggYSBmaXhtZSBzdGF0ZW1lbnQKc3R1Y2sgaW50byB0aGUgaW5saW5lIGFzc2VtYmx5IGNvZGUgc28gdGhhdCB0aGUgYXV0aG9yIG9mIHRoZSBmaWxlIG5vdyBrbm93cyBoZSBoYXMgd29yayB0byBkby4KVG8gbG9vayBhdCB0aGUgYXNzZW1ibHkgZW1pdHRlZCBieSBnY2MganVzdCBiZWZvcmUgaXQgaXMgYWJvdXQgdG8gY2FsbCBnYXMgKCB0aGUgZ251IGFzc2VtYmxlciApCnVzZSB0aGUgLVMgb3B0aW9uLgpBZ2FpbiBmb3IgeW91ciBjb252ZW5pZW5jZSB0aGUgTGludXgga2VybmVsJ3MgTWFrZWZpbGUgd2lsbCBob2xkIHlvdXIgaGFuZCAmCmRvIGFsbCB0aGlzIGRvbmtleSB3b3JrIGZvciB5b3UgYWxzbyBieSBidWlsZGluZyB0aGUgZmlsZSB3aXRoIHRoZSAucyBzdWZmaXguCmUuZy4KZnJvbSB0aGUgTGludXggZGlyZWN0b3J5IHR5cGUgCm1ha2UgYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwucyAKCnMzOTAtZ2NjIC1EX19LRVJORUxfXyAtSS9ob21lMS9iYXJyb3cvbGludXgvaW5jbHVkZSAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlcgotZm5vLXN0cmljdC1hbGlhc2luZyAtRF9fU01QX18gLXBpcGUgLWZuby1zdHJlbmd0aC1yZWR1Y2UgIC1TIGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMgCi1vIGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLnMgIAoKClRoaXMgd2lsbCBvdXRwdXQgc29tZXRoaW5nIGxpa2UsICggcGxlYXNlIG5vdGUgdGhlIGNvbnN0YW50IHBvb2wgJiB0aGUgdXNlZnVsIGNvbW1lbnRzCmluIHRoZSBwcm9sb2d1ZSB0byBnaXZlIHlvdSBhIGhhbmQgYXQgaW50ZXJwcmV0aW5nIGl0ICkuCgouTEM1NDoKCS5zdHJpbmcJIm1pc2FsaWduZWQgKF9fdTE2ICopIGluIF9feGNoZ1xuIgouTEM1NzoKCS5zdHJpbmcJIm1pc2FsaWduZWQgKF9fdTMyICopIGluIF9feGNoZ1xuIgouTCRQRzE6ICMgUG9vbCBzeXNfc2lnc3VzcGVuZAouTEMxOTI6CgkubG9uZwktMjYyNDAxCi5MQzE5MzoKCS5sb25nCS0xCi5MQzE5NDoKCS5sb25nCXNjaGVkdWxlLS5MJFBHMQouTEMxOTU6CgkubG9uZwlkb19zaWduYWwtLkwkUEcxCgkuYWxpZ24gNAouZ2xvYmwgc3lzX3NpZ3N1c3BlbmQKCS50eXBlCSBzeXNfc2lnc3VzcGVuZCxAZnVuY3Rpb24Kc3lzX3NpZ3N1c3BlbmQ6CiMJbGVhZiBmdW5jdGlvbiAgICAgICAgICAgMAojCWF1dG9tYXRpY3MgICAgICAgICAgICAgIDE2CiMJb3V0Z29pbmcgYXJncyAgICAgICAgICAgMAojCW5lZWQgZnJhbWUgcG9pbnRlciAgICAgIDAKIwljYWxsIGFsbG9jYSAgICAgICAgICAgICAwCiMJaGFzIHZhcmFyZ3MgICAgICAgICAgICAgMAojCWluY29taW5nIGFyZ3MgKHN0YWNrKSAgIDAKIwlmdW5jdGlvbiBsZW5ndGggICAgICAgICAxNjgKCVNUTQk4LDE1LDMyKDE1KQoJTFIJMCwxNQoJQUhJCTE1LC0xMTIKCUJBU1IJMTMsMAouTCRDTzE6CUFISQkxMywuTCRQRzEtLkwkQ08xCglTVAkwLDAoMTUpCglMUiAgICA4LDIKCU4gICAgIDUsLkxDMTkyLS5MJFBHMSgxMykgCgpBZGRpbmcgLWcgdG8gdGhlIGFib3ZlIG91dHB1dCBtYWtlcyB0aGUgb3V0cHV0IGV2ZW4gbW9yZSB1c2VmdWwKZS5nLiB0eXBpbmcKbWFrZSBDQzo9InMzOTAtZ2NjIC1nIiBrZXJuZWwvc2NoZWQucwoKd2hpY2ggY29tcGlsZXMuCnMzOTAtZ2NjIC1nIC1EX19LRVJORUxfXyAtSS9ob21lL2JhcnJvdy9saW51eC0yLjMvaW5jbHVkZSAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciAtZm5vLXN0cmljdC1hbGlhc2luZyAtcGlwZSAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAgIC1TIGtlcm5lbC9zY2hlZC5jIC1vIGtlcm5lbC9zY2hlZC5zIAoKYWxzbyBvdXRwdXRzIHN0YWJzICggZGVidWdnZXIgKSBpbmZvLCBmcm9tIHRoaXMgaW5mbyB5b3UgY2FuIGZpbmQgb3V0IHRoZQpvZmZzZXRzICYgc2l6ZXMgb2YgdmFyaW91cyBlbGVtZW50cyBpbiBzdHJ1Y3R1cmVzLgplLmcuIHRoZSBzdGFiIGZvciB0aGUgc3RydWN0dXJlCnN0cnVjdCBybGltaXQgewoJdW5zaWduZWQgbG9uZwlybGltX2N1cjsKCXVuc2lnbmVkIGxvbmcJcmxpbV9tYXg7Cn07CmlzCi5zdGFicyAicmxpbWl0OlQoMTUxLDIpPXM4cmxpbV9jdXI6KDAsNSksMCwzMjtybGltX21heDooMCw1KSwzMiwzMjs7IiwxMjgsMCwwLDAKZnJvbSB0aGlzIHN0YWIgeW91IGNhbiBzZWUgdGhhdCAKcmxpbWl0X2N1ciBzdGFydHMgYXQgYml0IG9mZnNldCAwICYgaXMgMzIgYml0cyBpbiBzaXplCnJsaW1pdF9tYXggc3RhcnRzIGF0IGJpdCBvZmZzZXQgMzIgJiBpcyAzMiBiaXRzIGluIHNpemUuCgoKRGVidWdnaW5nIFRvb2xzOgo9PT09PT09PT09PT09PT09CgpvYmpkdW1wCj09PT09PT0KVGhpcyBpcyBhIHRvb2wgd2l0aCBtYW55IG9wdGlvbnMgdGhlIG1vc3QgdXNlZnVsIGJlaW5nICggaWYgY29tcGlsZWQgd2l0aCAtZykuCm9iamR1bXAgLS1zb3VyY2UgPHZpY3RpbSBwcm9ncmFtIG9yIG9iamVjdCBmaWxlPiA+IDx2aWN0aW1zIGRlYnVnIGxpc3RpbmcgPgoKClRoZSB3aG9sZSBrZXJuZWwgY2FuIGJlIGNvbXBpbGVkIGxpa2UgdGhpcyAoIERvaW5nIHRoaXMgd2lsbCBtYWtlIGEgMTdNQiBrZXJuZWwKJiBhIDIwMCBNQiBsaXN0aW5nICkgaG93ZXZlciB5b3UgaGF2ZSB0byBzdHJpcCBpdCBiZWZvcmUgYnVpbGRpbmcgdGhlIGltYWdlCnVzaW5nIHRoZSBzdHJpcCBjb21tYW5kIHRvIG1ha2UgaXQgYSBtb3JlIHJlYXNvbmFibGUgc2l6ZSB0byBib290IGl0LgoKQSBzb3VyY2UvYXNzZW1ibHkgbWl4ZWQgZHVtcCBvZiB0aGUga2VybmVsIGNhbiBiZSBkb25lIHdpdGggdGhlIGxpbmUKb2JqZHVtcCAtLXNvdXJjZSB2bWxpbnV4ID4gdm1saW51eC5sc3QKQWxzbywgaWYgdGhlIGZpbGUgaXNuJ3QgY29tcGlsZWQgLWcsIHRoaXMgd2lsbCBvdXRwdXQgYXMgbXVjaCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KYXMgaXQgY2FuIChlLmcuIGZ1bmN0aW9uIG5hbWVzKS4gVGhpcyBpcyB2ZXJ5IHNsb3cgYXMgaXQgc3BlbmRzIGxvdHMKb2YgdGltZSBzZWFyY2hpbmcgZm9yIGRlYnVnZ2luZyBpbmZvLiBUaGUgZm9sbG93aW5nIHNlbGYgZXhwbGFuYXRvcnkgbGluZSBzaG91bGQgYmUgdXNlZCAKaW5zdGVhZCBpZiB0aGUgY29kZSBpc24ndCBjb21waWxlZCAtZywgYXMgaXQgaXMgbXVjaCBmYXN0ZXI6Cm9iamR1bXAgLS1kaXNhc3NlbWJsZS1hbGwgLS1zeW1zIHZtbGludXggPiB2bWxpbnV4LmxzdCAgCgpBcyBoYXJkIGRyaXZlIHNwYWNlIGlzIHZhbHVhYmxlIG1vc3Qgb2YgdXMgdXNlIHRoZSBmb2xsb3dpbmcgYXBwcm9hY2guCjEpIExvb2sgYXQgdGhlIGVtaXR0ZWQgcHN3IG9uIHRoZSBjb25zb2xlIHRvIGZpbmQgdGhlIGNyYXNoIGFkZHJlc3MgaW4gdGhlIGtlcm5lbC4KMikgTG9vayBhdCB0aGUgZmlsZSBTeXN0ZW0ubWFwICggaW4gdGhlIGxpbnV4IGRpcmVjdG9yeSApIHByb2R1Y2VkIHdoZW4gYnVpbGRpbmcgCnRoZSBrZXJuZWwgdG8gZmluZCB0aGUgY2xvc2VzdCBhZGRyZXNzIGxlc3MgdGhhbiB0aGUgY3VycmVudCBQU1cgdG8gZmluZCB0aGUKb2ZmZW5kaW5nIGZ1bmN0aW9uLgozKSB1c2UgZ3JlcCBvciBzaW1pbGFyIHRvIHNlYXJjaCB0aGUgc291cmNlIHRyZWUgbG9va2luZyBmb3IgdGhlIHNvdXJjZSBmaWxlCiB3aXRoIHRoaXMgZnVuY3Rpb24gaWYgeW91IGRvbid0IGtub3cgd2hlcmUgaXQgaXMuCjQpIHJlYnVpbGQgdGhpcyBvYmplY3QgZmlsZSB3aXRoIC1nIG9uLCBhcyBhbiBleGFtcGxlIHN1cHBvc2UgdGhlIGZpbGUgd2FzCiggL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLm8gKSAKNSkgQXNzdW1pbmcgdGhlIGZpbGUgd2l0aCB0aGUgZXJyb25lb3VzIGZ1bmN0aW9uIGlzIHNpZ25hbC5jIE1vdmUgdG8gdGhlIGJhc2Ugb2YgdGhlIApMaW51eCBzb3VyY2UgdHJlZS4KNikgcm0gL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLm8KNykgbWFrZSAvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwubwo4KSB3YXRjaCB0aGUgZ2NjIGNvbW1hbmQgbGluZSBlbWl0dGVkCjkpIHR5cGUgaXQgaW4gYWdhaW4gb3IgYWx0ZXJuYXRpdmVseSBjdXQgJiBwYXN0ZSBpdCBvbiB0aGUgY29uc29sZSBhZGRpbmcgdGhlIC1nIG9wdGlvbi4KMTApIG9iamR1bXAgLS1zb3VyY2UgYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwubyA+IHNpZ25hbC5sc3QKVGhpcyB3aWxsIG91dHB1dCB0aGUgc291cmNlICYgdGhlIGFzc2VtYmx5IGludGVybWl4ZWQsIGFzIHRoZSBzbmlwcGV0IGJlbG93IHNob3dzClRoaXMgd2lsbCB1bmZvcnR1bmF0ZWx5IG91dHB1dCBhZGRyZXNzZXMgd2hpY2ggYXJlbid0IHRoZSBzYW1lCmFzIHRoZSBrZXJuZWwgb25lcyB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGFyb3VuZCB0aGUgbWVudGFsIGFyaXRobWV0aWMKYnkgcGxheWluZyB3aXRoIHRoZSAtLWFkanVzdC12bWEgcGFyYW1ldGVyIHRvIG9iamR1bXAuCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxwKQp7CiAgICAgIGEwOiAgICAgICAxOCAzNCAgICAgICAgICAgbHIgICAgICAlcjMsJXI0CiAgICAgIGEyOiAgICAgICBhNyAzYSAwMyBiYyAgICAgYWhpICAgICAlcjMsOTU2CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlKCIgICAgbGhpICAgMSwtMVxuIgogICAgICBhNjogICAgICAgYTcgMTggZmYgZmYgICAgIGxoaSAgICAgJXIxLC0xCiAgICAgIGFhOiAgICAgICAxZiAwMCAgICAgICAgICAgc2xyICAgICAlcjAsJXIwCiAgICAgIGFjOiAgICAgICBiYSAwMSAzMCAwMCAgICAgY3MgICAgICAlcjAsJXIxLDAoJXIzKQogICAgICBiMDogICAgICAgYTcgNDQgZmYgZmQgICAgIGptICAgICAgYWEgPHN5c19zaWdzdXNwZW5kKzB4MmU+CiAgICAgICAgc2F2ZXNldCA9IGN1cnJlbnQtPmJsb2NrZWQ7CiAgICAgIGI0OiAgICAgICBkMiAwNyBmMCA2OCAgICAgbXZjICAgICAxMDQoOCwlcjE1KSw5NzIoJXI0KQogICAgICBiODogICAgICAgNDMgY2MKICAgICAgICByZXR1cm4gKHNldC0+c2lnWzBdICYgbWFzaykgIT0gMDsKfSAKCjYpIElmIGRlYnVnZ2luZyB1bmRlciBWTSBnbyBkb3duIHRvIHRoYXQgc2VjdGlvbiBpbiB0aGUgZG9jdW1lbnQgZm9yIG1vcmUgaW5mby4KCgpJIG5vdyBoYXZlIGEgdG9vbCB3aGljaCB0YWtlcyB0aGUgcGFpbiBvdXQgb2YgLS1hZGp1c3Qtdm1hCiYgeW91IGFyZSBhYmxlIHRvIGRvIHNvbWV0aGluZyBsaWtlCm1ha2UgL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMubHN0CiYgaXQgYXV0b21hdGljYWxseSBnZW5lcmF0ZXMgdGhlIGNvcnJlY3RseSByZWxvY2F0ZWQgZW50cmllcyBmb3IKdGhlIHRleHQgc2VnbWVudCBpbiB0cmFwcy5sc3QuClRoaXMgdG9vbCBpcyBub3cgc3RhbmRhcmQgaW4gbGludXggZGlzdHJvJ3MgaW4gc2NyaXB0cy9tYWtlbHN0CgpzdHJhY2U6Ci0tLS0tLS0KUS4gV2hhdCBpcyBpdCA/CkEuIEl0IGlzIGEgdG9vbCBmb3IgaW50ZXJjZXB0aW5nIGNhbGxzIHRvIHRoZSBrZXJuZWwgJiBsb2dnaW5nIHRoZW0KdG8gYSBmaWxlICYgb24gdGhlIHNjcmVlbi4KClEuIFdoYXQgdXNlIGlzIGl0ID8KQS4gWW91IGNhbiB1c2UgaXQgdG8gZmluZCBvdXQgd2hhdCBmaWxlcyBhIHBhcnRpY3VsYXIgcHJvZ3JhbSBvcGVucy4KCgoKRXhhbXBsZSAxCi0tLS0tLS0tLQpJZiB5b3Ugd2FudGVkIHRvIGtub3cgZG9lcyBwaW5nIHdvcmsgYnV0IGRpZG4ndCBoYXZlIHRoZSBzb3VyY2UgCnN0cmFjZSBwaW5nIC1jIDEgMTI3LjAuMC4xICAKJiB0aGVuIGxvb2sgYXQgdGhlIG1hbiBwYWdlcyBmb3IgZWFjaCBvZiB0aGUgc3lzY2FsbHMgYmVsb3csCiggSW4gZmFjdCB0aGlzIGlzIHNvbWV0aW1lcyBlYXNpZXIgdGhhbiBsb29raW5nIGF0IHNvbWUgc3BhZ2hldHRpCnNvdXJjZSB3aGljaCBjb25kaXRpb25hbGx5IGNvbXBpbGVzIGZvciBzZXZlcmFsIGFyY2hpdGVjdHVyZXMgKS4KTm90IGV2ZXJ5dGhpbmcgdGhhdCBpdCB0aHJvd3Mgb3V0IG5lZWRzIHRvIG1ha2Ugc2Vuc2UgaW1tZWRpYXRlbHkuCgpKdXN0IGxvb2tpbmcgcXVpY2tseSB5b3UgY2FuIHNlZSB0aGF0IGl0IGlzIG1ha2luZyB1cCBhIFJBVyBzb2NrZXQKZm9yIHRoZSBJQ01QIHByb3RvY29sLgpEb2luZyBhbiBhbGFybSgxMCkgZm9yIGEgMTAgc2Vjb25kIHRpbWVvdXQKJiBkb2luZyBhIGdldHRpbWVvZmRheSBjYWxsIGJlZm9yZSAmIGFmdGVyIGVhY2ggcmVhZCB0byBzZWUgCmhvdyBsb25nIHRoZSByZXBsaWVzIHRvb2ssICYgd3JpdGluZyBzb21lIHRleHQgdG8gc3Rkb3V0IHNvIHRoZSB1c2VyCmhhcyBhbiBpZGVhIHdoYXQgaXMgZ29pbmcgb24uCgpzb2NrZXQoUEZfSU5FVCwgU09DS19SQVcsIElQUFJPVE9fSUNNUCkgPSAzCmdldHVpZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAKc2V0dWlkKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMApzdGF0KCIvdXNyL3NoYXJlL2xvY2FsZS9DL2xpYmMuY2F0IiwgMHhiZmZmZjEzNCkgPSAtMSBFTk9FTlQgKE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkpCnN0YXQoIi91c3Ivc2hhcmUvbG9jYWxlL2xpYmMvQyIsIDB4YmZmZmYxMzQpID0gLTEgRU5PRU5UIChObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5KQpzdGF0KCIvdXNyL2xvY2FsL3NoYXJlL2xvY2FsZS9DL2xpYmMuY2F0IiwgMHhiZmZmZjEzNCkgPSAtMSBFTk9FTlQgKE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkpCmdldHBpZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDM1MwpzZXRzb2Nrb3B0KDMsIFNPTF9TT0NLRVQsIFNPX0JST0FEQ0FTVCwgWzFdLCA0KSA9IDAKc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIFs0OTE1Ml0sIDQpID0gMApmc3RhdCgxLCB7c3RfbW9kZT1TX0lGQ0hSfDA2MjAsIHN0X3JkZXY9bWFrZWRldigzLCAxKSwgLi4ufSkgPSAwCm1tYXAoMCwgNDA5NiwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIC0xLCAwKSA9IDB4NDAwMDgwMDAKaW9jdGwoMSwgVENHRVRTLCB7Qjk2MDAgb3Bvc3QgaXNpZyBpY2Fub24gZWNobyAuLi59KSA9IDAKd3JpdGUoMSwgIlBJTkcgMTI3LjAuMC4xICgxMjcuMC4wLjEpOiA1NiBkIi4uLiwgNDJQSU5HIDEyNy4wLjAuMSAoMTI3LjAuMC4xKTogNTYgZGF0YSBieXRlcwopID0gNDIKc2lnYWN0aW9uKFNJR0lOVCwgezB4ODA0OWJhMCwgW10sIFNBX1JFU1RBUlR9LCB7U0lHX0RGTH0pID0gMCAKc2lnYWN0aW9uKFNJR0FMUk0sIHsweDgwNDk2MDAsIFtdLCBTQV9SRVNUQVJUfSwge1NJR19ERkx9KSA9IDAKZ2V0dGltZW9mZGF5KHs5NDg5MDQ3MTksIDEzODk1MX0sIE5VTEwpID0gMApzZW5kdG8oMywgIlwxMFwwRFwyMDFhXDFcMFwwXDE3I1wyMTc4XDMwN1wzNiIuLi4sIDY0LCAwLCB7c2luX2ZhbWlseT1BRl9JTkVULApzaW5fcG9ydD1odG9ucygwKSwgc2luX2FkZHI9aW5ldF9hZGRyKCIxMjcuMC4wLjEiKX0sIDE2KSA9IDY0CnNpZ2FjdGlvbihTSUdBTFJNLCB7MHg4MDQ5NjAwLCBbXSwgU0FfUkVTVEFSVH0sIHsweDgwNDk2MDAsIFtdLCBTQV9SRVNUQVJUfSkgPSAwCnNpZ2FjdGlvbihTSUdBTFJNLCB7MHg4MDQ5YmEwLCBbXSwgU0FfUkVTVEFSVH0sIHsweDgwNDk2MDAsIFtdLCBTQV9SRVNUQVJUfSkgPSAwCmFsYXJtKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAKcmVjdmZyb20oMywgIkVcMFwwVFwwMDA1XDBcMEBcMXxyXDE3N1wwXDBcMVwxNzciLi4uLCAxOTIsIDAsIAp7c2luX2ZhbWlseT1BRl9JTkVULCBzaW5fcG9ydD1odG9ucyg1MDg4MiksIHNpbl9hZGRyPWluZXRfYWRkcigiMTI3LjAuMC4xIil9LCBbMTZdKSA9IDg0CmdldHRpbWVvZmRheSh7OTQ4OTA0NzE5LCAxNjAyMjR9LCBOVUxMKSA9IDAKcmVjdmZyb20oMywgIkVcMFwwVFwwMDA2XDBcMFwzNzdcMVwyNzVwXDE3N1wwIi4uLiwgMTkyLCAwLCAKe3Npbl9mYW1pbHk9QUZfSU5FVCwgc2luX3BvcnQ9aHRvbnMoNTA4ODIpLCBzaW5fYWRkcj1pbmV0X2FkZHIoIjEyNy4wLjAuMSIpfSwgWzE2XSkgPSA4NApnZXR0aW1lb2ZkYXkoezk0ODkwNDcxOSwgMTY2OTUyfSwgTlVMTCkgPSAwCndyaXRlKDEsICI2NCBieXRlcyBmcm9tIDEyNy4wLjAuMTogaWNtcF9zZSIuLi4sIAo1NzY0IGJ5dGVzIGZyb20gMTI3LjAuMC4xOiBpY21wX3NlcT0wIHR0bD0yNTUgdGltZT0yOC4wIG1zCgpFeGFtcGxlIDIKLS0tLS0tLS0tCnN0cmFjZSBwYXNzd2QgMj4mMSB8IGdyZXAgb3Blbgpwcm9kdWNlcyB0aGUgZm9sbG93aW5nIG91dHB1dApvcGVuKCIvZXRjL2xkLnNvLmNhY2hlIiwgT19SRE9OTFkpICAgICAgPSAzCm9wZW4oIi9vcHQva2RlL2xpYi9saWJjLnNvLjUiLCBPX1JET05MWSkgPSAtMSBFTk9FTlQgKE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkpCm9wZW4oIi9saWIvbGliYy5zby41IiwgT19SRE9OTFkpICAgICAgICA9IDMKb3BlbigiL2RldiIsIE9fUkRPTkxZKSAgICAgICAgICAgICAgICAgID0gMwpvcGVuKCIvdmFyL3J1bi91dG1wIiwgT19SRE9OTFkpICAgICAgICAgPSAzCm9wZW4oIi9ldGMvcGFzc3dkIiwgT19SRE9OTFkpICAgICAgICAgICA9IDMKb3BlbigiL2V0Yy9zaGFkb3ciLCBPX1JET05MWSkgICAgICAgICAgID0gMwpvcGVuKCIvZXRjL2xvZ2luLmRlZnMiLCBPX1JET05MWSkgICAgICAgPSA0Cm9wZW4oIi9kZXYvdHR5IiwgT19SRE9OTFkpICAgICAgICAgICAgICA9IDQgCgpUaGUgMj4mMSBpcyBkb25lIHRvIHJlZGlyZWN0IHN0ZGVyciB0byBzdGRvdXQgJiBncmVwIGlzIHRoZW4gZmlsdGVyaW5nIHRoaXMgaW5wdXQgCnRocm91Z2ggdGhlIHBpcGUgZm9yIGVhY2ggbGluZSBjb250YWluaW5nIHRoZSBzdHJpbmcgb3Blbi4KCgpFeGFtcGxlIDMKLS0tLS0tLS0tCkdldHRpbmcgc29waGlzdGljYXRlZAp0ZWxuZXRkIGNyYXNoZXMgJiBJIGRvbid0IGtub3cgd2h5CgpTdGVwcwotLS0tLQoxKSBSZXBsYWNlIHRoZSBmb2xsb3dpbmcgbGluZSBpbiAvZXRjL2luZXRkLmNvbmYKdGVsbmV0ICBzdHJlYW0gIHRjcCAgICAgbm93YWl0ICByb290ICAgIC91c3Ivc2Jpbi9pbi50ZWxuZXRkIC1oIAp3aXRoCnRlbG5ldCAgc3RyZWFtICB0Y3AgICAgIG5vd2FpdCAgcm9vdCAgICAvYmxhaAoKMikgQ3JlYXRlIHRoZSBmaWxlIC9ibGFoIHdpdGggdGhlIGZvbGxvd2luZyBjb250ZW50cyB0byBzdGFydCB0cmFjaW5nIHRlbG5ldGQgCiMhL2Jpbi9iYXNoCi91c3IvYmluL3N0cmFjZSAtby90MSAtZiAvdXNyL3NiaW4vaW4udGVsbmV0ZCAtaCAKMykgY2htb2QgNzAwIC9ibGFoIHRvIG1ha2UgaXQgZXhlY3V0YWJsZSBvbmx5IHRvIHJvb3QKNCkKa2lsbGFsbCAtSFVQIGluZXRkCm9yIHBzIGF1eCB8IGdyZXAgaW5ldGQKZ2V0IGluZXRkJ3MgcHJvY2VzcyBpZAomIGtpbGwgLUhVUCBpbmV0ZCB0byByZXN0YXJ0IGl0LgoKSW1wb3J0YW50IG9wdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0KLW8gaXMgdXNlZCB0byB0ZWxsIHN0cmFjZSB0byBvdXRwdXQgdG8gYSBmaWxlIGluIG91ciBjYXNlIHQxIGluIHRoZSByb290IGRpcmVjdG9yeQotZiBpcyB0byBmb2xsb3cgY2hpbGRyZW4gaS5lLgplLmcgaW4gb3VyIGNhc2UgYWJvdmUgdGVsbmV0ZCB3aWxsIHN0YXJ0IHRoZSBsb2dpbiBwcm9jZXNzICYgc3Vic2VxdWVudGx5IGEgc2hlbGwgbGlrZSBiYXNoLgpZb3Ugd2lsbCBiZSBhYmxlIHRvIHRlbGwgd2hpY2ggaXMgd2hpY2ggZnJvbSB0aGUgcHJvY2VzcyBJRCdzIGxpc3RlZCBvbiB0aGUgbGVmdCBoYW5kIHNpZGUKb2YgdGhlIHN0cmFjZSBvdXRwdXQuCi1wPHBpZD4gd2lsbCB0ZWxsIHN0cmFjZSB0byBhdHRhY2ggdG8gYSBydW5uaW5nIHByb2Nlc3MsIHl1cCB0aGlzIGNhbiBiZSBkb25lIHByb3ZpZGVkCiBpdCBpc24ndCBiZWluZyB0cmFjZWQgb3IgZGVidWdnZWQgYWxyZWFkeSAmIHlvdSBoYXZlIGVub3VnaCBwcml2aWxlZ2VzLAp0aGUgcmVhc29uIDIgcHJvY2Vzc2VzIGNhbm5vdCB0cmFjZSBvciBkZWJ1ZyB0aGUgc2FtZSBwcm9ncmFtIGlzIHRoYXQgc3RyYWNlCmJlY29tZXMgdGhlIHBhcmVudCBwcm9jZXNzIG9mIHRoZSBvbmUgYmVpbmcgZGVidWdnZWQgJiBwcm9jZXNzZXMgKCB1bmxpa2UgcGVvcGxlICkKY2FuIGhhdmUgb25seSBvbmUgcGFyZW50LgoKCkhvd2V2ZXIgdGhlIGZpbGUgL3QxIHdpbGwgZ2V0IGJpZyBxdWl0ZSBxdWlja2x5CnRvIHRlc3QgaXQgdGVsbmV0IDEyNy4wLjAuMQoKbm93IGxvb2sgYXQgd2hhdCBmaWxlcyBpbi50ZWxuZXRkIGV4ZWN2ZSdkCjQxMyAgIGV4ZWN2ZSgiL3Vzci9zYmluL2luLnRlbG5ldGQiLCBbIi91c3Ivc2Jpbi9pbi50ZWxuZXRkIiwgIi1oIl0sIFsvKiAxNyB2YXJzICovXSkgPSAwCjQxNCAgIGV4ZWN2ZSgiL2Jpbi9sb2dpbiIsIFsiL2Jpbi9sb2dpbiIsICItaCIsICJsb2NhbGhvc3QiLCAiLXAiXSwgWy8qIDIgdmFycyAqL10pID0gMCAKCldoZXkgaXQgd29ya2VkIS4KCgpPdGhlciBoaW50czoKLS0tLS0tLS0tLS0tCklmIHRoZSBwcm9ncmFtIGlzIG5vdCB2ZXJ5IGludGVyYWN0aXZlICggaS5lLiBub3QgbXVjaCBrZXlib2FyZCBpbnB1dCApCiYgaXMgY3Jhc2hpbmcgaW4gb25lIGFyY2hpdGVjdHVyZSBidXQgbm90IGluIGFub3RoZXIgeW91IGNhbiBkbyAKYW4gc3RyYWNlIG9mIGJvdGggcHJvZ3JhbXMgdW5kZXIgYXMgaWRlbnRpY2FsIGEgc2NlbmFyaW8gYXMgeW91IGNhbgpvbiBib3RoIGFyY2hpdGVjdHVyZXMgb3V0cHV0dGluZyB0byBhIGZpbGUgdGhlbi4KZG8gYSBkaWZmIG9mIHRoZSB0d28gdHJhY2VzIHVzaW5nIHRoZSBkaWZmIHByb2dyYW0KaS5lLgpkaWZmIG91dHB1dDEgb3V0cHV0MgomIG1heWJlIHlvdSdsbCBiZSBhYmxlIHRvIHNlZSB3aGVyZSB0aGUgY2FsbCBwYXRocyBkaWZmZXJlZCwgdGhpcwppcyBwb3NzaWJseSBuZWFyIHRoZSBjYXVzZSBvZiB0aGUgY3Jhc2guIAoKTW9yZSBpbmZvCi0tLS0tLS0tLQpMb29rIGF0IG1hbiBwYWdlcyBmb3Igc3RyYWNlICYgdGhlIHZhcmlvdXMgc3lzY2FsbHMKZS5nLiBtYW4gc3RyYWNlLCBtYW4gYWxhcm0sIG1hbiBzb2NrZXQuCgoKUGVyZm9ybWFuY2UgRGVidWdnaW5nCj09PT09PT09PT09PT09PT09PT09PQpnY2MgaXMgY2FwYWJsZSBvZiBjb21waWxpbmcgaW4gcHJvZmlsaW5nIGNvZGUganVzdCBhZGQgdGhlIC1wIG9wdGlvbgp0byB0aGUgQ0ZMQUdTLCB0aGlzIG9idmlvdXNseSBhZmZlY3RzIHByb2dyYW0gc2l6ZSAmIHBlcmZvcm1hbmNlLgpUaGlzIGNhbiBiZSB1c2VkIGJ5IHRoZSBncHJvZiBnbnUgcHJvZmlsaW5nIHRvb2wgb3IgdGhlCmdjb3YgdGhlIGdudSBjb2RlIGNvdmVyYWdlIHRvb2wgKCBjb2RlIGNvdmVyYWdlIGlzIGEgbWVhbnMgb2YgdGVzdGluZwpjb2RlIHF1YWxpdHkgYnkgY2hlY2tpbmcgaWYgYWxsIHRoZSBjb2RlIGluIGFuIGV4ZWN1dGFibGUgaW4gZXhlcmNpc2VkIGJ5CmEgdGVzdGVyICkuCgoKVXNpbmcgdG9wIHRvIGZpbmQgb3V0IHdoZXJlIHByb2Nlc3NlcyBhcmUgc2xlZXBpbmcgaW4gdGhlIGtlcm5lbAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRvIGRvIHRoaXMgY29weSB0aGUgU3lzdGVtLm1hcCBmcm9tIHRoZSByb290IGRpcmVjdG9yeSB3aGVyZQp0aGUgbGludXgga2VybmVsIHdhcyBidWlsdCB0byB0aGUgL2Jvb3QgZGlyZWN0b3J5IG9uIHlvdXIgCmxpbnV4IG1hY2hpbmUuClN0YXJ0IHRvcApOb3cgdHlwZSBmVTxyZXR1cm4+CllvdSBzaG91bGQgc2VlIGEgbmV3IGZpZWxkIGNhbGxlZCBXQ0hBTiB3aGljaAp0ZWxscyB5b3Ugd2hlcmUgZWFjaCBwcm9jZXNzIGlzIHNsZWVwaW5nIGhlcmUgaXMgYSB0eXBpY2FsIG91dHB1dC4KIAogNjo1OXBtICB1cCA0MSBtaW4sICAxIHVzZXIsICBsb2FkIGF2ZXJhZ2U6IDAuMDAsIDAuMDAsIDAuMDAKMjggcHJvY2Vzc2VzOiAyNyBzbGVlcGluZywgMSBydW5uaW5nLCAwIHpvbWJpZSwgMCBzdG9wcGVkCkNQVSBzdGF0ZXM6ICAwLjAlIHVzZXIsICAwLjElIHN5c3RlbSwgIDAuMCUgbmljZSwgOTkuOCUgaWRsZQpNZW06ICAgMjU0OTAwSyBhdiwgICA0NTk3NksgdXNlZCwgIDIwODkyNEsgZnJlZSwgICAgICAgMEsgc2hyZCwgICAyODYzNksgYnVmZgpTd2FwOiAgICAgICAwSyBhdiwgICAgICAgMEsgdXNlZCwgICAgICAgMEsgZnJlZSAgICAgICAgICAgICAgICAgICAgODYyMEsgY2FjaGVkCgogIFBJRCBVU0VSICAgICBQUkkgIE5JICBTSVpFICBSU1MgU0hBUkUgV0NIQU4gICAgIFNUQVQgIExJQiAlQ1BVICVNRU0gICBUSU1FIENPTU1BTkQKICA3NTAgcm9vdCAgICAgIDEyICAgMCAgIDg0OCAgODQ4ICAgNzAwIGRvX3NlbGVjdCBTICAgICAgIDAgIDAuMSAgMC4zICAgMDowMCBpbi50ZWxuZXRkCiAgNzY3IHJvb3QgICAgICAxNiAgIDAgIDExNDAgMTE0MCAgIDk2NCAgICAgICAgICAgUiAgICAgICAwICAwLjEgIDAuNCAgIDA6MDAgdG9wCiAgICAxIHJvb3QgICAgICAgOCAgIDAgICAyMTIgIDIxMiAgIDE4MCBkb19zZWxlY3QgUyAgICAgICAwICAwLjAgIDAuMCAgIDA6MDAgaW5pdAogICAgMiByb290ICAgICAgIDkgICAwICAgICAwICAgIDAgICAgIDAgZG93bl9pbnRlIFNXICAgICAgMCAgMC4wICAwLjAgICAwOjAwIGttY2hlY2sKClRoZSB0aW1lIGNvbW1hbmQKLS0tLS0tLS0tLS0tLS0tLQpBbm90aGVyIHJlbGF0ZWQgY29tbWFuZCBpcyB0aGUgdGltZSBjb21tYW5kIHdoaWNoIGdpdmVzIHlvdSBhbiBpbmRpY2F0aW9uCm9mIHdoZXJlIGEgcHJvY2VzcyBpcyBzcGVuZGluZyB0aGUgbWFqb3JpdHkgb2YgaXRzIHRpbWUuCmUuZy4KdGltZSBwaW5nIC1jIDUgbmMKb3V0cHV0cwpyZWFsCTBtNC4wNTRzCnVzZXIJMG0wLjAxMHMKc3lzCTBtMC4wMTBzCgpEZWJ1Z2dpbmcgdW5kZXIgVk0KPT09PT09PT09PT09PT09PT09CgpOb3RlcwotLS0tLQpBZGRyZXNzZXMgJiB2YWx1ZXMgaW4gdGhlIFZNIGRlYnVnZ2VyIGFyZSBhbHdheXMgaGV4IG5ldmVyIGRlY2ltYWwKQWRkcmVzcyByYW5nZXMgYXJlIG9mIHRoZSBmb3JtYXQgPEhleFZhbHVlMT4tPEhleFZhbHVlMj4gb3IgPEhleFZhbHVlMT4uPEhleFZhbHVlMj4gCmUuZy4gVGhlIGFkZHJlc3MgcmFuZ2UgIDB4MjAwMCB0byAweDMwMDAgY2FuIGJlIGRlc2NyaWJlZCBhcyAyMDAwLTMwMDAgb3IgMjAwMC4xMDAwCgpUaGUgVk0gRGVidWdnZXIgaXMgY2FzZSBpbnNlbnNpdGl2ZS4KClZNJ3Mgc3RyZW5ndGhzIGFyZSB1c3VhbGx5IG90aGVyIGRlYnVnZ2VycyB3ZWFrbmVzc2VzIHlvdSBjYW4gZ2V0IGF0IGFueSByZXNvdXJjZQpubyBtYXR0ZXIgaG93IHNlbnNpdGl2ZSBlLmcuIG1lbW9yeSBtYW5hZ2VtZW50IHJlc291cmNlcyxjaGFuZ2UgYWRkcmVzcyB0cmFuc2xhdGlvbgppbiB0aGUgUFNXLiBGb3Iga2VybmVsIGhhY2tpbmcgeW91IHdpbGwgcmVhcCBkaXZpZGVuZHMgaWYgeW91IGdldCBnb29kIGF0IGl0LgoKVGhlIFZNIERlYnVnZ2VyIGRpc3BsYXlzIG9wZXJhdG9ycyBidXQgbm90IG9wZXJhbmRzLCBwcm9iYWJseSBiZWNhdXNlIHNvbWUKb2YgaXQgd2FzIHdyaXR0ZW4gd2hlbiBtZW1vcnkgd2FzIGV4cGVuc2l2ZSAmIHRoZSBwcm9ncmFtbWVyIHdhcyBwcm9iYWJseSBwcm91ZCB0aGF0Cml0IGZpdHRlZCBpbnRvIDJrIG9mIG1lbW9yeSAmIHRoZSBwcm9ncmFtbWVycyAmIGRpZG4ndCB3YW50IHRvIHNob2NrIGhhcmRjb3JlIFZNJ2VycyBieQpjaGFuZ2luZyB0aGUgaW50ZXJmYWNlIDotKSwgYWxzbyB0aGUgZGVidWdnZXIgZGlzcGxheXMgdXNlZnVsIGluZm9ybWF0aW9uIG9uIHRoZSBzYW1lIGxpbmUgJiAKdGhlIGF1dGhvciBvZiB0aGUgY29kZSBwcm9iYWJseSBmZWx0IHRoYXQgaXQgd2FzIGEgZ29vZCBpZGVhIG5vdCB0byBnbyBvdmVyIAp0aGUgODAgY29sdW1ucyBvbiB0aGUgc2NyZWVuLiAKCkFzIHNvbWUgb2YgeW91IGFyZSBwcm9iYWJseSBpbiBhIHBhbmljIG5vdyB0aGlzIGlzbid0IGFzIHVuaW50dWl0aXZlIGFzIGl0IG1heSBzZWVtCmFzIHRoZSAzOTAgaW5zdHJ1Y3Rpb25zIGFyZSBlYXN5IHRvIGRlY29kZSBtZW50YWxseSAmIHlvdSBjYW4gbWFrZSBhIGdvb2QgZ3Vlc3MgYXQgYSBsb3QgCm9mIHRoZW0gYXMgYWxsIHRoZSBvcGVyYW5kcyBhcmUgbmliYmxlICggaGFsZiBieXRlIGFsaWduZWQgKSAmIGlmIHlvdSBoYXZlIGFuIG9iamR1bXAgbGlzdGluZwphbHNvIGl0IGlzIHF1aXRlIGVhc3kgdG8gZm9sbG93LCBpZiB5b3UgZG9uJ3QgaGF2ZSBhbiBvYmpkdW1wIGxpc3Rpbmcga2VlcCBhIGNvcHkgb2YKdGhlIHMvMzkwIFJlZmVyZW5jZSBTdW1tYXJ5ICYgbG9vayBhdCBiZXR3ZWVuIHBhZ2VzIDIgJiA3IG9yIGFsdGVybmF0aXZlbHkgdGhlCnMvMzkwIHByaW5jaXBsZXMgb2Ygb3BlcmF0aW9uLgplLmcuIGV2ZW4gSSBjYW4gZ3Vlc3MgdGhhdCAKMDAwMUFGRjgnIExSICAgIDE4MEYgICAgICAgIENDIDAKaXMgYSAoIGxvYWQgcmVnaXN0ZXIgKSBsciByMCxyMTUgCgpBbHNvIGl0IGlzIHZlcnkgZWFzeSB0byB0ZWxsIHRoZSBsZW5ndGggb2YgYSAzOTAgaW5zdHJ1Y3Rpb24gZnJvbSB0aGUgMiBtb3N0IHNpZ25pZmljYW50CmJpdHMgaW4gdGhlIGluc3RydWN0aW9uICggbm90IHRoYXQgdGhpcyBpbmZvIGlzIHJlYWxseSB1c2VmdWwgZXhjZXB0IGlmIHlvdSBhcmUgdHJ5aW5nIHRvCm1ha2Ugc2Vuc2Ugb2YgYSBoZXhkdW1wIG9mIGNvZGUgKS4KSGVyZSBpcyBhIHRhYmxlCkJpdHMgICAgICAgICAgICAgICAgICAgIEluc3RydWN0aW9uIExlbmd0aAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KMDAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgQnl0ZXMKMDEgICAgICAgICAgICAgICAgICAgICAgICAgIDQgQnl0ZXMKMTAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgQnl0ZXMKMTEgICAgICAgICAgICAgICAgICAgICAgICAgIDYgQnl0ZXMKCgoKClRoZSBkZWJ1Z2dlciBhbHNvIGRpc3BsYXlzIG90aGVyIHVzZWZ1bCBpbmZvIG9uIHRoZSBzYW1lIGxpbmUgc3VjaCBhcyB0aGUKYWRkcmVzc2VzIGJlaW5nIG9wZXJhdGVkIG9uIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBvZiBicmFuY2hlcyAmIGNvbmRpdGlvbiBjb2Rlcy4KZS5nLiAgCjAwMDE5NzM2JyBBSEkgICBBN0RBRkYwRSAgICBDQyAxCjAwMDE5OEJBJyBCUkMgICBBNzg0MDAwNCAtPiAwMDAxOThDMicgICBDQyAwCjAwMDE5OENFJyBTVE0gICA5MDBFRjA2OCA+PiAwRkE5NUU3OCAgICBDQyAyCgoKClVzZWZ1bCBWTSBkZWJ1Z2dlciBjb21tYW5kcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkkgc3VwcG9zZSBJJ2QgYmV0dGVyIG1lbnRpb24gdGhpcyBiZWZvcmUgSSBzdGFydAp0byBsaXN0IHRoZSBjdXJyZW50IGFjdGl2ZSB0cmFjZXMgZG8gClEgVFIKdGhlcmUgY2FuIGJlIGEgbWF4aW11bSBvZiAyNTUgb2YgdGhlc2UgcGVyIHNldAooIG1vcmUgYWJvdXQgdHJhY2Ugc2V0cyBsYXRlciApLgpUbyBzdG9wIHRyYWNlcyBpc3N1ZSBhClRSIEVORC4KVG8gZGVsZXRlIGEgcGFydGljdWxhciBicmVha3BvaW50IGlzc3VlClRSIERFTCA8YnJlYWtwb2ludCBudW1iZXI+CgpUaGUgUEExIGtleSBkcm9wcyB0byBDUCBtb2RlIHNvIHlvdSBjYW4gaXNzdWUgZGVidWdnZXIgY29tbWFuZHMsCkRvaW5nIGFsdCBjIChvbiBteSAzMjcwIGNvbnNvbGUgYXQgbGVhc3QgKSBjbGVhcnMgdGhlIHNjcmVlbi4gCmhpdHRpbmcgYiA8ZW50ZXI+IGNvbWVzIGJhY2sgdG8gdGhlIHJ1bm5pbmcgb3BlcmF0aW5nIHN5c3RlbQpmcm9tIGNwIG1vZGUgKCBpbiBvdXIgY2FzZSBsaW51eCApLgpJdCBpcyB0eXBpY2FsbHkgdXNlZnVsIHRvIGFkZCBzaG9ydGN1dHMgdG8geW91ciBwcm9maWxlLmV4ZWMgZmlsZQppZiB5b3UgaGF2ZSBvbmUgKCB0aGlzIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byBhdXRvZXhlYy5iYXQgaW4gRE9TICkuCmZpbGUgaGVyZSBhcmUgYSBmZXcgZnJvbSBtaW5lLgovKiB0aGlzIGdpdmVzIG1lIGNvbW1hbmQgaGlzdG9yeSBvbiBpc3N1aW5nIGYxMiAqLwpzZXQgcGYxMiByZXRyaWV2ZSAKLyogdGhpcyBjb250aW51ZXMgKi8Kc2V0IHBmOCBpbW0gYgovKiBnb2VzIHRvIHRyYWNlIHNldCBhICovCnNldCBwZjEgaW1tIHRyIGdvdG8gYQovKiBnb2VzIHRvIHRyYWNlIHNldCBiICovCnNldCBwZjIgaW1tIHRyIGdvdG8gYgovKiBnb2VzIHRvIHRyYWNlIHNldCBjICovCnNldCBwZjMgaW1tIHRyIGdvdG8gYwoKCgpJbnN0cnVjdGlvbiBUcmFjaW5nCi0tLS0tLS0tLS0tLS0tLS0tLS0KU2V0dGluZyBhIHNpbXBsZSBicmVha3BvaW50ClRSIEkgUFNXQSA8YWRkcmVzcz4KVG8gZGVidWcgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIHRyeQpUUiBJIFIgPGZ1bmN0aW9uIGFkZHJlc3MgcmFuZ2U+ClRSIEkgb24gaXRzIG93biB3aWxsIHNpbmdsZSBzdGVwLgpUUiBJIERBVEEgPE1ORU1PTklDPiA8T1BUSU9OQUwgUkFOR0U+IHdpbGwgdHJhY2UgZm9yIHBhcnRpY3VsYXIgbW5lbW9uaWNzCmUuZy4KVFIgSSBEQVRBIDREIFIgMDE5N0JDLjQwMDAKd2lsbCB0cmFjZSBmb3IgQkFTJ2VzICggb3Bjb2RlIDREICkgaW4gdGhlIHJhbmdlIDAxOTdCQy40MDAwCmlmIHlvdSB3ZXJlIGluY2xpbmVkIHlvdSBjb3VsZCBhZGQgdHJhY2VzIGZvciBhbGwgYnJhbmNoIGluc3RydWN0aW9ucyAmCnN1ZmZpeCB0aGVtIHdpdGggdGhlIHJ1biBwcmVmaXggc28geW91IHdvdWxkIGhhdmUgYSBiYWNrdHJhY2Ugb24gc2NyZWVuIAp3aGVuIGEgcHJvZ3JhbSBjcmFzaGVzLgpUUiBCUiA8SU5UTyBPUiBGUk9NPiB3aWxsIHRyYWNlIGJyYW5jaGVzIGludG8gb3Igb3V0IG9mIGFuIGFkZHJlc3MuCmUuZy4KVFIgQlIgSU5UTyAwIGlzIG9mdGVuIHF1aXRlIHVzZWZ1bCBpZiBhIHByb2dyYW0gaXMgZ2V0dGluZyBhd2t3YXJkICYgZGVjaWRpbmcKdG8gYnJhbmNoIHRvIDAgJiBjcmFzaGluZyBhcyB0aGlzIHdpbGwgc3RvcCBhdCB0aGUgYWRkcmVzcyBiZWZvcmUgaW4ganVtcHMgdG8gMC4KVFIgSSBSIDxhZGRyZXNzIHJhbmdlPiBSVU4gY21kIGQgZwpzaW5nbGUgc3RlcHMgYSByYW5nZSBvZiBhZGRyZXNzZXMgYnV0IHN0YXlzIHJ1bm5pbmcgJgpkaXNwbGF5cyB0aGUgZ3BycyBvbiBlYWNoIHN0ZXAuCgoKCkRpc3BsYXlpbmcgJiBtb2RpZnlpbmcgUmVnaXN0ZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkQgRyB3aWxsIGRpc3BsYXkgYWxsIHRoZSBncHJzCkFkZGluZyBhIGV4dHJhIEcgdG8gYWxsIHRoZSBjb21tYW5kcyBpcyBuZWNlc3NhcnkgdG8gYWNjZXNzIHRoZSBmdWxsIDY0IGJpdCAKY29udGVudCBpbiBWTSBvbiB6L0FyY2hpdGVjdHVyZSBvYnZpb3VzbHkgdGhpcyBpc24ndCByZXF1aXJlZCBmb3IgYWNjZXNzIHJlZ2lzdGVycwphcyB0aGVzZSBhcmUgc3RpbGwgMzIgYml0LgplLmcuIERHRyBpbnN0ZWFkIG9mIERHIApEIFggd2lsbCBkaXNwbGF5IGFsbCB0aGUgY29udHJvbCByZWdpc3RlcnMKRCBBUiB3aWxsIGRpc3BsYXkgYWxsIHRoZSBhY2Nlc3MgcmVnaXN0ZXJzCkQgQVI0LTcgd2lsbCBkaXNwbGF5IGFjY2VzcyByZWdpc3RlcnMgNCB0byA3CkNQVSBBTEwgRCBHIHdpbGwgZGlzcGxheSB0aGUgR1JQUyBvZiBhbGwgQ1BVUyBpbiB0aGUgY29uZmlndXJhdGlvbgpEIFBTVyB3aWxsIGRpc3BsYXkgdGhlIGN1cnJlbnQgUFNXCnN0IFBTVyAyMDAwIHdpbGwgcHV0IHRoZSB2YWx1ZSAyMDAwIGludG8gdGhlIFBTVyAmCmNhdXNlIGNyYXNoIHlvdXIgbWFjaGluZS4KRCBQUkVGSVggZGlzcGxheXMgdGhlIHByZWZpeCBvZmZzZXQKCgpEaXNwbGF5aW5nIE1lbW9yeQotLS0tLS0tLS0tLS0tLS0tLQpUbyBkaXNwbGF5IG1lbW9yeSBtYXBwZWQgdXNpbmcgdGhlIGN1cnJlbnQgUFNXJ3MgbWFwcGluZyB0cnkKRCA8cmFuZ2U+ClRvIG1ha2UgVk0gZGlzcGxheSBhIG1lc3NhZ2UgZWFjaCB0aW1lIGl0IGhpdHMgYSBwYXJ0aWN1bGFyIGFkZHJlc3MgJiBjb250aW51ZSB0cnkKRCBJPHJhbmdlPiB3aWxsIGRpc2Fzc2VtYmxlL2Rpc3BsYXkgYSByYW5nZSBvZiBpbnN0cnVjdGlvbnMuClNUIGFkZHIgMzIgYml0IHdvcmQgd2lsbCBzdG9yZSBhIDMyIGJpdCBhbGlnbmVkIGFkZHJlc3MKRCBUPHJhbmdlPiB3aWxsIGRpc3BsYXkgdGhlIEVCQ0RJQyBpbiBhbiBhZGRyZXNzICggaWYgeW91IGFyZSB0aGF0IHdheSBpbmNsaW5lZCApCkQgUjxyYW5nZT4gd2lsbCBkaXNwbGF5IHJlYWwgYWRkcmVzc2VzICggd2l0aG91dCBEQVQgKSBidXQgd2l0aCBwcmVmaXhpbmcuClRoZXJlIGFyZSBvdGhlciBjb21wbGV4IG9wdGlvbnMgdG8gZGlzcGxheSBpZiB5b3UgbmVlZCB0byBnZXQgYXQgc2F5IGhvbWUgc3BhY2UKYnV0IGFyZSBpbiBwcmltYXJ5IHNwYWNlIHRoZSBlYXNpZXN0IHRoaW5nIHRvIGRvIGlzIHRvIHRlbXBvcmFyaWx5Cm1vZGlmeSB0aGUgUFNXIHRvIHRoZSBvdGhlciBhZGRyZXNzaW5nIG1vZGUsIGRpc3BsYXkgdGhlIHN0dWZmICYgdGhlbgpyZXN0b3JlIGl0LgoKCiAKSGludHMKLS0tLS0KSWYgeW91IHdhbnQgdG8gaXNzdWUgYSBkZWJ1Z2dlciBjb21tYW5kIHdpdGhvdXQgaGFsdGluZyB5b3VyIHZpcnR1YWwgbWFjaGluZSB3aXRoIHRoZQpQQTEga2V5IHRyeSBwcmVmaXhpbmcgdGhlIGNvbW1hbmQgd2l0aCAjQ1AgZS5nLgojY3AgdHIgaSBwc3dhIDIwMDAKYWxzbyBzdWZmaXhpbmcgbW9zdCBkZWJ1Z2dlciBjb21tYW5kcyB3aXRoIFJVTiB3aWxsIGNhdXNlIHRoZW0gbm90CnRvIHN0b3AganVzdCBkaXNwbGF5IHRoZSBtbmVtb25pYyBhdCB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiBvbiB0aGUgY29uc29sZS4KSWYgeW91IGhhdmUgc2V2ZXJhbCBicmVha3BvaW50cyB5b3Ugd2FudCB0byBwdXQgaW50byB5b3VyIHByb2dyYW0gJgp5b3UgZ2V0IGZlZCB1cCBvZiBjcm9zcyByZWZlcmVuY2luZyB3aXRoIFN5c3RlbS5tYXAKeW91IGNhbiBkbyB0aGUgZm9sbG93aW5nIHRyaWNrIGZvciBzZXZlcmFsIHN5bWJvbHMuCmdyZXAgZG9fc2lnbmFsIFN5c3RlbS5tYXAgCndoaWNoIGVtaXRzIHRoZSBmb2xsb3dpbmcgYW1vbmcgb3RoZXIgdGhpbmdzCjAwMDFmNGUwIFQgZG9fc2lnbmFsIApub3cgeW91IGNhbiBkbwoKVFIgSSBQU1dBIDAwMDFmNGUwIGNtZCBtc2cgKiBkb19zaWduYWwKVGhpcyBzZW5kcyBhIG1lc3NhZ2UgdG8geW91ciBvd24gY29uc29sZSBlYWNoIHRpbWUgZG9fc2lnbmFsIGlzIGVudGVyZWQuCiggQXMgYW4gYXNpZGUgSSB3cm90ZSBhIHBlcmwgc2NyaXB0IG9uY2Ugd2hpY2ggYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYSBSRVhYCnNjcmlwdCB3aXRoIGJyZWFrcG9pbnRzIG9uIGV2ZXJ5IGtlcm5lbCBwcm9jZWR1cmUsIHRoaXMgaXNuJ3QgYSBnb29kIGlkZWEKYmVjYXVzZSB0aGVyZSBhcmUgdGhvdXNhbmRzIG9mIHRoZXNlIHJvdXRpbmVzICYgVk0gY2FuIG9ubHkgc2V0IDI1NSBicmVha3BvaW50cwphdCBhIHRpbWUgc28geW91IG5lYXJseSBoYWQgdG8gc3BlbmQgYXMgbG9uZyBwcnVuaW5nIHRoZSBmaWxlIGRvd24gYXMgeW91IHdvdWxkIAplbnRlcmluZyB0aGUgbXNnJ3MgYnkgaGFuZCApLGhvd2V2ZXIsIHRoZSB0cmljayBtaWdodCBiZSB1c2VmdWwgZm9yIGEgc2luZ2xlIG9iamVjdCBmaWxlLgpPbiBsaW51eCdlcyAzMjcwIGVtdWxhdG9yIHgzMjcwIHRoZXJlIGlzIGEgdmVyeSB1c2VmdWwgb3B0aW9uIHVuZGVyIHRoZSBmaWxlIG1lbnQKU2F2ZSBTY3JlZW5zIEluIEZpbGUgdGhpcyBpcyB2ZXJ5IGdvb2Qgb2Yga2VlcGluZyBhIGNvcHkgb2YgdHJhY2VzLiAKCkZyb20gQ01TIGhlbHAgPGNvbW1hbmQgbmFtZT4gd2lsbCBnaXZlIHlvdSBvbmxpbmUgaGVscCBvbiBhIHBhcnRpY3VsYXIgY29tbWFuZC4gCmUuZy4gCkhFTFAgRElTUExBWQoKQWxzbyBDUCBoYXMgYSBmaWxlIGNhbGxlZCBwcm9maWxlLmV4ZWMgd2hpY2ggYXV0b21hdGljYWxseSBnZXRzIGNhbGxlZApvbiBzdGFydHVwIG9mIENNUyAoIGxpa2UgYXV0b2V4ZWMuYmF0ICksIGtlZXBpbmcgb24gYSBET1MgYW5hbG9neSBzZXNzaW9uCkNQIGhhcyBhIGZlYXR1cmUgc2ltaWxhciB0byBkb3NrZXksIGl0IG1heSBiZSB1c2VmdWwgZm9yIHlvdSB0bwp1c2UgcHJvZmlsZS5leGVjIHRvIGRlZmluZSBzb21lIGtleXN0cm9rZXMuIAplLmcuClNFVCBQRjkgSU1NIEIKVGhpcyBkb2VzIGEgc2luZ2xlIHN0ZXAgaW4gVk0gb24gcHJlc3NpbmcgRjguIApTRVQgUEYxMCAgXgpUaGlzIHNldHMgdXAgdGhlIF4ga2V5Lgp3aGljaCBjYW4gYmUgdXNlZCBmb3IgXmMgKGN0cmwtYyksXnogKGN0cmwteikgd2hpY2ggY2FuJ3QgYmUgdHlwZWQgZGlyZWN0bHkgaW50byBzb21lIDMyNzAgY29uc29sZXMuClNFVCBQRjExIF4tClRoaXMgdHlwZXMgdGhlIHN0YXJ0aW5nIGtleXN0cm9rZXMgZm9yIGEgc3lzcnEgc2VlIFN5c1JxIGJlbG93LgpTRVQgUEYxMiBSRVRSSUVWRQpUaGlzIHJldHJpZXZlcyBjb21tYW5kIGhpc3Rvcnkgb24gcHJlc3NpbmcgRjEyLgoKClNvbWV0aW1lcyBpbiBWTSB0aGUgZGlzcGxheSBpcyBzZXQgdXAgdG8gc2Nyb2xsIGF1dG9tYXRpY2FsbHkgdGhpcwpjYW4gYmUgdmVyeSBhbm5veWluZyBpZiB0aGVyZSBhcmUgbWVzc2FnZXMgeW91IHdpc2ggdG8gbG9vayBhdAp0byBzdG9wIHRoaXMgZG8KVEVSTSBNT1JFIDI1NSAyNTUKVGhpcyB3aWxsIG5lYXJseSBzdG9wIGF1dG9tYXRpYyBzY3JlZW4gdXBkYXRlcywgaG93ZXZlciBpdCB3aWxsCmNhdXNlIGEgZGVuaWFsIG9mIHNlcnZpY2UgaWYgbG90cyBvZiBtZXNzYWdlcyBnbyB0byB0aGUgMzI3MCBjb25zb2xlLApzbyBpdCB3b3VsZCBiZSBmb29saXNoIHRvIHVzZSB0aGlzIGFzIHRoZSBkZWZhdWx0IG9uIGEgcHJvZHVjdGlvbiBtYWNoaW5lLgogCgpUcmFjaW5nIHBhcnRpY3VsYXIgcHJvY2Vzc2VzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGhlIGtlcm5lbCdzIHRleHQgc2VnbWVudCBpcyBpbnRlbnRpb25hbGx5IGF0IGFuIGFkZHJlc3MgaW4gbWVtb3J5IHRoYXQgaXQgd2lsbAp2ZXJ5IHNlbGRvbSBjb2xsaWRlIHdpdGggdGV4dCBzZWdtZW50cyBvZiB1c2VyIHByb2dyYW1zICggdGhhbmtzIE1hcnRpbiApLAp0aGlzIHNpbXBsaWZpZXMgZGVidWdnaW5nIHRoZSBrZXJuZWwuCkhvd2V2ZXIgaXQgaXMgcXVpdGUgY29tbW9uIGZvciB1c2VyIHByb2Nlc3NlcyB0byBoYXZlIGFkZHJlc3NlcyB3aGljaCBjb2xsaWRlCnRoaXMgY2FuIG1ha2UgZGVidWdnaW5nIGEgcGFydGljdWxhciBwcm9jZXNzIHVuZGVyIFZNIHBhaW5mdWwgdW5kZXIgbm9ybWFsCmNpcmN1bXN0YW5jZXMgYXMgdGhlIHByb2Nlc3MgbWF5IGNoYW5nZSB3aGVuIGRvaW5nIGEgClRSIEkgUiA8YWRkcmVzcyByYW5nZT4uClRoYW5rZnVsbHkgYWZ0ZXIgcmVhZGluZyBWTSdzIG9ubGluZSBoZWxwIEkgZmlndXJlZCBvdXQgaG93IHRvIGRlYnVnCkkgcGFydGljdWxhciBwcm9jZXNzLgoKWW91ciBmaXJzdCBwcm9ibGVtIGlzIHRvIGZpbmQgdGhlIFNURCAoIHNlZ21lbnQgdGFibGUgZGVzaWduYXRpb24gKQpvZiB0aGUgcHJvZ3JhbSB5b3Ugd2lzaCB0byBkZWJ1Zy4KVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB5b3UgY2FuIGRvIHRoaXMgaGVyZSBhcmUgYSBmZXcKMSkgb2JqZHVtcCAtLXN5bXMgPHByb2dyYW0gdG8gYmUgZGVidWdnZWQ+IHwgZ3JlcCBtYWluClRvIGdldCB0aGUgYWRkcmVzcyBvZiBtYWluIGluIHRoZSBwcm9ncmFtLgp0ciBpIHBzd2EgPGFkZHJlc3Mgb2YgbWFpbj4KU3RhcnQgdGhlIHByb2dyYW0sIGlmIFZNIGRyb3BzIHRvIENQIG9uIHdoYXQgbG9va3MgbGlrZSB0aGUgZW50cnkKcG9pbnQgb2YgdGhlIG1haW4gZnVuY3Rpb24gdGhpcyBpcyBtb3N0IGxpa2VseSB0aGUgcHJvY2VzcyB5b3Ugd2lzaCB0byBkZWJ1Zy4KTm93IGRvIGEgRCBYMTMgb3IgRCBYRzEzIG9uIHovQXJjaGl0ZWN0dXJlLgpPbiAzMSBiaXQgdGhlIFNURCBpcyBiaXRzIDEtMTkgKCB0aGUgU1RPIHNlZ21lbnQgdGFibGUgb3JpZ2luICkgCiYgMjUtMzEgKCB0aGUgU1RMIHNlZ21lbnQgdGFibGUgbGVuZ3RoICkgb2YgQ1IxMy4Kbm93IHR5cGUKVFIgSSBSIFNURCA8Q1IxMydzIHZhbHVlPiAwLjdmZmZmZmZmCmUuZy4KVFIgSSBSIFNURCA4RjMyRTFGRiAwLjdmZmZmZmZmCkFub3RoZXIgdmVyeSB1c2VmdWwgdmFyaWF0aW9uIGlzClRSIFNUT1JFIElOVE8gU1REIDxDUjEzJ3MgdmFsdWU+IDxhZGRyZXNzIHJhbmdlPgpmb3IgZmluZGluZyBvdXQgd2hlbiBhIHBhcnRpY3VsYXIgdmFyaWFibGUgY2hhbmdlcy4KCkFuIGFsdGVybmF0aXZlIHdheSBvZiBmaW5kaW5nIHRoZSBTVEQgb2YgYSBjdXJyZW50bHkgcnVubmluZyBwcm9jZXNzIAppcyB0byBkbyB0aGUgZm9sbG93aW5nLCAoIHRoaXMgbWV0aG9kIGlzIG1vcmUgY29tcGxleCBidXQKY291bGQgYmUgcXVpdGUgY29udmVuaWVudCBpZiB5b3UgYXJlbid0IHVwZGF0aW5nIHRoZSBrZXJuZWwgbXVjaCAmCnNvIHlvdXIga2VybmVsIHN0cnVjdHVyZXMgd2lsbCBzdGF5IGNvbnN0YW50IGZvciBhIHJlYXNvbmFibGUgcGVyaW9kIG9mCnRpbWUgKS4KCmdyZXAgdGFzayAvcHJvYy88cGlkPi9zdGF0dXMKZnJvbSB0aGlzIHlvdSBzaG91bGQgc2VlIHNvbWV0aGluZyBsaWtlCnRhc2s6IDBmMTYwMDAwIGtzcDogMGYxNjFkZTggcHRfcmVnczogMGYxNjFmNjgKVGhpcyBub3cgZ2l2ZXMgeW91IGEgcG9pbnRlciB0byB0aGUgdGFzayBzdHJ1Y3R1cmUuCk5vdyBtYWtlIENDOj0iczM5MC1nY2MgLWciIGtlcm5lbC9zY2hlZC5zClRvIGdldCB0aGUgdGFza19zdHJ1Y3Qgc3RhYmluZm8uCiggdGFza19zdHJ1Y3QgaXMgZGVmaW5lZCBpbiBpbmNsdWRlL2xpbnV4L3NjaGVkLmggKS4KTm93IHdlIHdhbnQgdG8gbG9vayBhdAp0YXNrLT5hY3RpdmVfbW0tPnBnZApvbiBteSBtYWNoaW5lIHRoZSBhY3RpdmVfbW0gaW4gdGhlIHRhc2sgc3RydWN0dXJlIHN0YWIgaXMKYWN0aXZlX21tOig0LDEyKSw2NzIsMzIKaXRzIG9mZnNldCBpcyA2NzIvOD04ND0weDU0CnRoZSBwZ2QgbWVtYmVyIGluIHRoZSBtbV9zdHJ1Y3Qgc3RhYiBpcwpwZ2Q6KDQsNik9KigyOSw1KSw5NiwzMgpzbyBpdHMgb2Zmc2V0IGlzIDk2Lzg9MTI9MHhjCgpzbyB3ZSdsbApoZXhkdW1wIC1zIDB4ZjE2MDA1NCAvZGV2L21lbSB8IG1vcmUKaS5lLiB0YXNrX3N0cnVjdCthY3RpdmVfbW0gb2Zmc2V0CnRvIGxvb2sgYXQgdGhlIGFjdGl2ZV9tbSBtZW1iZXIKZjE2MDA1NCAwZmVlIGNjNjAgMDAxOSBlMzM0IDAwMDAgMDAwMCAwMDAwIDAwMTEKaGV4ZHVtcCAtcyAweDBmZWVjYzZjIC9kZXYvbWVtIHwgbW9yZQppLmUuIGFjdGl2ZV9tbStwZ2Qgb2Zmc2V0CmZlZWNjNmMgMGYyYyAwMDAwIDAwMDAgMDAwMSAwMDAwIDAwMDEgMDAwMCAwMDEwCndlIGdldCBzb21ldGhpbmcgbGlrZQpub3cgZG8gClRSIEkgUiBTVEQgPHBnZHwweDdmPiAwLjdmZmZmZmZmCmkuZS4gdGhlIDB4N2YgaXMgYWRkZWQgYmVjYXVzZSB0aGUgcGdkIG9ubHkKZ2l2ZXMgdGhlIHBhZ2UgdGFibGUgb3JpZ2luICYgd2UgbmVlZCB0byBzZXQgdGhlIGxvdyBiaXRzCnRvIHRoZSBtYXhpbXVtIHBvc3NpYmxlIHNlZ21lbnQgdGFibGUgbGVuZ3RoLgpUUiBJIFIgU1REIDBmMmMwMDdmIDAuN2ZmZmZmZmYKb24gei9BcmNoaXRlY3R1cmUgeW91J2xsIHByb2JhYmx5IG5lZWQgdG8gZG8KVFIgSSBSIFNURCA8cGdkfDB4Nz4gMC5mZmZmZmZmZmZmZmZmZmZmCnRvIHNldCB0aGUgVGFibGVUeXBlIHRvIDB4MSAmIHRoZSBUYWJsZSBsZW5ndGggdG8gMy4KCgoKVHJhY2luZyBQcm9ncmFtIEV4Y2VwdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSWYgeW91IGdldCBhIGNyYXNoIHdoaWNoIHNheXMgc29tZXRoaW5nIGxpa2UKaWxsZWdhbCBvcGVyYXRpb24gb3Igc3BlY2lmaWNhdGlvbiBleGNlcHRpb24gZm9sbG93ZWQgYnkgYSByZWdpc3RlciBkdW1wCllvdSBjYW4gcmVzdGFydCBsaW51eCAmIHRyYWNlIHRoZXNlIHVzaW5nIHRoZSB0ciBwcm9nIDxyYW5nZSBvciB2YWx1ZT4gdHJhY2Ugb3B0aW9uLgoKCgpUaGUgbW9zdCBjb21tb24gb25lcyB5b3Ugd2lsbCBub3JtYWxseSBiZSB0cmFjaW5nIGZvciBpcwoxPW9wZXJhdGlvbiBleGNlcHRpb24KMj1wcml2aWxlZ2VkIG9wZXJhdGlvbiBleGNlcHRpb24KND1wcm90ZWN0aW9uIGV4Y2VwdGlvbgo1PWFkZHJlc3NpbmcgZXhjZXB0aW9uCjY9c3BlY2lmaWNhdGlvbiBleGNlcHRpb24KMTA9c2VnbWVudCB0cmFuc2xhdGlvbiBleGNlcHRpb24KMTE9cGFnZSB0cmFuc2xhdGlvbiBleGNlcHRpb24KClRoZSBmdWxsIGxpc3Qgb2YgdGhlc2UgaXMgb24gcGFnZSAyMiBvZiB0aGUgY3VycmVudCBzLzM5MCBSZWZlcmVuY2UgU3VtbWFyeS4KZS5nLgp0ciBwcm9nIDEwIHdpbGwgdHJhY2Ugc2VnbWVudCB0cmFuc2xhdGlvbiBleGNlcHRpb25zLgp0ciBwcm9nIG9uIGl0cyBvd24gd2lsbCB0cmFjZSBhbGwgcHJvZ3JhbSBpbnRlcnJ1cHRpb24gY29kZXMuCgpUcmFjZSBTZXRzCi0tLS0tLS0tLS0KT24gc3RhcnRpbmcgVk0geW91IGFyZSBpbml0aWFsbHkgaW4gdGhlIElOSVRJQUwgdHJhY2Ugc2V0LgpZb3UgY2FuIGRvIGEgUSBUUiB0byB2ZXJpZnkgdGhpcy4KSWYgeW91IGhhdmUgYSBjb21wbGV4IHRyYWNpbmcgc2l0dWF0aW9uIHdoZXJlIHlvdSB3aXNoIHRvIHdhaXQgZm9yIGluc3RhbmNlIAp0aWxsIGEgZHJpdmVyIGlzIG9wZW4gYmVmb3JlIHlvdSBzdGFydCB0cmFjaW5nIElPLCBidXQga25vdyBpbiB5b3VyCmhlYXJ0IHRoYXQgeW91IGFyZSBnb2luZyB0byBoYXZlIHRvIG1ha2Ugc2V2ZXJhbCBydW5zIHRocm91Z2ggdGhlIGNvZGUgdGlsbCB5b3UKaGF2ZSBhIGNsdWUgd2hhdHMgZ29pbmcgb24uIAoKV2hhdCB5b3UgY2FuIGRvIGlzClRSIEkgUFNXQSA8RHJpdmVyIG9wZW4gYWRkcmVzcz4KaGl0IGIgdG8gY29udGludWUgdGlsbCBicmVha3BvaW50CnJlYWNoIHRoZSBicmVha3BvaW50Cm5vdyBkbyB5b3VyClRSIEdPVE8gQiAKVFIgSU8gN2MwOC03YzA5IGluc3QgaW50IHJ1biAKb3Igd2hhdGV2ZXIgdGhlIElPIGNoYW5uZWxzIHlvdSB3aXNoIHRvIHRyYWNlIGFyZSAmIGhpdCBiCgpUbyBnb3QgYmFjayB0byB0aGUgaW5pdGlhbCB0cmFjZSBzZXQgZG8KVFIgR09UTyBJTklUSUFMCiYgdGhlIFRSIEkgUFNXQSA8RHJpdmVyIG9wZW4gYWRkcmVzcz4gd2lsbCBiZSB0aGUgb25seSBhY3RpdmUgYnJlYWtwb2ludCBhZ2Fpbi4KCgpUcmFjaW5nIGxpbnV4IHN5c2NhbGxzIHVuZGVyIFZNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3lzY2FsbHMgYXJlIGltcGxlbWVudGVkIG9uIExpbnV4IGZvciBTMzkwIGJ5IHRoZSBTdXBlcnZpc29yIGNhbGwgaW5zdHJ1Y3Rpb24gKFNWQykgdGhlcmUgMjU2IApwb3NzaWJpbGl0aWVzIG9mIHRoZXNlIGFzIHRoZSBpbnN0cnVjdGlvbiBpcyBtYWRlIHVwIG9mIGEgIDB4QSBvcGNvZGUgJiB0aGUgc2Vjb25kIGJ5dGUgYmVpbmcKdGhlIHN5c2NhbGwgbnVtYmVyLiBUaGV5IGFyZSB0cmFjZWQgdXNpbmcgdGhlIHNpbXBsZSBjb21tYW5kLgpUUiBTVkMgIDxPcHRpb25hbCB2YWx1ZSBvciByYW5nZT4KdGhlIHN5c2NhbGxzIGFyZSBkZWZpbmVkIGluIGxpbnV4L2luY2x1ZGUvYXNtLXMzOTAvdW5pc3RkLmgKZS5nLiB0byB0cmFjZSBhbGwgZmlsZSBvcGVucyBqdXN0IGRvClRSIFNWQyA1ICggYXMgdGhpcyBpcyB0aGUgc3lzY2FsbCBudW1iZXIgb2Ygb3BlbiApCgoKU01QIFNwZWNpZmljIGNvbW1hbmRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUbyBmaW5kIG91dCBob3cgbWFueSBjcHVzIHlvdSBoYXZlClEgQ1BVUyBkaXNwbGF5cyBhbGwgdGhlIENQVSdzIGF2YWlsYWJsZSB0byB5b3VyIHZpcnR1YWwgbWFjaGluZQpUbyBmaW5kIHRoZSBjcHUgdGhhdCB0aGUgY3VycmVudCBjcHUgVk0gZGVidWdnZXIgY29tbWFuZHMgYXJlIGJlaW5nIGRpcmVjdGVkIGF0IGRvClEgQ1BVIHRvIGNoYW5nZSB0aGUgY3VycmVudCBjcHUgVk0gZGVidWdnZXIgY29tbWFuZHMgYXJlIGJlaW5nIGRpcmVjdGVkIGF0IGRvCkNQVSA8ZGVzaXJlZCBjcHUgbm8+CgpPbiBhIFNNUCBndWVzdCBpc3N1ZSBhIGNvbW1hbmQgdG8gYWxsIENQVXMgdHJ5IHByZWZpeGluZyB0aGUgY29tbWFuZCB3aXRoIGNwdSBhbGwuClRvIGlzc3VlIGEgY29tbWFuZCB0byBhIHBhcnRpY3VsYXIgY3B1IHRyeSBjcHUgPGNwdSBudW1iZXI+IGUuZy4KQ1BVIDAxIFRSIEkgUiAyMDAwLjMwMDAKSWYgeW91IGFyZSBydW5uaW5nIG9uIGEgZ3Vlc3Qgd2l0aCBzZXZlcmFsIGNwdXMgJiB5b3UgaGF2ZSBhIElPIHJlbGF0ZWQgcHJvYmxlbQomIGNhbm5vdCBmb2xsb3cgdGhlIGZsb3cgb2YgY29kZSBidXQgeW91IGtub3cgaXQgaXNuJ3Qgc21wIHJlbGF0ZWQuCmZyb20gdGhlIGJhc2ggcHJvbXB0IGlzc3VlCnNodXRkb3duIC1oIG5vdyBvciBoYWx0LgpkbyBhIFEgQ1BVUyB0byBmaW5kIG91dCBob3cgbWFueSBjcHVzIHlvdSBoYXZlCmRldGFjaCBlYWNoIG9uZSBvZiB0aGVtIGZyb20gY3AgZXhjZXB0IGNwdSAwIApieSBpc3N1aW5nIGEgCkRFVEFDSCBDUFUgMDEtKG51bWJlciBvZiBjcHVzIGluIGNvbmZpZ3VyYXRpb24pCiYgYm9vdCBsaW51eCBhZ2Fpbi4KVFIgU0lHUCB3aWxsIHRyYWNlIGludGVyIHByb2Nlc3NvciBzaWduYWwgcHJvY2Vzc29yIGluc3RydWN0aW9ucy4KREVGSU5FIENQVSAwMS0obnVtYmVyIGluIGNvbmZpZ3VyYXRpb24pIAp3aWxsIGdldCB5b3VyIGd1ZXN0cyBjcHVzIGJhY2suCgoKSGVscCBmb3IgZGlzcGxheWluZyBhc2NpaSB0ZXh0c3RyaW5ncwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk9uIHRoZSB2ZXJ5IGxhdGVzdCBWTSBOdWNsZXVzJ2VzIFZNIGNhbiBub3cgZGlzcGxheSBhc2NpaQooIHRoYW5rcyBOZWFsZSBmb3IgdGhlIGhpbnQgKSBieSBkb2luZwpEIFRYPGxvd2FkZHI+LjxsZW4+CmUuZy4KRCBUWDAuMTAwCgpBbHRlcm5hdGl2ZWx5Cj09PT09PT09PT09PT0KVW5kZXIgb2xkZXIgVk0gZGVidWdnZXJzICggSSBsb3ZlIEVCRElDIHRvbyApIHlvdSBjYW4gdXNlIHRoaXMgbGl0dGxlIHByb2dyYW0gSSB3cm90ZSB3aGljaAp3aWxsIGNvbnZlcnQgYSBjb21tYW5kIGxpbmUgb2YgaGV4IGRpZ2l0cyB0byBhc2NpaSB0ZXh0IHdoaWNoIGNhbiBiZSBjb21waWxlZCB1bmRlciBsaW51eCAmIAp5b3UgY2FuIGNvcHkgdGhlIGhleCBkaWdpdHMgZnJvbSB5b3VyIHgzMjcwIHRlcm1pbmFsIHRvIHlvdXIgeHRlcm0gaWYgeW91IGFyZSBkZWJ1Z2dpbmcKZnJvbSBhIGxpbnV4Ym94LgoKVGhpcyBpcyBxdWl0ZSB1c2VmdWwgd2hlbiBsb29raW5nIGF0IGEgcGFyYW1ldGVyIHBhc3NlZCBpbiBhcyBhIHRleHQgc3RyaW5nCnVuZGVyIFZNICggdW5sZXNzIHlvdSBhcmUgZ29vZCBhdCBkZWNvZGluZyBBU0NJSSBpbiB5b3VyIGhlYWQgKS4KCmUuZy4gY29uc2lkZXIgdHJhY2luZyBhbiBvcGVuIHN5c2NhbGwKVFIgU1ZDIDUKV2UgaGF2ZSBzdG9wcGVkIGF0IGEgYnJlYWtwb2ludAowMDAxNTFCMCcgU1ZDICAgMEEwNSAgICAgLT4gMDAwMTkwOUEnICAgQ0MgMAoKRCAyMC44IHRvIGNoZWNrIHRoZSBTVkMgb2xkIHBzdyBpbiB0aGUgcHJlZml4IGFyZWEgJiBzZWUgd2FzIGl0IGZyb20gdXNlcnNwYWNlCiggZm9yIHRoZSBsYXlvdXQgb2YgdGhlIHByZWZpeCBhcmVhIGNvbnN1bHQgUDE4IG9mIHRoZSBzLzM5MCAzOTAgUmVmZXJlbmNlIFN1bW1hcnkgCmlmIHlvdSBoYXZlIGl0IGF2YWlsYWJsZSApLgpWMDAwMDAwMjAgIDA3MEMyMDAwIDgwMDE1MUIyClRoZSBwcm9ibGVtIHN0YXRlIGJpdCB3YXNuJ3Qgc2V0ICYgIGl0J3MgYWxzbyB0b28gZWFybHkgaW4gdGhlIGJvb3Qgc2VxdWVuY2UKZm9yIGl0IHRvIGJlIGEgdXNlcnNwYWNlIFNWQyBpZiBpdCB3YXMgd2Ugd291bGQgaGF2ZSB0byB0ZW1wb3JhcmlseSBzd2l0Y2ggdGhlIApwc3cgdG8gdXNlciBzcGFjZSBhZGRyZXNzaW5nIHNvIHdlIGNvdWxkIGdldCBhdCB0aGUgZmlyc3QgcGFyYW1ldGVyIG9mIHRoZSBvcGVuIGluCmdwcjIuCk5leHQgZG8gYSAKRCBHMgpHUFIgIDIgPSAgMDAwMTRDQjQKTm93IGRpc3BsYXkgd2hhdCBncHIyIGlzIHBvaW50aW5nIHRvCkQgMDAwMTRDQjQuMjAKVjAwMDE0Q0I0ICAyRjY0NjU3NiAyRjYzNkY2RSA3MzZGNkM2NSAwMDAwMUJGNQpWMDAwMTRDQzQgIEZDMDAwMTRDIEI0MDAxMDAxIEUwMDAxMDAwIEI4MDcwNzA3Ck5vdyBjb3B5IHRoZSB0ZXh0IHRpbGwgdGhlIGZpcnN0IDAwIGhleCAoIHdoaWNoIGlzIHRoZSBlbmQgb2YgdGhlIHN0cmluZwp0byBhbiB4dGVybSAmIGRvIGhleDJhc2NpaSBvbiBpdC4KaGV4MmFzY2lpIDJGNjQ2NTc2IDJGNjM2RjZFIDczNkY2QzY1IDAwIApvdXRwdXRzCkRlY29kZWQgSGV4Oj0vIGQgZSB2IC8gYyBvIG4gcyBvIGwgZSAweDAwIApXZSB3ZXJlIG9wZW5pbmcgdGhlIGNvbnNvbGUgZGV2aWNlLAoKWW91IGNhbiBjb21waWxlIHRoZSBjb2RlIGJlbG93IHlvdXJzZWxmIGZvciBwcmFjdGljZSA6LSksCi8qCiAqICAgIGhleDJhc2NpaS5jCiAqICAgIGEgdXNlZnVsIGxpdHRsZSB0b29sIGZvciBjb252ZXJ0aW5nIGEgaGV4YWRlY2ltYWwgY29tbWFuZCBsaW5lIHRvIGFzY2lpCiAqCiAqICAgIEF1dGhvcihzKTogRGVuaXMgSm9zZXBoIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKQogKiAgICAoQykgMjAwMCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uLgogKi8gICAKI2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pCnsKICBpbnQgY250MSxjbnQyLGxlbix0b2dnbGU9MDsKICBpbnQgc3RhcnRjbnQ9MTsKICB1bnNpZ25lZCBjaGFyIGMsaGV4OwogIAogIGlmKGFyZ2M+MSYmKHN0cmNtcChhcmd2WzFdLCItYSIpPT0wKSkKICAgICBzdGFydGNudD0yOwogIHByaW50ZigiRGVjb2RlZCBIZXg6PSIpOwogIGZvcihjbnQxPXN0YXJ0Y250O2NudDE8YXJnYztjbnQxKyspCiAgewogICAgbGVuPXN0cmxlbihhcmd2W2NudDFdKTsKICAgIGZvcihjbnQyPTA7Y250MjxsZW47Y250MisrKQogICAgewogICAgICAgYz1hcmd2W2NudDFdW2NudDJdOwogICAgICAgaWYoYz49JzAnJiZjPD0nOScpCgkgIGM9Yy0nMCc7CiAgICAgICBpZihjPj0nQScmJmM8PSdGJykKCSAgYz1jLSdBJysxMDsKICAgICAgIGlmKGM+PSdhJyYmYzw9J2YnKQoJICBjPWMtJ2EnKzEwOwogICAgICAgc3dpdGNoKHRvZ2dsZSkKICAgICAgIHsKCSAgY2FzZSAwOgoJICAgICBoZXg9Yzw8NDsKCSAgICAgdG9nZ2xlPTE7CgkgIGJyZWFrOwoJICBjYXNlIDE6CgkgICAgIGhleCs9YzsKCSAgICAgaWYoaGV4PDMyfHxoZXg+MTI3KQoJICAgICB7CgkJaWYoc3RhcnRjbnQ9PTEpCgkJICAgcHJpbnRmKCIweCUwMlggIiwoaW50KWhleCk7CgkJZWxzZQoJCSAgIHByaW50ZigiLiIpOwoJICAgICB9CgkgICAgIGVsc2UKCSAgICAgewoJICAgICAgIHByaW50ZigiJWMiLGhleCk7CgkgICAgICAgaWYoc3RhcnRjbnQ9PTEpCgkJICBwcmludGYoIiAiKTsKCSAgICAgfQoJICAgICB0b2dnbGU9MDsKCSAgYnJlYWs7CiAgICAgICB9CiAgICB9CiAgfQogIHByaW50ZigiXG4iKTsKfQoKCgoKU3RhY2sgdHJhY2luZyB1bmRlciBWTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkEgYmFzaWMgYmFja3RyYWNlCi0tLS0tLS0tLS0tLS0tLS0tCgpIZXJlIGFyZSB0aGUgdHJpY2tzIEkgdXNlIDkgb3V0IG9mIDEwIHRpbWVzIGl0IHdvcmtzIHByZXR0eSB3ZWxsLAoKV2hlbiB5b3VyIGJhY2tjaGFpbiByZWFjaGVzIGEgZGVhZCBlbmQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGhpcyBjYW4gaGFwcGVuIHdoZW4gYW4gZXhjZXB0aW9uIGhhcHBlbnMgaW4gdGhlIGtlcm5lbCAmIHRoZSBrZXJuZWwgaXMgZW50ZXJlZCB0d2ljZQppZiB5b3UgcmVhY2ggdGhlIE5VTEwgcG9pbnRlciBhdCB0aGUgZW5kIG9mIHRoZSBiYWNrIGNoYWluIHlvdSBzaG91bGQgYmUKYWJsZSB0byBzbmlmZiBmdXJ0aGVyIGJhY2sgaWYgeW91IGZvbGxvdyB0aGUgZm9sbG93aW5nIHRyaWNrcy4KMSkgQSBrZXJuZWwgYWRkcmVzcyBzaG91bGQgYmUgZWFzeSB0byByZWNvZ25pc2Ugc2luY2UgaXQgaXMgaW4KcHJpbWFyeSBzcGFjZSAmIHRoZSBwcm9ibGVtIHN0YXRlIGJpdCBpc24ndCBzZXQgJiBhbHNvClRoZSBIaSBiaXQgb2YgdGhlIGFkZHJlc3MgaXMgc2V0LgoyKSBBbm90aGVyIGJhY2tjaGFpbiBzaG91bGQgYWxzbyBiZSBlYXN5IHRvIHJlY29nbmlzZSBzaW5jZSBpdCBpcyBhbiAKYWRkcmVzcyBwb2ludGluZyB0byBhbm90aGVyIGFkZHJlc3MgYXBwcm94aW1hdGVseSAxMDAgYnl0ZXMgb3IgMHg3MCBoZXgKYmVoaW5kIHRoZSBjdXJyZW50IHN0YWNrcG9pbnRlci4KCgpIZXJlIGlzIHNvbWUgcHJhY3RpY2UuCmJvb3QgdGhlIGtlcm5lbCAmIGhpdCBQQTEgYXQgc29tZSByYW5kb20gdGltZQpkIGcgdG8gZGlzcGxheSB0aGUgZ3BycywgdGhpcyBzaG91bGQgZGlzcGxheSBzb21ldGhpbmcgbGlrZQpHUFIgIDAgPSAgMDAwMDAwMDEgIDAwMTU2MDE4ICAwMDE0MzU5QyAgMDAwMDAwMDAKR1BSICA0ID0gIDAwMDAwMDAxICAwMDFCODg4OCAgMDAwMDAzRTAgIDAwMDAwMDAwCkdQUiAgOCA9ICAwMDEwMDA4MCAgMDAxMDAwODQgIDAwMDAwMDAwICAwMDBGRTAwMApHUFIgMTIgPSAgMDAwMTA0MDAgIDgwMDFCMkRDICA4MDAxQjM2QSAgMDAwRkZFRDgKTm90ZSB0aGF0IEdQUjE0IGlzIGEgcmV0dXJuIGFkZHJlc3MgYnV0IGFzIHdlIGFyZSByZWFsIG1lbiB3ZSBhcmUgZ29pbmcgdG8KdHJhY2UgdGhlIHN0YWNrLgpkaXNwbGF5IDB4NDAgYnl0ZXMgYWZ0ZXIgdGhlIHN0YWNrIHBvaW50ZXIuCgpWMDAwRkZFRDggIDAwMEZGRjM4IDgwMDFCODM4IDgwMDE0QzhFIDAwMEZGRjM4ClYwMDBGRkVFOCAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAzRTAgMDAwMDAwMDAKVjAwMEZGRUY4ICAwMDEwMDA4MCAwMDEwMDA4NCAwMDAwMDAwMCAwMDBGRTAwMApWMDAwRkZGMDggIDAwMDEwNDAwIDgwMDFCMkRDIDgwMDFCMzZBIDAwMEZGRUQ4CgoKQWggbm93IGxvb2sgYXQgd2hhdHMgaW4gc3ArNTYgKHNwKzB4MzgpIHRoaXMgaXMgODAwMUIzNkEgb3VyIHNhdmVkIHIxNCBpZgp5b3UgbG9vayBhYm92ZSBhdCBvdXIgc3RhY2tmcmFtZSAmIGFsc28gYWdyZWVzIHdpdGggR1BSMTQuCgpub3cgYmFja2NoYWluIApkIDAwMEZGRjM4LjQwCndlIG5vdyBhcmUgdGFraW5nIHRoZSBjb250ZW50cyBvZiBTUCB0byBnZXQgb3VyIGZpcnN0IGJhY2tjaGFpbi4KClYwMDBGRkYzOCAgMDAwRkZGQTAgMDAwMDAwMDAgMDAwMTQ5OTUgMDAxNDcwOTQKVjAwMEZGRjQ4ICAwMDE0NzA5MCAwMDE0NzBBMCAwMDAwMDNFMCAwMDAwMDAwMApWMDAwRkZGNTggIDAwMTAwMDgwIDAwMTAwMDg0IDAwMDAwMDAwIDAwMUJGMUQwClYwMDBGRkY2OCAgMDAwMTA0MDAgODAwMTQ5QkEgODAwMTRDQTYgMDAwRkZGMzgKClRoaXMgZGlzcGxheXMgYSAybmQgcmV0dXJuIGFkZHJlc3Mgb2YgODAwMTRDQTYKCm5vdyBkbyBkIDAwMEZGRkEwLjQwIGZvciBvdXIgM3JkIGJhY2tjaGFpbgoKVjAwMEZGRkEwICAwNEI1MjAwMiAwMDAxMTA3RiAwMDAwMDAwMCAwMDAwMDAwMApWMDAwRkZGQjAgIDAwMDAwMDAwIDAwMDAwMDAwIEZGMDAwMDAwIDAwMDExMDdGClYwMDBGRkZDMCAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAKVjAwMEZGRkQwICAwMDAxMDQwMCA4MDAxMDgwMiA4MDAxMDg1QSAwMDBGRkZBMAoKCm91ciAzcmQgcmV0dXJuIGFkZHJlc3MgaXMgODAwMTA4NUEKCmFzIHRoZSAwNEI1MjAwMiBsb29rcyBzdXNwaWNpb3VzbHkgbGlrZSBydWJiaXNoIGl0IGlzIGZhaXIgdG8gYXNzdW1lIHRoYXQgdGhlIGtlcm5lbCBlbnRyeSByb3V0aW5lcwpmb3IgdGhlIHNha2Ugb2Ygb3B0aW1pc2F0aW9uIGRvbid0IHNldCB1cCBhIGJhY2tjaGFpbi4KCm5vdyBsb29rIGF0IFN5c3RlbS5tYXAgdG8gc2VlIGlmIHRoZSBhZGRyZXNzZXMgbWFrZSBhbnkgc2Vuc2UuCgpncmVwIC1pIDAwMDFiMyBTeXN0ZW0ubWFwCm91dHB1dHMgYW1vbmcgb3RoZXIgdGhpbmdzCjAwMDFiMzA0IFQgY3B1X2lkbGUgCnNvIDgwMDFCMzZBCmlzIGNwdV9pZGxlKzB4NjYgKCBxdWlldCB0aGUgY3B1IGlzIGFzbGVlcCwgZG9uJ3Qgd2FrZSBpdCApCgoKZ3JlcCAtaSAwMDAxNCBTeXN0ZW0ubWFwIApwcm9kdWNlcyBhbW9uZyBvdGhlciB0aGluZ3MKMDAwMTRhNzggVCBzdGFydF9rZXJuZWwgIApzbyAwMDE0Q0E2IGlzIHN0YXJ0X2tlcm5lbCtzb21lIGhleCBudW1iZXIgSSBjYW4ndCBhZGQgaW4gbXkgaGVhZC4KCmdyZXAgLWkgMDAxMDggU3lzdGVtLm1hcCAKdGhpcyBwcm9kdWNlcwowMDAxMDgwMCBUIF9zdGV4dApzbyAgIDgwMDEwODVBIGlzIF9zdGV4dCsweDVhCgpDb25ncmF0cyB5b3UndmUgZG9uZSB5b3VyIGZpcnN0IGJhY2tjaGFpbi4KCgoKcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSBJTyBPdmVydmlldwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpJIGFtIG5vdCBnb2luZyB0byBnaXZlIGEgY291cnNlIGluIDM5MCBJTyBhcmNoaXRlY3R1cmUgYXMgdGhpcyB3b3VsZCB0YWtlIG1lIHF1aXRlIGEKd2hpbGUgJiBJJ20gbm8gZXhwZXJ0LiBJbnN0ZWFkIEknbGwgZ2l2ZSBhIDM5MCBJTyBhcmNoaXRlY3R1cmUgc3VtbWFyeSBmb3IgRHVtbWllcyBpZiB5b3UgaGF2ZSAKdGhlIHMvMzkwIHByaW5jaXBsZXMgb2Ygb3BlcmF0aW9uIGF2YWlsYWJsZSByZWFkIHRoaXMgaW5zdGVhZC4gSWYgbm90aGluZyBlbHNlIHlvdSBtYXkgZmluZCBhIGZldyAKdXNlZnVsIGtleXdvcmRzIGluIGhlcmUgJiBiZSBhYmxlIHRvIHVzZSB0aGVtIG9uIGEgd2ViIHNlYXJjaCBlbmdpbmUgbGlrZSBhbHRhdmlzdGEgdG8gZmluZCAKbW9yZSB1c2VmdWwgaW5mb3JtYXRpb24uCgpVbmxpa2Ugb3RoZXIgYnVzIGFyY2hpdGVjdHVyZXMgbW9kZXJuIDM5MCBzeXN0ZW1zIGRvIHRoZWlyIElPIHVzaW5nIG1vc3RseQpmaWJyZSBvcHRpY3MgJiBkZXZpY2VzIHN1Y2ggYXMgdGFwZXMgJiBkaXNrcyBjYW4gYmUgc2hhcmVkIGJldHdlZW4gc2V2ZXJhbCBtYWluZnJhbWVzLAphbHNvIFMzOTAgY2FuIHN1cHBvcnQgdXAgdG8gNjU1MzYgZGV2aWNlcyB3aGlsZSBhIGhpZ2ggZW5kIFBDIGJhc2VkIHN5c3RlbSBtaWdodCBiZSBjaG9raW5nCndpdGggYXJvdW5kIDY0LiBIZXJlIGlzIHNvbWUgb2YgdGhlIGNvbW1vbiBJTyB0ZXJtaW5vbG9neQoKU3ViY2hhbm5lbDoKVGhpcyBpcyB0aGUgbG9naWNhbCBudW1iZXIgbW9zdCBJTyBjb21tYW5kcyB1c2UgdG8gdGFsayB0byBhbiBJTyBkZXZpY2UgdGhlcmUgY2FuIGJlIHVwIHRvCjB4MTAwMDAgKDY1NTM2KSBvZiB0aGVzZSBpbiBhIGNvbmZpZ3VyYXRpb24gdHlwaWNhbGx5IHRoZXJlIGlzIGEgZmV3IGh1bmRyZWQuIFVuZGVyIFZNCmZvciBzaW1wbGljaXR5IHRoZXkgYXJlIGFsbG9jYXRlZCBjb250aWd1b3VzbHksIGhvd2V2ZXIgb24gdGhlIG5hdGl2ZSBoYXJkd2FyZSB0aGV5IGFyZSBub3QKdGhleSB0eXBpY2FsbHkgc3RheSBjb25zaXN0ZW50IGJldHdlZW4gYm9vdHMgcHJvdmlkZWQgbm8gbmV3IGhhcmR3YXJlIGlzIGluc2VydGVkIG9yIHJlbW92ZWQuClVuZGVyIExpbnV4IGZvciAzOTAgd2UgdXNlIHRoZXNlIGFzIElSUSdzICYgYWxzbyB3aGVuIGlzc3VpbmcgYW4gSU8gY29tbWFuZCAoQ0xFQVIgU1VCQ0hBTk5FTCwKSEFMVCBTVUJDSEFOTkVMLE1PRElGWSBTVUJDSEFOTkVMLFJFU1VNRSBTVUJDSEFOTkVMLFNUQVJUIFNVQkNIQU5ORUwsU1RPUkUgU1VCQ0hBTk5FTCAmIApURVNUIFNVQkNIQU5ORUwgKSB3ZSB1c2UgdGhpcyBhcyB0aGUgSUQgb2YgdGhlIGRldmljZSB3ZSB3aXNoIHRvIHRhbGsgdG8sIHRoZSBtb3N0CmltcG9ydGFudCBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgYXJlIFNUQVJUIFNVQkNIQU5ORUwgKCB0byBzdGFydCBJTyApLCBURVNUIFNVQkNIQU5ORUwgKCB0byBjaGVjawp3aGV0aGVyIHRoZSBJTyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ICksICYgSEFMVCBTVUJDSEFOTkVMICggdG8ga2lsbCBJTyApLCBhIHN1YmNoYW5uZWwKY2FuIGhhdmUgdXAgdG8gOCBjaGFubmVsIHBhdGhzIHRvIGEgZGV2aWNlIHRoaXMgb2ZmZXJzIHJlZHVuZGFuY3kgaWYgb25lIGlzIG5vdCBhdmFpbGFibGUuCgoKRGV2aWNlIE51bWJlcjoKVGhpcyBudW1iZXIgcmVtYWlucyBzdGF0aWMgJiBJcyBjbG9zZWx5IHRpZWQgdG8gdGhlIGhhcmR3YXJlLCB0aGVyZSBhcmUgNjU1MzYgb2YgdGhlc2UKYWxzbyB0aGV5IGFyZSBtYWRlIHVwIG9mIGEgQ0hQSUQgKCBDaGFubmVsIFBhdGggSUQsIHRoZSBtb3N0IHNpZ25pZmljYW50IDggYml0cyApIAomIGFub3RoZXIgbHNiIDggYml0cy4gVGhlc2UgcmVtYWluIHN0YXRpYyBldmVuIGlmIG1vcmUgZGV2aWNlcyBhcmUgaW5zZXJ0ZWQgb3IgcmVtb3ZlZApmcm9tIHRoZSBoYXJkd2FyZSwgdGhlcmUgaXMgYSAxIHRvIDEgbWFwcGluZyBiZXR3ZWVuIFN1YmNoYW5uZWxzICYgRGV2aWNlIE51bWJlcnMgcHJvdmlkZWQKZGV2aWNlcyBhcmVuJ3QgaW5zZXJ0ZWQgb3IgcmVtb3ZlZC4KCkNoYW5uZWwgQ29udHJvbCBXb3JkczoKQ0NXUyBhcmUgbGlua2VkIGxpc3RzIG9mIGluc3RydWN0aW9ucyBpbml0aWFsbHkgcG9pbnRlZCB0byBieSBhbiBvcGVyYXRpb24gcmVxdWVzdCBibG9jayAoT1JCKSwKd2hpY2ggaXMgaW5pdGlhbGx5IGdpdmVuIHRvIFN0YXJ0IFN1YmNoYW5uZWwgKFNTQ0gpIGNvbW1hbmQgYWxvbmcgd2l0aCB0aGUgc3ViY2hhbm5lbCBudW1iZXIKZm9yIHRoZSBJTyBzdWJzeXN0ZW0gdG8gcHJvY2VzcyB3aGlsZSB0aGUgQ1BVIGNvbnRpbnVlcyBleGVjdXRpbmcgbm9ybWFsIGNvZGUuClRoZXNlIGNvbWUgaW4gdHdvIGZsYXZvdXJzLCBGb3JtYXQgMCAoIDI0IGJpdCBmb3IgYmFja3dhcmQgKQpjb21wYXRpYmlsaXR5ICYgRm9ybWF0IDEgKCAzMSBiaXQgKS4gVGhlc2UgYXJlIHR5cGljYWxseSB1c2VkIHRvIGlzc3VlIHJlYWQgJiB3cml0ZSAKKCAmIG1hbnkgb3RoZXIgaW5zdHJ1Y3Rpb25zICkgdGhleSBjb25zaXN0IG9mIGEgbGVuZ3RoIGZpZWxkICYgYW4gYWJzb2x1dGUgYWRkcmVzcyBmaWVsZC4KRm9yIGVhY2ggSU8gdHlwaWNhbGx5IGdldCAxIG9yIDIgaW50ZXJydXB0cyBvbmUgZm9yIGNoYW5uZWwgZW5kICggcHJpbWFyeSBzdGF0dXMgKSB3aGVuIHRoZQpjaGFubmVsIGlzIGlkbGUgJiB0aGUgc2Vjb25kIGZvciBkZXZpY2UgZW5kICggc2Vjb25kYXJ5IHN0YXR1cyApIHNvbWV0aW1lcyB5b3UgZ2V0IGJvdGgKY29uY3VycmVudGx5LCB5b3UgY2hlY2sgaG93IHRoZSBJTyB3ZW50IG9uIGJ5IGlzc3VpbmcgYSBURVNUIFNVQkNIQU5ORUwgYXQgZWFjaCBpbnRlcnJ1cHQsCmZyb20gd2hpY2ggeW91IHJlY2VpdmUgYW4gSW50ZXJydXB0aW9uIHJlc3BvbnNlIGJsb2NrIChJUkIpLiBJZiB5b3UgZ2V0IGNoYW5uZWwgJiBkZXZpY2UgZW5kIApzdGF0dXMgaW4gdGhlIElSQiB3aXRob3V0IGNoYW5uZWwgY2hlY2tzIGV0Yy4geW91ciBJTyBwcm9iYWJseSB3ZW50IG9rYXkuIElmIHlvdSBkaWRuJ3QgeW91CnByb2JhYmx5IG5lZWQgYSBkb2N0b3IgdG8gZXhhbWluZSB0aGUgSVJCICYgZXh0ZW5kZWQgc3RhdHVzIHdvcmQgZXRjLgpJZiBhbiBlcnJvciBvY2N1cnMsIG1vcmUgc29waGlzdGljYXRlZCBjb250cm9sIHVuaXRzIGhhdmUgYSBmYWNpbGl0eSBrbm93biBhcwpjb25jdXJyZW50IHNlbnNlIHRoaXMgbWVhbnMgdGhhdCBpZiBhbiBlcnJvciBvY2N1cnMgRXh0ZW5kZWQgc2Vuc2UgaW5mb3JtYXRpb24gd2lsbApiZSBwcmVzZW50ZWQgaW4gdGhlIEV4dGVuZGVkIHN0YXR1cyB3b3JkIGluIHRoZSBJUkIgaWYgbm90IHlvdSBoYXZlIHRvIGlzc3VlIGEKc3Vic2VxdWVudCBTRU5TRSBDQ1cgY29tbWFuZCBhZnRlciB0aGUgdGVzdCBzdWJjaGFubmVsLiAKCgpUUEkoIFRlc3QgcGVuZGluZyBpbnRlcnJ1cHQpIGNhbiBhbHNvIGJlIHVzZWQgZm9yIHBvbGxlZCBJTyBidXQgaW4gbXVsdGl0YXNraW5nIG11bHRpcHJvY2Vzc29yCnN5c3RlbXMgaXQgaXNuJ3QgcmVjb21tZW5kZWQgZXhjZXB0IGZvciBjaGVja2luZyBzcGVjaWFsIGNhc2VzICggaS5lLiBub24gbG9vcGluZyBjaGVja3MgZm9yCnBlbmRpbmcgSU8gZXRjLiApLgoKU3RvcmUgU3ViY2hhbm5lbCAmIE1vZGlmeSBTdWJjaGFubmVsIGNhbiBiZSB1c2VkIHRvIGV4YW1pbmUgJiBtb2RpZnkgb3BlcmF0aW5nIGNoYXJhY3RlcmlzdGljcwpvZiBhIHN1YmNoYW5uZWwgKCBlLmcuIGNoYW5uZWwgcGF0aHMgKS4KCk90aGVyIElPIHJlbGF0ZWQgVGVybXM6ClN5c3BsZXg6IFMzOTAncyBDbHVzdGVyaW5nIFRlY2hub2xvZ3kKUURJTzogUzM5MCdzIG5ldyBoaWdoIHNwZWVkIElPIGFyY2hpdGVjdHVyZSB0byBzdXBwb3J0IGRldmljZXMgc3VjaCBhcyBnaWdhYml0IGV0aGVybmV0LAp0aGlzIGFyY2hpdGVjdHVyZSBpcyBhbHNvIGRlc2lnbmVkIHRvIGJlIGZvcndhcmQgY29tcGF0aWJsZSB3aXRoIHVwICYgY29taW5nIDY0IGJpdCBtYWNoaW5lcy4KCgpHZW5lcmFsIENvbmNlcHRzIAoKSW5wdXQgT3V0cHV0IFByb2Nlc3NvcnMgKElPUCdzKSBhcmUgcmVzcG9uc2libGUgZm9yIGNvbW11bmljYXRpbmcgYmV0d2Vlbgp0aGUgbWFpbmZyYW1lIENQVSdzICYgdGhlIGNoYW5uZWwgJiByZWxpZXZlIHRoZSBtYWluZnJhbWUgQ1BVJ3MgZnJvbSB0aGUKYnVyZGVuIG9mIGNvbW11bmljYXRpbmcgd2l0aCBJTyBkZXZpY2VzIGRpcmVjdGx5LCB0aGlzIGFsbG93cyB0aGUgQ1BVJ3MgdG8gCmNvbmNlbnRyYXRlIG9uIGRhdGEgcHJvY2Vzc2luZy4gCgpJT1AncyBjYW4gdXNlIG9uZSBvciBtb3JlIGxpbmtzICgga25vd24gYXMgY2hhbm5lbCBwYXRocyApIHRvIHRhbGsgdG8gZWFjaCAKSU8gZGV2aWNlLiBJdCBmaXJzdCBjaGVja3MgZm9yIHBhdGggYXZhaWxhYmlsaXR5ICYgY2hvb3NlcyBhbiBhdmFpbGFibGUgb25lLAp0aGVuIHN0YXJ0cyAoICYgc29tZXRpbWVzIHRlcm1pbmF0ZXMgSU8gKS4KVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBjaGFubmVsIHBhdGg6IEVTQ09OICYgdGhlIFBhcmFsbGVsIElPIGludGVyZmFjZS4KCklPIGRldmljZXMgYXJlIGF0dGFjaGVkIHRvIGNvbnRyb2wgdW5pdHMsIGNvbnRyb2wgdW5pdHMgcHJvdmlkZSB0aGUKbG9naWMgdG8gaW50ZXJmYWNlIHRoZSBjaGFubmVsIHBhdGhzICYgY2hhbm5lbCBwYXRoIElPIHByb3RvY29scyB0byAKdGhlIElPIGRldmljZXMsIHRoZXkgY2FuIGJlIGludGVncmF0ZWQgd2l0aCB0aGUgZGV2aWNlcyBvciBob3VzZWQgc2VwYXJhdGVseQomIG9mdGVuIHRhbGsgdG8gc2V2ZXJhbCBzaW1pbGFyIGRldmljZXMgKCB0eXBpY2FsIGV4YW1wbGVzIHdvdWxkIGJlIHJhaWQgCmNvbnRyb2xsZXJzIG9yIGEgY29udHJvbCB1bml0IHdoaWNoIGNvbm5lY3RzIHRvIDEwMDAgMzI3MCB0ZXJtaW5hbHMgKS4KCgogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgKy0tLS0tKyArLS0tLS0rICstLS0tLSsgKy0tLS0tKyAgKy0tLS0tLS0tLS0rICArLS0tLS0tLS0tLSsgICB8CiAgICB8IHwgQ1BVIHwgfCBDUFUgfCB8IENQVSB8IHwgQ1BVIHwgIHwgIE1haW4gICAgfCAgfCBFeHBhbmRlZCB8ICAgfAogICAgfCB8ICAgICB8IHwgICAgIHwgfCAgICAgfCB8ICAgICB8ICB8ICBNZW1vcnkgIHwgIHwgIFN0b3JhZ2UgfCAgIHwKICAgIHwgKy0tLS0tKyArLS0tLS0rICstLS0tLSsgKy0tLS0tKyAgKy0tLS0tLS0tLS0rICArLS0tLS0tLS0tLSsgICB8IAogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgICBJT1AgICAgICAgIHwgICAgICBJT1AgICAgICB8ICAgICAgIElPUCAgICAgICAgICAgICAgICAgICAgICB8CiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCAKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKICAgICAgICAgfHwgIEJ1cyAmIFRhZyBDaGFubmVsIFBhdGggICAgICAgICAgICAgICAgICAgICAgfHwgRVNDT04KICAgICAgICAgfHwgID09PT09PT09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgfHwgQ2hhbm5lbAogICAgICAgICB8fCAgfHwgICAgICAgICAgICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICB8fCBQYXRoCiAgICArLS0tLS0tLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0tLSsgICAgICAgICArLS0tLS0tLS0tLSsKICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgfAogICAgfCAgICBDVSAgICB8ICAgICAgICAgICAgICAgfCAgICBDVSAgICB8ICAgICAgICAgfCAgICBDVSAgICB8CiAgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tKyAgICAgICAgICstLS0tLS0tLS0tKwogICAgICAgfCAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgfAorLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0rICAgICAgKy0tLS0tLS0tLS0rICAgKy0tLS0tLS0tLS0rICstLS0tLS0tLS0tKwp8SS9PIERldmljZXwgfEkvTyBEZXZpY2V8ICAgICAgfEkvTyBEZXZpY2V8ICAgfEkvTyBEZXZpY2V8IHxJL08gRGV2aWNlfAorLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0rICAgICAgKy0tLS0tLS0tLS0rICAgKy0tLS0tLS0tLS0rICstLS0tLS0tLS0tKwogIENQVSA9IENlbnRyYWwgUHJvY2Vzc2luZyBVbml0ICAgIAogIEMgPSBDaGFubmVsICAgICAgICAgICAgICAgICAgICAgIAogIElPUCA9IElQIFByb2Nlc3NvciAgICAgICAgICAgICAgIAogIENVID0gQ29udHJvbCBVbml0CgpUaGUgMzkwIElPIHN5c3RlbXMgY29tZSBpbiAyIGZsYXZvdXJzIHRoZSBjdXJyZW50IDM5MCBtYWNoaW5lcyBzdXBwb3J0IGJvdGgKClRoZSBPbGRlciAzNjAgJiAzNzAgSW50ZXJmYWNlLHNvbWV0aW1lcyBjYWxsZWQgdGhlIFBhcmFsbGVsIEkvTyBpbnRlcmZhY2UsCnNvbWV0aW1lcyBjYWxsZWQgQnVzLWFuZCBUYWcgJiBzb21ldGltZXMgT3JpZ2luYWwgRXF1aXBtZW50IE1hbnVmYWN0dXJlcnMKSW50ZXJmYWNlIChPRU1JKS4KClRoaXMgYnl0ZSB3aWRlIFBhcmFsbGVsIGNoYW5uZWwgcGF0aC9idXMgaGFzIHBhcml0eSAmIGRhdGEgb24gdGhlICJCdXMiIGNhYmxlIAomIGNvbnRyb2wgbGluZXMgb24gdGhlICJUYWciIGNhYmxlLiBUaGVzZSBjYW4gb3BlcmF0ZSBpbiBieXRlIG11bHRpcGxleCBtb2RlIGZvcgpzaGFyaW5nIGJldHdlZW4gc2V2ZXJhbCBzbG93IGRldmljZXMgb3IgYnVyc3QgbW9kZSAmIG1vbm9wb2xpemUgdGhlIGNoYW5uZWwgZm9yIHRoZQp3aG9sZSBidXJzdC4gVXAgdG8gMjU2IGRldmljZXMgY2FuIGJlIGFkZHJlc3NlZCAgb24gb25lIG9mIHRoZXNlIGNhYmxlcy4gVGhlc2UgY2FibGVzIGFyZQphYm91dCBvbmUgaW5jaCBpbiBkaWFtZXRlci4gVGhlIG1heGltdW0gdW5leHRlbmRlZCBsZW5ndGggc3VwcG9ydGVkIGJ5IHRoZXNlIGNhYmxlcyBpcwoxMjUgTWV0ZXJzIGJ1dCB0aGlzIGNhbiBiZSBleHRlbmRlZCB1cCB0byAya20gd2l0aCBhIGZpYnJlIG9wdGljIGNoYW5uZWwgZXh0ZW5kZWQgCnN1Y2ggYXMgYSAzMDQ0LiBUaGUgbWF4aW11bSBidXJzdCBzcGVlZCBzdXBwb3J0ZWQgaXMgNC41IG1lZ2FieXRlcyBwZXIgc2Vjb25kIGhvd2V2ZXIKc29tZSByZWFsbHkgb2xkIHByb2Nlc3NvcnMgc3VwcG9ydCBvbmx5IHRyYW5zZmVyIHJhdGVzIG9mIDMuMCwgMi4wICYgMS4wIE1CL3NlYy4KT25lIG9mIHRoZXNlIHBhdGhzIGNhbiBiZSBkYWlzeSBjaGFpbmVkIHRvIHVwIHRvIDggY29udHJvbCB1bml0cy4KCgpFU0NPTiBpZiBmaWJyZSBvcHRpYyBpdCBpcyBhbHNvIGNhbGxlZCBGSUNPTiAKV2FzIGludHJvZHVjZWQgYnkgSUJNIGluIDE5OTAuIEhhcyAyIGZpYnJlIG9wdGljIGNhYmxlcyAmIHVzZXMgZWl0aGVyIGxlZHMgb3IgbGFzZXJzCmZvciBjb21tdW5pY2F0aW9uIGF0IGEgc2lnbmFsaW5nIHJhdGUgb2YgdXAgdG8gMjAwIG1lZ2FiaXRzL3NlYy4gQXMgMTBiaXRzIGFyZSB0cmFuc2ZlcnJlZApmb3IgZXZlcnkgOCBiaXRzIGluZm8gdGhpcyBkcm9wcyB0byAxNjAgbWVnYWJpdHMvc2VjICYgdG8gMTguNiBNZWdhYnl0ZXMvc2VjIG9uY2UKY29udHJvbCBpbmZvICYgQ1JDIGFyZSBhZGRlZC4gRVNDT04gb25seSBvcGVyYXRlcyBpbiBidXJzdCBtb2RlLgogCkVTQ09OcyB0eXBpY2FsIG1heCBjYWJsZSBsZW5ndGggaXMgM2ttIGZvciB0aGUgbGVkIHZlcnNpb24gJiAyMGttIGZvciB0aGUgbGFzZXIgdmVyc2lvbgprbm93biBhcyBYREYgKCBleHRlbmRlZCBkaXN0YW5jZSBmYWNpbGl0eSApLiBUaGlzIGNhbiBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5IHVzaW5nIGFuCkVTQ09OIGRpcmVjdG9yIHdoaWNoIHRyaXBsZXMgdGhlIGFib3ZlIG1lbnRpb25lZCByYW5nZXMuIFVubGlrZSBCdXMgJiBUYWcgYXMgRVNDT04gaXMKc2VyaWFsIGl0IHVzZXMgYSBwYWNrZXQgc3dpdGNoaW5nIGFyY2hpdGVjdHVyZSB0aGUgc3RhbmRhcmQgQnVzICYgVGFnIGNvbnRyb2wgcHJvdG9jb2wKaXMgaG93ZXZlciBwcmVzZW50IHdpdGhpbiB0aGUgcGFja2V0cy4gVXAgdG8gMjU2IGRldmljZXMgY2FuIGJlIGF0dGFjaGVkIHRvIGVhY2ggY29udHJvbAp1bml0IHRoYXQgdXNlcyBvbmUgb2YgdGhlc2UgaW50ZXJmYWNlcy4KCkNvbW1vbiAzOTAgRGV2aWNlcyBpbmNsdWRlOgpOZXR3b3JrIGFkYXB0ZXJzIHR5cGljYWxseSBPU0EyLDMxNzIncywyMTE2J3MgJiBPU0EtRSBnaWdhYml0IGV0aGVybmV0IGFkYXB0ZXJzLApDb25zb2xlcyAzMjcwICYgMzIxNSAoIGEgdGVsZXR5cGUgZW11bGF0ZWQgdW5kZXIgbGludXggZm9yIGEgbGluZSBtb2RlIGNvbnNvbGUgKS4KREFTRCdzIGRpcmVjdCBhY2Nlc3Mgc3RvcmFnZSBkZXZpY2VzICggb3RoZXJ3aXNlIGtub3duIGFzIGhhcmQgZGlza3MgKS4KVGFwZSBEcml2ZXMuCkNUQyAoIENoYW5uZWwgdG8gQ2hhbm5lbCBBZGFwdGVycyApLApFU0NPTiBvciBQYXJhbGxlbCBDYWJsZXMgdXNlZCBhcyBhIHZlcnkgaGlnaCBzcGVlZCBzZXJpYWwgbGluawpiZXR3ZWVuIDIgbWFjaGluZXMuIFdlIHVzZSAyIGNhYmxlcyB1bmRlciBsaW51eCB0byBkbyBhIGJpLWRpcmVjdGlvbmFsIHNlcmlhbCBsaW5rLgoKCkRlYnVnZ2luZyBJTyBvbiBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIHVuZGVyIFZNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpOb3cgd2UgYXJlIHJlYWR5IHRvIGdvIG9uIHdpdGggSU8gdHJhY2luZyBjb21tYW5kcyB1bmRlciBWTQoKQSBmZXcgc2VsZiBleHBsYW5hdG9yeSBxdWVyaWVzOgpRIE9TQQpRIENUQwpRIERJU0sgKCBUaGlzIGNvbW1hbmQgaXMgQ01TIHNwZWNpZmljICkKUSBEQVNECgoKCgoKClEgT1NBIG9uIG15IG1hY2hpbmUgcmV0dXJucwpPU0EgIDdDMDggT04gT1NBICAgN0MwOCBTVUJDSEFOTkVMID0gMDAwMApPU0EgIDdDMDkgT04gT1NBICAgN0MwOSBTVUJDSEFOTkVMID0gMDAwMQpPU0EgIDdDMTQgT04gT1NBICAgN0MxNCBTVUJDSEFOTkVMID0gMDAwMgpPU0EgIDdDMTUgT04gT1NBICAgN0MxNSBTVUJDSEFOTkVMID0gMDAwMwoKSWYgeW91IGhhdmUgYSBndWVzdCB3aXRoIGNlcnRhaW4gcHJpdmlsZWdlcyB5b3UgbWF5IGJlIGFibGUgdG8gc2VlIGRldmljZXMKd2hpY2ggZG9uJ3QgYmVsb25nIHRvIHlvdS4gVG8gYXZvaWQgdGhpcywgYWRkIHRoZSBvcHRpb24gVi4KZS5nLgpRIFYgT1NBCgpOb3cgdXNpbmcgdGhlIGRldmljZSBudW1iZXJzIHJldHVybmVkIGJ5IHRoaXMgY29tbWFuZCB3ZSB3aWxsClRyYWNlIHRoZSBpbyBzdGFydGluZyB1cCBvbiB0aGUgZmlyc3QgZGV2aWNlIDdjMDggJiA3YzA5CkluIG91ciBzaW1wbGVzdCBjYXNlIHdlIGNhbiB0cmFjZSB0aGUgCnN0YXJ0IHN1YmNoYW5uZWxzCmxpa2UgVFIgU1NDSCA3QzA4LTdDMDkKb3IgdGhlIGhhbHQgc3ViY2hhbm5lbHMKb3IgVFIgSFNDSCA3QzA4LTdDMDkKTVNDSCdzICxTVFNDSCdzIEkgdGhpbmsgeW91IGNhbiBndWVzcyB0aGUgcmVzdAoKSW5nbydzIGZhdm91cml0ZSB0cmljayBpcyB0cmFjaW5nIGFsbCB0aGUgSU8ncyAmIENDV1MgJiBzcG9vbGluZyB0aGVtIGludG8gdGhlIHJlYWRlciBvZiBhbm90aGVyClZNIGd1ZXN0IHNvIGhlIGNhbiBmdHAgdGhlIGxvZ2ZpbGUgYmFjayB0byBoaXMgb3duIG1hY2hpbmUuSSdsbCBkbyBhIHNtYWxsIGJpdCBvZiB0aGlzICYgZ2l2ZSB5b3UKIGEgbG9vayBhdCB0aGUgb3V0cHV0LgoKMSkgU3Bvb2wgc3Rkb3V0IHRvIFZNIHJlYWRlcgpTUCBQUlQgVE8gKGFub3RoZXIgdm0gZ3Vlc3QgKSBvciAqIGZvciB0aGUgbG9jYWwgdm0gZ3Vlc3QKMikgRmlsbCB0aGUgcmVhZGVyIHdpdGggdGhlIHRyYWNlClRSIElPIDdjMDgtN2MwOSBJTlNUIElOVCBDQ1cgUFJUIFJVTgozKSBTdGFydCB1cCBsaW51eCAKaSAwMGMgIAo0KSBGaW5pc2ggdGhlIHRyYWNlClRSIEVORAo1KSBjbG9zZSB0aGUgcmVhZGVyCkMgUFJUCjYpIGxpc3QgcmVhZGVyIGNvbnRlbnRzClJEUkxJU1QKNykgY29weSBpdCB0byBsaW51eDQncyBtaW5pZGlzayAKUkVDRUlWRSAvIExPRyBUWFQgQTEgKCByZXBsYWNlCjgpCmZpbGVsICYgcHJlc3MgRjExIHRvIGxvb2sgYXQgaXQKWW91IHNob3VsZCBzZWUgc29tZXRoaW5nIGxpa2U6CgowMDAyMDk0MicgU1NDSCAgQjIzMzQwMDAgICAgMDA0ODgxM0MgICAgQ0MgMCAgICBTQ0ggMDAwMCAgICBERVYgN0MwOAogICAgICAgICAgQ1BBIDAwMEZGREYwICAgUEFSTSAwMEUyQzlDNCAgICBLRVkgMCAgRlBJIEMwICBMUE0gODAKICAgICAgICAgIENDVyAgICAwMDBGRkRGMCAgRTQyMDAxMDAgMDA0ODdGRTggICAwMDAwICBFNDI0MDEwMCAuLi4uLi4uLgogICAgICAgICAgSURBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDNEOEFGRTgKICAgICAgICAgIElEQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBGQjc2MDAwCjAwMDIwQjBBJyAgIEkvTyBERVYgN0MwOCAtPiAwMDAxOTdCQycgICBTQ0ggMDAwMCAgIFBBUk0gMDBFMkM5QzQKMDAwMjE2MjgnIFRTQ0ggIEIyMzU0MDAwID4+IDAwNDg4MTY0ICAgIENDIDAgICAgU0NIIDAwMDAgICAgREVWIDdDMDgKICAgICAgICAgIENDV0EgMDAwRkZERjggICBERVYgU1RTIDBDICBTQ0ggU1RTIDAwICBDTlQgMDBFQwogICAgICAgICAgIEtFWSAwICAgRlBJIEMwICBDQyAwICAgQ1RMUyA0MDA3CjAwMDIyMjM4JyBTVFNDSCBCMjM0NDAwMCA+PiAwMDQ4ODEwOCAgICBDQyAwICAgIFNDSCAwMDAwICAgIERFViA3QzA4CgpJZiB5b3UgZG9uJ3QgbGlrZSBtZXNzaW5nIHVwIHlvdXIgcmVhZGVkICggYmVjYXVzZSB5b3UgcG9zc2libHkgYm9vdGVkIGZyb20gaXQgKQp5b3UgY2FuIGFsdGVybmF0aXZlbHkgc3Bvb2wgaXQgdG8gYW5vdGhlciByZWFkZXJzIGd1ZXN0LgoKCk90aGVyIGNvbW1vbiBWTSBkZXZpY2UgcmVsYXRlZCBjb21tYW5kcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGhlc2UgY29tbWFuZHMgYXJlIGxpc3RlZCBvbmx5IGJlY2F1c2UgdGhleSBoYXZlCmJlZW4gb2YgdXNlIHRvIG1lIGluIHRoZSBwYXN0ICYgbWF5IGJlIG9mIHVzZSB0bwp5b3UgdG9vLiBGb3IgbW9yZSBjb21wbGV0ZSBpbmZvIG9uIGVhY2ggb2YgdGhlIGNvbW1hbmRzCnVzZSB0eXBlIEhFTFAgPGNvbW1hbmQ+IGZyb20gQ01TLgpkZXRhY2hpbmcgZGV2aWNlcwpERVQgPGRldm5vIHJhbmdlPgpBVFQgPGRldm5vIHJhbmdlPiA8Z3Vlc3Q+IAphdHRhY2ggYSBkZXZpY2UgdG8gZ3Vlc3QgKiBmb3IgeW91ciBvd24gZ3Vlc3QKUkVBRFkgPGRldm5vPiBjYXVzZSBWTSB0byBpc3N1ZSBhIGZha2UgaW50ZXJydXB0LgoKVGhlIFZBUlkgY29tbWFuZCBpcyBub3JtYWxseSBvbmx5IGF2YWlsYWJsZSB0byBWTSBhZG1pbmlzdHJhdG9ycy4KVkFSWSBPTiBQQVRIIDxwYXRoPiBUTyA8ZGV2bm8gcmFuZ2U+ClZBUlkgT0ZGIFBBVEggPFBBVEg+IEZST00gPGRldm5vIHJhbmdlPgpUaGlzIGlzIHVzZWQgdG8gc3dpdGNoIG9uIG9yIG9mZiBjaGFubmVsIHBhdGhzIHRvIGRldmljZXMuCgpRIENIUElEIDxjaGFubmVsIHBhdGggSUQ+ClRoaXMgZGlzcGxheXMgc3RhdGUgb2YgZGV2aWNlcyB1c2luZyB0aGlzIGNoYW5uZWwgcGF0aApEIFNDSElCIDxzdWJjaGFubmVsPgpUaGlzIGRpc3BsYXlzIHRoZSBzdWJjaGFubmVsIGluZm9ybWF0aW9uIFNDSElCIGJsb2NrIGZvciB0aGUgZGV2aWNlLgp0aGlzIEkgYmVsaWV2ZSBpcyBhbHNvIG9ubHkgYXZhaWxhYmxlIHRvIGFkbWluaXN0cmF0b3JzLgpERUZJTkUgQ1RDIDxkZXZubz4KZGVmaW5lcyBhIHZpcnR1YWwgQ1RDIGNoYW5uZWwgdG8gY2hhbm5lbCBjb25uZWN0aW9uCjIgbmVlZCB0byBiZSBkZWZpbmVkIG9uIGVhY2ggZ3Vlc3QgZm9yIHRoZSBDVEMgZHJpdmVyIHRvIHVzZS4KQ09VUExFICBkZXZubyB1c2VyaWQgcmVtb3RlIGRldm5vCkpvaW5zIGEgbG9jYWwgdmlydHVhbCBkZXZpY2UgdG8gYSByZW1vdGUgdmlydHVhbCBkZXZpY2UKKCBjb21tb25seSB1c2VkIGZvciB0aGUgQ1RDIGRyaXZlciApLgoKQnVpbGRpbmcgYSBWTSByYW1kaXNrIHVuZGVyIENNUyB3aGljaCBsaW51eCBjYW4gdXNlCmRlZiB2ZmItPGJsb2Nrc2l6ZT4gPHN1YmNoYW5uZWw+IDxudW1iZXIgYmxvY2tzPgpibG9ja3NpemUgaXMgY29tbW9ubHkgNDA5NiBmb3IgbGludXguCkZvcm1hdHRpbmcgaXQKZm9ybWF0IDxzdWJjaGFubmVsPiA8ZHJpdmVyIGxldHRlciBlLmcuIHg+IChibGtzaXplIDxibG9ja3NpemU+CgpTaGFyaW5nIGEgZGlzayBiZXR3ZWVuIG11bHRpcGxlIGd1ZXN0cwpMSU5LIHVzZXJpZCBkZXZubzEgZGV2bm8yIG1vZGUgcGFzc3dvcmQKCgoKR0RCIG9uIFMzOTAKPT09PT09PT09PT0KTi5CLiBpZiBjb21waWxpbmcgZm9yIGRlYnVnZ2luZyBnZGIgd29ya3MgYmV0dGVyIHdpdGhvdXQgb3B0aW1pc2F0aW9uIAooIHNlZSBDb21waWxpbmcgcHJvZ3JhbXMgZm9yIGRlYnVnZ2luZyApCgppbnZvY2F0aW9uCi0tLS0tLS0tLS0KZ2RiIDx2aWN0aW0gcHJvZ3JhbT4gPG9wdGlvbmFsIGNvcmVmaWxlPgoKT25saW5lIGhlbHAKLS0tLS0tLS0tLS0KaGVscDogZ2l2ZXMgaGVscCBvbiBjb21tYW5kcwplLmcuCmhlbHAKaGVscCBkaXNwbGF5Ck5vdGUgZ2RiJ3Mgb25saW5lIGhlbHAgaXMgdmVyeSBnb29kIHVzZSBpdC4KCgpBc3NlbWJseQotLS0tLS0tLQppbmZvIHJlZ2lzdGVyczogZGlzcGxheXMgcmVnaXN0ZXJzIG90aGVyIHRoYW4gZmxvYXRpbmcgcG9pbnQuCmluZm8gYWxsLXJlZ2lzdGVyczogZGlzcGxheXMgZmxvYXRpbmcgcG9pbnRzIGFzIHdlbGwuCmRpc2Fzc2VtYmxlOiBkaXNhc3NlbWJsZXMKZS5nLgpkaXNhc3NlbWJsZSB3aXRob3V0IHBhcmFtZXRlcnMgd2lsbCBkaXNhc3NlbWJsZSB0aGUgY3VycmVudCBmdW5jdGlvbgpkaXNhc3NlbWJsZSAkcGMgJHBjKzEwIAoKVmlld2luZyAmIG1vZGlmeWluZyB2YXJpYWJsZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KcHJpbnQgb3IgcDogZGlzcGxheXMgdmFyaWFibGUgb3IgcmVnaXN0ZXIKZS5nLiBwL3ggJHNwIHdpbGwgZGlzcGxheSB0aGUgc3RhY2sgcG9pbnRlcgoKZGlzcGxheTogcHJpbnRzIHZhcmlhYmxlIG9yIHJlZ2lzdGVyIGVhY2ggdGltZSBwcm9ncmFtIHN0b3BzCmUuZy4KZGlzcGxheS94ICRwYyB3aWxsIGRpc3BsYXkgdGhlIHByb2dyYW0gY291bnRlcgpkaXNwbGF5IGFyZ2MKCnVuZGlzcGxheSA6IHVuZG8ncyBkaXNwbGF5J3MKCmluZm8gYnJlYWtwb2ludHM6IHNob3dzIGFsbCBjdXJyZW50IGJyZWFrcG9pbnRzCgppbmZvIHN0YWNrOiBzaG93cyBzdGFjayBiYWNrIHRyYWNlICggaWYgdGhpcyBkb2Vzbid0IHdvcmsgdG9vIHdlbGwsIEknbGwgc2hvdyB5b3UgdGhlCnN0YWNrdHJhY2UgYnkgaGFuZCBiZWxvdyApLgoKaW5mbyBsb2NhbHM6IGRpc3BsYXlzIGxvY2FsIHZhcmlhYmxlcy4KCmluZm8gYXJnczogZGlzcGxheSBjdXJyZW50IHByb2NlZHVyZSBhcmd1bWVudHMuCgpzZXQgYXJnczogd2lsbCBzZXQgYXJnYyAmIGFyZ3YgZWFjaCB0aW1lIHRoZSB2aWN0aW0gcHJvZ3JhbSBpcyBpbnZva2VkLgoKc2V0IDx2YXJpYWJsZT49dmFsdWUKc2V0IGFyZ2M9MTAwCnNldCAkcGM9MAoKCgpNb2RpZnlpbmcgZXhlY3V0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0Kc3RlcDogc3RlcHMgbiBsaW5lcyBvZiBzb3VyY2Vjb2RlCnN0ZXAgc3RlcHMgMSBsaW5lLgpzdGVwIDEwMCBzdGVwcyAxMDAgbGluZXMgb2YgY29kZS4KCm5leHQ6IGxpa2Ugc3RlcCBleGNlcHQgdGhpcyB3aWxsIG5vdCBzdGVwIGludG8gc3Vicm91dGluZXMKCnN0ZXBpOiBzdGVwcyBhIHNpbmdsZSBtYWNoaW5lIGNvZGUgaW5zdHJ1Y3Rpb24uCmUuZy4gc3RlcGkgMTAwCgpuZXh0aTogc3RlcHMgYSBzaW5nbGUgbWFjaGluZSBjb2RlIGluc3RydWN0aW9uIGJ1dCB3aWxsIG5vdCBzdGVwIGludG8gc3Vicm91dGluZXMuCgpmaW5pc2g6IHdpbGwgcnVuIHVudGlsIGV4aXQgb2YgdGhlIGN1cnJlbnQgcm91dGluZQoKcnVuOiAocmUpc3RhcnRzIGEgcHJvZ3JhbQoKY29udDogY29udGludWVzIGEgcHJvZ3JhbQoKcXVpdDogZXhpdHMgZ2RiLgoKCmJyZWFrcG9pbnRzCi0tLS0tLS0tLS0tLQoKYnJlYWsKc2V0cyBhIGJyZWFrcG9pbnQKZS5nLgoKYnJlYWsgbWFpbgoKYnJlYWsgKiRwYwoKYnJlYWsgKjB4NDAwNjE4CgpoZXJlcyBhIHJlYWxseSB1c2VmdWwgb25lIGZvciBsYXJnZSBwcm9ncmFtcwpyYnIKU2V0IGEgYnJlYWtwb2ludCBmb3IgYWxsIGZ1bmN0aW9ucyBtYXRjaGluZyBSRUdFWFAKZS5nLgpyYnIgMzkwCndpbGwgc2V0IGEgYnJlYWtwb2ludCB3aXRoIGFsbCBmdW5jdGlvbnMgd2l0aCAzOTAgaW4gdGhlaXIgbmFtZS4KCmluZm8gYnJlYWtwb2ludHMKbGlzdHMgYWxsIGJyZWFrcG9pbnRzCgpkZWxldGU6IGRlbGV0ZSBicmVha3BvaW50IGJ5IG51bWJlciBvciBkZWxldGUgdGhlbSBhbGwKZS5nLgpkZWxldGUgMSB3aWxsIGRlbGV0ZSB0aGUgZmlyc3QgYnJlYWtwb2ludApkZWxldGUgd2lsbCBkZWxldGUgdGhlbSBhbGwKCndhdGNoOiBUaGlzIHdpbGwgc2V0IGEgd2F0Y2hwb2ludCAoIHVzdWFsbHkgaGFyZHdhcmUgYXNzaXN0ZWQgKSwKVGhpcyB3aWxsIHdhdGNoIGEgdmFyaWFibGUgdGlsbCBpdCBjaGFuZ2VzCmUuZy4Kd2F0Y2ggY250LCB3aWxsIHdhdGNoIHRoZSB2YXJpYWJsZSBjbnQgdGlsbCBpdCBjaGFuZ2VzLgpBcyBhbiBhc2lkZSB1bmZvcnR1bmF0ZWx5IGdkYidzLCBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQgd2F0Y2hwb2ludCBjb2RlCmlzIGluY29uc2lzdGVudCAmIG5vdCB2ZXJ5IGdvb2QsIHdhdGNocG9pbnRzIHVzdWFsbHkgd29yayBidXQgbm90IGFsd2F5cy4KCmluZm8gd2F0Y2hwb2ludHM6IERpc3BsYXkgY3VycmVudGx5IGFjdGl2ZSB3YXRjaHBvaW50cwoKY29uZGl0aW9uOiAoIGFub3RoZXIgdXNlZnVsIG9uZSApClNwZWNpZnkgYnJlYWtwb2ludCBudW1iZXIgTiB0byBicmVhayBvbmx5IGlmIENPTkQgaXMgdHJ1ZS4KVXNhZ2UgaXMgYGNvbmRpdGlvbiBOIENPTkQnLCB3aGVyZSBOIGlzIGFuIGludGVnZXIgYW5kIENPTkQgaXMgYW4KZXhwcmVzc2lvbiB0byBiZSBldmFsdWF0ZWQgd2hlbmV2ZXIgYnJlYWtwb2ludCBOIGlzIHJlYWNoZWQuCgoKClVzZXIgZGVmaW5lZCBmdW5jdGlvbnMvbWFjcm9zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRlZmluZTogKCBOb3RlIHRoaXMgaXMgdmVyeSB2ZXJ5IHVzZWZ1bCxzaW1wbGUgJiBwb3dlcmZ1bCApCnVzYWdlIGRlZmluZSA8bmFtZT4gPGxpc3Qgb2YgY29tbWFuZHM+IGVuZAoKZXhhbXBsZXMgd2hpY2ggeW91IHNob3VsZCBjb25zaWRlciBwdXR0aW5nIGludG8gLmdkYmluaXQgaW4geW91ciBob21lIGRpcmVjdG9yeQpkZWZpbmUgZApzdGVwaQpkaXNhc3NlbWJsZSAkcGMgJHBjKzEwCmVuZAoKZGVmaW5lIGUKbmV4dGkKZGlzYXNzZW1ibGUgJHBjICRwYysxMAplbmQKCgpPdGhlciBoYXJkIHRvIGNsYXNzaWZ5IHN0dWZmCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc2lnbmFsIG46CnNlbmRzIHRoZSB2aWN0aW0gcHJvZ3JhbSBhIHNpZ25hbC4KZS5nLiBzaWduYWwgMyB3aWxsIHNlbmQgYSBTSUdRVUlULgoKaW5mbyBzaWduYWxzOgp3aGF0IGdkYiBkb2VzIHdoZW4gdGhlIHZpY3RpbSByZWNlaXZlcyBjZXJ0YWluIHNpZ25hbHMuCgpsaXN0OgplLmcuCmxpc3QgbGlzdHMgY3VycmVudCBmdW5jdGlvbiBzb3VyY2UKbGlzdCAxLDEwIGxpc3QgZmlyc3QgMTAgbGluZXMgb2YgY3VycmVudCBmaWxlLgpsaXN0IHRlc3QuYzoxLDEwCgoKZGlyZWN0b3J5OgpBZGRzIGRpcmVjdG9yaWVzIHRvIGJlIHNlYXJjaGVkIGZvciBzb3VyY2UgaWYgZ2RiIGNhbm5vdCBmaW5kIHRoZSBzb3VyY2UuCihub3RlIGl0IGlzIGEgYml0IHNlbnNpdGl2ZSBhYm91dCBzbGFzaGVzKQplLmcuIFRvIGFkZCB0aGUgcm9vdCBvZiB0aGUgZmlsZXN5c3RlbSB0byB0aGUgc2VhcmNocGF0aCBkbwpkaXJlY3RvcnkgLy8KCgpjYWxsIDxmdW5jdGlvbj4KVGhpcyBjYWxscyBhIGZ1bmN0aW9uIGluIHRoZSB2aWN0aW0gcHJvZ3JhbSwgdGhpcyBpcyBwcmV0dHkgcG93ZXJmdWwKZS5nLgooZ2RiKSBjYWxsIHByaW50ZigiaGVsbG8gd29ybGQiKQpvdXRwdXRzOgokMSA9IDExIAoKWW91IG1pZ2h0IG5vdyBiZSB0aGlua2luZyB0aGF0IHRoZSBsaW5lIGFib3ZlIGRpZG4ndCB3b3JrLCBzb21ldGhpbmcgZXh0cmEgaGFkIHRvIGJlIGRvbmUuCihnZGIpIGNhbGwgZmZsdXNoKHN0ZG91dCkKaGVsbG8gd29ybGQkMiA9IDAKQXMgYW4gYXNpZGUgdGhlIGRlYnVnZ2VyIGFsc28gY2FsbHMgbWFsbG9jICYgZnJlZSB1bmRlciB0aGUgaG9vZCAKdG8gbWFrZSBzcGFjZSBmb3IgdGhlICJoZWxsbyB3b3JsZCIgc3RyaW5nLgoKCgpoaW50cwotLS0tLQoxKSBjb21tYW5kIGNvbXBsZXRpb24gd29ya3MganVzdCBsaWtlIGJhc2ggCiggaWYgeW91IGFyZSBhIGJhZCB0eXBpc3QgbGlrZSBtZSB0aGlzIHJlYWxseSBoZWxwcyApCmUuZy4gaGl0IGJyIDxUQUI+ICYgY3Vyc29yIHVwICYgZG93biA6LSkuCgoyKSBpZiB5b3UgaGF2ZSBhIGRlYnVnZ2luZyBwcm9ibGVtIHRoYXQgdGFrZXMgYSBmZXcgc3RlcHMgdG8gcmVjcmVhdGUKcHV0IHRoZSBzdGVwcyBpbnRvIGEgZmlsZSBjYWxsZWQgLmdkYmluaXQgaW4geW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CmlmIHlvdSBoYXZlIGRlZmluZWQgYSBmZXcgZXh0cmEgdXNlZnVsIHVzZXIgZGVmaW5lZCBjb21tYW5kcyBwdXQgdGhlc2UgaW4gCnlvdXIgaG9tZSBkaXJlY3RvcnkgJiB0aGV5IHdpbGwgYmUgcmVhZCBlYWNoIHRpbWUgZ2RiIGlzIGxhdW5jaGVkLgoKQSB0eXBpY2FsIC5nZGJpbml0IGZpbGUgbWlnaHQgYmUuCmJyZWFrIG1haW4KcnVuCmJyZWFrIHJ1bnRpbWVfZXhjZXB0aW9uCmNvbnQgCgoKc3RhY2sgY2hhaW5pbmcgaW4gZ2RiIGJ5IGhhbmQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGhpcyBpcyBkb25lIHVzaW5nIGEgdGhlIHNhbWUgdHJpY2sgZGVzY3JpYmVkIGZvciBWTSAKcC94ICgqKCRzcCs1NikpJjB4N2ZmZmZmZmYgZ2V0IHRoZSBmaXJzdCBiYWNrY2hhaW4uCgpGb3Igei9BcmNoaXRlY3R1cmUKUmVwbGFjZSA1NiB3aXRoIDExMiAmIGlnbm9yZSB0aGUgJjB4N2ZmZmZmZmYKaW4gdGhlIG1hY3JvcyBiZWxvdyAmIGRvIG5hc3R5IGNhc3RzIHRvIGxvbmdzIGxpa2UgdGhlIGZvbGxvd2luZwphcyBnZGIgdW5mb3J0dW5hdGVseSBkZWFscyB3aXRoIHByaW50ZWQgYXJndW1lbnRzIGFzIGludHMgd2hpY2gKbWVzc2VzIHVwIGV2ZXJ5dGhpbmcuCmkuZS4gaGVyZSBpcyBhIDNyZCBiYWNrY2hhaW4gZGVyZWZlcmVuY2UKcC94ICoobG9uZyAqKSgqKioobG9uZyAqKiopJHNwKzExMikKCgp0aGlzIG91dHB1dHMgCiQ1ID0gMHg1MjhmMTggCm9uIG15IG1hY2hpbmUuCk5vdyB5b3UgY2FuIHVzZSAKaW5mbyBzeW1ib2wgKCooJHNwKzU2KSkmMHg3ZmZmZmZmZiAKeW91IG1pZ2h0IHNlZSBzb21ldGhpbmcgbGlrZS4KcmxfZ2V0YyArIDM2IGluIHNlY3Rpb24gLnRleHQgIHRlbGxpbmcgeW91IHdoYXQgaXMgbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTI4ZjE4Ck5vdyBkby4KcC94ICgqKCokc3ArNTYpKSYweDdmZmZmZmZmIApUaGlzIG91dHB1dHMKJDYgPSAweDUyOGVkMApOb3cgZG8uCmluZm8gc3ltYm9sICgqKCokc3ArNTYpKSYweDdmZmZmZmZmCnJsX3JlYWRfa2V5ICsgMTgwIGluIHNlY3Rpb24gLnRleHQKbm93IGRvCnAveCAoKigqKiRzcCs1NikpJjB4N2ZmZmZmZmYKJiBzbyBvbi4KCkRpc2Fzc2VtYmxpbmcgaW5zdHJ1Y3Rpb25zIHdpdGhvdXQgZGVidWcgaW5mbwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZ2RiIHR5cGljYWxseSBjb21wbGFpbnMgaWYgdGhlcmUgaXMgYSBsYWNrIG9mIGRlYnVnZ2luZwpzeW1ib2xzIGluIHRoZSBkaXNhc3NlbWJsZSBjb21tYW5kIHdpdGggCiJObyBmdW5jdGlvbiBjb250YWlucyBzcGVjaWZpZWQgYWRkcmVzcy4iIFRvIGdldCBhcm91bmQKdGhpcyBkbyAKeC88bnVtYmVyIGxpbmVzIHRvIGRpc2Fzc2VtYmxlPnhpIDxhZGRyZXNzPgplLmcuCngvMjB4aSAweDQwMDczMAoKCgpOb3RlOiBSZW1lbWJlciBnZGIgaGFzIGhpc3RvcnkganVzdCBsaWtlIGJhc2ggeW91IGRvbid0IG5lZWQgdG8gcmV0eXBlIHRoZQp3aG9sZSBsaW5lIGp1c3QgdXNlIHRoZSB1cCAmIGRvd24gYXJyb3dzLgoKCgpGb3IgbW9yZSBpbmZvCi0tLS0tLS0tLS0tLS0KRnJvbSB5b3VyIGxpbnV4Ym94IGRvIAptYW4gZ2RiIG9yIGluZm8gZ2RiLgoKY29yZSBkdW1wcwotLS0tLS0tLS0tCldoYXQgYSBjb3JlIGR1bXAgPywKQSBjb3JlIGR1bXAgaXMgYSBmaWxlIGdlbmVyYXRlZCBieSB0aGUga2VybmVsICggaWYgYWxsb3dlZCApIHdoaWNoIGNvbnRhaW5zIHRoZSByZWdpc3RlcnMsCiYgYWxsIGFjdGl2ZSBwYWdlcyBvZiB0aGUgcHJvZ3JhbSB3aGljaCBoYXMgY3Jhc2hlZC4KRnJvbSB0aGlzIGZpbGUgZ2RiIHdpbGwgYWxsb3cgeW91IHRvIGxvb2sgYXQgdGhlIHJlZ2lzdGVycyAmIHN0YWNrIHRyYWNlICYgbWVtb3J5IG9mIHRoZQpwcm9ncmFtIGFzIGlmIGl0IGp1c3QgY3Jhc2hlZCBvbiB5b3VyIHN5c3RlbSwgaXQgaXMgdXN1YWxseSBjYWxsZWQgY29yZSAmIGNyZWF0ZWQgaW4gdGhlCmN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuClRoaXMgaXMgdmVyeSB1c2VmdWwgaW4gdGhhdCBhIGN1c3RvbWVyIGNhbiBtYWlsIGEgY29yZSBkdW1wIHRvIGEgdGVjaG5pY2FsIHN1cHBvcnQgZGVwYXJ0bWVudAomIHRoZSB0ZWNobmljYWwgc3VwcG9ydCBkZXBhcnRtZW50IGNhbiByZWNvbnN0cnVjdCB3aGF0IGhhcHBlbmVkLgpQcm92aWRlZCB0aGV5IGhhdmUgYW4gaWRlbnRpY2FsIGNvcHkgb2YgdGhpcyBwcm9ncmFtIHdpdGggZGVidWdnaW5nIHN5bWJvbHMgY29tcGlsZWQgaW4gJgp0aGUgc291cmNlIGJhc2Ugb2YgdGhpcyBidWlsZCBpcyBhdmFpbGFibGUuCkluIHNob3J0IGl0IGlzIGZhciBtb3JlIHVzZWZ1bCB0aGFuIHNvbWV0aGluZyBsaWtlIGEgY3Jhc2ggbG9nIGNvdWxkIGV2ZXIgaG9wZSB0byBiZS4KCkluIHRoZW9yeSBhbGwgdGhhdCBpcyBtaXNzaW5nIHRvIHJlc3RhcnQgYSBjb3JlIGR1bXBlZCBwcm9ncmFtIGlzIGEga2VybmVsIHBhdGNoIHdoaWNoCndpbGwgZG8gdGhlIGZvbGxvd2luZy4KMSkgTWFrZSBhIG5ldyBrZXJuZWwgdGFzayBzdHJ1Y3R1cmUKMikgUmVsb2FkIGFsbCB0aGUgZHVtcGVkIHBhZ2VzIGJhY2sgaW50byB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcy4KMykgRG8gdGhlIHJlcXVpcmVkIGNsb2NrIGZpeHVwcwo0KSBHZXQgYWxsIGZpbGVzICYgbmV0d29yayBjb25uZWN0aW9ucyBmb3IgdGhlIHByb2Nlc3MgYmFjayBpbnRvIGFuIGlkZW50aWNhbCBzdGF0ZSAoIHJlYWxseSBkaWZmaWN1bHQgKS4KNSkgQSBmZXcgbW9yZSBkaWZmaWN1bHQgdGhpbmdzIEkgaGF2ZW4ndCB0aG91Z2h0IG9mLgoKCgpXaHkgaGF2ZSBJIG5ldmVyIHNlZW4gb25lID8uClByb2JhYmx5IGJlY2F1c2UgeW91IGhhdmVuJ3QgdXNlZCB0aGUgY29tbWFuZCAKdWxpbWl0IC1jIHVubGltaXRlZCBpbiBiYXNoCnRvIGFsbG93IGNvcmUgZHVtcHMsIG5vdyBkbyAKdWxpbWl0IC1hIAp0byB2ZXJpZnkgdGhhdCB0aGUgbGltaXQgd2FzIGFjY2VwdGVkLgoKQSBzYW1wbGUgY29yZSBkdW1wClRvIGNyZWF0ZSB0aGlzIEknbSBnb2luZyB0byBkbwp1bGltaXQgLWMgdW5saW1pdGVkCmdkYiAKdG8gbGF1bmNoIGdkYiAobXkgdmljdGltIGFwcC4gKSBub3cgYmUgYmFkICYgZG8gdGhlIGZvbGxvd2luZyBmcm9tIGFub3RoZXIgCnRlbG5ldC94dGVybSBzZXNzaW9uIHRvIHRoZSBzYW1lIG1hY2hpbmUKcHMgLWF1eCB8IGdyZXAgZ2RiCmtpbGwgLVNJR1NFR1YgPGdkYidzIHBpZD4Kb3IgYWx0ZXJuYXRpdmVseSB1c2Uga2lsbGFsbCAtU0lHU0VHViBnZGIgaWYgeW91IGhhdmUgdGhlIGtpbGxhbGwgY29tbWFuZC4KTm93IGxvb2sgYXQgdGhlIGNvcmUgZHVtcC4KLi9nZGIgY29yZQpEaXNwbGF5cyB0aGUgZm9sbG93aW5nCkdOVSBnZGIgNC4xOApDb3B5cmlnaHQgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KR0RCIGlzIGZyZWUgc29mdHdhcmUsIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgeW91IGFyZQp3ZWxjb21lIHRvIGNoYW5nZSBpdCBhbmQvb3IgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgaXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgpUeXBlICJzaG93IGNvcHlpbmciIHRvIHNlZSB0aGUgY29uZGl0aW9ucy4KVGhlcmUgaXMgYWJzb2x1dGVseSBubyB3YXJyYW50eSBmb3IgR0RCLiAgVHlwZSAic2hvdyB3YXJyYW50eSIgZm9yIGRldGFpbHMuClRoaXMgR0RCIHdhcyBjb25maWd1cmVkIGFzICJzMzkwLWlibS1saW51eCIuLi4KQ29yZSB3YXMgZ2VuZXJhdGVkIGJ5IGAuL2dkYicuClByb2dyYW0gdGVybWluYXRlZCB3aXRoIHNpZ25hbCAxMSwgU2VnbWVudGF0aW9uIGZhdWx0LgpSZWFkaW5nIHN5bWJvbHMgZnJvbSAvdXNyL2xpYi9saWJuY3Vyc2VzLnNvLjQuLi5kb25lLgpSZWFkaW5nIHN5bWJvbHMgZnJvbSAvbGliL2xpYm0uc28uNi4uLmRvbmUuClJlYWRpbmcgc3ltYm9scyBmcm9tIC9saWIvbGliYy5zby42Li4uZG9uZS4KUmVhZGluZyBzeW1ib2xzIGZyb20gL2xpYi9sZC1saW51eC5zby4yLi4uZG9uZS4KIzAgIDB4NDAxMjZkMWEgaW4gcmVhZCAoKSBmcm9tIC9saWIvbGliYy5zby42ClNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50IGZvciBkZWJ1Z2dpbmcgZ2RiLgpCcmVha3BvaW50IDEgYXQgMHg0ZGM2Zjg6IGZpbGUgdXRpbHMuYywgbGluZSA0NzEuCkJyZWFrcG9pbnQgMiBhdCAweDRkODdhNDogZmlsZSB0b3AuYywgbGluZSAyNjA5LgoodG9wLWdkYikgaW5mbyBzdGFjawojMCAgMHg0MDEyNmQxYSBpbiByZWFkICgpIGZyb20gL2xpYi9saWJjLnNvLjYKIzEgIDB4NTI4ZjI2IGluIHJsX2dldGMgKHN0cmVhbT0weDdmZmZmZGU4KSBhdCBpbnB1dC5jOjQwMgojMiAgMHg1MjhlZDAgaW4gcmxfcmVhZF9rZXkgKCkgYXQgaW5wdXQuYzozODEKIzMgIDB4NTE2N2U2IGluIHJlYWRsaW5lX2ludGVybmFsX2NoYXIgKCkgYXQgcmVhZGxpbmUuYzo0NTQKIzQgIDB4NTE2OGVlIGluIHJlYWRsaW5lX2ludGVybmFsX2NoYXJsb29wICgpIGF0IHJlYWRsaW5lLmM6NTA3CiM1ICAweDUxNjkyYyBpbiByZWFkbGluZV9pbnRlcm5hbCAoKSBhdCByZWFkbGluZS5jOjUyMQojNiAgMHg1MTY0ZmUgaW4gcmVhZGxpbmUgKHByb21wdD0weDdmZmZmODEwICJcMTc3gf+B+HhcMTc3gf+B94HYXDE3N4H/gfh4gcAiKQogICAgYXQgcmVhZGxpbmUuYzozNDkKIzcgIDB4NGQ3YThhIGluIGNvbW1hbmRfbGluZV9pbnB1dCAocHJyb21wdD0weDU2NDQyMCAiKGdkYikgIiwgcmVwZWF0PTEsCiAgICBhbm5vdGF0aW9uX3N1ZmZpeD0weDRkNmI0NCAicHJvbXB0IikgYXQgdG9wLmM6MjA5MQojOCAgMHg0ZDZjZjAgaW4gY29tbWFuZF9sb29wICgpIGF0IHRvcC5jOjEzNDUKIzkgIDB4NGUyNWJjIGluIG1haW4gKGFyZ2M9MSwgYXJndj0weDdmZmZmZGY0KSBhdCBtYWluLmM6NjM1CgoKTERECj09PQpUaGlzIGlzIGEgcHJvZ3JhbSB3aGljaCBsaXN0cyB0aGUgc2hhcmVkIGxpYnJhcmllcyB3aGljaCBhIGxpYnJhcnkgbmVlZHMsCk5vdGUgeW91IGFsc28gZ2V0IHRoZSByZWxvY2F0aW9ucyBvZiB0aGUgc2hhcmVkIGxpYnJhcnkgdGV4dCBzZWdtZW50cyB3aGljaApoZWxwIHdoZW4gdXNpbmcgb2JqZHVtcCAtLXNvdXJjZS4KZS5nLgogbGRkIC4vZ2RiCm91dHB1dHMKbGlibmN1cnNlcy5zby40ID0+IC91c3IvbGliL2xpYm5jdXJzZXMuc28uNCAoMHg0MDAxODAwMCkKbGlibS5zby42ID0+IC9saWIvbGlibS5zby42ICgweDQwMDVlMDAwKQpsaWJjLnNvLjYgPT4gL2xpYi9saWJjLnNvLjYgKDB4NDAwODQwMDApCi9saWIvbGQtbGludXguc28uMiA9PiAvbGliL2xkLWxpbnV4LnNvLjIgKDB4NDAwMDAwMDApCgoKRGVidWdnaW5nIHNoYXJlZCBsaWJyYXJpZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT0KTW9zdCBwcm9ncmFtcyB1c2Ugc2hhcmVkIGxpYnJhcmllcywgaG93ZXZlciBpdCBjYW4gYmUgdmVyeSBwYWluZnVsCndoZW4geW91IHNpbmdsZSBzdGVwIGluc3RydWN0aW9uIGludG8gYSBmdW5jdGlvbiBsaWtlIHByaW50ZiBmb3IgdGhlIApmaXJzdCB0aW1lICYgeW91IGVuZCB1cCBpbiBmdW5jdGlvbnMgbGlrZSBfZGxfcnVudGltZV9yZXNvbHZlIHRoaXMgaXMKdGhlIGxkLnNvIGRvaW5nIGxhenkgYmluZGluZywgbGF6eSBiaW5kaW5nIGlzIGEgY29uY2VwdCBpbiBFTEYgd2hlcmUgCnNoYXJlZCBsaWJyYXJ5IGZ1bmN0aW9ucyBhcmUgbm90IGxvYWRlZCBpbnRvIG1lbW9yeSB1bmxlc3MgdGhleSBhcmUgCmFjdHVhbGx5IHVzZWQsIGdyZWF0IGZvciBzYXZpbmcgbWVtb3J5IGJ1dCBhIHBhaW4gdG8gZGVidWcuClRvIGdldCBhcm91bmQgdGhpcyBlaXRoZXIgcmVsaW5rIHRoZSBwcm9ncmFtIC1zdGF0aWMgb3IgZXhpdCBnZGIgdHlwZSAKZXhwb3J0IExEX0JJTkRfTk9XPXRydWUgdGhpcyB3aWxsIHN0b3AgbGF6eSBiaW5kaW5nICYgcmVzdGFydCB0aGUgZ2RiJ2luZyAKdGhlIHByb2dyYW0gaW4gcXVlc3Rpb24uCiAKCgpEZWJ1Z2dpbmcgbW9kdWxlcwo9PT09PT09PT09PT09PT09PQpBcyBtb2R1bGVzIGFyZSBkeW5hbWljYWxseSBsb2FkZWQgaW50byB0aGUga2VybmVsIHRoZWlyIGFkZHJlc3MgY2FuIGJlCmFueXdoZXJlIHRvIGdldCBhcm91bmQgdGhpcyB1c2UgdGhlIC1tIG9wdGlvbiB3aXRoIGluc21vZCB0byBlbWl0IGEgbG9hZAptYXAgd2hpY2ggY2FuIGJlIHBpcGVkIGludG8gYSBmaWxlIGlmIHJlcXVpcmVkLgoKVGhlIHByb2MgZmlsZSBzeXN0ZW0KPT09PT09PT09PT09PT09PT09PT0KV2hhdCBpcyBpdCA/LgpJdCBpcyBhIGZpbGVzeXN0ZW0gY3JlYXRlZCBieSB0aGUga2VybmVsIHdpdGggZmlsZXMgd2hpY2ggYXJlIGNyZWF0ZWQgb24gZGVtYW5kCmJ5IHRoZSBrZXJuZWwgaWYgcmVhZCwgb3IgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IGtlcm5lbCBwYXJhbWV0ZXJzLAppdCBpcyBhIHBvd2VyZnVsIGNvbmNlcHQuCgplLmcuCgpjYXQgL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2ZvcndhcmQgCk9uIG15IG1hY2hpbmUgb3V0cHV0cyAKMCAKdGVsbGluZyBtZSBpcF9mb3J3YXJkaW5nIGlzIG5vdCBvbiB0byBzd2l0Y2ggaXQgb24gSSBjYW4gZG8KZWNobyAxID4gIC9wcm9jL3N5cy9uZXQvaXB2NC9pcF9mb3J3YXJkCmNhdCBpdCBhZ2FpbgpjYXQgL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2ZvcndhcmQgCk9uIG15IG1hY2hpbmUgbm93IG91dHB1dHMKMQpJUCBmb3J3YXJkaW5nIGlzIG9uLgpUaGVyZSBpcyBhIGxvdCBvZiB1c2VmdWwgaW5mbyBpbiBoZXJlIGJlc3QgZm91bmQgYnkgZ29pbmcgaW4gJiBoYXZpbmcgYSBsb29rIGFyb3VuZCwKc28gSSdsbCB0YWtlIHlvdSB0aHJvdWdoIHNvbWUgZW50cmllcyBJIGNvbnNpZGVyIGltcG9ydGFudC4KCkFsbCB0aGUgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gdGhlIG1hY2hpbmUgaGF2ZSB0aGVyZSBvd24gZW50cnkgZGVmaW5lZCBieQovcHJvYy88cGlkPgpTbyBsZXRzIGhhdmUgYSBsb29rIGF0IHRoZSBpbml0IHByb2Nlc3MKY2QgL3Byb2MvMQoKY2F0IGNtZGxpbmUKZW1pdHMKaW5pdCBbMl0KCmNkIC9wcm9jLzEvZmQKVGhpcyBjb250YWlucyBudW1lcmljYWwgZW50cmllcyBvZiBhbGwgdGhlIG9wZW4gZmlsZXMsCnNvbWUgb2YgdGhlc2UgeW91IGNhbiBjYXQgZS5nLiBzdGRvdXQgKDIpCgpjYXQgL3Byb2MvMjkvbWFwcwpvbiBteSBtYWNoaW5lIGVtaXRzCgowMDQwMDAwMC0wMDQ3ODAwMCByLXhwIDAwMDAwMDAwIDVmOjAwIDQxMDMgICAgICAgL2Jpbi9iYXNoCjAwNDc4MDAwLTAwNDdlMDAwIHJ3LXAgMDAwNzcwMDAgNWY6MDAgNDEwMyAgICAgICAvYmluL2Jhc2gKMDA0N2UwMDAtMDA0OTIwMDAgcnd4cCAwMDAwMDAwMCAwMDowMCAwCjQwMDAwMDAwLTQwMDE1MDAwIHIteHAgMDAwMDAwMDAgNWY6MDAgMTQzODIgICAgICAvbGliL2xkLTIuMS4yLnNvCjQwMDE1MDAwLTQwMDE2MDAwIHJ3LXAgMDAwMTQwMDAgNWY6MDAgMTQzODIgICAgICAvbGliL2xkLTIuMS4yLnNvCjQwMDE2MDAwLTQwMDE3MDAwIHJ3eHAgMDAwMDAwMDAgMDA6MDAgMAo0MDAxNzAwMC00MDAxODAwMCBydy1wIDAwMDAwMDAwIDAwOjAwIDAKNDAwMTgwMDAtNDAwMWIwMDAgci14cCAwMDAwMDAwMCA1ZjowMCAxNDQzNSAgICAgIC9saWIvbGlidGVybWNhcC5zby4yLjAuOAo0MDAxYjAwMC00MDAxYzAwMCBydy1wIDAwMDAyMDAwIDVmOjAwIDE0NDM1ICAgICAgL2xpYi9saWJ0ZXJtY2FwLnNvLjIuMC44CjQwMDFjMDAwLTQwMTBkMDAwIHIteHAgMDAwMDAwMDAgNWY6MDAgMTQzODcgICAgICAvbGliL2xpYmMtMi4xLjIuc28KNDAxMGQwMDAtNDAxMTEwMDAgcnctcCAwMDBmMDAwMCA1ZjowMCAxNDM4NyAgICAgIC9saWIvbGliYy0yLjEuMi5zbwo0MDExMTAwMC00MDExNDAwMCBydy1wIDAwMDAwMDAwIDAwOjAwIDAKNDAxMTQwMDAtNDAxMWUwMDAgci14cCAwMDAwMDAwMCA1ZjowMCAxNDQwOCAgICAgIC9saWIvbGlibnNzX2ZpbGVzLTIuMS4yLnNvCjQwMTFlMDAwLTQwMTFmMDAwIHJ3LXAgMDAwMDkwMDAgNWY6MDAgMTQ0MDggICAgICAvbGliL2xpYm5zc19maWxlcy0yLjEuMi5zbwo3ZmZmZDAwMC04MDAwMDAwMCByd3hwIGZmZmZlMDAwIDAwOjAwIDAKCgpTaG93aW5nIHVzIHRoZSBzaGFyZWQgbGlicmFyaWVzIGluaXQgdXNlcyB3aGVyZSB0aGV5IGFyZSBpbiBtZW1vcnkKJiBtZW1vcnkgYWNjZXNzIHBlcm1pc3Npb25zIGZvciBlYWNoIHZpcnR1YWwgbWVtb3J5IGFyZWEuCgovcHJvYy8xL2N3ZCBpcyBhIHNvZnRsaW5rIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgovcHJvYy8xL3Jvb3QgaXMgdGhlIHJvb3Qgb2YgdGhlIGZpbGVzeXN0ZW0gZm9yIHRoaXMgcHJvY2Vzcy4gCgovcHJvYy8xL21lbSBpcyB0aGUgY3VycmVudCBydW5uaW5nIHByb2Nlc3NlcyBtZW1vcnkgd2hpY2ggeW91CmNhbiByZWFkICYgd3JpdGUgdG8gbGlrZSBhIGZpbGUuCnN0cmFjZSB1c2VzIHRoaXMgc29tZXRpbWVzIGFzIGl0IGlzIGEgYml0IGZhc3RlciB0aGFuIHRoZQpyYXRoZXIgaW5lZmZpY2llbnQgcHRyYWNlIGludGVyZmFjZSBmb3IgcGVla2luZyBhdCBEQVRBLgoKCmNhdCBzdGF0dXMgCgpOYW1lOiAgIGluaXQKU3RhdGU6ICBTIChzbGVlcGluZykKUGlkOiAgICAxClBQaWQ6ICAgMApVaWQ6ICAgIDAgICAgICAgMCAgICAgICAwICAgICAgIDAKR2lkOiAgICAwICAgICAgIDAgICAgICAgMCAgICAgICAwCkdyb3VwczoKVm1TaXplOiAgICAgIDQwOCBrQgpWbUxjazogICAgICAgICAwIGtCClZtUlNTOiAgICAgICAyMDgga0IKVm1EYXRhOiAgICAgICAyNCBrQgpWbVN0azogICAgICAgICA4IGtCClZtRXhlOiAgICAgICAzNjgga0IKVm1MaWI6ICAgICAgICAgMCBrQgpTaWdQbmQ6IDAwMDAwMDAwMDAwMDAwMDAKU2lnQmxrOiAwMDAwMDAwMDAwMDAwMDAwClNpZ0lnbjogN2ZmZmZmZmZkN2YwZDhmYwpTaWdDZ3Q6IDAwMDAwMDAwMjgwYjI2MDMKQ2FwSW5oOiAwMDAwMDAwMGZmZmZmZWZmCkNhcFBybTogMDAwMDAwMDBmZmZmZmZmZgpDYXBFZmY6IDAwMDAwMDAwZmZmZmZlZmYKClVzZXIgUFNXOiAgICAwNzBkZTAwMCA4MDQxNDE0Ngp0YXNrOiAwMDRiNjAwMCB0c3M6IDAwNGI2MmQ4IGtzcDogMDA0YjdjYTggcHRfcmVnczogMDA0YjdmNjgKVXNlciBHUFJTOgowMDAwMDQwMCAgMDAwMDAwMDAgIDAwMDAwMDBiICA3ZmZmZmE5MAowMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwICAwMDQ1ZDlmNAowMDQ1Y2FmYyAgN2ZmZmZhOTAgIDdmZmZmZjE4ICAwMDQ1Y2IwOAowMDAxMDQwMCAgODA0MDM5ZTggIDgwNDAzYWY4ICA3ZmZmZjhiMApVc2VyIEFDUlM6CjAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwCjAwMDAwMDAxICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwCjAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwCjAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwCktlcm5lbCBCYWNrQ2hhaW4gIENhbGxDaGFpbiAgICBCYWNrQ2hhaW4gIENhbGxDaGFpbgogICAgICAgMDA0YjdjYTggICA4MDAyYmQwYyAgICAgMDA0YjdkMTggICA4MDAyYjkyYwogICAgICAgMDA0YjdkYjggICA4MDA1Y2Q1MCAgICAgMDA0YjdlMzggICA4MDA1ZDEyYQogICAgICAgMDA0YjdmMDggICA4MDAxOTExNCAgICAgICAgICAgICAgICAgICAgIApTaG93aW5nIGFtb25nIG90aGVyIHRoaW5ncyBtZW1vcnkgdXNhZ2UgJiBzdGF0dXMgb2Ygc29tZSBzaWduYWxzICYKdGhlIHByb2Nlc3NlcydlcyByZWdpc3RlcnMgZnJvbSB0aGUga2VybmVsIHRhc2tfc3RydWN0dXJlCmFzIHdlbGwgYXMgYSBiYWNrY2hhaW4gd2hpY2ggbWF5IGJlIHVzZWZ1bCBpZiBhIHByb2Nlc3MgY3Jhc2hlcwppbiB0aGUga2VybmVsIGZvciBzb21lIHVua25vd24gcmVhc29uLgoKU29tZSBkcml2ZXIgZGVidWdnaW5nIHRlY2huaXF1ZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGVidWcgZmVhdHVyZQotLS0tLS0tLS0tLS0tClNvbWUgb2Ygb3VyIGRyaXZlcnMgbm93IHN1cHBvcnQgYSAiZGVidWcgZmVhdHVyZSIgaW4KL3Byb2MvczM5MGRiZiBzZWUgczM5MGRiZi50eHQgaW4gdGhlIGxpbnV4L0RvY3VtZW50YXRpb24gZGlyZWN0b3J5CmZvciBtb3JlIGluZm8uCmUuZy4gCnRvIHN3aXRjaCBvbiB0aGUgbGNzICJkZWJ1ZyBmZWF0dXJlIgplY2hvIDUgPiAvcHJvYy9zMzkwZGJmL2xjcy9sZXZlbAomIHRoZW4gYWZ0ZXIgdGhlIGVycm9yIG9jY3VycmVkLgpjYXQgL3Byb2MvczM5MGRiZi9sY3Mvc3ByaW50ZiA+L2xvZ2ZpbGUKdGhlIGxvZ2ZpbGUgbm93IGNvbnRhaW5zIHNvbWUgaW5mb3JtYXRpb24gd2hpY2ggbWF5IGhlbHAKdGVjaCBzdXBwb3J0IHJlc29sdmUgYSBwcm9ibGVtIGluIHRoZSBmaWVsZC4KCgoKaGlnaCBsZXZlbCBkZWJ1Z2dpbmcgbmV0d29yayBkcml2ZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQppZmNvbmZpZyBpcyBhIHF1aXRlIHVzZWZ1bCBjb21tYW5kCml0IGdpdmVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIG5ldHdvcmsgZHJpdmVycy4KCklmIHlvdSBzdXNwZWN0IHlvdXIgbmV0d29yayBkZXZpY2UgZHJpdmVyIGlzIGRlYWQKb25lIHdheSB0byBjaGVjayBpcyB0eXBlIAppZmNvbmZpZyA8bmV0d29yayBkZXZpY2U+IAplLmcuIHRyMApZb3Ugc2hvdWxkIHNlZSBzb21ldGhpbmcgbGlrZQp0cjAgICAgICAgTGluayBlbmNhcDoxNi80IE1icHMgVG9rZW4gUmluZyAoTmV3KSAgSFdhZGRyIDAwOjA0OkFDOjIwOjhFOjQ4CiAgICAgICAgICBpbmV0IGFkZHI6OS4xNjQuMTg1LjEzMiAgQmNhc3Q6OS4xNjQuMTkxLjI1NSAgTWFzazoyNTUuMjU1LjIyNC4wCiAgICAgICAgICBVUCBCUk9BRENBU1QgUlVOTklORyBNVUxUSUNBU1QgIE1UVToyMDAwICBNZXRyaWM6MQogICAgICAgICAgUlggcGFja2V0czoyNDYxMzQgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgZnJhbWU6MAogICAgICAgICAgVFggcGFja2V0czo1IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGNhcnJpZXI6MAogICAgICAgICAgY29sbGlzaW9uczowIHR4cXVldWVsZW46MTAwCgppZiB0aGUgZGV2aWNlIGRvZXNuJ3Qgc2F5IHVwCnRyeQovZXRjL3JjLmQvaW5pdC5kL25ldHdvcmsgc3RhcnQgCiggdGhpcyBzdGFydHMgdGhlIG5ldHdvcmsgc3RhY2sgJiBob3BlZnVsbHkgY2FsbHMgaWZjb25maWcgdHIwIHVwICkuCmlmY29uZmlnIGxvb2tzIGF0IHRoZSBvdXRwdXQgb2YgL3Byb2MvbmV0L2RldiAmIHByZXNlbnRzIGl0IGluIGEgbW9yZSBwcmVzZW50YWJsZSBmb3JtCk5vdyBwaW5nIHRoZSBkZXZpY2UgZnJvbSBhIG1hY2hpbmUgaW4gdGhlIHNhbWUgc3VibmV0LgppZiB0aGUgUlggcGFja2V0cyBjb3VudCAmIFRYIHBhY2tldHMgY291bnRzIGRvbid0IGluY3JlbWVudCB5b3UgcHJvYmFibHkKaGF2ZSBwcm9ibGVtcy4KbmV4dCAKY2F0IC9wcm9jL25ldC9hcnAKRG8geW91IHNlZSBhbnkgaGFyZHdhcmUgYWRkcmVzc2VzIGluIHRoZSBjYWNoZSBpZiBub3QgeW91IG1heSBoYXZlIHByb2JsZW1zLgpOZXh0IHRyeQpwaW5nIC1jIDUgPGJyb2FkY2FzdF9hZGRyPiBpLmUuIHRoZSBCY2FzdCBmaWVsZCBhYm92ZSBpbiB0aGUgb3V0cHV0IG9mCmlmY29uZmlnLiBEbyB5b3Ugc2VlIGFueSByZXBsaWVzIGZyb20gbWFjaGluZXMgb3RoZXIgdGhhbiB0aGUgbG9jYWwgbWFjaGluZQppZiBub3QgeW91IG1heSBoYXZlIHByb2JsZW1zLiBhbHNvIGlmIHRoZSBUWCBwYWNrZXRzIGNvdW50IGluIGlmY29uZmlnCmhhc24ndCBpbmNyZW1lbnRlZCBlaXRoZXIgeW91IGhhdmUgc2VyaW91cyBwcm9ibGVtcyBpbiB5b3VyIGRyaXZlciAKKGUuZy4gdGhlIHR4YnVzeSBmaWVsZCBvZiB0aGUgbmV0d29yayBkZXZpY2UgYmVpbmcgc3R1Y2sgb24gKSAKb3IgeW91IG1heSBoYXZlIG11bHRpcGxlIG5ldHdvcmsgZGV2aWNlcyBjb25uZWN0ZWQuCgoKY2hhbmRldgotLS0tLS0tClRoZXJlIGlzIGEgbmV3IGRldmljZSBsYXllciBmb3IgY2hhbm5lbCBkZXZpY2VzLCBzb21lCmRyaXZlcnMgZS5nLiBsY3MgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIGxheWVyLgpJZiB0aGUgZGV2aWNlIHVzZXMgdGhlIGNoYW5uZWwgZGV2aWNlIGxheWVyIHlvdSdsbCBiZQphYmxlIHRvIGZpbmQgd2hhdCBpbnRlcnJ1cHRzIGl0IHVzZXMgJiB0aGUgY3VycmVudCBzdGF0ZSAKb2YgdGhlIGRldmljZS4KU2VlIHRoZSBtYW5wYWdlIGNoYW5kZXYuOCAmdHlwZSBjYXQgL3Byb2MvY2hhbmRldiBmb3IgbW9yZSBpbmZvLgoKCgpTdGFydGluZyBwb2ludHMgZm9yIGRlYnVnZ2luZyBzY3JpcHRpbmcgbGFuZ3VhZ2VzIGV0Yy4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpiYXNoL3NoCgpiYXNoIC14IDxzY3JpcHRuYW1lPgplLmcuIGJhc2ggLXggL3Vzci9iaW4vYmFzaGJ1ZwpkaXNwbGF5cyB0aGUgZm9sbG93aW5nIGxpbmVzIGFzIGl0IGV4ZWN1dGVzIHRoZW0uCisgTUFDSElORT1pNTg2CisgT1M9bGludXgtZ251CisgQ0M9Z2NjCisgQ0ZMQUdTPSAtRFBST0dSQU09J2Jhc2gnIC1ESE9TVFRZUEU9J2k1ODYnIC1ET1NUWVBFPSdsaW51eC1nbnUnIC1ETUFDSFRZUEU9J2k1ODYtcGMtbGludXgtZ251JyAtRFNIRUxMIC1ESEFWRV9DT05GSUdfSCAgIC1JLiAtSS4gLUkuL2xpYiAtTzIgLXBpcGUKKyBSRUxFQVNFPTIuMDEKKyBQQVRDSExFVkVMPTEKKyBSRUxTVEFUVVM9cmVsZWFzZQorIE1BQ0hUWVBFPWk1ODYtcGMtbGludXgtZ251ICAgCgpwZXJsIC1kIDxzY3JpcHRuYW1lPiBydW5zIHRoZSBwZXJsc2NyaXB0IGluIGEgZnVsbHkgaW50ZXJhY3RpdmUgZGVidWdnZXIKPGxpa2UgZ2RiPi4KVHlwZSAnaCcgaW4gdGhlIGRlYnVnZ2VyIGZvciBoZWxwLgoKZm9yIGRlYnVnZ2luZyBqYXZhIHR5cGUKamRiIDxmaWxlbmFtZT4gYW5vdGhlciBmdWxseSBpbnRlcmFjdGl2ZSBnZGIgc3R5bGUgZGVidWdnZXIuCiYgdHlwZSA/IGluIHRoZSBkZWJ1Z2dlciBmb3IgaGVscC4KCgoKRHVtcHRvb2wgJiBMY3Jhc2ggKCBsa2NkICkKPT09PT09PT09PT09PT09PT09PT09PT09PT0KTWljaGFlbCBIb2x6aGV1ICYgb3RoZXJzIGhlcmUgYXQgSUJNIGhhdmUgYSBmYWlybHkgbWF0dXJlIHBvcnQgb2YgClNHSSdzIGxjcmFzaCB0b29sIHdoaWNoIGFsbG93cyBvbmUgdG8gbG9vayBhdCBrZXJuZWwgc3RydWN0dXJlcyBpbiBhCnJ1bm5pbmcga2VybmVsLgoKSXQgYWxzbyBjb21wbGVtZW50cyBhIHRvb2wgY2FsbGVkIGR1bXB0b29sIHdoaWNoIGR1bXBzIGFsbCB0aGUga2VybmVsJ3MKbWVtb3J5IHBhZ2VzICYgcmVnaXN0ZXJzIHRvIGVpdGhlciBhIHRhcGUgb3IgYSBkaXNrLgpUaGlzIGNhbiBiZSB1c2VkIGJ5IHRlY2ggc3VwcG9ydCBvciBhbiBhbWJpdGlvdXMgZW5kIHVzZXIgZG8KcG9zdCBtb3J0ZW0gZGVidWdnaW5nIG9mIGEgbWFjaGluZSBsaWtlIGdkYiBjb3JlIGR1bXBzLgoKR29pbmcgaW50byBob3cgdG8gdXNlIHRoaXMgdG9vbCBpbiBkZXRhaWwgd2lsbCBiZSBleHBsYWluZWQKaW4gb3RoZXIgZG9jdW1lbnRhdGlvbiBzdXBwbGllZCBieSBJQk0gd2l0aCB0aGUgcGF0Y2hlcyAmIHRoZSAKbGNyYXNoIGhvbWVwYWdlIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9sa2NkLyAmIHRoZSBsY3Jhc2ggbWFucGFnZS4KCkhvdyB0aGV5IHdvcmsKLS0tLS0tLS0tLS0tLQpMY3Jhc2ggaXMgYSBwZXJmZWN0bHkgbm9ybWFsIHByb2dyYW0saG93ZXZlciwgaXQgcmVxdWlyZXMgMiAKYWRkaXRpb25hbCBmaWxlcywgS2VybnR5cGVzIHdoaWNoIGlzIGJ1aWx0IHVzaW5nIGEgcGF0Y2ggdG8gdGhlIApsaW51eCBrZXJuZWwgc291cmNlcyBpbiB0aGUgbGludXggcm9vdCBkaXJlY3RvcnkgJiB0aGUgU3lzdGVtLm1hcC4KCktlcm50eXBlcyBpcyBhbiBvYmplY3RmaWxlIHdob3NlIHNvbGUgcHVycG9zZSBpbiBsaWZlCmlzIHRvIHByb3ZpZGUgc3RhYnMgZGVidWcgaW5mbyB0byBsY3Jhc2gsIHRvIGRvIHRoaXMKS2VybnR5cGVzIGlzIGJ1aWx0IGZyb20ga2VybnR5cGVzLmMgd2hpY2gganVzdCBpbmNsdWRlcyB0aGUgbW9zdCBjb21tb25seQpyZWZlcmVuY2VkIGhlYWRlciBmaWxlcyB1c2VkIHdoZW4gZGVidWdnaW5nLCBsY3Jhc2ggY2FuIHRoZW4gcmVhZCB0aGUKLnN0YWJzIHNlY3Rpb24gb2YgdGhpcyBmaWxlLgoKRGVidWdnaW5nIGEgbGl2ZSBzeXN0ZW0gaXQgdXNlcyAvZGV2L21lbQphbHRlcm5hdGl2ZWx5IGZvciBwb3N0IG1vcnRlbSBkZWJ1Z2dpbmcgaXQgdXNlcyB0aGUgZGF0YSAKY29sbGVjdGVkIGJ5IGR1bXB0b29sLgoKCgpTeXNScQo9PT09PQpUaGlzIGlzIG5vdyBzdXBwb3J0ZWQgYnkgbGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUuClRvIGVuYWJsZSBpdCBkbyBjb21waWxlIHRoZSBrZXJuZWwgd2l0aCAKS2VybmVsIEhhY2tpbmcgLT4gTWFnaWMgU3lzUnEgS2V5IEVuYWJsZWQKZWNobyAiMSIgPiAvcHJvYy9zeXMva2VybmVsL3N5c3JxCmFsc28gdHlwZQplY2hvICI4IiA+L3Byb2Mvc3lzL2tlcm5lbC9wcmludGsKVG8gbWFrZSBwcmludGsgb3V0cHV0IGdvIHRvIGNvbnNvbGUuCk9uIDM5MCBhbGwgY29tbWFuZHMgYXJlIHByZWZpeGVkIHdpdGgKXi0KZS5nLgpeLXQgd2lsbCBzaG93IHRhc2tzLgpeLT8gb3Igc29tZSB1bmtub3duIGNvbW1hbmQgd2lsbCBkaXNwbGF5IGhlbHAuClRoZSBzeXNycSBrZXkgcmVhZGluZyBpcyB2ZXJ5IHBpY2t5ICggSSBoYXZlIHRvIHR5cGUgdGhlIGtleXMgaW4gYW4KIHh0ZXJtIHNlc3Npb24gJiBwYXN0ZSB0aGVtICBpbnRvIHRoZSB4MzI3MCBjb25zb2xlICkKJiBpdCBtYXkgYmUgd2lzZSB0byBwcmVkZWZpbmUgdGhlIGtleXMgYXMgZGVzY3JpYmVkIGluIHRoZSBWTSBoaW50cyBhYm92ZQoKVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBzeW5jaW5nIGRpc2tzIHVubW91bnRpbmcgJiByZWJvb3RpbmcKaWYgdGhlIG1hY2hpbmUgZ2V0cyBwYXJ0aWFsbHkgaHVuZy4KClJlYWQgRG9jdW1lbnRhdGlvbi9zeXNycS50eHQgZm9yIG1vcmUgaW5mbwoKUmVmZXJlbmNlczoKPT09PT09PT09PT0KRW50ZXJwcmlzZSBTeXN0ZW1zIEFyY2hpdGVjdHVyZSBSZWZlcmVuY2UgU3VtbWFyeQpFbnRlcnByaXNlIFN5c3RlbXMgQXJjaGl0ZWN0dXJlIFByaW5jaXBsZXMgb2YgT3BlcmF0aW9uCkhhcnRtdXQgUGVubmVycyBzMzkwIHN0YWNrIGZyYW1lIHNoZWV0LgpJQk0gTWFpbmZyYW1lIENoYW5uZWwgQXR0YWNobWVudCBhIHRlY2hub2xvZ3kgYnJpZWYgZnJvbSBhIENJU0NPIHdlYnBhZ2UKVmFyaW91cyBiaXRzIG9mIG1hbiAmIGluZm8gcGFnZXMgb2YgTGludXguCkxpbnV4ICYgR0RCIHNvdXJjZS4KVmFyaW91cyBpbmZvICYgbWFuIHBhZ2VzLgpDTVMgSGVscCBvbiB0cmFjaW5nIGNvbW1hbmRzLgpMaW51eCBmb3Igcy8zOTAgRWxmIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UKTGludXggZm9yIHovU2VyaWVzIEVsZiBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlICggQm90aCBIaWdobHkgUmVjb21tZW5kZWQgKQp6L0FyY2hpdGVjdHVyZSBQcmluY2lwbGVzIG9mIE9wZXJhdGlvbiBTQTIyLTc4MzItMDAKRW50ZXJwcmlzZSBTeXN0ZW1zIEFyY2hpdGVjdHVyZS8zOTAgUmVmZXJlbmNlIFN1bW1hcnkgU0EyMi03MjA5LTAxICYgdGhlCkVudGVycHJpc2UgU3lzdGVtcyBBcmNoaXRlY3R1cmUvMzkwIFByaW5jaXBsZXMgb2YgT3BlcmF0aW9uIFNBMjItNzIwMS0wNQoKU3BlY2lhbCBUaGFua3MKPT09PT09PT09PT09PT0KU3BlY2lhbCB0aGFua3MgdG8gTmVhbGUgRmVyZ3Vzb24gd2hvIG1haW50YWlucyBhIG11Y2gKcHJldHRpZXIgSFRNTCB2ZXJzaW9uIG9mIHRoaXMgcGFnZSBhdApodHRwOi8vcGVuZ3VpbnZtLnByaW5jZXRvbi5lZHUvbm90ZXMuaHRtbCNEZWJ1ZzM5MApCb2IgR3JhaW5nZXIgU3RlZmFuIEJhZGVyICYgb3RoZXJzIGZvciByZXBvcnRpbmcgYnVncwo=