ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICBEZWJ1Z2dpbmcgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKCQkJICAgICAgICAgICAgICAgYnkKCQlEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pCgkJQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZXN0IHZpZXdlZCB3aXRoIGZpeGVkIHdpZHRoIGZvbnRzIAoKT3ZlcnZpZXcgb2YgRG9jdW1lbnQ6Cj09PT09PT09PT09PT09PT09PT09PQpUaGlzIGRvY3VtZW50IGlzIGludGVuZGVkIHRvIGdpdmUgYW4gZ29vZCBvdmVydmlldyBvZiBob3cgdG8gZGVidWcgCkxpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIGl0IGlzbid0IGludGVuZGVkIGFzIGEgY29tcGxldGUgcmVmZXJlbmNlICYgbm90IGEKdHV0b3JpYWwgb24gdGhlIGZ1bmRhbWVudGFscyBvZiBDICYgYXNzZW1ibHksIGl0IGRvc2VuJ3QgZ28gaW50bwozOTAgSU8gaW4gYW55IGRldGFpbC4gSXQgaXMgaW50ZW5kZWQgdG8gY29tcGxlbWVudCB0aGUgZG9jdW1lbnRzIGluIHRoZQpyZWZlcmVuY2Ugc2VjdGlvbiBiZWxvdyAmIGFueSBvdGhlciB3b3J0aHdoaWxlIHJlZmVyZW5jZXMgeW91IGdldC4KCkl0IGlzIGludGVuZGVkIGxpa2UgdGhlIEVudGVycHJpc2UgU3lzdGVtcyBBcmNoaXRlY3R1cmUvMzkwIFJlZmVyZW5jZSBTdW1tYXJ5CnRvIGJlIHByaW50ZWQgb3V0ICYgdXNlZCBhcyBhIHF1aWNrIGNoZWF0IHNoZWV0IHNlbGYgaGVscCBzdHlsZSByZWZlcmVuY2Ugd2hlbgpwcm9ibGVtcyBvY2N1ci4KCkNvbnRlbnRzCj09PT09PT09ClJlZ2lzdGVyIFNldApBZGRyZXNzIFNwYWNlcyBvbiBJbnRlbCBMaW51eApBZGRyZXNzIFNwYWNlcyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQpUaGUgTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUgS2VybmVsIFRhc2sgU3RydWN0dXJlClJlZ2lzdGVyIFVzYWdlICYgU3RhY2tmcmFtZXMgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKQSBzYW1wbGUgcHJvZ3JhbSB3aXRoIGNvbW1lbnRzCkNvbXBpbGluZyBwcm9ncmFtcyBmb3IgZGVidWdnaW5nIG9uIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCkZpZ3VyaW5nIG91dCBnY2MgY29tcGlsZSBlcnJvcnMKRGVidWdnaW5nIFRvb2xzCm9iamR1bXAKc3RyYWNlClBlcmZvcm1hbmNlIERlYnVnZ2luZyAKRGVidWdnaW5nIHVuZGVyIFZNCnMvMzkwICYgei9BcmNoaXRlY3R1cmUgSU8gT3ZlcnZpZXcKRGVidWdnaW5nIElPIG9uIHMvMzkwICYgei9BcmNoaXRlY3R1cmUgdW5kZXIgVk0KR0RCIG9uIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKU3RhY2sgY2hhaW5pbmcgaW4gZ2RiIGJ5IGhhbmQKRXhhbWluaW5nIGNvcmUgZHVtcHMKbGRkCkRlYnVnZ2luZyBtb2R1bGVzClRoZSBwcm9jIGZpbGUgc3lzdGVtClN0YXJ0aW5nIHBvaW50cyBmb3IgZGVidWdnaW5nIHNjcmlwdGluZyBsYW5ndWFnZXMgZXRjLgpEdW1wdG9vbCAmIExjcmFzaApTeXNScQpSZWZlcmVuY2VzClNwZWNpYWwgVGhhbmtzCgpSZWdpc3RlciBTZXQKPT09PT09PT09PT09ClRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZXMgaGF2ZSB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycy4KIAoxNiAgR2VuZXJhbCBwcm9wb3NlIHJlZ2lzdGVycywgMzIgYml0IG9uIHMvMzkwIDY0IGJpdCBvbiB6L0FyY2hpdGVjdHVyZSwgcjAtcjE1IG9yIGdwcjAtZ3ByMTUgdXNlZCBmb3IgYXJpdGhtZXRpYyAmIGFkZHJlc3NpbmcuIAoKMTYgQ29udHJvbCByZWdpc3RlcnMsIDMyIGJpdCBvbiBzLzM5MCA2NCBiaXQgb24gei9BcmNoaXRlY3R1cmUsICggY3IwLWNyMTUga2VybmVsIHVzYWdlIG9ubHkgKSB1c2VkIGZvciBtZW1vcnkgbWFuYWdlbWVudCwKaW50ZXJydXB0IGNvbnRyb2wsZGVidWdnaW5nIGNvbnRyb2wgZXRjLgoKMTYgQWNjZXNzIHJlZ2lzdGVycyAoIGFyMC1hcjE1ICkgMzIgYml0IG9uIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKbm90IHVzZWQgYnkgbm9ybWFsIHByb2dyYW1zIGJ1dCBwb3RlbnRpYWxseSBjb3VsZCAKYmUgdXNlZCBhcyB0ZW1wb3Jhcnkgc3RvcmFnZS4gVGhlaXIgbWFpbiBwdXJwb3NlIGlzIHRoZWlyIDEgdG8gMQphc3NvY2lhdGlvbiB3aXRoIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgYW5kIGFyZSB1c2VkIGluCnRoZSBrZXJuZWwgZm9yIGNvcHlpbmcgZGF0YSBiZXR3ZWVuIGtlcm5lbCAmIHVzZXIgYWRkcmVzcyBzcGFjZXMuCkFjY2VzcyByZWdpc3RlciAwICggJiBhY2Nlc3MgcmVnaXN0ZXIgMSBvbiB6L0FyY2hpdGVjdHVyZSAoIG5lZWRzIDY0IGJpdCAKcG9pbnRlciApICkgaXMgY3VycmVudGx5IHVzZWQgYnkgdGhlIHB0aHJlYWQgbGlicmFyeSBhcyBhIHBvaW50ZXIgdG8KdGhlIGN1cnJlbnQgcnVubmluZyB0aHJlYWRzIHByaXZhdGUgYXJlYS4KCjE2IDY0IGJpdCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKGZwMC1mcDE1ICkgSUVFRSAmIEhGUCBmbG9hdGluZyAKcG9pbnQgZm9ybWF0IGNvbXBsaWFudCBvbiBHNSB1cHdhcmRzICYgYSBGbG9hdGluZyBwb2ludCBjb250cm9sIHJlZyAoRlBDKSAKNCAgNjQgYml0IHJlZ2lzdGVycyAoZnAwLGZwMixmcDQgJiBmcDYpIEhGUCBvbmx5IG9uIG9sZGVyIG1hY2hpbmVzLgpOb3RlOgpMaW51eCAoY3VycmVudGx5KSBhbHdheXMgdXNlcyBJRUVFICYgZW11bGF0ZXMgRzUgSUVFRSBmb3JtYXQgb24gb2xkZXIgbWFjaGluZXMsCiggcHJvdmlkZWQgdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIGZvciB0aGlzICkuCgoKVGhlIFBTVyBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgcmVnaXN0ZXIgb24gdGhlIG1hY2hpbmUgaXQKaXMgNjQgYml0IG9uIHMvMzkwICYgMTI4IGJpdCBvbiB6L0FyY2hpdGVjdHVyZSAmIHNlcnZlcyB0aGUgcm9sZXMgb2YgCmEgcHJvZ3JhbSBjb3VudGVyIChwYyksIGNvbmRpdGlvbiBjb2RlIHJlZ2lzdGVyLG1lbW9yeSBzcGFjZSBkZXNpZ25hdG9yLgpJbiBJQk0gc3RhbmRhcmQgbm90YXRpb24gSSBhbSBjb3VudGluZyBiaXQgMCBhcyB0aGUgTVNCLgpJdCBoYXMgc2V2ZXJhbCBhZHZhbnRhZ2VzIG92ZXIgYSBub3JtYWwgcHJvZ3JhbSBjb3VudGVyCmluIHRoYXQgeW91IGNhbiBjaGFuZ2UgYWRkcmVzcyB0cmFuc2xhdGlvbiAmIHByb2dyYW0gY291bnRlciAKaW4gYSBzaW5nbGUgaW5zdHJ1Y3Rpb24uIFRvIGNoYW5nZSBhZGRyZXNzIHRyYW5zbGF0aW9uLAplLmcuIHN3aXRjaGluZyBhZGRyZXNzIHRyYW5zbGF0aW9uIG9mZiByZXF1aXJlcyB0aGF0IHlvdQpoYXZlIGEgbG9naWNhbD1waHlzaWNhbCBtYXBwaW5nIGZvciB0aGUgYWRkcmVzcyB5b3UgYXJlCmN1cnJlbnRseSBydW5uaW5nIGF0LgoKICAgICAgQml0ICAgICAgICAgICBWYWx1ZQpzLzM5MCB6L0FyY2hpdGVjdHVyZQowICAgICAgIDAgICAgIFJlc2VydmVkICggbXVzdCBiZSAwICkgb3RoZXJ3aXNlIHNwZWNpZmljYXRpb24gZXhjZXB0aW9uIG9jY3Vycy4KCjEgICAgICAgMSAgICAgUHJvZ3JhbSBFdmVudCBSZWNvcmRpbmcgMSBQRVIgZW5hYmxlZCwgCgkgICAgICBQRVIgaXMgdXNlZCB0byBmYWNpbGl0aXRhdGUgZGVidWdnaW5nIGUuZy4gc2luZ2xlIHN0ZXBwaW5nLgoKMi00ICAgIDItNCAgICBSZXNlcnZlZCAoIG11c3QgYmUgMCApLiAKCjUgICAgICAgNSAgICAgRHluYW1pYyBhZGRyZXNzIHRyYW5zbGF0aW9uIDE9REFUIG9uLgoKNiAgICAgICA2ICAgICBJbnB1dC9PdXRwdXQgaW50ZXJydXB0IE1hc2sKCjcgICAgICAgNyAgICAgRXh0ZXJuYWwgaW50ZXJydXB0IE1hc2sgdXNlZCBwcmltYXJpbHkgZm9yIGludGVycHJvY2Vzc29yIHNpZ25hbGxpbmcgJiAKCSAgICAgIGNsb2NrIGludGVycnVwdHMuCgo4LTExICA4LTExICAgIFBTVyBLZXkgdXNlZCBmb3IgY29tcGxleCBtZW1vcnkgcHJvdGVjdGlvbiBtZWNoYW5pc20gbm90IHVzZWQgdW5kZXIgbGludXgKCjEyICAgICAgMTIgICAgMSBvbiBzLzM5MCAwIG9uIHovQXJjaGl0ZWN0dXJlCgoxMyAgICAgIDEzICAgIE1hY2hpbmUgQ2hlY2sgTWFzayAxPWVuYWJsZSBtYWNoaW5lIGNoZWNrIGludGVycnVwdHMKCjE0ICAgICAgMTQgICAgV2FpdCBTdGF0ZSBzZXQgdGhpcyB0byAxIHRvIHN0b3AgdGhlIHByb2Nlc3NvciBleGNlcHQgZm9yIGludGVycnVwdHMgJiBnaXZlIAoJICAgICAgdGltZSB0byBvdGhlciBMUEFSUyB1c2VkIGluIENQVSBpZGxlIGluIHRoZSBrZXJuZWwgdG8gaW5jcmVhc2Ugb3ZlcmFsbCAKCSAgICAgIHVzYWdlIG9mIHByb2Nlc3NvciByZXNvdXJjZXMuCgoxNSAgICAgIDE1ICAgIFByb2JsZW0gc3RhdGUgKCBpZiBzZXQgdG8gMSBjZXJ0YWluIGluc3RydWN0aW9ucyBhcmUgZGlzYWJsZWQgKQoJICAgICAgYWxsIGxpbnV4IHVzZXIgcHJvZ3JhbXMgcnVuIHdpdGggdGhpcyBiaXQgMSAKCSAgICAgICggdXNlZnVsIGluZm8gZm9yIGRlYnVnZ2luZyB1bmRlciBWTSApLgoKMTYtMTcgMTYtMTcgICBBZGRyZXNzIFNwYWNlIENvbnRyb2wKCgkgICAgICAwMCBQcmltYXJ5IFNwYWNlIE1vZGUgd2hlbiBEQVQgb24KCSAgICAgIFRoZSBsaW51eCBrZXJuZWwgY3VycmVudGx5IHJ1bnMgaW4gdGhpcyBtb2RlLCBDUjEgaXMgYWZmaWxpYXRlZCB3aXRoIAogICAgICAgICAgICAgIHRoaXMgbW9kZSAmIHBvaW50cyB0byB0aGUgcHJpbWFyeSBzZWdtZW50IHRhYmxlIG9yaWdpbiBldGMuCgoJICAgICAgMDEgQWNjZXNzIHJlZ2lzdGVyIG1vZGUgdGhpcyBtb2RlIGlzIHVzZWQgaW4gZnVuY3Rpb25zIHRvIAoJICAgICAgY29weSBkYXRhIGJldHdlZW4ga2VybmVsICYgdXNlciBzcGFjZS4KCgkgICAgICAxMCBTZWNvbmRhcnkgc3BhY2UgbW9kZSBub3QgdXNlZCBpbiBsaW51eCBob3dldmVyIENSNyB0aGUKCSAgICAgIHJlZ2lzdGVyIGFmZmlsaWF0ZWQgd2l0aCB0aGlzIG1vZGUgaXMgJiB0aGlzICYgbm9ybWFsbHkKCSAgICAgIENSMTM9Q1I3IHRvIGFsbG93IHVzIHRvIGNvcHkgZGF0YSBiZXR3ZWVuIGtlcm5lbCAmIHVzZXIgc3BhY2UuCgkgICAgICBXZSBkbyB0aGlzIGFzIGZvbGxvd3M6CgkgICAgICBXZSBzZXQgYXIyIHRvIDAgdG8gZGVzaWduYXRlIGl0cwoJICAgICAgYWZmaWxpYXRlZCBncHIgKCBncHIyICl0byBwb2ludCB0byBwcmltYXJ5PWtlcm5lbCBzcGFjZS4KCSAgICAgIFdlIHNldCBhcjQgdG8gMSB0byBkZXNpZ25hdGUgaXRzCgkgICAgICBhZmZpbGlhdGVkIGdwciAoIGdwcjQgKSB0byBwb2ludCB0byBzZWNvbmRhcnk9aG9tZT11c2VyIHNwYWNlCgkgICAgICAmIHRoZW4gZXNzZW50aWFsbHkgZG8gYSBtZW1jb3B5KGdwcjIsZ3ByNCxzaXplKSB0bwoJICAgICAgY29weSBkYXRhIGJldHdlZW4gdGhlIGFkZHJlc3Mgc3BhY2VzLCB0aGUgcmVhc29uIHdlIHVzZSBob21lIHNwYWNlIGZvciB0aGUKCSAgICAgIGtlcm5lbCAmIGRvbid0IGtlZXAgc2Vjb25kYXJ5IHNwYWNlIGZyZWUgaXMgdGhhdCBjb2RlIHdpbGwgbm90IHJ1biBpbiAKCSAgICAgIHNlY29uZGFyeSBzcGFjZS4KCgkgICAgICAxMSBIb21lIFNwYWNlIE1vZGUgYWxsIHVzZXIgcHJvZ3JhbXMgcnVuIGluIHRoaXMgbW9kZS4KCSAgICAgIGl0IGlzIGFmZmlsaWF0ZWQgd2l0aCBDUjEzLgoKMTgtMTkgMTgtMTkgICBDb25kaXRpb24gY29kZXMgKENDKQoKMjAgICAgMjAgICAgICBGaXhlZCBwb2ludCBvdmVyZmxvdyBtYXNrIGlmIDE9RlBVIGV4Y2VwdGlvbnMgZm9yIHRoaXMgZXZlbnQgCiAgICAgICAgICAgICAgb2NjdXIgKCBub3JtYWxseSAwICkgCgoyMSAgICAyMSAgICAgIERlY2ltYWwgb3ZlcmZsb3cgbWFzayBpZiAxPUZQVSBleGNlcHRpb25zIGZvciB0aGlzIGV2ZW50IG9jY3VyIAogICAgICAgICAgICAgICggbm9ybWFsbHkgMCApCgoyMiAgICAyMiAgICAgIEV4cG9uZW50IHVuZGVyZmxvdyBtYXNrIGlmIDE9RlBVIGV4Y2VwdGlvbnMgZm9yIHRoaXMgZXZlbnQgb2NjdXIgCiAgICAgICAgICAgICAgKCBub3JtYWxseSAwICkKCjIzICAgIDIzICAgICAgU2lnbmlmaWNhbmNlIE1hc2sgaWYgMT1GUFUgZXhjZXB0aW9ucyBmb3IgdGhpcyBldmVudCBvY2N1ciAKICAgICAgICAgICAgICAoIG5vcm1hbGx5IDAgKQoKMjQtMzEgMjQtMzAgICBSZXNlcnZlZCBNdXN0IGJlIDAuCgogICAgICAzMSAgICAgIEV4dGVuZGVkIEFkZHJlc3NpbmcgTW9kZQogICAgICAzMiAgICAgIEJhc2ljIEFkZHJlc3NpbmcgTW9kZQogICAgICAgICAgICAgIFVzZWQgdG8gc2V0IGFkZHJlc3NpbmcgbW9kZQoJICAgICAgUFNXIDMxICAgUFNXIDMyCiAgICAgICAgICAgICAgICAwICAgICAgICAgMCAgICAgICAgMjQgYml0CiAgICAgICAgICAgICAgICAwICAgICAgICAgMSAgICAgICAgMzEgYml0CiAgICAgICAgICAgICAgICAxICAgICAgICAgMSAgICAgICAgNjQgYml0CgozMiAgICAgICAgICAgICAxPTMxIGJpdCBhZGRyZXNzaW5nIG1vZGUgMD0yNCBiaXQgYWRkcmVzc2luZyBtb2RlIChmb3IgYmFja3dhcmQgCiAgICAgICAgICAgICAgIGNvbXBhdGliaWxpdHkpLCBsaW51eCBhbHdheXMgcnVucyB3aXRoIHRoaXMgYml0IHNldCB0byAxCgozMy02NCAgICAgICAgICBJbnN0cnVjdGlvbiBhZGRyZXNzLgogICAgICAzMy02MyAgICBSZXNlcnZlZCBtdXN0IGJlIDAKICAgICAgNjQtMTI3ICAgQWRkcmVzcwogICAgICAgICAgICAgICBJbiAyNCBiaXRzIG1vZGUgYml0cyA2NC0xMDM9MCBiaXRzIDEwNC0xMjcgQWRkcmVzcyAKICAgICAgICAgICAgICAgSW4gMzEgYml0cyBtb2RlIGJpdHMgNjQtOTY9MCBiaXRzIDk3LTEyNyBBZGRyZXNzCiAgICAgICAgICAgICAgIE5vdGU6IHVubGlrZSAzMSBiaXQgbW9kZSBvbiBzLzM5MCBiaXQgOTYgbXVzdCBiZSB6ZXJvCgkgICAgICAgd2hlbiBsb2FkaW5nIHRoZSBhZGRyZXNzIHdpdGggTFBTV0Ugb3RoZXJ3aXNlIGEgCiAgICAgICAgICAgICAgIHNwZWNpZmljYXRpb24gZXhjZXB0aW9uIG9jY3VycywgTFBTVyBpcyBmdWxseSBiYWNrd2FyZAogICAgICAgICAgICAgICBjb21wYXRpYmxlLgogCSAgCgkgIApQcmVmaXggUGFnZShzKQotLS0tLS0tLS0tLS0tLQkgIApUaGlzIHBlciBjcHUgbWVtb3J5IGFyZWEgaXMgdG9vIGludGltYXRlbHkgdGllZCB0byB0aGUgcHJvY2Vzc29yIG5vdCB0byBtZW50aW9uLgpJdCBleGlzdHMgYmV0d2VlbiB0aGUgcmVhbCBhZGRyZXNzZXMgMC00MDk2IG9uIHMvMzkwICYgMC04MTkyIHovQXJjaGl0ZWN0dXJlICYgaXMgZXhjaGFuZ2VkIAp3aXRoIGEgMSBwYWdlIG9uIHMvMzkwIG9yIDIgcGFnZXMgb24gei9BcmNoaXRlY3R1cmUgaW4gYWJzb2x1dGUgc3RvcmFnZSBieSB0aGUgc2V0IApwcmVmaXggaW5zdHJ1Y3Rpb24gaW4gbGludXgnZXMgc3RhcnR1cC4gClRoaXMgcGFnZSBpcyBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgcHJlZml4IGZvciBlYWNoIHByb2Nlc3NvciBpbiBhbiBTTVAgY29uZmlndXJhdGlvbgooIGFzc3VtaW5nIHRoZSBvcyBkZXNpZ25lciBpcyBzYW5lIG9mIGNvdXJzZSA6LSkgKS4KQnl0ZXMgMC01MTIgKCAyMDAgaGV4ICkgb24gcy8zOTAgJiAwLTUxMiw0MDk2LTQ1NDQsNDYwNC01MTE5IGN1cnJlbnRseSBvbiB6L0FyY2hpdGVjdHVyZSAKYXJlIHVzZWQgYnkgdGhlIHByb2Nlc3NvciBpdHNlbGYgZm9yIGhvbGRpbmcgc3VjaCBpbmZvcm1hdGlvbiBhcyBleGNlcHRpb24gaW5kaWNhdGlvbnMgJiAKZW50cnkgcG9pbnRzIGZvciBleGNlcHRpb25zLgpCeXRlcyBhZnRlciAweGMwMCBoZXggYXJlIHVzZWQgYnkgbGludXggZm9yIHBlciBwcm9jZXNzb3IgZ2xvYmFscyBvbiBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIAooIHRoZXJlIGlzIGEgZ2FwIG9uIHovQXJjaGl0ZWN0dXJlIHRvbyBjdXJyZW50bHkgYmV0d2VlbiAweGMwMCAmIDEwMDAgd2hpY2ggbGludXggdXNlcyApLgpUaGUgY2xvc2VzdCB0aGluZyB0byB0aGlzIG9uIHRyYWRpdGlvbmFsIGFyY2hpdGVjdHVyZXMgaXMgdGhlIGludGVycnVwdAp2ZWN0b3IgdGFibGUuIFRoaXMgaXMgYSBnb29kIHRoaW5nICYgZG9lcyBzaW1wbGlmeSBzb21lIG9mIHRoZSBrZXJuZWwgY29kaW5nCmhvd2V2ZXIgaXQgbWVhbnMgdGhhdCB3ZSBub3cgY2Fubm90IGNhdGNoIHN0cmF5IE5VTEwgcG9pbnRlcnMgaW4gdGhlCmtlcm5lbCB3aXRob3V0IGhhcmQgY29kZWQgY2hlY2tzLgoKCgpBZGRyZXNzIFNwYWNlcyBvbiBJbnRlbCBMaW51eAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhlIHRyYWRpdGlvbmFsIEludGVsIExpbnV4IGlzIGFwcHJveGltYXRlbHkgbWFwcGVkIGFzIGZvbGxvd3MgZm9yZ2l2ZQp0aGUgYXNjaWkgYXJ0LgoweEZGRkZGRkZGIDRHQiBIaW1lbSAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEtlcm5lbCBTcGFjZSAgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKiogICAgICAgICAgKioqKioqKioqKioqKioqKgpVc2VyIFNwYWNlIEhpbWVtICh0eXBpY2FsbHkgMHhDMDAwMDAwMCAzR0IgKSogIFVzZXIgU3RhY2sgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKCQkJCSAgICAgICAgICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICogICAgICAgICAgICAgICoKCQkJCQkgICAgKiAgU2hhcmVkIExpYnMgICogICAgICAgICAgKiBOZXh0IFByb2Nlc3MgKiAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqICAgICB0byAgICAgICAqICAKCQkJCQkgICAgKiAgICAgICAgICAgICAgICogICAgPD09ICAgKiAgICAgUnVuICAgICAgKiAgPD09CgkJCQkJICAgICogIFVzZXIgUHJvZ3JhbSAqICAgICAgICAgICogICAgICAgICAgICAgICoKCQkJCQkgICAgKiAgIERhdGEgQlNTICAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoJIFRleHQgICAgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCiAgICAgICAgIAkJCSAgICAgICAgICAgICogICBTZWN0aW9ucyAgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKMHgwMDAwMDAwMCAgICAgICAgIAkJCSAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqKioqKioqKioqKioqKioqCgpOb3cgaXQgaXMgZWFzeSB0byBzZWUgdGhhdCBvbiBJbnRlbCBpdCBpcyBxdWl0ZSBlYXN5IHRvIHJlY29nbmlzZSBhIGtlcm5lbCBhZGRyZXNzIAphcyBiZWluZyBvbmUgZ3JlYXRlciB0aGFuIHVzZXIgc3BhY2UgaGltZW0gKCBpbiB0aGlzIGNhc2UgMHhDMDAwMDAwMCkuCiYgYWRkcmVzc2VzIG9mIGxlc3MgdGhhbiB0aGlzIGFyZSB0aGUgb25lcyBpbiB0aGUgY3VycmVudCBydW5uaW5nIHByb2dyYW0gb24gdGhpcwpwcm9jZXNzb3IgKCBpZiBhbiBzbXAgYm94ICkuCklmIHVzaW5nIHRoZSB2aXJ0dWFsIG1hY2hpbmUgKCBWTSApIGFzIGEgZGVidWdnZXIgaXQgaXMgcXVpdGUgZGlmZmljdWx0IHRvCmtub3cgd2hpY2ggdXNlciBwcm9jZXNzIGlzIHJ1bm5pbmcgYXMgdGhlIGFkZHJlc3Mgc3BhY2UgeW91IGFyZSBsb29raW5nIGF0CmNvdWxkIGJlIGZyb20gYW55IHByb2Nlc3MgaW4gdGhlIHJ1biBxdWV1ZS4KClRoZSBsaW1pdGF0aW9uIG9mIEludGVscyBhZGRyZXNzaW5nIHRlY2huaXF1ZSBpcyB0aGF0IHRoZSBsaW51eAprZXJuZWwgdXNlcyBhIHZlcnkgc2ltcGxlIHJlYWwgYWRkcmVzcyB0byB2aXJ0dWFsIGFkZHJlc3NpbmcgdGVjaG5pcXVlCm9mIFJlYWwgQWRkcmVzcz1WaXJ0dWFsIEFkZHJlc3MtVXNlciBTcGFjZSBIaW1lbS4KVGhpcyBtZWFucyB0aGF0IG9uIEludGVsIHRoZSBrZXJuZWwgbGludXggY2FuIHR5cGljYWxseSBvbmx5IGFkZHJlc3MKSGltZW09MHhGRkZGRkZGRi0weEMwMDAwMDAwPTFHQiAmIHRoaXMgaXMgYWxsIHRoZSBSQU0gdGhlc2UgbWFjaGluZXMKY2FuIHR5cGljYWxseSB1c2UuClRoZXkgY2FuIGxvd2VyIFVzZXIgSGltZW0gdG8gMkdCIG9yIGxvd2VyICYgdGh1cyBiZQphYmxlIHRvIHVzZSAyR0Igb2YgUkFNIGhvd2V2ZXIgdGhpcyBzaHJpbmtzIHRoZSBtYXhpbXVtIHNpemUKb2YgVXNlciBTcGFjZSBmcm9tIDNHQiB0byAyR0IgdGhleSBoYXZlIGEgbm8gd2luIGxpbWl0IG9mIDRHQiB1bmxlc3MKdGhleSBnbyB0byA2NCBCaXQuCgoKT24gMzkwIG91ciBsaW1pdGF0aW9ucyAmIHN0cmVuZ3RocyBtYWtlIHVzIHNsaWdodGx5IGRpZmZlcmVudC4KRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2UgYXJlIG9ubHkgYWxsb3dlZCB1c2UgMzEgYml0cyAoMkdCKQpvZiBvdXIgMzIgYml0IGFkZHJlc3NlcywgaG93ZXZlciwgd2UgdXNlIGVudGlyZWx5IHNlcGFyYXRlIGFkZHJlc3MgCnNwYWNlcyBmb3IgdGhlIHVzZXIgJiBrZXJuZWwuCgpUaGlzIG1lYW5zIHdlIGNhbiBzdXBwb3J0IDJHQiBvZiBub24gRXh0ZW5kZWQgUkFNIG9uIHMvMzkwLCAmIG1vcmUKd2l0aCB0aGUgRXh0ZW5kZWQgbWVtb3J5IG1hbmFnZW1lbnQgc3dhcCBkZXZpY2UgJiAKY3VycmVudGx5IDRUQiBvZiBwaHlzaWNhbCBtZW1vcnkgY3VycmVudGx5IG9uIHovQXJjaGl0ZWN0dXJlLgoKCkFkZHJlc3MgU3BhY2VzIG9uIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpPdXIgYWRkcmVzc2luZyBzY2hlbWUgaXMgYXMgZm9sbG93cwoKCkhpbWVtIDB4N2ZmZmZmZmYgMkdCIG9uIHMvMzkwICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICoqKioqKioqKioqKioqKioKY3VycmVudGx5IDB4M2ZmZmZmZmZmZmYgKDJeNDIpLTEgKiAgVXNlciBTdGFjayAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgpvbiB6L0FyY2hpdGVjdHVyZS4JCSAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqICAgICAgICAgICAgICAqCgkJICAgICAgICAgICAgICAgICAqICBTaGFyZWQgTGlicyAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICogICAgICAgICAgICAgICogIAoJCQkgICAgICAgICAqICAgICAgICAgICAgICAgKiAgICAgICAgICAqICAgIEtlcm5lbCAgICAqICAKCQkgICAgICAgICAgICAgICAgICogIFVzZXIgUHJvZ3JhbSAqICAgICAgICAgICogICAgICAgICAgICAgICoKCQkgICAgICAgICAgICAgICAgICogICBEYXRhIEJTUyAgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICBUZXh0ICAgICAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgogICAgICAgICAgICAJCQkgKiAgIFNlY3Rpb25zICAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgoweDAwMDAwMDAwICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqKioqKioqKioqKioqKioqCgpUaGlzIGFsc28gbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGxvb2sgYXQgdGhlIFBTVyBwcm9ibGVtIHN0YXRlIGJpdApvciB0aGUgYWRkcmVzc2luZyBtb2RlIHRvIGRlY2lkZSB3aGV0aGVyIHdlIGFyZSBsb29raW5nIGF0CnVzZXIgb3Iga2VybmVsIHNwYWNlLgoKVmlydHVhbCBBZGRyZXNzZXMgb24gcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpBIHZpcnR1YWwgYWRkcmVzcyBvbiBzLzM5MCBpcyBtYWRlIHVwIG9mIDMgcGFydHMKVGhlIFNYICggc2VnbWVudCBpbmRleCwgcm91Z2hseSBjb3JyZXNwb25kaW5nIHRvIHRoZSBQR0QgJiBQTUQgaW4gbGludXggdGVybWlub2xvZ3kgKSAKYmVpbmcgYml0cyAxLTExLgpUaGUgUFggKCBwYWdlIGluZGV4LCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYWdlIHRhYmxlIGVudHJ5IChwdGUpIGluIGxpbnV4IHRlcm1pbm9sb2d5ICkKYmVpbmcgYml0cyAxMi0xOS4gClRoZSByZW1haW5pbmcgYml0cyBCWCAodGhlIGJ5dGUgaW5kZXggYXJlIHRoZSBvZmZzZXQgaW4gdGhlIHBhZ2UgKQppLmUuIGJpdHMgMjAgdG8gMzEuCgpPbiB6L0FyY2hpdGVjdHVyZSBpbiBsaW51eCB3ZSBjdXJyZW50bHkgbWFrZSB1cCBhbiBhZGRyZXNzIGZyb20gNCBwYXJ0cy4KVGhlIHJlZ2lvbiBpbmRleCBiaXRzIChSWCkgMC0zMiB3ZSBjdXJyZW50bHkgdXNlIGJpdHMgMjItMzIKVGhlIHNlZ21lbnQgaW5kZXggKFNYKSBiZWluZyBiaXRzIDMzLTQzClRoZSBwYWdlIGluZGV4IChQWCkgYmVpbmcgYml0cyAgNDQtNTEKVGhlIGJ5dGUgaW5kZXggKEJYKSBiZWluZyBiaXRzICA1Mi02MwoKTm90ZXM6CjEpIHMvMzkwIGhhcyBubyBQTUQgc28gdGhlIFBNRCBpcyByZWFsbHkgdGhlIFBHRCBhbHNvLgpBIGxvdCBvZiB0aGlzIHN0dWZmIGlzIGRlZmluZWQgaW4gcGd0YWJsZS5oLgoKMikgQWxzbyBzZWVpbmcgYXMgcy8zOTAncyBwYWdlIGluZGV4ZXMgYXJlIG9ubHkgMWsgIGluIHNpemUgCihiaXRzIDEyLTE5IHggNCBieXRlcyBwZXIgcHRlICkgd2UgdXNlIDEgKCBwYWdlIDRrICkKdG8gbWFrZSB0aGUgYmVzdCB1c2Ugb2YgbWVtb3J5IGJ5IHVwZGF0aW5nIDQgc2VnbWVudCBpbmRpY2VzIAplbnRyaWVzIGVhY2ggdGltZSB3ZSBtZXNzIHdpdGggYSBQTUQgJiB1c2Ugb2Zmc2V0cyAKMCwxMDI0LDIwNDggJiAzMDcyIGluIHRoaXMgcGFnZSBhcyBmb3Igb3VyIHNlZ21lbnQgaW5kZXhlcy4KT24gei9BcmNoaXRlY3R1cmUgb3VyIHBhZ2UgaW5kZXhlcyBhcmUgbm93IDJrIGluIHNpemUKKCBiaXRzIDEyLTE5IHggOCBieXRlcyBwZXIgcHRlICkgd2UgZG8gYSBzaW1pbGFyIHRyaWNrCmJ1dCBvbmx5IG1lc3Mgd2l0aCAyIHNlZ21lbnQgaW5kaWNlcyBlYWNoIHRpbWUgd2UgbWVzcyB3aXRoCmEgUE1ELgoKMykgQXMgei9BcmNoaXRlY3R1cmUgc3VwcG9ydHMgdXB0byBhIG1hc3NpdmUgNS1sZXZlbCBwYWdlIHRhYmxlIGxvb2t1cCB3ZSAKY2FuIG9ubHkgdXNlIDMgY3VycmVudGx5IG9uIExpbnV4ICggYXMgdGhpcyBpcyBhbGwgdGhlIGdlbmVyaWMga2VybmVsCmN1cnJlbnRseSBzdXBwb3J0cyApIGhvd2V2ZXIgdGhpcyBtYXkgY2hhbmdlIGluIGZ1dHVyZQp0aGlzIGFsbG93cyB1cyB0byBhY2Nlc3MgKCBhY2NvcmRpbmcgdG8gbXkgc3VtcyApCjRUQiBvZiB2aXJ0dWFsIHN0b3JhZ2UgcGVyIHByb2Nlc3MgaS5lLgo0MDk2KjUxMihQVEVTKSoxMDI0KFBNRFMpKjIwNDgoUEdEKSA9IDQzOTgwNDY1MTExMDQgYnl0ZXMsCmVub3VnaCBmb3IgYW5vdGhlciAyIG9yIDMgb2YgeWVhcnMgSSB0aGluayA6LSkuCnRvIGRvIHRoaXMgd2UgdXNlIGEgcmVnaW9uLXRoaXJkLXRhYmxlIGRlc2lnbmF0aW9uIHR5cGUgaW4Kb3VyIGFkZHJlc3Mgc3BhY2UgY29udHJvbCByZWdpc3RlcnMuCiAKClRoZSBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSBLZXJuZWwgVGFzayBTdHJ1Y3R1cmUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpFYWNoIHByb2Nlc3MvdGhyZWFkIHVuZGVyIExpbnV4IGZvciBTMzkwIGhhcyBpdHMgb3duIGtlcm5lbCB0YXNrX3N0cnVjdApkZWZpbmVkIGluIGxpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaApUaGUgUzM5MCBvbiBpbml0aWFsaXNhdGlvbiAmIHJlc3VtaW5nIG9mIGEgcHJvY2VzcyBvbiBhIGNwdSBzZXRzCnRoZSBfX0xDX0tFUk5FTF9TVEFDSyB2YXJpYWJsZSBpbiB0aGUgc3BhcmUgcHJlZml4IGFyZWEgZm9yIHRoaXMgY3B1Ciggd2hpY2ggd2UgdXNlIGZvciBwZXIgcHJvY2Vzc29yIGdsb2JhbHMpLgoKVGhlIGtlcm5lbCBzdGFjayBwb2ludGVyIGlzIGludGltYXRlbHkgdGllZCB3aXRoIHRoZSB0YXNrIHN0dWN0dXJlIGZvcgplYWNoIHByb2Nlc3NvciBhcyBmb2xsb3dzLgoKICAgICAgICAgICAgICAgICAgICAgIHMvMzkwCiAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAqICAxIHBhZ2Uga2VybmVsIHN0YWNrICoKCSAgICAqICAgICAgICAoIDRLICkgICAgICAgICoKICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICogICAxIHBhZ2UgdGFza19zdHJ1Y3QgKiAgICAgICAgCiAgICAgICAgICAgICogICAgICAgICggNEsgKSAgICAgICAgKgo4SyBhbGlnbmVkICAqKioqKioqKioqKioqKioqKioqKioqKiogCgogICAgICAgICAgICAgICAgIHovQXJjaGl0ZWN0dXJlCiAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAqICAyIHBhZ2Uga2VybmVsIHN0YWNrICoKCSAgICAqICAgICAgICAoIDhLICkgICAgICAgICoKICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICogIDIgcGFnZSB0YXNrX3N0cnVjdCAgKiAgICAgICAgCiAgICAgICAgICAgICogICAgICAgICggOEsgKSAgICAgICAgKgoxNksgYWxpZ25lZCAqKioqKioqKioqKioqKioqKioqKioqKiogCgpXaGF0IHRoaXMgbWVhbnMgaXMgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGRlZGljYXRlIGFueSByZWdpc3RlciBvciBnbG9iYWwgdmFyaWFibGUKdG8gcG9pbnQgdG8gdGhlIGN1cnJlbnQgcnVubmluZyBwcm9jZXNzICYgY2FuIHJldHJpZXZlIGl0IHdpdGggdGhlIGZvbGxvd2luZwp2ZXJ5IHNpbXBsZSBjb25zdHJ1Y3QgZm9yIHMvMzkwICYgb25lIHZlcnkgc2ltaWxhciBmb3Igei9BcmNoaXRlY3R1cmUuCgpzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqIGdldF9jdXJyZW50KHZvaWQpCnsKICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJlbnQ7CiAgICAgICAgX19hc21fXygibGhpICAgJTAsLTgxOTJcblx0IgogICAgICAgICAgICAgICAgIm5yICAgICUwLDE1IgogICAgICAgICAgICAgICAgOiAiPXIiIChjdXJyZW50KSApOwogICAgICAgIHJldHVybiBjdXJyZW50Owp9CgppLmUuIGp1c3QgYW5kaW5nIHRoZSBjdXJyZW50IGtlcm5lbCBzdGFjayBwb2ludGVyIHdpdGggdGhlIG1hc2sgLTgxOTIuClRoYW5rZnVsbHkgYmVjYXVzZSBMaW51eCBkb3Nlbid0IGhhdmUgc3VwcG9ydCBmb3IgbmVzdGVkIElPIGludGVycnVwdHMKJiBvdXIgZGV2aWNlcyBoYXZlIGxhcmdlIGJ1ZmZlcnMgY2FuIHN1cnZpdmUgaW50ZXJydXB0cyBiZWluZyBzaHV0IGZvciAKc2hvcnQgYW1vdW50cyBvZiB0aW1lIHdlIGRvbid0IG5lZWQgYSBzZXBhcmF0ZSBzdGFjayBmb3IgaW50ZXJydXB0cy4KCgoKClJlZ2lzdGVyIFVzYWdlICYgU3RhY2tmcmFtZXMgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KT3ZlcnZpZXc6Ci0tLS0tLS0tLQpUaGlzIGlzIHRoZSBjb2RlIHRoYXQgZ2NjIHByb2R1Y2VzIGF0IHRoZSB0b3AgJiB0aGUgYm90dG9tIG9mCmVhY2ggZnVuY3Rpb24sIGl0IHVzdWFsbHkgaXMgZmFpcmx5IGNvbnNpc3RlbnQgJiBzaW1pbGFyIGZyb20gCmZ1bmN0aW9uIHRvIGZ1bmN0aW9uICYgaWYgeW91IGtub3cgaXRzIGxheW91dCB5b3UgY2FuIHByb2JhbGJ5Cm1ha2Ugc29tZSBoZWFkd2F5IGluIGZpbmRpbmcgdGhlIHVsdGltYXRlIGNhdXNlIG9mIGEgcHJvYmxlbQphZnRlciBhIGNyYXNoIHdpdGhvdXQgYSBzb3VyY2UgbGV2ZWwgZGVidWdnZXIuCgpOb3RlOiBUbyBmb2xsb3cgc3RhY2tmcmFtZXMgcmVxdWlyZXMgYSBrbm93bGVkZ2Ugb2YgQyBvciBQYXNjYWwgJgpsaW1pdGVkIGtub3dsZWRnZSBvZiBvbmUgYXNzZW1ibHkgbGFuZ3VhZ2UuCgpJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB0aGVyZSBhcmUgc29tZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZQpzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIHN0YWNrIGxheW91dHMgYXMgdGhlIHovQXJjaGl0ZWN0dXJlIHN0YWNrIGxheW91dCBkaWRuJ3QgaGF2ZQp0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgbGlua2FnZSBmb3JtYXRzLgoKR2xvc3Nhcnk6Ci0tLS0tLS0tLQphbGxvY2E6ClRoaXMgaXMgYSBidWlsdCBpbiBjb21waWxlciBmdW5jdGlvbiBmb3IgcnVudGltZSBhbGxvY2F0aW9uCm9mIGV4dHJhIHNwYWNlIG9uIHRoZSBjYWxsZXJzIHN0YWNrIHdoaWNoIGlzIG9idmlvdXNseSBmcmVlZAp1cCBvbiBmdW5jdGlvbiBleGl0ICggZS5nLiB0aGUgY2FsbGVyIG1heSBjaG9vc2UgdG8gYWxsb2NhdGUgbm90aGluZwpvZiBhIGJ1ZmZlciBvZiA0ayBpZiByZXF1aXJlZCBmb3IgdGVtcG9yYXJ5IHB1cnBvc2VzICksIGl0IGdlbmVyYXRlcyAKdmVyeSBlZmZpY2llbnQgY29kZSAoIGEgZmV3IGN5Y2xlcyAgKSB3aGVuIGNvbXBhcmVkIHRvIGFsdGVybmF0aXZlcyAKbGlrZSBtYWxsb2MuCgphdXRvbWF0aWNzOiBUaGVzZSBhcmUgbG9jYWwgdmFyaWFibGVzIG9uIHRoZSBzdGFjaywKaS5lIHRoZXkgYXJlbid0IGluIHJlZ2lzdGVycyAmIHRoZXkgYXJlbid0IHN0YXRpYy4KCmJhY2stY2hhaW46ClRoaXMgaXMgYSBwb2ludGVyIHRvIHRoZSBzdGFjayBwb2ludGVyIGJlZm9yZSBlbnRlcmluZyBhCmZyYW1lZCBmdW5jdGlvbnMgKCBzZWUgZnJhbWVsZXNzIGZ1bmN0aW9uICkgcHJvbG9ndWUgZ290IGJ5IApkZWZlcmVuY2luZyB0aGUgYWRkcmVzcyBvZiB0aGUgY3VycmVudCBzdGFjayBwb2ludGVyLAogaS5lLiBnb3QgYnkgYWNjZXNzaW5nIHRoZSAzMiBiaXQgdmFsdWUgYXQgdGhlIHN0YWNrIHBvaW50ZXJzCmN1cnJlbnQgbG9jYXRpb24uCgpiYXNlLXBvaW50ZXI6ClRoaXMgaXMgYSBwb2ludGVyIHRvIHRoZSBiYWNrIG9mIHRoZSBsaXRlcmFsIHBvb2wgd2hpY2gKaXMgYW4gYXJlYSBqdXN0IGJlaGluZCBlYWNoIHByb2NlZHVyZSB1c2VkIHRvIHN0b3JlIGNvbnN0YW50cwppbiBlYWNoIGZ1bmN0aW9uLgoKY2FsbC1jbG9iYmVyZWQ6IFRoZSBjYWxsZXIgcHJvYmFibHkgbmVlZHMgdG8gc2F2ZSB0aGVzZSByZWdpc3RlcnMgaWYgdGhlcmUgCmlzIHNvbWV0aGluZyBvZiB2YWx1ZSBpbiB0aGVtLCBvbiB0aGUgc3RhY2sgb3IgZWxzZXdoZXJlIGJlZm9yZSBtYWtpbmcgYSAKY2FsbCB0byBhbm90aGVyIHByb2NlZHVyZSBzbyB0aGF0IGl0IGNhbiByZXN0b3JlIGl0IGxhdGVyLgoKZXBpbG9ndWU6ClRoZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIgdG8gcmV0dXJuIHRvIHRoZSBjYWxsZXIuCgpmcmFtZWxlc3MtZnVuY3Rpb24KQSBmcmFtZWxlc3MgZnVuY3Rpb24gaW4gTGludXggZm9yIHMzOTAgJiB6L0FyY2hpdGVjdHVyZSBpcyBvbmUgd2hpY2ggZG9lc24ndCAKbmVlZCBtb3JlIHRoYW4gdGhlIHJlZ2lzdGVyIHNhdmUgYXJlYSAoIDk2IGJ5dGVzIG9uIHMvMzkwLCAxNjAgb24gei9BcmNoaXRlY3R1cmUgKQpnaXZlbiB0byBpdCBieSB0aGUgY2FsbGVyLgpBIGZyYW1lbGVzcyBmdW5jdGlvbiBuZXZlcjoKMSkgU2V0cyB1cCBhIGJhY2sgY2hhaW4uCjIpIENhbGxzIGFsbG9jYS4KMykgQ2FsbHMgb3RoZXIgbm9ybWFsIGZ1bmN0aW9ucwo0KSBIYXMgYXV0b21hdGljcy4KCkdPVC1wb2ludGVyOgpUaGlzIGlzIGEgcG9pbnRlciB0byB0aGUgZ2xvYmFsLW9mZnNldC10YWJsZSBpbiBFTEYKKCBFeGVjdXRhYmxlIExpbmthYmxlIEZvcm1hdCwgTGludXgnZXMgbW9zdCBjb21tb24gZXhlY3V0YWJsZSBmb3JtYXQgKSwKYWxsIGdsb2JhbHMgJiBzaGFyZWQgbGlicmFyeSBvYmplY3RzIGFyZSBmb3VuZCB1c2luZyB0aGlzIHBvaW50ZXIuCgpsYXp5LWJpbmRpbmcKRUxGIHNoYXJlZCBsaWJyYXJpZXMgYXJlIHR5cGljYWxseSBvbmx5IGxvYWRlZCB3aGVuIHJvdXRpbmVzIGluIHRoZSBzaGFyZWQKbGlicmFyeSBhcmUgYWN0dWFsbHkgZmlyc3QgY2FsbGVkIGF0IHJ1bnRpbWUuIFRoaXMgaXMgbGF6eSBiaW5kaW5nLgoKcHJvY2VkdXJlLWxpbmthZ2UtdGFibGUKVGhpcyBpcyBhIHRhYmxlIGZvdW5kIGZyb20gdGhlIEdPVCB3aGljaCBjb250YWlucyBwb2ludGVycyB0byByb3V0aW5lcwppbiBvdGhlciBzaGFyZWQgbGlicmFyaWVzIHdoaWNoIGNhbid0IGJlIGNhbGxlZCB0byBieSBlYXNpZXIgbWVhbnMuCgpwcm9sb2d1ZToKVGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciB0byBzZXQgdXAgdGhlIHN0YWNrIGZyYW1lLgoKb3V0Z29pbmctYXJnczoKVGhpcyBpcyBleHRyYSBhcmVhIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaWYgdGhlCnBhcmFtZXRlcnMgZm9yIHRoZSBjYWxsZWUncyBjYW5ub3QgYWxsIGJlIHB1dCBpbiByZWdpc3RlcnMsIHRoZSBzYW1lCmFyZWEgY2FuIGJlIHJldXNlZCBieSBlYWNoIGZ1bmN0aW9uIHRoZSBjYWxsZXIgY2FsbHMuCgpyb3V0aW5lLWRlc2NyaXB0b3I6CkEgQ09GRiAgZXhlY3V0YWJsZSBmb3JtYXQgYmFzZWQgY29uY2VwdCBvZiBhIHByb2NlZHVyZSByZWZlcmVuY2UgCmFjdHVhbGx5IGJlaW5nIDggYnl0ZXMgb3IgbW9yZSBhcyBvcHBvc2VkIHRvIGEgc2ltcGxlIHBvaW50ZXIgdG8gdGhlIHJvdXRpbmUuClRoaXMgaXMgdHlwaWNhbGx5IGRlZmluZWQgYXMgZm9sbG93cwpSb3V0aW5lIERlc2NyaXB0b3Igb2Zmc2V0IDA9UG9pbnRlciB0byBGdW5jdGlvbgpSb3V0aW5lIERlc2NyaXB0b3Igb2Zmc2V0IDQ9UG9pbnRlciB0byBUYWJsZSBvZiBDb250ZW50cwpUaGUgdGFibGUgb2YgY29udGVudHMvVE9DIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byBhIEdPVCBwb2ludGVyLgomIGl0IG1lYW5zIHRoYXQgc2hhcmVkIGxpYnJhcmllcyBldGMuIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBzZXZlcmFsCmVudmlyb25tZW50cyBlYWNoIHdpdGggdGhlaXIgb3duIFRPQy4KCiAKc3RhdGljLWNoYWluOiBUaGlzIGlzIHVzZWQgaW4gbmVzdGVkIGZ1bmN0aW9ucyBhIGNvbmNlcHQgYWRvcHRlZCBmcm9tIHBhc2NhbCAKYnkgZ2NjIG5vdCB1c2VkIGluIGFuc2kgQyBvciBDKysgKCBhbHRob3VnaCBxdWl0ZSB1c2VmdWwgKSwgYmFzaWNhbGx5IGl0CmlzIGEgcG9pbnRlciB1c2VkIHRvIHJlZmVyZW5jZSBsb2NhbCB2YXJpYWJsZXMgb2YgZW5jbG9zaW5nIGZ1bmN0aW9ucy4KWW91IG1pZ2h0IGNvbWUgYWNyb3NzIHRoaXMgc3R1ZmYgb25jZSBvciB0d2ljZSBpbiB5b3VyIGxpZmV0aW1lLgoKZS5nLgpUaGUgZnVuY3Rpb24gYmVsb3cgc2hvdWxkIHJldHVybiAxMSB0aG91Z2ggZ2NjIG1heSBnZXQgdXBzZXQgJiB0b3NzIHdhcm5pbmdzIAphYm91dCB1bnVzZWQgdmFyaWFibGVzLgppbnQgRnVuY3Rpb25BKGludCBhKQp7CglpbnQgYjsKCUZ1bmN0aW9uQyhpbnQgYykKCXsKCQliPWMrMTsKCX0KCUZ1bmN0aW9uQygxMCk7CglyZXR1cm4oYik7Cn0KCgpzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIFJlZ2lzdGVyIHVzYWdlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KcjAgICAgICAgdXNlZCBieSBzeXNjYWxscy9hc3NlbWJseSAgICAgICAgICAgICAgICAgIGNhbGwtY2xvYmJlcmVkCnIxCSB1c2VkIGJ5IHN5c2NhbGxzL2Fzc2VtYmx5ICAgICAgICAgICAgICAgICAgY2FsbC1jbG9iYmVyZWQKcjIgICAgICAgYXJndW1lbnQgMCAvIHJldHVybiB2YWx1ZSAwICAgICAgICAgICAgICAgIGNhbGwtY2xvYmJlcmVkCnIzICAgICAgIGFyZ3VtZW50IDEgLyByZXR1cm4gdmFsdWUgMSAoaWYgbG9uZyBsb25nKSBjYWxsLWNsb2JiZXJlZApyNCAgICAgICBhcmd1bWVudCAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbC1jbG9iYmVyZWQKcjUgICAgICAgYXJndW1lbnQgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGwtY2xvYmJlcmVkCnI2CSBhcmd1bWVudCA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWQKcjcgICAgICAgcG9pbnRlci10byBhcmd1bWVudHMgNSB0byAuLi4gICAgICAgICAgICAgIHNhdmVkICAgICAgCnI4ICAgICAgIHRoaXMgJiB0aGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZApyOSAgICAgICB0aGlzICYgdGhhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWQKcjEwICAgICAgc3RhdGljLWNoYWluICggaWYgbmVzdGVkIGZ1bmN0aW9uICkgICAgICAgIHNhdmVkCnIxMSAgICAgIGZyYW1lLXBvaW50ZXIgKCBpZiBmdW5jdGlvbiB1c2VkIGFsbG9jYSApICBzYXZlZApyMTIgICAgICBnb3QtcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWQKcjEzICAgICAgYmFzZS1wb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkCnIxNCAgICAgIHJldHVybi1hZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZApyMTUgICAgICBzdGFjay1wb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWQKCmYwICAgICAgIGFyZ3VtZW50IDAgLyByZXR1cm4gdmFsdWUgKCBmbG9hdC9kb3VibGUgKSBjYWxsLWNsb2JiZXJlZApmMiAgICAgICBhcmd1bWVudCAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbC1jbG9iYmVyZWQKZjQgICAgICAgei9BcmNoaXRlY3R1cmUgYXJndW1lbnQgMiAgICAgICAgICAgICAgICAgIHNhdmVkCmY2ICAgICAgIHovQXJjaGl0ZWN0dXJlIGFyZ3VtZW50IDMgICAgICAgICAgICAgICAgICBzYXZlZApUaGUgcmVtYWluaW5nIGZsb2F0aW5nIHBvaW50cwpmMSxmMyxmNSBmNy1mMTUgYXJlIGNhbGwtY2xvYmJlcmVkLgoKTm90ZXM6Ci0tLS0tLQoxKSBUaGUgb25seSByZXF1aXJlbWVudCBpcyB0aGF0IHJlZ2lzdGVycyB3aGljaCBhcmUgdXNlZApieSB0aGUgY2FsbGVlIGFyZSBzYXZlZCwgZS5nLiB0aGUgY29tcGlsZXIgaXMgcGVyZmVjdGx5CmNhcGlibGUgb2YgdXNpbmcgcjExIGZvciBwdXJwb3NlcyBvdGhlciB0aGFuIGEgZnJhbWUgYQpmcmFtZSBwb2ludGVyIGlmIGEgZnJhbWUgcG9pbnRlciBpcyBub3QgbmVlZGVkLgoyKSBJbiBmdW5jdGlvbnMgd2l0aCB2YXJpYWJsZSBhcmd1bWVudHMgZS5nLiBwcmludGYgdGhlIGNhbGxpbmcgcHJvY2VkdXJlIAppcyBpZGVudGljYWwgdG8gb25lIHdpdGhvdXQgdmFyaWFibGUgYXJndW1lbnRzICYgdGhlIHNhbWUgbnVtYmVyIG9mIApwYXJhbWV0ZXJzLiBIb3dldmVyLCB0aGUgcHJvbG9ndWUgb2YgdGhpcyBmdW5jdGlvbiBpcyBzb21ld2hhdCBtb3JlCmhhaXJ5IG93aW5nIHRvIGl0IGhhdmluZyB0byBtb3ZlIHRoZXNlIHBhcmFtZXRlcnMgdG8gdGhlIHN0YWNrIHRvCmdldCB2YV9zdGFydCwgdmFfYXJnICYgdmFfZW5kIHRvIHdvcmsuCjMpIEFjY2VzcyByZWdpc3RlcnMgYXJlIGN1cnJlbnRseSB1bnVzZWQgYnkgZ2NjIGJ1dCBhcmUgdXNlZCBpbgp0aGUga2VybmVsLiBQb3NzaWJpbGl0aWVzIGV4aXN0IHRvIHVzZSB0aGVtIGF0IHRoZSBtb21lbnQgZm9yCnRlbXBvcmFyeSBzdG9yYWdlIGJ1dCBpdCBpc24ndCByZWNvbW1lbmRlZC4KNCkgT25seSA0IG9mIHRoZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgYXJlIHVzZWQgZm9yCnBhcmFtZXRlciBwYXNzaW5nIGFzIG9sZGVyIG1hY2hpbmVzIHN1Y2ggYXMgRzMgb25seSBoYXZlIG9ubHkgNAomIGl0IGtlZXBzIHRoZSBzdGFjayBmcmFtZSBjb21wYXRpYmxlIHdpdGggb3RoZXIgY29tcGlsZXJzLgpIb3dldmVyIHdpdGggSUVFRSBmbG9hdGluZyBwb2ludCBlbXVsYXRpb24gdW5kZXIgbGludXggb24gdGhlCm9sZGVyIG1hY2hpbmVzIHlvdSBhcmUgZnJlZSB0byB1c2UgdGhlIG90aGVyIDEyLgo1KSBBIGxvbmcgbG9uZyBvciBkb3VibGUgcGFyYW1ldGVyIGNhbm5vdCBiZSBoYXZlIHRoZSAKZmlyc3QgNCBieXRlcyBpbiBhIHJlZ2lzdGVyICYgdGhlIHNlY29uZCBmb3VyIGJ5dGVzIGluIHRoZSAKb3V0Z29pbmcgYXJncyBhcmVhLiBJdCBtdXN0IGJlIHB1cmVseSBpbiB0aGUgb3V0Z29pbmcgYXJncwphcmVhIGlmIGNyb3NzaW5nIHRoaXMgYm91bmRhcnkuCjYpIEZsb2F0aW5nIHBvaW50IHBhcmFtZXRlcnMgYXJlIG1peGVkIHdpdGggb3V0Z29pbmcgYXJncwpvbiB0aGUgb3V0Z29pbmcgYXJncyBhcmVhIGluIHRoZSBvcmRlciB0aGUgYXJlIHBhc3NlZCBpbiBhcyBwYXJhbWV0ZXJzLgo3KSBGbG9hdGluZyBwb2ludCBhcmd1bWVudHMgMiAmIDMgYXJlIHNhdmVkIGluIHRoZSBvdXRnb2luZyBhcmdzIGFyZWEgZm9yIAp6L0FyY2hpdGVjdHVyZQoKClN0YWNrIEZyYW1lIExheW91dAotLS0tLS0tLS0tLS0tLS0tLS0Kcy8zOTAgICAgIHovQXJjaGl0ZWN0dXJlCjAgICAgICAgICAwICAgICAgICAgICAgIGJhY2sgY2hhaW4gKCBhIDAgaGVyZSBzaWduaWZpZXMgZW5kIG9mIGJhY2sgY2hhaW4gKQo0ICAgICAgICAgOCAgICAgICAgICAgICBlb3MgKCBlbmQgb2Ygc3RhY2ssIG5vdCB1c2VkIG9uIExpbnV4IGZvciBTMzkwIHVzZWQgaW4gb3RoZXIgbGlua2FnZSBmb3JtYXRzICkKOCAgICAgICAgIDE2ICAgICAgICAgICAgZ2x1ZSB1c2VkIGluIG90aGVyIHMvMzkwIGxpbmthZ2UgZm9ybWF0cyBmb3Igc2F2ZWQgcm91dGluZSBkZXNjcmlwdG9ycyBldGMuCjEyICAgICAgICAyNCAgICAgICAgICAgIGdsdWUgdXNlZCBpbiBvdGhlciBzLzM5MCBsaW5rYWdlIGZvcm1hdHMgZm9yIHNhdmVkIHJvdXRpbmUgZGVzY3JpcHRvcnMgZXRjLgoxNiAgICAgICAgMzIgICAgICAgICAgICBzY3JhdGNoIGFyZWEKMjAgICAgICAgIDQwICAgICAgICAgICAgc2NyYXRjaCBhcmVhCjI0ICAgICAgICA0OCAgICAgICAgICAgIHNhdmVkIHI2IG9mIGNhbGxlciBmdW5jdGlvbgoyOCAgICAgICAgNTYgICAgICAgICAgICBzYXZlZCByNyBvZiBjYWxsZXIgZnVuY3Rpb24KMzIgICAgICAgIDY0ICAgICAgICAgICAgc2F2ZWQgcjggb2YgY2FsbGVyIGZ1bmN0aW9uCjM2ICAgICAgICA3MiAgICAgICAgICAgIHNhdmVkIHI5IG9mIGNhbGxlciBmdW5jdGlvbgo0MCAgICAgICAgODAgICAgICAgICAgICBzYXZlZCByMTAgb2YgY2FsbGVyIGZ1bmN0aW9uCjQ0ICAgICAgICA4OCAgICAgICAgICAgIHNhdmVkIHIxMSBvZiBjYWxsZXIgZnVuY3Rpb24KNDggICAgICAgIDk2ICAgICAgICAgICAgc2F2ZWQgcjEyIG9mIGNhbGxlciBmdW5jdGlvbgo1MiAgICAgICAgMTA0ICAgICAgICAgICBzYXZlZCByMTMgb2YgY2FsbGVyIGZ1bmN0aW9uCjU2ICAgICAgICAxMTIgICAgICAgICAgIHNhdmVkIHIxNCBvZiBjYWxsZXIgZnVuY3Rpb24KNjAgICAgICAgIDEyMCAgICAgICAgICAgc2F2ZWQgcjE1IG9mIGNhbGxlciBmdW5jdGlvbgo2NCAgICAgICAgMTI4ICAgICAgICAgICBzYXZlZCBmNCBvZiBjYWxsZXIgZnVuY3Rpb24KNzIgICAgICAgIDEzMiAgICAgICAgICAgc2F2ZWQgZjYgb2YgY2FsbGVyIGZ1bmN0aW9uCjgwICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZAo5NiAgICAgICAgMTYwICAgICAgICAgICBvdXRnb2luZyBhcmdzIHBhc3NlZCBmcm9tIGNhbGxlciB0byBjYWxsZWUKOTYreCAgICAgIDE2MCt4ICAgICAgICAgcG9zc2libGUgc3RhY2sgYWxpZ25tZW50ICggOCBieXRlcyBkZXNpcmFibGUgKQo5Nit4K3kgICAgMTYwK3greSAgICAgICBhbGxvY2Egc3BhY2Ugb2YgY2FsbGVyICggaWYgdXNlZCApCjk2K3greSt6ICAxNjAreCt5K3ogICAgIGF1dG9tYXRpY3Mgb2YgY2FsbGVyICggaWYgdXNlZCApCjAgICAgICAgICAgICAgICAgICAgICAgIGJhY2stY2hhaW4KCkEgc2FtcGxlIHByb2dyYW0gd2l0aCBjb21tZW50cy4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKQ29tbWVudHMgb24gdGhlIGZ1bmN0aW9uIHRlc3QKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KMSkgSXQgZGlkbid0IG5lZWQgdG8gc2V0IHVwIGEgcG9pbnRlciB0byB0aGUgY29uc3RhbnQgcG9vbCBncHIxMyBhcyBpdCBpc24ndCB1c2VkCiggOi0oICkuCjIpIFRoaXMgaXMgYSBmcmFtZWxlc3MgZnVuY3Rpb24gJiBubyBzdGFjayBpcyBib3VnaHQuCjMpIFRoZSBjb21waWxlciB3YXMgY2xldmVyIGVub3VnaCB0byByZWNvZ25pc2UgdGhhdCBpdCBjb3VsZCByZXR1cm4gdGhlCnZhbHVlIGluIHIyIGFzIHdlbGwgYXMgdXNlIGl0IGZvciB0aGUgcGFzc2VkIGluIHBhcmFtZXRlciAoIDotKSApLgo0KSBUaGUgYmFzciAoIGJyYW5jaCByZWxhdGl2ZSAmIHNhdmUgKSB0cmljayB3b3JrcyBhcyBmb2xsb3dzIHRoZSBpbnN0cnVjdGlvbiAKaGFzIGEgc3BlY2lhbCBjYXNlIHdpdGggcjAscjAgd2l0aCBzb21lIGluc3RydWN0aW9uIG9wZXJhbmRzIGlzIHVuZGVyc3Rvb2QgYXMgCnRoZSBsaXRlcmFsIHZhbHVlIDAsIHNvbWUgcmlzYyBhcmNoaXRlY3R1cmVzIGFsc28gZG8gdGhpcyApLiBTbyBub3cKd2UgYXJlIGJyYW5jaGluZyB0byB0aGUgbmV4dCBhZGRyZXNzICYgdGhlIGFkZHJlc3MgbmV3IHByb2dyYW0gY291bnRlciBpcwppbiByMTMsc28gbm93IHdlIHN1YnRyYWN0IHRoZSBzaXplIG9mIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZSB3ZSBoYXZlIGV4ZWN1dGVkCisgdGhlIHNpemUgb2YgdGhlIGxpdGVyYWwgcG9vbCB0byBnZXQgdG8gdGhlIHRvcCBvZiB0aGUgbGl0ZXJhbCBwb29sCjAwNDAwMzdjIGludCB0ZXN0KGludCBiKQp7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRnVuY3Rpb24gcHJvbG9ndWUgYmVsb3cKICA0MDAzN2M6CTkwIGRlIGYwIDM0IAlzdG0JJXIxMywlcjE0LDUyKCVyMTUpICMgU2F2ZSByZWdpc3RlcnMgcjEzICYgcjE0CiAgNDAwMzgwOgkwZCBkMCAgICAgICAJYmFzcgklcjEzLCVyMCAgICAgICAgICAgIyBTZXQgdXAgcG9pbnRlciB0byBjb25zdGFudCBwb29sIHVzaW5nCiAgNDAwMzgyOglhNyBkYSBmZiBmYSAJYWhpCSVyMTMsLTYgICAgICAgICAgICAjIGJhc3IgdHJpY2sKCXJldHVybig1K2IpOwoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBIdWdlIG1haW4gcHJvZ3JhbQogIDQwMDM4NjoJYTcgMmEgMDAgMDUgCWFoaQklcjIsNSAgICAgICAgICAgICAgIyBhZGQgNSB0byByMgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZ1bmN0aW9uIGVwaWxvZ3VlIGJlbG93IAogIDQwMDM4YToJOTggZGUgZjAgMzQgCWxtCSVyMTMsJXIxNCw1MiglcjE1KSAjIHJlc3RvcmUgcmVnaXN0ZXJzIHIxMyAmIDE0CiAgNDAwMzhlOgkwNyBmZSAgICAgICAJYnIJJXIxNCAgICAgICAgICAgICAgICMgcmV0dXJuCn0KCkNvbW1lbnRzIG9uIHRoZSBmdW5jdGlvbiBtYWluCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCjEpIFRoZSBjb21waWxlciBkaWQgdGhpcyBmdW5jdGlvbiBvcHRpbWFsbHkgKCA4LSkgKQoKTGl0ZXJhbCBwb29sIGZvciBtYWluLgo0MDAzOTA6CWZmIGZmIGZmIGVjIAkubG9uZyAweGZmZmZmZmVjCm1haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKQp7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRnVuY3Rpb24gcHJvbG9ndWUgYmVsb3cKICA0MDAzOTQ6CTkwIGJmIGYwIDJjIAlzdG0JJXIxMSwlcjE1LDQ0KCVyMTUpICMgU2F2ZSBuZWNlc3NhcnkgcmVnaXN0ZXJzCiAgNDAwMzk4OgkxOCAwZiAgICAgICAJbHIJJXIwLCVyMTUgICAgICAgICAgICMgY29weSBzdGFjayBwb2ludGVyIHRvIHIwCiAgNDAwMzlhOglhNyBmYSBmZiBhMCAJYWhpCSVyMTUsLTk2ICAgICAgICAgICAjIE1ha2UgYXJlYSBmb3IgY2FsbGVlIHNhdmluZyAKICA0MDAzOWU6CTBkIGQwICAgICAgIAliYXNyCSVyMTMsJXIwICAgICAgICAgICAjIFNldCB1cCByMTMgdG8gcG9pbnQgdG8KICA0MDAzYTA6CWE3IGRhIGZmIGYwIAlhaGkJJXIxMywtMTYgICAgICAgICAgICMgbGl0ZXJhbCBwb29sCiAgNDAwM2E0Ogk1MCAwMCBmMCAwMCAJc3QJJXIwLDAoJXIxNSkgICAgICAgICMgU2F2ZSBiYWNrY2hhaW4KCglyZXR1cm4odGVzdCg1KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1haW4gUHJvZ3JhbSBCZWxvdwogIDQwMDNhODoJNTggZTAgZDAgMDAgCWwJJXIxNCwwKCVyMTMpICAgICAgICMgbG9hZCByZWxhdGl2ZSBhZGRyZXNzIG9mIHRlc3QgZnJvbQoJCQkJCQkgICAgICAgICAgICMgbGl0ZXJhbCBwb29sCiAgNDAwM2FjOglhNyAyOCAwMCAwNSAJbGhpCSVyMiw1ICAgICAgICAgICAgICAjIFNldCBmaXJzdCBwYXJhbWV0ZXIgdG8gNQogIDQwMDNiMDoJNGQgZWUgZDAgMDAgCWJhcwklcjE0LDAoJXIxNCwlcjEzKSAgIyBqdW1wIHRvIHRlc3Qgc2V0dGluZyByMTQgYXMgcmV0dXJuCgkJCQkJCQkgICAjIGFkZHJlc3MgdXNpbmcgYnJhbmNoICYgc2F2ZSBpbnN0cnVjdGlvbi4KCgkJCQkJCQkgICAjIEZ1bmN0aW9uIEVwaWxvZ3VlIGJlbG93CiAgNDAwM2I0Ogk5OCBiZiBmMCA4YyAJbG0JJXIxMSwlcjE1LDE0MCglcjE1KSMgUmVzdG9yZSBuZWNlc3NhcnkgcmVnaXN0ZXJzLgogIDQwMDNiODoJMDcgZmUgICAgICAgCWJyCSVyMTQgICAgICAgICAgICAgICAjIHJldHVybiB0byBkbyBwcm9ncmFtIGV4aXQgCn0KCgpDb21waWxlciB1cGRhdGVzCi0tLS0tLS0tLS0tLS0tLS0KCm1haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKQp7CiAgNDAwNGZjOgk5MCA3ZiBmMCAxYyAgICAgICAJc3RtCSVyNywlcjE1LDI4KCVyMTUpCiAgNDAwNTAwOglhNyBkNSAwMCAwNCAgICAgICAJYnJhcwklcjEzLDQwMDUwOCA8bWFpbisweGM+CiAgNDAwNTA0OgkwMCA0MCAwNCBmNCAgICAgICAJLmxvbmcJMHgwMDQwMDRmNCAKICAjIGNvbXBpbGVyIG5vdyBwdXRzIGNvbnN0YW50IHBvb2wgaW4gY29kZSB0byBzbyBpdCBzYXZlcyBhbiBpbnN0cnVjdGlvbiAKICA0MDA1MDg6CTE4IDBmICAgICAgICAgICAgIAlscgklcjAsJXIxNQogIDQwMDUwYToJYTcgZmEgZmYgYTAgICAgICAgCWFoaQklcjE1LC05NgogIDQwMDUwZToJNTAgMDAgZjAgMDAgICAgICAgCXN0CSVyMCwwKCVyMTUpCglyZXR1cm4odGVzdCg1KSk7CiAgNDAwNTEyOgk1OCAxMCBkMCAwMCAgICAgICAJbAklcjEsMCglcjEzKQogIDQwMDUxNjoJYTcgMjggMDAgMDUgICAgICAgCWxoaQklcjIsNQogIDQwMDUxYToJMGQgZTEgICAgICAgICAgICAgCWJhc3IJJXIxNCwlcjEKICAjIGNvbXBpbGVyIGFkZHMgMSBleHRyYSBpbnN0cnVjdGlvbiB0byBlcGlsb2d1ZSB0aGlzIGlzIGRvbmUgdG8KICAjIGF2b2lkIHByb2Nlc3NvciBwaXBlbGluZSBzdGFsbHMgb3dpbmcgdG8gZGF0YSBkZXBlbmRlbmNpZXMgb24gZzUgJgogICMgYWJvdmUgYXMgcmVnaXN0ZXIgMTQgaW4gdGhlIG9sZCBjb2RlIHdhcyBuZWVkZWQgZGlyZWN0bHkgYWZ0ZXIgYmVpbmcgbG9hZGVkIAogICMgYnkgdGhlIGxtCSVyMTEsJXIxNSwxNDAoJXIxNSkgZm9yIHRoZSBiciAlMTQuCiAgNDAwNTFjOgk1OCA0MCBmMCA5OCAgICAgICAJbAklcjQsMTUyKCVyMTUpCiAgNDAwNTIwOgk5OCA3ZiBmMCA3YyAgICAgICAJbG0JJXI3LCVyMTUsMTI0KCVyMTUpCiAgNDAwNTI0OgkwNyBmNCAgICAgICAgICAgICAJYnIJJXI0Cn0KCgpIYXJ0bXV0ICggb3VyIGNvbXBpbGVyIGRldmVsb3BlciApIGFsc28gaGFzIGJlZW4gdGhyZWF0ZW5pbmcgdG8gdGFrZSBvdXQgdGhlCnN0YWNrIGJhY2tjaGFpbiBpbiBvcHRpbWlzZWQgY29kZSBhcyB0aGlzIGFsc28gY2F1c2VzIHBpcGVsaW5lIHN0YWxscywgeW91CmhhdmUgYmVlbiB3YXJuZWQuCgo2NCBiaXQgei9BcmNoaXRlY3R1cmUgY29kZSBkaXNhc3NlbWJseQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKSWYgeW91IHVuZGVyc3RhbmQgdGhlIHN0dWZmIGFib3ZlIHlvdSdsbCB1bmRlcnN0YW5kIHRoZSBzdHVmZgpiZWxvdyB0b28gc28gSSdsbCBhdm9pZCByZXBlYXRpbmcgbXlzZWxmICYganVzdCBzYXkgdGhhdCAKc29tZSBvZiB0aGUgaW5zdHJ1Y3Rpb25zIGhhdmUgZydzIG9uIHRoZSBlbmQgb2YgdGhlbSB0byBpbmRpY2F0ZQp0aGV5IGFyZSA2NCBiaXQgJiB0aGUgc3RhY2sgb2Zmc2V0cyBhcmUgYSBiaWdnZXIsIAp0aGUgb25seSBvdGhlciBkaWZmZXJlbmNlIHlvdSdsbCBmaW5kIGJldHdlZW4gMzIgJiA2NCBiaXQgaXMgdGhhdAp3ZSBub3cgdXNlIGY0ICYgZjYgZm9yIGZsb2F0aW5nIHBvaW50IGFyZ3VtZW50cyBvbiA2NCBiaXQuCjAwMDAwMDAwODAwMDA1YjAgPHRlc3Q+OgppbnQgdGVzdChpbnQgYikKewoJcmV0dXJuKDUrYik7CiAgICA4MDAwMDViMDoJYTcgMmEgMDAgMDUgICAgICAgCWFoaQklcjIsNQogICAgODAwMDA1YjQ6CWI5IDE0IDAwIDIyICAgICAgIAlsZ2ZyCSVyMiwlcjIgIyBkb3duY2FzdCB0byBpbnRlZ2VyCiAgICA4MDAwMDViODoJMDcgZmUgICAgICAgICAgICAgCWJyCSVyMTQKICAgIDgwMDAwNWJhOgkwNyAwNyAgICAgICAgICAgICAJYmNyCTAsJXI3CgoKfQoKMDAwMDAwMDA4MDAwMDViYyA8bWFpbj46Cm1haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKQp7IAogICAgODAwMDA1YmM6CWViIGJmIGYwIDU4IDAwIDI0IAlzdG1nCSVyMTEsJXIxNSw4OCglcjE1KQogICAgODAwMDA1YzI6CWI5IDA0IDAwIDFmICAgICAgIAlsZ3IJJXIxLCVyMTUKICAgIDgwMDAwNWM2OglhNyBmYiBmZiA2MCAgICAgICAJYWdoaQklcjE1LC0xNjAKICAgIDgwMDAwNWNhOgllMyAxMCBmMCAwMCAwMCAyNCAJc3RnCSVyMSwwKCVyMTUpCglyZXR1cm4odGVzdCg1KSk7CiAgICA4MDAwMDVkMDoJYTcgMjkgMDAgMDUgICAgICAgCWxnaGkJJXIyLDUKICAgICMgYnJhc2wgYWxsb3dzIGp1bXBzID4gNjRrICYgaXMgb3ZlcmtpbGwgaGVyZSBicmFzIHdvdWxkIGRvIGZ1bmUKICAgIDgwMDAwNWQ0OgljMCBlNSBmZiBmZiBmZiBlZSAJYnJhc2wJJXIxNCw4MDAwMDViMCA8dGVzdD4gCiAgICA4MDAwMDVkYToJZTMgNDAgZjEgMTAgMDAgMDQgCWxnCSVyNCwyNzIoJXIxNSkKICAgIDgwMDAwNWUwOgllYiBiZiBmMCBmOCAwMCAwNCAJbG1nCSVyMTEsJXIxNSwyNDgoJXIxNSkKICAgIDgwMDAwNWU2OgkwNyBmNCAgICAgICAgICAgICAJYnIJJXI0Cn0KCgoKQ29tcGlsaW5nIHByb2dyYW1zIGZvciBkZWJ1Z2dpbmcgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWdkd2FyZi0yIG5vdyB3b3JrcyBpdCBzaG91bGQgYmUgY29uc2lkZXJlZCB0aGUgZGVmYXVsdCBkZWJ1Z2dpbmcKZm9ybWF0IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIGFzIGl0IGlzIG1vcmUgcmVsaWFibGUgZm9yIGRlYnVnZ2luZwpzaGFyZWQgbGlicmFyaWVzLCAgbm9ybWFsIC1nIGRlYnVnZ2luZyB3b3JrcyBtdWNoIGJldHRlciBub3cKVGhhbmtzIHRvIHRoZSBJQk0gamF2YSBjb21waWxlciBkZXZlbG9wZXJzIGJ1ZyByZXBvcnRzLiAKClRoaXMgaXMgdHlwaWNhbGx5IGRvbmUgYWRkaW5nL2FwcGVuZGluZyB0aGUgZmxhZ3MgLWcgb3IgLWdkd2FyZi0yIHRvIHRoZSAKQ0ZMQUdTICYgTERGTEFHUyB2YXJpYWJsZXMgTWFrZWZpbGUgb2YgdGhlIHByb2dyYW0gY29uY2VybmVkLgoKSWYgdXNpbmcgZ2RiICYgeW91IHdvdWxkIGxpa2UgYWNjdXJhdGUgZGlzcGxheXMgb2YgcmVnaXN0ZXJzICYKIHN0YWNrIHRyYWNlcyBjb21waWxlIHdpdGhvdXQgb3B0aW1pc2F0aW9uIGkuZSBtYWtlIHN1cmUKdGhhdCB0aGVyZSBpcyBubyAtTzIgb3Igc2ltaWxhciBvbiB0aGUgQ0ZMQUdTIGxpbmUgb2YgdGhlIE1ha2VmaWxlICYKdGhlIGVtaXR0ZWQgZ2NjIGNvbW1hbmRzLCBvYnZpb3VzbHkgdGhpcyB3aWxsIHByb2R1Y2Ugd29yc2UgY29kZSAKKCBub3QgYWR2aXNhYmxlIGZvciBzaGlwbWVudCApIGJ1dCBpdCBpcyBhbiAgYWlkIHRvIHRoZSBkZWJ1Z2dpbmcgcHJvY2Vzcy4KClRoaXMgYWlkcyBkZWJ1Z2dpbmcgYmVjYXVzZSB0aGUgY29tcGlsZXIgd2lsbCBjb3B5IHBhcmFtZXRlcnMgcGFzc2VkIGluCmluIHJlZ2lzdGVycyBvbnRvIHRoZSBzdGFjayBzbyBiYWNrdHJhY2luZyAmIGxvb2tpbmcgYXQgcGFzc2VkIGluCnBhcmFtZXRlcnMgd2lsbCB3b3JrLCBob3dldmVyIHNvbWUgbGFyZ2VyIHByb2dyYW1zIHdoaWNoIHVzZSBpbmxpbmUgZnVuY3Rpb25zCndpbGwgbm90IGNvbXBpbGUgd2l0aG91dCBvcHRpbWlzYXRpb24uCgpEZWJ1Z2dpbmcgd2l0aCBvcHRpbWlzYXRpb24gaGFzIHNpbmNlIG11Y2ggaW1wcm92ZWQgYWZ0ZXIgZml4aW5nCnNvbWUgYnVncywgcGxlYXNlIG1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIGdkYi01LjAgb3IgbGF0ZXIgZGV2ZWxvcGVkIAphZnRlciBOb3YnMjAwMC4KCkZpZ3VyaW5nIG91dCBnY2MgY29tcGlsZSBlcnJvcnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZiB5b3UgYXJlIGdldHRpbmcgYSBsb3Qgb2Ygc3ludGF4IGVycm9ycyBjb21waWxpbmcgYSBwcm9ncmFtICYgdGhlIHByb2JsZW0KaXNuJ3QgYmxhdGFudGx5IG9idmlvdXMgZnJvbSB0aGUgc291cmNlLgpJdCBvZnRlbiBoZWxwcyB0byBqdXN0IHByZXByb2Nlc3MgdGhlIGZpbGUsIHRoaXMgaXMgZG9uZSB3aXRoIHRoZSAtRQpvcHRpb24gaW4gZ2NjLgpXaGF0IHRoaXMgZG9lcyBpcyB0aGF0IGl0IHJ1bnMgdGhyb3VnaCB0aGUgdmVyeSBmaXJzdCBwaGFzZSBvZiBjb21waWxhdGlvbgooIGNvbXBpbGF0aW9uIGluIGdjYyBpcyBkb25lIGluIHNldmVyYWwgc3RhZ2VzICYgZ2NjIGNhbGxzIG1hbnkgcHJvZ3JhbXMgdG8KYWNoaWV2ZSBpdHMgZW5kIHJlc3VsdCApIHdpdGggdGhlIC1FIG9wdGlvbiBnY2MganVzdCBjYWxscyB0aGUgZ2NjIHByZXByb2Nlc3NvciAoY3BwKS4KVGhlIGMgcHJlcHJvY2Vzc29yIGRvZXMgdGhlIGZvbGxvd2luZywgaXQgam9pbnMgYWxsIHRoZSBmaWxlcyAjaW5jbHVkZWQgdG9nZXRoZXIKcmVjdXJzaXZlbHkgKCAjaW5jbHVkZSBmaWxlcyBjYW4gI2luY2x1ZGUgb3RoZXIgZmlsZXMgKSAmIGFsc28gdGhlIGMgZmlsZSB5b3Ugd2lzaCB0byBjb21waWxlLgpJdCBwdXRzIGEgZnVsbHkgcXVhbGlmaWVkIHBhdGggb2YgdGhlICNpbmNsdWRlZCBmaWxlcyBpbiBhIGNvbW1lbnQgJiBpdApkb2VzIG1hY3JvIGV4cGFuc2lvbi4KVGhpcyBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZyBiZWNhdXNlCjEpIFlvdSBjYW4gZG91YmxlIGNoZWNrIHdoZXRoZXIgdGhlIGZpbGVzIHlvdSBleHBlY3QgdG8gYmUgaW5jbHVkZWQgYXJlIHRoZSBvbmVzCnRoYXQgYXJlIGJlaW5nIGluY2x1ZGVkICggZS5nLiBkb3VibGUgY2hlY2sgdGhhdCB5b3UgYXJlbid0IGdvaW5nIHRvIHRoZSBpMzg2IGFzbSBkaXJlY3RvcnkgKS4KMikgQ2hlY2sgdGhhdCBtYWNybyBkZWZpbml0aW9ucyBhcmVuJ3QgY2xhc2hpbmcgd2l0aCB0eXBlZGVmcywKMykgQ2hlY2sgdGhhdCBkZWZpbml0b25zIGFyZW4ndCBiZWluZyB1c2VkIGJlZm9yZSB0aGV5IGFyZSBiZWluZyBpbmNsdWRlZC4KNCkgSGVscHMgcHV0IHRoZSBsaW5lIGVtaXR0aW5nIHRoZSBlcnJvciB1bmRlciB0aGUgbWljcm9zY29wZSBpZiBpdCBjb250YWlucyBtYWNyb3MuCgpGb3IgY29udmVuaWVuY2UgdGhlIExpbnV4IGtlcm5lbCdzIG1ha2VmaWxlIHdpbGwgZG8gcHJlcHJvY2Vzc2luZyBhdXRvbWF0aWNhbGx5IGZvciB5b3UKYnkgc3VmZml4aW5nIHRoZSBmaWxlIHlvdSB3YW50IGJ1aWx0IHdpdGggLmkgKCBpbnN0ZWFkIG9mIC5vICkKCmUuZy4KZnJvbSB0aGUgbGludXggZGlyZWN0b3J5IHR5cGUKbWFrZSBhcmNoL3MzOTAva2VybmVsL3NpZ25hbC5pCnRoaXMgd2lsbCBidWlsZAoKczM5MC1nY2MgLURfX0tFUk5FTF9fIC1JL2hvbWUxL2JhcnJvdy9saW51eC9pbmNsdWRlIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyCi1mbm8tc3RyaWN0LWFsaWFzaW5nIC1EX19TTVBfXyAtcGlwZSAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAgIC1FIGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMKPiBhcmNoL3MzOTAva2VybmVsL3NpZ25hbC5pICAKCk5vdyBsb29rIGF0IHNpZ25hbC5pIHlvdSBzaG91bGQgc2VlIHNvbWV0aGluZyBsaWtlLgoKCiMgMSAiL2hvbWUxL2JhcnJvdy9saW51eC9pbmNsdWRlL2FzbS90eXBlcy5oIiAxCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdW1vZGVfdDsKdHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgX19zODsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdTg7CnR5cGVkZWYgX19zaWduZWRfXyBzaG9ydCBfX3MxNjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3UxNjsKCklmIGluc3RlYWQgeW91IGFyZSBnZXR0aW5nIGVycm9ycyBmdXJ0aGVyIGRvd24gZS5nLgp1bmtub3duIGluc3RydWN0aW9uOjI1MTUgIm1vdmUubCIgb3IgYmV0dGVyIHN0aWxsIHVua25vd24gaW5zdHJ1Y3Rpb246MjUxNSAKIkZpeG1lIG5vdCBpbXBsZW1lbnRlZCB5ZXQsIGNhbGwgTWFydGluIiB5b3UgYXJlIHByb2JhYmx5IGFyZSBhdHRlbXB0aW5nIHRvIGNvbXBpbGUgc29tZSBjb2RlIAptZWFudCBmb3IgYW5vdGhlciBhcmNoaXRlY3R1cmUgb3IgY29kZSB0aGF0IGlzIHNpbXBseSBub3QgaW1wbGVtZW50ZWQsIHdpdGggYSBmaXhtZSBzdGF0ZW1lbnQKc3R1Y2sgaW50byB0aGUgaW5saW5lIGFzc2VtYmx5IGNvZGUgc28gdGhhdCB0aGUgYXV0aG9yIG9mIHRoZSBmaWxlIG5vdyBrbm93cyBoZSBoYXMgd29yayB0byBkby4KVG8gbG9vayBhdCB0aGUgYXNzZW1ibHkgZW1pdHRlZCBieSBnY2MganVzdCBiZWZvcmUgaXQgaXMgYWJvdXQgdG8gY2FsbCBnYXMgKCB0aGUgZ251IGFzc2VtYmxlciApCnVzZSB0aGUgLVMgb3B0aW9uLgpBZ2FpbiBmb3IgeW91ciBjb252ZW5pZW5jZSB0aGUgTGludXgga2VybmVsJ3MgTWFrZWZpbGUgd2lsbCBob2xkIHlvdXIgaGFuZCAmCmRvIGFsbCB0aGlzIGRvbmtleSB3b3JrIGZvciB5b3UgYWxzbyBieSBidWlsZGluZyB0aGUgZmlsZSB3aXRoIHRoZSAucyBzdWZmaXguCmUuZy4KZnJvbSB0aGUgTGludXggZGlyZWN0b3J5IHR5cGUgCm1ha2UgYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwucyAKCnMzOTAtZ2NjIC1EX19LRVJORUxfXyAtSS9ob21lMS9iYXJyb3cvbGludXgvaW5jbHVkZSAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlcgotZm5vLXN0cmljdC1hbGlhc2luZyAtRF9fU01QX18gLXBpcGUgLWZuby1zdHJlbmd0aC1yZWR1Y2UgIC1TIGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMgCi1vIGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLnMgIAoKClRoaXMgd2lsbCBvdXRwdXQgc29tZXRoaW5nIGxpa2UsICggcGxlYXNlIG5vdGUgdGhlIGNvbnN0YW50IHBvb2wgJiB0aGUgdXNlZnVsIGNvbW1lbnRzCmluIHRoZSBwcm9sb2d1ZSB0byBnaXZlIHlvdSBhIGhhbmQgYXQgaW50ZXJwcmV0aW5nIGl0ICkuCgouTEM1NDoKCS5zdHJpbmcJIm1pc2FsaWduZWQgKF9fdTE2ICopIGluIF9feGNoZ1xuIgouTEM1NzoKCS5zdHJpbmcJIm1pc2FsaWduZWQgKF9fdTMyICopIGluIF9feGNoZ1xuIgouTCRQRzE6ICMgUG9vbCBzeXNfc2lnc3VzcGVuZAouTEMxOTI6CgkubG9uZwktMjYyNDAxCi5MQzE5MzoKCS5sb25nCS0xCi5MQzE5NDoKCS5sb25nCXNjaGVkdWxlLS5MJFBHMQouTEMxOTU6CgkubG9uZwlkb19zaWduYWwtLkwkUEcxCgkuYWxpZ24gNAouZ2xvYmwgc3lzX3NpZ3N1c3BlbmQKCS50eXBlCSBzeXNfc2lnc3VzcGVuZCxAZnVuY3Rpb24Kc3lzX3NpZ3N1c3BlbmQ6CiMJbGVhZiBmdW5jdGlvbiAgICAgICAgICAgMAojCWF1dG9tYXRpY3MgICAgICAgICAgICAgIDE2CiMJb3V0Z29pbmcgYXJncyAgICAgICAgICAgMAojCW5lZWQgZnJhbWUgcG9pbnRlciAgICAgIDAKIwljYWxsIGFsbG9jYSAgICAgICAgICAgICAwCiMJaGFzIHZhcmFyZ3MgICAgICAgICAgICAgMAojCWluY29taW5nIGFyZ3MgKHN0YWNrKSAgIDAKIwlmdW5jdGlvbiBsZW5ndGggICAgICAgICAxNjgKCVNUTQk4LDE1LDMyKDE1KQoJTFIJMCwxNQoJQUhJCTE1LC0xMTIKCUJBU1IJMTMsMAouTCRDTzE6CUFISQkxMywuTCRQRzEtLkwkQ08xCglTVAkwLDAoMTUpCglMUiAgICA4LDIKCU4gICAgIDUsLkxDMTkyLS5MJFBHMSgxMykgCgpBZGRpbmcgLWcgdG8gdGhlIGFib3ZlIG91dHB1dCBtYWtlcyB0aGUgb3V0cHV0IGV2ZW4gbW9yZSB1c2VmdWwKZS5nLiB0eXBpbmcKbWFrZSBDQzo9InMzOTAtZ2NjIC1nIiBrZXJuZWwvc2NoZWQucwoKd2hpY2ggY29tcGlsZXMuCnMzOTAtZ2NjIC1nIC1EX19LRVJORUxfXyAtSS9ob21lL2JhcnJvdy9saW51eC0yLjMvaW5jbHVkZSAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciAtZm5vLXN0cmljdC1hbGlhc2luZyAtcGlwZSAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAgIC1TIGtlcm5lbC9zY2hlZC5jIC1vIGtlcm5lbC9zY2hlZC5zIAoKYWxzbyBvdXRwdXRzIHN0YWJzICggZGVidWdnZXIgKSBpbmZvLCBmcm9tIHRoaXMgaW5mbyB5b3UgY2FuIGZpbmQgb3V0IHRoZQpvZmZzZXRzICYgc2l6ZXMgb2YgdmFyaW91cyBlbGVtZW50cyBpbiBzdHJ1Y3R1cmVzLgplLmcuIHRoZSBzdGFiIGZvciB0aGUgc3RydWN0dXJlCnN0cnVjdCBybGltaXQgewoJdW5zaWduZWQgbG9uZwlybGltX2N1cjsKCXVuc2lnbmVkIGxvbmcJcmxpbV9tYXg7Cn07CmlzCi5zdGFicyAicmxpbWl0OlQoMTUxLDIpPXM4cmxpbV9jdXI6KDAsNSksMCwzMjtybGltX21heDooMCw1KSwzMiwzMjs7IiwxMjgsMCwwLDAKZnJvbSB0aGlzIHN0YWIgeW91IGNhbiBzZWUgdGhhdCAKcmxpbWl0X2N1ciBzdGFydHMgYXQgYml0IG9mZnNldCAwICYgaXMgMzIgYml0cyBpbiBzaXplCnJsaW1pdF9tYXggc3RhcnRzIGF0IGJpdCBvZmZzZXQgMzIgJiBpcyAzMiBiaXRzIGluIHNpemUuCgoKRGVidWdnaW5nIFRvb2xzOgo9PT09PT09PT09PT09PT09CgpvYmpkdW1wCj09PT09PT0KVGhpcyBpcyBhIHRvb2wgd2l0aCBtYW55IG9wdGlvbnMgdGhlIG1vc3QgdXNlZnVsIGJlaW5nICggaWYgY29tcGlsZWQgd2l0aCAtZykuCm9iamR1bXAgLS1zb3VyY2UgPHZpY3RpbSBwcm9ncmFtIG9yIG9iamVjdCBmaWxlPiA+IDx2aWN0aW1zIGRlYnVnIGxpc3RpbmcgPgoKClRoZSB3aG9sZSBrZXJuZWwgY2FuIGJlIGNvbXBpbGVkIGxpa2UgdGhpcyAoIERvaW5nIHRoaXMgd2lsbCBtYWtlIGEgMTdNQiBrZXJuZWwKJiBhIDIwMCBNQiBsaXN0aW5nICkgaG93ZXZlciB5b3UgaGF2ZSB0byBzdHJpcCBpdCBiZWZvcmUgYnVpbGRpbmcgdGhlIGltYWdlCnVzaW5nIHRoZSBzdHJpcCBjb21tYW5kIHRvIG1ha2UgaXQgYSBtb3JlIHJlYXNvbmFibGUgc2l6ZSB0byBib290IGl0LgoKQSBzb3VyY2UvYXNzZW1ibHkgbWl4ZWQgZHVtcCBvZiB0aGUga2VybmVsIGNhbiBiZSBkb25lIHdpdGggdGhlIGxpbmUKb2JqZHVtcCAtLXNvdXJjZSB2bWxpbnV4ID4gdm1saW51eC5sc3QKQWxzbyBpZiB0aGUgZmlsZSBpc24ndCBjb21waWxlZCAtZyB0aGlzIHdpbGwgb3V0cHV0IGFzIG11Y2ggZGVidWdnaW5nIGluZm9ybWF0aW9uCmFzIGl0IGNhbiAoIGUuZy4gZnVuY3Rpb24gbmFtZXMgKSwgaG93ZXZlciwgdGhpcyBpcyB2ZXJ5IHNsb3cgYXMgaXQgc3BlbmRzIGxvdHMKb2YgdGltZSBzZWFyY2hpbmcgZm9yIGRlYnVnZ2luZyBpbmZvLCB0aGUgZm9sbG93aW5nIHNlbGYgZXhwbGFuaXRvcnkgbGluZSBzaG91bGQgYmUgdXNlZCAKaW5zdGVhZCBpZiB0aGUgY29kZSBpc24ndCBjb21waWxlZCAtZy4Kb2JqZHVtcCAtLWRpc2Fzc2VtYmxlLWFsbCAtLXN5bXMgdm1saW51eCA+IHZtbGludXgubHN0ICAKYXMgaXQgaXMgbXVjaCBmYXN0ZXIKCkFzIGhhcmQgZHJpdmUgc3BhY2UgaXMgdmFsdWJsZSBtb3N0IG9mIHVzIHVzZSB0aGUgZm9sbG93aW5nIGFwcHJvYWNoLgoxKSBMb29rIGF0IHRoZSBlbWl0dGVkIHBzdyBvbiB0aGUgY29uc29sZSB0byBmaW5kIHRoZSBjcmFzaCBhZGRyZXNzIGluIHRoZSBrZXJuZWwuCjIpIExvb2sgYXQgdGhlIGZpbGUgU3lzdGVtLm1hcCAoIGluIHRoZSBsaW51eCBkaXJlY3RvcnkgKSBwcm9kdWNlZCB3aGVuIGJ1aWxkaW5nIAp0aGUga2VybmVsIHRvIGZpbmQgdGhlIGNsb3Nlc3QgYWRkcmVzcyBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgUFNXIHRvIGZpbmQgdGhlCm9mZmVuZGluZyBmdW5jdGlvbi4KMykgdXNlIGdyZXAgb3Igc2ltaWxhciB0byBzZWFyY2ggdGhlIHNvdXJjZSB0cmVlIGxvb2tpbmcgZm9yIHRoZSBzb3VyY2UgZmlsZQogd2l0aCB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBkb24ndCBrbm93IHdoZXJlIGl0IGlzLgo0KSByZWJ1aWxkIHRoaXMgb2JqZWN0IGZpbGUgd2l0aCAtZyBvbiwgYXMgYW4gZXhhbXBsZSBzdXBwb3NlIHRoZSBmaWxlIHdhcwooIC9hcmNoL3MzOTAva2VybmVsL3NpZ25hbC5vICkgCjUpIEFzc3VtaW5nIHRoZSBmaWxlIHdpdGggdGhlIGVycm9uZW91cyBmdW5jdGlvbiBpcyBzaWduYWwuYyBNb3ZlIHRvIHRoZSBiYXNlIG9mIHRoZSAKTGludXggc291cmNlIHRyZWUuCjYpIHJtIC9hcmNoL3MzOTAva2VybmVsL3NpZ25hbC5vCjcpIG1ha2UgL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLm8KOCkgd2F0Y2ggdGhlIGdjYyBjb21tYW5kIGxpbmUgZW1pdHRlZAo5KSB0eXBlIGl0IGluIGFnYWluIG9yIGFsdGVybmF0aXZlbHkgY3V0ICYgcGFzdGUgaXQgb24gdGhlIGNvbnNvbGUgYWRkaW5nIHRoZSAtZyBvcHRpb24uCjEwKSBvYmpkdW1wIC0tc291cmNlIGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLm8gPiBzaWduYWwubHN0ClRoaXMgd2lsbCBvdXRwdXQgdGhlIHNvdXJjZSAmIHRoZSBhc3NlbWJseSBpbnRlcm1peGVkLCBhcyB0aGUgc25pcHBldCBiZWxvdyBzaG93cwpUaGlzIHdpbGwgdW5mb3J0dW5hdGVseSBvdXRwdXQgYWRkcmVzc2VzIHdoaWNoIGFyZW4ndCB0aGUgc2FtZQphcyB0aGUga2VybmVsIG9uZXMgeW91IHNob3VsZCBiZSBhYmxlIHRvIGdldCBhcm91bmQgdGhlIG1lbnRhbCBhcml0aG1ldGljCmJ5IHBsYXlpbmcgd2l0aCB0aGUgLS1hZGp1c3Qtdm1hIHBhcmFtZXRlciB0byBvYmpkdW1wLgoKCgoKc3RhdGljIGlubGluZSB2b2lkIHNwaW5fbG9jayhzcGlubG9ja190ICpscCkKewogICAgICBhMDogICAgICAgMTggMzQgICAgICAgICAgIGxyICAgICAgJXIzLCVyNAogICAgICBhMjogICAgICAgYTcgM2EgMDMgYmMgICAgIGFoaSAgICAgJXIzLDk1NgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZSgiICAgIGxoaSAgIDEsLTFcbiIKICAgICAgYTY6ICAgICAgIGE3IDE4IGZmIGZmICAgICBsaGkgICAgICVyMSwtMQogICAgICBhYTogICAgICAgMWYgMDAgICAgICAgICAgIHNsciAgICAgJXIwLCVyMAogICAgICBhYzogICAgICAgYmEgMDEgMzAgMDAgICAgIGNzICAgICAgJXIwLCVyMSwwKCVyMykKICAgICAgYjA6ICAgICAgIGE3IDQ0IGZmIGZkICAgICBqbSAgICAgIGFhIDxzeXNfc2lnc3VzcGVuZCsweDJlPgogICAgICAgIHNhdmVzZXQgPSBjdXJyZW50LT5ibG9ja2VkOwogICAgICBiNDogICAgICAgZDIgMDcgZjAgNjggICAgIG12YyAgICAgMTA0KDgsJXIxNSksOTcyKCVyNCkKICAgICAgYjg6ICAgICAgIDQzIGNjCiAgICAgICAgcmV0dXJuIChzZXQtPnNpZ1swXSAmIG1hc2spICE9IDA7Cn0gCgo2KSBJZiBkZWJ1Z2dpbmcgdW5kZXIgVk0gZ28gZG93biB0byB0aGF0IHNlY3Rpb24gaW4gdGhlIGRvY3VtZW50IGZvciBtb3JlIGluZm8uCgoKSSBub3cgaGF2ZSBhIHRvb2wgd2hpY2ggdGFrZXMgdGhlIHBhaW4gb3V0IG9mIC0tYWRqdXN0LXZtYQomIHlvdSBhcmUgYWJsZSB0byBkbyBzb21ldGhpbmcgbGlrZQptYWtlIC9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmxzdAomIGl0IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIHRoZSBjb3JyZWN0bHkgcmVsb2NhdGVkIGVudHJpZXMgZm9yCnRoZSB0ZXh0IHNlZ21lbnQgaW4gdHJhcHMubHN0LgpUaGlzIHRvb2wgaXMgbm93IHN0YW5kYXJkIGluIGxpbnV4IGRpc3RybydzIGluIHNjcmlwdHMvbWFrZWxzdAoKc3RyYWNlOgotLS0tLS0tClEuIFdoYXQgaXMgaXQgPwpBLiBJdCBpcyBhIHRvb2wgZm9yIGludGVyY2VwdGluZyBjYWxscyB0byB0aGUga2VybmVsICYgbG9nZ2luZyB0aGVtCnRvIGEgZmlsZSAmIG9uIHRoZSBzY3JlZW4uCgpRLiBXaGF0IHVzZSBpcyBpdCA/CkEuIFlvdSBjYW4gdXNlZCBpdCB0byBmaW5kIG91dCB3aGF0IGZpbGVzIGEgcGFydGljdWxhciBwcm9ncmFtIG9wZW5zLgoKCgpFeGFtcGxlIDEKLS0tLS0tLS0tCklmIHlvdSB3YW50ZWQgdG8ga25vdyBkb2VzIHBpbmcgd29yayBidXQgZGlkbid0IGhhdmUgdGhlIHNvdXJjZSAKc3RyYWNlIHBpbmcgLWMgMSAxMjcuMC4wLjEgIAomIHRoZW4gbG9vayBhdCB0aGUgbWFuIHBhZ2VzIGZvciBlYWNoIG9mIHRoZSBzeXNjYWxscyBiZWxvdywKKCBJbiBmYWN0IHRoaXMgaXMgc29tZXRpbWVzIGVhc2llciB0aGFuIGxvb2tpbmcgYXQgc29tZSBzcGFnZXR0aQpzb3VyY2Ugd2hpY2ggY29uZGl0aW9uYWxseSBjb21waWxlcyBmb3Igc2V2ZXJhbCBhcmNoaXRlY3R1cmVzICkKTm90IGV2ZXJ5dGhpbmcgdGhhdCBpdCB0aHJvd3Mgb3V0IG5lZWRzIHRvIG1ha2Ugc2Vuc2UgaW1tZWFkaWF0ZWx5CgpKdXN0IGxvb2tpbmcgcXVpY2tseSB5b3UgY2FuIHNlZSB0aGF0IGl0IGlzIG1ha2luZyB1cCBhIFJBVyBzb2NrZXQKZm9yIHRoZSBJQ01QIHByb3RvY29sLgpEb2luZyBhbiBhbGFybSgxMCkgZm9yIGEgMTAgc2Vjb25kIHRpbWVvdXQKJiBkb2luZyBhIGdldHRpbWVvZmRheSBjYWxsIGJlZm9yZSAmIGFmdGVyIGVhY2ggcmVhZCB0byBzZWUgCmhvdyBsb25nIHRoZSByZXBsaWVzIHRvb2ssICYgd3JpdGluZyBzb21lIHRleHQgdG8gc3Rkb3V0IHNvIHRoZSB1c2VyCmhhcyBhbiBpZGVhIHdoYXQgaXMgZ29pbmcgb24uCgpzb2NrZXQoUEZfSU5FVCwgU09DS19SQVcsIElQUFJPVE9fSUNNUCkgPSAzCmdldHVpZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAKc2V0dWlkKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMApzdGF0KCIvdXNyL3NoYXJlL2xvY2FsZS9DL2xpYmMuY2F0IiwgMHhiZmZmZjEzNCkgPSAtMSBFTk9FTlQgKE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkpCnN0YXQoIi91c3Ivc2hhcmUvbG9jYWxlL2xpYmMvQyIsIDB4YmZmZmYxMzQpID0gLTEgRU5PRU5UIChObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5KQpzdGF0KCIvdXNyL2xvY2FsL3NoYXJlL2xvY2FsZS9DL2xpYmMuY2F0IiwgMHhiZmZmZjEzNCkgPSAtMSBFTk9FTlQgKE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkpCmdldHBpZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDM1MwpzZXRzb2Nrb3B0KDMsIFNPTF9TT0NLRVQsIFNPX0JST0FEQ0FTVCwgWzFdLCA0KSA9IDAKc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIFs0OTE1Ml0sIDQpID0gMApmc3RhdCgxLCB7c3RfbW9kZT1TX0lGQ0hSfDA2MjAsIHN0X3JkZXY9bWFrZWRldigzLCAxKSwgLi4ufSkgPSAwCm1tYXAoMCwgNDA5NiwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIC0xLCAwKSA9IDB4NDAwMDgwMDAKaW9jdGwoMSwgVENHRVRTLCB7Qjk2MDAgb3Bvc3QgaXNpZyBpY2Fub24gZWNobyAuLi59KSA9IDAKd3JpdGUoMSwgIlBJTkcgMTI3LjAuMC4xICgxMjcuMC4wLjEpOiA1NiBkIi4uLiwgNDJQSU5HIDEyNy4wLjAuMSAoMTI3LjAuMC4xKTogNTYgZGF0YSBieXRlcwopID0gNDIKc2lnYWN0aW9uKFNJR0lOVCwgezB4ODA0OWJhMCwgW10sIFNBX1JFU1RBUlR9LCB7U0lHX0RGTH0pID0gMCAKc2lnYWN0aW9uKFNJR0FMUk0sIHsweDgwNDk2MDAsIFtdLCBTQV9SRVNUQVJUfSwge1NJR19ERkx9KSA9IDAKZ2V0dGltZW9mZGF5KHs5NDg5MDQ3MTksIDEzODk1MX0sIE5VTEwpID0gMApzZW5kdG8oMywgIlwxMFwwRFwyMDFhXDFcMFwwXDE3I1wyMTc4XDMwN1wzNiIuLi4sIDY0LCAwLCB7c2luX2ZhbWlseT1BRl9JTkVULApzaW5fcG9ydD1odG9ucygwKSwgc2luX2FkZHI9aW5ldF9hZGRyKCIxMjcuMC4wLjEiKX0sIDE2KSA9IDY0CnNpZ2FjdGlvbihTSUdBTFJNLCB7MHg4MDQ5NjAwLCBbXSwgU0FfUkVTVEFSVH0sIHsweDgwNDk2MDAsIFtdLCBTQV9SRVNUQVJUfSkgPSAwCnNpZ2FjdGlvbihTSUdBTFJNLCB7MHg4MDQ5YmEwLCBbXSwgU0FfUkVTVEFSVH0sIHsweDgwNDk2MDAsIFtdLCBTQV9SRVNUQVJUfSkgPSAwCmFsYXJtKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAKcmVjdmZyb20oMywgIkVcMFwwVFwwMDA1XDBcMEBcMXxyXDE3N1wwXDBcMVwxNzciLi4uLCAxOTIsIDAsIAp7c2luX2ZhbWlseT1BRl9JTkVULCBzaW5fcG9ydD1odG9ucyg1MDg4MiksIHNpbl9hZGRyPWluZXRfYWRkcigiMTI3LjAuMC4xIil9LCBbMTZdKSA9IDg0CmdldHRpbWVvZmRheSh7OTQ4OTA0NzE5LCAxNjAyMjR9LCBOVUxMKSA9IDAKcmVjdmZyb20oMywgIkVcMFwwVFwwMDA2XDBcMFwzNzdcMVwyNzVwXDE3N1wwIi4uLiwgMTkyLCAwLCAKe3Npbl9mYW1pbHk9QUZfSU5FVCwgc2luX3BvcnQ9aHRvbnMoNTA4ODIpLCBzaW5fYWRkcj1pbmV0X2FkZHIoIjEyNy4wLjAuMSIpfSwgWzE2XSkgPSA4NApnZXR0aW1lb2ZkYXkoezk0ODkwNDcxOSwgMTY2OTUyfSwgTlVMTCkgPSAwCndyaXRlKDEsICI2NCBieXRlcyBmcm9tIDEyNy4wLjAuMTogaWNtcF9zZSIuLi4sIAo1NzY0IGJ5dGVzIGZyb20gMTI3LjAuMC4xOiBpY21wX3NlcT0wIHR0bD0yNTUgdGltZT0yOC4wIG1zCgpFeGFtcGxlIDIKLS0tLS0tLS0tCnN0cmFjZSBwYXNzd2QgMj4mMSB8IGdyZXAgb3Blbgpwcm9kdWNlcyB0aGUgZm9sbG93aW5nIG91dHB1dApvcGVuKCIvZXRjL2xkLnNvLmNhY2hlIiwgT19SRE9OTFkpICAgICAgPSAzCm9wZW4oIi9vcHQva2RlL2xpYi9saWJjLnNvLjUiLCBPX1JET05MWSkgPSAtMSBFTk9FTlQgKE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkpCm9wZW4oIi9saWIvbGliYy5zby41IiwgT19SRE9OTFkpICAgICAgICA9IDMKb3BlbigiL2RldiIsIE9fUkRPTkxZKSAgICAgICAgICAgICAgICAgID0gMwpvcGVuKCIvdmFyL3J1bi91dG1wIiwgT19SRE9OTFkpICAgICAgICAgPSAzCm9wZW4oIi9ldGMvcGFzc3dkIiwgT19SRE9OTFkpICAgICAgICAgICA9IDMKb3BlbigiL2V0Yy9zaGFkb3ciLCBPX1JET05MWSkgICAgICAgICAgID0gMwpvcGVuKCIvZXRjL2xvZ2luLmRlZnMiLCBPX1JET05MWSkgICAgICAgPSA0Cm9wZW4oIi9kZXYvdHR5IiwgT19SRE9OTFkpICAgICAgICAgICAgICA9IDQgCgpUaGUgMj4mMSBpcyBkb25lIHRvIHJlZGlyZWN0IHN0ZGVyciB0byBzdGRvdXQgJiBncmVwIGlzIHRoZW4gZmlsdGVyaW5nIHRoaXMgaW5wdXQgCnRocm91Z2ggdGhlIHBpcGUgZm9yIGVhY2ggbGluZSBjb250YWluaW5nIHRoZSBzdHJpbmcgb3Blbi4KCgpFeGFtcGxlIDMKLS0tLS0tLS0tCkdldHRpbmcgc29waGlzdG9jYXRlZAp0ZWxuZXRkIGNyYXNoZXMgb24gJiBJIGRvbid0IGtub3cgd2h5ClN0ZXBzCi0tLS0tCjEpIFJlcGxhY2UgdGhlIGZvbGxvd2luZyBsaW5lIGluIC9ldGMvaW5ldGQuY29uZgp0ZWxuZXQgIHN0cmVhbSAgdGNwICAgICBub3dhaXQgIHJvb3QgICAgL3Vzci9zYmluL2luLnRlbG5ldGQgLWggCndpdGgKdGVsbmV0ICBzdHJlYW0gIHRjcCAgICAgbm93YWl0ICByb290ICAgIC9ibGFoCgoyKSBDcmVhdGUgdGhlIGZpbGUgL2JsYWggd2l0aCB0aGUgZm9sbG93aW5nIGNvbnRlbnRzIHRvIHN0YXJ0IHRyYWNpbmcgdGVsbmV0ZCAKIyEvYmluL2Jhc2gKL3Vzci9iaW4vc3RyYWNlIC1vL3QxIC1mIC91c3Ivc2Jpbi9pbi50ZWxuZXRkIC1oIAozKSBjaG1vZCA3MDAgL2JsYWggdG8gbWFrZSBpdCBleGVjdXRhYmxlIG9ubHkgdG8gcm9vdAo0KQpraWxsYWxsIC1IVVAgaW5ldGQKb3IgcHMgYXV4IHwgZ3JlcCBpbmV0ZApnZXQgaW5ldGQncyBwcm9jZXNzIGlkCiYga2lsbCAtSFVQIGluZXRkIHRvIHJlc3RhcnQgaXQuCgpJbXBvcnRhbnQgb3B0aW9ucwotLS0tLS0tLS0tLS0tLS0tLQotbyBpcyB1c2VkIHRvIHRlbGwgc3RyYWNlIHRvIG91dHB1dCB0byBhIGZpbGUgaW4gb3VyIGNhc2UgdDEgaW4gdGhlIHJvb3QgZGlyZWN0b3J5Ci1mIGlzIHRvIGZvbGxvdyBjaGlsZHJlbiBpLmUuCmUuZyBpbiBvdXIgY2FzZSBhYm92ZSB0ZWxuZXRkIHdpbGwgc3RhcnQgdGhlIGxvZ2luIHByb2Nlc3MgJiBzdWJzZXF1ZW50bHkgYSBzaGVsbCBsaWtlIGJhc2guCllvdSB3aWxsIGJlIGFibGUgdG8gdGVsbCB3aGljaCBpcyB3aGljaCBmcm9tIHRoZSBwcm9jZXNzIElEJ3MgbGlzdGVkIG9uIHRoZSBsZWZ0IGhhbmQgc2lkZQpvZiB0aGUgc3RyYWNlIG91dHB1dC4KLXA8cGlkPiB3aWxsIHRlbGwgc3RyYWNlIHRvIGF0dGFjaCB0byBhIHJ1bm5pbmcgcHJvY2VzcywgeXVwIHRoaXMgY2FuIGJlIGRvbmUgcHJvdmlkZWQKIGl0IGlzbid0IGJlaW5nIHRyYWNlZCBvciBkZWJ1Z2dlZCBhbHJlYWR5ICYgeW91IGhhdmUgZW5vdWdoIHByaXZpbGVnZXMsCnRoZSByZWFzb24gMiBwcm9jZXNzZXMgY2Fubm90IHRyYWNlIG9yIGRlYnVnIHRoZSBzYW1lIHByb2dyYW0gaXMgdGhhdCBzdHJhY2UKYmVjb21lcyB0aGUgcGFyZW50IHByb2Nlc3Mgb2YgdGhlIG9uZSBiZWluZyBkZWJ1Z2dlZCAmIHByb2Nlc3NlcyAoIHVubGlrZSBwZW9wbGUgKQpjYW4gaGF2ZSBvbmx5IG9uZSBwYXJlbnQuCgoKSG93ZXZlciB0aGUgZmlsZSAvdDEgd2lsbCBnZXQgYmlnIHF1aXRlIHF1aWNrbHkKdG8gdGVzdCBpdCB0ZWxuZXQgMTI3LjAuMC4xCgpub3cgbG9vayBhdCB3aGF0IGZpbGVzIGluLnRlbG5ldGQgZXhlY3ZlJ2QKNDEzICAgZXhlY3ZlKCIvdXNyL3NiaW4vaW4udGVsbmV0ZCIsIFsiL3Vzci9zYmluL2luLnRlbG5ldGQiLCAiLWgiXSwgWy8qIDE3IHZhcnMgKi9dKSA9IDAKNDE0ICAgZXhlY3ZlKCIvYmluL2xvZ2luIiwgWyIvYmluL2xvZ2luIiwgIi1oIiwgImxvY2FsaG9zdCIsICItcCJdLCBbLyogMiB2YXJzICovXSkgPSAwIAoKV2hleSBpdCB3b3JrZWQhLgoKCk90aGVyIGhpbnRzOgotLS0tLS0tLS0tLS0KSWYgdGhlIHByb2dyYW0gaXMgbm90IHZlcnkgaW50ZXJhY3RpdmUgKCBpLmUuIG5vdCBtdWNoIGtleWJvYXJkIGlucHV0ICkKJiBpcyBjcmFzaGluZyBpbiBvbmUgYXJjaGl0ZWN0dXJlIGJ1dCBub3QgaW4gYW5vdGhlciB5b3UgY2FuIGRvIAphbiBzdHJhY2Ugb2YgYm90aCBwcm9ncmFtcyB1bmRlciBhcyBpZGVudGljYWwgYSBzY2VuYXJpbyBhcyB5b3UgY2FuCm9uIGJvdGggYXJjaGl0ZWN0dXJlcyBvdXRwdXR0aW5nIHRvIGEgZmlsZSB0aGVuLgpkbyBhIGRpZmYgb2YgdGhlIHR3byB0cmFjZXMgdXNpbmcgdGhlIGRpZmYgcHJvZ3JhbQppLmUuCmRpZmYgb3V0cHV0MSBvdXRwdXQyCiYgbWF5YmUgeW91J2xsIGJlIGFibGUgdG8gc2VlIHdoZXJlIHRoZSBjYWxsIHBhdGhzIGRpZmZlcmVkLCB0aGlzCmlzIHBvc3NpYmx5IG5lYXIgdGhlIGNhdXNlIG9mIHRoZSBjcmFzaC4gCgpNb3JlIGluZm8KLS0tLS0tLS0tCkxvb2sgYXQgbWFuIHBhZ2VzIGZvciBzdHJhY2UgJiB0aGUgdmFyaW91cyBzeXNjYWxscwplLmcuIG1hbiBzdHJhY2UsIG1hbiBhbGFybSwgbWFuIHNvY2tldC4KCgpQZXJmb3JtYW5jZSBEZWJ1Z2dpbmcKPT09PT09PT09PT09PT09PT09PT09CmdjYyBpcyBjYXBpYmxlIG9mIGNvbXBpbGluZyBpbiBwcm9maWxpbmcgY29kZSBqdXN0IGFkZCB0aGUgLXAgb3B0aW9uCnRvIHRoZSBDRkxBR1MsIHRoaXMgb2J2aW91c2x5IGFmZmVjdHMgcHJvZ3JhbSBzaXplICYgcGVyZm9ybWFuY2UuClRoaXMgY2FuIGJlIHVzZWQgYnkgdGhlIGdwcm9mIGdudSBwcm9maWxpbmcgdG9vbCBvciB0aGUKZ2NvdiB0aGUgZ251IGNvZGUgY292ZXJhZ2UgdG9vbCAoIGNvZGUgY292ZXJhZ2UgaXMgYSBtZWFucyBvZiB0ZXN0aW5nCmNvZGUgcXVhbGl0eSBieSBjaGVja2luZyBpZiBhbGwgdGhlIGNvZGUgaW4gYW4gZXhlY3V0YWJsZSBpbiBleGVyY2lzZWQgYnkKYSB0ZXN0ZXIgKS4KCgpVc2luZyB0b3AgdG8gZmluZCBvdXQgd2hlcmUgcHJvY2Vzc2VzIGFyZSBzbGVlcGluZyBpbiB0aGUga2VybmVsCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVG8gZG8gdGhpcyBjb3B5IHRoZSBTeXN0ZW0ubWFwIGZyb20gdGhlIHJvb3QgZGlyZWN0b3J5IHdoZXJlCnRoZSBsaW51eCBrZXJuZWwgd2FzIGJ1aWx0IHRvIHRoZSAvYm9vdCBkaXJlY3Rvcnkgb24geW91ciAKbGludXggbWFjaGluZS4KU3RhcnQgdG9wCk5vdyB0eXBlIGZVPHJldHVybj4KWW91IHNob3VsZCBzZWUgYSBuZXcgZmllbGQgY2FsbGVkIFdDSEFOIHdoaWNoCnRlbGxzIHlvdSB3aGVyZSBlYWNoIHByb2Nlc3MgaXMgc2xlZXBpbmcgaGVyZSBpcyBhIHR5cGljYWwgb3V0cHV0LgogCiA2OjU5cG0gIHVwIDQxIG1pbiwgIDEgdXNlciwgIGxvYWQgYXZlcmFnZTogMC4wMCwgMC4wMCwgMC4wMAoyOCBwcm9jZXNzZXM6IDI3IHNsZWVwaW5nLCAxIHJ1bm5pbmcsIDAgem9tYmllLCAwIHN0b3BwZWQKQ1BVIHN0YXRlczogIDAuMCUgdXNlciwgIDAuMSUgc3lzdGVtLCAgMC4wJSBuaWNlLCA5OS44JSBpZGxlCk1lbTogICAyNTQ5MDBLIGF2LCAgIDQ1OTc2SyB1c2VkLCAgMjA4OTI0SyBmcmVlLCAgICAgICAwSyBzaHJkLCAgIDI4NjM2SyBidWZmClN3YXA6ICAgICAgIDBLIGF2LCAgICAgICAwSyB1c2VkLCAgICAgICAwSyBmcmVlICAgICAgICAgICAgICAgICAgICA4NjIwSyBjYWNoZWQKCiAgUElEIFVTRVIgICAgIFBSSSAgTkkgIFNJWkUgIFJTUyBTSEFSRSBXQ0hBTiAgICAgU1RBVCAgTElCICVDUFUgJU1FTSAgIFRJTUUgQ09NTUFORAogIDc1MCByb290ICAgICAgMTIgICAwICAgODQ4ICA4NDggICA3MDAgZG9fc2VsZWN0IFMgICAgICAgMCAgMC4xICAwLjMgICAwOjAwIGluLnRlbG5ldGQKICA3Njcgcm9vdCAgICAgIDE2ICAgMCAgMTE0MCAxMTQwICAgOTY0ICAgICAgICAgICBSICAgICAgIDAgIDAuMSAgMC40ICAgMDowMCB0b3AKICAgIDEgcm9vdCAgICAgICA4ICAgMCAgIDIxMiAgMjEyICAgMTgwIGRvX3NlbGVjdCBTICAgICAgIDAgIDAuMCAgMC4wICAgMDowMCBpbml0CiAgICAyIHJvb3QgICAgICAgOSAgIDAgICAgIDAgICAgMCAgICAgMCBkb3duX2ludGUgU1cgICAgICAwICAwLjAgIDAuMCAgIDA6MDAga21jaGVjawoKVGhlIHRpbWUgY29tbWFuZAotLS0tLS0tLS0tLS0tLS0tCkFub3RoZXIgcmVsYXRlZCBjb21tYW5kIGlzIHRoZSB0aW1lIGNvbW1hbmQgd2hpY2ggZ2l2ZXMgeW91IGFuIGluZGljYXRpb24Kb2Ygd2hlcmUgYSBwcm9jZXNzIGlzIHNwZW5kaW5nIHRoZSBtYWpvcml0eSBvZiBpdHMgdGltZS4KZS5nLgp0aW1lIHBpbmcgLWMgNSBuYwpvdXRwdXRzCnJlYWwJMG00LjA1NHMKdXNlcgkwbTAuMDEwcwpzeXMJMG0wLjAxMHMKCkRlYnVnZ2luZyB1bmRlciBWTQo9PT09PT09PT09PT09PT09PT0KCk5vdGVzCi0tLS0tCkFkZHJlc3NlcyAmIHZhbHVlcyBpbiB0aGUgVk0gZGVidWdnZXIgYXJlIGFsd2F5cyBoZXggbmV2ZXIgZGVjaW1hbApBZGRyZXNzIHJhbmdlcyBhcmUgb2YgdGhlIGZvcm1hdCA8SGV4VmFsdWUxPi08SGV4VmFsdWUyPiBvciA8SGV4VmFsdWUxPi48SGV4VmFsdWUyPiAKZS5nLiBUaGUgYWRkcmVzcyByYW5nZSAgMHgyMDAwIHRvIDB4MzAwMCBjYW4gYmUgZGVzY3JpYmVkIGRlc2NyaWJlZCBhcwoyMDAwLTMwMDAgb3IgMjAwMC4xMDAwCgpUaGUgVk0gRGVidWdnZXIgaXMgY2FzZSBpbnNlbnNpdGl2ZS4KClZNJ3Mgc3RyZW5ndGhzIGFyZSB1c3VhbGx5IG90aGVyIGRlYnVnZ2VycyB3ZWFrbmVzc2VzIHlvdSBjYW4gZ2V0IGF0IGFueSByZXNvdXJjZQpubyBtYXR0ZXIgaG93IHNlbnNpdGl2ZSBlLmcuIG1lbW9yeSBtYW5hZ2VtZW50IHJlc291cmNlcyxjaGFuZ2UgYWRkcmVzcyB0cmFuc2xhdGlvbgppbiB0aGUgUFNXLiBGb3Iga2VybmVsIGhhY2tpbmcgeW91IHdpbGwgcmVhcCBkaXZpZGVuZHMgaWYgeW91IGdldCBnb29kIGF0IGl0LgoKVGhlIFZNIERlYnVnZ2VyIGRpc3BsYXlzIG9wZXJhdG9ycyBidXQgbm90IG9wZXJhbmRzLCBwcm9iYWJseSBiZWNhdXNlIHNvbWUKb2YgaXQgd2FzIHdyaXR0ZW4gd2hlbiBtZW1vcnkgd2FzIGV4cGVuc2l2ZSAmIHRoZSBwcm9ncmFtbWVyIHdhcyBwcm9iYWJseSBwcm91ZCB0aGF0Cml0IGZpdHRlZCBpbnRvIDJrIG9mIG1lbW9yeSAmIHRoZSBwcm9ncmFtbWVycyAmIGRpZG4ndCB3YW50IHRvIHNob2NrIGhhcmRjb3JlIFZNJ2VycyBieQpjaGFuZ2luZyB0aGUgaW50ZXJmYWNlIDotKSwgYWxzbyB0aGUgZGVidWdnZXIgZGlzcGxheXMgdXNlZnVsIGluZm9ybWF0aW9uIG9uIHRoZSBzYW1lIGxpbmUgJiAKdGhlIGF1dGhvciBvZiB0aGUgY29kZSBwcm9iYWJseSBmZWx0IHRoYXQgaXQgd2FzIGEgZ29vZCBpZGVhIG5vdCB0byBnbyBvdmVyIAp0aGUgODAgY29sdW1ucyBvbiB0aGUgc2NyZWVuLiAKCkFzIHNvbWUgb2YgeW91IGFyZSBwcm9iYWJseSBpbiBhIHBhbmljIG5vdyB0aGlzIGlzbid0IGFzIHVuaW50dWl0aXZlIGFzIGl0IG1heSBzZWVtCmFzIHRoZSAzOTAgaW5zdHJ1Y3Rpb25zIGFyZSBlYXN5IHRvIGRlY29kZSBtZW50YWxseSAmIHlvdSBjYW4gbWFrZSBhIGdvb2QgZ3Vlc3MgYXQgYSBsb3QgCm9mIHRoZW0gYXMgYWxsIHRoZSBvcGVyYW5kcyBhcmUgbmliYmxlICggaGFsZiBieXRlIGFsaWduZWQgKSAmIGlmIHlvdSBoYXZlIGFuIG9iamR1bXAgbGlzdGluZwphbHNvIGl0IGlzIHF1aXRlIGVhc3kgdG8gZm9sbG93LCBpZiB5b3UgZG9uJ3QgaGF2ZSBhbiBvYmpkdW1wIGxpc3Rpbmcga2VlcCBhIGNvcHkgb2YKdGhlIHMvMzkwIFJlZmVyZW5jZSBTdW1tYXJ5ICYgbG9vayBhdCBiZXR3ZWVuIHBhZ2VzIDIgJiA3IG9yIGFsdGVybmF0aXZlbHkgdGhlCnMvMzkwIHByaW5jaXBsZXMgb2Ygb3BlcmF0aW9uLgplLmcuIGV2ZW4gSSBjYW4gZ3Vlc3MgdGhhdCAKMDAwMUFGRjgnIExSICAgIDE4MEYgICAgICAgIENDIDAKaXMgYSAoIGxvYWQgcmVnaXN0ZXIgKSBsciByMCxyMTUgCgpBbHNvIGl0IGlzIHZlcnkgZWFzeSB0byB0ZWxsIHRoZSBsZW5ndGggb2YgYSAzOTAgaW5zdHJ1Y3Rpb24gZnJvbSB0aGUgMiBtb3N0IHNpZ25pZmljYW50CmJpdHMgaW4gdGhlIGluc3RydWN0aW9uICggbm90IHRoYXQgdGhpcyBpbmZvIGlzIHJlYWxseSB1c2VmdWwgZXhjZXB0IGlmIHlvdSBhcmUgdHJ5aW5nIHRvCm1ha2Ugc2Vuc2Ugb2YgYSBoZXhkdW1wIG9mIGNvZGUgKS4KSGVyZSBpcyBhIHRhYmxlCkJpdHMgICAgICAgICAgICAgICAgICAgIEluc3RydWN0aW9uIExlbmd0aAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KMDAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgQnl0ZXMKMDEgICAgICAgICAgICAgICAgICAgICAgICAgIDQgQnl0ZXMKMTAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgQnl0ZXMKMTEgICAgICAgICAgICAgICAgICAgICAgICAgIDYgQnl0ZXMKCgoKClRoZSBkZWJ1Z2dlciBhbHNvIGRpc3BsYXlzIG90aGVyIHVzZWZ1bCBpbmZvIG9uIHRoZSBzYW1lIGxpbmUgc3VjaCBhcyB0aGUKYWRkcmVzc2VzIGJlaW5nIG9wZXJhdGVkIG9uIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBvZiBicmFuY2hlcyAmIGNvbmRpdGlvbiBjb2Rlcy4KZS5nLiAgCjAwMDE5NzM2JyBBSEkgICBBN0RBRkYwRSAgICBDQyAxCjAwMDE5OEJBJyBCUkMgICBBNzg0MDAwNCAtPiAwMDAxOThDMicgICBDQyAwCjAwMDE5OENFJyBTVE0gICA5MDBFRjA2OCA+PiAwRkE5NUU3OCAgICBDQyAyCgoKClVzZWZ1bCBWTSBkZWJ1Z2dlciBjb21tYW5kcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkkgc3VwcG9zZSBJJ2QgYmV0dGVyIG1lbnRpb24gdGhpcyBiZWZvcmUgSSBzdGFydAp0byBsaXN0IHRoZSBjdXJyZW50IGFjdGl2ZSB0cmFjZXMgZG8gClEgVFIKdGhlcmUgY2FuIGJlIGEgbWF4aW11bSBvZiAyNTUgb2YgdGhlc2UgcGVyIHNldAooIG1vcmUgYWJvdXQgdHJhY2Ugc2V0cyBsYXRlciApLgpUbyBzdG9wIHRyYWNlcyBpc3N1ZSBhClRSIEVORC4KVG8gZGVsZXRlIGEgcGFydGljdWxhciBicmVha3BvaW50IGlzc3VlClRSIERFTCA8YnJlYWtwb2ludCBudW1iZXI+CgpUaGUgUEExIGtleSBkcm9wcyB0byBDUCBtb2RlIHNvIHlvdSBjYW4gaXNzdWUgZGVidWdnZXIgY29tbWFuZHMsCkRvaW5nIGFsdCBjIChvbiBteSAzMjcwIGNvbnNvbGUgYXQgbGVhc3QgKSBjbGVhcnMgdGhlIHNjcmVlbi4gCmhpdHRpbmcgYiA8ZW50ZXI+IGNvbWVzIGJhY2sgdG8gdGhlIHJ1bm5pbmcgb3BlcmF0aW5nIHN5c3RlbQpmcm9tIGNwIG1vZGUgKCBpbiBvdXIgY2FzZSBsaW51eCApLgpJdCBpcyB0eXBpY2FsbHkgdXNlZnVsIHRvIGFkZCBzaG9ydGN1dHMgdG8geW91ciBwcm9maWxlLmV4ZWMgZmlsZQppZiB5b3UgaGF2ZSBvbmUgKCB0aGlzIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byBhdXRvZXhlYy5iYXQgaW4gRE9TICkuCmZpbGUgaGVyZSBhcmUgYSBmZXcgZnJvbSBtaW5lLgovKiB0aGlzIGdpdmVzIG1lIGNvbW1hbmQgaGlzdG9yeSBvbiBpc3N1aW5nIGYxMiAqLwpzZXQgcGYxMiByZXRyaWV2ZSAKLyogdGhpcyBjb250aW51ZXMgKi8Kc2V0IHBmOCBpbW0gYgovKiBnb2VzIHRvIHRyYWNlIHNldCBhICovCnNldCBwZjEgaW1tIHRyIGdvdG8gYQovKiBnb2VzIHRvIHRyYWNlIHNldCBiICovCnNldCBwZjIgaW1tIHRyIGdvdG8gYgovKiBnb2VzIHRvIHRyYWNlIHNldCBjICovCnNldCBwZjMgaW1tIHRyIGdvdG8gYwoKCgpJbnN0cnVjdGlvbiBUcmFjaW5nCi0tLS0tLS0tLS0tLS0tLS0tLS0KU2V0dGluZyBhIHNpbXBsZSBicmVha3BvaW50ClRSIEkgUFNXQSA8YWRkcmVzcz4KVG8gZGVidWcgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIHRyeQpUUiBJIFIgPGZ1bmN0aW9uIGFkZHJlc3MgcmFuZ2U+ClRSIEkgb24gaXRzIG93biB3aWxsIHNpbmdsZSBzdGVwLgpUUiBJIERBVEEgPE1ORU1PTklDPiA8T1BUSU9OQUwgUkFOR0U+IHdpbGwgdHJhY2UgZm9yIHBhcnRpY3VsYXIgbW5lbW9uaWNzCmUuZy4KVFIgSSBEQVRBIDREIFIgMDE5N0JDLjQwMDAKd2lsbCB0cmFjZSBmb3IgQkFTJ2VzICggb3Bjb2RlIDREICkgaW4gdGhlIHJhbmdlIDAxOTdCQy40MDAwCmlmIHlvdSB3ZXJlIGluY2xpbmVkIHlvdSBjb3VsZCBhZGQgdHJhY2VzIGZvciBhbGwgYnJhbmNoIGluc3RydWN0aW9ucyAmCnN1ZmZpeCB0aGVtIHdpdGggdGhlIHJ1biBwcmVmaXggc28geW91IHdvdWxkIGhhdmUgYSBiYWNrdHJhY2Ugb24gc2NyZWVuIAp3aGVuIGEgcHJvZ3JhbSBjcmFzaGVzLgpUUiBCUiA8SU5UTyBPUiBGUk9NPiB3aWxsIHRyYWNlIGJyYW5jaGVzIGludG8gb3Igb3V0IG9mIGFuIGFkZHJlc3MuCmUuZy4KVFIgQlIgSU5UTyAwIGlzIG9mdGVuIHF1aXRlIHVzZWZ1bCBpZiBhIHByb2dyYW0gaXMgZ2V0dGluZyBhd2t3YXJkICYgZGVjaWRpbmcKdG8gYnJhbmNoIHRvIDAgJiBjcmFzaGluZyBhcyB0aGlzIHdpbGwgc3RvcCBhdCB0aGUgYWRkcmVzcyBiZWZvcmUgaW4ganVtcHMgdG8gMC4KVFIgSSBSIDxhZGRyZXNzIHJhbmdlPiBSVU4gY21kIGQgZwpzaW5nbGUgc3RlcHMgYSByYW5nZSBvZiBhZGRyZXNzZXMgYnV0IHN0YXlzIHJ1bm5pbmcgJgpkaXNwbGF5cyB0aGUgZ3BycyBvbiBlYWNoIHN0ZXAuCgoKCkRpc3BsYXlpbmcgJiBtb2RpZnlpbmcgUmVnaXN0ZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkQgRyB3aWxsIGRpc3BsYXkgYWxsIHRoZSBncHJzCkFkZGluZyBhIGV4dHJhIEcgdG8gYWxsIHRoZSBjb21tYW5kcyBpcyBuZWNlc3NhcnkgdG8gYWNjZXNzIHRoZSBmdWxsIDY0IGJpdCAKY29udGVudCBpbiBWTSBvbiB6L0FyY2hpdGVjdHVyZSBvYnZpb3VzbHkgdGhpcyBpc24ndCByZXF1aXJlZCBmb3IgYWNjZXNzIHJlZ2lzdGVycwphcyB0aGVzZSBhcmUgc3RpbGwgMzIgYml0LgplLmcuIERHRyBpbnN0ZWFkIG9mIERHIApEIFggd2lsbCBkaXNwbGF5IGFsbCB0aGUgY29udHJvbCByZWdpc3RlcnMKRCBBUiB3aWxsIGRpc3BsYXkgYWxsIHRoZSBhY2Nlc3MgcmVnaXN0ZXJzCkQgQVI0LTcgd2lsbCBkaXNwbGF5IGFjY2VzcyByZWdpc3RlcnMgNCB0byA3CkNQVSBBTEwgRCBHIHdpbGwgZGlzcGxheSB0aGUgR1JQUyBvZiBhbGwgQ1BVUyBpbiB0aGUgY29uZmlndXJhdGlvbgpEIFBTVyB3aWxsIGRpc3BsYXkgdGhlIGN1cnJlbnQgUFNXCnN0IFBTVyAyMDAwIHdpbGwgcHV0IHRoZSB2YWx1ZSAyMDAwIGludG8gdGhlIFBTVyAmCmNhdXNlIGNyYXNoIHlvdXIgbWFjaGluZS4KRCBQUkVGSVggZGlzcGxheXMgdGhlIHByZWZpeCBvZmZzZXQKCgpEaXNwbGF5aW5nIE1lbW9yeQotLS0tLS0tLS0tLS0tLS0tLQpUbyBkaXNwbGF5IG1lbW9yeSBtYXBwZWQgdXNpbmcgdGhlIGN1cnJlbnQgUFNXJ3MgbWFwcGluZyB0cnkKRCA8cmFuZ2U+ClRvIG1ha2UgVk0gZGlzcGxheSBhIG1lc3NhZ2UgZWFjaCB0aW1lIGl0IGhpdHMgYSBwYXJ0aWN1bGFyIGFkZHJlc3MgJiBjb250aW51ZSB0cnkKRCBJPHJhbmdlPiB3aWxsIGRpc2Fzc2VtYmxlL2Rpc3BsYXkgYSByYW5nZSBvZiBpbnN0cnVjdGlvbnMuClNUIGFkZHIgMzIgYml0IHdvcmQgd2lsbCBzdG9yZSBhIDMyIGJpdCBhbGlnbmVkIGFkZHJlc3MKRCBUPHJhbmdlPiB3aWxsIGRpc3BsYXkgdGhlIEVCQ0RJQyBpbiBhbiBhZGRyZXNzICggaWYgeW91IGFyZSB0aGF0IHdheSBpbmNsaW5lZCApCkQgUjxyYW5nZT4gd2lsbCBkaXNwbGF5IHJlYWwgYWRkcmVzc2VzICggd2l0aG91dCBEQVQgKSBidXQgd2l0aCBwcmVmaXhpbmcuClRoZXJlIGFyZSBvdGhlciBjb21wbGV4IG9wdGlvbnMgdG8gZGlzcGxheSBpZiB5b3UgbmVlZCB0byBnZXQgYXQgc2F5IGhvbWUgc3BhY2UKYnV0IGFyZSBpbiBwcmltYXJ5IHNwYWNlIHRoZSBlYXNpZXN0IHRoaW5nIHRvIGRvIGlzIHRvIHRlbXBvcmFyaWx5Cm1vZGlmeSB0aGUgUFNXIHRvIHRoZSBvdGhlciBhZGRyZXNzaW5nIG1vZGUsIGRpc3BsYXkgdGhlIHN0dWZmICYgdGhlbgpyZXN0b3JlIGl0LgoKCiAKSGludHMKLS0tLS0KSWYgeW91IHdhbnQgdG8gaXNzdWUgYSBkZWJ1Z2dlciBjb21tYW5kIHdpdGhvdXQgaGFsdGluZyB5b3VyIHZpcnR1YWwgbWFjaGluZSB3aXRoIHRoZQpQQTEga2V5IHRyeSBwcmVmaXhpbmcgdGhlIGNvbW1hbmQgd2l0aCAjQ1AgZS5nLgojY3AgdHIgaSBwc3dhIDIwMDAKYWxzbyBzdWZmaXhpbmcgbW9zdCBkZWJ1Z2dlciBjb21tYW5kcyB3aXRoIFJVTiB3aWxsIGNhdXNlIHRoZW0gbm90CnRvIHN0b3AganVzdCBkaXNwbGF5IHRoZSBtbmVtb25pYyBhdCB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiBvbiB0aGUgY29uc29sZS4KSWYgeW91IGhhdmUgc2V2ZXJhbCBicmVha3BvaW50cyB5b3Ugd2FudCB0byBwdXQgaW50byB5b3VyIHByb2dyYW0gJgp5b3UgZ2V0IGZlZCB1cCBvZiBjcm9zcyByZWZlcmVuY2luZyB3aXRoIFN5c3RlbS5tYXAKeW91IGNhbiBkbyB0aGUgZm9sbG93aW5nIHRyaWNrIGZvciBzZXZlcmFsIHN5bWJvbHMuCmdyZXAgZG9fc2lnbmFsIFN5c3RlbS5tYXAgCndoaWNoIGVtaXRzIHRoZSBmb2xsb3dpbmcgYW1vbmcgb3RoZXIgdGhpbmdzCjAwMDFmNGUwIFQgZG9fc2lnbmFsIApub3cgeW91IGNhbiBkbwoKVFIgSSBQU1dBIDAwMDFmNGUwIGNtZCBtc2cgKiBkb19zaWduYWwKVGhpcyBzZW5kcyBhIG1lc3NhZ2UgdG8geW91ciBvd24gY29uc29sZSBlYWNoIHRpbWUgZG9fc2lnbmFsIGlzIGVudGVyZWQuCiggQXMgYW4gYXNpZGUgSSB3cm90ZSBhIHBlcmwgc2NyaXB0IG9uY2Ugd2hpY2ggYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYSBSRVhYCnNjcmlwdCB3aXRoIGJyZWFrcG9pbnRzIG9uIGV2ZXJ5IGtlcm5lbCBwcm9jZWR1cmUsIHRoaXMgaXNuJ3QgYSBnb29kIGlkZWEKYmVjYXVzZSB0aGVyZSBhcmUgdGhvdXNhbmRzIG9mIHRoZXNlIHJvdXRpbmVzICYgVk0gY2FuIG9ubHkgc2V0IDI1NSBicmVha3BvaW50cwphdCBhIHRpbWUgc28geW91IG5lYXJseSBoYWQgdG8gc3BlbmQgYXMgbG9uZyBwcnVuaW5nIHRoZSBmaWxlIGRvd24gYXMgeW91IHdvdWxkIAplbnRlcmluZyB0aGUgbXNnJ3MgYnkgaGFuZCApLGhvd2V2ZXIsIHRoZSB0cmljayBtaWdodCBiZSB1c2VmdWwgZm9yIGEgc2luZ2xlIG9iamVjdCBmaWxlLgpPbiBsaW51eCdlcyAzMjcwIGVtdWxhdG9yIHgzMjcwIHRoZXJlIGlzIGEgdmVyeSB1c2VmdWwgb3B0aW9uIHVuZGVyIHRoZSBmaWxlIG1lbnQKU2F2ZSBTY3JlZW5zIEluIEZpbGUgdGhpcyBpcyB2ZXJ5IGdvb2Qgb2Yga2VlcGluZyBhIGNvcHkgb2YgdHJhY2VzLiAKCkZyb20gQ01TIGhlbHAgPGNvbW1hbmQgbmFtZT4gd2lsbCBnaXZlIHlvdSBvbmxpbmUgaGVscCBvbiBhIHBhcnRpY3VsYXIgY29tbWFuZC4gCmUuZy4gCkhFTFAgRElTUExBWQoKQWxzbyBDUCBoYXMgYSBmaWxlIGNhbGxlZCBwcm9maWxlLmV4ZWMgd2hpY2ggYXV0b21hdGljYWxseSBnZXRzIGNhbGxlZApvbiBzdGFydHVwIG9mIENNUyAoIGxpa2UgYXV0b2V4ZWMuYmF0ICksIGtlZXBpbmcgb24gYSBET1MgYW5hbG9neSBzZXNzaW9uCkNQIGhhcyBhIGZlYXR1cmUgc2ltaWxhciB0byBkb3NrZXksIGl0IG1heSBiZSB1c2VmdWwgZm9yIHlvdSB0bwp1c2UgcHJvZmlsZS5leGVjIHRvIGRlZmluZSBzb21lIGtleXN0cm9rZXMuIAplLmcuClNFVCBQRjkgSU1NIEIKVGhpcyBkb2VzIGEgc2luZ2xlIHN0ZXAgaW4gVk0gb24gcHJlc3NpbmcgRjguIApTRVQgUEYxMCAgXgpUaGlzIHNldHMgdXAgdGhlIF4ga2V5Lgp3aGljaCBjYW4gYmUgdXNlZCBmb3IgXmMgKGN0cmwtYyksXnogKGN0cmwteikgd2hpY2ggY2FuJ3QgYmUgdHlwZWQgZGlyZWN0bHkgaW50byBzb21lIDMyNzAgY29uc29sZXMuClNFVCBQRjExIF4tClRoaXMgdHlwZXMgdGhlIHN0YXJ0aW5nIGtleXN0cm9rZXMgZm9yIGEgc3lzcnEgc2VlIFN5c1JxIGJlbG93LgpTRVQgUEYxMiBSRVRSSUVWRQpUaGlzIHJldHJpZXZlcyBjb21tYW5kIGhpc3Rvcnkgb24gcHJlc3NpbmcgRjEyLgoKClNvbWV0aW1lcyBpbiBWTSB0aGUgZGlzcGxheSBpcyBzZXQgdXAgdG8gc2Nyb2xsIGF1dG9tYXRpY2FsbHkgdGhpcwpjYW4gYmUgdmVyeSBhbm5veWluZyBpZiB0aGVyZSBhcmUgbWVzc2FnZXMgeW91IHdpc2ggdG8gbG9vayBhdAp0byBzdG9wIHRoaXMgZG8KVEVSTSBNT1JFIDI1NSAyNTUKVGhpcyB3aWxsIG5lYXJseSBzdG9wIGF1dG9tYXRpYyBzY3JlZW4gdXBkYXRlcywgaG93ZXZlciBpdCB3aWxsCmNhdXNlIGEgZGVuaWFsIG9mIHNlcnZpY2UgaWYgbG90cyBvZiBtZXNzYWdlcyBnbyB0byB0aGUgMzI3MCBjb25zb2xlLApzbyBpdCB3b3VsZCBiZSBmb29saXNoIHRvIHVzZSB0aGlzIGFzIHRoZSBkZWZhdWx0IG9uIGEgcHJvZHVjdGlvbiBtYWNoaW5lLgogCgpUcmFjaW5nIHBhcnRpY3VsYXIgcHJvY2Vzc2VzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGhlIGtlcm5lbCdzIHRleHQgc2VnbWVudCBpcyBpbnRlbnRpb25hbGx5IGF0IGFuIGFkZHJlc3MgaW4gbWVtb3J5IHRoYXQgaXQgd2lsbAp2ZXJ5IHNlbGRvbSBjb2xsaWRlIHdpdGggdGV4dCBzZWdtZW50cyBvZiB1c2VyIHByb2dyYW1zICggdGhhbmtzIE1hcnRpbiApLAp0aGlzIHNpbXBsaWZpZXMgZGVidWdnaW5nIHRoZSBrZXJuZWwuCkhvd2V2ZXIgaXQgaXMgcXVpdGUgY29tbW9uIGZvciB1c2VyIHByb2Nlc3NlcyB0byBoYXZlIGFkZHJlc3NlcyB3aGljaCBjb2xsaWRlCnRoaXMgY2FuIG1ha2UgZGVidWdnaW5nIGEgcGFydGljdWxhciBwcm9jZXNzIHVuZGVyIFZNIHBhaW5mdWwgdW5kZXIgbm9ybWFsCmNpcmN1bXN0YW5jZXMgYXMgdGhlIHByb2Nlc3MgbWF5IGNoYW5nZSB3aGVuIGRvaW5nIGEgClRSIEkgUiA8YWRkcmVzcyByYW5nZT4uClRoYW5rZnVsbHkgYWZ0ZXIgcmVhZGluZyBWTSdzIG9ubGluZSBoZWxwIEkgZmlndXJlZCBvdXQgaG93IHRvIGRlYnVnCkkgcGFydGljdWxhciBwcm9jZXNzLgoKWW91ciBmaXJzdCBwcm9ibGVtIGlzIHRvIGZpbmQgdGhlIFNURCAoIHNlZ21lbnQgdGFibGUgZGVzaWduYXRpb24gKQpvZiB0aGUgcHJvZ3JhbSB5b3Ugd2lzaCB0byBkZWJ1Zy4KVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB5b3UgY2FuIGRvIHRoaXMgaGVyZSBhcmUgYSBmZXcKMSkgb2JqZHVtcCAtLXN5bXMgPHByb2dyYW0gdG8gYmUgZGVidWdnZWQ+IHwgZ3JlcCBtYWluClRvIGdldCB0aGUgYWRkcmVzcyBvZiBtYWluIGluIHRoZSBwcm9ncmFtLgp0ciBpIHBzd2EgPGFkZHJlc3Mgb2YgbWFpbj4KU3RhcnQgdGhlIHByb2dyYW0sIGlmIFZNIGRyb3BzIHRvIENQIG9uIHdoYXQgbG9va3MgbGlrZSB0aGUgZW50cnkKcG9pbnQgb2YgdGhlIG1haW4gZnVuY3Rpb24gdGhpcyBpcyBtb3N0IGxpa2VseSB0aGUgcHJvY2VzcyB5b3Ugd2lzaCB0byBkZWJ1Zy4KTm93IGRvIGEgRCBYMTMgb3IgRCBYRzEzIG9uIHovQXJjaGl0ZWN0dXJlLgpPbiAzMSBiaXQgdGhlIFNURCBpcyBiaXRzIDEtMTkgKCB0aGUgU1RPIHNlZ21lbnQgdGFibGUgb3JpZ2luICkgCiYgMjUtMzEgKCB0aGUgU1RMIHNlZ21lbnQgdGFibGUgbGVuZ3RoICkgb2YgQ1IxMy4Kbm93IHR5cGUKVFIgSSBSIFNURCA8Q1IxMydzIHZhbHVlPiAwLjdmZmZmZmZmCmUuZy4KVFIgSSBSIFNURCA4RjMyRTFGRiAwLjdmZmZmZmZmCkFub3RoZXIgdmVyeSB1c2VmdWwgdmFyaWF0aW9uIGlzClRSIFNUT1JFIElOVE8gU1REIDxDUjEzJ3MgdmFsdWU+IDxhZGRyZXNzIHJhbmdlPgpmb3IgZmluZGluZyBvdXQgd2hlbiBhIHBhcnRpY3VsYXIgdmFyaWFibGUgY2hhbmdlcy4KCkFuIGFsdGVybmF0aXZlIHdheSBvZiBmaW5kaW5nIHRoZSBTVEQgb2YgYSBjdXJyZW50bHkgcnVubmluZyBwcm9jZXNzIAppcyB0byBkbyB0aGUgZm9sbG93aW5nLCAoIHRoaXMgbWV0aG9kIGlzIG1vcmUgY29tcGxleCBidXQKY291bGQgYmUgcXVpdGUgY29udmVuaWVudCBpZiB5b3UgYXJlbid0IHVwZGF0aW5nIHRoZSBrZXJuZWwgbXVjaCAmCnNvIHlvdXIga2VybmVsIHN0cnVjdHVyZXMgd2lsbCBzdGF5IGNvbnN0YW50IGZvciBhIHJlYXNvbmFibGUgcGVyaW9kIG9mCnRpbWUgKS4KCmdyZXAgdGFzayAvcHJvYy88cGlkPi9zdGF0dXMKZnJvbSB0aGlzIHlvdSBzaG91bGQgc2VlIHNvbWV0aGluZyBsaWtlCnRhc2s6IDBmMTYwMDAwIGtzcDogMGYxNjFkZTggcHRfcmVnczogMGYxNjFmNjgKVGhpcyBub3cgZ2l2ZXMgeW91IGEgcG9pbnRlciB0byB0aGUgdGFzayBzdHJ1Y3R1cmUuCk5vdyBtYWtlIENDOj0iczM5MC1nY2MgLWciIGtlcm5lbC9zY2hlZC5zClRvIGdldCB0aGUgdGFza19zdHJ1Y3Qgc3RhYmluZm8uCiggdGFza19zdHJ1Y3QgaXMgZGVmaW5lZCBpbiBpbmNsdWRlL2xpbnV4L3NjaGVkLmggKS4KTm93IHdlIHdhbnQgdG8gbG9vayBhdAp0YXNrLT5hY3RpdmVfbW0tPnBnZApvbiBteSBtYWNoaW5lIHRoZSBhY3RpdmVfbW0gaW4gdGhlIHRhc2sgc3RydWN0dXJlIHN0YWIgaXMKYWN0aXZlX21tOig0LDEyKSw2NzIsMzIKaXRzIG9mZnNldCBpcyA2NzIvOD04ND0weDU0CnRoZSBwZ2QgbWVtYmVyIGluIHRoZSBtbV9zdHJ1Y3Qgc3RhYiBpcwpwZ2Q6KDQsNik9KigyOSw1KSw5NiwzMgpzbyBpdHMgb2Zmc2V0IGlzIDk2Lzg9MTI9MHhjCgpzbyB3ZSdsbApoZXhkdW1wIC1zIDB4ZjE2MDA1NCAvZGV2L21lbSB8IG1vcmUKaS5lLiB0YXNrX3N0cnVjdCthY3RpdmVfbW0gb2Zmc2V0CnRvIGxvb2sgYXQgdGhlIGFjdGl2ZV9tbSBtZW1iZXIKZjE2MDA1NCAwZmVlIGNjNjAgMDAxOSBlMzM0IDAwMDAgMDAwMCAwMDAwIDAwMTEKaGV4ZHVtcCAtcyAweDBmZWVjYzZjIC9kZXYvbWVtIHwgbW9yZQppLmUuIGFjdGl2ZV9tbStwZ2Qgb2Zmc2V0CmZlZWNjNmMgMGYyYyAwMDAwIDAwMDAgMDAwMSAwMDAwIDAwMDEgMDAwMCAwMDEwCndlIGdldCBzb21ldGhpbmcgbGlrZQpub3cgZG8gClRSIEkgUiBTVEQgPHBnZHwweDdmPiAwLjdmZmZmZmZmCmkuZS4gdGhlIDB4N2YgaXMgYWRkZWQgYmVjYXVzZSB0aGUgcGdkIG9ubHkKZ2l2ZXMgdGhlIHBhZ2UgdGFibGUgb3JpZ2luICYgd2UgbmVlZCB0byBzZXQgdGhlIGxvdyBiaXRzCnRvIHRoZSBtYXhpbXVtIHBvc3NpYmxlIHNlZ21lbnQgdGFibGUgbGVuZ3RoLgpUUiBJIFIgU1REIDBmMmMwMDdmIDAuN2ZmZmZmZmYKb24gei9BcmNoaXRlY3R1cmUgeW91J2xsIHByb2JhYmx5IG5lZWQgdG8gZG8KVFIgSSBSIFNURCA8cGdkfDB4Nz4gMC5mZmZmZmZmZmZmZmZmZmZmCnRvIHNldCB0aGUgVGFibGVUeXBlIHRvIDB4MSAmIHRoZSBUYWJsZSBsZW5ndGggdG8gMy4KCgoKVHJhY2luZyBQcm9ncmFtIEV4Y2VwdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSWYgeW91IGdldCBhIGNyYXNoIHdoaWNoIHNheXMgc29tZXRoaW5nIGxpa2UKaWxsZWdhbCBvcGVyYXRpb24gb3Igc3BlY2lmaWNhdGlvbiBleGNlcHRpb24gZm9sbG93ZWQgYnkgYSByZWdpc3RlciBkdW1wCllvdSBjYW4gcmVzdGFydCBsaW51eCAmIHRyYWNlIHRoZXNlIHVzaW5nIHRoZSB0ciBwcm9nIDxyYW5nZSBvciB2YWx1ZT4gdHJhY2Ugb3B0aW9uLgoKCgpUaGUgbW9zdCBjb21tb24gb25lcyB5b3Ugd2lsbCBub3JtYWxseSBiZSB0cmFjaW5nIGZvciBpcwoxPW9wZXJhdGlvbiBleGNlcHRpb24KMj1wcml2aWxlZ2VkIG9wZXJhdGlvbiBleGNlcHRpb24KND1wcm90ZWN0aW9uIGV4Y2VwdGlvbgo1PWFkZHJlc3NpbmcgZXhjZXB0aW9uCjY9c3BlY2lmaWNhdGlvbiBleGNlcHRpb24KMTA9c2VnbWVudCB0cmFuc2xhdGlvbiBleGNlcHRpb24KMTE9cGFnZSB0cmFuc2xhdGlvbiBleGNlcHRpb24KClRoZSBmdWxsIGxpc3Qgb2YgdGhlc2UgaXMgb24gcGFnZSAyMiBvZiB0aGUgY3VycmVudCBzLzM5MCBSZWZlcmVuY2UgU3VtbWFyeS4KZS5nLgp0ciBwcm9nIDEwIHdpbGwgdHJhY2Ugc2VnbWVudCB0cmFuc2xhdGlvbiBleGNlcHRpb25zLgp0ciBwcm9nIG9uIGl0cyBvd24gd2lsbCB0cmFjZSBhbGwgcHJvZ3JhbSBpbnRlcnJ1cHRpb24gY29kZXMuCgpUcmFjZSBTZXRzCi0tLS0tLS0tLS0KT24gc3RhcnRpbmcgVk0geW91IGFyZSBpbml0aWFsbHkgaW4gdGhlIElOSVRJQUwgdHJhY2Ugc2V0LgpZb3UgY2FuIGRvIGEgUSBUUiB0byB2ZXJpZnkgdGhpcy4KSWYgeW91IGhhdmUgYSBjb21wbGV4IHRyYWNpbmcgc2l0dWF0aW9uIHdoZXJlIHlvdSB3aXNoIHRvIHdhaXQgZm9yIGluc3RhbmNlIAp0aWxsIGEgZHJpdmVyIGlzIG9wZW4gYmVmb3JlIHlvdSBzdGFydCB0cmFjaW5nIElPLCBidXQga25vdyBpbiB5b3VyCmhlYXJ0IHRoYXQgeW91IGFyZSBnb2luZyB0byBoYXZlIHRvIG1ha2Ugc2V2ZXJhbCBydW5zIHRocm91Z2ggdGhlIGNvZGUgdGlsbCB5b3UKaGF2ZSBhIGNsdWUgd2hhdHMgZ29pbmcgb24uIAoKV2hhdCB5b3UgY2FuIGRvIGlzClRSIEkgUFNXQSA8RHJpdmVyIG9wZW4gYWRkcmVzcz4KaGl0IGIgdG8gY29udGludWUgdGlsbCBicmVha3BvaW50CnJlYWNoIHRoZSBicmVha3BvaW50Cm5vdyBkbyB5b3VyClRSIEdPVE8gQiAKVFIgSU8gN2MwOC03YzA5IGluc3QgaW50IHJ1biAKb3Igd2hhdGV2ZXIgdGhlIElPIGNoYW5uZWxzIHlvdSB3aXNoIHRvIHRyYWNlIGFyZSAmIGhpdCBiCgpUbyBnb3QgYmFjayB0byB0aGUgaW5pdGlhbCB0cmFjZSBzZXQgZG8KVFIgR09UTyBJTklUSUFMCiYgdGhlIFRSIEkgUFNXQSA8RHJpdmVyIG9wZW4gYWRkcmVzcz4gd2lsbCBiZSB0aGUgb25seSBhY3RpdmUgYnJlYWtwb2ludCBhZ2Fpbi4KCgpUcmFjaW5nIGxpbnV4IHN5c2NhbGxzIHVuZGVyIFZNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3lzY2FsbHMgYXJlIGltcGxlbWVudGVkIG9uIExpbnV4IGZvciBTMzkwIGJ5IHRoZSBTdXBlcnZpc29yIGNhbGwgaW5zdHJ1Y3Rpb24gKFNWQykgdGhlcmUgMjU2IApwb3NzaWJpbGl0aWVzIG9mIHRoZXNlIGFzIHRoZSBpbnN0cnVjdGlvbiBpcyBtYWRlIHVwIG9mIGEgIDB4QSBvcGNvZGUgJiB0aGUgc2Vjb25kIGJ5dGUgYmVpbmcKdGhlIHN5c2NhbGwgbnVtYmVyLiBUaGV5IGFyZSB0cmFjZWQgdXNpbmcgdGhlIHNpbXBsZSBjb21tYW5kLgpUUiBTVkMgIDxPcHRpb25hbCB2YWx1ZSBvciByYW5nZT4KdGhlIHN5c2NhbGxzIGFyZSBkZWZpbmVkIGluIGxpbnV4L2luY2x1ZGUvYXNtLXMzOTAvdW5pc3RkLmgKZS5nLiB0byB0cmFjZSBhbGwgZmlsZSBvcGVucyBqdXN0IGRvClRSIFNWQyA1ICggYXMgdGhpcyBpcyB0aGUgc3lzY2FsbCBudW1iZXIgb2Ygb3BlbiApCgoKU01QIFNwZWNpZmljIGNvbW1hbmRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUbyBmaW5kIG91dCBob3cgbWFueSBjcHVzIHlvdSBoYXZlClEgQ1BVUyBkaXNwbGF5cyBhbGwgdGhlIENQVSdzIGF2YWlsYWJsZSB0byB5b3VyIHZpcnR1YWwgbWFjaGluZQpUbyBmaW5kIHRoZSBjcHUgdGhhdCB0aGUgY3VycmVudCBjcHUgVk0gZGVidWdnZXIgY29tbWFuZHMgYXJlIGJlaW5nIGRpcmVjdGVkIGF0IGRvClEgQ1BVIHRvIGNoYW5nZSB0aGUgY3VycmVudCBjcHUgY3B1IFZNIGRlYnVnZ2VyIGNvbW1hbmRzIGFyZSBiZWluZyBkaXJlY3RlZCBhdCBkbwpDUFUgPGRlc2lyZWQgY3B1IG5vPgoKT24gYSBTTVAgZ3Vlc3QgaXNzdWUgYSBjb21tYW5kIHRvIGFsbCBDUFVzIHRyeSBwcmVmaXhpbmcgdGhlIGNvbW1hbmQgd2l0aCBjcHUgYWxsLgpUbyBpc3N1ZSBhIGNvbW1hbmQgdG8gYSBwYXJ0aWN1bGFyIGNwdSB0cnkgY3B1IDxjcHUgbnVtYmVyPiBlLmcuCkNQVSAwMSBUUiBJIFIgMjAwMC4zMDAwCklmIHlvdSBhcmUgcnVubmluZyBvbiBhIGd1ZXN0IHdpdGggc2V2ZXJhbCBjcHVzICYgeW91IGhhdmUgYSBJTyByZWxhdGVkIHByb2JsZW0KJiBjYW5ub3QgZm9sbG93IHRoZSBmbG93IG9mIGNvZGUgYnV0IHlvdSBrbm93IGl0IGlzbnQgc21wIHJlbGF0ZWQuCmZyb20gdGhlIGJhc2ggcHJvbXB0IGlzc3VlCnNodXRkb3duIC1oIG5vdyBvciBoYWx0LgpkbyBhIFEgQ1BVUyB0byBmaW5kIG91dCBob3cgbWFueSBjcHVzIHlvdSBoYXZlCmRldGFjaCBlYWNoIG9uZSBvZiB0aGVtIGZyb20gY3AgZXhjZXB0IGNwdSAwIApieSBpc3N1aW5nIGEgCkRFVEFDSCBDUFUgMDEtKG51bWJlciBvZiBjcHVzIGluIGNvbmZpZ3VyYXRpb24pCiYgYm9vdCBsaW51eCBhZ2Fpbi4KVFIgU0lHUCB3aWxsIHRyYWNlIGludGVyIHByb2Nlc3NvciBzaWduYWwgcHJvY2Vzc29yIGluc3RydWN0aW9ucy4KREVGSU5FIENQVSAwMS0obnVtYmVyIGluIGNvbmZpZ3VyYXRpb24pIAp3aWxsIGdldCB5b3VyIGd1ZXN0cyBjcHVzIGJhY2suCgoKSGVscCBmb3IgZGlzcGxheWluZyBhc2NpaSB0ZXh0c3RyaW5ncwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk9uIHRoZSB2ZXJ5IGxhdGVzdCBWTSBOdWNsZXVzJ2VzIFZNIGNhbiBub3cgZGlzcGxheSBhc2NpaQooIHRoYW5rcyBOZWFsZSBmb3IgdGhlIGhpbnQgKSBieSBkb2luZwpEIFRYPGxvd2FkZHI+LjxsZW4+CmUuZy4KRCBUWDAuMTAwCgpBbHRlcm5hdGl2ZWx5Cj09PT09PT09PT09PT0KVW5kZXIgb2xkZXIgVk0gZGVidWdnZXJzICggSSBsb3ZlIEVCRElDIHRvbyApIHlvdSBjYW4gdXNlIHRoaXMgbGl0dGxlIHByb2dyYW0gSSB3cm90ZSB3aGljaAp3aWxsIGNvbnZlcnQgYSBjb21tYW5kIGxpbmUgb2YgaGV4IGRpZ2l0cyB0byBhc2NpaSB0ZXh0IHdoaWNoIGNhbiBiZSBjb21waWxlZCB1bmRlciBsaW51eCAmIAp5b3UgY2FuIGNvcHkgdGhlIGhleCBkaWdpdHMgZnJvbSB5b3VyIHgzMjcwIHRlcm1pbmFsIHRvIHlvdXIgeHRlcm0gaWYgeW91IGFyZSBkZWJ1Z2dpbmcKZnJvbSBhIGxpbnV4Ym94LgoKVGhpcyBpcyBxdWl0ZSB1c2VmdWwgd2hlbiBsb29raW5nIGF0IGEgcGFyYW1ldGVyIHBhc3NlZCBpbiBhcyBhIHRleHQgc3RyaW5nCnVuZGVyIFZNICggdW5sZXNzIHlvdSBhcmUgZ29vZCBhdCBkZWNvZGluZyBBU0NJSSBpbiB5b3VyIGhlYWQgKS4KCmUuZy4gY29uc2lkZXIgdHJhY2luZyBhbiBvcGVuIHN5c2NhbGwKVFIgU1ZDIDUKV2UgaGF2ZSBzdG9wcGVkIGF0IGEgYnJlYWtwb2ludAowMDAxNTFCMCcgU1ZDICAgMEEwNSAgICAgLT4gMDAwMTkwOUEnICAgQ0MgMAoKRCAyMC44IHRvIGNoZWNrIHRoZSBTVkMgb2xkIHBzdyBpbiB0aGUgcHJlZml4IGFyZWEgJiBzZWUgd2FzIGl0IGZyb20gdXNlcnNwYWNlCiggZm9yIHRoZSBsYXlvdXQgb2YgdGhlIHByZWZpeCBhcmVhIGNvbnN1bHQgUDE4IG9mIHRoZSBzLzM5MCAzOTAgUmVmZXJlbmNlIFN1bW1hcnkgCmlmIHlvdSBoYXZlIGl0IGF2YWlsYWJsZSApLgpWMDAwMDAwMjAgIDA3MEMyMDAwIDgwMDE1MUIyClRoZSBwcm9ibGVtIHN0YXRlIGJpdCB3YXNuJ3Qgc2V0ICYgIGl0J3MgYWxzbyB0b28gZWFybHkgaW4gdGhlIGJvb3Qgc2VxdWVuY2UKZm9yIGl0IHRvIGJlIGEgdXNlcnNwYWNlIFNWQyBpZiBpdCB3YXMgd2Ugd291bGQgaGF2ZSB0byB0ZW1wb3JhcmlseSBzd2l0Y2ggdGhlIApwc3cgdG8gdXNlciBzcGFjZSBhZGRyZXNzaW5nIHNvIHdlIGNvdWxkIGdldCBhdCB0aGUgZmlyc3QgcGFyYW1ldGVyIG9mIHRoZSBvcGVuIGluCmdwcjIuCk5leHQgZG8gYSAKRCBHMgpHUFIgIDIgPSAgMDAwMTRDQjQKTm93IGRpc3BsYXkgd2hhdCBncHIyIGlzIHBvaW50aW5nIHRvCkQgMDAwMTRDQjQuMjAKVjAwMDE0Q0I0ICAyRjY0NjU3NiAyRjYzNkY2RSA3MzZGNkM2NSAwMDAwMUJGNQpWMDAwMTRDQzQgIEZDMDAwMTRDIEI0MDAxMDAxIEUwMDAxMDAwIEI4MDcwNzA3Ck5vdyBjb3B5IHRoZSB0ZXh0IHRpbGwgdGhlIGZpcnN0IDAwIGhleCAoIHdoaWNoIGlzIHRoZSBlbmQgb2YgdGhlIHN0cmluZwp0byBhbiB4dGVybSAmIGRvIGhleDJhc2NpaSBvbiBpdC4KaGV4MmFzY2lpIDJGNjQ2NTc2IDJGNjM2RjZFIDczNkY2QzY1IDAwIApvdXRwdXRzCkRlY29kZWQgSGV4Oj0vIGQgZSB2IC8gYyBvIG4gcyBvIGwgZSAweDAwIApXZSB3ZXJlIG9wZW5pbmcgdGhlIGNvbnNvbGUgZGV2aWNlLAoKWW91IGNhbiBjb21waWxlIHRoZSBjb2RlIGJlbG93IHlvdXJzZWxmIGZvciBwcmFjdGljZSA6LSksCi8qCiAqICAgIGhleDJhc2NpaS5jCiAqICAgIGEgdXNlZnVsIGxpdHRsZSB0b29sIGZvciBjb252ZXJ0aW5nIGEgaGV4YWRlY2ltYWwgY29tbWFuZCBsaW5lIHRvIGFzY2lpCiAqCiAqICAgIEF1dGhvcihzKTogRGVuaXMgSm9zZXBoIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKQogKiAgICAoQykgMjAwMCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uLgogKi8gICAKI2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pCnsKICBpbnQgY250MSxjbnQyLGxlbix0b2dnbGU9MDsKICBpbnQgc3RhcnRjbnQ9MTsKICB1bnNpZ25lZCBjaGFyIGMsaGV4OwogIAogIGlmKGFyZ2M+MSYmKHN0cmNtcChhcmd2WzFdLCItYSIpPT0wKSkKICAgICBzdGFydGNudD0yOwogIHByaW50ZigiRGVjb2RlZCBIZXg6PSIpOwogIGZvcihjbnQxPXN0YXJ0Y250O2NudDE8YXJnYztjbnQxKyspCiAgewogICAgbGVuPXN0cmxlbihhcmd2W2NudDFdKTsKICAgIGZvcihjbnQyPTA7Y250MjxsZW47Y250MisrKQogICAgewogICAgICAgYz1hcmd2W2NudDFdW2NudDJdOwogICAgICAgaWYoYz49JzAnJiZjPD0nOScpCgkgIGM9Yy0nMCc7CiAgICAgICBpZihjPj0nQScmJmM8PSdGJykKCSAgYz1jLSdBJysxMDsKICAgICAgIGlmKGM+PSdhJyYmYzw9J2YnKQoJICBjPWMtJ2EnKzEwOwogICAgICAgc3dpdGNoKHRvZ2dsZSkKICAgICAgIHsKCSAgY2FzZSAwOgoJICAgICBoZXg9Yzw8NDsKCSAgICAgdG9nZ2xlPTE7CgkgIGJyZWFrOwoJICBjYXNlIDE6CgkgICAgIGhleCs9YzsKCSAgICAgaWYoaGV4PDMyfHxoZXg+MTI3KQoJICAgICB7CgkJaWYoc3RhcnRjbnQ9PTEpCgkJICAgcHJpbnRmKCIweCUwMlggIiwoaW50KWhleCk7CgkJZWxzZQoJCSAgIHByaW50ZigiLiIpOwoJICAgICB9CgkgICAgIGVsc2UKCSAgICAgewoJICAgICAgIHByaW50ZigiJWMiLGhleCk7CgkgICAgICAgaWYoc3RhcnRjbnQ9PTEpCgkJICBwcmludGYoIiAiKTsKCSAgICAgfQoJICAgICB0b2dnbGU9MDsKCSAgYnJlYWs7CiAgICAgICB9CiAgICB9CiAgfQogIHByaW50ZigiXG4iKTsKfQoKCgoKU3RhY2sgdHJhY2luZyB1bmRlciBWTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkEgYmFzaWMgYmFja3RyYWNlCi0tLS0tLS0tLS0tLS0tLS0tCgpIZXJlIGFyZSB0aGUgdHJpY2tzIEkgdXNlIDkgb3V0IG9mIDEwIHRpbWVzIGl0IHdvcmtzIHByZXR0eSB3ZWxsLAoKV2hlbiB5b3VyIGJhY2tjaGFpbiByZWFjaGVzIGEgZGVhZCBlbmQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGhpcyBjYW4gaGFwcGVuIHdoZW4gYW4gZXhjZXB0aW9uIGhhcHBlbnMgaW4gdGhlIGtlcm5lbCAmIHRoZSBrZXJuZWwgaXMgZW50ZXJlZCB0d2ljZQppZiB5b3UgcmVhY2ggdGhlIE5VTEwgcG9pbnRlciBhdCB0aGUgZW5kIG9mIHRoZSBiYWNrIGNoYWluIHlvdSBzaG91bGQgYmUKYWJsZSB0byBzbmlmZiBmdXJ0aGVyIGJhY2sgaWYgeW91IGZvbGxvdyB0aGUgZm9sbG93aW5nIHRyaWNrcy4KMSkgQSBrZXJuZWwgYWRkcmVzcyBzaG91bGQgYmUgZWFzeSB0byByZWNvZ25pc2Ugc2luY2UgaXQgaXMgaW4KcHJpbWFyeSBzcGFjZSAmIHRoZSBwcm9ibGVtIHN0YXRlIGJpdCBpc24ndCBzZXQgJiBhbHNvClRoZSBIaSBiaXQgb2YgdGhlIGFkZHJlc3MgaXMgc2V0LgoyKSBBbm90aGVyIGJhY2tjaGFpbiBzaG91bGQgYWxzbyBiZSBlYXN5IHRvIHJlY29nbmlzZSBzaW5jZSBpdCBpcyBhbiAKYWRkcmVzcyBwb2ludGluZyB0byBhbm90aGVyIGFkZHJlc3MgYXBwcm94aW1hdGVseSAxMDAgYnl0ZXMgb3IgMHg3MCBoZXgKYmVoaW5kIHRoZSBjdXJyZW50IHN0YWNrcG9pbnRlci4KCgpIZXJlIGlzIHNvbWUgcHJhY3RpY2UuCmJvb3QgdGhlIGtlcm5lbCAmIGhpdCBQQTEgYXQgc29tZSByYW5kb20gdGltZQpkIGcgdG8gZGlzcGxheSB0aGUgZ3BycywgdGhpcyBzaG91bGQgZGlzcGxheSBzb21ldGhpbmcgbGlrZQpHUFIgIDAgPSAgMDAwMDAwMDEgIDAwMTU2MDE4ICAwMDE0MzU5QyAgMDAwMDAwMDAKR1BSICA0ID0gIDAwMDAwMDAxICAwMDFCODg4OCAgMDAwMDAzRTAgIDAwMDAwMDAwCkdQUiAgOCA9ICAwMDEwMDA4MCAgMDAxMDAwODQgIDAwMDAwMDAwICAwMDBGRTAwMApHUFIgMTIgPSAgMDAwMTA0MDAgIDgwMDFCMkRDICA4MDAxQjM2QSAgMDAwRkZFRDgKTm90ZSB0aGF0IEdQUjE0IGlzIGEgcmV0dXJuIGFkZHJlc3MgYnV0IGFzIHdlIGFyZSByZWFsIG1lbiB3ZSBhcmUgZ29pbmcgdG8KdHJhY2UgdGhlIHN0YWNrLgpkaXNwbGF5IDB4NDAgYnl0ZXMgYWZ0ZXIgdGhlIHN0YWNrIHBvaW50ZXIuCgpWMDAwRkZFRDggIDAwMEZGRjM4IDgwMDFCODM4IDgwMDE0QzhFIDAwMEZGRjM4ClYwMDBGRkVFOCAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAzRTAgMDAwMDAwMDAKVjAwMEZGRUY4ICAwMDEwMDA4MCAwMDEwMDA4NCAwMDAwMDAwMCAwMDBGRTAwMApWMDAwRkZGMDggIDAwMDEwNDAwIDgwMDFCMkRDIDgwMDFCMzZBIDAwMEZGRUQ4CgoKQWggbm93IGxvb2sgYXQgd2hhdHMgaW4gc3ArNTYgKHNwKzB4MzgpIHRoaXMgaXMgODAwMUIzNkEgb3VyIHNhdmVkIHIxNCBpZgp5b3UgbG9vayBhYm92ZSBhdCBvdXIgc3RhY2tmcmFtZSAmIGFsc28gYWdyZWVzIHdpdGggR1BSMTQuCgpub3cgYmFja2NoYWluIApkIDAwMEZGRjM4LjQwCndlIG5vdyBhcmUgdGFraW5nIHRoZSBjb250ZW50cyBvZiBTUCB0byBnZXQgb3VyIGZpcnN0IGJhY2tjaGFpbi4KClYwMDBGRkYzOCAgMDAwRkZGQTAgMDAwMDAwMDAgMDAwMTQ5OTUgMDAxNDcwOTQKVjAwMEZGRjQ4ICAwMDE0NzA5MCAwMDE0NzBBMCAwMDAwMDNFMCAwMDAwMDAwMApWMDAwRkZGNTggIDAwMTAwMDgwIDAwMTAwMDg0IDAwMDAwMDAwIDAwMUJGMUQwClYwMDBGRkY2OCAgMDAwMTA0MDAgODAwMTQ5QkEgODAwMTRDQTYgMDAwRkZGMzgKClRoaXMgZGlzcGxheXMgYSAybmQgcmV0dXJuIGFkZHJlc3Mgb2YgODAwMTRDQTYKCm5vdyBkbyBkIDAwMEZGRkEwLjQwIGZvciBvdXIgM3JkIGJhY2tjaGFpbgoKVjAwMEZGRkEwICAwNEI1MjAwMiAwMDAxMTA3RiAwMDAwMDAwMCAwMDAwMDAwMApWMDAwRkZGQjAgIDAwMDAwMDAwIDAwMDAwMDAwIEZGMDAwMDAwIDAwMDExMDdGClYwMDBGRkZDMCAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAKVjAwMEZGRkQwICAwMDAxMDQwMCA4MDAxMDgwMiA4MDAxMDg1QSAwMDBGRkZBMAoKCm91ciAzcmQgcmV0dXJuIGFkZHJlc3MgaXMgODAwMTA4NUEKCmFzIHRoZSAwNEI1MjAwMiBsb29rcyBzdXNwaWNpb3VzbHkgbGlrZSBydWJiaXNoIGl0IGlzIGZhaXIgdG8gYXNzdW1lIHRoYXQgdGhlIGtlcm5lbCBlbnRyeSByb3V0aW5lcwpmb3IgdGhlIHNha2Ugb2Ygb3B0aW1pc2F0aW9uIGRvbnQgc2V0IHVwIGEgYmFja2NoYWluLgoKbm93IGxvb2sgYXQgU3lzdGVtLm1hcCB0byBzZWUgaWYgdGhlIGFkZHJlc3NlcyBtYWtlIGFueSBzZW5zZS4KCmdyZXAgLWkgMDAwMWIzIFN5c3RlbS5tYXAKb3V0cHV0cyBhbW9uZyBvdGhlciB0aGluZ3MKMDAwMWIzMDQgVCBjcHVfaWRsZSAKc28gODAwMUIzNkEKaXMgY3B1X2lkbGUrMHg2NiAoIHF1aWV0IHRoZSBjcHUgaXMgYXNsZWVwLCBkb24ndCB3YWtlIGl0ICkKCgpncmVwIC1pIDAwMDE0IFN5c3RlbS5tYXAgCnByb2R1Y2VzIGFtb25nIG90aGVyIHRoaW5ncwowMDAxNGE3OCBUIHN0YXJ0X2tlcm5lbCAgCnNvIDAwMTRDQTYgaXMgc3RhcnRfa2VybmVsK3NvbWUgaGV4IG51bWJlciBJIGNhbid0IGFkZCBpbiBteSBoZWFkLgoKZ3JlcCAtaSAwMDEwOCBTeXN0ZW0ubWFwIAp0aGlzIHByb2R1Y2VzCjAwMDEwODAwIFQgX3N0ZXh0CnNvICAgODAwMTA4NUEgaXMgX3N0ZXh0KzB4NWEKCkNvbmdyYXRzIHlvdSd2ZSBkb25lIHlvdXIgZmlyc3QgYmFja2NoYWluLgoKCgpzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIElPIE92ZXJ2aWV3Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkkgYW0gbm90IGdvaW5nIHRvIGdpdmUgYSBjb3Vyc2UgaW4gMzkwIElPIGFyY2hpdGVjdHVyZSBhcyB0aGlzIHdvdWxkIHRha2UgbWUgcXVpdGUgYQp3aGlsZSAmIEknbSBubyBleHBlcnQuIEluc3RlYWQgSSdsbCBnaXZlIGEgMzkwIElPIGFyY2hpdGVjdHVyZSBzdW1tYXJ5IGZvciBEdW1taWVzIGlmIHlvdSBoYXZlIAp0aGUgcy8zOTAgcHJpbmNpcGxlcyBvZiBvcGVyYXRpb24gYXZhaWxhYmxlIHJlYWQgdGhpcyBpbnN0ZWFkLiBJZiBub3RoaW5nIGVsc2UgeW91IG1heSBmaW5kIGEgZmV3IAp1c2VmdWwga2V5d29yZHMgaW4gaGVyZSAmIGJlIGFibGUgdG8gdXNlIHRoZW0gb24gYSB3ZWIgc2VhcmNoIGVuZ2luZSBsaWtlIGFsdGF2aXN0YSB0byBmaW5kIAptb3JlIHVzZWZ1bCBpbmZvcm1hdGlvbi4KClVubGlrZSBvdGhlciBidXMgYXJjaGl0ZWN0dXJlcyBtb2Rlcm4gMzkwIHN5c3RlbXMgZG8gdGhlaXIgSU8gdXNpbmcgbW9zdGx5CmZpYnJlIG9wdGljcyAmIGRldmljZXMgc3VjaCBhcyB0YXBlcyAmIGRpc2tzIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBzZXZlcmFsIG1haW5mcmFtZXMsCmFsc28gUzM5MCBjYW4gc3VwcG9ydCB1cHRvIDY1NTM2IGRldmljZXMgd2hpbGUgYSBoaWdoIGVuZCBQQyBiYXNlZCBzeXN0ZW0gbWlnaHQgYmUgY2hva2luZyAKd2l0aCBhcm91bmQgNjQuIEhlcmUgaXMgc29tZSBvZiB0aGUgY29tbW9uIElPIHRlcm1pbm9sb2d5CgpTdWJjaGFubmVsOgpUaGlzIGlzIHRoZSBsb2dpY2FsIG51bWJlciBtb3N0IElPIGNvbW1hbmRzIHVzZSB0byB0YWxrIHRvIGFuIElPIGRldmljZSB0aGVyZSBjYW4gYmUgdXB0bwoweDEwMDAwICg2NTUzNikgb2YgdGhlc2UgaW4gYSBjb25maWd1cmF0aW9uIHR5cGljYWxseSB0aGVyZSBpcyBhIGZldyBodW5kcmVkLiBVbmRlciBWTQpmb3Igc2ltcGxpY2l0eSB0aGV5IGFyZSBhbGxvY2F0ZWQgY29udGlndW91c2x5LCBob3dldmVyIG9uIHRoZSBuYXRpdmUgaGFyZHdhcmUgdGhleSBhcmUgbm90CnRoZXkgdHlwaWNhbGx5IHN0YXkgY29uc2lzdGVudCBiZXR3ZWVuIGJvb3RzIHByb3ZpZGVkIG5vIG5ldyBoYXJkd2FyZSBpcyBpbnNlcnRlZCBvciByZW1vdmVkLgpVbmRlciBMaW51eCBmb3IgMzkwIHdlIHVzZSB0aGVzZSBhcyBJUlEncyAmIGFsc28gd2hlbiBpc3N1aW5nIGFuIElPIGNvbW1hbmQgKENMRUFSIFNVQkNIQU5ORUwsCkhBTFQgU1VCQ0hBTk5FTCxNT0RJRlkgU1VCQ0hBTk5FTCxSRVNVTUUgU1VCQ0hBTk5FTCxTVEFSVCBTVUJDSEFOTkVMLFNUT1JFIFNVQkNIQU5ORUwgJiAKVEVTVCBTVUJDSEFOTkVMICkgd2UgdXNlIHRoaXMgYXMgdGhlIElEIG9mIHRoZSBkZXZpY2Ugd2Ugd2lzaCB0byB0YWxrIHRvLCB0aGUgbW9zdAppbXBvcnRhbnQgb2YgdGhlc2UgaW5zdHJ1Y3Rpb25zIGFyZSBTVEFSVCBTVUJDSEFOTkVMICggdG8gc3RhcnQgSU8gKSwgVEVTVCBTVUJDSEFOTkVMICggdG8gY2hlY2sKd2hldGhlciB0aGUgSU8gY29tcGxldGVkIHN1Y2Nlc3NmdWxseSApLCAmIEhBTFQgU1VCQ0hBTk5FTCAoIHRvIGtpbGwgSU8gKSwgYSBzdWJjaGFubmVsCmNhbiBoYXZlIHVwIHRvIDggY2hhbm5lbCBwYXRocyB0byBhIGRldmljZSB0aGlzIG9mZmVycyByZWR1bmFuY3kgaWYgb25lIGlzIG5vdCBhdmFpbGFibGUuCgoKRGV2aWNlIE51bWJlcjoKVGhpcyBudW1iZXIgcmVtYWlucyBzdGF0aWMgJiBJcyBjbG9zZWx5IHRpZWQgdG8gdGhlIGhhcmR3YXJlLCB0aGVyZSBhcmUgNjU1MzYgb2YgdGhlc2UKYWxzbyB0aGV5IGFyZSBtYWRlIHVwIG9mIGEgQ0hQSUQgKCBDaGFubmVsIFBhdGggSUQsIHRoZSBtb3N0IHNpZ25pZmljYW50IDggYml0cyApIAomIGFub3RoZXIgbHNiIDggYml0cy4gVGhlc2UgcmVtYWluIHN0YXRpYyBldmVuIGlmIG1vcmUgZGV2aWNlcyBhcmUgaW5zZXJ0ZWQgb3IgcmVtb3ZlZApmcm9tIHRoZSBoYXJkd2FyZSwgdGhlcmUgaXMgYSAxIHRvIDEgbWFwcGluZyBiZXR3ZWVuIFN1YmNoYW5uZWxzICYgRGV2aWNlIE51bWJlcnMgcHJvdmlkZWQKZGV2aWNlcyBhcmVudCBpbnNlcnRlZCBvciByZW1vdmVkLgoKQ2hhbm5lbCBDb250cm9sIFdvcmRzOgpDQ1dTIGFyZSBsaW5rZWQgbGlzdHMgb2YgaW5zdHJ1Y3Rpb25zIGluaXRpYWxseSBwb2ludGVkIHRvIGJ5IGFuIG9wZXJhdGlvbiByZXF1ZXN0IGJsb2NrIChPUkIpLAp3aGljaCBpcyBpbml0aWFsbHkgZ2l2ZW4gdG8gU3RhcnQgU3ViY2hhbm5lbCAoU1NDSCkgY29tbWFuZCBhbG9uZyB3aXRoIHRoZSBzdWJjaGFubmVsIG51bWJlcgpmb3IgdGhlIElPIHN1YnN5c3RlbSB0byBwcm9jZXNzIHdoaWxlIHRoZSBDUFUgY29udGludWVzIGV4ZWN1dGluZyBub3JtYWwgY29kZS4KVGhlc2UgY29tZSBpbiB0d28gZmxhdm91cnMsIEZvcm1hdCAwICggMjQgYml0IGZvciBiYWNrd2FyZCApCmNvbXBhdGliaWxpdHkgJiBGb3JtYXQgMSAoIDMxIGJpdCApLiBUaGVzZSBhcmUgdHlwaWNhbGx5IHVzZWQgdG8gaXNzdWUgcmVhZCAmIHdyaXRlIAooICYgbWFueSBvdGhlciBpbnN0cnVjdGlvbnMgKSB0aGV5IGNvbnNpc3Qgb2YgYSBsZW5ndGggZmllbGQgJiBhbiBhYnNvbHV0ZSBhZGRyZXNzIGZpZWxkLgpGb3IgZWFjaCBJTyB0eXBpY2FsbHkgZ2V0IDEgb3IgMiBpbnRlcnJ1cHRzIG9uZSBmb3IgY2hhbm5lbCBlbmQgKCBwcmltYXJ5IHN0YXR1cyApIHdoZW4gdGhlCmNoYW5uZWwgaXMgaWRsZSAmIHRoZSBzZWNvbmQgZm9yIGRldmljZSBlbmQgKCBzZWNvbmRhcnkgc3RhdHVzICkgc29tZXRpbWVzIHlvdSBnZXQgYm90aApjb25jdXJyZW50bHksIHlvdSBjaGVjayBob3cgdGhlIElPIHdlbnQgb24gYnkgaXNzdWluZyBhIFRFU1QgU1VCQ0hBTk5FTCBhdCBlYWNoIGludGVycnVwdCwKZnJvbSB3aGljaCB5b3UgcmVjZWl2ZSBhbiBJbnRlcnJ1cHRpb24gcmVzcG9uc2UgYmxvY2sgKElSQikuIElmIHlvdSBnZXQgY2hhbm5lbCAmIGRldmljZSBlbmQgCnN0YXR1cyBpbiB0aGUgSVJCIHdpdGhvdXQgY2hhbm5lbCBjaGVja3MgZXRjLiB5b3VyIElPIHByb2JhYmx5IHdlbnQgb2theS4gSWYgeW91IGRpZG4ndCB5b3UKcHJvYmFibHkgbmVlZCBhIGRvY3RvcnRvIGV4YW1pbmUgdGhlIElSQiAmIGV4dGVuZGVkIHN0YXR1cyB3b3JkIGV0Yy4KSWYgYW4gZXJyb3Igb2NjdXJzIG1vcmUgc29waGlzdG9jYXRlZCBjb250cm9sIHVuaXRzIGhhdmUgYSBmYWNpdGl0eSBrbm93biBhcwpjb25jdXJyZW50IHNlbnNlIHRoaXMgbWVhbnMgdGhhdCBpZiBhbiBlcnJvciBvY2N1cnMgRXh0ZW5kZWQgc2Vuc2UgaW5mb3JtYXRpb24gd2lsbApiZSBwcmVzZW50ZWQgaW4gdGhlIEV4dGVuZGVkIHN0YXR1cyB3b3JkIGluIHRoZSBJUkIgaWYgbm90IHlvdSBoYXZlIHRvIGlzc3VlIGEKc3Vic2VxdWVudCBTRU5TRSBDQ1cgY29tbWFuZCBhZnRlciB0aGUgdGVzdCBzdWJjaGFubmVsLiAKCgpUUEkoIFRlc3QgcGVuZGluZyBpbnRlcnJ1cHQpIGNhbiBhbHNvIGJlIHVzZWQgZm9yIHBvbGxlZCBJTyBidXQgaW4gbXVsdGl0YXNraW5nIG11bHRpcHJvY2Vzc29yCnN5c3RlbXMgaXQgaXNuJ3QgcmVjb21tZW5kZWQgZXhjZXB0IGZvciBjaGVja2luZyBzcGVjaWFsIGNhc2VzICggaS5lLiBub24gbG9vcGluZyBjaGVja3MgZm9yCnBlbmRpbmcgSU8gZXRjLiApLgoKU3RvcmUgU3ViY2hhbm5lbCAmIE1vZGlmeSBTdWJjaGFubmVsIGNhbiBiZSB1c2VkIHRvIGV4YW1pbmUgJiBtb2RpZnkgb3BlcmF0aW5nIGNoYXJhY3RlcmlzdGljcwpvZiBhIHN1YmNoYW5uZWwgKCBlLmcuIGNoYW5uZWwgcGF0aHMgKS4KCk90aGVyIElPIHJlbGF0ZWQgVGVybXM6ClN5c3BsZXg6IFMzOTAncyBDbHVzdGVyaW5nIFRlY2hub2xvZ3kKUURJTzogUzM5MCdzIG5ldyBoaWdoIHNwZWVkIElPIGFyY2hpdGVjdHVyZSB0byBzdXBwb3J0IGRldmljZXMgc3VjaCBhcyBnaWdhYml0IGV0aGVybmV0LAp0aGlzIGFyY2hpdGVjdHVyZSBpcyBhbHNvIGRlc2lnbmVkIHRvIGJlIGZvcndhcmQgY29tcGF0aWJsZSB3aXRoIHVwICYgY29taW5nIDY0IGJpdCBtYWNoaW5lcy4KCgpHZW5lcmFsIENvbmNlcHRzIAoKSW5wdXQgT3V0cHV0IFByb2Nlc3NvcnMgKElPUCdzKSBhcmUgcmVzcG9uc2libGUgZm9yIGNvbW11bmljYXRpbmcgYmV0d2Vlbgp0aGUgbWFpbmZyYW1lIENQVSdzICYgdGhlIGNoYW5uZWwgJiByZWxpZXZlIHRoZSBtYWluZnJhbWUgQ1BVJ3MgZnJvbSB0aGUKYnVyZGVuIG9mIGNvbW11bmljYXRpbmcgd2l0aCBJTyBkZXZpY2VzIGRpcmVjdGx5LCB0aGlzIGFsbG93cyB0aGUgQ1BVJ3MgdG8gCmNvbmNlbnRyYXRlIG9uIGRhdGEgcHJvY2Vzc2luZy4gCgpJT1AncyBjYW4gdXNlIG9uZSBvciBtb3JlIGxpbmtzICgga25vd24gYXMgY2hhbm5lbCBwYXRocyApIHRvIHRhbGsgdG8gZWFjaCAKSU8gZGV2aWNlLiBJdCBmaXJzdCBjaGVja3MgZm9yIHBhdGggYXZhaWxhYmlsaXR5ICYgY2hvb3NlcyBhbiBhdmFpbGFibGUgb25lLAp0aGVuIHN0YXJ0cyAoICYgc29tZXRpbWVzIHRlcm1pbmF0ZXMgSU8gKS4KVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBjaGFubmVsIHBhdGggRVNDT04gJiB0aGUgUGFyYWxlbGwgSU8gaW50ZXJmYWNlLgoKSU8gZGV2aWNlcyBhcmUgYXR0YWNoZWQgdG8gY29udHJvbCB1bml0cywgY29udHJvbCB1bml0cyBwcm92aWRlIHRoZQpsb2dpYyB0byBpbnRlcmZhY2UgdGhlIGNoYW5uZWwgcGF0aHMgJiBjaGFubmVsIHBhdGggSU8gcHJvdG9jb2xzIHRvIAp0aGUgSU8gZGV2aWNlcywgdGhleSBjYW4gYmUgaW50ZWdyYXRlZCB3aXRoIHRoZSBkZXZpY2VzIG9yIGhvdXNlZCBzZXBhcmF0ZWx5CiYgb2Z0ZW4gdGFsayB0byBzZXZlcmFsIHNpbWlsYXIgZGV2aWNlcyAoIHR5cGljYWwgZXhhbXBsZXMgd291bGQgYmUgcmFpZCAKY29udHJvbGxlcnMgb3IgYSBjb250cm9sIHVuaXQgd2hpY2ggY29ubmVjdHMgdG8gMTAwMCAzMjcwIHRlcm1pbmFscyApLgoKCiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCArLS0tLS0rICstLS0tLSsgKy0tLS0tKyArLS0tLS0rICArLS0tLS0tLS0tLSsgICstLS0tLS0tLS0tKyAgIHwKICAgIHwgfCBDUFUgfCB8IENQVSB8IHwgQ1BVIHwgfCBDUFUgfCAgfCAgTWFpbiAgICB8ICB8IEV4cGFuZGVkIHwgICB8CiAgICB8IHwgICAgIHwgfCAgICAgfCB8ICAgICB8IHwgICAgIHwgIHwgIE1lbW9yeSAgfCAgfCAgU3RvcmFnZSB8ICAgfAogICAgfCArLS0tLS0rICstLS0tLSsgKy0tLS0tKyArLS0tLS0rICArLS0tLS0tLS0tLSsgICstLS0tLS0tLS0tKyAgIHwgCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCAgIElPUCAgICAgICAgfCAgICAgIElPUCAgICAgIHwgICAgICAgSU9QICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IAogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAogICAgICAgICB8fCAgQnVzICYgVGFnIENoYW5uZWwgUGF0aCAgICAgICAgICAgICAgICAgICAgICB8fCBFU0NPTgogICAgICAgICB8fCAgPT09PT09PT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICB8fCBDaGFubmVsCiAgICAgICAgIHx8ICB8fCAgICAgICAgICAgICAgICAgIHx8ICAgICAgICAgICAgICAgICAgICAgIHx8IFBhdGgKICAgICstLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tKyAgICAgICAgICstLS0tLS0tLS0tKwogICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICB8CiAgICB8ICAgIENVICAgIHwgICAgICAgICAgICAgICB8ICAgIENVICAgIHwgICAgICAgICB8ICAgIENVICAgIHwKICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0rICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0rICAgICAgICAgKy0tLS0tLS0tLS0rCiAgICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgICAgICB8CistLS0tLS0tLS0tKyArLS0tLS0tLS0tLSsgICAgICArLS0tLS0tLS0tLSsgICArLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0rCnxJL08gRGV2aWNlfCB8SS9PIERldmljZXwgICAgICB8SS9PIERldmljZXwgICB8SS9PIERldmljZXwgfEkvTyBEZXZpY2V8CistLS0tLS0tLS0tKyArLS0tLS0tLS0tLSsgICAgICArLS0tLS0tLS0tLSsgICArLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0rCiAgQ1BVID0gQ2VudHJhbCBQcm9jZXNzaW5nIFVuaXQgICAgCiAgQyA9IENoYW5uZWwgICAgICAgICAgICAgICAgICAgICAgCiAgSU9QID0gSVAgUHJvY2Vzc29yICAgICAgICAgICAgICAgCiAgQ1UgPSBDb250cm9sIFVuaXQKClRoZSAzOTAgSU8gc3lzdGVtcyBjb21lIGluIDIgZmxhdm91cnMgdGhlIGN1cnJlbnQgMzkwIG1hY2hpbmVzIHN1cHBvcnQgYm90aAoKVGhlIE9sZGVyIDM2MCAmIDM3MCBJbnRlcmZhY2Usc29tZXRpbWVzIGNhbGxlZCB0aGUgcGFyYWxlbGwgSS9PIGludGVyZmFjZSwKc29tZXRpbWVzIGNhbGxlZCBCdXMtYW5kIFRhZyAmIHNvbWV0aW1lcyBPcmlnaW5hbCBFcXVpcG1lbnQgTWFudWZhY3R1cmVycwpJbnRlcmZhY2UgKE9FTUkpLgoKVGhpcyBieXRlIHdpZGUgcGFyYWxlbGwgY2hhbm5lbCBwYXRoL2J1cyBoYXMgcGFyaXR5ICYgZGF0YSBvbiB0aGUgIkJ1cyIgY2FibGUgCiYgY29udHJvbCBsaW5lcyBvbiB0aGUgIlRhZyIgY2FibGUuIFRoZXNlIGNhbiBvcGVyYXRlIGluIGJ5dGUgbXVsdGlwbGV4IG1vZGUgZm9yCnNoYXJpbmcgYmV0d2VlbiBzZXZlcmFsIHNsb3cgZGV2aWNlcyBvciBidXJzdCBtb2RlICYgbW9ub3BvbGl6ZSB0aGUgY2hhbm5lbCBmb3IgdGhlCndob2xlIGJ1cnN0LiBVcHRvIDI1NiBkZXZpY2VzIGNhbiBiZSBhZGRyZXNzZWQgIG9uIG9uZSBvZiB0aGVzZSBjYWJsZXMuIFRoZXNlIGNhYmxlcyBhcmUKYWJvdXQgb25lIGluY2ggaW4gZGlhbWV0ZXIuIFRoZSBtYXhpbXVtIHVuZXh0ZW5kZWQgbGVuZ3RoIHN1cHBvcnRlZCBieSB0aGVzZSBjYWJsZXMgaXMKMTI1IE1ldGVycyBidXQgdGhpcyBjYW4gYmUgZXh0ZW5kZWQgdXAgdG8gMmttIHdpdGggYSBmaWJyZSBvcHRpYyBjaGFubmVsIGV4dGVuZGVkIApzdWNoIGFzIGEgMzA0NC4gVGhlIG1heGltdW0gYnVyc3Qgc3BlZWQgc3VwcG9ydGVkIGlzIDQuNSBtZWdhYnl0ZXMgcGVyIHNlY29uZCBob3dldmVyCnNvbWUgcmVhbGx5IG9sZCBwcm9jZXNzb3JzIHN1cHBvcnQgb25seSB0cmFuc2ZlciByYXRlcyBvZiAzLjAsIDIuMCAmIDEuMCBNQi9zZWMuCk9uZSBvZiB0aGVzZSBwYXRocyBjYW4gYmUgZGFpc3kgY2hhaW5lZCB0byB1cCB0byA4IGNvbnRyb2wgdW5pdHMuCgoKRVNDT04gaWYgZmlicmUgb3B0aWMgaXQgaXMgYWxzbyBjYWxsZWQgRklDT04gCldhcyBpbnRyb2R1Y2VkIGJ5IElCTSBpbiAxOTkwLiBIYXMgMiBmaWJyZSBvcHRpYyBjYWJsZXMgJiB1c2VzIGVpdGhlciBsZWRzIG9yIGxhc2Vycwpmb3IgY29tbXVuaWNhdGlvbiBhdCBhIHNpZ25hbGluZyByYXRlIG9mIHVwdG8gMjAwIG1lZ2FiaXRzL3NlYy4gQXMgMTBiaXRzIGFyZSB0cmFuc2ZlcnJlZApmb3IgZXZlcnkgOCBiaXRzIGluZm8gdGhpcyBkcm9wcyB0byAxNjAgbWVnYWJpdHMvc2VjICYgdG8gMTguNiBNZWdhYnl0ZXMvc2VjIG9uY2UKY29udHJvbCBpbmZvICYgQ1JDIGFyZSBhZGRlZC4gRVNDT04gb25seSBvcGVyYXRlcyBpbiBidXJzdCBtb2RlLgogCkVTQ09OcyB0eXBpY2FsIG1heCBjYWJsZSBsZW5ndGggaXMgM2ttIGZvciB0aGUgbGVkIHZlcnNpb24gJiAyMGttIGZvciB0aGUgbGFzZXIgdmVyc2lvbgprbm93biBhcyBYREYgKCBleHRlbmRlZCBkaXN0YW5jZSBmYWNpbGl0eSApLiBUaGlzIGNhbiBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5IHVzaW5nIGFuCkVTQ09OIGRpcmVjdG9yIHdoaWNoIHRyaXBsZXMgdGhlIGFib3ZlIG1lbnRpb25lZCByYW5nZXMuIFVubGlrZSBCdXMgJiBUYWcgYXMgRVNDT04gaXMKc2VyaWFsIGl0IHVzZXMgYSBwYWNrZXQgc3dpdGNoaW5nIGFyY2hpdGVjdHVyZSB0aGUgc3RhbmRhcmQgQnVzICYgVGFnIGNvbnRyb2wgcHJvdG9jb2wKaXMgaG93ZXZlciBwcmVzZW50IHdpdGhpbiB0aGUgcGFja2V0cy4gVXB0byAyNTYgZGV2aWNlcyBjYW4gYmUgYXR0YWNoZWQgdG8gZWFjaCBjb250cm9sIAp1bml0IHRoYXQgdXNlcyBvbmUgb2YgdGhlc2UgaW50ZXJmYWNlcy4KCkNvbW1vbiAzOTAgRGV2aWNlcyBpbmNsdWRlOgpOZXR3b3JrIGFkYXB0ZXJzIHR5cGljYWxseSBPU0EyLDMxNzIncywyMTE2J3MgJiBPU0EtRSBnaWdhYml0IGV0aGVybmV0IGFkYXB0ZXJzLApDb25zb2xlcyAzMjcwICYgMzIxNSAoIGEgdGVsZXR5cGUgZW11bGF0ZWQgdW5kZXIgbGludXggZm9yIGEgbGluZSBtb2RlIGNvbnNvbGUgKS4KREFTRCdzIGRpcmVjdCBhY2Nlc3Mgc3RvcmFnZSBkZXZpY2VzICggb3RoZXJ3aXNlIGtub3duIGFzIGhhcmQgZGlza3MgKS4KVGFwZSBEcml2ZXMuCkNUQyAoIENoYW5uZWwgdG8gQ2hhbm5lbCBBZGFwdGVycyApLApFU0NPTiBvciBQYXJhbGVsbCBDYWJsZXMgdXNlZCBhcyBhIHZlcnkgaGlnaCBzcGVlZCBzZXJpYWwgbGluawpiZXR3ZWVuIDIgbWFjaGluZXMuIFdlIHVzZSAyIGNhYmxlcyB1bmRlciBsaW51eCB0byBkbyBhIGJpLWRpcmVjdGlvbmFsIHNlcmlhbCBsaW5rLgoKCkRlYnVnZ2luZyBJTyBvbiBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIHVuZGVyIFZNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpOb3cgd2UgYXJlIHJlYWR5IHRvIGdvIG9uIHdpdGggSU8gdHJhY2luZyBjb21tYW5kcyB1bmRlciBWTQoKQSBmZXcgc2VsZiBleHBsYW5hdG9yeSBxdWVyaWVzOgpRIE9TQQpRIENUQwpRIERJU0sgKCBUaGlzIGNvbW1hbmQgaXMgQ01TIHNwZWNpZmljICkKUSBEQVNECgoKCgoKClEgT1NBIG9uIG15IG1hY2hpbmUgcmV0dXJucwpPU0EgIDdDMDggT04gT1NBICAgN0MwOCBTVUJDSEFOTkVMID0gMDAwMApPU0EgIDdDMDkgT04gT1NBICAgN0MwOSBTVUJDSEFOTkVMID0gMDAwMQpPU0EgIDdDMTQgT04gT1NBICAgN0MxNCBTVUJDSEFOTkVMID0gMDAwMgpPU0EgIDdDMTUgT04gT1NBICAgN0MxNSBTVUJDSEFOTkVMID0gMDAwMwoKSWYgeW91IGhhdmUgYSBndWVzdCB3aXRoIGNlcnRhaW4gcHJpdmlsaWdlcyB5b3UgbWF5IGJlIGFibGUgdG8gc2VlIGRldmljZXMKd2hpY2ggZG9uJ3QgYmVsb25nIHRvIHlvdSB0byBhdm9pZCB0aGlzIGRvIGFkZCB0aGUgb3B0aW9uIFYuCmUuZy4KUSBWIE9TQQoKTm93IHVzaW5nIHRoZSBkZXZpY2UgbnVtYmVycyByZXR1cm5lZCBieSB0aGlzIGNvbW1hbmQgd2Ugd2lsbApUcmFjZSB0aGUgaW8gc3RhcnRpbmcgdXAgb24gdGhlIGZpcnN0IGRldmljZSA3YzA4ICYgN2MwOQpJbiBvdXIgc2ltcGxlc3QgY2FzZSB3ZSBjYW4gdHJhY2UgdGhlIApzdGFydCBzdWJjaGFubmVscwpsaWtlIFRSIFNTQ0ggN0MwOC03QzA5Cm9yIHRoZSBoYWx0IHN1YmNoYW5uZWxzCm9yIFRSIEhTQ0ggN0MwOC03QzA5Ck1TQ0gncyAsU1RTQ0gncyBJIHRoaW5rIHlvdSBjYW4gZ3Vlc3MgdGhlIHJlc3QKCkluZ28ncyBmYXZvdXJpdGUgdHJpY2sgaXMgdHJhY2luZyBhbGwgdGhlIElPJ3MgJiBDQ1dTICYgc3Bvb2xpbmcgdGhlbSBpbnRvIHRoZSByZWFkZXIgb2YgYW5vdGhlcgpWTSBndWVzdCBzbyBoZSBjYW4gZnRwIHRoZSBsb2dmaWxlIGJhY2sgdG8gaGlzIG93biBtYWNoaW5lLkknbGwgZG8gYSBzbWFsbCBiaXQgb2YgdGhpcyAmIGdpdmUgeW91CiBhIGxvb2sgYXQgdGhlIG91dHB1dC4KCjEpIFNwb29sIHN0ZG91dCB0byBWTSByZWFkZXIKU1AgUFJUIFRPIChhbm90aGVyIHZtIGd1ZXN0ICkgb3IgKiBmb3IgdGhlIGxvY2FsIHZtIGd1ZXN0CjIpIEZpbGwgdGhlIHJlYWRlciB3aXRoIHRoZSB0cmFjZQpUUiBJTyA3YzA4LTdjMDkgSU5TVCBJTlQgQ0NXIFBSVCBSVU4KMykgU3RhcnQgdXAgbGludXggCmkgMDBjICAKNCkgRmluaXNoIHRoZSB0cmFjZQpUUiBFTkQKNSkgY2xvc2UgdGhlIHJlYWRlcgpDIFBSVAo2KSBsaXN0IHJlYWRlciBjb250ZW50cwpSRFJMSVNUCjcpIGNvcHkgaXQgdG8gbGludXg0J3MgbWluaWRpc2sgClJFQ0VJVkUgLyBMT0cgVFhUIEExICggcmVwbGFjZQo4KQpmaWxlbCAmIHByZXNzIEYxMSB0byBsb29rIGF0IGl0CllvdSBzaG91bGQgc2VlIHNvbWV0aW5nIGxpa2UuCgowMDAyMDk0MicgU1NDSCAgQjIzMzQwMDAgICAgMDA0ODgxM0MgICAgQ0MgMCAgICBTQ0ggMDAwMCAgICBERVYgN0MwOAogICAgICAgICAgQ1BBIDAwMEZGREYwICAgUEFSTSAwMEUyQzlDNCAgICBLRVkgMCAgRlBJIEMwICBMUE0gODAKICAgICAgICAgIENDVyAgICAwMDBGRkRGMCAgRTQyMDAxMDAgMDA0ODdGRTggICAwMDAwICBFNDI0MDEwMCAuLi4uLi4uLgogICAgICAgICAgSURBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDNEOEFGRTgKICAgICAgICAgIElEQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBGQjc2MDAwCjAwMDIwQjBBJyAgIEkvTyBERVYgN0MwOCAtPiAwMDAxOTdCQycgICBTQ0ggMDAwMCAgIFBBUk0gMDBFMkM5QzQKMDAwMjE2MjgnIFRTQ0ggIEIyMzU0MDAwID4+IDAwNDg4MTY0ICAgIENDIDAgICAgU0NIIDAwMDAgICAgREVWIDdDMDgKICAgICAgICAgIENDV0EgMDAwRkZERjggICBERVYgU1RTIDBDICBTQ0ggU1RTIDAwICBDTlQgMDBFQwogICAgICAgICAgIEtFWSAwICAgRlBJIEMwICBDQyAwICAgQ1RMUyA0MDA3CjAwMDIyMjM4JyBTVFNDSCBCMjM0NDAwMCA+PiAwMDQ4ODEwOCAgICBDQyAwICAgIFNDSCAwMDAwICAgIERFViA3QzA4CgpJZiB5b3UgZG9uJ3QgbGlrZSBtZXNzaW5nIHVwIHlvdXIgcmVhZGVkICggYmVjYXVzZSB5b3UgcG9zc2libHkgYm9vdGVkIGZyb20gaXQgKQp5b3UgY2FuIGFsdGVybmF0aXZlbHkgc3Bvb2wgaXQgdG8gYW5vdGhlciByZWFkZXJzIGd1ZXN0LgoKCk90aGVyIGNvbW1vbiBWTSBkZXZpY2UgcmVsYXRlZCBjb21tYW5kcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGhlc2UgY29tbWFuZHMgYXJlIGxpc3RlZCBvbmx5IGJlY2F1c2UgdGhleSBoYXZlCmJlZW4gb2YgdXNlIHRvIG1lIGluIHRoZSBwYXN0ICYgbWF5IGJlIG9mIHVzZSB0bwp5b3UgdG9vLiBGb3IgbW9yZSBjb21wbGV0ZSBpbmZvIG9uIGVhY2ggb2YgdGhlIGNvbW1hbmRzCnVzZSB0eXBlIEhFTFAgPGNvbW1hbmQ+IGZyb20gQ01TLgpkZXRhY2hpbmcgZGV2aWNlcwpERVQgPGRldm5vIHJhbmdlPgpBVFQgPGRldm5vIHJhbmdlPiA8Z3Vlc3Q+IAphdHRhY2ggYSBkZXZpY2UgdG8gZ3Vlc3QgKiBmb3IgeW91ciBvd24gZ3Vlc3QKUkVBRFkgPGRldm5vPiBjYXVzZSBWTSB0byBpc3N1ZSBhIGZha2UgaW50ZXJydXB0LgoKVGhlIFZBUlkgY29tbWFuZCBpcyBub3JtYWxseSBvbmx5IGF2YWlsYWJsZSB0byBWTSBhZG1pbmlzdHJhdG9ycy4KVkFSWSBPTiBQQVRIIDxwYXRoPiBUTyA8ZGV2bm8gcmFuZ2U+ClZBUlkgT0ZGIFBBVEggPFBBVEg+IEZST00gPGRldm5vIHJhbmdlPgpUaGlzIGlzIHVzZWQgdG8gc3dpdGNoIG9uIG9yIG9mZiBjaGFubmVsIHBhdGhzIHRvIGRldmljZXMuCgpRIENIUElEIDxjaGFubmVsIHBhdGggSUQ+ClRoaXMgZGlzcGxheXMgc3RhdGUgb2YgZGV2aWNlcyB1c2luZyB0aGlzIGNoYW5uZWwgcGF0aApEIFNDSElCIDxzdWJjaGFubmVsPgpUaGlzIGRpc3BsYXlzIHRoZSBzdWJjaGFubmVsIGluZm9ybWF0aW9uIFNDSElCIGJsb2NrIGZvciB0aGUgZGV2aWNlLgp0aGlzIEkgYmVsaWV2ZSBpcyBhbHNvIG9ubHkgYXZhaWxhYmxlIHRvIGFkbWluaXN0cmF0b3JzLgpERUZJTkUgQ1RDIDxkZXZubz4KZGVmaW5lcyBhIHZpcnR1YWwgQ1RDIGNoYW5uZWwgdG8gY2hhbm5lbCBjb25uZWN0aW9uCjIgbmVlZCB0byBiZSBkZWZpbmVkIG9uIGVhY2ggZ3Vlc3QgZm9yIHRoZSBDVEMgZHJpdmVyIHRvIHVzZS4KQ09VUExFICBkZXZubyB1c2VyaWQgcmVtb3RlIGRldm5vCkpvaW5zIGEgbG9jYWwgdmlydHVhbCBkZXZpY2UgdG8gYSByZW1vdGUgdmlydHVhbCBkZXZpY2UKKCBjb21tb25seSB1c2VkIGZvciB0aGUgQ1RDIGRyaXZlciApLgoKQnVpbGRpbmcgYSBWTSByYW1kaXNrIHVuZGVyIENNUyB3aGljaCBsaW51eCBjYW4gdXNlCmRlZiB2ZmItPGJsb2Nrc2l6ZT4gPHN1YmNoYW5uZWw+IDxudW1iZXIgYmxvY2tzPgpibG9ja3NpemUgaXMgY29tbW9ubHkgNDA5NiBmb3IgbGludXguCkZvcm1hdHRpbmcgaXQKZm9ybWF0IDxzdWJjaGFubmVsPiA8ZHJpdmVyIGxldHRlciBlLmcuIHg+IChibGtzaXplIDxibG9ja3NpemU+CgpTaGFyaW5nIGEgZGlzayBiZXR3ZWVuIG11bHRpcGxlIGd1ZXN0cwpMSU5LIHVzZXJpZCBkZXZubzEgZGV2bm8yIG1vZGUgcGFzc3dvcmQKCgoKR0RCIG9uIFMzOTAKPT09PT09PT09PT0KTi5CLiBpZiBjb21waWxpbmcgZm9yIGRlYnVnZ2luZyBnZGIgd29ya3MgYmV0dGVyIHdpdGhvdXQgb3B0aW1pc2F0aW9uIAooIHNlZSBDb21waWxpbmcgcHJvZ3JhbXMgZm9yIGRlYnVnZ2luZyApCgppbnZvY2F0aW9uCi0tLS0tLS0tLS0KZ2RiIDx2aWN0aW0gcHJvZ3JhbT4gPG9wdGlvbmFsIGNvcmVmaWxlPgoKT25saW5lIGhlbHAKLS0tLS0tLS0tLS0KaGVscDogZ2l2ZXMgaGVscCBvbiBjb21tYW5kcwplLmcuCmhlbHAKaGVscCBkaXNwbGF5Ck5vdGUgZ2RiJ3Mgb25saW5lIGhlbHAgaXMgdmVyeSBnb29kIHVzZSBpdC4KCgpBc3NlbWJseQotLS0tLS0tLQppbmZvIHJlZ2lzdGVyczogZGlzcGxheXMgcmVnaXN0ZXJzIG90aGVyIHRoYW4gZmxvYXRpbmcgcG9pbnQuCmluZm8gYWxsLXJlZ2lzdGVyczogZGlzcGxheXMgZmxvYXRpbmcgcG9pbnRzIGFzIHdlbGwuCmRpc2Fzc2VtYmxlOiBkaXNzYXNzZW1ibGVzCmUuZy4KZGlzYXNzZW1ibGUgd2l0aG91dCBwYXJhbWV0ZXJzIHdpbGwgZGlzYXNzZW1ibGUgdGhlIGN1cnJlbnQgZnVuY3Rpb24KZGlzYXNzZW1ibGUgJHBjICRwYysxMCAKClZpZXdpbmcgJiBtb2RpZnlpbmcgdmFyaWFibGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnByaW50IG9yIHA6IGRpc3BsYXlzIHZhcmlhYmxlIG9yIHJlZ2lzdGVyCmUuZy4gcC94ICRzcCB3aWxsIGRpc3BsYXkgdGhlIHN0YWNrIHBvaW50ZXIKCmRpc3BsYXk6IHByaW50cyB2YXJpYWJsZSBvciByZWdpc3RlciBlYWNoIHRpbWUgcHJvZ3JhbSBzdG9wcwplLmcuCmRpc3BsYXkveCAkcGMgd2lsbCBkaXNwbGF5IHRoZSBwcm9ncmFtIGNvdW50ZXIKZGlzcGxheSBhcmdjCgp1bmRpc3BsYXkgOiB1bmRvJ3MgZGlzcGxheSdzCgppbmZvIGJyZWFrcG9pbnRzOiBzaG93cyBhbGwgY3VycmVudCBicmVha3BvaW50cwoKaW5mbyBzdGFjazogc2hvd3Mgc3RhY2sgYmFjayB0cmFjZSAoIGlmIHRoaXMgZG9zZW50IHdvcmsgdG9vIHdlbGwsIEknbGwgc2hvdyB5b3UgdGhlCnN0YWNrdHJhY2UgYnkgaGFuZCBiZWxvdyApLgoKaW5mbyBsb2NhbHM6IGRpc3BsYXlzIGxvY2FsIHZhcmlhYmxlcy4KCmluZm8gYXJnczogZGlzcGxheSBjdXJyZW50IHByb2NlZHVyZSBhcmd1bWVudHMuCgpzZXQgYXJnczogd2lsbCBzZXQgYXJnYyAmIGFyZ3YgZWFjaCB0aW1lIHRoZSB2aWN0aW0gcHJvZ3JhbSBpcyBpbnZva2VkLgoKc2V0IDx2YXJpYWJsZT49dmFsdWUKc2V0IGFyZ2M9MTAwCnNldCAkcGM9MAoKCgpNb2RpZnlpbmcgZXhlY3V0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0Kc3RlcDogc3RlcHMgbiBsaW5lcyBvZiBzb3VyY2Vjb2RlCnN0ZXAgc3RlcHMgMSBsaW5lLgpzdGVwIDEwMCBzdGVwcyAxMDAgbGluZXMgb2YgY29kZS4KCm5leHQ6IGxpa2Ugc3RlcCBleGNlcHQgdGhpcyB3aWxsIG5vdCBzdGVwIGludG8gc3Vicm91dGluZXMKCnN0ZXBpOiBzdGVwcyBhIHNpbmdsZSBtYWNoaW5lIGNvZGUgaW5zdHJ1Y3Rpb24uCmUuZy4gc3RlcGkgMTAwCgpuZXh0aTogc3RlcHMgYSBzaW5nbGUgbWFjaGluZSBjb2RlIGluc3RydWN0aW9uIGJ1dCB3aWxsIG5vdCBzdGVwIGludG8gc3Vicm91dGluZXMuCgpmaW5pc2g6IHdpbGwgcnVuIHVudGlsIGV4aXQgb2YgdGhlIGN1cnJlbnQgcm91dGluZQoKcnVuOiAocmUpc3RhcnRzIGEgcHJvZ3JhbQoKY29udDogY29udGludWVzIGEgcHJvZ3JhbQoKcXVpdDogZXhpdHMgZ2RiLgoKCmJyZWFrcG9pbnRzCi0tLS0tLS0tLS0tLQoKYnJlYWsKc2V0cyBhIGJyZWFrcG9pbnQKZS5nLgoKYnJlYWsgbWFpbgoKYnJlYWsgKiRwYwoKYnJlYWsgKjB4NDAwNjE4CgpoZXJlcyBhIHJlYWxseSB1c2VmdWwgb25lIGZvciBsYXJnZSBwcm9ncmFtcwpyYnIKU2V0IGEgYnJlYWtwb2ludCBmb3IgYWxsIGZ1bmN0aW9ucyBtYXRjaGluZyBSRUdFWFAKZS5nLgpyYnIgMzkwCndpbGwgc2V0IGEgYnJlYWtwb2ludCB3aXRoIGFsbCBmdW5jdGlvbnMgd2l0aCAzOTAgaW4gdGhlaXIgbmFtZS4KCmluZm8gYnJlYWtwb2ludHMKbGlzdHMgYWxsIGJyZWFrcG9pbnRzCgpkZWxldGU6IGRlbGV0ZSBicmVha3BvaW50IGJ5IG51bWJlciBvciBkZWxldGUgdGhlbSBhbGwKZS5nLgpkZWxldGUgMSB3aWxsIGRlbGV0ZSB0aGUgZmlyc3QgYnJlYWtwb2ludApkZWxldGUgd2lsbCBkZWxldGUgdGhlbSBhbGwKCndhdGNoOiBUaGlzIHdpbGwgc2V0IGEgd2F0Y2hwb2ludCAoIHVzdWFsbHkgaGFyZHdhcmUgYXNzaXN0ZWQgKSwKVGhpcyB3aWxsIHdhdGNoIGEgdmFyaWFibGUgdGlsbCBpdCBjaGFuZ2VzCmUuZy4Kd2F0Y2ggY250LCB3aWxsIHdhdGNoIHRoZSB2YXJpYWJsZSBjbnQgdGlsbCBpdCBjaGFuZ2VzLgpBcyBhbiBhc2lkZSB1bmZvcnR1bmF0ZWx5IGdkYidzLCBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQgd2F0Y2hwb2ludCBjb2RlCmlzIGluY29uc2lzdGVudCAmIG5vdCB2ZXJ5IGdvb2QsIHdhdGNocG9pbnRzIHVzdWFsbHkgd29yayBidXQgbm90IGFsd2F5cy4KCmluZm8gd2F0Y2hwb2ludHM6IERpc3BsYXkgY3VycmVudGx5IGFjdGl2ZSB3YXRjaHBvaW50cwoKY29uZGl0aW9uOiAoIGFub3RoZXIgdXNlZnVsIG9uZSApClNwZWNpZnkgYnJlYWtwb2ludCBudW1iZXIgTiB0byBicmVhayBvbmx5IGlmIENPTkQgaXMgdHJ1ZS4KVXNhZ2UgaXMgYGNvbmRpdGlvbiBOIENPTkQnLCB3aGVyZSBOIGlzIGFuIGludGVnZXIgYW5kIENPTkQgaXMgYW4KZXhwcmVzc2lvbiB0byBiZSBldmFsdWF0ZWQgd2hlbmV2ZXIgYnJlYWtwb2ludCBOIGlzIHJlYWNoZWQuCgoKClVzZXIgZGVmaW5lZCBmdW5jdGlvbnMvbWFjcm9zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRlZmluZTogKCBOb3RlIHRoaXMgaXMgdmVyeSB2ZXJ5IHVzZWZ1bCxzaW1wbGUgJiBwb3dlcmZ1bCApCnVzYWdlIGRlZmluZSA8bmFtZT4gPGxpc3Qgb2YgY29tbWFuZHM+IGVuZAoKZXhhbXBsZXMgd2hpY2ggeW91IHNob3VsZCBjb25zaWRlciBwdXR0aW5nIGludG8gLmdkYmluaXQgaW4geW91ciBob21lIGRpcmVjdG9yeQpkZWZpbmUgZApzdGVwaQpkaXNhc3NlbWJsZSAkcGMgJHBjKzEwCmVuZAoKZGVmaW5lIGUKbmV4dGkKZGlzYXNzZW1ibGUgJHBjICRwYysxMAplbmQKCgpPdGhlciBoYXJkIHRvIGNsYXNzaWZ5IHN0dWZmCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc2lnbmFsIG46CnNlbmRzIHRoZSB2aWN0aW0gcHJvZ3JhbSBhIHNpZ25hbC4KZS5nLiBzaWduYWwgMyB3aWxsIHNlbmQgYSBTSUdRVUlULgoKaW5mbyBzaWduYWxzOgp3aGF0IGdkYiBkb2VzIHdoZW4gdGhlIHZpY3RpbSByZWNlaXZlcyBjZXJ0YWluIHNpZ25hbHMuCgpsaXN0OgplLmcuCmxpc3QgbGlzdHMgY3VycmVudCBmdW5jdGlvbiBzb3VyY2UKbGlzdCAxLDEwIGxpc3QgZmlyc3QgMTAgbGluZXMgb2YgY3VycmVudCBmaWxlLgpsaXN0IHRlc3QuYzoxLDEwCgoKZGlyZWN0b3J5OgpBZGRzIGRpcmVjdG9yaWVzIHRvIGJlIHNlYXJjaGVkIGZvciBzb3VyY2UgaWYgZ2RiIGNhbm5vdCBmaW5kIHRoZSBzb3VyY2UuCihub3RlIGl0IGlzIGEgYml0IHNlbnNpdGl0aXZlIGFib3V0IHNsYXNoZXMpIAplLmcuIFRvIGFkZCB0aGUgcm9vdCBvZiB0aGUgZmlsZXN5c3RlbSB0byB0aGUgc2VhcmNocGF0aCBkbwpkaXJlY3RvcnkgLy8KCgpjYWxsIDxmdW5jdGlvbj4KVGhpcyBjYWxscyBhIGZ1bmN0aW9uIGluIHRoZSB2aWN0aW0gcHJvZ3JhbSwgdGhpcyBpcyBwcmV0dHkgcG93ZXJmdWwKZS5nLgooZ2RiKSBjYWxsIHByaW50ZigiaGVsbG8gd29ybGQiKQpvdXRwdXRzOgokMSA9IDExIAoKWW91IG1pZ2h0IG5vdyBiZSB0aGlua2luZyB0aGF0IHRoZSBsaW5lIGFib3ZlIGRpZG4ndCB3b3JrLCBzb21ldGhpbmcgZXh0cmEgaGFkIHRvIGJlIGRvbmUuCihnZGIpIGNhbGwgZmZsdXNoKHN0ZG91dCkKaGVsbG8gd29ybGQkMiA9IDAKQXMgYW4gYXNpZGUgdGhlIGRlYnVnZ2VyIGFsc28gY2FsbHMgbWFsbG9jICYgZnJlZSB1bmRlciB0aGUgaG9vZCAKdG8gbWFrZSBzcGFjZSBmb3IgdGhlICJoZWxsbyB3b3JsZCIgc3RyaW5nLgoKCgpoaW50cwotLS0tLQoxKSBjb21tYW5kIGNvbXBsZXRpb24gd29ya3MganVzdCBsaWtlIGJhc2ggCiggaWYgeW91IGFyZSBhIGJhZCB0eXBpc3QgbGlrZSBtZSB0aGlzIHJlYWxseSBoZWxwcyApCmUuZy4gaGl0IGJyIDxUQUI+ICYgY3Vyc29yIHVwICYgZG93biA6LSkuCgoyKSBpZiB5b3UgaGF2ZSBhIGRlYnVnZ2luZyBwcm9ibGVtIHRoYXQgdGFrZXMgYSBmZXcgc3RlcHMgdG8gcmVjcmVhdGUKcHV0IHRoZSBzdGVwcyBpbnRvIGEgZmlsZSBjYWxsZWQgLmdkYmluaXQgaW4geW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CmlmIHlvdSBoYXZlIGRlZmluZWQgYSBmZXcgZXh0cmEgdXNlZnVsIHVzZXIgZGVmaW5lZCBjb21tYW5kcyBwdXQgdGhlc2UgaW4gCnlvdXIgaG9tZSBkaXJlY3RvcnkgJiB0aGV5IHdpbGwgYmUgcmVhZCBlYWNoIHRpbWUgZ2RiIGlzIGxhdW5jaGVkLgoKQSB0eXBpY2FsIC5nZGJpbml0IGZpbGUgbWlnaHQgYmUuCmJyZWFrIG1haW4KcnVuCmJyZWFrIHJ1bnRpbWVfZXhjZXB0aW9uCmNvbnQgCgoKc3RhY2sgY2hhaW5pbmcgaW4gZ2RiIGJ5IGhhbmQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGhpcyBpcyBkb25lIHVzaW5nIGEgdGhlIHNhbWUgdHJpY2sgZGVzY3JpYmVkIGZvciBWTSAKcC94ICgqKCRzcCs1NikpJjB4N2ZmZmZmZmYgZ2V0IHRoZSBmaXJzdCBiYWNrY2hhaW4uCgpGb3Igei9BcmNoaXRlY3R1cmUKUmVwbGFjZSA1NiB3aXRoIDExMiAmIGlnbm9yZSB0aGUgJjB4N2ZmZmZmZmYKaW4gdGhlIG1hY3JvcyBiZWxvdyAmIGRvIG5hc3R5IGNhc3RzIHRvIGxvbmdzIGxpa2UgdGhlIGZvbGxvd2luZwphcyBnZGIgdW5mb3J0dW5hdGVseSBkZWFscyB3aXRoIHByaW50ZWQgYXJndW1lbnRzIGFzIGludHMgd2hpY2gKbWVzc2VzIHVwIGV2ZXJ5dGhpbmcuCmkuZS4gaGVyZSBpcyBhIDNyZCBiYWNrY2hhaW4gZGVyZWZlcmVuY2UKcC94ICoobG9uZyAqKSgqKioobG9uZyAqKiopJHNwKzExMikKCgp0aGlzIG91dHB1dHMgCiQ1ID0gMHg1MjhmMTggCm9uIG15IG1hY2hpbmUuCk5vdyB5b3UgY2FuIHVzZSAKaW5mbyBzeW1ib2wgKCooJHNwKzU2KSkmMHg3ZmZmZmZmZiAKeW91IG1pZ2h0IHNlZSBzb21ldGhpbmcgbGlrZS4KcmxfZ2V0YyArIDM2IGluIHNlY3Rpb24gLnRleHQgIHRlbGxpbmcgeW91IHdoYXQgaXMgbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTI4ZjE4Ck5vdyBkby4KcC94ICgqKCokc3ArNTYpKSYweDdmZmZmZmZmIApUaGlzIG91dHB1dHMKJDYgPSAweDUyOGVkMApOb3cgZG8uCmluZm8gc3ltYm9sICgqKCokc3ArNTYpKSYweDdmZmZmZmZmCnJsX3JlYWRfa2V5ICsgMTgwIGluIHNlY3Rpb24gLnRleHQKbm93IGRvCnAveCAoKigqKiRzcCs1NikpJjB4N2ZmZmZmZmYKJiBzbyBvbi4KCkRpc2Fzc2VtYmxpbmcgaW5zdHJ1Y3Rpb25zIHdpdGhvdXQgZGVidWcgaW5mbwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZ2RiIHR5cGljYWxseSBjb21wbGFpbnMgaWYgdGhlcmUgaXMgYSBsYWNrIG9mIGRlYnVnZ2luZwpzeW1ib2xzIGluIHRoZSBkaXNhc3NlbWJsZSBjb21tYW5kIHdpdGggCiJObyBmdW5jdGlvbiBjb250YWlucyBzcGVjaWZpZWQgYWRkcmVzcy4iIFRvIGdldCBhcm91bmQKdGhpcyBkbyAKeC88bnVtYmVyIGxpbmVzIHRvIGRpc2Fzc2VtYmxlPnhpIDxhZGRyZXNzPgplLmcuCngvMjB4aSAweDQwMDczMAoKCgpOb3RlOiBSZW1lbWJlciBnZGIgaGFzIGhpc3RvcnkganVzdCBsaWtlIGJhc2ggeW91IGRvbid0IG5lZWQgdG8gcmV0eXBlIHRoZQp3aG9sZSBsaW5lIGp1c3QgdXNlIHRoZSB1cCAmIGRvd24gYXJyb3dzLgoKCgpGb3IgbW9yZSBpbmZvCi0tLS0tLS0tLS0tLS0KRnJvbSB5b3VyIGxpbnV4Ym94IGRvIAptYW4gZ2RiIG9yIGluZm8gZ2RiLgoKY29yZSBkdW1wcwotLS0tLS0tLS0tCldoYXQgYSBjb3JlIGR1bXAgPywKQSBjb3JlIGR1bXAgaXMgYSBmaWxlIGdlbmVyYXRlZCBieSB0aGUga2VybmVsICggaWYgYWxsb3dlZCApIHdoaWNoIGNvbnRhaW5zIHRoZSByZWdpc3RlcnMsCiYgYWxsIGFjdGl2ZSBwYWdlcyBvZiB0aGUgcHJvZ3JhbSB3aGljaCBoYXMgY3Jhc2hlZC4KRnJvbSB0aGlzIGZpbGUgZ2RiIHdpbGwgYWxsb3cgeW91IHRvIGxvb2sgYXQgdGhlIHJlZ2lzdGVycyAmIHN0YWNrIHRyYWNlICYgbWVtb3J5IG9mIHRoZQpwcm9ncmFtIGFzIGlmIGl0IGp1c3QgY3Jhc2hlZCBvbiB5b3VyIHN5c3RlbSwgaXQgaXMgdXN1YWxseSBjYWxsZWQgY29yZSAmIGNyZWF0ZWQgaW4gdGhlCmN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuClRoaXMgaXMgdmVyeSB1c2VmdWwgaW4gdGhhdCBhIGN1c3RvbWVyIGNhbiBtYWlsIGEgY29yZSBkdW1wIHRvIGEgdGVjaG5pY2FsIHN1cHBvcnQgZGVwYXJ0bWVudAomIHRoZSB0ZWNobmljYWwgc3VwcG9ydCBkZXBhcnRtZW50IGNhbiByZWNvbnN0cnVjdCB3aGF0IGhhcHBlbmVkLgpQcm92aWRlZCB0aGUgaGF2ZSBhbiBpZGVudGljYWwgY29weSBvZiB0aGlzIHByb2dyYW0gd2l0aCBkZWJ1Z2dpbmcgc3ltYm9scyBjb21waWxlZCBpbiAmIAp0aGUgc291cmNlIGJhc2Ugb2YgdGhpcyBidWlsZCBpcyBhdmFpbGFibGUuCkluIHNob3J0IGl0IGlzIGZhciBtb3JlIHVzZWZ1bCB0aGFuIHNvbWV0aGluZyBsaWtlIGEgY3Jhc2ggbG9nIGNvdWxkIGV2ZXIgaG9wZSB0byBiZS4KCkluIHRoZW9yeSBhbGwgdGhhdCBpcyBtaXNzaW5nIHRvIHJlc3RhcnQgYSBjb3JlIGR1bXBlZCBwcm9ncmFtIGlzIGEga2VybmVsIHBhdGNoIHdoaWNoCndpbGwgZG8gdGhlIGZvbGxvd2luZy4KMSkgTWFrZSBhIG5ldyBrZXJuZWwgdGFzayBzdHJ1Y3R1cmUKMikgUmVsb2FkIGFsbCB0aGUgZHVtcGVkIHBhZ2VzIGJhY2sgaW50byB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcy4KMykgRG8gdGhlIHJlcXVpcmVkIGNsb2NrIGZpeHVwcwo0KSBHZXQgYWxsIGZpbGVzICYgbmV0d29yayBjb25uZWN0aW9ucyBmb3IgdGhlIHByb2Nlc3MgYmFjayBpbnRvIGFuIGlkZW50aWNhbCBzdGF0ZSAoIHJlYWxseSBkaWZmaWN1bHQgKS4KNSkgQSBmZXcgbW9yZSBkaWZmaWN1bHQgdGhpbmdzIEkgaGF2ZW4ndCB0aG91Z2h0IG9mLgoKCgpXaHkgaGF2ZSBJIG5ldmVyIHNlZW4gb25lID8uClByb2JhYmx5IGJlY2F1c2UgeW91IGhhdmVuJ3QgdXNlZCB0aGUgY29tbWFuZCAKdWxpbWl0IC1jIHVubGltaXRlZCBpbiBiYXNoCnRvIGFsbG93IGNvcmUgZHVtcHMsIG5vdyBkbyAKdWxpbWl0IC1hIAp0byB2ZXJpZnkgdGhhdCB0aGUgbGltaXQgd2FzIGFjY2VwdGVkLgoKQSBzYW1wbGUgY29yZSBkdW1wClRvIGNyZWF0ZSB0aGlzIEknbSBnb2luZyB0byBkbwp1bGltaXQgLWMgdW5saW1pdGVkCmdkYiAKdG8gbGF1bmNoIGdkYiAobXkgdmljdGltIGFwcC4gKSBub3cgYmUgYmFkICYgZG8gdGhlIGZvbGxvd2luZyBmcm9tIGFub3RoZXIgCnRlbG5ldC94dGVybSBzZXNzaW9uIHRvIHRoZSBzYW1lIG1hY2hpbmUKcHMgLWF1eCB8IGdyZXAgZ2RiCmtpbGwgLVNJR1NFR1YgPGdkYidzIHBpZD4Kb3IgYWx0ZXJuYXRpdmVseSB1c2Uga2lsbGFsbCAtU0lHU0VHViBnZGIgaWYgeW91IGhhdmUgdGhlIGtpbGxhbGwgY29tbWFuZC4KTm93IGxvb2sgYXQgdGhlIGNvcmUgZHVtcC4KLi9nZGIgLi9nZGIgY29yZQpEaXNwbGF5cyB0aGUgZm9sbG93aW5nCkdOVSBnZGIgNC4xOApDb3B5cmlnaHQgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KR0RCIGlzIGZyZWUgc29mdHdhcmUsIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgeW91IGFyZQp3ZWxjb21lIHRvIGNoYW5nZSBpdCBhbmQvb3IgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgaXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgpUeXBlICJzaG93IGNvcHlpbmciIHRvIHNlZSB0aGUgY29uZGl0aW9ucy4KVGhlcmUgaXMgYWJzb2x1dGVseSBubyB3YXJyYW50eSBmb3IgR0RCLiAgVHlwZSAic2hvdyB3YXJyYW50eSIgZm9yIGRldGFpbHMuClRoaXMgR0RCIHdhcyBjb25maWd1cmVkIGFzICJzMzkwLWlibS1saW51eCIuLi4KQ29yZSB3YXMgZ2VuZXJhdGVkIGJ5IGAuL2dkYicuClByb2dyYW0gdGVybWluYXRlZCB3aXRoIHNpZ25hbCAxMSwgU2VnbWVudGF0aW9uIGZhdWx0LgpSZWFkaW5nIHN5bWJvbHMgZnJvbSAvdXNyL2xpYi9saWJuY3Vyc2VzLnNvLjQuLi5kb25lLgpSZWFkaW5nIHN5bWJvbHMgZnJvbSAvbGliL2xpYm0uc28uNi4uLmRvbmUuClJlYWRpbmcgc3ltYm9scyBmcm9tIC9saWIvbGliYy5zby42Li4uZG9uZS4KUmVhZGluZyBzeW1ib2xzIGZyb20gL2xpYi9sZC1saW51eC5zby4yLi4uZG9uZS4KIzAgIDB4NDAxMjZkMWEgaW4gcmVhZCAoKSBmcm9tIC9saWIvbGliYy5zby42ClNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50IGZvciBkZWJ1Z2dpbmcgZ2RiLgpCcmVha3BvaW50IDEgYXQgMHg0ZGM2Zjg6IGZpbGUgdXRpbHMuYywgbGluZSA0NzEuCkJyZWFrcG9pbnQgMiBhdCAweDRkODdhNDogZmlsZSB0b3AuYywgbGluZSAyNjA5LgoodG9wLWdkYikgaW5mbyBzdGFjawojMCAgMHg0MDEyNmQxYSBpbiByZWFkICgpIGZyb20gL2xpYi9saWJjLnNvLjYKIzEgIDB4NTI4ZjI2IGluIHJsX2dldGMgKHN0cmVhbT0weDdmZmZmZGU4KSBhdCBpbnB1dC5jOjQwMgojMiAgMHg1MjhlZDAgaW4gcmxfcmVhZF9rZXkgKCkgYXQgaW5wdXQuYzozODEKIzMgIDB4NTE2N2U2IGluIHJlYWRsaW5lX2ludGVybmFsX2NoYXIgKCkgYXQgcmVhZGxpbmUuYzo0NTQKIzQgIDB4NTE2OGVlIGluIHJlYWRsaW5lX2ludGVybmFsX2NoYXJsb29wICgpIGF0IHJlYWRsaW5lLmM6NTA3CiM1ICAweDUxNjkyYyBpbiByZWFkbGluZV9pbnRlcm5hbCAoKSBhdCByZWFkbGluZS5jOjUyMQojNiAgMHg1MTY0ZmUgaW4gcmVhZGxpbmUgKHByb21wdD0weDdmZmZmODEwICJcMTc3gf+B+HhcMTc3gf+B94HYXDE3N4H/gfh4gcAiKQogICAgYXQgcmVhZGxpbmUuYzozNDkKIzcgIDB4NGQ3YThhIGluIGNvbW1hbmRfbGluZV9pbnB1dCAocHJyb21wdD0weDU2NDQyMCAiKGdkYikgIiwgcmVwZWF0PTEsCiAgICBhbm5vdGF0aW9uX3N1ZmZpeD0weDRkNmI0NCAicHJvbXB0IikgYXQgdG9wLmM6MjA5MQojOCAgMHg0ZDZjZjAgaW4gY29tbWFuZF9sb29wICgpIGF0IHRvcC5jOjEzNDUKIzkgIDB4NGUyNWJjIGluIG1haW4gKGFyZ2M9MSwgYXJndj0weDdmZmZmZGY0KSBhdCBtYWluLmM6NjM1CgoKTERECj09PQpUaGlzIGlzIGEgcHJvZ3JhbSB3aGljaCBsaXN0cyB0aGUgc2hhcmVkIGxpYnJhcmllcyB3aGljaCBhIGxpYnJhcnkgbmVlZHMsCk5vdGUgeW91IGFsc28gZ2V0IHRoZSByZWxvY2F0aW9ucyBvZiB0aGUgc2hhcmVkIGxpYnJhcnkgdGV4dCBzZWdtZW50cyB3aGljaApoZWxwIHdoZW4gdXNpbmcgb2JqZHVtcCAtLXNvdXJjZS4KZS5nLgogbGRkIC4vZ2RiCm91dHB1dHMKbGlibmN1cnNlcy5zby40ID0+IC91c3IvbGliL2xpYm5jdXJzZXMuc28uNCAoMHg0MDAxODAwMCkKbGlibS5zby42ID0+IC9saWIvbGlibS5zby42ICgweDQwMDVlMDAwKQpsaWJjLnNvLjYgPT4gL2xpYi9saWJjLnNvLjYgKDB4NDAwODQwMDApCi9saWIvbGQtbGludXguc28uMiA9PiAvbGliL2xkLWxpbnV4LnNvLjIgKDB4NDAwMDAwMDApCgoKRGVidWdnaW5nIHNoYXJlZCBsaWJyYXJpZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT0KTW9zdCBwcm9ncmFtcyB1c2Ugc2hhcmVkIGxpYnJhcmllcywgaG93ZXZlciBpdCBjYW4gYmUgdmVyeSBwYWluZnVsCndoZW4geW91IHNpbmdsZSBzdGVwIGluc3RydWN0aW9uIGludG8gYSBmdW5jdGlvbiBsaWtlIHByaW50ZiBmb3IgdGhlIApmaXJzdCB0aW1lICYgeW91IGVuZCB1cCBpbiBmdW5jdGlvbnMgbGlrZSBfZGxfcnVudGltZV9yZXNvbHZlIHRoaXMgaXMKdGhlIGxkLnNvIGRvaW5nIGxhenkgYmluZGluZywgbGF6eSBiaW5kaW5nIGlzIGEgY29uY2VwdCBpbiBFTEYgd2hlcmUgCnNoYXJlZCBsaWJyYXJ5IGZ1bmN0aW9ucyBhcmUgbm90IGxvYWRlZCBpbnRvIG1lbW9yeSB1bmxlc3MgdGhleSBhcmUgCmFjdHVhbGx5IHVzZWQsIGdyZWF0IGZvciBzYXZpbmcgbWVtb3J5IGJ1dCBhIHBhaW4gdG8gZGVidWcuClRvIGdldCBhcm91bmQgdGhpcyBlaXRoZXIgcmVsaW5rIHRoZSBwcm9ncmFtIC1zdGF0aWMgb3IgZXhpdCBnZGIgdHlwZSAKZXhwb3J0IExEX0JJTkRfTk9XPXRydWUgdGhpcyB3aWxsIHN0b3AgbGF6eSBiaW5kaW5nICYgcmVzdGFydCB0aGUgZ2RiJ2luZyAKdGhlIHByb2dyYW0gaW4gcXVlc3Rpb24uCiAKCgpEZWJ1Z2dpbmcgbW9kdWxlcwo9PT09PT09PT09PT09PT09PQpBcyBtb2R1bGVzIGFyZSBkeW5hbWljYWxseSBsb2FkZWQgaW50byB0aGUga2VybmVsIHRoZWlyIGFkZHJlc3MgY2FuIGJlCmFueXdoZXJlIHRvIGdldCBhcm91bmQgdGhpcyB1c2UgdGhlIC1tIG9wdGlvbiB3aXRoIGluc21vZCB0byBlbWl0IGEgbG9hZAptYXAgd2hpY2ggY2FuIGJlIHBpcGVkIGludG8gYSBmaWxlIGlmIHJlcXVpcmVkLgoKVGhlIHByb2MgZmlsZSBzeXN0ZW0KPT09PT09PT09PT09PT09PT09PT0KV2hhdCBpcyBpdCA/LgpJdCBpcyBhIGZpbGVzeXN0ZW0gY3JlYXRlZCBieSB0aGUga2VybmVsIHdpdGggZmlsZXMgd2hpY2ggYXJlIGNyZWF0ZWQgb24gZGVtYW5kCmJ5IHRoZSBrZXJuZWwgaWYgcmVhZCwgb3IgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IGtlcm5lbCBwYXJhbWV0ZXJzLAppdCBpcyBhIHBvd2VyZnVsIGNvbmNlcHQuCgplLmcuCgpjYXQgL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2ZvcndhcmQgCk9uIG15IG1hY2hpbmUgb3V0cHV0cyAKMCAKdGVsbGluZyBtZSBpcF9mb3J3YXJkaW5nIGlzIG5vdCBvbiB0byBzd2l0Y2ggaXQgb24gSSBjYW4gZG8KZWNobyAxID4gIC9wcm9jL3N5cy9uZXQvaXB2NC9pcF9mb3J3YXJkCmNhdCBpdCBhZ2FpbgpjYXQgL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2ZvcndhcmQgCk9uIG15IG1hY2hpbmUgbm93IG91dHB1dHMKMQpJUCBmb3J3YXJkaW5nIGlzIG9uLgpUaGVyZSBpcyBhIGxvdCBvZiB1c2VmdWwgaW5mbyBpbiBoZXJlIGJlc3QgZm91bmQgYnkgZ29pbmcgaW4gJiBoYXZpbmcgYSBsb29rIGFyb3VuZCwKc28gSSdsbCB0YWtlIHlvdSB0aHJvdWdoIHNvbWUgZW50cmllcyBJIGNvbnNpZGVyIGltcG9ydGFudC4KCkFsbCB0aGUgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gdGhlIG1hY2hpbmUgaGF2ZSB0aGVyZSBvd24gZW50cnkgZGVmaW5lZCBieQovcHJvYy88cGlkPgpTbyBsZXRzIGhhdmUgYSBsb29rIGF0IHRoZSBpbml0IHByb2Nlc3MKY2QgL3Byb2MvMQoKY2F0IGNtZGxpbmUKZW1pdHMKaW5pdCBbMl0KCmNkIC9wcm9jLzEvZmQKVGhpcyBjb250YWlucyBudW1lcmljYWwgZW50cmllcyBvZiBhbGwgdGhlIG9wZW4gZmlsZXMsCnNvbWUgb2YgdGhlc2UgeW91IGNhbiBjYXQgZS5nLiBzdGRvdXQgKDIpCgpjYXQgL3Byb2MvMjkvbWFwcwpvbiBteSBtYWNoaW5lIGVtaXRzCgowMDQwMDAwMC0wMDQ3ODAwMCByLXhwIDAwMDAwMDAwIDVmOjAwIDQxMDMgICAgICAgL2Jpbi9iYXNoCjAwNDc4MDAwLTAwNDdlMDAwIHJ3LXAgMDAwNzcwMDAgNWY6MDAgNDEwMyAgICAgICAvYmluL2Jhc2gKMDA0N2UwMDAtMDA0OTIwMDAgcnd4cCAwMDAwMDAwMCAwMDowMCAwCjQwMDAwMDAwLTQwMDE1MDAwIHIteHAgMDAwMDAwMDAgNWY6MDAgMTQzODIgICAgICAvbGliL2xkLTIuMS4yLnNvCjQwMDE1MDAwLTQwMDE2MDAwIHJ3LXAgMDAwMTQwMDAgNWY6MDAgMTQzODIgICAgICAvbGliL2xkLTIuMS4yLnNvCjQwMDE2MDAwLTQwMDE3MDAwIHJ3eHAgMDAwMDAwMDAgMDA6MDAgMAo0MDAxNzAwMC00MDAxODAwMCBydy1wIDAwMDAwMDAwIDAwOjAwIDAKNDAwMTgwMDAtNDAwMWIwMDAgci14cCAwMDAwMDAwMCA1ZjowMCAxNDQzNSAgICAgIC9saWIvbGlidGVybWNhcC5zby4yLjAuOAo0MDAxYjAwMC00MDAxYzAwMCBydy1wIDAwMDAyMDAwIDVmOjAwIDE0NDM1ICAgICAgL2xpYi9saWJ0ZXJtY2FwLnNvLjIuMC44CjQwMDFjMDAwLTQwMTBkMDAwIHIteHAgMDAwMDAwMDAgNWY6MDAgMTQzODcgICAgICAvbGliL2xpYmMtMi4xLjIuc28KNDAxMGQwMDAtNDAxMTEwMDAgcnctcCAwMDBmMDAwMCA1ZjowMCAxNDM4NyAgICAgIC9saWIvbGliYy0yLjEuMi5zbwo0MDExMTAwMC00MDExNDAwMCBydy1wIDAwMDAwMDAwIDAwOjAwIDAKNDAxMTQwMDAtNDAxMWUwMDAgci14cCAwMDAwMDAwMCA1ZjowMCAxNDQwOCAgICAgIC9saWIvbGlibnNzX2ZpbGVzLTIuMS4yLnNvCjQwMTFlMDAwLTQwMTFmMDAwIHJ3LXAgMDAwMDkwMDAgNWY6MDAgMTQ0MDggICAgICAvbGliL2xpYm5zc19maWxlcy0yLjEuMi5zbwo3ZmZmZDAwMC04MDAwMDAwMCByd3hwIGZmZmZlMDAwIDAwOjAwIDAKCgpTaG93aW5nIHVzIHRoZSBzaGFyZWQgbGlicmFyaWVzIGluaXQgdXNlcyB3aGVyZSB0aGV5IGFyZSBpbiBtZW1vcnkKJiBtZW1vcnkgYWNjZXNzIHBlcm1pc3Npb25zIGZvciBlYWNoIHZpcnR1YWwgbWVtb3J5IGFyZWEuCgovcHJvYy8xL2N3ZCBpcyBhIHNvZnRsaW5rIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgovcHJvYy8xL3Jvb3QgaXMgdGhlIHJvb3Qgb2YgdGhlIGZpbGVzeXN0ZW0gZm9yIHRoaXMgcHJvY2Vzcy4gCgovcHJvYy8xL21lbSBpcyB0aGUgY3VycmVudCBydW5uaW5nIHByb2Nlc3NlcyBtZW1vcnkgd2hpY2ggeW91CmNhbiByZWFkICYgd3JpdGUgdG8gbGlrZSBhIGZpbGUuCnN0cmFjZSB1c2VzIHRoaXMgc29tZXRpbWVzIGFzIGl0IGlzIGEgYml0IGZhc3RlciB0aGFuIHRoZQpyYXRoZXIgaW5lZmZpY2VudCBwdHJhY2UgaW50ZXJmYWNlIGZvciBwZWVraW5nIGF0IERBVEEuCgoKY2F0IHN0YXR1cyAKCk5hbWU6ICAgaW5pdApTdGF0ZTogIFMgKHNsZWVwaW5nKQpQaWQ6ICAgIDEKUFBpZDogICAwClVpZDogICAgMCAgICAgICAwICAgICAgIDAgICAgICAgMApHaWQ6ICAgIDAgICAgICAgMCAgICAgICAwICAgICAgIDAKR3JvdXBzOgpWbVNpemU6ICAgICAgNDA4IGtCClZtTGNrOiAgICAgICAgIDAga0IKVm1SU1M6ICAgICAgIDIwOCBrQgpWbURhdGE6ICAgICAgIDI0IGtCClZtU3RrOiAgICAgICAgIDgga0IKVm1FeGU6ICAgICAgIDM2OCBrQgpWbUxpYjogICAgICAgICAwIGtCClNpZ1BuZDogMDAwMDAwMDAwMDAwMDAwMApTaWdCbGs6IDAwMDAwMDAwMDAwMDAwMDAKU2lnSWduOiA3ZmZmZmZmZmQ3ZjBkOGZjClNpZ0NndDogMDAwMDAwMDAyODBiMjYwMwpDYXBJbmg6IDAwMDAwMDAwZmZmZmZlZmYKQ2FwUHJtOiAwMDAwMDAwMGZmZmZmZmZmCkNhcEVmZjogMDAwMDAwMDBmZmZmZmVmZgoKVXNlciBQU1c6ICAgIDA3MGRlMDAwIDgwNDE0MTQ2CnRhc2s6IDAwNGI2MDAwIHRzczogMDA0YjYyZDgga3NwOiAwMDRiN2NhOCBwdF9yZWdzOiAwMDRiN2Y2OApVc2VyIEdQUlM6CjAwMDAwNDAwICAwMDAwMDAwMCAgMDAwMDAwMGIgIDdmZmZmYTkwCjAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwNDVkOWY0CjAwNDVjYWZjICA3ZmZmZmE5MCAgN2ZmZmZmMTggIDAwNDVjYjA4CjAwMDEwNDAwICA4MDQwMzllOCAgODA0MDNhZjggIDdmZmZmOGIwClVzZXIgQUNSUzoKMDAwMDAwMDAgIDAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAKMDAwMDAwMDEgIDAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAKMDAwMDAwMDAgIDAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAKMDAwMDAwMDAgIDAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAKS2VybmVsIEJhY2tDaGFpbiAgQ2FsbENoYWluICAgIEJhY2tDaGFpbiAgQ2FsbENoYWluCiAgICAgICAwMDRiN2NhOCAgIDgwMDJiZDBjICAgICAwMDRiN2QxOCAgIDgwMDJiOTJjCiAgICAgICAwMDRiN2RiOCAgIDgwMDVjZDUwICAgICAwMDRiN2UzOCAgIDgwMDVkMTJhCiAgICAgICAwMDRiN2YwOCAgIDgwMDE5MTE0ICAgICAgICAgICAgICAgICAgICAgClNob3dpbmcgYW1vbmcgb3RoZXIgdGhpbmdzIG1lbW9yeSB1c2FnZSAmIHN0YXR1cyBvZiBzb21lIHNpZ25hbHMgJgp0aGUgcHJvY2Vzc2VzJ2VzIHJlZ2lzdGVycyBmcm9tIHRoZSBrZXJuZWwgdGFza19zdHJ1Y3R1cmUKYXMgd2VsbCBhcyBhIGJhY2tjaGFpbiB3aGljaCBtYXkgYmUgdXNlZnVsIGlmIGEgcHJvY2VzcyBjcmFzaGVzCmluIHRoZSBrZXJuZWwgZm9yIHNvbWUgdW5rbm93biByZWFzb24uCgpTb21lIGRyaXZlciBkZWJ1Z2dpbmcgdGVjaG5pcXVlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkZWJ1ZyBmZWF0dXJlCi0tLS0tLS0tLS0tLS0KU29tZSBvZiBvdXIgZHJpdmVycyBub3cgc3VwcG9ydCBhICJkZWJ1ZyBmZWF0dXJlIiBpbgovcHJvYy9zMzkwZGJmIHNlZSBzMzkwZGJmLnR4dCBpbiB0aGUgbGludXgvRG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkKZm9yIG1vcmUgaW5mby4KZS5nLiAKdG8gc3dpdGNoIG9uIHRoZSBsY3MgImRlYnVnIGZlYXR1cmUiCmVjaG8gNSA+IC9wcm9jL3MzOTBkYmYvbGNzL2xldmVsCiYgdGhlbiBhZnRlciB0aGUgZXJyb3Igb2NjdXJyZWQuCmNhdCAvcHJvYy9zMzkwZGJmL2xjcy9zcHJpbnRmID4vbG9nZmlsZQp0aGUgbG9nZmlsZSBub3cgY29udGFpbnMgc29tZSBpbmZvcm1hdGlvbiB3aGljaCBtYXkgaGVscAp0ZWNoIHN1cHBvcnQgcmVzb2x2ZSBhIHByb2JsZW0gaW4gdGhlIGZpZWxkLgoKCgpoaWdoIGxldmVsIGRlYnVnZ2luZyBuZXR3b3JrIGRyaXZlcnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmlmY29uZmlnIGlzIGEgcXVpdGUgdXNlZnVsIGNvbW1hbmQKaXQgZ2l2ZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgbmV0d29yayBkcml2ZXJzLgoKSWYgeW91IHN1c3BlY3QgeW91ciBuZXR3b3JrIGRldmljZSBkcml2ZXIgaXMgZGVhZApvbmUgd2F5IHRvIGNoZWNrIGlzIHR5cGUgCmlmY29uZmlnIDxuZXR3b3JrIGRldmljZT4gCmUuZy4gdHIwCllvdSBzaG91bGQgc2VlIHNvbWV0aGluZyBsaWtlCnRyMCAgICAgICBMaW5rIGVuY2FwOjE2LzQgTWJwcyBUb2tlbiBSaW5nIChOZXcpICBIV2FkZHIgMDA6MDQ6QUM6MjA6OEU6NDgKICAgICAgICAgIGluZXQgYWRkcjo5LjE2NC4xODUuMTMyICBCY2FzdDo5LjE2NC4xOTEuMjU1ICBNYXNrOjI1NS4yNTUuMjI0LjAKICAgICAgICAgIFVQIEJST0FEQ0FTVCBSVU5OSU5HIE1VTFRJQ0FTVCAgTVRVOjIwMDAgIE1ldHJpYzoxCiAgICAgICAgICBSWCBwYWNrZXRzOjI0NjEzNCBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBmcmFtZTowCiAgICAgICAgICBUWCBwYWNrZXRzOjUgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgY2FycmllcjowCiAgICAgICAgICBjb2xsaXNpb25zOjAgdHhxdWV1ZWxlbjoxMDAKCmlmIHRoZSBkZXZpY2UgZG9lc24ndCBzYXkgdXAKdHJ5Ci9ldGMvcmMuZC9pbml0LmQvbmV0d29yayBzdGFydCAKKCB0aGlzIHN0YXJ0cyB0aGUgbmV0d29yayBzdGFjayAmIGhvcGVmdWxseSBjYWxscyBpZmNvbmZpZyB0cjAgdXAgKS4KaWZjb25maWcgbG9va3MgYXQgdGhlIG91dHB1dCBvZiAvcHJvYy9uZXQvZGV2ICYgcHJlc2VudHMgaXQgaW4gYSBtb3JlIHByZXNlbnRhYmxlIGZvcm0KTm93IHBpbmcgdGhlIGRldmljZSBmcm9tIGEgbWFjaGluZSBpbiB0aGUgc2FtZSBzdWJuZXQuCmlmIHRoZSBSWCBwYWNrZXRzIGNvdW50ICYgVFggcGFja2V0cyBjb3VudHMgZG9uJ3QgaW5jcmVtZW50IHlvdSBwcm9iYWJseQpoYXZlIHByb2JsZW1zLgpuZXh0IApjYXQgL3Byb2MvbmV0L2FycApEbyB5b3Ugc2VlIGFueSBoYXJkd2FyZSBhZGRyZXNzZXMgaW4gdGhlIGNhY2hlIGlmIG5vdCB5b3UgbWF5IGhhdmUgcHJvYmxlbXMuCk5leHQgdHJ5CnBpbmcgLWMgNSA8YnJvYWRjYXN0X2FkZHI+IGkuZS4gdGhlIEJjYXN0IGZpZWxkIGFib3ZlIGluIHRoZSBvdXRwdXQgb2YKaWZjb25maWcuIERvIHlvdSBzZWUgYW55IHJlcGxpZXMgZnJvbSBtYWNoaW5lcyBvdGhlciB0aGFuIHRoZSBsb2NhbCBtYWNoaW5lCmlmIG5vdCB5b3UgbWF5IGhhdmUgcHJvYmxlbXMuIGFsc28gaWYgdGhlIFRYIHBhY2tldHMgY291bnQgaW4gaWZjb25maWcKaGFzbid0IGluY3JlbWVudGVkIGVpdGhlciB5b3UgaGF2ZSBzZXJpb3VzIHByb2JsZW1zIGluIHlvdXIgZHJpdmVyIAooZS5nLiB0aGUgdHhidXN5IGZpZWxkIG9mIHRoZSBuZXR3b3JrIGRldmljZSBiZWluZyBzdHVjayBvbiApIApvciB5b3UgbWF5IGhhdmUgbXVsdGlwbGUgbmV0d29yayBkZXZpY2VzIGNvbm5lY3RlZC4KCgpjaGFuZGV2Ci0tLS0tLS0KVGhlcmUgaXMgYSBuZXcgZGV2aWNlIGxheWVyIGZvciBjaGFubmVsIGRldmljZXMsIHNvbWUKZHJpdmVycyBlLmcuIGxjcyBhcmUgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgbGF5ZXIuCklmIHRoZSBkZXZpY2UgdXNlcyB0aGUgY2hhbm5lbCBkZXZpY2UgbGF5ZXIgeW91J2xsIGJlCmFibGUgdG8gZmluZCB3aGF0IGludGVycnVwdHMgaXQgdXNlcyAmIHRoZSBjdXJyZW50IHN0YXRlIApvZiB0aGUgZGV2aWNlLgpTZWUgdGhlIG1hbnBhZ2UgY2hhbmRldi44ICZ0eXBlIGNhdCAvcHJvYy9jaGFuZGV2IGZvciBtb3JlIGluZm8uCgoKClN0YXJ0aW5nIHBvaW50cyBmb3IgZGVidWdnaW5nIHNjcmlwdGluZyBsYW5ndWFnZXMgZXRjLgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCmJhc2gvc2gKCmJhc2ggLXggPHNjcmlwdG5hbWU+CmUuZy4gYmFzaCAteCAvdXNyL2Jpbi9iYXNoYnVnCmRpc3BsYXlzIHRoZSBmb2xsb3dpbmcgbGluZXMgYXMgaXQgZXhlY3V0ZXMgdGhlbS4KKyBNQUNISU5FPWk1ODYKKyBPUz1saW51eC1nbnUKKyBDQz1nY2MKKyBDRkxBR1M9IC1EUFJPR1JBTT0nYmFzaCcgLURIT1NUVFlQRT0naTU4NicgLURPU1RZUEU9J2xpbnV4LWdudScgLURNQUNIVFlQRT0naTU4Ni1wYy1saW51eC1nbnUnIC1EU0hFTEwgLURIQVZFX0NPTkZJR19IICAgLUkuIC1JLiAtSS4vbGliIC1PMiAtcGlwZQorIFJFTEVBU0U9Mi4wMQorIFBBVENITEVWRUw9MQorIFJFTFNUQVRVUz1yZWxlYXNlCisgTUFDSFRZUEU9aTU4Ni1wYy1saW51eC1nbnUgICAKCnBlcmwgLWQgPHNjcmlwdG5hbWU+IHJ1bnMgdGhlIHBlcmxzY3JpcHQgaW4gYSBmdWxseSBpbnRlcmNhdGl2ZSBkZWJ1Z2dlcgo8bGlrZSBnZGI+LgpUeXBlICdoJyBpbiB0aGUgZGVidWdnZXIgZm9yIGhlbHAuCgpmb3IgZGVidWdnaW5nIGphdmEgdHlwZQpqZGIgPGZpbGVuYW1lPiBhbm90aGVyIGZ1bGx5IGludGVyYWN0aXZlIGdkYiBzdHlsZSBkZWJ1Z2dlci4KJiB0eXBlID8gaW4gdGhlIGRlYnVnZ2VyIGZvciBoZWxwLgoKCgpEdW1wdG9vbCAmIExjcmFzaCAoIGxrY2QgKQo9PT09PT09PT09PT09PT09PT09PT09PT09PQpNaWNoYWVsIEhvbHpoZXUgJiBvdGhlcnMgaGVyZSBhdCBJQk0gaGF2ZSBhIGZhaXJseSBtYXR1cmUgcG9ydCBvZiAKU0dJJ3MgbGNyYXNoIHRvb2wgd2hpY2ggYWxsb3dzIG9uZSB0byBsb29rIGF0IGtlcm5lbCBzdHJ1Y3R1cmVzIGluIGEKcnVubmluZyBrZXJuZWwuCgpJdCBhbHNvIGNvbXBsZW1lbnRzIGEgdG9vbCBjYWxsZWQgZHVtcHRvb2wgd2hpY2ggZHVtcHMgYWxsIHRoZSBrZXJuZWwncwptZW1vcnkgcGFnZXMgJiByZWdpc3RlcnMgdG8gZWl0aGVyIGEgdGFwZSBvciBhIGRpc2suClRoaXMgY2FuIGJlIHVzZWQgYnkgdGVjaCBzdXBwb3J0IG9yIGFuIGFtYml0aW91cyBlbmQgdXNlciBkbwpwb3N0IG1vcnRlbSBkZWJ1Z2dpbmcgb2YgYSBtYWNoaW5lIGxpa2UgZ2RiIGNvcmUgZHVtcHMuCgpHb2luZyBpbnRvIGhvdyB0byB1c2UgdGhpcyB0b29sIGluIGRldGFpbCB3aWxsIGJlIGV4cGxhaW5lZAppbiBvdGhlciBkb2N1bWVudGF0aW9uIHN1cHBsaWVkIGJ5IElCTSB3aXRoIHRoZSBwYXRjaGVzICYgdGhlIApsY3Jhc2ggaG9tZXBhZ2UgaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL2xrY2QvICYgdGhlIGxjcmFzaCBtYW5wYWdlLgoKSG93IHRoZXkgd29yawotLS0tLS0tLS0tLS0tCkxjcmFzaCBpcyBhIHBlcmZlY3RseSBub3JtYWwgcHJvZ3JhbSxob3dldmVyLCBpdCByZXF1aXJlcyAyIAphZGRpdGlvbmFsIGZpbGVzLCBLZXJudHlwZXMgd2hpY2ggaXMgYnVpbHQgdXNpbmcgYSBwYXRjaCB0byB0aGUgCmxpbnV4IGtlcm5lbCBzb3VyY2VzIGluIHRoZSBsaW51eCByb290IGRpcmVjdG9yeSAmIHRoZSBTeXN0ZW0ubWFwLgoKS2VybnR5cGVzIGlzIGFuIGFuIG9iamVjdGZpbGUgd2hvc2Ugc29sZSBwdXJwb3NlIGluIGxpZmUKaXMgdG8gcHJvdmlkZSBzdGFicyBkZWJ1ZyBpbmZvIHRvIGxjcmFzaCwgdG8gZG8gdGhpcwpLZXJudHlwZXMgaXMgYnVpbHQgZnJvbSBrZXJudHlwZXMuYyB3aGljaCBqdXN0IGluY2x1ZGVzIHRoZSBtb3N0IGNvbW1vbmx5CnJlZmVyZW5jZWQgaGVhZGVyIGZpbGVzIHVzZWQgd2hlbiBkZWJ1Z2dpbmcsIGxjcmFzaCBjYW4gdGhlbiByZWFkIHRoZQouc3RhYnMgc2VjdGlvbiBvZiB0aGlzIGZpbGUuCgpEZWJ1Z2dpbmcgYSBsaXZlIHN5c3RlbSBpdCB1c2VzIC9kZXYvbWVtCmFsdGVybmF0aXZlbHkgZm9yIHBvc3QgbW9ydGVtIGRlYnVnZ2luZyBpdCB1c2VzIHRoZSBkYXRhIApjb2xsZWN0ZWQgYnkgZHVtcHRvb2wuCgoKClN5c1JxCj09PT09ClRoaXMgaXMgbm93IHN1cHBvcnRlZCBieSBsaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZS4KVG8gZW5hYmxlIGl0IGRvIGNvbXBpbGUgdGhlIGtlcm5lbCB3aXRoIApLZXJuZWwgSGFja2luZyAtPiBNYWdpYyBTeXNScSBLZXkgRW5hYmxlZAplY2hvICIxIiA+IC9wcm9jL3N5cy9rZXJuZWwvc3lzcnEKYWxzbyB0eXBlCmVjaG8gIjgiID4vcHJvYy9zeXMva2VybmVsL3ByaW50awpUbyBtYWtlIHByaW50ayBvdXRwdXQgZ28gdG8gY29uc29sZS4KT24gMzkwIGFsbCBjb21tYW5kcyBhcmUgcHJlZml4ZWQgd2l0aApeLQplLmcuCl4tdCB3aWxsIHNob3cgdGFza3MuCl4tPyBvciBzb21lIHVua25vd24gY29tbWFuZCB3aWxsIGRpc3BsYXkgaGVscC4KVGhlIHN5c3JxIGtleSByZWFkaW5nIGlzIHZlcnkgcGlja3kgKCBJIGhhdmUgdG8gdHlwZSB0aGUga2V5cyBpbiBhbgogeHRlcm0gc2Vzc2lvbiAmIHBhc3RlIHRoZW0gIGludG8gdGhlIHgzMjcwIGNvbnNvbGUgKQomIGl0IG1heSBiZSB3aXNlIHRvIHByZWRlZmluZSB0aGUga2V5cyBhcyBkZXNjcmliZWQgaW4gdGhlIFZNIGhpbnRzIGFib3ZlCgpUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHN5bmNpbmcgZGlza3MgdW5tb3VudGluZyAmIHJlYm9vdGluZwppZiB0aGUgbWFjaGluZSBnZXRzIHBhcnRpYWxseSBodW5nLgoKUmVhZCBEb2N1bWVudGF0aW9uL3N5c3JxLnR4dCBmb3IgbW9yZSBpbmZvCgpSZWZlcmVuY2VzOgo9PT09PT09PT09PQpFbnRlcnByaXNlIFN5c3RlbXMgQXJjaGl0ZWN0dXJlIFJlZmVyZW5jZSBTdW1tYXJ5CkVudGVycHJpc2UgU3lzdGVtcyBBcmNoaXRlY3R1cmUgUHJpbmNpcGxlcyBvZiBPcGVyYXRpb24KSGFydG11dCBQZW5uZXJzIHMzOTAgc3RhY2sgZnJhbWUgc2hlZXQuCklCTSBNYWluZnJhbWUgQ2hhbm5lbCBBdHRhY2htZW50IGEgdGVjaG5vbG9neSBicmllZiBmcm9tIGEgQ0lTQ08gd2VicGFnZQpWYXJpb3VzIGJpdHMgb2YgbWFuICYgaW5mbyBwYWdlcyBvZiBMaW51eC4KTGludXggJiBHREIgc291cmNlLgpWYXJpb3VzIGluZm8gJiBtYW4gcGFnZXMuCkNNUyBIZWxwIG9uIHRyYWNpbmcgY29tbWFuZHMuCkxpbnV4IGZvciBzLzM5MCBFbGYgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZQpMaW51eCBmb3Igei9TZXJpZXMgRWxmIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UgKCBCb3RoIEhpZ2hseSBSZWNvbW1lbmRlZCApCnovQXJjaGl0ZWN0dXJlIFByaW5jaXBsZXMgb2YgT3BlcmF0aW9uIFNBMjItNzgzMi0wMApFbnRlcnByaXNlIFN5c3RlbXMgQXJjaGl0ZWN0dXJlLzM5MCBSZWZlcmVuY2UgU3VtbWFyeSBTQTIyLTcyMDktMDEgJiB0aGUKRW50ZXJwcmlzZSBTeXN0ZW1zIEFyY2hpdGVjdHVyZS8zOTAgUHJpbmNpcGxlcyBvZiBPcGVyYXRpb24gU0EyMi03MjAxLTA1CgpTcGVjaWFsIFRoYW5rcwo9PT09PT09PT09PT09PQpTcGVjaWFsIHRoYW5rcyB0byBOZWFsZSBGZXJndXNvbiB3aG8gbWFpbnRhaW5zIGEgbXVjaApwcmV0dGllciBIVE1MIHZlcnNpb24gb2YgdGhpcyBwYWdlIGF0Cmh0dHA6Ly9wZW5ndWludm0ucHJpbmNldG9uLmVkdS9ub3Rlcy5odG1sI0RlYnVnMzkwCkJvYiBHcmFpbmdlciBTdGVmYW4gQmFkZXIgJiBvdGhlcnMgZm9yIHJlcG9ydGluZyBidWdzCg==