Km9zX3Ztcy50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjQuICBMYXN0IGNoYW5nZTogMjAxNCBBdWcgMjkKCgoJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwKCgoJCQkJCQkJKlZNUyogKnZtcyoKVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBwYXJ0aWN1bGFyaXRpZXMgZm9yIHRoZSBWTVMgdmVyc2lvbiBvZiBWaW0uCllvdSBjYW4gcmVhY2ggdGhpcyBpbmZvcm1hdGlvbiBmaWxlIGJ5IHR5cGluZyA6aGVscCBWTVMgaW4gVmltIGNvbW1hbmQKcHJvbXB0LgoKIDEuIEdldHRpbmcgc3RhcnRlZAl8dm1zLXN0YXJ0ZWR8CiAyLiBEb3dubG9hZCBmaWxlcwl8dm1zLWRvd25sb2FkfAogMy4gQ29tcGlsaW5nCQl8dm1zLWNvbXBpbGluZ3wKIDQuIFByb2JsZW1zCQl8dm1zLXByb2JsZW1zfAogNS4gRGVwbG95CQl8dm1zLWRlcGxveXwKIDYuIFByYWN0aWNhbCB1c2FnZQl8dm1zLXVzYWdlfAogNy4gR1VJIG1vZGUgcXVlc3Rpb25zCXx2bXMtZ3VpfAogOC4gVXNlZnVsIG5vdGVzCXx2bXMtbm90ZXN8CiA5LiBWTVMgcmVsYXRlZCBjaGFuZ2VzCXx2bXMtY2hhbmdlc3wKMTAuIEF1dGhvcnMJCXx2bXMtYXV0aG9yc3wKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKMS4gR2V0dGluZyBzdGFydGVkCQkJCQkqdm1zLXN0YXJ0ZWQqCgpWaW0gKFZpIElNcHJvdmVkKSBpcyBhIFZpLWNvbXBhdGlibGUgdGV4dCBlZGl0b3IgdGhhdCBydW5zIG9uIG5lYXJseSBldmVyeQpvcGVyYXRpbmcgc3lzdGVtIGtub3duIHRvIGh1bWFuaXR5LiAgTm93IHVzZSBWaW0gb24gT3BlblZNUyB0b28sIGluIGNoYXJhY3RlcgpvciBYL01vdGlmIGVudmlyb25tZW50LiAgSXQgaXMgZnVsbHkgZmVhdHVyZWQgYW5kIGFic29sdXRlbHkgY29tcGF0aWJsZSB3aXRoClZpbSBvbiBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKMi4gRG93bmxvYWQgZmlsZXMJCQkJCSp2bXMtZG93bmxvYWQqCgpZb3UgY2FuIGRvd25sb2FkIHRoZSBWaW0gc291cmNlIGNvZGUgYnkgZnRwIGZyb20gdGhlIG9mZmljaWFsIFZpbSBzaXRlOgoJZnRwOi8vZnRwLnZpbS5vcmcvcHViL3ZpbS8KT3IgdXNlIG9uZSBvZiB0aGUgbWlycm9yczoKCWZ0cDovL2Z0cC52aW0ub3JnL3B1Yi92aW0vTUlSUk9SUwoKWW91IGNhbiBkb3dubG9hZCBwcmVjb21waWxlZCBleGVjdXRhYmxlcyBmcm9tOgoJaHR0cDovL3d3dy5wb2xhcmhvbWUuY29tL3ZpbS8KCWZ0cDovL2Z0cC5wb2xhcmhvbWUuY29tL3B1Yi92aW0vCgpUbyB1c2UgdGhlIHByZWNvbXBpbGVkIGJpbmFyeSB2ZXJzaW9uLCB5b3UgbmVlZCBvbmUgb2YgdGhlc2UgYXJjaGl2ZXM6CgogIHZpbS1YWC1leGUtaWE2NC1ndWkuemlwICAgICAgIElBNjQgR1VJL01vdGlmIGV4ZWN1dGFibGVzCiAgdmltLVhYLWV4ZS1pYTY0LWd0ay56aXAgICAgICAgSUE2NCBHVUkvR1RLIGV4ZWN1dGFibGVzCiAgdmltLVhYLWV4ZS1pYTY0LXRlcm0uemlwICAgICAgSUE2NCBjb25zb2xlIGV4ZWN1dGFibGVzCiAgdmltLVhYLWV4ZS1heHAtZ3VpLnppcAlBbHBoYSBHVUkvTW90aWYgZXhlY3V0YWJsZXMKICB2aW0tWFgtZXhlLWF4cC1ndGsuemlwCUFscGhhIEdVSS9HVEsgZXhlY3V0YWJsZXMKICB2aW0tWFgtZXhlLWF4cC10ZXJtLnppcCAgICAgICBBbHBoYSBjb25zb2xlIGV4ZWN1dGFibGVzCiAgdmltLVhYLWV4ZS12YXgtZ3VpLnppcAlWQVggR1VJIGV4ZWN1dGFibGVzCiAgdmltLVhYLWV4ZS12YXgtdGVybS56aXAgICAgICAgVkFYIGNvbnNvbGUgZXhlY3V0YWJsZXMKCmFuZCBvZiBjb3Vyc2UgKG9wdGlvbmFsKQogIHZpbS1YWC1ydW50aW1lLnppcAkJcnVudGltZSBmaWxlcwoKVGhlIGJpbmFyeSBhcmNoaXZlcyBjb250YWluOiB2aW0uZXhlLCBjdGFncy5leGUsIHh4ZC5leGUgZmlsZXMuCgpGb3IgR1RLIGV4ZWN1dGFibGVzIHlvdSB3aWxsIG5lZWQgR1RLTElCIHRoYXQgaXMgYXZhaWxhYmxlIGZvcgpBbHBoYSBhbmQgSUE2NCBwbGF0Zm9ybS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKMy4gQ29tcGlsaW5nCQkJCQkJKnZtcy1jb21waWxpbmcqCgpTZWUgdGhlIGZpbGUgWy5TUkNdSU5TVEFMTFZNUy5UWFQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCjQuIFByb2JsZW1zCQkJCQkJKnZtcy1wcm9ibGVtcyoKClRoZSBjb2RlIGhhcyBiZWVuIHRlc3RlZCB1bmRlciBPcGVuIFZNUyA2LjIgLSA4LjIgb24gQWxwaGEsIFZBWCBhbmQgSUE2NApwbGF0Zm9ybXMgd2l0aCB0aGUgREVDIEMgY29tcGlsZXIuICBJdCBzaG91bGQgd29yayB3aXRob3V0IGJpZyBwcm9ibGVtcy4KSWYgeW91ciBzeXN0ZW0gZG9lcyBub3QgaGF2ZSBzb21lIGluY2x1ZGUgbGlicmFyaWVzIHlvdSBjYW4gdHVuZSB1cCBpbgpPU19WTVNfQ09ORi5IIGZpbGUuCgpJZiB5b3UgZGVjaWRlZCB0byBidWlsZCBWaW0gd2l0aCArcGVybCwgK3B5dGhvbiwgZXRjLiBvcHRpb25zLCBmaXJzdCB5b3UgbmVlZAp0byBkb3dubG9hZCBPcGVuVk1TIGRpc3RyaWJ1dGlvbnMgb2YgUGVybCBhbmQgUHl0aG9uLiAgQnVpbGQgYW5kIGRlcGxveSB0aGUKbGlicmFyaWVzIGFuZCBjaGFuZ2UgYWRlcXVhdGUgbGluZXMgaW4gTUFLRV9WTVMuTU1TIGZpbGUuICBUaGVyZSBzaG91bGQgbm90IGJlCmEgcHJvYmxlbSBmcm9tIFZpbSBzaWRlLgoKQWxzbyBHVEssIFhQTSBsaWJyYXJ5IHBhdGhzIHNob3VsZCBiZSBjb25maWd1cmVkIGluIE1BS0VfVk1TLk1NUwoKTm90ZTogVW5kZXIgVkFYIGl0IHNob3VsZCB3b3JrIHdpdGggdGhlIERFQyBDIGNvbXBpbGVyIHdpdGhvdXQgcHJvYmxlbXMuICBUaGUKVkFYIEMgY29tcGlsZXIgaXMgbm90IGZ1bGx5IEFOU0kgQyBjb21wYXRpYmxlIGluIHByZS1wcm9jZXNzb3IgZGlyZWN0aXZlcwpzZW1hbnRpY3MsIHRoZXJlZm9yZSB5b3UgaGF2ZSB0byB1c2UgYSBjb252ZXJ0ZXIgcHJvZ3JhbSB0aGF0IHdpbGwgZG8gdGhlIGxpb24KcGFydCBvZiB0aGUgam9iLiAgRm9yIGRldGFpbGVkIGluc3RydWN0aW9ucyByZWFkIGZpbGUgSU5TVEFMTHZtcy50eHQKCk1NU19WSU0uRVhFIGlzIGJ1aWxkIHRvZ2V0aGVyIHdpdGggVklNLkVYRSwgYnV0IGZvciBYWEQuRVhFIHlvdSBzaG91bGQKY2hhbmdlIHRvIGEgc3ViZGlyZWN0b3J5IGFuZCBidWlsZCBpdCBzZXBhcmF0ZWx5LgoKQ1RBR1MgaXMgbm90IHBhcnQgb2YgdGhlIFZpbSBzb3VyY2UgZGlzdHJpYnV0aW9uIGFueW1vcmUsIGhvd2V2ZXIgdGhlIE9wZW5WTVMKc3BlY2lmaWMgc291cmNlIG1pZ2h0IGNvbnRhaW4gQ1RBR1Mgc291cmNlIGZpbGVzIGFzIGRlc2NyaWJlZCBhYm92ZS4KWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQ1RBR1Mgb24gVk1TIGF0Cmh0dHA6Ly93d3cucG9sYXJob21lLmNvbS9jdGFncy8KCkFkdmFuY2VkIHVzZXJzIG1heSB0cnkgc29tZSBhY3JvYmF0aWNzIGluIEZFQVRVUkUuSCBmaWxlIGFzIHdlbGwuCgpJdCBpcyBwb3NzaWJsZSB0byBjb21waWxlIHdpdGggK3hmb250c2V0ICt4aW0gb3B0aW9ucyB0b28sIGJ1dCB0aGVuIHlvdSBoYXZlCnRvIHNldCB1cCBHVUkgZm9udHMgZXRjLiBjb3JyZWN0bHkuICBTZWUgOmhlbHAgeGltIGZyb20gVmltIGNvbW1hbmQgcHJvbXB0LgoKWW91IG1heSB3YW50IHRvIHVzZSBHVUkgd2l0aCBHVEsgaWNvbnMsIHRoZW4geW91IGhhdmUgdG8gZG93bmxvYWQgYW5kIGluc3RhbGwKR1RLIGZvciBPcGVuVk1TIG9yIGF0IGxlYXN0IHJ1bnRpbWUgc2hhcmVhYmxlIGltYWdlcyAtIExJQkdUSyBmcm9tCnBvbGFyaG9tZS5jb20KCkZvciBtb3JlIGFkdmFuY2VkIHF1ZXN0aW9ucywgcGxlYXNlIHNlbmQgeW91ciBwcm9ibGVtIHRvIFZpbSBvbiBWTVMgbWFpbGluZwpsaXN0IDx2aW0tdm1zQHBvbGFyaG9tZS5jb20+Ck1vcmUgYWJvdXQgdGhlIHZpbS12bXMgbGlzdCBjYW4gYmUgZm91bmQgYXQ6Cmh0dHA6Ly93d3cucG9sYXJob21lLmNvbS9tYWlsbWFuL2xpc3RpbmZvL3ZpbS12bXMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKNS4gRGVwbG95CQkJCQkJKnZtcy1kZXBsb3kqCgpWaW0gdXNlcyBhIHNwZWNpYWwgZGlyZWN0b3J5IHN0cnVjdHVyZSB0byBob2xkIHRoZSBkb2N1bWVudCBhbmQgcnVudGltZSBmaWxlczoKCiAgIHZpbSAob3Igd2hlcmV2ZXIpCiAgICB8LSB0bXAKICAgIHwtIHZpbTU3CiAgICB8LS0tLS0gZG9jCiAgICB8LS0tLS0gc3ludGF4CiAgICB8LSB2aW02MgogICAgfC0tLS0tIGRvYwogICAgfC0tLS0tIHN5bnRheAogICAgfC0gdmltNjQKICAgIHwtLS0tLSBkb2MKICAgIHwtLS0tLSBzeW50YXgKICAgIHZpbXJjICAgIChzeXN0ZW0gcmMgZmlsZXMpCiAgICBndmltcmMKClVzZTogPgoKCWRlZmluZS9ub2xvZyBWSU0JZGV2aWNlOltwYXRoLnZpbV0KCWRlZmluZS9ub2xvZyBWSU1SVU5USU1FIGRldmljZTpbcGF0aC52aW0udmltNjBdCglkZWZpbmUvbm9sb2cgVE1QCWRldmljZTpbcGF0aC50bXBdCgpUbyBnZXQgdmltLmV4ZSB0byBmaW5kIGl0cyBkb2N1bWVudCwgZmlsZXR5cGUsIGFuZCBzeW50YXggZmlsZXMsIGFuZCB0bwpzcGVjaWZ5IGEgZGlyZWN0b3J5IHdoZXJlIHRlbXBvcmFyeSBmaWxlcyB3aWxsIGJlIGxvY2F0ZWQuICBDb3B5IHRoZSAicnVudGltZSIKc3ViZGlyZWN0b3J5IG9mIHRoZSBWaW0gZGlzdHJpYnV0aW9uIHRvIHZpbXJ1bnRpbWUuCgpMb2dpY2FscyAkVklNUlVOVElNRSBhbmQgJFRNUCBhcmUgb3B0aW9uYWwuCgpJZiAkVklNUlVOVElNRSBpcyBub3Qgc2V0LCBWaW0gd2lsbCBndWVzcyBhbmQgdHJ5IHRvIHNldCB1cCBhdXRvbWF0aWNhbGx5LgpSZWFkIG1vcmUgYWJvdXQgaXQgYXQgOmhlbHAgcnVudGltZQoKSWYgJFRNUCBpcyBub3Qgc2V0LCB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byB1c2Ugc29tZSBmdW5jdGlvbnMgYXMgQ1RBR1MsClhYRCwgcHJpbnRpbmcgZXRjLiB0aGF0IHVzZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBub3JtYWwgb3BlcmF0aW9uLgpUaGUgJFRNUCBkaXJlY3Rvcnkgc2hvdWxkIGJlIHJlYWRhYmxlIGFuZCB3cml0YWJsZSBieSB0aGUgdXNlcihzKS4KVGhlIGVhc2llc3Qgd2F5IHRvIHNldCB1cCAkVE1QIGlzIHRvIGRlZmluZSBhIGxvZ2ljYWw6ID4KCglkZWZpbmUvbm9sb2cgVE1QIFNZUyRTQ1JBVENICm9yIGFzOiA+CglkZWZpbmUvbm9sb2cgVE1QIFNZUyRMT0dJTgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cgo2LiBQcmFjdGljYWwgdXNhZ2UJCQkJCSp2bXMtdXNhZ2UqCgpVc3VhbGx5LCB5b3Ugd2FudCB0byBydW4ganVzdCBvbmUgdmVyc2lvbiBvZiBWaW0gb24geW91ciBzeXN0ZW0sIHRoZXJlZm9yZQppdCBpcyBlbm91Z2ggdG8gZGVkaWNhdGUgb25lIGRpcmVjdG9yeSBmb3IgVmltLgpDb3B5IHRoZSB3aG9sZSBWaW0gcnVudGltZSBkaXJlY3Rvcnkgc3RydWN0dXJlIHRvIHRoZSBkZXBsb3ltZW50IHBvc2l0aW9uLgpBZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byB5b3VyIExPR0lOLkNPTSAoaW4gU1lTJExPR0lOIGRpcmVjdG9yeSkuClNldCB1cCB0aGUgbG9naWNhbCAkVklNIGFzOiA+CgoJJCBkZWZpbmUgVklNIGRldmljZTo8cGF0aD4KClNldCB1cCBzb21lIHN5bWJvbHM6ID4KCgkkICEgdmkgc3RhcnRzIFZpbSBpbiBjaHIuIG1vZGUuCgkkIHZpKm0gIDo9PSBtY3IgVklNOlZJTS5FWEUKCgkkICFndmkgc3RhcnRzIFZpbSBpbiBHVUkgbW9kZS4KCSQgZ3YqaW0gOj09IHNwYXduL25vd2FpdCBtY3IgVklNOlZJTS5FWEUgLWcKClBsZWFzZSwgY2hlY2sgdGhlIG5vdGVzIGZvciBjdXN0b21pemF0aW9uIGFuZCBjb25maWd1cmF0aW9uIG9mIHN5bWJvbHMuCgpZb3UgbWF5IHdhbnQgdG8gY3JlYXRlIC52aW1yYyBhbmQgLmd2aW1yYyBmaWxlcyBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5CihTWVMkTE9HSU4pIHRvIG92ZXJ3cml0ZSBkZWZhdWx0IHNldHRpbmdzLgoKVGhlIGVhc2llc3Qgd2F5IGlzIGp1c3QgcmVuYW1lIGV4YW1wbGUgZmlsZXMuICBZb3UgbWF5IGxlYXZlIHRoZSBtZW51IGZpbGUKKE1FTlUuVklNKSBhbmQgZmlsZXMgdmltcmMgYW5kIGd2aW1yYyBpbiB0aGUgb3JpZ2luYWwgJFZJTSBkaXJlY3RvcnkuICBJdCB3aWxsCmJlIHRoZSBkZWZhdWx0IHNldHVwIGZvciBhbGwgdXNlcnMsIGFuZCBmb3IgdXNlcnMgaXQgaXMgZW5vdWdoIHRvIGp1c3QgaGF2ZQp0aGVpciBvd24gYWRkaXRpb25zIG9yIHJlc2V0dGluZyBpbiB0aGVpciBob21lIGRpcmVjdG9yeSBpbiBmaWxlcyAudmltcmMgYW5kCi5ndmltcmMuICBJdCBzaG91bGQgd29yayB3aXRob3V0IHByb2JsZW1zLgoKTm90ZTogUmVtZW1iZXIsIHN5c3RlbSByYyBmaWxlcyAoZGVmYXVsdCBmb3IgYWxsIHVzZXJzKSBkb24ndCBoYXZlIGEgbGVhZGluZwoiLiIuICBTbywgc3lzdGVtIHJjIGZpbGVzIGFyZTogPgoKCSRWSU06dmltcmMKCSRWSU06Z3ZpbXJjCgkkVklNOm1lbnUudmltCgphbmQgdXNlciBjdXN0b21pemVkIHJjIGZpbGVzIGFyZTogPgoKCXN5cyRsb2dpbjoudmltcmMKCXN5cyRsb2dpbjouZ3ZpbXJjCgpZb3UgY2FuIGNoZWNrIHRoYXQgZXZlcnl0aGluZyBpcyBhdCB0aGUgcmlnaHQgcGxhY2Ugd2l0aCB0aGUgOnZlcnNpb24gY29tbWFuZC4KCkV4YW1wbGUgTE9HSU4uQ09NOiA+CgoJJCBkZWZpbmUvbm9sb2cgVklNIFJGMTA6W1VUSUwuVklNXQoJJCB2aSptIDo9PSBtY3IgVklNOlZJTS5FWEUKCSQgZ3YqaW06PT0gc3Bhd24vbm93YWl0L2lucHV0PU5MQTAgbWNyIFZJTTpWSU0uRVhFIC1nIC1HRU9NRVRSWSA4MHg0MAoJJCBzZXQgZGlzcC9jcmVhdGUvbm9kZT0xOTIuMTY4LjUuMjIzL3RyYW5zPXRjcGlwCgpOb3RlOiBUaGlzIHNldC11cCBzaG91bGQgYmUgZW5vdWdoLCBpZiB5b3UgYXJlIHdvcmtpbmcgb24gYSBzdGFuZGFsb25lIHNlcnZlciBvcgpjbHVzdGVyZWQgZW52aXJvbm1lbnQsIGJ1dCBpZiB5b3Ugd2FudCB0byB1c2UgVmltIGFzIGFuIGludGVybm9kZSBlZGl0b3IgaW4KREVDTkVUIGVudmlyb25tZW50LCBpdCB3aWxsIHNhdGlzZnkgYXMgd2VsbC4KWW91IGp1c3QgaGF2ZSB0byBkZWZpbmUgdGhlICJ3aG9sZSIgcGF0aDogPgoKCSQgZGVmaW5lIFZJTSAiPHNlcnZlcl9uYW1lPlsiInVzZXIgcGFzc3dvcmQiIl06OmRldmljZTo8cGF0aD4iCgkkIHZpKm0gOj09ICJtY3IgVklNOlZJTS5FWEUiCgpGb3IgZXhhbXBsZTogPgoKCSQgZGVmaW5lIFZJTSAiUExVVE86OlJGMTA6W1VUSUwuVklNXSIKCSQgZGVmaW5lIFZJTSAiUExVVE8iIlpBWSBteXBhc3MiIjo6UkYxMDpbVVRJTC5WSU1dIiAhIGlmIHBhc3N3ZCByZXF1aXJlZAoKWW91IGNhbiBhbHNvIHVzZSB0aGUgJFZJTVJVTlRJTUUgbG9naWNhbCB0byBwb2ludCB0byB0aGUgcHJvcGVyIHZlcnNpb24gb2YgVmltCmlmIHlvdSBoYXZlIGluc3RhbGxlZCBtb3JlIHZlcnNpb25zIGF0IHRoZSBzYW1lIHRpbWUuICBJZiAkVklNUlVOVElNRSBpcyBub3QKZGVmaW5lZCBWaW0gd2lsbCBib3Jyb3cgaXRzIHZhbHVlIGZyb20gdGhlICRWSU0gbG9naWNhbC4gIFlvdSBjYW4gZmluZCBtb3JlCmluZm9ybWF0aW9uIGFib3V0IHRoZSAkVklNUlVOVElNRSBsb2dpY2FsIGJ5IHR5cGluZyA6aGVscCBydW50aW1lIGFzIGEgVmltCmNvbW1hbmQuCgpTeXN0ZW0gYWRtaW5pc3RyYXRvcnMgbWlnaHQgd2FudCB0byBzZXQgdXAgYSBzeXN0ZW0gd2lkZSBWaW0gaW5zdGFsbGF0aW9uLAp0aGVuIGFkZCB0byB0aGUgU1lTJFNUQVJUVVA6U1lMT0dJQ0FMUy5DT00gPgoKCSQgZGVmaW5lL25vbG9nL3N5cyBWSU0gZGV2aWNlOjxwYXRoPgoJJCBkZWZpbmUvbm9sb2cvc3lzIFRNUCBTWVMkU0NSQVRDSAoKQW5kIHRvIHRoZSBTWVMkU1RBUlRVUDpTWUxPR0lOLkNPTSA+CgoJJCB2aSptIDo9PSBtY3IgVklNOlZJTS5FWEUKCSQgZ3YqaW06PT0gc3Bhd24vbm93YWl0L2lucHV0PU5MQTAgbWNyIFZJTTpWSU0uRVhFIC1nIC1HRU9NRVRSWSA4MHg0MAoKCkl0IHdpbGwgc2V0IHVwIGEgbm9ybWFsIFZpbSB3b3JrIGVudmlyb25tZW50IGZvciBldmVyeSB1c2VyIG9uIHRoZSBzeXN0ZW0uCgpJTVBPUlRBTlQ6IFZpbSBvbiBPcGVuVk1TIChhbmQgb24gb3RoZXIgY2FzZSBpbnNlbnNpdGl2ZSBzeXN0ZW0pIGNvbW1hbmQgbGluZQpwYXJhbWV0ZXJzIGFyZSBhc3N1bWVkIHRvIGJlIGxvd2VyY2FzZS4gSW4gb3JkZXIgdG8gaW5kaWNhdGUgdGhhdCBhIGNvbW1hbmQKbGluZSBwYXJhbWV0ZXIgaXMgdXBwZXJjYXNlICIvIiBzaWduIG11c3QgYmUgdXNlZC4KCkV4YW1wbGVzOgogID4KCXZpbSAtUiAgZmlsZW5hbWUgICEgbWVhbnM6IC1yIExpc3Qgc3dhcCBmaWxlcyBhbmQgZXhpdAoJdmltIC0vciBmaWxlbmFtZSAgISBtZWFuczogLVIgUmVhZG9ubHkgbW9kZSAobGlrZSAidmlldyIpCgl2aW0gLXUJPHZpbXJjPiAgICEgbWVhbnM6IC11IFVzZSA8dmltcmM+IGluc3RlYWQgb2YgYW55IC52aW1yYwoJdmltIC0vdSA8Z3ZpbXJjPiAgISBtZWFuczogLVUgVXNlIDxndmltcmM+IGluc3RlYWQgb2YgYW55IC5ndmltcmMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKNy4gR1VJIG1vZGUgcXVlc3Rpb25zCQkJCQkqdm1zLWd1aSoKCk9wZW5WTVMgaXMgYSByZWFsIG1haW5mcmFtZSBPUywgdGhlcmVmb3JlIGV2ZW4gaWYgaXQgaGFzIGEgR1VJIGNvbnNvbGUsIG1vc3QKb2YgdGhlIHVzZXJzIGRvIG5vdCB1c2UgYSBuYXRpdmUgWC9XaW5kb3cgZW52aXJvbm1lbnQgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24uCkl0IGlzIG5vdCBwb3NzaWJsZSB0byBzdGFydCBWaW0gaW4gR1VJIG1vZGUgImp1c3QgbGlrZSB0aGF0Ii4gIEJ1dCBhbnlob3cgaXQKaXMgbm90IHRvbyBjb21wbGljYXRlZCBlaXRoZXIuCgpGaXJzdCBvZiBhbGw6IHlvdSB3aWxsIG5lZWQgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGJ1aWx0IHdpdGggdGhlIEdVSSBlbmFibGVkLgoKU2Vjb25kOiB5b3UgbmVlZCB0byBoYXZlIGluc3RhbGxlZCBERUNXL01vdGlmIG9uIHlvdXIgVk1TIHNlcnZlciwgb3RoZXJ3aXNlCnlvdSB3aWxsIGdldCBlcnJvcnMgdGhhdCBzb21lIHNoYXJlYWJsZSBsaWJyYXJpZXMgYXJlIG1pc3NpbmcuCgpUaGlyZDogSWYgeW91IGNob29zZSB0byBydW4gVmltIHdpdGggZXh0cmEgZmVhdHVyZXMgc3VjaCBhcyBHVUkvR1RLIHRoZW4geW91Cm5lZWQgYSBHVEsgaW5zdGFsbGF0aW9uIHRvbyBvciBhdCBsZWFzdCBhIEdUSyBydW50aW1lIGVudmlyb25tZW50IChMSUJHVEsKY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vd3d3LnBvbGFyaG9tZS5jb20vdmltLykuCgoxKSBJZiB5b3UgYXJlIHdvcmtpbmcgb24gdGhlIFZNUyBYL01vdGlmIGNvbnNvbGU6CiAgIFN0YXJ0IFZpbSB3aXRoIHRoZSBjb21tYW5kOiA+CgoJJCBtYyBkZXZpY2U6PHBhdGg+VklNLkVYRSAtZwo8CiAgIG9yIHR5cGUgOmd1aSBhcyBhIGNvbW1hbmQgdG8gdGhlIFZpbSBjb21tYW5kIHByb21wdC4gIEZvciBtb3JlIGluZm8gOmhlbHAKICAgZ3VpCgoyKSBJZiB5b3UgYXJlIHdvcmtpbmcgb24gc29tZSBvdGhlciBYL1dpbmRvdyBlbnZpcm9ubWVudCBsaWtlIFVuaXggb3IgYSByZW1vdGUKICAgWCBWTVMgY29uc29sZS4gIFNldCB1cCBkaXNwbGF5IHRvIHlvdXIgaG9zdCB3aXRoOiA+CgoJJCBzZXQgZGlzcC9jcmVhdGUvbm9kZT08eW91ciBJUCBhZGRyZXNzPi90cmFucz08dHJhbnNwb3J0LW5hbWU+CjwKICAgYW5kIHN0YXJ0IFZpbSBhcyBpbiBwb2ludCAxLiAgWW91IGNhbiBmaW5kIG1vcmUgaGVscCBpbiBWTVMgZG9jdW1lbnRhdGlvbiBvcgogICB0eXBlOiBoZWxwIHNldCBkaXNwIGluIFZNUyBwcm9tcHQuCiAgIEV4YW1wbGVzOiA+CgoJJCBzZXQgZGlzcC9jcmVhdGUvbm9kZT0xOTIuMTY4LjUuMTU5CQkgISBkZWZhdWx0IHRyYW5zIGlzIERFQ25ldAoJJCBzZXQgZGlzcC9jcmVhdGUvbm9kZT0xOTIuMTY4LjUuMTU5L3RyYW5zPXRjcGlwICEgVENQL0lQIG5ldHdvcmsKCSQgc2V0IGRpc3AvY3JlYXRlL25vZGU9MTkyLjE2OC41LjE1OS90cmFucz1sb2NhbCAhIGRpc3BsYXkgb24gdGhlIHNhbWUgbm9kZQoKTm90ZTogeW91IHNob3VsZCBkZWZpbmUganVzdCBvbmUgb2YgdGhlc2UuCkZvciBtb3JlIGluZm9ybWF0aW9uIHR5cGUgJGhlbHAgc2V0IGRpc3AgaW4gVk1TIHByb21wdC4KCjMpIEFub3RoZXIgZWxlZ2FudCBzb2x1dGlvbiBpcyBYRE0gaWYgeW91IGhhdmUgaW5zdGFsbGVkIG9uIE9wZW5WTVMgYm94LgogICBJdCBpcyBwb3NzaWJsZSB0byB3b3JrIGZyb20gWERNIGNsaWVudCBhcyBmcm9tIEdVSSBjb25zb2xlLgoKNCkgSWYgeW91IGFyZSB3b3JraW5nIG9uIE1TLVdpbmRvd3Mgb3Igc29tZSBvdGhlciBub24gWC9XaW5kb3cgZW52aXJvbm1lbnQKICAgeW91IG5lZWQgdG8gc2V0IHVwIG9uZSBYIHNlcnZlciBhbmQgcnVuIFZpbSBhcyBpbiBwb2ludCAyLgogICBGb3IgTVMtV2luZG93cyB0aGVyZSBhcmUgYXZhaWxhYmxlIGZyZWUgWCBzZXJ2ZXJzIGFzIE1JWCwgT21uaSBYIGV0Yy4sCiAgIGFzIHdlbGwgYXMgZXhjZWxsZW50IGNvbW1lcmNpYWwgcHJvZHVjdHMgYXMgZVhjdXJzaW9uIG9yIFJlZmxlY3Rpb25YIHdpdGgKICAgYnVpbHQtaW4gREVDIHN1cHBvcnQuCgpQbGVhc2Ugbm90ZSwgdGhhdCBleGVjdXRhYmxlcyB3aXRob3V0IEdVSSBhcmUgc2xpZ2h0bHkgZmFzdGVyIGR1cmluZyBzdGFydHVwCnRoYW4gd2l0aCBlbmFibGVkIEdVSSBpbiBjaGFyYWN0ZXIgbW9kZS4gVGhlcmVmb3JlLCBpZiB5b3UgZG8gbm90IHVzZSBHVUkKZmVhdHVyZXMsIGl0IGlzIHdvcnRoIHRvIGNob29zZSBub24gR1VJIGV4ZWN1dGFibGVzLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cgo4LiBVc2VmdWwgbm90ZXMJCQkJCQkqdm1zLW5vdGVzKgoKOC4xIEJhY2tzcGFjZS9kZWxldGUKOC4yIEZpbHRlcnMKOC4zIFZNUyBmaWxlIHZlcnNpb24gbnVtYmVycwo4LjQgRGlyZWN0b3J5IGNvbnZlcnNpb24KOC41IFJlbW90ZSBob3N0IGludm9jYXRpb24KOC42IFRlcm1pbmFsIHByb2JsZW1zCjguNyBIZXgtZWRpdGluZyBhbmQgb3RoZXIgZXh0ZXJuYWwgdG9vbHMKOC44IFNvdXJjaW5nIHZpbXJjIGFuZCBndmltcmMKOC45IFByaW50aW5nIGZyb20gVmltCjguMTAgU2V0dGluZyB1cCB0aGUgc3ltYm9scwo4LjExIGRpZmYgYW5kIG90aGVyIEdOVSBwcm9ncmFtcwo4LjEyIGRpZmYtbW9kZQo4LjEzIEFsbG93ICckJyBpbiBDIGtleXdvcmRzCjguMTQgVklNVFVUT1IgZm9yIGJlZ2lubmVycwo4LjE1IFNsb3cgc3RhcnQgaW4gY29uc29sZSBtb2RlIGlzc3VlCjguMTYgQ29tbW9uIFZJTSBkaXJlY3RvcnkgLSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcwoKOC4xIEJhY2tzcGFjZS9kZWxldGUKClRoZXJlIGFyZSBiYWNrc3BhY2UvZGVsZXRlIGtleSBpbmNvbnNpc3RlbmNpZXMgd2l0aCBWTVMuCjpmaXhkZWwgZG9lc24ndCBkbyB0aGUgdHJpY2ssIGJ1dCB0aGUgc29sdXRpb24gaXM6ID4KCgk6aW5vcmVtYXAgXj8gXkgJCSIgZm9yIHRlcm1pbmFsIG1vZGUKCTppbm9yZW1hcCA8RGVsPiBeSAkiIGZvciBndWkgbW9kZQoKUmVhZCBtb3JlIGluIGNoOiA4LjYgKFRlcm1pbmFsIHByb2JsZW1zKS4KKEJydWNlIEh1bnNha2VyIDxCTkh1bnNha2VyQGNocS5ieXUuZWR1PiBWaW0gNS4zKQoKCjguMiBGaWx0ZXJzCgpWaW0gc3VwcG9ydHMgZmlsdGVycywgaS5lLiwgaWYgeW91IGhhdmUgYSBzb3J0IHByb2dyYW0gdGhhdCBjYW4gaGFuZGxlCmlucHV0L291dHB1dCByZWRpcmVjdGlvbiBsaWtlIFVuaXggKDxpbmZpbGUgPm91dGZpbGUpLCB5b3UgY291bGQgdXNlID4KCgk6bWFwIFxzIDAhJ2Fxc29ydDxDUj4KCihDaGFybGVzIEUuIENhbXBiZWxsLCBKci4gPGNlY0BncnlwaG9uLmdzZmMubmFzYS5nb3Y+IFZpbSA1LjQpCgoKOC4zIFZNUyBmaWxlIHZlcnNpb24gbnVtYmVycwoKVmltIGlzIHNhdmluZyBmaWxlcyBpbnRvIGEgbmV3IGZpbGUgd2l0aCB0aGUgbmV4dCBoaWdoZXIgZmlsZSB2ZXJzaW9uCm51bWJlciwgdHJ5IHRoZXNlIHNldHRpbmdzLiA+CgoJOnNldCBub2JhY2t1cAkgICAgICIgZG9lcyBub3QgY3JlYXRlICouKl8gYmFja3VwIGZpbGVzCgk6c2V0IG5vd3JpdGViYWNrdXAgICAiIGRvZXMgbm90IGhhdmUgYW55IHB1cnBvc2Ugb24gVk1TLiAgSXQncyB0aGUKCQkJICAgICAiIGRlZmF1bHQuCgpSZWNvdmVyeSBpcyB3b3JraW5nIHBlcmZlY3RseSBhcyB3ZWxsIGZyb20gdGhlIGRlZmF1bHQgc3dhcCBmaWxlLgpSZWFkIG1vcmUgd2l0aCA6aGVscCBzd2FwZmlsZQoKKENsYXVkZSBNYXJpbmllciA8Q2xhdWRlTWFyaW5pZXJAeHdhdmVzb2x1dGlvbnMuY29tPiBWaW0gNS41LCBab2x0YW4gQXJwYWRmZnkKVmltIDUuNikKCgo4LjQgRGlyZWN0b3J5IGNvbnZlcnNpb24KClZpbSB3aWxsIGludGVybmFsbHkgY29udmVydCBhbnkgdW5peC1zdHlsZSBwYXRocyBhbmQgZXZlbiBtaXhlZCB1bml4L1ZNUwpwYXRocyBpbnRvIFZNUyBzdHlsZSBwYXRocy4gIFNvbWUgdHlwaWNhbCBjb252ZXJzaW9ucyByZXNlbWJsZToKCgkvYWJjL2RlZi9naGkJCS0+IGFiYzpbZGVmXWdoaS4KCS9hYmMvZGVmL2doaS5qCQktPiBhYmM6W2RlZl1naGkuagoJL2FiYy9kZWYvZ2hpLmo7MgktPiBhYmM6W2RlZl1naGkuajsyCgkvYWJjL2RlZi9naGkvamtsL21ubwktPiBhYmM6W2RlZi5naGkuamtsXW1uby4KCWFiYzpbZGVmLmdoaV1qa2wvbW5vCS0+IGFiYzpbZGVmLmdoaS5qa2xdbW5vLgoJICAuLwkJCS0+IGN1cnJlbnQgZGlyZWN0b3J5CgkgIC4uLwkJCS0+IHJlbGF0aXZlIHBhcmVudCBkaXJlY3RvcnkKCSAgWy5kZWYuZ2hpXQkJLT4gcmVsYXRpdmUgY2hpbGQgZGlyZWN0b3J5CgkgICAuL2RlZi9naGkJCS0+IHJlbGF0aXZlIGNoaWxkIGRpcmVjdG9yeQoKTm90ZTogWW91IG1heSB1c2UgPCw+IGJyYWNrZXRzIGFzIHdlbGwgKGRldmljZTo8cGF0aD5maWxlLmV4dDt2ZXJzaW9uKSBhcwpyZjEwOjx1c2VyLnpheS53b3JrPnRlc3QuYzsxCgooRGF2aWQgRWxpbnMgPGRlbGluc0Bmb2xpYWdlLmNvbT4sIEplcm9tZSBMYXVyZXQKPEpMQVVSRVRAbWFpbC5jaGVtLnN1bnlzYi5lZHU+IFZpbSA1LjYpCgoKOC41IFJlbW90ZSBob3N0IGludm9jYXRpb24KCkl0IGlzIHBvc3NpYmxlIHRvIHVzZSBWaW0gYXMgYW4gaW50ZXJub2RlIGVkaXRvci4KMS4gRWRpdCBzb21lIGZpbGUgZnJvbSByZW1vdGUgbm9kZTogPgoKCXZpICI8c2VydmVyPiIidXNlcm5hbWUgcGFzc3dkIiI6OjxkZXZpY2U+OjxwYXRoPjxmaWxlbmFtZT47PHZlcnNpb24+IgoKRXhhbXBsZTogPgoJdmkgInBsdXRvIiJ6YXkgcGFzc3dkIiI6OlJGMTA6PFVTRVIuWkFZLldPUks+VEVTVC5DOzEiCgpOb3RlOiBzeW50YXggaXMgdmVyeSBpbXBvcnRhbnQsIG90aGVyd2lzZSBWTVMgd2lsbCByZWNvZ25pemUgbW9yZSBwYXJhbWV0ZXJzCmluc3RlYWQgb2Ygb25lIChyZXN1bHRpbmcgd2l0aDogZmlsZSBub3QgZm91bmQpCgoyLiAgU2V0IHVwIFZpbSBhcyB5b3VyIGludGVybm9kZSBlZGl0b3IuICBJZiBWaW0gaXMgbm90IGluc3RhbGxlZCBvbiB5b3VyCmhvc3QsIGp1c3Qgc2V0IHVwIHlvdXIgSVAgYWRkcmVzcywgdGhlIGZ1bGwgVmltIHBhdGggaW5jbHVkaW5nIHRoZSBzZXJ2ZXIgbmFtZQphbmQgcnVuIHRoZSBjb21tYW5kIHByb2NlZHVyZSBiZWxvdzogPgoKCSQgaWYgKHAxIC5lcXMuICIiKSAuT1IuIChwMiAuZXFzLiAiIikgdGhlbiBnb3RvIHVzYWdlCgkkIHNldCBkaXNwL2NyZWF0ZS9ub2RlPTx5b3VyX0lQX2hlcmU+L3RyYW5zPXRjcGlwCgkkIGRlZmluZSAiVklNICI8dmltX3NlcnZlcj4iIicncDEnICcncDInIiI6OjxkZXZpY2U+Ojx2aW1fcGF0aD4iCgkkICB2aSptIDo9PSAibWNyIFZJTTpWSU0uRVhFIgoJJCBndippbSA6PT0gInNwYXduL25vd2FpdCBtY3IgVklNOlZJTS5FWEUgLWciCgkkIGdvdG8gZW5kCgkkIHVzYWdlOgoJJCB3cml0ZSBzeXMkb3V0cHV0ICIgUGxlYXNlIGVudGVyIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcyBhIHBhcmFtZXRlci4iCgkkIHdyaXRlIHN5cyRvdXRwdXQgIiBFeGFtcGxlOiBAU0VUVklNLkNPTSB1c2VybmFtZSBwYXNzd2QiCgkkIGVuZDoKCk5vdGU6IE5ldmVyIHVzZSBpdCBpbiBhIGNsdXN0ZXJlZCBlbnZpcm9ubWVudCAoeW91IGRvIG5vdCBuZWVkIGl0KSwgbG9hZGluZwpjb3VsZCBiZSB2ZXJ5LXZlcnkgc2xvdywgYnV0IGV2ZW4gZmFzdGVyIHRoYW4gYSBsb2NhbCBFbWFjcy4gOi0pCgooWm9sdGFuIEFycGFkZmZ5LCBWaW0gNS42KQoKCjguNiBUZXJtaW5hbCBwcm9ibGVtcwoKSWYgeW91ciB0ZXJtaW5hbCBuYW1lIGlzIG5vdCBrbm93biB0byBWaW0gYW5kIGl0IGlzIHRyeWluZyB0byBmaW5kIHRoZSBkZWZhdWx0Cm9uZSB5b3Ugd2lsbCBnZXQgdGhlIGZvbGxvd2luZyBtZXNzYWdlIGR1cmluZyBzdGFydC11cDoKLS0tClRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtY2FwCid1bmtub3duLXRlcm1pbmFsJyBub3Qga25vd24uICBBdmFpbGFibGUgYnVpbHQtaW4gdGVybWluYWxzIGFyZToKICAgIGJ1aWx0aW5fZ3VpCiAgICBidWlsdGluX3Jpc2NvcwogICAgYnVpbHRpbl9hbWlnYQogICAgYnVpbHRpbl9iZW9zLWFuc2kKICAgIGJ1aWx0aW5fYW5zaQogICAgYnVpbHRpbl92dDMyMAogICAgYnVpbHRpbl92dDUyCiAgICBidWlsdGluX3BjYW5zaQogICAgYnVpbHRpbl93aW4zMgogICAgYnVpbHRpbl94dGVybQogICAgYnVpbHRpbl9pcmlzLWFuc2kKICAgIGJ1aWx0aW5fZGVidWcKICAgIGJ1aWx0aW5fZHVtYgpkZWZhdWx0aW5nIHRvICd2dDMyMCcKLS0tClRoZSBzb2x1dGlvbiBpcyB0byBkZWZpbmUgdGhlIGRlZmF1bHQgdGVybWluYWwgbmFtZTogPgoKCSQgISB1bmtub3duIHRlcm1pbmFsIG5hbWUuICBMZXQgdXMgdXNlIHZ0MzIwIG9yIGFuc2kgaW5zdGVhZC4KCSQgISBOb3RlOiBpdCdzIGNhc2Ugc2Vuc2l0aXZlCgkkIGRlZmluZSB0ZXJtICJ2dDMyMCIKClRlcm1pbmFscyBmcm9tIFZUMTAwIHRvIFZUMzIwIChhcyBWMzAwLCBWVDIyMCwgVlQyMDApIGRvIG5vdCBuZWVkIGFueSBleHRyYQprZXlib2FyZCBtYXBwaW5ncy4gIFRoZXkgc2hvdWxkIHdvcmsgcGVyZmVjdGx5IGFzIHRoZXkgYXJlLCBpbmNsdWRpbmcgYXJyb3dzLApJbnMsIERlbCBidXR0b25zIGV0Yy4sIGV4Y2VwdCBCYWNrc3BhY2UgaW4gR1VJIG1vZGUuICBUbyBzb2x2ZSBpdCwgYWRkIHRvCi5ndmltcmM6ID4KCglpbm9yZW1hcCA8RGVsPiA8QlM+CgpWaW0gd2lsbCBhbHNvIHJlY29nbml6ZSB0aGF0IHRoZXkgYXJlIGZhc3QgdGVybWluYWxzLgoKSWYgeW91IGhhdmUgc29tZSBhbm5veWluZyBsaW5lIGp1bXBpbmcgb24gdGhlIHNjcmVlbiBiZXR3ZWVuIHdpbmRvd3MgYWRkIHRvCnlvdXIgLnZpbXJjIGZpbGU6ID4KCglzZXQgdHR5ZmFzdAkiIHNldCBmYXN0IHRlcm1pbmFsCgpOb3RlOiBpZiB5b3UncmUgdXNpbmcgVmltIG9uIHJlbW90ZSBob3N0IG9yIHRocm91Z2ggYSB2ZXJ5IHNsb3cgY29ubmVjdGlvbiwgaXQncwpyZWNvbW1lbmRlZCB0byBhdm9pZCB0aGUgZmFzdCB0ZXJtaW5hbCBvcHRpb24gd2l0aDogPgoKCXNldCBub3R0eWZhc3QgICAiIHNldCB0ZXJtaW5hbCB0byBzbG93IG1vZGUKCihab2x0YW4gQXJwYWRmZnksIFZpbSA1LjYpCgoKOC43IEhleC1lZGl0aW5nIGFuZCBvdGhlciBleHRlcm5hbCB0b29scwoKQSB2ZXJ5IGltcG9ydGFudCBkaWZmZXJlbmNlIGJldHdlZW4gT3BlblZNUyBhbmQgb3RoZXIgc3lzdGVtcyBpcyB0aGF0IFZNUyB1c2VzCnNwZWNpYWwgY29tbWFuZHMgdG8gZXhlY3V0ZSBleGVjdXRhYmxlczogPgoKCVJVTiA8cGF0aD5maWxlbmFtZQoJTUNSIDxwYXRoPmZpbGVuYW1lIDxwYXJhbWV0ZXJzPgoKT3BlblZNUyB1c2VycyBhbHdheXMgaGF2ZSB0byBiZSBhd2FyZSB0aGF0IHRoZSBWaW0gY29tbWFuZCA6ISAianVzdCIgZHJvcCB0aGVtCnRvIERDTCBwcm9tcHQuICBUaGlzIGZlYXR1cmUgaXMgcG9zc2libGUgdG8gdXNlIHdpdGhvdXQgYW55IHByb2JsZW0gd2l0aCBhbGwKRENMIGNvbW1hbmRzLCBidXQgaWYgd2Ugd2FudCB0byBleGVjdXRlIHNvbWUgcHJvZ3JhbXMgc3VjaCBhcyBYWEQsIENUQUdTLCBKVEFHUywKZXRjLiAgd2UncmUgcnVubmluZyBpbnRvIHRyb3VibGUgaWYgd2UgZm9sbG93IHRoZSBWaW0gZG9jdW1lbnRhdGlvbiAoc2VlOiBoZWxwCnh4ZCkuCgpTb2x1dGlvbjogRXhlY3V0ZSB3aXRoIHRoZSBNQyBjb21tYW5kIGFuZCBhZGQgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZXhlY3V0YWJsZS4KRXhhbXBsZTogSW5zdGVhZCBvZiA6JSF4eGQgY29tbWFuZCB1c2U6ID4KCgk6JSFtYyB2aW06eHhkCgouLi4gb3IgaW4gZ2VuZXJhbDogPgoJOiFtYyA8cGF0aD5maWxlbmFtZSA8cGFyYW1ldGVycz4KCk5vdGU6IFlvdSBjYW4gdXNlIFhYRCBhbmQgQ1RBR1MgZnJvbSBHVUkgbWVudS4KClRvIGN1c3RvbWl6ZSBjdGFncyBpdCBpcyBwb3NzaWJsZSB0byBkZWZpbmUgdGhlIGxvZ2ljYWwgJENUQUdTIHdpdGggc3RhbmRhcmQKcGFyYW1ldGVycyBhczogPgoKCWRlZmluZS9ub2xvZyBDVEFHUyAiLS10b3RhbHMgLW8gc3lzJGxvZ2luOnRhZ3MiCgpGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlYWQgOmhlbHAgdGFnc2VhcmNoIGFuZCBDVEFHUwpkb2N1bWVudGF0aW9uIGF0IGh0dHA6Ly9jdGFncy5zb3VyY2Vmb3JnZS5uZXQvY3RhZ3MuaHRtbC4KCihab2x0YW4gQXJwYWRmZnksIFZpbSA1LjYtNzApCgoKOC44IFNvdXJjaW5nIHZpbXJjIGFuZCBndmltcmMKCklmIHlvdSB3YW50IHRvIHVzZSB5b3VyIC52aW1yYyBhbmQgLmd2aW1yYyBmcm9tIG90aGVyIHBsYXRmb3JtcyAoZS5nLiBXaW5kb3dzKQp5b3UgY2FuIGdldCBpbiB0cm91YmxlIGlmIHlvdSBmdHAgdGhhdCBmaWxlKHMpOiBWTVMgaGFzIGRpZmZlcmVudCBlbmQtb2YtbGluZQppbmRpY2F0aW9uLgpUaGUgc3ltcHRvbSBpcyB0aGF0IFZpbSBpcyBub3Qgc291cmNpbmcgeW91ciAudmltcmMvLmd2aW1yYywgZXZlbiBpZiB5b3Ugc2F5Ogo+Cgk6c28gc3lzJGxvZ2luOi52aW1yYwoKT25lIHRyaWNrIGlzIHRvIGNvbXByZXNzIChlLmcuIHppcCkgdGhlIGZpbGVzIG9uIHRoZSBvdGhlciBwbGF0Zm9ybSBhbmQKdW5jb21wcmVzcyBpdCBvbiBWTVM7IGlmIHlvdSBoYXZlIHRoZSBzYW1lIHN5bXB0b20sIHRyeSB0byBjcmVhdGUgdGhlIGZpbGVzCndpdGggY29weS1wYXN0ZSAoZm9yIHRoaXMgeW91IG5lZWQgYm90aCBvcC4gc3lzdGVtcyByZWFjaGFibGUgZnJvbSBvbmUKbWFjaGluZSwgZS5nLiBhbiBYdGVybSBvbiBXaW5kb3dzIG9yIHRlbG5ldCB0byBXaW5kb3dzIGZyb20gVk1TKS4KCihTYW5kb3IgS29wYW55aSwgPHNhbmRvci5rb3BhbnlpQG1haWxib3guaHU+IFZpbSA2LjBhKQoKCjguOSBQcmludGluZyBmcm9tIFZpbQoKVG8gYmUgYWJsZSB0byBwcmludCBmcm9tIFZpbSAocnVubmluZyBpbiBHVUkgbW9kZSkgdW5kZXIgVk1TIHlvdSBoYXZlIHRvIHNldAp1cCAkVE1QIGxvZ2ljYWwgd2hpY2ggc2hvdWxkIHBvaW50IHRvIHNvbWUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhbmQgbG9naWNhbApTWVMkUFJJTlQgdG8geW91ciBkZWZhdWx0IHByaW50IHF1ZXVlLgpFeGFtcGxlOiA+CgoJJGRlZmluZSBTWVMkUFJJTlQgSFA1QU5TSQoKWW91IGNhbiBwcmludCBvdXQgdGhlIHdob2xlIGJ1ZmZlciBvciBqdXN0IHRoZSBtYXJrZWQgYXJlYS4KTW9yZSBpbmZvIHVuZGVyIDpoZWxwIGhhcmRjb3B5CgooWm9sdGFuIEFycGFkZmZ5LCBWaW0gNi4wYykKCgo4LjEwIFNldHRpbmcgdXAgdGhlIHN5bWJvbHMKCldoZW4gSSB1c2UgR1ZJTSB0aGlzIHdheSBhbmQgcHJlc3MgQ1RSTC1ZIGluIHRoZSBwYXJlbnQgdGVybWluYWwsIGd2aW0gZXhpdHMuCkkgbm93IHVzZSBhIGRpZmZlcmVudCBzeW1ib2wgdGhhdCBzZWVtcyB0byB3b3JrIE9LIGFuZCBmaXhlcyB0aGUgcHJvYmxlbS4KSSBzdWdnZXN0IHRoaXMgaW5zdGVhZDogPgoKCSQgR1YqSU06PT1TUEFXTi9OT1dBSVQvSU5QVVQ9TkxBMDogTUNSIFZJTTpWSU0uRVhFIC1HIC1HRU9NRVRSWSA4MFg0MAoKVGhlIC9JTlBVVD1OTEEwOiBzZXBhcmF0ZXMgdGhlIHN0YW5kYXJkIGlucHV0IG9mIHRoZSBndmltIHByb2Nlc3MgZnJvbSB0aGUKcGFyZW50IHRlcm1pbmFsLCB0byBibG9jayBzaWduYWxzIGZyb20gdGhlIHBhcmVudCB3aW5kb3cuCldpdGhvdXQgdGhlIC1HRU9NRVRSWSwgdGhlIEdWSU0gd2luZG93IHNpemUgd2lsbCBiZSBtaW5pbWFsIGFuZCB0aGUgbWVudQp3aWxsIGJlIGNvbmZ1c2VkIGFmdGVyIGEgd2luZG93LXJlc2l6ZS4KCihDYXJsbyBNZWtlbmthbXAsIENvZW4gRW5nZWxiYXJ0cywgVmltIDYuMGFjKQoKCjguMTEgZGlmZiBhbmQgb3RoZXIgR05VIHByb2dyYW1zCgpGcm9tIDYuMCBkaWZmIGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gaW1wbGVtZW50ZWQsIGJ1dCBPcGVuVk1TIGRvZXMgbm90IHVzZQpHTlUvVW5peCBsaWtlIGRpZmYgdGhlcmVmb3JlIGJ1aWx0IGluIGRpZmYgZG9lcyBub3Qgd29yay4KVGhlcmUgaXMgYSBzaW1wbGUgc29sdXRpb24gdG8gc29sdmUgdGhpcyBhbm9tYWx5LiAgSW5zdGFsbCBhIFVuaXggbGlrZSBkaWZmCmFuZCBWaW0gd2lsbCB3b3JrIHBlcmZlY3RseSBpbiBkaWZmIG1vZGUgdG9vLiAgWW91IGp1c3QgaGF2ZSB0byByZWRlZmluZSB5b3VyCmRpZmYgcHJvZ3JhbSBhczogPgoKCWRlZmluZSAvbm9sb2cgZGlmZiA8R05VX1BBVEg+ZGlmZi5leGUKCkFub3RoZXIsIG1vcmUgc29waGlzdGljYXRlZCBzb2x1dGlvbiBpcyBkZXNjcmliZWQgYmVsb3cgKDguMTIgZGlmZi1tb2RlKQpUaGVyZSBhcmUgb3RoZXIgcHJvZ3JhbXMgc3VjaCBhcyBwYXRjaCwgbWFrZSBldGMgdGhhdCBtYXkgY2F1c2UgdGhlIHNhbWUKcHJvYmxlbXMuICBBdCB3d3cucG9sYXJob21lLmNvbSBpcyBwb3NzaWJsZSB0byBkb3dubG9hZCBhbiBHTlUgcGFja2FnZSBmb3IKQWxwaGEgYW5kIFZBWCBib3hlcyB0aGF0IGlzIG1lYW50IHRvIHNvbHZlIEdOVSBwcm9ibGVtcyBvbiBPcGVuVk1TLgooWm9sdGFuIEFycGFkZmZ5LCBWaW0gNi4xKQoKCjguMTIgZGlmZi1tb2RlCgpWaW0gNi4wIGFuZCBoaWdoZXIgc3VwcG9ydHMgVmltIGRpZmYtbW9kZSAoU2VlIHxuZXctZGlmZi1tb2RlfCwgfGRpZmYtbW9kZXwKYW5kIHwwOC43fCkuICBUaGlzIHVzZXMgdGhlIGV4dGVybmFsIHByb2dyYW0gJ2RpZmYnIGFuZCBleHBlY3RzIGEgVW5peC1saWtlCm91dHB1dCBmb3JtYXQgZnJvbSBkaWZmLiAgVGhlIHN0YW5kYXJkIFZNUyBkaWZmIGhhcyBhIGRpZmZlcmVudCBvdXRwdXQKZm9ybWF0LiAgVG8gdXNlIFZpbSBvbiBWTVMgaW4gZGlmZi1tb2RlLCB5b3UgbmVlZCB0bzoKICAgIDEgSW5zdGFsbCBhIFVuaXgtbGlrZSBkaWZmIHByb2dyYW0sIGUuZy4gR05VIGRpZmYKICAgIDIgVGVsbCBWaW0gdG8gdXNlIHRoZSBVbml4LWxpa2UgZGlmZiBmb3IgZGlmZi1tb2RlLgoKWW91IGNhbiBkb3dubG9hZCBHTlUgZGlmZiBmcm9tIHRoZSBWSU0tVk1TIHdlYnNpdGUsIGl0IGlzIG9uZSBvZiB0aGUgR05VCnRvb2xzIGluIGh0dHA6Ly93d3cucG9sYXJob21lLmNvbS92aW0vZmlsZXMvZ251X3Rvb2xzLnppcC4gIEkgc3VnZ2VzdCB0bwp1bnBhY2sgaXQgaW4gYSBzZXBhcmF0ZSBkaXJlY3RvcnkgIkdOVSIgYW5kIGNyZWF0ZSBhIGxvZ2ljYWwgR05VOiB0aGF0CnBvaW50cyB0byB0aGF0IGRpcmVjdG9yeSwgZS5nOiA+CgogICBERUZJTkUgR05VICAgIDxESVNLPjpbPERJUkVDVE9SWT4uQklOLkdOVV0KCllvdSBtYXkgYWxzbyB3YW50IHRvIGRlZmluZSBhIHN5bWJvbCBHRElGRiwgdG8gdXNlIHRoZSBHTlUgZGlmZiBmcm9tIHRoZSBEQ0wKcHJvbXB0OiA+CgogICBHRElGRiA6PT0gICAgICRHTlU6RElGRi5FWEUKCk5vdyB5b3UgbmVlZCB0byB0ZWxsIFZpbSB0byB1c2UgdGhlIG5ldyBkaWZmIHByb2dyYW0uICBUYWtlIHRoZSBleGFtcGxlCnNldHRpbmdzIGZyb20gfGRpZmYtZGlmZmV4cHJ8IGFuZCBjaGFuZ2UgdGhlIGNhbGwgdG8gdGhlIGV4dGVybmFsIGRpZmYKcHJvZ3JhbSB0byB0aGUgbmV3IGRpZmYgb24gVk1TLiAgQWRkIHRoaXMgdG8geW91ciAudmltcmMgZmlsZTogPgoKICAgICAiIFNldCB1cCB2aW1kaWZmIG9wdGlvbnMKICAgICAgIGlmIHY6dmVyc2lvbiA+PSA2MDAKCSIgVXNlIEdOVSBkaWZmIG9uIFZNUwoJc2V0IGRpZmZleHByPU15RGlmZigpCglmdW5jdGlvbiBNeURpZmYoKQoJICAgbGV0IG9wdCA9ICIiCgkgICBpZiAmZGlmZm9wdCA9fiAiaWNhc2UiCgkgICAgIGxldCBvcHQgPSBvcHQgLiAiLWkgIgoJICAgZW5kaWYKCSAgIGlmICZkaWZmb3B0ID1+ICJpd2hpdGUiCgkgICAgIGxldCBvcHQgPSBvcHQgLiAiLWIgIgoJICAgZW5kaWYKCSAgIHNpbGVudCBleGVjdXRlICIhbWMgR05VOmRpZmYuZXhlIC1hICIgLiBvcHQgLiB2OmZuYW1lX2luIC4gIiAiIC4gIHY6Zm5hbWVfbmV3IC4KCQlcICAiID4gIiAuIHY6Zm5hbWVfb3V0CgllbmRmdW5jdGlvbgogICAgICBlbmRpZgoKWW91IGNhbiBub3cgdXNlIFZpbSBpbiBkaWZmLW1vZGUsIGUuZy4gdG8gY29tcGFyZSB0d28gZmlsZXMgaW4gcmVhZC1vbmx5Cm1vZGU6ID4KCiAgICAkIFZJTSAtRC9SIDxGSUxFMT4gPEZJTEUyPgoKWW91IGNhbiBhbHNvIGRlZmluZSBuZXcgc3ltYm9scyBmb3IgdmltZGlmZiwgZS5nLjogPgoKICAgICQgVklNRElGRiAgICAgOj09ICdWSU0nIC1EL1IKICAgICQgR1ZJTURJRkYgICAgOj09ICdHVklNJyAtRC9SCgpZb3UgY2FuIG5vdyBjb21wYXJlIGZpbGVzIGluIDQgd2F5czogPgoKICAgIDEuIFZNUyAgZGlmZjogICQgRElGRiAgICAgPEZJTEUxPiA8RklMRTI+CiAgICAyLiBHTlUgIGRpZmY6ICAkIEdESUZGICAgIDxGSUxFMT4gPEZJTEUyPgogICAgMy4gVklNICBkaWZmOiAgJCBWSU1ESUZGICA8RklMRTE+IDxGSUxFMj4KICAgIDQuIEdWSU0gZGlmZjogICQgR1ZJTURJRkYgPEZJTEUxPiA8RklMRTI+CgooQ29lbiBFbmdlbGJhcnRzLCBWaW0gNi4xKQoKCjguMTMgQWxsb3cgJyQnIGluIEMga2V5d29yZHMKCkRFQyBDIHVzZXMgbWFueSBpZGVudGlmaWVycyB3aXRoICckJyBpbiB0aGVtLiAgVGhpcyBpcyBub3QgYWxsb3dlZCBpbiBBTlNJIEMsCmFuZCBWaW0gcmVjb2duaXNlcyB0aGUgJyQnIGFzIHRoZSBlbmQgb2YgdGhlIGlkZW50aWZpZXIuICBZb3UgY2FuIGNoYW5nZSB0aGlzCndpdGggdGhlICdpc2tleXdvcmQnIG9wdGlvbi4KQWRkIHRoaXMgY29tbWFuZCB0byB5b3VyIC52aW1yYyBmaWxlOiA+CgogICAgYXV0b2NtZCBGaWxlVHlwZSBjLGNwcCxjcyAgc2V0IGlza2V5d29yZCs9JAoKWW91IGNhbiBhbHNvIGNyZWF0ZSB0aGUgZmlsZShzKSAkVklNL0ZUUExVR0lOL0MuVklNIChhbmQvb3IgQ1BQLlZJTSBhbmQKQ1MuVklNKSBhbmQgYWRkIHRoaXMgY29tbWFuZDogPgoKCXNldCBpc2tleXdvcmQrPSQKCk5vdyB3b3JkLWJhc2VkIGNvbW1hbmRzLCBlLmcuIHRoZSAnKictc2VhcmNoLWNvbW1hbmQgYW5kIHRoZSBDVFJMLV0KdGFnLWxvb2t1cCwgd29yayBvbiB0aGUgd2hvbGUgaWRlbnRpZmllci4gIChDdGFncyBvbiBWTVMgYWxzbyBzdXBwb3J0cyAnJCcgaW4KQyBrZXl3b3JkcyBzaW5jZSBjdGFncyB2ZXJzaW9uIDUuMS4pCgooQ29lbiBFbmdlbGJhcnRzLCBWaW0gNi4xKQoKOC4xNCBWSU1UVVRPUiBmb3IgYmVnaW5uZXJzCgpUaGUgVklNVFVUT1IuQ09NIERDTCBzY3JpcHQgY2FuIGhlbHAgVmltIGJlZ2lubmVycyB0byBsZWFybi9tYWtlIHRoZWlyIGZpcnN0CnN0ZXBzIHdpdGggVmltIG9uIE9wZW5WTVMuICBEZXBlbmRpbmcgb2YgYmluYXJ5IGRpc3RyaWJ1dGlvbiB5b3UgbWF5IHN0YXJ0IGl0CndpdGg6ID4KCglAdmltOnZpbXR1dG9yCgooVGhvbWFzLlIuV3lhbnQgSUlJLCBWaW0gNi4xKQoKOC4xNiBTbG93IHN0YXJ0IGluIGNvbnNvbGUgbW9kZSBpc3N1ZQoKQXMgR1VJL0dUSyBWaW0gd29ya3MgZXF1YWxseSB3ZWxsIGluIGNvbnNvbGUgbW9kZSwgbWFueSBhZG1pbmlzdHJhdG9ycwpkZXBsb3kgdGhvc2UgZXhlY3V0YWJsZXMgc3lzdGVtIHdpZGUuClVuZm9ydHVuYXRlbHksIG9uIGEgcmVtb3RlIHNsb3cgY29ubmVjdGlvbnMgR1VJL0dUSyBleGVjdXRhYmxlcyBiZWhhdmUgcmF0aGVyCnNsb3cgd2hlbiB1c2VyIHdhbnRzIHRvIHJ1biBWaW0ganVzdCBpbiB0aGUgY29uc29sZSBtb2RlIC0gYmVjYXVzZSBvZiBYCmVudmlyb25tZW50IGRldGVjdGlvbiB0aW1lb3V0LgoKTHVja2lseSwgdGhlcmUgaXMgYSBzaW1wbGUgc29sdXRpb24gZm9yIHRoYXQuIEFkbWluaXN0cmF0b3JzIG5lZWQgdG8gZGVwbG95CmJvdGggR1VJL0dUSyBidWlsZCBhbmQganVzdCBjb25zb2xlIGJ1aWxkIGV4ZWN1dGFibGVzLCBsaWtlIGJlbG93OiA+CgogICAgfC0gdmltNzMKICAgIHwtLS0tLSBkb2MKICAgIHwtLS0tLSBzeW50YXgKICAgICAgIHZpbXJjICAgIChzeXN0ZW0gcmMgZmlsZXMpCiAgICAgICBndmltcmMKICAgICAgIGd2aW0uZXhlICh0aGUgcmVuYW1lZCBHVUkgb3IgR1RLIGJ1aWx0IHZpbS5leGUpCiAgICAgICB2aW0uZXhlICAodGhlIGNvbnNvbGUgb25seSBleGVjdXRhYmxlKQoKRGVmaW5lIHN5c3RlbSBzeW1ib2xzIGxpa2UgYmVsb3cgaW4gZm9yIGV4IGluIExPR0lOLkNPTSBvciBTWUxPR0lOLkNPTTogPgoKCSQgZGVmaW5lL25vbG9nIFZJTSBSRjEwOltVVElMLlZJTTczXSAhIHdoZXJlIHlvdSBWSU0gZGlyZWN0b3J5IGlzCgkkIHZpKm0gIDo9PSBtY3IgVklNOlZJTS5FWEUKCSQgZ3ZpKm0gOj09IG1jciBWSU06R1ZJTS5FWEUKCSQgISBvciB5b3UgY2FuIHRyeSB0byBzcGF3biB3aXRoCgkkIGd2KmltIDo9PSBzcGF3bi9ub3dhaXQvaW5wdXQ9TkxBMCBtY3IgVklNOkdWSU0uRVhFIC1nIC1HRU9NRVRSWSA4MHg0MAoKCkxpa2UgdGhpcywgdXNlcnMgdGhhdCBkbyBub3QgaGF2ZSBYIGVudmlyb25tZW50IGFuZCB3YW50IHRvIHVzZSBWaW0ganVzdCBpbgpjb25zb2xlIG1vZGUgY2FuIGF2b2lkIHBlcmZvcm1hbmNlIHByb2JsZW1zLgoKKFpvbHRhbiBBcnBhZGZmeSwgVmltIDcuMikKCjguMTUgQ29tbW9uIFZJTSBkaXJlY3RvcnkgLSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcwoKSW4gYSBjbHVzdGVyIHRoYXQgY29udGFpbnMgbm9kZXMgd2l0aCBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyBsaWtlIGJlbG93OgoKJHNob3cgY2x1c3RlcgpWaWV3IG9mIENsdXN0ZXIgZnJvbSBzeXN0ZW0gSUQgMTE2NTUgIG5vZGU6IFRPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4LUFVRy0yMDA4IDExOjU4OjMxCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCqYgICAgICAgIFNZU1RFTVMgICAgICAgIKYgTUVNQkVSUyCmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS2mCqYgIE5PREUgIKYgICBTT0ZUV0FSRSAgIKYgIFNUQVRVUyCmCistLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS2mCqYgVE9SICAgIKYgVk1TIFY3LjMtMiAgIKYgTUVNQkVSICCmCqYgVElUQU4yIKYgVk1TIFY4LjMgICAgIKYgTUVNQkVSICCmCqYgT0RJTiAgIKYgVk1TIFY3LjMtMiAgIKYgTUVNQkVSICCmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgpJdCBpcyBjb252ZW5pZW50IHRvIGhhdmUgYSBjb21tb24gVklNIGRpcmVjdG9yeSBidXQgZXhlY3V0ZSBkaWZmZXJlbnQKZXhlY3V0YWJsZXMuClRoZXJlIGFyZSBzZXZlcmFsIHNvbHV0aW9ucyBmb3IgdGhpcyBwcm9ibGVtOgoKU29sdXRpb24gMS4gIEFsbCBleGVjdXRhYmxlcyBpbiB0aGUgc2FtZSBkaXJlY3Rvcnkgd2l0aCBkaWZmZXJlbnQgbmFtZXMKVGhpcyBpcyBlYXNpbHkgZG9uZSB3aXRoIHRoZSBmb2xsb3dpbmcgc2NyaXB0IHRoYXQgY2FuIGJlIGFkZGVkCnRvIHRoZSBsb2dpbi5jb20gb3Igc3lsb2dpbi5jb206ID4KCgkkIGlmIGYkZ2V0c3lpKCJOT0RFX0hXVFlQRSIpIC5lcXMuICJWQVgiCgkkIHRoZW4KCSQgICAgICAgc2F5ICJWQVggcGxhdGZvcm0iCgkkICAgICAgIHZpKm06PT0gbWNyIHZpbTpWSU0uRVhFX1ZBWAoJJCBlbmRpZgoJJCBpZiBmJGdldHN5aSgiTk9ERV9IV1RZUEUiKSAuZXFzLiAiQUxQSCIKCSQgdGhlbgoJJCAgICAgICBzYXkgIkFMUEhBIHBsYXRmb3JtIgoJJCAgICAgICB2aSptIDo9PSBtY3IgdmltOlZJTS5FWEVfQVhQCgkkIGVuZGlmCgkkIGlmIGYkZ2V0c3lpKCJBUkNIX05BTUUiKSAuZXFzLiAiSUE2NCIKCSQgdGhlbgoJJCAgICAgIHNheSAiSUE2NCBwbGF0Zm9ybSIKCSQgICAgICB2aSptIDo9PSBtY3IgdmltOlZJTS5FWEVfSUE2NAoJJCBlbmRpZgoKU29sdXRpb24gMi4gIERpZmZlcmVudCBkaXJlY3RvcmllczogPgoKCSQgaWYgZiRnZXRzeWkoIk5PREVfSFdUWVBFIikgLmVxcy4gIlZBWCIKCSQgdGhlbgoJJCAgICAgICBzYXkgIlZBWCBwbGF0Zm9ybSIKCSQgICAgICAgZGVmaW5lL25vbG9nIFZJTSBSRjEwOltVVElMLlZBWF9FWEVdICEgVkFYIGV4ZWN1dGFibGVzCgkkIGVuZGlmCgkkIGlmIGYkZ2V0c3lpKCJOT0RFX0hXVFlQRSIpIC5lcXMuICJBTFBIIgoJJCB0aGVuCgkkICAgICAgIHNheSAiQUxQSEEgcGxhdGZvcm0iCgkkICAgICAgIGRlZmluZS9ub2xvZyBWSU0gUkYxMDpbVVRJTC5BWFBfRVhFXSAhIEFYUCBleGVjdXRhYmxlcwoJJCBlbmRpZgoJJCBpZiBmJGdldHN5aSgiQVJDSF9OQU1FIikgLmVxcy4gIklBNjQiCgkkIHRoZW4KCSQgICAgICBzYXkgIklBNjQgcGxhdGZvcm0iCgkkICAgICAgZGVmaW5lL25vbG9nIFZJTSBSRjEwOltVVElMLklBNjRfRVhFXSAhIElBNjQgZXhlY3V0YWJsZXMKCSQgZW5kaWYKICAgICAgICAkISBWSU1SVU5USU1FIG11c3QgYmUgZGVmaW5lZCBpbiBvcmRlciB0byBmaW5kIHJ1bnRpbWUgZmlsZXMKCSQgZGVmaW5lL25vbG9nIFZJTVJVTlRJTUUgUkYxMDpbVVRJTC5WSU03M10KCkEgZ29vZCBleGFtcGxlIGZvciB0aGlzIGFwcHJvYWNoIGlzIHRoZSBbR05VXWdudV90b29scy5jb20gc2NyaXB0IGZyb20KR05VX1RPT0xTLlpJUCBwYWNrYWdlIGRvd25sb2FkYWJsZSBmcm9tIGh0dHA6Ly93d3cucG9sYXJob21lLmNvbS92aW0vCgooWm9sdGFuIEFycGFkZmZ5LCBWaW0gNy4yKQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cgo5LiBWTVMgcmVsYXRlZCBjaGFuZ2VzCQkJCQkqdm1zLWNoYW5nZXMqCgpWZXJzaW9uIDcuNCAKLSBVbmRvOiBWTVMgY2FuIG5vdCBoYW5kbGUgbW9yZSB0aGFuIG9uZSBkb3QgaW4gdGhlIGZpbGVuYW1lcyB1c2UgImRpci9uYW1lIiAtPiAiZGlyL191bl9uYW1lIiAKICBhZGQgX3VuXyBhdCB0aGUgYmVnaW5uaW5nIHRvIGtlZXAgdGhlIGV4dGVuc2lvbgotIGNvcnJlY3Qgc3dhcCBmaWxlIG5hbWUgd2lsZGNhcmQgaGFuZGxpbmcKLSBoYW5kbGUgaWNvbnYgdXNhZ2UgY29ycmVjdGx5Ci0gZG8gbm90IG9wdGltaXplIG9uIHZheCAtIG90aGVyd2lzZSBpdCBoYW5ncyBjb21waWxpbmcgY3J5cHRvIGZpbGVzCi0gZmlsZWlvLmMgZml4IHRoZSBjb21tZW50Ci0gY29ycmVjdCBSZWFsV2FpdEZvckNoYXIgCi0gYWZ0ZXIgNy40LTExOSB1c2UgZGlmZmVyZW50IGZ1bmN0aW9ucyBsaWIkY3Z0Zl90b19pbnRlcm5hbF90aW1lIGJlY2F1c2UgQWxwaGEgYW5kIFZBWCBoYXZlCiAgR19GTE9BVCBidXQgSUE2NCB1c2VzIElFRUUgZmxvYXQgb3RoZXJ3aXNlIFZpbSBjcmFzaGVzCi0gZ3VhcmQgYWdhaW5zdCBjcmFzaGVzIHRoYXQgYXJlIGNhdXNlZCBieSBtaXhlZCBmaWxlbmFtZXMKLSBbVEVTVERJUl1tYWtlX3Ztcy5tbXMgY2hhbmdlZCB0byBzZWUgdGhlIG91dHB1dCBmaWxlcwotIEltcHJvdmUgdGVzdHMsIHVwZGF0ZSBrbm93biBpc3N1ZXMKLSBtaW5vciBjb21waWxlciB3YXJuaW5ncyBmaXhlZAotIENUQUdTIDUuOCArcmVnZXggaW5jbHVkZWQKClZlcnNpb24gNy4zCi0gQ1RBR1MgNS44IGluY2x1ZGVkCi0gVk1TIGNvbXBpbGUgd2FybmluZ3MgZml4ZWQgLSBmbG9hdGluZy1wb2ludCBvdmVyZmxvdyB3YXJuaW5nIGNvcnJlY3RlZCBvbiBWQVgKLSBmaWxlcGF0aCBjb21wbGV0aW9uIGNvcnJlY3RlZCAtIHRvbyBtYW55IGNoYXJzIHdlcmUgZXNjYXBlZCBpbiBmaWxlbmFtZQogIGFuZCBzaGVsbCBjb21tYW5kcwotIHRoZSBmb2xsb3dpbmcgcGx1Z2lucyBhcmUgaW5jbHVkZWQgaW50byBWTVMgcnVudGltZToKCWdlbnV0aWxzIDIuNCwgbXVsdGlzZWxlY3QgMi4yLCBtdWx0dmFscyAzLjEsIHNlbGVjdGJ1ZiA0LjMsCglidWZleHBsb3JlciA3LjEuNywgdGFnbGlzdCA0LjUKLSBtaW5vciBjaGFuZ2VzIGluIHZpbXJjIChqdXN0IGluIFZNUyBydW50aW1lKQotIG1ha2Vfdm1zLm1tcyAtIEhVR0UgbW9kZWwgaXMgdGhlIGRlZmF1bHQKLSBbVEVTVERJUl1tYWtlX3Ztcy5tbXMgaW5jbHVkZSBhcyBtYW55IHRlc3RzIHBvc3NpYmxlCi0gbW9kaWZ5IHRlc3QzMCBhbmQgdGVzdDU0IGZvciBWTVMKLSBlbmFibGUgRkxPQVQgZmVhdHVyZSBpbiBWTVMgcG9ydAotIG9zX3Ztcy50eHQgdXBkYXRlZAoKVmVyc2lvbiA3LjIgKDIwMDggQXVnIDkpCi0gVkNGIGZpbGVzIHdyaXRlIGNvcnJlY3RlZAotIENUQUdTIDUuNyBpbmNsdWRlZAotIGNvcnJlY3RlZCBtYWtlX3Ztcy5tbXMgKG9uIFZBWCBnYXZlIHN5bnRheCBlcnJvcikKClZlcnNpb24gNy4xICgyMDA3IEp1biAxNSkKLSBjcmVhdGUgVEFHUyBmaWxlIGZyb20gbWVudQoKVmVyc2lvbiA3ICgyMDA2IE1heSA4KQotIEltcHJvdmVkIGxvdyBsZXZlbCBjaGFyIGlucHV0IChhZmZlY3RzIGp1c3QgY29uc29sZSBtb2RlKQotIEZpeGVkIHBsdWdpbiBidWcKLSBDVEFHUyA1LjYgaW5jbHVkZWQKClZlcnNpb24gNi40ICgyMDA1IE9jdCAxNSkKLSBHVEtMSUIgYW5kIFZpbSBidWlsZCBvbiBJQTY0Ci0gY29sb3JzIGluIHRlcm1pbmFsIG1vZGUKLSBzeW50YXggaGlnaGxpZ2h0aW5nIGluIHRlcm1pbmFsIG1vZGUKLSB3cml0ZSBwcm9ibGVtIGZpeGVkIChleHRyYSBDUikKLSBFU0MgYW5kIEVTQyBzZXF1ZW5jZSByZWNvZ25pdGlvbiBpbiB0ZXJtaW5hbCBtb2RlCi0gbWFrZSBmaWxlIGNoYW5nZWQgdG8gc3VwcG9ydCBuZXcgTU1TIHZlcnNpb24KLSBlbnYgdmFyaWFibGUgZXhwYW5zaW9uIGluIHBhdGggY29ycmVjdGVkCi0gcHJpbnRpbmcgcHJvYmxlbXMgY29ycmVjdGVkCi0gaGVscCB0ZXh0IGFkZGVkIGZvciBjYXNlIGluc2Vuc2l0aXZlIGFyZ3VtZW50cwoKVmVyc2lvbiA2LjMgKDIwMDQgTWF5IDEwKQotIEltcHJvdmVkIHZtc19yZWFkIGZ1bmN0aW9uCi0gQ1RBR1MgdjUuNS40IGluY2x1ZGVkCi0gRG9jdW1lbnRhdGlvbiBjb3JyZWN0ZWQgYW5kIHVwZGF0ZWQKClZlcnNpb24gNi4yICgyMDAzIE1heSA3KQotIENvcnJlY3RlZCBWTVMgc3lzdGVtIGNhbGwgcmVzdWx0cwotIExvdyBsZXZlbCBjaGFyYWN0ZXIgaW5wdXQgaXMgcmV3cml0dGVuCi0gQ29ycmVjdGlvbiBpbiB0YWcgYW5kIHF1aWNrZml4IGhhbmRsaW5nCi0gRmlyc3QgR1RLIGJ1aWxkCi0gTWFrZSBmaWxlIGNoYW5nZXMKICAgIC0gR1RLIGZlYXR1cmUgYWRkZWQKICAgIC0gRGVmaW5lIGZvciBPTERfVk1TCiAgICAtIE9wZW5WTVMgdmVyc2lvbiA2LjIgb3Igb2xkZXIKLSBEb2N1bWVudGF0aW9uIHVwZGF0ZWQgd2l0aCBHVEsgZmVhdHVyZXMKLSBDVEFHUyB2NS41IGluY2x1ZGVkCi0gVk1TIFZJTSB0dXRvciBjcmVhdGVkCgpWZXJzaW9uIDYuMSAoMjAwMiBNYXIgMjUpCi0gVENMIGluaXRfdGNsKCkgcHJvYmxlbSBmaXhlZAotIENUQUdTIHY1LjQgaW5jbHVkZWQKLSBHTlUgdG9vbHMgYmluYXJpZXMgZm9yIE9wZW5WTVMKLSBNYWtlIGZpbGUgY2hhbmdlcwogICAgLSBQRVJMLCBQWVRIT04gYW5kIFRDTCBzdXBwb3J0IGltcHJvdmVkCiAgICAtIEluc3RhbGxWTVMudHh0IGhhcyBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIEhPV1RPIGJ1aWxkCi0gVk1TL1VuaXggZmlsZSBoYW5kbGluZyByZXdyaXR0ZW4KLSBNaW5vciBjYXN0aW5nIGFuZCBidWcgZml4ZXMKClZlcnNpb24gNi4wICgyMDAxIFNlcCAyOCkKLSBVbml4IGFuZCBWTVMgY29kZSBoYXMgYmVlbiBtZXJnZWQKCS0gc2VwYXJhdGVkICJyZWFsbHkiIFZNUyByZWxhdGVkIGNvZGUKCS0gaW5jbHVkZWQgYWxsIHBvc3NpYmxlIFVuaXggZnVuY3Rpb25hbGl0eQoJLSBzaW1wbGlmaWVkIG9yIGRlbGV0ZWQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMKCS0gbWFrZWZpbGUgTUFLRV9WTVMuTU1TIHJldmlld2VkCi0gbWVudSBjaGFuZ2VzIChmaXhlZCBwcmludGluZywgQ1RBR1MgYW5kIFhYRCB1c2FnZSkKLSBmaXhlZCB2YXJpYWJsZSBSTVMgcmVjb3JkIGZvcm1hdCBoYW5kbGluZyBhbm9tYWx5Ci0gY29ycmVjdGVkIHN5bnRheCwgZnRwbHVnaW4gZXRjIGZpbGVzIGxvYWQKLSBjaGFuZ2VkIGV4cGFuZF93aWxkY2FyZHMgYW5kIGV4cGFuZHBhdGggZnVuY3Rpb25zIHRvIHdvcmsgbW9yZSBnZW5lcmFsCi0gY3JlYXRlZCBPU19WTVNfRklMVEVSLkNPTSAtIERFQ0MtPlZBWEMgcHJlLXByb2Nlc3NvciBkaXJlY3RpdmUgY29udmVydAogIHNjcmlwdC4KLSBJbXByb3ZlZCBjb2RlJ3MgVkFYQyBhbmQgbmV3IERFQ0MgY29tcGlsZXJzIGNvbXBhdGliaWxpdHkKLSBjaGFuZ2VkIHF1aWNrZml4IHBhcmFtZXRlcnM6CgktIGVycm9ybWVzc2FnZSBmb3JtYXQgdG8gc3VpdGUgREVDQwoJLSBzZWFyY2gsIG1ha2UgYW5kIG90aGVyIGNvbW1hbmRzIHRvIHN1aXRlIFZNUyBzeXN0ZW0KLSB1cGRhdGVkIGFuZCByZW5hbWVkIE1NUyBtYWtlIGZpbGVzIGZvciBWaW0gYW5kIENUQUdTLgotIENUQUdTIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBzb3VyY2UgZGlzdHJpYnV0aW9uIG9mIFZpbSBidXQgaXQgd2lsbCByZW1haW4KICBpbiBPcGVuVk1TIGJpbmFyeSBkaXN0cmlidXRpb25zLgotIHNpbXBsaWZpZWQgYnVpbGQvY29uZmlndXJhdGlvbiBwcm9jZWR1cmUKLSBjcmVhdGVkIElOU1RBTEx2bXMudHh0IC0gZGV0YWlsZWQgY29tcGlsaW5nIGluc3RydWN0aW9ucyB1bmRlciBWTVMuCi0gdXBkYXRlZCB0ZXN0IHNjcmlwdHMuCgpWZXJzaW9uIDUuOCAoMjAwMSBKdW4gMSkKLSBPU19WTVMuVFhUIHVwZGF0ZWQgd2l0aCBuZXcgZmVhdHVyZXMuCi0gb3RoZXIgbWlub3IgZml4ZXMuCi0gZG9jdW1lbnRhdGlvbiB1cGRhdGVkCi0gdGhpcyB2ZXJzaW9uIGhhZCBiZWVuIHRlc3RlZCBtdWNoIG1vcmUgdGhhbiBhbnkgb3RoZXIgT3BlblZNUyB2ZXJzaW9uCiAgZWFybGllcgoKVmVyc2lvbiA1LjcgKDIwMDAgSnVuIDI0KQotIE5ldyBDVEFHUyB2NS4wIGluIGRpc3RyaWJ1dGlvbgotIERvY3VtZW50YXRpb24gdXBkYXRlZAoKVmVyc2lvbiA1LjYgKDIwMDAgSmFuIDE3KQotIFZNUyBmaWxlbmFtZSByZWxhdGVkIGNoYW5nZXM6CgktIHZlcnNpb24gaGFuZGxpbmcgKG9wZW4gZXZlcnl0aGluZywgc2F2ZSB0byBuZXcgdmVyc2lvbikKCS0gY29ycmVjdCBmaWxlIGV4dGVuc2lvbiBtYXRjaGluZyBmb3Igc3ludGF4ICh2ZXJzaW9uIHByb2JsZW0pCgktIGhhbmRsZSA8LD4gY2hhcmFjdGVycyBhbmQgcGFzc3dvcmRzIGluIGRpcmVjdG9yeSBkZWZpbml0aW9uCgktIGhhbmRsZSBpbnRlcm5vZGUvcmVtb3RlIGludm9jYXRpb24gYW5kIGVkaXRpbmcgd2l0aCBwYXNzd29yZHMKCS0gT3BlblZNUyBmaWxlcyB3aWxsIGJlIHRyZWF0ZWQgY2FzZSBpbnNlbnNpdGl2ZSBmcm9tIG5vdwoJLSBjb3JyZWN0ZWQgcmVzcG9uc2Ugb2YgZXhwYW5kKCIlOi4iKSBldGMgcGF0aCByZWxhdGVkIGZ1bmN0aW9ucwoJKGluIG9uZSB3b3JkOiBWTVMgZGlyZWN0b3J5IGhhbmRsaW5nIGludGVybmFsbHkpCi0gdmVyc2lvbiBjb21tYW5kCgktIGNvcnJlY3RlZCAoKywtKSBpbmZvcm1hdGlvbiBkYXRhCgktIGFkZGVkIGNvbXBpbGVyIGFuZCBPUyB2ZXJzaW9uCgktIGFkZGVkIHVzZXIgYW5kIGhvc3QgaW5mb3JtYXRpb24KCS0gcmVzb2x2aW5nICRWSU0gYW5kICRWSU1SVU5USU1FIGxvZ2ljYWxzCi0gVk1TIHBvcnQgaXMgaW4gTUFYX0ZFQVQgKG1heGltdW0gZmVhdHVyZXMpIGNsdWIgd2l0aCBVbml4LCBXaW4zMiBhbmQgT1MvMi4KCS0gZW5hYmxlZCBmYXJzaSwgcmlnaHRsZWZ0IGV0Yy4gZmVhdHVyZXMKCS0gdW5kbyBsZXZlbCByYWlzZWQgdXAgdG8gMTAwMAotIFVwZGF0ZWQgT1NfVk1TLk1NUyBmaWxlLgoJLSBtYXhpbXVtIGZlYXR1cmVzIE9OIGlzIGRlZmF1bHQKCS0gVmltIGlzIGNvbXBpbGFibGUgd2l0aCArcGVybCwgK3B5dGhvbiBhbmQgK3RjbCBmZWF0dXJlcy4KCS0gaW1wcm92ZWQgTU1LIGNvbXBhdGliaWxpdHkKLSBDcmVhdGVkIE1BS0VGSUxFX1ZNUy5NTVMsIG1ha2VmaWxlIGZvciB0ZXN0aW5nIFZpbSBkdXJpbmcgZGV2ZWxvcG1lbnQuCi0gRGVmaW5lZCBERUMgdGVybWluYWwgVlQzMjAKCS0gY29tcGF0aWJpbGl0eSBmb3IgVlQzKjAsIFZUMiowIGFuZCBWVDEqMCAtIEFOU0kgdGVybWluYWxzCgkgIGJhY2t3YXJkcywgYnV0IG5vdCBWVDM0MCBhbmQgbmV3ZXIgd2l0aCBjb2xvdXIgY2FwYWJpbGl0eS4KCS0gVlQzMjAgaXMgZGVmYXVsdCB0ZXJtaW5hbCBmb3IgT3BlblZNUwoJLSB0aGVzZSBuZXcgdGVybWluYWxzIGFyZSBhbHNvIGZhc3QgdHR5cyAoZGVmYXVsdCBmb3IgT3BlblZNUykuCgktIGFsbG93ZWQgZGVjX21vdXNlIHR0eW0KLSBVcGRhdGVkIGZpbGVzIHZpbXJjIGFuZCBndmltcmMgd2l0aCBWTVMgc3BlY2lmaWMgc3VnZ2VzdGlvbnMuCi0gT1NfVk1TLlRYVCB1cGRhdGVkIHdpdGggbmV3IGZlYXR1cmVzLgoKVmVyc2lvbiA1LjUgKDE5OTkgRGVjIDMpCi0gUG9wdXAgbWVudSBsaW5lIGNyYXNoIGNvcnJlY3RlZC4KLSBIYW5kbGUgZnVsbCBmaWxlIG5hbWVzIHdpdGggdmVyc2lvbiBudW1iZXJzLgotIERpcmVjdG9yeSBoYW5kbGluZyAoQ0QgY29tbWFuZCBldGMuKQotIENvcnJlY3RlZCBmaWxlIG5hbWUgY29udmVyc2lvbiBWTVMgdG8gVW5peCBhbmQgdi52LgotIENvcnJlY3QgcmVzcG9uc2Ugb2YgZXhwYW5kIHdpbGRjYXJkcwotIFJlY292ZXJ5IGlzIHdvcmtpbmcgZnJvbSB0aGlzIHZlcnNpb24gdW5kZXIgVk1TIGFzIHdlbGwuCi0gSW1wcm92ZWQgdGVybWluYWwgYW5kIHNpZ25hbCBoYW5kaW5nLgotIEltcHJvdmVkIE9TX1ZNUy5UWFQKClZlcnNpb24gNS40ICgxOTk5IFNlcCA5KQotIEN1dCBhbmQgcGFzdGUgbWlzbWF0Y2ggY29ycmVjdGVkLgotIE1vdGlmIGRpcmVjdG9yaWVzIGR1cmluZyBvcGVuIGFuZCBzYXZlIGFyZSBjb3JyZWN0ZWQuCgpWZXJzaW9uIDUuMyAoMTk5OCBPY3QgMTIpCi0gTWlub3IgY2hhbmdlcyBpbiB0aGUgY29kZQotIFN0YW5kYXJkIGRpc3RyaWJ1dGlvbiB3aXRoICtHVUkgb3B0aW9uCgpWZXJzaW9uIDUuMSAoMTk5OCBBcHIgMjEpCi0gU3ludGF4IGFuZCBERUMgQyBjaGFuZ2VzIGluIHRoZSBjb2RlCi0gRml4aW5nIHByb2JsZW1zIHdpdGggdGhlIC9kb2Mgc3ViZGlyZWN0b3J5Ci0gSW1wcm92ZSBPU19WTVMuTU1TCgpWZXJzaW9uIDQuNSAoMTk5NiBEZWMgMTYpCi0gRmlyc3QgVk1TIHBvcnQgYnkgSGVuayBFbGJlcnMgPGhlbmtAeHM0YWxsLm5sPgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoxMC4gQXV0aG9ycwkJCQkJCSp2bXMtYXV0aG9ycyoKCk9wZW5WTVMgZG9jdW1lbnRhdGlvbiBhbmQgZXhlY3V0YWJsZXMgYXJlIG1haW50YWluZWQgYnk6ClpvbHRhbiBBcnBhZGZmeSA8YXJwYWRmZnlAcG9sYXJob21lLmNvbT4KT3BlblZNUyBWaW0gcGFnZTogaHR0cDovL3d3dy5wb2xhcmhvbWUuY29tL3ZpbS8KClRoaXMgZG9jdW1lbnQgdXNlcyBwYXJ0cyBhbmQgcmVtYXJrcyBmcm9tIGVhcmxpZXIgYXV0aG9ycyBhbmQgY29udHJpYnV0b3JzCm9mIE9TX1ZNUy5UWFQ6CglDaGFybGVzIEUuIENhbXBiZWxsLCBKci4gPGNlY0BncnlwaG9uLmdzZmMubmFzYS5nb3Y+CglCcnVjZSBIdW5zYWtlciA8Qk5IdW5zYWtlckBjaHEuYnl1LmVkdT4KCVNhbmRvciBLb3BhbnlpIDxzYW5kb3Iua29wYW55aUBtYWlsYm94Lmh1PgoKIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoK