ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICBEZWJ1Z2dpbmcgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKCQkJICAgICAgICAgICAgICAgYnkKCQlEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pCgkJQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZXN0IHZpZXdlZCB3aXRoIGZpeGVkIHdpZHRoIGZvbnRzIAoKT3ZlcnZpZXcgb2YgRG9jdW1lbnQ6Cj09PT09PT09PT09PT09PT09PT09PQpUaGlzIGRvY3VtZW50IGlzIGludGVuZGVkIHRvIGdpdmUgYW4gZ29vZCBvdmVydmlldyBvZiBob3cgdG8gZGVidWcgCkxpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlLiBJdCBpc24ndCBpbnRlbmRlZCBhcyBhIGNvbXBsZXRlIHJlZmVyZW5jZSAmIG5vdCBhCnR1dG9yaWFsIG9uIHRoZSBmdW5kYW1lbnRhbHMgb2YgQyAmIGFzc2VtYmx5LiBJdCBkb2Vzbid0IGdvIGludG8KMzkwIElPIGluIGFueSBkZXRhaWwuIEl0IGlzIGludGVuZGVkIHRvIGNvbXBsZW1lbnQgdGhlIGRvY3VtZW50cyBpbiB0aGUKcmVmZXJlbmNlIHNlY3Rpb24gYmVsb3cgJiBhbnkgb3RoZXIgd29ydGh3aGlsZSByZWZlcmVuY2VzIHlvdSBnZXQuCgpJdCBpcyBpbnRlbmRlZCBsaWtlIHRoZSBFbnRlcnByaXNlIFN5c3RlbXMgQXJjaGl0ZWN0dXJlLzM5MCBSZWZlcmVuY2UgU3VtbWFyeQp0byBiZSBwcmludGVkIG91dCAmIHVzZWQgYXMgYSBxdWljayBjaGVhdCBzaGVldCBzZWxmIGhlbHAgc3R5bGUgcmVmZXJlbmNlIHdoZW4KcHJvYmxlbXMgb2NjdXIuCgpDb250ZW50cwo9PT09PT09PQpSZWdpc3RlciBTZXQKQWRkcmVzcyBTcGFjZXMgb24gSW50ZWwgTGludXgKQWRkcmVzcyBTcGFjZXMgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKVGhlIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIEtlcm5lbCBUYXNrIFN0cnVjdHVyZQpSZWdpc3RlciBVc2FnZSAmIFN0YWNrZnJhbWVzIG9uIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCkEgc2FtcGxlIHByb2dyYW0gd2l0aCBjb21tZW50cwpDb21waWxpbmcgcHJvZ3JhbXMgZm9yIGRlYnVnZ2luZyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQpGaWd1cmluZyBvdXQgZ2NjIGNvbXBpbGUgZXJyb3JzCkRlYnVnZ2luZyBUb29scwpvYmpkdW1wCnN0cmFjZQpQZXJmb3JtYW5jZSBEZWJ1Z2dpbmcgCkRlYnVnZ2luZyB1bmRlciBWTQpzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIElPIE92ZXJ2aWV3CkRlYnVnZ2luZyBJTyBvbiBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIHVuZGVyIFZNCkdEQiBvbiBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlClN0YWNrIGNoYWluaW5nIGluIGdkYiBieSBoYW5kCkV4YW1pbmluZyBjb3JlIGR1bXBzCmxkZApEZWJ1Z2dpbmcgbW9kdWxlcwpUaGUgcHJvYyBmaWxlIHN5c3RlbQpTdGFydGluZyBwb2ludHMgZm9yIGRlYnVnZ2luZyBzY3JpcHRpbmcgbGFuZ3VhZ2VzIGV0Yy4KRHVtcHRvb2wgJiBMY3Jhc2gKU3lzUnEKUmVmZXJlbmNlcwpTcGVjaWFsIFRoYW5rcwoKUmVnaXN0ZXIgU2V0Cj09PT09PT09PT09PQpUaGUgY3VycmVudCBhcmNoaXRlY3R1cmVzIGhhdmUgdGhlIGZvbGxvd2luZyByZWdpc3RlcnMuCiAKMTYgIEdlbmVyYWwgcHJvcG9zZSByZWdpc3RlcnMsIDMyIGJpdCBvbiBzLzM5MCA2NCBiaXQgb24gei9BcmNoaXRlY3R1cmUsIHIwLXIxNSBvciBncHIwLWdwcjE1IHVzZWQgZm9yIGFyaXRobWV0aWMgJiBhZGRyZXNzaW5nLiAKCjE2IENvbnRyb2wgcmVnaXN0ZXJzLCAzMiBiaXQgb24gcy8zOTAgNjQgYml0IG9uIHovQXJjaGl0ZWN0dXJlLCAoIGNyMC1jcjE1IGtlcm5lbCB1c2FnZSBvbmx5ICkgdXNlZCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsCmludGVycnVwdCBjb250cm9sLGRlYnVnZ2luZyBjb250cm9sIGV0Yy4KCjE2IEFjY2VzcyByZWdpc3RlcnMgKCBhcjAtYXIxNSApIDMyIGJpdCBvbiBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCm5vdCB1c2VkIGJ5IG5vcm1hbCBwcm9ncmFtcyBidXQgcG90ZW50aWFsbHkgY291bGQgCmJlIHVzZWQgYXMgdGVtcG9yYXJ5IHN0b3JhZ2UuIFRoZWlyIG1haW4gcHVycG9zZSBpcyB0aGVpciAxIHRvIDEKYXNzb2NpYXRpb24gd2l0aCBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIGFuZCBhcmUgdXNlZCBpbgp0aGUga2VybmVsIGZvciBjb3B5aW5nIGRhdGEgYmV0d2VlbiBrZXJuZWwgJiB1c2VyIGFkZHJlc3Mgc3BhY2VzLgpBY2Nlc3MgcmVnaXN0ZXIgMCAoICYgYWNjZXNzIHJlZ2lzdGVyIDEgb24gei9BcmNoaXRlY3R1cmUgKCBuZWVkcyA2NCBiaXQgCnBvaW50ZXIgKSApIGlzIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBwdGhyZWFkIGxpYnJhcnkgYXMgYSBwb2ludGVyIHRvCnRoZSBjdXJyZW50IHJ1bm5pbmcgdGhyZWFkcyBwcml2YXRlIGFyZWEuCgoxNiA2NCBiaXQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIChmcDAtZnAxNSApIElFRUUgJiBIRlAgZmxvYXRpbmcgCnBvaW50IGZvcm1hdCBjb21wbGlhbnQgb24gRzUgdXB3YXJkcyAmIGEgRmxvYXRpbmcgcG9pbnQgY29udHJvbCByZWcgKEZQQykgCjQgIDY0IGJpdCByZWdpc3RlcnMgKGZwMCxmcDIsZnA0ICYgZnA2KSBIRlAgb25seSBvbiBvbGRlciBtYWNoaW5lcy4KTm90ZToKTGludXggKGN1cnJlbnRseSkgYWx3YXlzIHVzZXMgSUVFRSAmIGVtdWxhdGVzIEc1IElFRUUgZm9ybWF0IG9uIG9sZGVyIG1hY2hpbmVzLAooIHByb3ZpZGVkIHRoZSBrZXJuZWwgaXMgY29uZmlndXJlZCBmb3IgdGhpcyApLgoKClRoZSBQU1cgaXMgdGhlIG1vc3QgaW1wb3J0YW50IHJlZ2lzdGVyIG9uIHRoZSBtYWNoaW5lIGl0CmlzIDY0IGJpdCBvbiBzLzM5MCAmIDEyOCBiaXQgb24gei9BcmNoaXRlY3R1cmUgJiBzZXJ2ZXMgdGhlIHJvbGVzIG9mIAphIHByb2dyYW0gY291bnRlciAocGMpLCBjb25kaXRpb24gY29kZSByZWdpc3RlcixtZW1vcnkgc3BhY2UgZGVzaWduYXRvci4KSW4gSUJNIHN0YW5kYXJkIG5vdGF0aW9uIEkgYW0gY291bnRpbmcgYml0IDAgYXMgdGhlIE1TQi4KSXQgaGFzIHNldmVyYWwgYWR2YW50YWdlcyBvdmVyIGEgbm9ybWFsIHByb2dyYW0gY291bnRlcgppbiB0aGF0IHlvdSBjYW4gY2hhbmdlIGFkZHJlc3MgdHJhbnNsYXRpb24gJiBwcm9ncmFtIGNvdW50ZXIgCmluIGEgc2luZ2xlIGluc3RydWN0aW9uLiBUbyBjaGFuZ2UgYWRkcmVzcyB0cmFuc2xhdGlvbiwKZS5nLiBzd2l0Y2hpbmcgYWRkcmVzcyB0cmFuc2xhdGlvbiBvZmYgcmVxdWlyZXMgdGhhdCB5b3UKaGF2ZSBhIGxvZ2ljYWw9cGh5c2ljYWwgbWFwcGluZyBmb3IgdGhlIGFkZHJlc3MgeW91IGFyZQpjdXJyZW50bHkgcnVubmluZyBhdC4KCiAgICAgIEJpdCAgICAgICAgICAgVmFsdWUKcy8zOTAgei9BcmNoaXRlY3R1cmUKMCAgICAgICAwICAgICBSZXNlcnZlZCAoIG11c3QgYmUgMCApIG90aGVyd2lzZSBzcGVjaWZpY2F0aW9uIGV4Y2VwdGlvbiBvY2N1cnMuCgoxICAgICAgIDEgICAgIFByb2dyYW0gRXZlbnQgUmVjb3JkaW5nIDEgUEVSIGVuYWJsZWQsIAoJICAgICAgUEVSIGlzIHVzZWQgdG8gZmFjaWxpdGl0YXRlIGRlYnVnZ2luZyBlLmcuIHNpbmdsZSBzdGVwcGluZy4KCjItNCAgICAyLTQgICAgUmVzZXJ2ZWQgKCBtdXN0IGJlIDAgKS4gCgo1ICAgICAgIDUgICAgIER5bmFtaWMgYWRkcmVzcyB0cmFuc2xhdGlvbiAxPURBVCBvbi4KCjYgICAgICAgNiAgICAgSW5wdXQvT3V0cHV0IGludGVycnVwdCBNYXNrCgo3ICAgICAgIDcgICAgIEV4dGVybmFsIGludGVycnVwdCBNYXNrIHVzZWQgcHJpbWFyaWx5IGZvciBpbnRlcnByb2Nlc3NvciBzaWduYWxsaW5nICYgCgkgICAgICBjbG9jayBpbnRlcnJ1cHRzLgoKOC0xMSAgOC0xMSAgICBQU1cgS2V5IHVzZWQgZm9yIGNvbXBsZXggbWVtb3J5IHByb3RlY3Rpb24gbWVjaGFuaXNtIG5vdCB1c2VkIHVuZGVyIGxpbnV4CgoxMiAgICAgIDEyICAgIDEgb24gcy8zOTAgMCBvbiB6L0FyY2hpdGVjdHVyZQoKMTMgICAgICAxMyAgICBNYWNoaW5lIENoZWNrIE1hc2sgMT1lbmFibGUgbWFjaGluZSBjaGVjayBpbnRlcnJ1cHRzCgoxNCAgICAgIDE0ICAgIFdhaXQgU3RhdGUgc2V0IHRoaXMgdG8gMSB0byBzdG9wIHRoZSBwcm9jZXNzb3IgZXhjZXB0IGZvciBpbnRlcnJ1cHRzICYgZ2l2ZSAKCSAgICAgIHRpbWUgdG8gb3RoZXIgTFBBUlMgdXNlZCBpbiBDUFUgaWRsZSBpbiB0aGUga2VybmVsIHRvIGluY3JlYXNlIG92ZXJhbGwgCgkgICAgICB1c2FnZSBvZiBwcm9jZXNzb3IgcmVzb3VyY2VzLgoKMTUgICAgICAxNSAgICBQcm9ibGVtIHN0YXRlICggaWYgc2V0IHRvIDEgY2VydGFpbiBpbnN0cnVjdGlvbnMgYXJlIGRpc2FibGVkICkKCSAgICAgIGFsbCBsaW51eCB1c2VyIHByb2dyYW1zIHJ1biB3aXRoIHRoaXMgYml0IDEgCgkgICAgICAoIHVzZWZ1bCBpbmZvIGZvciBkZWJ1Z2dpbmcgdW5kZXIgVk0gKS4KCjE2LTE3IDE2LTE3ICAgQWRkcmVzcyBTcGFjZSBDb250cm9sCgoJICAgICAgMDAgUHJpbWFyeSBTcGFjZSBNb2RlIHdoZW4gREFUIG9uCgkgICAgICBUaGUgbGludXgga2VybmVsIGN1cnJlbnRseSBydW5zIGluIHRoaXMgbW9kZSwgQ1IxIGlzIGFmZmlsaWF0ZWQgd2l0aCAKICAgICAgICAgICAgICB0aGlzIG1vZGUgJiBwb2ludHMgdG8gdGhlIHByaW1hcnkgc2VnbWVudCB0YWJsZSBvcmlnaW4gZXRjLgoKCSAgICAgIDAxIEFjY2VzcyByZWdpc3RlciBtb2RlIHRoaXMgbW9kZSBpcyB1c2VkIGluIGZ1bmN0aW9ucyB0byAKCSAgICAgIGNvcHkgZGF0YSBiZXR3ZWVuIGtlcm5lbCAmIHVzZXIgc3BhY2UuCgoJICAgICAgMTAgU2Vjb25kYXJ5IHNwYWNlIG1vZGUgbm90IHVzZWQgaW4gbGludXggaG93ZXZlciBDUjcgdGhlCgkgICAgICByZWdpc3RlciBhZmZpbGlhdGVkIHdpdGggdGhpcyBtb2RlIGlzICYgdGhpcyAmIG5vcm1hbGx5CgkgICAgICBDUjEzPUNSNyB0byBhbGxvdyB1cyB0byBjb3B5IGRhdGEgYmV0d2VlbiBrZXJuZWwgJiB1c2VyIHNwYWNlLgoJICAgICAgV2UgZG8gdGhpcyBhcyBmb2xsb3dzOgoJICAgICAgV2Ugc2V0IGFyMiB0byAwIHRvIGRlc2lnbmF0ZSBpdHMKCSAgICAgIGFmZmlsaWF0ZWQgZ3ByICggZ3ByMiApdG8gcG9pbnQgdG8gcHJpbWFyeT1rZXJuZWwgc3BhY2UuCgkgICAgICBXZSBzZXQgYXI0IHRvIDEgdG8gZGVzaWduYXRlIGl0cwoJICAgICAgYWZmaWxpYXRlZCBncHIgKCBncHI0ICkgdG8gcG9pbnQgdG8gc2Vjb25kYXJ5PWhvbWU9dXNlciBzcGFjZQoJICAgICAgJiB0aGVuIGVzc2VudGlhbGx5IGRvIGEgbWVtY29weShncHIyLGdwcjQsc2l6ZSkgdG8KCSAgICAgIGNvcHkgZGF0YSBiZXR3ZWVuIHRoZSBhZGRyZXNzIHNwYWNlcywgdGhlIHJlYXNvbiB3ZSB1c2UgaG9tZSBzcGFjZSBmb3IgdGhlCgkgICAgICBrZXJuZWwgJiBkb24ndCBrZWVwIHNlY29uZGFyeSBzcGFjZSBmcmVlIGlzIHRoYXQgY29kZSB3aWxsIG5vdCBydW4gaW4gCgkgICAgICBzZWNvbmRhcnkgc3BhY2UuCgoJICAgICAgMTEgSG9tZSBTcGFjZSBNb2RlIGFsbCB1c2VyIHByb2dyYW1zIHJ1biBpbiB0aGlzIG1vZGUuCgkgICAgICBpdCBpcyBhZmZpbGlhdGVkIHdpdGggQ1IxMy4KCjE4LTE5IDE4LTE5ICAgQ29uZGl0aW9uIGNvZGVzIChDQykKCjIwICAgIDIwICAgICAgRml4ZWQgcG9pbnQgb3ZlcmZsb3cgbWFzayBpZiAxPUZQVSBleGNlcHRpb25zIGZvciB0aGlzIGV2ZW50IAogICAgICAgICAgICAgIG9jY3VyICggbm9ybWFsbHkgMCApIAoKMjEgICAgMjEgICAgICBEZWNpbWFsIG92ZXJmbG93IG1hc2sgaWYgMT1GUFUgZXhjZXB0aW9ucyBmb3IgdGhpcyBldmVudCBvY2N1ciAKICAgICAgICAgICAgICAoIG5vcm1hbGx5IDAgKQoKMjIgICAgMjIgICAgICBFeHBvbmVudCB1bmRlcmZsb3cgbWFzayBpZiAxPUZQVSBleGNlcHRpb25zIGZvciB0aGlzIGV2ZW50IG9jY3VyIAogICAgICAgICAgICAgICggbm9ybWFsbHkgMCApCgoyMyAgICAyMyAgICAgIFNpZ25pZmljYW5jZSBNYXNrIGlmIDE9RlBVIGV4Y2VwdGlvbnMgZm9yIHRoaXMgZXZlbnQgb2NjdXIgCiAgICAgICAgICAgICAgKCBub3JtYWxseSAwICkKCjI0LTMxIDI0LTMwICAgUmVzZXJ2ZWQgTXVzdCBiZSAwLgoKICAgICAgMzEgICAgICBFeHRlbmRlZCBBZGRyZXNzaW5nIE1vZGUKICAgICAgMzIgICAgICBCYXNpYyBBZGRyZXNzaW5nIE1vZGUKICAgICAgICAgICAgICBVc2VkIHRvIHNldCBhZGRyZXNzaW5nIG1vZGUKCSAgICAgIFBTVyAzMSAgIFBTVyAzMgogICAgICAgICAgICAgICAgMCAgICAgICAgIDAgICAgICAgIDI0IGJpdAogICAgICAgICAgICAgICAgMCAgICAgICAgIDEgICAgICAgIDMxIGJpdAogICAgICAgICAgICAgICAgMSAgICAgICAgIDEgICAgICAgIDY0IGJpdAoKMzIgICAgICAgICAgICAgMT0zMSBiaXQgYWRkcmVzc2luZyBtb2RlIDA9MjQgYml0IGFkZHJlc3NpbmcgbW9kZSAoZm9yIGJhY2t3YXJkIAogICAgICAgICAgICAgICBjb21wYXRpYmlsaXR5KSwgbGludXggYWx3YXlzIHJ1bnMgd2l0aCB0aGlzIGJpdCBzZXQgdG8gMQoKMzMtNjQgICAgICAgICAgSW5zdHJ1Y3Rpb24gYWRkcmVzcy4KICAgICAgMzMtNjMgICAgUmVzZXJ2ZWQgbXVzdCBiZSAwCiAgICAgIDY0LTEyNyAgIEFkZHJlc3MKICAgICAgICAgICAgICAgSW4gMjQgYml0cyBtb2RlIGJpdHMgNjQtMTAzPTAgYml0cyAxMDQtMTI3IEFkZHJlc3MgCiAgICAgICAgICAgICAgIEluIDMxIGJpdHMgbW9kZSBiaXRzIDY0LTk2PTAgYml0cyA5Ny0xMjcgQWRkcmVzcwogICAgICAgICAgICAgICBOb3RlOiB1bmxpa2UgMzEgYml0IG1vZGUgb24gcy8zOTAgYml0IDk2IG11c3QgYmUgemVybwoJICAgICAgIHdoZW4gbG9hZGluZyB0aGUgYWRkcmVzcyB3aXRoIExQU1dFIG90aGVyd2lzZSBhIAogICAgICAgICAgICAgICBzcGVjaWZpY2F0aW9uIGV4Y2VwdGlvbiBvY2N1cnMsIExQU1cgaXMgZnVsbHkgYmFja3dhcmQKICAgICAgICAgICAgICAgY29tcGF0aWJsZS4KIAkgIAoJICAKUHJlZml4IFBhZ2UocykKLS0tLS0tLS0tLS0tLS0JICAKVGhpcyBwZXIgY3B1IG1lbW9yeSBhcmVhIGlzIHRvbyBpbnRpbWF0ZWx5IHRpZWQgdG8gdGhlIHByb2Nlc3NvciBub3QgdG8gbWVudGlvbi4KSXQgZXhpc3RzIGJldHdlZW4gdGhlIHJlYWwgYWRkcmVzc2VzIDAtNDA5NiBvbiBzLzM5MCAmIDAtODE5MiB6L0FyY2hpdGVjdHVyZSAmIGlzIGV4Y2hhbmdlZCAKd2l0aCBhIDEgcGFnZSBvbiBzLzM5MCBvciAyIHBhZ2VzIG9uIHovQXJjaGl0ZWN0dXJlIGluIGFic29sdXRlIHN0b3JhZ2UgYnkgdGhlIHNldCAKcHJlZml4IGluc3RydWN0aW9uIGluIGxpbnV4J2VzIHN0YXJ0dXAuIApUaGlzIHBhZ2UgaXMgbWFwcGVkIHRvIGEgZGlmZmVyZW50IHByZWZpeCBmb3IgZWFjaCBwcm9jZXNzb3IgaW4gYW4gU01QIGNvbmZpZ3VyYXRpb24KKCBhc3N1bWluZyB0aGUgb3MgZGVzaWduZXIgaXMgc2FuZSBvZiBjb3Vyc2UgOi0pICkuCkJ5dGVzIDAtNTEyICggMjAwIGhleCApIG9uIHMvMzkwICYgMC01MTIsNDA5Ni00NTQ0LDQ2MDQtNTExOSBjdXJyZW50bHkgb24gei9BcmNoaXRlY3R1cmUgCmFyZSB1c2VkIGJ5IHRoZSBwcm9jZXNzb3IgaXRzZWxmIGZvciBob2xkaW5nIHN1Y2ggaW5mb3JtYXRpb24gYXMgZXhjZXB0aW9uIGluZGljYXRpb25zICYgCmVudHJ5IHBvaW50cyBmb3IgZXhjZXB0aW9ucy4KQnl0ZXMgYWZ0ZXIgMHhjMDAgaGV4IGFyZSB1c2VkIGJ5IGxpbnV4IGZvciBwZXIgcHJvY2Vzc29yIGdsb2JhbHMgb24gcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSAKKCB0aGVyZSBpcyBhIGdhcCBvbiB6L0FyY2hpdGVjdHVyZSB0b28gY3VycmVudGx5IGJldHdlZW4gMHhjMDAgJiAxMDAwIHdoaWNoIGxpbnV4IHVzZXMgKS4KVGhlIGNsb3Nlc3QgdGhpbmcgdG8gdGhpcyBvbiB0cmFkaXRpb25hbCBhcmNoaXRlY3R1cmVzIGlzIHRoZSBpbnRlcnJ1cHQKdmVjdG9yIHRhYmxlLiBUaGlzIGlzIGEgZ29vZCB0aGluZyAmIGRvZXMgc2ltcGxpZnkgc29tZSBvZiB0aGUga2VybmVsIGNvZGluZwpob3dldmVyIGl0IG1lYW5zIHRoYXQgd2Ugbm93IGNhbm5vdCBjYXRjaCBzdHJheSBOVUxMIHBvaW50ZXJzIGluIHRoZQprZXJuZWwgd2l0aG91dCBoYXJkIGNvZGVkIGNoZWNrcy4KCgoKQWRkcmVzcyBTcGFjZXMgb24gSW50ZWwgTGludXgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoZSB0cmFkaXRpb25hbCBJbnRlbCBMaW51eCBpcyBhcHByb3hpbWF0ZWx5IG1hcHBlZCBhcyBmb2xsb3dzIGZvcmdpdmUKdGhlIGFzY2lpIGFydC4KMHhGRkZGRkZGRiA0R0IgSGltZW0gICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBLZXJuZWwgU3BhY2UgICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICoqKioqKioqKioqKioqKioKVXNlciBTcGFjZSBIaW1lbSAodHlwaWNhbGx5IDB4QzAwMDAwMDAgM0dCICkqICBVc2VyIFN0YWNrICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCgkJCQkgICAgICAgICAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqICAgICAgICAgICAgICAqCgkJCQkJICAgICogIFNoYXJlZCBMaWJzICAqICAgICAgICAgICogTmV4dCBQcm9jZXNzICogICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKiogICAgICAgICAgKiAgICAgdG8gICAgICAgKiAgCgkJCQkJICAgICogICAgICAgICAgICAgICAqICAgIDw9PSAgICogICAgIFJ1biAgICAgICogIDw9PQoJCQkJCSAgICAqICBVc2VyIFByb2dyYW0gKiAgICAgICAgICAqICAgICAgICAgICAgICAqCgkJCQkJICAgICogICBEYXRhIEJTUyAgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCSBUZXh0ICAgICAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgogICAgICAgICAJCQkgICAgICAgICAgICAqICAgU2VjdGlvbnMgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCjB4MDAwMDAwMDAgICAgICAgICAJCQkgICAgKioqKioqKioqKioqKioqKiogICAgICAgICAgKioqKioqKioqKioqKioqKgoKTm93IGl0IGlzIGVhc3kgdG8gc2VlIHRoYXQgb24gSW50ZWwgaXQgaXMgcXVpdGUgZWFzeSB0byByZWNvZ25pc2UgYSBrZXJuZWwgYWRkcmVzcyAKYXMgYmVpbmcgb25lIGdyZWF0ZXIgdGhhbiB1c2VyIHNwYWNlIGhpbWVtICggaW4gdGhpcyBjYXNlIDB4QzAwMDAwMDApLgomIGFkZHJlc3NlcyBvZiBsZXNzIHRoYW4gdGhpcyBhcmUgdGhlIG9uZXMgaW4gdGhlIGN1cnJlbnQgcnVubmluZyBwcm9ncmFtIG9uIHRoaXMKcHJvY2Vzc29yICggaWYgYW4gc21wIGJveCApLgpJZiB1c2luZyB0aGUgdmlydHVhbCBtYWNoaW5lICggVk0gKSBhcyBhIGRlYnVnZ2VyIGl0IGlzIHF1aXRlIGRpZmZpY3VsdCB0bwprbm93IHdoaWNoIHVzZXIgcHJvY2VzcyBpcyBydW5uaW5nIGFzIHRoZSBhZGRyZXNzIHNwYWNlIHlvdSBhcmUgbG9va2luZyBhdApjb3VsZCBiZSBmcm9tIGFueSBwcm9jZXNzIGluIHRoZSBydW4gcXVldWUuCgpUaGUgbGltaXRhdGlvbiBvZiBJbnRlbHMgYWRkcmVzc2luZyB0ZWNobmlxdWUgaXMgdGhhdCB0aGUgbGludXgKa2VybmVsIHVzZXMgYSB2ZXJ5IHNpbXBsZSByZWFsIGFkZHJlc3MgdG8gdmlydHVhbCBhZGRyZXNzaW5nIHRlY2huaXF1ZQpvZiBSZWFsIEFkZHJlc3M9VmlydHVhbCBBZGRyZXNzLVVzZXIgU3BhY2UgSGltZW0uClRoaXMgbWVhbnMgdGhhdCBvbiBJbnRlbCB0aGUga2VybmVsIGxpbnV4IGNhbiB0eXBpY2FsbHkgb25seSBhZGRyZXNzCkhpbWVtPTB4RkZGRkZGRkYtMHhDMDAwMDAwMD0xR0IgJiB0aGlzIGlzIGFsbCB0aGUgUkFNIHRoZXNlIG1hY2hpbmVzCmNhbiB0eXBpY2FsbHkgdXNlLgpUaGV5IGNhbiBsb3dlciBVc2VyIEhpbWVtIHRvIDJHQiBvciBsb3dlciAmIHRodXMgYmUKYWJsZSB0byB1c2UgMkdCIG9mIFJBTSBob3dldmVyIHRoaXMgc2hyaW5rcyB0aGUgbWF4aW11bSBzaXplCm9mIFVzZXIgU3BhY2UgZnJvbSAzR0IgdG8gMkdCIHRoZXkgaGF2ZSBhIG5vIHdpbiBsaW1pdCBvZiA0R0IgdW5sZXNzCnRoZXkgZ28gdG8gNjQgQml0LgoKCk9uIDM5MCBvdXIgbGltaXRhdGlvbnMgJiBzdHJlbmd0aHMgbWFrZSB1cyBzbGlnaHRseSBkaWZmZXJlbnQuCkZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdlIGFyZSBvbmx5IGFsbG93ZWQgdXNlIDMxIGJpdHMgKDJHQikKb2Ygb3VyIDMyIGJpdCBhZGRyZXNzZXMsIGhvd2V2ZXIsIHdlIHVzZSBlbnRpcmVseSBzZXBhcmF0ZSBhZGRyZXNzIApzcGFjZXMgZm9yIHRoZSB1c2VyICYga2VybmVsLgoKVGhpcyBtZWFucyB3ZSBjYW4gc3VwcG9ydCAyR0Igb2Ygbm9uIEV4dGVuZGVkIFJBTSBvbiBzLzM5MCwgJiBtb3JlCndpdGggdGhlIEV4dGVuZGVkIG1lbW9yeSBtYW5hZ2VtZW50IHN3YXAgZGV2aWNlICYgCmN1cnJlbnRseSA0VEIgb2YgcGh5c2ljYWwgbWVtb3J5IGN1cnJlbnRseSBvbiB6L0FyY2hpdGVjdHVyZS4KCgpBZGRyZXNzIFNwYWNlcyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKT3VyIGFkZHJlc3Npbmcgc2NoZW1lIGlzIGFzIGZvbGxvd3MKCgpIaW1lbSAweDdmZmZmZmZmIDJHQiBvbiBzLzM5MCAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqKioqKioqKioqKioqKioqCmN1cnJlbnRseSAweDNmZmZmZmZmZmZmICgyXjQyKS0xICogIFVzZXIgU3RhY2sgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKb24gei9BcmNoaXRlY3R1cmUuCQkgKioqKioqKioqKioqKioqKiogICAgICAgICAgKiAgICAgICAgICAgICAgKgoJCSAgICAgICAgICAgICAgICAgKiAgU2hhcmVkIExpYnMgICogICAgICAgICAgKiAgICAgICAgICAgICAgKiAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqICAgICAgICAgICAgICAqICAKCQkJICAgICAgICAgKiAgICAgICAgICAgICAgICogICAgICAgICAgKiAgICBLZXJuZWwgICAgKiAgCgkJICAgICAgICAgICAgICAgICAqICBVc2VyIFByb2dyYW0gKiAgICAgICAgICAqICAgICAgICAgICAgICAqCgkJICAgICAgICAgICAgICAgICAqICAgRGF0YSBCU1MgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgVGV4dCAgICAgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKICAgICAgICAgICAgCQkJICogICBTZWN0aW9ucyAgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKMHgwMDAwMDAwMCAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKiogICAgICAgICAgKioqKioqKioqKioqKioqKgoKVGhpcyBhbHNvIG1lYW5zIHRoYXQgd2UgbmVlZCB0byBsb29rIGF0IHRoZSBQU1cgcHJvYmxlbSBzdGF0ZSBiaXQKb3IgdGhlIGFkZHJlc3NpbmcgbW9kZSB0byBkZWNpZGUgd2hldGhlciB3ZSBhcmUgbG9va2luZyBhdAp1c2VyIG9yIGtlcm5lbCBzcGFjZS4KClZpcnR1YWwgQWRkcmVzc2VzIG9uIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKQSB2aXJ0dWFsIGFkZHJlc3Mgb24gcy8zOTAgaXMgbWFkZSB1cCBvZiAzIHBhcnRzClRoZSBTWCAoIHNlZ21lbnQgaW5kZXgsIHJvdWdobHkgY29ycmVzcG9uZGluZyB0byB0aGUgUEdEICYgUE1EIGluIGxpbnV4IHRlcm1pbm9sb2d5ICkgCmJlaW5nIGJpdHMgMS0xMS4KVGhlIFBYICggcGFnZSBpbmRleCwgY29ycmVzcG9uZGluZyB0byB0aGUgcGFnZSB0YWJsZSBlbnRyeSAocHRlKSBpbiBsaW51eCB0ZXJtaW5vbG9neSApCmJlaW5nIGJpdHMgMTItMTkuIApUaGUgcmVtYWluaW5nIGJpdHMgQlggKHRoZSBieXRlIGluZGV4IGFyZSB0aGUgb2Zmc2V0IGluIHRoZSBwYWdlICkKaS5lLiBiaXRzIDIwIHRvIDMxLgoKT24gei9BcmNoaXRlY3R1cmUgaW4gbGludXggd2UgY3VycmVudGx5IG1ha2UgdXAgYW4gYWRkcmVzcyBmcm9tIDQgcGFydHMuClRoZSByZWdpb24gaW5kZXggYml0cyAoUlgpIDAtMzIgd2UgY3VycmVudGx5IHVzZSBiaXRzIDIyLTMyClRoZSBzZWdtZW50IGluZGV4IChTWCkgYmVpbmcgYml0cyAzMy00MwpUaGUgcGFnZSBpbmRleCAoUFgpIGJlaW5nIGJpdHMgIDQ0LTUxClRoZSBieXRlIGluZGV4IChCWCkgYmVpbmcgYml0cyAgNTItNjMKCk5vdGVzOgoxKSBzLzM5MCBoYXMgbm8gUE1EIHNvIHRoZSBQTUQgaXMgcmVhbGx5IHRoZSBQR0QgYWxzby4KQSBsb3Qgb2YgdGhpcyBzdHVmZiBpcyBkZWZpbmVkIGluIHBndGFibGUuaC4KCjIpIEFsc28gc2VlaW5nIGFzIHMvMzkwJ3MgcGFnZSBpbmRleGVzIGFyZSBvbmx5IDFrICBpbiBzaXplIAooYml0cyAxMi0xOSB4IDQgYnl0ZXMgcGVyIHB0ZSApIHdlIHVzZSAxICggcGFnZSA0ayApCnRvIG1ha2UgdGhlIGJlc3QgdXNlIG9mIG1lbW9yeSBieSB1cGRhdGluZyA0IHNlZ21lbnQgaW5kaWNlcyAKZW50cmllcyBlYWNoIHRpbWUgd2UgbWVzcyB3aXRoIGEgUE1EICYgdXNlIG9mZnNldHMgCjAsMTAyNCwyMDQ4ICYgMzA3MiBpbiB0aGlzIHBhZ2UgYXMgZm9yIG91ciBzZWdtZW50IGluZGV4ZXMuCk9uIHovQXJjaGl0ZWN0dXJlIG91ciBwYWdlIGluZGV4ZXMgYXJlIG5vdyAyayBpbiBzaXplCiggYml0cyAxMi0xOSB4IDggYnl0ZXMgcGVyIHB0ZSApIHdlIGRvIGEgc2ltaWxhciB0cmljawpidXQgb25seSBtZXNzIHdpdGggMiBzZWdtZW50IGluZGljZXMgZWFjaCB0aW1lIHdlIG1lc3Mgd2l0aAphIFBNRC4KCjMpIEFzIHovQXJjaGl0ZWN0dXJlIHN1cHBvcnRzIHVwdG8gYSBtYXNzaXZlIDUtbGV2ZWwgcGFnZSB0YWJsZSBsb29rdXAgd2UgCmNhbiBvbmx5IHVzZSAzIGN1cnJlbnRseSBvbiBMaW51eCAoIGFzIHRoaXMgaXMgYWxsIHRoZSBnZW5lcmljIGtlcm5lbApjdXJyZW50bHkgc3VwcG9ydHMgKSBob3dldmVyIHRoaXMgbWF5IGNoYW5nZSBpbiBmdXR1cmUKdGhpcyBhbGxvd3MgdXMgdG8gYWNjZXNzICggYWNjb3JkaW5nIHRvIG15IHN1bXMgKQo0VEIgb2YgdmlydHVhbCBzdG9yYWdlIHBlciBwcm9jZXNzIGkuZS4KNDA5Nio1MTIoUFRFUykqMTAyNChQTURTKSoyMDQ4KFBHRCkgPSA0Mzk4MDQ2NTExMTA0IGJ5dGVzLAplbm91Z2ggZm9yIGFub3RoZXIgMiBvciAzIG9mIHllYXJzIEkgdGhpbmsgOi0pLgp0byBkbyB0aGlzIHdlIHVzZSBhIHJlZ2lvbi10aGlyZC10YWJsZSBkZXNpZ25hdGlvbiB0eXBlIGluCm91ciBhZGRyZXNzIHNwYWNlIGNvbnRyb2wgcmVnaXN0ZXJzLgogCgpUaGUgTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUgS2VybmVsIFRhc2sgU3RydWN0dXJlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KRWFjaCBwcm9jZXNzL3RocmVhZCB1bmRlciBMaW51eCBmb3IgUzM5MCBoYXMgaXRzIG93biBrZXJuZWwgdGFza19zdHJ1Y3QKZGVmaW5lZCBpbiBsaW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKVGhlIFMzOTAgb24gaW5pdGlhbGlzYXRpb24gJiByZXN1bWluZyBvZiBhIHByb2Nlc3Mgb24gYSBjcHUgc2V0cwp0aGUgX19MQ19LRVJORUxfU1RBQ0sgdmFyaWFibGUgaW4gdGhlIHNwYXJlIHByZWZpeCBhcmVhIGZvciB0aGlzIGNwdQooIHdoaWNoIHdlIHVzZSBmb3IgcGVyIHByb2Nlc3NvciBnbG9iYWxzKS4KClRoZSBrZXJuZWwgc3RhY2sgcG9pbnRlciBpcyBpbnRpbWF0ZWx5IHRpZWQgd2l0aCB0aGUgdGFzayBzdHVjdHVyZSBmb3IKZWFjaCBwcm9jZXNzb3IgYXMgZm9sbG93cy4KCiAgICAgICAgICAgICAgICAgICAgICBzLzM5MAogICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICAgICAgKiAgMSBwYWdlIGtlcm5lbCBzdGFjayAqCgkgICAgKiAgICAgICAgKCA0SyApICAgICAgICAqCiAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAqICAgMSBwYWdlIHRhc2tfc3RydWN0ICogICAgICAgIAogICAgICAgICAgICAqICAgICAgICAoIDRLICkgICAgICAgICoKOEsgYWxpZ25lZCAgKioqKioqKioqKioqKioqKioqKioqKioqIAoKICAgICAgICAgICAgICAgICB6L0FyY2hpdGVjdHVyZQogICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICAgICAgKiAgMiBwYWdlIGtlcm5lbCBzdGFjayAqCgkgICAgKiAgICAgICAgKCA4SyApICAgICAgICAqCiAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAqICAyIHBhZ2UgdGFza19zdHJ1Y3QgICogICAgICAgIAogICAgICAgICAgICAqICAgICAgICAoIDhLICkgICAgICAgICoKMTZLIGFsaWduZWQgKioqKioqKioqKioqKioqKioqKioqKioqIAoKV2hhdCB0aGlzIG1lYW5zIGlzIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBkZWRpY2F0ZSBhbnkgcmVnaXN0ZXIgb3IgZ2xvYmFsIHZhcmlhYmxlCnRvIHBvaW50IHRvIHRoZSBjdXJyZW50IHJ1bm5pbmcgcHJvY2VzcyAmIGNhbiByZXRyaWV2ZSBpdCB3aXRoIHRoZSBmb2xsb3dpbmcKdmVyeSBzaW1wbGUgY29uc3RydWN0IGZvciBzLzM5MCAmIG9uZSB2ZXJ5IHNpbWlsYXIgZm9yIHovQXJjaGl0ZWN0dXJlLgoKc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBnZXRfY3VycmVudCh2b2lkKQp7CiAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50OwogICAgICAgIF9fYXNtX18oImxoaSAgICUwLC04MTkyXG5cdCIKICAgICAgICAgICAgICAgICJuciAgICAlMCwxNSIKICAgICAgICAgICAgICAgIDogIj1yIiAoY3VycmVudCkgKTsKICAgICAgICByZXR1cm4gY3VycmVudDsKfQoKaS5lLiBqdXN0IGFuZGluZyB0aGUgY3VycmVudCBrZXJuZWwgc3RhY2sgcG9pbnRlciB3aXRoIHRoZSBtYXNrIC04MTkyLgpUaGFua2Z1bGx5IGJlY2F1c2UgTGludXggZG9lc24ndCBoYXZlIHN1cHBvcnQgZm9yIG5lc3RlZCBJTyBpbnRlcnJ1cHRzCiYgb3VyIGRldmljZXMgaGF2ZSBsYXJnZSBidWZmZXJzIGNhbiBzdXJ2aXZlIGludGVycnVwdHMgYmVpbmcgc2h1dCBmb3IgCnNob3J0IGFtb3VudHMgb2YgdGltZSB3ZSBkb24ndCBuZWVkIGEgc2VwYXJhdGUgc3RhY2sgZm9yIGludGVycnVwdHMuCgoKCgpSZWdpc3RlciBVc2FnZSAmIFN0YWNrZnJhbWVzIG9uIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ck92ZXJ2aWV3OgotLS0tLS0tLS0KVGhpcyBpcyB0aGUgY29kZSB0aGF0IGdjYyBwcm9kdWNlcyBhdCB0aGUgdG9wICYgdGhlIGJvdHRvbSBvZgplYWNoIGZ1bmN0aW9uLCBpdCB1c3VhbGx5IGlzIGZhaXJseSBjb25zaXN0ZW50ICYgc2ltaWxhciBmcm9tIApmdW5jdGlvbiB0byBmdW5jdGlvbiAmIGlmIHlvdSBrbm93IGl0cyBsYXlvdXQgeW91IGNhbiBwcm9iYWxieQptYWtlIHNvbWUgaGVhZHdheSBpbiBmaW5kaW5nIHRoZSB1bHRpbWF0ZSBjYXVzZSBvZiBhIHByb2JsZW0KYWZ0ZXIgYSBjcmFzaCB3aXRob3V0IGEgc291cmNlIGxldmVsIGRlYnVnZ2VyLgoKTm90ZTogVG8gZm9sbG93IHN0YWNrZnJhbWVzIHJlcXVpcmVzIGEga25vd2xlZGdlIG9mIEMgb3IgUGFzY2FsICYKbGltaXRlZCBrbm93bGVkZ2Ugb2Ygb25lIGFzc2VtYmx5IGxhbmd1YWdlLgoKSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdGhlcmUgYXJlIHNvbWUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUKcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSBzdGFjayBsYXlvdXRzIGFzIHRoZSB6L0FyY2hpdGVjdHVyZSBzdGFjayBsYXlvdXQgZGlkbid0IGhhdmUKdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGxpbmthZ2UgZm9ybWF0cy4KCkdsb3NzYXJ5OgotLS0tLS0tLS0KYWxsb2NhOgpUaGlzIGlzIGEgYnVpbHQgaW4gY29tcGlsZXIgZnVuY3Rpb24gZm9yIHJ1bnRpbWUgYWxsb2NhdGlvbgpvZiBleHRyYSBzcGFjZSBvbiB0aGUgY2FsbGVycyBzdGFjayB3aGljaCBpcyBvYnZpb3VzbHkgZnJlZWQKdXAgb24gZnVuY3Rpb24gZXhpdCAoIGUuZy4gdGhlIGNhbGxlciBtYXkgY2hvb3NlIHRvIGFsbG9jYXRlIG5vdGhpbmcKb2YgYSBidWZmZXIgb2YgNGsgaWYgcmVxdWlyZWQgZm9yIHRlbXBvcmFyeSBwdXJwb3NlcyApLCBpdCBnZW5lcmF0ZXMgCnZlcnkgZWZmaWNpZW50IGNvZGUgKCBhIGZldyBjeWNsZXMgICkgd2hlbiBjb21wYXJlZCB0byBhbHRlcm5hdGl2ZXMgCmxpa2UgbWFsbG9jLgoKYXV0b21hdGljczogVGhlc2UgYXJlIGxvY2FsIHZhcmlhYmxlcyBvbiB0aGUgc3RhY2ssCmkuZSB0aGV5IGFyZW4ndCBpbiByZWdpc3RlcnMgJiB0aGV5IGFyZW4ndCBzdGF0aWMuCgpiYWNrLWNoYWluOgpUaGlzIGlzIGEgcG9pbnRlciB0byB0aGUgc3RhY2sgcG9pbnRlciBiZWZvcmUgZW50ZXJpbmcgYQpmcmFtZWQgZnVuY3Rpb25zICggc2VlIGZyYW1lbGVzcyBmdW5jdGlvbiApIHByb2xvZ3VlIGdvdCBieSAKZGVyZWZlcmVuY2luZyB0aGUgYWRkcmVzcyBvZiB0aGUgY3VycmVudCBzdGFjayBwb2ludGVyLAogaS5lLiBnb3QgYnkgYWNjZXNzaW5nIHRoZSAzMiBiaXQgdmFsdWUgYXQgdGhlIHN0YWNrIHBvaW50ZXJzCmN1cnJlbnQgbG9jYXRpb24uCgpiYXNlLXBvaW50ZXI6ClRoaXMgaXMgYSBwb2ludGVyIHRvIHRoZSBiYWNrIG9mIHRoZSBsaXRlcmFsIHBvb2wgd2hpY2gKaXMgYW4gYXJlYSBqdXN0IGJlaGluZCBlYWNoIHByb2NlZHVyZSB1c2VkIHRvIHN0b3JlIGNvbnN0YW50cwppbiBlYWNoIGZ1bmN0aW9uLgoKY2FsbC1jbG9iYmVyZWQ6IFRoZSBjYWxsZXIgcHJvYmFibHkgbmVlZHMgdG8gc2F2ZSB0aGVzZSByZWdpc3RlcnMgaWYgdGhlcmUgCmlzIHNvbWV0aGluZyBvZiB2YWx1ZSBpbiB0aGVtLCBvbiB0aGUgc3RhY2sgb3IgZWxzZXdoZXJlIGJlZm9yZSBtYWtpbmcgYSAKY2FsbCB0byBhbm90aGVyIHByb2NlZHVyZSBzbyB0aGF0IGl0IGNhbiByZXN0b3JlIGl0IGxhdGVyLgoKZXBpbG9ndWU6ClRoZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIgdG8gcmV0dXJuIHRvIHRoZSBjYWxsZXIuCgpmcmFtZWxlc3MtZnVuY3Rpb24KQSBmcmFtZWxlc3MgZnVuY3Rpb24gaW4gTGludXggZm9yIHMzOTAgJiB6L0FyY2hpdGVjdHVyZSBpcyBvbmUgd2hpY2ggZG9lc24ndCAKbmVlZCBtb3JlIHRoYW4gdGhlIHJlZ2lzdGVyIHNhdmUgYXJlYSAoIDk2IGJ5dGVzIG9uIHMvMzkwLCAxNjAgb24gei9BcmNoaXRlY3R1cmUgKQpnaXZlbiB0byBpdCBieSB0aGUgY2FsbGVyLgpBIGZyYW1lbGVzcyBmdW5jdGlvbiBuZXZlcjoKMSkgU2V0cyB1cCBhIGJhY2sgY2hhaW4uCjIpIENhbGxzIGFsbG9jYS4KMykgQ2FsbHMgb3RoZXIgbm9ybWFsIGZ1bmN0aW9ucwo0KSBIYXMgYXV0b21hdGljcy4KCkdPVC1wb2ludGVyOgpUaGlzIGlzIGEgcG9pbnRlciB0byB0aGUgZ2xvYmFsLW9mZnNldC10YWJsZSBpbiBFTEYKKCBFeGVjdXRhYmxlIExpbmthYmxlIEZvcm1hdCwgTGludXgnZXMgbW9zdCBjb21tb24gZXhlY3V0YWJsZSBmb3JtYXQgKSwKYWxsIGdsb2JhbHMgJiBzaGFyZWQgbGlicmFyeSBvYmplY3RzIGFyZSBmb3VuZCB1c2luZyB0aGlzIHBvaW50ZXIuCgpsYXp5LWJpbmRpbmcKRUxGIHNoYXJlZCBsaWJyYXJpZXMgYXJlIHR5cGljYWxseSBvbmx5IGxvYWRlZCB3aGVuIHJvdXRpbmVzIGluIHRoZSBzaGFyZWQKbGlicmFyeSBhcmUgYWN0dWFsbHkgZmlyc3QgY2FsbGVkIGF0IHJ1bnRpbWUuIFRoaXMgaXMgbGF6eSBiaW5kaW5nLgoKcHJvY2VkdXJlLWxpbmthZ2UtdGFibGUKVGhpcyBpcyBhIHRhYmxlIGZvdW5kIGZyb20gdGhlIEdPVCB3aGljaCBjb250YWlucyBwb2ludGVycyB0byByb3V0aW5lcwppbiBvdGhlciBzaGFyZWQgbGlicmFyaWVzIHdoaWNoIGNhbid0IGJlIGNhbGxlZCB0byBieSBlYXNpZXIgbWVhbnMuCgpwcm9sb2d1ZToKVGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciB0byBzZXQgdXAgdGhlIHN0YWNrIGZyYW1lLgoKb3V0Z29pbmctYXJnczoKVGhpcyBpcyBleHRyYSBhcmVhIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaWYgdGhlCnBhcmFtZXRlcnMgZm9yIHRoZSBjYWxsZWUncyBjYW5ub3QgYWxsIGJlIHB1dCBpbiByZWdpc3RlcnMsIHRoZSBzYW1lCmFyZWEgY2FuIGJlIHJldXNlZCBieSBlYWNoIGZ1bmN0aW9uIHRoZSBjYWxsZXIgY2FsbHMuCgpyb3V0aW5lLWRlc2NyaXB0b3I6CkEgQ09GRiAgZXhlY3V0YWJsZSBmb3JtYXQgYmFzZWQgY29uY2VwdCBvZiBhIHByb2NlZHVyZSByZWZlcmVuY2UgCmFjdHVhbGx5IGJlaW5nIDggYnl0ZXMgb3IgbW9yZSBhcyBvcHBvc2VkIHRvIGEgc2ltcGxlIHBvaW50ZXIgdG8gdGhlIHJvdXRpbmUuClRoaXMgaXMgdHlwaWNhbGx5IGRlZmluZWQgYXMgZm9sbG93cwpSb3V0aW5lIERlc2NyaXB0b3Igb2Zmc2V0IDA9UG9pbnRlciB0byBGdW5jdGlvbgpSb3V0aW5lIERlc2NyaXB0b3Igb2Zmc2V0IDQ9UG9pbnRlciB0byBUYWJsZSBvZiBDb250ZW50cwpUaGUgdGFibGUgb2YgY29udGVudHMvVE9DIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byBhIEdPVCBwb2ludGVyLgomIGl0IG1lYW5zIHRoYXQgc2hhcmVkIGxpYnJhcmllcyBldGMuIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBzZXZlcmFsCmVudmlyb25tZW50cyBlYWNoIHdpdGggdGhlaXIgb3duIFRPQy4KCiAKc3RhdGljLWNoYWluOiBUaGlzIGlzIHVzZWQgaW4gbmVzdGVkIGZ1bmN0aW9ucyBhIGNvbmNlcHQgYWRvcHRlZCBmcm9tIHBhc2NhbCAKYnkgZ2NjIG5vdCB1c2VkIGluIGFuc2kgQyBvciBDKysgKCBhbHRob3VnaCBxdWl0ZSB1c2VmdWwgKSwgYmFzaWNhbGx5IGl0CmlzIGEgcG9pbnRlciB1c2VkIHRvIHJlZmVyZW5jZSBsb2NhbCB2YXJpYWJsZXMgb2YgZW5jbG9zaW5nIGZ1bmN0aW9ucy4KWW91IG1pZ2h0IGNvbWUgYWNyb3NzIHRoaXMgc3R1ZmYgb25jZSBvciB0d2ljZSBpbiB5b3VyIGxpZmV0aW1lLgoKZS5nLgpUaGUgZnVuY3Rpb24gYmVsb3cgc2hvdWxkIHJldHVybiAxMSB0aG91Z2ggZ2NjIG1heSBnZXQgdXBzZXQgJiB0b3NzIHdhcm5pbmdzIAphYm91dCB1bnVzZWQgdmFyaWFibGVzLgppbnQgRnVuY3Rpb25BKGludCBhKQp7CglpbnQgYjsKCUZ1bmN0aW9uQyhpbnQgYykKCXsKCQliPWMrMTsKCX0KCUZ1bmN0aW9uQygxMCk7CglyZXR1cm4oYik7Cn0KCgpzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIFJlZ2lzdGVyIHVzYWdlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KcjAgICAgICAgdXNlZCBieSBzeXNjYWxscy9hc3NlbWJseSAgICAgICAgICAgICAgICAgIGNhbGwtY2xvYmJlcmVkCnIxCSB1c2VkIGJ5IHN5c2NhbGxzL2Fzc2VtYmx5ICAgICAgICAgICAgICAgICAgY2FsbC1jbG9iYmVyZWQKcjIgICAgICAgYXJndW1lbnQgMCAvIHJldHVybiB2YWx1ZSAwICAgICAgICAgICAgICAgIGNhbGwtY2xvYmJlcmVkCnIzICAgICAgIGFyZ3VtZW50IDEgLyByZXR1cm4gdmFsdWUgMSAoaWYgbG9uZyBsb25nKSBjYWxsLWNsb2JiZXJlZApyNCAgICAgICBhcmd1bWVudCAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbC1jbG9iYmVyZWQKcjUgICAgICAgYXJndW1lbnQgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGwtY2xvYmJlcmVkCnI2CSBhcmd1bWVudCA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWQKcjcgICAgICAgcG9pbnRlci10byBhcmd1bWVudHMgNSB0byAuLi4gICAgICAgICAgICAgIHNhdmVkICAgICAgCnI4ICAgICAgIHRoaXMgJiB0aGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZApyOSAgICAgICB0aGlzICYgdGhhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWQKcjEwICAgICAgc3RhdGljLWNoYWluICggaWYgbmVzdGVkIGZ1bmN0aW9uICkgICAgICAgIHNhdmVkCnIxMSAgICAgIGZyYW1lLXBvaW50ZXIgKCBpZiBmdW5jdGlvbiB1c2VkIGFsbG9jYSApICBzYXZlZApyMTIgICAgICBnb3QtcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWQKcjEzICAgICAgYmFzZS1wb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkCnIxNCAgICAgIHJldHVybi1hZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZApyMTUgICAgICBzdGFjay1wb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWQKCmYwICAgICAgIGFyZ3VtZW50IDAgLyByZXR1cm4gdmFsdWUgKCBmbG9hdC9kb3VibGUgKSBjYWxsLWNsb2JiZXJlZApmMiAgICAgICBhcmd1bWVudCAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbC1jbG9iYmVyZWQKZjQgICAgICAgei9BcmNoaXRlY3R1cmUgYXJndW1lbnQgMiAgICAgICAgICAgICAgICAgIHNhdmVkCmY2ICAgICAgIHovQXJjaGl0ZWN0dXJlIGFyZ3VtZW50IDMgICAgICAgICAgICAgICAgICBzYXZlZApUaGUgcmVtYWluaW5nIGZsb2F0aW5nIHBvaW50cwpmMSxmMyxmNSBmNy1mMTUgYXJlIGNhbGwtY2xvYmJlcmVkLgoKTm90ZXM6Ci0tLS0tLQoxKSBUaGUgb25seSByZXF1aXJlbWVudCBpcyB0aGF0IHJlZ2lzdGVycyB3aGljaCBhcmUgdXNlZApieSB0aGUgY2FsbGVlIGFyZSBzYXZlZCwgZS5nLiB0aGUgY29tcGlsZXIgaXMgcGVyZmVjdGx5CmNhcGlibGUgb2YgdXNpbmcgcjExIGZvciBwdXJwb3NlcyBvdGhlciB0aGFuIGEgZnJhbWUgYQpmcmFtZSBwb2ludGVyIGlmIGEgZnJhbWUgcG9pbnRlciBpcyBub3QgbmVlZGVkLgoyKSBJbiBmdW5jdGlvbnMgd2l0aCB2YXJpYWJsZSBhcmd1bWVudHMgZS5nLiBwcmludGYgdGhlIGNhbGxpbmcgcHJvY2VkdXJlIAppcyBpZGVudGljYWwgdG8gb25lIHdpdGhvdXQgdmFyaWFibGUgYXJndW1lbnRzICYgdGhlIHNhbWUgbnVtYmVyIG9mIApwYXJhbWV0ZXJzLiBIb3dldmVyLCB0aGUgcHJvbG9ndWUgb2YgdGhpcyBmdW5jdGlvbiBpcyBzb21ld2hhdCBtb3JlCmhhaXJ5IG93aW5nIHRvIGl0IGhhdmluZyB0byBtb3ZlIHRoZXNlIHBhcmFtZXRlcnMgdG8gdGhlIHN0YWNrIHRvCmdldCB2YV9zdGFydCwgdmFfYXJnICYgdmFfZW5kIHRvIHdvcmsuCjMpIEFjY2VzcyByZWdpc3RlcnMgYXJlIGN1cnJlbnRseSB1bnVzZWQgYnkgZ2NjIGJ1dCBhcmUgdXNlZCBpbgp0aGUga2VybmVsLiBQb3NzaWJpbGl0aWVzIGV4aXN0IHRvIHVzZSB0aGVtIGF0IHRoZSBtb21lbnQgZm9yCnRlbXBvcmFyeSBzdG9yYWdlIGJ1dCBpdCBpc24ndCByZWNvbW1lbmRlZC4KNCkgT25seSA0IG9mIHRoZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgYXJlIHVzZWQgZm9yCnBhcmFtZXRlciBwYXNzaW5nIGFzIG9sZGVyIG1hY2hpbmVzIHN1Y2ggYXMgRzMgb25seSBoYXZlIG9ubHkgNAomIGl0IGtlZXBzIHRoZSBzdGFjayBmcmFtZSBjb21wYXRpYmxlIHdpdGggb3RoZXIgY29tcGlsZXJzLgpIb3dldmVyIHdpdGggSUVFRSBmbG9hdGluZyBwb2ludCBlbXVsYXRpb24gdW5kZXIgbGludXggb24gdGhlCm9sZGVyIG1hY2hpbmVzIHlvdSBhcmUgZnJlZSB0byB1c2UgdGhlIG90aGVyIDEyLgo1KSBBIGxvbmcgbG9uZyBvciBkb3VibGUgcGFyYW1ldGVyIGNhbm5vdCBiZSBoYXZlIHRoZSAKZmlyc3QgNCBieXRlcyBpbiBhIHJlZ2lzdGVyICYgdGhlIHNlY29uZCBmb3VyIGJ5dGVzIGluIHRoZSAKb3V0Z29pbmcgYXJncyBhcmVhLiBJdCBtdXN0IGJlIHB1cmVseSBpbiB0aGUgb3V0Z29pbmcgYXJncwphcmVhIGlmIGNyb3NzaW5nIHRoaXMgYm91bmRhcnkuCjYpIEZsb2F0aW5nIHBvaW50IHBhcmFtZXRlcnMgYXJlIG1peGVkIHdpdGggb3V0Z29pbmcgYXJncwpvbiB0aGUgb3V0Z29pbmcgYXJncyBhcmVhIGluIHRoZSBvcmRlciB0aGUgYXJlIHBhc3NlZCBpbiBhcyBwYXJhbWV0ZXJzLgo3KSBGbG9hdGluZyBwb2ludCBhcmd1bWVudHMgMiAmIDMgYXJlIHNhdmVkIGluIHRoZSBvdXRnb2luZyBhcmdzIGFyZWEgZm9yIAp6L0FyY2hpdGVjdHVyZQoKClN0YWNrIEZyYW1lIExheW91dAotLS0tLS0tLS0tLS0tLS0tLS0Kcy8zOTAgICAgIHovQXJjaGl0ZWN0dXJlCjAgICAgICAgICAwICAgICAgICAgICAgIGJhY2sgY2hhaW4gKCBhIDAgaGVyZSBzaWduaWZpZXMgZW5kIG9mIGJhY2sgY2hhaW4gKQo0ICAgICAgICAgOCAgICAgICAgICAgICBlb3MgKCBlbmQgb2Ygc3RhY2ssIG5vdCB1c2VkIG9uIExpbnV4IGZvciBTMzkwIHVzZWQgaW4gb3RoZXIgbGlua2FnZSBmb3JtYXRzICkKOCAgICAgICAgIDE2ICAgICAgICAgICAgZ2x1ZSB1c2VkIGluIG90aGVyIHMvMzkwIGxpbmthZ2UgZm9ybWF0cyBmb3Igc2F2ZWQgcm91dGluZSBkZXNjcmlwdG9ycyBldGMuCjEyICAgICAgICAyNCAgICAgICAgICAgIGdsdWUgdXNlZCBpbiBvdGhlciBzLzM5MCBsaW5rYWdlIGZvcm1hdHMgZm9yIHNhdmVkIHJvdXRpbmUgZGVzY3JpcHRvcnMgZXRjLgoxNiAgICAgICAgMzIgICAgICAgICAgICBzY3JhdGNoIGFyZWEKMjAgICAgICAgIDQwICAgICAgICAgICAgc2NyYXRjaCBhcmVhCjI0ICAgICAgICA0OCAgICAgICAgICAgIHNhdmVkIHI2IG9mIGNhbGxlciBmdW5jdGlvbgoyOCAgICAgICAgNTYgICAgICAgICAgICBzYXZlZCByNyBvZiBjYWxsZXIgZnVuY3Rpb24KMzIgICAgICAgIDY0ICAgICAgICAgICAgc2F2ZWQgcjggb2YgY2FsbGVyIGZ1bmN0aW9uCjM2ICAgICAgICA3MiAgICAgICAgICAgIHNhdmVkIHI5IG9mIGNhbGxlciBmdW5jdGlvbgo0MCAgICAgICAgODAgICAgICAgICAgICBzYXZlZCByMTAgb2YgY2FsbGVyIGZ1bmN0aW9uCjQ0ICAgICAgICA4OCAgICAgICAgICAgIHNhdmVkIHIxMSBvZiBjYWxsZXIgZnVuY3Rpb24KNDggICAgICAgIDk2ICAgICAgICAgICAgc2F2ZWQgcjEyIG9mIGNhbGxlciBmdW5jdGlvbgo1MiAgICAgICAgMTA0ICAgICAgICAgICBzYXZlZCByMTMgb2YgY2FsbGVyIGZ1bmN0aW9uCjU2ICAgICAgICAxMTIgICAgICAgICAgIHNhdmVkIHIxNCBvZiBjYWxsZXIgZnVuY3Rpb24KNjAgICAgICAgIDEyMCAgICAgICAgICAgc2F2ZWQgcjE1IG9mIGNhbGxlciBmdW5jdGlvbgo2NCAgICAgICAgMTI4ICAgICAgICAgICBzYXZlZCBmNCBvZiBjYWxsZXIgZnVuY3Rpb24KNzIgICAgICAgIDEzMiAgICAgICAgICAgc2F2ZWQgZjYgb2YgY2FsbGVyIGZ1bmN0aW9uCjgwICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZAo5NiAgICAgICAgMTYwICAgICAgICAgICBvdXRnb2luZyBhcmdzIHBhc3NlZCBmcm9tIGNhbGxlciB0byBjYWxsZWUKOTYreCAgICAgIDE2MCt4ICAgICAgICAgcG9zc2libGUgc3RhY2sgYWxpZ25tZW50ICggOCBieXRlcyBkZXNpcmFibGUgKQo5Nit4K3kgICAgMTYwK3greSAgICAgICBhbGxvY2Egc3BhY2Ugb2YgY2FsbGVyICggaWYgdXNlZCApCjk2K3greSt6ICAxNjAreCt5K3ogICAgIGF1dG9tYXRpY3Mgb2YgY2FsbGVyICggaWYgdXNlZCApCjAgICAgICAgICAgICAgICAgICAgICAgIGJhY2stY2hhaW4KCkEgc2FtcGxlIHByb2dyYW0gd2l0aCBjb21tZW50cy4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKQ29tbWVudHMgb24gdGhlIGZ1bmN0aW9uIHRlc3QKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KMSkgSXQgZGlkbid0IG5lZWQgdG8gc2V0IHVwIGEgcG9pbnRlciB0byB0aGUgY29uc3RhbnQgcG9vbCBncHIxMyBhcyBpdCBpc24ndCB1c2VkCiggOi0oICkuCjIpIFRoaXMgaXMgYSBmcmFtZWxlc3MgZnVuY3Rpb24gJiBubyBzdGFjayBpcyBib3VnaHQuCjMpIFRoZSBjb21waWxlciB3YXMgY2xldmVyIGVub3VnaCB0byByZWNvZ25pc2UgdGhhdCBpdCBjb3VsZCByZXR1cm4gdGhlCnZhbHVlIGluIHIyIGFzIHdlbGwgYXMgdXNlIGl0IGZvciB0aGUgcGFzc2VkIGluIHBhcmFtZXRlciAoIDotKSApLgo0KSBUaGUgYmFzciAoIGJyYW5jaCByZWxhdGl2ZSAmIHNhdmUgKSB0cmljayB3b3JrcyBhcyBmb2xsb3dzIHRoZSBpbnN0cnVjdGlvbiAKaGFzIGEgc3BlY2lhbCBjYXNlIHdpdGggcjAscjAgd2l0aCBzb21lIGluc3RydWN0aW9uIG9wZXJhbmRzIGlzIHVuZGVyc3Rvb2QgYXMgCnRoZSBsaXRlcmFsIHZhbHVlIDAsIHNvbWUgcmlzYyBhcmNoaXRlY3R1cmVzIGFsc28gZG8gdGhpcyApLiBTbyBub3cKd2UgYXJlIGJyYW5jaGluZyB0byB0aGUgbmV4dCBhZGRyZXNzICYgdGhlIGFkZHJlc3MgbmV3IHByb2dyYW0gY291bnRlciBpcwppbiByMTMsc28gbm93IHdlIHN1YnRyYWN0IHRoZSBzaXplIG9mIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZSB3ZSBoYXZlIGV4ZWN1dGVkCisgdGhlIHNpemUgb2YgdGhlIGxpdGVyYWwgcG9vbCB0byBnZXQgdG8gdGhlIHRvcCBvZiB0aGUgbGl0ZXJhbCBwb29sCjAwNDAwMzdjIGludCB0ZXN0KGludCBiKQp7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRnVuY3Rpb24gcHJvbG9ndWUgYmVsb3cKICA0MDAzN2M6CTkwIGRlIGYwIDM0IAlzdG0JJXIxMywlcjE0LDUyKCVyMTUpICMgU2F2ZSByZWdpc3RlcnMgcjEzICYgcjE0CiAgNDAwMzgwOgkwZCBkMCAgICAgICAJYmFzcgklcjEzLCVyMCAgICAgICAgICAgIyBTZXQgdXAgcG9pbnRlciB0byBjb25zdGFudCBwb29sIHVzaW5nCiAgNDAwMzgyOglhNyBkYSBmZiBmYSAJYWhpCSVyMTMsLTYgICAgICAgICAgICAjIGJhc3IgdHJpY2sKCXJldHVybig1K2IpOwoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBIdWdlIG1haW4gcHJvZ3JhbQogIDQwMDM4NjoJYTcgMmEgMDAgMDUgCWFoaQklcjIsNSAgICAgICAgICAgICAgIyBhZGQgNSB0byByMgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZ1bmN0aW9uIGVwaWxvZ3VlIGJlbG93IAogIDQwMDM4YToJOTggZGUgZjAgMzQgCWxtCSVyMTMsJXIxNCw1MiglcjE1KSAjIHJlc3RvcmUgcmVnaXN0ZXJzIHIxMyAmIDE0CiAgNDAwMzhlOgkwNyBmZSAgICAgICAJYnIJJXIxNCAgICAgICAgICAgICAgICMgcmV0dXJuCn0KCkNvbW1lbnRzIG9uIHRoZSBmdW5jdGlvbiBtYWluCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCjEpIFRoZSBjb21waWxlciBkaWQgdGhpcyBmdW5jdGlvbiBvcHRpbWFsbHkgKCA4LSkgKQoKTGl0ZXJhbCBwb29sIGZvciBtYWluLgo0MDAzOTA6CWZmIGZmIGZmIGVjIAkubG9uZyAweGZmZmZmZmVjCm1haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKQp7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRnVuY3Rpb24gcHJvbG9ndWUgYmVsb3cKICA0MDAzOTQ6CTkwIGJmIGYwIDJjIAlzdG0JJXIxMSwlcjE1LDQ0KCVyMTUpICMgU2F2ZSBuZWNlc3NhcnkgcmVnaXN0ZXJzCiAgNDAwMzk4OgkxOCAwZiAgICAgICAJbHIJJXIwLCVyMTUgICAgICAgICAgICMgY29weSBzdGFjayBwb2ludGVyIHRvIHIwCiAgNDAwMzlhOglhNyBmYSBmZiBhMCAJYWhpCSVyMTUsLTk2ICAgICAgICAgICAjIE1ha2UgYXJlYSBmb3IgY2FsbGVlIHNhdmluZyAKICA0MDAzOWU6CTBkIGQwICAgICAgIAliYXNyCSVyMTMsJXIwICAgICAgICAgICAjIFNldCB1cCByMTMgdG8gcG9pbnQgdG8KICA0MDAzYTA6CWE3IGRhIGZmIGYwIAlhaGkJJXIxMywtMTYgICAgICAgICAgICMgbGl0ZXJhbCBwb29sCiAgNDAwM2E0Ogk1MCAwMCBmMCAwMCAJc3QJJXIwLDAoJXIxNSkgICAgICAgICMgU2F2ZSBiYWNrY2hhaW4KCglyZXR1cm4odGVzdCg1KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1haW4gUHJvZ3JhbSBCZWxvdwogIDQwMDNhODoJNTggZTAgZDAgMDAgCWwJJXIxNCwwKCVyMTMpICAgICAgICMgbG9hZCByZWxhdGl2ZSBhZGRyZXNzIG9mIHRlc3QgZnJvbQoJCQkJCQkgICAgICAgICAgICMgbGl0ZXJhbCBwb29sCiAgNDAwM2FjOglhNyAyOCAwMCAwNSAJbGhpCSVyMiw1ICAgICAgICAgICAgICAjIFNldCBmaXJzdCBwYXJhbWV0ZXIgdG8gNQogIDQwMDNiMDoJNGQgZWUgZDAgMDAgCWJhcwklcjE0LDAoJXIxNCwlcjEzKSAgIyBqdW1wIHRvIHRlc3Qgc2V0dGluZyByMTQgYXMgcmV0dXJuCgkJCQkJCQkgICAjIGFkZHJlc3MgdXNpbmcgYnJhbmNoICYgc2F2ZSBpbnN0cnVjdGlvbi4KCgkJCQkJCQkgICAjIEZ1bmN0aW9uIEVwaWxvZ3VlIGJlbG93CiAgNDAwM2I0Ogk5OCBiZiBmMCA4YyAJbG0JJXIxMSwlcjE1LDE0MCglcjE1KSMgUmVzdG9yZSBuZWNlc3NhcnkgcmVnaXN0ZXJzLgogIDQwMDNiODoJMDcgZmUgICAgICAgCWJyCSVyMTQgICAgICAgICAgICAgICAjIHJldHVybiB0byBkbyBwcm9ncmFtIGV4aXQgCn0KCgpDb21waWxlciB1cGRhdGVzCi0tLS0tLS0tLS0tLS0tLS0KCm1haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKQp7CiAgNDAwNGZjOgk5MCA3ZiBmMCAxYyAgICAgICAJc3RtCSVyNywlcjE1LDI4KCVyMTUpCiAgNDAwNTAwOglhNyBkNSAwMCAwNCAgICAgICAJYnJhcwklcjEzLDQwMDUwOCA8bWFpbisweGM+CiAgNDAwNTA0OgkwMCA0MCAwNCBmNCAgICAgICAJLmxvbmcJMHgwMDQwMDRmNCAKICAjIGNvbXBpbGVyIG5vdyBwdXRzIGNvbnN0YW50IHBvb2wgaW4gY29kZSB0byBzbyBpdCBzYXZlcyBhbiBpbnN0cnVjdGlvbiAKICA0MDA1MDg6CTE4IDBmICAgICAgICAgICAgIAlscgklcjAsJXIxNQogIDQwMDUwYToJYTcgZmEgZmYgYTAgICAgICAgCWFoaQklcjE1LC05NgogIDQwMDUwZToJNTAgMDAgZjAgMDAgICAgICAgCXN0CSVyMCwwKCVyMTUpCglyZXR1cm4odGVzdCg1KSk7CiAgNDAwNTEyOgk1OCAxMCBkMCAwMCAgICAgICAJbAklcjEsMCglcjEzKQogIDQwMDUxNjoJYTcgMjggMDAgMDUgICAgICAgCWxoaQklcjIsNQogIDQwMDUxYToJMGQgZTEgICAgICAgICAgICAgCWJhc3IJJXIxNCwlcjEKICAjIGNvbXBpbGVyIGFkZHMgMSBleHRyYSBpbnN0cnVjdGlvbiB0byBlcGlsb2d1ZSB0aGlzIGlzIGRvbmUgdG8KICAjIGF2b2lkIHByb2Nlc3NvciBwaXBlbGluZSBzdGFsbHMgb3dpbmcgdG8gZGF0YSBkZXBlbmRlbmNpZXMgb24gZzUgJgogICMgYWJvdmUgYXMgcmVnaXN0ZXIgMTQgaW4gdGhlIG9sZCBjb2RlIHdhcyBuZWVkZWQgZGlyZWN0bHkgYWZ0ZXIgYmVpbmcgbG9hZGVkIAogICMgYnkgdGhlIGxtCSVyMTEsJXIxNSwxNDAoJXIxNSkgZm9yIHRoZSBiciAlMTQuCiAgNDAwNTFjOgk1OCA0MCBmMCA5OCAgICAgICAJbAklcjQsMTUyKCVyMTUpCiAgNDAwNTIwOgk5OCA3ZiBmMCA3YyAgICAgICAJbG0JJXI3LCVyMTUsMTI0KCVyMTUpCiAgNDAwNTI0OgkwNyBmNCAgICAgICAgICAgICAJYnIJJXI0Cn0KCgpIYXJ0bXV0ICggb3VyIGNvbXBpbGVyIGRldmVsb3BlciApIGFsc28gaGFzIGJlZW4gdGhyZWF0ZW5pbmcgdG8gdGFrZSBvdXQgdGhlCnN0YWNrIGJhY2tjaGFpbiBpbiBvcHRpbWlzZWQgY29kZSBhcyB0aGlzIGFsc28gY2F1c2VzIHBpcGVsaW5lIHN0YWxscywgeW91CmhhdmUgYmVlbiB3YXJuZWQuCgo2NCBiaXQgei9BcmNoaXRlY3R1cmUgY29kZSBkaXNhc3NlbWJseQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKSWYgeW91IHVuZGVyc3RhbmQgdGhlIHN0dWZmIGFib3ZlIHlvdSdsbCB1bmRlcnN0YW5kIHRoZSBzdHVmZgpiZWxvdyB0b28gc28gSSdsbCBhdm9pZCByZXBlYXRpbmcgbXlzZWxmICYganVzdCBzYXkgdGhhdCAKc29tZSBvZiB0aGUgaW5zdHJ1Y3Rpb25zIGhhdmUgZydzIG9uIHRoZSBlbmQgb2YgdGhlbSB0byBpbmRpY2F0ZQp0aGV5IGFyZSA2NCBiaXQgJiB0aGUgc3RhY2sgb2Zmc2V0cyBhcmUgYSBiaWdnZXIsIAp0aGUgb25seSBvdGhlciBkaWZmZXJlbmNlIHlvdSdsbCBmaW5kIGJldHdlZW4gMzIgJiA2NCBiaXQgaXMgdGhhdAp3ZSBub3cgdXNlIGY0ICYgZjYgZm9yIGZsb2F0aW5nIHBvaW50IGFyZ3VtZW50cyBvbiA2NCBiaXQuCjAwMDAwMDAwODAwMDA1YjAgPHRlc3Q+OgppbnQgdGVzdChpbnQgYikKewoJcmV0dXJuKDUrYik7CiAgICA4MDAwMDViMDoJYTcgMmEgMDAgMDUgICAgICAgCWFoaQklcjIsNQogICAgODAwMDA1YjQ6CWI5IDE0IDAwIDIyICAgICAgIAlsZ2ZyCSVyMiwlcjIgIyBkb3duY2FzdCB0byBpbnRlZ2VyCiAgICA4MDAwMDViODoJMDcgZmUgICAgICAgICAgICAgCWJyCSVyMTQKICAgIDgwMDAwNWJhOgkwNyAwNyAgICAgICAgICAgICAJYmNyCTAsJXI3CgoKfQoKMDAwMDAwMDA4MDAwMDViYyA8bWFpbj46Cm1haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKQp7IAogICAgODAwMDA1YmM6CWViIGJmIGYwIDU4IDAwIDI0IAlzdG1nCSVyMTEsJXIxNSw4OCglcjE1KQogICAgODAwMDA1YzI6CWI5IDA0IDAwIDFmICAgICAgIAlsZ3IJJXIxLCVyMTUKICAgIDgwMDAwNWM2OglhNyBmYiBmZiA2MCAgICAgICAJYWdoaQklcjE1LC0xNjAKICAgIDgwMDAwNWNhOgllMyAxMCBmMCAwMCAwMCAyNCAJc3RnCSVyMSwwKCVyMTUpCglyZXR1cm4odGVzdCg1KSk7CiAgICA4MDAwMDVkMDoJYTcgMjkgMDAgMDUgICAgICAgCWxnaGkJJXIyLDUKICAgICMgYnJhc2wgYWxsb3dzIGp1bXBzID4gNjRrICYgaXMgb3ZlcmtpbGwgaGVyZSBicmFzIHdvdWxkIGRvIGZ1bmUKICAgIDgwMDAwNWQ0OgljMCBlNSBmZiBmZiBmZiBlZSAJYnJhc2wJJXIxNCw4MDAwMDViMCA8dGVzdD4gCiAgICA4MDAwMDVkYToJZTMgNDAgZjEgMTAgMDAgMDQgCWxnCSVyNCwyNzIoJXIxNSkKICAgIDgwMDAwNWUwOgllYiBiZiBmMCBmOCAwMCAwNCAJbG1nCSVyMTEsJXIxNSwyNDgoJXIxNSkKICAgIDgwMDAwNWU2OgkwNyBmNCAgICAgICAgICAgICAJYnIJJXI0Cn0KCgoKQ29tcGlsaW5nIHByb2dyYW1zIGZvciBkZWJ1Z2dpbmcgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWdkd2FyZi0yIG5vdyB3b3JrcyBpdCBzaG91bGQgYmUgY29uc2lkZXJlZCB0aGUgZGVmYXVsdCBkZWJ1Z2dpbmcKZm9ybWF0IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIGFzIGl0IGlzIG1vcmUgcmVsaWFibGUgZm9yIGRlYnVnZ2luZwpzaGFyZWQgbGlicmFyaWVzLCAgbm9ybWFsIC1nIGRlYnVnZ2luZyB3b3JrcyBtdWNoIGJldHRlciBub3cKVGhhbmtzIHRvIHRoZSBJQk0gamF2YSBjb21waWxlciBkZXZlbG9wZXJzIGJ1ZyByZXBvcnRzLiAKClRoaXMgaXMgdHlwaWNhbGx5IGRvbmUgYWRkaW5nL2FwcGVuZGluZyB0aGUgZmxhZ3MgLWcgb3IgLWdkd2FyZi0yIHRvIHRoZSAKQ0ZMQUdTICYgTERGTEFHUyB2YXJpYWJsZXMgTWFrZWZpbGUgb2YgdGhlIHByb2dyYW0gY29uY2VybmVkLgoKSWYgdXNpbmcgZ2RiICYgeW91IHdvdWxkIGxpa2UgYWNjdXJhdGUgZGlzcGxheXMgb2YgcmVnaXN0ZXJzICYKIHN0YWNrIHRyYWNlcyBjb21waWxlIHdpdGhvdXQgb3B0aW1pc2F0aW9uIGkuZSBtYWtlIHN1cmUKdGhhdCB0aGVyZSBpcyBubyAtTzIgb3Igc2ltaWxhciBvbiB0aGUgQ0ZMQUdTIGxpbmUgb2YgdGhlIE1ha2VmaWxlICYKdGhlIGVtaXR0ZWQgZ2NjIGNvbW1hbmRzLCBvYnZpb3VzbHkgdGhpcyB3aWxsIHByb2R1Y2Ugd29yc2UgY29kZSAKKCBub3QgYWR2aXNhYmxlIGZvciBzaGlwbWVudCApIGJ1dCBpdCBpcyBhbiAgYWlkIHRvIHRoZSBkZWJ1Z2dpbmcgcHJvY2Vzcy4KClRoaXMgYWlkcyBkZWJ1Z2dpbmcgYmVjYXVzZSB0aGUgY29tcGlsZXIgd2lsbCBjb3B5IHBhcmFtZXRlcnMgcGFzc2VkIGluCmluIHJlZ2lzdGVycyBvbnRvIHRoZSBzdGFjayBzbyBiYWNrdHJhY2luZyAmIGxvb2tpbmcgYXQgcGFzc2VkIGluCnBhcmFtZXRlcnMgd2lsbCB3b3JrLCBob3dldmVyIHNvbWUgbGFyZ2VyIHByb2dyYW1zIHdoaWNoIHVzZSBpbmxpbmUgZnVuY3Rpb25zCndpbGwgbm90IGNvbXBpbGUgd2l0aG91dCBvcHRpbWlzYXRpb24uCgpEZWJ1Z2dpbmcgd2l0aCBvcHRpbWlzYXRpb24gaGFzIHNpbmNlIG11Y2ggaW1wcm92ZWQgYWZ0ZXIgZml4aW5nCnNvbWUgYnVncywgcGxlYXNlIG1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIGdkYi01LjAgb3IgbGF0ZXIgZGV2ZWxvcGVkIAphZnRlciBOb3YnMjAwMC4KCkZpZ3VyaW5nIG91dCBnY2MgY29tcGlsZSBlcnJvcnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZiB5b3UgYXJlIGdldHRpbmcgYSBsb3Qgb2Ygc3ludGF4IGVycm9ycyBjb21waWxpbmcgYSBwcm9ncmFtICYgdGhlIHByb2JsZW0KaXNuJ3QgYmxhdGFudGx5IG9idmlvdXMgZnJvbSB0aGUgc291cmNlLgpJdCBvZnRlbiBoZWxwcyB0byBqdXN0IHByZXByb2Nlc3MgdGhlIGZpbGUsIHRoaXMgaXMgZG9uZSB3aXRoIHRoZSAtRQpvcHRpb24gaW4gZ2NjLgpXaGF0IHRoaXMgZG9lcyBpcyB0aGF0IGl0IHJ1bnMgdGhyb3VnaCB0aGUgdmVyeSBmaXJzdCBwaGFzZSBvZiBjb21waWxhdGlvbgooIGNvbXBpbGF0aW9uIGluIGdjYyBpcyBkb25lIGluIHNldmVyYWwgc3RhZ2VzICYgZ2NjIGNhbGxzIG1hbnkgcHJvZ3JhbXMgdG8KYWNoaWV2ZSBpdHMgZW5kIHJlc3VsdCApIHdpdGggdGhlIC1FIG9wdGlvbiBnY2MganVzdCBjYWxscyB0aGUgZ2NjIHByZXByb2Nlc3NvciAoY3BwKS4KVGhlIGMgcHJlcHJvY2Vzc29yIGRvZXMgdGhlIGZvbGxvd2luZywgaXQgam9pbnMgYWxsIHRoZSBmaWxlcyAjaW5jbHVkZWQgdG9nZXRoZXIKcmVjdXJzaXZlbHkgKCAjaW5jbHVkZSBmaWxlcyBjYW4gI2luY2x1ZGUgb3RoZXIgZmlsZXMgKSAmIGFsc28gdGhlIGMgZmlsZSB5b3Ugd2lzaCB0byBjb21waWxlLgpJdCBwdXRzIGEgZnVsbHkgcXVhbGlmaWVkIHBhdGggb2YgdGhlICNpbmNsdWRlZCBmaWxlcyBpbiBhIGNvbW1lbnQgJiBpdApkb2VzIG1hY3JvIGV4cGFuc2lvbi4KVGhpcyBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZyBiZWNhdXNlCjEpIFlvdSBjYW4gZG91YmxlIGNoZWNrIHdoZXRoZXIgdGhlIGZpbGVzIHlvdSBleHBlY3QgdG8gYmUgaW5jbHVkZWQgYXJlIHRoZSBvbmVzCnRoYXQgYXJlIGJlaW5nIGluY2x1ZGVkICggZS5nLiBkb3VibGUgY2hlY2sgdGhhdCB5b3UgYXJlbid0IGdvaW5nIHRvIHRoZSBpMzg2IGFzbSBkaXJlY3RvcnkgKS4KMikgQ2hlY2sgdGhhdCBtYWNybyBkZWZpbml0aW9ucyBhcmVuJ3QgY2xhc2hpbmcgd2l0aCB0eXBlZGVmcywKMykgQ2hlY2sgdGhhdCBkZWZpbml0aW9ucyBhcmVuJ3QgYmVpbmcgdXNlZCBiZWZvcmUgdGhleSBhcmUgYmVpbmcgaW5jbHVkZWQuCjQpIEhlbHBzIHB1dCB0aGUgbGluZSBlbWl0dGluZyB0aGUgZXJyb3IgdW5kZXIgdGhlIG1pY3Jvc2NvcGUgaWYgaXQgY29udGFpbnMgbWFjcm9zLgoKRm9yIGNvbnZlbmllbmNlIHRoZSBMaW51eCBrZXJuZWwncyBtYWtlZmlsZSB3aWxsIGRvIHByZXByb2Nlc3NpbmcgYXV0b21hdGljYWxseSBmb3IgeW91CmJ5IHN1ZmZpeGluZyB0aGUgZmlsZSB5b3Ugd2FudCBidWlsdCB3aXRoIC5pICggaW5zdGVhZCBvZiAubyApCgplLmcuCmZyb20gdGhlIGxpbnV4IGRpcmVjdG9yeSB0eXBlCm1ha2UgYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuaQp0aGlzIHdpbGwgYnVpbGQKCnMzOTAtZ2NjIC1EX19LRVJORUxfXyAtSS9ob21lMS9iYXJyb3cvbGludXgvaW5jbHVkZSAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlcgotZm5vLXN0cmljdC1hbGlhc2luZyAtRF9fU01QX18gLXBpcGUgLWZuby1zdHJlbmd0aC1yZWR1Y2UgICAtRSBhcmNoL3MzOTAva2VybmVsL3NpZ25hbC5jCj4gYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuaSAgCgpOb3cgbG9vayBhdCBzaWduYWwuaSB5b3Ugc2hvdWxkIHNlZSBzb21ldGhpbmcgbGlrZS4KCgojIDEgIi9ob21lMS9iYXJyb3cvbGludXgvaW5jbHVkZS9hc20vdHlwZXMuaCIgMQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVtb2RlX3Q7CnR5cGVkZWYgX19zaWduZWRfXyBjaGFyIF9fczg7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3U4Owp0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgX19zMTY7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191MTY7CgpJZiBpbnN0ZWFkIHlvdSBhcmUgZ2V0dGluZyBlcnJvcnMgZnVydGhlciBkb3duIGUuZy4KdW5rbm93biBpbnN0cnVjdGlvbjoyNTE1ICJtb3ZlLmwiIG9yIGJldHRlciBzdGlsbCB1bmtub3duIGluc3RydWN0aW9uOjI1MTUgCiJGaXhtZSBub3QgaW1wbGVtZW50ZWQgeWV0LCBjYWxsIE1hcnRpbiIgeW91IGFyZSBwcm9iYWJseSBhcmUgYXR0ZW1wdGluZyB0byBjb21waWxlIHNvbWUgY29kZSAKbWVhbnQgZm9yIGFub3RoZXIgYXJjaGl0ZWN0dXJlIG9yIGNvZGUgdGhhdCBpcyBzaW1wbHkgbm90IGltcGxlbWVudGVkLCB3aXRoIGEgZml4bWUgc3RhdGVtZW50CnN0dWNrIGludG8gdGhlIGlubGluZSBhc3NlbWJseSBjb2RlIHNvIHRoYXQgdGhlIGF1dGhvciBvZiB0aGUgZmlsZSBub3cga25vd3MgaGUgaGFzIHdvcmsgdG8gZG8uClRvIGxvb2sgYXQgdGhlIGFzc2VtYmx5IGVtaXR0ZWQgYnkgZ2NjIGp1c3QgYmVmb3JlIGl0IGlzIGFib3V0IHRvIGNhbGwgZ2FzICggdGhlIGdudSBhc3NlbWJsZXIgKQp1c2UgdGhlIC1TIG9wdGlvbi4KQWdhaW4gZm9yIHlvdXIgY29udmVuaWVuY2UgdGhlIExpbnV4IGtlcm5lbCdzIE1ha2VmaWxlIHdpbGwgaG9sZCB5b3VyIGhhbmQgJgpkbyBhbGwgdGhpcyBkb25rZXkgd29yayBmb3IgeW91IGFsc28gYnkgYnVpbGRpbmcgdGhlIGZpbGUgd2l0aCB0aGUgLnMgc3VmZml4LgplLmcuCmZyb20gdGhlIExpbnV4IGRpcmVjdG9yeSB0eXBlIAptYWtlIGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLnMgCgpzMzkwLWdjYyAtRF9fS0VSTkVMX18gLUkvaG9tZTEvYmFycm93L2xpbnV4L2luY2x1ZGUgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIKLWZuby1zdHJpY3QtYWxpYXNpbmcgLURfX1NNUF9fIC1waXBlIC1mbm8tc3RyZW5ndGgtcmVkdWNlICAtUyBhcmNoL3MzOTAva2VybmVsL3NpZ25hbC5jIAotbyBhcmNoL3MzOTAva2VybmVsL3NpZ25hbC5zICAKCgpUaGlzIHdpbGwgb3V0cHV0IHNvbWV0aGluZyBsaWtlLCAoIHBsZWFzZSBub3RlIHRoZSBjb25zdGFudCBwb29sICYgdGhlIHVzZWZ1bCBjb21tZW50cwppbiB0aGUgcHJvbG9ndWUgdG8gZ2l2ZSB5b3UgYSBoYW5kIGF0IGludGVycHJldGluZyBpdCApLgoKLkxDNTQ6Cgkuc3RyaW5nCSJtaXNhbGlnbmVkIChfX3UxNiAqKSBpbiBfX3hjaGdcbiIKLkxDNTc6Cgkuc3RyaW5nCSJtaXNhbGlnbmVkIChfX3UzMiAqKSBpbiBfX3hjaGdcbiIKLkwkUEcxOiAjIFBvb2wgc3lzX3NpZ3N1c3BlbmQKLkxDMTkyOgoJLmxvbmcJLTI2MjQwMQouTEMxOTM6CgkubG9uZwktMQouTEMxOTQ6CgkubG9uZwlzY2hlZHVsZS0uTCRQRzEKLkxDMTk1OgoJLmxvbmcJZG9fc2lnbmFsLS5MJFBHMQoJLmFsaWduIDQKLmdsb2JsIHN5c19zaWdzdXNwZW5kCgkudHlwZQkgc3lzX3NpZ3N1c3BlbmQsQGZ1bmN0aW9uCnN5c19zaWdzdXNwZW5kOgojCWxlYWYgZnVuY3Rpb24gICAgICAgICAgIDAKIwlhdXRvbWF0aWNzICAgICAgICAgICAgICAxNgojCW91dGdvaW5nIGFyZ3MgICAgICAgICAgIDAKIwluZWVkIGZyYW1lIHBvaW50ZXIgICAgICAwCiMJY2FsbCBhbGxvY2EgICAgICAgICAgICAgMAojCWhhcyB2YXJhcmdzICAgICAgICAgICAgIDAKIwlpbmNvbWluZyBhcmdzIChzdGFjaykgICAwCiMJZnVuY3Rpb24gbGVuZ3RoICAgICAgICAgMTY4CglTVE0JOCwxNSwzMigxNSkKCUxSCTAsMTUKCUFISQkxNSwtMTEyCglCQVNSCTEzLDAKLkwkQ08xOglBSEkJMTMsLkwkUEcxLS5MJENPMQoJU1QJMCwwKDE1KQoJTFIgICAgOCwyCglOICAgICA1LC5MQzE5Mi0uTCRQRzEoMTMpIAoKQWRkaW5nIC1nIHRvIHRoZSBhYm92ZSBvdXRwdXQgbWFrZXMgdGhlIG91dHB1dCBldmVuIG1vcmUgdXNlZnVsCmUuZy4gdHlwaW5nCm1ha2UgQ0M6PSJzMzkwLWdjYyAtZyIga2VybmVsL3NjaGVkLnMKCndoaWNoIGNvbXBpbGVzLgpzMzkwLWdjYyAtZyAtRF9fS0VSTkVMX18gLUkvaG9tZS9iYXJyb3cvbGludXgtMi4zL2luY2x1ZGUgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZuby1zdHJpY3QtYWxpYXNpbmcgLXBpcGUgLWZuby1zdHJlbmd0aC1yZWR1Y2UgICAtUyBrZXJuZWwvc2NoZWQuYyAtbyBrZXJuZWwvc2NoZWQucyAKCmFsc28gb3V0cHV0cyBzdGFicyAoIGRlYnVnZ2VyICkgaW5mbywgZnJvbSB0aGlzIGluZm8geW91IGNhbiBmaW5kIG91dCB0aGUKb2Zmc2V0cyAmIHNpemVzIG9mIHZhcmlvdXMgZWxlbWVudHMgaW4gc3RydWN0dXJlcy4KZS5nLiB0aGUgc3RhYiBmb3IgdGhlIHN0cnVjdHVyZQpzdHJ1Y3QgcmxpbWl0IHsKCXVuc2lnbmVkIGxvbmcJcmxpbV9jdXI7Cgl1bnNpZ25lZCBsb25nCXJsaW1fbWF4Owp9Owppcwouc3RhYnMgInJsaW1pdDpUKDE1MSwyKT1zOHJsaW1fY3VyOigwLDUpLDAsMzI7cmxpbV9tYXg6KDAsNSksMzIsMzI7OyIsMTI4LDAsMCwwCmZyb20gdGhpcyBzdGFiIHlvdSBjYW4gc2VlIHRoYXQgCnJsaW1pdF9jdXIgc3RhcnRzIGF0IGJpdCBvZmZzZXQgMCAmIGlzIDMyIGJpdHMgaW4gc2l6ZQpybGltaXRfbWF4IHN0YXJ0cyBhdCBiaXQgb2Zmc2V0IDMyICYgaXMgMzIgYml0cyBpbiBzaXplLgoKCkRlYnVnZ2luZyBUb29sczoKPT09PT09PT09PT09PT09PQoKb2JqZHVtcAo9PT09PT09ClRoaXMgaXMgYSB0b29sIHdpdGggbWFueSBvcHRpb25zIHRoZSBtb3N0IHVzZWZ1bCBiZWluZyAoIGlmIGNvbXBpbGVkIHdpdGggLWcpLgpvYmpkdW1wIC0tc291cmNlIDx2aWN0aW0gcHJvZ3JhbSBvciBvYmplY3QgZmlsZT4gPiA8dmljdGltcyBkZWJ1ZyBsaXN0aW5nID4KCgpUaGUgd2hvbGUga2VybmVsIGNhbiBiZSBjb21waWxlZCBsaWtlIHRoaXMgKCBEb2luZyB0aGlzIHdpbGwgbWFrZSBhIDE3TUIga2VybmVsCiYgYSAyMDAgTUIgbGlzdGluZyApIGhvd2V2ZXIgeW91IGhhdmUgdG8gc3RyaXAgaXQgYmVmb3JlIGJ1aWxkaW5nIHRoZSBpbWFnZQp1c2luZyB0aGUgc3RyaXAgY29tbWFuZCB0byBtYWtlIGl0IGEgbW9yZSByZWFzb25hYmxlIHNpemUgdG8gYm9vdCBpdC4KCkEgc291cmNlL2Fzc2VtYmx5IG1peGVkIGR1bXAgb2YgdGhlIGtlcm5lbCBjYW4gYmUgZG9uZSB3aXRoIHRoZSBsaW5lCm9iamR1bXAgLS1zb3VyY2Ugdm1saW51eCA+IHZtbGludXgubHN0CkFsc28sIGlmIHRoZSBmaWxlIGlzbid0IGNvbXBpbGVkIC1nLCB0aGlzIHdpbGwgb3V0cHV0IGFzIG11Y2ggZGVidWdnaW5nIGluZm9ybWF0aW9uCmFzIGl0IGNhbiAoZS5nLiBmdW5jdGlvbiBuYW1lcykuIFRoaXMgaXMgdmVyeSBzbG93IGFzIGl0IHNwZW5kcyBsb3RzCm9mIHRpbWUgc2VhcmNoaW5nIGZvciBkZWJ1Z2dpbmcgaW5mby4gVGhlIGZvbGxvd2luZyBzZWxmIGV4cGxhbmF0b3J5IGxpbmUgc2hvdWxkIGJlIHVzZWQgCmluc3RlYWQgaWYgdGhlIGNvZGUgaXNuJ3QgY29tcGlsZWQgLWcsIGFzIGl0IGlzIG11Y2ggZmFzdGVyOgpvYmpkdW1wIC0tZGlzYXNzZW1ibGUtYWxsIC0tc3ltcyB2bWxpbnV4ID4gdm1saW51eC5sc3QgIAoKQXMgaGFyZCBkcml2ZSBzcGFjZSBpcyB2YWx1YmxlIG1vc3Qgb2YgdXMgdXNlIHRoZSBmb2xsb3dpbmcgYXBwcm9hY2guCjEpIExvb2sgYXQgdGhlIGVtaXR0ZWQgcHN3IG9uIHRoZSBjb25zb2xlIHRvIGZpbmQgdGhlIGNyYXNoIGFkZHJlc3MgaW4gdGhlIGtlcm5lbC4KMikgTG9vayBhdCB0aGUgZmlsZSBTeXN0ZW0ubWFwICggaW4gdGhlIGxpbnV4IGRpcmVjdG9yeSApIHByb2R1Y2VkIHdoZW4gYnVpbGRpbmcgCnRoZSBrZXJuZWwgdG8gZmluZCB0aGUgY2xvc2VzdCBhZGRyZXNzIGxlc3MgdGhhbiB0aGUgY3VycmVudCBQU1cgdG8gZmluZCB0aGUKb2ZmZW5kaW5nIGZ1bmN0aW9uLgozKSB1c2UgZ3JlcCBvciBzaW1pbGFyIHRvIHNlYXJjaCB0aGUgc291cmNlIHRyZWUgbG9va2luZyBmb3IgdGhlIHNvdXJjZSBmaWxlCiB3aXRoIHRoaXMgZnVuY3Rpb24gaWYgeW91IGRvbid0IGtub3cgd2hlcmUgaXQgaXMuCjQpIHJlYnVpbGQgdGhpcyBvYmplY3QgZmlsZSB3aXRoIC1nIG9uLCBhcyBhbiBleGFtcGxlIHN1cHBvc2UgdGhlIGZpbGUgd2FzCiggL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLm8gKSAKNSkgQXNzdW1pbmcgdGhlIGZpbGUgd2l0aCB0aGUgZXJyb25lb3VzIGZ1bmN0aW9uIGlzIHNpZ25hbC5jIE1vdmUgdG8gdGhlIGJhc2Ugb2YgdGhlIApMaW51eCBzb3VyY2UgdHJlZS4KNikgcm0gL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLm8KNykgbWFrZSAvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwubwo4KSB3YXRjaCB0aGUgZ2NjIGNvbW1hbmQgbGluZSBlbWl0dGVkCjkpIHR5cGUgaXQgaW4gYWdhaW4gb3IgYWx0ZXJuYXRpdmVseSBjdXQgJiBwYXN0ZSBpdCBvbiB0aGUgY29uc29sZSBhZGRpbmcgdGhlIC1nIG9wdGlvbi4KMTApIG9iamR1bXAgLS1zb3VyY2UgYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwubyA+IHNpZ25hbC5sc3QKVGhpcyB3aWxsIG91dHB1dCB0aGUgc291cmNlICYgdGhlIGFzc2VtYmx5IGludGVybWl4ZWQsIGFzIHRoZSBzbmlwcGV0IGJlbG93IHNob3dzClRoaXMgd2lsbCB1bmZvcnR1bmF0ZWx5IG91dHB1dCBhZGRyZXNzZXMgd2hpY2ggYXJlbid0IHRoZSBzYW1lCmFzIHRoZSBrZXJuZWwgb25lcyB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGFyb3VuZCB0aGUgbWVudGFsIGFyaXRobWV0aWMKYnkgcGxheWluZyB3aXRoIHRoZSAtLWFkanVzdC12bWEgcGFyYW1ldGVyIHRvIG9iamR1bXAuCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxwKQp7CiAgICAgIGEwOiAgICAgICAxOCAzNCAgICAgICAgICAgbHIgICAgICAlcjMsJXI0CiAgICAgIGEyOiAgICAgICBhNyAzYSAwMyBiYyAgICAgYWhpICAgICAlcjMsOTU2CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlKCIgICAgbGhpICAgMSwtMVxuIgogICAgICBhNjogICAgICAgYTcgMTggZmYgZmYgICAgIGxoaSAgICAgJXIxLC0xCiAgICAgIGFhOiAgICAgICAxZiAwMCAgICAgICAgICAgc2xyICAgICAlcjAsJXIwCiAgICAgIGFjOiAgICAgICBiYSAwMSAzMCAwMCAgICAgY3MgICAgICAlcjAsJXIxLDAoJXIzKQogICAgICBiMDogICAgICAgYTcgNDQgZmYgZmQgICAgIGptICAgICAgYWEgPHN5c19zaWdzdXNwZW5kKzB4MmU+CiAgICAgICAgc2F2ZXNldCA9IGN1cnJlbnQtPmJsb2NrZWQ7CiAgICAgIGI0OiAgICAgICBkMiAwNyBmMCA2OCAgICAgbXZjICAgICAxMDQoOCwlcjE1KSw5NzIoJXI0KQogICAgICBiODogICAgICAgNDMgY2MKICAgICAgICByZXR1cm4gKHNldC0+c2lnWzBdICYgbWFzaykgIT0gMDsKfSAKCjYpIElmIGRlYnVnZ2luZyB1bmRlciBWTSBnbyBkb3duIHRvIHRoYXQgc2VjdGlvbiBpbiB0aGUgZG9jdW1lbnQgZm9yIG1vcmUgaW5mby4KCgpJIG5vdyBoYXZlIGEgdG9vbCB3aGljaCB0YWtlcyB0aGUgcGFpbiBvdXQgb2YgLS1hZGp1c3Qtdm1hCiYgeW91IGFyZSBhYmxlIHRvIGRvIHNvbWV0aGluZyBsaWtlCm1ha2UgL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMubHN0CiYgaXQgYXV0b21hdGljYWxseSBnZW5lcmF0ZXMgdGhlIGNvcnJlY3RseSByZWxvY2F0ZWQgZW50cmllcyBmb3IKdGhlIHRleHQgc2VnbWVudCBpbiB0cmFwcy5sc3QuClRoaXMgdG9vbCBpcyBub3cgc3RhbmRhcmQgaW4gbGludXggZGlzdHJvJ3MgaW4gc2NyaXB0cy9tYWtlbHN0CgpzdHJhY2U6Ci0tLS0tLS0KUS4gV2hhdCBpcyBpdCA/CkEuIEl0IGlzIGEgdG9vbCBmb3IgaW50ZXJjZXB0aW5nIGNhbGxzIHRvIHRoZSBrZXJuZWwgJiBsb2dnaW5nIHRoZW0KdG8gYSBmaWxlICYgb24gdGhlIHNjcmVlbi4KClEuIFdoYXQgdXNlIGlzIGl0ID8KQS4gWW91IGNhbiB1c2VkIGl0IHRvIGZpbmQgb3V0IHdoYXQgZmlsZXMgYSBwYXJ0aWN1bGFyIHByb2dyYW0gb3BlbnMuCgoKCkV4YW1wbGUgMQotLS0tLS0tLS0KSWYgeW91IHdhbnRlZCB0byBrbm93IGRvZXMgcGluZyB3b3JrIGJ1dCBkaWRuJ3QgaGF2ZSB0aGUgc291cmNlIApzdHJhY2UgcGluZyAtYyAxIDEyNy4wLjAuMSAgCiYgdGhlbiBsb29rIGF0IHRoZSBtYW4gcGFnZXMgZm9yIGVhY2ggb2YgdGhlIHN5c2NhbGxzIGJlbG93LAooIEluIGZhY3QgdGhpcyBpcyBzb21ldGltZXMgZWFzaWVyIHRoYW4gbG9va2luZyBhdCBzb21lIHNwYWdldHRpCnNvdXJjZSB3aGljaCBjb25kaXRpb25hbGx5IGNvbXBpbGVzIGZvciBzZXZlcmFsIGFyY2hpdGVjdHVyZXMgKQpOb3QgZXZlcnl0aGluZyB0aGF0IGl0IHRocm93cyBvdXQgbmVlZHMgdG8gbWFrZSBzZW5zZSBpbW1lYWRpYXRlbHkKCkp1c3QgbG9va2luZyBxdWlja2x5IHlvdSBjYW4gc2VlIHRoYXQgaXQgaXMgbWFraW5nIHVwIGEgUkFXIHNvY2tldApmb3IgdGhlIElDTVAgcHJvdG9jb2wuCkRvaW5nIGFuIGFsYXJtKDEwKSBmb3IgYSAxMCBzZWNvbmQgdGltZW91dAomIGRvaW5nIGEgZ2V0dGltZW9mZGF5IGNhbGwgYmVmb3JlICYgYWZ0ZXIgZWFjaCByZWFkIHRvIHNlZSAKaG93IGxvbmcgdGhlIHJlcGxpZXMgdG9vaywgJiB3cml0aW5nIHNvbWUgdGV4dCB0byBzdGRvdXQgc28gdGhlIHVzZXIKaGFzIGFuIGlkZWEgd2hhdCBpcyBnb2luZyBvbi4KCnNvY2tldChQRl9JTkVULCBTT0NLX1JBVywgSVBQUk9UT19JQ01QKSA9IDMKZ2V0dWlkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMApzZXR1aWQoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwCnN0YXQoIi91c3Ivc2hhcmUvbG9jYWxlL0MvbGliYy5jYXQiLCAweGJmZmZmMTM0KSA9IC0xIEVOT0VOVCAoTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSkKc3RhdCgiL3Vzci9zaGFyZS9sb2NhbGUvbGliYy9DIiwgMHhiZmZmZjEzNCkgPSAtMSBFTk9FTlQgKE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkpCnN0YXQoIi91c3IvbG9jYWwvc2hhcmUvbG9jYWxlL0MvbGliYy5jYXQiLCAweGJmZmZmMTM0KSA9IC0xIEVOT0VOVCAoTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSkKZ2V0cGlkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMzUzCnNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fQlJPQURDQVNULCBbMV0sIDQpID0gMApzZXRzb2Nrb3B0KDMsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgWzQ5MTUyXSwgNCkgPSAwCmZzdGF0KDEsIHtzdF9tb2RlPVNfSUZDSFJ8MDYyMCwgc3RfcmRldj1tYWtlZGV2KDMsIDEpLCAuLi59KSA9IDAKbW1hcCgwLCA0MDk2LCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUywgLTEsIDApID0gMHg0MDAwODAwMAppb2N0bCgxLCBUQ0dFVFMsIHtCOTYwMCBvcG9zdCBpc2lnIGljYW5vbiBlY2hvIC4uLn0pID0gMAp3cml0ZSgxLCAiUElORyAxMjcuMC4wLjEgKDEyNy4wLjAuMSk6IDU2IGQiLi4uLCA0MlBJTkcgMTI3LjAuMC4xICgxMjcuMC4wLjEpOiA1NiBkYXRhIGJ5dGVzCikgPSA0MgpzaWdhY3Rpb24oU0lHSU5ULCB7MHg4MDQ5YmEwLCBbXSwgU0FfUkVTVEFSVH0sIHtTSUdfREZMfSkgPSAwIApzaWdhY3Rpb24oU0lHQUxSTSwgezB4ODA0OTYwMCwgW10sIFNBX1JFU1RBUlR9LCB7U0lHX0RGTH0pID0gMApnZXR0aW1lb2ZkYXkoezk0ODkwNDcxOSwgMTM4OTUxfSwgTlVMTCkgPSAwCnNlbmR0bygzLCAiXDEwXDBEXDIwMWFcMVwwXDBcMTcjXDIxNzhcMzA3XDM2Ii4uLiwgNjQsIDAsIHtzaW5fZmFtaWx5PUFGX0lORVQsCnNpbl9wb3J0PWh0b25zKDApLCBzaW5fYWRkcj1pbmV0X2FkZHIoIjEyNy4wLjAuMSIpfSwgMTYpID0gNjQKc2lnYWN0aW9uKFNJR0FMUk0sIHsweDgwNDk2MDAsIFtdLCBTQV9SRVNUQVJUfSwgezB4ODA0OTYwMCwgW10sIFNBX1JFU1RBUlR9KSA9IDAKc2lnYWN0aW9uKFNJR0FMUk0sIHsweDgwNDliYTAsIFtdLCBTQV9SRVNUQVJUfSwgezB4ODA0OTYwMCwgW10sIFNBX1JFU1RBUlR9KSA9IDAKYWxhcm0oMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMApyZWN2ZnJvbSgzLCAiRVwwXDBUXDAwMDVcMFwwQFwxfHJcMTc3XDBcMFwxXDE3NyIuLi4sIDE5MiwgMCwgCntzaW5fZmFtaWx5PUFGX0lORVQsIHNpbl9wb3J0PWh0b25zKDUwODgyKSwgc2luX2FkZHI9aW5ldF9hZGRyKCIxMjcuMC4wLjEiKX0sIFsxNl0pID0gODQKZ2V0dGltZW9mZGF5KHs5NDg5MDQ3MTksIDE2MDIyNH0sIE5VTEwpID0gMApyZWN2ZnJvbSgzLCAiRVwwXDBUXDAwMDZcMFwwXDM3N1wxXDI3NXBcMTc3XDAiLi4uLCAxOTIsIDAsIAp7c2luX2ZhbWlseT1BRl9JTkVULCBzaW5fcG9ydD1odG9ucyg1MDg4MiksIHNpbl9hZGRyPWluZXRfYWRkcigiMTI3LjAuMC4xIil9LCBbMTZdKSA9IDg0CmdldHRpbWVvZmRheSh7OTQ4OTA0NzE5LCAxNjY5NTJ9LCBOVUxMKSA9IDAKd3JpdGUoMSwgIjY0IGJ5dGVzIGZyb20gMTI3LjAuMC4xOiBpY21wX3NlIi4uLiwgCjU3NjQgYnl0ZXMgZnJvbSAxMjcuMC4wLjE6IGljbXBfc2VxPTAgdHRsPTI1NSB0aW1lPTI4LjAgbXMKCkV4YW1wbGUgMgotLS0tLS0tLS0Kc3RyYWNlIHBhc3N3ZCAyPiYxIHwgZ3JlcCBvcGVuCnByb2R1Y2VzIHRoZSBmb2xsb3dpbmcgb3V0cHV0Cm9wZW4oIi9ldGMvbGQuc28uY2FjaGUiLCBPX1JET05MWSkgICAgICA9IDMKb3BlbigiL29wdC9rZGUvbGliL2xpYmMuc28uNSIsIE9fUkRPTkxZKSA9IC0xIEVOT0VOVCAoTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSkKb3BlbigiL2xpYi9saWJjLnNvLjUiLCBPX1JET05MWSkgICAgICAgID0gMwpvcGVuKCIvZGV2IiwgT19SRE9OTFkpICAgICAgICAgICAgICAgICAgPSAzCm9wZW4oIi92YXIvcnVuL3V0bXAiLCBPX1JET05MWSkgICAgICAgICA9IDMKb3BlbigiL2V0Yy9wYXNzd2QiLCBPX1JET05MWSkgICAgICAgICAgID0gMwpvcGVuKCIvZXRjL3NoYWRvdyIsIE9fUkRPTkxZKSAgICAgICAgICAgPSAzCm9wZW4oIi9ldGMvbG9naW4uZGVmcyIsIE9fUkRPTkxZKSAgICAgICA9IDQKb3BlbigiL2Rldi90dHkiLCBPX1JET05MWSkgICAgICAgICAgICAgID0gNCAKClRoZSAyPiYxIGlzIGRvbmUgdG8gcmVkaXJlY3Qgc3RkZXJyIHRvIHN0ZG91dCAmIGdyZXAgaXMgdGhlbiBmaWx0ZXJpbmcgdGhpcyBpbnB1dCAKdGhyb3VnaCB0aGUgcGlwZSBmb3IgZWFjaCBsaW5lIGNvbnRhaW5pbmcgdGhlIHN0cmluZyBvcGVuLgoKCkV4YW1wbGUgMwotLS0tLS0tLS0KR2V0dGluZyBzb3BoaXN0b2NhdGVkCnRlbG5ldGQgY3Jhc2hlcyBvbiAmIEkgZG9uJ3Qga25vdyB3aHkKU3RlcHMKLS0tLS0KMSkgUmVwbGFjZSB0aGUgZm9sbG93aW5nIGxpbmUgaW4gL2V0Yy9pbmV0ZC5jb25mCnRlbG5ldCAgc3RyZWFtICB0Y3AgICAgIG5vd2FpdCAgcm9vdCAgICAvdXNyL3NiaW4vaW4udGVsbmV0ZCAtaCAKd2l0aAp0ZWxuZXQgIHN0cmVhbSAgdGNwICAgICBub3dhaXQgIHJvb3QgICAgL2JsYWgKCjIpIENyZWF0ZSB0aGUgZmlsZSAvYmxhaCB3aXRoIHRoZSBmb2xsb3dpbmcgY29udGVudHMgdG8gc3RhcnQgdHJhY2luZyB0ZWxuZXRkIAojIS9iaW4vYmFzaAovdXNyL2Jpbi9zdHJhY2UgLW8vdDEgLWYgL3Vzci9zYmluL2luLnRlbG5ldGQgLWggCjMpIGNobW9kIDcwMCAvYmxhaCB0byBtYWtlIGl0IGV4ZWN1dGFibGUgb25seSB0byByb290CjQpCmtpbGxhbGwgLUhVUCBpbmV0ZApvciBwcyBhdXggfCBncmVwIGluZXRkCmdldCBpbmV0ZCdzIHByb2Nlc3MgaWQKJiBraWxsIC1IVVAgaW5ldGQgdG8gcmVzdGFydCBpdC4KCkltcG9ydGFudCBvcHRpb25zCi0tLS0tLS0tLS0tLS0tLS0tCi1vIGlzIHVzZWQgdG8gdGVsbCBzdHJhY2UgdG8gb3V0cHV0IHRvIGEgZmlsZSBpbiBvdXIgY2FzZSB0MSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkKLWYgaXMgdG8gZm9sbG93IGNoaWxkcmVuIGkuZS4KZS5nIGluIG91ciBjYXNlIGFib3ZlIHRlbG5ldGQgd2lsbCBzdGFydCB0aGUgbG9naW4gcHJvY2VzcyAmIHN1YnNlcXVlbnRseSBhIHNoZWxsIGxpa2UgYmFzaC4KWW91IHdpbGwgYmUgYWJsZSB0byB0ZWxsIHdoaWNoIGlzIHdoaWNoIGZyb20gdGhlIHByb2Nlc3MgSUQncyBsaXN0ZWQgb24gdGhlIGxlZnQgaGFuZCBzaWRlCm9mIHRoZSBzdHJhY2Ugb3V0cHV0LgotcDxwaWQ+IHdpbGwgdGVsbCBzdHJhY2UgdG8gYXR0YWNoIHRvIGEgcnVubmluZyBwcm9jZXNzLCB5dXAgdGhpcyBjYW4gYmUgZG9uZSBwcm92aWRlZAogaXQgaXNuJ3QgYmVpbmcgdHJhY2VkIG9yIGRlYnVnZ2VkIGFscmVhZHkgJiB5b3UgaGF2ZSBlbm91Z2ggcHJpdmlsZWdlcywKdGhlIHJlYXNvbiAyIHByb2Nlc3NlcyBjYW5ub3QgdHJhY2Ugb3IgZGVidWcgdGhlIHNhbWUgcHJvZ3JhbSBpcyB0aGF0IHN0cmFjZQpiZWNvbWVzIHRoZSBwYXJlbnQgcHJvY2VzcyBvZiB0aGUgb25lIGJlaW5nIGRlYnVnZ2VkICYgcHJvY2Vzc2VzICggdW5saWtlIHBlb3BsZSApCmNhbiBoYXZlIG9ubHkgb25lIHBhcmVudC4KCgpIb3dldmVyIHRoZSBmaWxlIC90MSB3aWxsIGdldCBiaWcgcXVpdGUgcXVpY2tseQp0byB0ZXN0IGl0IHRlbG5ldCAxMjcuMC4wLjEKCm5vdyBsb29rIGF0IHdoYXQgZmlsZXMgaW4udGVsbmV0ZCBleGVjdmUnZAo0MTMgICBleGVjdmUoIi91c3Ivc2Jpbi9pbi50ZWxuZXRkIiwgWyIvdXNyL3NiaW4vaW4udGVsbmV0ZCIsICItaCJdLCBbLyogMTcgdmFycyAqL10pID0gMAo0MTQgICBleGVjdmUoIi9iaW4vbG9naW4iLCBbIi9iaW4vbG9naW4iLCAiLWgiLCAibG9jYWxob3N0IiwgIi1wIl0sIFsvKiAyIHZhcnMgKi9dKSA9IDAgCgpXaGV5IGl0IHdvcmtlZCEuCgoKT3RoZXIgaGludHM6Ci0tLS0tLS0tLS0tLQpJZiB0aGUgcHJvZ3JhbSBpcyBub3QgdmVyeSBpbnRlcmFjdGl2ZSAoIGkuZS4gbm90IG11Y2gga2V5Ym9hcmQgaW5wdXQgKQomIGlzIGNyYXNoaW5nIGluIG9uZSBhcmNoaXRlY3R1cmUgYnV0IG5vdCBpbiBhbm90aGVyIHlvdSBjYW4gZG8gCmFuIHN0cmFjZSBvZiBib3RoIHByb2dyYW1zIHVuZGVyIGFzIGlkZW50aWNhbCBhIHNjZW5hcmlvIGFzIHlvdSBjYW4Kb24gYm90aCBhcmNoaXRlY3R1cmVzIG91dHB1dHRpbmcgdG8gYSBmaWxlIHRoZW4uCmRvIGEgZGlmZiBvZiB0aGUgdHdvIHRyYWNlcyB1c2luZyB0aGUgZGlmZiBwcm9ncmFtCmkuZS4KZGlmZiBvdXRwdXQxIG91dHB1dDIKJiBtYXliZSB5b3UnbGwgYmUgYWJsZSB0byBzZWUgd2hlcmUgdGhlIGNhbGwgcGF0aHMgZGlmZmVyZWQsIHRoaXMKaXMgcG9zc2libHkgbmVhciB0aGUgY2F1c2Ugb2YgdGhlIGNyYXNoLiAKCk1vcmUgaW5mbwotLS0tLS0tLS0KTG9vayBhdCBtYW4gcGFnZXMgZm9yIHN0cmFjZSAmIHRoZSB2YXJpb3VzIHN5c2NhbGxzCmUuZy4gbWFuIHN0cmFjZSwgbWFuIGFsYXJtLCBtYW4gc29ja2V0LgoKClBlcmZvcm1hbmNlIERlYnVnZ2luZwo9PT09PT09PT09PT09PT09PT09PT0KZ2NjIGlzIGNhcGlibGUgb2YgY29tcGlsaW5nIGluIHByb2ZpbGluZyBjb2RlIGp1c3QgYWRkIHRoZSAtcCBvcHRpb24KdG8gdGhlIENGTEFHUywgdGhpcyBvYnZpb3VzbHkgYWZmZWN0cyBwcm9ncmFtIHNpemUgJiBwZXJmb3JtYW5jZS4KVGhpcyBjYW4gYmUgdXNlZCBieSB0aGUgZ3Byb2YgZ251IHByb2ZpbGluZyB0b29sIG9yIHRoZQpnY292IHRoZSBnbnUgY29kZSBjb3ZlcmFnZSB0b29sICggY29kZSBjb3ZlcmFnZSBpcyBhIG1lYW5zIG9mIHRlc3RpbmcKY29kZSBxdWFsaXR5IGJ5IGNoZWNraW5nIGlmIGFsbCB0aGUgY29kZSBpbiBhbiBleGVjdXRhYmxlIGluIGV4ZXJjaXNlZCBieQphIHRlc3RlciApLgoKClVzaW5nIHRvcCB0byBmaW5kIG91dCB3aGVyZSBwcm9jZXNzZXMgYXJlIHNsZWVwaW5nIGluIHRoZSBrZXJuZWwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUbyBkbyB0aGlzIGNvcHkgdGhlIFN5c3RlbS5tYXAgZnJvbSB0aGUgcm9vdCBkaXJlY3Rvcnkgd2hlcmUKdGhlIGxpbnV4IGtlcm5lbCB3YXMgYnVpbHQgdG8gdGhlIC9ib290IGRpcmVjdG9yeSBvbiB5b3VyIApsaW51eCBtYWNoaW5lLgpTdGFydCB0b3AKTm93IHR5cGUgZlU8cmV0dXJuPgpZb3Ugc2hvdWxkIHNlZSBhIG5ldyBmaWVsZCBjYWxsZWQgV0NIQU4gd2hpY2gKdGVsbHMgeW91IHdoZXJlIGVhY2ggcHJvY2VzcyBpcyBzbGVlcGluZyBoZXJlIGlzIGEgdHlwaWNhbCBvdXRwdXQuCiAKIDY6NTlwbSAgdXAgNDEgbWluLCAgMSB1c2VyLCAgbG9hZCBhdmVyYWdlOiAwLjAwLCAwLjAwLCAwLjAwCjI4IHByb2Nlc3NlczogMjcgc2xlZXBpbmcsIDEgcnVubmluZywgMCB6b21iaWUsIDAgc3RvcHBlZApDUFUgc3RhdGVzOiAgMC4wJSB1c2VyLCAgMC4xJSBzeXN0ZW0sICAwLjAlIG5pY2UsIDk5LjglIGlkbGUKTWVtOiAgIDI1NDkwMEsgYXYsICAgNDU5NzZLIHVzZWQsICAyMDg5MjRLIGZyZWUsICAgICAgIDBLIHNocmQsICAgMjg2MzZLIGJ1ZmYKU3dhcDogICAgICAgMEsgYXYsICAgICAgIDBLIHVzZWQsICAgICAgIDBLIGZyZWUgICAgICAgICAgICAgICAgICAgIDg2MjBLIGNhY2hlZAoKICBQSUQgVVNFUiAgICAgUFJJICBOSSAgU0laRSAgUlNTIFNIQVJFIFdDSEFOICAgICBTVEFUICBMSUIgJUNQVSAlTUVNICAgVElNRSBDT01NQU5ECiAgNzUwIHJvb3QgICAgICAxMiAgIDAgICA4NDggIDg0OCAgIDcwMCBkb19zZWxlY3QgUyAgICAgICAwICAwLjEgIDAuMyAgIDA6MDAgaW4udGVsbmV0ZAogIDc2NyByb290ICAgICAgMTYgICAwICAxMTQwIDExNDAgICA5NjQgICAgICAgICAgIFIgICAgICAgMCAgMC4xICAwLjQgICAwOjAwIHRvcAogICAgMSByb290ICAgICAgIDggICAwICAgMjEyICAyMTIgICAxODAgZG9fc2VsZWN0IFMgICAgICAgMCAgMC4wICAwLjAgICAwOjAwIGluaXQKICAgIDIgcm9vdCAgICAgICA5ICAgMCAgICAgMCAgICAwICAgICAwIGRvd25faW50ZSBTVyAgICAgIDAgIDAuMCAgMC4wICAgMDowMCBrbWNoZWNrCgpUaGUgdGltZSBjb21tYW5kCi0tLS0tLS0tLS0tLS0tLS0KQW5vdGhlciByZWxhdGVkIGNvbW1hbmQgaXMgdGhlIHRpbWUgY29tbWFuZCB3aGljaCBnaXZlcyB5b3UgYW4gaW5kaWNhdGlvbgpvZiB3aGVyZSBhIHByb2Nlc3MgaXMgc3BlbmRpbmcgdGhlIG1ham9yaXR5IG9mIGl0cyB0aW1lLgplLmcuCnRpbWUgcGluZyAtYyA1IG5jCm91dHB1dHMKcmVhbAkwbTQuMDU0cwp1c2VyCTBtMC4wMTBzCnN5cwkwbTAuMDEwcwoKRGVidWdnaW5nIHVuZGVyIFZNCj09PT09PT09PT09PT09PT09PQoKTm90ZXMKLS0tLS0KQWRkcmVzc2VzICYgdmFsdWVzIGluIHRoZSBWTSBkZWJ1Z2dlciBhcmUgYWx3YXlzIGhleCBuZXZlciBkZWNpbWFsCkFkZHJlc3MgcmFuZ2VzIGFyZSBvZiB0aGUgZm9ybWF0IDxIZXhWYWx1ZTE+LTxIZXhWYWx1ZTI+IG9yIDxIZXhWYWx1ZTE+LjxIZXhWYWx1ZTI+IAplLmcuIFRoZSBhZGRyZXNzIHJhbmdlICAweDIwMDAgdG8gMHgzMDAwIGNhbiBiZSBkZXNjcmliZWQgZGVzY3JpYmVkIGFzCjIwMDAtMzAwMCBvciAyMDAwLjEwMDAKClRoZSBWTSBEZWJ1Z2dlciBpcyBjYXNlIGluc2Vuc2l0aXZlLgoKVk0ncyBzdHJlbmd0aHMgYXJlIHVzdWFsbHkgb3RoZXIgZGVidWdnZXJzIHdlYWtuZXNzZXMgeW91IGNhbiBnZXQgYXQgYW55IHJlc291cmNlCm5vIG1hdHRlciBob3cgc2Vuc2l0aXZlIGUuZy4gbWVtb3J5IG1hbmFnZW1lbnQgcmVzb3VyY2VzLGNoYW5nZSBhZGRyZXNzIHRyYW5zbGF0aW9uCmluIHRoZSBQU1cuIEZvciBrZXJuZWwgaGFja2luZyB5b3Ugd2lsbCByZWFwIGRpdmlkZW5kcyBpZiB5b3UgZ2V0IGdvb2QgYXQgaXQuCgpUaGUgVk0gRGVidWdnZXIgZGlzcGxheXMgb3BlcmF0b3JzIGJ1dCBub3Qgb3BlcmFuZHMsIHByb2JhYmx5IGJlY2F1c2Ugc29tZQpvZiBpdCB3YXMgd3JpdHRlbiB3aGVuIG1lbW9yeSB3YXMgZXhwZW5zaXZlICYgdGhlIHByb2dyYW1tZXIgd2FzIHByb2JhYmx5IHByb3VkIHRoYXQKaXQgZml0dGVkIGludG8gMmsgb2YgbWVtb3J5ICYgdGhlIHByb2dyYW1tZXJzICYgZGlkbid0IHdhbnQgdG8gc2hvY2sgaGFyZGNvcmUgVk0nZXJzIGJ5CmNoYW5naW5nIHRoZSBpbnRlcmZhY2UgOi0pLCBhbHNvIHRoZSBkZWJ1Z2dlciBkaXNwbGF5cyB1c2VmdWwgaW5mb3JtYXRpb24gb24gdGhlIHNhbWUgbGluZSAmIAp0aGUgYXV0aG9yIG9mIHRoZSBjb2RlIHByb2JhYmx5IGZlbHQgdGhhdCBpdCB3YXMgYSBnb29kIGlkZWEgbm90IHRvIGdvIG92ZXIgCnRoZSA4MCBjb2x1bW5zIG9uIHRoZSBzY3JlZW4uIAoKQXMgc29tZSBvZiB5b3UgYXJlIHByb2JhYmx5IGluIGEgcGFuaWMgbm93IHRoaXMgaXNuJ3QgYXMgdW5pbnR1aXRpdmUgYXMgaXQgbWF5IHNlZW0KYXMgdGhlIDM5MCBpbnN0cnVjdGlvbnMgYXJlIGVhc3kgdG8gZGVjb2RlIG1lbnRhbGx5ICYgeW91IGNhbiBtYWtlIGEgZ29vZCBndWVzcyBhdCBhIGxvdCAKb2YgdGhlbSBhcyBhbGwgdGhlIG9wZXJhbmRzIGFyZSBuaWJibGUgKCBoYWxmIGJ5dGUgYWxpZ25lZCApICYgaWYgeW91IGhhdmUgYW4gb2JqZHVtcCBsaXN0aW5nCmFsc28gaXQgaXMgcXVpdGUgZWFzeSB0byBmb2xsb3csIGlmIHlvdSBkb24ndCBoYXZlIGFuIG9iamR1bXAgbGlzdGluZyBrZWVwIGEgY29weSBvZgp0aGUgcy8zOTAgUmVmZXJlbmNlIFN1bW1hcnkgJiBsb29rIGF0IGJldHdlZW4gcGFnZXMgMiAmIDcgb3IgYWx0ZXJuYXRpdmVseSB0aGUKcy8zOTAgcHJpbmNpcGxlcyBvZiBvcGVyYXRpb24uCmUuZy4gZXZlbiBJIGNhbiBndWVzcyB0aGF0IAowMDAxQUZGOCcgTFIgICAgMTgwRiAgICAgICAgQ0MgMAppcyBhICggbG9hZCByZWdpc3RlciApIGxyIHIwLHIxNSAKCkFsc28gaXQgaXMgdmVyeSBlYXN5IHRvIHRlbGwgdGhlIGxlbmd0aCBvZiBhIDM5MCBpbnN0cnVjdGlvbiBmcm9tIHRoZSAyIG1vc3Qgc2lnbmlmaWNhbnQKYml0cyBpbiB0aGUgaW5zdHJ1Y3Rpb24gKCBub3QgdGhhdCB0aGlzIGluZm8gaXMgcmVhbGx5IHVzZWZ1bCBleGNlcHQgaWYgeW91IGFyZSB0cnlpbmcgdG8KbWFrZSBzZW5zZSBvZiBhIGhleGR1bXAgb2YgY29kZSApLgpIZXJlIGlzIGEgdGFibGUKQml0cyAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gTGVuZ3RoCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQowMCAgICAgICAgICAgICAgICAgICAgICAgICAgMiBCeXRlcwowMSAgICAgICAgICAgICAgICAgICAgICAgICAgNCBCeXRlcwoxMCAgICAgICAgICAgICAgICAgICAgICAgICAgNCBCeXRlcwoxMSAgICAgICAgICAgICAgICAgICAgICAgICAgNiBCeXRlcwoKCgoKVGhlIGRlYnVnZ2VyIGFsc28gZGlzcGxheXMgb3RoZXIgdXNlZnVsIGluZm8gb24gdGhlIHNhbWUgbGluZSBzdWNoIGFzIHRoZQphZGRyZXNzZXMgYmVpbmcgb3BlcmF0ZWQgb24gZGVzdGluYXRpb24gYWRkcmVzc2VzIG9mIGJyYW5jaGVzICYgY29uZGl0aW9uIGNvZGVzLgplLmcuICAKMDAwMTk3MzYnIEFISSAgIEE3REFGRjBFICAgIENDIDEKMDAwMTk4QkEnIEJSQyAgIEE3ODQwMDA0IC0+IDAwMDE5OEMyJyAgIENDIDAKMDAwMTk4Q0UnIFNUTSAgIDkwMEVGMDY4ID4+IDBGQTk1RTc4ICAgIENDIDIKCgoKVXNlZnVsIFZNIGRlYnVnZ2VyIGNvbW1hbmRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKSSBzdXBwb3NlIEknZCBiZXR0ZXIgbWVudGlvbiB0aGlzIGJlZm9yZSBJIHN0YXJ0CnRvIGxpc3QgdGhlIGN1cnJlbnQgYWN0aXZlIHRyYWNlcyBkbyAKUSBUUgp0aGVyZSBjYW4gYmUgYSBtYXhpbXVtIG9mIDI1NSBvZiB0aGVzZSBwZXIgc2V0CiggbW9yZSBhYm91dCB0cmFjZSBzZXRzIGxhdGVyICkuClRvIHN0b3AgdHJhY2VzIGlzc3VlIGEKVFIgRU5ELgpUbyBkZWxldGUgYSBwYXJ0aWN1bGFyIGJyZWFrcG9pbnQgaXNzdWUKVFIgREVMIDxicmVha3BvaW50IG51bWJlcj4KClRoZSBQQTEga2V5IGRyb3BzIHRvIENQIG1vZGUgc28geW91IGNhbiBpc3N1ZSBkZWJ1Z2dlciBjb21tYW5kcywKRG9pbmcgYWx0IGMgKG9uIG15IDMyNzAgY29uc29sZSBhdCBsZWFzdCApIGNsZWFycyB0aGUgc2NyZWVuLiAKaGl0dGluZyBiIDxlbnRlcj4gY29tZXMgYmFjayB0byB0aGUgcnVubmluZyBvcGVyYXRpbmcgc3lzdGVtCmZyb20gY3AgbW9kZSAoIGluIG91ciBjYXNlIGxpbnV4ICkuCkl0IGlzIHR5cGljYWxseSB1c2VmdWwgdG8gYWRkIHNob3J0Y3V0cyB0byB5b3VyIHByb2ZpbGUuZXhlYyBmaWxlCmlmIHlvdSBoYXZlIG9uZSAoIHRoaXMgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGF1dG9leGVjLmJhdCBpbiBET1MgKS4KZmlsZSBoZXJlIGFyZSBhIGZldyBmcm9tIG1pbmUuCi8qIHRoaXMgZ2l2ZXMgbWUgY29tbWFuZCBoaXN0b3J5IG9uIGlzc3VpbmcgZjEyICovCnNldCBwZjEyIHJldHJpZXZlIAovKiB0aGlzIGNvbnRpbnVlcyAqLwpzZXQgcGY4IGltbSBiCi8qIGdvZXMgdG8gdHJhY2Ugc2V0IGEgKi8Kc2V0IHBmMSBpbW0gdHIgZ290byBhCi8qIGdvZXMgdG8gdHJhY2Ugc2V0IGIgKi8Kc2V0IHBmMiBpbW0gdHIgZ290byBiCi8qIGdvZXMgdG8gdHJhY2Ugc2V0IGMgKi8Kc2V0IHBmMyBpbW0gdHIgZ290byBjCgoKCkluc3RydWN0aW9uIFRyYWNpbmcKLS0tLS0tLS0tLS0tLS0tLS0tLQpTZXR0aW5nIGEgc2ltcGxlIGJyZWFrcG9pbnQKVFIgSSBQU1dBIDxhZGRyZXNzPgpUbyBkZWJ1ZyBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gdHJ5ClRSIEkgUiA8ZnVuY3Rpb24gYWRkcmVzcyByYW5nZT4KVFIgSSBvbiBpdHMgb3duIHdpbGwgc2luZ2xlIHN0ZXAuClRSIEkgREFUQSA8TU5FTU9OSUM+IDxPUFRJT05BTCBSQU5HRT4gd2lsbCB0cmFjZSBmb3IgcGFydGljdWxhciBtbmVtb25pY3MKZS5nLgpUUiBJIERBVEEgNEQgUiAwMTk3QkMuNDAwMAp3aWxsIHRyYWNlIGZvciBCQVMnZXMgKCBvcGNvZGUgNEQgKSBpbiB0aGUgcmFuZ2UgMDE5N0JDLjQwMDAKaWYgeW91IHdlcmUgaW5jbGluZWQgeW91IGNvdWxkIGFkZCB0cmFjZXMgZm9yIGFsbCBicmFuY2ggaW5zdHJ1Y3Rpb25zICYKc3VmZml4IHRoZW0gd2l0aCB0aGUgcnVuIHByZWZpeCBzbyB5b3Ugd291bGQgaGF2ZSBhIGJhY2t0cmFjZSBvbiBzY3JlZW4gCndoZW4gYSBwcm9ncmFtIGNyYXNoZXMuClRSIEJSIDxJTlRPIE9SIEZST00+IHdpbGwgdHJhY2UgYnJhbmNoZXMgaW50byBvciBvdXQgb2YgYW4gYWRkcmVzcy4KZS5nLgpUUiBCUiBJTlRPIDAgaXMgb2Z0ZW4gcXVpdGUgdXNlZnVsIGlmIGEgcHJvZ3JhbSBpcyBnZXR0aW5nIGF3a3dhcmQgJiBkZWNpZGluZwp0byBicmFuY2ggdG8gMCAmIGNyYXNoaW5nIGFzIHRoaXMgd2lsbCBzdG9wIGF0IHRoZSBhZGRyZXNzIGJlZm9yZSBpbiBqdW1wcyB0byAwLgpUUiBJIFIgPGFkZHJlc3MgcmFuZ2U+IFJVTiBjbWQgZCBnCnNpbmdsZSBzdGVwcyBhIHJhbmdlIG9mIGFkZHJlc3NlcyBidXQgc3RheXMgcnVubmluZyAmCmRpc3BsYXlzIHRoZSBncHJzIG9uIGVhY2ggc3RlcC4KCgoKRGlzcGxheWluZyAmIG1vZGlmeWluZyBSZWdpc3RlcnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRCBHIHdpbGwgZGlzcGxheSBhbGwgdGhlIGdwcnMKQWRkaW5nIGEgZXh0cmEgRyB0byBhbGwgdGhlIGNvbW1hbmRzIGlzIG5lY2Vzc2FyeSB0byBhY2Nlc3MgdGhlIGZ1bGwgNjQgYml0IApjb250ZW50IGluIFZNIG9uIHovQXJjaGl0ZWN0dXJlIG9idmlvdXNseSB0aGlzIGlzbid0IHJlcXVpcmVkIGZvciBhY2Nlc3MgcmVnaXN0ZXJzCmFzIHRoZXNlIGFyZSBzdGlsbCAzMiBiaXQuCmUuZy4gREdHIGluc3RlYWQgb2YgREcgCkQgWCB3aWxsIGRpc3BsYXkgYWxsIHRoZSBjb250cm9sIHJlZ2lzdGVycwpEIEFSIHdpbGwgZGlzcGxheSBhbGwgdGhlIGFjY2VzcyByZWdpc3RlcnMKRCBBUjQtNyB3aWxsIGRpc3BsYXkgYWNjZXNzIHJlZ2lzdGVycyA0IHRvIDcKQ1BVIEFMTCBEIEcgd2lsbCBkaXNwbGF5IHRoZSBHUlBTIG9mIGFsbCBDUFVTIGluIHRoZSBjb25maWd1cmF0aW9uCkQgUFNXIHdpbGwgZGlzcGxheSB0aGUgY3VycmVudCBQU1cKc3QgUFNXIDIwMDAgd2lsbCBwdXQgdGhlIHZhbHVlIDIwMDAgaW50byB0aGUgUFNXICYKY2F1c2UgY3Jhc2ggeW91ciBtYWNoaW5lLgpEIFBSRUZJWCBkaXNwbGF5cyB0aGUgcHJlZml4IG9mZnNldAoKCkRpc3BsYXlpbmcgTWVtb3J5Ci0tLS0tLS0tLS0tLS0tLS0tClRvIGRpc3BsYXkgbWVtb3J5IG1hcHBlZCB1c2luZyB0aGUgY3VycmVudCBQU1cncyBtYXBwaW5nIHRyeQpEIDxyYW5nZT4KVG8gbWFrZSBWTSBkaXNwbGF5IGEgbWVzc2FnZSBlYWNoIHRpbWUgaXQgaGl0cyBhIHBhcnRpY3VsYXIgYWRkcmVzcyAmIGNvbnRpbnVlIHRyeQpEIEk8cmFuZ2U+IHdpbGwgZGlzYXNzZW1ibGUvZGlzcGxheSBhIHJhbmdlIG9mIGluc3RydWN0aW9ucy4KU1QgYWRkciAzMiBiaXQgd29yZCB3aWxsIHN0b3JlIGEgMzIgYml0IGFsaWduZWQgYWRkcmVzcwpEIFQ8cmFuZ2U+IHdpbGwgZGlzcGxheSB0aGUgRUJDRElDIGluIGFuIGFkZHJlc3MgKCBpZiB5b3UgYXJlIHRoYXQgd2F5IGluY2xpbmVkICkKRCBSPHJhbmdlPiB3aWxsIGRpc3BsYXkgcmVhbCBhZGRyZXNzZXMgKCB3aXRob3V0IERBVCApIGJ1dCB3aXRoIHByZWZpeGluZy4KVGhlcmUgYXJlIG90aGVyIGNvbXBsZXggb3B0aW9ucyB0byBkaXNwbGF5IGlmIHlvdSBuZWVkIHRvIGdldCBhdCBzYXkgaG9tZSBzcGFjZQpidXQgYXJlIGluIHByaW1hcnkgc3BhY2UgdGhlIGVhc2llc3QgdGhpbmcgdG8gZG8gaXMgdG8gdGVtcG9yYXJpbHkKbW9kaWZ5IHRoZSBQU1cgdG8gdGhlIG90aGVyIGFkZHJlc3NpbmcgbW9kZSwgZGlzcGxheSB0aGUgc3R1ZmYgJiB0aGVuCnJlc3RvcmUgaXQuCgoKIApIaW50cwotLS0tLQpJZiB5b3Ugd2FudCB0byBpc3N1ZSBhIGRlYnVnZ2VyIGNvbW1hbmQgd2l0aG91dCBoYWx0aW5nIHlvdXIgdmlydHVhbCBtYWNoaW5lIHdpdGggdGhlClBBMSBrZXkgdHJ5IHByZWZpeGluZyB0aGUgY29tbWFuZCB3aXRoICNDUCBlLmcuCiNjcCB0ciBpIHBzd2EgMjAwMAphbHNvIHN1ZmZpeGluZyBtb3N0IGRlYnVnZ2VyIGNvbW1hbmRzIHdpdGggUlVOIHdpbGwgY2F1c2UgdGhlbSBub3QKdG8gc3RvcCBqdXN0IGRpc3BsYXkgdGhlIG1uZW1vbmljIGF0IHRoZSBjdXJyZW50IGluc3RydWN0aW9uIG9uIHRoZSBjb25zb2xlLgpJZiB5b3UgaGF2ZSBzZXZlcmFsIGJyZWFrcG9pbnRzIHlvdSB3YW50IHRvIHB1dCBpbnRvIHlvdXIgcHJvZ3JhbSAmCnlvdSBnZXQgZmVkIHVwIG9mIGNyb3NzIHJlZmVyZW5jaW5nIHdpdGggU3lzdGVtLm1hcAp5b3UgY2FuIGRvIHRoZSBmb2xsb3dpbmcgdHJpY2sgZm9yIHNldmVyYWwgc3ltYm9scy4KZ3JlcCBkb19zaWduYWwgU3lzdGVtLm1hcCAKd2hpY2ggZW1pdHMgdGhlIGZvbGxvd2luZyBhbW9uZyBvdGhlciB0aGluZ3MKMDAwMWY0ZTAgVCBkb19zaWduYWwgCm5vdyB5b3UgY2FuIGRvCgpUUiBJIFBTV0EgMDAwMWY0ZTAgY21kIG1zZyAqIGRvX3NpZ25hbApUaGlzIHNlbmRzIGEgbWVzc2FnZSB0byB5b3VyIG93biBjb25zb2xlIGVhY2ggdGltZSBkb19zaWduYWwgaXMgZW50ZXJlZC4KKCBBcyBhbiBhc2lkZSBJIHdyb3RlIGEgcGVybCBzY3JpcHQgb25jZSB3aGljaCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBhIFJFWFgKc2NyaXB0IHdpdGggYnJlYWtwb2ludHMgb24gZXZlcnkga2VybmVsIHByb2NlZHVyZSwgdGhpcyBpc24ndCBhIGdvb2QgaWRlYQpiZWNhdXNlIHRoZXJlIGFyZSB0aG91c2FuZHMgb2YgdGhlc2Ugcm91dGluZXMgJiBWTSBjYW4gb25seSBzZXQgMjU1IGJyZWFrcG9pbnRzCmF0IGEgdGltZSBzbyB5b3UgbmVhcmx5IGhhZCB0byBzcGVuZCBhcyBsb25nIHBydW5pbmcgdGhlIGZpbGUgZG93biBhcyB5b3Ugd291bGQgCmVudGVyaW5nIHRoZSBtc2cncyBieSBoYW5kICksaG93ZXZlciwgdGhlIHRyaWNrIG1pZ2h0IGJlIHVzZWZ1bCBmb3IgYSBzaW5nbGUgb2JqZWN0IGZpbGUuCk9uIGxpbnV4J2VzIDMyNzAgZW11bGF0b3IgeDMyNzAgdGhlcmUgaXMgYSB2ZXJ5IHVzZWZ1bCBvcHRpb24gdW5kZXIgdGhlIGZpbGUgbWVudApTYXZlIFNjcmVlbnMgSW4gRmlsZSB0aGlzIGlzIHZlcnkgZ29vZCBvZiBrZWVwaW5nIGEgY29weSBvZiB0cmFjZXMuIAoKRnJvbSBDTVMgaGVscCA8Y29tbWFuZCBuYW1lPiB3aWxsIGdpdmUgeW91IG9ubGluZSBoZWxwIG9uIGEgcGFydGljdWxhciBjb21tYW5kLiAKZS5nLiAKSEVMUCBESVNQTEFZCgpBbHNvIENQIGhhcyBhIGZpbGUgY2FsbGVkIHByb2ZpbGUuZXhlYyB3aGljaCBhdXRvbWF0aWNhbGx5IGdldHMgY2FsbGVkCm9uIHN0YXJ0dXAgb2YgQ01TICggbGlrZSBhdXRvZXhlYy5iYXQgKSwga2VlcGluZyBvbiBhIERPUyBhbmFsb2d5IHNlc3Npb24KQ1AgaGFzIGEgZmVhdHVyZSBzaW1pbGFyIHRvIGRvc2tleSwgaXQgbWF5IGJlIHVzZWZ1bCBmb3IgeW91IHRvCnVzZSBwcm9maWxlLmV4ZWMgdG8gZGVmaW5lIHNvbWUga2V5c3Ryb2tlcy4gCmUuZy4KU0VUIFBGOSBJTU0gQgpUaGlzIGRvZXMgYSBzaW5nbGUgc3RlcCBpbiBWTSBvbiBwcmVzc2luZyBGOC4gClNFVCBQRjEwICBeClRoaXMgc2V0cyB1cCB0aGUgXiBrZXkuCndoaWNoIGNhbiBiZSB1c2VkIGZvciBeYyAoY3RybC1jKSxeeiAoY3RybC16KSB3aGljaCBjYW4ndCBiZSB0eXBlZCBkaXJlY3RseSBpbnRvIHNvbWUgMzI3MCBjb25zb2xlcy4KU0VUIFBGMTEgXi0KVGhpcyB0eXBlcyB0aGUgc3RhcnRpbmcga2V5c3Ryb2tlcyBmb3IgYSBzeXNycSBzZWUgU3lzUnEgYmVsb3cuClNFVCBQRjEyIFJFVFJJRVZFClRoaXMgcmV0cmlldmVzIGNvbW1hbmQgaGlzdG9yeSBvbiBwcmVzc2luZyBGMTIuCgoKU29tZXRpbWVzIGluIFZNIHRoZSBkaXNwbGF5IGlzIHNldCB1cCB0byBzY3JvbGwgYXV0b21hdGljYWxseSB0aGlzCmNhbiBiZSB2ZXJ5IGFubm95aW5nIGlmIHRoZXJlIGFyZSBtZXNzYWdlcyB5b3Ugd2lzaCB0byBsb29rIGF0CnRvIHN0b3AgdGhpcyBkbwpURVJNIE1PUkUgMjU1IDI1NQpUaGlzIHdpbGwgbmVhcmx5IHN0b3AgYXV0b21hdGljIHNjcmVlbiB1cGRhdGVzLCBob3dldmVyIGl0IHdpbGwKY2F1c2UgYSBkZW5pYWwgb2Ygc2VydmljZSBpZiBsb3RzIG9mIG1lc3NhZ2VzIGdvIHRvIHRoZSAzMjcwIGNvbnNvbGUsCnNvIGl0IHdvdWxkIGJlIGZvb2xpc2ggdG8gdXNlIHRoaXMgYXMgdGhlIGRlZmF1bHQgb24gYSBwcm9kdWN0aW9uIG1hY2hpbmUuCiAKClRyYWNpbmcgcGFydGljdWxhciBwcm9jZXNzZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaGUga2VybmVsJ3MgdGV4dCBzZWdtZW50IGlzIGludGVudGlvbmFsbHkgYXQgYW4gYWRkcmVzcyBpbiBtZW1vcnkgdGhhdCBpdCB3aWxsCnZlcnkgc2VsZG9tIGNvbGxpZGUgd2l0aCB0ZXh0IHNlZ21lbnRzIG9mIHVzZXIgcHJvZ3JhbXMgKCB0aGFua3MgTWFydGluICksCnRoaXMgc2ltcGxpZmllcyBkZWJ1Z2dpbmcgdGhlIGtlcm5lbC4KSG93ZXZlciBpdCBpcyBxdWl0ZSBjb21tb24gZm9yIHVzZXIgcHJvY2Vzc2VzIHRvIGhhdmUgYWRkcmVzc2VzIHdoaWNoIGNvbGxpZGUKdGhpcyBjYW4gbWFrZSBkZWJ1Z2dpbmcgYSBwYXJ0aWN1bGFyIHByb2Nlc3MgdW5kZXIgVk0gcGFpbmZ1bCB1bmRlciBub3JtYWwKY2lyY3Vtc3RhbmNlcyBhcyB0aGUgcHJvY2VzcyBtYXkgY2hhbmdlIHdoZW4gZG9pbmcgYSAKVFIgSSBSIDxhZGRyZXNzIHJhbmdlPi4KVGhhbmtmdWxseSBhZnRlciByZWFkaW5nIFZNJ3Mgb25saW5lIGhlbHAgSSBmaWd1cmVkIG91dCBob3cgdG8gZGVidWcKSSBwYXJ0aWN1bGFyIHByb2Nlc3MuCgpZb3VyIGZpcnN0IHByb2JsZW0gaXMgdG8gZmluZCB0aGUgU1REICggc2VnbWVudCB0YWJsZSBkZXNpZ25hdGlvbiApCm9mIHRoZSBwcm9ncmFtIHlvdSB3aXNoIHRvIGRlYnVnLgpUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHlvdSBjYW4gZG8gdGhpcyBoZXJlIGFyZSBhIGZldwoxKSBvYmpkdW1wIC0tc3ltcyA8cHJvZ3JhbSB0byBiZSBkZWJ1Z2dlZD4gfCBncmVwIG1haW4KVG8gZ2V0IHRoZSBhZGRyZXNzIG9mIG1haW4gaW4gdGhlIHByb2dyYW0uCnRyIGkgcHN3YSA8YWRkcmVzcyBvZiBtYWluPgpTdGFydCB0aGUgcHJvZ3JhbSwgaWYgVk0gZHJvcHMgdG8gQ1Agb24gd2hhdCBsb29rcyBsaWtlIHRoZSBlbnRyeQpwb2ludCBvZiB0aGUgbWFpbiBmdW5jdGlvbiB0aGlzIGlzIG1vc3QgbGlrZWx5IHRoZSBwcm9jZXNzIHlvdSB3aXNoIHRvIGRlYnVnLgpOb3cgZG8gYSBEIFgxMyBvciBEIFhHMTMgb24gei9BcmNoaXRlY3R1cmUuCk9uIDMxIGJpdCB0aGUgU1REIGlzIGJpdHMgMS0xOSAoIHRoZSBTVE8gc2VnbWVudCB0YWJsZSBvcmlnaW4gKSAKJiAyNS0zMSAoIHRoZSBTVEwgc2VnbWVudCB0YWJsZSBsZW5ndGggKSBvZiBDUjEzLgpub3cgdHlwZQpUUiBJIFIgU1REIDxDUjEzJ3MgdmFsdWU+IDAuN2ZmZmZmZmYKZS5nLgpUUiBJIFIgU1REIDhGMzJFMUZGIDAuN2ZmZmZmZmYKQW5vdGhlciB2ZXJ5IHVzZWZ1bCB2YXJpYXRpb24gaXMKVFIgU1RPUkUgSU5UTyBTVEQgPENSMTMncyB2YWx1ZT4gPGFkZHJlc3MgcmFuZ2U+CmZvciBmaW5kaW5nIG91dCB3aGVuIGEgcGFydGljdWxhciB2YXJpYWJsZSBjaGFuZ2VzLgoKQW4gYWx0ZXJuYXRpdmUgd2F5IG9mIGZpbmRpbmcgdGhlIFNURCBvZiBhIGN1cnJlbnRseSBydW5uaW5nIHByb2Nlc3MgCmlzIHRvIGRvIHRoZSBmb2xsb3dpbmcsICggdGhpcyBtZXRob2QgaXMgbW9yZSBjb21wbGV4IGJ1dApjb3VsZCBiZSBxdWl0ZSBjb252ZW5pZW50IGlmIHlvdSBhcmVuJ3QgdXBkYXRpbmcgdGhlIGtlcm5lbCBtdWNoICYKc28geW91ciBrZXJuZWwgc3RydWN0dXJlcyB3aWxsIHN0YXkgY29uc3RhbnQgZm9yIGEgcmVhc29uYWJsZSBwZXJpb2Qgb2YKdGltZSApLgoKZ3JlcCB0YXNrIC9wcm9jLzxwaWQ+L3N0YXR1cwpmcm9tIHRoaXMgeW91IHNob3VsZCBzZWUgc29tZXRoaW5nIGxpa2UKdGFzazogMGYxNjAwMDAga3NwOiAwZjE2MWRlOCBwdF9yZWdzOiAwZjE2MWY2OApUaGlzIG5vdyBnaXZlcyB5b3UgYSBwb2ludGVyIHRvIHRoZSB0YXNrIHN0cnVjdHVyZS4KTm93IG1ha2UgQ0M6PSJzMzkwLWdjYyAtZyIga2VybmVsL3NjaGVkLnMKVG8gZ2V0IHRoZSB0YXNrX3N0cnVjdCBzdGFiaW5mby4KKCB0YXNrX3N0cnVjdCBpcyBkZWZpbmVkIGluIGluY2x1ZGUvbGludXgvc2NoZWQuaCApLgpOb3cgd2Ugd2FudCB0byBsb29rIGF0CnRhc2stPmFjdGl2ZV9tbS0+cGdkCm9uIG15IG1hY2hpbmUgdGhlIGFjdGl2ZV9tbSBpbiB0aGUgdGFzayBzdHJ1Y3R1cmUgc3RhYiBpcwphY3RpdmVfbW06KDQsMTIpLDY3MiwzMgppdHMgb2Zmc2V0IGlzIDY3Mi84PTg0PTB4NTQKdGhlIHBnZCBtZW1iZXIgaW4gdGhlIG1tX3N0cnVjdCBzdGFiIGlzCnBnZDooNCw2KT0qKDI5LDUpLDk2LDMyCnNvIGl0cyBvZmZzZXQgaXMgOTYvOD0xMj0weGMKCnNvIHdlJ2xsCmhleGR1bXAgLXMgMHhmMTYwMDU0IC9kZXYvbWVtIHwgbW9yZQppLmUuIHRhc2tfc3RydWN0K2FjdGl2ZV9tbSBvZmZzZXQKdG8gbG9vayBhdCB0aGUgYWN0aXZlX21tIG1lbWJlcgpmMTYwMDU0IDBmZWUgY2M2MCAwMDE5IGUzMzQgMDAwMCAwMDAwIDAwMDAgMDAxMQpoZXhkdW1wIC1zIDB4MGZlZWNjNmMgL2Rldi9tZW0gfCBtb3JlCmkuZS4gYWN0aXZlX21tK3BnZCBvZmZzZXQKZmVlY2M2YyAwZjJjIDAwMDAgMDAwMCAwMDAxIDAwMDAgMDAwMSAwMDAwIDAwMTAKd2UgZ2V0IHNvbWV0aGluZyBsaWtlCm5vdyBkbyAKVFIgSSBSIFNURCA8cGdkfDB4N2Y+IDAuN2ZmZmZmZmYKaS5lLiB0aGUgMHg3ZiBpcyBhZGRlZCBiZWNhdXNlIHRoZSBwZ2Qgb25seQpnaXZlcyB0aGUgcGFnZSB0YWJsZSBvcmlnaW4gJiB3ZSBuZWVkIHRvIHNldCB0aGUgbG93IGJpdHMKdG8gdGhlIG1heGltdW0gcG9zc2libGUgc2VnbWVudCB0YWJsZSBsZW5ndGguClRSIEkgUiBTVEQgMGYyYzAwN2YgMC43ZmZmZmZmZgpvbiB6L0FyY2hpdGVjdHVyZSB5b3UnbGwgcHJvYmFibHkgbmVlZCB0byBkbwpUUiBJIFIgU1REIDxwZ2R8MHg3PiAwLmZmZmZmZmZmZmZmZmZmZmYKdG8gc2V0IHRoZSBUYWJsZVR5cGUgdG8gMHgxICYgdGhlIFRhYmxlIGxlbmd0aCB0byAzLgoKCgpUcmFjaW5nIFByb2dyYW0gRXhjZXB0aW9ucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJZiB5b3UgZ2V0IGEgY3Jhc2ggd2hpY2ggc2F5cyBzb21ldGhpbmcgbGlrZQppbGxlZ2FsIG9wZXJhdGlvbiBvciBzcGVjaWZpY2F0aW9uIGV4Y2VwdGlvbiBmb2xsb3dlZCBieSBhIHJlZ2lzdGVyIGR1bXAKWW91IGNhbiByZXN0YXJ0IGxpbnV4ICYgdHJhY2UgdGhlc2UgdXNpbmcgdGhlIHRyIHByb2cgPHJhbmdlIG9yIHZhbHVlPiB0cmFjZSBvcHRpb24uCgoKClRoZSBtb3N0IGNvbW1vbiBvbmVzIHlvdSB3aWxsIG5vcm1hbGx5IGJlIHRyYWNpbmcgZm9yIGlzCjE9b3BlcmF0aW9uIGV4Y2VwdGlvbgoyPXByaXZpbGVnZWQgb3BlcmF0aW9uIGV4Y2VwdGlvbgo0PXByb3RlY3Rpb24gZXhjZXB0aW9uCjU9YWRkcmVzc2luZyBleGNlcHRpb24KNj1zcGVjaWZpY2F0aW9uIGV4Y2VwdGlvbgoxMD1zZWdtZW50IHRyYW5zbGF0aW9uIGV4Y2VwdGlvbgoxMT1wYWdlIHRyYW5zbGF0aW9uIGV4Y2VwdGlvbgoKVGhlIGZ1bGwgbGlzdCBvZiB0aGVzZSBpcyBvbiBwYWdlIDIyIG9mIHRoZSBjdXJyZW50IHMvMzkwIFJlZmVyZW5jZSBTdW1tYXJ5LgplLmcuCnRyIHByb2cgMTAgd2lsbCB0cmFjZSBzZWdtZW50IHRyYW5zbGF0aW9uIGV4Y2VwdGlvbnMuCnRyIHByb2cgb24gaXRzIG93biB3aWxsIHRyYWNlIGFsbCBwcm9ncmFtIGludGVycnVwdGlvbiBjb2Rlcy4KClRyYWNlIFNldHMKLS0tLS0tLS0tLQpPbiBzdGFydGluZyBWTSB5b3UgYXJlIGluaXRpYWxseSBpbiB0aGUgSU5JVElBTCB0cmFjZSBzZXQuCllvdSBjYW4gZG8gYSBRIFRSIHRvIHZlcmlmeSB0aGlzLgpJZiB5b3UgaGF2ZSBhIGNvbXBsZXggdHJhY2luZyBzaXR1YXRpb24gd2hlcmUgeW91IHdpc2ggdG8gd2FpdCBmb3IgaW5zdGFuY2UgCnRpbGwgYSBkcml2ZXIgaXMgb3BlbiBiZWZvcmUgeW91IHN0YXJ0IHRyYWNpbmcgSU8sIGJ1dCBrbm93IGluIHlvdXIKaGVhcnQgdGhhdCB5b3UgYXJlIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBzZXZlcmFsIHJ1bnMgdGhyb3VnaCB0aGUgY29kZSB0aWxsIHlvdQpoYXZlIGEgY2x1ZSB3aGF0cyBnb2luZyBvbi4gCgpXaGF0IHlvdSBjYW4gZG8gaXMKVFIgSSBQU1dBIDxEcml2ZXIgb3BlbiBhZGRyZXNzPgpoaXQgYiB0byBjb250aW51ZSB0aWxsIGJyZWFrcG9pbnQKcmVhY2ggdGhlIGJyZWFrcG9pbnQKbm93IGRvIHlvdXIKVFIgR09UTyBCIApUUiBJTyA3YzA4LTdjMDkgaW5zdCBpbnQgcnVuIApvciB3aGF0ZXZlciB0aGUgSU8gY2hhbm5lbHMgeW91IHdpc2ggdG8gdHJhY2UgYXJlICYgaGl0IGIKClRvIGdvdCBiYWNrIHRvIHRoZSBpbml0aWFsIHRyYWNlIHNldCBkbwpUUiBHT1RPIElOSVRJQUwKJiB0aGUgVFIgSSBQU1dBIDxEcml2ZXIgb3BlbiBhZGRyZXNzPiB3aWxsIGJlIHRoZSBvbmx5IGFjdGl2ZSBicmVha3BvaW50IGFnYWluLgoKClRyYWNpbmcgbGludXggc3lzY2FsbHMgdW5kZXIgVk0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTeXNjYWxscyBhcmUgaW1wbGVtZW50ZWQgb24gTGludXggZm9yIFMzOTAgYnkgdGhlIFN1cGVydmlzb3IgY2FsbCBpbnN0cnVjdGlvbiAoU1ZDKSB0aGVyZSAyNTYgCnBvc3NpYmlsaXRpZXMgb2YgdGhlc2UgYXMgdGhlIGluc3RydWN0aW9uIGlzIG1hZGUgdXAgb2YgYSAgMHhBIG9wY29kZSAmIHRoZSBzZWNvbmQgYnl0ZSBiZWluZwp0aGUgc3lzY2FsbCBudW1iZXIuIFRoZXkgYXJlIHRyYWNlZCB1c2luZyB0aGUgc2ltcGxlIGNvbW1hbmQuClRSIFNWQyAgPE9wdGlvbmFsIHZhbHVlIG9yIHJhbmdlPgp0aGUgc3lzY2FsbHMgYXJlIGRlZmluZWQgaW4gbGludXgvaW5jbHVkZS9hc20tczM5MC91bmlzdGQuaAplLmcuIHRvIHRyYWNlIGFsbCBmaWxlIG9wZW5zIGp1c3QgZG8KVFIgU1ZDIDUgKCBhcyB0aGlzIGlzIHRoZSBzeXNjYWxsIG51bWJlciBvZiBvcGVuICkKCgpTTVAgU3BlY2lmaWMgY29tbWFuZHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRvIGZpbmQgb3V0IGhvdyBtYW55IGNwdXMgeW91IGhhdmUKUSBDUFVTIGRpc3BsYXlzIGFsbCB0aGUgQ1BVJ3MgYXZhaWxhYmxlIHRvIHlvdXIgdmlydHVhbCBtYWNoaW5lClRvIGZpbmQgdGhlIGNwdSB0aGF0IHRoZSBjdXJyZW50IGNwdSBWTSBkZWJ1Z2dlciBjb21tYW5kcyBhcmUgYmVpbmcgZGlyZWN0ZWQgYXQgZG8KUSBDUFUgdG8gY2hhbmdlIHRoZSBjdXJyZW50IGNwdSBjcHUgVk0gZGVidWdnZXIgY29tbWFuZHMgYXJlIGJlaW5nIGRpcmVjdGVkIGF0IGRvCkNQVSA8ZGVzaXJlZCBjcHUgbm8+CgpPbiBhIFNNUCBndWVzdCBpc3N1ZSBhIGNvbW1hbmQgdG8gYWxsIENQVXMgdHJ5IHByZWZpeGluZyB0aGUgY29tbWFuZCB3aXRoIGNwdSBhbGwuClRvIGlzc3VlIGEgY29tbWFuZCB0byBhIHBhcnRpY3VsYXIgY3B1IHRyeSBjcHUgPGNwdSBudW1iZXI+IGUuZy4KQ1BVIDAxIFRSIEkgUiAyMDAwLjMwMDAKSWYgeW91IGFyZSBydW5uaW5nIG9uIGEgZ3Vlc3Qgd2l0aCBzZXZlcmFsIGNwdXMgJiB5b3UgaGF2ZSBhIElPIHJlbGF0ZWQgcHJvYmxlbQomIGNhbm5vdCBmb2xsb3cgdGhlIGZsb3cgb2YgY29kZSBidXQgeW91IGtub3cgaXQgaXNudCBzbXAgcmVsYXRlZC4KZnJvbSB0aGUgYmFzaCBwcm9tcHQgaXNzdWUKc2h1dGRvd24gLWggbm93IG9yIGhhbHQuCmRvIGEgUSBDUFVTIHRvIGZpbmQgb3V0IGhvdyBtYW55IGNwdXMgeW91IGhhdmUKZGV0YWNoIGVhY2ggb25lIG9mIHRoZW0gZnJvbSBjcCBleGNlcHQgY3B1IDAgCmJ5IGlzc3VpbmcgYSAKREVUQUNIIENQVSAwMS0obnVtYmVyIG9mIGNwdXMgaW4gY29uZmlndXJhdGlvbikKJiBib290IGxpbnV4IGFnYWluLgpUUiBTSUdQIHdpbGwgdHJhY2UgaW50ZXIgcHJvY2Vzc29yIHNpZ25hbCBwcm9jZXNzb3IgaW5zdHJ1Y3Rpb25zLgpERUZJTkUgQ1BVIDAxLShudW1iZXIgaW4gY29uZmlndXJhdGlvbikgCndpbGwgZ2V0IHlvdXIgZ3Vlc3RzIGNwdXMgYmFjay4KCgpIZWxwIGZvciBkaXNwbGF5aW5nIGFzY2lpIHRleHRzdHJpbmdzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KT24gdGhlIHZlcnkgbGF0ZXN0IFZNIE51Y2xldXMnZXMgVk0gY2FuIG5vdyBkaXNwbGF5IGFzY2lpCiggdGhhbmtzIE5lYWxlIGZvciB0aGUgaGludCApIGJ5IGRvaW5nCkQgVFg8bG93YWRkcj4uPGxlbj4KZS5nLgpEIFRYMC4xMDAKCkFsdGVybmF0aXZlbHkKPT09PT09PT09PT09PQpVbmRlciBvbGRlciBWTSBkZWJ1Z2dlcnMgKCBJIGxvdmUgRUJESUMgdG9vICkgeW91IGNhbiB1c2UgdGhpcyBsaXR0bGUgcHJvZ3JhbSBJIHdyb3RlIHdoaWNoCndpbGwgY29udmVydCBhIGNvbW1hbmQgbGluZSBvZiBoZXggZGlnaXRzIHRvIGFzY2lpIHRleHQgd2hpY2ggY2FuIGJlIGNvbXBpbGVkIHVuZGVyIGxpbnV4ICYgCnlvdSBjYW4gY29weSB0aGUgaGV4IGRpZ2l0cyBmcm9tIHlvdXIgeDMyNzAgdGVybWluYWwgdG8geW91ciB4dGVybSBpZiB5b3UgYXJlIGRlYnVnZ2luZwpmcm9tIGEgbGludXhib3guCgpUaGlzIGlzIHF1aXRlIHVzZWZ1bCB3aGVuIGxvb2tpbmcgYXQgYSBwYXJhbWV0ZXIgcGFzc2VkIGluIGFzIGEgdGV4dCBzdHJpbmcKdW5kZXIgVk0gKCB1bmxlc3MgeW91IGFyZSBnb29kIGF0IGRlY29kaW5nIEFTQ0lJIGluIHlvdXIgaGVhZCApLgoKZS5nLiBjb25zaWRlciB0cmFjaW5nIGFuIG9wZW4gc3lzY2FsbApUUiBTVkMgNQpXZSBoYXZlIHN0b3BwZWQgYXQgYSBicmVha3BvaW50CjAwMDE1MUIwJyBTVkMgICAwQTA1ICAgICAtPiAwMDAxOTA5QScgICBDQyAwCgpEIDIwLjggdG8gY2hlY2sgdGhlIFNWQyBvbGQgcHN3IGluIHRoZSBwcmVmaXggYXJlYSAmIHNlZSB3YXMgaXQgZnJvbSB1c2Vyc3BhY2UKKCBmb3IgdGhlIGxheW91dCBvZiB0aGUgcHJlZml4IGFyZWEgY29uc3VsdCBQMTggb2YgdGhlIHMvMzkwIDM5MCBSZWZlcmVuY2UgU3VtbWFyeSAKaWYgeW91IGhhdmUgaXQgYXZhaWxhYmxlICkuClYwMDAwMDAyMCAgMDcwQzIwMDAgODAwMTUxQjIKVGhlIHByb2JsZW0gc3RhdGUgYml0IHdhc24ndCBzZXQgJiAgaXQncyBhbHNvIHRvbyBlYXJseSBpbiB0aGUgYm9vdCBzZXF1ZW5jZQpmb3IgaXQgdG8gYmUgYSB1c2Vyc3BhY2UgU1ZDIGlmIGl0IHdhcyB3ZSB3b3VsZCBoYXZlIHRvIHRlbXBvcmFyaWx5IHN3aXRjaCB0aGUgCnBzdyB0byB1c2VyIHNwYWNlIGFkZHJlc3Npbmcgc28gd2UgY291bGQgZ2V0IGF0IHRoZSBmaXJzdCBwYXJhbWV0ZXIgb2YgdGhlIG9wZW4gaW4KZ3ByMi4KTmV4dCBkbyBhIApEIEcyCkdQUiAgMiA9ICAwMDAxNENCNApOb3cgZGlzcGxheSB3aGF0IGdwcjIgaXMgcG9pbnRpbmcgdG8KRCAwMDAxNENCNC4yMApWMDAwMTRDQjQgIDJGNjQ2NTc2IDJGNjM2RjZFIDczNkY2QzY1IDAwMDAxQkY1ClYwMDAxNENDNCAgRkMwMDAxNEMgQjQwMDEwMDEgRTAwMDEwMDAgQjgwNzA3MDcKTm93IGNvcHkgdGhlIHRleHQgdGlsbCB0aGUgZmlyc3QgMDAgaGV4ICggd2hpY2ggaXMgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCnRvIGFuIHh0ZXJtICYgZG8gaGV4MmFzY2lpIG9uIGl0LgpoZXgyYXNjaWkgMkY2NDY1NzYgMkY2MzZGNkUgNzM2RjZDNjUgMDAgCm91dHB1dHMKRGVjb2RlZCBIZXg6PS8gZCBlIHYgLyBjIG8gbiBzIG8gbCBlIDB4MDAgCldlIHdlcmUgb3BlbmluZyB0aGUgY29uc29sZSBkZXZpY2UsCgpZb3UgY2FuIGNvbXBpbGUgdGhlIGNvZGUgYmVsb3cgeW91cnNlbGYgZm9yIHByYWN0aWNlIDotKSwKLyoKICogICAgaGV4MmFzY2lpLmMKICogICAgYSB1c2VmdWwgbGl0dGxlIHRvb2wgZm9yIGNvbnZlcnRpbmcgYSBoZXhhZGVjaW1hbCBjb21tYW5kIGxpbmUgdG8gYXNjaWkKICoKICogICAgQXV0aG9yKHMpOiBEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pCiAqICAgIChDKSAyMDAwIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24uCiAqLyAgIAojaW5jbHVkZSA8c3RkaW8uaD4KCmludCBtYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSkKewogIGludCBjbnQxLGNudDIsbGVuLHRvZ2dsZT0wOwogIGludCBzdGFydGNudD0xOwogIHVuc2lnbmVkIGNoYXIgYyxoZXg7CiAgCiAgaWYoYXJnYz4xJiYoc3RyY21wKGFyZ3ZbMV0sIi1hIik9PTApKQogICAgIHN0YXJ0Y250PTI7CiAgcHJpbnRmKCJEZWNvZGVkIEhleDo9Iik7CiAgZm9yKGNudDE9c3RhcnRjbnQ7Y250MTxhcmdjO2NudDErKykKICB7CiAgICBsZW49c3RybGVuKGFyZ3ZbY250MV0pOwogICAgZm9yKGNudDI9MDtjbnQyPGxlbjtjbnQyKyspCiAgICB7CiAgICAgICBjPWFyZ3ZbY250MV1bY250Ml07CiAgICAgICBpZihjPj0nMCcmJmM8PSc5JykKCSAgYz1jLScwJzsKICAgICAgIGlmKGM+PSdBJyYmYzw9J0YnKQoJICBjPWMtJ0EnKzEwOwogICAgICAgaWYoYz49J2EnJiZjPD0nZicpCgkgIGM9Yy0nYScrMTA7CiAgICAgICBzd2l0Y2godG9nZ2xlKQogICAgICAgewoJICBjYXNlIDA6CgkgICAgIGhleD1jPDw0OwoJICAgICB0b2dnbGU9MTsKCSAgYnJlYWs7CgkgIGNhc2UgMToKCSAgICAgaGV4Kz1jOwoJICAgICBpZihoZXg8MzJ8fGhleD4xMjcpCgkgICAgIHsKCQlpZihzdGFydGNudD09MSkKCQkgICBwcmludGYoIjB4JTAyWCAiLChpbnQpaGV4KTsKCQllbHNlCgkJICAgcHJpbnRmKCIuIik7CgkgICAgIH0KCSAgICAgZWxzZQoJICAgICB7CgkgICAgICAgcHJpbnRmKCIlYyIsaGV4KTsKCSAgICAgICBpZihzdGFydGNudD09MSkKCQkgIHByaW50ZigiICIpOwoJICAgICB9CgkgICAgIHRvZ2dsZT0wOwoJICBicmVhazsKICAgICAgIH0KICAgIH0KICB9CiAgcHJpbnRmKCJcbiIpOwp9CgoKCgpTdGFjayB0cmFjaW5nIHVuZGVyIFZNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQSBiYXNpYyBiYWNrdHJhY2UKLS0tLS0tLS0tLS0tLS0tLS0KCkhlcmUgYXJlIHRoZSB0cmlja3MgSSB1c2UgOSBvdXQgb2YgMTAgdGltZXMgaXQgd29ya3MgcHJldHR5IHdlbGwsCgpXaGVuIHlvdXIgYmFja2NoYWluIHJlYWNoZXMgYSBkZWFkIGVuZAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaGlzIGNhbiBoYXBwZW4gd2hlbiBhbiBleGNlcHRpb24gaGFwcGVucyBpbiB0aGUga2VybmVsICYgdGhlIGtlcm5lbCBpcyBlbnRlcmVkIHR3aWNlCmlmIHlvdSByZWFjaCB0aGUgTlVMTCBwb2ludGVyIGF0IHRoZSBlbmQgb2YgdGhlIGJhY2sgY2hhaW4geW91IHNob3VsZCBiZQphYmxlIHRvIHNuaWZmIGZ1cnRoZXIgYmFjayBpZiB5b3UgZm9sbG93IHRoZSBmb2xsb3dpbmcgdHJpY2tzLgoxKSBBIGtlcm5lbCBhZGRyZXNzIHNob3VsZCBiZSBlYXN5IHRvIHJlY29nbmlzZSBzaW5jZSBpdCBpcyBpbgpwcmltYXJ5IHNwYWNlICYgdGhlIHByb2JsZW0gc3RhdGUgYml0IGlzbid0IHNldCAmIGFsc28KVGhlIEhpIGJpdCBvZiB0aGUgYWRkcmVzcyBpcyBzZXQuCjIpIEFub3RoZXIgYmFja2NoYWluIHNob3VsZCBhbHNvIGJlIGVhc3kgdG8gcmVjb2duaXNlIHNpbmNlIGl0IGlzIGFuIAphZGRyZXNzIHBvaW50aW5nIHRvIGFub3RoZXIgYWRkcmVzcyBhcHByb3hpbWF0ZWx5IDEwMCBieXRlcyBvciAweDcwIGhleApiZWhpbmQgdGhlIGN1cnJlbnQgc3RhY2twb2ludGVyLgoKCkhlcmUgaXMgc29tZSBwcmFjdGljZS4KYm9vdCB0aGUga2VybmVsICYgaGl0IFBBMSBhdCBzb21lIHJhbmRvbSB0aW1lCmQgZyB0byBkaXNwbGF5IHRoZSBncHJzLCB0aGlzIHNob3VsZCBkaXNwbGF5IHNvbWV0aGluZyBsaWtlCkdQUiAgMCA9ICAwMDAwMDAwMSAgMDAxNTYwMTggIDAwMTQzNTlDICAwMDAwMDAwMApHUFIgIDQgPSAgMDAwMDAwMDEgIDAwMUI4ODg4ICAwMDAwMDNFMCAgMDAwMDAwMDAKR1BSICA4ID0gIDAwMTAwMDgwICAwMDEwMDA4NCAgMDAwMDAwMDAgIDAwMEZFMDAwCkdQUiAxMiA9ICAwMDAxMDQwMCAgODAwMUIyREMgIDgwMDFCMzZBICAwMDBGRkVEOApOb3RlIHRoYXQgR1BSMTQgaXMgYSByZXR1cm4gYWRkcmVzcyBidXQgYXMgd2UgYXJlIHJlYWwgbWVuIHdlIGFyZSBnb2luZyB0bwp0cmFjZSB0aGUgc3RhY2suCmRpc3BsYXkgMHg0MCBieXRlcyBhZnRlciB0aGUgc3RhY2sgcG9pbnRlci4KClYwMDBGRkVEOCAgMDAwRkZGMzggODAwMUI4MzggODAwMTRDOEUgMDAwRkZGMzgKVjAwMEZGRUU4ICAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDNFMCAwMDAwMDAwMApWMDAwRkZFRjggIDAwMTAwMDgwIDAwMTAwMDg0IDAwMDAwMDAwIDAwMEZFMDAwClYwMDBGRkYwOCAgMDAwMTA0MDAgODAwMUIyREMgODAwMUIzNkEgMDAwRkZFRDgKCgpBaCBub3cgbG9vayBhdCB3aGF0cyBpbiBzcCs1NiAoc3ArMHgzOCkgdGhpcyBpcyA4MDAxQjM2QSBvdXIgc2F2ZWQgcjE0IGlmCnlvdSBsb29rIGFib3ZlIGF0IG91ciBzdGFja2ZyYW1lICYgYWxzbyBhZ3JlZXMgd2l0aCBHUFIxNC4KCm5vdyBiYWNrY2hhaW4gCmQgMDAwRkZGMzguNDAKd2Ugbm93IGFyZSB0YWtpbmcgdGhlIGNvbnRlbnRzIG9mIFNQIHRvIGdldCBvdXIgZmlyc3QgYmFja2NoYWluLgoKVjAwMEZGRjM4ICAwMDBGRkZBMCAwMDAwMDAwMCAwMDAxNDk5NSAwMDE0NzA5NApWMDAwRkZGNDggIDAwMTQ3MDkwIDAwMTQ3MEEwIDAwMDAwM0UwIDAwMDAwMDAwClYwMDBGRkY1OCAgMDAxMDAwODAgMDAxMDAwODQgMDAwMDAwMDAgMDAxQkYxRDAKVjAwMEZGRjY4ICAwMDAxMDQwMCA4MDAxNDlCQSA4MDAxNENBNiAwMDBGRkYzOAoKVGhpcyBkaXNwbGF5cyBhIDJuZCByZXR1cm4gYWRkcmVzcyBvZiA4MDAxNENBNgoKbm93IGRvIGQgMDAwRkZGQTAuNDAgZm9yIG91ciAzcmQgYmFja2NoYWluCgpWMDAwRkZGQTAgIDA0QjUyMDAyIDAwMDExMDdGIDAwMDAwMDAwIDAwMDAwMDAwClYwMDBGRkZCMCAgMDAwMDAwMDAgMDAwMDAwMDAgRkYwMDAwMDAgMDAwMTEwN0YKVjAwMEZGRkMwICAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMApWMDAwRkZGRDAgIDAwMDEwNDAwIDgwMDEwODAyIDgwMDEwODVBIDAwMEZGRkEwCgoKb3VyIDNyZCByZXR1cm4gYWRkcmVzcyBpcyA4MDAxMDg1QQoKYXMgdGhlIDA0QjUyMDAyIGxvb2tzIHN1c3BpY2lvdXNseSBsaWtlIHJ1YmJpc2ggaXQgaXMgZmFpciB0byBhc3N1bWUgdGhhdCB0aGUga2VybmVsIGVudHJ5IHJvdXRpbmVzCmZvciB0aGUgc2FrZSBvZiBvcHRpbWlzYXRpb24gZG9udCBzZXQgdXAgYSBiYWNrY2hhaW4uCgpub3cgbG9vayBhdCBTeXN0ZW0ubWFwIHRvIHNlZSBpZiB0aGUgYWRkcmVzc2VzIG1ha2UgYW55IHNlbnNlLgoKZ3JlcCAtaSAwMDAxYjMgU3lzdGVtLm1hcApvdXRwdXRzIGFtb25nIG90aGVyIHRoaW5ncwowMDAxYjMwNCBUIGNwdV9pZGxlIApzbyA4MDAxQjM2QQppcyBjcHVfaWRsZSsweDY2ICggcXVpZXQgdGhlIGNwdSBpcyBhc2xlZXAsIGRvbid0IHdha2UgaXQgKQoKCmdyZXAgLWkgMDAwMTQgU3lzdGVtLm1hcCAKcHJvZHVjZXMgYW1vbmcgb3RoZXIgdGhpbmdzCjAwMDE0YTc4IFQgc3RhcnRfa2VybmVsICAKc28gMDAxNENBNiBpcyBzdGFydF9rZXJuZWwrc29tZSBoZXggbnVtYmVyIEkgY2FuJ3QgYWRkIGluIG15IGhlYWQuCgpncmVwIC1pIDAwMTA4IFN5c3RlbS5tYXAgCnRoaXMgcHJvZHVjZXMKMDAwMTA4MDAgVCBfc3RleHQKc28gICA4MDAxMDg1QSBpcyBfc3RleHQrMHg1YQoKQ29uZ3JhdHMgeW91J3ZlIGRvbmUgeW91ciBmaXJzdCBiYWNrY2hhaW4uCgoKCnMvMzkwICYgei9BcmNoaXRlY3R1cmUgSU8gT3ZlcnZpZXcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKSSBhbSBub3QgZ29pbmcgdG8gZ2l2ZSBhIGNvdXJzZSBpbiAzOTAgSU8gYXJjaGl0ZWN0dXJlIGFzIHRoaXMgd291bGQgdGFrZSBtZSBxdWl0ZSBhCndoaWxlICYgSSdtIG5vIGV4cGVydC4gSW5zdGVhZCBJJ2xsIGdpdmUgYSAzOTAgSU8gYXJjaGl0ZWN0dXJlIHN1bW1hcnkgZm9yIER1bW1pZXMgaWYgeW91IGhhdmUgCnRoZSBzLzM5MCBwcmluY2lwbGVzIG9mIG9wZXJhdGlvbiBhdmFpbGFibGUgcmVhZCB0aGlzIGluc3RlYWQuIElmIG5vdGhpbmcgZWxzZSB5b3UgbWF5IGZpbmQgYSBmZXcgCnVzZWZ1bCBrZXl3b3JkcyBpbiBoZXJlICYgYmUgYWJsZSB0byB1c2UgdGhlbSBvbiBhIHdlYiBzZWFyY2ggZW5naW5lIGxpa2UgYWx0YXZpc3RhIHRvIGZpbmQgCm1vcmUgdXNlZnVsIGluZm9ybWF0aW9uLgoKVW5saWtlIG90aGVyIGJ1cyBhcmNoaXRlY3R1cmVzIG1vZGVybiAzOTAgc3lzdGVtcyBkbyB0aGVpciBJTyB1c2luZyBtb3N0bHkKZmlicmUgb3B0aWNzICYgZGV2aWNlcyBzdWNoIGFzIHRhcGVzICYgZGlza3MgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIHNldmVyYWwgbWFpbmZyYW1lcywKYWxzbyBTMzkwIGNhbiBzdXBwb3J0IHVwdG8gNjU1MzYgZGV2aWNlcyB3aGlsZSBhIGhpZ2ggZW5kIFBDIGJhc2VkIHN5c3RlbSBtaWdodCBiZSBjaG9raW5nIAp3aXRoIGFyb3VuZCA2NC4gSGVyZSBpcyBzb21lIG9mIHRoZSBjb21tb24gSU8gdGVybWlub2xvZ3kKClN1YmNoYW5uZWw6ClRoaXMgaXMgdGhlIGxvZ2ljYWwgbnVtYmVyIG1vc3QgSU8gY29tbWFuZHMgdXNlIHRvIHRhbGsgdG8gYW4gSU8gZGV2aWNlIHRoZXJlIGNhbiBiZSB1cHRvCjB4MTAwMDAgKDY1NTM2KSBvZiB0aGVzZSBpbiBhIGNvbmZpZ3VyYXRpb24gdHlwaWNhbGx5IHRoZXJlIGlzIGEgZmV3IGh1bmRyZWQuIFVuZGVyIFZNCmZvciBzaW1wbGljaXR5IHRoZXkgYXJlIGFsbG9jYXRlZCBjb250aWd1b3VzbHksIGhvd2V2ZXIgb24gdGhlIG5hdGl2ZSBoYXJkd2FyZSB0aGV5IGFyZSBub3QKdGhleSB0eXBpY2FsbHkgc3RheSBjb25zaXN0ZW50IGJldHdlZW4gYm9vdHMgcHJvdmlkZWQgbm8gbmV3IGhhcmR3YXJlIGlzIGluc2VydGVkIG9yIHJlbW92ZWQuClVuZGVyIExpbnV4IGZvciAzOTAgd2UgdXNlIHRoZXNlIGFzIElSUSdzICYgYWxzbyB3aGVuIGlzc3VpbmcgYW4gSU8gY29tbWFuZCAoQ0xFQVIgU1VCQ0hBTk5FTCwKSEFMVCBTVUJDSEFOTkVMLE1PRElGWSBTVUJDSEFOTkVMLFJFU1VNRSBTVUJDSEFOTkVMLFNUQVJUIFNVQkNIQU5ORUwsU1RPUkUgU1VCQ0hBTk5FTCAmIApURVNUIFNVQkNIQU5ORUwgKSB3ZSB1c2UgdGhpcyBhcyB0aGUgSUQgb2YgdGhlIGRldmljZSB3ZSB3aXNoIHRvIHRhbGsgdG8sIHRoZSBtb3N0CmltcG9ydGFudCBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgYXJlIFNUQVJUIFNVQkNIQU5ORUwgKCB0byBzdGFydCBJTyApLCBURVNUIFNVQkNIQU5ORUwgKCB0byBjaGVjawp3aGV0aGVyIHRoZSBJTyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ICksICYgSEFMVCBTVUJDSEFOTkVMICggdG8ga2lsbCBJTyApLCBhIHN1YmNoYW5uZWwKY2FuIGhhdmUgdXAgdG8gOCBjaGFubmVsIHBhdGhzIHRvIGEgZGV2aWNlIHRoaXMgb2ZmZXJzIHJlZHVuYW5jeSBpZiBvbmUgaXMgbm90IGF2YWlsYWJsZS4KCgpEZXZpY2UgTnVtYmVyOgpUaGlzIG51bWJlciByZW1haW5zIHN0YXRpYyAmIElzIGNsb3NlbHkgdGllZCB0byB0aGUgaGFyZHdhcmUsIHRoZXJlIGFyZSA2NTUzNiBvZiB0aGVzZQphbHNvIHRoZXkgYXJlIG1hZGUgdXAgb2YgYSBDSFBJRCAoIENoYW5uZWwgUGF0aCBJRCwgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgOCBiaXRzICkgCiYgYW5vdGhlciBsc2IgOCBiaXRzLiBUaGVzZSByZW1haW4gc3RhdGljIGV2ZW4gaWYgbW9yZSBkZXZpY2VzIGFyZSBpbnNlcnRlZCBvciByZW1vdmVkCmZyb20gdGhlIGhhcmR3YXJlLCB0aGVyZSBpcyBhIDEgdG8gMSBtYXBwaW5nIGJldHdlZW4gU3ViY2hhbm5lbHMgJiBEZXZpY2UgTnVtYmVycyBwcm92aWRlZApkZXZpY2VzIGFyZW50IGluc2VydGVkIG9yIHJlbW92ZWQuCgpDaGFubmVsIENvbnRyb2wgV29yZHM6CkNDV1MgYXJlIGxpbmtlZCBsaXN0cyBvZiBpbnN0cnVjdGlvbnMgaW5pdGlhbGx5IHBvaW50ZWQgdG8gYnkgYW4gb3BlcmF0aW9uIHJlcXVlc3QgYmxvY2sgKE9SQiksCndoaWNoIGlzIGluaXRpYWxseSBnaXZlbiB0byBTdGFydCBTdWJjaGFubmVsIChTU0NIKSBjb21tYW5kIGFsb25nIHdpdGggdGhlIHN1YmNoYW5uZWwgbnVtYmVyCmZvciB0aGUgSU8gc3Vic3lzdGVtIHRvIHByb2Nlc3Mgd2hpbGUgdGhlIENQVSBjb250aW51ZXMgZXhlY3V0aW5nIG5vcm1hbCBjb2RlLgpUaGVzZSBjb21lIGluIHR3byBmbGF2b3VycywgRm9ybWF0IDAgKCAyNCBiaXQgZm9yIGJhY2t3YXJkICkKY29tcGF0aWJpbGl0eSAmIEZvcm1hdCAxICggMzEgYml0ICkuIFRoZXNlIGFyZSB0eXBpY2FsbHkgdXNlZCB0byBpc3N1ZSByZWFkICYgd3JpdGUgCiggJiBtYW55IG90aGVyIGluc3RydWN0aW9ucyApIHRoZXkgY29uc2lzdCBvZiBhIGxlbmd0aCBmaWVsZCAmIGFuIGFic29sdXRlIGFkZHJlc3MgZmllbGQuCkZvciBlYWNoIElPIHR5cGljYWxseSBnZXQgMSBvciAyIGludGVycnVwdHMgb25lIGZvciBjaGFubmVsIGVuZCAoIHByaW1hcnkgc3RhdHVzICkgd2hlbiB0aGUKY2hhbm5lbCBpcyBpZGxlICYgdGhlIHNlY29uZCBmb3IgZGV2aWNlIGVuZCAoIHNlY29uZGFyeSBzdGF0dXMgKSBzb21ldGltZXMgeW91IGdldCBib3RoCmNvbmN1cnJlbnRseSwgeW91IGNoZWNrIGhvdyB0aGUgSU8gd2VudCBvbiBieSBpc3N1aW5nIGEgVEVTVCBTVUJDSEFOTkVMIGF0IGVhY2ggaW50ZXJydXB0LApmcm9tIHdoaWNoIHlvdSByZWNlaXZlIGFuIEludGVycnVwdGlvbiByZXNwb25zZSBibG9jayAoSVJCKS4gSWYgeW91IGdldCBjaGFubmVsICYgZGV2aWNlIGVuZCAKc3RhdHVzIGluIHRoZSBJUkIgd2l0aG91dCBjaGFubmVsIGNoZWNrcyBldGMuIHlvdXIgSU8gcHJvYmFibHkgd2VudCBva2F5LiBJZiB5b3UgZGlkbid0IHlvdQpwcm9iYWJseSBuZWVkIGEgZG9jdG9yIHRvIGV4YW1pbmUgdGhlIElSQiAmIGV4dGVuZGVkIHN0YXR1cyB3b3JkIGV0Yy4KSWYgYW4gZXJyb3Igb2NjdXJzLCBtb3JlIHNvcGhpc3RvY2F0ZWQgY29udHJvbCB1bml0cyBoYXZlIGEgZmFjaXRpdHkga25vd24gYXMKY29uY3VycmVudCBzZW5zZSB0aGlzIG1lYW5zIHRoYXQgaWYgYW4gZXJyb3Igb2NjdXJzIEV4dGVuZGVkIHNlbnNlIGluZm9ybWF0aW9uIHdpbGwKYmUgcHJlc2VudGVkIGluIHRoZSBFeHRlbmRlZCBzdGF0dXMgd29yZCBpbiB0aGUgSVJCIGlmIG5vdCB5b3UgaGF2ZSB0byBpc3N1ZSBhCnN1YnNlcXVlbnQgU0VOU0UgQ0NXIGNvbW1hbmQgYWZ0ZXIgdGhlIHRlc3Qgc3ViY2hhbm5lbC4gCgoKVFBJKCBUZXN0IHBlbmRpbmcgaW50ZXJydXB0KSBjYW4gYWxzbyBiZSB1c2VkIGZvciBwb2xsZWQgSU8gYnV0IGluIG11bHRpdGFza2luZyBtdWx0aXByb2Nlc3NvcgpzeXN0ZW1zIGl0IGlzbid0IHJlY29tbWVuZGVkIGV4Y2VwdCBmb3IgY2hlY2tpbmcgc3BlY2lhbCBjYXNlcyAoIGkuZS4gbm9uIGxvb3BpbmcgY2hlY2tzIGZvcgpwZW5kaW5nIElPIGV0Yy4gKS4KClN0b3JlIFN1YmNoYW5uZWwgJiBNb2RpZnkgU3ViY2hhbm5lbCBjYW4gYmUgdXNlZCB0byBleGFtaW5lICYgbW9kaWZ5IG9wZXJhdGluZyBjaGFyYWN0ZXJpc3RpY3MKb2YgYSBzdWJjaGFubmVsICggZS5nLiBjaGFubmVsIHBhdGhzICkuCgpPdGhlciBJTyByZWxhdGVkIFRlcm1zOgpTeXNwbGV4OiBTMzkwJ3MgQ2x1c3RlcmluZyBUZWNobm9sb2d5ClFESU86IFMzOTAncyBuZXcgaGlnaCBzcGVlZCBJTyBhcmNoaXRlY3R1cmUgdG8gc3VwcG9ydCBkZXZpY2VzIHN1Y2ggYXMgZ2lnYWJpdCBldGhlcm5ldCwKdGhpcyBhcmNoaXRlY3R1cmUgaXMgYWxzbyBkZXNpZ25lZCB0byBiZSBmb3J3YXJkIGNvbXBhdGlibGUgd2l0aCB1cCAmIGNvbWluZyA2NCBiaXQgbWFjaGluZXMuCgoKR2VuZXJhbCBDb25jZXB0cyAKCklucHV0IE91dHB1dCBQcm9jZXNzb3JzIChJT1AncykgYXJlIHJlc3BvbnNpYmxlIGZvciBjb21tdW5pY2F0aW5nIGJldHdlZW4KdGhlIG1haW5mcmFtZSBDUFUncyAmIHRoZSBjaGFubmVsICYgcmVsaWV2ZSB0aGUgbWFpbmZyYW1lIENQVSdzIGZyb20gdGhlCmJ1cmRlbiBvZiBjb21tdW5pY2F0aW5nIHdpdGggSU8gZGV2aWNlcyBkaXJlY3RseSwgdGhpcyBhbGxvd3MgdGhlIENQVSdzIHRvIApjb25jZW50cmF0ZSBvbiBkYXRhIHByb2Nlc3NpbmcuIAoKSU9QJ3MgY2FuIHVzZSBvbmUgb3IgbW9yZSBsaW5rcyAoIGtub3duIGFzIGNoYW5uZWwgcGF0aHMgKSB0byB0YWxrIHRvIGVhY2ggCklPIGRldmljZS4gSXQgZmlyc3QgY2hlY2tzIGZvciBwYXRoIGF2YWlsYWJpbGl0eSAmIGNob29zZXMgYW4gYXZhaWxhYmxlIG9uZSwKdGhlbiBzdGFydHMgKCAmIHNvbWV0aW1lcyB0ZXJtaW5hdGVzIElPICkuClRoZXJlIGFyZSB0d28gdHlwZXMgb2YgY2hhbm5lbCBwYXRoIEVTQ09OICYgdGhlIFBhcmFsZWxsIElPIGludGVyZmFjZS4KCklPIGRldmljZXMgYXJlIGF0dGFjaGVkIHRvIGNvbnRyb2wgdW5pdHMsIGNvbnRyb2wgdW5pdHMgcHJvdmlkZSB0aGUKbG9naWMgdG8gaW50ZXJmYWNlIHRoZSBjaGFubmVsIHBhdGhzICYgY2hhbm5lbCBwYXRoIElPIHByb3RvY29scyB0byAKdGhlIElPIGRldmljZXMsIHRoZXkgY2FuIGJlIGludGVncmF0ZWQgd2l0aCB0aGUgZGV2aWNlcyBvciBob3VzZWQgc2VwYXJhdGVseQomIG9mdGVuIHRhbGsgdG8gc2V2ZXJhbCBzaW1pbGFyIGRldmljZXMgKCB0eXBpY2FsIGV4YW1wbGVzIHdvdWxkIGJlIHJhaWQgCmNvbnRyb2xsZXJzIG9yIGEgY29udHJvbCB1bml0IHdoaWNoIGNvbm5lY3RzIHRvIDEwMDAgMzI3MCB0ZXJtaW5hbHMgKS4KCgogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgKy0tLS0tKyArLS0tLS0rICstLS0tLSsgKy0tLS0tKyAgKy0tLS0tLS0tLS0rICArLS0tLS0tLS0tLSsgICB8CiAgICB8IHwgQ1BVIHwgfCBDUFUgfCB8IENQVSB8IHwgQ1BVIHwgIHwgIE1haW4gICAgfCAgfCBFeHBhbmRlZCB8ICAgfAogICAgfCB8ICAgICB8IHwgICAgIHwgfCAgICAgfCB8ICAgICB8ICB8ICBNZW1vcnkgIHwgIHwgIFN0b3JhZ2UgfCAgIHwKICAgIHwgKy0tLS0tKyArLS0tLS0rICstLS0tLSsgKy0tLS0tKyAgKy0tLS0tLS0tLS0rICArLS0tLS0tLS0tLSsgICB8IAogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgICBJT1AgICAgICAgIHwgICAgICBJT1AgICAgICB8ICAgICAgIElPUCAgICAgICAgICAgICAgICAgICAgICB8CiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCAKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKICAgICAgICAgfHwgIEJ1cyAmIFRhZyBDaGFubmVsIFBhdGggICAgICAgICAgICAgICAgICAgICAgfHwgRVNDT04KICAgICAgICAgfHwgID09PT09PT09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgfHwgQ2hhbm5lbAogICAgICAgICB8fCAgfHwgICAgICAgICAgICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICB8fCBQYXRoCiAgICArLS0tLS0tLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0tLSsgICAgICAgICArLS0tLS0tLS0tLSsKICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgfAogICAgfCAgICBDVSAgICB8ICAgICAgICAgICAgICAgfCAgICBDVSAgICB8ICAgICAgICAgfCAgICBDVSAgICB8CiAgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tKyAgICAgICAgICstLS0tLS0tLS0tKwogICAgICAgfCAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgfAorLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0rICAgICAgKy0tLS0tLS0tLS0rICAgKy0tLS0tLS0tLS0rICstLS0tLS0tLS0tKwp8SS9PIERldmljZXwgfEkvTyBEZXZpY2V8ICAgICAgfEkvTyBEZXZpY2V8ICAgfEkvTyBEZXZpY2V8IHxJL08gRGV2aWNlfAorLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0rICAgICAgKy0tLS0tLS0tLS0rICAgKy0tLS0tLS0tLS0rICstLS0tLS0tLS0tKwogIENQVSA9IENlbnRyYWwgUHJvY2Vzc2luZyBVbml0ICAgIAogIEMgPSBDaGFubmVsICAgICAgICAgICAgICAgICAgICAgIAogIElPUCA9IElQIFByb2Nlc3NvciAgICAgICAgICAgICAgIAogIENVID0gQ29udHJvbCBVbml0CgpUaGUgMzkwIElPIHN5c3RlbXMgY29tZSBpbiAyIGZsYXZvdXJzIHRoZSBjdXJyZW50IDM5MCBtYWNoaW5lcyBzdXBwb3J0IGJvdGgKClRoZSBPbGRlciAzNjAgJiAzNzAgSW50ZXJmYWNlLHNvbWV0aW1lcyBjYWxsZWQgdGhlIHBhcmFsZWxsIEkvTyBpbnRlcmZhY2UsCnNvbWV0aW1lcyBjYWxsZWQgQnVzLWFuZCBUYWcgJiBzb21ldGltZXMgT3JpZ2luYWwgRXF1aXBtZW50IE1hbnVmYWN0dXJlcnMKSW50ZXJmYWNlIChPRU1JKS4KClRoaXMgYnl0ZSB3aWRlIHBhcmFsZWxsIGNoYW5uZWwgcGF0aC9idXMgaGFzIHBhcml0eSAmIGRhdGEgb24gdGhlICJCdXMiIGNhYmxlIAomIGNvbnRyb2wgbGluZXMgb24gdGhlICJUYWciIGNhYmxlLiBUaGVzZSBjYW4gb3BlcmF0ZSBpbiBieXRlIG11bHRpcGxleCBtb2RlIGZvcgpzaGFyaW5nIGJldHdlZW4gc2V2ZXJhbCBzbG93IGRldmljZXMgb3IgYnVyc3QgbW9kZSAmIG1vbm9wb2xpemUgdGhlIGNoYW5uZWwgZm9yIHRoZQp3aG9sZSBidXJzdC4gVXB0byAyNTYgZGV2aWNlcyBjYW4gYmUgYWRkcmVzc2VkICBvbiBvbmUgb2YgdGhlc2UgY2FibGVzLiBUaGVzZSBjYWJsZXMgYXJlCmFib3V0IG9uZSBpbmNoIGluIGRpYW1ldGVyLiBUaGUgbWF4aW11bSB1bmV4dGVuZGVkIGxlbmd0aCBzdXBwb3J0ZWQgYnkgdGhlc2UgY2FibGVzIGlzCjEyNSBNZXRlcnMgYnV0IHRoaXMgY2FuIGJlIGV4dGVuZGVkIHVwIHRvIDJrbSB3aXRoIGEgZmlicmUgb3B0aWMgY2hhbm5lbCBleHRlbmRlZCAKc3VjaCBhcyBhIDMwNDQuIFRoZSBtYXhpbXVtIGJ1cnN0IHNwZWVkIHN1cHBvcnRlZCBpcyA0LjUgbWVnYWJ5dGVzIHBlciBzZWNvbmQgaG93ZXZlcgpzb21lIHJlYWxseSBvbGQgcHJvY2Vzc29ycyBzdXBwb3J0IG9ubHkgdHJhbnNmZXIgcmF0ZXMgb2YgMy4wLCAyLjAgJiAxLjAgTUIvc2VjLgpPbmUgb2YgdGhlc2UgcGF0aHMgY2FuIGJlIGRhaXN5IGNoYWluZWQgdG8gdXAgdG8gOCBjb250cm9sIHVuaXRzLgoKCkVTQ09OIGlmIGZpYnJlIG9wdGljIGl0IGlzIGFsc28gY2FsbGVkIEZJQ09OIApXYXMgaW50cm9kdWNlZCBieSBJQk0gaW4gMTk5MC4gSGFzIDIgZmlicmUgb3B0aWMgY2FibGVzICYgdXNlcyBlaXRoZXIgbGVkcyBvciBsYXNlcnMKZm9yIGNvbW11bmljYXRpb24gYXQgYSBzaWduYWxpbmcgcmF0ZSBvZiB1cHRvIDIwMCBtZWdhYml0cy9zZWMuIEFzIDEwYml0cyBhcmUgdHJhbnNmZXJyZWQKZm9yIGV2ZXJ5IDggYml0cyBpbmZvIHRoaXMgZHJvcHMgdG8gMTYwIG1lZ2FiaXRzL3NlYyAmIHRvIDE4LjYgTWVnYWJ5dGVzL3NlYyBvbmNlCmNvbnRyb2wgaW5mbyAmIENSQyBhcmUgYWRkZWQuIEVTQ09OIG9ubHkgb3BlcmF0ZXMgaW4gYnVyc3QgbW9kZS4KIApFU0NPTnMgdHlwaWNhbCBtYXggY2FibGUgbGVuZ3RoIGlzIDNrbSBmb3IgdGhlIGxlZCB2ZXJzaW9uICYgMjBrbSBmb3IgdGhlIGxhc2VyIHZlcnNpb24Ka25vd24gYXMgWERGICggZXh0ZW5kZWQgZGlzdGFuY2UgZmFjaWxpdHkgKS4gVGhpcyBjYW4gYmUgZnVydGhlciBleHRlbmRlZCBieSB1c2luZyBhbgpFU0NPTiBkaXJlY3RvciB3aGljaCB0cmlwbGVzIHRoZSBhYm92ZSBtZW50aW9uZWQgcmFuZ2VzLiBVbmxpa2UgQnVzICYgVGFnIGFzIEVTQ09OIGlzCnNlcmlhbCBpdCB1c2VzIGEgcGFja2V0IHN3aXRjaGluZyBhcmNoaXRlY3R1cmUgdGhlIHN0YW5kYXJkIEJ1cyAmIFRhZyBjb250cm9sIHByb3RvY29sCmlzIGhvd2V2ZXIgcHJlc2VudCB3aXRoaW4gdGhlIHBhY2tldHMuIFVwdG8gMjU2IGRldmljZXMgY2FuIGJlIGF0dGFjaGVkIHRvIGVhY2ggY29udHJvbCAKdW5pdCB0aGF0IHVzZXMgb25lIG9mIHRoZXNlIGludGVyZmFjZXMuCgpDb21tb24gMzkwIERldmljZXMgaW5jbHVkZToKTmV0d29yayBhZGFwdGVycyB0eXBpY2FsbHkgT1NBMiwzMTcyJ3MsMjExNidzICYgT1NBLUUgZ2lnYWJpdCBldGhlcm5ldCBhZGFwdGVycywKQ29uc29sZXMgMzI3MCAmIDMyMTUgKCBhIHRlbGV0eXBlIGVtdWxhdGVkIHVuZGVyIGxpbnV4IGZvciBhIGxpbmUgbW9kZSBjb25zb2xlICkuCkRBU0QncyBkaXJlY3QgYWNjZXNzIHN0b3JhZ2UgZGV2aWNlcyAoIG90aGVyd2lzZSBrbm93biBhcyBoYXJkIGRpc2tzICkuClRhcGUgRHJpdmVzLgpDVEMgKCBDaGFubmVsIHRvIENoYW5uZWwgQWRhcHRlcnMgKSwKRVNDT04gb3IgUGFyYWxlbGwgQ2FibGVzIHVzZWQgYXMgYSB2ZXJ5IGhpZ2ggc3BlZWQgc2VyaWFsIGxpbmsKYmV0d2VlbiAyIG1hY2hpbmVzLiBXZSB1c2UgMiBjYWJsZXMgdW5kZXIgbGludXggdG8gZG8gYSBiaS1kaXJlY3Rpb25hbCBzZXJpYWwgbGluay4KCgpEZWJ1Z2dpbmcgSU8gb24gcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSB1bmRlciBWTQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKTm93IHdlIGFyZSByZWFkeSB0byBnbyBvbiB3aXRoIElPIHRyYWNpbmcgY29tbWFuZHMgdW5kZXIgVk0KCkEgZmV3IHNlbGYgZXhwbGFuYXRvcnkgcXVlcmllczoKUSBPU0EKUSBDVEMKUSBESVNLICggVGhpcyBjb21tYW5kIGlzIENNUyBzcGVjaWZpYyApClEgREFTRAoKCgoKCgpRIE9TQSBvbiBteSBtYWNoaW5lIHJldHVybnMKT1NBICA3QzA4IE9OIE9TQSAgIDdDMDggU1VCQ0hBTk5FTCA9IDAwMDAKT1NBICA3QzA5IE9OIE9TQSAgIDdDMDkgU1VCQ0hBTk5FTCA9IDAwMDEKT1NBICA3QzE0IE9OIE9TQSAgIDdDMTQgU1VCQ0hBTk5FTCA9IDAwMDIKT1NBICA3QzE1IE9OIE9TQSAgIDdDMTUgU1VCQ0hBTk5FTCA9IDAwMDMKCklmIHlvdSBoYXZlIGEgZ3Vlc3Qgd2l0aCBjZXJ0YWluIHByaXZpbGlnZXMgeW91IG1heSBiZSBhYmxlIHRvIHNlZSBkZXZpY2VzCndoaWNoIGRvbid0IGJlbG9uZyB0byB5b3UgdG8gYXZvaWQgdGhpcyBkbyBhZGQgdGhlIG9wdGlvbiBWLgplLmcuClEgViBPU0EKCk5vdyB1c2luZyB0aGUgZGV2aWNlIG51bWJlcnMgcmV0dXJuZWQgYnkgdGhpcyBjb21tYW5kIHdlIHdpbGwKVHJhY2UgdGhlIGlvIHN0YXJ0aW5nIHVwIG9uIHRoZSBmaXJzdCBkZXZpY2UgN2MwOCAmIDdjMDkKSW4gb3VyIHNpbXBsZXN0IGNhc2Ugd2UgY2FuIHRyYWNlIHRoZSAKc3RhcnQgc3ViY2hhbm5lbHMKbGlrZSBUUiBTU0NIIDdDMDgtN0MwOQpvciB0aGUgaGFsdCBzdWJjaGFubmVscwpvciBUUiBIU0NIIDdDMDgtN0MwOQpNU0NIJ3MgLFNUU0NIJ3MgSSB0aGluayB5b3UgY2FuIGd1ZXNzIHRoZSByZXN0CgpJbmdvJ3MgZmF2b3VyaXRlIHRyaWNrIGlzIHRyYWNpbmcgYWxsIHRoZSBJTydzICYgQ0NXUyAmIHNwb29saW5nIHRoZW0gaW50byB0aGUgcmVhZGVyIG9mIGFub3RoZXIKVk0gZ3Vlc3Qgc28gaGUgY2FuIGZ0cCB0aGUgbG9nZmlsZSBiYWNrIHRvIGhpcyBvd24gbWFjaGluZS5JJ2xsIGRvIGEgc21hbGwgYml0IG9mIHRoaXMgJiBnaXZlIHlvdQogYSBsb29rIGF0IHRoZSBvdXRwdXQuCgoxKSBTcG9vbCBzdGRvdXQgdG8gVk0gcmVhZGVyClNQIFBSVCBUTyAoYW5vdGhlciB2bSBndWVzdCApIG9yICogZm9yIHRoZSBsb2NhbCB2bSBndWVzdAoyKSBGaWxsIHRoZSByZWFkZXIgd2l0aCB0aGUgdHJhY2UKVFIgSU8gN2MwOC03YzA5IElOU1QgSU5UIENDVyBQUlQgUlVOCjMpIFN0YXJ0IHVwIGxpbnV4IAppIDAwYyAgCjQpIEZpbmlzaCB0aGUgdHJhY2UKVFIgRU5ECjUpIGNsb3NlIHRoZSByZWFkZXIKQyBQUlQKNikgbGlzdCByZWFkZXIgY29udGVudHMKUkRSTElTVAo3KSBjb3B5IGl0IHRvIGxpbnV4NCdzIG1pbmlkaXNrIApSRUNFSVZFIC8gTE9HIFRYVCBBMSAoIHJlcGxhY2UKOCkKZmlsZWwgJiBwcmVzcyBGMTEgdG8gbG9vayBhdCBpdApZb3Ugc2hvdWxkIHNlZSBzb21ldGluZyBsaWtlLgoKMDAwMjA5NDInIFNTQ0ggIEIyMzM0MDAwICAgIDAwNDg4MTNDICAgIENDIDAgICAgU0NIIDAwMDAgICAgREVWIDdDMDgKICAgICAgICAgIENQQSAwMDBGRkRGMCAgIFBBUk0gMDBFMkM5QzQgICAgS0VZIDAgIEZQSSBDMCAgTFBNIDgwCiAgICAgICAgICBDQ1cgICAgMDAwRkZERjAgIEU0MjAwMTAwIDAwNDg3RkU4ICAgMDAwMCAgRTQyNDAxMDAgLi4uLi4uLi4KICAgICAgICAgIElEQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQzRDhBRkU4CiAgICAgICAgICBJREFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwRkI3NjAwMAowMDAyMEIwQScgICBJL08gREVWIDdDMDggLT4gMDAwMTk3QkMnICAgU0NIIDAwMDAgICBQQVJNIDAwRTJDOUM0CjAwMDIxNjI4JyBUU0NIICBCMjM1NDAwMCA+PiAwMDQ4ODE2NCAgICBDQyAwICAgIFNDSCAwMDAwICAgIERFViA3QzA4CiAgICAgICAgICBDQ1dBIDAwMEZGREY4ICAgREVWIFNUUyAwQyAgU0NIIFNUUyAwMCAgQ05UIDAwRUMKICAgICAgICAgICBLRVkgMCAgIEZQSSBDMCAgQ0MgMCAgIENUTFMgNDAwNwowMDAyMjIzOCcgU1RTQ0ggQjIzNDQwMDAgPj4gMDA0ODgxMDggICAgQ0MgMCAgICBTQ0ggMDAwMCAgICBERVYgN0MwOAoKSWYgeW91IGRvbid0IGxpa2UgbWVzc2luZyB1cCB5b3VyIHJlYWRlZCAoIGJlY2F1c2UgeW91IHBvc3NpYmx5IGJvb3RlZCBmcm9tIGl0ICkKeW91IGNhbiBhbHRlcm5hdGl2ZWx5IHNwb29sIGl0IHRvIGFub3RoZXIgcmVhZGVycyBndWVzdC4KCgpPdGhlciBjb21tb24gVk0gZGV2aWNlIHJlbGF0ZWQgY29tbWFuZHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRoZXNlIGNvbW1hbmRzIGFyZSBsaXN0ZWQgb25seSBiZWNhdXNlIHRoZXkgaGF2ZQpiZWVuIG9mIHVzZSB0byBtZSBpbiB0aGUgcGFzdCAmIG1heSBiZSBvZiB1c2UgdG8KeW91IHRvby4gRm9yIG1vcmUgY29tcGxldGUgaW5mbyBvbiBlYWNoIG9mIHRoZSBjb21tYW5kcwp1c2UgdHlwZSBIRUxQIDxjb21tYW5kPiBmcm9tIENNUy4KZGV0YWNoaW5nIGRldmljZXMKREVUIDxkZXZubyByYW5nZT4KQVRUIDxkZXZubyByYW5nZT4gPGd1ZXN0PiAKYXR0YWNoIGEgZGV2aWNlIHRvIGd1ZXN0ICogZm9yIHlvdXIgb3duIGd1ZXN0ClJFQURZIDxkZXZubz4gY2F1c2UgVk0gdG8gaXNzdWUgYSBmYWtlIGludGVycnVwdC4KClRoZSBWQVJZIGNvbW1hbmQgaXMgbm9ybWFsbHkgb25seSBhdmFpbGFibGUgdG8gVk0gYWRtaW5pc3RyYXRvcnMuClZBUlkgT04gUEFUSCA8cGF0aD4gVE8gPGRldm5vIHJhbmdlPgpWQVJZIE9GRiBQQVRIIDxQQVRIPiBGUk9NIDxkZXZubyByYW5nZT4KVGhpcyBpcyB1c2VkIHRvIHN3aXRjaCBvbiBvciBvZmYgY2hhbm5lbCBwYXRocyB0byBkZXZpY2VzLgoKUSBDSFBJRCA8Y2hhbm5lbCBwYXRoIElEPgpUaGlzIGRpc3BsYXlzIHN0YXRlIG9mIGRldmljZXMgdXNpbmcgdGhpcyBjaGFubmVsIHBhdGgKRCBTQ0hJQiA8c3ViY2hhbm5lbD4KVGhpcyBkaXNwbGF5cyB0aGUgc3ViY2hhbm5lbCBpbmZvcm1hdGlvbiBTQ0hJQiBibG9jayBmb3IgdGhlIGRldmljZS4KdGhpcyBJIGJlbGlldmUgaXMgYWxzbyBvbmx5IGF2YWlsYWJsZSB0byBhZG1pbmlzdHJhdG9ycy4KREVGSU5FIENUQyA8ZGV2bm8+CmRlZmluZXMgYSB2aXJ0dWFsIENUQyBjaGFubmVsIHRvIGNoYW5uZWwgY29ubmVjdGlvbgoyIG5lZWQgdG8gYmUgZGVmaW5lZCBvbiBlYWNoIGd1ZXN0IGZvciB0aGUgQ1RDIGRyaXZlciB0byB1c2UuCkNPVVBMRSAgZGV2bm8gdXNlcmlkIHJlbW90ZSBkZXZubwpKb2lucyBhIGxvY2FsIHZpcnR1YWwgZGV2aWNlIHRvIGEgcmVtb3RlIHZpcnR1YWwgZGV2aWNlCiggY29tbW9ubHkgdXNlZCBmb3IgdGhlIENUQyBkcml2ZXIgKS4KCkJ1aWxkaW5nIGEgVk0gcmFtZGlzayB1bmRlciBDTVMgd2hpY2ggbGludXggY2FuIHVzZQpkZWYgdmZiLTxibG9ja3NpemU+IDxzdWJjaGFubmVsPiA8bnVtYmVyIGJsb2Nrcz4KYmxvY2tzaXplIGlzIGNvbW1vbmx5IDQwOTYgZm9yIGxpbnV4LgpGb3JtYXR0aW5nIGl0CmZvcm1hdCA8c3ViY2hhbm5lbD4gPGRyaXZlciBsZXR0ZXIgZS5nLiB4PiAoYmxrc2l6ZSA8YmxvY2tzaXplPgoKU2hhcmluZyBhIGRpc2sgYmV0d2VlbiBtdWx0aXBsZSBndWVzdHMKTElOSyB1c2VyaWQgZGV2bm8xIGRldm5vMiBtb2RlIHBhc3N3b3JkCgoKCkdEQiBvbiBTMzkwCj09PT09PT09PT09Ck4uQi4gaWYgY29tcGlsaW5nIGZvciBkZWJ1Z2dpbmcgZ2RiIHdvcmtzIGJldHRlciB3aXRob3V0IG9wdGltaXNhdGlvbiAKKCBzZWUgQ29tcGlsaW5nIHByb2dyYW1zIGZvciBkZWJ1Z2dpbmcgKQoKaW52b2NhdGlvbgotLS0tLS0tLS0tCmdkYiA8dmljdGltIHByb2dyYW0+IDxvcHRpb25hbCBjb3JlZmlsZT4KCk9ubGluZSBoZWxwCi0tLS0tLS0tLS0tCmhlbHA6IGdpdmVzIGhlbHAgb24gY29tbWFuZHMKZS5nLgpoZWxwCmhlbHAgZGlzcGxheQpOb3RlIGdkYidzIG9ubGluZSBoZWxwIGlzIHZlcnkgZ29vZCB1c2UgaXQuCgoKQXNzZW1ibHkKLS0tLS0tLS0KaW5mbyByZWdpc3RlcnM6IGRpc3BsYXlzIHJlZ2lzdGVycyBvdGhlciB0aGFuIGZsb2F0aW5nIHBvaW50LgppbmZvIGFsbC1yZWdpc3RlcnM6IGRpc3BsYXlzIGZsb2F0aW5nIHBvaW50cyBhcyB3ZWxsLgpkaXNhc3NlbWJsZTogZGlzYXNzZW1ibGVzCmUuZy4KZGlzYXNzZW1ibGUgd2l0aG91dCBwYXJhbWV0ZXJzIHdpbGwgZGlzYXNzZW1ibGUgdGhlIGN1cnJlbnQgZnVuY3Rpb24KZGlzYXNzZW1ibGUgJHBjICRwYysxMCAKClZpZXdpbmcgJiBtb2RpZnlpbmcgdmFyaWFibGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnByaW50IG9yIHA6IGRpc3BsYXlzIHZhcmlhYmxlIG9yIHJlZ2lzdGVyCmUuZy4gcC94ICRzcCB3aWxsIGRpc3BsYXkgdGhlIHN0YWNrIHBvaW50ZXIKCmRpc3BsYXk6IHByaW50cyB2YXJpYWJsZSBvciByZWdpc3RlciBlYWNoIHRpbWUgcHJvZ3JhbSBzdG9wcwplLmcuCmRpc3BsYXkveCAkcGMgd2lsbCBkaXNwbGF5IHRoZSBwcm9ncmFtIGNvdW50ZXIKZGlzcGxheSBhcmdjCgp1bmRpc3BsYXkgOiB1bmRvJ3MgZGlzcGxheSdzCgppbmZvIGJyZWFrcG9pbnRzOiBzaG93cyBhbGwgY3VycmVudCBicmVha3BvaW50cwoKaW5mbyBzdGFjazogc2hvd3Mgc3RhY2sgYmFjayB0cmFjZSAoIGlmIHRoaXMgZG9lc24ndCB3b3JrIHRvbyB3ZWxsLCBJJ2xsIHNob3cgeW91IHRoZQpzdGFja3RyYWNlIGJ5IGhhbmQgYmVsb3cgKS4KCmluZm8gbG9jYWxzOiBkaXNwbGF5cyBsb2NhbCB2YXJpYWJsZXMuCgppbmZvIGFyZ3M6IGRpc3BsYXkgY3VycmVudCBwcm9jZWR1cmUgYXJndW1lbnRzLgoKc2V0IGFyZ3M6IHdpbGwgc2V0IGFyZ2MgJiBhcmd2IGVhY2ggdGltZSB0aGUgdmljdGltIHByb2dyYW0gaXMgaW52b2tlZC4KCnNldCA8dmFyaWFibGU+PXZhbHVlCnNldCBhcmdjPTEwMApzZXQgJHBjPTAKCgoKTW9kaWZ5aW5nIGV4ZWN1dGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tCnN0ZXA6IHN0ZXBzIG4gbGluZXMgb2Ygc291cmNlY29kZQpzdGVwIHN0ZXBzIDEgbGluZS4Kc3RlcCAxMDAgc3RlcHMgMTAwIGxpbmVzIG9mIGNvZGUuCgpuZXh0OiBsaWtlIHN0ZXAgZXhjZXB0IHRoaXMgd2lsbCBub3Qgc3RlcCBpbnRvIHN1YnJvdXRpbmVzCgpzdGVwaTogc3RlcHMgYSBzaW5nbGUgbWFjaGluZSBjb2RlIGluc3RydWN0aW9uLgplLmcuIHN0ZXBpIDEwMAoKbmV4dGk6IHN0ZXBzIGEgc2luZ2xlIG1hY2hpbmUgY29kZSBpbnN0cnVjdGlvbiBidXQgd2lsbCBub3Qgc3RlcCBpbnRvIHN1YnJvdXRpbmVzLgoKZmluaXNoOiB3aWxsIHJ1biB1bnRpbCBleGl0IG9mIHRoZSBjdXJyZW50IHJvdXRpbmUKCnJ1bjogKHJlKXN0YXJ0cyBhIHByb2dyYW0KCmNvbnQ6IGNvbnRpbnVlcyBhIHByb2dyYW0KCnF1aXQ6IGV4aXRzIGdkYi4KCgpicmVha3BvaW50cwotLS0tLS0tLS0tLS0KCmJyZWFrCnNldHMgYSBicmVha3BvaW50CmUuZy4KCmJyZWFrIG1haW4KCmJyZWFrICokcGMKCmJyZWFrICoweDQwMDYxOAoKaGVyZXMgYSByZWFsbHkgdXNlZnVsIG9uZSBmb3IgbGFyZ2UgcHJvZ3JhbXMKcmJyClNldCBhIGJyZWFrcG9pbnQgZm9yIGFsbCBmdW5jdGlvbnMgbWF0Y2hpbmcgUkVHRVhQCmUuZy4KcmJyIDM5MAp3aWxsIHNldCBhIGJyZWFrcG9pbnQgd2l0aCBhbGwgZnVuY3Rpb25zIHdpdGggMzkwIGluIHRoZWlyIG5hbWUuCgppbmZvIGJyZWFrcG9pbnRzCmxpc3RzIGFsbCBicmVha3BvaW50cwoKZGVsZXRlOiBkZWxldGUgYnJlYWtwb2ludCBieSBudW1iZXIgb3IgZGVsZXRlIHRoZW0gYWxsCmUuZy4KZGVsZXRlIDEgd2lsbCBkZWxldGUgdGhlIGZpcnN0IGJyZWFrcG9pbnQKZGVsZXRlIHdpbGwgZGVsZXRlIHRoZW0gYWxsCgp3YXRjaDogVGhpcyB3aWxsIHNldCBhIHdhdGNocG9pbnQgKCB1c3VhbGx5IGhhcmR3YXJlIGFzc2lzdGVkICksClRoaXMgd2lsbCB3YXRjaCBhIHZhcmlhYmxlIHRpbGwgaXQgY2hhbmdlcwplLmcuCndhdGNoIGNudCwgd2lsbCB3YXRjaCB0aGUgdmFyaWFibGUgY250IHRpbGwgaXQgY2hhbmdlcy4KQXMgYW4gYXNpZGUgdW5mb3J0dW5hdGVseSBnZGIncywgYXJjaGl0ZWN0dXJlIGluZGVwZW5kZW50IHdhdGNocG9pbnQgY29kZQppcyBpbmNvbnNpc3RlbnQgJiBub3QgdmVyeSBnb29kLCB3YXRjaHBvaW50cyB1c3VhbGx5IHdvcmsgYnV0IG5vdCBhbHdheXMuCgppbmZvIHdhdGNocG9pbnRzOiBEaXNwbGF5IGN1cnJlbnRseSBhY3RpdmUgd2F0Y2hwb2ludHMKCmNvbmRpdGlvbjogKCBhbm90aGVyIHVzZWZ1bCBvbmUgKQpTcGVjaWZ5IGJyZWFrcG9pbnQgbnVtYmVyIE4gdG8gYnJlYWsgb25seSBpZiBDT05EIGlzIHRydWUuClVzYWdlIGlzIGBjb25kaXRpb24gTiBDT05EJywgd2hlcmUgTiBpcyBhbiBpbnRlZ2VyIGFuZCBDT05EIGlzIGFuCmV4cHJlc3Npb24gdG8gYmUgZXZhbHVhdGVkIHdoZW5ldmVyIGJyZWFrcG9pbnQgTiBpcyByZWFjaGVkLgoKCgpVc2VyIGRlZmluZWQgZnVuY3Rpb25zL21hY3JvcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkZWZpbmU6ICggTm90ZSB0aGlzIGlzIHZlcnkgdmVyeSB1c2VmdWwsc2ltcGxlICYgcG93ZXJmdWwgKQp1c2FnZSBkZWZpbmUgPG5hbWU+IDxsaXN0IG9mIGNvbW1hbmRzPiBlbmQKCmV4YW1wbGVzIHdoaWNoIHlvdSBzaG91bGQgY29uc2lkZXIgcHV0dGluZyBpbnRvIC5nZGJpbml0IGluIHlvdXIgaG9tZSBkaXJlY3RvcnkKZGVmaW5lIGQKc3RlcGkKZGlzYXNzZW1ibGUgJHBjICRwYysxMAplbmQKCmRlZmluZSBlCm5leHRpCmRpc2Fzc2VtYmxlICRwYyAkcGMrMTAKZW5kCgoKT3RoZXIgaGFyZCB0byBjbGFzc2lmeSBzdHVmZgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnNpZ25hbCBuOgpzZW5kcyB0aGUgdmljdGltIHByb2dyYW0gYSBzaWduYWwuCmUuZy4gc2lnbmFsIDMgd2lsbCBzZW5kIGEgU0lHUVVJVC4KCmluZm8gc2lnbmFsczoKd2hhdCBnZGIgZG9lcyB3aGVuIHRoZSB2aWN0aW0gcmVjZWl2ZXMgY2VydGFpbiBzaWduYWxzLgoKbGlzdDoKZS5nLgpsaXN0IGxpc3RzIGN1cnJlbnQgZnVuY3Rpb24gc291cmNlCmxpc3QgMSwxMCBsaXN0IGZpcnN0IDEwIGxpbmVzIG9mIGN1cnJlbnQgZmlsZS4KbGlzdCB0ZXN0LmM6MSwxMAoKCmRpcmVjdG9yeToKQWRkcyBkaXJlY3RvcmllcyB0byBiZSBzZWFyY2hlZCBmb3Igc291cmNlIGlmIGdkYiBjYW5ub3QgZmluZCB0aGUgc291cmNlLgoobm90ZSBpdCBpcyBhIGJpdCBzZW5zaXRpdGl2ZSBhYm91dCBzbGFzaGVzKSAKZS5nLiBUbyBhZGQgdGhlIHJvb3Qgb2YgdGhlIGZpbGVzeXN0ZW0gdG8gdGhlIHNlYXJjaHBhdGggZG8KZGlyZWN0b3J5IC8vCgoKY2FsbCA8ZnVuY3Rpb24+ClRoaXMgY2FsbHMgYSBmdW5jdGlvbiBpbiB0aGUgdmljdGltIHByb2dyYW0sIHRoaXMgaXMgcHJldHR5IHBvd2VyZnVsCmUuZy4KKGdkYikgY2FsbCBwcmludGYoImhlbGxvIHdvcmxkIikKb3V0cHV0czoKJDEgPSAxMSAKCllvdSBtaWdodCBub3cgYmUgdGhpbmtpbmcgdGhhdCB0aGUgbGluZSBhYm92ZSBkaWRuJ3Qgd29yaywgc29tZXRoaW5nIGV4dHJhIGhhZCB0byBiZSBkb25lLgooZ2RiKSBjYWxsIGZmbHVzaChzdGRvdXQpCmhlbGxvIHdvcmxkJDIgPSAwCkFzIGFuIGFzaWRlIHRoZSBkZWJ1Z2dlciBhbHNvIGNhbGxzIG1hbGxvYyAmIGZyZWUgdW5kZXIgdGhlIGhvb2QgCnRvIG1ha2Ugc3BhY2UgZm9yIHRoZSAiaGVsbG8gd29ybGQiIHN0cmluZy4KCgoKaGludHMKLS0tLS0KMSkgY29tbWFuZCBjb21wbGV0aW9uIHdvcmtzIGp1c3QgbGlrZSBiYXNoIAooIGlmIHlvdSBhcmUgYSBiYWQgdHlwaXN0IGxpa2UgbWUgdGhpcyByZWFsbHkgaGVscHMgKQplLmcuIGhpdCBiciA8VEFCPiAmIGN1cnNvciB1cCAmIGRvd24gOi0pLgoKMikgaWYgeW91IGhhdmUgYSBkZWJ1Z2dpbmcgcHJvYmxlbSB0aGF0IHRha2VzIGEgZmV3IHN0ZXBzIHRvIHJlY3JlYXRlCnB1dCB0aGUgc3RlcHMgaW50byBhIGZpbGUgY2FsbGVkIC5nZGJpbml0IGluIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQppZiB5b3UgaGF2ZSBkZWZpbmVkIGEgZmV3IGV4dHJhIHVzZWZ1bCB1c2VyIGRlZmluZWQgY29tbWFuZHMgcHV0IHRoZXNlIGluIAp5b3VyIGhvbWUgZGlyZWN0b3J5ICYgdGhleSB3aWxsIGJlIHJlYWQgZWFjaCB0aW1lIGdkYiBpcyBsYXVuY2hlZC4KCkEgdHlwaWNhbCAuZ2RiaW5pdCBmaWxlIG1pZ2h0IGJlLgpicmVhayBtYWluCnJ1bgpicmVhayBydW50aW1lX2V4Y2VwdGlvbgpjb250IAoKCnN0YWNrIGNoYWluaW5nIGluIGdkYiBieSBoYW5kCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRoaXMgaXMgZG9uZSB1c2luZyBhIHRoZSBzYW1lIHRyaWNrIGRlc2NyaWJlZCBmb3IgVk0gCnAveCAoKigkc3ArNTYpKSYweDdmZmZmZmZmIGdldCB0aGUgZmlyc3QgYmFja2NoYWluLgoKRm9yIHovQXJjaGl0ZWN0dXJlClJlcGxhY2UgNTYgd2l0aCAxMTIgJiBpZ25vcmUgdGhlICYweDdmZmZmZmZmCmluIHRoZSBtYWNyb3MgYmVsb3cgJiBkbyBuYXN0eSBjYXN0cyB0byBsb25ncyBsaWtlIHRoZSBmb2xsb3dpbmcKYXMgZ2RiIHVuZm9ydHVuYXRlbHkgZGVhbHMgd2l0aCBwcmludGVkIGFyZ3VtZW50cyBhcyBpbnRzIHdoaWNoCm1lc3NlcyB1cCBldmVyeXRoaW5nLgppLmUuIGhlcmUgaXMgYSAzcmQgYmFja2NoYWluIGRlcmVmZXJlbmNlCnAveCAqKGxvbmcgKikoKioqKGxvbmcgKioqKSRzcCsxMTIpCgoKdGhpcyBvdXRwdXRzIAokNSA9IDB4NTI4ZjE4IApvbiBteSBtYWNoaW5lLgpOb3cgeW91IGNhbiB1c2UgCmluZm8gc3ltYm9sICgqKCRzcCs1NikpJjB4N2ZmZmZmZmYgCnlvdSBtaWdodCBzZWUgc29tZXRoaW5nIGxpa2UuCnJsX2dldGMgKyAzNiBpbiBzZWN0aW9uIC50ZXh0ICB0ZWxsaW5nIHlvdSB3aGF0IGlzIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUyOGYxOApOb3cgZG8uCnAveCAoKigqJHNwKzU2KSkmMHg3ZmZmZmZmZiAKVGhpcyBvdXRwdXRzCiQ2ID0gMHg1MjhlZDAKTm93IGRvLgppbmZvIHN5bWJvbCAoKigqJHNwKzU2KSkmMHg3ZmZmZmZmZgpybF9yZWFkX2tleSArIDE4MCBpbiBzZWN0aW9uIC50ZXh0Cm5vdyBkbwpwL3ggKCooKiokc3ArNTYpKSYweDdmZmZmZmZmCiYgc28gb24uCgpEaXNhc3NlbWJsaW5nIGluc3RydWN0aW9ucyB3aXRob3V0IGRlYnVnIGluZm8KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmdkYiB0eXBpY2FsbHkgY29tcGxhaW5zIGlmIHRoZXJlIGlzIGEgbGFjayBvZiBkZWJ1Z2dpbmcKc3ltYm9scyBpbiB0aGUgZGlzYXNzZW1ibGUgY29tbWFuZCB3aXRoIAoiTm8gZnVuY3Rpb24gY29udGFpbnMgc3BlY2lmaWVkIGFkZHJlc3MuIiBUbyBnZXQgYXJvdW5kCnRoaXMgZG8gCngvPG51bWJlciBsaW5lcyB0byBkaXNhc3NlbWJsZT54aSA8YWRkcmVzcz4KZS5nLgp4LzIweGkgMHg0MDA3MzAKCgoKTm90ZTogUmVtZW1iZXIgZ2RiIGhhcyBoaXN0b3J5IGp1c3QgbGlrZSBiYXNoIHlvdSBkb24ndCBuZWVkIHRvIHJldHlwZSB0aGUKd2hvbGUgbGluZSBqdXN0IHVzZSB0aGUgdXAgJiBkb3duIGFycm93cy4KCgoKRm9yIG1vcmUgaW5mbwotLS0tLS0tLS0tLS0tCkZyb20geW91ciBsaW51eGJveCBkbyAKbWFuIGdkYiBvciBpbmZvIGdkYi4KCmNvcmUgZHVtcHMKLS0tLS0tLS0tLQpXaGF0IGEgY29yZSBkdW1wID8sCkEgY29yZSBkdW1wIGlzIGEgZmlsZSBnZW5lcmF0ZWQgYnkgdGhlIGtlcm5lbCAoIGlmIGFsbG93ZWQgKSB3aGljaCBjb250YWlucyB0aGUgcmVnaXN0ZXJzLAomIGFsbCBhY3RpdmUgcGFnZXMgb2YgdGhlIHByb2dyYW0gd2hpY2ggaGFzIGNyYXNoZWQuCkZyb20gdGhpcyBmaWxlIGdkYiB3aWxsIGFsbG93IHlvdSB0byBsb29rIGF0IHRoZSByZWdpc3RlcnMgJiBzdGFjayB0cmFjZSAmIG1lbW9yeSBvZiB0aGUKcHJvZ3JhbSBhcyBpZiBpdCBqdXN0IGNyYXNoZWQgb24geW91ciBzeXN0ZW0sIGl0IGlzIHVzdWFsbHkgY2FsbGVkIGNvcmUgJiBjcmVhdGVkIGluIHRoZQpjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgpUaGlzIGlzIHZlcnkgdXNlZnVsIGluIHRoYXQgYSBjdXN0b21lciBjYW4gbWFpbCBhIGNvcmUgZHVtcCB0byBhIHRlY2huaWNhbCBzdXBwb3J0IGRlcGFydG1lbnQKJiB0aGUgdGVjaG5pY2FsIHN1cHBvcnQgZGVwYXJ0bWVudCBjYW4gcmVjb25zdHJ1Y3Qgd2hhdCBoYXBwZW5lZC4KUHJvdmlkZWQgdGhlIGhhdmUgYW4gaWRlbnRpY2FsIGNvcHkgb2YgdGhpcyBwcm9ncmFtIHdpdGggZGVidWdnaW5nIHN5bWJvbHMgY29tcGlsZWQgaW4gJiAKdGhlIHNvdXJjZSBiYXNlIG9mIHRoaXMgYnVpbGQgaXMgYXZhaWxhYmxlLgpJbiBzaG9ydCBpdCBpcyBmYXIgbW9yZSB1c2VmdWwgdGhhbiBzb21ldGhpbmcgbGlrZSBhIGNyYXNoIGxvZyBjb3VsZCBldmVyIGhvcGUgdG8gYmUuCgpJbiB0aGVvcnkgYWxsIHRoYXQgaXMgbWlzc2luZyB0byByZXN0YXJ0IGEgY29yZSBkdW1wZWQgcHJvZ3JhbSBpcyBhIGtlcm5lbCBwYXRjaCB3aGljaAp3aWxsIGRvIHRoZSBmb2xsb3dpbmcuCjEpIE1ha2UgYSBuZXcga2VybmVsIHRhc2sgc3RydWN0dXJlCjIpIFJlbG9hZCBhbGwgdGhlIGR1bXBlZCBwYWdlcyBiYWNrIGludG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMuCjMpIERvIHRoZSByZXF1aXJlZCBjbG9jayBmaXh1cHMKNCkgR2V0IGFsbCBmaWxlcyAmIG5ldHdvcmsgY29ubmVjdGlvbnMgZm9yIHRoZSBwcm9jZXNzIGJhY2sgaW50byBhbiBpZGVudGljYWwgc3RhdGUgKCByZWFsbHkgZGlmZmljdWx0ICkuCjUpIEEgZmV3IG1vcmUgZGlmZmljdWx0IHRoaW5ncyBJIGhhdmVuJ3QgdGhvdWdodCBvZi4KCgoKV2h5IGhhdmUgSSBuZXZlciBzZWVuIG9uZSA/LgpQcm9iYWJseSBiZWNhdXNlIHlvdSBoYXZlbid0IHVzZWQgdGhlIGNvbW1hbmQgCnVsaW1pdCAtYyB1bmxpbWl0ZWQgaW4gYmFzaAp0byBhbGxvdyBjb3JlIGR1bXBzLCBub3cgZG8gCnVsaW1pdCAtYSAKdG8gdmVyaWZ5IHRoYXQgdGhlIGxpbWl0IHdhcyBhY2NlcHRlZC4KCkEgc2FtcGxlIGNvcmUgZHVtcApUbyBjcmVhdGUgdGhpcyBJJ20gZ29pbmcgdG8gZG8KdWxpbWl0IC1jIHVubGltaXRlZApnZGIgCnRvIGxhdW5jaCBnZGIgKG15IHZpY3RpbSBhcHAuICkgbm93IGJlIGJhZCAmIGRvIHRoZSBmb2xsb3dpbmcgZnJvbSBhbm90aGVyIAp0ZWxuZXQveHRlcm0gc2Vzc2lvbiB0byB0aGUgc2FtZSBtYWNoaW5lCnBzIC1hdXggfCBncmVwIGdkYgpraWxsIC1TSUdTRUdWIDxnZGIncyBwaWQ+Cm9yIGFsdGVybmF0aXZlbHkgdXNlIGtpbGxhbGwgLVNJR1NFR1YgZ2RiIGlmIHlvdSBoYXZlIHRoZSBraWxsYWxsIGNvbW1hbmQuCk5vdyBsb29rIGF0IHRoZSBjb3JlIGR1bXAuCi4vZ2RiIC4vZ2RiIGNvcmUKRGlzcGxheXMgdGhlIGZvbGxvd2luZwpHTlUgZ2RiIDQuMTgKQ29weXJpZ2h0IDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkdEQiBpcyBmcmVlIHNvZnR3YXJlLCBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHlvdSBhcmUKd2VsY29tZSB0byBjaGFuZ2UgaXQgYW5kL29yIGRpc3RyaWJ1dGUgY29waWVzIG9mIGl0IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KVHlwZSAic2hvdyBjb3B5aW5nIiB0byBzZWUgdGhlIGNvbmRpdGlvbnMuClRoZXJlIGlzIGFic29sdXRlbHkgbm8gd2FycmFudHkgZm9yIEdEQi4gIFR5cGUgInNob3cgd2FycmFudHkiIGZvciBkZXRhaWxzLgpUaGlzIEdEQiB3YXMgY29uZmlndXJlZCBhcyAiczM5MC1pYm0tbGludXgiLi4uCkNvcmUgd2FzIGdlbmVyYXRlZCBieSBgLi9nZGInLgpQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBzaWduYWwgMTEsIFNlZ21lbnRhdGlvbiBmYXVsdC4KUmVhZGluZyBzeW1ib2xzIGZyb20gL3Vzci9saWIvbGlibmN1cnNlcy5zby40Li4uZG9uZS4KUmVhZGluZyBzeW1ib2xzIGZyb20gL2xpYi9saWJtLnNvLjYuLi5kb25lLgpSZWFkaW5nIHN5bWJvbHMgZnJvbSAvbGliL2xpYmMuc28uNi4uLmRvbmUuClJlYWRpbmcgc3ltYm9scyBmcm9tIC9saWIvbGQtbGludXguc28uMi4uLmRvbmUuCiMwICAweDQwMTI2ZDFhIGluIHJlYWQgKCkgZnJvbSAvbGliL2xpYmMuc28uNgpTZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudCBmb3IgZGVidWdnaW5nIGdkYi4KQnJlYWtwb2ludCAxIGF0IDB4NGRjNmY4OiBmaWxlIHV0aWxzLmMsIGxpbmUgNDcxLgpCcmVha3BvaW50IDIgYXQgMHg0ZDg3YTQ6IGZpbGUgdG9wLmMsIGxpbmUgMjYwOS4KKHRvcC1nZGIpIGluZm8gc3RhY2sKIzAgIDB4NDAxMjZkMWEgaW4gcmVhZCAoKSBmcm9tIC9saWIvbGliYy5zby42CiMxICAweDUyOGYyNiBpbiBybF9nZXRjIChzdHJlYW09MHg3ZmZmZmRlOCkgYXQgaW5wdXQuYzo0MDIKIzIgIDB4NTI4ZWQwIGluIHJsX3JlYWRfa2V5ICgpIGF0IGlucHV0LmM6MzgxCiMzICAweDUxNjdlNiBpbiByZWFkbGluZV9pbnRlcm5hbF9jaGFyICgpIGF0IHJlYWRsaW5lLmM6NDU0CiM0ICAweDUxNjhlZSBpbiByZWFkbGluZV9pbnRlcm5hbF9jaGFybG9vcCAoKSBhdCByZWFkbGluZS5jOjUwNwojNSAgMHg1MTY5MmMgaW4gcmVhZGxpbmVfaW50ZXJuYWwgKCkgYXQgcmVhZGxpbmUuYzo1MjEKIzYgIDB4NTE2NGZlIGluIHJlYWRsaW5lIChwcm9tcHQ9MHg3ZmZmZjgxMCAiXDE3N4H/gfh4XDE3N4H/gfeB2FwxNzeB/4H4eIHAIikKICAgIGF0IHJlYWRsaW5lLmM6MzQ5CiM3ICAweDRkN2E4YSBpbiBjb21tYW5kX2xpbmVfaW5wdXQgKHBycm9tcHQ9MHg1NjQ0MjAgIihnZGIpICIsIHJlcGVhdD0xLAogICAgYW5ub3RhdGlvbl9zdWZmaXg9MHg0ZDZiNDQgInByb21wdCIpIGF0IHRvcC5jOjIwOTEKIzggIDB4NGQ2Y2YwIGluIGNvbW1hbmRfbG9vcCAoKSBhdCB0b3AuYzoxMzQ1CiM5ICAweDRlMjViYyBpbiBtYWluIChhcmdjPTEsIGFyZ3Y9MHg3ZmZmZmRmNCkgYXQgbWFpbi5jOjYzNQoKCkxERAo9PT0KVGhpcyBpcyBhIHByb2dyYW0gd2hpY2ggbGlzdHMgdGhlIHNoYXJlZCBsaWJyYXJpZXMgd2hpY2ggYSBsaWJyYXJ5IG5lZWRzLApOb3RlIHlvdSBhbHNvIGdldCB0aGUgcmVsb2NhdGlvbnMgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IHRleHQgc2VnbWVudHMgd2hpY2gKaGVscCB3aGVuIHVzaW5nIG9iamR1bXAgLS1zb3VyY2UuCmUuZy4KIGxkZCAuL2dkYgpvdXRwdXRzCmxpYm5jdXJzZXMuc28uNCA9PiAvdXNyL2xpYi9saWJuY3Vyc2VzLnNvLjQgKDB4NDAwMTgwMDApCmxpYm0uc28uNiA9PiAvbGliL2xpYm0uc28uNiAoMHg0MDA1ZTAwMCkKbGliYy5zby42ID0+IC9saWIvbGliYy5zby42ICgweDQwMDg0MDAwKQovbGliL2xkLWxpbnV4LnNvLjIgPT4gL2xpYi9sZC1saW51eC5zby4yICgweDQwMDAwMDAwKQoKCkRlYnVnZ2luZyBzaGFyZWQgbGlicmFyaWVzCj09PT09PT09PT09PT09PT09PT09PT09PT09Ck1vc3QgcHJvZ3JhbXMgdXNlIHNoYXJlZCBsaWJyYXJpZXMsIGhvd2V2ZXIgaXQgY2FuIGJlIHZlcnkgcGFpbmZ1bAp3aGVuIHlvdSBzaW5nbGUgc3RlcCBpbnN0cnVjdGlvbiBpbnRvIGEgZnVuY3Rpb24gbGlrZSBwcmludGYgZm9yIHRoZSAKZmlyc3QgdGltZSAmIHlvdSBlbmQgdXAgaW4gZnVuY3Rpb25zIGxpa2UgX2RsX3J1bnRpbWVfcmVzb2x2ZSB0aGlzIGlzCnRoZSBsZC5zbyBkb2luZyBsYXp5IGJpbmRpbmcsIGxhenkgYmluZGluZyBpcyBhIGNvbmNlcHQgaW4gRUxGIHdoZXJlIApzaGFyZWQgbGlicmFyeSBmdW5jdGlvbnMgYXJlIG5vdCBsb2FkZWQgaW50byBtZW1vcnkgdW5sZXNzIHRoZXkgYXJlIAphY3R1YWxseSB1c2VkLCBncmVhdCBmb3Igc2F2aW5nIG1lbW9yeSBidXQgYSBwYWluIHRvIGRlYnVnLgpUbyBnZXQgYXJvdW5kIHRoaXMgZWl0aGVyIHJlbGluayB0aGUgcHJvZ3JhbSAtc3RhdGljIG9yIGV4aXQgZ2RiIHR5cGUgCmV4cG9ydCBMRF9CSU5EX05PVz10cnVlIHRoaXMgd2lsbCBzdG9wIGxhenkgYmluZGluZyAmIHJlc3RhcnQgdGhlIGdkYidpbmcgCnRoZSBwcm9ncmFtIGluIHF1ZXN0aW9uLgogCgoKRGVidWdnaW5nIG1vZHVsZXMKPT09PT09PT09PT09PT09PT0KQXMgbW9kdWxlcyBhcmUgZHluYW1pY2FsbHkgbG9hZGVkIGludG8gdGhlIGtlcm5lbCB0aGVpciBhZGRyZXNzIGNhbiBiZQphbnl3aGVyZSB0byBnZXQgYXJvdW5kIHRoaXMgdXNlIHRoZSAtbSBvcHRpb24gd2l0aCBpbnNtb2QgdG8gZW1pdCBhIGxvYWQKbWFwIHdoaWNoIGNhbiBiZSBwaXBlZCBpbnRvIGEgZmlsZSBpZiByZXF1aXJlZC4KClRoZSBwcm9jIGZpbGUgc3lzdGVtCj09PT09PT09PT09PT09PT09PT09CldoYXQgaXMgaXQgPy4KSXQgaXMgYSBmaWxlc3lzdGVtIGNyZWF0ZWQgYnkgdGhlIGtlcm5lbCB3aXRoIGZpbGVzIHdoaWNoIGFyZSBjcmVhdGVkIG9uIGRlbWFuZApieSB0aGUga2VybmVsIGlmIHJlYWQsIG9yIGNhbiBiZSB1c2VkIHRvIG1vZGlmeSBrZXJuZWwgcGFyYW1ldGVycywKaXQgaXMgYSBwb3dlcmZ1bCBjb25jZXB0LgoKZS5nLgoKY2F0IC9wcm9jL3N5cy9uZXQvaXB2NC9pcF9mb3J3YXJkIApPbiBteSBtYWNoaW5lIG91dHB1dHMgCjAgCnRlbGxpbmcgbWUgaXBfZm9yd2FyZGluZyBpcyBub3Qgb24gdG8gc3dpdGNoIGl0IG9uIEkgY2FuIGRvCmVjaG8gMSA+ICAvcHJvYy9zeXMvbmV0L2lwdjQvaXBfZm9yd2FyZApjYXQgaXQgYWdhaW4KY2F0IC9wcm9jL3N5cy9uZXQvaXB2NC9pcF9mb3J3YXJkIApPbiBteSBtYWNoaW5lIG5vdyBvdXRwdXRzCjEKSVAgZm9yd2FyZGluZyBpcyBvbi4KVGhlcmUgaXMgYSBsb3Qgb2YgdXNlZnVsIGluZm8gaW4gaGVyZSBiZXN0IGZvdW5kIGJ5IGdvaW5nIGluICYgaGF2aW5nIGEgbG9vayBhcm91bmQsCnNvIEknbGwgdGFrZSB5b3UgdGhyb3VnaCBzb21lIGVudHJpZXMgSSBjb25zaWRlciBpbXBvcnRhbnQuCgpBbGwgdGhlIHByb2Nlc3NlcyBydW5uaW5nIG9uIHRoZSBtYWNoaW5lIGhhdmUgdGhlcmUgb3duIGVudHJ5IGRlZmluZWQgYnkKL3Byb2MvPHBpZD4KU28gbGV0cyBoYXZlIGEgbG9vayBhdCB0aGUgaW5pdCBwcm9jZXNzCmNkIC9wcm9jLzEKCmNhdCBjbWRsaW5lCmVtaXRzCmluaXQgWzJdCgpjZCAvcHJvYy8xL2ZkClRoaXMgY29udGFpbnMgbnVtZXJpY2FsIGVudHJpZXMgb2YgYWxsIHRoZSBvcGVuIGZpbGVzLApzb21lIG9mIHRoZXNlIHlvdSBjYW4gY2F0IGUuZy4gc3Rkb3V0ICgyKQoKY2F0IC9wcm9jLzI5L21hcHMKb24gbXkgbWFjaGluZSBlbWl0cwoKMDA0MDAwMDAtMDA0NzgwMDAgci14cCAwMDAwMDAwMCA1ZjowMCA0MTAzICAgICAgIC9iaW4vYmFzaAowMDQ3ODAwMC0wMDQ3ZTAwMCBydy1wIDAwMDc3MDAwIDVmOjAwIDQxMDMgICAgICAgL2Jpbi9iYXNoCjAwNDdlMDAwLTAwNDkyMDAwIHJ3eHAgMDAwMDAwMDAgMDA6MDAgMAo0MDAwMDAwMC00MDAxNTAwMCByLXhwIDAwMDAwMDAwIDVmOjAwIDE0MzgyICAgICAgL2xpYi9sZC0yLjEuMi5zbwo0MDAxNTAwMC00MDAxNjAwMCBydy1wIDAwMDE0MDAwIDVmOjAwIDE0MzgyICAgICAgL2xpYi9sZC0yLjEuMi5zbwo0MDAxNjAwMC00MDAxNzAwMCByd3hwIDAwMDAwMDAwIDAwOjAwIDAKNDAwMTcwMDAtNDAwMTgwMDAgcnctcCAwMDAwMDAwMCAwMDowMCAwCjQwMDE4MDAwLTQwMDFiMDAwIHIteHAgMDAwMDAwMDAgNWY6MDAgMTQ0MzUgICAgICAvbGliL2xpYnRlcm1jYXAuc28uMi4wLjgKNDAwMWIwMDAtNDAwMWMwMDAgcnctcCAwMDAwMjAwMCA1ZjowMCAxNDQzNSAgICAgIC9saWIvbGlidGVybWNhcC5zby4yLjAuOAo0MDAxYzAwMC00MDEwZDAwMCByLXhwIDAwMDAwMDAwIDVmOjAwIDE0Mzg3ICAgICAgL2xpYi9saWJjLTIuMS4yLnNvCjQwMTBkMDAwLTQwMTExMDAwIHJ3LXAgMDAwZjAwMDAgNWY6MDAgMTQzODcgICAgICAvbGliL2xpYmMtMi4xLjIuc28KNDAxMTEwMDAtNDAxMTQwMDAgcnctcCAwMDAwMDAwMCAwMDowMCAwCjQwMTE0MDAwLTQwMTFlMDAwIHIteHAgMDAwMDAwMDAgNWY6MDAgMTQ0MDggICAgICAvbGliL2xpYm5zc19maWxlcy0yLjEuMi5zbwo0MDExZTAwMC00MDExZjAwMCBydy1wIDAwMDA5MDAwIDVmOjAwIDE0NDA4ICAgICAgL2xpYi9saWJuc3NfZmlsZXMtMi4xLjIuc28KN2ZmZmQwMDAtODAwMDAwMDAgcnd4cCBmZmZmZTAwMCAwMDowMCAwCgoKU2hvd2luZyB1cyB0aGUgc2hhcmVkIGxpYnJhcmllcyBpbml0IHVzZXMgd2hlcmUgdGhleSBhcmUgaW4gbWVtb3J5CiYgbWVtb3J5IGFjY2VzcyBwZXJtaXNzaW9ucyBmb3IgZWFjaCB2aXJ0dWFsIG1lbW9yeSBhcmVhLgoKL3Byb2MvMS9jd2QgaXMgYSBzb2Z0bGluayB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KL3Byb2MvMS9yb290IGlzIHRoZSByb290IG9mIHRoZSBmaWxlc3lzdGVtIGZvciB0aGlzIHByb2Nlc3MuIAoKL3Byb2MvMS9tZW0gaXMgdGhlIGN1cnJlbnQgcnVubmluZyBwcm9jZXNzZXMgbWVtb3J5IHdoaWNoIHlvdQpjYW4gcmVhZCAmIHdyaXRlIHRvIGxpa2UgYSBmaWxlLgpzdHJhY2UgdXNlcyB0aGlzIHNvbWV0aW1lcyBhcyBpdCBpcyBhIGJpdCBmYXN0ZXIgdGhhbiB0aGUKcmF0aGVyIGluZWZmaWNlbnQgcHRyYWNlIGludGVyZmFjZSBmb3IgcGVla2luZyBhdCBEQVRBLgoKCmNhdCBzdGF0dXMgCgpOYW1lOiAgIGluaXQKU3RhdGU6ICBTIChzbGVlcGluZykKUGlkOiAgICAxClBQaWQ6ICAgMApVaWQ6ICAgIDAgICAgICAgMCAgICAgICAwICAgICAgIDAKR2lkOiAgICAwICAgICAgIDAgICAgICAgMCAgICAgICAwCkdyb3VwczoKVm1TaXplOiAgICAgIDQwOCBrQgpWbUxjazogICAgICAgICAwIGtCClZtUlNTOiAgICAgICAyMDgga0IKVm1EYXRhOiAgICAgICAyNCBrQgpWbVN0azogICAgICAgICA4IGtCClZtRXhlOiAgICAgICAzNjgga0IKVm1MaWI6ICAgICAgICAgMCBrQgpTaWdQbmQ6IDAwMDAwMDAwMDAwMDAwMDAKU2lnQmxrOiAwMDAwMDAwMDAwMDAwMDAwClNpZ0lnbjogN2ZmZmZmZmZkN2YwZDhmYwpTaWdDZ3Q6IDAwMDAwMDAwMjgwYjI2MDMKQ2FwSW5oOiAwMDAwMDAwMGZmZmZmZWZmCkNhcFBybTogMDAwMDAwMDBmZmZmZmZmZgpDYXBFZmY6IDAwMDAwMDAwZmZmZmZlZmYKClVzZXIgUFNXOiAgICAwNzBkZTAwMCA4MDQxNDE0Ngp0YXNrOiAwMDRiNjAwMCB0c3M6IDAwNGI2MmQ4IGtzcDogMDA0YjdjYTggcHRfcmVnczogMDA0YjdmNjgKVXNlciBHUFJTOgowMDAwMDQwMCAgMDAwMDAwMDAgIDAwMDAwMDBiICA3ZmZmZmE5MAowMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwICAwMDQ1ZDlmNAowMDQ1Y2FmYyAgN2ZmZmZhOTAgIDdmZmZmZjE4ICAwMDQ1Y2IwOAowMDAxMDQwMCAgODA0MDM5ZTggIDgwNDAzYWY4ICA3ZmZmZjhiMApVc2VyIEFDUlM6CjAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwCjAwMDAwMDAxICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwCjAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwCjAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwCktlcm5lbCBCYWNrQ2hhaW4gIENhbGxDaGFpbiAgICBCYWNrQ2hhaW4gIENhbGxDaGFpbgogICAgICAgMDA0YjdjYTggICA4MDAyYmQwYyAgICAgMDA0YjdkMTggICA4MDAyYjkyYwogICAgICAgMDA0YjdkYjggICA4MDA1Y2Q1MCAgICAgMDA0YjdlMzggICA4MDA1ZDEyYQogICAgICAgMDA0YjdmMDggICA4MDAxOTExNCAgICAgICAgICAgICAgICAgICAgIApTaG93aW5nIGFtb25nIG90aGVyIHRoaW5ncyBtZW1vcnkgdXNhZ2UgJiBzdGF0dXMgb2Ygc29tZSBzaWduYWxzICYKdGhlIHByb2Nlc3NlcydlcyByZWdpc3RlcnMgZnJvbSB0aGUga2VybmVsIHRhc2tfc3RydWN0dXJlCmFzIHdlbGwgYXMgYSBiYWNrY2hhaW4gd2hpY2ggbWF5IGJlIHVzZWZ1bCBpZiBhIHByb2Nlc3MgY3Jhc2hlcwppbiB0aGUga2VybmVsIGZvciBzb21lIHVua25vd24gcmVhc29uLgoKU29tZSBkcml2ZXIgZGVidWdnaW5nIHRlY2huaXF1ZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGVidWcgZmVhdHVyZQotLS0tLS0tLS0tLS0tClNvbWUgb2Ygb3VyIGRyaXZlcnMgbm93IHN1cHBvcnQgYSAiZGVidWcgZmVhdHVyZSIgaW4KL3Byb2MvczM5MGRiZiBzZWUgczM5MGRiZi50eHQgaW4gdGhlIGxpbnV4L0RvY3VtZW50YXRpb24gZGlyZWN0b3J5CmZvciBtb3JlIGluZm8uCmUuZy4gCnRvIHN3aXRjaCBvbiB0aGUgbGNzICJkZWJ1ZyBmZWF0dXJlIgplY2hvIDUgPiAvcHJvYy9zMzkwZGJmL2xjcy9sZXZlbAomIHRoZW4gYWZ0ZXIgdGhlIGVycm9yIG9jY3VycmVkLgpjYXQgL3Byb2MvczM5MGRiZi9sY3Mvc3ByaW50ZiA+L2xvZ2ZpbGUKdGhlIGxvZ2ZpbGUgbm93IGNvbnRhaW5zIHNvbWUgaW5mb3JtYXRpb24gd2hpY2ggbWF5IGhlbHAKdGVjaCBzdXBwb3J0IHJlc29sdmUgYSBwcm9ibGVtIGluIHRoZSBmaWVsZC4KCgoKaGlnaCBsZXZlbCBkZWJ1Z2dpbmcgbmV0d29yayBkcml2ZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQppZmNvbmZpZyBpcyBhIHF1aXRlIHVzZWZ1bCBjb21tYW5kCml0IGdpdmVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIG5ldHdvcmsgZHJpdmVycy4KCklmIHlvdSBzdXNwZWN0IHlvdXIgbmV0d29yayBkZXZpY2UgZHJpdmVyIGlzIGRlYWQKb25lIHdheSB0byBjaGVjayBpcyB0eXBlIAppZmNvbmZpZyA8bmV0d29yayBkZXZpY2U+IAplLmcuIHRyMApZb3Ugc2hvdWxkIHNlZSBzb21ldGhpbmcgbGlrZQp0cjAgICAgICAgTGluayBlbmNhcDoxNi80IE1icHMgVG9rZW4gUmluZyAoTmV3KSAgSFdhZGRyIDAwOjA0OkFDOjIwOjhFOjQ4CiAgICAgICAgICBpbmV0IGFkZHI6OS4xNjQuMTg1LjEzMiAgQmNhc3Q6OS4xNjQuMTkxLjI1NSAgTWFzazoyNTUuMjU1LjIyNC4wCiAgICAgICAgICBVUCBCUk9BRENBU1QgUlVOTklORyBNVUxUSUNBU1QgIE1UVToyMDAwICBNZXRyaWM6MQogICAgICAgICAgUlggcGFja2V0czoyNDYxMzQgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgZnJhbWU6MAogICAgICAgICAgVFggcGFja2V0czo1IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGNhcnJpZXI6MAogICAgICAgICAgY29sbGlzaW9uczowIHR4cXVldWVsZW46MTAwCgppZiB0aGUgZGV2aWNlIGRvZXNuJ3Qgc2F5IHVwCnRyeQovZXRjL3JjLmQvaW5pdC5kL25ldHdvcmsgc3RhcnQgCiggdGhpcyBzdGFydHMgdGhlIG5ldHdvcmsgc3RhY2sgJiBob3BlZnVsbHkgY2FsbHMgaWZjb25maWcgdHIwIHVwICkuCmlmY29uZmlnIGxvb2tzIGF0IHRoZSBvdXRwdXQgb2YgL3Byb2MvbmV0L2RldiAmIHByZXNlbnRzIGl0IGluIGEgbW9yZSBwcmVzZW50YWJsZSBmb3JtCk5vdyBwaW5nIHRoZSBkZXZpY2UgZnJvbSBhIG1hY2hpbmUgaW4gdGhlIHNhbWUgc3VibmV0LgppZiB0aGUgUlggcGFja2V0cyBjb3VudCAmIFRYIHBhY2tldHMgY291bnRzIGRvbid0IGluY3JlbWVudCB5b3UgcHJvYmFibHkKaGF2ZSBwcm9ibGVtcy4KbmV4dCAKY2F0IC9wcm9jL25ldC9hcnAKRG8geW91IHNlZSBhbnkgaGFyZHdhcmUgYWRkcmVzc2VzIGluIHRoZSBjYWNoZSBpZiBub3QgeW91IG1heSBoYXZlIHByb2JsZW1zLgpOZXh0IHRyeQpwaW5nIC1jIDUgPGJyb2FkY2FzdF9hZGRyPiBpLmUuIHRoZSBCY2FzdCBmaWVsZCBhYm92ZSBpbiB0aGUgb3V0cHV0IG9mCmlmY29uZmlnLiBEbyB5b3Ugc2VlIGFueSByZXBsaWVzIGZyb20gbWFjaGluZXMgb3RoZXIgdGhhbiB0aGUgbG9jYWwgbWFjaGluZQppZiBub3QgeW91IG1heSBoYXZlIHByb2JsZW1zLiBhbHNvIGlmIHRoZSBUWCBwYWNrZXRzIGNvdW50IGluIGlmY29uZmlnCmhhc24ndCBpbmNyZW1lbnRlZCBlaXRoZXIgeW91IGhhdmUgc2VyaW91cyBwcm9ibGVtcyBpbiB5b3VyIGRyaXZlciAKKGUuZy4gdGhlIHR4YnVzeSBmaWVsZCBvZiB0aGUgbmV0d29yayBkZXZpY2UgYmVpbmcgc3R1Y2sgb24gKSAKb3IgeW91IG1heSBoYXZlIG11bHRpcGxlIG5ldHdvcmsgZGV2aWNlcyBjb25uZWN0ZWQuCgoKY2hhbmRldgotLS0tLS0tClRoZXJlIGlzIGEgbmV3IGRldmljZSBsYXllciBmb3IgY2hhbm5lbCBkZXZpY2VzLCBzb21lCmRyaXZlcnMgZS5nLiBsY3MgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIGxheWVyLgpJZiB0aGUgZGV2aWNlIHVzZXMgdGhlIGNoYW5uZWwgZGV2aWNlIGxheWVyIHlvdSdsbCBiZQphYmxlIHRvIGZpbmQgd2hhdCBpbnRlcnJ1cHRzIGl0IHVzZXMgJiB0aGUgY3VycmVudCBzdGF0ZSAKb2YgdGhlIGRldmljZS4KU2VlIHRoZSBtYW5wYWdlIGNoYW5kZXYuOCAmdHlwZSBjYXQgL3Byb2MvY2hhbmRldiBmb3IgbW9yZSBpbmZvLgoKCgpTdGFydGluZyBwb2ludHMgZm9yIGRlYnVnZ2luZyBzY3JpcHRpbmcgbGFuZ3VhZ2VzIGV0Yy4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpiYXNoL3NoCgpiYXNoIC14IDxzY3JpcHRuYW1lPgplLmcuIGJhc2ggLXggL3Vzci9iaW4vYmFzaGJ1ZwpkaXNwbGF5cyB0aGUgZm9sbG93aW5nIGxpbmVzIGFzIGl0IGV4ZWN1dGVzIHRoZW0uCisgTUFDSElORT1pNTg2CisgT1M9bGludXgtZ251CisgQ0M9Z2NjCisgQ0ZMQUdTPSAtRFBST0dSQU09J2Jhc2gnIC1ESE9TVFRZUEU9J2k1ODYnIC1ET1NUWVBFPSdsaW51eC1nbnUnIC1ETUFDSFRZUEU9J2k1ODYtcGMtbGludXgtZ251JyAtRFNIRUxMIC1ESEFWRV9DT05GSUdfSCAgIC1JLiAtSS4gLUkuL2xpYiAtTzIgLXBpcGUKKyBSRUxFQVNFPTIuMDEKKyBQQVRDSExFVkVMPTEKKyBSRUxTVEFUVVM9cmVsZWFzZQorIE1BQ0hUWVBFPWk1ODYtcGMtbGludXgtZ251ICAgCgpwZXJsIC1kIDxzY3JpcHRuYW1lPiBydW5zIHRoZSBwZXJsc2NyaXB0IGluIGEgZnVsbHkgaW50ZXJjYXRpdmUgZGVidWdnZXIKPGxpa2UgZ2RiPi4KVHlwZSAnaCcgaW4gdGhlIGRlYnVnZ2VyIGZvciBoZWxwLgoKZm9yIGRlYnVnZ2luZyBqYXZhIHR5cGUKamRiIDxmaWxlbmFtZT4gYW5vdGhlciBmdWxseSBpbnRlcmFjdGl2ZSBnZGIgc3R5bGUgZGVidWdnZXIuCiYgdHlwZSA/IGluIHRoZSBkZWJ1Z2dlciBmb3IgaGVscC4KCgoKRHVtcHRvb2wgJiBMY3Jhc2ggKCBsa2NkICkKPT09PT09PT09PT09PT09PT09PT09PT09PT0KTWljaGFlbCBIb2x6aGV1ICYgb3RoZXJzIGhlcmUgYXQgSUJNIGhhdmUgYSBmYWlybHkgbWF0dXJlIHBvcnQgb2YgClNHSSdzIGxjcmFzaCB0b29sIHdoaWNoIGFsbG93cyBvbmUgdG8gbG9vayBhdCBrZXJuZWwgc3RydWN0dXJlcyBpbiBhCnJ1bm5pbmcga2VybmVsLgoKSXQgYWxzbyBjb21wbGVtZW50cyBhIHRvb2wgY2FsbGVkIGR1bXB0b29sIHdoaWNoIGR1bXBzIGFsbCB0aGUga2VybmVsJ3MKbWVtb3J5IHBhZ2VzICYgcmVnaXN0ZXJzIHRvIGVpdGhlciBhIHRhcGUgb3IgYSBkaXNrLgpUaGlzIGNhbiBiZSB1c2VkIGJ5IHRlY2ggc3VwcG9ydCBvciBhbiBhbWJpdGlvdXMgZW5kIHVzZXIgZG8KcG9zdCBtb3J0ZW0gZGVidWdnaW5nIG9mIGEgbWFjaGluZSBsaWtlIGdkYiBjb3JlIGR1bXBzLgoKR29pbmcgaW50byBob3cgdG8gdXNlIHRoaXMgdG9vbCBpbiBkZXRhaWwgd2lsbCBiZSBleHBsYWluZWQKaW4gb3RoZXIgZG9jdW1lbnRhdGlvbiBzdXBwbGllZCBieSBJQk0gd2l0aCB0aGUgcGF0Y2hlcyAmIHRoZSAKbGNyYXNoIGhvbWVwYWdlIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9sa2NkLyAmIHRoZSBsY3Jhc2ggbWFucGFnZS4KCkhvdyB0aGV5IHdvcmsKLS0tLS0tLS0tLS0tLQpMY3Jhc2ggaXMgYSBwZXJmZWN0bHkgbm9ybWFsIHByb2dyYW0saG93ZXZlciwgaXQgcmVxdWlyZXMgMiAKYWRkaXRpb25hbCBmaWxlcywgS2VybnR5cGVzIHdoaWNoIGlzIGJ1aWx0IHVzaW5nIGEgcGF0Y2ggdG8gdGhlIApsaW51eCBrZXJuZWwgc291cmNlcyBpbiB0aGUgbGludXggcm9vdCBkaXJlY3RvcnkgJiB0aGUgU3lzdGVtLm1hcC4KCktlcm50eXBlcyBpcyBhbiBhbiBvYmplY3RmaWxlIHdob3NlIHNvbGUgcHVycG9zZSBpbiBsaWZlCmlzIHRvIHByb3ZpZGUgc3RhYnMgZGVidWcgaW5mbyB0byBsY3Jhc2gsIHRvIGRvIHRoaXMKS2VybnR5cGVzIGlzIGJ1aWx0IGZyb20ga2VybnR5cGVzLmMgd2hpY2gganVzdCBpbmNsdWRlcyB0aGUgbW9zdCBjb21tb25seQpyZWZlcmVuY2VkIGhlYWRlciBmaWxlcyB1c2VkIHdoZW4gZGVidWdnaW5nLCBsY3Jhc2ggY2FuIHRoZW4gcmVhZCB0aGUKLnN0YWJzIHNlY3Rpb24gb2YgdGhpcyBmaWxlLgoKRGVidWdnaW5nIGEgbGl2ZSBzeXN0ZW0gaXQgdXNlcyAvZGV2L21lbQphbHRlcm5hdGl2ZWx5IGZvciBwb3N0IG1vcnRlbSBkZWJ1Z2dpbmcgaXQgdXNlcyB0aGUgZGF0YSAKY29sbGVjdGVkIGJ5IGR1bXB0b29sLgoKCgpTeXNScQo9PT09PQpUaGlzIGlzIG5vdyBzdXBwb3J0ZWQgYnkgbGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUuClRvIGVuYWJsZSBpdCBkbyBjb21waWxlIHRoZSBrZXJuZWwgd2l0aCAKS2VybmVsIEhhY2tpbmcgLT4gTWFnaWMgU3lzUnEgS2V5IEVuYWJsZWQKZWNobyAiMSIgPiAvcHJvYy9zeXMva2VybmVsL3N5c3JxCmFsc28gdHlwZQplY2hvICI4IiA+L3Byb2Mvc3lzL2tlcm5lbC9wcmludGsKVG8gbWFrZSBwcmludGsgb3V0cHV0IGdvIHRvIGNvbnNvbGUuCk9uIDM5MCBhbGwgY29tbWFuZHMgYXJlIHByZWZpeGVkIHdpdGgKXi0KZS5nLgpeLXQgd2lsbCBzaG93IHRhc2tzLgpeLT8gb3Igc29tZSB1bmtub3duIGNvbW1hbmQgd2lsbCBkaXNwbGF5IGhlbHAuClRoZSBzeXNycSBrZXkgcmVhZGluZyBpcyB2ZXJ5IHBpY2t5ICggSSBoYXZlIHRvIHR5cGUgdGhlIGtleXMgaW4gYW4KIHh0ZXJtIHNlc3Npb24gJiBwYXN0ZSB0aGVtICBpbnRvIHRoZSB4MzI3MCBjb25zb2xlICkKJiBpdCBtYXkgYmUgd2lzZSB0byBwcmVkZWZpbmUgdGhlIGtleXMgYXMgZGVzY3JpYmVkIGluIHRoZSBWTSBoaW50cyBhYm92ZQoKVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBzeW5jaW5nIGRpc2tzIHVubW91bnRpbmcgJiByZWJvb3RpbmcKaWYgdGhlIG1hY2hpbmUgZ2V0cyBwYXJ0aWFsbHkgaHVuZy4KClJlYWQgRG9jdW1lbnRhdGlvbi9zeXNycS50eHQgZm9yIG1vcmUgaW5mbwoKUmVmZXJlbmNlczoKPT09PT09PT09PT0KRW50ZXJwcmlzZSBTeXN0ZW1zIEFyY2hpdGVjdHVyZSBSZWZlcmVuY2UgU3VtbWFyeQpFbnRlcnByaXNlIFN5c3RlbXMgQXJjaGl0ZWN0dXJlIFByaW5jaXBsZXMgb2YgT3BlcmF0aW9uCkhhcnRtdXQgUGVubmVycyBzMzkwIHN0YWNrIGZyYW1lIHNoZWV0LgpJQk0gTWFpbmZyYW1lIENoYW5uZWwgQXR0YWNobWVudCBhIHRlY2hub2xvZ3kgYnJpZWYgZnJvbSBhIENJU0NPIHdlYnBhZ2UKVmFyaW91cyBiaXRzIG9mIG1hbiAmIGluZm8gcGFnZXMgb2YgTGludXguCkxpbnV4ICYgR0RCIHNvdXJjZS4KVmFyaW91cyBpbmZvICYgbWFuIHBhZ2VzLgpDTVMgSGVscCBvbiB0cmFjaW5nIGNvbW1hbmRzLgpMaW51eCBmb3Igcy8zOTAgRWxmIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UKTGludXggZm9yIHovU2VyaWVzIEVsZiBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlICggQm90aCBIaWdobHkgUmVjb21tZW5kZWQgKQp6L0FyY2hpdGVjdHVyZSBQcmluY2lwbGVzIG9mIE9wZXJhdGlvbiBTQTIyLTc4MzItMDAKRW50ZXJwcmlzZSBTeXN0ZW1zIEFyY2hpdGVjdHVyZS8zOTAgUmVmZXJlbmNlIFN1bW1hcnkgU0EyMi03MjA5LTAxICYgdGhlCkVudGVycHJpc2UgU3lzdGVtcyBBcmNoaXRlY3R1cmUvMzkwIFByaW5jaXBsZXMgb2YgT3BlcmF0aW9uIFNBMjItNzIwMS0wNQoKU3BlY2lhbCBUaGFua3MKPT09PT09PT09PT09PT0KU3BlY2lhbCB0aGFua3MgdG8gTmVhbGUgRmVyZ3Vzb24gd2hvIG1haW50YWlucyBhIG11Y2gKcHJldHRpZXIgSFRNTCB2ZXJzaW9uIG9mIHRoaXMgcGFnZSBhdApodHRwOi8vcGVuZ3VpbnZtLnByaW5jZXRvbi5lZHUvbm90ZXMuaHRtbCNEZWJ1ZzM5MApCb2IgR3JhaW5nZXIgU3RlZmFuIEJhZGVyICYgb3RoZXJzIGZvciByZXBvcnRpbmcgYnVncwo=