RnJpIE9jdCAyNCAyMzowODoxNyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLm00OiBhcHBsaWVkIHBhdGNoIGZyb20gUGF0cmljayBXZWxjaGUgcHJvdmlkZWQgaW4KCSAgYnVnICMxMjU0MzIgLCBmdXR1cmUgcHJvb2ZpbmcgdGhlIC5tNCBmaWxlLgoJKiBwYXJzZXIuYzogcmVzZXR0aW5nIHRoZSBjb250ZXh0IHNob3VsZCBhbHNvIHJlc2V0IHRoZSBlcnJvcgoJKiBUT0RPOiBwcm9ibGVtIG9mIGNvbmZvcm1hbmNlIHcuci50LiBFMjAgd2FzIHJhaXNlZCBpbiB0aGUKCSAgWE1MIENvcmUgdGVsY29uZiBhbmQgbGlieG1sMiBpc24ndCBjb25mb3JtYW50IHRoZXJlLgoKV2VkIE9jdCAyMiAxNDozMzowNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sd3JpdGVyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBBbGZyZWQgTWlja2F1dHNjaCBmaXhpbmcgIzEyNTE4MAoKV2VkIE9jdCAyMiAxMDo1MDozMSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2h2YWxpZC5jIGdlbkNoUmFuZ2VzLnB5OiBTdGVwaGFuZSBCaWRvdWwgcG9pbnRlZCBvdXQgYW5vdGhlcgoJICBzbWFsbCBnbGl0Y2ggbWlzc2luZyBhIGNvbnN0CgpXZWQgT2N0IDIyIDEwOjQzOjIxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaHZhbGlkLmMgZ2VuQ2hSYW5nZXMucHk6IFN0ZXBoYW5lIEJpZG91bCBwb2ludGVkIG91dCB0aGF0CgkgIGl0IGRvZXNuJ3QgZGVmaW5lIElOX0xJQlhNTAoKVHVlIE9jdCAyMSAyMToxNDo1NSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvTWFrZWZpbGUubWluZ3c6IHR5cG8gcG9pbnRlZCBvdXQgYnkgU3RlcGhhbmUgQmlkb3VsCgpUdWUgT2N0IDIxIDExOjI2OjM2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9NYWtlZmlsZS5iY2Igd2luMzIvTWFrZWZpbGUubWluZ3cgd2luMzIvTWFrZWZpbGUubXN2YwoJICB3aW4zMi9jb25maWd1cmUuanM6IHNldCBvZiBXaW4zMiBwYXRjaGVzIGZvciAyLjYuMCBieSBKb2FjaGltIEJhdWNoCgpUdWUgT2N0IDIxIDAyOjA3OjIyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGxhc3QgbWludXRlIHBhdGNoIGZyb20gRXJpYyBadXJjaGVyIG1ha2luZyBpdCBpbnRvIDIuNi4wCgpUdWUgT2N0IDIxIDAyOjAzOjAzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gTkVXUyBkb2MvbGlieG1sMi54c2E6IHByZXBhcmluZyBsaWJ4bWwyLTIuNi4wCgkqIGRvYy8qOiB1cGRhdGVkIGFuZCByZWdlbmVyYXRlZCB0aGUgZG9jcyBhbmQgQVBJCgpUdWUgT2N0IDIxIDAxOjAxOjU1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVgyLmMgZXJyb3IuYyB0cmVlLmM6IG1vdmVkIHRoZSBsaW5lIG51bWJlciB0byB0aGVpciBwcm9wZXIKCSAgZmllbGQgaW4gZWxlbWVudHMgbm93LgoKVHVlIE9jdCAyMSAwMDoyODoyMCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIHhtbHdyaXRlci5jIE1ha2VmaWxlLmFtIGluY2x1ZGUvbGlieG1sL3htbHdyaXRlci5oCgkgIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjoKCSAgYWRkZWQgdGhlIHhtbFdyaXRlciBtb2R1bGUgY29udHJpYnV0ZWQgYnkgQWxmcmVkIE1pY2thdXRzY2gKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBhZGRlZCByb29tIGZvciBsaW5lIGFuZCBleHRyYSBpbmZvcm1hdGlvbgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyNi5weTogYnVnZml4aW5nIHNvbWUgcHJvYmxlbSBzb21lCgkgIG9mIHRoZW0gaW50cm9kdWNlZCBpbiBTZXB0ZW1iZXIKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjIGRvYy9saWJ4bWwyLWFwaS54bWw6IHJlZ2VuZXJhdGVkIHRoZSBBUEkKCk1vbiBPY3QgMjAgMTk6MDI6NTMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbiB4bWxkd2Fsay5jIHhtbHJlYWRlci5jCgkgIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtIGluY2x1ZGUvbGlieG1sL3htbGR3YWxrLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOiByZW1vdmluZyB4bWxkd2FsayBtb2R1bGUKCSAgc2luY2UgaXQgZ290IG1lcmdlZCB3aXRoIHRoZSB4bWxyZWFkZXIuCgkqIHBhcnNlci5jOiBjbGVhbnVwCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYyBweXRob24vbGlieG1sMmNsYXNzLnR4dCBkb2MvbGlieG1sMi1hcGkueG1sOgoJICByZWJ1aWx0IHRoZSBBUEkKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9yZWFkZXI3LnB5CgkgIHB5dGhvbi90ZXN0cy93YWxrZXIucHk6IGFkZGluZyByZWdyZXNzaW9uIHRlc3RpbmcgZm9yIHRoZQoJICBuZXcgeG1scmVhZGVyIEFQSXMsIG5ldyBBUElzIGZvciByZWFkZXIgY3JlYXRpb24sIGluY2x1ZGluZwoJICBtYWtlaW5nIHJlYWRlciAid2Fsa2VyIiBvcGVyYXRpbmcgb24gcHJlcGFyc2VkIGRvY3VtZW50IHRyZWVzLgoKU3VuIE9jdCAyMCAyMjozNzowMyBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGVudGl0aWVzLmMsIHZhbGlkLmM6IGZpeGVkIHByb2JsZW0gcmVwb3J0ZWQgb24gdGhlIG1haWxpbmcKCSAgbGlzdCBieSBNZWx2eW4gU29wYWN1YSAtIHdyb25nIGFyZ3VtZW50IG9yZGVyIG9uIGZ1bmN0aW9ucwoJICBjYWxsZWQgdGhyb3VnaCB4bWxIYXNoU2Nhbi4KClN1biBPY3QgMTkgMjM6NTc6NDUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmMgeG1sSU8uYzogZml4ZXMgZm9yIGNvbXBpbGluZyB1c2luZyAtLXdpdGgtbWluaW11bQoKU3VuIE9jdCAxOSAyMzo0NjowNCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBjbGVhbnVwIHhtbE5vZGVHZXRDb250ZW50KCkgcmV1c2luZyB4bWxOb2RlQnVmR2V0Q29udGVudCgpLAoJICB0ZXN0ZWQgaXQgdGhyb3VnaCB0aGUgeHNsdCByZWdyZXNzaW9uIHN1aXRlLgoKU3VuIE9jdCAxOSAyMjo0MjoxNiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogYWRkaW5nIHhtbE5vZGVCdWZHZXRDb250ZW50KCkKCSAgYWxsb3dpbmcgdG8gZ3JhYiB0aGUgY29udGVudCB3aXRob3V0IGZvcmNpbmcgYWxsb2NhdGlvbnMuCgkqIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0IGRvYy9saWJ4bWwyLWFwaS54bWw6IHJlYnVpbHQgdGhlIEFQSQoJKiB4cGF0aC5jIHhtbGR3YWxrLmM6IHJlbW92ZWQgYSBjb3VwbGUgb2YgY29tbWVudCBlcnJvcnMuCgpTdW4gT2N0IDE5IDE2OjM5OjM2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIENocmlzIEFuZGVyc29uIHRvIGNoYW5nZSBiYWNrCgkgIG1lbWNtcCB3aXRoIENNUHgoKQoKU3VuIE9jdCAxOSAxNjoyNDoxOSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCB0byBub3Qgc2VuZCBOVUxMIHRvICVzIHByaW50aW5nCgkqIHB5dGhvbi90ZXN0cy9lcnJvci5weSByZXN1bHQvSFRNTC9kb2MzLmh0bS5lcnIKCSAgcmVzdWx0L0hUTUwvdGVzdDMuaHRtbC5lcnIgcmVzdWx0L0hUTUwvd2lyZWQuaHRtbC5lcnIKCSAgcmVzdWx0L3ZhbGlkL3Q4LnhtbC5lcnIgcmVzdWx0L3ZhbGlkL3Q4YS54bWwuZXJyOiBjbGVhbmluZwoJICB1cCBzb21lIG9mIHRoZSByZWdyZXNzaW9uIHRlc3RzIGVycm9yCgpTdW4gT2N0IDE5IDE1OjMxOjQzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9uYW5vaHR0cC5oIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oIAoJICBpbmNsdWRlL2xpYnhtbC94bWxJTy5oIG5hbm9odHRwLmMgcGFyc2VySW50ZXJuYWxzLmMgeG1sSU8uYzoKCSAgRml4ZWQgdGhlIEhUVFA8LT5wYXJzZXIgaW50ZXJyYWN0aW9uLCB3aGljaCBzaG91bGQgZml4IDIgbG9uZwoJICBzdGFuZGluZyBidWdzICMxMDQ3OTAgYW5kICMxMjQwNTQgLCB0aGlzIGFsc28gZml4IHRoZSBmYWN0IHRoYXQKCSAgSFRUUCBlcnJvciBjb2RlICg+IDQwMCkgc2hvdWxkIG5vdCBnZW5lcmF0ZSBkYXRhLCB3ZSB1c3VhbGx5CgkgIGRvbid0IHdhbnQgdG8gcGFyc2UgdGhlIEhUTUwgZXJyb3IgaW5mb3JtYXRpb24gaW5zdGVhZCBvZiB0aGUKCSAgcmVzb3VyY2UgbG9va2VkIGF0LgoKU3VuIE9jdCAxOSAxOToyMDo0OCBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRvYy9NYWtlZmlsZS5hbTogZW5oYW5jZWQgdGhlIGluc3RhbGxhdGlvbiBvZiB0dXRvcmlhbCBmaWxlcwoJICB0byBhdm9pZCBpbnN0YWxsaW5nIENWUyBzdWJkaXJlY3RvcmllcyAoYnVnIDEyMjk0MykKClN1biBPY3QgMTkgMTc6MzM6MjcgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxJTy5jOiBmaXhlZCBzZWdmYXVsdCB3aGVuIGlucHV0IGZpbGUgbm90IHByZXNlbnQKCSogdHJlZS5jOiBjaGFuZ2VkIG91dHB1dCBmb3JtYXR0aW5nIG9mIFhNTF9DREFUQV9TRUNUSU9OCgkgIChidWcgMTIwOTE3KQoJClN1biBPY3QgMTkgMDA6MTU6MzggSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaCBIVE1McGFyc2VyLmMgSFRNTHRyZWUuYwoJICBTQVgyLmMgY2F0YWxvZy5jIGRlYnVnWE1MLmMgZW50aXRpZXMuYyBwYXJzZXIuYyByZWxheG5nLmMKCSAgdGVzdFNBWC5jIHRyZWUuYyB2YWxpZC5jIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYwoJICB4cGF0aC5jOiBDaGFuZ2VkIGFsbCAoPykgb2NjdXJlbmNlcyB3aGVyZSB2YWxpZGF0aW9uIG1hY3JvcwoJICAoSVNfeHh4KSBoYWQgc2luZ2xlLWJ5dGUgYXJndW1lbnRzIHRvIHVzZSBJU194eHhfQ0ggaW5zdGVhZAoJICAoZS5nLiBJU19CTEFOSyBjaGFuZ2VkIHRvIElTX0JMQU5LX0NIKS4gIFRoaXMgZ2V0cyByaWQgb2YKCSAgbWFueSB3YXJuaW5nIG1lc3NhZ2VzIG9uIGNlcnRhaW4gcGxhdGZvcm1zLCBhbmQgYWxzbyBoaWdoLQoJICBsaWdodHMgcGxhY2VzIGluIHRoZSBsaWJyYXJ5IHdoaWNoIG1heSBuZWVkIHRvIGJlIGVuaGFuY2VkCgkgIGZvciBwcm9wZXIgVVRGOCBoYW5kbGluZy4KClNhdCBPY3QgMTggMjA6MzQ6MTggSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBnZW5DaFJhbmdlcy5weSwgY2h2YWxpZC5jLCBpbmNsdWRlL2xpYnhtbC9jaHZhbGlkLmgsCgkgIGRvYy9hcGlidWlsZC5weTogZW5oYW5jZWQgdG8gaW5jbHVkZSBlbm91Z2ggY29tbWVudHMgdG8KCSAgbWFrZSB0aGUgYXBpIGRvYyBnZW5lcmF0aW9uIGhhcHB5LgoKU2F0IE9jdCAxOCAwNzoyODoyNSBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vaHR0cC5jIHhtbElPLmMgaW5jbHVkZS9saWJ4bWwvbmFub2h0dHAuaDogc3RhcnRpbmcgd29yawoJICB0byBmaXggdGhlIEhUVFAvWE1MIHBhcnNlciBpbnRlZ3JhdGlvbi4KClNhdCBPY3QgMTggMTE6MDQ6MzIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oOiBhZGRlZCBuZXcgQVBJcwoJICBmb3IgY3JlYXRpbmcgcmVhZGVyIGZyb20gc291cmNlcyBvciByZXVzaW5nIGEgcmVhZGVyIHdpdGgKCSAgYSBuZXcgc291cmNlLCBsaWtlIHRoZSB4bWxSZWFkeHggYW5kIHhtbEN0eHRSZWFkeHh4CgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYyBkb2MvbGlieG1sMi1hcGkueG1sIGRvYy9hcGlidWlsZC5weQoJICBkb2MvTWFrZWZpbGUuYW06IHJlZ2VuZXJhdGVkIHRoZSBBUElzCgkqIGRvYy94bWwuaHRtbDogYXBwbGllZCBhIHBhdGNoIGZyb20gU3RlZmFuIEtvc3QgZm9yIG5hbWVzYXBjZSBkb2NzCgpTYXQgT2N0IDE4IDEyOjQ2OjAyIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZ2VuQ2hSYW5nZXMucHksIGNodmFsaWQuYywgaW5jbHVkZS9saWJ4bWwvY2h2YWxpZC5oLAoJICBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaDogZW5oYW5jZWQgbWFjcm9zIHRvIGF2b2lkCgkgIGJyZWFraW5nIEFCSSBmcm9tIHByZXZpb3VzIHZlcnNpb25zLgoJKiBjYXRhbG9nLmMsIHBhcnNlci5jLCB0cmVlLmM6IG1vZGlmaWVkIHRvIHVzZSBJU18qIG1hY3JvcwoJICBkZWZpbmVkIGluIHBhcnNlckludGVybmFscy5oLiAgTWFrZXMgbWFpbnRlbmFuY2UgbXVjaCBlYXNpZXIuCgkqIHRlc3RIVE1MLmMsIHRlc3RTQVguYywgcHl0aG9uL2xpYnhtbC5jOiBtaW5vciBmaXhlcyB0byBhdm9pZAoJICBjb21waWxhdGlvbiB3YXJuaW5ncwoJKiBjb25maWd1cmF0aW9uLmluOiBmaXhlZCBwdXNoSFRNTCB0ZXN0IGVycm9yOyBlbmhhbmNlZCBmb3IKCSAgYmV0dGVyIGRldmVsIChtZSkgdGVzdGluZwoKRnJpIE9jdCAxNyAxNDozODo1NCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGVnYWN5LmM6IHJlbW92ZSB0aGUgd2FybmluZyBmb3Igc3RhcnREb2N1bWVudCgpLCBhcyBpdCBpcyB1c2VkIGJ5CgkgIGdsYWRlIChvciBnbGFkZS1weXRob24pCgkqIHBhcnNlci5jIHJlbGF4bmcuYyB4bWxzY2hlbWFzdHlwZXMuYzogZml4ZWQgYW4gYXNzb3J0ZWQgc2V0IG9mCgkgIGludmFsaWQgYWNjZXNzZXMgZm91bmQgYnkgcnVubmluZyBzb21lIFB5dGhvbiBiYXNlZCByZWdyZXNzaW9uCgkgIHRlc3RzIHVuZGVyIHZhbGdyaW5kLiBUaGVyZSBpcyBzdGlsbCBhIGZldyBsZWFrcyByZXBvcnRlZCBieSB0aGUKCSAgcmVsYXhuZyByZWdyZXNzaW9ucyB3aGljaCBuZWVkIHNvbWUgYXR0ZW50aW9uLgoJKiBkb2MvTWFrZWZpbGUuYW06IGZpeGVkIGEgbWFrZSBpbnN0YWxsIHByb2JsZW0gYy5mLiAjMTI0NTM5CgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oOiBhZGRpdGlvbiBvZiB4bWxQYXJzZXJNYXhEZXB0aAoJICBwYXRjaCBmcm9tIGNydXRjaGVyCgpXZWQgT2N0IDE1IDEyOjQ3OjMzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogTWFyYyBMaXlhbmFnZSBwb2ludGVkIG91dCB0aGF0IHhtbENsZWFudXBQYXJzZXIoKQoJICB3YXMgbWlzc2luZyB4bWxDbGVhbnVwSW5wdXRDYWxsYmFja3MgYW5kIHhtbENsZWFudXBPdXRwdXRDYWxsYmFja3MKCSAgY2FsbHMuCgpXZWQgT2N0IDE1IDEwOjE2OjQ3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2bXMvYnVpbGRfbGlieG1sLmNvbSB0cmlvbmFuLmM6IFZNUyBwYXRjaCBmcm9tIENyYWlnIEEuIEJlcnJ5CgpNb24gT2N0IDEzIDIxOjQ2OjI1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogc21hbGwgZml4IGZyb20gQmpvcm4gUmVlc2UKCk1vbiBPY3QgMTMgMTU6NTk6MjUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeCBhIGNhbGwgbWlzc2luZyBhcmd1bWVudHMKClN1biBPY3QgMTIgMTg6NDI6MTggSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBnZW5DaFJhbmdlcy5weSwgY2h2YWxpZC5jLCBpbmNsdWRlL2xpYnhtbC9jaHZhbGlkLmg6IGZpeGVkCgkgIGEgYnVnIGluIHRoZSByYW5nZSBzZWFyY2g7IGVuaGFuY2VkIHJhbmdlIGdlbmVyYXRpb24gKGlubGluZSBjb2RlCgkgIGlmIGEgc21hbGwgbnVtYmVyIG9mIGludGVydmFscyk7IGVuaGFuY2VkIHRoZSByZWFkYWJpbGl0eSBvZiB0aGUKCSAgb3V0cHV0IGZpbGVzLgoKU3VuIE9jdCAxMiAwMDo1MjoxNCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2h2YWxpZC5kZWYgY2h2YWxpZC5jIGluY2x1ZGUvbGlieG1sL2NodmFsaWQuaDogcmVidWlsdCAKCSAgY2h2YWxpZC5kZWYgZnJvbSBzY3JhdGNoIGJhc2VkIG9uIFhNTCAybmQgZWRpdGlvbiBSRUMKCSAgYW5kIHJlZ2VuZXJhdGVkIHRoZSBjb2RlLgoKU2F0IE9jdCAxMSAyMjo1NDoxMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2hlY2steG1sLXRlc3Qtc3VpdGUucHk6IHJlbW92ZWQgc29tZSBhbm5veWluZyB3YXJuaW5ncwoJKiBjaHZhbGlkLmRlZiBjaHZhbGlkLmMgaW5jbHVkZS9saWJ4bWwvY2h2YWxpZC5oOiBmaXhlZCBhIGJ1ZwoJICBpbiB0aGUgUHViaWRDaGFycyBkZWZpbml0aW9uLCByZWdlbmVyYXRlZCwgdGhlcmUgaXMgc3RpbGwKCSAgYSBidWcgbGVmdCBzb21ld2hlcmUKCSogZ2VuQ2hSYW5nZXMucHk6IHNhdmUgdGhlIGhlYWRlciBkaXJlY3RseSBpbiBpbmNsdWRlL2xpYnhtbC8KCSogY29uZmlndXJlLmluOiBJIGdlbmVyYXRlZCBhIDIuNi4wYmV0YTYgZWFybGllciB0b2RheQoKU2F0IE9jdCAxMSAyMzozMjo0NyBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGZpeGVkIHNtYWxsIGVycm9yIG9uIHByZXZpb3VzIGNvbW1pdCAoY2h2YWxpZC5oIGluCgkgIGJhc2UgZGlyIGluc3RlYWQgb2YgaW5jbHVkZSBkaXJlY3RvcnkpCgpTYXQgT2N0IDExIDIzOjExOjIyIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZ2VuQ2hSYW5nZS5weSwgY2h2YWxpZC5kZWYsIGNodmFsaWQuYywgaW5jbHVkZS9saWJ4bWwvY2h2YWxpZC5oOgoJICBuZXcgZmlsZXMgZm9yIGEgZGlmZmVyZW50IG1ldGhvZCBmb3IgZG9pbmcgcmFuZ2UgdmFsaWRhdGlvbgoJICBvZiBjaGFyYWN0ZXIgZGF0YS4KCSogTWFrZWZpbGUuYW0sIHBhcnNlckludGVybmFscy5jLCBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbSwKCSAgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg6IG1vZGlmaWVkIGZvciBuZXcgcmFuZ2UgbWV0aG9kLgoJKiBjYXRhbG9nLmM6IHNtYWxsIGVuaGFuY2UgZm9yIHdhcm5pbmcgbWVzc2FnZSAodXNpbmcgb25lCgkgIG9mIHRoZSBuZXcgcmFuZ2Ugcm91dGluZXMpCgpTYXQgT2N0IDExIDEzOjI0OjU3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmg6IGFkZGluZyBhbiBzZXJyb3IgZmllbGQgdG8KCSAgdGhlIHZhbGlkYXRpb24gY29udGV4dCBicmVha3MgdGhlIEFCSSBmb3IgdGhlIHhtbFBhcnNlckN0eHQKCSAgc3RydWN0dXJlIHNpbmNlIGl0J3MgZW1iZWRkZWQgYnkgY29udGVudCBhbmQgbm90IGJ5IHJlZmVyZW5jZQoKU2F0IE9jdCAxMSAxMjo0Njo0OSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwYXRjaCBmcm9tIE1pa2UgSG9tbWV5CgkqIHRocmVhZHMuYzogYXBwbGllZCBXaW5kb3dzIHBhdGNoIGZyb20gSmVzc2UgUGVsdG9uIGFuZCBTdGVwaGFuZQoJICBCaWRvdWwKCSogcGFyc2VyLmM6IGZpeCB0aGUgcG90ZW50aWFsbHkgbmFzdHkgYWNjZXNzIHRvIGN0eHQtPnNlcnJvcgoJICB3aXRob3V0IGNoZWNraW5nIGZpcnN0IHRoYXQgdGhlIFNBWCBibG9jayBpcyB2ZXJzaW9uIDIKCkZyaSBPY3QgMTAgMjE6MzQ6MDEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWDIuYzogZml4ZWQgYSBuYXN0eSBidWcgd2l0aCBpbnRlcm5pbmcgc29tZSB0ZXh0IHN0cmluZ3MKCSogY29uZmlndXJlLmluOiBwcmVwYXJlIGZvciBiZXRhNSBvZiAyLjYuMAoJKiBsaWJ4bWwuaCBuYW5vZnRwLmMgbmFub2h0dHAuYyB4bWxJTy5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6CgkgIGJldHRlciBlcnJvciBoYW5kbGluZyBmb3IgSS9PIGFuZCBjb252ZXJ0ZWQgRlRQIGFuZCBIVFRQCgkqIHBhcnNlci5jOiBmaXhlZCBhbm90aGVyIGJ1ZwoKRnJpIE9jdCAxMCAxNjo0NToyMCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYMi5jOiBmaXhlZCB1bmluaXRpYWxpemVkIG5ldyBmaWVsZC4KCSogcmVzdWx0L1ZDL09uZUlEMiByZXN1bHQvcmVsYXhuZy8qLmVycjogZml4ZWQgYSB0eXBvIHVwZGF0aW5nCgkgIGFsbCBtZXNzYWdlcwoKRnJpIE9jdCAxMCAxNjoxOToxNyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBtYWtlIHJvb20gaW4gRG9jLCBFbGVtZW50LCBBdHRyaWJ1dGVzCgkgIGZvciBQU1ZJIHR5cGUgaW5mb3JtYXRpb25zLgoKRnJpIE9jdCAxMCAxNjowODowMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIGMxNG4uYyBjYXRhbG9nLmMgZXJyb3IuYyBnbG9iYWxzLmMgcGFyc2VyLmMKCSAgcGFyc2VySW50ZXJuYWxzLmMgcmVsYXhuZy5jIHZhbGlkLmMgeGluY2x1ZGUuYyB4bWxJTy5jIHhtbHJlZ2V4cC5jCgkgIHhtbHNjaGVtYXMuYyB4cGF0aC5jIHhwb2ludGVyLmMgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oCgkgIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmggCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IFNldHRpbmcgdXAgdGhlIGZyYW1ld29yayBmb3Igc3RydWN0dXJlZAoJICBlcnJvciByZXBvcnRpbmcsIHRvdWNoZXMgYSBsb3Qgb2YgbW9kdWxlcywgYnV0IGxpdHRsZSBjb2RlIG5vdwoJICB0aGUgZXJyb3IgaGFuZGxpbmcgdHJhaWwgaGFzIGJlZW4gY2xlYW5lZCB1cC4KCkZyaSBPY3QgMTAgMTQ6Mjk6NDIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGMxNG4uYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBjb252ZXJ0ZWQgdGhlIEMxNE4gbW9kdWxlIHRvbwoKRnJpIE9jdCAxMCAxMzo0MDo1MSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogY2xlYW51cAoJKiB4cG9pbnRlci5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IG1pZ3JhdGVkIFhQb2ludGVyIG1vZHVsZQoJICB0byB0aGUgbmV3IGVycm9yIG1lY2hhbmlzbQoKRnJpIE9jdCAxMCAxMjo0OTo1MyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZXJyb3IuYyB4bWxzY2hlbWFzLmM6IGEgYml0IG9mIGNsZWFudXAKCSogcmVzdWx0L3NjaGVtYXMvKi5lcnI6IHVwZGF0ZWQgd2l0aCB0aGUgbmV3IHJlc3VsdCBzdHJpbmdzCgpGcmkgT2N0IDEwIDAzOjU4OjM5IFBEVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogZml4ZWQgYnVnIDEyNDA2MQoKRnJpIE9jdCAxMCAwMjo0NzoyMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGNsZWFudXAKCSogZW5jb2RpbmcuYzogZml4IGEgZnVubnkgdHlwbwoJKiBlcnJvci5jIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOgoJICBjb252ZXJ0ZWQgdGhlIFNjaGVtYXMgY29kZSB0byB0aGUgbmV3IGVycm9yIGhhbmRsaW5nLiBQSVRBLAoJICBzdGlsbCBuZWVkIHRvIGNoZWNrIG91dHB1dCBmcm9tIHJlZ3Jlc3Npb24gdGVzdHMuCgpUaHUgT2N0ICA5IDE1OjEzOjUzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGNvbnZlcnRlZCB0b28KCSogdHJlZS5jOiBzbWFsbCBjbGVhbnVwCgpUaHUgT2N0ICA5IDEzOjQ0OjU3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBjb21tZW50IGZpeAoJKiBjYXRhbG9nLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogbWlncmF0aW5nIHRoZSBjYXRhbG9nIGNvZGUKCSAgdG8gdGhlIG5ldyBpbmZyYXN0cnVjdHVyZQoKVGh1IE9jdCAgOSAwMDozNjowMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogZmluYWwgZXJyb3IgaGFuZGxpbmcgY2xlYW51cAoJKiB4aW5jbHVkZS5jIGVycm9yLmM6IGNvbnZlcnRlZCBYSW5jbHVkZSB0byB0aGUgbmV3IGVycm9yIGhhbmRsaW5nCgkqIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGFkZGVkIFhJbmNsdWRlIGVycm9ycwoKV2VkIE9jdCAgOCAyMzozMToyMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGJ1ZyBpbiBjb21wcmVzc2lvbiBzYXZpbmcgd2FzIGNyYXNoaW5nIGdhbGVvbgoJICByZXBvcnRlZCBieSB0ZXVmCgkgIApXZWQgT2N0ICA4IDIxOjE4OjEyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlcnJvci5jIHRyZWUuYyB4bWxJTy5jIHhtbGxpbnQuYzogbW9yZSBjbGVhbnVwIHRocm91Z2ggdGhlCgkgIEkvTyBlcnJvciBwYXRoCgpXZWQgT2N0ICA4IDIwOjU3OjI3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBiZXR0ZXIgaGFuZGxpbmcgb2YgZXJyb3IgY2FzZXMKCldlZCBPY3QgIDggMTM6NTE6MTQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmMgeG1sbGludC5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGZpcnN0IHBhc3MgYXQKCSAgY2xlYW5pbmcgdXAgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIEkvTyBtb2R1bGUuCgpXZWQgT2N0ICA4IDEwOjUyOjA1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBlcnJvciBoYW5kbGluZwoJICBjbGVhbnVwIG9mIHRoZSBSZWdleHAgbW9kdWxlLgoKV2VkIE9jdCAgOCAwMTowOTowNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBjb252ZXJ0aW5nIHRoZSB0cmVlIG1vZHVsZSB0b28KCSogZXJyb3IuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBjcmVhdGVkIGEgc2ltcGxlciBpbnRlcm5hbAoJICBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uCgpUdWUgT2N0ICA3IDIzOjE5OjM5IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlcnJvci5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmggaW5jbHVkZS9saWJ4bWwveHBhdGguaAoJICBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oIHhwYXRoLmM6IGNsZWFuaW5nIHVwIFhQYXRoCgkgIGVycm9yIHJlcG9ydGluZyB0aGF0IHRpbWUuIAoJKiB0aHJlYWRzLmM6IGFwcGxpZWQgdGhlIHR3byBwYXRjaGVzIGZvciBUTFMgdGhyZWFkcwoJICBvbiBXaW5kb3dzIGZyb20gSmVzc2UgUGVsdG9uCgkqIHBhcnNlci5jOiB0aW55IHNhZmV0eSBwYXRjaCBmb3IgeG1sU3RyUHJpbnRmKCkgbWFrZSBzdXJlIHRoZQoJICByZXR1cm4gaXMgYWx3YXlzIHplcm8gdGVybWluYXRlZC4gU2hvdWxkIGFsc28gaGVscCBkZXRlY3RpbmcKCSAgcGFzc2luZyB3cm9uZyBidWZmZXIgc2l6ZSBlYXNpbGx5LgoJKiByZXN1bHQvVkMvKiByZXN1bHQvdmFsaWQvcnNzLnhtbC5lcnIgcmVzdWx0L3ZhbGlkL3hsaW5rLnhtbC5lcnI6CgkgIHVwZGF0ZWQgdGhlIHJlc3VsdHMgdG8gZm9sbG93IHRoZSBlcnJvcnMgc3RyaW5nIGdlbmVyYXRlZCBieQoJICBsYXN0IGNvbW1pdC4KClR1ZSBPY3QgIDcgMTQ6MTY6NDUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBsYXN0IGNsZWFudXAgb2YgZXJyb3IKCSAgaGFuZGxpbmcgaW4gdGhlIFJlbGF4LU5HIG1vZHVsZS4KClR1ZSBPY3QgIDcgMTM6MzA6MzkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVycm9yLmMgcmVsYXhuZy5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IHN3aXRjaGVkIFJlbGF4LU5HCgkgIG1vZHVsZSB0byB0ZWggbmV3IGVycm9yIHJlcG9ydGluZy4gQmV0dGVyIGRlZmF1bHQgcmVwb3J0LCBhZGRzCgkgIHRoZSBlbGVtZW50IGFzc29jaWF0ZWQgaWYgZm91bmQsIGNvbnRleHQgYW5kIG5vZGUgYXJlIGluY2x1ZGVkCgkgIGluIHRoZSB4bWxFcnJvcgoJKiBweXRob24vdGVzdHMvcmVhZGVyMi5weTogdGhlIGVycm9yIG1lc3NhZ2VzIGNoYW5nZWQuCgkqIHJlc3VsdC9yZWxheG5nLyo6IGVycm9yIG1lc3NhZ2UgY2hhbmdlZCB0b28uCgpNb24gT2N0ICA2IDEwOjQ2OjM1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9NYWtlZmlsZS5iY2Igd2luMzIvTWFrZWZpbGUubWluZ3cgd2luMzIvTWFrZWZpbGUubXN2YwoJICB3aW4zMi9jb25maWd1cmUuanM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBTdOlwaGFuZSBCaWRvdWwgdG8KCSAgZml4IHRoZSBjb21waWxhdGlvbiBvZiAyLjYuMCBjb2RlIG9uIFdpbjMyCgpNb24gT2N0ICA2IDEwOjE2OjMwIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay14bWwtdGVzdC1zdWl0ZS5weTogZml4aW5nIHRoZSBzY3JpcHQKCSogcGFyc2VyLmM6IHJlcGxhY2Ugc2VxdWVuY2VzIG9mIFJBVyAmJiBOWFQoLikgPT0gJy4nIHdpdGgKCSAgbWVtY21wIGNhbGxzLCBzZWVtcyB0byBub3QgYnJlYWsgY29uZm9ybWFuY2UsIHNsaWdodGx5IGluZmxhdGUKCSAgdGhlIHNpemUgb2YgdGhlIGdjYyBnZW5lcmF0ZWQgY29kZSB0aG91Z2guCgpTdW4gT2N0ICA1IDIzOjMwOjQ4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYyBwYXJzZXIuYyB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oOgoJICBtb3JlIGNsZWFudXAgb2YgZXJyb3IgaGFuZGxpbmcgaW4gcGFyc2VySW50ZXJuYWxzLCBzaGFyaW5nIHRoZQoJICByb3V0aW5lIGZvciBtZW1vcnkgZXJyb3JzLgoKU3VuIE9jdCAgNSAxNTo0OToxNCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIE1ha2VmaWxlLmFtIGxlZ2FjeS5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IG1vcmUgY29kZSBjbGVhbnVwLCBlc3BlY2lhbGx5IGFyb3VuZAoJICBlcnJvciBtZXNzYWdlcywgdGhlIEhUTUwgcGFyc2VyIGhhcyBub3cgYmVlbiB1cGdyYWRlZCB0byB0aGUgbmV3CgkgIGhhbmRsaW5nLgoJKiByZXN1bHQvSFRNTC8qOiBhIGZldyBjaGFuZ2VzIGluIHRoZSByZXN1bHRpbmcgZXJyb3IgbWVzc2FnZXMKClNhdCBPY3QgIDQgMjM6MDY6NDEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IG1vcmUgZXJyb3Ivd2FybmluZwoJICBoYW5kbGluZyBjbGVhbnVwcywgdGhlIFhNTCBwYXJzZXIgbW9kdWxlIHNob3VsZCBiZSBva2F5IG5vdy4KClNhdCBPY3QgIDQgMDE6NTg6MjcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbiB4bWxkd2Fsay5jIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtCgkgIGluY2x1ZGUvbGlieG1sL3htbGR3YWxrLmggaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOgoJICBpbnRlZ3JhdGVkIHRoZSB4bWxEb2NXYWxrZXIgQVBJIGdpdmVuIGJ5IEFsZnJlZCBNaWNrYXV0c2NoLAoJICBhbmQgcHJvdmlkaW5nIGFuIHhtbFJlYWRlciBsaWtlIEFQSSBidXQgd29ya2luZyBvbiBhIHhtbERvY1B0ci4KClNhdCBPY3QgIDQgMDA6MTg6MjkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBtb3JlIGNsZWFudXAgaW4gbWFrZSB0ZXN0cwoJKiBlcnJvci5jIHZhbGlkLmMgcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogbW9yZSB3b3JrCgkgIGluIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgZXJyb3IgcmVwb3J0aW5nIHN0cmF0ZWd5LgoJKiBweXRob24vdGVzdHMvcmVhZGVyMi5weSAgcmVzdWx0L1ZDLyogcmVzdWx0L3ZhbGlkLyo6CgkgIGZldyBjaGFuZ2VzIGluIHRoZSBzdHJpbmdzIGdlbmVyYXRlZCBieSB0aGUgdmFsaWRhdGlvbiBvdXRwdXQKCkZyaSBPY3QgIDMgMDA6MTk6MDIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBjaGFuZ2VkICdtYWtlIHRlc3RzJyB0byB1c2UgYSBjb25jaXNlIG91dHB1dCwKCSAgc2Nyb2xsaW5nIHRvIHNlZSB3aGVyZSB0aGluZyBicm9rZSB3YXNuJ3QgcGxlYXNhbnQKCSogY29uZmlndXJlLmluOiBzb21lIGJldGE0IHByZXBhcmF0aW9uLCBidXQgbm90IHJlYWR5IHlldAoJKiBlcnJvci5jIGdsb2JhbHMuYyBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDoKCSAgbmV3IGVycm9yIGhhbmRsaW5nIGNvZGUsIGxhc3QgZXJyb3IgaW5mb3JtYXRpb25zIGFyZSBzdG9yZWQKCSAgaW4gdGhlIHBhcnNpbmcgY29udGV4dCBvciBhIGdsb2JhbCB2YXJpYWJsZSwgbmV3IEFQSXMgdG8KCSAgaGFuZGxlIHRoZSB4bWxFcnJvclB0ciB0eXBlLgoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB2YWxpZC5jIDogc3RhcnRlZCBtaWdyYXRpbmcgdG8gdGhlCgkgIG5ldyBlcnJvciBoYW5kbGluZyBjb2RlLCBpdCdzIGEgcm95YWwgcGFpbi4KCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg6CgkgIG1vdmVkIHRoZSBkZWZpbml0aW9uIG9mIHhtbE5ld1BhcnNlckN0eHQoKQoJKiBwYXJzZXIuYzogc21hbGwgcG90ZW50aWFsIGJ1ZmZlciBhY2Nlc3MgcHJvYmxlbSBpbiBwdXNoIGNvZGUKCSAgcHJvdmlkZWQgYnkgSnVzdGluIEZsZXRjaGVyCgkqIHJlc3VsdC8qLnNheCByZXN1bHQvVkMvUEVOZXN0aW5nKiByZXN1bHQvbmFtZXNwYWNlcy8qCgkgIHJlc3VsdC92YWxpZC8qLmVycjogc29tZSBlcnJvciBtZXNzYWdlcyB3ZXJlIHNsaWd0aGx5IGNoYW5nZWQuCgpUaHUgT2N0ICAyIDEzOjAxOjEzIDIwMDMgIEFsZWtzZXkgU2FuaW4gIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggcGFyc2VyLmM6IGludHJvZHVjZWQgeG1sU3RyUHJpbnRmCglmdW5jdGlvbiAod3JhcHBlciBhcm91bmQgc25wcmludGYpCgpXZWQgT2N0ICAxIDIxOjEyOjA2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbnRpdGllcy5jOiBGaXggZXJyb3Igb24gb3V0cHV0IG9mIGhpZ2ggY29kZXBvaW50IGNoYXJyZWYgbGlrZQoJICAmI3gxMEZGRkY7ICwgcmVwb3J0ZWQgYnkgRXJpYyBIYW5jaHJvdwoKV2VkIE9jdCAgMSAxNDoyMDoxMCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogRE9DQnBhcnNlci5jIGluY2x1ZGUvbGlieG1sL0RPQ0JwYXJzZXIuaDogbGV0J3Mgc2VlIGhvdyBtdWNoCgkgIG9mIGEgcGFpbiBtdXJyYXljIGlzIHJlYWxseSBnb25uYSBiZS4KCldlZCBPY3QgIDEgMTE6MDM6NDAgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBBcHBsaWVkIGZpeCBmb3IgYnVnICMxMjM0ODEgcmVwb3J0ZWQgYnkgUGV0ZXIgRGVycgoKVHVlIFNlcCAzMCAxNTozNDozMSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW50aXRpZXMuYyBsZWdhY3kuYyBwYXJzZXIuYzogbWFkZSB0aGUgcHJlZGVmaW5lZCBlbnRpdGllcwoJICBzdGF0aWMgcHJlZGVmaW5lZCBzdHJ1Y3R1cmVzIHRvIGF2b2lkIHRoZSB3b3JrLCBtZW1vcnkgYW5kCgkgIGhhemFyZHMgYXNzb2NpYXRlZCB0byBpbml0aWFsaXphdGlvbi9jbGVhbnVwLgoKVHVlIFNlcCAzMCAxNDozMDo0NyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbiBsZWdhY3kuYyBwYXJzZXIuYwoJICBwYXJzZXJJbnRlcm5hbHMuYyB0ZXN0SFRNTC5jIHhtbGxpbnQuYyBpbmNsdWRlL2xpYnhtbC9IVE1McGFyc2VyLmgKCSAgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOiBhZGRlZCBhIG5ldyBjb25maWd1cmUKCSAgb3B0aW9uIC0td2l0aC1wdXNoLCBzb21lIGNsZWFudXBzLCBjaGFzZWQgY29kZSBzaXplIGFub21hbGllcy4KCSAgTm93IGEgbGlicmFyeSBjb25maWd1cmVkIC0td2l0aC1taW5pbXVtIGlzIGFyb3VuZCAxNTBLQiwKCSAgc291bmRzIGdvb2QgZW5vdWdoLgoKVHVlIFNlcCAzMCAxMjozMTowMCBBRVNUIDIwMDMgTWFsY29sbSBUcmVkaW5uaWNrIDxtYWxjb2xtQGNvbW1zZWN1cmUuY29tLmF1PgoKCSogbGlieG1sLTIuMC11bmluc3RhbGxlZC5wYy5pbjogTmV3IGZpbGUgZm9yIGJ1aWxkaW5nIGFnYWluc3QKCXVuaW5zdGFsbGVkIGxpYnhtbDIgYnVpbGRzLgoJKiBjb25maWd1cmUuaW4sIE1ha2VmaWxlLmFtOiBTdXBwb3J0IHRoZSAqLXVuaW5zdGFsbGVkLnBjIGZpbGUuCgkqIC5jdnNpZ25vcmU6IElnbm9yZSB0aGUgbmV3IGdlbmVyYXRlZCAqLnBjIGZpbGUuCgpUdWUgU2VwIDMwIDAyOjM4OjE2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBTQVguYyBTQVgyLmMgY29uZmlndXJlLmluIGdsb2JhbHMuYyBwYXJzZXIuYwoJICBwYXJzZXJJbnRlcm5hbHMuYyB0ZXN0UmVhZGVyLmMgdGVzdFNBWC5jIHhtbElPLmMgeG1sbGludC5jCgkgIHhtbHJlYWRlci5jIGV4YW1wbGUvZ2pvYnJlYWQuYyBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW46CgkgIGFkZGVkIDIgbmV3IGNvbmZpZ3VyZSBvcHRpb246IC0td2l0aC1yZWFkZXIgLS13aXRoLXNheDEKCSAgdG8gYWxsb3cgcmVtb3ZpbmcgdGhlIHJlYWRlciBvciBub24teG1sUmVhZHh4eCgpIGludGVyZmFjZXMuCgpNb24gU2VwIDI5IDE5OjU4OjI2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gZW50aXRpZXMuYyB0cmVlLmMgdmFsaWQuYyB4bWxsaW50LmMKCSAgaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjoKCSAgQWRkaW5nIGEgY29uZmlndXJlIG9wdGlvbiB0byByZW1vdmUgdHJlZSBtYW5pcHVsYXRpb24KCSAgY29kZSB3aGljaCBpcyBub3Qgc3RyaWN0bHkgbmVlZGVkIGJ5IHRoZSBwYXJzZXIuCgpNb24gU2VwIDI5IDE1OjIzOjQxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vZnRwLmMgbmFub2h0dHAuYzogbGFzdCBmaW5pc2hpbmcgdG91Y2ggdG8gdGhlIEJlT1MKCSAgcGF0Y2ggZnJvbSBNYXJjaW4gJ1NoYXJkJyBLb25pY2tpCgpNb24gU2VwIDI5IDE1OjE1OjA4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIFNBWDIuYyBjMTRuLmMgY2F0YWxvZy5jIGNvbmZpZ3VyZS5pbiBkZWJ1Z1hNTC5jCgkgIGVuY29kaW5nLmMgZW50aXRpZXMuYyBuYW5vZnRwLmMgbmFub2h0dHAuYyBwYXJzZXIuYyByZWxheG5nLmMKICAgICAgICAgIHRlc3RBdXRvbWF0YS5jIHRlc3RDMTROLmMgdGVzdEhUTUwuYyB0ZXN0UmVnZXhwLmMgdGVzdFJlbGF4LmMKICAgICAgICAgIHRlc3RTY2hlbWFzLmMgdGVzdFhQYXRoLmMgdGhyZWFkcy5jIHRyZWUuYyB2YWxpZC5jIHhtbElPLmMKCSAgeG1sY2F0YWxvZy5jIHhtbGxpbnQuYyB4bWxtZW1vcnkuYyB4bWxyZWFkZXIuYyB4bWxzY2hlbWFzLmMKCSAgZXhhbXBsZS9nam9icmVhZC5jIGluY2x1ZGUvbGlieG1sL0hUTUx0cmVlLmggaW5jbHVkZS9saWJ4bWwvYzE0bi5oCgkgIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaCBpbmNsdWRlL2xpYnhtbC9kZWJ1Z1hNTC5oCgkgIGluY2x1ZGUvbGlieG1sL2VudGl0aWVzLmggaW5jbHVkZS9saWJ4bWwvbmFub2h0dHAuaAoJICBpbmNsdWRlL2xpYnhtbC9yZWxheG5nLmggaW5jbHVkZS9saWJ4bWwvdHJlZS5oCgkgIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmggaW5jbHVkZS9saWJ4bWwveG1sSU8uaAoJICBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzLmggaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluCgkgIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmggcHl0aG9uL2xpYnhtbC5jOgoJICBPa2F5IHRoaXMgaXMgc2NhcnkgYnV0IGl0IGlzIGp1c3QgYWRkaW5nIGEgY29uZmlndXJlIG9wdGlvbgoJICB0byBkaXNhYmxlIG91dHB1dCwgdGhpcyB0b3VjaGVzIG1vc3Qgb2YgdGhlIGZpbGVzLgoKTW9uIFNlcCAyOSAxMjo1Mzo1NiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbWVtb3J5LmM6IGJldHRlciBmaXgsIGF2b2lkcyBicmVha2luZyB0aGUgcHl0aG9uIGJpbmRpbmdzCgpNb24gU2VwIDI5IDExOjIxOjMzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxtZW1vcnkuYzogZml4IGEgY29tcGlsYXRpb24gcHJvYmxlbSB3aGVuIGNvbmZpZ3VyaW5nCgkgIHdpdGggZGVidWcgYnV0IHdpdGhvdXQgbWVtLWRlYnVnCgpTdW4gU2VwIDI4IDIwOjUzOjE3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogY2xlYW51cCwgY3JlYXRpbmcgYSBuZXcgbGVnYWN5LmMgbW9kdWxlLAoJICBtYWRlIHN1cmUgbWFrZSB0ZXN0cyByYW4gaW4gcmVkdWNlZCBjb25kaXRpb25zCgkqIFNBWC5jIFNBWDIuYyBjb25maWd1cmUuaW4gZW50aXRpZXMuYyBnbG9iYWxzLmMgcGFyc2VyLmMKCSAgcGFyc2VySW50ZXJuYWxzLmMgdHJlZS5jIHZhbGlkLmMgeGxpbmsuYyB4bWxJTy5jIHhtbGNhdGFsb2cuYwoJICB4bWxtZW1vcnkuYyB4cGF0aC5jIHhtbG1lbW9yeS5jIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjoKCSAgaW5jcmVhc2VkIHRoZSBtb2R1bGFyaXphdGlvbiwgYWxsb3cgdG8gY29uZmlndXJlIG91dCAKCSAgdmFsaWRhdGlvbiBjb2RlIGFuZCBsZWdhY3kgY29kZSwgYWRkZWQgYSBjb25maWd1cmF0aW9uCgkgIG9wdGlvbiAtLXdpdGgtbWluaW11bSBjb21waWxpbmcgb25seSB0aGUgbWFuZGF0b3J5IGNvZGUKCSAgd2hpY2ggdGhlbiBzaHJpbmsgdG8gMjAwS0IuCgpTdW4gU2VwIDI4IDAyOjE1OjA3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4IGEgYnVnIHJhaXNlZCBieSB0aGUgTWlwcyBjb21waWxlci4KCSogaW5jbHVkZS9saWJ4bWwvU0FYLmggaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IG1vdmUgdGhlIAoJICBTQVh2MSBibG9jayBkZWZpbml0aW9ucyB0byBwYXJzZXIuaCBmaXhlcyBidWcgIzEyMzM4MAoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaDogcmVpbnN0YW5jaWF0ZQoJICB0aGUgYXR0cmlidXRlIGFuZCBlbGVtZW50IHBvb2wgYm9ya2VuIDIgY29tbWl0cyBhZ28uCgkgIFN0YXJ0IHBsYXlpbmcgd2l0aCBhbiBlbnRyeSBwb2ludCB0byBwcmVzZXJ2ZSBhIHN1YnRyZWUuCgkqIGVudGl0aWVzLmM6IHJlbW92ZSBhIHdhcm5pbmcuCgpTYXQgU2VwIDI3IDEyOjE5OjM4IFBEVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZW5jb2RpbmcuYywgcGFyc2VyLmMsIHJlbGF4bmcuYzogZnVydGhlciAoZmluYWw/KSBtaW5vcgoJICBjaGFuZ2VzIGZvciBjb21waWxhdGlvbiB3YXJuaW5ncy4gTm8gY2hhbmdlIHRvIGxvZ2ljLgoKRnJpIFNlcCAyNiAxODowMzo0MiBQRFQgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHBhcnNlci5jOiBmaXhlZCBzbWFsbCBwcm9ibGVtIHdpdGggbWlzc2luZyBlbnRpdGllcyAodGVzdC9lbnQyKQoKU2F0IFNlcCAyNyAwMToyNTozOSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IFdpbGxpYW0ncyBjaGFuZ2UgYWxsb3dlZCB0byBzcG90IGEgbmFzdHkgYnVnIGluIHhtbERvUmVhZAoJICBpZiB0aGUgcmVzdWx0IGlzIG5vdCB3ZWxsIGZvcm1lZCB0aGF0IGN0eHQtPm15RG9jIGlzIG5vdCBOVUxMCgkgIGFuZCB1c2VzIHRoZSBjb250ZXh0IGRpY3Rpb25uYXJ5LgoKRnJpIFNlcCAyNiAyMTowOTozNCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IG90aGVyIHBhdGNoZXMgZnJvbSBXaWxsaWFtIEJyYWNrIHRvIGF2b2lkCgkgIGNvbXBpbGF0aW9uIHdhcm5pbmdzIG9uIEFJWC4KCkZyaSBTZXAgMjYgMTE6MDM6MDggUERUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBIVE1McGFyc2VyLmMsIGVudGl0aWVzLmMsIHhtbHJlYWRlci5jOiBtaW5vciBjaGFuZ2UgdG8KCSAgYXZvaWQgY29tcGlsYXRpb24gd2FybmluZ3Mgb24gc29tZSAoZS5nLiBBSVgpIHN5c3RlbXMKCkZyaSBTZXAgMjYgMTY6NDk6MjUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jOiBmaXhlZCBhIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcHJvYmxlbQoJICB3aGVuIGZvcm1hdHRpbmcgImRlcHJlY2F0ZWQgU0FYdjEgZnVuY3Rpb24gaWdub3JhYmxlV2hpdGVzcGFjZSIKCSAgY291bGQgYmUgcmVwcm9kdWNlZCBieSB4bWxsaW50IC0tZm9ybWF0CgpGcmkgU2VwIDI2IDE1OjUwOjQ0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvbGlieG1sMi1hcGkueG1sOiByZWJ1aWx0IHRoZSBBUEkKCSogeG1sbGludC5jIGRvYy94bWxsaW50LjEgZG9jL3htbGxpbnQueG1sOiBhZGRlZCB0aGUgbmV3IG9wdGlvbnMKCSAgLS1ub2NkYXRhIGFuZCAtLW5zY2xlYW4gdG8gcmVtb3ZlIENEQVRBIHNlY3Rpb24gYW5kIHN1cnBlcmZsdW91cwoJICBuYW1lc3BhY2UgZGVjbGFyYXRpb25zCgkqIHBhcnNlci5jIFNBWDIuYzogaW1wbGVtZW50YXRpb24gb2YgdGhlIDIgbmV3IG9wdGlvbnMKCkZyaSBTZXAgMjYgMTQ6NDE6NTMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyB0ZXN0SFRNTC5jIHhtbGxpbnQuYyBpbmNsdWRlL2xpYnhtbC9IVE1McGFyc2VyLmg6CgkgIGFkZGVkIHRoZSBzYW1lIGh0bWxSZWFkIEFQSXMgdGhhbiB0aGVpciBYTUwgY291bnRlcnBhcnRzCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBuZXcgcGFyc2VyIG9wdGlvbnMsIG5vdCB5ZXQgaW1wbGVtZW50ZWQsCgkgIGFkZGVkIGFuIG9wdGlvbnMgZmllbGQgdG8gdGhlIGNvbnRleHQuCgkqIHRyZWUuYzogcGF0Y2ggZnJvbSBTaGF1biBNY0NhbmNlIHRvIGZpeCBidWcgIzEyMzIzOCB3aGVuIF1dPgoJICBpcyBmb3VuZCB3aXRoaW4gYSBjZGF0YSBzZWN0aW9uLgoJKiByZXN1bHQvbm9lbnQvY2RhdGEyIHJlc3VsdC9jZGF0YTIgcmVzdWx0L2NkYXRhMi5yZHIKCSAgcmVzdWx0L2NkYXRhMi5zYXggdGVzdC9jZGF0YTI6IGFkZCBvbmUgbW9yZSBjZGF0YSB0ZXN0CgkgIApUaHUgU2VwIDI1IDIzOjAzOjIzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyB4bWxsaW50LmMgZG9jL2xpYnhtbDItYXBpLnhtbCBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDoKCSAgQ2hhbmdlZCB0aGUgbmV3IHhtbFJlYWQveG1sQ3R4dFJlYWQgQVBJcyB0byBoYXZlIGFuIGV4dHJhCgkgIGJhc2UgVVJMIHBhcmFtZXRlciB3aGVuIG5vdCBsb2FkaW5nIGZyb20gYSBmaWxlIG9yIFVSTC4KClRodSBTZXAgMjUgMTY6MjM6NTggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIGEgYmV0YTMgc29sdmluZyB0aGUgQUJJIHByb2JsZW1zCgkqIGdsb2JhbHMuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0ZXN0SFRNTC5jIEhUTUxwYXJzZXIuYyBTQVguYwoJICBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggaW5jbHVkZS9saWJ4bWwvU0FYLmg6IG1ha2Ugc3VyZSB0aGUKCSAgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgdGhlIGRlZmF1bHQgU0FYIGhhbmRsZXIgYXJlIFYxIG9uZXMgdG8KCSAgYXZvaWQgQUJJIGNvbXBhdCBwcm9ibGVtcy4KCSogeG1scmVhZGVyLmM6IGNsZWFudXAgb2YgdW5lZWRlZCBjb2RlCgkqIGhhc2guYzogZml4IGEgY29tbWVudAoKVGh1IFNlcCAyNSAxNDoxNjo1MSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYMi5jIGhhc2guYyBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxleHBvcnRzLmggCgkgIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjoKCSAgZml4aW5nIHNvbWUgY29tbWVudHMgdG8gYXZvaWQgd2FybmluZ3MgZnJvbSBhcGlidWlsZC5weQoKV2VkIFNlcCAyNCAyMzo0MjowOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvY29uZmlndXJlLmpzOiBwYXRjaCBmcm9tIFN0ZXBoYW5lIEJpZG91bCBmb3IgY29uZmlndXJpbmcKCSAgdGhlIGJldGEyIHZlcnNpb24gIzEyMzEwNAoKV2VkIFNlcCAyNCAyMzoxNzo1OSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGFkZGluZyByZXBlYXRlZCBwYXJzaW5nIGFuZCB2YWxpZGF0aW5nIHRlc3RzCgkqIFNBWDIuYyBwYXJzZXIuYyB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IG1ha2UgdGhlIG5ldwoJICBET00gdHJlZSBidWlsZGluZyBpbnRlcmZhY2VzIHVzZSB0aGUgZGljdGlvbmFyeSBmcm9tIHRoZSAKCSAgcGFyc2luZyBjb250ZXh0IHRvIGJ1aWxkIHRoZSBlbGVtZW50IGFuZCBhdHRyaWJ1dGVzIG5hbWVzCgkgIGFzIHdlbGwgYXMgZm9ybWF0dGluZyBzcGFjZXMgYW5kIHNob3J0IHRleHQgbm9kZXMKCSogaW5jbHVkZS9saWJ4bWwvZGljdC5oIGRpY3QuYzogYWRkZWQgc29tZSByZWZlcmVuY2UgY291bnRpbmcKCSAgZm9yIHhtbERpY3RQdHIgYmVjYXVzZSB0aGV5IGNhbiBiZSBzaGFyZWQgYnkgZG9jdW1lbnRzIGFuZAoJICBhIHBhcnNlciBjb250ZXh0LgoJKiB4bWxyZWFkZXIuYzogYSBiaXQgb2YgY2xlYW51cCwgcmVtb3ZlIHRoZSBzcGVjaWZpYyB0cmVlIGZyZWVpbmcKCSAgZnVuY3Rpb25zIGFuZCB1c2UgdGhlIHN0YW5kYXJkIG9uZXMgbm93LgoJKiB4bWxsaW50LmM6IGFkZCAtLW5vZGljdAoJKiBweXRob24vbGlieG1sLmM6IGZpeCBhIHN0dXBpZCBidWcgc28gdGhhdCBucygpIHdvcmtzIG9uIAoJICBhdHRyaWJ1dGUgbm9kZXMuCgpUdWUgU2VwIDIzIDIzOjA3OjQ1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogYWRkaW5nIGEgbmV3IHNldCBvZgoJICBBUEkgZm9yIHBhcnNpbmcgeG1sUmVhZERvYygpIHhtbFJlYWRGaWxlKCkgLi4uIHhtbFJlYWRJTygpCgkgIGFuZCB4bWxDdHh0UmVhZERvYygpIC4uLiB4bWxDdHh0UmVhZElPKCkuIFRoYXQgd2l0aAoJICBhIGNsZWFyIGRlZmluZSBvZiB4bWxQYXJzZXJPcHRpb24sIHhtbEN0eHRVc2VPcHRpb25zKCkKCSAgc2hvdWxkIHNpbXBsaWZ5IGN1c3RvbSBwYXJzaW5nIHdpdGhvdXQgYmVpbmcgdGVtcHRlZCB0bwoJICB1c2UgZ2xvYmFsIHZhcmlhYmxlcywgYW5kIHhtbEN0eHRSZXNldCgpIHNob3VsZCBhbGxvdyByZXVzZQoJICBvZiBhIGNvbnRleHQgZm9yIG11bHRpcGxlIHBhcnNpbmcuCgkqIHhtbGxpbnQuYzogc3dpdGNoZWQgdG8gdXNlIHhtbFJlYWRYWFgsIGFsbG93IG9wdGlvbnMgdG8KCSAgYmUgdXNlZCBzaW11bHRhbmVvdXNseSB3aXRoIGxlc3MgdHJvdWJsZXMuCgkqIHRyZWUuYzogc2ltcGxlIHdhcm5pbmcgcmVtb3ZhbAoJKiBkb2MvYXBpYnVpbGQucHk6IHNtYWxsIGZpeAoJKiBkb2MvbGlieG1sMi1hcGkueG1sIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogdXBkYXRlZAoKVHVlIFNlcCAyMyAxMToxNToyMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHJldmVydCB4bWxDcmVhdGVEb2NQYXJzZXJDdHh0KCkgc2luY2UgdGhpcyBicmVhawoJICB0aGUgcGFyc2VEb2MoKSBweXRob24gYmluZGluZ3MKClR1ZSBTZXAgMjMgMTE6MDA6MTggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBtYWtlIHN1cmUgeG1sRGV0ZWN0U0FYMigpIGlzIGNhbGxlZCBvbmx5IGF0IAoJICBwYXJzaW5nIHRpbWUgdG8gYXZvaWQgYnJlYWtpbmcgYXBwcyBjaGFuZ2luZyB0aGUgU0FYCgkgIGNhbGxiYWNrcyBhZnRlciBjb250ZXh0IGFsbG9jYXRpb24sIGNoYW5nZSB4bWxDcmVhdGVEb2NQYXJzZXJDdHh0KCkKCSAgdG8gdXNlIGFuIGltbXV0YWJsZSBidWZmZXIgaW5zdGVhZCBvZiBhIGNvcHkKClR1ZSBTZXAgMjMgMDk6NDA6MzMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBNYXJrdXMgS2VpbSBmaXhpbmcgYSBwcm9ibGVtCgkgIHdpdGggSS9PIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbi4KCSogaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogZml4ZWQgIzEyMjk5NCBjb21tZW50IG51bWJlcmluZwoJICBmb3IgeG1sUGFyc2VyRXJyb3JzCgpNb24gU2VwIDIyIDEyOjIxOjExIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiB0aGUgdXJpIGFyZyB0byB4bWxOb2RlU2V0QmFzZSBpcwoJICByZWFsbHkgYSBjb25zdCB4bWxDaGFyKgoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaDogYWRkaW4gdGhlCgkgIHhtbFRleHRSZWFkZXJDb25zdFN0cmluZygpIHRvIGdldCBhbiBpbnRlcm5lZCBzdHJpbmcgZnJvbQoJICB0aGUgcmVhZGVyCgpTdW4gU2VwIDIwIDE3OjIyOjIwIFBEVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZXJyb3IuYzogZml4ZWQgYSB3YXJuaW5nIG1lc3NhZ2UgKHRyaXZpYWwpCgkqIGRvYy9zZWFyY2gucGhwOiByZW1vdmVkIGluY29ycmVjdCB3YXJuaW5nIG1lc3NhZ2Ugd2hlbiB3b3JkCgkgIHNlYXJjaCBub3QgZm91bmQgaW4gbGFzdCBvZiBtdWx0aXBsZSB0YWJsZXMgKGJ1ZyAxMTk1MzUpCgpGcmkgU2VwIDE5IDE0OjI2OjI4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyBhIDIuNi4wLWJldGEyIHJlbGVhc2UKCSogeG1sSU8uYzogYXZvaWQgYSB3YXJuaW5nCgkqIHRyZWUuYzogYXZvaWQgZHVwbGljYXRlIGNvZGUgaW4geG1sUmVwbGFjZU5vZGUgYXMgcG9pbnRlZCBvdXQKCSAgYnkgQ2hyaXMgUnlsYW5kCgkqIGluY2x1ZGUvbGlieG1sL2RpY3QuaDogYWRkIGEgUU5hbWUgYWNjZXNzIGxvb2t1cCB0byB0aGUKCSAgZGljdGlvbmFyeS4KCSogeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmg6IGFkZGluZyBjb25zdCBhY2Nlc3MKCSAgYmFzZWQgb24gdGhlIGRpY3Rpb25hcnkgaW50ZXJmYWNlIGZvciBzdHJpbmcgcmVhZCBmcm9tIHRoZQoJICByZWFkZXIsIHRoZSBub2RlIGNvbnRlbnQgYWNjZXNzIGlzIHN0aWxsIFRPRE8sIGl0J3MgdG9vIGRpZmZlcmVudAoKRnJpIFNlcCAxOSAwMDowMTowOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYMi5jOiBmaXhpbmcgbmFtZXNwYWNlIERURCB2YWxpZGF0aW9ucwoJKiByZXN1bHQvdmFsaWQvbnMyLnhtbCByZXN1bHQvdmFsaWQvbnMueG1sOiB0aGUgb3V0cHV0IG9mIGRlZmF1bHRlZAoJICBuYW1lc3BhY2VzIGlzIHNsaWdodGx5IGRpZmZlcmVudCBub3cuCgkqIE1ha2VmaWxlLmFtOiByZXBvcnQgdGhlIG1lbW9yeSB1c2VkIGluIFRpbWluZ3Rlc3RzIChhcyB3ZWxsIGFzIHRpbWUpCgpUaHUgU2VwIDE4IDE1OjI5OjQ2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogYWRkIHN0cmVhbWluZyBvbiBtZW1vcnkgcmVncmVzc2lvbiB0ZXN0cywgZm91bmQKCSAgYmFkIGJ1Z3MgaW4gdGhlIHJlYWRlciBpbnRlcmZhY2UKCSogeG1scmVhZGVyLmM6IGZpeGluZyBidWdzIHcuci50LiB2ZXJ5IGxhcmdlIG5hbWVzLCBhbmQgc3BlY2lhbAoJICBjb25kaXRpb24gaW4gZW5kIG9mIGZpbGUuCgkqIHhtbElPLmMgdHJlZS5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaCBpbmNsdWRlL2xpYnhtbC94bWxJTy5oOgoJICBhZGRpbmcgaW1tdXRhYmxlIGJ1ZmZlcnMsIGFuZCBwYXJzZXIgaW5wdXQgYmFzZWQgb24gdGhvc2UsCgkgIGJ1dCB0aGlzIHNob3VsZCBub3QgYmUgdXNlZCAoeWV0KSBmb3IgZ2VuZXJhbCBwYXJzaW5nCgkqIHBhcnNlci5jOiBhZGRlZCBhIGNvbW1lbnQgYWJvdXQgdXNpbmcgaW1tdXRhYmxlIGJ1ZmZlcnMgZm9yCgkgIGdlbmVyYWwgcGFyc2luZy4KCSogcmVzdWx0L2JpZ25hbWUueG1sLnJkciByZXN1bHQvYmlnbmFtZTIueG1sLnJkcjogZml4aW5nIHRoZQoJICBvdXRwdXQgb2YgdGhlIHJlZ3Jlc3Npb24gdGVzdHMKCSogeG1sbGludC5jOiB1c2luZyB0aGUgaW1tdXRhYmxlIGJ1ZmZlcnMgd2hlbiBzdHJlYW1pbmcgb24KCSAgbW1hcGVkIGZpbGUgKC0tc3RyZWFtIC0tbWVtb3J5KQoKVGh1IFNlcCAxOCAxMjowNDo1MCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGljdC5jOiB0aGUgbGFzdCBwYXRjaCBicm9rZSB1bmljaXR5IG9mIHJldHVybmVkIHN0cmluZ3MsIHJlbW92ZWQKClRodSBTZXAgMTggMDA6MzE6MDIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBhZGQgYSBUaW1pbmd0ZXN0cyB0YXJnZXQgdG8gY2hlY2sgYmFkIGJlaGF2aW91cgoJICBmcm9tIHRoZSBzdHJlYW1pbmcgZW5naW5lCgkqIGRiZ2VuLnBsIGRiZ2VuYXR0ci5wbDogcGVybCBzY3JpcHQgdG8gZ2VuZXJhdGUgYmlnIGluc3RhbmNlcwoJKiB4bWxyZWFkZXIuYzogZml4IGEgYmFkIGJlaGF2aW91ciBvbiBsYXJnZSBidWZmZXIgaW5wdXRzCgpXZWQgU2VwIDE3IDIzOjI1OjQ3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkaWN0LmMgeG1scmVhZGVyLmM6IHR3byBzbWFsbCBpbXByb3ZlbWVudHMKCldlZCBTZXAgMTcgMjI6NTM6MzIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jOiBhdm9pZCBhIGxlYWsgd2l0aCBwcmV2aW91cyBwYXRjaAoKV2VkIFNlcCAxNyAyMjowNjoxMSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jOiB1c2Ugc3RkZXJyIGFuZCBub3Qgc3Rkb3V0IGZvciBkZWZhdWx0IGVycm9ycwoJICBpbiBweXRob24gZW52aXJvbm1lbnQgYnVnICMxMjI1NTIKCldlZCBTZXAgMTcgMjE6MzM6NTcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jOiBzbWFsbCBmaXggZnJvbSBSb2IgUmljaGFyZHMgZm9yIGlucHV0IGZpbGVuYW1lCgkqIHhtbGxpbnQuYzogZml4ZXMgZm9yIC0tcmVwZWF0IGFuZCAtLW1lbW9yeS8tLXN0cmVhbSBmb3Igc3BlZWQgdGVzdHMKCSogeG1sSU86IGFkZGluZyBhIGd1YXJkIGluIG9uZSBmdW5jdGlvbgoKV2VkIFNlcCAxNyAxNTo1Nzo0NCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYMi5jIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBtb3JlIHBlcmZvcm1hbmNlIGh1bnRpbmcKCSAgcmVkdWNpbmcgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWUgYW5kIGF2b2lkaW5nIGV4cGVuc2l2ZSByb3V0aW5lcwoKV2VkIFNlcCAxNyAxMjoyMzo0MSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYMi5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHhtbHJlYWRlci5jOiBzdGFydGVkIG1lc3NpbmcKCSAgc2VyaW91c2x5IHdpdGggcGVyLWRvY3VtZW50IGRpY3QgYW5kIGVsZW1lbnQgYW5kIGF0dHJpYnV0ZSBub2RlcwoJICByZXVzZSBpbiB0aGUgeG1sUmVhZGVyLiBUaGlzIHNlZW1zIHRvIGxlYWQgdG8gYW4gaW50ZXJlc3RpbmcKCSAgc3BlZWR1cCBvZiB0aGUgeG1sUmVhZGVyIGFscmVhZHkuCgpXZWQgU2VwIDE3IDAxOjA3OjU2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkaWN0LmMgaW5jbHVkZS9saWJ4bWwvZGljdC5oOiBkbyBzdHJpbmcgYWxsb2NhdGlvbnMgaW4gbGFyZ2UKCSAgcG9vbHMsIGFsbG93aW5nIHRvIGZpbmQgaWYgYSBzdHJpbmcgcGVydGFpbiB0byBhIGRpY3QgcXVpY2tseQoJKiB4bWxsaW50LmM6IGZpeCAtLXN0cmVhbSAtLXJlcGVhdCAtLXRpbWluZwoJKiBNYWtlZmlsZS5hbTogdGhlIHRlc3RUaHJlYWRzIHJ1biBvdXRwdXQgc2hvdWxkIGJlIHNlZW4uCgpNb24gU2VwIDE1IDE2OjQ2OjI4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVgyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IHN0YXJ0aW5nIHdvcmsgb24gcmV1c2luZyB0aGUKCSAgcGFyc2VyIGRpY3Rpb25hcnkgZm9yIHRoZSBlbGVtZW50IGFuZCBhdHRyaWJ1dGUgdGFnIG5hbWVzLgoJICBBZGQgcG9vbHMgZm9yIEVsZW1lbnQgYW5kIEF0dHJpYnV0ZXMgaW4gdGhlIHBhcnNlciBjb250ZXh0LAoJICB3aGljaCBzaG91bGQgaGVscCBzcGVlZGluZyB1cCB0aGUgcmVhZGVyLgoJKiBNYWtlZmlsZS5hbSByZXN1bHQvKi5yZHIgOiBhZGRpbmcgbm9uLXB5dGhvbiByZWFkZXIgcmVncmVzc2lvbgoJICB0ZXN0cy4KCk1vbiBTZXAgMTUgMTQ6NTQ6NDIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWDIuYyBwYXJzZXIuYyB2YWxpZC5jOiBzdGFydGluZyB0byBjbGVhbnVwIHNvbWUgb2YgdGhlCgkgIHByb2JsZW1zIGV4cG9zZWQgYnkgdGhlIFczQy9OSVNUIHJlZ3Jlc3Npb24gc3VpdGUuCgkqIHJlc3VsdC9lbnQ3LnNheCByZXN1bHQveG1sMi5zYXg6IHNtYWxsIGZpeGVzLgoKTW9uIFNlcCAxNSAxMTo0Njo0NyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IG1vcmUgcGFyc2VyIGVycm9yIGZhY3RvcmluZwoKU3VuIFNlcCAxNCAyMTo1MzozOSBQRFQgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIEhUTUx0cmVlLmM6IEZpeGVkIGJ1ZyAxMjEzOTQgLSBtaXNzaW5nIG5zIG9uIGF0dHJpYnV0ZXMKClN1biBTZXAgMTQgMjE6NDM6MzIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGZhY3RvcmluZyBvZiBtb3JlIAoJICBlcnJvciBoYW5kbGluZyBjb2RlLCBzZXJpb3VzIHNpemUgcmVkdWN0aW9uIGFuZCBtb3JlIGxpc2liaWxpdHkKCSAgb2YgdGhlIHJlc3VsdGluZyBjb2RlLgoJKiBwYXJzZXJJbnRlcm5hbHMuYyBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaAoJICBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogY2hhbmdpbmcgdGhlIHdheSBWQzpQcm9wZXIgR3JvdXAvUEUgTmVzdGluZwoJICBjaGVja3MgYXJlIGRvbmUsIHVzZSBhIGNvdW50ZXIgZm9yIGVudGl0aWVzLiBFbnRpdGllcyB3aGVyZSBmcmVlZCBhbmQKCSAgcmVhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgYWRkcmVzcyBmYWlsaW5nIHRoZSBjaGVjay4KCSogdHJlZS5jOiBhdm9pZCBhIHdhcm5pbmcKCSogcmVzdWx0L3ZhbGlkLyogcmVzdWx0L1ZDLyo6IHRoaXMgc2xpZ2h0bHkgY2hhbmdlcyBzb21lIHZhbGlkYXRpb24KCSAgZXJyb3IgbWVzc2FnZXMuCgpTdW4gU2VwIDE0IDExOjAzOjI3IFBEVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdmFsaWQuYzogZml4ZWQgYnVnIDEyMTc1OSAtIGVhcmx5IGRlY2xhcmF0aW9uIG9mCgkgIGF0dHJpYnV0ZS1saXN0IGluIGV4dGVybmFsIERURAoKU2F0IFNlcCAxMyAxNDo0MjoxMSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogc3RhcnRpbmcgY2xlYW5pbmcgdXAKCSAgZXJyb3IgaGFuZGxpbmcsIGZhY3Rvcml6ZSBlcnJvciBwcm9jZXNzaW5nCgkqIGRvYy94bWxsaW50Lmh0bWw6IHVwZGF0ZSBvZiB0aGUgcGFnZSwgcmVtb3ZlIC0tc2dtbAoKU2F0IFNlcCAxMyAwMjoxMzo1MCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gRE9DQnBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHRlc3REb2Nib29rLmMKCSAgeG1sbGludC5jIGRvYy94bWxsaW50LnhtbCBkb2MveG1sbGludC4xOiByZW1vdmluZyB0aGUgCgkgIGJyb2tlbiBwc2V1ZG8gU0dNTCBEb2NCb29rIHBhcnNlciBjb2RlLgoKRnJpIFNlcCAxMiAxNzoyNDoxMSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4IGEgcHJvYmxlbSB3aXRoIHN0cmNweSgpIGluIHhtbFhQYXRoRm9ybWF0TnVtYmVyKCkKCSAgdmFsZ3JpbmQgcG9pbnRlZCBvdXQgdGhlIHN0cmluZ3Mgb3ZlcmxhcHBlZC4gY2xlYW51cCAuCgpGcmkgU2VwIDEyIDExOjQzOjEyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFwcGxpZWQgc3BlZWR1cCB0byB4bWxTZWFyY2hOcygpIGFzIHN1Z2dlc3RlZCBieQoJICBMdWNhIFBhZG92YW5pLiBDbGVhbmVkIHVwIHhtbFNlYXJjaE5zQnlIcmVmKCkgaW4gdGhlIHByb2Nlc3MKCSAgYXBwbHlpbmcgdGhlIHNhbWUgdHJpY2suCgpGcmkgU2VwIDEyIDAxOjM2OjIwIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogYWRkaW5nIG5hbWVzcGFjZSBjaGVja2luZ3MKCSAgd2hpbGUgbWFraW5nIHN1cmUgdGhleSBzdGlsbCBwYXJzZSBhcyB3ZWxsZm9ybWVkIGRvY3VtZW50cy4KCSAgQWRkIGFuIG5zV2VsbEZvcm1lZCBzdGF0dXMgcmVwb3J0IHRvIHRoZSBjb250ZXh0LCBhbmQgCgkgIHByb3ZpZGUgbmV3IGFwcHJvcHJpYXRlIGVycm9yIGNvZGVzLgoJKiBNYWtlZmlsZS5hbSByZXN1bHQvbmFtZXNwYWNlcy8qIHRlc3QvbmFtZXNwYWNlcy8qOiBhZGQgCgkgIHNwZWNpZmljIHJlZ3Jlc3Npb24gdGVzdGluZyBmb3IgdGhlIG5ldyBuYW1lc3BhY2Ugc3VwcG9ydAoJKiB0ZXN0L2F0dDUgcmVzdWx0L25vZW50L2F0dDUgcmVzdWx0L2F0dDUgcmVzdWx0L2F0dDUuc2F4OgoJICBhZGQgbW9yZSBjb3ZlcmFnZSBmb3IgdGhlIGF0dHJpYnV0ZSBwYXJzaW5nIGFuZCBub3JtYWxpemF0aW9uCgkgIGNvZGUuCgpGcmkgU2VwIDEyIDAxOjM0OjE5IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0aHJlYWRzLmM6IGJhY2twb3J0IG9mIGEgdGhyZWFkIGJ1Z2ZpeCBmcm9tIDJfNV9YIGJyYW5jaAoKVGh1IFNlcCAxMSAxODoyOToxOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIGEgYnVnIGluIG9uZSBjb3JuZXIgY2FzZSBvZiBhdHRyaWJ1dGUgcGFyc2luZy4KClRodSBTZXAgMTEgMTY6MjE6NTMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBkb2MvKiA6IDIuNi4wYmV0YTEgY2hhbmdlcwoJKiBTQVgyLmMgaGFzaC5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jOiBGaXhpbmcgYXR0cmlidXRlCgkgIG5vcm1hbGl6YXRpb24sIG1pZ2h0IG5vdCBiZSB0b3RhbGx5IGZpeGVkIGJ1dCB0aGlzIHNob3VsZCAKCSAgbWFrZSBzdXJlIFNBWCBldmVudCBwcm92aWRlIHRoZSByaWdodCBzdHJpbmdzIGZvciBhdHRyaWJ1dGVzCgkgIGV4Y2VwdCBlbnRpdGllcyBmb3Igd2hpY2ggbGlieG1sMiBpcyBkaWZmZXJlbnQgYnkgZGVmYXVsdAoJICBUaGlzIHNob3VsZCBmaXggIzEwOTU2NAoJKiByZXN1bHQvYXR0cmliLnhtbC5zYXggcmVzdWx0L2VudDMuc2F4IHJlc3VsdC9wM3Auc2F4OiBtaW5vciBjaGFuZ2VzCgkgIGluIGF0dHJpYnV0ZSBjYWxsYmFjayB2YWx1ZXMKCSogcmVzdWx0L2MxNG4vd2l0aC1jb21tZW50cy9leGFtcGxlLTQKCSAgcmVzdWx0L2MxNG4vd2l0aG91dC1jb21tZW50cy9leGFtcGxlLTQ6IHRoaXMgYWxzbyBmaXhlcyBhIHN1YnRsZQoJICBidWcgaW4gdGhlIGNhbm9uaWNhbGl6YXRpb24gdGVzdHMuCgpXZWQgU2VwIDEwIDEyOjM4OjQ0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJVGltZSB0byBjb21taXQgMyBkYXlzIG9mIHdvcmsgcmV3cml0aW5nIHRoZSBwYXJzZXIgaW50ZXJuYWwsCglmaXhpbmcgYnVncyBhbmQgbWlncmF0aW5nIHRvIFNBWDIgaW50ZXJmYWNlIGJ5IGRlZmF1bHQuIFRoZXJlCglpcyBzb21lIHdvcmsgbGV0ZiBUT0RPLCBsaWtlIG5hbWVzcGFjZSB2YWxpZGF0aW9uIGFuZCBhdHRyaWJ1dGVzCglub3JtYWxpemF0aW9uICh0aGlzIGJyZWFrIEMxNE4gcmlnaHQgbm93KQoJKiBNYWtlZmlsZS5hbTogZml4ZWQgdGhlIHRlc3QgcnVsZXMKCSogaW5jbHVkZS9saWJ4bWwvU0FYMi5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oCgkgIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oIFNBWDIuYyBwYXJzZXIuYwoJICBwYXJzZXJJbnRlcm5hbHMuYzogY2hhbmdpbmcgdGhlIHBhcnNlciwgbWlncmF0aW5nIHRvIFNBWDIsCgkgIGFkZGluZyBuZXcgaW50ZXJmYWNlIHRvIHN3aXRjaCBiYWNrIHRvIFNBWDEgb3IgaW5pdGlhbGl6ZSBhCgkgIFNBWCBibG9jayBmb3IgdjEgb3IgdjIuIE1vc3Qgb2YgdGhlIG5hbWVzcGFjZSB3b3JrIGlzIGRvbmUKCSAgYmVsb3cgU0FYLCBhcyB3ZWxsIGFzIGF0dHJpYnV0ZSBkZWZhdWx0aW5nCgkqIGdsb2JhbHMuYzogY2hhbmdlZCBpbml0aWFsaXphdGlvbiBvZiB0aGUgZGVmYXVsdCBTQVggaGFuZGxlcnMKCSogaGFzaC5jIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9oYXNoLmg6IGFkZGVkIFFOYW1lIHNwZWNpZmljIGhhbmRsaW5nCgkqIHhtbElPLmM6IHNtYWxsIGZpeAoJKiB4bWxsaW50LmMgdGVzdFNBWC5jOiBwcm92aWRlIGEgLS1zYXgxIHN3aXRjaCB0byB0ZXN0IHRoZSBvbGQKCSAgdmVyc2lvbiBjb2RlIHBhdGgKCSogcmVzdWx0L3AzcCByZXN1bHQvcDNwLnNheCByZXN1bHQvbm9lbnQvcDNwIHRlc3QvcDNwOiB0aGUgbmV3IGNvZGUKCSAgcG9pbnRlZCBvdXQgYSB0eXBvIGluIGEgdmVyeSBvbGQgdGVzdCBuYW1lc3BhY2UKClN1biBTZXAgIDcgMTk6NTg6MzMgUFREIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxJTy5jIGluY2x1ZGUvbGlieG1sL3htbElPLmggcGFyc2VyLmM6IEltcGxlbWVudGVkIGRldGVjdGlvbgoJICBvZiBjb21wcmVzc2VkIGZpbGVzLCBzZXR0aW5nIGRvYy0+Y29tcHJlc3NlZCBhcHByb3ByaWF0ZWx5CgkgIChidWcgIzEyMDUwMykuCgpTdW4gU2VwICA3IDIyOjUzOjA2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogdHJ5IHRvIGNvcGUgd2l0aCB0aGUgZmFjdCB0aGF0IGFwcHMgbWF5IHN0aWxsCiAgICAgICAgICBoYXZlIGFsbG9jYXRlZCBzbWFsbGVyIFNBWCBjYWxsYmFrIGJsb2NrCgpTdW4gU2VwICA3IDExOjExOjQ1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkaWN0LmM6IGFsbG93IHRvIGdpdmUgLTEgZm9yIHVuZGVmaW5lZCBsZW5ndGggaW4gbG9va3VwcwoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0ZXN0U0FYLmM6CgkgIGZpcnN0IHJvdW5kIG9mIHdvcmsgb24gdGhlIG5ldyBTQVgyIGludGVyZmFjZXMsIHRoZSBBUEkKCSAgd2lsbCBjaGFuZ2UgYnV0IGNvbW1pdGluZyBiZWZvcmUgY2hhbmdpbmcgZm9yIGhpc3RvcmljYWwKCSAgcmVmZXJlbmNlLgoKU2F0IFNlcCAgNiAxMDo1NTowMSBQVEQgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIFNBWDIuYywgeG1sSU8uYzogZml4ZWQgYnVnICMxMjEyMTAgKGNhbGxiYWNrIHRvIHNheC0+ZXJyb3IsCgkgIHNheC0+d2FybmluZyB3aXRoIHdyb25nIHBhcmFtcykuCgpGcmkgU2VwICA1IDEwOjMzOjQyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmg6IHBhdGNoIGZyb20gU3TpcGhhbmUgQmlkb3VsIHRvIGV4cG9ydAoJICBnbG9iYWxzIGVudHJ5IHBvaW50cyB0byB0aGUgcHl0aG9uIGJpbmRpbmdzCgpXZWQgU2VwICAzIDE1OjI0OjQxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IHdoZW4gY3JlYXRpbmcgYSBET0NUWVBFIHVzZSAiaHRtbCIgbG93ZXJjYXNlCgkgIGJ5IGRlZmF1bHQgaW5zdGVhZCBvZiAiSFRNTCIKCSogcGFyc2VyLmMgeG1scmVhZGVyLmM6IG9wdGltaXphdGlvbiwgZ2FpbiBhIGZldyAlIHBhcnNpbmcgc3BlZWQgYnkKCSAgYXZvaWRpbmcgY2FsbHMgdG8gImFyZUJsYW5rcyIgd2hlbiBub3QgbmVlZGVkLgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IHNvbWUgc3RydWN0dXJlCgkgIGV4dGVuc2lvbnMgZm9yIGZ1dHVyZSB3b3JrIG9uIHVzaW5nIHBlci1kb2N1bWVudCBkaWN0aW9uYXJpZXMuCgpXZWQgU2VwICAzIDE1OjA4OjA2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSByZXN1bHRzLyouc2F4IFNBWFJlc3VsdC8qOiByZW1vdmluZyB0aGUgU0FYcmVzdWx0cwoJICB0cmVlLCBrZWVwaW5nIHJlc3VsdCBpbiB0aGUgc2FtZSB0cmVlLCBhZGRlZCBTQVh0ZXN0cyB0byB0aGUKCSAgZGVmYXVsdCAibWFrZSB0ZXN0cyIKClR1ZSBTZXAgIDIgMTU6NTk6MDQgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxleHBvcnRzLmg6IGRlZmluZWQgYWRkaXRpb25hbCBtYWNyb3Mgd2hpY2gKCSAgYWZmZWN0IGV4cG9ydHMgYW5kIGFkZGVkIG1pbmd3IHNlY3Rpb24KCk1vbiBTZXAgIDEgMTU6MTU6MTggUERUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkb2MvaW5kZXgucHk6IGZpeGVkIHByb2JsZW0gcGFyc2luZyB4aHRtbCBkb2NzCgkqIGRvYy94bWxyZWFkZXIuaHRtbCxkb2MvZ3VpZGVsaW5lcy5odG1sOiBzbWFsbCBtb2RpZmljYXRpb24KCSAgdG8gYXZvaWQgcHJvYmxlbSBpbiBweXRob24gcGFyc2luZy4KCSogZG9jL3NlYXJjaC5waHA6IGZpeGVkIHVwcGVyIGNhc2UgZmlsZW5hbWUgcHJvYmxlbSBmb3IgWFNMVCBkb2NzCgpNb24gU2VwICAxIDIyOjU1OjA5IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBwYXRjaCBmcm9tIE1hcmsgVmFrb2MgdGhhdCBhbGxvd3MgY29tcGlsaW5nIAoJICB3aXRoIFhJbmNsdWRlIGJ1dCB3aXRob3V0IFhQb2ludGVyIHN1cHBvcnQuCgpNb24gU2VwICAxIDIyOjMxOjM4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4geG1sMi1jb25maWcuaW46IEFwcGxpZWQgYSBwYXRjaCBmcm9tIEtldmluIFAuIEZsZW1pbmcKCSAgdG8gYWRkIC0tbGlidG9vbC1saWJzIG9wdGlvbiB0byB4bWwyLWNvbmZpZyBzY3JpcHQuCgpTdW4gQXVnIDMxIDIxOjUyOjEyIFBEVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZG9jL1JFQURNRS5kb2NzLCBkb2MvTWFrZWZpbGUuYW06IG5ldyBmaWxlIGFkZGVkLAoJICBnaXZpbmcgc29tZSBkZXNjcmlwdGlvbiBvZiB0aGUgZG9jdW1lbnRhdGlvbiBnZW5lcmF0aW9uIHByb2Nlc3MKCSogZG9jL3NlYXJjaC5waHA6IGZpeGVkIHByb2JsZW0gd2l0aCB1cHBlciBjYXNlIG9uIGZpbGVuYW1lcwoKRnJpIEF1ZyAyOSAxMjoyNTowMSBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL01ha2VmaWxlLmJjYjogdXBkYXRlcyBieSBFcmljIFp1cmNoZXIKClRodSBBdWcgMjggMjI6NTg6MzggUERUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkb2MvYXBpYnVpbGQucHksIGRvYy9saWJ4bWwyLWFwaS54bWw6IGVuaGFuY2VkIGNvZGUKCSAgdG8gY29tcGVuc2F0ZSBmb3IgcG9sbHV0aW9uIGZyb20gSWdvcidzIGhlYWRlciB0YWludAoJICAocXVpY2sgYmVmb3JlIERhbmllbCBub3RpY2VzKQoKVGh1IEF1ZyAyOCAyMzowMTozNiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYMi5jOiBmaXhlZCBhIG5hbWVzcGFjZSBlcnJvciBvbiBhdHRyaWJ1dGUgcmVwb3J0aW5nIGJ1ZwoJICBwb2ludGVkIG91dCBieSBUb2JpYXMgUmVpZgoJKiB0ZXN0L3AzcCByZXN1bHQvcDNwIHJlc3VsdC9ub2VudC9wM3A6IHRoaXMgdGVzdCBjYXNlIHdhcyB3cm9uZwoJICB1c2luZyB4bWxzbiBpbnN0ZWFkIG9mIHhtbG5zLi4uCgpUaHUgQXVnIDI4IDE4OjI1OjA3IENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIGluY2x1ZGUvbGlieG1sL3htbGV4cG9ydHMuaDogZml4ZWQKCSAgdHlwb3MgcmVwb3J0ZWQgYnkgTWFyayBWYWtvYwoKVGh1IEF1ZyAyOCAwODo1OTo1MSBNRFQgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCWFkZDoKCSogZG9jL3R1dG9yaWFsL2FwaS5odG1sCgkqIGRvYy90dXRvcmlhbC9hcjAxczA5Lmh0bWwKCSogZG9jL3R1dG9yaWFsL2luY2x1ZGV4cGF0aC5jCgl1cGRhdGVkCgkqIGRvYy90dXRvcmlhbC8qLmh0bWwKCWZpeCBteSBiYWQgLSBmb3Jnb3QgdG8gY2hlY2sgaW4gbmV3IGZpbGVzIHdoZW4gSSBsYXN0Cgl1cGRhdGVkCgoKVGh1IEF1ZyAyOCAxNDozMToxMyBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL01ha2VmaWxlLmJjYjogbmV3IGZpbGUsIHN1cHBvcnQgZm9yIEJvcmxhbmQgQysrCgkqIHhtbGxpbnQuYzogZml4ZWQgdGltZSBpbmNsdXNpb24gZm9yIHZhcmlvdXMgY29tcGlsZXJzCgpUaHUgQXVnIDI4IDEyOjMyOjU5IENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgRE9DQnBhcnNlci5jIEhUTUxwYXJzZXIuYzogYWRkZWQKCSAgZmV3IGNhc3RzIHRvIHNodXQgdGhlIGNvbXBpbGVyIHdhcm5pbmdzCgpUaHUgQXVnIDI4IDEyOjIzOjUxIENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvTWFrZWZpbGUuKiB3aW4zMi9jb25maWd1cmUuanM6IGZpeGVkIGZvciBtaW5ndwoKVGh1IEF1ZyAyOCAxMDowMTo0NCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2xvYmFscy5jIHRocmVhZHMuYzogZml4aW5nIGJ1ZyAjMTIwODcwIHRyeSB0byBhdm9pZCBwcm9ibGVtCgkgIHdpdGggdW5pbml0aWFsaXplZCBtdXRleGVzCgpXZWQgQXVnIDI3IDE2OjEyOjQxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGZpeGVkIGFuIGVycm9yIHJlcG9ydGluZyBidWcgaW4gUmVsYXgtTkcgd2hlbiB3ZSBlbmQKCSAgdXAgd2l0aCBtdWx0aXBsZSBzdGF0ZXMsIHNlbGVjdCB0aGUgImJlc3QiIG9uZS4gRml4ICMxMjA2ODIKCSogcmVzdWx0L3JlbGF4bmcvdHV0b3IxMV8yXzMuZXJyOiBzbWFsbCBjaGFuZ2UgcmVzdWx0aW5nIAoKV2VkIEF1ZyAyNyAxMToyNToyNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGFwcGxpZWQgYmFzZTY0IHN1cHBvcnQgcGF0Y2ggZnJvbSBBbnRob255IENhcnJpY28KCldlZCBBdWcgMjcgMTA6NTg6NTEgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9bdGhyZWFkcy14cG9pbnRlcl0uaDogcmVhbGlnbmVkIHBhcmFtZXRlcnMKCSAgYWZ0ZXIgdGFpbnQKCldlZCBBdWcgMjcgMDk6NTk6NTQgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxleHBvcnRzLmg6IGZpeGVkIGRlZnMgZm9yIEJvcmxhbmQgY29tcGlsZXIsCgkgIGFzIHJlcG9ydGVkIGJ5IEVyaWMgWnVyY2hlcgoKVHVlIEF1ZyAyNiAxNTo1NDowNCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBmaXhlZCBidWcgIzEyMDM4NiBhZ2FpbiBhIHByb2JsZW0gaW50cm9kdWNlZCB3aGVuCgkgIHRyeWluZyB0byByZXVzZSBhdXRvbWF0YSBmb3IgY29udGVudCB2YWxpZGF0aW9uLiBGaXggYSBidWcgcmVwb3J0CiAgICAgICAgICBwcm9ibGVtIG9uIHplcm9Pck1vcmUKCSogcmVzdWx0L3JlbGF4bmcvdHV0b3IzXzdfZXJyOiBjaGFuZ2Ugc2xpZ2h0bHkgZXJyb3IgcmVwb3J0aW5nLgoKTW9uIEF1ZyAyNSAxMzoyNDo1NyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW06IG1ha2Ugc3VyZSB0aGUgbmV3IGhlYWRlciB3aWxsCgkgIGJlIGluY2x1ZGVkIHdoZW4gZ2VuZXJhdGluZyBhIG5ldyBkaXN0cmlidXRpb24uCgpNb24gQXVnIDI1IDEyOjM3OjA1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGZpeGVkIGEgY291cGxlIG9mIHN0dXBpZCBidWdzIGluIHRoZSBzdGF0ZSBhbGxvY2F0aW9uCgkgIHJvdXRpbmVzIHdoaWNoIGxlZCB0byBidWcgIzEyMDA0MCBhbmQgdGhlIG9uZXMgcmVwb3J0ZWQgYnkKCSAgTWFydGlqbiBGYWFzc2VuCgpNb24gQXVnIDI1IDEyOjM3OjIzIENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmggaW5jbHVkZS9saWJ4bWwvcmVsYXhuZy5oCgkgIGluY2x1ZGUvbGlieG1sL1NBWC5oIGluY2x1ZGUvbGlieG1sL1NBWDIuaDogcmVhbGlnbmVkIHRoZQoJICBwYXJhbWV0ZXJzIGFmdGVyIHRhaW50LgoJCk1vbiBBdWcgMjUgMTE6MTY6MDEgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW46IG1vdmVkIGV4cG9ydCBkZWZzIHRvIGEgc2VwYXJhdGUKCSAgZmlsZSBmb3IgY29uc2lzdGVuY3kuCgkqIGluY2x1ZGUvbGlieG1sL3htbGV4cG9ydHMuaDogbmV3IGZpbGUsIGNvbnRhaW5zIGV4cG9ydCBkZWZzLgoJICAKTW9uIEF1ZyAyNSAxMTowMTo0OSBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sLyouaCBnZW5Vbmljb2RlLnB5OiBleHBvcnRhYmlsaXR5IHRhaW50CgkgIG9mIHRoZSBoZWFkZXJzLgoKVGh1IEF1ZyAyMSAxMjozNzo0NiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IG1ha2UgdGhlIGRlcHJlY2F0ZWQgaW50ZXJmYWNlcyBsb2cgYW4gZXJyb3IgbWVzc2FnZQoJICB0byBiZSBzdXJlIGl0IHdvbid0IGdldCB1c2VkLgoKVGh1IEF1ZyAyMSAwMDo1MDozMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gU0FYMi5jIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtIGluY2x1ZGUvbGlieG1sL1NBWDIuaDoKCSAgQWRkaW5nIG5ldyB2ZXJzaW9uIG9mIHRoZSBTQVggaW50ZXJmYWNlLCBpdCdzIG5vdCB0aGVyZSB5ZXQsCgkgIGN1cnJlbnRseSBqdXN0IHByZXBhcmluZyB0aGUgd29yawoJKiBnbG9iYWxzLmMgcGFyc2VyLmMgU0FYLmMgaW5jbHVkZS9saWJ4bWwvU0FYLmggCgkgIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogZG9pbmcgc29tZQoJICByZWZhY3RvcmluZyBvZiB0aGUgU0FYdjEgaW50ZXJmYWNlcywgb2Jzb2xldGluZyBhIGJ1bmNoIG9mIHRoZW0KCSAgd2hpbGUga2VlcGluZyBmdW5jdGlvbmFsaXRpZXMsIHByZXBhcmluZyBTQVgyIGludGVncmF0aW9uLgoJKiBkaWN0LmM6IHNtYWxsIGNsZWFudXAuCgpXZWQgQXVnIDIwIDAwOjIwOjAxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGVzIGEgc21hbGwgYnVnIGludHJvZHVjZWQgaW4gbGFzdCBjb21taXQgYW5kIGRldGVjdGVkCgkgIGJ5IHZhbGdyaW5kLgoKVHVlIEF1ZyAxOSAxNjo1NDoxOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGljdC5jIGhhc2guYzogb3B0aW1pemF0aW9uIHdoZW4gZnJlZWluZyBoYXNoIHRhYmxlcy4KCSogcGFyc2VyLmMgeG1sSU8uYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IHNvbWUgdHVuaW5nIG9mIGJ1ZmZlcgoJICBhbGxvY2F0aW9ucwoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDoga2VlcCBhCgkgIHNpbmdsZSBhbGxvY2F0ZWQgYmxvY2sgZm9yIGFsbCB0aGUgYXR0cmlidXRlcyBjYWxsYmFja3MsCgkgIGF2b2lkIHVzZWxlc3MgbWFsbG9jKCkvZnJlZSgpCgkqIHRyZWUuYzogZG8gbm90IHJlYWxsb2MoKSB3aGVuIGdyb3dpbmcgYSBidWZmZXIgaWYgdGhlIGJ1ZmZlcgoJICBhaW4ndCBmdWxsLCBtYWxsb2MvbWVtY3B5L2ZyZWUgYXZvaWQgY29weWluZyBtZW1vcnkuCgpNb24gQXVnIDE4IDE4OjM3OjAxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmMgZG9jL3htbGxpbnQueG1sIGRvYy94bWxsaW50LjE6IGFkZGVkIG9wdGlvbgoJICAtLWR0ZHZhbGlkZnBpIGZvciBUb2JpYXMgUmVpZgoKTW9uIEF1ZyAxOCAxNDowMzowMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGljdC5jIGluY2x1ZGUvbGlieG1sL2RpY3QuaCBNYWtlZmlsZS5hbSBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbToKCSAgbmV3IGRpY3Rpb25hcnkgbW9kdWxlIHRvIGtlZXAgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgdGhlIG5hbWVzIHVzZWQKCSAgYnkgdGhlIHBhcnNlcgoJKiBET0NCcGFyc2VyLmMgSFRNTHBhcnNlci5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHZhbGlkLmM6CgkgIHN3aXRjaGVkIGFsbCBwYXJzZXJzIHRvIHVzZSB0aGUgZGljdGlvbmFyeSBpbnRlcm5hbGx5CgkqIGluY2x1ZGUvbGlieG1sL0hUTUxwYXJzZXIuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaAoJICBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaCBpbmNsdWRlL2xpYnhtbC92YWxpZC5oOgoJICBTb21lIG9mIHRoZSBpbnRlcmZhY2VzIGNoYW5nZWQgYXMgYSByZXN1bHQgdG8gcmVjZWl2ZSBvciByZXR1cm4KCSAgImNvbnN0IHhtbENoYXIgKiIgaW5zdGVhZCBvZiAieG1sQ2hhciAqIiwgdGhpcyBpcyBlaXRoZXIKCSAgaW5zaWduaWZpY2FudCBmcm9tIGFuIHVzZXIgcG9pbnQgb2YgdmlldyBvciB3aGVuIHRoZSByZXR1cm5pbmcKCSAgdmFsdWUgY2hhbmdlZCwgdGhvc2UgZnVuY3Rpb24gYXJlIHJlYWxseSBwYXJzZXIgaW50ZXJuYWwgbWV0aG9kcwoJICB0aGF0IG5vIHVzZXIgY29kZSBzaG91bGQgcmVhbGx5IGNoYW5nZQoJKiBkb2MvbGlieG1sMi1hcGkueG1sIGRvYy9odG1sLyo6IHRoZSBBUEkgaW50ZXJmYWNlIGNoYW5nZWQgYW5kCgkgIHRoZSBkb2NzIHdlcmUgcmVnZW5lcmF0ZWQKClN1biBBdWcgMTcgMjM6MDU6MzggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoIHRvIHhtbENsZWFudXBQYXJzZXIgZnJvbSBEYXZlIEJlY2tldHQKClNhdCBBdWcgMTYgMjI6NTM6NDIgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkb2MvcGFyc2VkZWNsLnB5LCBkb2MvbGlieG1sMi1yZWZzLnhtbCwgZG9jL0FQSSouaHRtbDoKCSAgZml4ZWQgcGFydCAoMikgb2YgYnVnIDExOTUzNSAod3JvbmcgYWxwaGEgY2FzZSBvbiBmaWxlbmFtZXMpCgkgIApTYXQgQXVnIDE2IDIwOjM1OjI4IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZG9jL0FQSSouaHRtbCwgZG9jL2h0bWwvKjogcmVnZW5lcmF0ZWQgQVBJIGRvY3VtZW50YXRpb24KCSAgZm9yIHhtbHNvZnQub3JnIChwYXJ0IG9mIEJ1ZyAxMTk1MzUpCgpGcmkgQXVnIDE1IDE0OjU4OjM3IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZW5jb2RpbmcuYywgdGhyZWFkcy5jLCBpbmNsdWRlL2xpYnhtbC9IVE1McGFyc2VyLmgsCgkgIGRvYy9saWJ4bWwyLWFwaS54bWw6IE1pbm9yIGNoYW5nZXMgdG8gY29tbWVudHMsIGV0Yy4gZm9yCgkgIGltcHJvdmluZyBkb2N1bWVudGF0aW9uIGdlbmVyYXRpb24KCSogZG9jL01ha2VmaWxlLmFtOiBmdXJ0aGVyIGFkanVzdG1lbnQgdG8gYXV0by1nZW5lcmF0aW9uIG9mCgkgIHdpbjMyL2xpYnhtbDIuZGVmLnNyYwoJICAKRnJpIEF1ZyAxNSAwMjoyNDoyMCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTmV3cyBjb25maWd1cmUuaW46IHByZXBhcmluZyBsaWJ4bWwyLTIuNS4xMCByZWxlYXNlCgkqIGRvYy8qIDogdXBkYXRlZCB0aGUgZG9jIGFuZCByZWJ1aWx0CgpGcmkgQXVnIDE1IDAxOjU1OjUzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4aW5nIHRoZSB4bWxTQVhQYXJzZURURCBidWcgIzExOTUzNiByYWlzZWQgYnkKCSAgTWFsY29sbSBUcmVkaW5uaWNrIHdpdGggdGhlIHBhdGNoIGhlIHN1Z2dlc3RlZC4KCkZyaSBBdWcgMTUgMDE6Mzc6MTAgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogYWxsb2NhdGlvbiBlcnJvciAjMTE5Nzg0IHJhaXNlZCBieSBPbGl2ZXIgU3RvZW5lYmVyZwoKRnJpIEF1ZyAxNSAwMDo0MTo1OCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmM6IGZpeGluZyBhbiB1c2Ugb2Ygc3RyY3B5KCkgd2hlcmUgYm90aCBzdHJpbmdzIG92ZXJsYXAKCSAgcG9pbnRlZCBvdXQgYnkgdmFsZ3JpbmQuCgpUaHUgQXVnIDE0IDE3OjEwOjM5IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBET0NCcGFyc2VyLmMgZ2xvYmFscy5jIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oOiBnZXQgcmlkIG9mCgkgIHNvbWUgY29tcGlsYXRpb24gd2FybmluZ3MuCgkqIHhpbmNsdWRlLmM6IGZpeCB0aGUgcGVyZm9ybWFuY2UgcHJvYmxlbSByZXBvcnRlZCBieSBLZXZpbiBSdXNjb2UKCSAgcGx1cyBzb21lIGNsZWFudXAgYW5kIGJldHRlciBlcnJvciByZXBvcnRpbmcuCgpUaHUgQXVnIDE0IDE0OjEzOjQzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jOiBhcHBsaWVkIFVURi0xNiBlbmNvZGluZyBoYW5kbGluZyBwYXRjaCBwcm92aWRlZCBieQoJICBNYXJrIEl0emNvdml0egoJKiBlbmNvZGluZy5jIHBhcnNlci5jOiBtb3JlIGNsZWFudXAgYW5kIGZpeGVzIGZvciBVVEYtMTYgd2hlbiAKCSAgbm90IGhhdmluZyBpY29udiBzdXBwb3J0LgoKVGh1IEF1ZyAxNCAwMzoxOTowOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluIGV4YW1wbGUvTWFrZWZpbGUuYW0gbGlieG1sLmggbmFub2Z0cC5jCgkgIG5hbm9odHRwLmMgeG1sbGludC5jOiBBcHBsaWVkIHBhdGNoIGZyb20gTWlraGFpbCBHcnVzaGluc2tpeSBmb3IKCSAgbWluZ3cgY29tcGlsZXIgb24gV2luZG93cy4KClRodSBBdWcgMTQgMDI6Mjg6MzYgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCB0aGUgc2VyaW91cyBDUFUgdXNhZ2UgcHJvYmxlbSByZXBvcnRlZCBieQoJICBHcmFudCBHb29kYWxlCgkqIEhUTUxwYXJzZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIE9saXZlciBTdG9lbmViZXJnIGFib3V0IGEgZnJlZQoJICBtaXNzaW5nIGluIGh0bWxTQVhQYXJzZURvYwoKVHVlIEF1ZyAxMiAyMjo0ODoxMCBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRvYy9NYWtlZmlsZS5hbTogUmVtb3ZlZCBkZXBlbmRlbmN5IGZyb20gbGlieG1sMi5kZWYuc3JjCgpUdWUgQXVnIDEyIDE4OjU1OjA4IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogYXV0b2dlbi5zaDogdG9vayBhd2F5IHRoZSByZXF1aXJlbWVudCBmb3IgYXV0b21ha2UtMS40LAoJICBjaGFuZ2VkIHRoZSBtZXNzYWdlcyBmb3IgZ2V0dGluZyBhdXRvKiB0b29scyB0byBjdXJyZW50CgkgIGdudSBwYWdlcy4KCSogY29uZmlndXJlLmluOiBhZGRlZCBjaGVjayBmb3IgTGludXggRGVjIGFscGhhIHJlcXVpcmluZwoJICAtaWVlZSBmbGFnLCBmaXhlZCB0ZXN0IGZvciBpcHY2CgkqIHRyaW9uYW4uYzogZml4ZWQgcHJvYmxlbSBmb3IgY29tcGlsaW5nIG9uIExpbnV4IERlYyBhbHBoYQoJICB1c2luZyBuYXRpdmUgY29tcGlsZXIKCSogZG9jL01ha2VmaWxlLmFtOiBpbXBsZW1lbnRlZCByZWdlbmVyYXRpb24gb2Ygd2luMzIvbGlieG1sMi5kZWYuc3JjCgkgIHdoZW5ldmVyIGxpYnhtbDItYXBpLnhtbCBpcyBjaGFuZ2VkLgoJICAKTW9uIEF1ZyAxMSAxNzowMjoyMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGNsZWFuaW5nIHVwIGEgcHJvYmxlbSB3aGVuIHBhcnNpbmcgVVRGLTE2IGFuZCBsaWJpY29udgoJICBpcyBub3QgdXNlZC4KClN1biBBdWcgMTAgMDg6MTM6MjIgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IHJlbmVyYXRlZCB3aXRoIGZpeGVkIGxpYnhtbDItYXBpLnhtbAoKU3VuIEF1ZyAxMCAwMDoyMjo1NSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTmV3cyBjb25maWd1cmUuaW46IHByZXBhcmluZyBsaWJ4bWwyLTIuNS45IHJlbGVhc2UKCSogZG9jLyogOiB1cGRhdGVkIHRoZSBkb2MgYW5kIHJlYnVpbHQKClNhdCBBdWcgIDkgMjA6MDA6MTMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oIGRvYy9saWJ4bWwyLWFwaS54bWw6IGNoYW5naW5nIGFuIGVudW0KCSAgZGVmaW5pdGlvbiB0byBnZXQgYSBjb3JyZWN0IEFQSSBYTUwgZGVzY3JpcHRpb24uIFRoaXMgd2FzIGFwcGFyZW50bHkKCSAgYnJlYWtpbmcgV2luZG93cyBidWlsZC4KClNhdCBBdWcgIDkgMTM6NDE6MjEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgYSBuYXN0eSBidWcgIzExOTM4NywgYmFkIGhldXJpc3RpYyBmcm9tCgkgIHRoZSBwcm9ncmVzc2l2ZSBIVE1MIHBhcnNlciBmcm9udC1lbmQgb24gbGFyZ2UgY2hhcmFjdGVyIGRhdGEKCSAgaXNsYW5kIGxlYWRpbmcgdG8gYW4gZXJyb25lb3VzIGVuZCBvZiBkYXRhIGRldGVjdGlvbiBieSB0aGUKCSAgcGFyc2VyLiBTb21lIGNsZWFudXAgdG9vIHRvIGdldCBjbG9zZXIgZnJvbSB0aGUgWE1MIHByb2dyZXNzaXZlCgkgIHBhcnNlci4KClNhdCBBdWcgIDkgMDA6NDI6NDcgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB3aW4zMi9jb25maWd1cmUuanM6IEFkZGVkIGluIHN1cHBvcnQgZm9yIHRoZSBJU084ODU5WAoJICBtb2R1bGUgKHBhdGNoIHByb3ZpZGVkIGJ5IEplc3NlIFBlbHRvbikKCkZyaSBBdWcgIDggMTU6NTY6MzIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmMgdHJlZS5jIHRocmVhZHMuYzogaHVtIHRyeSB0byBhdm9pZCBzb21lIHRyb3VibGVzCgkgIHdoZW4gdGhlIGxpYnJhcnkgaXMgbm90IGluaXRpYWxpemVkIGFuZCBvbmUgdHJ5IHRvIHNhdmUsIHRoZSAKCSAgbG9ja3MgaW4gdGhyZWFkZWQgZW52IG1pZ2h0IG5vdCBiZWVuIGluaXRpYWxpemVkLCBwbGF5aW5nIHNhZmUKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGFwcGx5IHBhdGNoIGZvciBoZXhCaW5hcnkgZnJvbSBDaGFybGVzIEJvemVtYW4KCSogdGVzdC9zY2hlbWFzL2hleGJpbmFyeV8qIHJlc3VsdC9zY2hlbWFzL2hleGJpbmFyeV8qOiBhbHNvIGFkZGVkCgkgIGhpcyB0ZXN0cyB0byB0aGUgcmVncmVzc2lvbiBzdWl0ZS4KCkZyaSBBdWcgIDggMTg6NDc6MzggSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB3aW4zMi9kZWZnZW4ueHNsLCB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IEJ1ZyAxMTkzNDMKCSAgKHdpdGggYXBvbG9naWVzIHRvIElnb3IpIC0gRW5oYW5jZWQgaGFuZGxpbmcgb2YgZG9jYiBhbmQKCSAgbmFub2h0dHAuCgkgIApUaHUgQXVnICA3IDIxOjEzOjIyIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZW5jb2RpbmcuYzogZnVydGhlciBzbWFsbCBjaGFuZ2VzIGZvciB3YXJuaW5ncyB3aGVuCgkgIGNvbmZpZ3VyZWQgd2l0aCAtLXdpdGgtaWNvbnY9bm8KCldlZCBBdWcgIDYgMTI6MzI6MTEgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBlcnJvci5jIHRyaW9uYW4uW2NoXSB0ZXN0VGhyZWFkcy5jIHB5dGhvbi9nZW5lcmF0b3IucHk6CgkgIGZ1cnRoZXIgc21hbGwgY2hhbmdlcyB0byBlbG1pbmF0ZSBtb3N0IG9mIHRoZSByZW1haW5pbmcKCSAgd2FybmluZ3MuCgpUdWUgQXVnICA1IDIzOjUxOjIxIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZXJyb3IuYyBIVE1McGFyc2VyLmMgdGVzdEMxNE4uYyB0ZXN0SFRNTC5jIHRlc3RVUkkuYwoJICB4bWxjYXRhbG9nLmMgeG1sbWVtb3J5LmMgeG1scmVhZGVyLmMgeG1sc2NoZW1hc3R5cGVzLmMKCSAgcHl0aG9uL2xpYnhtbC5jIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oOiBzbWFsbCBjaGFuZ2VzCgkgIHRvIHN5bnRheCB0byBnZXQgcmlkIG9mIGNvbXBpbGVyIHdhcm5pbmdzLiAgTm8gY2hhbmdlcwoJICB0byBsb2dpYy4KCk1vbiBBdWcgIDQgMjI6NDA6NTQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL2h0bWwvKjogcmVidWlsdCB0aGUgQVBJIGFuZCBkb2NzLgoKTW9uIEF1ZyAgNCAyMTo0MDozNCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXhlZCBhIHNtYWxsIHByb2JsZW0gaW4gdGhlIHBhdGNoIGZvciAjMTE4NzYzCgkqIHJlc3VsdC9IVE1ML2RvYzMuaHRtKjogdGhpcyByZXZlcnRzIGJhY2sgdG8gdGhlIHByZXZpb3VzIHJlc3VsdAoKU3VuIEF1ZyAgMyAyMTo0MTo0OSBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvRkFRLmh0bWwgZG9jL3htbC5odG1sOiBhcHBsaWVkIGRvYyBwYXRjaCB0byB4bWwuaHRtbAoJICBhbmQgcmVidWlsdCwgYXBwYXJlbnRseSBzb21lIEMrKyB3cmFwcGVycyBhcmUgbm90IGF2YWlsYWJsZSwKCSAgYy5mLiBidWcgIzExODk0MwoKU3VuIEF1ZyAgMyAyMTozMDozMSBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGluZyBIVE1MIGF0dHJpYnV0ZSBzZXJpYWxpemF0aW9uIGJ1ZyAjMTE4NzYzCgkgIGFwcGx5aW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgcGF0Y2ggZnJvbSBCYWNlawoJKiByZXN1bHQvSFRNTC9kb2MzLmh0bSo6IHRoaXMgbW9kaWZpZXMgdGhlIG91dHB1dCBmcm9tIG9uZSB0ZXN0CgpTdW4gQXVnICAzIDIxOjAyOjMwIEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGFkZGVkIGEgbmV3IEFQSSB0byBzcGxpdCBhCgkgIFFOYW1lIHdpdGhvdXQgZ2VuZXJhdGluZyBhbnkgbWVtb3J5IGFsbG9jYXRpb24KCSogdmFsaWQuYzogZml4ZWQgYW5vdGhlciBwcm9ibGVtIHdpdGggbmFtZXNwYWNlcyBvbiBlbGVtZW50CgkgIGluIG1peGVkIGNvbnRlbnQgY2FzZQoJKiBweXRob24vdGVzdHMvcmVhZGVyMi5weTogdXBkYXRlZCB0aGUgdGVzdGNhc2Ugd2l0aCAKCSAgQmpvcm4gUmVlc2UgZml4IHRvIHJlYWRlciBmb3IgdW5zaWduaWZpY2FudCB3aGl0ZSBzcGFjZQoJKiBwYXJzZXIuYyBIVE1McGFyc2VyLmM6IGNsZWFudXAuCgpTdW4gQXVnICAzIDIwOjU1OjQwIEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogdHJ5aW5nIHRvIGZpeCAjMTE4NzU0IG9mIHBvc3NpYmxlIHJlY3Vyc2lvbiBpbiB0aGUKCSAgY2F0YWxvZ3MuIE5vdCBmYW50YXN0aWNhbGx5IGhhcHB5IGFib3V0IHRoZSBjdXJyZW50IGZpeCBzaW5jZQoJICBpdCdzIGxpa2VseSB0byBicmVhayB1bmRlciB2ZXJ5IHRocmVhZCBpbnRlbnNpdmUgY29uY3VycmVudAoJICBhY2Nlc3MgdG8gdGhlIGNhdGFsb2cuIEJldHRlciBzb2x1dGlvbiBtaWdodCB0byBrZWVwIHRoZSBkZXB0aAoJICBhbiBleHRyYSBhcmd1bWVudCB0byB0aGUgcmVzb2x1dGlvbiBmdW5jdGlvbnMuCgpTdW4gQXVnICAzIDE4OjU2OjU0IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeGVkIGJ1ZyAjMTE4NzEyIGFib3V0IG1peGVkIGNvbnRlbnQsIGFuZCBuYW1lc3BhY2VkCgkgIGVsZW1lbnQgbmFtZXMuCgkqIHRlc3QvdmFsaWQvbWl4ZWRfbnMueG1sIHJlc3VsdC92YWxpZC9taXhlZF9ucyo6IGFkZGVkIGEgY2hlY2sKCSAgaW4gdGhlIHJlZ3Jlc3Npb24gdGVzdHMKCkZyaSBBdWcgMSAyMzo1NToyMyBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCglDb25pbnVpbmcgd29yayBvbiBidWcgMTE4NTU5CgkqIERPQ0JwYXJzZXIuYzogcmVtb3ZlZCAyIHVuc2VkIHZhcnMKCSogeG1scmVnZXhwLmM6IGNoYW5nZWQgc29tZSBudW1lcmljIGNvbnN0IHRvIHRoZWlyIGVudW0gc3ltYm9scwoJKiB4bWxyZWFkZXIuYzogY2hhbmdlZCBvbmUgdmFyIGRlZmluZSBmcm9tIGludCB0byBlbnVtCgkgIChhIGxpdHRsZSBtb3JlIHRvIGJlIGRvbmUsIGF3YWl0aW5nIGNvLW9yZGluYXRpb24pCgkqIHJlbGF4bmcuYzogZGVsZXRlZCBvbmUgdW51c2VkIHZhcgoJKiB4bWxsaW50LmM6IGRlbGV0ZWQgc29tZSB1bnVzZWQgdmFycywgY2hhbmdlZCBvbmUgYXJnCgkgIHZhbCBmcm9tIGludCB0byBlbnVtCgkqIHRlc3RIVE1MLmMsIHRlc3REb2Nib29rLmM6IGNoYW5nZWQgc29tZSBhcmcgdmFscyB0byBlbnVtIGNvbnN0CgkqIHhtbElPLmM6IGZpeGVkIHR5cG8gZnJvbSBsYXN0IG5pZ2h0IChzbWFsbCB3YXJuaW5nIG1zZykKClRodSBKdWwgMzEgMjI6NDQ6MzMgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJV29ya2luZyBvbiBidWcgMTE4NTU5CgkqIGVycm9yLmM6IGRlbGV0ZWQgdW51c2VkIHZhcmlhYmxlCgkqIHBhcnNlckludGVybmFscy5jOiBkZWxldGVkIHVubmVlZGVkICdjb25zdCcgcXVhbGlmaWVyCgkqIHBhcnNlci5jOiBjaGFuZ2VkIHZhcmlhYmxlIHR5cGUgZm9yIGVudW0gdGVtcCBzdG9yYWdlCgkqIHhtbElPLmM6IGNoYW5nZWQgZGVidWdnaW5nIHZhciB0byBiZSBpbnNpZGUgI2lmZGVmCgkqIHZhbGlkLmM6IHJlbW92ZWQgdW51c2VkIHZhcmlhYmxlCgkqIEhUTUxwYXJzZXIuYzogcmVtb3ZlZCBzb21lIHVubmVlZGVkICdjb25zdCcgcXVhbGlmaWVycwoJKiB4cGF0aC5jOiBhZGRlZCBzb21lIHR5cGUgY2FzdHMsIHJlbW92ZWQgc29tZSB1bnVzZWQgdmFycwoJKiB4aW5jbHVkZS5jOiBhZGRlZCBvbmUgdHlwZSBjYXN0CgkqIG5hbm9odHRwLmM6IHJlcG9zaXRpb25lZCBzb21lICNpZmRlZiB0byBhdm9pZCB1bnVzZWQgdmFyCgkqIG5hbm9mdHAuYzogcmVtb3ZlZCB1bnVzZWQgdmFyCgpXZWQgSnVsIDMwIDE0OjU3OjU1IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogYXBwbGllZCBhIHBhdGNoIGZyb20gV2lsbGlhbSBCcmFjayBhYm91dAoJICB0aGUgcHJvYmxlbSBvZiBwYXJzaW5nIHZlcnkgbGFyZ2UgSFRNTCBpbnN0YW5jZSB3aXRoIGNvbW1lbnRzCgkgIGFzIHJhaXNlZCBieSBOaWNrIEtldwoKV2VkIEp1bCAzMCAxMjoyOTozOCBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaDogYXBwbHlpbmcgY2xlYW51cAoJICBwYXRjaCBmcm9tIEJqb3JuIFJlZXNlIGZvciB4bWxUZXh0UmVhZGVyTm9kZVR5cGUoKSBhbmQgCgkgIHNpZ25pZmljYW50IHdoaXRlc3BhY2UuIFRoZXJlIGlzIGFuIGVudW0gZm9yIG5vZGUgdHlwZQoJICB2YWx1ZXMgbm93LgoKV2VkIEp1bCAzMCAxMTowODoyMSBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jOiBhcHBseWluZyBwYXRjaCBmcm9tIFBldGVyIEphY29iaSB0byBhZGRlZCAKCSAgSVNPLTg4NTkteCBlbmNvZGluZyBzdXBwb3J0IHdoZW4gaWNvbnYgaXMgbm90IGF2YWlsYWJsZQoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluCgkgIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLmluOiBhZGRlZCB0aGUgZ2x1ZSBuZWVkZWQKCSAgYXQgdGhlIGNvbmZpZ3VyZSBsZXZlbCBhbmQgbWFkZSBpdCB0aGUgZGVmYXVsdCBmb3IgV2luZG93cwoKVHVlIEp1bCAyOSAxNjo0Mzo0OCBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sMmNsYXNzLnR4dDoKCSAgcGF0Y2ggZnJvbSBKb2FjaGltIEJhdWNoICsgY2xlYW51cCBmb3IgUmVsYXggTkcgZXJyb3IgY2FsbGJhY2tzCgkgIGluIHB5dGhvbgoKVHVlIEp1bCAyOSAxMjo0NjowOCBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0cmVlLmM6IGFwcGxpZWQgUGV0ZXIgSmFjb2JpIGVuY29kaW5nCgkgIGNsZWFudXAgcGF0Y2gsIGFuZCBhbHNvIGF2b2lkZWQgYSBwb3NzaWJsZSBtZW1vcnkgbGVhawoKVHVlIEp1bCAyOSAwOToyODowOSBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jOiBmaXggdGhlIHByZXZpb3VzIGNvbW1pdAoKVHVlIEp1bCAyOSAxMjoyODoxNyBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgcHJvYmxlbSB3aXRoIGNvbW1lbnRzIHJlcG9ydGVkIGJ5IE5pY2sgS2V3CgkqIGVuY29kaW5nLmM6IGFkZGVkIHJvdXRpbmVzIHhtbFVURjhTaXplIGFuZCB4bWxVVEY4Q2hhcmNtcCBmb3IKCSAgc29tZSBmdXR1cmUgY2xlYW51cCBvZiBVVEY4IGhhbmRsaW5nCgpNb24gSnVsIDI4IDE2OjM5OjE0IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGFwcGxpZWQgYSBjaGFuZ2Ugc3VnZ2VzdGVkIGJ5IFNlYW4gR3JpZmZpbiBpbiBidWcKCSAgIzExODQ5NCBhYm91dCBhIG1lbW9yeSBsZWFrIGluIEVYU0xUCgpTdW4gSnVsIDI3IDE0OjMwOjU2IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogZml4ZWQgYSBSZWxheC1ORyBjb21waWxhdGlvbi9zdHJlYW1pbmcgYnVnIGludHJvZHVjZWQKCSAgd2hlbiBmaXhpbmcgdGhlIHByZXZpb3VzIFJlbGF4LU5HIGJ1Z3MKCSogcmVzdWx0L3JlbGF4bmcvKjogVGhpcyBzbGlnaHRseSBjaGFuZ2VzIHRoZSBvdXRwdXQgbWVzc2FnZXMgb2YKCSAgc29tZSByZWdyZXNzaW9uIHRlc3RzLgoJKiBjb25maWd1cmUuaW46IGFkZGVkIHN1cHBvcnQgb2YgLXdpdGgtZmV4Y2VwdGlvbnMgZm9yIG5lc3RlZCBDKysKCSAgc3VwcG9ydC4KClRodSBKdWwgMjQgMTU6NDY6MDIgTURUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC9hcGEuaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXBiLmh0bWwKCSogZG9jL3R1dG9yaWFsL2FwYy5odG1sCgkqIGRvYy90dXRvcmlhbC9hcGQuaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXBlLmh0bWwKCSogZG9jL3R1dG9yaWFsL2FwZi5odG1sCgkqIGRvYy90dXRvcmlhbC9hcGcuaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXBoLmh0bWwKCSogZG9jL3R1dG9yaWFsL2FyMDFzMDIuaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXIwMXMwMy5odG1sCgkqIGRvYy90dXRvcmlhbC9hcjAxczA0Lmh0bWwKCSogZG9jL3R1dG9yaWFsL2FyMDFzMDUuaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXIwMXMwNi5odG1sCgkqIGRvYy90dXRvcmlhbC9hcjAxczA3Lmh0bWwKCSogZG9jL3R1dG9yaWFsL2FyMDFzMDguaHRtbAoJKiBkb2MvdHV0b3JpYWwvaW5kZXguaHRtbAoJKiBkb2MvdHV0b3JpYWwvaXgwMS5odG1sCgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC5wZGYKCSogZG9jL3R1dG9yaWFsL3htbHR1dG9yaWFsLnhtbAoJdXBkYXRlIHR1dG9yaWFsIHdpdGggWFBhdGggZXhhbXBsZQoKClRodSBKdWwgMjQgMTc6MDc6MDYgSVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmMgcGFyc2VyLmM6IGZpeGluZyBhIGJ1ZyBhYm91dCBhIHNwZWNpYWwgY2FzZSBvZiBuYW1lc3BhY2UKCSAgaGFuZGxpbmcsIHRoaXMgY2xvc2VzIGJ1ZyAjMTE2ODQxCgpXZWQgSnVsIDIzIDIwOjUyOjM2IElTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyByZXN1bHQvcmVsYXhuZy8qOiBjaGVja2VkIGFuZCBmaXhlZCB0aGUgY29tcGlsYXRpb24KCSAgb2YgUk5HIHNjaGVtYXMsIGZpeGVzIGEgY291cGxlIG9mIGJ1Z3MgIzExNzA5NyBhbmQgIzExNzAwMSAuCgkgIFRoaXMgc2xpZ2h0bHkgY2hhbmdlcyB0aGUgb3V0cHV0IG1lc3NhZ2VzIG9mIHNvbWUgcmVncmVzc2lvbiB0ZXN0cy4KCldlZCBKdWwgMjMgMTU6MTU6MDggSVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IGZpeGVkIGFuIG91dCBvZiBib3VuZCBlcnJvciAjMTE4MDUyICwgdGhlIGdvb2QKCSAgcGFydCBpZiB0aGF0IGJhc2U2NCBjb2RlIHdhcyBub3QgaW4gdXNlIHlldCAuLi4KClR1ZSBKdWwgMjIgMTk6NDI6MTUgTURUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxsaW50Lmh0bWwKCWluY2x1ZGUgaHRtbCB2ZXJzaW9uIG9mIHRoZSB4bWxsaW50IG1hbiBwYWdlLCBzbyBhbgoJdXAtdG8tZGF0ZSB2ZXJzaW9uIGlzIHZpc2libGUgb24gdGhlIFdlYgoKTW9uIEp1bCAyMSAyMTo1Mzo0MyBJU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jIGluY2x1ZGUvbGlieG1sL3hpbmNsdWRlLmg6IGFkZGVkIGEgbmV3IEFQSQoJICB4bWxYSW5jbHVkZVByb2Nlc3NUcmVlKCkgdG8gcHJvY2VzcyBYSW5jbHVkZSBvbmx5IG9uIGEgc3VidHJlZQoJICB0aGlzIHNob3VsZCBmaXggYnVnICMxMTUzODUKCkZyaSBKdWwgMTggMTc6MTE6NDIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyBpbmNsdWRlL2xpYnhtbC9yZWxheG5nLmg6IGFkZGluZyBHZXQgaW50ZXJmYWNlIGZvcgoJICB0aGUgZXJyb3IgY2FsbGJhY2sgYW5kIHBhcmFtZXRlcnMgb2YgcGFyc2luZyBhbmQgdmFsaWRhdGlvbgoJICBjb250ZXh0cwoJKiB4bWxyZWFkZXIuYzogcGF0Y2ggdG8gZml4IGJ1ZyAjMTE3NzAyIGFib3V0IGluY29tcGxldGUgUmVhZCgpCgkgIG9uIHRleHQgbm9kZXMuCgpXZWQgSnVsIDE2IDIzOjE1OjUzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogcGF0Y2ggZnJvbSBEb2RqaSBTZWtldGVsaSBhYm91dCBVVEYxNiBCT00KCSAgd2hlbiB1c2luZyB0aGUgcHVzaCBYTUwgcGFyc2VyLgoJKiByZXN1bHQvdXRmMTZib20ueG1sIHJlc3VsdC9ub2VudC91dGYxNmJvbS54bWwgdGVzdC91dGYxNmJvbS54bWw6CgkgIGFkZGVkIHRoZSB0ZXN0IHRvIHRoZSByZWdyZXNzaW9uIHN1aXRlLgoKVHVlIEp1bCAxNSAyMjowMzoxMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2xvYmFscy5jOiBhZGQgeG1sVGhyRGVmTXV0ZXggPSBOVUxMIGluIHhtbENsZWFudXBHbG9iYWxzKCkgCgkgIGFzIHN1Z2dlc3RlZCBieSBSb2IgUmljaGFyZHMKClR1ZSBKdWwgMTUgMTU6MzA6NTUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgZW50aXRpZXMuYyBwYXJzZXIuYyByZWxheG5nLmMgCgkgIHhtbHNjaGVtYXMuYyB4cGF0aC5jOiByZW1vdmVkIHNvbWUgd2FybmluZ3MgYnkgY2FzdGluZyB4bWxDaGFyCgkgIHRvIHVuc2lnbmVkIGludCBhbmQgYSBjb3VwbGUgb2Ygb3RoZXJzLgoKRnJpIEp1bCAxMSAxNjo0NDoyMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGZpeGVzIGEgc2VnZmF1bHQgb24gZW1wdHkgaGV4QmluYXJ5IHN0cmluZ3MKClRodSBKdWwgMTAgMTY6MDI6NDcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbm9mdHAuYyBuYW5vaHR0cC5jOiBjbGVhbnVwIHBhdGNoZXMgZnJvbSBQZXRlciBCcmVpdGVubG9obmVyCgpUdWUgSnVsICA4IDE2OjAyOjE5IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnbG9iYWxzLmMgdGhyZWFkcy5jOiBmaXhlcyBzb21lIHByb2JsZW0gd2hlbiBmcmVlaW5nIHVuaXRpdGlhbGl6ZWQKCSAgbXV0ZXhlcwoKVHVlIEp1bCAgOCAxNDoxNTowNyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFub2Z0cC5jIG5hbm9odHRwLmM6IHRoZSBtb2R1bGVzIHNob3VsZCBub3QgaW1wb3J0IDxjb25maWcuaD4KCSAgZGlyZWN0bHksIHNvbWUgY2xlYW51cHMKCSogeG1sc2NoZW1hcy5jOiBQZXRlciBTb2Jpc2NoIGZvdW5kIGEgbmFzdHkgYnVnIGluIHRoZSBTY2hlbWFzCgkgIHZhbGlkYXRpb24gY29kZS4KCk1vbiBKdWwgIDcgMTg6MDA6NTEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogSmVzc2UgUGVsdG9uIHBvaW50ZWQgb3V0IGEgcHJvYmxlbSBpbiB0aGUKCSAgamF2YXNjcmlwdCBjb2RlLgoKTW9uIEp1bCAgNyAxNjozOTozMSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTkVXUyBkb2MvKjogcmVnZW5lcmF0ZWQKCSogbmFub2Z0cC5jIG5hbm9odHRwLmM6IG1pZ2h0IGZpeCBpbmNsdWRlcyBwcm9ibGVtcyB3aXRoIHRoZQoJICBJcHY2IHN1cHBvcnQgb24gc29sYXJpcwoJKiB0cmVlLmM6IHBhdGNoIGZyb20gTWFya3VzIEtlaW0gYWJvdXQgeG1sSGFzTnNQcm9wKCkgb24gYXR0cmlidXRlcwoJICBkZWZpbmVkIGFzICNJTVBMSUVECgpTdW4gSnVsICA2IDIzOjA5OjEzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gZG9jLyo6IHByZXBhcmluZyByZWxlYXNlIDIuNS44CgkqIG5hbm9odHRwLmM6IGNoYW5nZWQgc29tZSBwcmVwcm9jZXNzb3IgYmxvY2sKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBDaGFybGVzIEJvemVtYW4gYWRkaW5nCgkgIGhleEJpbmFyeSBzY2hlbWEgZGF0YXR5cGUgYW5kIGFkZGluZyBzdXBwb3J0IGZvciB0b3RhbERpZ2l0cyBhbmQKCSAgZnJhY3Rpb25EaWdpdHMgZmFjZXRzLgoKU3VuIEp1bCAgNiAxOTo1NjoxOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYyB4cGF0aC5jOiBmaXhlZCAyIGJ1Z3MgcG9pbnRlZCBpbiAjMTE2NDQ4CgpTdW4gSnVsICA2IDE5OjM0OjE3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBmaXhlZCBidWcgIzExNjA5NSByZW1vdmluZyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuCgkgIHJlYXBwbHlpbmcgWEluY2x1ZGUgdG8gYSBkb2N1bWVudC4KClNhdCBKdWwgIDUgMjI6NDA6MjMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGFwcGxpZWQgc21hbGwgY2hhbmdlcyB0byBwb3J0YWJpbGl0eSBsYXllciBmb3IgCgkgIGNvbXBpbGF0aW9uIG9uIERKR1BQIE1zLURPUyBjb21waWxlci4KClNhdCBKdWwgIDUgMjI6MzA6MjUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIEhUTUxwYXJzZXIuYzogdXNlIHRoZSBjaGFyYWN0ZXIoKSBTQVggY2FsbGJhY2sKCSAgaWYgdGhlIGNkYXRhQmxvY2sgYWluJ3QgZGVmaW5lZC4KCSogeHBhdGguYzogZml4IGJ1ZyAjMTE1MzQ5IGFsbG93aW5nIGNvbXBpbGF0aW9uIHdoZW4gY29uZmlndXJlZAoJICB3aXRoIC0td2l0aG91dC14cGF0aCBzaW5jZSB0aGUgU2NoZW1hcyBjb2RlIG5lZWRzIE5BTiBhbmQgY28uCgpTYXQgSnVsIDUgMDA6NTE6MzAgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJRml4ZWQgcHJvYmxlbSB3aXRoIG11bHRpLXRocmVhZGluZywgc2hvd24gYnkgdGhlIHRlc3QgcHJvZ3JhbQoJdGVzdFRocmVhZHMuICBBZnRlciBmaXgsIHJhbiBtdXRpcGxlIHRlc3RzIG9uIHZhcmlvdXMgc3BlZWQKCW1hY2hpbmVzIChzaW5nbGUgYW5kIGR1YWwgcHJvY2Vzc29yIFg4NiksIHdoaWNoIGFsbCBzZWVtIG9rYXkuCgoJKiBjYXRhbG9nLmM6IGFkZGVkIG1pc3NpbmcgeG1sUk11dGV4VW5sb2NrIGluIHhtbExvYWRDYXRhbG9nCgoJKiB0aHJlYWRzLmM6IGFkZGVkIG1pc3NpbmcgaW5pdGlhbGlzYXRpb24gZm9yIGNvbmRpdGlvbiB2YXJpYWJsZQoJICBpbiB4bWxOZXdSTXV0ZXguCgpTYXQgSnVuIDIxIDE2OjEwOjI0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgogICAgICAgIEFwcGx5aW5nIElQdjYgcGF0Y2ggZnJvbSBBcmNoYW5hIFNoYWggPGFyY2hhbmEuc2hhaEB3aXByby5jb20+CgljbG9zaW5nIGJ1ZyAjMTE0ODM3CgoJKiBjb25maWd1cmUuaW46IEFkZGVkIGNoZWNrcyBmb3IgSVB2NiBzdXBwb3J0IGFuZCBnZXRhZGRyaW5mbygpLgoKCSogYWNjb25maWcuaDogRGVmaW5lZCBIQVZFX0dFVEFERFJJTkZPIGFuZCBTVVBQT1JUX0lQNi4KCgkqIGNvbmZpZy5oLmluOiBEZWZpbmVkIEhBVkVfR0VUQUREUklORk8gYW5kIFNVUFBPUlRfSVA2LgoKCSogbmFub2Z0cC5jOiBTdHJ1Y3R1cmUgeG1sTmFub0ZUUEN0eHQgY29udGFpbnMgZWl0aGVyIHNvY2thZGRyX3N0b3JhZ2UKCSAgZmllbGQgb3Igc29ja2FkZHJfaW4gZmllbGQsIGRlcGVuZGluZyB1cG9uIHRoZSBhdmFpbGFiaWxpdHkgb2YgSVB2NgoJICBzdXBwb3J0LgoJICBoYXZlX2lwdjYoKTogQWRkZWQgdG8gY2hlY2sgZm9yIHJ1bi10aW1lIElQdjYgc3VwcG9ydC4KCSAgKHhtbE5hbm9GVFBTY2FuVVJMKSwgKHhtbE5hbm9GVFBVcGRhdGVVUkwpLCAoeG1sTmFub0ZUUFNjYW5Qcm94eSk6CgkgIE1vZGlmaWVkIHRvIHBhcnNlIGEgVVJJIHdpdGggSVB2NiBhZGRyZXNzIGdpdmVuIGluIFtdLgoJICAoeG1sTmFub0ZUUENvbm5lY3QpOiBDaGFuZ2VkIHRvIHVzZSBnZXRhZGRyaW5mbyBmb3IgYWRkcmVzcwoJICByZXNvbHV0aW9uLCBpZiBpdCBpcyBhdmFpbGFibGUgb24gdGhlIHN5c3RlbSwgYXMgZ2V0aG9zdGJ5bmFtZQoJICBkb2VzIG5vdCByZXR1cm4gSVB2NiBhZGRyZXNzZXMgb24gc29tZSBwbGF0Zm9ybXMuCgkgICh4bWxOYW5vRlRQR2V0Q29ubmVjdGlvbik6IE1vZGlmaWVkIHR5cGUgb2YgZGF0YUFkZHIgdmFyaWFibGUgdG8KCSAgc29ja2FkZHJfc3RvcmFnZSBvciBzb2NrYWRkcl9pbiBkZXBlbmRpbmcgdXBvbiB0aGUgSVB2NiBzdXBwb3J0LgoJICBTZW5kaW5nIEVQU1YsIEVQUlQgb3IgUEFTViwgUE9SVCBkZXBlbmRpbmcgdXBvbiB0aGUgdHlwZSBvZiBhZGRyZXNzCgkgIHdlIGFyZSBkZWFsaW5nIHdpdGguCgoJKiBuYW5vaHR0cC5jOiAoaGF2ZV9pcHY2KTogQWRkZWQgdG8gY2hlY2sgZm9yIHJ1bi10aW1lIElQdjYgc3VwcG9ydC4KCSAgKHhtbE5hbm9IVFRQU2NhblVSTCksICh4bWxOYW5vSFRUUFNjYW5Qcm94eSk6IE1vZGlmaWVkIHRvIHBhcnNlCgkgIGEgVVJJIHdpdGggSVB2NiBhZGRyZXNzIGdpdmVuIGluIFtdLgoJICAoeG1sTmFub0hUVFBDb25uZWN0SG9zdCk6IE1vZGlmaWVkIHRvIHVzZSBnZXRhZGRyaW5mbyBpZiBpdCBpcwoJICBhdmFpbGFibGUgb24gdGhlIHN5c3RlbS4gQWxzbyBJUHY2IGFkZHJlc3NlcyB3aWxsIGJlIHJlc29sdmVkIGJ5CgkgIGdldGhvc3RieW5hbWUgb25seSBpZiBJUHY2IHJ1bi10aW1lIHN1cHBvcnQgaXMgYXZhaWxhYmxlLgoJICAoeG1sTmFub0hUVFBDb25uZWN0QXR0ZW1wdCk6IE1vZGlmaWVkIHRvIGRlYWwgd2l0aCBJUHY2IGFkZHJlc3MuCgpTYXQgSnVuIDE0IDE4OjQ2OjUxIENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvY29uZmlndXJlLmpzIGluY2x1ZGUvd2luMzJjb25maWcuaCAKCSAgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOiBBcHBsaWVkIHRoZSBwYXRjaCBmb3IgQkNCCgkgIGJ5IEVyaWMgWnVyY2hlci4KCkZyaSBKdW4gMTMgMTQ6Mjc6MTkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9NYWtlZmlsZS5hbSBkb2MvaHRtbC8qOiByZXZlcnRlZCBiYWNrIHBhdGNoIGZvciAjMTEzNTIxLAoJICBkdWUgdG8gIzExNTEwNCBhbmQgd2hpbGUgZml4aW5nICMxMTUxMDEgLiBIVE1MIFVSTHMgbXVzdCBub3QKCSAgYmUgdmVyc2lvbiBkZXBlbmRhbnQuCgpGcmkgSnVuIDEzIDEyOjAzOjMwIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbnRpdGllcy5jOiBkbyBub3QgZ2VuZXJhdGUgJnF1b3Q7IGZvciAiIG91dHNpZGUgb2YgYXR0cmlidXRlcwoJKiByZXN1bHQvLyo6IHRoaXMgY2hhbmdlcyB0aGUgb3V0cHV0IG9mIHNvbWUgdGVzdHMKCk1vbiBKdW4gIDkgMTI6Mjg6NTggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIHhtbElPLmM6IHRyeWluZyB0byBmaXggIzExNDI3NyBhYm91dCB3aGVuIGZpbGUKCSAgcmVtYXBwaW5nIGFuZCBlc2NhcGluZyBzaG91bGQgcmVhbGx5IGJlIGF0dGVtcHRlZC4KCk1vbiBKdW4gIDkgMTE6MDY6MDkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy8qOiBhcHBsaWVkIGEgcGF0Y2ggZnJvbSBHbWFuIGZvciBidWlsZGluZyBkb2NzCgkqIHZhbGlkLmMgeG1sbGludC5jIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmg6IGFwcGxpZWQgYSBwYXRjaCBmcm9tCgkgIEdhcnkgUGVubmluZ3RvbiB0byBwcm92aWRlIGFuIGFsbG9jYXRvciBmb3IgeG1sVmFsaWRDdHh0CgkqIHhtbHJlYWRlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gSmFjZWsgS29uaWVjem55IGZpeGluZyBidWcKCSAgIzExMzU4MCBhYm91dCBkYXRhIG5vdCBiZWluZyBwYXNzZWQgaW1tZWRpYXRlbHkuCgpUaHUgSnVuICA1IDExOjMxOjAyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFwcGxpZWQgYSBjb3VwbGUgb2YgcGF0Y2hlcyBmcm9tIE1hcmsgSXR6Y292aXR6CgkgIHRvIGhhbmRsZSBzYXZpbmcgYmFjayAiVVRGLTE2IiBkb2N1bWVudHMuCgpNb24gSnVuICAyIDIxOjU2OjE1IE1WVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oOiBjb21taXRpbmcKCSAgc29tZSB3b3JrIGRvbmUgd2hpbGUgaW4gdGhlIE1hbGRpdmVzIChoZW5jZSB0aGUgdGltZXpvbmUgb24gdGhlCgkgIGxhcHRvcCAhKQoJKiByZXN1bHQvc2NoZW1hcy9sZW5ndGgzKiB0ZXN0L3NjaGVtYXMvZGV0ZXIwXyoKCSAgdGVzdC9zY2hlbWFzL2dyb3VwMF8qOiBzb21lIHRlc3RzIGFkZGVkIHRvbwoKTW9uIEp1biAgMiAxNTozNDoxNyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYzogc21hbGwgZml4CgkqIHhtbElPLmM6IGZpeGVkIGFuIGVycm9yIG1lc3NhZ2UKClR1ZSBNYXkgMjAgMTQ6MjE6MjMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jOiBmaXhpbmcgUmVkIEhhdCBidWcgIzkxMDEzIHdoZXJlIHhtbGxpbnQgd2FzCgkgIGFjY2VwdGluZyBhbiBpbXByb3BlciBVVEY4IHNlcXVlbmNlCgpTYXQgTWF5IDE3IDEyOjUzOjExIENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogdGhyZWFkcy5jOiBhcHBsaWVkIHRoZSBwYXRjaCBmcm9tIFN06XBoYW5lIEJpZG91bCBmb3IgZ2V0dGluZwoJICByaWQgb2YgZXh0cmEgdGhyZWFkcyBpbiBhIGR5bmFtaWMgbGlicmFyeS4KCSogd2luMzIvY29uZmlndXJlLmpzOiB0aHJlYWRzIGRlZmF1bHQgdG8gJ25hdGl2ZScgbm93LgoJICAKRnJpIE1heSAxNiAxMzoxNzo1MiBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jOiBmaXhpbmcgIGJ1ZyAjMTEyOTA0OiBodG1sIG91dHB1dCBtZXRob2QgZXNjYXBlZAoJICBwbHVzIHNpZ24gY2hhcmFjdGVyIGluIFVSSSBhdHRyaWJ1dGUuCgpUaHUgTWF5IDE1IDE4OjA2OjE4IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGJ1aWxkX2dsb2IucHkgZ2xvYmFsLmRhdGEgZ2xvYmFscy5jIHBhcnNlci5jCgkgIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaDogcGF0Y2ggZnJvbSBTdOlwaGFuZSBCaWRvdWwgZm9yIHNldHRpbmcKCSAgdXAgdGhyZWFkcyBnbG9iYWwgZGVmYXVsdHMuCgkqIGRvYy9saWJ4bWwyLWFwaS54bWw6IHRoaXMgZXh0ZW5kcyB0aGUgQVBJIHdpdGggbmV3IGZ1bmN0aW9ucwoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3JlYWRlcjIucHkKCSAgcHl0aG9uL3Rlc3RzL3RocmVhZDIucHk6IGludGVncmF0ZWQgdGhlIGFzc29jaWF0ZWQgdGVzdGNhc2UgYW5kCgkgIGZpeGVkIHRoZSBlcnJvciBzdHJpbmcgdXNlZCBpbiByZWFkZXIyCgpXZWQgTWF5IDE0IDE0OjU2OjQ2IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBsaWJ4bWwuc3BlYy5pbiBweXRob24vTWFrZWZpbGUuYW06IHRyeWluZwoJICB0byBjb25jaWxpYXRlIC0td2l0aC1weXRob249IHJlcXVpcmVtZW50cyBhbmQgUlBNIGJ1aWxkcywKCSAgYSBQSVRBIHJlYWxseS4uLgoKVHVlIE1heSAxMyAxODozMDozNCBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IG9vcHMgbGFzdCBjb21taXQgaW50cm9kdWNlZCBhIG1lbW9yeSBsZWFrLgoKVHVlIE1heSAxMyAxODoxMDozOCBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmMgZG9jL3htbGxpbnQueG1sOiBhZGRlZCAtLW5vbmV0IG9wdGlvbgoJKiBkb2MvTWFrZWZpbGUuYW06IGZpeGluZyAjMTEyODAzIGJ5IGFkZGluZyAtLW5vbmV0IHdoZW4gY2FsbGluZwoJICB4c2x0cHJvYyBvciB4bWxsaW50CgkqIGRvYy94bWxsaW50LnhtbCBkb2MveG1sbGludC4xOiBhbHNvIGFkZGVkIC0tc2NoZW1hIGRvYyBhbmQKCSAgcmVidWlsdAoJKiBIVE1McGFyc2VyLmM6IGNsZWFuZWQgdXAgdGhlIEhUTUwgcGFyc2VyIGNvbnRleHQgYnVpbGQgd2hlbiAKCSAgdXNpbmcgYW4gVVJMCgpUdWUgTWF5IDEzIDE2OjM1OjA0IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluOiBhZGRlZCBhIGNvbW1lbnQgYWJvdXQgYnVnICMxMTI5MDIgCgpNb24gTWF5IDEyIDIxOjU4OjAwIEVEVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogbWlub3IgY2xlYW51cCBvZiBjb25maWd1cmUgJy0taGVscCcgZGlzcGxheQoJKiBlcnJvci5jOiBlbmhhbmNlZCB4bWxQYXJzZXJQcmludEZpbGVDb250ZXh0IHRvIGZpeCBidWcgIzEwOTk0MgoKTW9uIE1heSAxMiAxNzo1MzozMCBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IFBJIG5vZGVzIGluIGV4dGVybmFsIHN1YnNldCB3ZXJlIG5vdCBmcmVlZCA6LVwKCSAgZml4ZXMgYnVnICMxMTI4NDIKCk1vbiBNYXkgMTIgMTE6MjM6MjcgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhZGRlZCAtLXNjaGVtYSBvcHRpb24gdG8gcnVuIFdYUyBzY2hlbWEgdmFsaWRhdGlvbgoJKiB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmMgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oOgoJICB0cmllZCB0byBpbXByb3ZlIGVycm9yIHJlcG9ydGluZyBpbiB0aGUgU2NoZW1hIGNvZGUsIHNvbWUgY2xlYW51cAoJICB0b28uCgpTdW4gTWF5IDExIDE2OjEzOjIwIEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogZml4ZWQgc29tZSBwcm9ibGVtcyBpbiB0aGUgaGFuZGxpbmcgb2YgZXJyb3JzLAoJICBhbmQgYXR0cmlidXRlcyBhZGRyZXNzZWQgYnkgcmVmZXJlbmNlcy4KCSogdGVzdC9zY2hlbWFzLyogcmVzdWx0L3NjaGVtYXMvKjogZHJvcHBlZCB0aGUgdmVyYm9zaXR5IGxldmVsCgkgIGFuZCBhZGRlZCBhIGNvdXBsZSBvZiBuZXcgdGVzdHMKClNhdCBNYXkgMTAgMTY6MDE6MjEgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBTdOlwaGFuZSBCaWRvdWwgZm91bmQgYW4gb2ZmIGJ5IG9uZSBhZGRyZXNzaW5nCgkgIGVycm9yIG9uIHRoZSBlcnJvciBoYW5kbGluZy4KCkZyaSBNYXkgIDkgMTk6MDg6MjAgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IHRyeWluZyB0byBmaXggIzExMjY3MwoKRnJpIE1heSAgOSAxODoxNDoxNiBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBET0NCcGFyc2VyLmMgY2F0YWxvZy5jIHBhcnNlci5jIHJlbGF4bmcuYzogcmVtb3ZlZCBtdWx0aXBsZQoJICB3YXJuaW5nLCB0aGlzIGZpeGVkIGEgYnVnIGFuZCBzaG91bGQgY2xvc2UgIzExMTU3NAoKRnJpIE1heSAgOSAxNTozNDozMiBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IGZpeGluZyBidWcgIzEwNDA4MSB3aXRoIHhzOmFsbCB3aXRoIGFuIGVsZW1lbnQKCSAgaG9sZGluZyBtaW5PY2N1cnM9IjAiCgkqIHRlc3Qvc2NoZW1hcy9hbGxfKiByZXN1bHQvc2NoZW1hcy9hbGxfKjogYWRkZWQgc29tZSByZWdyZXNzaW9uCgkgIHRlc3RzIGZvciB0aGF0IGJ1ZwoJKiB4bWxsaW50LmMgeG1scmVhZGVyLmM6IHBhdGNoZXMgZnJvbSBKb2VyZyBTY2htaXR6LUxpbm5ld2ViZXIgYW5kCgkgIEdhcnJ5IFBlbm5pbmd0b24gdG8gY29tcGlsZSB3aXRob3V0IHNjaGVtYXMgc3VwcG9ydC4KClRodSBNYXkgIDEgMTA6MDI6MzUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4ZWQgYSBwcm9ibGVtIHdpdGggeG1sVW5saW5rTm9kZSgpIGZvciBEVERzLgoKV2VkIEFwciAzMCAxNDoxNjowOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sMi1jb25maWcuaW46IHRyeSB0byBmaXggUmVkIGhhdCBidWcgIzg5OTU3LCBkbyBub3QKCSAgb3V0cHV0IC1ML3Vzci9saWI2NAoJKiB4bWxyZWFkZXIuYzogZml4ZWQgYSB0eXBvIGluIGEgY29tbWVudAoKVHVlIEFwciAyOSAwNzozMjowMiBNRFQgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4uZW50PgoKCSogZG9jL3R1dG9yaWFsL2FwaC5odG1sLCBpeDAxLmh0bWwKCWZvcmdvdCB0byBjdnMgYWRkIHRoZSBuZXcgZmlsZXMuIFRoYW5rcyB0byBSb2xhbmQgdmFuIExhYXIKCWZvciBwb2ludGluZyB0aGlzIG91dAoKVHVlIEFwciAyOSAxNDozNjo0OSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jIGRvYy9saWJ4bWwyLWFwaS54bWw6IGZpeGluZyBhIGZ1bmN0aW9uIGNvbW1lbnQKCSogZG9jL01ha2VmaWxlLmFtIGRvYy9hcGlidWlsZC5weSBkb2MvZ25vbWUteG1sLnNnbWw6IHN3aXRjaGluZwoJICB0byB0aGUgWE1ML1hTTFQgZG9jIGdlbmVyYXRpb24gY2xvc2luZyAjMTExNzk5CgkqIGRvYy9odG1sLyo6IGNvbXBsZXRlIHVwZGF0ZSBvZiB0aGUgSFRNTCByZXN1bHRzCgpNb24gQXByIDI4IDE0OjUxOjQxIENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvZGVmZ2VuLnhzbDogZml4ZWQgdGhlIGNvbmRpdGlvbmFsIGZvciB1bmljb2RlIG1hcCwKCSAgcmVtb3ZlZCBoYXJkY29kZWQgc2NoZW1hIGVudHJpZXMKCSAgCk1vbiBBcHIgMjggMDI6MTk6MDAgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB3aW4zMi9kZWZnZW4ueHNsOiBuZXcgZmlsZSwgc3R5bGVzaGVldCBmb3IgZ2VuZXJhdGluZyAKCSAgd2luMzIvbGlieG1sMi5kZWYuc3JjIGZyb20gZG9jL2xpYnhtbDItYXBpLnhtbAoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGlzIGF1dG9nZW5lcmF0ZWQgZnJvbSBub3cgb24sIGNoYW5nZXMKCSAgdG8gdGhpcyBmaWxlIHdpbGwgbm90IGFwcGVhciBoZXJlIGFueW1vcmUKCSAgCk1vbiBBcHIgMjggMDA6MTI6MTEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qcyBweXRob24vc2V0dXAucHkuaW46IGFwcGxpZWQgcGF0Y2gKCSAgZnJvbSBTdOlwaGFuZSBCaWRvdWwgZm9yIHRoZSBQeXRob24gYmluZGluZ3Mgb24gdGhlIG5ldwoJICByZWxlYXNlLgoKU3VuIEFwciAyNyAxNzo1NjoyMSBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIGRlYnVnWE1MLmM6IGluY2x1ZGVkIGxpYnhtbC91cmkuaCBmb3IgeG1sQ2Fub25pY1BhdGgKCSAgZGVjbGFyYXRpb24KCSogd2luMzIvY29uZmlndXJlLmpzOiB0aHJlYWQtZW5hYmxlZCBidWlsZCBpcyBub3cgZGVmYXVsdAoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGFkZGVkIG1vcmUgZXhwb3J0cwoKU3VuIEFwciAyNyAwMDoyMzowNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTkVXUyBkb2MvKi54c2wgZG9jLyouaHRtbDogdXBkYXRlZCB0aGUgd2ViIHNpdGUgc2VwYXJhdGVkCgkgIGRldmVsb3BlcnMgZnJvbSBjb21tb24gcGFnZXMsIG1hZGUgdGhlIHRyYW5zaXRpb24gdG8gWEhUTUwxLAoJICBhZGRlZCB2YWxpZGl0eSBjaGVja2luZyB0byB0aGUgbWFrZWZpbGUgcnVsZXMuCgpTYXQgQXByIDI2IDIzOjE3OjUxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4IGZvciB4bWxJT1BhcnNlRFREIHNhbWUgYXMgcHJldmlvdXMgYW5kIHJlcG9ydGVkCgkgIGJ5IFBldHIgUGFqYXMKClNhdCBBcHIgMjYgMTU6MjY6MDQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBhcHBsaWVkIGZpeCB0byB4bWxTQVhQYXJzZURURCBmcm9tIE1hbGNvbG0gVHJlZGlubmljawoJICBjbG9zaW5nICMxMTE2MzgKClNhdCBBcHIgMjYgMTQ6MDA6NTggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHk6IGZpeGVkIGEgcHJvYmxlbSBpbiB0aGUgZ2VuZXJhdG9yIHdoZXJlCgkgIHRoZSB3YXkgZnVuY3Rpb25zIGFyZSByZW1hcHBlZCBhcyBtZXRob2RzIG9uIGNsYXNzZXMgd2FzCgkgIG5vdCBzeW1ldHJpYyBhbmQgZGVwZW5kYW50IG9uIHB5dGhvbiBpbnRlcm5hbCBoYXNoIG9yZGVyLAoJICBhcyByZXBvcnRlZCBieSBTdOlwaGFuZSBCaWRvdWwKCkZyaSBBcHIgMjUgMjE6NTI6MzMgTURUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbDoKCXhtbHR1dG9yaWFsLnhtbAoJeG1sdHV0b3JpYWwucGRmCgkqLmh0bWwKCWFkZCBhcHBlbmRpeCBvbiBnZW5lcmF0aW5nIGNvbXBpbGVyIGZsYWdzLCBtb3JlIGluZGV4aW5nCgpTYXQgQXByIDI2IDAxOjEwOjQ4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmlvZGVmLmggdm1zL2J1aWxkX2xpYnhtbC5jb206IGFwcGxpZWQgcGF0Y2ggZnJvbSBDcmFpZyBBLiBCZXJyeQoJICB0byBnZXQgbGlieG1sLTIuNS43IHRvIGNvbXBpbGUgb24gT3BlblZNUwoKRnJpIEFwciAyNSAxODo0MjozNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGluZyBhbiB4bWxQYXJzZURURCBidWcgcmFpc2VkIGJ5IFBldHIgUGFqYXMKCkZyaSBBcHIgMjUgMTU6MjA6MjkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9NYWtlZmlsZS5hbSBkb2MveG1sY2F0YWxvZy4xIGRvYy94bWxjYXRhbG9nX21hbi54bWwKCSAgZG9jL3htbGxpbnQuMSBkb2MveG1sbGludC54bWw6IGF1dG9tYXRlZCB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUKCSAgbWFuIHBhZ2UgYmFzZWQgb24geHNsdHByb2MgYW5kIGEgc3R5bGVzaGVldCBQSSBpbiB0aGUgWE1MLgoKRnJpIEFwciAyNSAxMjozNzozMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL3htbGxpbnQuKjogdHJ5aW5nIHRvIGZpeCAjMTEwNTQxIHdoZXJlICZuYnNwOyBnZW5lcmF0ZWQKCSAgY2hhcmFjdGVyIHByZXZlbnRpbmcgcmVuZGVyaW5nIGJ5IHRoZSBtYW4gY29tbWFuZC4KCkZyaSBBcHIgMjUgMDE6MDk6MjMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE5FV1MgY29uZmlndXJlLmluOiBwcmVwYXJpbmcgcmVsZWFzZSAyLjUuNwoJKiBkb2MvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcwoJKiBkb2MvYXBpYnVpbGQucHk6IGZpeGVkIHRoZSBzY3JpcHQKClRodSBBcHIgMjQgMTk6MTE6MTIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGRvYy9hcGlidWlsZC5weTogbWFrZSBzdXJlIHRoZSBPT00gY29kZSBkb24ndAoJICBnZXQgaW4gdGhlIHdheSBvZiB0aGUgYnVpbGRzCgkqIGRvYy9saWJ4bWwyLWFwaS54bWwgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IGF1dG9tYXRpYyB1cGRhdGUKClRodSBBcHIgMjQgMTg6MDE6NDYgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIHRlc3RPT00uYyB0ZXN0T09NbGliLltjaF0gOiBpbnRlZ3JhdGVkIHRoZSBPdXQgT2YKCSAgTWVtb3J5IHRlc3QgZnJvbSBIYXZvYyBQZW5uaW5ndG9uICMxMDkzNjgKCSogU0FYLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdHJlZS5jIHVyaS5jIHZhbGlkLmMKCSAgeG1sbWVtb3J5LmMgeG1scmVhZGVyLmMgeG1scmVnZXhwLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oCgkgIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBhIGxvdCBvZiBtZW1vcnkgYWxsb2NhdGlvbiBjbGVhbnVwcwoJICBiYXNlZCBvbiB0aGUgcmVzdWx0cyBvZiB0aGUgT09NIHRlc3RpbmcKCSogY2hlY2stcmVsYXhuZy10ZXN0LXN1aXRlMi5weTogc2VlbXMgSSBmb3Jnb3QgdG8gY29tbWl0IHRoZQoJICBzY3JpcHQuCgpXZWQgQXByIDIzIDE3OjE2OjQxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogdHJpdmlhbCBmaXggZm9yIDEwOTc3NCByZW1vdmluZyBhIHdhcm5pbmcKCldlZCBBcHIgMjMgMTU6NDk6MzIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBTQVguYyBjYXRhbG9nLmMgZGVidWdYTUwuYyBwYXJzZXIuYzogdHJ5IHRvIGZpbmQKCSAgbW9yZSBwbGFjZXMgd2hlcmUgeG1sQ2Fub25pY1BhdGgoKSBtdXN0IGJlIHVzZWQgdG8gY29udmVydAoJICBmaWxlbmFtZXMgdG8gVVJMcywgdHJ5aW5nIHRvIGZpeCAjMTExMDg4CgpXZWQgQXByIDIzIDA5OjM1OjEyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weTogYXBwbGllZCBwYXRjaCBmcm9tIAoJICBCcmVudCBNIEhlbmRyaWNrcyBhZGRpbmcgYmluZGluZyBmb3IgeG1sQ2F0YWxvZ0FkZExvY2FsCgpUdWUgQXByIDIyIDE1OjE4OjAxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IHRyaWVkIHRvIGZpeCAjOTg4NzkgYWdhaW4gaW4gYSBtb3JlIHNvbGlkCgkgIHdheS4KCSAKVHVlIEFwciAyMiAxMzo1ODo0MyBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogYWRkZWQgbW9yZSBleHBvcnRzIGZyb20gdGhlIHJlbGF4bmcgYW5kCgkgIHhtbHJlYWRlciBjbGFuCgpUdWUgQXByIDIyIDEwOjM1OjEzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYyB0ZXN0L3ZhbGlkL25zKiB0ZXN0L3Jlc3VsdC9ucyo6IGFwcGxpZWQgdGhlIHBhdGNoCgkgIHByb3ZpZGVkIGJ5IEJyZW50IEhlbmRyaWNrcyBmaXhpbmcgIzEwNTk5MiBhbmQgaW50ZWdyYXRlZCB0aGUKCSAgZXhhbXBsZXMgaW4gdGhlIHRlc3RzdWl0ZS4KClR1ZSBBcHIgMjIgMDE6MDY6MDkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFRPRE86IHVwZGF0ZWQgYSBiaXQKCSogY29uZmlndXJlLmluOiBmaXhlZCB0aGUgY29tbWVudCwgdGhyZWFkcyBub3cgZGVmYXVsdCB0byBvbgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogZml4ZWQgYW4gZXJyb25lb3VzIHhtbE1hbGxvY0F0b21pYygpIGNhbGwKCk1vbiBBcHIgMjEgMjM6MzM6MzggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYyBsaWJ4bWwuaCBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0cmVlLmMgeG1sbGludC5jCgkgIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBhIGxvdCBvZiBwZXJmb3JtYW5jZSB3b3JrCgkgIGVzcGVjaWFsbHkgdGhlIHNwZWVkIG9mIHN0cmVhbWluZyB0aHJvdWdoIHRoZSByZWFkZXIgYW5kIHB1c2gKCSAgaW50ZXJmYWNlLiBTb21lIHRocmVhZCByZWxhdGVkIG9wdGltaXphdGlvbnMuIE5lYXJseSBkb3VibGVkIHRoZQoJICBzcGVlZCBvZiBwYXJzaW5nIHRocm91Z2ggdGhlIHJlYWRlci4KClN1biBBcHIgMjAgMTA6MzY6MDUgTURUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxsaW50LnhtbAoJKiBkb2MveG1sbGludC4xCgl1cGRhdGUgbWFuIHBhZ2UgdG8gZXhwbGFpbiB1c2Ugb2YgLS1zdHJlYW0KClNhdCBBcHIgMTkgMDI6MDM6MjQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgYzE0bi5jIGNhdGFsb2cuYyBlbmNvZGluZy5jIGdsb2JhbHMuYwoJICBuYW5vaHR0cC5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHJlbGF4bmcuYyB0cmVlLmMgdXJpLmMKCSAgeG1sbWVtb3J5LmMgeG1scmVhZGVyLmMgeG1scmVnZXhwLmMgeHBhdGguYyB4cG9pbnRlci5jCgkgIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaDogYWRkZWQKCSAgeG1sTWFsbG9jQXRvbWljKCkgdG8gYmUgdXNlZCB3aGVuIGFsbG9jYXRpbmcgYmxvY2tzIHdoaWNoCgkgIGRvIG5vdCBjb250YWlucyBwb2ludGVycywgYWRkIHhtbEdjTWVtU2V0dXAoKSBhbmQgeG1sR2NNZW1HZXQoKQoJICB0byBhbGxvdyByZWdpc3RlcmluZyB0aGUgZnVsbCBzZXQgb2YgZnVuY3Rpb25zIG5lZWRlZCBieQoJICBhIGdhcmJhZ2UgY29sbGVjdGluZyBhbGxvY2F0b3IgbGlrZSBsaWJnYywgcmVmICMxMDk5NDQKCkZyaSBBcHIgMTggMTY6Mzc6NDEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogc3dpdGNoZWQgdG8gaGF2ZSB0aHJlYWQgc3VwcG9ydCBlbmFibGVkIGJ5IGRlZmF1bHQsCgkgIGRpZG4ndCBnb3QgdHJvdWJsZXMgd2l0aCBBQkkgY29tcGF0aWJpbGl0eSBvbiBMaW51eCwgaG9wZSBpdAoJICB3b24ndCBicmVhayBvbiBzdHJhbmdlIE9TZXMsIGlmIHllcywgcmVwb3J0IHRoZSBzeXN0ZW0gSUQKCSogZG9jL2xpYnhtbDItYXBpLnhtbDoganVzdCByZWJ1aWx0IHRoZSBBUEkKCkZyaSBBcHIgMTggMTQ6MzE6MTUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oIHBhcnNlci5jIHhtbElPLmMgRE9DQnBhcnNlci5jOiAKCSAgYWRkZWQgc3VwcG9ydCBmb3IgbGFyZ2UgZmlsZSwgdGVzdGVkIHdpdGggYSAzK0dCIGluc3RhbmNlLAoJICBhbmQgc29tZSBjbGVhbnVwLgoJKiBjYXRhbG9nLmM6IGFkZGVkIGEgVE9ETwoJKiBNYWtlZmlsZS5hbTogYWRkZWQgc29tZSAibWFrZSB0ZXN0cyIgY29tbWVudHMKClRodSBBcHIgMTcgMTQ6NTE6NTcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogc29tZSBjbGVhbnVwcwoJKiBkb2MveG1scmVhZGVyLmh0bWw6IGV4dGVuZGVkIHRoZSBkb2N1bWVudCB0byBjb3ZlciBSZWxheE5HIGFuZAoJICB0cmVlIG9wZXJhdGlvbnMKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9yZWFkZXJbNDZdLnB5OiBhZGRlZCBzb21lCgkgIHhtbFJlYWRlciBleGFtcGxlL3JlZ3Jlc3Npb24gdGVzdHMKCSogcmVzdWx0L3JlbGF4bmcvdHV0b3IqLmVycjogdXBkYXRlZCB0aGUgb3V0cHV0IG9mIGEgbnVtYmVyIG9mIHRlc3RzCgpUaHUgQXByIDE3IDExOjM1OjM3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IHZhbGdyaW5kIHBvaW50ZWQgb3V0IGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgZXJyb3IuCgpUaHUgQXByIDE3IDExOjA2OjI4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9yZWxheG5nLmggcmVsYXhuZy5jIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oCgkgIHhtbHJlYWRlci5jOiBhdWduZW10aW5nIHRoZSBBUElzLCBjbGVhbnVwcy4KCSogcGFyc2VyLmM6IGNsZWFudXAgYnVnICMxMTEwMDUKCSogeG1sSU8uYzogYWRkZWQgc29tZSBtaXNzaW5nIGNvbW1lbnRzCgpXZWQgQXByIDE2IDE3OjQ2OjUwIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmMgeG1sbGludC5jOiBtb3JlIHdvcmsgb24gUmVsYXhORyBzdHJlYW1pbmcgdmFsaWRhdGlvbgoJICB0cnlpbmcgdG8gaW1wcm92ZSB0aGUgc3Vic2V0IGNvbXBpbGVkLCBhbmQgbW9yZSB0ZXN0aW5nLgoJKiBkb2MvZG93bmxvYWRzLmh0bWwgZG9jL3htbC5odG1sIGRvYy94bWxtZW0uaHRtbDogc29tZSB1cGRhdGVzIG9uIHRoZQoJICBkb2N1bWVudGF0aW9uCgkqIHRlc3QvcmVsYXhuZy90dXRvcjExXzFfMy54bWw6IGZpeGVzIHRoZSBEVEQgcGF0aAoJKiByZXN1bHQvcmVsYXhuZy8qLmVycjogZml4IHNvbWUgb2YgdGhlIG91dHB1dHMKCldlZCBBcHIgMTYgMDE6Mjg6MTUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyB4bWxyZWFkZXIuYyB4bWxsaW50LmMgaW5jbHVkZS9saWJ4bWwvcmVsYXhuZy5oCgkgIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oOiBpbXBsZW1lbnRlZCBzdHJlYW1pbmcgb2YKCSAgUmVsYXhORyAod2hlbiBwb3NzaWJsZSkgb24gdG9wIG9mIHRoZSB4bWxSZWFkZXIgaW50ZXJmYWNlLAoJICBwcm92aWRlZCBpdCBhcyB4bWxsaW50IC0tc3RyZWFtIC0tcmVsYXhuZyAucm5nIC54bWwKCSAgVGhpcyBzZWVtcyB0byBtb3N0bHkgd29yay4KCSogTWFrZWZpbGUuYW06IHVwZGF0ZWQgdG8gdGVzdCBSZWxheE5HIHN0cmVhbWluZwoKTW9uIEFwciAxNCAxODowODozMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jIGluY2x1ZGUvbGlieG1sL3JlbGF4bmcuaDogaW50ZWdyYXRlZCB0aGUgcmVnZXhwCgkgIGJhc2VkIHZhbGlkaXR5IGNoZWNraW5nIG9mIGZyYWdtZW50cyBvZiB0aGUgZG9jdW1lbnQgZm9yCgkgIHdoaWNoIHRoZSBSTkcgY2FuIGJlIGNvbXBpbGVkIHRvIHJlZ2V4cHMuIFdvcmtzIG9uIGFsbCByZWdyZXNzaW9uCgkgIHRlc3RzLCBvbmx5IGZpeCBuZWVkZWQgaXMgcmVsYXRlZCB0byBlcnJvciBtZXNzYWdlcy4KClN1biBBcHIgMTMgMjE6NTE6MDAgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyB4bWxyZWdleHAuYyBpbmNsdWRlL2xpYnhtbC94bWxhdXRvbWF0YS5oCgkgIGluY2x1ZGUvbGlieG1sL3htbHJlZ2V4cC5oOiBTdGFydGluZyB3b3JrIHByZWNvbXBpbGluZwoJICBwYXJ0cyBvZiBSZWxheE5HIHNjaGVtYXMuIE5vdCBwbHVnZ2VkIG9udG8gdmFsaWRpdHkgY2hlY2tpbmcKCSAgeWV0LCBqdXN0IHRoZSByZWdleHAgYnVpbGRpbmcgcGFydC4gTmVlZGVkIHRvIGV4dGVuZCBzb21lCgkgIG9mIHRoZSBhdXRvbWF0YSBhbmQgcmVnZXhwIEFQSXMuCgpGcmkgQXByIDExIDIxOjM2OjIxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmMgeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmg6IG1ha2Ugc3VyZQoJICB4bWxsaW50IC0tc3RyZWFtIGFuZCB4bWxsaW50IC0tc3RyZWFtIC0tdmFsaWQgcmV0dXJucyBlcnJvcnMKCSAgY29kZSBhcHByb3ByaWF0ZWx5CgpGcmkgQXByIDExIDEwOjU5OjI0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaDogQWRkZWQgdGhlIEV4cGFuZCgpCgkgIGFuZCBOZXh0KCkgb3BlcmF0aW9uIHRvIHdvcmsgb24gc3VidHJlZXMgd2l0aGluIHRoZSByZWFkZXIKCSAgZnJhbWV3b3JrLgoJKiBkb2MvbGlieG1sMi1hcGkueG1sIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiByZXN1bHRpbmcgdXBkYXRlcwoJKiBweXRob24vdGVzdHMvcmVhZGVyNS5weTogYWRkZWQgYW4gZXhhbXBsZSBmb3IgdGhvc2UgbmV3CgkgIGZ1bmN0aW9ucyBvZiB0aGUgcmVhZGVyLgoKVGh1IEFwciAxMCAyMzozODoxMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogcGF0Y2ggZnJvbSBWYXNpbHkgVGNoZWthbGtpbiB0byBmaXggIzEwOTg2NQoKVGh1IEFwciAxMCAxNTozMjo0NCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IGZpeGluZyBIYXNWYWx1ZSBmb3IgbmFtZXNwYWNlIGFzIHJhaXNlZCBieSAKCSAgRGVueXMgRHVjaGllcgoKV2VkIEFwciAgOSAxNDowNzoxOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL0hUTUxwYXJzZXIuaDogIGV4cG9ydGVkCgkgIGh0bWxDcmVhdGVNZW1vcnlQYXJzZXJDdHh0KCkgaXQgd2FzIHN0YXRpYwoKV2VkIEFwciAgOSAxMzoyMTo0OCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaDoKCSAgdXBkYXRlIGZyb20gQ2hhcmxlcyBCb3plbWFuIGZvciBkYXRlIGFuZCBkdXJhdGlvbiB0eXBlcwoJKiB0ZXN0L3NjaGVtYXMvZGF0ZV8wLiogdGVzdC9zY2hlbWFzL2R1cl8wLioKCSAgcmVzdWx0L3NjaGVtYXMvZGF0ZV8wLiogcmVzdWx0L3NjaGVtYXMvZHVyXzAuKjogdXBkYXRlZCB0b28KCk1vbiBBcHIgIDcgMTI6MTk6MjYgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyB2YWxpZC5jIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmg6CgkgIGZpeGluZyBidWcgIzEwNzEyOSwgcmVtb3ZpbmcgZXhjZXNzaXZlIGFsbG9jYXRpb24gYW5kIGNhbGxzCgkgIHRvICpwcmludGYgaW4gdGhlIGNvZGUgdG8gYnVpbGQgUU5hbWUgc3RyaW5ncy4KClNhdCBBcHIgIDUgMTE6NDE6MzYgQ0VTVCAyMDAzIElnb2UgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGZpeGVkIGNvbmRpdGlvbmFsIGV4cG9ydHMsIHJlcG9ydGVkIGJ5CgkgIEx1a2UgTXVycmF5LgoKRnJpIEFwciAgNCAxODowODowMCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIGEgcG9zc2libGUgcHJvYmxlbSB3aXRoIHhtbFJlY292ZXJNZW1vcnkoKQoKVGh1IEFwciAgMyAxNzoyNDo0NCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJpby5jIHRyaW8uaCB0cmlvZGVmLmggdHJpb25hbi5jIHRyaW9uYW4uaCB0cmlvcC5oIHRyaW9zdHIuYwoJICB0cmlvc3RyLmg6IEJqb3JuIHNlbnQgYW4gdXBkYXRlIGZvciB0aGUgVFJJTyBwb3J0YWJpbGl0eSBsYXllci4KClR1ZSBBcHIgIDEgMjE6NTc6MjYgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGV4cG9ydGVkIG5ldyBmdW5jdGlvbnMKClR1ZSBBcHIgIDEgMTM6MDk6NDYgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBORVdTOiBwcmVwYXJpbmcgcmVsZWFzZSAyLjUuNgoJKiBkb2MvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcwoKVHVlIEFwciAgMSAxMTo1MjoxNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IGZpeGVkIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBwb2ludGVkIGJ5IHZhbGdyaW5kCgkgIG9uIEMxNE50ZXN0cwoKVHVlIEFwciAgMSAwMDoxMjoyOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBvbmUgbW9yZSBmaXh1cCBvZiBlcnJvciBtZXNzYWdlIHJlcG9ydGluZwoKTW9uIE1hciAzMSAxODozNjozMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBtb3JlIHdvcmsgb24gYnVnICMxMDkyMjUsIGFuZCBmaXhlZCBhbiB1bmluaXRpYWxpemVkCgkgIHZhcmlhYmxlIHBvaW50ZWQgb3V0IGJ5IHZhbGdyaW5kCgpNb24gTWFyIDMxIDE4OjA1OjIyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IHRyeSB0byB3b3JrIG9uIGJ1ZyAjMTA5MjI1IGFuZCBwcm92aWRlIGJldHRlcgoJICBlcnJvciByZXBvcnRzLgoJKiByZXN1bHQvcmVsYXhuZy8qIDogdGhpcyBjaGFuZ2UgdGhlIG91dHB1dCBvZiBhIG51bWJlciBvZiB0ZXN0cwoJKiB4aW5jbHVkZS5jOiBmaXhpbmcgdGhlIHBhcnNlZCBlbnRpdHkgcmVkZWZpbml0aW9uIHByb2JsZW0KCSAgcmFpc2VkIG9uIHRoZSBsaXN0LgoJKiB0ZXN0L3NjaGVtYXMvZGF0ZV8wLnhzZDogdXBkYXRlZCB0aGUgZGF0ZSB0ZXN0IGMuZi4gRTItMTIKCk1vbiBNYXIgMzEgMTM6MTk6MDQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBmaXhlZCBkYXRlIGNvbXBhcmlzb24gdG8gaGFuZGxlIHRoZSB0em8KCSAgVGhlIG9ubHkgZmFpbHVyZXMgbGVmdCBhcmUgZGlzYWdyZWVtZW50cyBvbiBOb3RhdGlvbnMgYW5kCgkgICcrMScgbm90IGJlaW5nIGFsbG93ZWQgZm9yIHVsb25nLCB1aW50LCB1c2hvcnQgYW5kIHVieXRlLgoKTW9uIE1hciAzMSAxMjoxMTo0NyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGZpeGVkIGdNb250aCBwYXJzaW5nIHJvdXRpbmUgYWNjb3JkaW5nbHkKCSAgdG8gdGhlIFhNTCBTY2hlbWFzIGVycmF0YQoJICBodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA1L3htbHNjaGVtYS1lcnJhdGEjZTItMTIKClN1biBNYXIgMzAgMjM6MDQ6MTggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyB4bWxzY2hlbWFzdHlwZXMuYzogbW9yZSB3b3JrIG9uIFhNTCBTY2hlbWFzIGRhdGF0eXBlcwoJICBhbmQgZmFjZXRzIHN1cHBvcnQuIEN1cnJlbnRseSBvbmx5IHNjaGVtYXMgd2l0aCBiaW5IZXggb3IKCSAgYmFzZTY0IGRvbid0IGNvbXBpbGUuIEEgZmV3IGVycm9yIGxlZnQgaW4gdGhlIHRlc3Qgc3VpdGU6CgkgIGZvdW5kIDEwMzUgdGVzdCBpbnN0YW5jZXM6IDkxOSBzdWNjZXNzIDIzIGZhaWx1cmVzCgkgIG1vc3QgYXJlIGdkYXRlIG9yIGdkYXRleWVhciBmYWlsaW5nIGNoZWNrLCBhbmQgYSBmZXcgY2FzZXMgd2hlcmUKCSAgSmFtZXMgY2xhcmsgdGVzdHMgcmVzdWx0cyBhcmUgc3RyYW5nZS4KCSogdmFsaWQuYzogYWxsb3cgdG8gcmV1c2UgdGhlIE5vdGF0aW9uIGNoZWNraW5nIHJvdXRpbmUgd2l0aG91dAoJICBoYXZpbmcgYSB2YWxpZGF0aW9uIGNvbnRleHQuCgkqIFNBWC5jOiByZW1vdmVkIGEgI2lmIDAKClNhdCBNYXIgMjkgMTc6MzU6MDUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogZm9yZ290IHRvIGFwcGx5IG9uZSBjaGVjayBmcm9tICMxMDY5MzEgcGF0Y2gKCSogeG1sc2NoZW1hc3R5cGVzLmM6IG1vcmUgd29yayBvbiBYTUwgU2NoZW1hcyBkYXRhdHlwZXMKClNhdCBNYXIgMjkgMTE6NDk6MjUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jIGluY2x1ZGUvbGlieG1sL3JlbGF4bmcuaCB4bWxzY2hlbWFzdHlwZXMuYzogbW9yZSB3b3JrCgkgIG9uIGNsZWFuaW5nIHVwIFhNTCBTY2hlbWFzIGRhdGF0eXBlcyBiYXNlZCBvbiBKYW1lcyBDbGFyayB0ZXN0cwoJICB0ZXN0L3hzZHRlc3QveHNkdGVzdC54bWwKCkZyaSBNYXIgMjggMTQ6MjQ6MDggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBpbXBsZW1lbnRlZCBjb21wYXJpc29ucyBmb3IgU2NoZW1hcyB2YWx1ZXMuCgkqIHhtbHNjaGVtYXN0eXBlcy5jIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXN0eXBlcy5oOiBmaXhlZAoJICBzb21lIGJ1Z3MgaW4gZHVyYXRpb24gaGFuZGxpbmcsIGNvbXBhcmlzb25zIGZvciBkdXJhdGlvbnMKCSAgYW5kIGRlY2ltYWxzLCByZW1vdmVkIGFsbCBtZW1vcnkgbGVha3MgcG9pbnRlZCBvdXQgYnkgSmFtZXMKCSAgdGVzdHN1aXRlLiBDdXJyZW50IHN0YXR1cyBpcyBub3cKCSAgZm91bmQgMjM4IHRlc3Qgc2NoZW1hczogMTk3IHN1Y2Nlc3MgNDEgZmFpbHVyZXMKCSAgZm91bmQgMTAzNSB0ZXN0IGluc3RhbmNlczogODAzIHN1Y2Nlc3MgMTMwIGZhaWx1cmVzCgpGcmkgTWFyIDI4IDAwOjQxOjU1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzLmg6IGZpeGVkIGJ1Z3MgYW5kIG1lbW9yeQoJICBsZWFrcyBpbiB0aGUgVzNDIFhNTCBTY2hlbWFzIGNvZGUKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGltcGxlbWVudGVkIG5vblBvc2l0aXZlSW50ZWdlcgoJKiB0ZXN0L3NjaGVtYXMvbGVuZ3RoMl8wLnhzZCByZXN1bHQvc2NoZW1hcy9sZW5ndGgyXzBfMC5lcnI6CgkgIGZpeGVkIHRoZSB0ZXN0IGFuZCByZXN1bHQuCgpUaHUgTWFyIDI3IDIyOjIzOjA3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyB0cmVlLmM6IHR3byBwYXRjaGVzIGZyb20gSmFtZXMgQnVyc2Egb24gdGhlIEhUTUwKCSAgcGFyc2VyIGFuZCBhIHR5cG8KCSogeG1sc2NoZW1hc3R5cGVzLmM6IHJlaW5kZW50aW5nLCBmaXhpbmcgYSBtZW1vcnkgYWNjZXNzCgkgIHByb2JsZW0gd2l0aCBkYXRlcy4KClRodSBNYXIgMjcgMTU6NTM6MzUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGluZyAjMTA5MjI3IHByb3ZpZGluZyBtb3JlIGNvbnRleHQgaW4gY2FzZSBvZiAKCSAgc3RhcnQvZW5kIHRhZyBtaXNtYXRjaAoJKiBweXRob24vdGVzdHMvY3R4dGVycm9yLnB5IHB5dGhvbi90ZXN0cy9yZWFkZXJlcnIucHk6IHVwZGF0ZSB0aGUKCSAgdGVzdHMgYWNjb3JkaW5nbHkKClRodSBNYXIgMjcgMTU6MjI6NDEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogc2hvdWxkIGZpeCAjMTA5MzI3IGVycm9ycyBvbiBtZW1vcnkgYWNjZXNzZXMKClRodSBNYXIgMjcgMTU6MDY6MTMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogRml4ZWQgcmVvcGVuaW5nIG9mICM3ODY2MiA8Zm9ybSBhY3Rpb249Ii4uLiI+CgkgIGlzIGFuIFVSSSByZWZlcmVuY2UKCldlZCBNYXIgMjYgMjI6Mzg6MzkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4ZWQgYnVnICMxMDkxNjAgb24gbm9uLUFTQ0lJIElEcwoKV2VkIE1hciAyNiAxNzozMDozNyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogTm9ybSBzdWdnZXN0ZWQgYSBuaWNlciBlcnJvciBtZXNzYWdlIGZvciB4bWw6c3BhY2UgdmFsdWVzCgkgIGVycm9ycwoKV2VkIE1hciAyNiAwMTozNDoxOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3hwYXRoLmg6IGZpcnN0IHBhcnQgb2YgdGhlIGZpeCB0bwoJICBwZXJmb3JtYW5jZSBidWcgIzEwODkwNSwgYWRkcyB4bWxYUGF0aE9yZGVyRG9jRWxlbXMoKSBwcm92aWRpbmcKCSAgZG9jdW1lbnQgb3JkZXIgZm9yIG5vZGVzLgoJKiBweXRob24vbGlieG1sLmM6IFB5dGhvbiBtYXkgcmVxdWlyZSBUUklPIGFzIEFsYmVydCBDaGluIHBvaW50ZWQgb3V0CgpUdWUgTWFyIDI1IDE2OjA3OjAwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiByZW1vdmluZyBhIHdhcm5pbmcgd2l0aCBTdW4gY29tcGlsZXIKCSAgYnVnICMxMDkxNTQKClR1ZSBNYXIgMjUgMDc6MDI6NTYgTVNUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxsaW50LnhtbAoJKiBkb2MveG1sbGludC4xCgl1cGRhdGUgeG1sbGludCBtYW4gcGFnZSB3aXRoIC0tcmVsYXhuZyBvcHRpb24KClR1ZSBNYXIgMjUgMTI6MDc6MDMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL3NldHVwLnB5LmluIDogd2FzIG1pc3NpbmcgImRydl9saWJ4bWwyLnB5IgoKTW9uIE1hciAyNCAxOTozODowNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmMgeHBhdGguYzogc29tZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gdGhlIG5ldyB3YXkgb2YgCgkgIGhhbmRsaW5nIFJlc3VsdCBWYWx1ZSBUcmVlLCBiZWZvcmUgMi41LjUKCk1vbiBNYXIgMjQgMTY6MzY6MjMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIE5FV1M6IHByZXBhcmluZyByZWxlYXNlIDIuNS41CgkqIGRvYy8qIDogdXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgcmVnZW5lcmF0ZWQgaXQuCgpNb24gTWFyIDI0IDE0OjU2OjAxIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGVkIHNvbWUgcHJvYmxlbXMgcmVsYXRlZCB0byAjNzU4MTMgYWJvdXQgaGFuZGxpbmcKCSAgb2YgUmVzdWx0IFZhbHVlIFRyZWVzCgpTdW4gTWFyIDIzIDIyOjU3OjIwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jOiBhcHBsaWVkIGEgc2V0IG9mIHBhdGNoZXMgZnJvbSBMb3JlbnpvIFZpYWxpIGNvcnJlY3RpbmcKCSAgVVJJIHBhcnNpbmcgZXJyb3JzLgoKU3VuIE1hciAyMyAyMjowMDoxNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogdmFsaWRpdHkgc3RhdHVzIHdhcyBub3QgcGFzc2VkIGJhY2sgd2hlbiB2YWxpZGF0aW5nIGluCgkgIGVudGl0aWVzLCBidXQgcmFpc2VkIGJ5IE9saXZlciBGaXNjaGVyCgpTdW4gTWFyIDIzIDIxOjMwOjUwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmM6IGF2b2lkIGVzY2FwaW5nICcsJyBpbiBVUklzCgpTdW4gTWFyIDIzIDEyOjU3OjAwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhpbmcgYnVnICMxMDg5NzYgZ2V0IHRoZSBJRC9SRUZzIHRvIHJlZmVyZW5jZSAKCSAgdGhlIElEIGluIHRoZSBkb2N1bWVudCBjb250ZW50IGFuZCBub3QgaW4gdGhlIGVudGl0eSBjb3B5CgkqIFNBWC5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBtb3JlIGNoZWNraW5nIG9mIHRoZSBJRC9SRUYKCSAgc3R1ZmYsIGJldHRlciBzb2x1dGlvbiBmb3IgIzEwNzIwOAoJKiB4bWxyZWdleHAuYzogcmVtb3ZlZCBhIGRpcmVjdCBwcmludGYsIGRvaGhoCiAgICAgICAgKiB4bWxyZWFkZXIuYzogZml4ZWQgYSBidWcgb24gc3RyZWFtaW5nIHZhbGlkYXRpb24gb2YgZW1wdHkgCgkgIGVsZW1lbnRzIGluIGVudGl0aWVzCgkqIHJlc3VsdC9WQy9FbGVtZW50VmFsaWQ4IHRlc3QvVkNNL3YyMC54bWwgcmVzdWx0L3ZhbGlkL3hodG1sMS54aHRtbDoKCSAgY2xlYW51cCBvZiB0aGUgdmFsaWRhdGlvbiB0ZXN0cwoJKiB0ZXN0L3ZhbGlkL2lkKiB0ZXN0L3ZhbGlkL2R0ZHMvZGVzdGZvby5lbnQgcmVzdWx0L3ZhbGlkL2lkKjoKCSAgYWRkZWQgbW9yZSBJRC9JRFJFRiB0ZXN0cyB0byB0aGUgc3VpdGUKClNhdCBNYXIgMjIgMjM6Mzg6MDggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IGZpeGVkICMxMDcwNDMgcmVtb3ZpbmcgMiB3YXJuaW5ncyB3aXRoIFN1biBPbmUKCSAgY29tcGlsZXIuCgpTYXQgTWFyIDIyIDE4OjUwOjQ1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogdmFsZ3JpbmQnZWQgYW5kIGNsZWFuZWQgdXAgYSBjb3VwbGUgb2YgbWVtb3J5IGlzc3Vlcy4KClNhdCBNYXIgMjIgMTY6MTU6NTAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IGZpeCBidWcgIzEwNzIwOCBhdm9pZCBmYWxzZSBkdXBsaWNhdGVzIHdoZW4gSUQvUkVGcyBhcmUKCSAgZGVmaW5lZCBpbiBlbnRpdGllcyBjb250ZW50CgpTYXQgTWFyIDIyIDE1OjUzOjI3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBGaXhlZCB2YWxpZGF0aW9uIGJ1ZyAjMTA4ODU4IG9uIG5hbWVzcGFjZSBuYW1lcyB1c2luZwoJICBlbnRpdGllcyBhbmQgcmVwb3J0ZWQgYnkgQnJlbnQgSGVuZHJpY2tzCgkqIHhtbGxpbnQuYzogcmVwb3J0IHhtbFRleHRSZWFkZXJIYXNWYWx1ZSgpIHJlc3VsdCBpbiAtLXN0cmVhbQoJICAtLWRlYnVnIG91dHB1dC4KClNhdCBNYXIgMjIgMTM6MzI6MzkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IGZpeGVkIGJ1ZyAjMTA4ODAxIHJlcG9ydGVkIGJ5IE1hbGNvbG0gVHJlZGlubmljawoJICBhYm91dCB0aGUgRG9jVHlwZSBub2RlIG5vdCBiZWluZyByZXBvcnRlZCBzb21ldGltZXMuCgkqIHB5dGhvbi90ZXN0cy9yZWFkZXIucHk6IGFkZGVkIHRvIHRlc3QgdG8gdGhlIHJlZ3Jlc3Npb24gY2hlY2tzCgpTYXQgTWFyIDIyIDAxOjU3OjQwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBmaXhlZCBidWcgIzEwODU0NiBvbiBsb25nIENEQVRBIChvciB0ZXh0IG5vZGVzKQoJICByZXBvcnRlZCBieSBFZGQgRHVtYmlsbAoKU2F0IE1hciAyMyAwMTowMDoyNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmM6IHBhdGNoIGZyb20KCSAgam9oYW5AZXZlbmh1aXMubmwgZm9yICMxMDc5MzcgZml4aW5nIHNvbWUgbGluZSBjb3VudGluZwoJICBwcm9ibGVtcywgYW5kIHNvbWUgb3RoZXIgY2xlYW51cHMuCgkqIHJlc3VsdC9IVE1MLzogdGhpcyByZXN1bHQgaW4gc29tZSBsaW5lIG51bWJlciBjaGFuZ2VzCgpGcmkgTWFyIDIxIDIyOjE5OjE0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbTogZml4ZWQgUmVkIEhhdCBidWcgIzg2MTE4IHVzZSBsaWJ4bWwyLnNwZWMKCSAgaW5zdGVhZCBvZiBsaWJ4bWwuc3BlYwoJKiByZWxheG5nLmM6IGZpeGVkIHNvbWUgb2YgdGhlIGVycm9yIHJlcG9ydGluZyBleGNlc3NpdmUKCSAgdmVyYm9zaXR5CgkqIGNhdGFsb2cuYyBkZWJ1Z1hNTC5jIHZhbGlkLmMgeG1scmVhZGVyLmMgeG1sc2NoZW1hcy5jIHhwYXRoLmMKCSAgeG1sc2NoZW1hc3R5cGVzLmM6IHJlbW92ZWQgc29tZSB3YXJuaW5ncyBmcm9tIGdjYwoJKiBkb2MvbGlieG1sMi1hcGkueG1sOiByZWJ1aWx0CgpGcmkgTWFyIDIxIDE3OjI1OjIzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogYW5vdGhlciBvcHRpbWl6YXRpb24sIGZvciBjaG9pY2UgdGhpcyB0aW1lCgkqIHJlc3VsdC9yZWxheG5nL3NwZWMxKiByZXN1bHQvcmVsYXhuZy90dXRvcjEyXzEqIAoJICByZXN1bHQvcmVsYXhuZy90dXRvcjNfNzogY2xlYW51cHMuCgpGcmkgTWFyIDIxIDEzOjQxOjIzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogZml4ZWQgeG1sUmVsYXhOR05vZGVNYXRjaGVzTGlzdAoJKiB0ZXN0L3JlbGF4bmcvdGVzdHN1aXRlLnhtbDogYXVnbWVudGVkIHRoZSB0ZXN0IHN1aXRlCgkqIHJlc3VsdC9yZWxheG5nL3NwZWMxKiByZXN1bHQvcmVsYXhuZy90dXRvcjEyXzEqOiB0aGlzIGZpeGVzCgkgIHNvbWUgc2NoZW1hcyB2YWxpZGF0aW9uIHRlc3RzIGluIHRoZSBwcmVzZW5jZSBvZiBmb3JlaWduIAoJICBuYW1lc3BhY2VzLgoKRnJpIE1hciAyMSAwMjoyMzozNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGFkZGVkIGFub3RoZXIgaW50ZXJsZWF2ZSBzcGVlZHVwLgoKVGh1IE1hciAyMCAxNzoyMjowMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogYWRkZWQgaW50ZWdlciBhbmQgZml4ZWQgb25lIG9mIHRoZQoJICBJRFJFRlMgcmVncmVzc2lvbiB0ZXN0cyBwYm0KCSogcmVzdWx0L3JlbGF4bmcvZG9jYm9va18wLmVycjogdXBkYXRlZAoKV2VkIE1hciAxOSAyMTo1ODo0NyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jIHhtbHNjaGVtYXN0eXBlcy5jOiBhdHRlbXB0IHRvIGNvcGUgd2l0aCBJRC9JRFJFRihTKQoJICBkZWNsYXJlZCBib3RoIGluIHRoZSBEVEQgYW5kIGluIHRoZSBTY2hlbWFzIDxncmluLz4KCSogcmVsYXhuZy5jOiBtb3JlIGRlYnVnLCBhZGRlZCBhIGJpZyBvcHRpbWl6YXRpb24gZm9yIDxtaXhlZD4KCSogdGVzdC9yZWxheG5nL3Rlc3RzdWl0ZS54bWw6IGF1Z21lbnRlZCB0aGUgdGVzdHN1aXRlCgkqIHRlc3QvcmVsYXhuZy8gcmVzdWx0L3JlbGF4bmc6IGFkZGVkIHRoZSBSZWxheE5HIHNwZWMgYW5kIGEgCgkgIERvY0Jvb2sgZXhhbXBsZSB0byB0aGUgcmVncmVzc2lvbiB0ZXN0cwoKV2VkIE1hciAxOSAxMTozNDoxMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay14c2RkYXRhLXRlc3Qtc3VpdGUucHk6IGNvc21ldGljIGNoYW5nZSBmb3Igb3V0cHV0CgkqIHJlbGF4bmcuYzogdHJ5IHRvIG1pbmltaXplIGNhbGxzIHRvIG1hbGxvYy9mcmVlIGZvciBzdGF0ZXMuCgpUdWUgTWFyIDE4IDE3OjUwOjMxIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogcmVtb3ZlZCBhIHdhcm5pbmcKCSogeG1sc2NoZW1hc3R5cGVzLmM6IG1vcmUgY2xlYW51cCwgYWRkZWQgRU5USVRZIGFuZCBFTlRJVElFUwoJICBzdXBwb3J0CgkqIGNoZWNrLXJlbGF4bmctdGVzdC1zdWl0ZS5weSBjaGVjay14c2RkYXRhLXRlc3Qtc3VpdGUucHk6CgkgIGNsZWFudXAvaW1wcm92ZW1lbnRzIG9mIHRoZSByZWdyZXNzaW9uIHRlc3RzIGJhdGNoCgkqIHRlc3QvcmVsYXhuZy90ZXN0c3VpdGUueG1sOiBhdWdtZW50ZWQgbGlieG1sMiBvd24gdGVzdHN1aXRlCgpUdWUgTWFyIDE4IDEyOjM2OjIyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogZml4ZWQgZXJyb3IgbXNnIGNsZWFudXAgZGVhbGxvY2F0aW9uCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBhZGRlZCBhIGZ1bmN0aW9uIHRvIGhhbmRsZSBsaXN0cyBvZgoJICBhdG9taWMgdHlwZXMsIGFkZGVkIHN1cHBvcnQgZm9yIElEUkVGUwoKVHVlIE1hciAxOCAwMToyODoxNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmMgdmFsaWQuYyB4bWxzY2hlbWFzdHlwZXMuYzogYWRkZWQgRGF0YXR5cGUgSUQKCSAgYW5kIElEUkVGLCB1c2FibGUgZnJvbSBSZWxheE5HIG5vdwoJKiBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzdHlwZXMuaDogbmVlZCB0byBhZGQgYSBuZXcgaW50ZXJmYWNlCgkgIGJlY2F1c2UgdGhlIHZhbGlkYXRpb24gbW9kaWZpZXMgdGhlIGluZm9zZXQKCSogdGVzdC9yZWxheG5nL3Rlc3RzdWl0ZS54bWw6IGV4dGVuZGVkIHRoZSB0ZXN0c3VpdGUKCk1vbiBNYXIgMTcgMTY6MzQ6MDcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBmaXhlZCB0aGUgbGFzdCBjb3JlIFJlbGF4TkcgYnVnIGtub3duICMxMDcwODMsCgkgIHNoZW1hcyBkYXRhdHlwZSBJRC9JRFJFRiBzdXBwb3J0IHN0aWxsIG1pc3NpbmcgdGhvdWdoLgoJKiB4bWxyZWFkZXIuYzogZml4IGEgY3Jhc2hpbmcgYnVnIHdpdGggcHJlZml4IHJhaXNlZCBieQoJICBNZXJpam4gQnJvZXJlbgoJKiB0ZXN0L3JlbGF4bmcvdGVzdHN1aXRlLnhtbDogYXVnbWVudGVkIHRoZSB0ZXN0c3VpdGUgd2l0aAoJICBjb21wbGV4IGluaGVyaXRhbmNlIHRlc3RzCgpTdW4gTWFyIDE2IDE4OjQ1OjUwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogc3dpdGNoZWQgYmFjayB0byB0aGUgcHJldmlvdXMgUmVsYXgtTkcgY29kZSBiYXNlLAoJICB0aGUgZGVyaXZhdGlvbiBhbGdvcml0aG0gbmVlZCBzZXZlcmUgY29uc3RyYWluaW5nIGNvZGUgdG8gYXZvaWQKCSAgY29tYmluYXRvcmlhbCBleHBsb3Npb24uIEZpeGVkIHRoZSBwcm9ibGVtIHdpdGggU2ViYXN0aWFuIFJhaHR6CgkgIFRFSSBiYXNlZCBleGFtcGxlIGFuZCBvdGhlciBidWdzCgkqIHJlc3VsdC9yZWxheG5nLyplcnI6IHVwZGF0ZWQgdGhlIHJlc3VsdHMKCSogdGVzdC9yZWxheG5nL3Rlc3RzdWl0ZS54bWw6IHN0YXJ0ZWQgYSBuZXcgdGVzdCBzdWl0ZSAKClNhdCBNYXIgMTUgMjI6MjY6NDYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jIGluY2x1ZGUvbGlieG1sL3JlbGF4bmcuaDogQWZ0ZXIgY29taW5nIHRvIHRoZSBjb25jbHVzaW9uCgkgIHRoYXQgdGhlIG9yaWdpbmFsIFJlbGF4TkcgdmFsaWRhdGlvbiBjb2RlIHdhcyB1bi1maXhlYWJsZSwgaXQgZ290CgkgIHJld3JpdHRlbiB0byB1c2UgdGhlIGRlcml2YXRpb24gYWxnb3JpdGhtIGZyb20gSmFtZXMgQ2xhcmsgYW5kCgkgIHJlZGVidWdnZWQgaXQgKG5lYXJseSkgZnJvbSBzY3JhdGNoOgoJICBmb3VuZCAzNzMgdGVzdCBzY2hlbWFzOiAzNzIgc3VjY2VzcyAxIGZhaWx1cmVzCgkgIGZvdW5kIDUyOSB0ZXN0IGluc3RhbmNlczogNTI5IHN1Y2Nlc3MgMCBmYWlsdXJlcwoKVHVlIE1hciAxMSAxMjowODoyMyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYyBwYXJzZXIuYzogZml4IHNvbWUgcmVjdXJzaW9uIHByb2JsZW1zIGludHJvZHVjZWQgaW4gdGhlCgkgIGxhc3QgcmVsZWFzZS4KCSogcmVsYXhuZy5jOiBtb3JlIGRlYnVnZ2luZyBvZiB0aGUgUk5HIHZhbGlkYXRpb24gZW5naW5lLCBzdGlsbAoJICBwcm9ibGVtcyB0aG91Z2guCgpNb24gTWFyIDEwIDE0OjEwOjQ3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBzdG9wIGdlbmVyYXRpbmcgd3JvbmcgcmVzdWx0IGZpbGUgd2l0aCAqIGluIG5hbWUKCSogcmVsYXhuZy5jOiBmaXhpbmcgdGhlIGluY2x1ZGUgYnVnIHJhaXNlZCBieSBTZWJhc3RpYW4gUmFodHoKCSogcmVzdWx0L3JlbGF4bmcvZGVtbyogdGVzdC9yZWxheG5nL2RlbW86IGFkZGVkIHRoZSB0ZXN0cyBmcm9tCgkgIFNlYmFzdGlhbiByZXByb2R1Y2luZyB0aGUgcHJvYmxlbS4KClN1biBNYXIgIDkgMTg6MDI6MzEgTVNUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxsaW50LjE6IHJlZ2VuZXJhdGluZyBtYW4gcGFnZSBmcm9tIHhtbGxpbnQueG1sIHRvIHBpY2sKCSAgdXAgQWxla3NleSdzIGNoYW5nZQoKU3VuIE1hciAgOSAxMzo1MzoxNiAyMDAzICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIHhtbGxpbnQuYyBkb2MveG1sbGludC54bWw6IHVzZSAkWE1MTElOVF9JTkRFTlQgZW52aXJvbm1lbnQKCXZhcmlhYmxlIHRvIGNvbnRyb2wgdGhlIGluZGVudGF0aW9uIGZvciB0aGUgeG1sbGludCAiLS1mb3JtYXQiIAoJb3B0aW9uCgpTYXQgTWFyICA4IDE0OjI3OjQzIENFVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiBlbmNvZGluZy5jOiBhcHBsaWVkIEdlbm5hZHkncyBwYXRjaCBhZ2FpbnN0IGJ1ZmZlciBvdmVycnVuCgpGcmkgTWFyICA3IDE5OjI5OjQwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3QveHNkdGVzdC94c2R0ZXN0LnhtbCB1cmkuYzogYWZ0ZXIgYW5kIGV4Y2hhbmdlIHdpdGggSmFtZXMKCSAgQ2xhcmsgaXQgYXBwZWFyZWQgSSBoYWQgYnVnIGluIFVSSSBwYXJzaW5nIGNvZGUgLi4uCgkqIHJlbGF4bmcuYyBpbmNsdWRlL2xpYnhtbC9yZWxheG5nLmg6IGNvbXBsZXRlbHkgcmV2YW1wZWQgZXJyb3IKCSAgcmVwb3J0aW5nIHRvIG5vdCBsb29zZSBtZXNzYWdlIGZyb20gb3B0aW9uYWwgcGFydHMuCgkqIHhtbGxpbnQuYzogYWRkZWQgdGltaW5nIGZvciBSTkcgdmFsaWRhdGlvbiBzdGVwcwoJKiByZXN1bHQvcmVsYXhuZy8qOiB1cGRhdGVkIHRoZSByZXN1bHQsIGFsbCBlcnJvciBtZXNzYWdlcyBjaGFuZ2VkCgpGcmkgTWFyICA3IDE1OjE4OjMyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeCBidWcgIzEwNzgwNCwgdGhlIGFsZ29yaXRobSB1c2VkIGZvciBkb2N1bWVudCBvcmRlcgoJICBjb21wdXRhdGlvbiB3YXMgZmFpbGluZyBvbiBhdHRyaWJ1dGVzLgoKVGh1IE1hciAgNiAyMjozNTo1MCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXggYnVnICMxMDc3NjQgLCBwb3NzaWJpbGl0eSBvZiBidWZmZXIgb3ZlcmZsb3cKCSAgaW4geG1sVmFsaWREZWJ1ZygpCgpXZWQgTWFyICA1IDE3OjQxOjM3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbm9mdHAuYyBpbmNsdWRlL2xpYnhtbC9uYW5vZnRwLmg6IGFkZGluZyB4bWxOYW5vRlRQRGVsZSgpCgkgIGZyb20gUGhpbGlwcCBEdW5rZWwKCldlZCBNYXIgIDUgMTA6NTc6MDkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGUuYzogbWFkZSBwb3d0ZW4gYXJyYXkgc3RhdGljIGl0IHNob3VsZCBub3QgYmUgZXhwb3J0ZWQKCSogSFRNTHBhcnNlci5jOiBmaXggYnVnICMxMDczNjEgYnkgcmV1c2luZyB0aGUgY29kZSBmcm9tIHRoZSBYTUwgCgkgIHBhcnNlciBmdW5jdGlvbi4KCSogdGVzdEhUTUwuYzogZ2V0IHJpZCBvZiB2YWxncmluZCBtZXNzYWdlcyBvbiB0aGUgSFRNTCBTQVggdGVzdHMKCkZyaSBGZWIgMjggMDA6MjM6MDAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXhlZCBhIG5vZGUgZHVtcCBjcmFzaCBvbiBhdHRyaWJ1dGVzCgkqIHRlc3QveHNkdGVzdC94c2R0ZXN0LnhtbCB0ZXN0L3hzZHRlc3QveHNkdGVzdC54c2w6IGZpeGVkCgkgIGFuIFVSSSB0ZXN0IGJ1ZyBhbmQgZ2V0IGJldHRlciBvdXRwdXQuCgpUaHUgRmViIDI3IDIyOjI4OjQwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNoZWNrLXhzZGRhdGEtdGVzdC1zdWl0ZS5weTogZ2l2ZSBtb3JlIGluZm9zCgkqIHJlbGF4bmcuYzogZml4IGEgYnVnIHJlcG9ydGVkIGJ5IFNlYmFzdGlhbiBSYWh0eiBhbmQKCSAgUkVGLT5ERUYgaW4gYXR0cmlidXRlIHZhbHVlcy4KClRodSBGZWIgMjcgMjE6MDk6MzIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2hlY2steHNkZGF0YS10ZXN0LXN1aXRlLnB5IHRlc3QveHNkdGVzdC94c2R0ZXN0LnhtbAoJICB0ZXN0L3hzZHRlc3QveHNkdGVzdC54c2w6IGltcG9ydCBvZiB0aGUgWFNEIERhdGF0eXBlCgkgIHJlZ3Jlc3Npb24gdGVzdHMgZnJvbSBKYW1lcyBDbGFyay4KClRodSBGZWIgMjcgMTg6NDA6MDQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYwoJICBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzdHlwZXMuaDogYWRkZWQgcGFyYW0gc3VwcG9ydCBmb3IgcmVsYXhuZwoJICB0eXBlIGNoZWNraW5nLCBzdGFydGVkIHRvIGluY3JlbWVudCB0aGUgcG9vbCBvZiBzaW1wbGUgdHlwZXMKCSAgcmVnaXN0ZXJlZCwgc3RpbGwgbXVjaCB3b3JrIHRvIGJlIGRvbmUgb24gc2ltcGxlIHR5cGVzIGFuZAoJICBmYWNldHMgY2hlY2tpbmdzLgoKV2VkIEZlYiAyNiAxNjo0NTozOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbnRpdGllcy5jOiBmaXhlcyBhZ2FpbiBvbmUgb2YgdGhlIHByb2JsZW0gcmFpc2VkIGJ5CgkgIEphbWVzIENsYXJrIGluICMxMDY3ODgKCldlZCBGZWIgMjYgMTU6NDY6NDggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBGaXhlZCBhIGNvdXBsZSBvZiBwcm9ibGVtIHJhaXNlZCBieSBKYW1lcyBDbGFyawoJICBpbiBidWcgIzEwNzA4MywgdGhlIHN1cHBvcnQgZm9yIElEL0lEUkVGL0lEUkVGUyBhdCB0aGUgV1hTCgkgIGRhdGF0eXBlIGxldmVsIHN0aWxsIG5vdCBmaXhlZCB0aG91Z2guCgpNb24gRmViIDI0IDIxOjA5OjE5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIHJlbGVhc2UgMi41LjQKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3MKCSogcmVsYXhuZy5jOiByZW1vdmVkIHdhcm5pbmdzCgkqIHJlc3VsdC9yZWxheG5nLyo6IHVwZGF0ZWQgdGhlIHJlc3VsdHMKCk1vbiBGZWIgMjQgMjA6NTM6MTcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4ZXMgYSBEVEQgcmVnZXhwIGdlbmVyYXRpb24gcHJvYmxlbS4KCk1vbiBGZWIgMjQgMjA6MTI6NTcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVzIGJ1ZyAjMTA1OTk4IGFib3V0IGZhbHNlIGRldGVjdGlvbiBvZgoJICBhdHRyaWJ1dGUgY29uc3VtcHRpb24gbG9vcC4KCk1vbiBGZWIgMjQgMTk6MTQ6NTcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogRml4ZXMgYnVnICMxMDY5MzEgaW4gWEluY2x1ZGUgZW50aXRpZXMgbWVyZ2luZy4KCk1vbiBGZWIgMjQgMTg6NTA6MzUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IGZpeGVkIGJ1ZyAjMTA1OTkyCgpNb24gRmViIDI0IDE4OjE0OjE2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4ZWQgeG1sU2V0UHJvcCBhbmQgYWwuIHdoZW4gdGhlIG5vZGUgcGFzc2VkIGlzIG5vdCBhbgoJICBlbGVtZW50LgoJKiByZWxheG5nLmM6IGZpeGVkIGJ1Z3MgNy4zICh0aG91Z2ggbm90IGNvbXBsZXRlKSBhbmQgbWVtb3J5IGxlYWtzCgkgIGZvdW5kIDM3MyB0ZXN0IHNjaGVtYXM6IDM2OSBzdWNjZXNzIDQgZmFpbHVyZXMKCSAgZm91bmQgNTI5IHRlc3QgaW5zdGFuY2VzOiA1MjUgc3VjY2VzcyA0IGZhaWx1cmVzCgkqIGNoZWNrLXJlbGF4bmctdGVzdC1zdWl0ZS5weTogYWRkZWQgbWVtb3J5IGRlYnVnIHJlcG9ydGluZwoJICAKTW9uIEZlYiAyNCAxMjo0MTo1NCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYyBwYXJzZXIuYzogc29tZSB3YXJuaW5nIHJlbW92YWwgb24gSWdvcidzIHBhdGNoCgkqIHRyZWUuYzogc2VlbXMgSSBtZXNzZWQgdXAgd2l0aCAjMTA2Nzg4IGZpeAoJKiBweXRob24vbGlieG1sLmM6IGZpeGVkIHNvbWUgYmFzZSBwcm9ibGVtcyB3aGVuIFB5dGhvbiBwcm92aWRlcwoJICB0aGUgcmVzb2x2ZXIuCgkqIHJlbGF4bmcuYzogZml4ZWQgdGhlIGludGVybGVhdmUgYWxnb3JpdGhtIAoJICBmb3VuZCAzNzMgdGVzdCBzY2hlbWFzOiAzNjQgc3VjY2VzcyA5IGZhaWx1cmVzCgkgIGZvdW5kIDUyOSB0ZXN0IGluc3RhbmNlczogNTI1IHN1Y2Nlc3MgNCBmYWlsdXJlcwoJICB0aGUgcmVzdWx0aW5nIGZhaWx1cmVzIGFyZSBidWcgaW4gdGhlIGFsZ29yaXRobSBmcm9tIDcuMyBhbmQKCSAgbGFjayBvZiBzdXBwb3J0IGZvciBwYXJhbXMKClN1biBGZWIgMjMgMTQ6NDk6MzkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGFub3RoZXIgZml4IGZvciBub2RlaW5mbyBpbiBlbnRpdGllcyBwcm9ibGVtCgkqIHRyZWUuYyBlbnRpdGllcy5jOiBmaXhlZCBidWcgIzEwNjc4OCBmcm9tIEphbWVzIENsYXJrCgkgIHNvbWUgc3BhY2VzIG5lZWQgdG8gYmUgc2VyaWFsaXplZCBhcyBjaGFyYWN0ZXIgcmVmZXJlbmNlcy4KClNhdCBGZWIgMjIgMTg6Mjg6MTYgQ0VUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHBhcnNlci5jIHVyaS5jOiBmaXhlZCB0aGUgYnVnIEkgaW50cm9kdWNlZCBpbiB0aGUgcGF0aAoJICBoYW5kbGluZywgcmVwb3J0ZWQgYnkgU2ViYXN0aWFuIEJlcmdtYW5uCgpTYXQgRmViIDIyIDAwOjE5OjQ4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhpbmcgc29tZSBub2RlaW5mbyBpbiBlbnRpdGllcyBwcm9ibGVtIHJhaXNlZAoJICBieSBHbGVubiBXLiBCYWNoCgkqIHJlbGF4bmcuYzogaW1wbGVtZW50ZWQgdGhlIGZpcnN0IHNlY3Rpb24gNy4zIGNoZWNrCgkqIHJlc3VsdC9yZWxheG5nLyo6IHVwZGF0ZWQgdGhlIHJlc3VsdHMKCkZyaSBGZWIgMjEgMTg6MTI6MTkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBmaXhlZCBzb21lIHByb2JsZW1zIGluIHRoZSBwcmV2aW91cyBjb21taXQKCSAgYW5kIGZpbmlzaGVkIGltcGxlbWVudGluZyA0LjE2IHJ1bGVzIGNoZWNraW5nCgkgIGZvdW5kIDM3MyB0ZXN0IHNjaGVtYXM6IDM1MyBzdWNjZXNzIDIwIGZhaWx1cmVzCgkgIGZvdW5kIDUyOSB0ZXN0IGluc3RhbmNlczogNTE5IHN1Y2Nlc3MgNiBmYWlsdXJlcwoJKiByZXN1bHQvcmVsYXhuZy8qOiB1cGRhdGVkIHRoZSByZXN1bHRzCgpGcmkgRmViIDIxIDE2OjM3OjM5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogaW1wbGVtZW50ZWQgY2hlY2tzIGZyb20gc2VjdGlvbiA3LjIKClRodSBGZWIgMjAgMTY6MDA6MzEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBpbXBsZW1lbnRlZCB0aGUgY2hlY2tzIGZyb20gc2VjdGlvbiA3LjEsIGZpeGVkCgkgIHNvbWUgb2YgdGhlIDQuMjAgYW5kIDQuMjEgcHJvYmxlbXMuCgkgIGZvdW5kIDM3MyB0ZXN0IHNjaGVtYXM6IDMzOCBzdWNjZXNzIDM1IGZhaWx1cmVzCgkgIGZvdW5kIDUyOSB0ZXN0IGluc3RhbmNlczogNTE5IHN1Y2Nlc3MgNiBmYWlsdXJlcwoJKiByZXN1bHQvcmVsYXhuZy8qOiB1cGRhdGVkIHRoZSByZXN1bHRzCgpUaHUgRmViIDIwIDAxOjA5OjI0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogaW1wbGVtZW50ZWQgdGhlIDQuMjAgYW5kIDQuMjEgc2ltcGxpZmljYXRpb24gcnVsZXMuCgkqIHJlc3VsdC9yZWxheG5nLyo6IHVwZGF0ZWQgdGhlIHJlc3VsdHMKCldlZCBGZWIgMTkgMTg6MzA6MzAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBtb3JlIGJ1Z2ZpeGVzCgkqIHJlc3VsdC9yZWxheG5nLyo6IHVwZGF0ZWQgdGhlIHJlc3VsdHMKCldlZCBGZWIgMTkgMTU6Mzk6NTYgQ0VUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIERPQ0JwYXJzZXIuYzogb2Jzb2xldGVkIHhtbE5vcm1hbGl6ZVdpbmRvd3NQYXRoCgkqIEhUTUxwYXJzZXIuYzogb2Jzb2xldGVkIHhtbE5vcm1hbGl6ZVdpbmRvd3NQYXRoCgkqIFNBWC5jOiBlbnN1cmVkIHhtbERvYy5VUkwgaXMgYWx3YXlzIGNhbm9uaWMKCSogcGFyc2VyLmM6IG9ic29sZXRlZCB4bWxOb3JtYWxpemVXaW5kb3dzUGF0aAoJKiB1cmkuYyBpbmNsdWRlL2xpYnhtbC91cmkuaDogaW50cm9kdWNlZCB4bWxDYW5vbmljUGF0aAoJKiB4bWxJTy5jIGluY2x1ZGUvbGlieG1sL3htbElPLmg6IG9ic29sZXRlZCB4bWxOb3JtYWxpemVXaW5kb3dzUGF0aAoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGFkZGVkIGZldyBleHBvcnRzCgkKCQpXZWQgRmViIDE5IDE0OjI2OjUxIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbjogcGF0Y2hlZCB0byBoYXZlIHNoYXJlZCBsaWJyYXJpZXMKCSAgZm9yIFB5dGhvbiByZWdyZXNzaW9uIHRlc3RzIGFuZCBzdGF0aWMgYmluYXJpZXMgZm9yIGdkYiBkZWJ1ZwoJICBpbiBteSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudAoJKiByZWxheG5nLmM6IG1vcmUgYnVnZml4ZXMgCgkgIGZvdW5kIDM3MyB0ZXN0IHNjaGVtYXM6IDI5NiBzdWNjZXNzIDc3IGZhaWx1cmVzCgkgIGZvdW5kIDUyOSB0ZXN0IGluc3RhbmNlczogNTE2IHN1Y2Nlc3MgOCBmYWlsdXJlcwoJKiByZXN1bHQvcmVsYXhuZy8qOiB1cGRhdGVkIHRoZSByZXN1bHRzCgpXZWQgRmViIDE5IDAxOjE3OjQ4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogZ3Vlc3Mgd2hhdCAhIFJlbGF4LU5HIGJ1Z2ZpeGluZywgd2hhdCBhIHN1cnByaXplLi4uCgpUdWUgRmViIDE4IDIyOjA5OjUwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBmbG9hdC9kb3VibGUgY2hlY2sgYnVnZml4CgkqIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGV4cG9ydGVkIGEgZnVuY3Rpb24gZm9yIE5NVE9LRU4KCSAgdmFsaWRhdGlvbgoJKiB4bWxyZWFkZXIuYzogYWRkIGEgVE9ETyBmb3IgSm9keQoJKiByZWxheG5nLmM6IGJ1Z2ZpeCBidWdmaXggYnVnZml4CgkgIGZvdW5kIDM3MyB0ZXN0IHNjaGVtYXM6IDMwMCBzdWNjZXNzIDczIGZhaWx1cmVzCgkgIGZvdW5kIDUyOSB0ZXN0IGluc3RhbmNlczogNTA3IHN1Y2Nlc3MgMTAgZmFpbHVyZXMKCSogcmVzdWx0L3JlbGF4bmcvKjogdXBkYXRlZCB0aGUgcmVzdWx0cwoKVHVlIEZlYiAxOCAwMDozMzoxNyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmMgY2hlY2stcmVsYXhuZy10ZXN0LXN1aXRlLnB5OiBtb3JlIFJlbGF4TkcgYnVnIGh1bnRpbmcKCk1vbiBGZWIgMTcgMTg6MjM6MzIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jIGNoZWNrLXJlbGF4bmctdGVzdC1zdWl0ZS5weTogbW9yZSB3b3JrIG9uIHRoZQoJICBSZWxheE5HIGltcGxlbWVudGF0aW9uIGNvbmZvcm1hbmNlIHRlc3RpbmcuCgkgIGZvdW5kIDM3MyB0ZXN0IHNjaGVtYXM6IDI4NCBzdWNjZXNzIDg5IGZhaWx1cmVzCgkgIGZvdW5kIDUyOSB0ZXN0IGluc3RhbmNlczogNDQ4IHN1Y2Nlc3MgNDcgZmFpbHVyZXMKCSogcmVzdWx0L3JlbGF4bmcvKjogdXBkYXRlZCB0aGUgcmVzdWx0cwoKU3VuIEZlYiAxNiAxNjo0ODozOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBDaGFuZ2VMb2cgdHJlZS5jIGRvYy9saWJ4bWwtZG9jLmVsIGRvYy9saWJ4bWwyLWFwaS54bWw6IGFwcGxpZWQKCSAgYSBwYXRjaCBmcm9tIEtqYXJ0YW4gTWFyYWFzIHRvIGZpeCBzb21lIHR5cG9zCgpTdW4gRmViIDE2IDE2OjQwOjUyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogbW9yZSBidWctaHVudGluZwoJKiB0ZXN0UmVsYXguYyBpbmNsdWRlL2xpYnhtbC9yZWxheG5nLmg6IGFkZGVkIC0tdHJlZSB0byBkdW1wIHRoZQoJICBpbnRlcm1lZGlhdGUgcm5nIHRyZWUKCSogcHl0aG9uL2dlbmVyYXRvci5weTogcGF0Y2ggZnJvbSBTdGVwaGFuZSBCaWRvdWwgdG8gZml4IHRoZSBnZW5lcmF0b3IKCSAgb24gcHl0aG9uIDwgMi4yCgpGcmkgRmViIDE0IDE3OjQ5OjI2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNoZWNrLXJlbGF4bmctdGVzdC1zdWl0ZS5weSByZWxheG5nLmM6IG1vcmUgdGVzdGluZyBvbiB0aGUKCSAgUmVsYXgtTkcgZnJvbnQsIGNsZWFuaW5nIHVwIHRoZSByZWdyZXNzaW9uIHRlc3RzIGZhaWx1cmVzCgkgIGN1cnJlbnQgc3RhdGUgYW5kIEkgZm9yZ290IHN1cHBvcnQgZm9yICJtaXhlZCI6CgkgIGZvdW5kIDM3MyB0ZXN0IHNjaGVtYXM6IDI4MCBzdWNjZXNzIDkzIGZhaWx1cmVzCgkgIGZvdW5kIDUyOSB0ZXN0IGluc3RhbmNlczogNDAxIHN1Y2Nlc3MgNjggZmFpbHVyZXMKCSogdHJlZS5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaCB4bWxzY2hlbWFzdHlwZXMuYzogZmluaXNoZWQgYW5kCgkgIG1vdmVkIHRoZSBOYW1lLCBOQ05hbWUgYW5kIFFOYW1lIHZhbGlkYXRpb24gcm91dGluZSBpbiB0cmVlLmMKCSogdXJpLmM6IGZpeGVkIGhhbmRsaW5nIG9mIFVSSSBlbmRpbmcgdXAgd2l0aCAjLCBpLmUuIGhhdmluZwoJICBhbiBlbXB0eSBmcmFnbWVudCBJRC4KCSogcmVzdWx0L3JlbGF4bmcvKjogdXBkYXRlZCB0aGUgcmVzdWx0cwoKVGh1IEZlYiAxMyAxNjo0OToyNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay14aW5jbHVkZS10ZXN0LXN1aXRlLnB5OiBpbXByb3ZlZCB0aGUgc2NyaXB0IGFjY29yZGluZ2x5CgkgIHRvIHRoZSBYSW5jbHVkZSByZWdyZXNzaW9uIHRlc3RzIHVwZGF0ZXMKCSogeHBvaW50ZXIuYzogSW1wbGVtZW50ZWQgWFBvaW50ZXIgZWxlbWVudCgpIFNjaGVtZSBXM0MgUFIgb2YgMTMKCSAgTm92ZW1iZXIgMjAwMgoJKiByZXN1bHQvWFBhdGgveHB0ci9jaGFwdGVyc2NoaWxkc2VxIHJlc3VsdC9YUGF0aC94cHRyL3ZpZGNoaWxkc2VxCgkgIHRlc3QvWFBhdGgveHB0ci9jaGFwdGVyc2NoaWxkc2VxIHRlc3QvWFBhdGgveHB0ci92aWRjaGlsZHNlcToKCSAgYXVnbWVudGVkIHRoZSBYcG9pbnRlciB0ZXN0c3VpdGUgZm9yIHRoZSBlbGVtZW50KCkgc2NoZW1lCgpUaHUgRmViIDEzIDEyOjAwOjMwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogYWRkZWQgVE9ETyBmb3IgdGhlIERURCBjb21wYXRpYmlsaXR5IHNwZWMKCSogeGluY2x1ZGUuYzogbW9yZSBidWcgZml4ZXMgZHJpdmVuIGJ5IHRoZSB0ZXN0c3VpdGUgCgpUdWUgRmViIDExIDE5OjAxOjAyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNoZWNrLXhpbmNsdWRlLXRlc3Qtc3VpdGUucHkgeGluY2x1ZGUuYzogV29yayBvbiB0aGUgVzNDL05JU1QKCSAgcmVncmVzc2lvbiB0ZXN0cyBmb3IgWEluY2x1ZGUsIGltcHJvdmVkIHRoZSBzY3JpcHQsIGltcHJvdmluZwoJICBYSW5jbHVkZSBlcnJvciByZXBvcnRpbmcgbWVjaGFuaXNtCgpNb24gRmViIDEwIDE3OjE5OjE0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE5FV1MgZG9jLyogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgcmVsZWFzZSAyLjUuMwoKTW9uIEZlYiAxMCAxNzoxMToyMiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IHRyeWluZyB0byBmaXggIzEwNDkzNCBhYm91dCBzb21lIFhIVE1MMSBzZXJpYWxpemF0aW9uCgkgIGlzc3Vlcy4KCk1vbiBGZWIgMTAgMTY6NDE6MTMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYyB4bWxJTy5jOiBmaXhpbmcgYnVnICMxMDQ2NDYgYWJvdXQgaWNvbnYgYmFzZWQKCSAgZW5jb2RpbmcgY29udmVyc2lvbiB3aGVuIHRoZSBpbnB1dCBidWZmZXIgc3RvcHMgaW4gdGhlCgkgIG1pZGRsZSBvZiBhIG11bHRpYnl0ZSBjaGFyCgpNb24gRmViIDEwIDE1OjI0OjQ3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3QvcmVsYXhuZy9PQVNJUy9zcGVjdGVzdC54bWw6IE9BU0lTIFJlbGF4TkcgdGVzdHN1aXRlCgkqIGNoZWNrLXJlbGF4bmctdGVzdC1zdWl0ZS5weTogcHl0aG9uIHNjcmlwdCB0byBydW4gcmVncmVzc2lvbgoJICBhZ2FpbnN0IE9BU0lTIFJlbGF4TkcgdGVzdHN1aXRlCgkqIHJlbGF4bmcuYzogc29tZSBjbGVhbnVwIHR3ZWFrcwoJKiBIVE1McGFyc2VyLmMgZ2xvYmFscy5jOiBjbGVhbnVwcyBpbiBjb21tZW50cwoJKiBkb2MvbGlieG1sMi1hcGkueG1sOiB1cGRhdGVkIHRoZSBBUEkKCSogcmVzdWx0L3JlbGF4bmcvKjogZXJyb3JzIG1vdmVkIGZpbGVzLCBzbyBsYXJnZSBkaWZmcyBidXQKCSAgbm8gY2hhbmdlcyBhdCB0aGUgc2VtYW50aWMgbGV2ZWwuCgpNb24gRmViIDEwIDAxOjAwOjMxIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4aW5nICMxMDU2NzggcHJvYmxlbSB3aGVuIGR1bXBpbmcgYSBuYW1lc3BhY2Ugbm9kZS4KCk1vbiBGZWIgMTAgMDA6MzA6MDEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4ZWQgZG9jIGNvbW1lbnQgcHJvYmxlbXMKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sX3dyYXAuaCBweXRob24vdHlwZXMuYzogYWRkaW5nCgkgIFJlbGF4Tkcgd3JhcHBlcnMKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9yZWxheG5nLnB5OiBhZGRlZCBhIHNwZWNpZmljCgkgIHRlc3Qgb2YgdGhvc2UgZWFybHkgUHl0aG9uIFJlbGF4TkcgYmluZGluZ3MKClN1biBGZWIgIDkgMTU6MTg6NDMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW46IGZpeGVzIGEgbGlidG9vbCBwcm9ibGVtIG9uIEFNRCA2NGJpdHMgYnVpbGRzCgkqIHJlbGF4bmcuYzogZm91bmQgdGhlIHZhbGlkYXRpb24gcHJvYmxlbSBJIGhhZCB3aXRoIGludGVybGVhdmUKCSAgd2hlbiBub3QgY292ZXJpbmcgYWxsIHJlbWFpbmluZyBzaWJsaW5ncwoJKiBNYWtlZmlsZS5hbSB0ZXN0LnJlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiBhdWdtZW50ZWQgdGhlCgkgIHRlc3RzdWl0ZSBhbmQgY2hlY2sgdGhlIFJORyBzY2hlbWFzIGFnYWluc3QgdGhlIFJORyBzY2hlbWFzCgkgIGdpdmVuIGluIGFwcGVuZGl4IEEKClNhdCBGZWIgIDggMTg6NTU6NDMgQ0VUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL01ha2VmaWxlLm1zdmM6IHVwZGF0ZXMgZm9yIFJlbGF4TkcKCSogd2luMzIvTWFrZWZpbGUubWluZ3c6IHVwZGF0ZXMgZm9yIFJlbGF4TkcKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBhZGRlZCBSZWxheE5HIGV4cG9ydHMKCQpGcmkgRmViICA3IDE0OjAwOjUzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IGFwcGxpZWQgYW5vdGhlciBidWcgZml4IGZyb20gU2VhbiBDaGl0dGVuZGVuCgpGcmkgRmViICA3IDEzOjM0OjA4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiB4bWxsaW50LmM6IEkgZi4uLmVkIHVwIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24KCSAgb2Ygc2NoZW1hcyBhbmQgLS1yZWxheG5nIG9wdGlvbiBkaXNwbGF5IGluIHhtbGxpbnQsIHBvaW50ZWQgYnkKCSAgTW9ydXMgV2FsdGVyLgoJKiB4bGluay5jOiBTZWFuIENoaXR0ZW5kZW4gcG9pbnRlZCBhIGNvdXBsZSBvZiBlcnJvcnMgaW4gdGhlIFhMaW5rCgkgIGRldGVjdGlvbiBtb2R1bGUsIGZpeGVzIGJ1ZyAjMTA1Mzc0LgoKRnJpIEZlYiAgNyAwMTo0MzozOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogYWRkZWQgdGhlIGJvb2xlYW4gYmFzZSB0eXBlLgoKVGh1IEZlYiAgNiAxMDoyMzo1MiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogc3RhcnRlZCBpbXBsZW1lbnRpbmcgc29tZSBvZiB0aGUgbWlzc2luZwoJICBkZWZhdWx0IHNpbXBsZSB0eXBlcwoJKiByZXN1bHQvcmVsYXhuZy8qOiB1cGRhdGVkIHRoZSByZXN1bHRzCgpXZWQgRmViICA1IDE1OjI4OjA0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE5FV1MgZG9jLyo6IHVwZGF0ZWQgdGhlIGRvY3MsIHJlYWR5IGZvciAyLjUuMiByZWxlYXNlCgpXZWQgRmViICA1IDE0OjE1OjU5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyB0cmVlLmMgeG1sSU8uYzogY29tbWVudHMgY2xlYW51cHMKCSogTWFrZWZpbGUuYW06IHVzZSB4bWxsaW50IGZvciBkb2luZyB0aGUgUmVsYXhORyB0ZXN0cwoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjUuMiBtYWRlIHNjaGVtYXMgc3VwcG9ydCBkZWZhdWx0IHRvCgkgIG9uIGluc3RlYWQgb2Ygb2ZmCgkqIHJlbGF4bmcuYzogcmVtb3ZlZCB0aGUgdmVyYm9zaXR5CgkqIHhtbGxpbnQuYzogYWRkZWQgLS1yZWxheG5nIG9wdGlvbgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWxfd3JhcC5oOiBwcmVwYXJlZCB0aGUgaW50ZWdyYXRpb24KCSAgb2YgdGhlIG5ldyBSZWxheE5HIG1vZHVsZSBhbmQgc2NoZW1hcwoJKiByZXN1bHQvcmVsYXhuZy8qOiBsZXNzIHZlcmJvc2Ugb3V0cHV0CgpXZWQgRmViICA1IDEyOjAwOjM2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGRvIG5vdCBydW4gY29udGVudCBtb2RlbCB2YWxpZGF0aW9uIGlmIHRoZQoJICBjb250ZW50IGlzIG5vdCBkZXRlcm1pbmlzdAoKV2VkIEZlYiAgNSAxMTo0Mzo1OCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogYWRkZWQgdGhlIHJlZGVmaW5pdGlvbiBvZiBuYW1lc3BhY2VkIGF0dHJpYnV0ZQoJICBjaGVjayB0aGF0IHdhcyBtaXNzaW5nIGFzIEZhYnJpY2UgRGVzcukgcG9pbnRlZCBvdXQuCgpXZWQgRmViICA1IDExOjA5OjI5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9IVE1McGFyc2VyLmg6IGFwcGxpZWQgSFRNTAoJICBpbXByb3ZlbWVudHMgZnJvbSBOaWNrIEtldywgYWxsb3dpbmcgdG8gZG8gbW9yZSBjaGVja2luZwoJICB0byBIVE1MIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzLgoKVHVlIEZlYiAgNCAyMzo0NzowNiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBmaXhpbmcgYnVnICMxMDUxMzcgYWJvdXQgZW50aXRpZXMgZGVjbGFyYXRpb24KCSAgbmVlZGluZyB0byBiZSBjb3BpZWQgdG8gdGhlIGluY2x1ZGluZyBkb2N1bWVudC4KClR1ZSBGZWIgIDQgMjA6MjY6MjIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiBmaXhlZCBidWcgIzEwNDgxNyB3aXRoIGRlbGVnYXRlVVJJCgkqIHhwYXRoLmM6IGZpeGluZyBidWdzICMxMDQxMjMgYW5kICMxMDQxMjUKClR1ZSBGZWIgIDQgMTc6MTI6NTYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIHZhbGlkLmMgeG1scmVhZGVyLmMgcHl0aG9uL2xpYnhtbF93cmFwLmggCgkgIHB5dGhvbi90eXBlcy5jOiBmaXhpbmcgIzEwNDA5NiB0byBjb21waWxlIHdpdGhvdXQgcmVnZXhwcwoKVHVlIEZlYiAgNCAxNjozMTo1NSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXhpbmcgYnVnICMxMDM5NjkgZm9yZ290IHRvIGFkZCBhbiBlcHNpbG9uIHRyYW5zaXRpb24KCSAgd2hlbiBidWlsZGluZyB0aGUgYXV0b21hdGEgZm9yIGVsZW0qCgpUdWUgRmViICA0IDE2OjIxOjA3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIEFybmUgZGUgQnJ1aWpuIGZpeGluZyAKCSAgYnVnICMxMDM4MjcKClR1ZSBGZWIgIDQgMTY6MTc6MDkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiB1cGRhdGluZyBhIGNvbW1lbnQsIGZpeGluZyAjMTAzNzc2CgpUdWUgRmViICA0IDE2OjA1OjUzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhpbmcgYnVnIDEwNTA0OSBmb3IgdmFsaWRpdHkgY2hlY2tpbmcgb2YgY29udGVudAoJICB3aXRoaW4gcmVjdXJzaXZlIGVudGl0aWVzLgoKVHVlIEZlYiAgNCAxNTo0MDo1NCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IHRyeSB0byBmaXggIyAxMDUwNDkKCSogcmVsYXhuZy5jIHhtbHNjaGVtYXN0eXBlcy5jOiBhIGNvdXBsZSBvZiBjaGFuZ2VzIGFuZCBleHRlbnNpb25zCgkqIHRyZWUuYzogdXBkYXRlZCBhIGZ1bmN0aW9uIGNvbW1lbnQKClR1ZSBGZWIgIDQgMDA6MjA6NTggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZzogbW9yZSB3b3JrIG9uIGdyYW1tYXJzIGFuZCByZWZzL2RlZnMKCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogYXVnbWVudGVkL3VwZGF0ZWQgdGhlCgkgIHJlZ3Jlc3Npb24gdGVzdHMKCk1vbiBGZWIgIDMgMTQ6MTY6NTkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZzogbW9yZSB3b3JrIG9uIG5hbWUgY2xhc3NlcywgZXhjZXB0IHN1cHBvcnQKCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogYXVnbWVudGVkL3VwZGF0ZWQgdGhlCgkgIHJlZ3Jlc3Npb24gdGVzdHMKCk1vbiBGZWIgIDMgMTE6NTY6MDUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZzogbW9yZSB3b3JrIG9uIG5hbWUgY2xhc3NlcywgdGhlICJ2YWxpZGF0ZSBhbGwiIHNjaGVtYXMKCSAgc2VlbXMgdG8gd29yayBub3cuCgkqIHRlc3QvcmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IGF1Z21lbnRlZC91cGRhdGVkIHRoZQoJICByZWdyZXNzaW9uIHRlc3RzCgpNb24gRmViICAzIDA5OjUwOjI2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYzogcmVtb3ZlZCBhbiB1bnByb3RlZHRlZCBkZWJ1ZyBtZXNzYWdlIEFsZWtzaSBTdWhvbmVuCgkqIHBhcnNlci5jOiBwdXQgYSBndWFyZCBhZ2FpbnN0IGluZmluaXRlIGRvY3VtZW50IGRlcHRoLCBiYXNpY2FsbHkKCSAgdHJ5aW5nIHRvIGF2b2lkIGFub3RoZXIga2luZCBvZiBEb1MgYXR0YWNrLgoJKiByZWxheG5nLmM6IHNvbWUgY29kZSB3LnIudC4gbmFtZUNsYXNzZXMKClN1biBGZWIgIDIgMTc6MDE6NDMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogY2hlY2sgYWxsIHRoZSBuYW1lc3BhY2Ugc3VwcG9ydAoJICB3YXMgYWN0dWFsbHkgY29ycmVjdCBiYXNlZCBvbiB0dXRvcmlhbCBzZWN0aW9uIDEwLgoKU3VuIEZlYiAgMiAxNTozMzozOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nOiBpbmNsdWRlIHNlZW1zIHRvIHdvcmsgb2theSBub3cKCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogYXVnbWVudGVkL3VwZGF0ZWQgdGhlCgkgIHJlZ3Jlc3Npb24gdGVzdHMKClNhdCBGZWIgIDEgMTk6NDQ6NTggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBhIGJpdCBvZiB3b3JrIGRvbmUgaW4gdGhlIHRyYWluIGJhY2suCgkqIHRlc3QvcmVsYXhuZy8qOiBhZGRlZCBvbmUgb2YgdGhlIGluY2x1ZGUgdGVzdHMKClRodSBKYW4gMzAgMTQ6MDY6NTUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZzogbW9yZSB3b3JrIGRvbmUgaW4gdGhlIHRyYWluCgkqIHRlc3QvcmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IGF1Z21lbnRlZC91cGRhdGVkIHRoZQoJICByZWdyZXNzaW9uIHRlc3RzCgpXZWQgSmFuIDI5IDIzOjQ0OjU4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogZGVidWdnaW5nIG9mIGV4dGVybmFsUmVmCgkqIHRlc3QvcmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IGF1Z21lbnRlZC91cGRhdGVkIHRoZQoJICByZWdyZXNzaW9uIHRlc3RzCgpXZWQgSmFuIDI5IDIyOjA2OjA0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogbW9yZSB3b3JrIG9uIFJlbGF4LU5HLCBpbXBsZW1lbnRpbmcgZXh0ZXJuYWxSZWYKCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogYXVnbWVudGVkL3VwZGF0ZWQgdGhlIAoJICByZWdyZXNzaW9uIHRlc3RzCgkqIE1ha2VmaWxlLmFtOiBjbGVhbnVwIHRvIFJlbGF4dGVzdHMgdGFyZ2V0CgpXZWQgSmFuIDI5IDAwOjA4OjM4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogbW9yZSB3b3JrIG9uIFJlbGF4LU5HLCBpbXBsZW1lbnRpbmcgaW50ZXJsZWF2ZQoJKiB0ZXN0L3JlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiBhdWdtZW50ZWQvdXBkYXRlZCB0aGUgCgkgIHJlZ3Jlc3Npb24gdGVzdHMKClR1ZSBKYW4gMjggMjE6NTY6NDkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBtb3JlIHdvcmsgb24gUmVsYXgtTkcsIGltcGxlbWVudGluZyBpbnRlcmxlYXZlCgkqIHRlc3QvcmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IGF1Z21lbnRlZC91cGRhdGVkIHRoZSAKCSAgcmVncmVzc2lvbiB0ZXN0cwoKTW9uIEphbiAyNyAwNzozNToyOSBNU1QgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3R1dG9yaWFsL2N1c3RvbWZvLnhzbAoJKiBkb2MvdHV0b3JpYWwvY3VzdG9taHRtbC54c2wKCWFkZGluZyBzdHlsZXNoZWV0IGN1c3RvbWl6YXRpb25zIHVzZWQgdG8gZ2VuZXJhdGUgZm8KCWZvciBwZGYgYW5kIGh0bWwKCk1vbiBKYW4gMjcgMTM6Mjk6NDMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBtb3JlIHdvcmsgb24gUmVsYXgtTkcKCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogYXVnbWVudGVkL3VwZGF0ZWQgdGhlIAoJICByZWdyZXNzaW9uIHRlc3RzCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBhZGRlZCBhIG51bWJlciBvZiBiYXNlIHR5cGUgZGVmaW5pdGlvbiBidXQgbm90CgkgIHRoZSBhc3NvY2lhdGVkIGNoZWNrcywgdGhvc2UgYXJlIHN0aWxsIFRPRE9zCgpTdW4gSmFuIDI2IDE3OjM3OjA2IE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJaW4gZG9jcy90dXRvcmlhbDoKCSogYXBhLmh0bWwKCSogYXBiLmh0bWwKCSogYXBjLmh0bWwKCSogYXBkLmh0bWwKCSogYXBlLmh0bWwKCSogYXBmLmh0bWwKCSogYXBnLmh0bWwKCSogYXIwMXMwMi5odG1sCgkqIGFyMDFzMDMuaHRtbAoJKiBhcjAxczA0Lmh0bWwKCSogYXIwMXMwNS5odG1sCgkqIGFyMDFzMDYuaHRtbAoJKiBhcjAxczA3Lmh0bWwKCSogYXIwMXMwOC5odG1sCgkqIGluZGV4Lmh0bWwKCSogeG1sdHV0b3JpYWwucGRmCgkqIHhtbHR1dG9yaWFsLnhtbAoJYWRkIGluZGV4IHRvIHR1dG9yaWFsCgpTdW4gSmFuIDI2IDE3OjAyOjI5IE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sY2F0YWxvZy4xCgkqIGRvYy94bWxjYXRhbG9nX21hbi5odG1sCgkqIGRvYy94bWxjYXRhbG9nX21hbi54bWwKCWJlbGF0ZWRseSBmaXhpbmcgYnVnICM5MzYyMiAoYWRkcyByZXdyaXRlVVJJIHR5cGUgdG8KCSItLWFkZCIgb3B0aW9uIGluIHhtbGNhdGFsb2cgbWFuIHBhZ2UKClN1biBKYW4gMjYgMjA6NDc6MjYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sY2F0YWxvZy5jIHhtbGxpbnQuYzogYXBwbGllZCBwYXRjaCBmb3IgTmV0QlNEIGJ5CgkgIEp1bGlvIE1lcmlubywgY2xvc2luZyAjMTA0NDc1CgpTdW4gSmFuIDI2IDIwOjM4OjQzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogbW9yZSB3b3JrIG9uIFJlbGF4LU5HCgkqIHRlc3QvcmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IGF1Z21lbnRlZC91cGRhdGVkIHRoZSAKCSAgcmVncmVzc2lvbiB0ZXN0cwoKU3VuIEphbiAyNiAwMTo0OTo1OCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IG1vcmUgd29yayBvbiBSZWxheC1ORwoJKiB0ZXN0L3JlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiBhdWdtZW50ZWQvdXBkYXRlZCB0aGUgCgkgIHJlZ3Jlc3Npb24gdGVzdHMKClNhdCBKYW4gMjUgMTg6NTk6NTQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogUkVBRE1FOiB1cGRhdGVkIHRoZSBwb2xpY3kgb24gcHJpdmF0ZSBtYWlsIGFuc3dlcnMKCSogcmVsYXhuZy5jOiBtb3JlIHdvcmsgb24gUmVsYXgtTkcKCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogYXVnbWVudGVkL3VwZGF0ZWQgdGhlIAoJICByZWdyZXNzaW9uIHRlc3RzCgpGcmkgSmFuIDI0IDE1OjEyOjQ0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVycm9yLmMgcGFyc2VyLmMgdHJlZS5jOiBhcHBsaWVkIGEgZG9jdW1lbnRhdGlvbiBwYXRjaCBmcm9tCgkgIFN0ZWZhbiBLb3N0CgpGcmkgSmFuIDI0IDAyOjAwOjUwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogbW9yZSB3b3JrIG9uIFJlbGF4LU5HCgkqIGRvYy8qOiByZWdlbmVyYXRlZCB0aGUgZG9jcwoJKiB0ZXN0L3JlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiB1cGRhdGVkIGFuZCBhdWdtZW50ZWQgdGhlCgkgIFJlbGF4LU5HIHJlZ3Jlc3Npb24gdGVzdHMgYW5kIHJlc3VsdHMKClRodSBKYW4gMjMgMTk6MjY6MjAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluIHJlbGF4bmcuYyBpbmNsdWRlL2xpYnhtbC9yZWxheG5nLmg6CgkgIEZpcnN0IGNvbW1pdCBvZiB0aGUgbmV3IFJlbGF4LU5HIHZhbGlkYXRpb24gY29kZSwgbm90IGdlbmVyYWxseQoJICB1c2VmdWwgeWV0LgoJKiB0ZXN0L3JlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiBjdXJyZW50IHN0YXRlIG9mIHRoZSByZWdyZXNzaW9uCgkgIHRlc3RzCgpUaHUgSmFuIDIzIDE5OjIyOjU0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogbWluaW1pemVkIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBHZXRDb250ZW50CgkgIGFuZCBhIGJpdCBvZiBjbGVhbnVwLgoKVGh1IEphbiAyMyAxNzo0MTozNyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5OiBzZWVtcyB0aGVyZSBpcyBubyBnb29kIHJlYXNvbnMgdG8KCSAgbm90IGdlbmVyYXRlIGJpbmRpbmdzIGZvciBYUG9pbnRlcgoKVHVlIEphbiAyMSAxMzoxOTozNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBkb2MvYXBpYnVpbGQucHk6IGFwcGxpZWQgYSBuZXcgcGF0Y2ggZnJvbQoJICBTdOlwaGFuZSBCaWRvdWwgZm9yIGNsZWFudXBzCgkqIGRvYy9saWJ4bWwyLWFwaS54bWw6IHJlYnVpbHQgdGhlIEFQSSBkZXNjcmlwdGlvbiB3aXRoCgkgIG5ldyBlbnRyeSBwb2ludHMKCk1vbiBKYW4gMjAgMjM6MjU6MDAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgcHl0aG9uL2Rydl9saWJ4bWwyLnB5IHB5dGhvbi9nZW5lcmF0b3IucHkKCSAgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHkgcHl0aG9uL2xpYnhtbF93cmFwLmgKCSAgcHl0aG9uL3R5cGVzLmM6IHBhdGNoIGZyb20gU3TpcGhhbmUgQmlkb3VsIGZvciBiZXR0ZXIgcGVyCgkgIGNvbnRleHQgZXJyb3IgbWVzc2FnZSBBUElzCgkqIHB5dGhvbi90ZXN0cy9jdHh0ZXJyb3IucHkgcHl0aG9uL3Rlc3RzL3JlYWRlcmVyci5weToKCSAgdXBkYXRlIG9mIHRoZSB0ZXN0cwoKU3VuIEphbiAxOSAxNzowOToyOCBNU1QgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL2d1aWRlbGluZXMuaHRtbAoJZ3JhbW1hciBhbmQgc3BlbGxpbmcgY2xlYW51cAoKRnJpIEphbiAxNyAwMDozMTozMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaCBweXRob24vZ2VuZXJhdG9yLnB5CgkgIHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sLnB5IHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogYXBwbGllZAoJICBhIHBhdGNoIGZyb20gU3TpcGhhbmUgQmlkb3VsIHRvIGFsbG93IHBlciBYTUx0ZXh0UmVhZGVyIGVycm9yCgkgIGFuZCB3YXJuaW5nIGhhbmRsaW5nCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvcmVhZGVyZXJyLnB5OiBhZGRpbmcgdGhlCgkgIHNwZWNpZmljIHJlZ3Jlc3Npb24gdGVzdAoKVHVlIEphbiAxNCAxNzowMDowOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBBbGV4ZXkgRWZpbW92IHBvaW50ZWQgb3V0IHRoYXQgY29uY2F0KCdhJywgJ2InLCApCgkgIHNob3VsZCByYWlzZSBhIHN5bnRheCBlcnJvcgoKVHVlIEphbiAxNCAxNTozOToxNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmM6IGNsZWFudXAgcGF0Y2ggZnJvbSBTdOlwaGFuZSBCaWRvdWwKClR1ZSBKYW4gMTQgMTQ6NDE6MTggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYzogZml4aW5nIGJ1ZyAjMTAzMTAwIHdpdGggYSBkdW1teSBVVEY4VG9VVEY4IGNvcHkKClR1ZSBKYW4gMTQgMTI6NDA6MjkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weQoJICBweXRob24vbGlieG1sX3dyYXAuaCBweXRob24vdHlwZXMuYzogYXBwbGllZCBhbmQgZml4ZWQgYSBwYXRjaAoJICBmcm9tIFN06XBoYW5lIEJpZG91bCB0byBwcm92aWRlIHBlciBwYXJzZXIgZXJyb3IgaGFuZGxlcnMgYXQgdGhlCgkgIFB5dGhvbiBsZXZlbC4KCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9jdHh0ZXJyb3IucHk6IGFkZGVkIGEKCSAgcmVncmVzc2lvbiB0ZXN0IGZvciBpdC4KClR1ZSBKYW4gMTQgMDE6MTU6MDQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IGZpeGVkIHRoZSBzdHJlYW1pbmcgcHJvcGVydHkgb2YgdGhlIHJlYWRlciwKCSAgaXQgd2FzIGdlbmVyYXRpbmcgdHJlZSBmYXN0ZXIgdGhhbiBjb25zdW1pbmcgaXQuIFBvaW50ZWQgb3V0CgkgIGJ5IE5hdGUgTXllcnMKCSogdHJlZS5jOiBmaXhlZCBhIGJ1ZyBpbiB4bWxTYXZlRm9ybWF0RmlsZUVuYyBpZiBwYXNzZWQgYSBOVUxMIGRvYwoKU3VuIEphbiAxMiAyMjoxODowMiBDRVQgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogYWRkZWQgbW9yZSB4bWxyZWFkZXIgYW5kIG90aGVyIGV4cG9ydHMKCQpGcmkgSmFuIDEwIDE4OjA0OjMyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeCB0byB0aGUgWFBhdGggaW1wbGVtZW50YXRpb24gZm9yIHBhcmVudCBhbmQKCSAgYW5jZXN0b3JzIGF4aXMgd2hlbiBvcGVyYXRpbmcgb24gYSBSZXN1bHQgVmFsdWUgVHJlZS4KCSAgRml4ZXMgYnVnICMxMDAyNzEKCkZyaSBKYW4gMTAgMTc6MDc6MDEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFub2Z0cC5jIG5hbm9odHRwLmMgeG1sSU8uYzogcGF0Y2ggZnJvbSBTdGVmYW5vIFphY2NoaXJvbGkKCSAgdG8gZml4IHNvbWUgVVJJL2ZpbGUgZXNjYXBpbmcgcHJvYmxlbXMKCkZyaSBKYW4gMTAgMTY6MjA6MzQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weTogZml4ZWQgYSBidWcgcmFpc2VkIGJ5IFJheW1vbmQgV2lrZXIsIAoJICBkb2NTZXRSb290RWxlbWVudCgpIHNob3VsZCBub3QgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZQoJICByZXR1cm4gaXMgTm9uZQoKRnJpIEphbiAxMCAxNDoxMzowMyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbDoKCSAgZml4ZWQgYnVnICMxMDIxODEgYnkgYXBwbHlpbmcgdGhlIHN1Z2dlc3RlZCBjaGFuZ2UgYW5kIGZpeGluZwoJICB0aGUgZ2VuZXJhdGlvbi9yZWdpc3RyYXRpb24gcHJvYmxlbS4KCkZyaSBKYW4gMTAgMTM6NDc6NTUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBidWcgIzEwMjk2MCBieSByZXVzaW5nIHRoZSBYTUwgbmFtZSBwYXJzaW5nCgkgIHJvdXRpbmVzLgoKRnJpIEphbiAxMCAwMDoxNjo0OSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogb25lIG1vcmUgSXNFbXB0eUVsZW1lbnQgY3JhenluZXNzLCB0aGF0IHRpbWUgaW4KCSAgZXh0ZXJuYWwgcGFyc2VkIGVudGl0aWVzIGlmIHN1YnN0aXR1dGlvbiBpcyBhc2tlZC4KCSogcHl0aG9uL3Rlc3RzL3JlYWRlcjMucHk6IGFkZGVkIGEgc3BlY2lmaWMgdGVzdC4KClRodSBKYW4gIDkgMjI6MzU6MzEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2Rydl9saWJ4bWwyLnB5OiB1cGRhdGUgZnJvbSBTdOlwaGFuZSBCaWRvdWw6IHB5dGhvbiAyLjEKCSAgc3VwcG9ydCBhbmQgaW1wcm92ZWQgZXJyb3IgaGFuZGxlciByZWdpc3RyYXRpb24KClRodSBKYW4gIDkgMTQ6MTY6MzggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyB0cmVlLmM6IGZpeGVzICMxMDI5MjAgYWJvdXQgbmFtZXNwYWNlIGhhbmRsaW5nIGluCgkgIEhUTUwgb3V0cHV0IGFuZCBzZWN0aW9uIDE2LjIgIkhUTUwgT3V0cHV0IE1ldGhvZCIgb2YgWFNMVC0xLjAKCSogUkVBRE1FOiBmaXhlZCBhIGxpbmsKCldlZCBKYW4gIDggMTg6MzI6MjUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGRvYy8qIE5FV1M6IHByZXBhcmluZyAyLjUuMSByZWxlYXNlCgkqIFNBWC5jIHBhcnNlci5jOiBmaXhpbmcgWG1sVGV4dFJlYWRlciBidWcKCldlZCBKYW4gIDggMDA6MTM6MDEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IGZ1Y2ssIEkgaW50cm9kdWNlZCBhIG1lbW9yeSBsZWFrIG9uIGV4dGVybmFsIHBhcnNlZAoJICBlbnRpdGllcyBpbiAyLjUuMCA6LSgKClR1ZSBKYW4gIDcgMTI6MTI6NDUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhbm90aGVyIGZpeCBuZWVkZWQgYXMgcG9pbnRlZCBieSBDaHJpc3RvcGhlIE1lcmxldAoJICBmb3IgLS1zdHJlYW0gLS1kZWJ1ZyBpZiBjb21waWxlZCB3aXRob3V0IGRlYnVnIHN1cHBvcnQuCgpNb24gSmFuICA2IDIwOjUzOjA4IE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sbGludC54bWwKCSogZG9jL3htbGxpbnQuMToKCXVwZGF0ZSBtYW4gcGFnZSB3aXRoIC0tc3RyZWFtIGFuZCAtLWNoa3JlZ2lzdGVyCgpUdWUgSmFuICA3IDAxOjE3OjI2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYzogZml4ZWQgLS13aXRoLXRocmVhZHMgY29tcGlsZQoJKiB4bWxsaW50LmM6IGZpeGVkIC0td2l0aG91dC1kZWJ1ZyBjb21waWxlCgkqIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaDogY2xlYW51cAoJKiBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmg6IGFkZCBhIG1pc3NpbmcgaW5jbHVkZQoKTW9uIEphbiAgNiAxNDowNjowNyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gTkVXUzogcHJlcGFyaW5nIDIuNS4wIHJlbGVhc2UKCSogU0FYLmM6IG9ubHkgd2FybiBpbiBwZWRhbnRpYyBtb2RlIGFib3V0IG5hbWVzcGFjZSBuYW1lIAoJICBicm9rZW5lc3MKCSogZ2xvYmFscy5jOiBmaXggYSBkb2MgZ2VuZXJhdGlvbiBwcm9ibGVtCgkqIHVyaS5jOiBmaXggIzEwMTUyMAoJKiBkb2MvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jIGZvciB0aGUgcmVsZWFzZSwgaW5jbHVkdWRpbmcKCSAgc3R5bGVzaGVldCB1cGRhdGUKCSogcHl0aG9uL01ha2VmaWxlLmFtOiBmaXggYSBmaWxlbmFtZSBidWcKCk1vbiBKYW4gIDYgMTI6MDU6MTIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL3R1dG9yaWFsLyogOiBmaXhlZCAjMTAxODk0IGlmIGRvYyA9PSBOVUxMIHhtbEZyZWVEb2MgCgkgIHNob3VsZCBub3QgYmUgY2FsbGVkLgoKTW9uIEphbiAgNiAxMTo1OTowOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwtMi4wLnBjLmluOiBhcHBsaWVkIHRoZSBwYXRjaCB0byBmaXggIzEwMTg5NAoKU3VuIEphbiAgNSAyMzozNTo0NyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmMgOiBhcHBsaWVkIHBhdGNoIGZyb20gTHVrYXMgU2Nocm9lZGVyIGZvciByZWdpc3RlciBjYWxsYmFja3MKCSogdmFsaWQuYzogbW9kaWZpZWQgcGF0Y2ggZnJvbSBMdWthcyBTY2hyb2VkZXIgdG8gdGVzdAoJICByZWdpc3RlciBjYWxsYmFja3Mgd2l0aCAtLWNoa3JlZ2lzdGVyCgpTdW4gSmFuICA1IDAyOjIzOjIwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBzZXJpb3VzbHkgY2hhbmdlZCB0aGUgd2F5IGRhdGEgYXJlIHB1c2hlZCB0bwoJICB0aGUgdW5kZXJseWluZyBwYXJzZXIsIGdvIGJ5IGJsb2NrIG9mIDUxMiBieXRlcyBpbnN0ZWFkIG9mCgkgIHRyeW5nIHRvIGRldGVjdCB0YWcgYm91bmRhcmllcyBhdCB0aGF0IGxldmVsLiBDaGFuZ2VkIHRoZQoJICB3YXkgZW1wdHkgZWxlbWVudCBhcmUgZGV0ZWN0ZWQgYW5kIHRhZ2dlZC4KCSogcHl0aG9uL3Rlc3RzL3JlYWRlci5weSBweXRob24vdGVzdHMvcmVhZGVyMi5weQoJICBweXRob24vdGVzdHMvcmVhZGVyMy5weTogc21hbGwgY2hhbmdlcyBtb3N0bHkgZHVlIHRvIGNvbnRleHQKCSAgcmVwb3J0aW5nIGJlaW5nIGRpZmZlcmVudCBhbmQgRFREIG5vZGUgYmVpbmcgcmVwb3J0ZWQuIFNvbWUKCSAgZXJyb3JzIHByZXZpb3VzbHkgdW5kZXRlY3RlZCBhcmUgbm93IGNhdWdodCBhbmQgZml4ZWQuCgkqIGRvYy94bWxyZWFkZXIuaHRtbDogZmxhZ2dlZCBsYXN0IHNlY3Rpb24gYXMgVE9ETwoKU2F0IEphbiAgNCAyMDo0MDoyOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLnB5OiBpbnRlZ3JhdGVkIHRoZSBQeXRob24gMi4yIG9wdGltaXphdGlvbnMKCSAgZnJvbSBIYW5udSBLcm9zaW5nLCB3aGlsZSBtYWludGFpbmluZyBjb21wYXRpYmlsaXR5IHdpdGggCgkgIDEuNSBhbmQgMi4xCgpTYXQgSmFuICA0IDE3OjMzOjE3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYSBiaXQgb2YgY2xlYW51cAoJKiB4bWxyZWFkZXIuYzogc21hbGwgZml4CgkqIGRvYy94bWxyZWFkZXIuaHRtbDogbW9yZSB3b3JrIG9uIHRoZSBYbWxUZXh0UmVhZGVyIHR1dG9yaWFsCgkqIHB5dGhvbi9saWJ4bWwucHk6IGEgZmV3IGZpeGVzIHBvaW50ZWQgb3V0IGJ5IEhhbm51IEtyb3NpbmcKClNhdCBKYW4gIDQgMTM6NDY6MTQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL3NldHVwLnB5LmluOiBwYXRjaCBmcm9tIFN06XBoYW5lIEJpZG91bCB0byBpbmNsdWRlCgkgIGRydl9saWJ4bWwyLnB5IGluIHNldHVwLnB5CgpTYXQgSmFuICA0IDAxOjQzOjA2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy94bWxyZWFkZXIuaHRtbDogc3RhcnRpbmcgZG9jdW1lbnRpbmcgdGhlIG5ldyBYbWxUZXh0UmVhZGVyCgkgIGludGVyZmFjZS4KCkZyaSBKYW4gIDMgMTc6MTg6MzIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhZGRlZCB0aGUgLS1zdHJlYW0gZmxhZyB0byB1c2UgdGhlIFRleHRSZWFkZXIgQVBJCgkqIHhtbHJlYWRlci5jOiBzbWFsbCBwZXJmb3JtYW5jZSB0d2VhawoKRnJpIEphbiAgMyAxMzo1MDo1NSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyMnB5OiBva2F5IHRoZSBEVEQgdmFsaWRhdGlvbgoJICBjb2RlIG9uIHRvcCBvZiB0aGUgWE1MVGV4dFBhcnNlciBBUEkgc2hvdWxkIGJlIHNvbGlkIG5vdy4KCkZyaSBKYW4gIDMgMDI6MTc6MTggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgcHl0aG9uL3Rlc3RzL3JlYWRlcjJweTogRml4aW5nIHNvbWUgbW9yZSBtZXNzCgkgIHdpdGggdmFsaWRhdGlvbiBhbmQgcmVjdXJzaXZlIGVudGl0aWVzIHdoaWxlIHVzaW5nIHRoZQoJICByZWFkZXIgaW50ZXJmYWNlLCBpdCdzIGdldHRpbmcgYSBiaXQgbWVzc3kuLi4KClRodSBKYW4gIDIgMTU6MTU6MjYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgcHl0aG9uL3Rlc3RzL3JlYWRlci5weTogYW5vdGhlciBjb3VwbGUgb2YgcHJvYmxlbQoJICByZWxhdGVkIHRvIElzRW1wdHlFbGVtZW50IHJlcG9ydGVkIGJ5IFN06XBoYW5lIEJpZG91bCBuZWVkZWQgCgkgIHNvbWUgZml4ZXMuCgpUaHUgSmFuICAyIDEzOjU3OjA3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vZHJ2X2xpYnhtbDIucHk6CgkgIGludGVncmF0ZWQgZHJ2X2xpYnhtbDIucHkgUHl0aG9uIHhtbC5zYXggZHJpdmVyIGZyb20gU3TpcGhhbmUgQmlkb3VsCgkgIGJhc2VkIG9uIHRoZSBweXRob24gWG1sVGV4dFJlYWRlciBpbnRlcmZhY2UuCgpXZWQgSmFuICAxIDIyOjA1OjQwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYmFja2luZyBvdXQgb25lIGNoYW5nZSBpbiB0aGUgbGFzdCBwYXRjaCB3aGljaCBicm9rZSB0aGUKCSAgcmVncmVzc2lvbiB0ZXN0cwoKV2VkIEphbiAgMSAyMTo1NzoyOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnbG9iYWwuZGF0YSBnbG9iYWxzLmMgdHJlZS5jIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaDogYXBwbGllZAoJICBhbiBvbGQgcGF0Y2ggZnJvbSBMdWthcyBTY2hyb2VkZXIgdG8gdHJhY2sgbm9kZSBjcmVhdGlvbiBhbmQKCSAgZGVzdHJ1Y3Rpb24uIFByb2JhYmx5IG1pc3NpbmcgYSBsb3Qgb2YgcmVmZXJlbmNlcyBhdCB0aGUgbW9tZW50CgkgIGFuZCBub3QgdXNhYmxlIHJlbGlhYmx5LgoKV2VkIEphbiAgMSAyMDoxMjowNyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBORVdTIGRvYy9NYWtlZmlsZS5hbSBkb2MvbmV3cy54c2w6IGdlbmVyYXRlIHRoZSBORVdTIGZpbGUKCSAgZnJvbSBkb2MvbmV3cy5odG1sIGFuZCBhIHN0eWxlc2hlZXQKCldlZCBKYW4gIDEgMTY6MDk6NTcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgcHl0aG9uL3Rlc3RzL3JlYWRlci5weTogZml4ZWQgYW5vdGhlciBjb3VwbGUgb2YKCSAgeG1scmVhZGVyIGJ1Z3MgcmVwb3J0ZWQgYnkgU3TpcGhhbmUgQmlkb3VsIGFuZCBhZGRlZCB0ZXN0cy4KCldlZCBKYW4gIDEgMTU6NDI6NTQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgcHl0aG9uL3Rlc3RzL3JlYWRlcjIucHk6IGZpeGVkIGFub3RoZXIgdmFsaWRpdHkKCSAgY2hlY2tpbmcgaW4gZXh0ZXJuYWwgcGFyc2VkIGVudGl0aWVzIHJhaXNlZCBieSBTdOlwaGFuZSBCaWRvdWwKCSAgYW5kIGFkZGVkIGEgc3BlY2lmaWMgcmVncmVzc2lvbiB0ZXN0LgoJKiBweXRob24vdGVzdHMvcmVhZGVyMy5weTogY2xlYW51cAoKVHVlIERlYyAzMSAxNTo0NDowMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyMi5weTogZml4ZWQgYSBwcm9ibGVtIHdpdGgKCSAgdmFsaWRhdGlvbiB3aXRoaW4gZW50aXRpZXMgcG9pbnRlZCBieSBTdOlwaGFuZSBCaWRvdWwsIGF1Z21lbnRlZAoJICB0aGUgdGVzdHMgdG8gY2F0Y2ggdGhvc2UuCgpUdWUgRGVjIDMxIDEyOjE1OjM3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHk6IG1vZGlmaWVkIHRoZSBnZW5lcmF0b3IgdG8gYWxsb3cga2VlcGluZwoJICBjbGFzcyByZWZlcmVuY2VzIHdoZW4gY3JlYXRpbmcgbmV3IGNsYXNzZXMsIG5lZWRlZCB0byBmaXggYSBidWcKCSAgcG9pbnRlZCBieSBTdOlwaGFuZSBCaWRvdWwgd2hlcmUgdGhlIGlucHV0IGJ1ZmZlciBvZiB0aGUKCSAgeG1sVGV4dFJlYWRlciBpbnN0YW5jZSBnZXRzIGRlc3Ryb3llZCBpZiB0aGUgcHl0aG9uIHdyYXBwZXIgZm9yCgkgIHRoZSBpbnB1dCBpcyBub3QgcmVmZXJlbmNlZCBhbnltb3JlLgoKTW9uIERlYyAzMCAxOTozOTozNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyLnB5OiBmaXhlZCBhbm90aGVyIHBhaXIgb2YgcHJvYmxlbQoJICBwb2ludGVkIGJ5IFN06XBoYW5lIEJpZG91bDogZGVwdGggc3RhcnQgYXQgMCBhbmQgYSBwYXJzZSBwcm9ibGVtLgoKTW9uIERlYyAzMCAxMzozNjo1MCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyLnB5OiBmaXhlZCBhbm90aGVyIHByb2JsZW0KCSAgcG9pbnRlZCBieSBTdOlwaGFuZSBCaWRvdWwKCk1vbiBEZWMgMzAgMTI6Mzk6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgcHl0aG9uL3Rlc3RzL3JlYWRlci5weTogZml4ZWQgYSBsaW1pdCBjYXNlIHByb2JsZW0KCSAgd2l0aCAiPGEvPiIKCk1vbiBEZWMgMzAgMTE6NTM6NDQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IHdhcm4gb24geG1sbnM6cHJlZml4PSJmb28iCgkqIHhtbHJlYWRlci5jIHB5dGhvbi90ZXN0cy9yZWFkZXIucHk6IGZpeGVkIGEgY291cGxlIG9mIHByb2JsZW0KCSAgZm9yIG5hbWVzcGFjZSBhdHRyaWJ1dGVzIGhhbmRsaW5nLgoKTW9uIERlYyAzMCAwMDo1OTowNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbnRpdGllcy5jIHBhcnNlci5jIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9lbnRpdGllcy5oOiBGaXhlZAoJICBhIHJlYWxseSBuYXN0eSBwcm9ibGVtIHJhaXNlZCBieSBhIERvY0Jvb2sgWFNMVCB0cmFuc2Zvcm0KCSAgcHJvdmlkZWQgYnkgU2ViYXN0aWFuIEJlcmdtYW5uCgpTdW4gRGVjIDI5IDEyOjEzOjE4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIHB5dGhvbi90ZXN0cy9yZWFkZXIucHk6IGZpeGVkIGEgYnVnIHBvaW50ZWQgb3V0CgkgIGJ5IFN06XBoYW5lIEJpZG91bCBhbmQgaW50ZWdyYXRlZCBpdCBpbnRvIHRoZSB0ZXN0cwoKU2F0IERlYyAyOCAyMzo0OToxMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaCBkb2MvbGlieG1sMi1hcGkueG1sOgoJICBleHRlbmRlZCB0aGUgWG1sVGV4dFJlYWRlciBBUEkgYSBiaXQsIGFkZGRpbmcgYWNjZXNzb3JzIGZvcgoJICB0aGUgY3VycmVudCBkb2MgYW5kIG5vZGUsIGFuZCBhbiBlbnRpdHkgc3Vic3RpdHV0aW9uIG1vZGUgZm9yCgkgIHRoZSBwYXJzZXIuCgkqIHB5dGhvbi9saWJ4bWwucHkgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IHJlbGF0ZWQgdXBkYXRlcwoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3JlYWRlci5weSAKCSAgcHl0aG9uL3Rlc3RzL3JlYWRlcjIucHkgcHl0aG9uL3Rlc3RzL3JlYWRlcjMucHk6IHVwZGF0ZWQgYSBiaXQKCSAgdGhlIG9sZCB0ZXN0cyBhbmQgYWRkZWQgYSBuZXcgb25lIHRvIHRlc3QgdGhlIGVudGl0aWVzIGhhbmRsaW5nCgpTYXQgRGVjIDI4IDIyOjExOjU3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQgCgkgIHB5dGhvbi90ZXN0cy9yZWFkZXIucHkgcHl0aG9uL3Rlc3RzL3JlYWRlcjIucHk6IGNoYW5nZWQgdGhlCgkgIGdlbmVyYXRvciB0byBwcm92aWRlIGNhc2luZyBmb3IgdGhlIFhtbFRleHRSZWFkZXIgc2ltaWxhciB0bwoJICBDIyBzbyB0aGF0IGV4YW1wbGVzIGFuZCBkb2N1bWVudGF0aW9uIGFyZSBtb3JlIGRpcmVjdGx5IHRyYW5zcG9zYWJsZS4KCSAgRml4ZWQgdGhlIGNvdXBsZSBvZiB0ZXN0cyBpbiB0aGUgc3VpdGUuCgpTYXQgRGVjIDI4IDE1OjU1OjMyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9ndWlkZWxpbmVzLmh0bWw6IGFkZGVkIGEgZG9jdW1lbnQgb24gZ3VpbGRlbGluZSBmb3IKCSAgcHVibGlzaGluZyBhbmQgZGVwbG95aW5nIFhNTAoKRnJpIERlYyAyNyAyMDozNToxNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jIHhtbHJlYWRlci5jOiBmaW5hbCB0b3VjaCBydW5uaW5nIERURCB2YWxpZGF0aW9uCgkgIG9uIHRoZSBYbWxUZXh0UmVhZGVyCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvcmVhZGVyMi5weTogYWRkZWQgYQoJICBzcGVjaWZpYyBydW4gYmFzZWQgb24gdGhlIGV4YW1wbGVzIGZyb20gdGVzdC92YWxpZC8qLnhtbAoKRnJpIERlYyAyNyAxNToxNzoyMCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLnB5OiBhZGRlZCBhIGZldyBwcmVkZWZpbmVkIHhtbFRleHRSZWFkZXIgcGFyc2VyCgkgIGNvbmZpZ3VyYXRpb24gdmFsdWVzLgoKRnJpIERlYyAyNyAxMjo1NzoyMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sX3dyYXAuaDogdHJ5aW5nIHRvIGZpeCAjMTAyMDM3CgpGcmkgRGVjIDI3IDEyOjE4OjE0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBmaXhpbmcgYnVnICM5NTI5Niwgd2hlbiB0aGUgcHJlZGVmaW5lZCBlbnRpdGllcwoJICBhcmUgcmVkZWZpbmVkIGluIHRoZSBEVEQgdGhlIGRlZmF1bHQgb25lIG11c3QgYmUgdXNlZAoJICBpbnN0ZWFkIGFueXdheS4KCldlZCBEZWMgMjUgMTk6MjI6MDYgTVNUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxsaW50LnhtbAoJKiBkb2MveG1sbGludC4xCglBZGQgZGlzY3Vzc2lvbiBvZiBYTUxfREVCVUdfQ0FUQUxPRyB0byB4bWxsaW50IG1hbgoJcGFnZSAtIGJ1ZyAjMTAwOTA3CgoKTW9uIERlYyAyMyAxNjo1NDoyMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogRml4ZWQgdGhlIGVtcHR5IG5vZGUgZGV0ZWN0aW9uIHRvIGF2b2lkIHJlcG9ydGluZwoJICBhbiBpbmV4aXN0YW50IGNsb3NlIHRhZy4KCk1vbiBEZWMgMjMgMTU6NDI6MjQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9zZXR1cC5weS5pbjogcGF0Y2ggZnJvbSBTdOlwaGFuZSBCaWRvdWwKCSAgZm9yIFB5dGhvbiAyLjEKClN1biBEZWMgMjIgMTE6MjQ6MDYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdEMxNE4uYyB2bXMvY29uZmlnLnZtczogYXBwbGllZCBDcmFpZyBBLiBCZXJyeSBwYXRjaGVzIGZvciBWTVMKCkZyaSBEZWMgMjAgMTE6Mjc6NDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2xpYnhtbDItYXBpLnhtbCBweXRob24vdGVzdHMvcmVhZGVyLnB5OiBvbmUgcmVhbGx5IG5lZWQKCSAgdG8gcHJvdmlkZSB0aGUgYmFzZSBVUkkgaW5mb3JtYXRpb24gd2hlbiBjcmVhdGluZyBhIHJlYWRlciBwYXJzZXIKCSAgZnJvbSBhbiBpbnB1dCBzdHJlYW0uIFVwZGF0ZWQgdGhlIEFQSSBhbmQgdGhlIGV4YW1wbGUgdXNpbmcgaXQuCgpGcmkgRGVjIDIwIDAxOjExOjMwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3RSZWFkZXIuYyB4bWxyZWFkZXIuYyB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaAoJICBpbmNsdWRlL2xpYnhtbC92YWxpZC5oIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oOiB3b3JraW5nIG9uCgkgIERURCB2YWxpZGF0aW9uIG9uIHRvcCBvZiB4bWwgcmVhZGVyIGludGVyZmFjZXMuIEFsbG93cyB0bwoJICB2YWxpZGF0ZSBhcmJpdHJhcnkgbGFyZ2UgaW5zdGFuY2VzLiBUaGlzIHJlcXVpcmVkIHNvbWUgZXh0ZW5zaW9ucwoJICB0byB0aGUgdmFsaWQgbW9kdWxlIGludGVyZmFjZSBhbmQgYXVnbWVudGluZyB0aGUgc2l6ZSBvZiB4bWxJRAoJICBhbmQgeG1sUmVmIHN0cnVjdHMgYSBiaXQuCgkqIHVyaS5jIHhtbHJlZ2V4cC5jOiBzaW1wbGUgY2xlYW51cC4KCldlZCBEZWMgMTggMTU6NTE6MjIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmggZG9jL2xpYnhtbDItYXBpLnhtbDogbW9yZQoJICB3b3JrIG9uIHRoZSB4bWwgcmVhZGVyIGludGVyZmFjZXMuCgkqIEFVVEhPUlMgTUFJTlRBSU5FUlMgZG9jLyogd2luMzIvKjogdXBkYXRlZCBJZ29yJ3MgbWFpbCBhbmQgdGhlCgkgIFdlYiBwYWdlIGZvciB0aGUgV2luZG93cyBiaW5hcmllcy4KClR1ZSBEZWMgMTcgMTk6MzE6MDcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogYXBwbGllZCBhIHBhdGNoIGZvciBWTVMgZm9sbG93aW5nIHRoZSByZXBvcnQgYnkKCSAgTmlnZWwgSGFsbAoKVHVlIERlYyAxNyAxMToyOTo0MSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogdGhlIHBhcnNlU3RhcnRUYWcgYnVnIGZpeCB3YXNuJ3QgY29tcGxldGUuCgkKTW9uIERlYyAxNiAyMzowMDowNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogVnlhY2hlc2xhdiBQaW5keXVyYSBtYW5hZ2VkIHRvIHRyaWdnZXIgYSBidWcgaW4KCSAgcGFyc2VTdGFydFRhZywgZml4aW5nIGl0LgoJKiB0ZXN0L2F0dDQgcmVzdWx0L2F0dDQgcmVzdWx0L25vZW50L2F0dDQ6IGFkZGluZyB0aGUgdGVzdAoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaCBkb2MvbGlieG1sMi1hcGkueG1sOiBhZGRlZAoJICBtb3JlIG1ldGhvZHMgdG8gWG1sVGV4dFJlYWRlci4KCk1vbiBEZWMgMTYgMTk6MzE6MTYgQ0VUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGFkZGVkIG1vcmUgeG1sIHJlYWRlciBleHBvcnRzCgkqIHdpbjMyL01ha2VmaWxlLm1zdmMgd2luMzIvTWFrZWZpbGUubWluZ3c6IGFkZGVkIHhtbCByZWFkZXIgaW50ZXJmYWNlCgkgIHRvIHRoZSBidWlsZAoJCk1vbiBEZWMgMTYgMDY6MzY6NTQgTVNUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC54bWwKCXBsdXMgZ2VuZXJhdGVkIGh0bWwgYW5kIHBkZgoJVXBkYXRpbmcgdHV0b3JpYWwgYWdhaW4gYmFzZWQgb24gZnVydGhlciBjb21tZW50cyBmcm9tIE5pcmFqCglUb2xpYSBvbiB0aGUgbGFzdCBpdGVyYXRpb24KClN1biBEZWMgMTUgMjE6Mjc6MzAgTVNUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC54bWwKCSogZG9jL3R1dG9yaWFsL2luY2x1ZGVrZXl3b3JkLmMKCSogZG9jL3R1dG9yaWFsL2luY2x1ZGVnZXRhdHRyaWJ1dGUuYwoJcGx1cyBnZW5lcmF0ZWQgaHRtbCBhbmQgcGRmCglBZGRpbmcgZml4IGZyb20gTmlyYWogVG9saWEgdG8gdHV0b3JpYWwgdG8gcHJvcGVybHkgZnJlZSBtZW1vcnkuCgkKCk1vbiBEZWMgMTYgMDA6MzQ6MjUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmggZG9jL2xpYnhtbDItYXBpLnhtbDogYWRkZWQKCSAgbW9yZSBtZXRob2RzIG9mIFhtbFRleHRSZWFkZXIuCgkqIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0IHB5dGhvbi90ZXN0cy9yZWFkZXIucHk6IHRoaXMgaW5jcmVhc2VkIHRoZQoJICBtZXRob2RzIGluIHRoZSBibmRpbmdzLCBhdWdtZW50ZWQgdGhlIHRlc3QgdG8gY2hlY2sgdGhvc2UgbmV3CgkgIGZ1bmN0aW9ucy4KClNhdCBEZWMgMTQgMjM6NTc6MzkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgZG9jL2xpYnhtbDItYXBpLnhtbDogYWRkZWQgdGhlIGNsb3NlIGFuZCBnZXRhdHRyaWJ1dGUKCSAgbWV0aG9kcyBvZiBYbWxUZXh0UmVhZGVyLgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWxfd3JhcC5oIHB5dGhvbi90eXBlcy5jIAoJICBweXRob24vbGlieG1sMmNsYXNzLnR4dDogYWRkZWQgdGhlIHJlYWRlciB0byB0aGUgUHl0aG9uIGJpbmRpbmdzCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvcmVhZGVyLnB5OiBhZGRlZCBhIHNwZWNpZmljCgkgIHRlc3QgZm9yIHRoZSBQeXRob24gYmluZGluZ3Mgb2YgdGhlIFJlYWRlciBBUElzCgkqIHBhcnNlci5jOiBzbWFsbCBjbGVhbnVwLgoKRnJpIERlYyAxMyAxMTozOTo0NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBmYWxsYmFjayB3YXMgb25seSBjb3B5aW5nIHRoZSBmaXJzdCBjaGlsZCBub3QgdGhlCgkgIGZ1bGwgY2hpbGQgbGlzdCBvZiB0aGUgZmFsbGJhY2sgZWxlbWVudCwgY2xvc2VzICM4OTY4NCBhcyByZW9wZW5lZAoJICBieSBCZXJuZCBLdWVtbWVybGVuCgpUaHUgRGVjIDEyIDEzOjM0OjU5IENFVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBleHBvcnRlZCBodG1sTm9kZUR1bXBPdXRwdXQKClRodSBEZWMgMTIgMTA6NTk6MTEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgcmVsZWFzZSBvZiAyLjQuMzAKCSogZG9jL2FwaWJ1aWxkLnB5IGRvYy9saWJ4bWwyLWFwaS54bWw6IGZpeHVwcyB0byB0aGUgYXBpIGJ1aWxkZXIsCgkgIGdpdmVzIGVudW0gdmFsdWVzLCBmaXggZnVuY3R5cGUgcmV0dXJuIHR5cGUsIHB1dCBiYWNrIGZpZWxkcyBpbgoJICBzdHJ1Y3RzIAoJKiBkb2MvKjogdXBkYXRlZCB0aGUgZG9jcyByZWJ1aWx0CgpUaHUgRGVjIDEyIDAxOjA5OjM0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmMgaW5jbHVkZS9saWJ4bWwvSFRNTHRyZWUuaDogcGF0Y2ggZnJvbSBNYXJrIFZhZG9rCgkgIGFib3V0IGh0bWxOb2RlRHVtcE91dHB1dCBsb2NhdGlvbi4KCSogeHBhdGguYzogcmVtb3ZlZCBhbiB1bmRlZmluZWQgZnVuY3Rpb24gc2lnbmF0dXJlCgkqIGRvYy9hcGlidWlsZC5weSBkb2MvbGlieG1sMi1hcGkueG1sOiB0aGUgc2NyaXB0IHdhcyBleHBvcnRpbmcKCSAgdG9vIG1hbnkgc3ltYm9scyBpbiB0aGUgQVBJIGJyZWFraW5nIHRoZSBweXRob24gYmluZGluZ3MuCgkgIFVwZGF0ZWQgd2l0aCB0aGUgbGlieHNsdC9saWJleHNsdCBjaGFuZ2VzLgoKV2VkIERlYyAxMSAyMDoyNjoxNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyByZWxlYXNlIG9mIDIuNC4yOQoJKiBkb2MvKjogcmVidWlsdCB0aGUgZG9jcyBhbmQgQVBJCgkqIHhtbHJlYWRlci5jOiBhIGZldyBtb3JlIGZpeGVzIGZvciB0aGUgWG1sVGV4dFJlYWRlciBBUEkKCldlZCBEZWMgMTEgMTg6MDE6MTUgQ0VUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IGFwcGxpZWQgbWluZ3cgcGF0Y2ggZnJvbSBNYWdudXMgSGVub2NoCgpXZWQgRGVjIDExIDE2OjU4OjQ4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYyBkb2MvbGlieG1sMi1hcGkueG1sOiBhIGJpdCBtb3JlIGNsZWFudXAKCldlZCBEZWMgMTEgMTQ6NTQ6NDcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2FwaWJ1aWxkLnB5IGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL01ha2VmaWxlLmFtOiBuZXcgQVBJCgkgIGJ1aWxkaW5nIFB5dGhvbiBzY3JpcHQsIGRvZXMgdGhlIEMgcGFyc2luZyBkaXJlY3RseSwgZ2VuZXJhdGVzCgkgIGEgYmV0dGVyIEFQSSBkZXNjcmlwdGlvbiBpbmNsdWRpbmcgc3RydWN0dXJlIGZpZWRzIGRlZnMgYW5kCgkgIGVudW1zLiBTdGlsbCBhIGNvdXBsZSBvZiBidWdzLCBidXQgZ29vZCBlbm91Z2ggZm9yIHRoZSBweXRob24KCSAgd3JhcHBlcnMgbm93LgoJKiBET0NCcGFyc2VyLmMgU0FYLmMgbmFub2h0dHAuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0cmVlLmMKCSAgdmFsaWQuYyB4bWxJTy5jIHhtbG1lbW9yeS5jIHhtbHJlYWRlci5jIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYwoJICBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmggaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBtb3JlCgkgIGNsZWFudXAgYmFzZWQgb24gdGhlIHB5dGhvbiBhbmFseXNpcyBzY3JpcHQgcmVwb3J0cy4KCSogbGlieG1sLnNwZWMuaW46IG1ha2Ugc3VyZSB0aGUgQVBJIFhNTCBkZXNjcmlwdGlvbiBpcyBwYXJ0IG9mIHRoZQoJICBkZXZlbCBwYWNrYWdlLgoKVHVlIERlYyAxMCAxNjoxNjozNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBET0NCcGFyc2VyLmMgSFRNTHBhcnNlci5jIGMxNG4uYyBkZWJ1Z1hNTC5jIGVuY29kaW5nLmMgaGFzaC5jCgkgIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHRlc3RDMTROLmMKCSAgdGVzdERvY2Jvb2suYyB0aHJlYWRzLmMgdHJlZS5jIHZhbGlkLmMgeG1sSU8uYyB4bWxsaW50LmMgeG1sbWVtb3J5LmMKCSAgeG1scmVhZGVyLmMgeG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jIHhwYXRoLmM6CgkgIGNvZGUgY2xlYW51cCwgZXNwZWNpYWxseSB0aGUgZnVuY3Rpb24gY29tbWVudHMuCgkqIHRyZWUuYzogZml4ZWQgYSBzbWFsbCBidWcgd2hlbiBmcmVlaW5nIG5vZGVzIHdoaWNoIGFyZSBYSW5jbHVkZSBvbmVzLgoKTW9uIERlYyAgOSAxNTowODoxNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbQoJICBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaDogIEFkZGluZyBhIG5ldyBzZXQgb2YgQVBJcyBiYXNlZCBvbgoJICB0aGUgQyMgVGV4dFhtbFJlYWRlciBBUEkgYnV0IGNvbnZlcnRlZCB0byBDLiBBbGxvdyB0byBwYXJzZQoJICBpbiBjb25zdGFudCBtZW1vcnkgdXNhZ2UsIGZhciBzaW1wbGVyIHRvIHByb2dyYW0gYW5kIGV4cGxhaW4KCSAgdGhhbiB0aGUgU0FYIGxpa2UgQVBJcywgdW5maW5pc2hlZCBidXQgd29ya2luZy4KCSogdGVzdFJlYWRlci5jOiB0ZXN0IHByb2dyYW0KClN1biBEZWMgIDggMTg6MzY6MDEgQ0VUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGFwcGxpZWQgWUFMRFNQIGZyb20gTWFyayBWYWtvYwoKV2VkIERlYyAgNCAxNjowODo0OSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IENoaXAgdHVybmVyIGluZGljYXRlZCB0aGF0IFhIVE1MMSBzZXJpYWxpemF0aW9uCgkgIHJ1bGUgZm9yIHN0eWxlIGFjdHVhbGx5IGJyZWFrIG9uIGJvdGggSUUgYW5kIE1vemlsbGEsIAoJICB0cnkgdG8gYXZvaWQgdGhlIHJ1bGUgaWYgZXNjYXBpbmcgYWluJ3QgbmVjZXNzYXJ5CgpXZWQgRGVjICA0IDEyOjQzOjI4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbmh0dHAuYzogaGFuZGxlIEhUVFAgVVJMIGVzY2FwaW5nLCBwcm9ibGVtIHJlcG9ydGVkIGJ5CgkgIEdsZW4gTmFrYW11cmEgYW5kIFN0ZWZhbm8gWmFjY2hpcm9saQoKU2F0IE5vdiAzMCAxMjoxOToxNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBET0NCcGFyc2VyLmMgSFRNTHBhcnNlci5jIHBhcnNlci5jIHZhbGlkLmMgeHBhdGguYzogY29kZSBjbGVhbnVwCgpUaHUgTm92IDI4IDEyOjUzOjIyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jOiBKb2hhbm4gUmljaGFyZCBwb2ludGVkIG91dCBzb21lIFhQb2ludGVyIHByb2JsZW1zIGZvcgoJICBVUk4gYmFzZWQgVVJJIHJlZmVyZW5jZXMgaW4gWEluY2x1ZGUuIE1vZGlmaWVkIHRoZSBVUkkgcGFyc2luZwoJICBhbmQgc2F2aW5nIHJvdXRpbmVzIHRvIGFsbG93IGNvcnJlY3QgcGFyc2luZyBhbmQgc2F2aW5nIG9mIAoJICBYUG9pbnRlcnMsIGVzcGVjaWFsbHkgd2hlbiBhdHRhY2hlZCB0byAib3BhcXVlIiBzY2hlbWUgYWNjb3JkaW5nbHkKCSAgdG8gUkZDIDIzOTYKCldlZCBOb3YgMjcgMjA6MzY6MDggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9IVE1MdHJlZS5oOiBhcHBsaWVkIHRoZSBzYW1lIGtpbmQKCSAgb2YgcmVmYWN0b3JpbmcgdG8gdGhlIEhUTUwgc2F2aW5nIGNvZGUuCgkqIGRvYy9saWJ4bWwyLSoueG1sIGRvYy9BUEkqLmh0bWw6IHNsaWdodCBBUEkgY2hhbmdlcyBnb3QgcmVmbGVjdGVkCgkgIGluIHRoZSBkb2MuCgpXZWQgTm92IDI3IDEyOjQwOjE2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IHJlZmFjdG9yZWQgdGhlIFhNTCBkdW1wIG9mIGEgbm9kZQoJICB0byBhIGJ1ZmZlciBBUEkgdG8gcmV1c2UgdGhlIGdlbmVyaWMgZHVtcCB0byBhbiBPdXRwdXRJTyBsYXllciwKCSAgdGhpcyByZWR1Y2VzIGNvZGUsIGZpeGVzIHhtbE5vZGVEdW1wKCkgZm9yIFhIVE1MLCBhbHNvIG1hZGUKCSAgeG1sTm9kZUR1bXAoKSBub3cgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZSB3cml0dGVuLgoKV2VkIE5vdiAyNyAwOTowMDowMCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vc2V0dXAucHkuaW46IGFub3RoZXIgcGF0Y2ggZnJvbSBTdOlwaGFuZSBCaWRvdWwgZm9yIAoJICBQeXRob24gYmluZGluZ3Mgb24gV2luZG93cwoJKiBkb2MvcGFyc2VkZWNsLnB5OiBzbWFsbCBjbGVhbnVwCgpNb24gTm92IDI1IDE3OjI4OjUzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluIGNvbmZpZ3VyZS5pbjogYWRkIGEgbGluZSBpbiAlY2hhbmdlbG9nIGZvciByZWxlYXNlcwoKTW9uIE5vdiAyNSAxNDoxODoyNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogcGF0Y2ggZnJvbSBNYXJjdXMgQ2xhcmtlIGZpeGluZyBhIHByb2JsZW0gaW4gZW50aXRpZXMKCSAgcGFyc2luZyB0aGF0IHdhcyBkZXRlY3RlZCBpbiBLRGUgZG9jdW1lbnRhdGlvbnMgZW52aXJvbm1lbnQuCgpNb24gTm92IDI0IDE0OjEzOjIxIENFVCAyMDAyIEVSREkgR2VyZ28gPGNhY3R1c0BjYWN0dXMucnVsZXoub3JnPgoKCSogcHl0aG9uL2xpYnhtbC5jIChsaWJ4bWxfcHJldik6IFJldHVybiB0aGUgcHJldmlvdXMgYXMgb3Bwb3NlZCB0bwoJdGhlIG5leHQgbm9kZSAoSSBndWVzcyB0aGlzIGlzIHRoZSByZXN1bHQgb2Ygc29tZSBjdXQgJiBwYXN0ZSBwcm9ncmFtbWluZzopCgpTYXQgTm92IDIzIDE3OjIyOjIyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9NYWtlZmlsZS5hbTogSmFuIFJhZmFqIHBvaW50ZWQgYSBidWcgaW4gdGhlIE1ha2VmaWxlLgoKU2F0IE5vdiAyMyAxMjoyMToyNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vc2V0dXAucHkuaW46IHRyeWluZwoJICB0byBmaXggdGhlIFB5dGhvbiBiaW5kaW5ncyBidWlsZCBvbiBXaW5kb3dzIChTdOlwaGFuZSBCaWRvdWwpCgpGcmkgTm92IDIyIDIyOjQxOjM0IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogYWRkZWQgb3B0aW9uIGZvciBweXRob24gYmluZGluZ3MKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBhZGRlZCBtb3JlIGV4cG9ydHMKCkZyaSBOb3YgMjIgMTg6NTA6MzQgQ0VUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9NYWtlZmlsZS5taW5ndzogZml4ZWQgdW5yZXNvbHZlZCBzeW1ib2xzIHdoZW4gbGlua2luZyB3aXRoCgkgIHB0aHJlYWRzCgkqIHdpbjMyL3dpbmNlLyo6IGFwcGxpZWQgdXBkYXRlcyB0byBXaW5kb3dzIENFIHBvcnQgZnJvbSBKYXZpZXIKCkZyaSBOb3YgMjIgMTU6NTE6MjIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi40LjI4CgkqIGxpYnhtbC5zcGVjLmluIGRvYy9NYWtlZmlsZS5hbTogc29tZSBjbGVhbnVwCgkqIGRvYy8qOiB1cGRhdGVkIHRoZSBuZXdzIGFuZCByZWdlbmVyYXRlZC4KCkZyaSBOb3YgMjIgMTQ6MTU6MTQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBmaW5hbCB0b3VjaCBhdCBjbG9zaW5nICM4NzIzNSA8L3A+IGVuZCB0YWdzCgkgIG5lZWQgdG8gYmUgZ2VuZXJhdGVkLgoJKiByZXN1bHQvSFRNTC9jZl8xMjguaHRtbCByZXN1bHQvSFRNTC90ZXN0Mi5odG1sIHJlc3VsdC9IVE1ML3Rlc3QzLmh0bWw6CgkgIHRoaXMgY2hhbmdlIHNsaWdodGx5IHRoZSBvdXRwdXQgb2YgYSBmZXcgdGVzdHMKCSogZG9jLyo6IHJlZ2VuZXJhdGVkCgpGcmkgTm92IDIyIDEzOjI2OjE5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jOiBmaXhpbmcgYnVnICM5OTE5MCB3aGVuIFVURjggZG9jdW1lbnQgYXJlCgkgIHBhcnNlZCB1c2luZyB0aGUgcHJvZ3Jlc3NpdmUgcGFyc2VyIGFuZCB0aGUgZW5kIG9mIHRoZSBjaHVuawoJICBpcyBpbiB0aGUgbWlkZGxlIG9mIGFuIFVURjggbXVsdGlieXRlIGNoYXJhY3Rlci4KCkZyaSBOb3YgMjIgMTM6MTM6MDAgSEtUIDIwMDIgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB0aHJlYWRzLmM6IGZpeGVkIGluaXRpYWxpemF0aW9uIHByb2JsZW0gaW4geG1sTmV3R2xvYmFsU3RhdGUKCSAgd2hpY2ggd2FzIGNhdXNpbmcgY3Jhc2guCgkqIGdsb2JhbHMuYzogcmVtb3ZlZCBkdXBsaWNhdGUgY2FsbCB0byBpbml0eG1sRGVmYXVsdFNBWEhhbmRsZXIKCSAgaW4geG1sSW5pdGlhbGl6ZUdsb2JhbFN0YXRlLgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogY2xlYW5lZCB1cCBjdHh0LT5zYXggaW5pdGlhbGlzYXRpb24uCgkKVGh1IE5vdiAyMSAxNTowNTo0NSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBtb2RpZmllZCB0aGUgZXhpc3RpbmcgQVBJcwoJICB0byBoYW5kbGUgWEhUTUwxIHNlcmlhbGl6YXRpb24gcnVsZXMgYXV0b21hdGljYWxseSwgYWxzbyBhZGQKCSAgeG1sSXNYSFRNTCgpIHRvIGxpYnhtbDIgQVBJLiBTb21lIHR3ZWFraW5nIHRvIG1ha2Ugc3VyZQoJICBsaWJ4c2x0IHNlcmlhbGl6YXRpb24gdXNlcyBpdCB3aGVuIG5lZWRlZCB3aXRob3V0IGNoYW5naW5nCgkgIHRoZSBsaWJyYXJ5IEFQSS4KCSogdGVzdC94aHRtbDEgcmVzdWx0L25vZW50L3hodG1sMSByZXN1bHQvdmFsaWQveGh0bWwxLnhodG1sCgkgIHJlc3VsdC94aHRtbDE6IGFkZGVkIGEgbmV3IHRlc3Qgc3BlY2lmaWNhbGx5IGZvciB4aHRtbDEgb3V0cHV0CgkgIGFuZCB1cGRhdGVkIHRoZSByZXN1bHQgb2Ygb25lIFhIVE1MMSB0ZXN0CgpXZWQgTm92IDIwIDE0OjI0OjU2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmMgcGFyc2VySW50ZXJuYWxzLmMgZW5jb2RpbmcuYzogZml4ZWQgIzk5MDgyCgkgIGZvciB4aTppbmNsdWRlIGVuY29kaW5nPSIuLi4iIHN1cHBvcnQgb24gdGV4dCBpbmNsdWRlcy4KCSogcmVzdWx0L1hJbmNsdWRlL3RzdGVuY29kaW5nLnhtbCB0ZXN0L1hJbmNsdWRlL2RvY3MvdHN0ZW5jb2RpbmcueG1sCgkgIHRlc3QvWEluY2x1ZGUvZW50cy9pc29sYXRpbi50eHQgOiBhZGRlZCBhIHNwZWNpZmljIHJlZ3Jlc3Npb24gdGVzdAoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBmaXhlZCB0aGUgZ2VuZXJhdG9yCgkgIHRoZSBuZXcgc2V0IG9mIGNvbW1lbnRzIGdlbmVyYXRlZCBmb3IgZG9jL2xpYnhtbDItYXBpLnhtbCB3ZXJlCgkgIGJyZWFraW5nIHRoZSBweXRob24gZ2VuZXJhdGlvbi4KClR1ZSBOb3YgMTkgMjM6MjU6NDcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL01ha2VmaWxlLmFtOiByZXBhaXIgc29tZSBwcm9ibGVtIGlmIGd0ay1kb2MgZmFpbCBvciBzdWNoCgkqIGNvbmZpZ3VyZS5pbjogcGF0Y2ggZm9yIFNvbGFyaXMgb24gbmV3IGF1dG9jb25mIGNsb3NlcyAjOTg4ODAgCgkqIGRvYy9wYXJzZWRlY2wucHk6IHJlcGFpciB0aGUgZnJpZ2dpbmcgQVBJIGJ1aWxkaW5nIHNjcmlwdCwKCSAgZGlkIEkgc2F5IHRoYXQgcHl0aG9uIHhtbGxpYiBzdWNrcyA/CgkqIGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL2xpYnhtbDItcmVmcy54bWw6IHJlZ2VuZXJhdGVkLCByZW9yZGVyaW5nCgkgIGFuZCBzb21lIGNvbW1lbnQgYXJlIG5vIG1vcmUgdHJ1bmNhdGVkLgoKVHVlIE5vdiAxOSAwOTowOTowNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogTWFydGluIFN0b2lsb3YgcG9pbnRlZCBvdXQgYSBwb3RlbnRpYWwgbGVhayBpbgoJICB4bWxDcmVhdGVNZW1vcnlQYXJzZXJDdHh0CgpNb24gTm92IDE4IDE2OjA1OjUxIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgYnVnICM5ODg3OSBhIGNvcm5lciBjYXNlIHdoZW4gMCBpcwoJICBpbmNsdWRlZCBpbiBIVE1MIGRvY3VtZW50cyBhbmQgdXNpbmcgdGhlIHB1c2ggcGFyc2VyLgoKTW9uIE5vdiAxOCAwMDoxMToyNCBDRVQgMjAwMiBFUkRJIEdlcmdvIDxjYWN0dXNAY2FjdHVzLnJ1bGV6Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiAoUFlUSE9OX1NJVEVfUEFDS0FHRVMpOiBJZiAtLXdpdGgtcHl0aG9uIGlzCgkgIHNwZWNpZmllZCwgbG9vayBmb3IgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBub3QganVzdCBpbiB0aGUKCSAgc3BlY2lmaWVkIHJvb3QgYnV0IGFsc28gaW4gdGhlIHNwZWNpZmllZCBsb2NhdGlvbi4gRml4ZXMgIzk4ODI1CgpTdW4gTm92IDE3IDIzOjM2OjA2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYzogZml4aW5nIGJ1ZyAjOTg3OTIgLCBub2RlIG1heSBoYXZlIG5vIGRvYwoJICBhbmQgZGVyZWZlcmVuY2luZyB3aXRob3V0IGNoZWNraW5nIGFpbid0IGdvb2QgLi4uCgpTdW4gTm92IDE3IDEwOjI1OjQzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIHJlbGVhc2UgMi40LjI3CgkqIGRvYy8qIDogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcwoJKiBkb2MvTWFrZWZpbGUuYW0gbGlieG1sLnNwZWMuaW46IHRyeSB0byBtYWtlIHN1cmUgdGhlIHR1dG9yaWFsCgkgIGFuZCBhbGwgdGhlIGRvY3MgYXJlIGFjdHVhbGx5IHBhY2thZ2VkIGFuZCBpbiB0aGUgZmluYWwgUlBNcwoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogcmVzdG9yZQoJICB4bWxsaW50IC0tcmVjb3ZlciBmZWF0dXJlLgoKU2F0IE5vdiAxNiAxNjozMDoyNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyB4cGF0aC5jOiBmaXhpbmcgIzk2OTI1IHdpY2ggd2FzIGFsc28gZGVwZW5kZW50IG9uIHRoZQoJICBwcm9jZXNzaW5nIG9mIHBhcnNlZCBlbnRpdGllcywgYW5kIFhQYXRoIGNvbXB1dGF0aW9uIG9uIHN1c3RpdHVlZAoJICBlbnRpdGllcy4KCSogdGVzdFhQYXRoLmM6IG1ha2Ugc3VyZSBlbnRpdGllcyBhcmUgc3Vic3RpdHVlZC4KCkZyaSBOb3YgMTUgMTY6MjI6NTQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkICM5NjU5NCwgd2hpY2ggd2FzIHRvdGFsbHkgZGVwZW5kZW50IG9uIHRoZSAKCSAgcHJvY2Vzc2luZyBvZiBpbnRlcm5hbCBwYXJzZWQgZW50aXRpZXMsIHdoaWNoIGhhZCB0byBiZSBjaGFuZ2VkLgoKRnJpIE5vdiAxNSAxMjoxNjowNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtOgoJICB0cnlpbmcgdG8gZml4IGJ1ZyAjOTg1MTcgYWJvdXQgYnVpbGRpbmcgb3V0c2lkZSB0aGUgc291cmNlIHRyZWUKCSogZG9jL3htbC5odG1sIGRvYy9GQVEuaHRtbDogZml4ZWQgdGhlIGxpbmsgdG8gbGliaWNvbnYgIzk0NTg1CgpUaHUgTm92IDE0IDE4OjQxOjU1IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogY2xlYW51cAoJKiB3aW4zMi9NYWtlZmlsZS5taW5ndzogaW50ZWdyYXRlZCBtaW5ndyBpbiBKU2NyaXB0IGNvbmZpZ3VyZQoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiBtb2RpZmllZCB0byBhbGxvdyBtaW5ndyBjb2V4aXN0ZW5jZQoJKiB3aW4zMi9jb25maWd1cmUuanM6IGludGVncmF0ZWQgbWluZ3cKCSogd2luMzIvUmVhZG1lLnR4dDogY2xlYW51cAoKVHVlIE5vdiAxMiAyMjowNjo0NSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IHN0cmVuZ3RoZW4gdGhlIGd1YXJkIGluIHRoZSBQb3AgbWFjcm9zLAoJICBsaWtlIGluIHRoZSBYTUwgcGFyc2VyLCBjbG9zZXMgYnVnICM5NzMxNQoKVHVlIE5vdiAxMiAyMTo1NjozOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogZml4ZWQgYnVnICM5ODMzOCAsIGZhdGFsRXJyb3IgU0FYCgkgIGNhbGxiYWNrIGlzIG5ldmVyIHVzZWQuCgpUdWUgTm92IDEyIDEzOjMyOjUwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jOiBmaXhlZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIFNBWCBzdHJ1Y3R1cmUKCSAgd2hpY2ggd2FzIGJyZWFraW5nIHhzbHRwcm9jCgkqIHhwYXRoLmM6IHBhdGNoIGZyb20gUGV0ciBQYWphcyBmb3IgQ0RBVEEgbm9kZXMKCSogdHJlZS5jOiBwYXRjaCBmcm9tIFBldHIgUGFqYXMgaW1wcm92aW5nIHhtbEdldE5vZGVQYXRoKCkKCSogcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IHBhdGNoIGZyb20gUGV0ZXIgSm9uZXMKCSAgcmVtb3ZpbmcgYSBsZWFrIGluIHhtbFNBWFBhcnNlTWVtb3J5KCkgYW5kIGFkZGluZyB0aGUKCSAgZnVuY3Rpb24geG1sU0FYUGFyc2VNZW1vcnlXaXRoRGF0YSgpCgpNb24gTm92IDExIDIwOjQ3OjAzIE1TVCAyMDAyIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJYWRkaW5nIHBkZiBvZiB0dXRvcmlhbCwgY2hhbmdpbmcgd2ViIHBhZ2UgdG8gbGluayB0byBpdAoJKiBkb2MvdHV0b3JpYWwveG1sdHV0b3JpYWwucGRmCgkqIGRvYy94bWwuaHRtbAoJKiBkb2MvZG9jcy5odG1sCgpTdW4gTm92IDEwIDIwOjQ4OjU3IE1TVCAyMDAyIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvdHV0b3JpYWwvYXIwMXMwOC5odG1sCglhZGRpbmcgZmlsZSB3aGF0IEkgZm9yZ290IGZvciB0dXRvcmlhbAoKClN1biBOb3YgMTAgMjA6MzM6MTMgTVNUIDIwMDIgSm9obiBGbGVjayAgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJQWRkaW5nIGVuY29kaW5nIGRpc2N1c3Npb24gdG8gdHV0b3JpYWwKCUFkZGVkOgoJKiBkb2MvdHV0b3JpYWwvaW1hZ2VzLyoucG5nOiBEb2NCb29rIGFkbW9uaXRpb24gaW1hZ2UgZmlsZXMKCSogZG9jL3R1dG9yaWFsL2FwZi5odG1sLCBhcGcuaHRtbDogbmV3IGdlbmVyYXRlZCBodG1sCgkqIGRvYy90dXRvcmlhbC9pbmNsdWRlY29udmVydC5jOiBjb252ZXJzaW9uIGNvZGUgZW50aXR5IGZpbGUKCWNoYW5nZWQ6CgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC54bWw6IERvY0Jvb2sgb3JpZ2luYWwKCSogZG9jL3R1dG9yaWFsLyouaHRtbDogZ2VuZXJhdGVkIGh0bWwKCkZyaSBOb3YgIDggMTc6NTk6MzIgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogaW5jbHVkZS9saWJ4bWwvKi5oOiByZXRpcmVkIHhtbHdpbjMydmVyc2lvbi5oCgkqIGRvYy9NYWtlZmlsZS5hbTogcmV0aXJlZCB4bWx3aW4zMnZlcnNpb24uaAoJKiB3aW4zMi9jb25maWd1cmUuanM6IHJldGlyZWQgeG1sd2luMzJ2ZXJzaW9uLmgKCkZyaSBOb3YgIDggMTY6NTU6NDcgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBleHBvcnRlZCBhZGRpdGlvbmFsIHN5bWJvbHMKCSogaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IGV4cG9ydGVkIHRoZSByZXN0IG9mIHRoZSB4bWxNZW0qIAoJICBzaXN0ZXJob29kCgpGcmkgTm92ICA4IDE2OjA4OjEzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYzogZml4ZWQgYSB0eXBvIHBvaW50ZWQgb3V0IGJ5IElnb3IKCSogeHBhdGguYzogdHJ5IHRvIHNwZWVkIHVwIG5vZGUgY29tcGFyZSB1c2luZyBsaW5lIG51bWJlcnMKCSAgaWYgYXZhaWxhYmxlLgoKVGh1IE5vdiAgNyAxNToxNjowMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IG1ha2UgeG1sRnJlZU5vZGUoKSBoYW5kbGUgYXR0cmlidXRlcyBjb3JyZWN0bHkuCgpXZWQgTm92ICA2IDIzOjUxOjExIENFVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogY2F0YWxvZy5jOiBjb21wbGV0ZWQgdGhlICM5Njk2MyBmaXgsIGFzIHJlcG9ydGVkIGJ5IEthcmwKCSAgRWljaHdhbGRlcgoKV2VkIE5vdiAgNiAxNjo0ODo0NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cG9pbnRlci5jOiB0cmllZCB0byBmaXggYnVnICM5Nzg1MiByZXBvcnRlZCBieSBOaWNvbGFzIE5vZmZrZQoKU3VuIE5vdiAgMyAxMDo0Mzo0NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogc3dpdGNoZWQgdGhlIG9yZGVyIG9mIGEgY291cGxlIG9mIGluY2x1ZGVzCgkgIHRvIGZpeCBidWdzICM5NzEwMAoKVGh1IE9jdCAzMSAxNzoxMTo0NiBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiBjYXRhbG9nLmM6IGZpeGVkIGJ1ZyAjOTY5NjMsIHJldmVydGVkIHRvIHRoZSBvbGQgYmVoYXZpb3VyIG9mCgkgIHhtbExvYWRDYXRhbG9ncyB0aGF0IHVzZWQgdG8gc2VwYXJhdGUgZGlyZWN0b3JpZXMgd2l0aCBhICc6Jy4KClRodSBPY3QgMzEgMTY6NTU6MjEgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogdGhyZWFkcy5jOiBpbXByb3ZlbWVudHMgdG8gdGhlIFdpbmRvd3Mtc2lkZSBvZiB0aHJlYWQgaGFuZGxpbmcKCSogdGVzdFRocmVhZHMuYzogY29uZGl0aW9uYWxseSBleGNsdWRlZCB1bmlzdGQuaAoJKiB0ZXN0VGhyYWRzV2luMzIuYzogYnJva2Ugb3ZlcmxvbmcgbGluZXMKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBhZGFwdGVkIHRocmVhZC1yZWxhdGVkIG1hY3JvcyB0byB0aGUgbmV3CgkgIHNjaGVtZSBhbmQgZm9yIHB0aHJlYWRzIG9uIFdpbmRvd3MKCSogd2luMzIvTWFrZWZpbGUubXN2YzogaW50cm9kdWNlZCBhIG1vcmUgZmxleGlibGUgdGhyZWFkIGJ1aWxkLCAKCSAgYWRkZWQgdGVzdFRocmVhZHNbV2luMzJdLmMgdG8gdGhlIGJ1aWxkCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogaW50cm9kdWNlZCBhIG1vcmUgZmxleGlibGUgdGhyZWFkIGNvbmZpZwoKMjAwMi0xMC0zMSAgSm9obiBGbGVjayAgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sLmh0bWwgKGFuZCwgYnkgaW1wbGljYXRpb24sIEZBUS5odG1sKQoJYWRkZWQgVVRGLTggY29udmVyc2Fpb24gRkFRIGZyb20gTWFyY3VzIExhYmliIElza2FuZGVyCgpUdWUgT2N0IDI5IDE4OjMyOjMzIENFVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogY29uZmlndXJlLmluOiByZW1vdmVkIHhtbHdpbjMydmVyc2lvbi5oCgkqIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtOiByZW1vdmVkIHhtbHdpbjMydmVyc2lvbi5oCgpNb24gT2N0IDI4IDE0OjAxOjI5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYXBwbGllZCBwYXRjaCBmcm9tIEJyaWFuIFN0YWZmb3JkIHRvIGZpeCBhIGJ1ZwoJICBpbiB4bWxSZWNvbmNpbGlhdGVOcygpCgpNb24gT2N0IDI4IDEzOjUxOjU1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYXBwbGllZCBwYXRjaCBmcm9tIENocmlzdGlhbiBHbGFobiB0byBhbGxvdwoJICB4bWxOZXdDaGlsZCgpIG9uIGRvY3VtZW50IGZyYWdtZW50IG5vZGVzCgpTYXQgT2N0IDI2IDE1OjI3OjAwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogQ2hyaXN0aWFuIEdsYWhuIGZvdW5kIGEgcHJvYmxlbSB3aXRoIGEgcmVjZW50CgkgIHBhdGNoIHRvIHhtbFBhcnNlQmFsYW5jZWRDaHVua01lbW9yeVJlY292ZXIoKQoJKiB4bWxzY2hlbWFzLmM6IENoYXJsZXMgQm96ZW1hbiBmaXhlZCBzb21lIFNjaGVtYXMgdmFsaWRhdGlvbgoJICBwcm9ibGVtcwoJKiByZXN1bHQvc2NoZW1hcy9lbGVtKiByZXN1bHQvc2NoZW1hcy9zZXEqIHRlc3Qvc2NoZW1hcy5lbGVtKgoJICB0ZXN0L3NjaGVtYXMvc2VxKjogYWRkZWQgdGhlIHRlc3QgY2FzZXMgZnJvbSBDaGFybGVzCgpXZWQgT2N0IDIzIDE2OjQyOjI5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjb25maWcuaC5pbiBsaWJ4bWwuc3BlYy5pbiBkb2MvTWFrZWZpbGUuYW06CgkgIHNlcmlvdXMgY2xlYW51cCBvZiB0aGUgc3BlYyBmaWxlIGFuZCBhc3NvY2lhdGVkIGNoYW5nZXMKCSAgaW4gdGhlIE1ha2VmaWxlcy4KCSogdmFsaWQuYzogdHJ5IHRvIHJlbW92ZSBzb21lIHdhcm5pbmdzIG9uIHg4Nl82NAoKV2VkIE9jdCAyMyAxMDo1Mzo0MiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9NYWtlZmlsZS5hbTogYWRkZWQgd2luc29ja2NvbXBhdC5oIHRvIEVYVFJBX0RJU1QgdG8KCSAgZml4IGJ1ZyAjOTY1ODYKClR1ZSBPY3QgMjIgMjE6MTM6MDYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogTWlraGFpbCBTb2dyaW5lIHBvaW50ZWQgb3V0IGEgYnVnIGluIEhUTUwKCSAgcGFyc2luZywgYXBwbGllZCBoaXMgcGF0Y2gKCSogcmVzdWx0L0hUTUwvYXR0cmVudHMuaHRtbCByZXN1bHQvSFRNTC9hdHRyZW50cy5odG1sLmVycgoJICByZXN1bHQvSFRNTC9hdHRyZW50cy5odG1sLnNheCB0ZXN0L0hUTUwvYXR0cmVudHMuaHRtbDoKCSAgYWRkZWQgdGhlIHRlc3QgYW5kIHJlc3VsdCBjYXNlIHByb3ZpZGVkIGJ5IE1pa2hhaWwgU29ncmluZQoKVHVlIE9jdCAyMiAxOTozMzoyMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdm1zL2J1aWxkX2xpYnhtbC5jb20gdm1zL2NvbmZpZy52bXMgdm1zL3JlYWRtZS52bXMKCSAgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmgKCSAgaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGluY2x1ZGUvbGlieG1sL3htbElPLmgKCSAgSFRNTHBhcnNlci5jIGNhdGFsb2cuYyBkZWJ1Z1hNTC5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jCgkgIHRyZWUuYyB0cmlvZGVmLmggdHJpb25hbi5jIHVyaS5jIHhtbElPLmMgeHBhdGguYzoKCSAgQXBwbGllZCB0aGUgVk1TIHVwZGF0ZSBwYXRjaCBmcm9tIENyYWlnIEEuIEJlcnJ5CgkqIGRvYy8qLmh0bWw6IHVwZGF0ZQoKVHVlIE9jdCAyMiAxNjoyNzozMSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvZW5jb2RpbmcuaCBlbmNvZGluZy5jOiBtYWRlIHhtbEdldFVURjhDaGFyIHB1YmxpYwoKVHVlIE9jdCAyMiAxNjoyNToxOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYzogYWRkaW5nIGEgZ3JlcCBjb21tYW5kIHRvIC0tc2hlbGwgaW4geG1sbGludAoJICBmb3IgVC5WLiBSYW1hbgoKVHVlIE9jdCAyMiAxNjoyMzo1NyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sY2F0YWxvZy5jOiB0cmllZCB0byBmaXggc29tZSBvZiB0aGUgcHJvYmxlbSB3aXRoIC0tc2dtbAoKTW9uIE9jdCAyMSAwOTo1NzoxMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHRyaWVkIHRvIGZpeCBidWcgIzkxNTAwIHdoZXJlIGRvYy0+Y2hpbGRyZW4gbWF5CgkgIGJlIG92ZXJyaWRlbiBieSBhIGNhbGwgdG8geG1sUGFyc2VCYWxhbmNlZENodW5rTWVtb3J5KCkKCk1vbiBPY3QgMjEgMDk6MDQ6MzIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogdHJpZWQgdG8gZml4IGJ1ZyAjOTA5NDUgdy5yLnQuIHBhcnNpbmcgb2Ygc3lzdGVtCgkgIGlkZW50aWZpZXJzIGluIFNHTUwgY2F0YWxvZ3MgY29udGFpbmluZyAnJicKClN1biBPY3QgMjAgMjM6MzE6NDcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi90eXBlcy5jOiBmaXhlZCBidWdzIHdoZW4gcGFzc2luZyByZXN1bHQgdmFsdWUgdHJlZQoJICB0byBQeXRob24gZnVuY3Rpb25zLgoKRnJpIE9jdCAxOCAxMzoxODo1MyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgdGhlIHJlbGVhc2Ugb2YgMi40LjI2CgkqIGRvYy8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2N1bWVudGF0aW9uCgpXZWQgT2N0IDE2IDIwOjAxOjQ2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSBYTUwgTmFtZXNwYWNlIGNvbXBsaWFuY2UgYnVnIHJlcG9ydGVkIGJ5CgkgIEFsZXhhbmRlciBHcmltYWxvdnNreQoKV2VkIE9jdCAxNiAxNzoxODo0MiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogZml4ZWQgc2VyaWFsaXphdGlvbiBvZiBzY3JpcHQgYW5kIHN0eWxlIHdoZW4KCSAgdGhleSBhcmUgbm90IGxvd2VyY2FzZSAoaS5lLiBhZGRlZCB1c2luZyB0aGUgQVBJIHRvIHRoZSB0cmVlKS4KCldlZCBPY3QgMTYgMTY6MzE6MDUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IG1ha2UgeG1sVmFsaWRhdGVEb2N1bWVudCBlbWl0IGEgd2FybmluZyBtc2cgaWYgdGhlcmUKCSAgaXMgbm8gRFRELCBwb2ludGVkIGJ5IENocmlzdGlhbiBHbGFobgoKV2VkIE9jdCAxNiAxNjowNTozOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jOiBmaXhlZCB0aGUgdmFsaWRhdGlvbiBvZiBzZXF1ZW5jZXMKCSAgY29udGVudCBtb2RlbCB3aGVuIHNvbWUgb2YgdGhlIGJsb2NrcyBoYXZlIG1pbiBvciBtYXgsIGFuZCBhIGNvdXBsZQoJICBvZiBidWdzIGZvdW5kIGluIHRoZSBwcm9jZXNzLgoJKiByZXN1bHQvc2NoZW1hcy9saXN0MCogdGVzdC9zY2hlbWFzL2xpc3QwKjogYWRkZWQgc29tZSBzcGVjaWZpYwoJICByZWdyZXNzaW9uIHRlc3RzCgpUdWUgT2N0IDE1IDEyOjQxOjAxIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBSRUFETUU6IHVwZGF0ZWQgdGhlIGNvbnRhY3QgaW5mb3JtYXRpb25zCgpUdWUgT2N0IDE1IDEwOjM1OjU3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogdXNlIHRlc3QgLWYgaW5zdGVhZCBvZiB0ZXN0IC1lIHNpbmNlIFNvbGFyaXMgL2Jpbi9zaAoJICBtaXNzZXMgaXQsIHJlcG9ydGVkIGJ5IFBldGVyIEJyYXkuCgpNb24gT2N0IDE0IDE3OjM3OjMyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGludmVzdGlnYXRpbmcgeG1sTm9kZUdldENvbnRlbnQoKSBvbiBuYW1lc3BhY2Ugbm9kZXMKCSAgYW5kIHJlbW92ZWQgYSBmZXcgd2FybmluZ3MKCk1vbiBPY3QgMTQgMTM6MTI6NTUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBDaHJpc3RpYW4gR2xhaG4gZm91bmQgYSBzbWFsbCBidWcgaW4gdGhlIHB1c2ggcGFyc2VyLgoJKiB4bWxJTy5jIGluY2x1ZGUvbGlieG1sL3htbElPLmg6IGNsZWFuZWQgdXAgYW5kIG1hZGUgeG1sQ2hlY2tGaWxlbmFtZQoJICBwdWJsaWMKCldlZCBPY3QgIDkgMjM6MTE6MDIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzLmg6IGFkZGVkCgkgIHhtbFNjaGVtYU5ld01lbVBhcnNlckN0eHQgdG8gcGFyc2UgYSBzY2hlbWFzIGZyb20gYSBtZW1vcnkgYXJlYQoJKiB0ZXN0U2NoZW1hcy5jOiBhZGRlZCAtLW1lbW9yeSB0byB0ZXN0IHRoZSBuZXcgaW50ZXJmYWNlCgpXZWQgT2N0ICA5IDE2OjIyOjU0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvaW5kZXgucHkgZG9jL3NlYXJjaC5waHA6IGludGVncmF0ZWQgdGhlIFhTTFQgaW5kZXhpbmcsCgkgIGEgZmV3IGZpeGVkIGluIHRoZSBpbmRleGVyLCBhZGRlZCBhIHNjb3BlIHNlbGVjdGlvbiBhdCB0aGUKCSAgc2VhcmNoIGxldmVsLgoKV2VkIE9jdCAgOSAxMjoxODozNyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogSm9lIE1hcmN1cyBDbGFya2UgcmVwb3J0ZWQgYSBzZWdmYXVsdCBvbiBGQnNkIAoJICB0aGlzIHdhcyBkdWUgdG8gdW5pbml0aWFsaXplZCBwYXJ0cyBvZiB0aGUgdmFsaWRhdGlvbiBjb250ZXh0CgpUdWUgT2N0ICA4IDIzOjI0OjIwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gTWFyayBWYWtvYyBleGNlcHQgdGhlIEFQSQoJICBjaGFuZ2UsIHByZXNlcnZlZCBpdC4KCSogZG9jLyo6IHVwZGF0ZWQgdGhlIGRvY3MgdG8gcG9pbnQgdG8gdGhlIHNlYXJjaCBlbmdpbmUgZm9yCgkgIGluZm9ybWF0aW9uIGxvb2t1cCBvciBiZWZvcmUgYnVnL2hlbHAgcmVwb3J0cy4KClR1ZSBPY3QgIDggMTg6NTM6MzEgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9pbmRleC5weSBkb2Mvc2VhcmNoLnBocDogYWRkZWQgbWFpbGluZy1saXN0IGFyY2hpdmVzCgkgIGluZGV4aW5nIGFuZCBsb29rdXAKClR1ZSBPY3QgIDggMTA6MjU6MDcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogcGF0Y2ggZnJvbSBNYXJrIFZha29jIHRvIGZpeCB4bWxOb2RlR2V0UGF0aCgpCgpNb24gT2N0ICA3IDEzOjEyOjAzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvaW5kZXgucHk6IGltcHJvdmVkIEhUTUwgaW5kZXhpbmcKCSogZG9jL3NlYXJjaC5waHA6IG1ha2UgdGhlIHF1ZXJpZXMgYWxzbyBsb29rdXAgdGhlIEhUTUwgYmFzZWQgaW5kZXhlcwoKU3VuIE9jdCAgNiAyMzo1MDoyOSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2luZGV4LnB5OiBhZGRlZCBIVE1MIHBhZ2UgaW5kZXhpbmcgCgpGcmkgT2N0ICA0IDE1OjMzOjU1IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHhtbElPLmM6IGV4dGVuZGVkIFdpbmRvd3MgcGF0aCBub3JtYWxpc2F0aW9uIHRvIGZpeCB0aGUgYmFzZQoJICBwcm9ibGVtIGluIGxpYnhzbHQuCgkqIGNhdGFsb2cuYzogZml4ZWQgbGlzdCBoYW5kbGluZyBpbiBYTUxfQ0FUQUxPR19GSUxFUwoKRnJpIE9jdCAgNCAxMzo0MzowMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogdHlwby9idWcgZm91bmQgYnkgQ2hyaXN0aWFuIEdsYWhuCgpTdW4gU2VwIDI5IDE5OjQ0OjEwIENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHhtbElPLmM6IGFwcGxpZWQgV2luZG93cyBDRSBwYXRjaCBmcm9tIEphdmllci4KCSogd2luMzIvd2luY2U6IG5ldyBkaXJlY3RvcnksIGNvbnRhaW5zIHN1cHBvcnQgZm9yIHRoZSBQb2NrZXRQQwoJICB3aXRoIFdpbmRvd3MgQ0UgZnJvbSBKYXZpZXIuCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogcmVvcmdhbmlzZWQsIHJlbW92ZWQgZHVwbGljYXRlIAoJICBkZWZpbml0aW9ucyBhbmQgYXBwbGllZCBXaW5DRSBwYXRjaCBmcm9tIEphdmllci4KCSogaW5jbHVkZS93c29ja2NvbXBhdC5oOiBuZXcgZmlsZSwgbm93IGNvbnRhaW5zIFdpblNvY2sKCSAgY29tcGF0aWJpbGl0eSBtYWNyb3MuCgkqIHdpbjMyL01ha2VmaWxlLm1zdmM6IGludHJvZHVjZWQgZG91YmxlLXJ1biBjb21waWxhdGlvbi4KClRodSBTZXAgMjYgMTk6NDg6MDYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogcHJlcGFyaW5nIHJlbGVhc2UKCSAgb2YgMi40LjI1CgkqIGRvYy8qOiB1cGRhdGVkIGFuZCByZWdlbmVyYXRlZCB0ZWggZG9jcyBhbmQgd2ViIHBhZ2VzLgoKVGh1IFNlcCAyNiAxNzozMzo0NiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmMgdmFsaWQuYyBpbmNsdWRlL2xpYnhtbC92YWxpZC5oOiBmaXhlZCBidWcgIzkyNTE4IHZhbGlkYXRpb24KCSAgZXJyb3Igd2VyZSBub3QgY292ZXJpbmcgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucy4KCSogcmVzdWx0L3ZhbGlkL2RpYS54bWwgdGVzdC92YWxpZC9kaWEueG1sOiB0aGUgdGVzdCB3YXNuJ3QgdmFsaWQsCgkgIGl0IHdhcyBtaXNzaW5nIHRoZSBhdHRyaWJ1dGUgZGVjbGFyYXRpb24gZm9yIHRoZSBuYW1lc3BhY2UKCSogcmVzdWx0L1ZDL05TMzogdGhlIGZpeCBub3cgcmVwb3J0IGJyZWFrYWdlcyBpbiB0aGF0IHRlc3QKClRodSBTZXAgMjYgMTQ6Mzk6MDcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmM6IGZpeGluZyBidWcgIzk0MjQxIG9uIEhUTUwgYm9vbGVhbiBhdHRyaWJ1dGVzCgpUaHUgU2VwIDI2IDE0OjI1OjMzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvKjogYWRkZWQgdGhlIDMgbmV3IG1vZHVsZXMgeG1scmVnZXhwIHhtbGF1dG9tYXRhIGFuZCB4bWx1bmljb2RlCgkgIGFuZCByZWdlbmVyYXRlZCB0aGUgZG9jcyBhbmQgd2ViIHNpdGUKClRodSBTZXAgMjYgMTE6NDU6NDIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmMgeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jIHhwYXRoLmM6IG1ha2Ugc3VyZQoJICBBVFRSSUJVVEVfVU5VU0VEIGlzIGFsd2F5cyBwdXQgYWZ0ZXIgdGhlIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbiwKCSAgbm90IGJlZm9yZQoKVGh1IFNlcCAyNiAxMTozMzoyOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sMmNsYXNzLnR4dDogZml4ZWQgYSBzdHVwaWQgZXJyb3IKCSAgYnJlYWtpbmcgdGhlIHB5dGhvbiBBUEkKClRodSBTZXAgMjYgMDA6MzE6NDYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyaW8uYyB0cmlvLmggdHJpb2RlZi5oIHRyaW9uYW4uYyB0cmlvbmFuLmggdHJpb3AuaAoJICB0cmlvc3RyLmMgdHJpb3N0ci5oOiBhcHBsaWVkIGEgdHJpbyB1cGRhdGUgcGF0Y2ggZnJvbSAKCSAgQmpvcm4gUmVlc2Ugd2hpY2ggc2hvdWxkIHdvcmsgd2l0aCBNaW5HVwoKVGh1IFNlcCAyNiAwMDoyMToxOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBpbXByb3Zpbmcgc29tZSBkb2N1bWVudGF0aW9uIGNvbW1lbnRzCgkqIHhtbHJlZ2V4cC5jOiBmb3VuZCBhbmQgZml4ZWQgYSBtZW0gbGVhayB3aXRoIHB5dGhvbiByZWdyZXNzaW9uIHRlc3RzCgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBkb2MgYW5kIHRoZSBBUEkgWE1MIGZpbGUgaW5jbHVkaW5nIHRoZSAKCSAgeG1scmVnZXhwLmggeG1sYXV0b21hdGEuaCBhbmQgeG1sdW5pY29kZS5oIGhlYWRlcnMKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sMmNsYXNzLnR4dCBweXRob24vbGlieG1sX3dyYXAuaAoJICBweXRob24vdHlwZXMuYzogYWRkZWQgYWNjZXNzIHRvIHRoZSBYTUwgU2NoZW1hcyByZWdleHBzIGZyb20KCSAgcHl0aG9uCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvcmVnZXhwLnB5OiBhZGRlZCBhIAoJICBzaW1wbGUgcmVnZXhwIGJpbmRpbmdzIHRlc3QKClR1ZSBTZXAgMjQgMDg6MTA6NDggTURUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWwuaHRtbDoKCSAgZml4aW5nIGZ0cCBsaW5rcyAtIHRoYW5rcyB0byBWaXRhbHkgT3N0YW5pbgoKVHVlIFNlcCAyNCAxNjowODoxNyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVnZXhwLmM6IGZpeGVkIHRoZSBkYXRhIGNhbGxiYWNrIG9uIHRyYW5zaXRpb24gZnVuY3Rpb25hbGl0eQoJICB3aGljaCB3YXMgYnJva2VuIHdoZW4gdXNpbmcgdGhlIGNvbXBhY3QgZm9ybQoJKiByZXN1bHQvc2NoZW1hcy8qOiB1cGRhdGVkIHRoZSByZXN1bHRzLCBsZXNzIHZlcmJvc2UsIGFsbCB0ZXN0cwoJICBwYXNzIGxpa2UgYmVmb3JlCgkqIERPQ0JwYXJzZXIuYyB0ZXN0QXV0b21hdGEuYyB0ZXN0QzE0Ti5jIHRlc3RTY2hlbWFzLmMgdGVzdFRocmVhZHMuYwoJICB0ZXN0WFBhdGguYyB2YWxpZC5jIHhpbmNsdWRlLmMgeG1sbGludC5jIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYwoJICB4bWxzY2hlbWFzdHlwZXMuYyB4cGF0aC5jIHB5dGhvbi9saWJ4bWwuYzogcmVtb3ZlZCBhIGJ1bmNoIG9mCgkgIGFubm95aW5nIHdhcm5pbmdzCgkqIHhwYXRoLmM6IHRyeSB0byBwcm92aWRlIGJldHRlciBlcnJvciByZXBvcnQgd2hlbiBwb3NzaWJsZQoKU2F0IFNlcCAyMSAxNDo1NjozNyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGZpeGVkIGEgYnJlYWthZ2UgcmFpc2VkIGJ5IEphY29iCgpGcmkgU2VwIDIwIDIwOjA4OjE4IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogYWRkZWQgSEFWRV9FUlJOT19IIGRlZmluaXRpb24gZm9yIHBhcnRzCgkgIHdoaWNoIGRvbid0IHVzZSBzb2NrZXRzCgpGcmkgU2VwIDIwIDE4OjQwOjUwIENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL01ha2VmaWxlLm1zdmM6IGFwcGxpZWQgemxpYiBwYXRjaCBmcm9tIERhbmllbCBHZWhyaWdlcgoJKiB3aW4zMi9jb25maWd1cmUuanM6IGFwcGxpZWQgemxpYiBwYXRjaCBmcm9tIERhbmllbCBHZWhyaWdlcgoKRnJpIFNlcCAyMCAxNTo0MDoxNCBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9jb25maWd1cmUuanM6IGFwcGxpZWQgdGhlIHBhdGNoIGZyb20gTWFyayBWYWtvYyBmb3IgCgkgIHJlZ2V4cCBzdXBwb3J0CgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogYXBwbGllZCB0aGUgcGF0Y2ggZnJvbSBNYXJrIFZha29jCgkgIGZvciByZWdleHAgc3VwcG9ydAoJCkZyaSBTZXAgMjAgMTU6MzU6MzMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBhcyBwb2ludGVkIGJ5IElnb3IgRmxvYXQgYW5kIERvdWJsZQoJICBwYXJzaW5nIGFpbid0IGZpbmlzaGVkIHlldAoKRnJpIFNlcCAyMCAxNDowMDoxNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluOiB0cnlpbmcgdG8gZml4ICM4ODQxMiBieSBieXBhc3NpbmcKCSAgYWxsIHRoZSBweXRob24gc3ViZGlyIGlmIHB5dGhvbiBhaW4ndCBkZXRlY3RlZAoKVGh1IFNlcCAxOSAyMTo0Njo1MyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjoKCSAgbWFkZSBjb25maWd1cmluZyB3aXRoIHJlZ2V4cHMvYXV0b21hdGEvdW5pY29kZSB0aGUgZGVmYXVsdAoJICBidXQgd2l0aG91dCBzY2hlbWFzIEFUTQoJKiB0ZXN0UmVnZXhwLmMgdmFsaWQuYyB4bWxyZWdleHAuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWdleHAuaDoKCSAgZml4ZWQgdGhlIHJlZ2V4cCBiYXNlZCBEVEQgdmFsaWRhdGlvbiBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5CgkgIHByb2JsZW0gYnkgc3dpdGNoaW5nIHRvIGEgY29tcGFjdCBmb3JtIGZvciBkZXRlcm1pbmlzdCByZWdleHBzCgkgIGFuZCBkZXRlY3RpbmcgdGhlIGRldGVybWluaXNtIHByb3BlcnR5IGluIHRoZSBwcm9jZXNzLiBTZWVtcwoJICBhcyBmYXN0IGFzIHRoZSBvbGQgRFREIHZhbGlkYXRpb24gc3BlY2lmaWMgZW5naW5lIDotKSBkZXNwaXRlCgkgIHRoZSByZWdleHAgYnVpbHQgYW5kIGNvbXBhY3Rpb24gcHJvY2Vzcy4KCldlZCBTZXAgMTggMTg6Mjc6MjYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGRldGVybWluaXNtIGlzIGRlYnVnZ2VkLCBuZXcgRFREIGNoZWNraW5nIGNvZGUgbm93IHdvcmtzCgkgIGJ1dCB4bWxGQUNvbXB1dGVzRGV0ZXJtaW5pc20gdGFrZXMgZmFyIHRvbyBtdWNoIENQVSBhbmQgdGhlIHdob2xlCgkgIHNldCB1c3VlcyB0b28gbXVjaCBtZW1vcnkgdG8gYmUgcmVhbGx5IHVzYWJsZSBhcy1pcwoKV2VkIFNlcCAxOCAwMDo1NDozMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXhlZCBhbm90aGVyIHN0dXBpZCBidWcgaW4geG1sR2V0Tm9kZVBhdGgoKQoJKiB4bWxsaW50LmM6IC0tdmVyc2lvbiBub3cgcmVwb3J0IHRoZSBvcHRpb25zIGNvbXBpbGVkIGluCgpUdWUgU2VwIDE3IDIzOjQ4OjA3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IHNtYWxsIGNsZWFudXAKCSogdmFsaWQuYyB4bWxyZWdleHAuYzogc3dpdGNoZWQgRFREIHZhbGlkYXRpb24gdG8gdXNlIG9ubHkgcmVnZXhwCgkgIHdoZW4gY29uZmlndXJlZCB3aXRoIHRoZW0uIEEgYml0IG9mIGRlYnVnZ2luZyBhcm91bmQgdGhlIGRldGVybWluaXNtCgkgIGNoZWNrcyBpcyBzdGlsbCBuZWVkZWQKClR1ZSBTZXAgMTcgMjE6MjI6MjUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWxfd3JhcC5oOiBzdHVwaWQgYnVnIGZvdW5kIGJ5IG1hdHRhbUBuZXRjb3Vycmllci5jb20KClR1ZSBTZXAgMTcgMTk6NTg6MjYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IHNtYWxsIHBvcnRhYmlsaXR5IGdsaXRjaCBmaXhlZC4KCk1vbiBTZXAgMTcgMTI6Mzg6MDggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBpbmNvbXBsZXRlIHN0ZXBzIGZvciByZWFsL2RvdWJsZSBzdXBwb3J0CgkqIHRlc3RBdXRvbWF0YS5jIGluY2x1ZGUvbGlieG1sL3htbGF1dG9tYXRhLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1scmVnZXhwLmg6IGF2b2lkaW5nIGEgY29tcGlsYXRpb24gcHJvYmxlbQoJKiB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmg6IHN0YXJ0aW5nIHRoZSB3b3JrIHRvd2FyZCB1c2luZwoJICB0aGUgcmVnZXhwcyBmb3IgYWN0dWFsIERURCB2YWxpZGF0aW9uCgpGcmkgU2VwIDEzIDE2OjQ2OjE0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBoYXNoLmM6IGNvc21ldGljIGNsZWFudXAKCSogdmFsaWQuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmggaW5jbHVkZS9saWJ4bWwvdmFsaWQuaDogc3RhcnRlZCAKCSAgaW50ZWdyYXRpbmcgYSBEVEQgdmFsaWRhdGlvbiBsYXllciBiYXNlZCBvbiB0aGUgcmVnZXhwcwoKVGh1IFNlcCAxMiAxODowMToyOSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jOiBmaXhlZCBhIGJ1ZyByZXBvcnRlZCBieSBKZWZmIEdvZmYsCgkgIHRoZSBkZXRlcm1pbmlzbSB3YXMgdGVzdGVkIGJlZm9yZSBlbGltaW5hdGluZyB0aGUgZXBzaWxvbgoJICB0cmFuc2l0aW9ucyA6LSgKClRodSBTZXAgMTIgMTY6NTc6NDUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHkKCSAgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQKCSAgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL3R5cGVzLmM6IHVwZGF0ZWQgdGhlIHB5dGhvbgoJICBiaW5kaW5ncywgYWRkZWQgY29kZSBmb3IgZWFzaWVyIEZpbGUgSS9PLCBhbmQgdGhlIGFiaWxpdHkgdG8KCSAgZGVmaW5lIGEgcmVzb2x2ZXIgZnJvbSBQeXRob24gZml4aW5nIGJ1ZyAjOTE2MzUKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9pbmJ1Zi5weQoJICBweXRob24vdGVzdHMvb3V0YnVmLnB5IHB5dGhvbi90ZXN0cy9wdXNoU0FYaHRtbC5weQoJICBweXRob24vdGVzdHMvcmVzb2x2ZXIucHkgcHl0aG9uL3Rlc3RzL3NlcmlhbGl6ZS5weTogdXBkYXRlZAoJICBhbmQgYXVnbWVudGVkIHRoZSBzZXQgb2YgUHl0aG9uIHRlc3RzLgoKVHVlIFNlcCAxMCAyMTowNToyOCBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9jb25maWd1cmUuanM6IGFkZGVkIG1vcmUgcmVhZG1lIGluZm8gZm9yIHRoZSBiaW5hcnkKCSAgcGFja2FnZS4KCQpUdWUgU2VwIDEwIDE0OjE1OjE4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBmaXhlZCBhIHN0dXBpZCBvdXQgb2YgYm91bmQgYXJyYXkgZXJyb3IKClR1ZSBTZXAgMTAgMTM6MDk6MTQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbElPLmggeG1sSU8uYyBwYXJzZXIuYyBIVE1McGFyc2VyLmMgRE9DQnBhcnNlci5jOgoJICBtZXNzaW5nIGFyb3VuZCB3aXRoIHN1cHBvcnQgZm9yIFdpbmRvd3MgcGF0aCwgY2xlYW51cHMsCgkgIHRyeWluZyB0byBpZGVudGlmeSBhbmQgZml4IHRoZSB2YXJpb3VzIGNvZGUgcGF0aCB0byB0aGUKCSAgZmlsZW5hbWUgYWNjZXNzLiBBZGRlZCB4bWxOb3JtYWxpemVXaW5kb3dzUGF0aCgpCgpUaHUgU2VwICA1IDE2OjE5OjE4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlcnJvci5jIHZhbGlkLmM6IHdvcmtpbmcgb24gYmV0dGVyIGVycm9yIHJlcG9ydGluZyBvZiB2YWxpZGl0eQoJICBlcnJvcnMsIGVzcGVjaWFsbHkgcHJvdmlkaW5nIGFuIGFjY3VyYXRlIGNvbnRleHQuCgkqIHJlc3VsdC92YWxpZC94bGluay54bWwuZXJyIHJlc3VsdC92YWxpZC9yc3MueG1sLmVycjogYmV0dGVyCgkgIGVycm9yIHJlcG9ydHMgaW4gdGhvc2UgY2FzZXMuCgpUaHUgU2VwICA1IDEzOjI5OjQ3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBET0NCcGFyc2VyLmMgSFRNTHBhcnNlci5jIGMxNG4uYyBlbnRpdGllcy5jIGxpc3QuYwoJICBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB4bWxJTy5jOiBnZXQgcmlkIG9mIGFsbCB0aGUgCgkgIHBlcnJvcigpIGNhbGxzIG1hZGUgaW4gdGhlIGxpYnJhcnkgZXhlY3V0aW9uIHBhdGhzLiBUaGlzCgkgIHNob3VsZCBmaXggYm90aCAjOTIwNTkgYW5kICM5MjM4NQoKVGh1IFNlcCAgNSAxMzoxMzoxNyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBtZW1vcnkgbGVhayByZXBvcnRpbmcgd2FzIGJyb2tlbiBhZnRlciBhIGNoYW5nZQoJICBvZiB0aGUgcHJlcHJvY2Vzc29yIHN5bWJvbCB1c2VkIHRvIGFjdGl2YXRlIGl0LgoKVGh1IFNlcCAgNSAxMzoxMDo1NyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiB0cnkgdG8gbWFrZSB0aGUgY29weSBmdW5jdGlvbiB3b3JrIGZvciBub2RlIG9mCgkgIHR5cGUgWE1MX0RPQ1VNRU5UX0ZSQUdfTk9ERSwgdGhleSBhcmUgb25seSBjcmVhdGVkIGJ5IHRoZQoJICBET00gbGF5ZXJzIHRob3VnaCwgbm90IGxpYnhtbDIgaXRzZWxmLgoKVGh1IFNlcCAgNSAxMjo1NzozOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogdHJ5IHRvIHByb3ZpZGUgZmlsZSBhbmQgbGluZSBpbmZvcm1hdGlvbnMsIG5vdCBhbGwKCSAgbWVzc2FnZXMgYXJlIGNvdmVyZWQsIGJ1dCBpdCdzIGEgKGdvb2QpIHN0YXJ0CgpUaHUgU2VwICA1IDEyOjQ5OjM1IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiByZWltcGxlbWVudGVkIGEgbGFyZ2UgcGFydCBvZiB0aGUgWEluY2x1ZGUKCSAgcHJvY2Vzc29yLCB0cnlpbmcgdG8gbWluaW1pemUgcmVzb3VyY2VzIHVzZWQsIEphbWVzIEhlbnN0cmlkZ2UKCSAgcHJvdmlkZWQgYSBodWdlIHRlc3QgY2FzZSB3aGljaCB3YXMgZXhoaWJpdGluZyBzZXZlcmUgbWVtb3J5CgkgIGNvbnN1bXB0aW9uIHByb2JsZW1zLgoKVGh1IFNlcCAgNSAxMDowNzoxMyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtOiBhcHBsaWVkIHBhdGNoIGZyb20gQ2hyaXN0b3BoZSBNZXJsZXQgdG8KCSAgcmVlc3RhYmxpc2ggREVTVERJUgoKV2VkIFNlcCAgNCAxNDoxMzozNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW46IGZpeGVzIGxpYmFyeSBwYXRoIGZvciB4ODZfNjQgQU1ECgpUdWUgU2VwICAzIDIxOjE0OjE5IE1EVCAyMDAyIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvdHV0b3JpYWwvaW5jbHVkZWtleXdvcmQuYwoJKiBkb2MvdHV0b3JpYWwveG1sdHV0b3JpYWwueG1sOgoJKHBsdXMgcmVzdWx0aW5nIGdlbmVyYXRlZCBodG1sIGZpbGVzKQoJZml4aW5nIG9uZSBzcG90IEkgbWlzc2VkIGluIHRoZSB0dXRvcmlhbCB3aGVyZSBJIGhhZG4ndCBmcmVlZAoJbWVtb3J5IHByb3Blcmx5CgpTYXQgQXVnIDMxIDE5OjMxOjE3IE1EVCAyMDAyIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvdHV0b3JpYWwvaW5jbHVkZWFkZGF0dHJpYnV0ZS5jCgkqIGRvYy90dXRvcmlhbC9pbmNsdWRlYWRka2V5d29yZC5jCgkqIGRvYy90dXRvcmlhbC9pbmNsdWRlZ2V0YXR0cmlidXRlLmMKCSogZG9jL3R1dG9yaWFsL2luY2x1ZGVrZXl3b3JkLmMKCSogZG9jL3R1dG9yaWFsL3htbHR1dG9yaWFsLnhtbAoJKiBkb2MvdHV0b3JpYWwvKi5odG1sOgoJdXBkYXRlIHR1dG9yaWFsIHRvIHByb3Blcmx5IGZyZWUgbWVtb3J5ICh0aGFua3MgdG8gQ2hyaXN0b3BoZXIKCVIuIEhhcnJpcyBmb3IgcG9pbnRpbmcgb3V0IHRoYXQgdGhpcyBuZWVkcyB0byBiZSBkb25lKQoJKiBkb2MvdHV0b3JpYWwvaW1hZ2VzL2NhbGxvdXRzLyoucG5nOgoJYWRkZWQgaW1hZ2UgZmlsZXMgc28gdGhlIGNhbGxvdXRzIGFyZSBncmFwaGljYWwsIG1ha2luZyBpdAoJZWFzaWVyIHRvIHJlYWQgKCB1c2UgIi0tcGFyYW0gY2FsbG91dC5ncmFwaGljcyAxIiB0byBnZW5lcmF0ZQoJaHRtbCB3aXRoIGdyYXBoaWNhbCBjYWxsb3V0cykKCQpXZWQgQXVnIDI4IDEzOjQ0OjU0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvTGlieG1sMi1Mb2dvLTE4MHgxNjguZ2lmIGRvYy9MaWJ4bWwyLUxvZ28tOTB4MzQuZ2lmOgoJICBuaWNlIGxvZ29zIGdlbmVyYXRlZCBieSBNYXJjIExpeWFuYWdlCgkqIGRvYy9zaXRlLnhzbCAqLmh0bWw6IGNoYW5nZWQgdGhlIHN0eWxlc2hlZXQgdG8gc2hvdyB0aGUgbmV3CgkgIGxvZ28gYW5kIHJlZ2VuZXJhdGVkIHRoZSBwYWdlcwoKU3VuIEF1ZyAyNSAxNjozODowNSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogaGFuZGxlIFdpbmRvd3Mgc2VwZWNpZmljIGZpbGU6Ly9sb2NhbGhvc3QvIHNlbWFudGljIC4uLgoKVGh1IEF1ZyAyMiAyMjowMzoxOSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogcG9zc2libGUgbWVtIGxlYWsgcGF0Y2ggZnJvbSBKYXNvbiBBZGFtcwoKVGh1IEF1ZyAyMiAxNzoyNzozMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogaW50ZWdyYXRlZCB4Zjplc2NhcGUtdXJpKCkgZnJvbSBXZXNsZXkgVGVycHN0cmEKCSAgaW4gdGhlIFhRdWVyeSBuYW1lc3BhY2UKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi40LjI0CgkqIGRvYy8qLmh0bWw6IHVwZGF0ZWQgdGhlIHdlYiBwYWdlcwoKVGh1IEF1ZyAyMiAxNjoxOTo0MiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weTogY2xvc2luZyBidWcgIzg1MjU4IGJ5IGdlbmVyYXRpbmcgY29uZGl0aW9uYWwKCSAgY29tcGlsZSBjaGVjayB0byBhdm9pZCBsaW5raW5nIHRvIHJvdXRpbmVzIG5vdCBjb25maWd1cmVkIGluLgoKMjAwMi0wOC0yMiAgSGF2b2MgUGVubmluZ3RvbiAgPGhwQHBvYm94LmNvbT4KCgkqIGF1dG9nZW4uc2g6IHVwZGF0ZSBlcnJvciBtZXNzYWdlIGZvciBtaXNzaW5nIGF1dG9tYWtlCgpUaHUgQXVnIDIyIDExOjQ1OjUwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW06IHR5cG8gaW4gdGFyZ2V0IG5hbWUgcmVzdWx0ZWQgaW4gbGlieG1sMi5weQoJICB0byBub3QgYmUgcmVidWlsdC4gZml4ZWQgREVTVERJUiBzaW1pbGFyeSB0byB0aGUgbGlieHNsdCBvbmUuCgpUaHUgQXVnIDIyIDA5OjE1OjAwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi93aW4zMi9NYWtlZmlsZS5taW5ndzogdXBkYXRlZCB3aXRoIHZlcnNpb24gZnJvbSAKCSAgRWxpemFiZXRoIEJhcmhhbSBhdCBodHRwOi8vc29nZ3l0cm91c2Vycy5uZXQvcmVwb3NpdG9yeS8KClR1ZSBBdWcgMjAgMTY6NDA6NDggQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvTWFrZWZpbGUubXN2YzogYWRkZWQgdGhlIHByZWZpeCBsb2NhdGlvbiB0byB0aGUgaW5jbHVkZQoJYW5kIGxpYiBzZWFyY2ggcGF0aC4KCQoyMDAyLTA4LTE4ICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcG9ib3guY29tPgoKCSogYXV0b2dlbi5zaDogaGFyZGNvZGUgYWNsb2NhbC0xLjQvYXV0b21ha2UtMS40IHNvIHRoYXQgdXNlcnMgd2l0aAoJYm90aCBhdXRvbWFrZSAxLjYgYW5kIDEuNCBpbnN0YWxsZWQgZ2V0IHRoZSByaWdodCBhdXRvbWFrZS4gTWVhbnMKCWNvbXBpbGF0aW9uIGZyb20gQ1ZTIHdpbGwgbm93IHJlcXVpcmUgdGhlIGxhdGVzdCBhdXRvbWFrZSAxLjQKCXJlbGVhc2UsIG9yIG1hbnVhbGx5IGNyZWF0aW5nIHN5bWxpbmtzIGNhbGxlZCAiYXV0b21ha2UtMS40IiBhbmQKCSJhY2xvY2FsLTEuNCIKCldlZCBBdWcgMTQgMTg6NTQ6MTkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBweXRob24vTWFrZWZpbGUuYW06IG1vcmUgQU1EIDY0IGluZHVjZWQgY2hhbmdlcyBmcm9tCgkgIEZyZWRlcmljIENyb3phdAoKV2VkIEF1ZyAxNCAxNjo0Mzo1MyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogb29wcyBJIHdhcyBtaXNzaW5nIHRoZSB4bWw6YmFzZSBmaXh1cCB0b28KCSogcmVzdWx0L1hJbmNsdWRlLyoueG1sOiB0aGlzIGFkZHMgeG1sOmJhc2UgYXR0cmlidXRlcyB0byBtb3N0CgkgIHJlc3VsdHMgb2YgdGhlIHRlc3RzCgpXZWQgQXVnIDE0IDE2OjA1OjM3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBxdWljayBidXQgYXBwYXJlbnRseSB3b3JraW5nIGltcGxlbWVudGF0aW9uIG9mCgkgIHhpOmZhbGxiYWNrLCBzaG91bGQgY2xvc2UgYnVnICM4OTY4NAoJKiBNYWtlZmlsZS5hbSB0ZXN0L1hJbmNsdWRlL2RvY3MvZmFsbGJhY2sueG1sIAoJICByZXN1bHQvWEluY2x1ZGUvZmFsbGJhY2sueG1sOiBhZGRlZCBhIGJhc2ljIHRlc3QgZm9yIGZhbGxiYWNrLAoJICBhbmQgcnVuIHdpdGggLS1ub3dhcm5pbmcgdG8gYXZvaWQgYSBzcHVyaW91cyB3YXJuaW5nCgkqIGNvbmZpZ3VyZS5pbjogYXBwbGllZCBwYXRjaCBmcm9tIEZyZWRlcmljIENyb3phdCBmb3IgcHl0aG9uCgkgIGJpbmRpbmdzIG9uIEFNRCA2NGJpdHMgbWFjaGluZXMuCgpXZWQgQXVnIDE0IDEwOjQ3OjQ2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogeG1sU0FYVXNlclBhcnNlTWVtb3J5KCkgcmVhbGx5IG91Z2h0IHRvIGZhaWwgaWYKCSAgdGhlIGNhbGxlciBkb24ndCBwYXNzIGEgU0FYIGNhbGxiYWNrIGJsb2NrLgoKV2VkIEF1ZyAxNCAxMDoyOTowMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBhcHBsaWVkIHRoZSBzYW1lIGZpeCBmb3IgdGhlIFhNTC0xLjAgbmFtZXNwYWNlIHRvCgkgIHhtbFNlYXJjaE5zQnlIcmVmKCkgYXMgd2FzIGRvbmUgZm9yIHhtbFNlYXJjaE5zKCkKCk1vbiBBdWcgMTIgMTY6NTI6MDggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC4zOiBzbWFsbCBjbGVhbnVwIG9mIHRoZSBtYW4gcGFnZQoJKiBIVE1MdHJlZS5jOiBmaXhlZCBhIHBvdGVudGlhbCBwcm9ibGVtIHJhaXNlZCBieSBQZXRyIFZhbmRyb3ZlYwoJICB3aGVuIHNlcmlhbGl6aW5nIEhSRUYgYXR0cmlidXRlcyBnZW5lcmF0ZWQgYnkgWFNMVC4KCk1vbiBBdWcgMTIgMTU6MjQ6MDUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmMgaW5jbHVkZS9saWJ4bWwvSFRNTHRyZWUuaDogaW50ZWdyYXRlZCBhIGNsZWFuZWQgdXAKCSAgdmVyc2lvbiBvZiBNYXJjIExpeWFuYWdlJyBwYXRjaCBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzIGluIEhUTUwKCSAgb3V0cHV0CgpNb24gQXVnIDEyIDE0OjExOjU5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vdGVzdHMvc2VyaWFsaXplLnB5OiBmaXhlZCB0aGUgdGVzdCByZXN1bHRzLCBpbmRlbnRpbmcKCSAgYmVoYXZpb3VyIGNoYW5nZWQgc2xpZ2h0bHkKClRodSBBdWcgIDggMTE6MDA6MjYgMjAwMiAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiB3aW4zMi9kc3AvbGlieG1sMi5kZWYuc3JjIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogYWRkZWQKCW5ldyBjMTRuIGZ1bmN0aW9uIHRvIFdpbmRvd3MgZGVmIGZpbGVzCgkKRnJpIEF1ZyAgMiAxNjo0Njo0NiAyMDAyICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIGMxNG4uYzogZml4ZWQgYSBtZW1vcnkgbGVhayBpbiBjMTRuIGNvZGUKClNhdCBBdWcgIDMgMDA6MTU6MDYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBhZGRpbmcgYSBuZXcgQVBJIGZvciBDaHJpc3RpYW4KCSAgR2xhaG46IHhtbFBhcnNlQmFsYW5jZWRDaHVua01lbW9yeVJlY292ZXIKCSogdmFsaWQuYzogcGF0Y2ggZnJvbSBSaWNrIEpvbmVzIGZvciBzb21lIGdyYW1tYXIgY2xlYW51cCBpbgoJICB2YWxpZGF0aW9uIG1lc3NhZ2VzCgkqIHJlc3VsdC9WQy8qIHJlc3VsdC92YWxpZC8qOiB0aGlzIHNsaWdodGx5IGNoYW5nZSBzb21lIG9mIHRoZQoJICByZWdyZXNzaW9uIHRlc3RzIG91dHB1dHMKClRodSBBdWcgIDEgMTQ6NTA6MjggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogdHJ5aW5nIHRvIGZpeCBhIHByb2JsZW0gaW4gbmFtZXNwYWNlZCBhdHRyaWJ1dGUgaGFuZGxpbmcKCSAgcmFpc2VkIGJ5IENocmlzdGlhbiBHbGFobgoKVGh1IEF1ZyAgMSAxMjoxNzozMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYyBpbmNsdWRlL2xpYnhtbC9lbmNvZGluZy5oOiBPcGVuaW5nIHRoZSBpbnRlcmZhY2UKCSAgeG1sTmV3Q2hhckVuY29kaW5nSGFuZGxlciBhcyByZXF1ZXN0ZWQgaW4gIzg5NDE1CgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL3NldHVwLnB5LmluOiBhcHBsaWVkIGNsZWFudXAKCSAgcGF0Y2hlcyBmcm9tIE1hcmMtQW5kcmUgTGVtYnVyZwoJKiB0cmVlLmM6IGZpeGluZyBidWcgIzg5MzMyIG9uIGEgc3BlY2lmaWMgY2FzZSBvZiBsb29zaW5nIAoJICB0aGUgWE1MLTEuMCBuYW1lc3BhY2Ugb24geG1sOnh4eCBhdHRyaWJ1dGVzCgpXZWQgSnVsIDMxIDIzOjI3OjQyIDIwMDIgIEFsZWtzZXkgU2FuaW4gIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogYzE0bi5jIGluY2x1ZGUvbGlieG1sL2MxNG4uaDogZml4ZWQgb25lIG1vcmUgYzE0biArIG5hbWVzcGFjZXMKCWNvcm5lciBjYXNlIGZyb20gbmV3IE1lcmxpbidzIHRlc3Qgc3VpdGUgYW5kIGFkZGVkIGEgY2FsbGJhY2sKCXRoYXQgd2lsbCBiZSB1c2VkIHRvIGltcHJvdmUgeG1sc2VjIHBlcmZvcm1hbmNlCgkKCk1vbiBKdWwgMjkgMTg6MjI6MDAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmM6IHRyeWluZyB0byBmaXggdGhlIDxzdHlsZT4gZXNjYXBpbmcgcHJvYmxlbSBpbgoJICBIVE1MIHNlcmlhbGl6YXRpb24gYnVnICM4OTM0MgoKVGh1IEp1bCAyNSAwMTozMzo0NyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL3htbC5odG1sIGRvYy8qLmh0bWw6IGFwcGxpZWQgc3ludGF4IHBhdGNoIGZyb20gUmljayBKb25lcwoJICBhbmQgcmVidWlsdCB0aGUgd2ViIHNpdGUuCgpNb24gSnVsIDIyIDExOjA0OjQ4IFBEVCAyMDAyICBBbGVrc2V5IFNhbmluIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBhZGRlZCBfcHJpdmF0ZSBtZW1iZXIgdG8geG1sTnMgc3RydWN0CgpTdW4gSnVsIDIxIDE3OjQ4OjQ3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGluZyBidWcgIzg0ODc2IGJhc2VkIG9uIHRoZSB4bWwgd29ya2luZwoJICBjb2RlLgoKU3VuIEp1bCAyMSAxOToxNTowMCBIS1QgMjAwMiBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbTogZW5oYW5jZWQgdG8gZml4IGJ1ZyA3MjAxMiAoZXJyb3JzCgkgIHdoZW4gdXNpbmcgJy1qWCcgbWFrZSBwYXJhbWV0ZXIpCgpGcmkgSnVsIDE5IDE2OjM1OjAwIEhLVCAyMDAyIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogc21hbGwgYWRkaXRpb25hbCBlbmhhbmNlbWVudCBmb3IgYm9vbGVhbnMKCSAgY29tcGFyZWQgdG8gbm9kZXNldHMKCldlZCBKdWwgMTcgMTk6NDg6MTQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmM6IGNoYW5nZWQgdGhlIG9yZGVyIG9mIHRoZSBlbmNvZGluZyBkZWNsYXJhdGlvbgoJICBhdHRyaWJ1dGVzIGluIHRoZSBtZXRhIHRhZ3MgZHVlIHRvIGEgYnVnIGluIElFL01hYwoKRnJpIEp1bCAxMiAwODo0NTowMCBIS1QgMjAwMiBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IGVuaGFuY2VkIGhhbmRsaW5nIG9mIGJvb2xlYW5zIChlc3BlY2lhbGx5ICc9JwoJICBhbmQgJyE9JyBmb3Igbm9kZXNldHMpIC0gZml4ZXMgYnVnIDg1MjU2LiAgQWRkZWQgbmV3CgkgIHJvdXRpbmUgeG1sWFBhdGhOb3RFcXVhbFZhbHVlcyBmb3IgbW9yZSBwcm9wZXIgaGFuZGxpbmcKCSAgb2YgJyE9JyB3aGVuIG5vZGVzZXRzIGFyZSBpbnZvbHZlZC4KClRodSBKdWwgMTEgMjE6NDU6NTIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9NYWtlZmlsZS5hbTogZml4aW5nIFJlZCBIYXQgYnVnICM2ODYxNCBieSBhZGRpbmcgdGhlCgkgIGRvYy94bWxjYXRhbG9nX21hbi54bWwgdG8gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24KCldlZCBKdWwgMTAgMjE6MjY6MTMgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoJCgkqIHdpbjMyL01ha2VmaWxlLm1zdmM6IEFkZGVkIGEgY29weSAqLnBkYiB0byBpbnN0YWxsLCBmZXcgaGF2ZQoJICBhc2tlZCBmb3IgdGhpcy4KCQpTYXQgSnVsICA2IDIxOjU1OjU5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjQuMjMKCSogZG9jLyo6IHJlYnVpbHQgdGhlIGRvY3MKClNhdCBKdWwgIDYgMjE6MTE6MjAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhpbmcgYnVnICM4NDE2OSBieSBmaXhpbmcgdGhlCgkgIGNvbW1lbnQgb2YgeG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQgdG8gZGVzY3JpYmUgdGhlIAoJICBlbmNvZGluZyBkZXRlY3Rpb24gcGFyYW1ldGVycyBiZXR0ZXIuCgpTYXQgSnVsICA2IDE5OjQ0OjU2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXhpbmcgYnVnICM3OTMzMSBpbiBvbmUgcGF0aCB0aGUgbG9va3VwIGZvcgoJICBJRCBhdHRyaWJ1dGVzIG9uIGEgbmFtZXNwYWNlZCBub2RlIHdhc24ndCBoYW5kbGVkIGNvcnJlY3RseSA6LVwKCkZyaSBKdWwgIDUgMjA6MDc6NDMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogdHJ5aW5nIHRvIGZpeCA4NzIzNSBhYm91dCBkaXNjYXJkZWQgd2hpdGUKCSAgc3BhY2VzIGluIHRoZSBIVE1MIHBhcnNlci4KCSogcmVzdWx0L0hUTUwvKjogdGhpcyBjaGFuZ2VzIHRoZSBvdXRwdXQgb2YgYSBudW1iZXIgb2YgSFRNTAoJICByZWdyZXNzaW9uIHRlc3RzCgpNb24gSnVsICAxIDIzOjIzOjQxIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gUmljaGFyZCBKaW5rcyBmb3IgdGhlIG5hbWVzcGFjZQoJICBheGlzICsgZml4ZWQgYSBtZW1vcnkgZXJyb3IuCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jOiBhcHBsaWVkIHBhdGNoZXMgZnJvbSBQZXRlciBKYWNvYmkKCSAgcmVtb3ZpbmcgY3R4dC0+dG9rZW4gZm9yIGdvb2QuCgkqIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYzogZml4ZWQgYSBmZXcgbWVtb3J5IGxlYWtzCgkgIHBvcHBlZCBvdXQgYnkgdGhlIHJlZ3Jlc3Npb24gdGVzdHMuCgkqIE1ha2VmaWxlLmFtOiBwYXRjaCBmb3IgdGhyZWFkcyBtYWtlZmlsZSBmcm9tIEdhcnkgUGVubmluZ3RvbgoKRnJpIEp1biAyOCAxOTozODowMCBIS1QgMjAwMiBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IGVuaGFuY2VkIGJlaGF2aW91ciBvZiBwb3NpdGlvbigpIGFmdGVyIHVzYWdlIG9mCgkgIGV4cHJlc3Npb25zIGludm9sdmluZyBwcmVjZWRpbmctc2libGluZyAoZXQgYWwpLgoKVHVlIEp1biAxOCAwOTo1ODo0OCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaGFzaC5jOiBhcHBsaWVkIGEgcGF0Y2ggZnJvbSBQZXRlciBKYWNvYmkgdG8gc29sdmUgYSBwcm9ibGVtCgkgIHdoZW4gY29tcGlsaW5nIHdpdGggdGhlIFdhdGNvbSBDIG9uIFdpbjMyIAoJKiByZXN1bHQvc2NoZW1hcy8qLmVycjogdGhlIGNoYW5nZSBvZiBoYXNoaW5nIGFsZ28gZ2VuZXJhdGVkCgkgIHBlcm11dGF0aW9ucyBpbiB0aGUgb3V0cHV0CgpNb24gSnVuIDE3IDE5OjAyOjQ5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBoYXNoLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBTYW5kZXIgVmVzaWsgaW1wcm92aW5nIHRoZSBxdWFsaXR5IG9mCgkgIHRoZSBoYXNoIGZ1bmN0aW9uLgoKMjAwMi0wNi0xNCAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBET0NCcGFyc2VyLmMgSFRNTHBhcnNlci5jIGRlYnVnWE1MLmMgZW5jb2RpbmcuYwoJbmFub2Z0cC5jIG5hbm9odHRwLmMgcGFyc2VyLmMgdHJlZS5jIHVyaS5jIHhtbElPLmMKCXhtbGxpbnQuYyB4cGF0aC5jOiByZXBsYWNlZCBzcHJpbnRmKCkgd2l0aCBzbnByaW50ZigpCgl0byBwcmV2ZW50IHBvc3NpYmxlIGJ1ZmZlciBvdmVyZmxvdyAodGhlIGJ1ZyB3YXMgcG9pbnRlZAoJb3V0IGJ5IEFuanUgUHJlbWFjaGFuZHJhbikgCgpUaHUgSnVuIDEzIDE3OjMwOjI1IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogcmVtb3ZlZCBhbiB1bmluaXRpYWxpemVkIGRhdGEgZXJyb3IgcG9wcGVkIGJ5IHZhbGdyaW5kCgkgIG9uIFBFIHJlZmVyZW5jZXMKCldlZCBKdW4gMTIgMjE6Mzg6NDYgTURUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWwuaHRtbAoJYWRkaW5nIHR1dG9yaWFsIHJlZmVyZW5jZSB0byB0aGUgd2ViIHBhZ2UKCldlZCBKdW4gMTIgMjE6MjY6MDggTURUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC54bWwKCSogZG9jL3R1dG9yaWFsL2FyMDFzMDcuaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXBlLmh0bWwKCSogZG9jL3R1dG9yaWFsL2luY2x1ZGVnZXRhdHRyaWJ1dGUuYwoJYWRkaW5nIHNlY3Rpb24gdG8gdHV0b3JpYWwgYWJvdXQgcmV0cmlldmluZyBhbiBhdHRyaWJ1dGUKCXZhbHVlCgpUdWUgSnVuIDExIDEyOjA3OjA0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogYXBwbGllZCBhIGNvdXBsZSBvZiBwYXRjaGVzIGZyb20gUGV0ZXIgSmFjb2JpIHRvIHN0YXJ0CgkgIHRvIGdldCByaWQgb2YgY3R4dC0+dG9rZW4sIHdpdGggYSBwb3NzaWJsZSBzaWduaWZpY2FudCBzcGVlZAoJICBpbXByb3ZlbWVudCB0byBiZSBnYWluZWQgb25jZSBkb25lLiBCZXR0ZXIgY29tcGxpYW5jZSB3aXRoIFBFCgkgIHJlZmVyZW5jZXMgY29uc3RydWN0cyBpbiBEVERzIHRvby4KCSogdGVzdC92YWxpZC90WzAtOV0qIHJlc3VsdC92YWxpZC90WzAtOV0qOiBhZGRlZCBhIHNldCBvZiB0ZXN0cwoJICBmcm9tIFBldGVyIHRvbwoKVHVlIEp1biAxMSAwOToyNToxMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IEJhYmFrIFZhaGVkaXBvdXItS3VuemUgcmVwb3J0ZWQgdGhhdCBvcGVuVGFnIGluIAoJICB4bWxQYXJzZUVsZW1lbnQgd2FzIGxpa2VseSB0byBoYXZlIGJlZW4gZGVhbGxvY2F0ZWQgYXQgdGhlCgkgIHRpbWUgb2YgdGhlIHJlcG9ydCwgcG9zc2libHkgbGVhZGluZyB0byBzZWdmYXVsdC4gSnVzdCByZXBvcnQKCSAgdGhlIHRhZyBuYW1lIG5vdy4KCk1vbiBKdW4gMTAgMTg6MDA6MDIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHBhdGNoIGZyb20gUmljaGFyZCBKaW5rcyBmb3IgWFBhdGggc3Vic3RyaW5nKCkgZnVuY3Rpb24KCSogcmVzdWx0L1hQYXRoL2V4cHIvc3RyaW5ncyB0ZXN0L1hQYXRoL2V4cHIvc3RyaW5nczogbmV3IHNldCBvZiB0ZXN0cwoKMjAwMi0wNi0wNiAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiB4bWxJTy5jOiBwYXRjaCBmcm9tIFJhY2hlbCBIZXN0aWxvdyB0byBmaXggYnVnICM4NDM0MAoKV2VkIEp1biAgNSAxOToxNDo0OSBNRFQgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSpkb2MvRkFRLmh0bWwKCWZpeGluZyB0eXBvcyBpbiBGQVEsIHRoYW5rcyB0byBSb2JlcnQgRnVubmVsbCBmb3IgdGhlCgllZGl0aW5nIGhlbHAKCldlZCBKdW4gIDUgMTQ6NTA6MjQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE5FV1M6IGdvdCBjb21wbGFpbnRzIGZyb20gcnBtbGludCB0aGF0IGl0IHdhcyBlbXB0eQoKVHVlIEp1biAgNCAwOTowOToxOCBNRFQgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogYWRkZWQgZG9jL3R1dG9yaWFsLCBpbmNsdWRpbmc6CglhcGEuaHRtbAoJYXBiLmh0bWwKCWFwYy5odG1sCglhcGQuaHRtbAoJYXIwMXMwMi5odG1sCglhcjAxczAzLmh0bWwKCWFyMDFzMDQuaHRtbAoJYXIwMXMwNS5odG1sCglhcjAxczA2Lmh0bWwKCWluY2x1ZGVhZGRhdHRyaWJ1dGUuYwoJaW5jbHVkZWFkZGtleXdvcmQuYwoJaW5jbHVkZWtleXdvcmQuYwoJaW5jbHVkZXN0b3J5LnhtbAoJaW5kZXguaHRtbAoJeG1sdHV0b3JpYWwueG1sCglsaWJ4bWwgdHV0b3JpYWwsIGluY2x1ZGluZyBnZW5lcmF0ZWQgaHRtbAoKTW9uIEp1biAgMyAyMToyMToyNiAyMDAyICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIHJlc3VsdC9jMTRuL2V4Yy13aXRob3V0LWNvbW1lbnRzL21lcmxpbi1jMTRuLXR3by0qCgkgIHJlc3VsdC9jMTRuL3dpdGhvdXQtY29tbWVudHMvbWVybGluLWMxNG4tdHdvLSoKCSAgdGVzdC9jMTRuL2V4Yy13aXRob3V0LWNvbW1lbnRzL21lcmxpbi1jMTRuLXR3by0qCgkgIHRlc3QvYzE0bi93aXRob3V0LWNvbW1lbnRzL21lcmxpbi1jMTRuLXR3by0qCgkgIHRlc3RDMTROLmMgTWFrZWZpbGUuYW06IGFkZGVkIG1lcmxpbi1jMTRuLXR3by50YXIuZ3ogdGVzdHMgZm9yIAoJYzE0bi9leGMtYzE0biBhbmQgc2xpZ2h0bHkgbW9kaWZpZWQgdGVzdCBzY3JpcHQgdG8gaGFuZGxlCgl0aGVzZSB0ZXN0IGNhc2VzCgkqIGMxNG4uYzogZml4ZWQgYnVncyBmb3IgY29tcGxpY2F0ZWQgbm9kZXMgc2V0IChuYW1lc3BhY2UKCXdpdGhvdXQgbm9kZSBhbmQgb3RoZXJzIGZyb20gbWVybGluLWMxNG4tdHdvLnRhci5neikKCSogaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaCB3aW4zMi9kc3AvbGlieG1sMi5kZWYuc3JjCgl3aW4zMi9saWJ4bWwyLmRlZi5zcmM6ICJvcGVuZWQiIHhtbFhQYXRoTm9kZVNldEZyZWVOcygpIGZ1bmN0aW9uCglmb3IgeG1sc2VjIHBlcmZvcm1hbmNlIHBhdGNoCgkqIHhwYXRoLmM6IGZpeGVkIHNlbGY6Om5vZGUoKSBmb3IgbmFtZXNwYWNlcyBhbmQgYXR0cmlidXRlcwoKTW9uIEp1biAwMyAwMDowNDoyMSAyMDAyIENoZW1hIENlbG9yaW8gPGNoZW1hQHhpbWlhbi5jb20+CgoJKiB0cmVlLmg6IGFkZGVkIHhtbERvY0Zvcm1hdER1bXAgd2hpY2ggaXMganVzdCBhcyB4bWxEb2NEdW1wCgkgIGJ1dCB3aXRoIHRoZSBmb3JtYXQgcGFyYW1ldGVyCgkqIHRyZWUuYzogbWFkZSB4bWxEb2NEdW1wIGEgd3JhcHBlciBhcnJvdW5kIHhtbERvY0Zvcm1hdER1bXAKCkZyaSBNYXkgMzEgMTI6MTY6NDggMjAwMiAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBNYWtlZmlsZS5hbTogdXBkYXRlZCBjMTRuIHRlc3RzIHN1aXRlCgkqIGMxNG4uYzogcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgZm9yIHByZXZpb3VzIGMxNG4gcGF0Y2gKCkZyaSBNYXkgMzEgMTE6NDc6MTIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBhbm90aGVyIHBlcm9mb3JtYW5jZSBwYXRjaCBmcm9tIFBldGVyIEphY29iaSwgdGhhdAoJICB0aW1lIG9uIHBhcnNpbmcgYXR0cmlidXRlIHZhbHVlcy4KClRodSBNYXkgMzAgMjM6MzQ6MjcgMjAwMiAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBNYWtlZmlsZS5hbSByZXN1bHQvYzE0bi8qIHRlc3QvYzE0bi8qOiBDMTROIHRlc3RzIGludGVncmF0ZWQKCWludG8gTGliWE1MMiB0ZXN0IHN1aXRlCgpUaHUgTWF5IDMwIDIxOjIzOjA2IDIwMDIgIEFsZWtzZXkgU2FuaW4gIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogYzE0bi5jOiBwcm9wYWdhdGluZyB4cGF0aCBhbmNlc3N0b3JzIG5vZGUgZml4IHRvIGMxNG4KCXBsdXMgc21hbGwgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgdG8gcmVkdWNlIG51bWJlciBvZgoJbWFsbG9jcwoJKiB4cGF0aC5jOiBmaXhlZCBhbmNlc3RvcnMgYXhpcyBwcm9jZXNzaW5nIGZvciBuYW1lc3BhY2Ugbm9kZXMKCldlZCBNYXkgMjkgMTA6MjE6MzkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jIHBhcnNlci5jIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IHBlcmZvcm1hbmNlIHBhdGNoIGZyb20KCSAgUGV0ZXIgSmFjb2JpCgpNb24gTWF5IDI3IDIzOjE4OjMzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjQuMjIKCk1vbiBNYXkgMjcgMTY6NDQ6MDQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyB3aW4zMi9saWJ4bWwyLmRlZi5zcmMgd2luMzIvZHNwL2xpYnhtbDIuZGVmLnNyYwoJICBpbmNsdWRlL2xpYnhtbC9IVE1McGFyc2VyLmg6IGZpeGluZyAjNzkzMzQgbWFraW5nIGh0bWxQYXJzZURvY3VtZW50CgkgIGEgcHVibGljIGVudHJ5IHBvaW50LgoJKiBkb2MvKjogcmVidWlsdCB0aGUgQVBJIGFuZCBkb2NzCgpNb24gTWF5IDI3IDE0OjE2OjI4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBwYXRjaCBmcm9tIFJpY2hhcmQgSmlua3MgdG8gZml4IGEgcHJvYmxlbSBpbnRyb2R1Y2VkCgkgIGluIHRoZSBwcmV2aW91cyBwYXRjaCBhbmQgcG9pbnRlZCBieSBOb3JtCgpGcmkgTWF5IDI0IDEzOjEwOjIyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbjogZml4aW5nIGJ1ZyAjODExMTIKCkZyaSBNYXkgMjQgMTM6MDM6MjQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jOiBmaXhpbmcgYnVnICM4Mjg0OAoKRnJpIE1heSAyNCAwOTo1NDo0OSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVzdWx0L2NhdGFsb2dzL215Y2F0YWxvZy5mdWxsOiBBbGVrc2V5J3MgY29tbWl0IGNoYW5nZWQgdGhlCgkgIG91dHB1dCBvZiBvbmUgY2F0YWxvZyB0ZXN0CgpGcmkgMjQgTWF5IDIwMDIgMTI6MTc6NDUgQU0gUERUIEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBnbG9iYWwuZGF0YSBnbG9iYWxzLmMgdHJlZS5jIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCAKCXdpbjMyL2xpYnhtbDIuZGVmLnNyYyB3aW4zMi9kc3AvbGlieG1sMi5kZWYuc3JjOiBjaGFuZ2VkCglkZWZhdWx0IHZhbHVlIGZvciBnbG9iYWwgcGFyYW1ldGVyIHhtbEluZGVudFRyZWVPdXRwdXQgdG8gMSBhbmQKCWludHJvZHVjZWQgbmV3IGdsb2JhbCBwYXJhbWV0ZXIgeG1sVHJlZUluZGVudFN0cmluZyAodGhlIHN0cmluZwoJdXNlZCB0byBkbyBvbmUtbGV2ZWwgaW5kZW50KSB3aXRoIGRlZmF1bHQgdmFsdWUgIiAgIiAoYXMgaXQgd2FzCglpbiB0cmVlLmMpCgpUaHUgTWF5IDIzIDEzOjU1OjU3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogTWVyaWpuIEJyb2VyZW4gcG9pbnRlZCBvdXQgYSBwcm9ibGVtIHdoZW4gY29tcGlsaW5nCgkgIHdpdGggdHJpbyBhbmQgc2NoZW1hcy4KCldlZCBNYXkgMjIgMTE6NTc6NDkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHBhdGNoIGZyb20gUmljaGFyZCBKaW5rcyB0byBmaXggdGhlIHByb2JsZW0gcmFpc2VkIGluCgkgIGh0dHA6Ly9tYWlsLmdub21lLm9yZy9hcmNoaXZlcy94bWwvMjAwMi1BcHJpbC9tc2cwMDI0Ni5odG0KCldlZCBNYXkgMjIgMDg6Mzg6MTkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogYSBiaXQgb2Ygd29yayBvbiBpbXBvcnQuCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBDaGFybGVzIEJvemVtYW4gcHJvdmlkZWQgYSBjb21wYXJlIGZ1bmN0aW9uCgkgIGZvciBkYXRlL3RpbWUgdHlwZXMgc28gbWluL21heCBmYWNldCByZXN0cmljdGlvbnMgc2hvdWxkIHdvcmssCgkgIGluZGV0ZXJtaW5hdGUgY29tcGFyaXNvbnMgcmV0dXJuIGFuIGVycm9yIGluc3RlYWQgb2YgZXF1YWwuCgkqIHRlc3Qvc2NoZW1hcy9kYXRlXzAqIHJlc3VsdC9zY2hlbWFzL2RhdGVfMF8wOiBzcGVjaWZpYyB0ZXN0CgkgIGZyb20gQ2hhcmxlcyBCb3plbWFuIHRvbwoKU2F0IE1heSAxOCAwOTo1NDoxMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLjMgZG9jL2J1aWxkRG9jQm9va0NhdGFsb2c6IGFwcGx5IGEgY291cGxlIG9mIHBhdGNoZXMKCSAgZnJvbSBDaHJpc3RpYW4gQ29ybmVsc3NlbiBmaXhpbmcgdGhlIG1hbiBwYWdlcyBhbmQgdGhlIENhdGFsb2cKCSAgYnVpbGRpbmcgc2NyaXB0LgoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oOiBub3RoaW5nIG5ldyB5ZXQKCSAgbmV4dCBzdGVwIGlzIDx4czppbXBvcnQ+IEkgbm93IGhhdmUgYSByZWFzb25hYmxlIHVuZGVyc3RhbmRpbmcKCSAgb2YgaG93IGl0IHdvcmtzLgoKVGh1IE1heSAxNiAxMDo0MzoyNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogYXBwbGllZCBhIHNtYWxsIGJ1ZmZlciBwZXJmb3JtYW5jZSBwYXRjaCBmcm9tIEdhcnkgUGVubmluZ3RvbgoKV2VkIE1heSAxNSAwMDoyNTozNCBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGV4cG9ydGVkIHhtbFhQYXRoTm9kZVNldEFkZE5zKCkKClR1ZSBNYXkgMTQgMTM6MDA6NDggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGluZyBhbiBYUGF0aCBmdW5jdGlvbiBldmFsdXRhdGlvbiBidWcgcG9pbnRlZCBvdXQKCSAgYnkgQWxleGV5IEVmaW1vdiB3aGVyZSB0aGUgY29udGV4dCB3YXMgbG9zdCB3aGVuIGV2YWx1YXRpbmcKCSAgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cwoKTW9uIDEzIE1heSAyMDAyIDExOjM3OjM5IFBNIFBEVCBBbGVrc2V5IFNhbmluIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogeHBhdGguYyBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oOiBtYWtlZCB4bWxYUGF0aE5vZGVTZXRBZGROcygpIAoJICBmdW5jdGlvbiBwdWJsaWMgZm9yIFhNTFNlYyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zCgpNb24gTWF5IDEzIDEyOjMyOjIyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0IDogZml4ZWQgYSBwcm9ibGVtCgkgIHdpdGggdGhlIEhUTUwgcGFyc2VyIHBvaW50ZWQgYnkgR2FyeSBCZW5zb24KCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9wdXNoU0FYaHRtbC5weTogc2RkaW5nIHRoZQoJICBleGFtcGxlCgpUaHUgMDkgTWF5IDIwMDIgMTE6MTk6MDAgQU0gUERUIEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgkqIHBhcnNlci5jOiBmaXhlZCBidWcgIzgxMTU5IChtZW1vcnkgZ3Jvd3RoIGluIFNBWCkKCQpUdWUgMDcgTWF5IDIwMDIgMDk6MjA6MjEgQU0gUERUIEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgkqIHhwYXRoLmM6IGZpeGVkIGJ1ZyAjNzg4NTggKHRoZSByZWFsIGZpeCkKClNhdCAwNCBNYXkgMjAwMiAxMTo1NjozMSBQTSBQRFQgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCSogeHBhdGguYzogZml4ZWQgYnVnICM3ODg1OCAocXVpY2sgYW5kIGR1cnR5IGZpeCB0byBoaWRlIHRoZSBwcm9ibGVtKQoJClN1biBNYXkgIDUgMDg6NTc6MDggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogbW9kaWZpZWQgeG1sTm9kZVNldEJhc2UgdG8gYWxsb3cgY2hhbmdpbmcgdGhlCgkgIGJhc2Ugb2YgYSBkb2N1bWVudC4KCkZyaSBNYXkgIDMgMDk6MjA6NDEgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBwYXRjaCBDaGFybGVzIEJvemVtYW4gZm9yIHZhbGlkYXRpb24gb2YKCSAgYWxsIHRoZSBkYXRlLCB0aW1lLCBhbmQgZHVyYXRpb24gdHlwZXMKCSogdGVzdC9zY2hlbWFzL2R1cl8wKiByZXN1bHQvc2NoZW1hcy9kdXJfMCo6IGFzc29jaWF0ZWQgdGVzdHMKCSogY29uZmlndXJlLmluOiBmaXhlZCBhbiBlcnJvciBwb2ludGVkIGJ5IGFuIHVzZXIKCSogeG1sMi1jb25maWcuaW46IGZpeGVkIGFuIGVycm9yIHBvaW50ZWQgYnkgYW4gdXNlcgoKV2VkIDAxIE1heSAyMDAyIDExOjI5OjI3IEFNIFBEVCBBbGVrc2V5IFNhbmluIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sSU8uaCB3aW4zMi9kc3AvbGlieG1sMi5kZWYuc3JjCgl3aW4zMi9saWJ4bWwyLmRlZi5zcmMgeG1sSU8uYzogZXhwb3J0ZWQgZGVmYXVsdAoJJ2ZpbGU6JywgJ2h0dHA6JyBhbmQgJ2Z0cDonIHByb3RvY29scyBpbnB1dCBoYW5kbGVycyAKCWFuZCBtYWtlZCBwcm90b2NvbHMgY29tcGFyaXNzb24gY2FzZSBpbnNlbnNpdGl2ZQoKVHVlIEFwciAzMCAxNjoyOTowNSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBOZXZlbiBIYXMgZGV0ZWN0ZWQgYSB0eXBvCgpUdWUgQXByIDMwIDA4OjQ4OjExIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBBVVRIT1JTIEhBQ0tJTkc6IGFkZGVkIEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgkgIGFzIG9uZSBvZiB0aGUgcGVyc29ucyBhbGxvd2VkIHRvIGNvbW1pdCBkaXJlY3RseSB0byB0aGUKCSAgbW9kdWxlLgoKTW9uIEFwciAyOSAxNzo0ODoyNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiBwcmVwYXJpbmcgMi40LjIxCgkqIHZhbGlkLmM6IHJhaXNlZCBhIHRvbyBsb3cgbGltaXQKCSogZG9jLyo6IHJlYnVpbHQgdGhlIGRvY3MgCgpXZWQgQXByIDI0IDEzOjQxOjAzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0L1hQYXRoL2V4cHIvZmxvYXRzIHRlc3QvWFBhdGgvZXhwci9mdW5jdGlvbnMKCSAgcmVzdWx0L1hQYXRoL2V4cHIvZmxvYXRzIHJlc3VsdC9YUGF0aC9leHByL2Z1bmN0aW9ucwoJICB4cGF0aC5jOiBhbm90aGVyIFhQYXRoIGNvbmZvcm1hbmNlIHBhdGNoIGZyb20gUmljaGFyZCBKaW5rcwoKVHVlIEFwciAyMyAxOTo1MDo0MCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBmaXhlZCB2YWxpZGF0aW9uIG9mIGF0dHJpYnV0ZSBncm91cHMuCgkqIHRlc3Qvc2NoZW1hcyByZXN1bHQvc2NoZW1hczogYWRkZWQgYW4gZXhhbXBsZSBmcm9tIHRoZSBwcmltZXIKClR1ZSBBcHIgMjMgMDk6MTE6MzcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYzogbW9yZSB3b3JrIG9uIFNjaGVtYXMKCSogdGVzdC9zY2hlbWFzIHJlc3VsdC9zY2hlbWFzOiB1cGRhdGVkIHRoZSB0ZXN0IGxpc3QKCk1vbiBBcHIgMjIgMTc6NTk6MTQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFRPRE86IHVwZGF0ZWQgYSBiaXQKCSogcGFyc2VyLmM6IG1hZGUgYSBjb21tZW50IG1vcmUgc3BlY2lmaWMKCSogeG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jOiBtb3JlIHdvcmsgb24gdGhlCgkgIFNjaGVtYXMgY29uZm9ybWFuY2UuCgkqIHRlc3Qvc2NoZW1hcyByZXN1bHQvc2NoZW1hczogdXBkYXRlZCB0aGUgdGVzdCBsaXN0CgpTYXQgQXByIDIwIDE5OjM2OjM5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwveG1sYXV0b21hdGEuaDoKCSAgaW1wbGVtZW50aW5nIHhzOmFsbCB3aXRoIG1pbk9jY3VycyA9IDAKCSogdGVzL3NjaGVtYXMvKiByZXN1bHQvc2NoZW1hcy8qOiBhZGRlZCBtb3JlIHRlc3RzIGNvdmVyaW5nCgkgIHhzOmFsbAoKU2F0IEFwciAyMCAwOToyMjo1MCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVnZXhwLmM6IGZpcnN0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBhbGwgcGFydGljbGUsIHRoaXMKCSAgbWF5IG5lZWQgdG8gYmUgcmV2aXNpdGVkIGZvciBjYXNlIHdoZXJlIG5vdCBhbGwgdHJhbnNpdGlvbnMKCSAgbXVzdCBiZSBjcm9zc2VkLgoKRnJpIEFwciAxOSAxODoyNjowNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBhbm90aGVyIGVudGl0eSBwcm9jZXNzaW5nIHVwZGF0ZSBmcm9tIE1hcmt1cyBIZW5rZQoKRnJpIEFwciAxOSAxNzoxNDoyNCBDRVNUIDIwMDIgQmpvcm4gUmVlc2UgPGJyZWVzZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CgoJKiB0cmlvbmFuLmM6IGZpeGVkIGNyYXNoIG9uIE9TRi8xCgpGcmkgQXByIDE5IDA5OjAwOjU2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IG1vcmUgU2NoZW1hcyB3b3JrCgkqIHRlc3Qvc2NoZW1hcy8qIHJlc3VsdC9zY2hlbWFzLyo6IGFkZGVkIG1vcmUgdGVzdHMgY29taW5nCgkgIGZyb20gdGhlIHNwZWMuCgpUaHUgQXByIDE4IDIzOjAwOjAyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjMTRuLmM6IHBhdGNoIGZyb20gQWxla3NleSBTYW5pbiByZWZsZWN0aW5nIGEgY2hhbmdlIGluIHRoZQoJICBFeGNDMTROIHNwZWNpZmljYXRpb24KClRodSBBcHIgMTggMTg6Mzg6MzAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogcGF0Y2ggZnJvbSBNYXJrdXMgSGVua2UsIGZpeCBmb3IgcmVjdXJzaXZlIGVudGl0aWVzLgoKVGh1IEFwciAxOCAxNzo0OToyNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4IGEgcHJvYmxlbSB3aXRoIHN0cmluZygpIG9uIGEgZG9jdW1lbnQgbm9kZS4KClRodSBBcHIgMTggMTY6NDA6NDIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIHhtbHNjaGVtYXMuYzogbW9yZSBTY2hlbWFzIHdvcmsKCSogdGVzdC9zY2hlbWFzLyogcmVzdWx0L3NjaGVtYXMvKjogYWRkZWQgbW9yZSB0ZXN0cyBjb21pbmcKCSAgZnJvbSB0aGUgc3BlYy4KClRodSBBcHIgMTggMTM6NTI6NTIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmM6IGZpeGVkICYgc2VyaWFsaXphdGlvbiBidWcgaW50cm9kdWNlZCBpbiAyLjQuMjAKCSogcmVzdWx0L0hUTUwvKjogdGhpcyBjaGFuZ2VzIGEgZmV3IHRoaW5ncyBpbiB0aGUgcmVzdWx0cwoKV2VkIEFwciAxNyAyMDozNDozNyBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGVsaW1pbmF0ZWQgJ2RlY2xhcmF0aW9uIGRpZmZlcmVudCB0aGFuCgkgcHJvdG90eXBlJyB3YXJuaW5nCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogInJlc29sdmVkIiBjb25mbGljdHMgd2l0aCBlcnJuby5oCgpXZWQgQXByIDE3IDE4OjI2OjA3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwveG1sYXV0b21hdGEuaDogbW9yZSB3b3JrCgkgIG9uIHRoZSBhdXRvbWF0YSBpbnRlcmZhY2VzIGFuZCBkZWJ1ZyBvZiBjb3VudGVkIGNob2ljZXMKCSogdGVzdC9zY2hlbWFzLyogcmVzdWx0L3NjaGVtYXMvKjogYWRkZWQgYSBudW1iZXIgb2YgdGVzdHMKCldlZCBBcHIgMTcgMTE6MDM6MDMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYyBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzLmg6CgkgIGEgYml0IG9mIHdvcmsgb24gU2NoZW1hcwoJKiB0ZXN0U2NoZW1hcy5jOiB0cnkgdG8gbWFrZSBpdCBtb3JlIHVzZWZ1bAoJKiB0ZXN0L3NjaGVtYXMvKiByZXN1bHQvc2NoZW1hcy8qIE1ha2VmaWxlLmFtOiBjaGFuZ2VkIHRoZQoJICBTY2hlbWFzIHJlZ3Jlc3Npb24gdGVzdCBwcm9jZWR1cmUsIHN0YXJ0ZWQgYWRkaW5nIGEgZmV3IHNhbXBsZXMKClR1ZSBBcHIgMTYgMTk6NTI6MDEgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpemxhdGtvdmljQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogaW5jbHVkZS9saWJ4bWwvZW5jb2RpbmcuaDogUGF0Y2ggZm9yIHRoZSBCb3JsYW5kIEMrKyBidWlsZGVyCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogUGF0Y2ggZm9yIHRoZSBCb3JsYW5kIEMrKyBidWlsZGVyCgkqIHRocmVhZHMuYzogUGF0Y2ggZm9yIHRoZSBCb3JsYW5kIEMrKyBidWlsZGVyCgkqIHdpbjMyL2JjYjU6IE5ldyBkaXJlY3RvcnkgZm9yIHRoZSBCb3JsYW5kIEMrKyBidWlsZGVyCgkgcHJvamVjdCBmaWxlcyAgICAgICAKClR1ZSBBcHIgMTYgMTk6NDY6NTUgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpemxhdGtvdmljQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvTWFrZWZpbGUubXN2YzogVXBkYXRlIGZvciBYTUwgU2NoZW1hIHN1cHBvcnQKCSogd2luMzIvY29uZmlndXJlLmpzOiBVcGRhdGUgZm9yIFhNTCBTY2hlbWEgc3VwcG9ydAoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IFVwZGF0ZSBmb3IgWE1MIFNjaGVtYSBzdXBwb3J0CgpUdWUgQXByIDE2IDE3OjQ2OjQzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBUT0RPX1NDSEVNQVMgY29uZmlndXJlLmluIGdlblVuaWNvZGUucHkgdGVzdEF1dG9tYXRhLmMKCSB0ZXN0UmVnZXhwLmMgdGVzdFNjaGVtYXMuYyB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmMKCSB4bWx1bmljb2RlLmMgaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW0KCSBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmggaW5jbHVkZS9saWJ4bWwveG1sYXV0b21hdGEuaAoJIGluY2x1ZGUvbGlieG1sL3htbHJlZ2V4cC5oIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaAoJIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXN0eXBlcy5oIGluY2x1ZGUvbGlieG1sL3htbHVuaWNvZGUuaAoJIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbiA6IG1lcmdlZCB0aGUgY3VycmVudCBzdGF0ZSBvZgoJIFhNTCBTY2hlbWFzIGltcGxlbWVudGF0aW9uLCBpdCBpcyBub3QgY29uZmlndXJlZCBpbiBieSBkZWZhdWx0LAoJIGEgc3BlY2lmaWMgLS1zY2hlbWFzIGNvbmZpZ3VyZSBvcHRpb24gaGFzIGJlZW4gYWRkZWQuCgkqIHRlc3QvYXV0b21hdGEgdGVzdC9yZWdleHAgdGVzdC9zY2hlbWFzIE1ha2VmaWxlLmFtCgkgIHJlc3VsdC9hdXRvbWF0YSByZXN1bHQvcmVnZXhwIHJlc3VsdC9zY2hlbWFzOgoJICBtZXJnZWQgYXV0b21hdGEvcmVnZXhwL3NjaGVtYXMgcmVncmVzc2lvbiB0ZXN0cwoKVHVlIEFwciAxNiAwOTo0ODo0NCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogR2FyeSBmb3VuZCBhIGNvbXBpbGUgdGltZSBwcm9ibGVtLCBmaXhlcyAjNzg4MjMKCk1vbiBBcHIgMTUgMTk6MTE6MzYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcmVsZWFzZSBvZiAyLjQuMjAKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3MKCk1vbiBBcHIgMTUgMTQ6NTU6NTMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbTogcGF0Y2ggZnJvbSBDcmlzdGlhbiBHYWZ0b24gdG8gYnVpbGQgb24KCSAgUmVkIEhhdCA2LjIsIHNob3VsZCBhbHNvIGZpeCAjNzU3NzkKCk1vbiBBcHIgMTUgMTI6MTQ6NDkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpcnN0IHBhcnQgb2YgZml4aW5nICM3ODcyOQoKU3VuIEFwciAxNCAyMzo0NDo1OCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyB1cmkuYzogZml4aW5nIGJ1ZyAjNzg2NjIgaS5lLiBhZGQgcHJvcGVyCgkgIGVzY2FwaW5nIG9mIFVSSSB3aGVuIHNhdmluZyBIVE1MIGZpbGVzLgoJKiByZXN1bHQvSFRNTC8qOiB0aGlzIGltcGFjdGVkIHNvbWUgdGVzdHMKClN1biBBcHIgMTQgMTQ6NTU6MTUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogdHJ5aW5nIHRvIGZpeCAjNzc0NDEKCkZyaSBBcHIgMTIgMjM6MDI6MTYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbElPLmg6IEhhbGxza2kgY29tcGxhaW5lZCBpdCBjb3VsZCBub3QgYmUKCSAgaW5jbHVkZWQgYnkgaXRzZWxmLgoKVGh1IEFwciAxMSAxMDoyMzozNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBhcHBsaWVkIGFuIElFRUUgZmxhZyBwYXRjaCBmb3IgT1NGLzEgIzc3ODI1CgpXZWQgQXByIDEwIDIzOjMxOjM0IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogcGF0Y2ggZnJvbSBOaWxvIGZvciB0aGUgYzE0biBvcHRpb24KCSogd2luMzIvTWFrZWZpbGUubXN2YzogZml4ZWQgbGlieG1sMi5kZWYgZ2VuZXJhdGlvbiB3aXRoIHRocmVhZHMKCldlZCBBcHIgMTAgMjE6MjQ6MTYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmguaW46IFNpbHZhbiBNaW5naGV0dGkKCSAgcG9pbnRlZCBlcnJvbmVvdXMgdXNlIG9mIExJQlhNTF9USFJFQURTX0VOQUJMRUQgaW5zdGVhZCBvZgoJICAgTElCWE1MX1RIUkVBRF9FTkFCTEVECgpXZWQgQXByIDEwIDE4OjEyOjUyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBhbm90aGVyIHBhdGNoIGZyb20gUmljaGFyZCBKaW5rcyBmb3Igc3Vic3RyaW5nIGNvbmZvcm1hbmNlCgkqIHRlc3QvWFBhdGgvZXhwci9mbG9hdHMgdGVzdC9YUGF0aC9leHByL3N0cmluZ3MKCSAgcmVzdWx0L1hQYXRoL2V4cHIvZmxvYXRzIHJlc3VsdC9YUGF0aC9leHByL3N0cmluZ3M6IHVwZGF0ZSBvZiB0aGUKCSAgdGVzdCBzdWl0ZSB0byBjaGVjayB0aG9zZS4KCldlZCBBcHIgMTAgMTM6Mjk6NDkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHBhdGNoIGZyb20gUmljaGFyZCBKaW5rcyBmb3IgLnggZmxvYXQgcGFyc2luZy4KClR1ZSBBcHIgIDkgMTg6MDk6MzEgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBwYXRjaCBmcm9tIE1hcmt1cyBIZW5rZSB3aGVuIGFuIGVuY29kaW5nIGFpbid0IHJlY29nbml6ZWQKClR1ZSBBcHIgIDkgMTU6NDc6MTQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5tNDogZ290IGEgcmVwb3J0IHRoYXQgI2luY2x1ZGUgPHN0cmluZy5oPiB3YXMgbmVlZGVkCgpUdWUgQXByICA5IDExOjUxOjI1IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGFwcGxpZWQgYSBmaXggZnJvbSBBbnRob255IEpvbmVzIGZvciAtbyAvLS1vdXRwdXQKClR1ZSBBcHIgIDIgMjA6Mjc6MTEgTVNUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy9leGFtcGxlLmh0bWw6IGZpeGluZyB0eXBvCgpNb24gQXByICAxIDEwOjAyOjU3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXhlZCBhIGJ1ZyBpbiB0aGUgbm9kZXNldCB0byBib29sZWFuIGNvbXBhcmlzb24gY29kZQoJICBwb2ludGVkIG91dCBieSBNZWx2eW4gU29wYWN1YS4KCkZyaSBNYXIgMjkgMjM6NDE6NTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLm00OiBGculk6XJpYyBDcm96YXQgZ2F2ZSBhIHBhdGNoIHJlbGF0ZWQgdG8gdGhlIGNoYW5nZQoJICBvZiBJbmNsdWRlIHBhdGhzIGJyZWFraW5nIHRoZSBsaWJ4bWwubTQKCkZyaSBNYXIgMjkgMTg6MjU6NTQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogRml4IGJ1ZyAjNzY5MjcgZm9yZ290IHRvIHNhdmUgc29tZSBjb250ZXh0CgkgIHdoZW4gZXZhbHVhdGluZyBiaW5hcnkgZXhwcmVzc2lvbnMKClRodSBNYXIgMjggMTk6MjI6NDggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBmaXhlZCBjb25maWd1cmUgZm9yIE1QRS9pWCBmcm9tIE1hcmt1cyBIZW5rZQoJKiB4bWxtZW1vcnkuYzogZml4ZWQgaW5pdGlhbGl6YXRpb24gcHJvYmxlbXMKCSogeHBhdGguYzogYW5vdGhlciBzZXQgb2YgcGF0Y2hlcyBmcm9tIFJpY2hhcmQgSmlua3MgdGhpcwoJICBmaXhlcyAibWFrZSBYUGF0aHRlc3RzIiBvbiBsaW51eAoKV2VkIE1hciAyNyAxNzowOTo0MyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmlvbmFuLmMgdHJpb25hbi5oIHhwYXRoLmM6IG1vcmUgcGF0Y2hlcyBmcm9tIFJpY2hhcmQgSmlua3MKCSogdGVzdC9YUGF0aC9leHByL2NvbXBhcmUgdGVzdC9YUGF0aC9leHByL2VxdWFsaXR5CgkgIHRlc3QvWFBhdGgvZXhwci9mbG9hdHMgdGVzdC9YUGF0aC9leHByL2Z1bmN0aW9ucwoJICB0ZXN0L1hQYXRoL2V4cHIvc3RyaW5ncyByZXN1bHQvWFBhdGgvZXhwci9jb21wYXJlCgkgIHJlc3VsdC9YUGF0aC9leHByL2VxdWFsaXR5IHJlc3VsdC9YUGF0aC9leHByL2Zsb2F0cwoJICByZXN1bHQvWFBhdGgvZXhwci9mdW5jdGlvbnMgcmVzdWx0L1hQYXRoL2V4cHIvc3RyaW5nczogVXBkYXRlZAoJICB0ZXN0cyB0aG91Z2ggdGhleSBzaG93IGEgZGl2ZXJnZW5jZSBvbiBMaW51eAoKV2VkIE1hciAyNyAxMDowNjo1MyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jIHRyaW9uYW4uYzogcHJldmlvdXMgY29tbWl0IGFsc28gaW5jbHVkZWQgcGF0Y2hlcwoJICBmcm9tIFJpY2hhcmQgSmlua3Mgb24gc29tZSBJRUVFIHN1cHBvcnQgY29ybmVyIGNhc2UKCldlZCBNYXIgMjcgMTA6MDM6MTEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogQVVUSE9SUyBIQUNLSU5HOiBBZGRlZCBJZ29yIFpsYXRrb3ZpYyBhcyBvZmZpY2lhbCBtYWludGFpbmVyCgkqIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvTWFrZWZpbGUuYW06IEFsYmVydCBDaGluIHBvaW50ZWQKCSAgdGhhdCAkKGRhdGFkaXIpIHNob3VsZCBiZSB1c2VkIGZvciBkb2NzCgpUdWUgTWFyIDI2IDEzOjQzOjE2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IFRob21hcyBTdGVpbmJvcm4gcG9pbnRlZCBvdXQgIzc2NDA0IHRoYXQgbGlieG1sMgoJICBjb3VsZCBsZWFrIGZpbGVkZXNjcmlwdG9ycwoKVHVlIE1hciAyNiAwODo1NTo1MyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gbmFub2h0dHAuYzogYXBwbGllZCBwYXRjaCBmcm9tIEFsbGFuIENsYXJrIGZvcgoJICBVbml4V2FyZS9PcGVuU2VydmVyCgpNb24gTWFyIDI1IDE3OjQ1OjQ0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNC4xOQoJKiBkb2MvKjogcmVidWlsdCB0aGUgZG9jcwoKTW9uIE1hciAyNSAxNzozNDowNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vaHR0cC5jOiBmaXhpbmcgIzc2MDQzLCBnb3QgZmVkIHVwIHdpdGggbm9uLXBvcnRhYmlsaXR5CgkgIG9mIHRoYXQgcGllY2Ugb2YgY29kZS4KCk1vbiBNYXIgMjUgMTM6MDg6MjEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYyBTQVguYzogTmV2ZXIgY29tbWl0IHdpdGhvdXQgcnVubmluZyAibWFrZSB0ZXN0cyIgOi0oCgkgIGZpeCBhIGNvdXBsZSBvZiBzdHVwaWRpdGllcyBpbiB0aGUgcHJldmlvdXMgY29tbWl0CgkqIHJlc3VsdC8qOiBhIGZldyBjaGFuZ2VzIGluIHNvbWUgYXR0cmlidXRlIG9yZGVyIHJlc3VsdCBvZiBwcmV2aW91cwoJICBjb21taXQuCgpNb24gTWFyIDI1IDExOjQ2OjA1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmMgU0FYLmM6IGZpeGVkIGJ1ZyAjNzYxNjgsIGF0dHJpYnV0ZSByZWRlY2xhcmVkIGluCgkgIHRoZSBpbnRlcm5hbCBzdWJzZXQgc2hvdWxkIG5vdCByYWlzZSBkdXBsaWNhdGUgSUQgZXJyb3JzLAoJICBhbHNvIHRoZXJlIHdhcyBhIHNtYWxsIGJ1ZyBpbiBjb25qdW5jdGlvbiB0byBuYW1lc3BhY2UKCSAgZGVjbGFyYXRpb25zIGRlZmF1bHRlZCBhbmQgeG1sOnh4eCBhdHRyaWJ1dGVzIERURCBkZWZpbml0aW9ucy4KCSAgCkZyaSBNYXIgMjIgMTU6MTM6NDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogUmljaGFyZCBKaW5rcyBhbHNvIHJhaXNlZCBzb21lIHJvdW5kaW5nIHByb2JsZW1zCgkgIHRoaXMgdHJpZXMgdG8gZml4IHRoZW0KCkZyaSBNYXIgMjIgMTM6MjI6MDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogUmljaGFyZCBKaW5rcyBzcG90dGVkIGFuIGluY29oZXJlbnQgbWVtb3J5IGFsbG9jYXRpb24KCSAgYmVoYXZpb3VyIGluIHhtbFhQYXRoQ2FzdFRvU3RyaW5nKCkKClRodSBNYXIgMjEgMTQ6MjU6MjkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYzogZml4ZWQgYSBidWcgaW4gdGhlIElTTy1MYXRpbiAxIHRvIFVURjggZW5jb2RlcgoJICByYWlzZWQgYnkgTW9ydXMgV2FsdGVyCgpUaHUgTWFyIDIxIDE0OjA3OjEzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGNhdGFsb2cuYyBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW46IGFwcGxpZWQgMiBmaXh1cHMKCSAgZnJvbSBJZ29yCgpUaHUgTWFyIDIxIDEzOjMwOjA2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGluZyAjNzU2MTksIHJlbGF0ZWQgdG8gYSBwcm9ibGVtIHdoZW4gdHJ5aW5nCgkgIHRvIGV2YWx1YXRlIGNvbmRpdGlvbiB3aGVuIHRoZSBjdXJyZW50IG5vZGUgc2V0IHJlc3VsdGluZwoJICBmcm9tIHRoYXQgc3ViLXN0ZXAgZXZhbHVhdGlvbiBpcyBlbXB0eS4gQWxzbyBmaXhlcyAyIHBvdGVudGlhbAoJICBwcm9ibGVtIHdpdGggcHJldmlvdXMtc2libGluZyBhbmQgbmV4dC1zaWJsaW5ncyBheGlzLgoKVGh1IE1hciAyMSAwOTowMzo1OSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjMTRuLmM6IHBhdGNoIGZyb20gTWFyayBWYWtvYyB0byBidWlsZCBDMTROIGlmIERvY0Jvb2sgYW5kCgkgIEhUTUwgc3VwcG9ydCBpcyBub3QgY29uZmlndXJlZCBpbi4KCldlZCBNYXIgMjAgMjI6NDI6NDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIGVycm9yLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdHJlZS5jIHhtbElPLmMKCSAgaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBkb2hoIEkgcmVhbGx5IGRpZG4ndCBpbnRlbmRlZCB0byBjb21taXQKCSAgdGhpcyB0ZXN0IHZlcnNpb24gOi0oCgpXZWQgTWFyIDIwIDIwOjIwOjU3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3RTQVguYzogSSB3YW50ZWQgdG8gc2VlIHRoZSByZWFsIHNwZWVkIGF0IHRoZSBTQVggaW50ZXJmYWNlCgkgIGFmdGVyIGEgbGl0dGxlIHRvbyBtYW55IFhpbWlhbmVyIHN0YXJ0ZWQgY29tcGxhaW5pbmcgYWJvdXQgdGhlCgkgIHBhcnNlciBzcGVlZC4KCSAgYWRkZWQgYSAtLXF1aWV0IG9wdGlvbjoKCSAgcGFwaGlvOn4vWE1MIC0+IGxzIC1sIGRiMTAwMDAwLnhtbCAKCSAgLXJ3LXJ3LXItLSAgICAxIHZlaWxsYXJkIHd3dyAgICAgIDIwMTgyMDQwIE1hciAyMCAxMDozMCBkYjEwMDAwMC54bWwKCSAgcGFwaGlvOn4vWE1MIC0+IHRpbWUgLi90ZXN0U0FYIC0tcXVpZXQgZGIxMDAwMDAueG1sIAoJICAzMjAwMDA2IGNhbGxiYWNrcyBnZW5lcmF0ZWQKCSAgcmVhbAkwbTEuMjcwcwoJICBXaGljaCBtZWFucyAxNk1CeXRlcy9zIGFuZCAzTWNhbGxiYWNrL3MKClR1ZSBNYXIgMTkgMTk6MzM6NTcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogdmFsZ3JpbmQgc3BvdHRlZCBhbm90aGVyIGVycm9yIHRoYXQgdGltZSB3aGVuIHJ1bm5pbmcKCSAgb24gbGlieHNsdCByZWdyZXNzaW9uIHRlc3RzCgpUdWUgTWFyIDE5IDE1OjI0OjQ5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBhZGRpbmcgIm1ha2UgdmFsZ3JpbmQiIHJ1bm5pbmcgdGhlIGZ1bGwgcmVncmVzc2lvbgoJICB0ZXN0cyAoZXhjZXB0IHB5dGhvbiBvbmVzKSB1bmRlciBWYWxncmluZCAodXNpbmcgdmFsZ3JpbmQgLXEKCSAgd2hpY2ggd2FzIGtpbmRseSBhZGRlZCBieSB0aGUgYXV0aG9yKS4KCSogdmFsaWQuYzogc3R1cGlkIGJ1ZyBwaW5wb2ludGVkIGJ5IFZhbGdyaW5kLCB0aGUgcmVncmVzc2lvbiB0ZXN0cwoJICBwYXNzZXMgY2xlYW5seSBub3cgZXhjZXB0IGFuIG9iY3VyZSBmbG9hdGluZyBwb2ludCBpbml0aWFsaXphdGlvbgoJICByYWlzZWQgaW4gbG9nMTAoKSBpbiBvbmUgWFBhdGggcmVncmVzc2lvbiB0ZXN0ID8/PwoJKiB0cmVlLmM6IGVkaXRlZCBzb21lIGNvbW1lbnRzIHRvIGNsb3NlICM3NTI0NAoKVHVlIE1hciAxOSAxMjoxNToyMCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBwcmV0dHkgaW5zYW5lIHRoaW5nLCB0aGUgeG1sWFBhdGhGb3JtYXROdW1iZXIoKQoJICB3YXMgbm90IHNlcmlhbGl6aW5nIDEgYXMgIjEiIGlmIExDX0FMTD1zdl9TRSA6LSggYW5kIGluIHRoZQoJICBjb250ZXh0IG9mIFNjcm9sbEtlZXBlciwgbWFkZSBzdXJlIHRoYXQgaWYgdGhlIG51bWJlciBpcwoJICBhbiBpbnRlZ2VyLCB0aGUgc2VyaWFsaXphdGlvbiBmb2xsb3dzIHRoZSBkZXNjcmlwdGlvbiBhdAoJICBodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aCNzZWN0aW9uLVN0cmluZy1GdW5jdGlvbnMKCk1vbiBNYXIgMTggMTk6MTg6MTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi40LjE4CgkqIGRvYy8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSB3ZWIgc2l0ZQoJKiAqLmMgbGlieG1sLmg6IGltcGxlbWVudCB0aGUgbmV3IElOX0xJQlhNTCBzY2hlbWUgZGlzY3Vzc2VkIHdpdGgKCSAgdGhlIFdpbmRvd3MgYW5kIEN5Z3dpbiBtYWludGFpbmVycy4KCSogcGFyc2VyLmM6IGh1bW0sIGNoYW5nZWQgdGhlIHdheSB0aGUgU0FYIHBhcnNlciB3b3JrIHdoZW4KCSAgeG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdCgxKSBpcyBzZXQsIGl0IHdpbGwgdGhlbiAKCSAgZG8gdGhlIGVudGl0eSByZWdpc3RyYXRpb24gYW5kIGxvYWRpbmcgYnkgaXRzZWxmIGluIGNhc2UgdGhlCgkgIHVzZXIgcHJvdmlkZWQgU0FYIGdldEVudGl0eSgpIHJldHVybnMgTlVMTC4KCSogdGVzdFNBWC5jOiBhZGRlZCAtLW5vZW50IHRvIHRlc3QgdGhlIGJlaGF2aW91ci4KCk1vbiBNYXIgMTggMTI6NDQ6MjMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IFdpbGZyaWVkIFRlaWtlbiBwcm92aWRlZCBhIGhhY2tpc2ggYnV0IHdvcmtpbmcKCSAgd2F5IHRvIGdldCBjb250ZXh0IHJlcG9ydGVkIGJhY2sgb24gZW50aXRpZXMgd2hlbiBwYXJzaW5nCgkgIHdpdGggU0FYIGFuZCB3aXRob3V0IGJyZWFraW5nIHRoZSBET00gYnVpbGQuCgpTdW4gTWFyIDE3IDExOjMxOjU1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGMxNG4uYzogYXBwbGllZCBhIG5ldyBwYXRjaCBmcm9tIEFsZWtzZXkgU2FuaW4KCSogZG9jL3NpdGUueHNsIGRvYy94bWwuaHRtbCBkb2MvKi5odG1sOiB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uCgkgIHRvIHJlZmVyZW5jZSBBbGVrc2V5IGltcGxlbWVudGF0aW9uIG9mIFhNTCBkaWdpdGFsIFNpZ25hdHVyZXMKClNhdCBNYXIgMTYgMjM6MDE6NDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogc21hbGwgZml4IHRvIGF2b2lkIHBvdGVudGlhbCBwcm9ibGVtIGR1ZSB0bwoJICBvcmRlcmluZyBvZiBmcmVlaW5nIGRhdGEKCSogcHl0aG9uL01ha2VmaWxlLmFtOiBwZW9wbGUgd2VyZSBjb21wbGFpbmluZyBhYm91dCAKCSAgdGhlIGdlbmVyYXRlZCBmaWxlIGluIHB5dGhvbiBkaXIgbm90IGJlaW5nIGJ1aWx0CgpGcmkgTWFyIDE1IDIzOjIxOjQwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0KCSAgcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL3R5cGVzLmM6IENsZWFudXAKCSAgb2YgdGhlIHB5dGhvbiBNYWtlZmlsZXMgYmFzZWQgb24gSmFjb2IgYW5kIEphbWVzIGZlZWRiYWNrLAoJICBmaXhlZCB0aGUgc3BlYyBmaWxlIGFjY29yZGluZ2x5LCBmaXhlZCB0aGUgbnVtYmVyIG9mIHdhcm5pbmcKCSAgdGhhdCBwYXNzaW5nIG15IHBlZGFudGljIENGTEFHUyB3YXMgZ2VuZXJhdGluZy4gQ29uY2x1c2lvbgoJICBpcyB0aGF0IFB5dGhvbiBpbmNsdWRlcyBhcmUgcmVhbCBjcmFwLgoKRnJpIE1hciAxNSAxOTo0MToyNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUsaW46IGl0IHdhcyByZXBvcnRlZCBxdWl0ZSBhIGZldyB0aW1lcyB0aGF0CgkgIHhtbDItY29uZmlnIC0tY2ZsYWdzIHNob3VsZCBub3Qgb3V0cHV0CgkgIC1JJGluY2x1ZGVwcmVmaXgvbGlieG1sMi9saWJ4bWwgYmVjYXVzZSBsaWJ4bWwyIGhlYWRlciBuYW1lcwoJICBjbGFzaGVzIHdpdGggZXhpc3RpbmcgbmFtZXMgbGlrZSBsaXN0LmggZnJvbSBDKysgc3RsLgoJICBJbmNsdWRlcyBzaG91bGQgYmUgI2luY2x1ZGU8bGlieG1sL3h4eC5oPiBzbyAuLi4KCkZyaSBNYXIgMTUgMTA6NDE6NTAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogYzE0bi5jOiBhbm90aGVyIHBhdGNoIGZyb20gQWxla3NleSBTYW5pbgoKRnJpIE1hciAxNSAwODo1NTo1NSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjMTRuLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBBbGVrc2V5IFNhbmluIGZpeGluZyBhIHByb2JsZW0gaW4gdGhlCgkgIGNhbm9uaWNhbGl6YXRpb24gYWxnb3JpdGhtCgkqIGRvYy94bWwuaHRtbCBkb2MvaW5kZXguaHRtbDogYWRkZWQgdGhlIEMxNE4gcmVmZXJlbmNlcyBvbiB0aGUgCgkgIGluZGV4IHBhZ2UuCgoyMDAyLTAzLTEzICBqYWNvYiBiZXJrbWFuICA8amFjb2JAeGltaWFuLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbTogcmVtb3ZlIExEQUREIGFuZCBDRkxBR1MgYXMgdGhpcyBpcyBicm9rZW4KCXVzYWdlLCByZWR1bmRhbnQsIGFuZCBnY2Mgc3BlY2lmaWMKCldlZCBNYXIgMTMgMTE6MDA6NTkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogc3BlZWR1cCBzb21lIG5vZGUgc2VsZWN0aW9uIG9wZXJhdGlvbnMsIHRoaXMgY2FuCgkgIGhhdmUgYSBzaWduaWZpY2FudCBpbXBhY3Qgb24gRG9jQm9vayBOb3JtJ3Mgc3R5bGVzaGVldHMKCSogbmFub2h0dHAuYzogc29tZW9uZSByZXBvcnRlZCB0aGF0IFNPQ0tMRU5fVCBtYXkgbm90IGJlIGRlZmluZWQKCSAgbWFrZSBzdXJlIGl0J3MgYWx3YXlzIHRoZSBjYXNlCgkqIGRlYnVnWE1MLmM6IGRpc3Rpbmd1aXNoIENEQVRBIGFuZCBjb21tZW50cyBpbiBscyBvcGVyYXRpb25zCgpUdWUgTWFyIDEyIDE5OjQ1OjI0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sLyouaDogSGVpa28gVy4gUnVwcCBmaXhlZCBhIGxvdCBvZiBjb21tZW50cwoJICB0byBnZW5lcmF0ZSBiZXR0ZXIgQVBJIGRlc2NyaXB0aW9ucyBldGMuLi4KCk1vbiBNYXIgMTEgMTA6MTA6MzAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogYzE0bi5jOiBGaXhpbmcgIzc0MTg2LCBtYWRlIHN1cmUgYWxsIGJvb2xlYW4gZXhwcmVzc2lvbnMKCSAgZ2V0IGZ1bGx5IHBhcmVudGhlc2l6ZWQsIHJhbiBpbmRlbnQgb24gdGhlIG91dHB1dAoJKiBjb25maWd1cmUuaW4gSFRNTHRyZWUuYyBTQVguYyBjMTRuLmMgZGVidWdYTUwuYyB0cmVlLmMgeHBvaW50ZXIuYwoJICBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGFsc28gIzc0MTg2IHJlbGF0ZWQsIHJlbW92ZWQgdGhlCgkgIC0td2l0aC1idWZmZXJzIG9wdGlvbiwgYW5kIGFsbCB0aGUgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFsCgkgIHNlY3Rpb25zIHRoYXQgd2VyZSByZXN1bHRpbmcgZnJvbSBpdC4KClN1biBNYXIgMTAgMTc6NDc6NTggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogYXBwbGllZCBwYXRjaCBmcm9tIERvZGppIFNla2V0ZWxpIGZpeGluZyBhbgoJICB1bmluaXRhaWxpemVkIHZhcmlhYmxlIGluIHhtbFZhbGlkR2V0VmFsaWRFbGVtZW50cygpCgpTYXQgTWFyICA5IDE1OjEwOjQ5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGMxNG4uYzogZml4ZWQgYSBmZXcgY29tbWVudHMKCSogZG9jLyouaHRtbCBkb2MvKi8qLmh0bWw6IHJlZ2VuZXJhdGVkIHRoZSBkb2NzIGFuZCBhZGRlZAoJICB0aGUgQzE0TiBBUEkKCSogZG9jL2FwaS54c2wgZG9jL2dub21lLXhtbC5zZ21sOiBmaXh1cHMgYW5kIGFkZGVkIElEcwoKU2F0IE1hciAgOSAxMToxNjoxMSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay14bWwtdGVzdC1zdWl0ZS5weTogZml4IHRvIGFkYXB0IHZhcmFpYXRpb25zIGluIHRoZQoJICBiaW5kaW5ncwoJKiBjb25maWd1cmUuaW4gcHl0aG9uL3NldHVwLnB5IHB5dGhvbi9zZXR1cC5weS5pbjogZml4ZWQgdG8KCSAgaGF2ZSB0aGUgdmVyc2lvbiBvZiB0aGUgcHl0aG9uIHNjcmlwdHMgYXV0b21hdGljYWxseSB1cGRhdGVkCgpGcmkgTWFyICA4IDE2OjQ1OjU1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4ZWQgYSBidWcgbmV3bHkgaW50cm9kdWNlZCBhbmQgcG9pbnRlZCBieSBVd2UgRmVjaG5lcgoJICBpbiB4bWxDb3B5UHJvcCgpCgpGcmkgTWFyICA4IDE1OjQ5OjEwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNC4xNyByZWxlYXNlCgkqIGRvYy8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2NzCgkqIHhwYXRoLmM6IGZpeGVkIGEgY29tbWVudAoJKiBweXRob24vbGlieG1sLmM6IGZpeGVkIGEgcG9zc2libGUgcmVlbnRyYW5jeSBwcm9ibGVtCgpUaHUgTWFyICA3IDIzOjE5OjI4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL2F0dHJpYnMucHk6CgkgIGZpeGVkIHhtbEhhc05zUHJvcCgpIGJ1Z3MgZm9yIGRlZmF1bHRlZCBmcm9tIERURCBhdHRyaWJzLAoJICBhZGRlZCBhIHNwZWNpZmljIHJlZ3Jlc3Npb24gdGVzdAoJKiBweXRob24vZ2VuZXJhdG9yLnB5OiB4bWxIYXNOc1Byb3AoKSBhbmQgeG1sSGFzUHJvcCgpIHNoYWxsCgkgIG5vdCByYWlzZSBleGNlcHRpb25zIHdoZW4gZmFpbGluZyB0byBmaW5kIHRoZSBhdHRyaWJ1dGUuCgpUaHUgTWFyICA3IDE2OjExOjM1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiB4bWxsaW50LmM6IG93ZW4gcG9pbnRlZCBvdXQgYSBwcm9ibGVtIHdpdGggdGhlCgkgIGZ0bWUgZml4LCBnZXR0aW1lb2ZkYXkoKSB3YXMgbm90IGRldGVjdGVkIGJ5IGNvbmZpZ3VyZSBhbmQKCSAgdGhlIGZ0aW1lIGhlYWRlciB3YXNuJ3QgaW5jbHVkZWQsIGRvaGhoCgpUaHUgTWFyICA3IDEyOjE5OjM2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiB4bWxsaW50LmM6IHRyeWluZyB0byBmaXggIzcxNDU3IGZvciB0aW1pbmcKCSAgcHJlY2lzaW9uIHdoZW4gZ2V0dGltZW9mZGF5KCkgaXMgbm90IGF2YWlsYmxlIGJ1dCBmdGltZSgpIGlzCgpUaHUgTWFyICA3IDExOjI0OjAyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluIGRvYy9NYWtlZmlsZS5hbTogRml4ZWQgIzczNDA4IG1pc3NpbmcgaW1hZ2VzCgkgIGFyZSBub3cgY29waWVkIG9uIGluc3RhbGwgYW5kIHBhcnQgb2YgdGhlIC1kZXZlbCBSUE0KClRodSBNYXIgIDcgMDk6MzQ6MTYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogdHJ5aW5nIHRvIGF2b2lkIGJ1ZyAjNzIxNTAgd2hpY2ggd2FzIGFwcGFyZW50bHkKCSAgY2F1c2VkIGJ5IGEgZ2NjIGJ1ZyAob3IgYSBwcm9jZXNzb3IgcHJvYmxlbSkgYXMgZGV0YWlsZWQKCSAgYXQgaHR0cDovL3ZlaWxsYXJkLmNvbS9nY2MuYnVnCgpUaHUgTWFyICA3IDAxOjAyOjM3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL2N1dG5wYXN0ZS5weToKCSAgZml4ZWQgeG1sUmVjb25jaWxpYXRlTnMoKSwgYWRkZWQgYSBQeXRob24gdGVzdC9leGFtcGxlIGZvcgoJICBpbnRlci1kb2N1bWVudCBjdXQnbiBwYXN0ZQoJKiBweXRob24vbGlieG1sLnB5OiBmaXhlZCBub2RlLmRvYyBvbiBkb2N1bWVudCBub2RlcyBhbmQgYWRkZWQKCSAgeHBhdGhFdmFsKCkgb250byBub2RlIG9iamVjdHMKCldlZCBNYXIgIDYgMjI6Mzg6MDMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogZml4ZWQgc29tZSBodG1sU2V0TWV0YUVuY29kaW5nKCkgcHJvYmxlbXMKCSogcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvc2VyaWFsaXplLnB5OgoJICBmaXh1cCBhbmQgaW50ZWdyYXRlZCB0ZXN0cyBmb3IgdGhlIHNlcmlhbGl6YXRpb24gc3R1ZmYKCldlZCBNYXIgIDYgMTk6NDA6NTcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gbGlieG1sLjMgbGlieG1sLjQgbGlieG1sLnNwZWMuaW46IEZpeGVkIGJ1ZyAjNzI1NzAKCSAgbW92ZWQgdGhlIGxpYnhtbCBtYW4gcGFnZSB0byBzZWN0aW9uIDMKCldlZCBNYXIgIDYgMTg6MzQ6MDcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXggYnVnICM3MjQ5MAoJKiBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weTogYWRkZWQgbWV0aG9kcyBzZXJpYWxpemUoKQoJICBhbmQgc2F2ZVRvKCkgdG8gYWxsIG5vZGUgZWxlbWVudHMuCgpUdWUgTWFyICA1IDIxOjI3OjAzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGNsb3NlZCAjNzM0MzAsIGRvbid0IHJlYWQgZnJvbSBhbiBpbnB1dCBzb3VyY2UKCSAgd2hpY2ggaW5kaWNhdGVkIGFuIGVuZC1vZi1maWxlIG9yIGFuIGVycm9yLgoKVHVlIE1hciAgNSAxNjozMzo0MiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogbWFrZSBzdXJlIFNBWCBlbmREb2N1bWVudCBpcyBhbHdheXMgY2FsbGVkIGFzCgkgIHRoaXMgY291bGQgcmVzdWx0IGluIGEgUHl0aG9uIG1lbW9yeSBsZWFrIG90aGVyd2lzZSAoaXQncwoJICB1c2VkIHRvIGRlY3JlbWVudCByZWYtY291bnRpbmcpCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHkKCSAgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQKCSAgcHl0aG9uL3Rlc3RzL2Vycm9yLnB5IHB5dGhvbi90ZXN0cy94cGF0aC5weTogaW1wbGVtZW50ZWQKCSAgdGhlIHN1Z2dlc3Rpb25zIG1hZGUgYnkgR2FyeSBCZW5zb24gYW5kIGV4dGVuZGVkIHRoZSB0ZXN0cwoJICB0byBtYXRjaCBpdC4KClR1ZSBNYXIgIDUgMTA6MzU6MjQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weTogYXBwbGllZCBwYXRjaCBmaXhpbmcgIzczNDUwCgpNb24gTWFyICA0IDE3OjU5OjI5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGluZyAjNjEyOTAgIm5hbWVzcGFjZSBub2RlcyBoYXZlIG5vIHBhcmVudCIKCSAgbG9uZyBzdGFuZGluZyBkaXZlcmdlbmNlIGZyb20gdGhlIFhQYXRoIFJFQy4gTm9kZVNldHMKCSAgc2ltcGx5IGhvbGQgYSBjb3B5IG9mIG5hbWVzcGFjZSBub2RlcyBhbmQgdGhvc2Ugbm9kZSAtPm5leHQKCSAgcG9pbnRzIHRvIHRoZSBwYXJlbnQgKHdoaWNoIG1heSBub3QgYmUgdGhlIG5vZGUgY2FycnlpbmcgdGhlCgkgIGRlZmluaXRpb24pLgoJKiBpbmNsdWRlL2xpYnhtbC94cGF0aC5oOiBmbGFnZ2VkIGJ1dCBkaWRuJ3QgYWRkZWQgYSBwb3NzaWJsZQoJICBzcGVlZHVwCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmM6IHJlbW92ZWQgc29tZSB3YXJuaW5ncyBmcm9tIHB1c2gKCSAgcGFyc2VyIGR1ZSB0byBuZXcgc3RhdGUgYmVpbmcgYWRkZWQuCgkqIHRyZWUuYzogbmV3IGZpeCBmcm9tIEJvcmlzIEVyZG1hbm4KCSogY29uZmlndXJlLmluIGMxNG4uYyBpbmNsdWRlL2xpYnhtbC9jMTRuLmggdGVzdEMxNE4uYzogYWRkZWQKCSAgdGhlIFhNTCBDYW5vbmFsaXphdGlvbiBzdXBwb3J0IGZyb20gQWxla3NleSBTYW5pbgoKU3VuIE1hciAgMyAxNToxMjo0MiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IHBhdGNoIGZyb20gQm9yaXMgRXJkbWFubiBmaXhpbmcgc29tZSBuYW1lc3BhY2Ugb2RpdGllcwoJICB3aXRoIHhtbENvcHlOb2RlKCkKClNhdCBNYXIgIDIgMTA6MzM6MDQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogZml4IGJ1ZyAjNzI3MDYgd2hlbiBsb2FkaW5nIGEgTlVMTCBlbnRpdHkKCkZyaSBNYXIgIDEgMTc6MTQ6NDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IEZpeGVkICM3MjM0NiwgYWJvdXQgaGFuZGxpbmcgb2YgeG1sbnM6Zm9vPSIiLCB0aGlzIGNvdWxkCgkgIGFjdHVhbGx5IGNoYW5nZSBpbiBhIGZ1dHVyZSBYTUwgTmFtZXNwYWNlIHJldmlzaW9uLgoKRnJpIE1hciAgMSAxNzoxMjoxNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vdHlwZXMuYyBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3hwYXRocmV0LnB5OgoJICBhZGRlZCB0aGUgcG9zc2liaWxpdHkgb2YgcmV0dXJuaW5nIG5vZGVzZXRzIGZyb20gWFBhdGggZXh0ZW5zaW9uCgkgIGZ1bmN0aW9ucyB3cml0dGVuIGluIFB5dGhvbgoKRnJpIE1hciAgMSAxMzo1NjoxMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vKjogY29tbWl0aW5nIHNvbWUgUHl0aG9uIGJpbmRpbmdzIHdvcmsgZG9uZSB3aGlsZSB0cmF2ZWxsaW5nCgpGcmkgTWFyICAxIDEwOjExOjE1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogY2xvc2UgIzcyNjYzIGFuZCAjNzI2NTgsIGRvbid0IG1lbWR1bXAgdW5sZXNzIGNvbXBpbGVkCgkgIGV4cGxpY2l0ZWx5IHdpdGggbWVtb3J5IGRlYnVnZ2luZyBzd2l0Y2hlZCBvbgoKU2F0IEZlYiAyMyAxMTowODowOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbAoJICBweXRob24vbGlieG1sMmNsYXNzLnR4dCBweXRob24vbGlieG1sX3dyYXAuaCBweXRob24vdHlwZXMuYzoKCSAgQWRkZWQgd3JhcHBlciBmb3IgdGhlIHhtbFVSSVB0ciB0eXBlLCBwcm92aWRlZCBhY2Nlc3NvcnMsIGZpeGVkCgkgIHRoZSBhY2Nlc3NvciBnZW5lcmF0b3IgZm9yIHN0cmluZ3MKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy90c3RVUkkucHk6IGFkZGVkIGEgc3BlY2lmaWMKCSAgcmVncmVzc2lvbiB0ZXN0LgoKRnJpIEZlYiAyMiAyMzo0NDo1NyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vUkVBRE1FIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9zZXR1cC5weToKCSAgYWRkZWQgdGhlICd1c3VhbCcgc2V0dXAucHkgdG8gYWxsb3cgYnVpbGRpbmcgYSBsaWJ4bWwyLXB5dGhvbgoJICBtb2R1bGUgYmFzZWQgb24gdGhlIHNhbWUgY29kZS4gVGhlIGluaXRpYWxpemF0aW9uIGlzIGhvd2V2ZXIKCSAgZGlmZmVyZW50IHRoZSAyIC5zbyBmaWxlcyBmbyBsaWJ4bWwyIGFuZCBsaWJ4c2x0IGFyZSBpZGVudGljYWwgYW5kCgkgIHRoZXkgZW50cnkgcG9pbnQgaW5pdGlhbGl6ZSBib3RoIGxpYnJhcmllcy4gdGhpcyBpcyBkb25lIHRvIGF2b2lkCgkgIHNvbWUgcG9zc2libGUgbmFzdHkgcHJvYmxlbSBzaW5jZSB0aGUgUHl0aG9uIGRvbid0IG1lcmdlIHRoZSBtYXBzCgkgIG9mIGFsbCBzaGFyZWQgbW9kdWxlcy4KCldlZCBGZWIgMjAgMjM6MTY6MDggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIGEgcHVzaC9lbmNvZGluZyBidWcgcmVwb3J0ZWQgYnkgTWljaGFlbAoJICBvbiBsaWJyc3ZnCgpXZWQgRmViIDIwIDE5OjU0OjA1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oOiBmaXhlcyBhIG1pc3BsYWNlZCAjZW5kaWYKCldlZCBGZWIgMjAgMTc6NDc6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgdmFsaWQuYzogZm91bmQgYW5kIGZpeGVkIGEgY291cGxlIG9mIGFsbG9jYXRpb24gYnVncwoKV2VkIEZlYiAyMCAxNTozNjowMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MveG1sLmh0bWwgZG9jL3B5dGhvbi5odG1sIGRvYy8qOiBhZGRlZCBhIFB5dGhvbiBhbmQgYmluZGluZwoJICBwYWdlIGRlc2NyaWJpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIFB5dGhvbiBiaW5kaW5ncyBhbmQgCgkgIGdpdmluZyBwb2ludGVycyB0byB0aGUgb3RoZXIgbGFuZ3VhZ2VzIHdyYXBwZXJzLgoKV2VkIEZlYiAyMCAxMToxNjoxNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHByZXBhcmluZyAyLjQuMTYKCSogZG9jLyogcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3MsCgkgIHJlYnVpbHQgdGhlIEFQSSBhbmQgd2ViIHNpdGUKCSogeHBhdGguYzogZml4ZWQgIzcxOTc4IHBvcnRhYmlsaXR5IGJ1Z3MKClR1ZSBGZWIgMTkgMjI6NDk6MzYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IG9vcHMgYnJva2UgYXV0b21hdGljIGRlZmF1bHRpbmcgb2YgbmFtZXNwYWNlcyBhdHRyaWJ1dGVzLgoKVHVlIEZlYiAxOSAyMjowMTozNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaCBwYXJzZXIuYzogaGFkIHRvIGNoYW5nZQoJICAyIGludGVybmFsIHBhcnNpbmcgQVBJIHdoZW4gcHJvY2Vzc2luZyBkb2N1bWVudCBjb250ZW50CgkgIHRvIGNoZWNrIHRoZSBzdGFydCBhbmQgZW5kIG9mIGVsZW1lbnQgY29udGVudCBhcmUgZGVmaW5lZAoJICBpbiB0aGUgc2FtZSBlbnRpdHkKCSogdmFsaWQuYyBpbmNsdWRlL2xpYnhtbC92YWxpZC5oOiBhdHRyaWJ1dGUgbm9ybWFsaXphdGlvbiBjYW4KCSAgZ2VuZXJhdGUgYSB2YWxpZGl0eSBlcnJvciBhZGRlZCB4bWxWYWxpZEN0eHROb3JtYWxpemVBdHRyaWJ1dGVWYWx1ZSgpCgkgIHdpdGggdGhlIGNvbnRleHQgdG8gcmVwb3J0IGl0LgoJKiBTQVguYzogZml4ZWQgdGhlIGxhc3Qga25vd24gYnVncywgY3JhenkgdmFsaWRhdGlvbiBjb25zdHJhaW50cwoJICB3aGVuIGEgZG9jdW1lbnQgaXMgc3RhbmRhbG9uZSBzZWVtcyBjb3JyZWN0bHkgaGFuZGxlZC4gVGhlcmUKCSAgaXMgYSBjb3VwbGUgb2Ygb3BlbiBpc3N1ZXMgbGVmdCB3aGljaCBuZWVkIGNvbnNpZGVyYXRpb24gZXNwZWNpYWxseQoJICBQRTkzIG9uIGV4dGVybmFsIHVucGFyc2VkIGVudGl0aWVzIGFuZCBzdGFuZGFsb25lIHN0YXR1cy4gCgkgIFJhbiAxODE5IHRlc3RzOiAxODE3IHN1Y2VlZGVkLCAyIGZhaWxlZCBhbmQgMCBnZW5lcmF0ZWQgYW4gZXJyb3IgaW4gOC4yNiBzLgoJICBUaGUgMiB0ZXN0cyBsZWZ0IGZhaWxpbmcgYXJlIGFjdHVhbGx5IGluIGVycm9yLiBDbGVhbnVwIGRvbmUuCgpUdWUgRmViIDE5IDE1OjE3OjAyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGltcGxlbWVudGVkIEU1OSBzcGFjZXMgaW4gQ0RBVEEgZG9lcyBub3QgbWF0Y2ggdGhlCgkgIG5vbnRlcm1pbmFsIFMKClR1ZSBGZWIgMTkgMTQ6NDQ6NTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmMgcGFyc2VyLmMgdmFsaWQuYzogbW9yZSB2YWxpZGF0aW9uIHRlc3QgZml4dXBzCgkqIGNoZWNrLXhtbC10ZXN0LXN1aXRlLnB5OiBhZGRlZCBkdXJhdGlvbiBpbmZvIGZvciB0aGUgdGVzdHMKCk1vbiBGZWIgMTggMjM6MjU6MDggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgdmFsaWQuYzogYSBjb3VwbGUgb2YgZXJyb3JzIHdlcmUgcmVwb3J0ZWQgYnV0IG5vdAoJICBzYXZlZCBiYWNrIGFzIHN1Y2ggaW4gdGhlIHBhcnNpbmcgY29udGV4dC4gRG93biB0byAxJSBmYWlsdXJlIHJhdGUKCSAgUmFuIDE4MTkgdGVzdHM6IDE4MDEgc3VjZWVkZWQsIDE4IGZhaWxlZCBhbmQgMCBnZW5lcmF0ZWQgYW4gZXJyb3IKCk1vbiBGZWIgMTggMjA6MTY6MTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSW50ZXJuYWxkLmM6IGlzRXh0ZW5kZXIgd2FzIG1pc3NpbmcgYSBjaGFyIAoJKiBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogJSBhcmUgYWNjZXB0YWJsZSBpbiB0aGUKCSAgaW50ZXJuYWwgc3Vic2V0IGlmIHdpdGhpbiBhIFBVQkxJQyBJRAoKTW9uIEZlYiAxOCAxOToyNzozMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYyBwYXJzZXJJbnRlcm5hbHMuYyB2YWxpZC5jOiBtb3JlIHdvcmsgb24gdGhlIGNvbmZvcm1hbmNlCgkgIHN1aXRlLiBUb29rIHRoZSBzdGVwIHRvIGZpbmFsbHkgYmxvY2sgZG9jdW1lbnRzIHdpdGggZW5jb2RpbmcKCSAgZXJyb3JzLiBJdCdzIGEgZmF0YWwgZXJyb3IgcGVyIHRoZSBzcGVjLCBwZW9wbGUgc2hvdWxkIGhhdmUgZml4ZWQKCSAgdGhlaXIgZG9jdW1lbnRzIGJ5IG5vdy4KCk1vbiBGZWIgMTggMTU6MzA6MTQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2hlY2steG1sLXRlc3Qtc3VpdGUucHk6IGZpeGVkIHRoZSB0ZXN0IHNjcmlwdCBhZnRlciBzb21lIGRpc2N1c3Npb24KCSAgb24gdGhlIHNlbWFudGljIG9mIFRZUEU9ImVycm9yIgoJKiBNYWtlZmlsZS5hbTogYWRkZWQgdGhlIHNjcmlwdCB0byB0aGUgZGlzdHJpYgoKTW9uIEZlYiAxOCAxMjoxNzo0MSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYyBlbnRpdGllcy5jOiBmaXhlZCBhIGNvdXBsZSBvZiBjb25mb3JtYW5jZXMgaXNzdWVzIGRlZXAKCSAgaW50byB0aGUgdmFsaWRhdGlvbiBjb2RlIChzdGFuZGFsb25lIGFuZCB1bmRlY2xhcmVkIE5vdGF0aW9ucykKCk1vbiBGZWIgMTggMDA6MTc6MjQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkICM3MTc0MSBzdXBpZCB0eXBvIGFuIGEgYnVnIGFib3V0IGVuY29kaW5nIHBhcnNpbmcKCSAgc3RheWVkIHRoZXJlIGZvciB5ZWFycyAhCgpNb24gRmViIDE4IDAwOjA2OjQyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmMgU0FYLmM6IGZpeGVkICM3MTc0MCBOb3RhdGlvbkRlY2wgd2l0aCBhIHJlcXVpcmVkIGZpZWxkCgkgIG1pc3NpbmcKClN1biBGZWIgMTcgMjM6NDU6NDAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2hlY2steG1sLXRlc3Qtc3VpdGUucHk6IGltcHJvdmVkIHRoZSBiZWhhdmlvdXIgYSBiaXQgYXMKCSAgd2VsbCBhcyB0aGUgbG9ncwoJKiBwYXJzZXIuYyB2YWxpZC5jIFNBWC5jOiBmaXhlZCBhIGZldyBtb3JlIGJ1Z3MgCgkgICJSYW4gMTgxOSB0ZXN0czogMTc3OCBzdWNlZWRlZCwgNDEgZmFpbGVkLCBhbmQgMCBnZW5lcmF0ZWQgYW4gZXJyb3IiCgpTdW4gRmViIDE3IDIwOjQxOjM3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNoZWNrLXhtbC10ZXN0LXN1aXRlLnB5OiBweXRob24gc2NyaXB0IHRvIHJ1biByZWdyZXNzaW9uIHRlc3RzCgkgIGFnYWluc3QgdGhlIFhNTCBUZXN0IHN1aXRlIG9mIFczQy9PQVNpcwoJKiBTQVguYzogZml4ZWQgYSB2YWxpZGF0aW9uIGJ1ZwoJKiBwYXJzZXIuYzogZml4ZWQgMyBlcnJvcnMgcG9pbnRlZCBieSB0aGUgdGVzdCBzdWl0ZQoJKiBkb2MvYnVpbGREb2NCb29rQ2F0YWxvZzogZml4ZWQgYSB0eXBvIHBvaW50ZWQgYnkgZHJha2UKCSogcHl0aG9uL01ha2VmaWxlLmFtOiBmaXhlZCBhIGRlcGVuZGVuZHkKCkZyaSBGZWIgMTUgMjE6NDc6MTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbWVtb3J5LmM6IGF2b2lkIGEgd2FybmluZyBidWcgIzcxNTk0CgpXZWQgRmViIDEzIDIyOjEzOjMzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbG1lbW9yeS5jOiBKZXNzZSBQZXJyeSBwcm92aWRlZCBhIHBhdGNoIHRvIHJlbW92ZSBhIGZldwoJICB3YXJuaW5nIG9uIGFscGhhL1RydTY0CgpXZWQgRmViIDEzIDE0OjMwOjQ5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2VudGl0aWVzLmg6IGZpeGluZyBhIGNvbW1lbnQKCSogdmFsaWQuYzogZml4aW5nIHNvbWUgdHJvdWJsZXMgd2l0aCB2YWxpZGl0eSBjaGVjayBvbiBuYW1lc3BhY2VzCgkqIHJlc3VsdC9WQy9OUzMgdGVzdC9WQy9OUzM6IGFkZGVkIGEgc3BlY2lmaWMgcmVncmVzc2lvbiB0ZXN0CgpXZWQgRmViIDEzIDE0OjA1OjI0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogRml4aW5nICM3MTM0MiBzZXJpYWxpemluZyAnXG4nIGluIGF0dHJpYnV0ZSB2YWx1ZXMKCSogcmVzdWx0L25vZW50L2F0dDMgcmVzdWx0L2F0dDMgdGVzdC9hdHQzOiBhZGRlZCBhIHNwZWNpZmljCgkgIHRlc3QuCgpUdWUgRmViIDEyIDE0OjQ1OjMyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYzogY291cGxlIG9mIGJ1ZyBmaXhlcwoKTW9uIEZlYiAxMSAxOTo0MToyOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vKi5weTogcmVtb3ZlZCB0YWJzIGFuZCB1c2VkIHNwYWNlcy4KCk1vbiBGZWIgMTEgMTk6MjU6NDQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiBwcmVwYXJpbmcgMi40LjE1CgkqIGRvYy9uZXdzLmh0bWwgZG9jL3htbC5odG1sIGRvYy94bWxpby5odG1sOiByZWJ1aWx0IHNvbWUgZG9jcwoKTW9uIEZlYiAxMSAxNDo1MzoyNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MveG1sY2F0YWxvZ19tYW4ueG1sOiB0cnlpbmcgdG8gY2xvc2UgUmVkIEhhdCBidWcgIzU4NzA3CgkgIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTg3MDcKCk1vbiBGZWIgMTEgMDk6NTM6MDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvZW5jb2RpbmcuaCBpbmNsdWRlL2xpYnhtbC9lbnRpdGllcy5oCgkgIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaAoJICBpbmNsdWRlL2xpYnhtbC90aHJlYWRzLmggaW5jbHVkZS9saWJ4bWwvdHJlZS5oCgkgIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oOiB0cnlpbmcgdG8gZml4IHRoZSBpbmNsdWRlIG1lc3MKCk1vbiBGZWIgMTEgMDg6NTM6MzMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IHJldmVydGVkIHBhcnQgb2YgdGhlIHByZXZpb3VzCgkgIGF0dGVtcHQgdG8gcHJvdmlkZSAjNjk2NTUsIHRoaXMgd2FzIGJyZWFraW5nIHRoZSBidWlsZC4KClN1biBGZWIgMTAgMTQ6MTM6MzQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyBNYWtlZmlsZS5hbSBidWlsZF9nbG9iLnB5IGNvbmZpZ3VyZS5pbiBkZWJ1Z1hNTC5jCgkgIGdsb2JhbHMuYyBwYXJzZXIuYyB0aHJlYWRzLmMgdHJlZS5jIHZhbGlkLmMgeG1sbWVtb3J5LmMKCSAgeHBhdGguYyB4cG9pbnRlci5jIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaAoJICBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaCBpbmNsdWRlL2xpYnhtbC90cmVlLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5LmggaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaDoKCSAgVGVudGF0aXZlbHkgZml4ZWQgIzY5NjU1ICwgbWFrZSBjb21waWxpbmcgd2l0aCAtV3JlZHVuZGFudC1kZWNscwoJICBjbGVhbi4KICAgICAgICAqIHB5dGhvbi9saWJ4bWwuYzogZml4ZWQgYSB3YXJuaW5nLgoKU3VuIEZlYiAxMCAxMjowMjo1OSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmMgdmFsaWQuYyB4aW5jbHVkZS5jOiBmaXggIzY4ODgyLCBjbGVhbnVwIHRoZSBYSW5jbHVkZQoJICBjb3B5aW5nIG9mIG5vZGUsIG1lcmdlIGJhY2sgSURzIGluIHRoZSB0YXJnZXQgZG9jdW1lbnQuCgkqIHJlc3VsdC9YSW5jbHVkZS9kb2NpZHMueG1sIHRlc3QvWEluY2x1ZGUvZG9jcy9kb2NpZHMueG1sCgkgIHRlc3QvWEluY2x1ZGUvZW50cy9pZHMueG1sOiB0ZXN0IGNhc2UKCSogcmVzdWx0L1ZDL0VsZW1lbnRWYWxpZDQ6IG91dHB1dCBjaGFuZ2VkIGR1ZSB0byBhIHR5cG8gZml4CgpTYXQgRmViICA5IDIzOjE1OjA0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbTogc2VlbXMgc29tZSB2ZXJzaW9uIG9mIGF1dG9tYWtlIGRpZG4ndAoJICBnZW5lcmF0ZSB0aGUgZGVwZW5kZW5jaWVzIHJpZ2h0IGFzIEphY29iIGZvdW5kIG91dC4gQWRkCgkgIGFuIGV4dHJhIGRlcGVuZGVuY3kgcnVsZS4KClNhdCBGZWIgIDkgMTg6NTk6MjMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmMgdmFsaWQuYzogSnVzdGluIEZsZXRjaGVyIGZvdW5kIHNvbWUgcGFydHMKCSAgb2YgdGhlIGNvZGUgbmVlZGluZyBjbGVhbnVwCgkqIGxpYnhtbC5zcGVjLmluIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vZ2VuZXJhdG9yLnB5CgkgIHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sLnB5OiBGaXhlZCB0aGUgcHl0aG9uIE1ha2VmaWxlcwoJICBjb3JyZWN0ZWQgYSBidWcgc2hvd2luZyB1cCBvbiBpYTY0LCBjaGFuZ2VkIHRoZSBuYW1lIG9mIHRoZQoJICBweXRob24gaW50ZXJuYWwgbW9kdWxlIHRvbwoKRnJpIEZlYiAgOCAxNToxOToyOCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogYXBwbGllZCBwYXRjaCBmcm9tIEFuZHJpcyBQYXZlbmlzIGZvciBiaW5hcnkKCSAgbmFtZSBzdWZmaXhlcwoKRnJpIEZlYiAgOCAxNDo0MzoxNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmMgd2luMzIvd2luMzJjb25maWcuaDogZml4aW5nICM2ODc0OAoKRnJpIEZlYiAgOCAxNDozNzowNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXhpbmcgIzcwMTY2CgpGcmkgRmViICA4IDE0OjMxOjI0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeGluZyAjNzAwNzcKCkZyaSBGZWIgIDggMTQ6MjQ6MDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogQ29weXJpZ2h0IE1ha2VmaWxlLmFtIFJFQURNRSBjb25maWd1cmUuaW4gbGlieG1sLnNwZWMuaW46CgkgIENoYW5nZWQgdG8gdGhlIE1JVCBMaWNlbmNlCgkqIGRvYy9GQVEuaHRtbCBkb2MvY2F0YWxvZy5odG1sIGRvYy9pbnRyby5odG1sIGRvYy94bWwuaHRtbAoJICBkb2MveG1saW8uaHRtbDogdXBkYXRlZCB0aGUgZG9jIGFjY29yZGluZ2x5CgkqIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nCgkgIDIuNC4xNCByZWxlYXNlCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0IHB5dGhvbi9saWJ4bWxfd3JhcC5oIHB5dGhvbi90eXBlcy5jOgoJICBmaXhlZCB0aGUgY29uc3QgeG1sQ2hhciAqIHdyYXBwZXIgYW5kIGdlbmVyYXRvciwgWFBhdGggZXh0ZW5zaW9uCgkgIGZ1bmN0aW9ucyBub3cgdXNlIHRoZSBjb250ZXh0IGFzIGZpcnN0IGFyZ3VtZW50CgkqIHB5dGhvbi90ZXN0cy90c3R4cGF0aC5weSBweXRob24vdGVzdHMveHBhdGgucHkKCSAgcHl0aG9uL3Rlc3RzL3hwYXRoZXh0LnB5OiBVcGRhdGVkIHRoZSB0ZXN0cyBhY2NvcmRpbmdseQoJKiB0cmVlLmM6IGZpeGVkIGJ1ZyAjNzAwNjcKClRodSBGZWIgIDcgMTc6MzM6NTggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGNsZWFudXAKCSogZGVidWdYTUwuYzogYWx3YXlzIHVzZSBzdGRvdXQgaWYgb3V0cHV0IGlzIE5VTEwKCSogeG1sSU8uYzogZG9uJ3QgY2xvc2UgZmlsZWRlc2NyaXB0b3JzIHBhc3NlZCB0byBvdXRwdXRCdWZmZXJzCgkqIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0CgkgIHB5dGhvbi9saWJ4bWxfd3JhcC5oIHB5dGhvbi90eXBlcy5jOiBhdWdtZW50ZWQgdGhlIG51bWJlciBvZiBiaW5kaW5ncwoJICBoYW5kbGluZyBGSUxFICogYW5kIFhQYXRoIGNvbnRleHRzCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbTogYXZvaWQgYSBzdHVwaWQgcHJvYmxlbSBkdWUgdG8gdGhlCgkgIHVzZSBvZiBURVNULgoKV2VkIEZlYiAgNiAyMzozNzowNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IGZpeGVkIHN0dXBpZCBidWcgIzcwNzM4IGZvdW5kIGJ5IGFsZm9ucyBob29nZXJ2b3JzdAoKV2VkIEZlYiAgNiAxNzowNDo1MSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vVE9ETyBweXRob24vbGlieG1sLmM6IGNsZWFudXAgdGhlIGV4dGVuc2lvbiBmdW5jdGlvbiBsb29rdXAKCSogeG1sbWVtb3J5LmMgaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IGFsd2F5cyBjb21waWxlIHRoZSBsaXN0CgpUdWUgRmViICA1IDE3OjMzOjMwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBweXRob24vTWFrZWZpbGUuYW06IGRvIG5vdCBpbnN0YWxsIG91dHNpZGUKCSAgb2YgcHJlZml4CgpNb24gRmViICA0IDE1OjA1OjU1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9UT0RPIHB5dGhvbi9saWJ4bWwuYzogc3RhcnRlZCBhZGRpbmcgU0FYIGludGVyZmFjZXMKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9wdXNoU0FYLnB5OiBhZGRlZCBhIGJhc2ljCgkgIFNBWCB0ZXN0CgpNb24gRmViICA0IDAxOjEyOjQyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogaGFyZGVuZWQgdGhlIGFkZENoaWxkIGZ1bmN0aW9uCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0IHB5dGhvbi9saWJ4bWxfd3JhcC5oIHB5dGhvbi9UT0RPOgoJICBhZGRlZCBhY2Nlc3NvcnMgbmVlZGVkIGZvciB4bWxOb2RlLCBhIGJpdCBtb3JlIHRlc3RpbmcgYW5kCgkgIGV4dGVuc2lvbiBvZiBpbnRlcmZhY2VzCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvYnVpbGQucHk6IGFkZGVkIGEgdGVzdAoJICBidWlsZCBmcm9tIHNjcmF0Y2gvc2F2ZS9sb2FkL2NoZWNrCgpTdW4gRmViICAzIDIxOjEwOjM5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jOiBjaGFuZ2UgYSBzbWFsbCBiaXQgaW4gdGhlIHdheSB2YWxpZGlkeQoJICBlcnJvciBtZXNzYWdlcyBnZXQgaW5pdGlhbGl6ZWQKCSogcHl0aG9uL1RPRE8gcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0IHB5dGhvbi9saWJ4bWxfd3JhcC5oIHB5dGhvbi90eXBlcy5jOgoJICBhZGRlZCBzb21lIG1lbW9yeSBkZWJ1Z2dpbmcgdG8gdHJhY2sgbGVha3MgYXQgdGhlIGxpYnhtbDIgbGV2ZWwKCSogcHl0aG9uL3Rlc3RzLyoucHk6IGNoYW5nZWQgYWxsIHRlc3RzIHRvIGNoZWNrIGZvciBsZWFrcywKCSAgdGhlcmUgaXMganVzdCBvbmUgbGVmdCBpbiBYUGF0aCBleHRlbnNpb24gcmVnaXN0cmF0aW9ucy4KClN1biBGZWIgIDMgMTc6NTA6NDYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL1RPRE8gcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbAoJICBweXRob24vbGlieG1sMmNsYXNzLnR4dDogbW9yZSBhY2Nlc3NvciBjbGFzc2VzIGZvciB0aGUgcGFyc2VyCgkgIGNvbnRleHQsIGFsbG93IHRvIHN3aXRjaCBvbiBhbmQgY2hlY2sgdmFsaWRpdHkKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9lcnJvci5weQoJICBweXRob24vdGVzdHMvaW52YWxpZC54bWwgcHl0aG9uL3Rlc3RzL3ZhbGlkLnhtbAoJICBweXRob24vdGVzdHMvdmFsaWRhdGUucHk6IGF0dGRlZCBtb3JlIHRlc3QgYW5kIGFuZCBhZGRlZCBlcnJvci5weQoJICB3aGljaCBJIGZvcmdvdCB0byBjb21taXQgaW4gdGhlIGxhc3Qgc3RlcAoKU3VuIEZlYiAgMyAxNjowMzo1NSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL3R5cGVzLmM6IGNsZWFudXAKCSogcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHkgcHl0aG9uL2xpYnhtbF93cmFwLmgKCSAgcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbCAKCSAgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IGFkZGVkIGNsYXNzIGZvciBwYXJzZXIgY29udGV4dCwgYWRkZWQKCSAgZmlyc3QgY3V0IGZvciBwdXNoIG1vZGUgc3VwcG9ydC4gQWRkZWQgYSBmcmFtZXdvcmsgdG8gZ2VuZXJhdGUKCSAgYWNjZXNzb3JzIGZ1bmN0aW9ucy4KCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9wdXNoLnB5OiBhZGRlZCBhIHB1c2gKCSAgdGVzdAoKU3VuIEZlYiAgMyAwMDoxNzoyNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL1RPRE8gcHl0aG9uL2xpYnhtbC5weTogZml4ZWQgYSBzbWFsbAoJICBidWcgYSBiaXQgb2YgY2xlYW51cC4KClNhdCBGZWIgIDIgMjI6NDc6MTAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbAoJICBweXRob24vbGlieG1sMmNsYXNzLnR4dDogYWRkaW5nIGVycm9yIHJlZGlyZWN0aW9ucyBhbmQgcHJlZm9ybWF0CgkgIHRvIGEgcHl0aG9uIGhhbmRsZXIKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy8qLnB5OiBjbGVhbnVwIG1hZGUgYWxsCgkgIHRlc3RzIHNlbGYgY2hlY2tpbmcKClNhdCBGZWIgIDIgMTM6MTg6NTQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHk6IGZpeGVkIGEgc3R1cGlkIGJ1ZyB3aGVuIHJlbmFtaW5nCgkgIGEgZnVuY3Rpb24KClNhdCBGZWIgIDIgMTE6MjU6NTEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW4gcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi9UT0RPIHB5dGhvbi9nZW5lcmF0b3IucHkKCSAgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBQcm9ncmVzc2luZyB0aHJvdWdoIHRoZSBUT0RPcywgY2xhc3MKCSAgZGVzY3JpcHRpb24gb3V0cHV0LCBleHRyYSBYTUwgQVBJLCBSUE0gbm93IGJ1aWxkcyB0aGUgd3JhcHBlcnMKCSAgZm9yIGFsbCBweXRob24gaW5zdGFsbGVkIHZlcnNpb25zCgpTYXQgRmViICAyIDEwOjEzOjUyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBsaWJ4bWwuc3BlYy5pbiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL1RPRE8KCSAgcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sMmNsYXNzLnR4dDogYWRkZWQgbW9yZSBpbmZvcm1hdGlvbnMKCSAgaW4gdGhlIGxpYnhtbDItcHl0aG9uIHBhY2thZ2UgaW5jbHVkaW5nIGRvY3MuIFNsaWdodGx5IGNoYW5nZWQKCSAgdGhlIGNsYXNzIGhpZXJhcmNoeQoJKiBweXRob24vdGVzdHMvKjogYWRkZWQgYmFzaWMgcmVncmVzc2lvbiB0ZXN0cyBpbmZyYXN0cnVjdHVyZSB0b28KCkZyaSBGZWIgIDEgMjM6MTE6NTggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGxpYnhtbC5zcGVjLmluIGV4YW1wbGUvTWFrZWZpbGUuYW0gcHl0aG9uL01ha2VmaWxlLmFtOgoJICBhZGRlZCBsaWJ4bWwyLXB5dGhvbiBhcyBwYXJ0IG9mIHRoZSBwYWNrYWdlcyBpbnN0YWxsZWQKCkZyaSBGZWIgIDEgMTg6NDg6MTkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jCgkgIHB5dGhvbi9saWJ4bWwucHk6IG1vcmUgd29yaywgbm93IGFibGUgdG8gZXh0ZW5kIHRoZQoJICBYUGF0aCBpbnRlcnByZXRlciB3aXRoIGZ1bmN0aW9ucyB3cml0dGVuIGluIHB5dGhvbi4KCkZyaSBGZWIgIDEgMTA6Mjg6NTEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtOiBKYWNvYiBzZW50IGEgcGF0Y2ggdG8gYWxsb3cgYnVpbGRpbmcgZnJvbQoJICB0YXJmaWxlLgoKRnJpIEZlYiAgMSAwMDo0MDo0OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL2xpYnhtbC5jIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbToKCSAgaW5zZXJ0ZWQgdGhlIHB5dGhvbiB3cmFwcGVycyBidWlsZCwgSSBob3BlIHRoaXMgd29uJ3QgYmUgdG9vCgkgIHVucG9ydGFibGUKClRodSBKYW4gMzEgMjE6Mjc6MzcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogbWlub3Igb3B0aW1pemF0aW9uCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHkKCSAgcHl0aG9uL2xpYnhtbF93cmFwLmg6IG1vcmUgd29yayBvbiB0aGUgcHl0aG9uIGJpbmRpbmdzLAoJICB0aGV5IG5vdyBzdXBwb3J0IFhQYXRoIGFuZCB0aGVyZSBpcyBubyBldmlkZW50IGxlYWsKClRodSBKYW4gMzEgMDA6NDg6MDYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weToKCSAgbW9yZSB3b3JrIG9uIHRoZSBweXRob24gYmluZGluZ3MgZ2VuZXJhdG9yLgoKV2VkIEphbiAzMCAyMTo1MToyNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sX3dyYXAuaDoKCSAgbW9yZSB3b3JrIG9uIHRoZSBweXRob24gYmluZGluZ3MuCgpXZWQgSmFuIDMwIDE3OjM1OjMzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHkKCSAgcHl0aG9uL2xpYnhtbF93cmFwLmg6IGNvbW1pdGVkIGVhcmx5IHZlcnNpb24gb2YgYSBweXRob24gYmluZGluZwoJICBmb3IgcHJpdmF0ZSB1c2Ugb25seSBBVE0KClNhdCBKYW4gMjYgMjI6NDE6MTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW50aXRpZXMuYyB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvZW50aXRpZXMuaDogYXBwbGllZCBwYXRjaAoJICBmcm9tIEFudGhvbnkgSm9uZXMgdG8gaW1wbGVtZW50IGNvcHkgb2YgRFREIHN1YnRyZWUgdG9vLiBIYWQKCSAganVzdCB0byBrZWVwIDIgZnVuY3Rpb24gcHJpdmF0ZSB3aGljaCByZWFsbHkgb3VnaHQgdG8gYmVjb21lCgkgIHB1YmxpYyBvbmVzLgoKRnJpIEphbiAyNSAxNToxNDo1NSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGFkZGVkIHBvaW50ZXJzIHRvIHRoZSB3ZWIgcGFnZXMgaW4gdGhlIHVzYWdlKCkKClRodSBKYW4gMjQgMTc6MDQ6MDQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBtb3JlIGZpeGVzIGZyb20gUGV0ciBLb3plbGthIGZvciBhdHRyaWJ1dGUgaGFuZGxpbmcKCSAgaW4gdGhlIHRyZWUgQVBJIHRvIGFsaWduIHRoZSBzZW1hbnRpYyB3aXRoIERPTS4KClRodSBKYW4gMjQgMTY6MDA6NTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYyB0cmVlLmMgZW50aXRpZXMuYzogYW5vdGhlciBzZXQgb2YgcGF0Y2hlcyBmcm9tCgkgIEFudGhvbnkgSm9uZXMgZm9yIGNvcHkgb3BlcmF0aW9ucyBjbGVhbnVwIGFuZCByb2J1c3RuZXNzCgpXZWQgSmFuIDIzIDE4OjUzOjU1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9BUEljaHVuayouaHRtbCBkb2MvcGFyc2VkZWNsLnB5IGRvYy9hcGkueHNsOiBnZW5lcmF0ZWQKCSAgYW4gYWxwaGFiZXRpYyBpbmRleCBiYXNlZCBvbiBjb21tZW50cyBjb250ZW50CgkqIGRvYy8qOiByZWJ1aWx0IHRoZSB3ZWIgc2l0ZSB3aXRoIHRoZSBuZXcgcmVmZXJlbmNlcwoKV2VkIEphbiAyMyAxNToxNDoyMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuaDogR3JlZyBTamFhcmRlbWEgc3VnZ2VzdGVkIHRvIHVzZSBhbgoJICBlcG9uZW50aWFsIGJ1ZmZlciBncm90aCBwb2xpY3kgaW4geG1sUGFyc2VyQWRkTm9kZUluZm8oKQoKV2VkIEphbiAyMyAxMzozMjo0MCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvYXBpLnhzbCBkb2MvQVBJY29uc3RydWN0b3JzLmh0bWwgZG9jL0FQSWZpbGVzLmh0bWwKCSAgZG9jL0FQSWZ1bmN0aW9ucy5odG1sIGRvYy9BUElzeW1ib2xzLmh0bWwgZG9jL2xpYnhtbDItcmVmcy54bWwKCSAgZG9jL3BhcnNlZGVjbC5weSBkb2MvTWFrZWZpbGUuYW06IHVwZGF0ZWQgdGhlIHB5dGhvbiBleHRyYWN0b3IKCSAgdG8gZ2VuZXJhdGUgY3Jvc3MtcmVmZXJlbmNlcywgYW5kIGFkZGVkL3VwZGF0ZWQgdGhlIHN0eWxlc2hlZXRzCgkgIHRvIGdlbmVyYXRlIGFuZCBsaW5rIEFQSSBpbmRleGVzLiBUaGUgZ2VuZXJpYyBrZXl3b3JkIGluZGV4CgkgIGlzIG5vdCBkb25lIHlldC4KCSogZG9jLyouaHRtbDogcmVnZW5lcmF0ZWQgYWxsIHRoZSB1c3VhbCBkb2NzIHRvbwoKVHVlIEphbiAyMiAyMzoxMToyNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jOiBhZGRlZCBhbiB4cGF0aCBmdW5jdGlvbiB0byB0aGUgc2hlbGwgZm9yIFQuIFYuIFJhbWFuCgpUdWUgSmFuIDIyIDIyOjQyOjIzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmM6IHBhdGNoIGZyb20gQW50aG9ueSBKb25lcyB0byBjYXRjaCBOVUxMIG5vZGVzIGluCgkgIGRlYnVnIHJvdXRpbmVzLgoKVHVlIEphbiAyMiAyMjozODo0MiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFwcGx5IGFuIHBhdGNoIGZyb20gUGV0ciBLb3plbGthIGZvciB1bmxpbmsgYW5kIHJlcGxhY2UgCgkgIHN1cHBvcnQgb2YgYXR0cmlidXRlIG5vZGVzCgpUdWUgSmFuIDIyIDE5OjEyOjA2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL3BhcnNlZGVjbC5weTogQnVpbGQgYSBuZXcgdmVyc2lvbgoJICBob3BlZnVsbHkgbmVhciBjb21wbGV0ZSBhbmQgZnVsbHkgZG9jdW1lbnRlZCBvZiB0aGUgQVBJIGluIFhNTAoJKiBIVE1MdHJlZS5jIFNBWC5jIGRlYnVnWE1MLmMgZXJyb3IuYyBnbG9iYWxzLmMgcGFyc2VyLmMgdHJlZS5jCgkgeG1sSU8uYyB4bWxtZW1vcnkuYyBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmggaW5jbHVkZS9saWJ4bWwvaGFzaC5oCgkgaW5jbHVkZS9saWJ4bWwvbGlzdC5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oIGluY2x1ZGUvbGlieG1sL3RyZWUuaAoJIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmhpCgkgaW5jbHVkZS9saWJ4bWwveG1sSU8uaCBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oaQoJIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbmkKCSBpbmNsdWRlL2xpYnhtbC94cGF0aC5oIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmg6CgkgIENsZWFuZWQgdXAgdGhlIGRvYyBjb21tZW50cyBhIGxvdCBpbiB0aGUgcHJvY2VzcywgdGhlIGludGVyZmFjZQoJICBjb3ZlcmFnZSBpcyBub3cgMTAwJQoKVHVlIEphbiAyMiAwMDoxMjo1OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvbGlieG1sMi1hcGkueG1sIGRvYy9wYXJzZWRlY2wucHk6IGltcHJvdmVkIHRoZSBzY3JpcHQgdG8KCSAgZXh0cmFjdHMgY29tbWVudHMgZnJvbSB0aGUgZ3RrLWRvYyBEb2NCb29rIG91dHB1dCAoYSBiaXQKCSAgY29udm9sdXRlZCBidXQgc2VlbXMgdG8gd29yaykuCgpNb24gSmFuIDIxIDE4OjI5OjE5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGRvYy9NYWtlZmlsZS5hbSBkb2MvbGlieG1sMi1hcGkueG1sIGRvYy9wYXJzZWRlY2wucHk6CgkgIGFkZGVkIGFuIFhNTCBkZXNjcmlwdGlvbiBvZiB0aGUgQVBJLCBtb3ZlZCB0aGUgc2NyaXB0IGdlbmVyYXRpbmcKCSAgaXQgaGVyZS4gQWRkZWQgYSAibWFrZSBhcGkiIHRhcmdldAoKTW9uIEphbiAyMSAxNDozNDozNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IEFkYW0gTG91bmRzIHBvaW50ZWQgb3V0IGEgYnVnIGluIHhtbFNlYXJjaE5zKCkKCSAgCk1vbiBKYW4gMjEgMDk6NTU6MjEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYyBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oOiB0aGUgY2hhbmdlIG1hZGUgdG8KCSAgeG1sWFBhdGhGdW5jTG9va3VwRnVuYyB3YXMgaW5jb21wYXRpYmxlIHJvbGwgaXQgYmFjawoKU3VuIEphbiAyMCAyMzowMzo0MSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogY2xlYW51cCBwYXRjaCBmcm9tIEFudGhvbnkgSm9uZXMKCSogZG9jL01ha2VmaWxlLmFtOiBmaXggdGhlIGhlYWRlcnMgdG8gYXZvaWQgaW4gbWFrZSBzY2FuCgkqIHBhcnNlckludGVybmFscy5jIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwvKi5oOiBjbGVhbnVwIG9mIHRoZQoJICBpbmNsdWRlcywgKiB2cyBQdHIgYW5kIGdlbmVyYWwgY2xlYW51cAoJKiBwYXJzZWRlY2wucHk6IGZpcnN0IHZlcnNpb24gb2YgYSBzY3JpcHQgdG8gZXh0cmFjdCB0aGUKCSAgbW9kdWxlIGludGVyZmFjZXMsIHRoZSBnb2FsIHdpbGwgYmUgdG8gcHJvdmlkZSAuZGVjbCBvciBYTUwKCSAgc3BlY2lmaWNhdGlvbiBvZiB0aGUgaW50ZXJmYWNlcyB0byBidWlsZCB3cmFwcGVycy4KClN1biBKYW4gMjAgMTM6Mzg6MjIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL3htbGNhdGFsb2dfbWFuLnhtbCB4bWxjYXRhbG9nLmM6IEZpeGVkIGJ1ZyAjNjg4MzAsIHhtbGNhdGFsb2cKCSAgbm93IHByb3ZpZGVzIHJldHVybiBjb2RlcyBpbiBjYXNlIG9mIGVycm9ycwoKU2F0IEphbiAxOSAxNjozNjoyMSBDRVQgMjAwMiBCam9ybiBSZWVzZSA8YnJlZXNlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCgkqIHRyaW8uaCB0cmlvLmMgdHJpb2RlZi5oIHRyaW9wLmggdHJpb25hbi5oIHRyaW9uYW4uYyBNYWtlZmlsZS5hbToKCSAgVXBncmFkZWQgdG8gdHJpbyBiYXNlbGluZSAxLjYKCSogc3RyaW8uaCBzdHJpby5jOiBSZXBsYWNlZCBieSB0cmlvc3RyLmggYW5kIHRyaW9zdHIuYwoKRnJpIEphbiAxOCAxNzoyMjo1MCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnbG9iYWxzLmMgeG1sSU8uYyB4bWxjYXRhbG9nLmM6IHJlbW92ZWQgdGhlIGxhc3Qgb2NjdXJlbmNlcwoJICBvZiBzdHJkdXAgdXNhZ2UgaW4gdGhlIGNvZGUKCkZyaSBKYW4gMTggMTI6NDc6MTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgZXJyb3IuYzogS2VpdGggSXNkYWxlIGNvbXBsYWluZWQgcmlnaHRseSB0aGF0IAoJICB4bWxJbml0UGFyc2VyKCkgZGlkIG5vdCBwcmVzZXJ2ZSB2YWx1ZSBzZXQgYnkgeG1sU2V0R2VuZXJpY0Vycm9yRnVuYwoKVGh1IEphbiAxNyAwOTo0NDo0NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGVkIHRoZSBmdW54dGlvbiB0byBzZXQgdGhlIHhtbDogYXR0cmlidXRlcwoJKiBkZWJ1Z1hNTC5jOiBhZGRlZCAic2V0YmFzZSIgdG8gdGVzdCBpdC4KCldlZCBKYW4gMTYgMTY6MzY6MDggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiB1cGRhdGUgeG1sTm9kZVNldENvbnRlbnQoKSBhbmQgeG1sTm9kZVNldENvbnRlbnRMZW4oKQoJICB0byBhbGxvdyB1cGRhdGluZyBhbiBhdHRyaWJ1dGUgY29udGVudAoKVHVlIEphbiAxNSAxODowOToyMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuaDogdHJ5IHRvIGF2b2lkIHByb2JsZW1zIHdoZW4gY29tcGlsaW5nIG9uIFdpbmRvd3MKCk1vbiBKYW4gMTQgMTg6NTY6MjUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaGFzaC5jOiBwYXRjaCBmcm9tIEFudGhvbnkgSm9uZXMgZm9yIGhhc2guYyBhbGxvY2F0aW9uIHNpemUKCSogTWFrZWZpbGUuYW06IHRyeWluZyB0byB3b3JrIGFyb3VuZCBZZXQgQW5vdGhlciBMaWJ0b29sIE1hZG5lc3MKCSAgYW5kIGJ1aWxkIHRoZSAyLjQuMTMgcmVsZWFzZSBmaW5hbGx5IC4uLgoKTW9uIEphbiAxNCAxODoyNzoxOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHVwZGF0ZWQgdG8gMi40LjEzCgkqIGRvYy8qIDogdXBkYXRlIG9mIHRoZSBkb2N1bWVudGF0aW9uCgpNb24gSmFuIDE0IDE3OjUzOjQxIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmMgdHJlZS5jOiBzb21lIGNsZWFudXAgYWZ0ZXIgYW4gdW5zdWNjZXNzZnVsIGF0dGVtcHQKCSAgYXQgZml4aW5nICM2MTI5MCA6LSgKClN1biBKYW4gMTMgMjE6MzA6NTQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXhlZCB4bWxTYXZlRm9ybWF0RmlsZUVuYygpIHdoZW4gZW5jb2RpbmcgPT0gTlVMTAoJICBGaXhlcyBidWcgIzY3MjI5CgpTdW4gSmFuIDEzIDE3OjE0OjA2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogdHJ5aW5nIHRvIGF2b2lkIHRyb3VibGVzIHdoZW4gYSBzdWJ0cmVlIGlzIGNvcGllZAoJICBhbmQgY29hbGVzY2VkIGluIHBhcnQgd2l0aCB0aGUgdGFyZ2V0IHRyZWUuIFNob3VsZCBmaXggCgkgIGJ1ZyAjNjc0MDcKClN1biBKYW4gMTMgMTY6Mzc6MTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4ZWQgdmFsaWRhdGlvbiBvZiBhdHRyaWJ1dGVzIGNvbnRlbnQgb2YgdHlwZQoJICBOQU1FIE5BTUVTIE5NVE9LRU4gYW5kIE5NVE9LRU5TIHRvIGFjY2VwdCBpbnRlcm5hdGlvbmFsaXplZAoJICB2YWx1ZXMsIHZlcnkgb2xkIGJ1Zy4gRml4ZXMgIzY3NjcxCgpTdW4gSmFuIDEzIDE1OjA3OjQ5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oIHRyZWUuYzogaW50ZWdyYXRlZAoJICBhIGNvdXBsZSBvZiBmaXhlcyBhbmQgYSBuZXcgQVBJIGZ1bmN0aW9uIHhtbFNldEVudGl0eVJlZmVyZW5jZUZ1bmMoKQoJICBmcm9tIEtlaXRoIElzZGFsZSBhbmQgZGVkaWNhdGVkIHRvIHhzbGRiZyB0aGUgWFNMVCBkZWJ1Z2dlci4KClN1biBKYW4gMTMgMTQ6MjM6MjEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGhyZWFkcy5jOiBhcHBsaWVkIFNlcmd1ZWkgTmFyb2pueWkncyBwYXRjaCB0byBhZGQgbmF0aXZlCgkgIHRocmVhZCBzdXBwb3J0IG9uIHRoZSBXaW4zMiBwbGF0Zm9ybQoJKiB0ZXN0VGhyZWFkc1dpbjMyLmMgTWFrZWZpbGUuYW06IGFkZGVkIHRoZSB0ZXN0IHByb2dyYW0gYWxzbwoJICBmcm9tIFNlcmd1ZWksIFdpbjMyIHNwZWNpZmljCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaCBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaC5pbjoKCSAgYWRkZWQgcGF0Y2ggZnJvbSBJZ29yIGZvciB0aGUgV2luZG93cyB0aHJlYWQgc3BlY2lmaWMgZGVmaW5lcy4KCldlZCBKYW4gIDkgMTI6NTA6MzkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW50aXRpZXMuYzogQW50aG9ueSBKb25lcyBwb2ludGVkIGEgYnVnIGluIHhtbENvcHlFbnRpdHkoKQoKVHVlIEphbiAgOCAxNDoyMzoyMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvKi5odG1sIGRvYy9zaXRlLnhzbCBkb2MvTWFrZWZpbGU6IHJlbmFtZWQgWE1MLmh0bWwKCSAgb3V0cHV0IHBhZ2UgaW50byBYTUxpbmZvLmh0bWwuIENsb3NlIGJ1ZyAjNjY5NTEgYW5kCgkgIHJhaXNlZCBieSBSb2JlcnQgQ29sbGlucyB0b28uCgpUdWUgSmFuICA4IDE0OjEzOjE4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmM6IFBhdWwgS2VvZ2ggcG9pbnRlZCBvdXQgYSBwb3NzaWJpbGl0eSBvZiBzZWdmYXVsdAoJICBvbiByZXBldGVkIHhtbEFkZEVuY29kaW5nQWxpYXMoKSAvIHhtbENsZWFudXBFbmNvZGluZ0FsaWFzKCkuCgkgIENsb3NlcyBidWcgIyA2ODIzOAoKVHVlIEphbiAgOCAxMjo0ODoyNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvKi5odG1sOiB1cGRhdGVkIHRoZSBHZG9tZTIgbGlua3MKClR1ZSBKYW4gIDggMTE6MzI6MzAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLmg6IEFwcGxpZWQgZm9sbG93aW5nIHBhdGNoZXMgZnJvbSBSb2JlcnQgQ29sbGlucwoJICBhbmQgbWFrZSBzdXJlIElOX0xJQlhNTCBpcyBkZWZpbmVkIHdoZW4gY29tcGlsaW5nIGl0CgktLS0tLS0tCgkqIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbiAoTElCWE1MX0RMTF9JTVBPUlQpOiBVc2Ugb24gQ3lnd2luCgkgIGFzIHdlbGwgYXMgVmlzdWFsIEMuCgkqIHBhcnNlci5jIChYTUxfRElSX1NFUCk6IERvbid0IHVzZSAnXFwnIGZvciBDeWd3aW4uCgkqIHBhcnNlckludGVybmFscy5jIChYTUxfRElSX1NFUCk6IERvbid0IHVzZSAnXFwnIGZvciBDeWd3aW4uCgkqIHN0cmlvLmMgKFBMQVRGT1JNX1VOSVgpOiBEZWZpbmUgZm9yIEN5Z3dpbi4KCSogdHJpb2RlZi5oIChUUklPX1BMQVRGT1JNX1VOSVgpOiBEZWZpbmUgZm9yIEN5Z3dpbi4KCSogeG1sSU8uYyAoeG1sRmlsZU9wZW4pOiBVc2UgdW5peCBiZWhhdmlvdXIgZm9yIEN5Z3dpbi4KCSAgVXNlIGJpbmFyeSBtb2RlIG9wZW5zIGZvciBDeWd3aW4gKHhtbEZpbGVPcGVuVyB4bWxQYXJzZXJHZXREaXJlY3RvcnkKCSAgeG1sU3lzSURFeGlzdHMgeG1sTm9OZXRFeGlzdHMpLgoJKiB4bWxsaW50LmM6IERvbid0IGluY2x1ZGUgd2luc29jazIuaCBmb3IgQ3lnd2luLgoKTW9uIEphbiAgNyAxNzo1Mjo0OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogSmlya2EgS29zZWsgcG9pbnRlciBvdXQgYSBidWcgaW4geG1sUGFyc2VUZXh0RGVjbCgpCgkgIHdoZW4gdGhlIHZlcnNpb24gaW5mbyBpcyBub3QgcHJlc2VudC4KCk1vbiBKYW4gIDcgMDA6MDM6NTggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBBbnRob255IEpvbmVzICBwb2ludGVkIG91dCBhIHByb2JsZW0gaW4KCSAgeG1sU3RyaW5nR2V0Tm9kZUxpc3QoKSBhbmQgcHJvdmlkZWQgYSBmaXggZm9yIGl0CgpTdW4gSmFuICA2IDEzOjQ1OjQ5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBwYXRjaCBmcm9tIEZyYW5rIEogRnJhbmtsaW4gdG8gcmVtb3ZlIGEgYnVnIGluCgkgIHhtbENyZWF0ZVB1c2hQYXJzZXJDdHh0KCkgd2hlbiB0aGUgaW5pdGlhbCBidWZmZXIgcGFzc2VkCgkgIGlzIGxhcmdlLgoKU2F0IEphbiAgNSAxOToyNDoyMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi8qOiBiaWcgY2xlYW51cCBvZiB0aGUgV2luZG93cy9NU1ZDIHByb2plY3QgZmlsZXMKCSAgZnJvbSBJZ29yIFpsYXRrb3ZpYwoKV2VkIEphbiAgMiAxNDoxMTozNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvTWFrZWZpbGUuYW06IHNob3VsZCBmaXggIzY3Njc0IGFuZCBhdm9pZCB0cm91YmxlcyBpZiAKCSAgeHNsdHByb2MgaXMgbm90IGF2YWlsYWJsZSBvciBmYWlscyBpbiB0aGUgcHJlZml4IHByb3ZpZGVkCgpUdWUgSmFuICAxIDE3OjQ4OjU2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbG1lbW9yeS5jOiBvbmUgbW9yZSBkb2MgcGF0Y2ggZnJvbSBDaGFybGllIEJvemVtYW4uCgpNb24gRGVjIDMxIDE3OjM1OjQwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBwYXJzZXIuYyB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmggaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaDoKCSAgRml4ZWQgYSBmZXcgb3RoZXIgcHJvYmxlbXMgcmFpc2VkIGJ5IENoYXJsaWUgQm96ZW1hbi4KCSogcmVzdWx0L1ZDL0VsZW1lbnRWYWxpZFs1LTddOiBmaXhlZCB0aGUgb3V0cHV0CgpNb24gRGVjIDMxIDE3OjEzOjM0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqICouYyBpbmNsdWRlL2xpYnhtbC8qLmggZG9jL2h0bWwvKjogYXBwbGllZCA0MiBkb2N1bWVudGF0aW9uCgkgIHBhdGNoZXMgZnJvbSBDaGFybGllIEJvemVtYW4uIFJlZ2VuZXJhdGVkIHRoZSBIVE1MIGRvY3MuCgpUaHUgRGVjIDIwIDE0OjU5OjUyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2RlYnVnWE1MLmggd2luMzIvZHNwL2xpYnhtbDIuZGVmLnNyYzogZml4ZXMKCSAgZm9yIFdpbmRvd3MgZnJvbSBJZ29yCgpUdWUgRGVjIDE4IDEyOjEzOjMzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYXBwbGllZCBKdXN0aW4gRmxldGNoZXIgcGF0Y2ggZm9yIC0tb3V0cHV0IG9yIC1vCgpUdWUgRGVjIDE4IDA4OjUyOjMyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2xpYnhtbDIvbGlieG1sMi5kZWYuc3JjOiBjbG9zZSAjNjcwMTkKClR1ZSBEZWMgMTggMDg6MDg6NTEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhcHBsaWVkIEp1c3RpbiBGbGV0Y2hlciBnZW5lcmljIHRpbWluZyBwYXRjaAoJICBzaW1pbGFyIHRvIHRoZSBvbmUgYWxyZWFkeSBhcHBsaWVkIHRvIHhzbHRwcm9jLgoKTW9uIERlYyAxNyAxNjoyOTowOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmggdHJlZS5jOiBhcHBsaWVkIGRvY3VtZW50YXRpb24gcGF0Y2hlcwoJICBmcm9tIENoYXJsaWUgQm96ZW1hbgoKVGh1IERlYyAxMyAyMToyNDoxNiBNU1QgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSpkb2MveG1sbGludC54bWwsIHhtbGxpbnQuMSAtIGRvY3VtZW50IC0tZHJvcGR0ZAoJClRodSBEZWMgMTMgMjM6MTk6NTAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4IHRoZSB4bWxTdHJkdXAoKSB1c2VkIGluIHRoZSBwcmV2aW91cyBwYXRjaC4KCSogdmFsaWQuYzogYWRkZWQgLS1kcm9wZHRkCgkqIHRyZWUuYzogZml4ZWQgeG1sVW5saW5rTm9kZSBzbyBpdCBhbHNvIHJlbW92ZXMgdGhlIHJlZmVyZW5jZXMKCSAgZnJvbSB0aGUgZG9jdW1lbnQgaWYgdGhlIG5vZGUgaXMgYSBEVEQKClRodSBEZWMgMTMgMTU6NTQ6MzUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyB2YWxpZC5jOiBjbGVhbnVwIHNvbWUgc3RhdGljIGRlY2xhcmF0aW9ucwoKVGh1IERlYyAxMyAxNToyMzowNCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IHJlbW92ZWQgYW5vdGhlciBzdHJkdXAoKQoJKiBkb2MvRkFROiByZW1vdmVkIHRoZSBIUC9VWCBlbnRyeQoKVGh1IERlYyAxMyAwOTo0NDo1OCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXggYnVnICM2NjgxNiB3aGVuIHZhbGlkYXRpbmcuCgkqIHhtbGxpbnQuYzogZG9uJ3QgdXNlIHN5cy90aW1lLmggaWYgY29uZmlndXJlIGRpZCBub3QgZm91bmQgaXQKCk1vbiBEZWMgMTAgMjE6Mzk6NTUgTVNUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvY3MveG1sbGludC4xLCB4bWxsaW50LnhtbCwgeG1sY2F0YWxvZy4xLCB4bWxjYXRhbG9nX21hbi5odG1sLAoJeG1sY2F0YWxvZ19tYW4ueG1sCgpNb24gRGVjIDEwIDIyOjA2OjE2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oOiBIaWV0YW5pZW1pIEphcmtrbyBwb2ludGVkIG91dCB0aGF0CgkgIHhtbEluaXRNZW1vcnkoKSB3YXMgZGVjbGFyZWQgdHdpY2UKClN1biBEZWMgIDkgMTQ6NTk6MjMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2xvYmFscy5jOiBkbyBub3QgcmVmZXJlbmNlIHN0cmR1cCgpICEKCSogY29uZmlndXJlLmluIGxpYnhtbC0yLjAucGMuaW46IHRyeWluZyB0byBmaXggdGhlIGxpYnMKCSAgb2YgdGhlIHZhcmlvdXMgY29uZmlnIGV4dHJhY3Rpb24gbW9kdWxlcwoKRnJpIERlYyAgNyAxNToyMTozMyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gOiBwcmVwYXJpbmcgMi40LjEyCgkqIGRvYy8qIDogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcwoKRnJpIERlYyAgNyAxMjozMjowMCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYzogY2xvc2VkIGJ1ZyAjNjYxNTkKCSogdGVzdFVSSS5jOiBhZGRlZCAtLWVzY2FwZSBvcHRpb24KCSogY29uZmlndXJlLmluOiBzb21lIGNsZWFudXAgZm9yIHhtbDItY29uZmlnIC0tY2ZsYWdzCgpUaHUgRGVjICA2IDE1OjMxOjMwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYyB0ZXN0VGhyZWFkcy5jOiByZW1vdmVkIHNvbWUgbWlzcGxhY2VkIGluY2x1ZGVzCgkgIG9mIHhtbHZlcnNpb24uaAoKVGh1IERlYyAgNiAwOTowNjowOCBFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0aHJlYWRzLmM6IHBhdGNoIGZyb20gR2FyeSBQZW5uaW5ndG9uIGZpeGluZyBhIHBvc3NpYmxlCgkgIHByb2JsZW0gYXQgaW5pdGlhbGl6YXRpb24gdGltZS4KCldlZCBEZWMgIDUgMTM6MDE6MzcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGxpYnhtbC5oIHBhcnNlci5jIHRlc3RUaHJlYWRzLmMgbWFjb3MvOiBpbnRlZ3JhdGVkCgkgIEVyaWMgTGF2aWduZSBjb250cmlidXRpb24gdG8gYnVpbGQgbGlieG1sMiBvbiBNYWNPUyB1c2luZwoJICBDb2RlV2Fycmlvci4KClR1ZSBEZWMgIDQgMTQ6MTM6NDQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhcHBsaWVkIEdlZXJ0IEtsb29zdGVybWFuJ3MgcGF0Y2ggdG8gZml4CgkgIC0tcmVwZWF0IC0tdGltaW5nIG91dHB1dAoKVGh1IE5vdiAyOSAxNzoxMDoyMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogUm9iaW4gQmVyam9uIDxyb2JpbkBrbm93c2NhcGUuY29tPiBmb3VuZCBhIGNhc2UKCSAgd2hlcmUgbm9uLXdlbGxmb3JtZWQgWE1MIGRlY2xhcmFjdGlvbnMgd2VyZSBub3QgZGV0ZWN0ZWQuCgpXZWQgTm92IDI4IDE1OjQxOjQwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwb2ludGVyLmM6IGZpeGVkIGEgY29tcGlsYXRpb24gYnVnIHBvaW50ZWQgYnkgRGFubnkgSmFtc2h5CgpXZWQgTm92IDI4IDEwOjA5OjUxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGFzIHJvYmVydCBwb2ludGVkIGFnYWluLCB4bWxJbnB1dENhbGxiYWNrSW5pdGlhbGl6ZWQKCSAgZ2V0cyByZXNldCBieSB4bWxDbGVhbnVwSW5wdXRDYWxsYmFja3MoKSBhbmQgdGhpcyBtYWtlcyB0aGUKCSAgZnVuY3Rpb24gdXNlbGVzcy4gU2FtZSBmb3Igb3V0cHV0LgoKVHVlIE5vdiAyNyAxNzoyMjozNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiByb2JlcnQgcG9pbnRlZCBvdXQgYSBsb29wIGVycm9yIGluIGNhbGxiYWNrIGNsZWFudXBzCgpNb24gTm92IDI2IDE2OjU2OjAwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyBkZWJ1Z1hNTC5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaCBpbmNsdWRlL2xpYnhtbC9kZWJ1Z1hNTC5oOgoJICBtb3ZlZCB4bWxHZXRMaW5lTm8oKSBhbmQgeG1sR2V0Tm9kZVBhdGgoKSBpbnRvIHRoZSBtYWluIHRyZWUgbW9kdWxlLAoJICB0aGV5IGFyZSBub3QgcmVhbGx5IHRpZWQgdG8gZGVidWdnaW5nCgpNb24gTm92IDI2IDExOjMxOjM2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogcHJlcGFyaW5nIDIuNC4xMQoJKiB4bWxsaW50LmM6IGJldHRlciAtLWNhdGFsb2dzIGRlc2NyaXB0aW9uCgpTdW4gTm92IDI1IDExOjM0OjI0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4ZWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMgaW4geG1sU2V0UHJvcCgpCgpUaHUgTm92IDIyIDE5OjE5OjEwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmMgdHJlZS5jIHhtbElPLmMgeG1sbWVtb3J5LmM6IHNvbWUgY2xlYW51cHMgd2hlbiBjaGFzaW5nCgkgIHVuYXBwcm9wcmlhdGUgc3Rkb3V0IG91dHB1dC4KClRodSBOb3YgMjIgMTM6NTg6MTQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBGaXhlZCBhIGNvdXBsZSBvZiBtYWNybyBlcnJvcnMgcG9pbnRlZCBvdXQKCSAgYnkgRGVuaXMgQmV1cml2ZSwgY2xvc2VzICM2NTExMQoKVHVlIE5vdiAyMCAxMDozNDowMSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBpbiBjYXNlIG9mIGNvbnRlbnQgbW9kZWwgdmFsaWRpdHkgZXJyb3IsIGRvbid0CgkgIHByaW50IGl0IGlmIHZhbGlkaXR5IHdhcm5pbmdzIHdlcmUgbm90IHJlcXVlc3RlZC4KClR1ZSBOb3YgMjAgMDk6MzA6MDIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFub2Z0cC5jOiBhcHBsaWVkIGEgY291cGxlIG9mIHBhdGNoZXMgZnJvbSBCcmlhbiBEIFJpcGxleS4KCSogcGFyc2VySW50ZXJuYWxzLmM6IHJlbW92ZWQgdGhlIGxhc3QgZXhpdCgpIGNhbGwuIFByaW50IGFuCgkgIHVubWFza2FibGUgZXJyb3Igb24gc3RkZXJyIGluc3RlYWQgKGxpYnJhcnkgbWlzbWF0Y2ggZGV0ZWN0aW9uKQoKU2F0IE5vdiAxNyAxNzoxNjo1MSBNU1QgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGxpbnQueG1sLCBkb2MveG1sbGludC4xIC0gdXBkYXRlIHhtbGxpbnQgbWFuIHBhZ2Ugd2l0aAoJc2hlbGwgaW5zdHJ1Y3Rpb25zIGZyb20gSGVpa28gUnVwcAoKVGh1IE5vdiAxNSAxNDo1Mzo0MiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IHVzZSB0aGUgVVJMIG5vdGF0aW9uIGZpbGU6Ly8gZm9yIGRlZmF1bHQgY2F0YWxvZyBwYXRocwoKV2VkIE5vdiAxNCAxNjowMzowMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGJldHRlciBjb21tZW50cyBmb3IgX3ByaXZhdGUgZmllbGRzCgkqIHRyZWUuYzogcmVtb3ZlZCBhIHByb2JsZW0gd2hlbiBjb3B5aW5nIGFuIGVudGl0eSByZWZlcmVuY2UuCgpUdWUgTm92IDEzIDE2OjIzOjA0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZtcy8qOiB1cGRhdGVkIGluc3RydWN0aW9ucyBhbmQgZGlmZnMgZnJvbSBKb2huIEEgRm90aGVyaW5naGFtCgpNb24gTm92IDEyIDIzOjQzOjIyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGF2b2lkIGFuIGluY2x1ZGUgcHJvYmxlbSBpZgoJICAjaW5jbHVkZSA8bGlieG1sL3htbGVycm9yLmg+IGhhcHBlbnMgZmlyc3QgaW4gY29kZQoJICBzZWVtcyB0byBiZSB0aGUgY2FzZSBpbiBLREUgbGlicwoKTW9uIE5vdiAxMiAyMjozMjo0MSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9kc3AvKiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaC5pbjogdXBkYXRlCgkgIGZyb20gSWdvciBmb3IgV2luZG93cwoKTW9uIE5vdiAxMiAxMDoxOTo0MSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogR2FyeSBQZW5uaW5ndG9uIHBvaW50ZWQgb3V0IGEgbWlzc2luZyBwcmVmaXgKClNhdCBOb3YgMTAgMTI6NTU6NDIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiBwcmVwYXJpbmcgMi40LjEwCgkqIGRvYy8qOiB1cGdyYWRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcwoKU2F0IE5vdiAxMCAxMjozMzozOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGZpeCBjb21tZW50IGluIHNjcmlwdHMgZWxlbWVudCBwYXJzaW5nLgoJKiByZXN1bHQvSFRNTC9kb2MzKjogdXBkYXRlZCB0aGUgcmVzdWx0cy4KClNhdCBOb3YgMTAgMTE6MTg6MTggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmM6IGFub3RoZXIgVVJJIGJ1ZyBmaXggIzYzMzM2LCB1c2luZyBKb2VsIFlvdW5nIHBhdGNoLgoKU2F0IE5vdiAxMCAxMTowNzoyNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jIGluY2x1ZGUvbGlieG1sL2RlYnVnWE1MLmg6IGFkZCB4bWxHZXROb2RlUGF0aCgpCgkgIGEgY2xlYW5lZCB1cCB2ZXJzaW9uIG9mIHRoZSBQd2Qgc2hlbGwgc3RyaW5nIGdlbmVyYXRpb24uCgpGcmkgTm92ICA5IDAwOjM0OjEzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiB0cnlpbmcgdG8gZml4IG5hbWVzcGFjZXMgKwoJICB2YWxpZGF0aW9uIHByb2JsZW1zIGZvciBnb29kLCBjbG9zaW5nICM2MzYxOSBpbiB0aGUgcHJvY2VzcwoJKiByZXN1bHQvdmFsaWQvZGlhLnhtbCB0ZXN0L3ZhbGlkL2RpYS54bWw6IHRoZSBEaWEgdGVzdCB3YXMKCSAgd3JvbmcgaW4gdGhpcyByZXNwZWN0LCBmaXhlZCBpdC4KClRodSBOb3YgIDggMTg6MzE6NDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBNb3J1cyBXYWx0ZXIgcGF0Y2ggdG8gYWxsb3cgLS1mb3JtYXQgYW5kIC0tZW5jb2RlCgpUaHUgTm92ICA4IDE0OjUyOjE4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmM6IFN0ZWZhbiBLb3N0IHByb3ZpZGVkIGFuIGhlbHAgY29tbWFuZCBmb3IgdGhlIHNoZWxsCgpXZWQgTm92ICA3IDE0OjMyOjU1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmM6IEhlaWtvIFJ1cHAgcG9pbnRlZCB0aGF0IHRoZSBzaGVsbCB3b3VsZCBjcmFzaAoJICBvbiBlbXB0eSBub2Rlc2V0cyByZXR1cm5zLgoKV2VkIE5vdiAgNyAxMzo1MjozNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogV2VpcWkgR2FvIHBvaW50ZWQgb3V0IHRoYXQgeG1sY2F0YWxvZwoJICBtaWdoIG5lZWQgdGhlIGhpc3RvcnkgbGlicmFyaWVzCgpUdWUgTm92ICA2IDIzOjQ5OjA5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyB0ZXN0L0hUTUwvbHQuaHRtbCByZXN1bHQvSFRNTC9sdC5odG1sKjoKCSAgaGFuZGxlIHRoZSBjYXNlIG9mIDwgaW4gcXVvdGVkIGF0dHJpYnV0ZXMsIEJhc3RpYW4gS2xlaW5laWRhbQoKVHVlIE5vdiAgNiAxNjoyMTozMyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHJlbGVhc2luZyAyLjQuOQoJICBmaXhpbmcgY2F0YWxvZyBicmVha2FnZXMKCSogTWFrZWZpbGUuYW0gY2F0YWxvZy5jIHJlc3VsdC9jYXRhbG9ncy9jYXRhbCAKCSAgcmVzdWx0L2NhdGFsb2dzL215Y2F0YWxvZy4qIHRlc3QvY2F0YWxvZ3MvY2F0YWwqOgoJICBmaXhlZCBtb3JlIHByb2JsZW1zIGluIGNhdGFsb2cgc3VwcG9ydCwgYWRkZWQgbW9yZSByZWdyZXNzaW9uIHRlc3RzCgkgIGZvciBib3RoIFhNTCBhbmQgU0dNTCBjYXRhbG9nIGhhbmRsaW5nCgpNb24gTm92ICA1IDIwOjI2OjQxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmM6IGFwcGxpZWQgYW4gaW1wcm92ZW1lbnQgdG8geG1sR2V0TGluZU5vKCkgZnJvbQoJICBLZWl0aCBJc2RhbGUKCk1vbiBOb3YgIDUgMTU6MjA6MTYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiBkb2hoaGggWE1MIGNhdGFsb2cgYWRkIGFuZCByZW1vdmUgb3BzIHdlcmUgYnJva2VuIHRvby4KCSAgU2lkZSBlZmZlY3Qgb2YgdGhlIHByb2dyZXNzaXZlIGNhdGFsb2cgbG9hZGluZwoKTW9uIE5vdiAgNSAxMjo0MDo1NCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogY29uZmV4ZWNkaXIgYW5kIGNvbmZleGVjX0RBVEEgd2VyZSBkZWZpbmVkIHR3aWNlCgkgIHBvaW50ZWQgb3V0IGJ5IEthcmwgRWljaHdhbGRlcgoJICAKU3VuIE5vdiAgNCAyMzoxODozNCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxjYXRhbG9nLmM6IGF2b2lkIHVubGluaygpIGFuZCB1c2UgcmVtb3ZlKCkgaW5zdGVhZC4KClN1biBOb3YgIDQgMjM6MTI6MzggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW46IGNsZWFudXAKCSogaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHVwZGF0ZWQgd2l0aCAyLjQuOAoKU3VuIE5vdiAgNCAyMToxNzoyNCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jIGdsb2JhbC5kYXRhIGdsb2JhbHMuYyB0ZXN0VGhyZWFkcy5jOiBmaXggYnVnICM2Mzc1MgoJICBvZiBjb21waWxpbmcgbGlieG1sIHdpdGggYSBub24gc3RhbmRhcmQgc2V0IG9mIG9wdGlvbnMKClN1biBOb3YgIDQgMTM6MTE6NDEgTVNUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldAoKCSogZG9jL3htbGxpbnQueG1sLCB4bWxsaW50LjEgLSB1cGRhdGluZyB4bWxsaW50IG1hbiBwYWdlIHRvCglkb2N1bWVudCAtLXNnbWwgb3B0aW9uLCBmaXhpbmcgZ25vbWUgYnVnemlsbGEgIzYzMzgyCgpTdW4gTm92ICA0IDIwOjU2OjUzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaCBjYXRhbG9nLmM6IEZpeGVkIFNHTUwgY2F0YWxvZ3MKCSAgYnJlYWthZ2Ugb2YgMi40LjcsIGFkZGVkIGEgY291cGxlIG9mIHJlYWxseSBuZWVkZWQgQVBJcwoJICBsaWtlIHhtbENhdGFsb2dJc0VtcHR5KCkgYW5kIHhtbE5ld0NhdGFsb2coKQoJKiB4bWxjYXRhbG9nLmM6IHVwZGF0ZWQgLS1zZ21sIC0tbm9vdXQgdG8gYmUgYSBzdWl0YWJsZSByZXBsYWNlbWVudAoJICBmb3IgaW5zdGFsbC1jYXRhbG9nCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNC44CgpUaHUgTm92ICAxIDE1OjI5OjMxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmMgdHJlZS5jIGluY2x1ZGUvbGlieG1sL0hUTUx0cmVlLmgKCSAgaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGluY2x1ZGUvbGlieG1sL3htbElPLmg6IG1vcmUgaW5jbHVkZQoJICBjbGVhbnVwcywgZXhwb3J0IGNsZWFubHkgb25lIGh0bWwgb3V0cHV0ICsgZm9ybWF0IGZ1bmN0aW9uLgoKVGh1IE5vdiAgMSAxNDoxMjoxMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogcmVtb3ZlZCBpbml0R2VuZXJpY0Vycm9yRGVmYXVsdEZ1bmMgY2FsbCBmcm9tCgkgIHhtbEluaXRQYXJzZXIoKSBzaW5jZSBpdCBjb3VsZCBkZXN0cm95IHByZXZpb3VzIGNhbGxzIHRvCgkgIHhzbHRTZXRHZW5lcmljRXJyb3JGdW5jKCkgZWZmZWN0cwoKVGh1IE5vdiAgMSAwOTozNzoxMyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jIGluY2x1ZGUvbGlieG1sL2RlYnVnWE1MLmg6IGJvb2wgY2FuIGJlIGEgcmVzZXJ2ZWQKCSAga2V5d29yZC4KCldlZCBPY3QgMzEgMTg6NTA6MDggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGNsZWFudXAKCSogdGhyZWFkcy5jOiBjbGVhbnVwIHRvbwoJKiB4bWxJTy5jIGluY2x1ZGUvbGlieG1sL3htbElPLmg6IGFkZGVkIHhtbE5vTmV0RXh0ZXJuYWxFbnRpdHlMb2FkZXIoKQoJICBmcm9tIHhzbHRwcm9jCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogdHJ5aW5nIHRvIGJyZWFrIGEKCSAgZGVwZW5kZW5jeSBsb29wLgoKVHVlIE9jdCAzMCAxODozODo1MyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IEp1c3RpbiBGbGV0Y2hlciBwb2ludGVkIG91dCB0aGF0IHhtbFBhcnNlWE1MQ2F0YWxvZwoJICB3YXMgbm90IHVzZWQgYW55bW9yZSAhCgpUdWUgT2N0IDMwIDEzOjMzOjEzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNC43CgkqIE1ha2VmaWxlLmFtIGRvYy9NYWtlZmlsZS5hbTogc3dpdGNoZWQgdG8gdGhlIGxhdGVzdCB4bWxsaW50CgkgIG1hbnVhbCBwYWdlIGZyb20gSm9obgoJKiBkb2MvKjogdXBkYXRlZCB0aGUgZG9jIGFuZCByZWJ1aWx0IHRoZSBnZW5lcmF0ZWQgcGFnZXMKClR1ZSBPY3QgMzAgMTE6MzE6MTkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogY2xvc2luZyBidWcgIzYyNzExLCB0aGUgbGlicmFyeSBzaG91bGQgbmV2ZXIKCSAgY2xvc2Ugc3RkaW4gb3Igc3Rkb3V0LgoKVHVlIE9jdCAzMCAxMDo0NjoxMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYzogc2Vjb25kIHBhc3MgYXQgZml4aW5nICM2MzMzNiwgdXNpbmcgSm9lbCBZb3VuZwoJICBmaW5hbCBwYXRjaC4gbG9va3Mgb2theS4KClR1ZSBPY3QgMzAgMDA6NTY6MDUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmMgaW5jbHVkZS9saWJ4bWwvdXJpLmg6IHRyeWluZyB0byBjbGVhciAjNjMzMzYKCSAgYWxsb3dpbmcgdGhlIGVzY2FwaW5nIHJvdXRpbmUgdG8gcGFyc2UgdW5jb25mb3JtYW50CgkgIFVSSS1SZWZlcmVuY2VzLgoKTW9uIE9jdCAyOSAxOTowOTo0NiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2bXMvcmVhZG1lLnZtcyB2bXMvYnVpbGRfbGlieG1sLmNvbSBuYW5vZnRwLmMgCgkgIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjogYSBmZXcgVk1TIHVwZGF0ZXMgZnJvbQoJICBKb2huIEEgRm90aGVyaW5naGFtCgkqIGluY2x1ZGUvbGlieG1sL3htbElPLmggeG1sSU8uYzogYWRkZWQgeG1sQ2xlYW51cElucHV0Q2FsbGJhY2tzKCkKCSAgYW5kIHhtbENsZWFudXBPdXRwdXRDYWxsYmFja3MoKSBmb3IgdGhlIFBlcmwgYmluZGluZyBwZW9wbGUuCgpNb24gT2N0IDI5IDEyOjQ0OjE3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIGdsb2JhbHMuYyBET0NCcGFyc2VyLmMgSFRNTHBhcnNlci5jIGVycm9yLmM6CgkgIGFwcGx5IGZpeGVzIHRvIGNsb3NlICM2MzI3MSBhbmQgYXZvaWQgc2VnZmF1bHRzIHdoZW4KCSAgdGhlIGVycm9yIHJvdXRpbmUgZ2V0cyBjYWxsYmVkIGJlZm9yZSB4bWxJbml0UGFyc2VyKCkKCSAgZ2V0IGNhbGxlZC4KCSogbmFub2Z0cC5jIGVycm9yLmM6IEFwcGxpZWQgcGF0Y2hlcyBmcm9tIEp1c3RpbiBGbGV0Y2hlcgoJICBjb3JyZWN0aW5nIHNvbWUgeG1sR2VuZXJpY0Vycm9yIG1pc3VzZXMuCgpTYXQgT2N0IDI3IDE0OjA0OjQ1IE1EVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKmRvYy94bWxsaW50LnhtbCwgZG9jL3htbGxpbnQuMQoJTmV3IGFuZCBpbXByb3ZlZCBtYW4gcGFnZSBmb3IgeG1sbGludCAtIC54bWwgaXMgdGhlIG9yaWdpbmFsLCAuMQoJaXMgdGhlIGdlbmVyYXRlZCBtYW4gcGFnZQoKV2VkIE9jdCAyNCAxNDozNDoyNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL3NpdGUueHNsIGRvYy8qLmh0bWwgZG9jL01ha2VmaWxlLmFtOiBub3cgYXV0b2dlbmVyYXRlCgkgIHRoZSB3ZWIgc2l0ZSBmcm9tIHRoZSBtYWluIEhUTUwgZG9jdW1lbnQuCgpUdWUgT2N0IDIzIDE0OjMyOjA0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgYW4gZXJyb25lb3VzIHZhbGlkYXRpb24gYnVnIHdoZW4gUEUgcmVmcwoJICBvY2N1cnMgaW4gZXh0ZXJuYWwgcGFyc2VkIGVudGl0aWVzIHJlZmVyZW5jZWQgZnJvbSB0aGUKCSAgaW50ZXJuYWxzIHN1YnNldAoJKiB0ZXN0L3ZhbGlkL2luZGV4LnhtbCB0ZXN0L3ZhbGlkL2R0ZHMvbml0Zi0yLTUuZHRkCgkgIHRlc3QvdmFsaWQvZHRkcy9OZXdzTUx2MS4wLmR0ZCByZXN1bHQvdmFsaWQvaW5kZXgueG1sKjoKCSAgYWRkZWQgdGhlIGFzc29jaWF0ZWQgdGVzdGNhc2UsIGl0J3MgYSBuaWNlIG9uZS4KCSogSFRNTHBhcnNlci5jOiBnZW5lcmF0ZSB0aGUgRFREIG5vZGUgYXMgSFRNTCBzdGlsbCAuLi4KCSogSFRNTHRyZWUuYzogZml4ZWQgZXJyb3JzIGluIFNldC9HZXRNZXRhRW5jb2RpbmcgCgpNb24gT2N0IDIyIDE0OjIwOjE3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIGEgYnVnIGluIGh0bWxOZXdEb2MoKQoKTW9uIE9jdCAyMiAxMTozMjozNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdC90aHJlYWRzLyo6IGFkZGVkIGVudGl0aWVzIHRlc3RpbmcgdG8gdGhlIFRocmVhZCB0ZXN0CgkqIHRlc3RUaHJlYWRzLmM6IG1ha2UgdGhlIHRlc3QgcmVhc29uYWJsZQoJKiBET0NCcGFyc2VyLmM6IGZpeCB0aGUgRFREIHB1YmxpYyBhbmQgc3lzdGVtIElECgkqIHhtbGxpbnQuYzogYWRkZWQgLS1zZ21sIGZvciBTR01MIERvY0Jvb2sgaW1wb3J0aW5nCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCBEb2NidGVzdHMgdGFyZ2V0CgpGcmkgT2N0IDE5IDExOjQ3OjEzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vZnRwLmM6IHVzZSBvbmx5ICJhbm9ueW1vdXNAIiBzdHJpbmcgZm9yIGFub255bW91cyBwYXNzd2RzCgkqIHRlc3RUaHJlYWRzLmM6IHJlbW92ZWQgYm9ndXMgaW5jbHVkZQoKVGh1IE9jdCAxOCAxNjo1NjoyMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgdmFsaWQuYyByZXN1bHQvdmFsaWQvcnNzLnhtbCByZXN1bHQvdmFsaWQvcnNzLnhtbC5lcnI6CgkgIGZpeGVkIGEgdmVyeSBzZXJpb3VzIChsb29waW5nKSB2YWxpZGF0aW9uIGJ1ZwoKV2VkIE9jdCAxNyAxMTo1NjoyNSBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggaW5jbHVkZS9saWJ4bWwvdGhyZWFkcy5oIHRocmVhZHMuYwoJICB0ZXN0VGhyZWFkcy5jOiBmYXIgbW9yZSB0ZXN0aW5nLCBjbGVhbmluZyB1cCBidWdzCgkqICouYyA6IG1ha2Ugc3VyZSBnbG9iYWxzLmggaXMgYWx3YXlzIGluY2x1ZGVkLgoKV2VkIE9jdCAxNyAxNzo0MTo0MSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiB0cnkgdG8gZ2V0IHJpZCBvZiBwYXJzZXIgbG9vcHMgZm9yIGdvb2QuCgpXZWQgT2N0IDE3IDEzOjI5OjAyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IGZpeGVkIHNvbWUgYnVncyBpbiBDRkxBR1MgcGFzc2luZy4KCSogdGVzdC90aHJlYWRzIE1ha2VmaWxlLmFtIHRlc3RUaHJlYWRzLmM6IGFkZGVkIGEgc3BlY2lmaWMKCSAgdGhyZWFkZWQgdGVzdCBjYXNlIChyZWFsbHkgbmFzdHksIGd1YXJhbnRlZWQpLgoKVHVlIE9jdCAxNiAyMzowMTo0OSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiBzZXJpb3VzIGNsZWFudXAgb24gdGhlIG1hbmFnZW1lbnQgb2YgdGhlCgkgIFhNTCBjYXRhbG9nIHRyZWUsIG1vcmUgdGVzdHMgZG9uZSwgZXNwZWNpYWxseSB3aXRoCgkgIHRoZSBjYXRhbG9nIFBJLgoKVHVlIE9jdCAxNiAwODo0Mzo0MyBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IGF2b2lkIGEgcHJvYmxlbSBpbiBjYXRhbG9nIGNsZWFudXAgb24gU01QIGlmCgkgIGNhdGFsb2dzIHdlcmUgbm90IGluaXRpYWxpemVkLgoKVHVlIE9jdCAxNiAxNDozMzoxOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jIHhwYXRoLmM6IHRyeWluZyB0byBjbGVhbnVwIHRoZSBub3QgdGhyZWFkIHNhZmUKCSAgcGFydHMgb2YgdGhlIGxpYnJhcnkuCgpNb24gT2N0IDE1IDE0OjMwOjExIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggY29uZmlndXJlLmluIGdsb2JhbC5kYXRhOiBtYWtlCgkgIHRoZSBhbGxvY2F0aW9uIGJlIHBlci10aHJlYWQgYSBjb25maWd1cmUgb3B0aW9uCgkqIGVuY29kaW5nLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IGZpeGVkIGNvbXBpbGF0aW9uCgkgIGVycm9ycwoKTW9uIE9jdCAxNSAxMjo0NTowMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IE5vcm0gcmVwb3J0ZWQgdGhhdCBhIGZldyBsaW5lcwoJICBhZGRlZCB3ZXJlIGJyZWFraW5nIGxpYnhzbHQgY29tcGlsZSwgcmVtb3ZlZCB0aGVtIGZvciBub3cKClN1biBPY3QgMTQgMDU6NTU6MDEgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdGhyZWFkcy5jOiBkZWJ1Z2dlZCBhbmQgZml4ZWQKCSAgaW5pdGlhbGl6YXRpb24gcHJvYmxlbXMgd2hpY2ggd2VyZSBnaXZpbmcgdHJvdWJsZXMgb24gU01QCgkgIGJveGVzLgoKU2F0IE9jdCAxMyAxNjoxNzoxMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW06IG1pc3NpbmcgZ2xvYmFscy5oCgpTYXQgT2N0IDEzIDE0OjE1OjAwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnbG9iYWxzLmM6IGFkZGVkIGEgY291cGxlIG9mIHN0YW5kYXJkIGluY2x1ZGVzLgoKU2F0IE9jdCAxMyAxMTowODoyMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvU0FYLmggaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oCgkgIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oIGluY2x1ZGUvbGlieG1sL3RyZWUuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oIEhUTUxwYXJzZXIuYyBTQVguYyBlcnJvci5jIGdsb2JhbHMuYwoJICBuYW5vZnRwLmMgbmFub2h0dHAuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0ZXN0RG9jYm9vay5jCgkgIHRlc3RIVE1MLmMgdGVzdFNBWC5jIHRyZWUuYyB1cmkuYyB4bGluay5jIHhtbG1lbW9yeS5jOgoJICBBcHBsaWVkIHRoZSBsYXN0IHBhdGNoZXMgZnJvbSBHYXJ5LCBjbGVhbnVwLCBhY3RpdmF0ZWQgdGhyZWFkaW5nCgkgIGFsbCB1c2VyIGFjY2Vzc2libGUgZ2xvYmFsIHZhcmlhYmxlcyBhcmUgbm93IGhhbmRsZWQgaW4gZ2xvYmFscy5bY2hdCgkgIFN0aWxsIGEgYml0IHJvdWdodCBidXQgbWFrZSB0ZXN0cyBwYXNzZXMgd2l0aCBlaXRoZXIgCgkgIC0td2l0aC10aHJlYWRzIGRlZmluZWQgYXQgY29uZmlndXJlIHRpbWUgb3Igbm90LgoJKiBNYWtlZmlsZS5hbSBleGFtcGxlL01ha2VmaWxlLmFtOiBhZGRlZCBnbG9iYWxzLltjaF0gYW5kIHRocmVhZHMKCSAgbGlua2luZyBvcHRpb25zCgpGcmkgT2N0IDEyIDE5OjI1OjU1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbQoJICBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggZ2xvYmFscy5jICBpbmNsdWRlL2xpYnhtbC90aHJlYWRzLmgKCSAgdGhyZWFkcy5jIGJ1aWxkX2dsb2IucHkgZ2xvYmFsLmRhdGEgeG1sY2F0YWxvZy5jIGFjY29uZmlnLmgKCSAgY29uZmlndXJlLmluOiBzdGFydGVkIGludGVncmF0aW5nIHRoZSBjb3JlIG9mIHRoZSB0aHJlYWQgc3VwcG9ydAoJICBub3QgYWN0aXZhdGVkIHlldCBidXQgaGFsZiBpbnRlZ3JhdGVkLiBUaGUgY29kZSBzaG91bGQgc3RpbGwKCSAgY29tcGlsZSBhbmQgd29yayBhbnl3YXkuCgpGcmkgT2N0IDEyIDAwOjUzOjAzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIGNhdGFsb2cuYyBkZWJ1Z1hNTC5jIGVudGl0aWVzLmMgbmFub2Z0cC5jCgkgIHBhcnNlci5jIHZhbGlkLmMgeG1sbWVtb3J5LmMgeHBhdGguYyB4cG9pbnRlci5jOiBzdGFydGVkCgkgIGludGVncmF0aW5nIHRoZSBub24tY29udHJvdmVyc2lhbCBwYXJ0cyBvZiBHYXJ5IFBlbm5pbmd0b24KCSAgbXVsdGl0aHJlYWQgcGF0Y2hlcwoJKiBjYXRhbG9nLmM6IGNvcnJlY3RlZCBhIHNtYWxsIGJ1ZyBpbnRyb2R1Y2VkCgpUaHUgT2N0IDExIDIwOjU4OjE1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmMgaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oOiB2ZXJ5IHNlcmlvdXMgY2xlYW51cCwKCSAgaXNvbGF0aW5nIHVucG9ydGFibGUgY29kZSBhbmQgYXMgbXVjaCBhcyBwb3NzaWJsZSB0aGUgYWNjZXNzZXMKCSAgdG8gdGhlIGdsb2JhbCBzaGFyZWQgY2F0YWxvZy4gTWF5IG5lZWQgbW9yZSB0ZXN0aW5nICEKClRodSBPY3QgMTEgMTE6MTA6MzEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2RlYnVnWE1MLmggZGVidWdYTUwuYyB0cmVlLmM6IGludGVncmF0aW5nCgkgIEtlaXRoIElzZGFsZSBwYXRjaGVzIGZvciB0aGUgWFNMVCBkZWJ1Z2dlciBpbnRlcmZhY2VzLiBTb21lCgkgIGNsZWFudXAKClRodSBPY3QgMTEgMDg6NDQ6MDEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL01ha2VmaWxlLm1pbmd3OiB1cGRhdGUgZnJvbSBUb2JpYXMgUGV0ZXJzIGZvciAyLjQuNQoJKiBET0NCcGFyc2VyLmM6IGdlbmVyYXRlIGxpbmUgbnViZXJzIGluIGVsZW1lbnRzCgpXZWQgT2N0IDEwIDExOjM1OjQ1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjQuNiByZWxlYXNlCgkqIGRvYy94bWwuaHRtbCBkb2MvaHRtbC8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2NzCgkqIGluY2x1ZGUvbGlieG1sLyouaCAqLmM6IGZpeGVkIGEgbnVtYmVyIG9mIHRlaC90aGUgd2lkaHQvd2lkdGggdHlwb3MKCk1vbiBPY3QgIDggMjA6Mzg6MjcgTURUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxjYXRhbG9nX21hbi54bWwsIHhtbGNhdGFsb2cuMSwgeG1sY2F0YWxvZ19tYW4uaHRtbAoJYWRkaW5nIGRvY3VtZW50YXRpb24gZm9yIERWJ3Mgc3VwZXJjYXRhbG9nIHN1cHBvcnQKCk1vbiBPY3QgIDggMTc6MDA6MTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaCBjYXRhbG9nLmMgeG1sY2F0YWxvZy5jOiBhZGRpbmcgU0dNTAoJICBzdXBlciBjYXRhbG9nIHN1cHBvcnQgYWRkaW5nIG9uZSBBUEkgYW5kIG9uZSBmbGFnIC0tc2dtbCB0bwoJICB4bWxjYXRhbG9nCgpTdW4gT2N0ICA3IDE2OjQzOjU3IE1EVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sY2F0YWxvZ19tYW4ueG1sLCB4bWxjYXRhbG9nLjEKCU9uZSBtb3JlIGNyYWNrIGF0CglodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU0MzkyIAoJCgpTdW4gT2N0ICA3IDE4OjQ3OjAyIENFU1QgMjAwMSBUaG9tYXMgQnJveWVyIDx0YnJveWVyQGx0Z3QubmV0PgoKCSogeHBhdGguYzogaW1wbGVtZW50ZWQgeG1sWFBhdGhPYmplY3RDb3B5IGZvciBleHRlcm5hbCBvYmplY3RzCgkqIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmg6IGFkZGVkIHhtbFhQYXRoU3RhY2tJc0V4dGVybmFsCgpTYXQgT2N0ICA2IDE2OjI1OjUyIE1EVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKmRvYy94bWxjYXRhbG9nX21hbi54bWwsIHhtbGNhdGFsb2dfbWFuLmh0bWwsIHhtbGNhdGFsb2cuMQoJZmluaXNoaW5nIHVwIGZpeCB0bwoJaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NDM5MiwgbWFraW5nCgl0aGUgeG1sY2F0YWxvZyBtYW4gcGFnZSBkaXNwbGF5IG1vcmUgZWxlZ2FudGx5CgpTYXQgT2N0ICA2IDE1OjI3OjEyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IGNsb3NpbmcgYnVnICM2MTgzMgoJKiBIVE1McGFyc2VyLmM6IHJlbW92ZWQgYSB3YXJuaW5nCgpTYXQgT2N0ICA2IDE1OjA3OjE0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXhpbmcgIzYxNjczIHBhcnQgSSwgZG8gbm90IGxvb3NlIGRvYyBpbmZvcm1hdGlvbgoJICB3aGVuIGNvcHlpbmcgcmVzdWx0IHZhbHVlIHRyZWVzLgoKU2F0IE9jdCAgNiAxMTo1ODo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogdHJ5aW5nIHRvIGhhcmRlbiB0aGUgWFBhdGggaW50ZXJwcmV0ZXIKCkZyaSBPY3QgIDUgMjA6Mzc6NTEgTURUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxjYXRhbG9nLjEgdXBkYXRlZCB1c2luZyBhIG5ldyBzdHlsZXNoZWV0IHRvIGFkZHJlc3MsIGluCglwYXJ0LCBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU0MzkyCgpGcmkgT2N0ICA1IDIzOjM1OjAwIEhLVCAyMDAxIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogSFRNTHBhcnNlcjogcmVwYWlyZWQgYW5vdGhlciBsb29wIHByb2JsZW0KCkZyaSBPY3QgIDUgMTE6MTY6MjEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jOiBhcHBsaWVkIGZpeCBmcm9tIE1hdGhpYXMgSGFzc2VsbWFubiBhYm91dCBhIGJ1ZyBpbiBVUkkKCSAgcGFyc2luZy4KCSogeHBhdGguYzogZml4IGJ1ZyAjNjEyOTEgdGhlIGRlZmF1bHQgWE1MIG5hbWVzcGFjZSBub2RlIGlzCgkgIG1pc3NpbmcgZnJvbSB0aGUgbmFtZXNwYWNlIGF4aXMuCgkqIHRyZWUuYzogcmVmdXNlIHRvIGNyZWF0ZSBuYW1lc3BhY2VzIG5vZGVzIHdpdGggcHJlZml4ICJ4bWwiCgpUaHUgT2N0ICA0IDE2OjQ3OjQ0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogb3VjaCBhIG5vbi1kZWZpbmVkIG5hbWVzcGFjZSBjb3VsZCBsZWFkIHRvIGEgY3Jhc2gsCgkgIGZpeGVkICM2MTIxNQoKVGh1IE9jdCAgNCAxNjoyNDoyNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmM6IGNsb3NlZCBidWcgIzYxMDU0CgpXZWQgT2N0ICAzIDE1OjE5OjA0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbTogY2xvc2luZyAjNjA3MDgKClR1ZSBPY3QgIDIgMTU6NTI6MDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggcGFyc2VyLmM6CgkgIGFkZGluZyB4bWxTQVhQYXJzZUZpbGVXaXRoRGF0YSBmb2xsb3dpbmcgTWFyY28gU3RpcGVrIHN1Z2dlc3Rpb24KClR1ZSBPY3QgIDIgMTE6Mjc6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGNsb3NlIGJ1ZyAjNjE1NTAgd2hlbiB4bWw6IHdhc24ndCBjb25zaWRlcmVkIGEgbmFtZXNwYWNlCgpUdWUgT2N0ICAyIDExOjE4OjMyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9kc3AvbGlieG1sMi5kZWYuc3JjOiBJZ29yIFpsYXRrb3ZpYyBwYXRjaGVzCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgcGFyc2VyLmM6IGZpeGVkIHR5cG9zCgpNb24gT2N0ICAxIDA5OjM0OjUxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IEp1c3RpbiBGbGV0Y2hlciBwcm92aWRlZCBjbGVhdXAgY29kZSBpbiBjYXNlCgkgIEhBVkVfU1RBVCBpcyBub3QgZGVmaW5lZAoJKiBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IElnb3IgWmxhdGtvdmljIHN1Z2dlc3RlZCB0byBoYXZlCgkgIEhBVkVfU1RBVCBkZWZpbmVkIHRoZXJlCgpTYXQgU2VwIDI5IDAwOjE1OjAwIEhLVCAyMDAxIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogY2F0YWxvZy5jIC0gZml4ZWQgdHlwaW5nIGVycm9yIHJlcG9ydGVkIGJ5IE0uIEJhcnJvcwoKU3VuIFNlcCAyMyAyMTowMjozOSBNRFQgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogeG1sbGludC5jIC0gZml4aW5nIHR5cG8KClNhdCBTZXAgMjIgMTA6MDA6MDAgSEtUIDIwMDEgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBIVE1McGFyc2VyLmM6IHNtYWxsIGVuaGFuY2VtZW50IHRvIHByZXZlbnQgbG9vcCBvbgoJICB1bnJlY29nbml6YWJsZSBkYXRhCgpGcmkgU2VwIDIxIDExOjQ1OjUzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogYXBwbHlpbmcgcGF0Y2ggZnJvbSBidWcgIzYwNzU3IHRoaXMKCSAgc2hvdWxkIGNsb3NlIGl0CgpUaHUgU2VwIDIwIDE1OjU0OjI5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmMgeG1sY2F0YWxvZy5jOiByZW1vdmVkIGEgY291cGxlIG9mIHdhcm5pbmcKCSogeHBhdGguYzogdHJ5IHRvIHNvbHZlIHRoZSBsaW5raW5nIHByb2JsZW0gb24gcGxhdGZvcm1zCgkgIG5lZWRpbmcgdHJpbyB0byBjb21waWxlCgpXZWQgU2VwIDE5IDEwOjAxOjM3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbjogYmFja2luZyB1cCBub24tZG9jdW1lbnRlZCBjaGFuZ2VzCgkgIGNvbW1pdGVkIHdpdGhvdXQgcmV2aWV3IG9yIGFwcm92YWwgYnkgSmVucyBGaW5rZSA8amVuc0Bnbm9tZS5vcmc+CgkqIEhBQ0tJTkc6IG1hZGUgMTAwJSBjbGVhciB0aGF0IG5vIGNvbW1pdCBzaG91bGQgYmUgZG9uZSBkaXJlY3RseQoKTW9uIFNlcCAxNyAxODo1MjozNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBKb2UgT3J0b24gcHJvdmlkZWQgYSBwYXRjaCBmaXhpbmcgYSBwcm9ibGVtCgkgIHdoZW4gaWNvbnYgaXMgc3BlY2lmaWVkIHRvIGJlIGluIGEgbm9uLXN0YW5kYXJkIGRpcmVjdG9yeQoJICBidXQgd2Fzbid0IGV4cG9ydGVkIGluIHhtbDItY29uZmlnIC0tY2ZsYWdzCgpGcmkgU2VwIDE0IDE5OjMyOjQzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IGxldCdzIHNoaXAgMi40LjUgYmVmb3JlIGdldHRpbmcgdG9vIG11Y2gKCSAgdHJvdWJsZXMgd2l0aCAyLjQuNCBlcnJvcnMuCgpGcmkgU2VwIDE0IDEyOjI2OjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jIGVudGl0aWVzLmM6IGRvIG5vdCBvdXRwdXQgaGV4YWRlY2ltYWwgY2hhcnJlZnMKCSAgd2hlbiBzZXJpYWxpemluZyBIVE1MIHNpbmNlIHNvbWUgdmVyc2lvbiBvZiBOZXRzY2FwZSBjYW4ndAoJICBncm9rIGl0LCBnZW5lcmF0ZSBkZWNpbWFsIG9uZXMuCgkqIHJlc3VsdC9IVE1ML2RvYzMuaHRtOiBvdXRwdXQgY2hhbmdlZCBkdWUgdG8gcHJldmlvdXMgdGVzdAoJKiBwYXJzZXJJbnRlcm5hbHMuYzogcmVwYWlyIHhtbEtlZXBCbGFua3NEZWZhdWx0KCkgYnJva2VuIGluIDIuNC40CgpUaHUgU2VwIDEzIDEzOjM0OjI3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwtMi4wLnBjLmluOiBkb2hoIGdlbmVyYXRlZCB0aGUgd3JvbmcgaW5jbHVkZSBwYXRoIDotKAoJKiBkb2MvTWFrZWZpbGUuYW0gbGlieG1sLnNwZWMuaW46IHJlLWRvaGggZm9yZ290IHRoZSBuZXcgbWFucGFnZSA6LSgKCldlZCBTZXAgMTIgMjI6MTQ6NTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KICAgICAgICBSZWxlYXNlZCAyLjQuNAoKCSogY29uZmlnLmguaW4gY29uZmlndXJlLmluIGxpYnhtbC5zcGVjLmluIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtCgkgIGxpYnhtbC0yLjAucGMuaW46IG1vdmVkIGluY2x1ZGVzIHRvIGluY2x1ZGVkaXIvbGlieG1sMi9saWJ4bWwsCgkgIHVwZGF0ZWQgdGhlIGNvbmZpZ3VyYXRpb24gc2NyaXB0cyBzeXN0ZW1zIGFjY29yZGluZ2x5CgpXZWQgU2VwIDEyIDIwOjQ5OjMyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyBmb3IgMi40LjQKCSogZG9jL3htbC5odG1sIGRvYy9odG1sLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3MKCldlZCBTZXAgMTIgMTY6NTg6MTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmM6IHRyaWVkIHRvIGluY29ycG9yYXRlIGNvbW1lbnRzCgkgIGZyb20gYnVnICM1OTIyMAoKVHVlIFNlcCAxMSAxMToyNTozNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgcmVzdWx0L25vZW50L3dtbC54bWw6IGZpeGVkIGJ1ZyAjNTk5ODEgcmVsYXRlZAoJICB0byBoYW5kbGluZyBvZiAnJicgaW4gYXR0cmlidXRlcyB3aGVuIGVudGl0aWVzIGFyZSBzdWJzdGl0dWVkCgpNb24gU2VwIDEwIDIyOjE0OjQyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuaCBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4KCSAgaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmggaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmguaW46CgkgIFRyaWVkIHRvIGNsb3NlIGJ1ZyAjNjAxMzEKCk1vbiBTZXAgMTAgMjA6NDY6MDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBmaXhlZCBhIGJ1ZyBpbiB0aGUgSFRNTCBwYXJzZXIgaW50cm9kdWNlZCBTZXAgIDkKCk1vbiBTZXAgMTAgMjA6MTM6MDkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBmaXhpbmcgYnVnICM1OTk0NiBvbiB4bWxucz0iIgoKTW9uIFNlcCAxMCAxNjozOTo0MiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaCBTQVguYzogZml4aW5nIGJ1ZyA1OTczMiwgc2ltcGxlCgkgIGJ1dCBhbGxvY2F0ZXMgYSBuZXcgZXJyb3IgY29kZS4KClN1biBTZXAgIDkgMTA6MzM6MTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogSm9obiBGbGVjayBmaXhlZCB0eXBvcyBpbiB0aGUgb3B0aW9ucyBvdXRwdXQKCSogcGFyc2VyLmMgU0FYLmM6IGZpeCBpZ25vcmFibGUgd2hpdGUgc3BhY2UgU0FYIHNlbGVjdGlvbgoKU2F0IFNlcCAgOCAxMTo0Mzo1MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW50aXRpZXMuYzogU3RldmUgVW5kZXJ3b29kIGZvdW5kIHRoZSBwb3NzaWJpbGl0eSBvZiBhbgoJICBpbmluaXRlIGxvb3AgaW4gY2FzZSBvZiBlcnJvci4KCkZyaSBTZXAgIDcgMTE6MzU6MDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBOZWVkICQoSUNPTlZfTElCUykgaW4gbGlieG1sMl9sYV9MSUJBREQKCldlZCBTZXAgIDUgMTc6NDc6NDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiB3YXJuIGlmIHZlcnNpb24gaXMgbm90IDEuMCBidXQgaXQncyBub3QKCSAgc3RyaWN0bHkgc3BlYWtpbmcgYW4gZXJyb3IgYWZ0ZXIgYW5hbHl6aW5nIHRoZSBzcGVjCgpNb24gU2VwICAzIDEwOjA3OjAzIE1EVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKmRvYy9jYXRhbG9nLmh0bWwgLSBhZGQgbGluayB0byB0aGUgaHRtbCB2ZXJzaW9uIG9mIHRoZQoJbWFuIHBhZ2UsIG90aGVyIGxpbmd1aXN0aWMgY2xlYW51cHMKCk1vbiBTZXAgIDMgMDk6MTA6MDggTURUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxjYXRhbG9nX21hbi54bWwsIHhtbGNhdGFsb2dfbWFuLmh0bWwsIHhtbGNhdGFsb2cuMQoJYWRkaW5nIGRvY3VtZW50YXRpb24gZm9yIHhtbGNhdGFsb2cuIE5vdGU6IHhtbGNhdGFsb2cuMSwgdGhlIG1hbgoJZmlsZSwgaGFzIG5vdCB5ZXQgYmVlbiBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuCgpTYXQgU2VwICAxIDE4OjE3OjQ3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IHJlbW92ZWQgYSBkdXBsaWNhdGUgYWZmZWN0YXRpb24gSnVzdGluIEZsZXRjaGVyCgpGcmkgQXVnIDMxIDIyOjAyOjEwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IEFybWluIFNhbmRlciBwb2ludGVkIGEgcG9zc2libGUgdGV4dCBjb2FsZXNjaW5nIAoJICBwcm9ibGVtLCBjb21wbGV0ZWQgaGlzIHBhdGNoLgoKRnJpIEF1ZyAzMSAxODozMDoyOCBDRVNUIDIwMDEgQmpvcm4gUmVlc2UgPGJyZWVzZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CgoJKiB0cmlvbmFuLmM6IEZpeGVkIGNvbnN0IGFuZCB2b2xhdGlsZSByZS1kZWZpbml0aW9uIHByb2JsZW0KCQpGcmkgQXVnIDMxIDE2OjUxOjI4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuNCBwYXJzZXIuYzogZG9jIHVwZGF0ZXMgZnJvbSBIZWlrbyBSdXBwCgkqIHBhcnNlckludGVybmFscy5jOiAyIHNhbml0eSBjaGVja3MgZnJvbSBIZWlrbyBSdXBwCgpUdWUgQXVnIDI4IDIyOjM4OjQ1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBBcm1pbiBTYW5kZXIgdG8gbWFrZSBzb21lIHBvaW50ZXJzCgkgIGNvbnN0IGluIHhtbENvcHlOb2RlKCkKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBhZGRlZCBmaXggdG8gdGhlIGhlYWRlcgoKTW9uIEF1ZyAyNyAxNjoyNDo0NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogaHVtLCByZXN0cmljdCB0aGUgaW50ZWdlciB1c2FnZSBnY2MgYnVnIHdvcmthcm91bmQKCSAgdG8gb25seSBnY2MgY29tcGlsZXJzIHNvIHRoYXQgb3RoZXIgYXJjaGl0ZWN0dXJlIGRvbid0IGdldAoJICBwZW5hbGl6ZWQgYnkgdGhpcyBsaW1pdGF0aW9uLgoJKiBpbmNsdWRlL2xpYnhtbC94cGF0aC5oOiBzbWFsbCB0eXBvIGZpeCBmcm9tIEhlaWtvIFcuIFJ1cHAKClN1biBBdWcgMjYgMjA6NDU6MDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeGVkIGEgV2luZG93cyBjb21waWxlciB3YXJuaW5nIChDaHJpcyBQb2JsZXRlKQoJKiB4cGF0aC5jOiBmaXggZm9yIG1vZCB3aGVuIGRpdmlkZW5kIGlzIDAgKENocmlzIFBvYmxldGUpCgpTYXQgQXVnIDI1IDE1OjMwOjE3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmggY2F0YWxvZy5jIHhtbGNhdGFsb2cuYzogYWRkZWQgYSAKCSAgLS1jb252ZXJ0IG9wdGlvbiB0byB4bWxjYXRhbG9nIHRvIGNvbnZlcnQgU0dNTCBvbmVzIHRvCgkgIHRoZSBYTUwgc3ludGF4LgoJKiB4bWxsaW50LmM6IHNtYWxsIGNsZWFudXAgZm9yICRTR01MX0NBVEFMT0dfRklMRVMgc3VwcG9ydC4KCiAgICAgICAgMi40LjMgZ290IHJlbGVhc2VkIGF0IHRoYXQgcG9pbnQKVGh1IEF1ZyAyMyAyMzoxNjozMiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jIHhtbElPLmM6IHN0YXJ0ZWQgc29tZSBzZXJpb3VzIHRlc3RpbmcgYW5kIGZpeGVkCgkgIGEgZmV3IGJ1ZyBhbmQgb3B0bWl6YXRpb24gbmVlZHMuCgpUaHUgQXVnIDIzIDE3OjI2OjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6CgkgIHByZXBhcmluZyBmb3IgYSAyLjQuMyByZWxlYXNlIGV2ZW4gaWYgaXQgbWF5IG5vdCBiZSByZWFkeSB5ZXQKCSogY2F0YWxvZy5jIHBhcnNlci5jIHhtbElPLmMgaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oOiByZWRpcmVjdGVkCgkgIGFsbCBmaWxlIHBhcnNpbmcgbG9va3VwIHRvIGdvIHRocm91Z2ggdGhlIGVudGl0eSByZXNvbHZlciwgYWRkCgkgIHRvIGFkZCBhbiBBUEkgdG8gYnlwYXNzIGl0IChuZWVkZWQgdG8gbG9hZCBjYXRhbG9ncyB0aGVtc2VsdmVzKSwKCSAgc29tZSBjbGVhbnVwIG9uIHRoZSBjYXRhbG9nIGNvZGUgdG9vLgoJKiBuYW5vZnRwLmM6IHNtYWxsIGNsZWFudXAKCSogZG9jL2NhdGFsb2cuaHRtbDogc21hbGwgdXBkYXRlCgpUaHUgQXVnIDIzIDEyOjIyOjI2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IGZpeGVkIGJ1Z2kgIzU5NDA2IGluIFNHTUwgY2F0YWxvZyBwYXJzaW5nIHJlcG9ydGVkIGJ5CgkgIEp1biBLdXJpeWFtYQoJICAKVGh1IEF1ZyAyMyAwMjo1MToyOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2NhdGFsb2cuaHRtbDogZmluaXNoZWQgdGhlIGNhdGFsb2cgZG9jdW1lbnRhdGlvbgoKVGh1IEF1ZyAyMyAwMTozODo0MiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2NhdGFsb2cuaHRtbCBkb2MveG1sLmh0bWw6IGFkZGVkIGRvY3VtZW50YXRpb24gYWJvdXQKCSAgQ2F0YWxvZyBzdXBwb3J0LCBtaXNzZXMgYW4gQVBJIGRlc2NyaXB0aW9uIAoJKiBkb2MvaHRtbC8qOiByZWV4dHJhY3RlZCB0aGUgQVBJIHBhZ2VzCgpXZWQgQXVnIDIyIDE4OjI3OjQ3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmggY2F0YWxvZy5jIHhtbElPLmMgSFRNTHBhcnNlci5jOgoJICBBZGRlZCB0aGUgcGFydCBhYm91dCBzZWN0aW9uIDcuMiBvbiBVUkkgcmVzb2x1dGlvbiwKCSAgZml4ZWQgYSBzaWRlIGVmZmVjdCBpbiB0aGUgSFRNTCBwYXJzZXIsIGxvb2sgY29tcGxldGUKCSAgYW5kIHJlYWR5IHRvIHJvY2sgZXhjZXB0IHRoZSBVUkkvU3lzdGVtSUQgcGFydCEKCldlZCBBdWcgMjIgMTY6Mjc6MDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oIGNhdGFsb2cuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYwoJICB4bWxJTy5jOiBhZGRlZCBzdXBwb3J0IGFuZCBBUElzIG5lZWRlZCBmb3IgdGhlIGNhdGFsb2cgUEkKCSogaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogY2xlYW51cAoKV2VkIEF1ZyAyMiAwMjowMzozMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jIHBhcnNlci5jIHhtbElPLmMgeG1sY2F0YWxvZy5jIHhtbGxpbnQuYyAKCSAgaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oOiBzdGFydHMgdG8gbG9vayBva2F5LCByZWFsbHkKCSAgcGx1Z2dlZCB0aGUgbmV3IGZyYW1ld29yaywgY2xlYW5lZCBhIGxvdCBvZiBzdHVmZiwKCSAgYWRkZWQgc29tZSBBUElzLCBleGNlcHQgdGhlIFBJJ3Mgc3VwcG9ydCBtaXNzaW5nIHRoaXMKCSAgc2hvdWxkIGJlIG1vc3RseSBjb21wbGV0ZQoJKiByZXN1bHQvY2F0YWxvZ3MvKiB0ZXN0L2NhdGFsb2dzLyo6IGFkZGVkIG5ldyB0ZXN0LCBlbnJpY2hlZAoJICB0aGUgZXhpc3Rpbmcgb25lIHdpdGggVVJOIElEIHRlc3RzCgpUdWUgQXVnIDIxIDE0OjU2OjE4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IGZpeGVkIG5leHRDYXRhbG9nCgkqIHJlc3VsdC9jYXRhbG9ncy9kb2Nib29rIHRlc3QvY2F0YWxvZ3MvKjogc3RhcnRlZCBhZGRpbmcKCSAgYSBzbWFsbCByZWdyZXNzaW9uIHRlc3QKClR1ZSBBdWcgMjEgMTI6NTI6MzggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNhdGFsb2cuYyB4bWxjYXRhbG9nLmMgaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oOgoJICBtb3JlIHdvcmsgb24gdGhlIFhNTCBjYXRhbG9nIHN1cHBvcnQuCgkqIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBzbWFsbCBjbGVhbnVwIHNlZW1zIHVzaW5nCgkgIGxpc3QgYXMgYSBwdWJsaWMgcGFyYW1ldGVyIG5hbWUgY2FuIGdpdmUgcG9ydGFiaWxpdHkgdHJvdWJsZXMKCSogdHJpb25hbi5jIHRyaW9uYW4uaCB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3RyaW9uYW4uaAoJICBpbmNsdWRlL2xpYnhtbC94cGF0aC5oIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtOiByZW1vdmVkCgkgIHRyaW9uYW4gZnJvbSB0aGUgbGlieG1sIEFQSSwgYWRkZWQgeG1sWFBhdGhJc0luZiBhbmQgeG1sWFBhdGhJc05hTgoJICB3cmFwcGVycwoKVHVlIEF1ZyAyMSAxMToxODo0NSBDRVNUIDIwMDEgQmpvcm4gUmVlc2UgPGJyZWVzZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CgoJKiBNYWtlZmlsZS5hbSB0cmlvLmMgdHJpb2RlZi5oIHRyaW9uYW4uYyB4cGF0aC5jCgkgIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtIGluY2x1ZGUvbGlieG1sL3RyaW9uYW4uaDoKCSAgUmUtd29ya2VkIE5vdC1BLU51bWJlciBhbmQgSW5maW5pdHkgc3VwcG9ydC4KCSogeG1sY2F0YWxvZy5jOiBhZGRlZCByZWFkbGluZSBpbmNsdWRlIGZpbGVzCgpNb24gQXVnIDIwIDAyOjA0OjEzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSB4bWxjYXRhbG9nLmMgbGlieG1sLnNwZWMuaW46IHJlbmFtaW5nIAoJICB0ZXN0Q2F0YWxvZyBhcyB4bWxjYXRhbG9nLCBtYWtpbmcgaXQgYW4gaW5zdGFsbGVkIGFwcAoJICBhZGRpbmcgYSBzaGVsbCwgYW5kIHByZXBhcmluZyBpdCB0byBiZSBhIC9ldGMveG1sL2NhdGFsb2cKCSAgbWFuYWdlbWVudCB0b29sLCB0aG91Z2ggbm90IHJlYWR5IHlldAoJKiBjYXRhbG9nLmMgaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oOiBhZGRpbmcgc3VwcG9ydCBmb3IKCSAgWE1MIENhdGFsb2dzIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvCgkgIG5vdCBmaW5pc2hlZCwgdGhlcmUgaXMgc29tZSBpbnRlcmVzdGluZyB0cmFkZW9mZnMgYW5kIGEKCSAgZmV3IG9wZW4gcXVlc3Rpb25zIGxlZnQuCgpTdW4gQXVnIDE5IDE0OjU5OjU2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGZpeGVkIGEgbGluZSBmb3JtYXR0aW5nIHByb2JsZW0KCkZyaSBBdWcgMTcgMTE6MzU6MzEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiByZW1vdmVkIGEgY291cGxlIG9mIHVudXNlZCB2YXJpYWJsZSAoQWxiZXJ0IENoaW4pCgpGcmkgQXVnIDE3IDAxOjI1OjIxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmMgSFRNTHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9IVE1McGFyc2VyLmg6CgkgIHRyeWluZyB0byBmaXggc29tZSB0cm91YmxlcyB3LnIudC4gZnVuY3Rpb24gcmV0dXJuaW5nCgkgIGNvbnN0IHh4eFB0ci4KClRodSBBdWcgMTYgMjE6MzM6MjAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmM6IGFub3RoZXIgc2V0IG9mIHN5bWJvbHMgY29uZGl0aW9uYWxseQoJICBkZWZpbmVkCgpUaHUgQXVnIDE2IDIxOjMxOjE0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cG9pbnRlci5jOiByZW1vdmVkIHVudXNlZCB2YXIKClRodSBBdWcgMTYgMTg6MjY6NDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3RYUGF0aC5jOiBhbm90aGVyIHNtYWxsIGNsZWFudXAgY2xvc2luZyBidWcgIzU5MTEwCgpUaHUgQXVnIDE2IDE3OjU5OjE4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9kc3AvbGlieG1sMi5kZWYuc3JjOiBzbWFsbCBjbGVhbnVwIGNsb3NpbmcgYnVnCgkgICM1OTEwOAoKV2VkIEF1ZyAxNSAyMjo0NjowMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZXhhbXBsZS9nam9icmVhZC5jOiBhZGQgeG1sQ2xlYW51cFBhcnNlcigpIGJlZm9yZSBsZWF2aW5nCgpXZWQgQXVnIDE1IDE0OjU3OjA4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWcuaC5pbiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6CgkgIHJlbGVhc2VkIDIuNC4yCgpXZWQgQXVnIDE1IDEzOjU2OjIyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC92YWxpZC5oIGRlYnVnWE1MLmMgdmFsaWQuYzogZGVwcmVjYXRlCgkgIHRoZSBub24tYm91bmRjaGVja2luZyBTcHJpbnRmIGZ1bmN0aW9ucywgYWRkIFNucHJpbnRmCgkgIHRoaXMgc2hvdWxkIGNsb3NlIGJ1ZyAjNTc5ODQKCldlZCBBdWcgMTUgMTA6NDY6MDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IHhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lKCkgZGlkbid0IHVuZXNjYXBlZAoJICBVUklzIGJlZm9yZSBkb2luZyB0aGUgbG9va3VwcyAocG9pbnRlZCBieSBNYXJrIFZha29jKQoKVHVlIEF1ZyAxNCAxODozNzoyMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogc2VyaW91cyBjaGFuZ2VzIG9uIFJlc3VsdCBWYWx1ZSBUcmVlcyBhbmQgTm9kZVNldHMKCSAgdy5yLnQuIGRlYWxsb2NhdGlvbiBhbmQgY29sbGVjdCBvcGVyYXRpb25zLiBQcm9iYWJseSBub3QKCSAgMTAwJSBjbGVhbiAobWVyZ2Ugb2YgYWxsb2NhdGVkIHRyZWVzIHNtZWxscyBsaWtlIGEgcHJvYmxlbSkuCgkgIFNlZW1zIHN1ZmZpY2llbnQgdG8gY2xvc2UgIzU4OTQzCgpUdWUgQXVnIDE0IDE2OjEyOjAwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGFkZGluZyBhIC0tZm9ybWF0IG9wdGlvbgoKVHVlIEF1ZyAxNCAxNDoxNjoyNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogY291bnQoKSB3YXMgYnJva2VuIG9uIFJlc3VsdCBWYWx1ZSBUcmVlCgkqIHhtbElPLmM6IGZpeGVkIGZpbGU6Ly8vIGFjY2Vzc2VzIG9uIF9XSU4zMgoKTW9uIEF1ZyAxMyAxMzoyMjo1MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLm00OiBzL0xJQlhNTF9WRVJTSU9OX05VTUJFUi9MSUJYTUxfVkVSU0lPTi8gc2VlbXMgdGhlCgkgIG1hY3JvIHdhcyByZW5hbWVkLCB0aGlzIHNob3VsZCBjbG9zZSBidWcgIzU4NjgzCgpNb24gQXVnIDEzIDEyOjMzOjQwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogc21hbGwgZml4IGZpeGluZyBidWcgIzU4NTM5IHJlcG9ydGVkIGJ5IGNvb2xvLCBpbgoJICBlbnRpdHkgc3Vic3RpdHV0aW9uIG1vZGUgdGV4dCBhdCB0aGUgZW5kIG9mIHRoZSBlbnRpdHkgbWlnaHQKCSAgYmUgYWRkZWQgZHVlIHRvIHRleHQgY29hbGVzY2luZy4KCSogbmFub2Z0cC5jIHBhcnNlci5jOiBzbWFsbCBjbGVhbnVwCgpXZWQgQXVnICA4IDIyOjU3OjA1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgogICAgICAgICogSEFDS0lORzogYWRkZWQgSm9obiBGbGVjayByaWdodCB0byBjb21taXQgaW4gdGhlIGRvYyBzdWJkaXIKClR1ZSBBdWcgIDcgMDM6MDU6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jIHRlc3RYUGF0aC5jIHZhbGlkLmMgeG1sbGludC5jIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmg6CgkgIGFsbG93IHRvIGluaGVyaXQgYXR0cmlidXRlcyBmcm9tIHRoZSBEVEQgZGlyZWN0bHkgaW4gdGhlCgkgIHRyZWUsIHRoaXMgaXMgbmVlZGVkIGZvciBYUGF0aCBhbmQgY2FuIGJlIGEgdXNlZnVsIGZlYXR1cmUuCgkgIEluaGVyaXRlZCBuYW1lc3BhY2VzIGFyZSBhbHdheXMgcHJvdmlkZWQgYXQgdGhlIHRyZWUgbGV2ZWwgbm93CgkqIHRlc3QvZGVmYXR0ciogcmVzdWx0L2RlZmF0dHIqIHJlc3VsdC9ub2VudC9kZWZhdHRyKjogYWRkZWQgYSBjb3VwbGUKCSAgb2YgdGVzdHMgZm9yIHRoaXMgZmVhdHVyZSAoWFNMVCBiZWluZyB0aGUgcHJpbWUgdXNlcikuCgpGcmkgQXVnICAzIDE0OjAyOjIwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBET0NCcGFyc2VyLmMgTWFrZWZpbGUuYW0gbmFub2h0dHAuYyBwYXJzZXIuYyB0ZXN0SFRNTC5jCgkgIHRlc3RTQVguYyB4bWxJTy5jIHhtbGxpbnQuYyBpbmNsdWRlL3dpbjMyY29uZmlnLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oCgkgIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLmluIHdpbjMyL1JFQURNRS5NU0RldgoJICB3aW4zMi9kc3AvKjogYXBwbGllZCBXaW4zMiBGYWNlbGlmdCBOby4yIHBhdGNoZXMgZnJvbSAKCSAgSWdvciBabGF0a292aWMgZm9yIFdpbmRvd3MvTVNDCgpXZWQgQXVnICAxIDIzOjIxOjA2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogdW5wYXJzZWRFbnRpdHlEZWNsKCkgdGhlIFVSSSBjb21wdXRhdGlvbiBvZiB0aGUKCSAgZW50aXR5IHdhc24ndCBkb25lIGJyZWFraW5nIFhTTFQgdW5wYXJzZWQtZW50aXR5LXVyaSgpCgpXZWQgQXVnICAxIDE3OjQ0OjU3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXhlZCBhIGJ1ZyB3aGVuIHdhbGtpbmcgdGhlIGRlc2NlbmRhbnRzIGFuZAoJICB0aGUgY3VycmVudCBub2RlIGhhcyBubyBjaGlsZHJlbgoJKiBkZWJ1Z1hNTC5jOiBzaG93IHVwIHdoZW4gYSB0ZXh0IG5vZGUgaXMgc3VwcG9zZWQgdG8gbm90IGJlIGVzY2FwZWQKCldlZCBBdWcgIDEgMDE6MzM6MzUgQ0VTVCAyMDAxIFRob21hcyBCcm95ZXIgPHRicm95ZXJAbHRndC5uZXQ+CgoJKiB4cGF0aC5jOiBmaXhlZCBhIGJ1ZyBpbiB4bWxYUGF0aE5vZGVUcmFpbGluZ1NvcnRlZCAoZm9yIG5vdyBpdAoJICB3b3JrZWQgbGlrZSB0aGUgc2V0OmxlYWRpbmcoKSBmdW5jdGlvbikKCSogaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaDogYWRkZWQgeG1sWFBhdGhOb2RlU2V0Q29udGFpbnMKClR1ZSBKdWwgMzEgMTg6MjQ6MzQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBuYW5vaHR0cC5jOiBwcm90ZWN0ZWQgYW4gdXNlIG9mIEVBR0FJTiwgQnJpYW4gU3RhZmZvcmQKClR1ZSBKdWwgMzEgMTc6NDg6NDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxJTy5oOiBhcHBseSBjaGFuZ2UgdG8gY2xvc2UgIzU4MTQxIAoJKiB3aW4zMi9saWJ4bWwyLyo6IHVwZGF0ZSBvZiB0aGUgTVNDIHByb2plY3RzIGZyb20gSWdvciAgWmxhdGtvdmljCgpUdWUgSnVsIDMxIDE3OjA5OjMxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IHdoZW4gdGhlIGludGVybmFsIHN1YnNldCB1c2VzIGEgUEUsIHRoZW4gdGhlCgkgIGluY2x1ZGVkIGVudGl0eSBjYW4gdXNlIGNvbmRpdGlvbmFsIHNlY3Rpb25zLgoKTW9uIEp1bCAzMCAxMjo1ODozOSBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYyBpbmNsdWRlL2xpYnhtbC94cGF0aC5oOiBmaXhlZCBhIHNlcmlvdXMgbWVtb3J5IHByb2JsZW4KCSAgd2hlbiB3YWxraW5nIHRoZSBuYW1lc3BhY2UgYXhpcyBzaG93aW5nIHVwIGluCgkgIGxpYnhzdC90ZXN0cy9nZW5lcmFsL2J1Zy0xMgoJKiB4bWxtZW1vcnkuYzogYWRkZWQgdGhlIHBvc3NpYmlsaXR5IHRvIHRyYWNlIGEgZ2l2ZW4gYmxvY2sKCSAgZGVmaW5lZCBieSBpdHMgYWRkcmVzcwoKU3VuIEp1bCAyOSAwNzoxODo1MyBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGRvbid0IG92ZXJyaWRlIGV4aXN0aW5nIGVuY29kaW5nIHNwZWNpZmllZCBiZWZvcmUKCSAgc3RhcnRpbmcgeG1sUGFyc2VEb2N1bWVudCgpCgpTYXQgSnVsIDI4IDEzOjMzOjEwIEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogcmVpbnNlcnRlZCwgbmVlZGVkIGZvcgoJICBXaW5kb3dzIHVzZXJzIG9mIENWUwoKMjAwMS0wNy0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBiZW50c3Bvb24uY29tPgoKCSogZW5jb2RpbmcuYzogKHhtbEljb252V3JhcHBlcik6IEFkZCBjYXN0IHRvIGZpeCB3YXJuaW5nLgoJKiB0ZXN0Q2F0YWxvZy5jOiBBZGQgaW5jbHVkZSBvZiA8bGlieG1sL3BhcnNlci5oPi4KCjIwMDEtMDctMjcgIERhcmluIEFkbGVyICA8ZGFyaW5AYmVudHNwb29uLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sLy5jdnNpZ25vcmU6CgkqIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOgoJUmVtb3ZlIHRoaXMgZmlsZSBmcm9tIENWUyBiZWNhdXNlIGl0J3MgZ2VuZXJhdGVkLgoKRnJpIEp1bCAyNyAxMDowMzo1NiBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IGFwcGxpZWQgY29uc3QgcGF0Y2hlcyBmcm9tCgkgIFRvbSBNb29nICM1ODAwMgoKVGh1IEp1bCAyNiAxODo1NTo1MiBDRVNUIDIwMDEgVGhvbWFzIEJyb3llciA8dGJyb3llckBsdGd0Lm5ldD4KCgkqIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwveHBhdGh7LEludGVybmFsc30uaDogYWRkZWQgYSBmdW5jdGlvbgoJICBsb29rdXAgZnJhbWV3b3JrCgpGcmkgSnVsIDI3IDAxOjUwOjIwIEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbENvcHlOb2RlKCkgZm9yIGRvY3VtZW50cwoKVGh1IEp1bCAyNiAxMjo0MDozNSBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGZpeGVkIGJ1Z3MgIzU4MDczIHJlcG9ydGVkIGJ5IEdyZWcgU2h0aWxtYW4KClRodSBKdWwgMjYgMTE6Mzg6MzcgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBmaXhlcyBidWcgIzU3NjUyIHJlcG9ydGVkIGJ5IE1vcnVzIFdhbHRlcgoKVGh1IEp1bCAyNiAxMDoyNDozNCBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogbmFub2h0dHAuYzogSm9obiBLcm9sbCBwcm92aWRlZCBhIHNtYWxsIGZpeCB0byB4bWxOYW5vSFRUUFNhdmUKClRodSBKdWwgMjYgMDc6MTY6MDQgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jOiBmaXhlZCB0aGUgeG1sTGluZU51bWJlcnNEZWZhdWx0KCkKCSAgZXJyb3JzLCBsZXNzb24gZG9uJ3QgYWRkIG5ldyBmdW5jdGlvbnMgYXQgMWFtIGJlZm9yZSBhIHJlbGVhc2UKCSogeHBhdGguYzogaW50ZWdyYXRlZCBmaXggZnJvbSBCam9ybiB0byBhdm9pZCBkaXZpZGUgYnkgemVybwoJICBmcm9tIFhQYXRoIGluaXRpYWxpemF0aW9uIHdoZW4gcG9zc2libGUuCgpUdWUgSnVsIDI0IDE1OjM5OjExIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcmVzdWx0L3NjcmlwdHMvYmFzZSo6IHJlbW92aW5nIGhpc3RvcnkvcmVhZGxpbmUgY2hhbmdlZAoJICB0aGlzIHNsaWdodGx5CgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oIFNBWC5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jCgkgIHhtbGxpbnQuYzogbWFrZSBlbGVtZW50IGNvbnRlbnQgbGluZSBudW1iZXIgZ2VuZXJhdGlvbgoJICBvcHRpb25uYWwgdG8gYXZvaWQgYnJlYWtpbmcgb2xkIGFwcHMgYWRkZWQgaW50ZXJmYWNlIHRvIHN3aXRjaAoKVHVlIEp1bCAyNCAxNTowNjo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogZ2V0IHJpZCBvZiB0aGUgcmVhZGxpbmUgYW5kIGxpYmhpc3RvcnkKCSAgZGVwZW5kZW5jaWVzIGJ5IGRlZmF1bHQsIHJlbGVhc2UgMi40LjEgd2l0aCBJQTY0IGZpeAoJKiBuYW5vaHR0cC5jIHRyZWUuYyB4bWxJTy5jIGluY2x1ZGUvbGlieG1sL25hbm9odHRwLmgKCSAgaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGluY2x1ZGUvbGlieG1sL3htbElPLmg6IGluY29ycG9yYXRlZAoJICBKb2huIEtyb2xsIGZpeGVzIHRvIGFsbG93IHNhdmluZyB0byBIVFRQIHZpYSBQVVQgKG9yCgkgIFBPU1Qgb2YgbmVlZGVkKS4KCSogZG9jL2h0bWwvKi5odG1sOiByZWdlbmVyYXRlZCB0aGUgZG9jcwoKU3VuIEp1bCAyMiAwNTo1NjoxNiBDRVNUIDIwMDEgVGhvbWFzIEJyb3llciA8dGJyb3llckBsdGd0Lm5ldD4KCgkqIGhhc2guYyBpbmNsdWRlL2xpYnhtbC9oYXNoLmg6IGFkZGVkIHhtbEhhc2hTY2FubmVyRnVsbCwKCSAgeG1sSGFzaFNjYW5GdWxsIGFuZCB4bWxIYXNoU2Nhbm5GdWxsMyB0byBnZXQgcGFzc2VkIHRoZQoJICB0aHJlZSBrZXlzIGFzIGFyZ3VtZW50cyB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KClRodSBKdWwgMTkgMTU6Mjk6MjYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW4gTWFrZWZpbGUuYW06IHJlbW92ZWQgbGlieG1sIHNvZnRsaW5rIGZvciBnb29kCgkqIGluY2x1ZGUvbGlieG1sLyouaCAqLmMgZG9jL01ha2VmaWxlLmFtOiBjbGVhbnVwIHRvIGdldAoJICAxMDAlIGNvdmVyYWdlIGJ5IGd0ay1kb2MKClR1ZSBKdWwgMTcgMTc6MzY6NDYgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbG1lbW9yeS5jIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oOiBkZWJ1Z2dpbmcgb24gSUE2NCwKCSAgZml4ZWQgc2VyaW91cyB0cm91YmxlcyBkdWUgdG8gc2l6ZV90IHZzLiBpbnQgbWlzbWF0Y2gKClR1ZSBKdWwgMTcgMTY6MDQ6MzYgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFNBWC5jIHhtbElPLmM6IGNsZWFuZWQgdXAgc29tZSB3YXJuaW5nIG9uIHRoZSBBbHBoYQoKTW9uIEp1bCAxNiAwNjozMjo0NCBDRVNUIDIwMDEgVGhvbWFzIEJyb3llciA8dGJyb3llckBsdGd0Lm5ldD4KCgkqIGluY2x1ZGUvbGlieG1sL3hwYXRoeyxJbnRlcm5hbHN9LmggeHBhdGguYzogYWRkZWQgYSBtb3JlCgkgIGNvbnZlbmllbnQgZXh0ZW5zaW9uIEFQSSBmb3IgdmFsdWUgYW5kIGNvbnRleHQgbWFuYWdpbmcKCSAgTm93IGhhbmRsZXMgZXh0ZXJuYWwgb2JqZWN0cyB0aHJvdWdoIHhtbFhQYXRoUG9wRXh0ZXJuYWwsCgkgIHhtbFhQYXRoV3JhcEV4dGVybmFsIGFuZCB4bWxYUGF0aFJldHVybkV4dGVybmFsLgoJICBBZGRlZCBmdW5jdGlvbnMgZm9yIHNldHMgb3BlcmF0aW9ucyAoaW50ZXJzZWN0aW9uLCBldGMuKQoKTW9uIEp1bCAxNiAyMDowNToyNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oIGluY2x1ZGUvbGlieG1sL0hUTUxwYXJzZXIuaAoJICB4bWxJTy5jIHRyZWUuYyBwYXJzZXJJbnRlcm5hbHMuYyBlbnRpdGllcy5jIGVuY29kaW5nLmMKCSAgSFRNTHBhcnNlci5jOiBjbGVhbnVwIG9mIGdsb2JhbCB2YXJpYWJsZXMsIG1hcmtpbmcgc29tZQoJICBjb25zdCBvciBwcml2YXRlLgoKTW9uIEp1bCAxNiAwMDoxNzoxNSBDRVNUIDIwMDEgVGhvbWFzIEJyb3llciA8dGJyb3llckBsdGd0Lm5ldD4KCgkqIGluY2x1ZGUvbGlieG1sL3hwYXRoLmg6IGV4cG9ydGVkIHhtbFhQYXRoe05BTixQSU5GLE5JTkZ9CgkgIGZpeGVkIHhtbFhQYXRoTm9kZVNldEl0ZW0gd2hlbiBwYXNzaW5nIGluZGV4PTAKClN1biBKdWwgMTUgMTc6NTg6NDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaC5pbjogYWRkZWQgeG1sQ2hlY2tWZXJzaW9uKCkKClNhdCBKdWwgMTQgMTk6MzE6MjEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxsaW50LmM6IGZpeGVkIGNvbXBpbGF0aW9uIHVuZGVyIEN5Z3dpbiAjNTc1MDMKCSogVE9ETzogdXBkYXRlCgoyMDAxLTA3LTEzICBQZXRlciBXaWxsaWFtcyAgPHBldGVyd0B4aW1pYW4uY29tPgoKCSogY29uZmlnLmguaW46IGFkZCAjdW5kZWYgSEFWRV9ETEZDTl9ICgoJKiBleGFtcGxlL01ha2VmaWxlLmFtIChJTkNMVURFUyk6IENvbXBpbGUgZml4IHdoZW4gc3JjZGlyICE9CglidWlsZGRpci4KCkZyaSBKdWwgMTMgMTE6MDk6NTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB3aW4zMi9saWJ4bWwyL2xpYnhtbDIuZGVmLnNyYzogYWRkZWQgYSBjb3VwbGUgb2YgZXhwb3J0ZWQgZW50cmllcwoJICByYWlzZWQgYnkgIzU3MzQ4IGFuZCAjNTczODEKClRodSBKdWwgMTIgMjE6MjA6MTcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBET0NCcGFyc2VyLmMgSFRNTHBhcnNlci5jIEhUTUx0cmVlLmMgU0FYLmMgZGVidWdYTUwuYyBwYXJzZXIuYwoJICB0cmVlLmMgeHBvaW50ZXIuYzogc3RvcmUgdGhlIGxpbmUgbnVtYmRlciBpbiBlbGVtZW50LT5jb250ZW50LAoJICBtYXkgYnJlYWsgc29tZSBzb2Z0d2FyZSwgbmVlZCBhIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtCgoyMDAxLTA3LTEwICBEYXJpbiBBZGxlciAgPGRhcmluQGJlbnRzcG9vbi5jb20+CgoJKiAuY3ZzaWdub3JlOgoJKiBleGFtcGxlLy5jdnNpZ25vcmU6CgkqIGluY2x1ZGUvLmN2c2lnbm9yZToKCSogaW5jbHVkZS9saWJ4bWwvLmN2c2lnbm9yZToKCVZhcmlvdXMgdGhpbmdzIHRoYXQgYXJlIGdlbmVyYXRlZCBhbmQgc2hvdWxkIGJlIGlnbm9yZWQuCgpUdWUgSnVsIDEwIDE3OjQ3OjA5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiByZWxlYXNlIG9mIDIuNC4wCgkqIGRvYy94bWwuaHRtbCBkb2MvaHRtbC8qOiAgdXBkYXRlZCB0aGUgZG9jcwoKTW9uIEp1bCAgOSAyMjowNjo1MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IGZpeGVkICJJbnRlcm5hbDogTUlYRUQgc3RydWN0IGJhZCIgd2hlbiAjQ0RBVEEgZWxlbWVudHMKCSAgdmFsaWRhdGlvbiBvY2N1cmVkIG9uIGNvbnRlbnQgd2l0aCBlbGVtZW50IGNoaWxkCgpNb24gSnVsICA5IDE3OjU5OjA4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBmaXhlZCBYTUwgQmFzZSBjb21wdXRhdGlvbiB3aGljaCB3YXMgYnJva2VuCgkqIGRlYnVnWE1MLmM6IGFkZGVkIGEgYmFzZSBmdW5jdGlvbiB0byB0aGUgc2hlbGwKCSogTWFrZWZpbGUuYW0gcmVzdWx0L3NjcmlwdHMvKiB0ZXN0L3NjcmlwdHMvKjogYWRkZWQgc2NyaXB0cwoJICBiYXNlZCByZWdyZXNzaW9uIHRlc3RzLCBhbmQgYWRkaW5nIDIgWE1MIEJhc2UgdGVzdHMKCk1vbiBKdWwgIDkgMTI6MzE6MDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IHNldCBwcm9wZXJ0aWVzIGRvYyBhbmQgY2FsbCB4bWxTZXRMaXN0RG9jIGZvciBwcm9wZXJ0aWVzCgkgIGNvbnRlbnQgd2hlbiBncmFmdGluZyB0aGVtIGluIGEgZGlmZmVyZW50IHRyZWUuCgkqIGFjbG9jYWwubTQ6IHJlbW92ZSBmcm9tIENWUwoKU3VuIEp1bCAgOCAyMzowOTowNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHdpbjMyL2xpYnhtbDIvbGlieG1sMi5kZWYuc3JjOiBhZGRlZCBzb21lIG1pc3NpbmcgZW50cnkgcG9pbnQKCSAgZm9yIFhQYXRoIChNYXJrIFZha29jKQoKU3VuIEp1bCAgOCAyMDozNDozNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbElPLmM6IGZpeGVkIGFuIG9sZCBidWcgcmFpc2VkIGJ5IEJlcm5oYXJkIFp3aXNjaCwgdGhlIEkvTwoJICBsYXllciBzaG91bGQgVVJJLVVuZXNjYXBlIGJlZm9yZSB0cnlpbmcgdG8gb3BlbiByZXNvdXJjZXMuCgpTdW4gSnVsICA4IDE2OjI2OjAwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4IHRoZSBuYW1lKCkgYnVnIGZvciBlbGVtZW50cyBpbiB0aGUgZGVmYXVsdCAKCSAgbmFtZXNwYWNlIHJlcG9ydGVkIGJ5IENoYXJsaWUgQm96ZW1hbgoKU3VuIEp1bCAgOCAxNToxMTowNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFNBWC5jIHBhcnNlci5jIHRlc3RYUGF0aC5jIHhwYXRoLmM6IHRyeWluZyB0byBmaXggIzU2OTQ4LCB0aGlzCgkgIGxlZCB0byBhbiBYUGF0aCBmaXgsIGltcHJvdmVtZW50cyBvZiBTQVggaW5pdGlhbGl6YXRpb24sIGFuZAoJICBhbiBhZGRlZCBvcHRpb24gLS1ub2NkYXRhIHRvIHRlc3RYUGF0aAoKU2F0IEp1bCAgNyAyMTowOTo1NSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy9saWJ4bWwtZG9jLmVsOiBGZWxpeCBOYXR0ZXIgcHJvdmlkZWQgYW5ldyB2ZXJzaW9uIHdvcmtpbmcKCSAgd2l0aCBYRW1hY3MgdG9vCgpTYXQgSnVsICA3IDAyOjE2OjAwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS9saWJ4bWwveHBhdGguaDogc21hbGwgY2xlYW51cAoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZQoKRnJpIEp1bCAgNiAwMTo0MDoyMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDoKCSAgcmVsZWFzZWQgMi4zLjE0CgpGcmkgSnVsICA2IDAwOjQ3OjQxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL2h0bWwvKjogcmVidWlsdCB0aGUgZG9jcyBmb3IgdGhlIHJlbGVhc2UKCSogZG9jL3htbC5odG1sOiBhZGRlZCAyLjMuMTQgcmVsZWFzZS4KClRodSBKdWwgIDUgMjI6MDE6MzEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBhIGJ1ZyByZXBvcnRlZCBieSBTdGVwaGFuIEt1bG93IGVtcHR5IG5vZGVzZXRzCgkgIHdlcmUgbm90IGVxdWFsIHRvIGVtcHR5IHN0cmluZ3MKClRodSBKdWwgIDUgMDA6NTI6MjUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBTQVguYzogZml4ZWQgYSBVUkktUmVmZXJlbmNlIGNvbXB1dGF0aW9uIHByb2JsZW0gd2hlbiB2YWxpZGF0aW5nCgkqIHhtbElPLmM6IHNtYWxsIGNsZWFudXAKClRodSBKdWwgIDUgMDA6MDQ6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogaW1wcm92ZWQgdGhlIGRlc2NyaXB0aW9uIG9mIGEgY291cGxlIG9mIGludGVyZmFjZXMKCSAgdXBvbiBMYXJyeSBTdGFtcGVyIHN1Z2dlc3Rpb24KCldlZCBKdWwgIDQgMjE6NDI6MjQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBTQVguYyBlbnRpdGllcy5jIHBhcnNlci5jOiBjaGFuZ2VkIGNvbXBsZXRlbHkgdGhlIHdheSBlbnRpdGllcwoJICBhcmUgaGFuZGxlZCB3aGVuIHJ1bm5pbmcgdGhlIHBhcnNlciBpbiBlbnRpdHkgc3Vic3RpdHV0aW9uIG1vZGUuCgkgIFRoaXMgZml4ZXMgYSBidWcgcmVwb3J0ZWQgYnkgU3RlcGhhbiBLdWxvdyBhbmQgbmVhcmx5IGRpdmlkZXMKCSAgYnkgMyB0aGUgYW1vdW50IG9mIG1lbW9yeSByZXF1aXJlZCBieSBsaWJ4c2x0IHRvIGxvYWQgYW5kIHByb2Nlc3MKCSAgRG9jQm9vayBUREcuCgpXZWQgSnVsICA0IDE4OjAyOjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jOiBmaXhpbmcgYSB0b28gZWFybHkgcm9vdCBjbG9zaW5nIHByb2JsZW0gcmFpc2VkCgkgIGJ5dCBQcmFzaGFudGggTmFpZHUKCldlZCBKdWwgIDQgMDE6NDI6MDEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCBhIG1pc3NpbmcgY29weSBpbiB4bWxYUGF0aFZhcmlhYmxlTG9va3VwTlMoKSAKCSAgcmFpc2VkIGJ5IE1hcmsgVmFrb2MuCgpUdWUgSnVsICAzIDE4OjM1OjQ4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZXhhbXBsZS9NYWtlZmlsZS5hbTogZml4ZWQgdGhlIGluY2x1ZGUgcGF0aCB0byBhZGQgc3JjZGlyL2luY2x1ZGUKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluOiBmaXggZnJvbSBBbGJlcnQgQ2hpbiBmb3IgaWNvbnYgZGV0ZWN0aW9uCgkgIGFuZCBzb21lIGNsZWFudXAKClR1ZSBKdWwgIDMgMTA6MTI6MDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3hwYXRoLmggaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaDoKCSAgbG90IG9mIG9wdGltaXphdGlvbiB3b3JrLCByZXN1bHRzIGluIHNpZ25pZmljYW50IGltcHJvdmVtZW50cwoJICB3aGVuIGhhbmRsaW5nIHJlYWxseSBjb21wbGV4IFhQYXRoIHF1ZXJpZXMuIEFkZCBhIHNtYWxsIG9wdGltaXplcgoJICBmb3IgdW5pb25zLCBpbXByb3ZlIFtuXSBhbmQgW2xhc3QoKV0sIGF2b2lkIHNvbWUgY29zdGx5IG9wcy4KCkZyaSBKdW4gMjkgMjM6MjY6NTQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBwYXJzZXIuYzogeG1sU3Ryc3RyIGFyZ3MgYXJlIGJvdGggY29uc3QKCSogeHBhdGguYzogc21hbGwgY2xlYW51cAoJKiB4bWxHZXROc0xpc3Q6IHJlZm9ybWF0ZWQsIGZpeGVkIHByb2JsZW1zIGlmIHVzZWQgb24gRW50aXRpZXMKClRodSBKdW4gMjggMTg6MTk6NDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MveG1sLmh0bWw6IGFkZGVkIDEuOC4xNCBhbmQgMi4zLjEzIHJlbGVhc2VzCgpUaHUgSnVuIDI4IDE4OjE2OjI4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiByZWxlYXNlZCAyLjMuMTMKCSogTWFrZWZpbGUuYW0gZXhhbXBsZS9NYWtlZmlsZS5hbTogd29ya2Fyb3VuZCBhdXRvbWFrZSBnZW5lcmF0aW5nCgkgIGVycm9uZW91cyBkZXBzCgpUaHUgSnVuIDI4IDE1OjA4OjIyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBidWcgIzU2ODAxIFlvbiBEZXJlayBwcm92aWRlZCBhIHBhdGNoCgkgIHRvIHRoZSB3aW5kb3dzIGNvbmZpZyBmaWxlLgoKVGh1IEp1biAyOCAxNDo1MTo0NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwb2ludGVyLmMgaW5jbHVkZS93aW4zMmNvbmZpZy5oIHdpbjMyL2xpYnhtbDIvbGlieG1sMi5kZWYuc3JjCgkgIGxpYnhtbC5oIDogWW9uIERlcmVrIHByb3ZpZGVkIGEgc2V0IG9mIGNoYW5nZXMgdG8gY29tcGlsZSBmcm9tCgkgIENWUyBvbiBXaW5kb3dzL01TQwoKVGh1IEp1biAyOCAxNDoxMToyOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBmaXhlZCBVVEY4IEJPTSBzdXBwb3J0IGluIHB1c2ggbW9kZQoJKiB0ZXN0L3V0Zjhib20ueG1sIHJlc3VsdC91dGY4Ym9tLnhtbCByZXN1bHQvbm9lbnQvdXRmOGJvbS54bWw6CgkgIGFkZGVkIGEgc3BlY2lmaWMgdGVzdGNhc2UKCldlZCBKdW4gMjcgMTg6MzM6MTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbTogYWRkZWQgLS1wdXNoIHJlZ3Jlc3Npb24gdGVzdHMKCSogcGFyc2VySW50ZXJuYWxzLmM6IHRoZSBYTUwgcGFyc2VyIHNlZ2ZhdWx0ZWQgaW4gLS1wdXNoIG1vZGUKCldlZCBKdW4gMjcgMTM6MDk6NTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IG1vdmVkIHRoZSBzeW1saW5rcyBkZXRlY3Rpb24gd2l0aGluIGEgQ1ZTCgkgIGNoZWNrLCB0aGlzIGlzIG5vdCBwb3J0YWJsZSBhbmQgd2lsbCBiZSByZW1vdmVkIHNvb24uCgkqIHhwYXRoLmM6IHNtYWxsIGNsZWFudXAvc3BlZWR1cAoKVHVlIEp1biAyNiAxODowNToyNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbiBkb2MveG1sLmh0bWwgaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6CgkgIHJlbGVhc2Ugb2YgMi4zLjEyCgkqIHBhcnNlci5jOiBtYWtlIGFuIGVycm9yIG1lc3NhZ2UgaWYgdW5rbm93IGVudGl0aWVzIGluIGFsbCBjYXNlcwoKVHVlIEp1biAyNiAwOTo0NjoyOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHVyaS5jOiBmaXhlZCAyIHVyaSBub3JtYWxpemF0aW9uIGJ1Z3Mgb24gJy8vJyByZWR1Y3Rpb24KCk1vbiBKdW4gMjUgMTg6MDY6MjMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbTogTGFzemxvIFBldGVyIHBvaW50ZWQgb3V0IHRoYXQKCSAgaW5jbHVkZXMgd2VyZSBpbnN0YWxsZWQgaW4gdGhlIHdyb25nIGRpcgoKTW9uIEp1biAyNSAxNzowNzozNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy9odG1sLnhtbDogd2FybiBhZ2FpbnN0IHNlbmRpbmcgY29kZSB0byBleGhpYml0IGJ1Z3MuCgpTdW4gSnVuIDI0IDIzOjMxOjU2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogcGF0Y2ggdG8geG1sWFBhdGhGb3JtYXROdW1iZXIgZm9yIHRoZSBvcHRpbWl6ZXIgb24KCSAgVHJ1NjQgZnJvbSBUaG9tYXMgTGVpdG5lcgoKU3VuIEp1biAyNCAxNDowNTo1NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEFVVEhPUlM6IGFkZGVkIFdpbGxpYW0gYW5kIEJqb3JuCgkqIGluY2x1ZGUvbGlieG1sLyouaCAqLmMgUkVBRE1FIGRvYy8qLmh0bWwgZXRjLjogY2hhbmdlZCBvbGQgZW1haWwgdG8KCSAgZGFuaWVsQHZlaWxsYXJkLmNvbSBob3BlZnVsbHkgSSB3b24ndCBoYXZlIHRvIGRvIHRoaXMgYWdhaW4KCSogZG9jL01ha2VmaWxlLmFtIGRvYy9odG1sLyouaHRtbDogY2xlYW51cCBtYWtlZmlsZSwgY2hlY2tlZCB0aGF0CgkgIGRvY3MgY2FuIGJlIHJlYnVpbHQgY2xlYW5seSBub3cKCSogaW5jbHVkZS9saWJ4bWwveG1sKnZlcnNpb24uaCo6IHJlbW92ZWQgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oCgkgIGZyb20gQ1ZzIGl0J3MgZ2VuZXJhdGVkLCBhZGRlZCBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaAoJICBhbHNvIGdlbmVyYXRlZCBidXQgd2hpY2ggc2hvdWxkIGNoYW5nZSBmYXIgbGVzcyBmcmVxdWVudGx5LgoJKiBjYXRhbG9nLmMgbmFub2Z0cC5jOiBtYWRlIHN1cmUgdG8gaW5jbHVkZSBsaWJ4bWwuaCBub3QKCSAgbGlieG1sL3htbHZlcnNpb24uaCBkaXJlY3RseQoJKiBpbmNsdWRlL2xpYnhtbC8qLmg6IGluY2x1ZGUgeG1sd2luMzJ2ZXJzaW9uLmggaW5zdGVhZCBvZiB4bWx2ZXJzaW9uLmgKCSAgd2hlbiBjb21waWxpbmcgb24gV0lOMzIgYW5kIE1TQwoKU2F0IEp1biAyMyAyMzo1NDoxMiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvTWFrZWZpbGUuYW0gaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW0gY29uZmlndXJlLmluOgoJICBmaXhlZCBtYWtlIGRpc3RjaGVjayBhbmQgcmVidWlsZGluZyB0aGUgcnBtcwoKU2F0IEp1biAyMyAyMDo1MDo1MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogc2hvdWxkIGZpbmlzaCB0aGUgbWlncmF0aW9uIG9mIGV4cG9ydGVkIGluY2x1ZGVzCgkgIGludG8gYSByZWFsIGluY2x1ZGUvbGlieG1sIGluIENWUywgYXQgbGVhc3QgZm9yIENWUyB1c2Vycy4KCSogcmVtb3ZlZCB0aGUgZXhwb3J0ZWQgaGVhZGVycywgYWRkZWQgaW4gaW5jbHVkZS9saWJ4bWwgKGFzIHdlbGwKCSAgYXMgeG1sdmVyc2lvbi5oLmluKS4KClNhdCBKdW4gMjMgMjA6Mzc6MTkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGZpeGVkIHRoZSB3YXkgdG8gZGV0ZWN0IHN5bWxpbmsKClNhdCBKdW4gMjMgMjA6MzA6MTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IHVwZGF0ZWQsIGluY2x1ZGUvbGlieG1sIGlzIG5vdyBhIHJlYWwgQ1ZTIGRpcgoKU2F0IEp1biAyMyAxOTozNjozMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy9saWJ4bWwtZG9jLmVsOiBhIG5ldyB2ZXJzaW9uIG9mIGxpYnhtbC1kb2MuZWwuIFRoaXMgbmV3CgkgIHZlcnNpb24gd29ya3Mgd2l0aCBib3RoIGxpYnhtbDEgYW5kIGxpYnhtbDIgKGl0IGF1dG9kZXRlY3RzCgkgIHRoZSBwcmVmaXggb2YgdGhlIGh0bWwtZmlsZXMpIGZyb20gRmVsaXggTmF0dGVyLgoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZWQgZG9jIGFjY29yZGluZ2x5CgpTYXQgSnVuIDIzIDE4OjMwOjI4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgdGhlIGJ1ZyBnZW5lcmF0aW5nIGEgdGVtcGxhdGUgbG9vcCBpbiBsaWJ4c2x0CgkgIHdoZW4gdXNpbmcgZG9jYm9vay14c2wtMS40LCAqIHNob3VsZCBmaWx0ZXIgb3V0IGRvY3VtZW50IG5vZGVzCgkqIEhBQ0tJTkc6IGFkZGVkIFdpbGxpYW0KCSogVE9ETzogdXBkYXRlZAoKRnJpIEp1biAyMiAxODowMjozNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy9GQVEuaHRtbDogYWRkZWQgYSB3YXJuaW5nIGFib3V0IGdjYy0zLjAKCSogZG9jL3htbC5odG1sOiBhZGRlZCByZWZlcmVuY2UgdG8gZ2RvbWUyIGFuZCByZW1vdmVkIGEgY29uZnVzaW5nCgkgIHNlbnRlbmNlCgpGcmkgSnVuIDIyIDE3OjAyOjE2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sdmVyc2lvbi5oOiBva2F5IHRoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZSwgYnV0IFdpbmRvd3MKCSAgdXNlcnMgbmVlZCBpdCBhbmQgdGhleSBjYW4ndCBnZW5lcmF0ZSBpdCwgYW5kIEkgd2FudCBDVlMKCSAgV2luZG93cyB1c2VycyAuLi4KCSogd2luMzIvbGlieG1sMi9saWJ4bWwyX3NvLmRzcDogV2luZG93cyBwcm9qZWN0IGZpbGUgZm9yIAoJICB0aGUgc2hhcmVkIGxpYiB2ZXJzaW9uIG9mIGxpYnhtbDIKCSogd2luMzIvbGlieG1sMi9saWJ4bWwyLmRlZi5zcmM6IGJ1ZyAjNTY1Mjcgc2V0IG9mIGV4cG9ydGVkCgkgIHJlc291cmNlcyBuZWVkZWQgZm9yIGxpYnhzbHQveHNsdHByb2MgYnkgWW9uIERlcmVrCgpGcmkgSnVuIDIyIDE2OjM5OjM2IENFU1QgMjAwMSBCam9ybiBSZWVzZSA8YnJlZXNlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCgkqIHRyaW8uYzogTVNWQyBmaXggKHByb3ZpZGVkIGJ5IElnb3IgWmxhdGtvdmljKQoJCkZyaSBKdW4gMjIgMTI6NDI6MTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IGFub3RoZXIgc21hbGwgZml4IGZvciBBVFRSSUJVVEVfVU5VU0VECgpGcmkgSnVuIDIyIDEyOjQyOjE2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBZb24gRGVyZWsgcHJvdmlkZWQgYSBmaXJzdCBmaXgKCSAgdG8gYmUgYWJsZSB0byBjb21waWxlIGxpYnhzbHQveHNsdHByb2Mgb24gV2luZG93cwoKRnJpIEp1biAyMiAwMDowNDozNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGF0dGVtcHQgdG8gd29yayBhcm91bmQgd2hhdCBzZWVtZWQgYSBnY2Mgb3B0aW1pemVyCgkgIGJ1ZyB3aGVuIGhhbmRsaW5nIGZsb2F0cyBvbiBpMzg2IGh0dHA6Ly92ZWlsbGFyZC5jb20vZ2NjLmJ1ZwoJKiB0cmVlLmMgZW50aXRpZXMuYyBlbmNvZGluZy5jOiBkb2luZyBzb21lIGNsZWFudXBzIHdoaWxlCgkgIGNoYXNpbmcgaXQKClRodSBKdW4gMjEgMTM6MTM6MzYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbTogY2xlYW51cCB3aGVuIC0td2l0aG91dC1kZWJ1ZyBpcyBzcGVjaWZpZWQKCSogeGluY2x1ZGUuYyB4cGF0aC5jIHhwYXRoSW50ZXJuYWxzLmggeHBvaW50ZXIuYzogY2xlYW51cAoJICB3LnIudC4gLS13aXRob3V0LWRlYnVnIGFuZCBvdGhlciBpbmNsdWRlIHBvaW50cwoJKiBjYXRhbG9nLmggdGVzdENhdGFsb2cuYzogYSBiaXQgb2YgY2xlYW51cCBhbmQgcHJlcGFyZSBmb3IgWE1MCgkgIENhdGFsb2dzCgkqIGNvbmZpZ3VyZS5pbiBlbnRpdGllcy5oIHRyZWUuaCBIVE1McGFyc2VyLmM6IHJlbW92ZWQKCSAgLS13aXRob3V0LWNvcmJhLCBtYWRlIHRoZSBfcHJpdmF0ZSBmaWVsZCBtYW5kYXRvcnkKCldlZCBKdW4gMjAgMTk6Mzc6MjUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyBlbmNvZGluZy5jOiBTaW5jZSBOb3RlcGFkIG9uIFdpbjJrCgkgIG91dHB1dHMgYSBCT00gaW4gVVRGOCwgYW4gZXJyYXRhIGhhcyBiZWVuIGlzc3VlZCB0byBhdm9pZCB0aGUKCSAgcHJvYmxlbSwgdGhhdCB3YXMgdGhlIG1vc3QgcmVhc29uYWJsZSBzb2x1dGlvbi4uLiBBZGQgc3VwcG9ydAoJICBmb3IgYSBsZWFkaW5nIFVURjggQk9NIGluIGVudGl0aWVzLgoKV2VkIEp1biAyMCAxNTozODo1OSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IGZpeGVkIGEgYnVnIGZvdW5kIHdoZW4gcG9zdCB2YWxpZGF0aW5nIGFuIGVudGl0eSByZWYKCSogeG1sbGludC5jOiBhZGRlZCAtLWxvYWRkdGQgYW5kIHNsaWdseSBjaGFuZ2VkIC0tcG9zdHZhbGlkIHRvCgkgIGFjdGl2YXRlIGl0IHRvbwoKVHVlIEp1biAxOSAyMDowMzo0MCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYyB4aW5jbHVkZS5jIHhwb2ludGVyLmM6IGJ1ZyAjNTY0MDIgZXhwb3NlZCBhIG51bWJlciBvZgoJICB3ZWFrbmVzcyBpbiB0aGUgbm9kZSBjb3B5IHRoZSBYUG9pbnRlciBhbmQgdGhlIFhJbmNsdWRlCgkgIGltcGxlbWVudGF0aW9ucy4gU2VyaW91cyBjbGVhbnVwLgoKVHVlIEp1biAxOSAxNDo1MDoxOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtOiBLamFydGFuIE1hcmFhcyBwcm92aWRlZCBhIHNtYWxsIHBhdGNoIHRvCgkgIGFkZCB4bWwyLWNvbmZpZy5pbiB0byBFWFRSQV9ESVNUCgpUdWUgSnVuIDE5IDEzOjA0OjEwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYyB0cmVlLmMgcGFyc2VySW50ZXJuYWxzLmMgcGFyc2VyLmM6IFN0ZXBoYW4gS3Vsb3cKCSAgcHJvdmlkZWQgYW5vdGhlciBmYWlsaW5nIGNhc2UgZm91bmQgaW4gS0RFLCB0aGUgd2F5IHRoZQoJICBjdHh0LT52Y3R4dC5ub2RlVGFiIHdhcyBhbGxvY2F0ZWQgYW5kIGZyZWVkIGNoYW5nZWQgb3ZlcgoJICB0aW1lIGJ1dCBpdCB3YXNuJ3QgY29tcGxldGVseSBjbGVhbmVkIHVwLiBUaGlzIHNob3VsZCBmaXggaXQuCgpTdW4gSnVuIDE3IDE5OjU2OjMzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IFN0ZXBoYW4gS3Vsb3cgYWxzbyByYWlzZWQgdGhlIGZhY3QgdGhhdCBsaW5lIG51bWJlcgoJICBjb3VsZCBnZXQgbWlzY291bnRlZCBtYWtpbmcgZGVidWcgaGFyZGVyLCBmaXhlZCB0aGUgcHJvYmxlbQoJICBpbiB4bWxQYXJzZUNoYXJEYXRhKCkKClN1biBKdW4gMTcgMTk6MTc6MjYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBTdGVwaGFuIEt1bG93IHBvaW50ZWQgb3V0IGEgcHJvYmxlbSB3aGVuIHZhbGlkYXRpbmcKCSAgYW5kIHVzaW5nIGFuIGVtcHR5IGVudGl0eSwgZm9yZ290IGEgJ2JyZWFrJyBpbiBhIGNhc2UuCgpTdW4gSnVuIDE3IDE2OjQ3OjQwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBmaXhlZCB4bWxIYXNOc1Byb3AoKSBhY2NvcmRpbmdseSB0byBidWcgIzU1NjgzCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlZCB3aXRoIDIuMy4xMQoKU3VuIEp1biAxNyAxMjoyNDoxMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFRPRE86IHVwZGF0ZWQgYWRkaW5nIGNsZWFudXAgb2YgZ2VuZXJhdGVkIGRvYwoJKiBjb25maWd1cmUuaW46IHByZXBhcmVkIHRvIHJlbGVhc2UgMi4zLjExCgkqIHhtbGxpbnQuYzogYWRkZWQgLS12ZXJzaW9uIGZvciBidWcgcmVwb3J0aW5nCgkqIGRvYy9odG1sLyouaHRtbDogcmVidWlsdCB0aGUgZG9jCgpTYXQgSnVuIDE2IDIzOjIzOjMzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZmlyc3QgcGFydCBvZiB0aGUgd29yayBvbiBzZWxlY3RpbmcgbmFtZXNwYWNlIHRvCgkgIGZpeCBidWcgIzU2MTE1IAoKU2F0IEp1biAxNiAwMDoyMDo0NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtIGV4YW1wbGUvTWFrZWZpbGUuYW06IExhc3psbyBQRVRFUiBwcm92aWRlZCBhIGZpeAoJICB3aGVuIHVzaW5nIC1saWNvbnYKCSogVE9ETzogdXBkYXRlZAoKRnJpIEp1biAxNSAwNzowODo1NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLltjaF06IG1vcmUgd29yayBvbiB0aGUgSFRNTCBzZXJpYWxpemF0aW9uIHJvdXRuZXMsCgkgIGNsZWFudXAsIGVuY29kaW5nIHN1cHBvcnQuCgpUaHUgSnVuIDE0IDEwOjMxOjE3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogVGhvbWFzIEJyb3llciBzdWdnZXN0ZWQgYSBiZXR0ZXIgcGF0Y2ggZm9yIHRoZSAvIGFyZwoKVGh1IEp1biAxNCAwMTowMTozMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGJ1ZyBkZXRlY3RlZCBieSBBbmtoIHdoZW4gLyBpcyB1c2VkIGFzIGEgZnVuY3Rpb24gYXJnCgpXZWQgSnVuIDEzIDIzOjA4OjQ2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5bY2hdIEhUTUx0cmVlLmM6IHN0b3JlZCB0aGUgaW5saW5lL2Jsb2NrIHByb3BlcnR5CgkgIG9mIGVsZW1lbnQgYW5kIHVzZSBpdCB0byBhdm9pZCBvdXRwdXR0aW5nIGZvcm1hdHRpbmcgc3BhY2VzIGF0CgkgIHRoZSB3cm9uZyBwbGFjZS4gSW1wbGVtZW50ZWQgdGhlIGZvcm1hdCBwYXJhbWV0ZXIgZm9yIEhUTUwgc2F2ZS4KCSogcmVzdWx0L0hUTUwvZG9jMi5odG0gcmVzdWx0L0hUTUwvZG9jMy5odG0gcmVzdWx0L0hUTUwvZnA0MC5odG0KCSAgcmVzdWx0L0hUTUwvc2NyaXB0Lmh0bWwgcmVzdWx0L0hUTUwvdGVzdDIuaHRtbCByZXN1bHQvSFRNTC90ZXN0My5odG1sCgkgIHJlc3VsdC9IVE1ML3dpcmVkLmh0bWw6IG9mIGNvdXJzZSB0aGlzIGltcGFjdCB0aGUgcmVzdWx0IG9mIGEKCSAgbnVtYmVyIG9mIEhUTUwgdGVzdHMKClRodSBKdW4gMTQgMDk6NDk6MDkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5bY2hdOiBzdGFydGVkIGF1Z21lbnRpbmcgdGhlIEhUTUwgc2F2ZSBBUEkgd2l0aAoJICBlbmNvZGluZyBhbmQgZm9ybWF0dGluZyBwYXJhbWV0ZXJzCgpXZWQgSnVuIDEzIDA5OjQ0OjE1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuaDogY2xlYW51cCBhbmQgc3RhcnRlZCBldmFsdWF0aW5nIHRoZSB3b3JrIG5lZWRlZCBvbgoJICByZXZhbXBpbmcgdGhlIEhUTUwgb3V0cHV0IGNvZGUKCk1vbiBKdW4gMTEgMTk6Mjk6NDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBET0NCcGFyc2VyLmM6IGhhbmRsaW5nIG9mIFBJcyBhbmQgPD9zZ21sLWRlY2xhcmF0aW9uIGluIGVudGl0aWVzLgoKVHVlIEp1biAxMiAwODo0NjoyOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IGZpeGVkIGJ1ZyAjNTYwNDksIGZvcmdvdCBvbmUgY2hlY2sgaW4gdGhlCgkgIHZhbGlkYXRpb24gcm91dGluZQoKVHVlIEp1biAxMiAwODowOTo0NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuW2NoXTogZ3JyciAuLi4gbmFtZXNwYWNlIGlzIGEgQysrIHJlc2VydmVkIGtleXdvcmQKClR1ZSBKdW4gMTIgMDY6Mjk6MzkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBsaWJ4bWwuaDogZml4ZWQgYW4gZXJyb3IgaW4gbGFzdCBjb21taXQKCSogZG9jL0ZBUS5odG1sOiBhZGRlZCBhbiBlbnRyeSBmb3IgY29tcGlsYXRpb24gZnJvbSBDVlMKCk1vbiBKdW4gMTEgMTA6MDc6MjkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWx2ZXJzaW9uLmguaW4gbGlieG1sLmg6IEN5Z3dpbiBwYXRjaGVzCgkqIHRyZWUuYzogeG1sRnJlZU5vZGVMaXN0IHBhdGNoIHNpbWlsYXIgdG8geG1sRnJlZU5vZGUgb25lCgkqIHRyZWUuaDogY2xlYW51cAoKU2F0IEp1biAgOSAxOToxNjowMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogcGF0Y2hlZCB4bWxGcmVlTm9kZSgpIHRvIGF2b2lkIGZyZWVpbmcoKSBhIHN0YXRpYwoJICBtZW1vcnkgYmxvY2sgaW4gYSBzdHJhbmdlIGNhc2Ugd2hlcmUgbGlieG1sIGlzIGxpbmtlZCB0d2ljZQoJICBpbiB0aGUgYmluYXJ5LgoKU2F0IEp1biAgOSAxODozOTowMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IChhPyAsIGI/ICwgYz8gLCAuLi4gLCB6Pykgd2FzIHN0b3JpbmcvcmVzdGF1cmluZwoJICBzdGF0ZSBmYXIgdG9vIG9mdGVuLCBzaW1wbGUgZml4IHVzZWQgdG8gYXZvaWQgaXQuCgpTYXQgSnVuICA5IDE2OjEwOjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeGluY2x1ZGUuYzogUmFwaGFlbCBIZXJ0em9nIGhhZCBhIHRyb3VibGUgd2l0aCBEVEQgbm9kZXMKCSAgYmVpbmcgcHJvY2Vzc2VkLCBhcHBsaWVkIGhpcyBwYXRjaAoJKiB0cmVlLmM6IGZpeGVkIGEgYnVnIHJhaXNlZCBpbiB4bWxTdGF0aWNDb3B5Tm9kZUxpc3QoKQoKU2F0IEp1biAgOSAxNTo1MDoxMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHVyaS5jIGluY2x1ZGUvd2luMzJjb25maWcuaDogSWdvciAgWmxhdGtvdmljCgkgIHByb3ZpZGVkIGZpeGVzIHRvIGNvbXBpbGUgb24gTVNDQyBhZ2FpbgoJKiB3aW4zMi9saWJ4bWwyL2xpYnhtbDIuZGVmLnNyYyB3aW4zMi9saWJ4bWwyL2xpYnhtbDIqLmRzcDogaGUKCSAgYWxzbyBwcm92aWRlZCBhbiB1cGRhdGUgZm9yIHRoZSBwcm9qZWN0IGZpbGVzLgoKVGh1IEp1biAgNyAyMTo1MjoxMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogYXBwbGllZCBTdGV2ZSBUaW5uZXkgcGF0Y2ggdG8geG1sTmV3TnNQcm9wIHRvIGZpeAoJICBidWcgIzU1ODEwCgpUaHUgSnVuICA3IDIxOjI5OjM5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBmaXhlZCB4bWxHZXROc1Byb3AoKSB0byBjbG9zZSBidWcgIzU1NjgzCgkgIE5vdGUgdGhpcyByZXF1aXJlcyBsaWJ4c2x0IHRvIHVzZSBpdCdzIG93biBmdW5jdGlvbiBpbnN0ZWFkLgoKVGh1IEp1biAgNyAxODowNjozNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLmM6IHdoZW4gaW4gYSBwcmUgZWxlbWVudCBubyBmb3JtYXR0aW5nIHNwYWNlIHNob3VsZAoJICBiZSBhZGRlZC4KCSogdGVzdC9IVE1ML3ByZS5odG1sIHJlc3VsdC9IVE1ML3ByZS5odG1sKjogYWRkZWQgYSByZWdyZXNzaW9uIHRlc3QKClRodSBKdW4gIDcgMTc6Mjk6MzggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGFkZGVkIHRlc3RzIGZvciBzaWduYWwoKSBhbmQgc2lnbmFsLmgKCkZyaSBKdW4gIDggMTA6MTc6MTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiByb2JlcnQgcG9pbnRlZCBvdXQgeG1sWFBhdGhOSU5GIHdhcyBub3QgaW5pdGlhbGl6ZWQKCkZyaSBKdW4gIDggMTA6MDE6NDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MvbGlieG1sLWRvYy5lbDogRmVsaXggTmF0dGVyIHByb3ZpZGVkIGEgbmV3IHZlcnNpb24gZm9yCgkgIGxpYnhtbDIKCkZyaSBKdW4gIDggMDc6MjA6NDYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5jOiB3aGVuIGluIGEgcHJlIGVsZW1lbnQgbm8gZm9ybWF0dGluZyBzcGFjZSBzaG91bGQKCSAgYmUgYWRkZWQuCgpXZWQgSnVuICA2IDE4OjA3OjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBhZGQgLW1pZWVlIHRvIENGTEFHUyB3aGVuIGNvbXBpbGluZyBvbiBMaW51eC9hbHBoYQoKVGh1IEp1biAgNyAwNjo0NDowMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIERPQ0JwYXJzZXIuYzogaW1wbGVtZW50ZWQgdGhlIDw/c2dtbC1kZWNsYXJhdGlvbiBlbmNvZGluZz0ieHh4Ij8+CgkgIGhhY2sKCSogdHJlZS5bY2hdOiBhZGRlZCB4bWxIYXNOc1Byb3AgYXMgc3VnZ2VzdGVkIGluIGJ1ZyByZXBvcnQgIzU1NjUzIAoJKiB1cmkuYzogZml4ZWQgYSB3YXJuaW5nCgpUdWUgSnVuICA1IDIyOjU0OjIxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuYzogdHJ5aW5nIHRvIGNsb3NlIGJ1ZyAjNTU3NzIgZXNjYXBpbmcgaW4gc2NyaXB0CgkgIGVsZW1lbnRzCgkqIGRvYy94bWwuaHRtbDogc3VnZ2VzdCB0byBzZW5kIG1haWwgdG8gdGhlIGxpc3QKClR1ZSBKdW4gIDUgMTk6MTE6MDIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBlcnJvci5jOiBhdHRlbXB0IHRvIGZpeCB0aGUgeG1sR2V0VmFyU3RyIGJyZWFrYWdlIG9uY2UgYW5kIGZvcgoJICBnb29kLiBVc2UgYSBtYWNybyBhbmQgYmFzZWQgb24gdGhlIHNvbHV0aW9uIHByb3ZpZGVkIGluIAoJICB2c25wcmludGYgbWFudWFsIHBhZ2UgZnJvbSBHTlUuCgpUdWUgSnVuICA1IDE0OjQ2OjEwIENFU1QgMjAwMSBCam9ybiBSZWVzZSA8YnJlZXNlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCgkqIGVycm9yLmM6IFdvcmthcm91bmQgZm9yIG5vbi1wcmVzZXJ2aW5nIHZhcmlhZGljIGxpc3QuCgkqIHRyaW8uYyB0cmlvLmggdHJpb3AuaCBzdHJpby5jIHN0cmlvLmg6IFVwZ3JhZGVkIHRvIHRyaW8gYmFzZWxpbmUgMS40CgkKU2F0IEp1biAgMiAwNjoxMjozMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy94bWwuaHRtbDogYWRkZWQgMi4zLjEwIHJlbGVhc2UKCkZyaSBKdW4gIDEgMTE6Mjc6MTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IHJlbGVhc2luZyAyLjMuMTAKClRodSBNYXkgMzEgMjA6NDI6MzkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxJTy5jOiBHYXJ5IFBlbm5pbmd0b24gc3BvdHRlZCBhIGZldyB0cm91YmxlcyB3aXRoIGZpbGU6Ly8vCgpUaHUgTWF5IDMxIDIwOjE4OjU5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZW5jb2RpbmcuYzogUm9iZXJ0IENvbGxpbnMgcHJvdmlkZWQgYSBwYXRjaCB0byBhZGQgdGhlCgkgICJVUy1BU0NJSSIgZW5jb2RpbmcgYWxpYXMKCldlZCBNYXkgMzAgMjE6MTI6NDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jIGVuY29kaW5nLltjaF06IFdpbGxpYW0gTS4gQnJhY2sgcHJvdmlkZWQgYSBzZXQgb2YgVVRGOAoJICBzdHJpbmcgb3JpZW50ZWQgZnVuY3Rpb25zIGFuZCBzdGFydGVkIGNsZWFuaW5nIHRoZSByZWxhdGVkIGFyZWFzCgkgIGluIHhwYXRoLmMgd2hpY2ggbmVlZGVkIGZpeGluZyBpbiB0aGlzIHJlc3BlY3QKCldlZCBNYXkgMzAgMjA6MzA6NDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5jOiBhcHBsaWVkIHBhdGNoIGZyb20gSmFyb3NsYXcgS29sYWtvd3NraSB0byBjbG9zZSBidWcKCSAgIzU1MzgwCgkqIHRyZWUuYzogcGF0Y2ggdG8geG1sTm9kZUdldENvbnRlbnQoKSB0byBnZXQgQ0RBVEEgc2VjdGlvbiBjb250ZW50CgpNb24gTWF5IDI4IDEyOjU2OjI5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogVE9ETzogdXBkYXRlZAoJKiBuYW5vaHR0cC5bY2hdIDogc3RhcnRlZCBhZGRpbmcgQVBJcyB0byBnZXQgdGhlIHJlZGlyZWN0ZWQgVVJMCgkgIHdoZW4gdGhpcyBvY2N1cnMgKG5lZWRlZCBmb3IgZnVydGhlciBiYXNlIGNvbXB1dGF0aW9uCgkqIHRyZWUuaDogY2xlYW51cAoJKiBlbmNvZGluZy5jOiBjbGVhbnVwCgkqIFNBWC5jOiBtaW5vciBjaGFuZ2UgYXJvdW5kIGN0eHQtPmxvYWRzdWJzZXQKCkZyaSBNYXkgMjUgMDk6MzY6MjYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbSBpbmNsdWRlL01ha2VmaWxlLmFtOiBzbWFsbCBjaGFuZ2UgdG8gaGF2ZQoJICBpbmNsdWRlL2xpYnhtbCByZWJ1aWx0IGlmIHdvcmtpbmcgZnJvbSBDVlMuCgkqIHVyaS5jOiBhcHBsaWVkIGFub3RoZXIgcGF0Y2ggZnJvbSBDYXJsIERvdWdsYXMgZm9yIFVSSSBlc2NhcGluZywKCSAgdGhpcyBzaG91bGQgY2xvc2UgYnVnICM1MTg3NgoKV2VkIE1heSAyMyAxNTo0MDoyNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhpbmNsdWRlLmM6IGZpeGVkIFhJbmNsdWRlIHJlY3Vyc2l2ZSBiZWhhdmlvdXIgYnVnICM1NDY3OAoJKiByZXN1bHQvWEluY2x1ZGUvcmVjdXJzaXZlLnhtbCB0ZXN0L1hJbmNsdWRlL2RvY3MvcmVjdXJzaXZlLnhtbAoJICB0ZXN0L1hJbmNsdWRlL2VudHMvaW5jLnR4dCB0ZXN0L1hJbmNsdWRlL2VudHMvc3ViLWluYy5lbnQ6CgkgIGFkZGVkIHNwZWNpZmljIHJlZ3Jlc3Npb24gdGVzdAoJKiBwYXJzZXIuaDogcHJlcGFyaW5nIGZvciB0aGUgWFNMVCBtb2RlIHdoZXJlIERURCBpbmhlcml0ZWQKCSAgYXR0cmlidXRlcyBhcmUgYWRkZWQgdG8gdGhlIHRyZWUuCgpXZWQgTWF5IDIzIDEzOjU5OjE5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeGluY2x1ZGUuW2NoXTogVXBkYXRlZCB0aGUgbmFtZXNwYWNlIGZvciB0aGUgTGFzdCBDYWxsIHZlcnNpb24KCSogcmVzdWx0L1hJbmNsdWRlL2luY2x1ZGUgdGVzdC9YSW5jbHVkZS9pbmNsdWRlOiB1cGRhdGVkIHRoZQoJICB0ZXN0c3VpdGUgYWNjb3JkaW5nbHkKCldlZCBNYXkgMjMgMTI6Mjc6NDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB1cmkuW2NoXTogYXBwbGllZCBhIHBhdGNoIGZyb20gQ2FybCBEb3VnbGFzIGZvciBVUkkgZXNjYXBpbmcsCgkgIHJlbGF0ZWQgdG8gYnVnICM1MTg3NgoKVHVlIE1heSAyMiAxODo0Njo1NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogZml4ZWQgYSBncm9zcyBtaXN0YWtlIGluIGJhc2UgY29tcHV0YXRpb24sIHhtbDpiYXNlIGlzCgkgIG5vdCBjb21wbGV0ZWx5IGNvcnJlY3QgeWV0IChuZWVkIGNhc2NhZGUpLgoJKiB4cGF0aC5bY2hdOiBhZGRlZCB0aGUgZmV3IHRoaW5ncyBuZWVkZWQgdG8gZmluZCBhIGZ1bmN0aW9uIG5hbWUKCSAgYW5kIFVSSSBmcm9tIHRoZSBYUGF0aCBjb250ZXh0IHdoZW4gaXQgaXMgY2FsbGVkLgoKVHVlIE1heSAyMiAxNzowMDozNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNhdGFsb2cuW2NoXTogZml4ZXMgYW5kIGFkZCB4bWxMb2FkQ2F0YWxvZ3MoKQoJKiBET0NCcGFyc2VyLmM6IHNtYWxsIGNsZWFudXAKCSogeG1sbGludC5jOiBhZGRlZCBhIC0tY2F0YWxvZ3Mgb3B0aW9uIHRvIGxvYWQgY2F0YWxvZ3MgZnJvbQoJICAkU0dNTF9DQVRBTE9HX0ZJTEVTCgkqIHRyZWUuYzogY2xlYW51cAoJKiBjb25maWd1cmUuaW46IGljb252IGxpYnJhcnkgZml4dXAsIElDT05WX0xJQlMgCgpNb24gTWF5IDIxIDE2OjA1OjIyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY2F0YWxvZy5jOiBoYW5kbGluZyBvZiBDQVRBTE9HIGVudHJpZXMuIGRldGVjdGlvbiBvZiByZWN1cnNpb24sCgkgIGFuZCBhIGZldyBidWdmaXhlcwoJKiB4cGF0aC5jOiBmaXhpbmcgYnVnICM1NDk1MSBRTkFNRSB3aXRoIG5vIHByZWZpeCBzaG91bGQgbm90IG1hdGNoCgkgIGFnYWluc3QgdGhlIGRlZmF1bHQgbmFtZXNwYWNlCgpNb24gTWF5IDIxIDEwOjE0OjA3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogSm9lIE9ydG9uIHJlcG9ydGVkIGEgYnVnIGZvdW5kIHdpdGggSVJJeCBjb21waWxlci4KClN1biBNYXkgMjAgMTU6MTU6NDYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogZml4ZWQgcHJvcGFnYXRpb24gY29udGV4dCBpbmZvIHdoZW4gcGFyc2luZyBhbgoJICBleHRlcm5hbCBlbnRpdHkuCgkqIGRvYy9odG1sLyouaHRtbDogcmVnZW5lcmF0ZWQgYSBjb3VwbGUgb2YgZG9jcwoKU2F0IE1heSAxOSAxNzoxMToxNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlIHdpdGggMi4zLjkgaW5mb3JtYXRpb25zCgpTYXQgTWF5IDE5IDE2OjUwOjQ3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuaCBkZWJ1Z1hNTC5oIHBhcnNlckludGVybmFscy5oIHRyZWUuaCB2YWxpZC5jCgkgIHhtbHZlcnNpb24uaC5pbiB4cGF0aEludGVybmFscy5oIHhwYXRoLmg6IHNvbWUgY2xlYW51cCBmb3IgZ3RrLWRvYwoJKiBkb2MvaHRtbC8qIDogcmVidWlsdCB0aGUgZG9jcwoJKiB2YWxpZC5jOiBzbWFsbCBwYXRjaCB3aGljaCBtYXkgaW1wcm92ZSBzb21lIGNhc2Ugd2hlbgoJICB2YWxpZGF0aW5nLgoKU2F0IE1heSAxOSAxNToyMDowMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYzogQ2xvc2VkIGJ1ZyAjNTQ4OTEKCSogcmVzdWx0L0hUTUwvY2ZfMTI4Lmh0bWwqIHRlc3QvSFRNTC9jZl8xMjguaHRtbDogYWRkZWQgdGhlIHRlc3QKCSAgdG8gdGhlIHN1aXRlCgpUaHUgTWF5IDE3IDE0OjE1OjA3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZW5jb2RpbmcuaCBoYXNoLmMgbmFub2Z0cC5oIHBhcnNlci5oIHRyZWUuaCB1cmkuaCB4bGluay5oIHhwb2ludGVyLmM6CgkgIGFwcGxpZWQgYSBkb2N1bWVudGF0aW9uIHBhdGNoIGZyb20gTG90UiBhbmQgZmlsbGVkIGluIGEgZmV3IG1pc3NpbmcKCSAgZGVzY3JpcHRpb25zCgpXZWQgTWF5IDE2IDIzOjAyOjQxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYyB0cmVlLmMgcGFyc2VyLmM6IHNwZWVkIG9wdGltaXphdGlvbnMgYXQgdGhlIHBhcnNlciBsZXZlbAoJICBkb2N1bWVudCB0cmVlIGZyZWVpbmcgYW5kIHhwYXRoIGV2YWx1YXRpb24KCldlZCBNYXkgMTYgMTI6NTU6NDggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYyBwYXJzZXIuaCBwYXJzZXJJbnRlcm5hbHMuaDogZml4ZWQgYSBjb3VwbGUgb2YKCSAgaW50ZXJmYWNlcyBmb3IgaGFuZGxpbmcgbWVtb3J5IGJ1ZmZlciBpbnB1dCB0byBjb25zdCBjaGFyICoKCSAgdXBvbiBzdWdnZXN0aW9uIG9mIEphbWVzSC4KClR1ZSBNYXkgMTUgMTc6MjI6MjcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IExvVFIgc2VudCBhIHBhdGNoIGZpeGluZyB0aGUgcHJldmlvdXMgY29tbWl0IAoKVHVlIE1heSAxNSAxNDo0MDowNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogdHJ5aW5nIHRvIGRlYWwgYWdhaW4gd2l0aCB0aGUgc3Rvb3BpZCAtUiBsaW5raW5nCgkgIGZsYWcgb2YgU29sYXJpcwoKVHVlIE1heSAxNSAxMjo0OTo1MCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmg6IHR3byBub2Rlc2V0IGFjY2VzcyBtYWNyb3MgZnJvbSBUaG9tYXMgQnJveWVyCgpUdWUgTWF5IDE1IDExOjQyOjM5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYyB4cGF0aC5oIHhwYXRoSW50ZXJuYWxzLmg6IGFwcGx5IGFuIFhQYXRoIEFQSSBjbGVhbnVwCgkgIHBhdGNoIGZyb20gVGhvbWFzIEJyb3llcgoKVHVlIE1heSAxNSAxMDo1MjoxOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmMgdGVzdC9WQ00vdjJbMzRdLnhtbDogRml4ZWQgYnVnICM1NDYzMSBhZGRlZCBzcGVjaWZpYyB0ZXN0CgkgIGNhc2UKCSogSU5TVEFMTDogd2FzIGVtcHR5IGFkZGVkIHN0dWZmIGZyb20gdGhlIEZBUQoKRnJpIE1heSAxMSAxOTozNzozMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuW2NoXTogZml4aW5nIGJ1ZyAjNTQ0NDYsIGJ5IGNsZWFuaW5nIHNvbWUgYnVncyBpbiB0aGUKCSAgYXR0cmlidXRlcyBoYW5kbGluZyBhbmQgIzU0NDMzIGJ5IGFkZGluZyB4bWxVbnNldFByb3AoKQoJICBhbmQgeG1sVW5zZXROc1Byb3AoKQoKRnJpIE1heSAxMSAxNjowNzoxMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYzogUGF0Y2ggZnJvbSBKb25hcyBCb3Jnc3Ry9m0KCShodG1sR2V0RW5kUHJpb3JpdHkpOiBOZXcgZnVuY3Rpb24sIHJldHVybnMgCgl0aGUgcHJpb3JpdHkgb2YgYSBjZXJ0YWluIGVsZW1lbnQuCgkoaHRtbEF1dG9DbG9zZU9uQ2xvc2UpOiBPbmx5IGNsb3NlIGlubGluZSBlbGVtZW50cyBpZiB0aGV5IAoJYWxsIGhhdmUgbG93ZXIgb3IgZXF1YWwgcHJpb3JpdHkuCgkqIHJlc3VsdC9IVE1MOiB0aGlzIG9mIGNvdXJzZSBjaGFuZ2VkIGEgbnVtYmVyIG9mIHRlc3RzIHJlc3VsdHMuCgpUaHUgTWF5IDEwIDE3OjMwOjIyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sSU8uYyBjYXRhbG9nLmM6IHBsdWdnZWQgaW4gdGhlIGRlZmF1bHQgY2F0YWxvZyByZXNvbHV0aW9uCgkqIGRvYy9nbm9tZS14bWwuc2dtbDogbGlua2VkIGluIHRoZSBEb2Nib29rIHBhcnNlciBhbmQgY2F0YWxvZwoJICBkb2N1bWVudGF0aW9ucwoJKiBkb2MvaHRtbC9saWJ4bWwtKi5odG1sOiByZWJ1aWxkIGFkZGVkIHRoZSBtaXNzaW5nIG9uZXMgdG8gQ1ZTCgpUaHUgTWF5IDEwIDE2OjE0OjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW0geG1sdmVyc2lvbi5oLmluIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL01ha2VmaWxlLmFtOgoJICBpbnRlZ3JhdGluZyBjYXRhbG9ncwoJKiBjYXRhbG9nLltjaF0gdGVzdENhdGFsb2cuYzogYWRkaW5nIGEgc21hbGwgY2F0YWxvIEFQSQoJICAob25seSBTR01MIGNhdGFsb2cgc3VwcG9ydCkuCgkqIHBhcnNlci5jOiByZXN0YXVyZWQgeG1sS2VlcEJsYW5rc0RlZmF1bHQoMCkgQVBJCgpXZWQgTWF5ICA5IDEyOjUwOjE1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiB6YkBiaXNwLmNvbSByZXBvcnRlZCBhbiBlcnJvciBpbiB4bWxOb2RlR2V0TGFuZygpCgpUdWUgTWF5ICA4IDEyOjMxOjQwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGFkZGVkIHhtbFBhcnNlRXh0ZXJuYWxFbnRpdHlQcml2YXRlKCkgdG8gYWxsb3cKCSAgcHJvcGFnYXRpb24gb2YgY3R4dC0+X3ByaXZhdGUgd2hlbiBwYXJzaW5nIGV4dGVybmFsIGVudGl0aWVzCgpUdWUgTWF5ICA4IDEwOjI2OjIyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuYzogZml4ZWQgdGhlIGJ1ZyByZXBvcnRlZCBieSBCam9ybiBpbiBodG1sTm9kZUR1bXAKClR1ZSBNYXkgIDggMDk6MzA6MTIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGZpeGVkIGEgc21hbGwgcG9ydGFiaWxpdHkgcHJvYmxlbSB3aXRoIEFNX0NPTkRJVElPTkFMCgpNb24gTWF5ICA3IDIyOjQ0OjQ1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogd2FybiB3aGVuIGluZGV0ZXJtaW5pc3QgY29udGVudCBtb2RlbCBpcyBkZXRlY3RlZAoJKiByZXN1bHQvVkMvRWxlbWVudFZhbGlkODogdGhpcyBhZGRzIGEgbWVzc2FnZQoJKiBNYWtlZmlsZS5hbTogYWRkIC0tbm92YWxpZCBmb3IgVkNNIHRlc3RzCgkqIHBhcnNlckludGVybmFscy5jOiBhZGRlZCBhIGNhbGwgdG8gSW5pdCBtZW1vcnkgCgpGcmkgTWF5ICA0IDE5OjUxOjE1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBodG1sTmV3RG9jIFNZU1RFTSBhbmQgUFVCTElDIElEIGludmVyc2lvbgoJICB3aGVuIGJvdGggcGFyYW1ldGVycyBhcmUgTlVMTC4KCkZyaSBNYXkgIDQgMTc6MTk6MzkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBhcHBsaWVkIHNtYWxsIHBhdGNoIGZyb20gR2FyeSBQZW5uaW5ndG9uLCByZWluZGVudGVkCgkgIHNvbWUgcGFydCBvZiB0aGUgY29kZS4KClRodSBNYXkgIDMgMTM6MTA6NDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW4gZG9jL3htbC5odG1sIGRvYy9odG1sLyo6IHByZXBhcmluZyBmb3IgMi4zLjgKCSAgcmVsZWFzZSwgdXBkYXRlZCBhbmQgcmVnZW5lcmF0ZWQgdGhlIGRvY3MKClRodSBNYXkgIDMgMTI6NDc6NDYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jIHJlc3VsdC9YUGF0aC9leHByL2Zsb2F0cyA6IGNsYXJpZmllZCBhbmQgY2xlYW51cAoJICBwcmludGluZyBvZiBhYm5vcm1hbCBmbG9hdHMgaW4gdGVzdHMuCgpUaHUgTWF5ICAzIDEwOjI1OjE5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jOiB0cnlpbmcgdG8gZml4IHRoZSBwcm9ibGVtIHJlcG9ydGVkIGJ5IEpvbmFzIEJvcmdzdHL2bQoJKiByZXN1bHRzL0hUTUwvIDogYSBmZXcgY2hhbmdlcyBpbiB0aGUgb3V0cHV0IG9mIHRoZSBIVE1MIHRlc3RzIGFzCgkgIGEgcmVzdWx0LgoJKiBjb25maWd1cmUuaW46IHR5aW5nIHRvIGZpeCAtbGljb252IHdoZXJlIG5lZWRlZAoKV2VkIE1heSAgMiAxOToxMDoyNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtOiBmaXhlZCBhIHN0dXBpZCBlcnJvcgoKV2VkIE1heSAgMiAxODozOTozOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbTogbWFrZSB0aGUgaW5jbHVzaW9uIG9mIHRoZSB0cmlvCgkgIG1vZHVsZXMgaW4gdGhlIGxpYnJhcnkgY29uZGl0aW9uYWwKCldlZCBNYXkgIDIgMTQ6Mzk6NTcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBET0NCcGFyc2VyLmM6IHBhdGNoZSBmcm9tICBM4XN6bPMgS2924WNzLCBmaXhlZCBlbnRpdGllcyByZWZzCgkgIGluIGF0dHJpYnV0ZXMgaGFuZGxpbmcKCldlZCBNYXkgIDIgMTI6NTY6MDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxJTy5jOiBCam9ybiBSZWVzZSBwcm92aWRlZCBhIGZpeCBmb3IgYSBwcm9ibGVtIG9uIGJ1ZmZlcgoJIGZsdXNoaW5nCgpNb24gQXByIDMwIDIyOjI5OjM0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4IG9mIGFuIFhTTFQgbmFtZXNwYWNlIGJ1ZyByZXBvcnRlZCBvbiB0aGUgbGlzdAoJICBnZW5lcmFsL2J1Zy04LQoKTW9uIEFwciAzMCAxOTo0Mjo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHN0cmlvLmggdHJpby5jOiBEYW4gTWNOaWNob2wgc3VnZ2VzdGVkIGEgY291cGxlIG9mIHNtYWxsCgkgIGZpeGVzIGZvciBBSVggNC4zLjMgdXNpbmcgVmlzdWFsIEFnZSA1LjAuMiBjb21waWxlcgoKTW9uIEFwciAzMCAxMzo0NDo0OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYyBwYXJzZXIuYyBlbmNvZGluZy5jOiBzcGVudCBhIGJpdCBtb3JlIHRpbWUgbG9va2luZwoJICBhdCB0aGUgcGFyc2luZyBzcGVlZCBhbmQgRE9NIGhhbmRsaW5nLiBBZGRlZCBhIGZldyBtb3JlCgkgIHNwZWVkdXBzLgoKU3VuIEFwciAyOSAyMTo1Mzo0NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBzbWFsbCBidXQgZWZmZWN0aXZlIHBhcnNpbmcgc3BlZWQgaW1wcm92ZW1lbnQKClN1biBBcHIgMjkgMTk6MDI6MTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGRlZmF1bHQgb24gdGhlIERvY0Jvb2sgcGFyc2VyIGluY2x1c2lvbiAoZm9yIEdub21lKQoJKiBET0NCcGFyc2VyLmg6IGZpeGVkIGEgaGVhZGVyIHJlZmVyZW5jZQoKU2F0IEFwciAyOCAxOTowMDozOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbiB4cGF0aC5jOiBhcHBsaWVkIEJqb3JuIHBhdGNoZXMgZm9yIEZQRSBvbiB0aGUKCSAgYWxwaGEKClNhdCBBcHIgMjggMTg6NTQ6MjggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLltjaF0geG1sSU8uaDogYXBwbGllZCBwYXRjaCBmcm9tIEpvZSBNY0FsZXJuZXkgdG8gYWRkCgkgIHhtbFNhdmVGb3JtYXRGaWxlVG8oKQoKU2F0IEFwciAyOCAxNjozMzowNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHNpbXBsZSBhbmQgZWZmaWNpZW50IG9wdGltaXphdGlvbiwgWFBhdGggZnVuY3Rpb25zCgkgIGF3YXlzIGJpbmQgdG8gdGhlIHNhbWUgY29kZSwgY2FjaGUgdGhpcwoJKiBUT0RPOiB1cGRhdGVkIChieSBzYXlpbmcgc29tZSBpcyBvYnNvbGV0ZSkKClNhdCBBcHIgMjggMTQ6MjM6MzAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBtb3JlIGNsZWFudXAgd29yayBvbiBYUGF0aCBuYW1lIHBhcnNpbmcgcm91dGluZXMKCkZyaSBBcHIgMjcgMTk6MDY6MTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYyB4cGF0aC5bY2hdOiBzb21lIFVURjggY2xlYW51cCBvbgoJICB4bWxYUGF0aFBhcnNlTmFtZQoJKiB4cGF0aC5jOiBJZ29yIFpsYXRrb3ZpYyBzdWdnZXN0ZWQgYSBjaGFuZ2UgZm9yIE5BTiBhbmQgTVNDCgkqIGRlYnVnWE1MLmM6IGF2b2lkIGNvbXBpbGF0aW9uIHByb2JsZW1zIGlmIGNvbXBpbGluZyB3aXRob3V0CgkgIEhUTUwgc3VwcG9ydCwgSWdvciBabGF0a292aWMKCSogd2luMzIvbGlieG1sMi9saWJ4bWwyLmRlZi5zcmM6IGJlaW5nIGFibGUgdG8gY29tcGlsZSB3aXRob3V0CgkgIFhQYXRoIG9uIFdpbmRvd3MKClRodSBBcHIgMjYgMjI6NTM6MDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBsaWJ4bWwubTQ6IHlldCBhbm90aGVyIHBhdGNoIGZyb20gVG9zaGlvIEt1cmF0b21pCgpUaHUgQXByIDI2IDIxOjI3OjQzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogbGlieG1sLm00IGxpYnhtbDItc3BlYy5pbjogbmV3IHBhdGNoZXMgZnJvbSBUb3NoaW8gS3VyYXRvbWkKClRodSBBcHIgMjYgMjA6NTM6NDggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLltjaF06IGFkZGVkIHhtbFNhdmVGb3JtYXRGaWxlIGludGVyZmFjZSBmb3Igc2F2aW5nCgkgIGFuZCBpbmRlbnRpbmcgYSBmaWxlLgoKVGh1IEFwciAyNiAxNjozNTo1MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIGJ1ZyAjNTM2ODkgcmVsYXRlZCB0byBwcm9jZXNzaW5nLWluc3RydWN0aW9uKCkKClRodSBBcHIgMjYgMTI6NTc6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBET0NCcGFyc2VyLmM6IHBhdGNoZSBmcm9tICBM4XN6bPMgS2924WNzCgpUaHUgQXByIDI2IDExOjMxOjU0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGFwcGxpZWQgZml4ZXMgZnJvbSBDaHJpc3RpYW4gR2xhaG4gYnVnIHJlcG9ydCAjNTMzOTEKClRodSBBcHIgMjYgMTE6MTQ6NTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBlcnJvci5jOiBKZWFuIEZyYW7nb2lzIExlY29tdGUgcHJvdmlkZWQgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbgoJICBhbmQgYSBmaXggdG8gYnVnICM1MzUzNwoKVGh1IEFwciAyNiAwOTo0Mjo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGxpYnhtbC5tNDogYWRkZWQgQU1fUEFUSF9YTUwyIHByb3ZpZGVkIGJ5IFRvc2hpbyBLdXJhdG9taQoKV2VkIEFwciAyNSAyMTowNTozMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIERPQ0JwYXJzZXIuYyBTQVguYzogYSBiaXQgbW9yZSB3b3JrIG9uIGVudGl0aWVzIHByb2Nlc3NpbmcuCgkgIFN0aWxsIE5lZWQgdG8gY2xlYW51cCBYTUwgb3V0cHV0IGFuZCByZWZlcmVuY2VzIGluIGF0dHJpYnV0ZXMKCldlZCBBcHIgMjUgMTc6NTI6MjcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBET0NCcGFyc2VyLmMgaW5jbHVkZS9NYWtlZmlsZS5hbTogdHdvIHBhdGNoZXMgZnJvbSAgTOFzemzzIEtvduFjcwoKV2VkIEFwciAyNSAxNDo1NjoyNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogdHJ5aW5nIHRvIGZpeCAjNTM1NzQsIG5vdCBjb21wbGV0ZWx5IGNvbXBsZXRlLAoJICBJIHdvdWxkIGxpa2UgeG1sbGludCAtLWNvcHkgLS1kZWJ1ZyB0ZXN0L2VudDEgYW5kCgkgIHhtbGxpbnQgLS1kZWJ1ZyB0ZXN0L2VudDEgdG8gc2hvdyB0aGUgc2FtZSByZXN1bHQuCgkqIHhwYXRoLmM6IGZpeCBhIGJ1ZyB3aGVuIHRyeWluZyB0byBzb3J0IG5hbWVzcGFjZSBub2RlcwoKV2VkIEFwciAyNSAxMjoyODo1NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLmM6IHJlYWwgZml4IGZvciAgIzUzNDAyCgpUdWUgQXByIDI0IDE3OjM2OjM1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuYyBIVE1MdHJlZS5oIDogY2xvc2luZyAjNTM0MDIgaS5lLiBvdXRwdXQgb2YKCSAgUElzIHdoZW4gdXNpbmcgeHNsOm91dHB1dAoJKiB2YWxpZC5jOiBjbG9zaW5nICM1MzUzNyBzb21lIGNhc2UgZ2VuZXJhdGUgc2VnZmF1bHRzIGlmIHRoZXJlCgkgIGlzIHZhbGlkaXR5IGVycm9ycwoKVHVlIEFwciAyNCAxNToxOTo1MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFNBWC5jIHRlc3REb2Nib29rLmMgRE9DQnBhcnNlci5jOiBtb3JlIHdvcmsgb24gdGhlIHN1cHBvcnQKCSAgb2YgZXh0ZXJuYWwgcGFyc2VkIGVudGl0aWVzLCBhZGRlZCAtLW5vZW50IHRvIHRlc3REb2Nib29rCgkqIHZhbGlkLmM6IEdhcnJ5IFBlbm5pbmd0b24gZm91bmQgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZQoJICBhY2Nlc3MgaW4geG1sVmFsaWRhdGVFbGVtZW50Q29udGVudCgpCgpUdWUgQXByIDI0IDE0OjQxOjI1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jIDogSFRNTCBwYXJzaW5nIHN0aWxsIHN1Y2tzIC4uLiB0cnlpbmcgdG8gZGVhbAoJICB3aXRoIG1hZG5lc3MKCSogcmVzdWx0L0hUTUwvIDogdGhpcyBtb2RpZmllZCB0aGUgcmVzdWx0IG9mIHRoZSByZWdyZXNzaW9uIHRlc3RzCgkgIGEgbG90LgoKVHVlIEFwciAyNCAxNDoxMDozOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGVudGl0aWVzLmM6IHhtbEVuY29kZUVudGl0aWVzUmVlbnRyYW50IGZpeGVkIGEgZmV3IGFjY2Vzc2VzCgkgIHRvIGRvYyB3aGVyZSBpdCB3YXNuJ3QgY2hlY2tlZCBhZ2FpbnN0IE5VTEwgcmVwb3J0ZWQgYnkKCSAgSmVucyBMYWFzCgpUdWUgQXByIDI0IDEzOjIxOjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jOiBKb25hcyBCb3Jnc3Ry9m0gcGF0Y2gsIHRoZSA8dGQ+LCBhbmQgPHRoPiBlbGVtZW50cwoJICBub3cgbWVhbnMgdGhlIGVuZCBvZiBhbnkgb3BlbiA8c3Bhbj4sPGZvbnQ+LDxhPiw8Yj4sPGk+LDx1Pi4KCk1vbiBBcHIgMjMgMTU6NDA6MDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBET0NCcGFyc2VyLmMgRE9DQnBhcnNlci5oIHRlc3REb2Nib29rLmMgY29uZmlndXJlLmluIE1ha2VmaWxlLmFtCgkgIHhtbHZlcnNpb24uaC5pbjogc3RhcnRlZCAocmUpaW50ZWdyYXRpbmcgdGhlIERvY0Jvb2sgU0dNTCBwYXJzZXIuCgkqIFNBWC5bY2hdOiBjbGVhbnVwIGFuZCB1cGRhdGVzIGZvciBEb2NCb29rCgkqIGRlYnVnWE1MLmMgcGFyc2VyLmggdHJlZS5bY2hdIHZhbGlkLmMgeHBhdGguYzogc21hbGwgbWFjcm8gb3IKCSAgZXggU0dNTCBpZGVudGlmaWVyIGNoYW5nZXMKCSogdmFsaWQuYzogcmVtb3ZlZCBhIHN0YXRpYyB1bnVzZWQgZnVuY3Rpb24uCgpNb24gQXByIDIzIDExOjA1OjU2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuYzogYXBwbGllZCBjaGFuZ2UgZm9yIFBhdWwgU3BvbmFnbCBvbiBzY3JpcHQgc2F2aW5nCgkqIE1ha2VmaWxlLmFtOiB0aGUgd2FybmluZyBhYm91dCBlbnRpdHkgdGl0bGUueG1sIGFyZSBub3JtYWwuCgpTdW4gQXByIDIyIDIyOjA5OjM1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiByZWxlYXNlIG9mIDIuMy43CgkqIE1ha2VmaWxlLmFtOiBmaXhpbmcgbWFrZSBkaXN0Y2hlY2sKClN1biBBcHIgMjIgMjE6Mjk6NTIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MvaHRtbC8qIGRvYy94bWwuaHRtbDogdXBkYXRlZCBhbmQgcmVnZW5lcmF0ZWQgdGhlIGRvY3MKClN1biBBcHIgMjIgMjE6MTE6NDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCB0aGUgWFBvaW50ZXIgcHJvYmxlbSBpbnRyb2R1Y2VkIGluIDIuMy42CgpTdW4gQXByIDIyIDE0OjExOjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBmaXhlZCAjNTMzODggd2l0aCB0aGUgcHJvdmlkZWQgcGF0Y2gKClN1biBBcHIgMjIgMTI6MzQ6NDEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBCam9ybiBkZXRlY3RlZCBhbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MuIEZpeGVkCgkgIHZzdGF0ZVZQdXNoKCkKClN1biBBcHIgMjIgMTA6NDk6MjMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCB4bWxYUGF0aENvbXBpbGUgdG8gZGV0ZWN0ZWQgdW5wcm9wZXJseSBlbmRlZCBleHByCgpTYXQgQXByIDIxIDE4OjI3OjUxIENFU1QgMjAwMSBCam9ybiBSZWVzZSA8YnJlZXNlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCgkqIGxpYnhtbC5oOiBuZXcgaGVhZGVyIHVzZWQgb25seSBmb3IgdGhlIGNvbXBpbGF0aW9uIG9mIGxpYnhtbAoJKiBIVE1McGFyc2VyLmMgSFRNTHRyZWUuYyBTQVguYyBkZWJ1Z1hNTC5jIGVuY29kaW5nLmMgZW50aXRpZXMuYwoJICBlcnJvci5jIGhhc2guYyBsaXN0LmMgbmFub2Z0cC5jIG5hbm9odHRwLmMgcGFyc2VyLmMKCSAgcGFyc2VySW50ZXJuYWxzLmMgdGVzdEhUTUwuYyB0ZXN0U0FYLmMgdGVzdFVSSS5jIHRlc3RYUGF0aC5jCgkgIHRyZWUuYyB1cmkuYyB2YWxpZC5jIHhpbmNsdWRlLmMgeGxpbmsuYyB4bWxJTy5jIHhtbGxpbnQuYwoJICB4bWxtZW1vcnkuYyB4cGF0aC5jIHhwb2ludGVyLmM6IGxpYnhtbC5oIGludGVncmF0aW9uCgkqIHRyaW8uW2NoXSB0cmlvcC5oIHN0cmlvLltjaF06IHVwZ3JhZGVkIHRvIHRoZSBsYXRlc3QgdHJpbwoJICBiYXNlbGluZSAodmVyc2lvbiAxLjIgcGx1cyBhIHNpbmdsZSBwYXRjaCkuCgkqIHhwYXRoLmMgcmVzdWx0L1hQYXRoL2V4cHIvZmxvYXRzIHRlc3QvWFBhdGgvZXhwci9mbG9hdHM6IHBhcnNlcwoJICBzY2llbnRpZmljIG5vdGF0aW9uIGZvciBudW1iZXJzLiBUZXN0cyBhZGRlZC4KCSogeHBhdGguYzogZm9ybWF0dGluZyBvZiBudW1iZXJzIGNoYW5nZWQgdG8gdXNlIHNwcmludGYKCSAgKGNvbnRyaWJ1dGlvbiBmcm9tIFdpbGxpYW0gQnJhY2spCgpTYXQgQXByIDIxIDE2OjEyOjU5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogY2xlYW51cCwgbW9yZSB1c2VmdWwgZGVidWdnaW5nCgkqIHBhcnNlckludGVybmFscy5jOiBjbGVhbnVwIHZjdHh0Lm5vZGVUYWIgKGRlKWFsbG9jYXRpb24KCSogeG1sSU8uYzogZW50aXR5IGxvYWRpbmcgaXMgcHJpbnRlZCBhcyBhbiBlcnJvciB3aGVuIHZhbGlkYXRpbmcKClNhdCBBcHIgMjEgMTI6MjU6NDkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBmaXhlZCB0byB2YWxpZGF0ZSB3aXRoaW4gZW50aXRpZXMKCSogdGVzdC9WQ00vdjIyLnhtbDogYWRkZWQgYSBzcGVjaWZpYyB0ZXN0Y2FzZQoKRnJpIEFwciAyMCAxNzo0NTo0NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IGZvcmdvdCBhbiBlcHNpbG9uIHRyYW5zaXRpb24gaW4gZm9yICgpKwoJKiB0ZXN0L1ZDTS92MjEueG1sIDogYWRkZWQgYSBzcGVjaWZpYyB0ZXN0IGNhc2UKCkZyaSBBcHIgMjAgMTU6NDY6MDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiByZW1vdmVkIGEgc3RhdGUgZXhwbG9zaW9uIGV4aGliaXRlZCBieSBSU1MKCSogdGVzdC92YWxpZC9yc3MueG1sIHJlc3VsdC92YWxpZC9yc3MueG1sKjogYWRkZWQgdGhlIHRlc3RjYXNlCgkgIGZyb20gYnVnICM1MTg3MgoKRnJpIEFwciAyMCAxNDo1Mjo0NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLltjaF0gdHJlZS5oOiB3b3JrZWQgKmhhcmQqIHRvIGdldCBub24tZGV0ZXJtaW5pc3QgY29udGVudAoJICB2YWxpZGF0aW9uIHdpdGhvdXQgdXNpbmcgYW4gdWdseSBORkEgLT4gREZBIGFsZ28gaW4gdGhlIHNvdXJjZS4KCSAgTWFkZSBhIHNwZWNpZmljIGFsZ29yaXRobSBlYXNpZXIgdG8gbWFpbnRhaW4sIHVzaW5nIGEgc2luZ2xlCgkgIHN0YWNrIGFuZCB3aXRob3V0IHJlY3Vyc2lvbi4KCSogTWFrZWZpbGUuYW0gdGVzdC9WQ00vKi54bWw6IGFkZGVkIG1vcmUgdGVzdHMgdG8gIm1ha2UgVmFsaWR0ZXN0cyIKCSogaGFzaC5jOiBtYWRlIHRoZSBncm93aW5nIHJvdXRpbmUgc3RhdGljCgkqIHRyZWUuaCBwYXJzZXIuYzogYWRkZWQgdGhlIHBhcmVudCBpbmZvcm1hdGlvbiB0byBhbgoJICB4bWxFbGVtZW50Q29udGVudCBub2RlLgoKV2VkIEFwciAxOCAyMzozMzoxMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFNBWC5jIHBhcnNlci5jIHhwYXRoLmM6IGdlbmVyYXRpbmcgSURzIHdoZW4gbm90IHZhbGlkYXRpbmcKCSAgZnJvbSBhbiBleHRlcm5hbCBwYXJzZWQgZW50aXR5IHdhcyBwb2lzb25pbmcgdGhlIElEIGhhcyB0YWJsZQoJICB3aXRoIHJlbW92ZWQgdmFsdWVzLiBUaGlzIHdhcyBraWxsaW5nIFhTTFQgb24gdGhlIEtERSBoZWxwCgkgIGJyb3dzZXIuCgpXZWQgQXByIDE4IDE3OjA5OjE1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZW50aXRpZXMuaDogYW5kcmV3QHVnaC5uZXQuYXUgZGV0ZWN0ZWQgYSBkb3VibGUgZGVjbGFyYXRpb24KCldlZCBBcHIgMTggMTU6MDY6MzAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkZWJ1Z1hNTC5jIGhhc2guYyB0cmVlLmggdmFsaWQuYyA6IHNvbWUgY2hhbmdlcyByZWxhdGVkIHRvCgkgIHRoZSB2YWxpZGF0aW9uIHN1cG9ydCB0byBpbXByb3ZlIHNwZWVkIHdpdGggRG9jQm9vawoJKiByZXN1bHQvVkMvT25lSUQyIHJlc3VsdC9WQy9PbmVJRDMgOiB0aGlzIHNsaWdodGx5IGNoYW5nZXMKCSAgdGhlIHdheSB2YWxpZGF0aW9uIGVycm9ycyBnZXQgcmVwb3J0ZWQKCldlZCBBcHIgMTggMTE6NDI6NDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmMgSFRNTHRyZWUuYzogYXBwbGllZCBwYXJ0IG9mIHRoZSBwYXRjaGVzIHByb3ZpZGVkCgkgIGJ5IFAgQyBDaG93IGFuZCBXaWxsaWFtIE0uIEJyYWNrIGZvciBYU0xUIEhUTUwgb3V0cHV0CgpNb24gQXByIDE2IDE5OjQ0OjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sdmVyc2lvbi5oLmluIHdpbjMyY29uZmlnLmggd2luMzIvbGlieG1sMi8qOiBhcHBsaWVkIAoJICBJZ29yIFpsYXRrb3ZpYyBwYXRjaGVzIGZvciBNU0MgY29tcGlsYXRpb24gYW5kIGFkZGVkIGhpcwoJICB1cGRhdGVzCgpUdWUgQXByIDE3IDEwOjA4OjE5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgeG1sWFBhdGhOb2RlQ29sbGVjdEFuZFRlc3QoKSB0byBkbyBwcm9wZXIKCSAgcHJlZml4IGxvb2t1cC4KCSogcGFyc2VySW50ZXJuYWxzLmM6IGZpeGVkIHRoZSBidWcgcmVwb3J0ZWQgYnkgTW9ydXMgV2FsdGVyCgkgIGR1ZSB0byBhbiBvZmYgYnkgb25lIHR5cG8gaW4geG1sU3RyaW5nQ3VycmVudENoYXIoKQoJClRodSBBcHIgMTIgMTc6NDE6MDkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmMgcmVzdWx0L0hUTUwvKjogcmV2YW1wZWQgdGhlIHdheSB0aGUgSFRNTAoJICBwYXJzZXIgaGFuZGxlcyBlbmQgb2YgdGFncyBvciBlbmQgb2YgaW5wdXQKClRodSBBcHIgMTIgMTA6NTA6MzQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLltjaF0gOiBhZGRlZCB4bWxEb2NDb3B5Tm9kZSBmb3IgZ2RvbWUyIHN1cHBvcnQKCldlZCBBcHIgMTEgMTY6Mzc6NTAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmg6IGluY2x1ZGUgeG1sbWVtb3J5LmggdGhpcyBzZWVtcyB0byBoYXZvaWQgYSBuYXN0eSBnbGliYwoJICBidWcgd2hlcmUgdGhlIGxpbmt0aW1lIHZlcmlvbnMgb2YgZnJlZSgpIHdvbid0IHdvcmsgLi4uCgpXZWQgQXByIDExIDE0OjIxOjMxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlnLmguaW4gY29uZmlndXJlLmluIHhtbHZlcnNpb24uaC5pbjogYWRkZWQgYW5zaWRlY2wuaCB0ZXN0CgpXZWQgQXByIDExIDEzOjUwOjQyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL3htbC5odG1sOiBhZGRlZCAyLjMuNiByZWxlYXNlCgpXZWQgQXByIDExIDEzOjI2OjM0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBmaXhlZCB4bWxTdHJpbmdHZXROb2RlTGlzdCgpIHRvIGhhbmRsZSBjaGFycmVmcwoJKiByZXN1bHQvd21sLnhtbDogcmVzdWx0ZWQgaW4gYSBzbWFsbCBvdXRwdXQgY2hhbmdlCgpXZWQgQXByIDExIDA5OjQ3OjU1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiB4bWxOZXdEb2Mgd2FzIG1pc3NpbmcgdGhlIGNoYXJzZXQgaW5pdGlhbGl6YXRpb24KCSogeG1sbGludC5jOiBhZGRlZCAtLWF1dG8gdG8gYXV0b2dlbmVyYXRlIGEgZG9jLCBhbGxvdyB0bwoJICByZXByb2R1Y2UgdGhlIHByb2JsZW0gZml4ZWQgb24geG1sTmV3RG9jCgpUdWUgQXByIDEwIDE4OjEzOjEwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogdHJ5aW5nIHRvIGdldCA1Mjk3OSBzb2x2ZWQKCSogdHJlZS5jIHJlc3VsdC8gcmVzdWx0L25vZW50LzogdHJ5aW5nIHRvIGdldCA1MjcxMiBzb2x2ZWQsIHRoaXMKCSAgYWxzbyBtYWRlIG1lIGNsZWFuIHVwIHRoZSBmYWN0IHRoYXQgWE1MIG91dHB1dCBpbiBnZW5lcmFsIHNob3VsZAoJICBub3QgYWRkIGZvcm1hdGluZyBibGFua3MgYnkgZGVmYXVsdCwgdGhpcyBjaGFuZ2VkIHRoZSBvdXRwdXQgb2YKCSAgYSBmZXcgdGVzdHMKClR1ZSBBcHIgMTAgMTY6MzA6MjAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBCaWxsIEJyYWNrIHBvaW50ZXIgYW4gZXJyb3IgaW4gZGV0ZWN0aW5nIGEgbnVsbCBub2Rlc2V0CgpTdW4gQXByICA4IDE1OjA3OjE2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBmaW5hbGx5IHJlbGVhc2VkIDIuMy42CgpTdW4gQXByICA4IDExOjM5OjIxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogY2hlY2tpbmcgZm9yIG51bGwgcG9pbnRlciBnZW5lcmF0ZWQgYnkgbmV3IGNvZGUKCkZyaSBBcHIgIDYgMTI6NTM6MDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCBhIFtdIGV2YWx1YXRpb24gcHJvYmxlbSByZXBvcnRlZAoJKiB0ZXN0L1hQYXRoL3Rlc3RzL3NpbXBsZWFkZHI6IGV4dGVuZGVkIHRlc3QKCSogcmVzdWx0L1hQYXRoL3NpbXBsZWFkZHI6IHVwZGF0ZWQgcmVzdWx0CgpXZWQgQXByICA0IDAyOjA3OjUzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sbGludC5jOiBEYW4gVGltaXMgcmVwb3J0ZWQgYSBwb3J0YWJpbGl0eSBwcm9ibGVtCgkgIG9uIE1hY3Mgd2l0aG91dCBtbWFwLCBmaXhlZCBpdC4KClR1ZSBBcHIgIDMgMjA6MjA6NTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0ZXN0WFBhdGguYyA6IGFkZGVkIGEgLS10cmVlIG9wdGlvbiBhbGxvd2luZyB0byBkaXNwbGF5IHRoZQoJICB0cmVlIGR1bXAgb2YgdGhlIFhQYXRoIGV4cHJlc3Npb24KCk1vbiBBcHIgIDIgMTc6MTM6NTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCBhIG1lbWxlYWsgd2hlbiBjb21wYXJpbmcgbm9kZXNldHMKCSogSFRNTHRyZWUuYzogZG9uJ3QgaW52ZW50IHRoZSBIVE1MIGRvY3R5cGUgaWYgbm90IGF2YWlsYWJsZSAoWFNMVCkKCSogdHJlZS5jOiBhZGRlZCBhIFRPRE8KClR1ZSBNYXIgMjcgMTQ6MzI6MDYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW4gTWFrZWZpbGUuYW0gY29uZmlnLmguaW4geG1sdmVyc2lvbi5oLmluOiBkZXRlY3QgaWYKCSAgd2UgbmVlZCBzdHJpbmcgZnVuY3Rpb25zCgkqIHRyaW8uW2NoXSBzdHJpby5bY2hdOiBlbWJlZGRlZCB0aGUgVHJpby0wLjIzIHN0cmluZyBmdW5jdGlvbnMKCSAgdG8gYmUgYWJsZSB0byB1c2UgdGhlbSB3aGVyZSBuZWVkZWQuIEFwcGxpZWQgc29tZSBjaGFuZ2VzCgkgIHRvIHJlZHVjZSBuYW1lIGxpbmtpbmcgcG9sbHV0aW9uIGFuZCBjb21waWxlIGluIG9ubHkgd2hhdCdzCgkgIG5lZWRlZC4KCSogSFRNTHRyZWUuYyBkZWJ1Z1hNTC5jIGVudGl0aWVzLmMgZXJyb3IuYyBuYW5vZnRwLmMgdmFsaWQuYwoJICB4bGluay5jIHhtbHZlcnNpb24uaC5pbiB4cGF0aC5jOiBnb3QgcmlkIG9mIHRoZSAjaWZkZWYgCgkgIGZvciB0aGUgc3RyaW5nIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMKCSogeG1sbWVtb3J5LltjaF06IHJlbW92ZWQgREVCVUdfTUVNT1JZX0ZSRUVEIGFuZCBhZGRlZCBpdCBhdXRvbWF0aWNhbGx5CgkgIHRvIHRoZSBmcmVlKCkgZnVuY3Rpb24gb2YgeG1sbWVtb3J5LmMKCSogZW50aXRpZXMuYyBIVE1MdHJlZS5jIHBhcnNlckludGVybmFscy5jIHRyZWUuYyB1cmkuYyB2YWxpZC5jCgkgIHhpbmNsdWRlLmMgeG1sSU8uYyB4cGF0aC5jIHhwb2ludGVyLmM6IHJlbW92ZWQgdGhlIE1FTV9DTEVBTlVQCgkgIHVzYWdlLgoKClR1ZSBNYXIgMjcgMDI6MzA6MjMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBlcnJvci5jOiBhcHBsaWVkIHRoZSBjb250ZXh0IG91dHB1dCBwYXRjaCBvZiB0aGUgZXJyb3IKCSAgaGFuZGxpbmcgc3VibWl0dGVkIGJ5IENodWNrIEdyaWZmaXRoCgkqIGVycm9yL1ZDLyo6IHRoaXMgc2xpZ2h0bHkgY2hhbmdlIHNvbWUgZXJyb3IgbG9ncwoKVHVlIE1hciAyNyAwMDo1MToyNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBmaXhlZCBsaW5lIG51bWJlciByZXBvcnRpbmcgb24gZXJyb3IKCk1vbiBNYXIgMjYgMjM6MjE6NDEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogU3VsbGl2YW4gYW5kIERhcmluIGZvdW5kIGEgcGFyc2VyIGJ1ZywKCSAgYXBwbGllZCB0aGUgcGF0Y2guCgpNb24gTWFyIDI2IDE4OjI0OjUyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jIEhUTUx0cmVlLmMgU0FYLmMgZGVidWdYTUwuYyBlcnJvci5jIHBhcnNlckludGVybmFscy5jCgkgIHRlc3RIVE1MLmMgdGVzdFNBWC5jIHRyZWUuYyB2YWxpZC5jIHhtbElPLmMgeG1sbWVtb3J5LmMKCSAgeG1sdmVyc2lvbi5oLmluIHhwb2ludGVyLmM6IG9mIGNvdXJzZSB0aGUgd2F5IEkgZGVmaW5lZAoJICBVTlVTRUQgYnJlYWtzIG9uIG9sZCBnY2MgdmVyc2lvbi4gVHJ5IHRvIGJlIHNtYXJ0IGFuZAoJICBhbHNvIGRlZmluZSBpdCBkaXJlY3RseSBpbiB4bWx2ZXJzaW9uLmgKCSogY29uZmlndXJlLmluOiByZW1vdmVkIC1hbnNpIGZsYWcgZnJvbSB0aGUgcGVkYW50aWMgc2V0CgpTYXQgTWFyIDI0IDE3OjQ1OjM2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CiAgICAgICAgSHVnZSBjbGVhbnVwLCBJIHN3aXRjaGVkIHRvIGNvbXBpbGUgd2l0aAoJLVdhbGwgLWcgLU8gLWFuc2kgLXBlZGFudGljIC1XIC1XdW51c2VkIC1XaW1wbGljaXQKCS1XcmV0dXJuLXR5cGUgLVdzd2l0Y2ggLVdjb21tZW50IC1XdHJpZ3JhcGhzIC1XZm9ybWF0CgktV2NoYXItc3Vic2NyaXB0cyAtV3VuaW5pdGlhbGl6ZWQgLVdwYXJlbnRoZXNlcyAtV3NoYWRvdwoJLVdwb2ludGVyLWFyaXRoIC1XY2FzdC1hbGlnbiAtV3dyaXRlLXN0cmluZ3MgLVdhZ2dyZWdhdGUtcmV0dXJuCgktV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbmVzdGVkLWV4dGVybnMgLVdpbmxpbmUKCSogSFRNTHBhcnNlci5bY2hdIEhUTUx0cmVlLmMgU0FYLmMgZGVidWdYTUwuYyBlbmNvZGluZy5bY2hdCgkgIGVuY29kaW5nLmggZW50aXRpZXMuYyBlcnJvci5jIGxpc3QuW2NoXSBuYW5vZnRwLmMKCSAgbmFub2h0dHAuYyBwYXJzZXIuW2NoXSBwYXJzZXJJbnRlcm5hbHMuW2NoXSB0ZXN0SFRNTC5jCgkgIHRlc3RTQVguYyB0ZXN0VVJJLmMgdGVzdFhQYXRoLmMgdHJlZS5bY2hdIHVyaS5jCgkgIHZhbGlkLltjaF0geGluY2x1ZGUuYyB4bWxJTy5bY2hdIHhtbGxpbnQuYyB4bWxtZW1vcnkuYwoJICB4cGF0aC5jIHhwYXRoSW50ZXJuYWxzLmggeHBvaW50ZXIuW2NoXSBleGFtcGxlL2dqb2JyZWFkLmM6CgkgIENsZWFudXAsIHN0YXRpY2ZpZWQgYSBudW1iZXIgb2Ygbm9uLWV4cG9ydGVkIGZ1bmN0aW9ucywKCSAgZGV0ZWN0ZWQgYW5kIGNsZWFuZWQgdXAgYSBkb3plbiBvZiBwcm9ibGVtIGZvdW5kIHRoaXMgd2F5LAoJICBhdm9pZGVkIGEgbG90IG9mIHB1YmxpYyBmdW5jdGlvbiBuYW1lL3R5cGVkZWYvc3lzdGVtIG5hbWVzIGNsYXNoZXMKCSogZG9jL3htbC5odG1sOiB1cGRhdGVkCgkqIGNvbmZpZ3VyZS5pbjogc3dpdGNoZWQgcHJpdmF0ZSBmbGFncyB0byB0aGUgcmVhbGx5IHBlZGFudGljIG9uZXMuCgpUaHUgTWFyIDIyIDIyOjQ0OjE1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IDIuMy41CgkqIGRvYy9odG1sLyo6IHJlYnVpbHQgdGhlIGRvY3MKClRodSBNYXIgMjIgMTU6MzY6NDUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBmaXhlZCBhIHJlcG9ydGVkIGJ1ZyBpbiBOT1RBVElPTiBwYXJzaW5nCgkqIHVyaS5jOiBhY2NlcHRlZCBidXQgbm90IGZpeGVkIGJ1ZyA1MTg3NiwgYWRkZWQgVE9ETyAKCSogTWFrZWZpbGUuYW06IGZpeGVkIGJ1ZyA1MTg3NgoKVGh1IE1hciAyMiAxMzo0MToyMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlnLmguaW4gY29uZmlndXJlLmluIGVycm9yLmM6IGZpeCBhIGNvbXBpbGF0aW9uIHByb2JsZW0KCSAgb24gcGxhdGZvcm1zIHdpdGhvdXQgdnNucHJpbnRmICh4bWxAdGhld3JpdHRlbndvcmQuY29tKQoKV2VkIE1hciAyMSAxOTowNDozNCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGZpeGVkIGEgZnVuY3Rpb24gbmFtZSBoZWFkZXIgdHlwbwoJKiBTQVguYzogbm90YXRpb25zIGNhbiBhbHNvIG9jY3VyIGluIGV4dGVybmFsIHN1YnNldC4KClR1ZSBNYXIgMjAgMTQ6MjE6MjggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGVycm9yLmM6IHJlbW92ZWQgYSBDKysgbGlrZSBjb21tZW50CgpUdWUgTWFyIDIwIDEyOjIyOjM2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogZml4aW5nIGJ1ZyA1MjI5OSBzdHJhbmdlIGNvbmRpdGlvbiBsZWFkaW5nCgkgIHRvIGEgcGFyc2VyIGNyYXNoIGR1ZSB0byBhIGJ1ZmZlciBvdmVyZmxvdwoJKiByZXN1bHQvbm9lbnQvYXR0cmliLnhtbCByZXN1bHQvYXR0cmliLnhtbCB0ZXN0L2F0dHJpYi54bWw6CgkgIGFkZGVkIHRoZSBzcGVjaWZpYyB0ZXN0IGNhc2UKCk1vbiBNYXIgMTkgMTY6NTA6NTIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLltjaF06IHN0aWxsIGEgbG90IG9mIGNsZWFudXAgYmFzZWQgb24gWFNMVCwgYWRkZWQKCSAgeG1sWFBhdGhDb252ZXJ0e1N0cmluZyxOdW1iZXIsQm9vbGVhbn0gdG8gYmUgYWJsZSB0byBtYWtlCgkgIHR5cGUgY2FzdHMgd2l0aG91dCBhIGNvbnRleHQgc3RhY2ssIGZpeGVkIHNvbWUgaW1wbGVtZW50YXRpb24KCSAgcHJvYmxlbXMgcmVsYXRlZCB0byB0aGUgYWJzZW5jZSBvZiBjb250ZXh0IGF0IHBhcnNlLXRpbWUsCgkgIGFkZGVkIHhtbFhQYXRoRXZhbFByZWRpY2F0ZSgpIGFuZCB4bWxYUGF0aEZyZWVDb21wRXhwcigpCgkgIGluIHRoZSBwdWJsaWMgQVBJIHRvbwoJKiB4cG9pbnRlci5jIHhwYXRoSW50ZXJuYWxzLmg6IHdlIG5lZWQgdG8ga25vdyBhdCBwYXJzZSB0aW1lCgkgIHdoZXRoZXIgd2UgYXJlIGNvbXBpbGluZyBhbiBYUG9pbnRlcgoKTW9uIE1hciAxOSAxMTo1NDozMSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguW2NoXSB4cG9pbnRlci5jOiByZXN0YXVyZWQgdGhlIEJpbmFyeSBhbmQgQVBJIGNvbXBhdGliaWxpdHkKCSAgY2xlYW5lZCB1cCB0aGUgcGFyc2VyIGludGVybmFscywgcmVmYWN0b3JlZCBYUGF0aCBjb2RlLCBhZGRlZAoJICBuZXcgY29tcGlsYXRpb24gYmFzZWQgQVBJcyBhbmQgY2xlYW5seSBzZXBhcmF0ZWQgcHVibGljIGFuZAoJICBwcml2YXRlIEFQSXMuCgpNb24gTWFyIDE5IDAwOjU5OjI1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5oOiB0aGUgY29tcCBmaWVsZCBtdXN0IGJlIGFkZGVkIGF0IHRoZSBlbmQgdG8gYXZvaWQKCSAga2lsbGluZyBiaW5hcnkgY29tcGF0LgoKTW9uIE1hciAxOSAwMDoxMToxOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW06IGRldGVjdCBYUGF0aCBtZW1sZWFrcyBpbiByZWdyZXNvbiB0ZXN0cwoJKiBlcnJvci5jOiBmaXhlZCBhbmQgZXJyb3Igdy5yLnQuIGVycm9yIHJlcG9ydGluZyBzdGlsbCB1c2luZwoJICBzdGRlcnIKCSogaGFzaC5jOiBhZGRlZCBuZXcgbGluZSBhdCBlbmQgb2YgZmlsZQoJKiB0cmVlLmg6IG1pbm9yIGNsZWFudXAKCSogeHBhdGguW2NoXSB4cG9pbnRlci5bY2hdOiBNYWpvciBjaGFuZ2VzICEgU2VwYXJhdGVkIFhQYXRoCgkgIGV4cHJlc3Npb24gcGFyc2luZyBmcm9tIGV2YWx1YXRpb24sIHJlc3VsdGVkIGluIGEgbnVtYmVyIG9mCgkgIGNoYW5nZXMgaW50ZXJuYWxseSwgYW5kIGluIFhQb2ludGVyLiBMaWtlbHkgdG8gYnJlYWsgc3R1ZmYKCSAgdXNpbmcgeHBhdGhJbnRlcm5hbHMuaCBidXQgc2hvdWxkIHJlbWFpbiBiaW5hcnkgY29tcGF0aWJsZSwKCSAgbmV3IGludGVyZmFjZXMgd2lsbCBiZSBhZGRlZC4KCldlZCBNYXIgMTQgMjA6MzQ6MDIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogZml4ZWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMgcmVwb3J0ZWQgYnkgCgkgIG9raWRkbGVAeWFob28uY28udWsgYW5kIGFsbGFuY0BjaGlja2VuYW5kcG9ybi5jb20gd2hlbiBjb21waWxpbmcKCSAgd2l0aG91dCBnY2Mgb24gbm9uIGxpbnV4IHBsYXRmb3Jtcy4KCldlZCBNYXIgMTQgMjA6MTM6NTQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy9NYWtlZmlsZS5hbSBjb25maWd1cmUuaW46IHllYXJrZUBlbmcuYnVmZmFsby5lZHUgc3VnZ2VzdGVkCgkgIGEgZml4IGZvciAtLXdpdGgtaHRtbC1kaXI9IGNvbmZpZ3VyZSBzdXBwb3J0LiBJIGhvcGUgaXQgd29uJ3QKCSAgYnJlYWsgcnBtIGdlbmVyYXRpb24KCldlZCBNYXIgMTQgMTc6Mjg6NDkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbElPLmM6IG9uZSBmdW5jdGlvbiBjb21tZW50IGNsZWFudXAuCgpXZWQgTWFyIDE0IDE0OjU1OjQ2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBTQVguYzogZXh0ZXJuYWwgc3Vic2V0IG5vdGF0aW9ucyB3ZXJlIGltcHJvcGVybHkgcmVnaXN0ZXJlZAoJICBpbiB0aGUgaW50ZXJuYWwgc3Vic2V0LgoKVHVlIE1hciAxMyAxMDoyODo0OSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogUkVBRE1FLmN2cy1jb21taXRzOiBhZGRlZCwgcG9pbnRpbmcgdG8gSEFDS0lORwoJKiBIQUNLSU5HOiB1cGRhdGVkCgpNb24gTWFyIDEyIDIyOjA5OjQwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogYW5kIE1hdHQgU2VyZ2VhbnQgZm91bmQgb25lIGluIHRoZSBYTUwgcHVzaAoJICBwYXJzZXIgKGVycm9uZW91cyBjaGVjayBJIGZvcmdvdCB0byByZW1vdmUgd2hlbiBJIGZpeGVkIHRoZQoJICBtYWluIHBhcnNlcikuCgpNb24gTWFyIDEyIDE5OjE5OjA0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBwdGl0dG9tIGZvdW5kIGEgc21hbGwgYnVnIGluIFVuYXJ5RXhwcgoKU2F0IE1hciAxMCAxMzowOTo1MyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBidW1wZWQgdG8gMi4zLjQKCSogZXJyb3IuYzogZml4ZWQgYnVnICM1MTg2MAoJKiB0cmVlLmM6IGZpeGVkIGJ1ZyAjNTE4NjEKCSogdmFsaWQuYzogY2xlYW51cCwgbW9yZSBkZWJ1ZywgZmFpbGVkIHRvIGZpeCBvbmUgYnVnIGNyYXAgLi4uCgkqIHRyZWUuW2NoXSA6IGFkZGVkIHhtbERlZmF1bHRCdWZmZXJTaXplCgkqIG5hbm9mdHAuYzogdHlwbyBpbiBmdW5jdGlvbiBuYW1lIGhlYWRlciBibG9jawoJKiBkb2MveG1sLmh0bWwgOiB1cGRhdGVkLCBhZGRlZCBsaW5rIHRvIFhNTDo6TGliWFNMVAoJKiBkb2MvaHRtbC8qIDogcmVidWlsdCB0aGUgZG9jcwoKV2VkIE1hciAgNyAyMDo0Mzo0NyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmMgU0FYLmM6IHRoZSBuZXcgY29udGVudCBwYXJzaW5nIGNvZGUgcmFpc2VkIGFuCgkgIHVnbHkgYnVnIGluIHRoZSBjaGFyYWN0ZXJzKCkgU0FYIGNhbGxiYWNrLiBGb3VuZCBpdAoJICBqdXN0IGJlY2F1c2Ugb2Ygc3RyYW5nZW5lc3MgaW4gWFNMVCBYTUwgUmVjIG91cHR1dCA6LSgKCldlZCBNYXIgIDcgMTY6NTA6MjIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtOiBNYXJ0aW4gQmF1bGlnIHN1Z2dlc3RlZCB0byBhZGQgLWxtCgkqIHRyZWUuYzogZm91bmQgYW5vdGhlciBidWcgaW4geG1sTm9kZUdldENvbnRlbnQoKQoKVHVlIE1hciAgNiAwOToyMTozMCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogQmpvcm4gZm91bmQgdGhlIGVycm9yIHJlbGF0ZWQgdG8gc3RyaWN0bmVzcyBvZiBjb21wYXJpc29uLgoKTW9uIE1hciAgNSAyMTo0NzozMSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IHRyeWluZyB0byBmaXggdGhlIER0ZCBwYXJzaW5nIHByb2JsZW0gcmVwb3J0ZWQKCSAgYnkgR2FyeSwgc2lkZSBlZmZlY3Qgb2YgbGFzdCB3ZWVrIHNwZWVkIG9wdGltaXphdGlvbnMuCgpTYXQgTWFyICAzIDE5OjQ1OjU5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWwyQ29uZi5zaC5pbjogZml4ZXMgcG9pbnRlZCBvdXQgYnkgRnJlZHJpayBIYWxsZW5iZXJnCgkqIHBhcnNlckludGVybmFscy5jOiByZW1vdmVkIHVubmVlZGVkIHRlc3QgcmFpc2VkIGJ5IFN0cmljCgpTYXQgTWFyICAzIDEzOjA0OjM3IENFVCAyMDAxIEJqb3JuIFJlZXNlIDxicmVlc2VAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoKCSogeHBhdGguYzogRml4ZWQgeG1sWFBhdGhOb2RlQ29sbGVjdEFuZFRlc3QgKHByb2JsZW0gcmVwb3J0ZWQKCSAgYW5kIGZpeGVkIGJ5IFdpbGxpYW0gQnJhY2spLiBBZGRlZCB4bWxYUGF0aEZvcm1hdE51bWJlci4KCSAgQ2hhbmdlZCB0aGUgc29ydGluZyBzbGlnaHRseS4KCSogY29uZmlndXJlLmluIE1ha2VmaWxlLmFtIGV4YW1wbGUvTWFrZWZpbGUuYW06IEFkZGVkIC1sbS4KCSAgUGxlYXNlIG5vdGUgdGhhdCBhcHBsaWNhdGlvbnMgbGlua2luZyB3aXRoIGxpYnhtbDIsIG11c3QKCSAgYWxzbyBsaWtlIHdpdGggdGhlIG1hdGggbGlicmFyeSBmcm9tIG5vdyBvbi4KClNhdCBNYXIgIDMgMDc6Mzg6NTggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgbG9vcCByZXBvcnRlZCBieSBNYXJjIFNhbmZhY29uCgpTYXQgTWFyICAzIDAyOjEwOjI0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogb25lIG11c3QgcmVwb3J0IHNwYWNlcyBldmVuIGlmIHRoZSBEdGQgZWxlbWVudAoJICBjb250ZW50IHByb3ZlcyB0aGF0IHRoaXMgaXMgbm90IHBhcnQgb2YgdGhlIGVsZW1lbnQgY29udGVudC4KCSogcmVzdWx0L3ZhbGlkLyoueG1sOiB0aGlzIGNoYW5nZWQgdGhlIG91cHR1IHNsaWdodGx5CgpUaHUgTWFyICAxIDE3OjUzOjM5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGJ1bXBlZCB0byAyLjMuMwoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZWQKCldlZCBGZWIgMjggMDA6NDM6NTggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogbWlub3IgZG9jIGZpeAoJKiB4cGF0aC5jOiBkZWFsbG9jYXRpb24gaXNzdWVzIHdoZW4gYSByZXN1bHQgdHJlZSBoYXMgYmVlbgoJICBjb252ZXJ0ZWQgdG8gYSBub2RlLXNldAoKTW9uIEZlYiAyNiAyMjowOTo0NSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL3htbC5odG1sOiBvb3BzIGNvcnJlY3RlZCBkYXRlcyBzLzIwMDAvMjAwMQoKTW9uIEZlYiAyNiAxMjo0ODozNSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogbmV3IHBhdGNoIGZyb20gR2FyeSBQZW5uaW5ndG9uCgpNb24gRmViIDI2IDA5OjMwOjIzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MveG1sLmh0bWw6IGFwcGxpZWQgcGF0Y2ggZnJvbSBBbmtoCgpNb24gRmViIDI2IDAzOjM0OjQzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4aW5jbHVkZS5jOiBmaXhlZCBhIHByb2JsZW0gYnVpbGRpbmcgb24gTWFjCgpTdW4gRmViIDI1IDIxOjUyOjMwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogbW9yZSB3b3JrIG9uIGluY3JlYXNpbmcgcGFyc2luZyBmZXJmb3JtYW5jZXMKClN1biBGZWIgMjUgMTg6MDM6NDIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbG1lbW9yeS5oIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5jIGVudGl0aWVzLmMgcGFyc2VyLmMKCSAgeHBhdGguYyB4cG9pbnRlci5jIHRyZWUuYyB1cmkuYyB2YWxpZC5jIHhpbmNsdWRlLmMgeG1sSU8uYzoKCSAgYXZvaWRpbmcgbWVtY3B5IGluIHByb2R1Y3Rpb24gYnVpbGRzIE1FTV9DTEVBTlVQIG1hY3JvIHVzZQoJKiBwYXJzZXIuW2NoXSBwYXJzZXJJbnRlcm5hbHMuYzogb3B0aW1pemF0aW9ucyBvZiB0aGUgdGlnaHRlc3QKCSAgaW50ZXJuYWwgbG9vcHMgaW5zaWRlIHRoZSBwYXJzZXIuIEJldHRlciBjaGVja2luZyBvZiBJL08KCSAgZmx1c2hpbmcvbG9hZGluZyBjb25kaXRpb25zCgkqIHhtbGxpbnQuYyA6IGFkZGVkIC0tdGltaW5nCgpTdW4gRmViIDI1IDA1OjQ4OjUxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGJ1bXBlZCB0byAyLjMuMgoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZWQgZm9yIHJlbGVhc2UKClNhdCBGZWIgMjQgMTQ6MDc6NTIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZvdW5kIGEgbWVtbGVhayBhbmQgZml4ZWQgYSBuYXN0eSBidWcKClNhdCBGZWIgMjQgMDM6MzU6NDggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbGxpbnQuW2MxXSA6IGFkZGVkIHJldHVybiBjb2RlIGVycm9ycyBmb3IgeG1sbGludAoJKiB4cGF0aC5jOiBzcGVjaWZpYyBkZWJ1ZyBkdW1wIGZ1bmN0aW9uIGZvciByZXN1bHQgdmFsdWUgdHJlZXMKClRodSBGZWIgMjIgMDc6NTI6MjcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpbmFsbHkgaW1wbGVtZW50ZWQgeG1sWFBhdGhDb21wYXJlTm9kZVNldHMKCSogdGVzdC9YUGF0aC9leHByL2Zsb2F0cyByZXN1bHRzL1hQYXRoL2V4cHIvZmxvYXRzOiBhZGRlZCAKCSAgYSB0ZXN0IGZvciBmbG9hdCBleHByZXNzaW9ucwoKVHVlIEZlYiAyMCAxODo1Nzo1NCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBmaXhlZCB4bWxOb2RlR2V0Q29udGVudCwgaXQgd2FzIG5vdCByZWN1cnNpbmcgb24gY2hpbGQKCSogcGFyc2VySW50ZXJuYWxzLltjaF06IHRyeWluZyB0byBzcGVlZCB1cCBwYXJzaW5nCgkqIHhwYXRoLmMgOiBzcGVlZGVkIHVwIG5vZGUgc2V0IGVxdWFsaXR5IG9wCgpNb24gRmViIDE5IDE5OjAxOjU3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbSB2YWxpZC5jIGxpc3QuW2NoXTogR2FyeSBQZW5uaW5ndG9uIHByb3ZpZGVkIGEKCSAgYmV0dGVyIGhhbmRsaW5nIG9mIElEL0lEUkVGIGFuZCB0aGUgbGlzdCBtb2R1bGVzIGFzc29jaWF0ZWQKCSogY29uZmlndXJlLmluOiBzbWFsbCBDRkxBR1MgY2xlYW51cAoKTW9uIEZlYiAxOSAxNjoxMzoyMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBmaXhlZCBpY29udiBkZXRlY3Rpb24gb24gQUlYIChzdHJpYykKCk1vbiBGZWIgMTkgMTA6NTk6NDEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkICIqIiAodW5iZWxpZXZhYmxlICEpIGFuZCBhIGNvdXBsZSBvZiB3YXJuaW5ncwoKU3VuIEZlYiAxOCAxNzo1MjozNyBNRVQgMjAwMSBCam9ybiBSZWVzZSA8YnJlZXNlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCgkqIHhwYXRoLmM6IGZpeGVkIHdoaXRlc3BhY2UgaGFuZGxpbmcgaW4geG1sWFBhdGhTdHJpbmdFdmFsTnVtYmVyLAoJICBhbmQgb3B0aW1pemVkIHhtbFhQYXRoTm9kZVNldFNvcnQKClNhdCBGZWIgMTcgMTQ6MTg6NDIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGJ1ZyBmaXggd2hlbiBjb250ZXh0IHNpemUgaXMgMAoJKiBwYXJzZXIuYzogSSBsaWtlIE5vcm0ncyBEdGQgYmVjYXVzZSB0aGV5IHN0aWxsIG1hbmFnZSB0byBicmVhawoJICB0aGUgcGFyc2VyIG9jY2FzaW9uYWxseQoKRnJpIEZlYiAxNiAxNDoyMDozNSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogeG1sWFBhdGhFcXVhbE5vZGVTZXRGbG9hdCB0aGUgYXJnIGlzIHJlYWxseSBhIGRvdWJsZSBub3cKCkZyaSBGZWIgMTYgMDE6MTA6MDYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuW2NoXSBwYXJzZXIuYyB4cGF0aC5jOiBmaXhlZCB0aGUgcHJvYmxlbSBvZiBhZGRyZXNzaW5nCgkgIGF0dHJpYnV0ZXMgd2l0aGluIHRoZSBYTUwtMS4wIG5hbWVzcGFjZQoKVGh1IEZlYiAxNSAxNjo1MzoyMCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGhJbnRlcm5hbHMuaDogZXhwb3J0ZWQgYSBmZXcgYXhpcyBmdW5jdGlvbnMKCSogZG9jL3htbC5odG1sOiB1cGRhdGVkIHRoZSBkb2MKClRodSBGZWIgMTUgMTU6NTc6MTQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogYXBwbGllZCBwYXRjaCBmcm9tIERhbmllbCB2YW4gQmFsZW4gZm9yIE9wZW5CU0QKCSAgYW5kIGJ1bXBlZCB2ZXJzaW9uIHRvIDIuMy4xCgkqIEhUTUx0cmVlLmMgcmVzdWx0L0hUTUwvZG9jMy5odG0gcmVzdWx0L0hUTUwvd2lyZWQuaHRtbDogdGhlCgkgIGF0dGVtcHQgdG8gZmluZCBhdXRvY2xvc2luZyB3YXMgc2ltcGx5IGJyb2tlbiwgcmVtb3ZlZCBpdCwKCSAgdXBkYXRlZCB0aGUgZXhhbXBsZXMsIHRoaXMgaXMgYmV0dGVyCgpXZWQgRmViIDE0IDExOjM1OjM5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBoYXNoLltjaF06IGFkZGVkIFBhb2xvIENhc2FyaW5pIHBhdGNoIHRvIHByb3ZpZGUgRGVsZXRlIGZyb20KCSAgaGFzaCBmdW5jdGlvbm5hbGl0aWVzLgoJKiBkb2MvaHRtbC8qIDogcmVidWlsZCB0aGUgZG9jCgpUdWUgRmViIDEzIDE4OjAxOjQ4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jIHJlc3VsdC9YUGF0aC90ZXN0cy9jaGFwdGVyc3ByZWZvbDogYnVnZml4ZXMgb24gb3JkZXIgYW5kCgkgIG9uIHByZWRpY2F0ZQoJKiBIVE1McGFyc2VyLltjaF0gSFRNTHRyZWUuYyByZXN1bHQvSFRNTC9kb2MzLmh0bS5lcnIKCSAgcmVzdWx0L0hUTUwvZG9jMy5odG0uc2F4IHJlc3VsdC9IVE1ML3dpcmVkLmh0bWw6IHNvbWV0aW1lcyBvbmUKCSAgcmVhbGx5IHdhbnQgdG8gaGF2ZSB0YWdzIGNsb3NlZCBvbiBvdXRwdXQgZXZlbiBpZiB3ZSBhY2NlcHQKCSAgdW5jbG9zZWQgb25lcyBvbiBpbnB1dAoKTW9uIEZlYiAxMiAxODozMzoyMCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogb3VjaCBkb24ndCBmcmVlIE5VTEwsIHJhcmUgY2FzZSBmaXhlZAoJKiB0cmVlLmM6IGRvbid0IGNvYWxlc2NlIHRleHQgbm9kZXMgaWYgdGhleSBkb24ndCBoYXZlIHRoZQoJICBzYW1lIGJlaGF2aW91ciB3cnQgZXNjYXBpbmcgb24gb3V0cHV0CgpTdW4gRmViIDExIDIxOjE1OjQxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBzbWFsbCBmaXh1cAoJKiBTQVguYzogZG9uJ3Qgd2FybiBvbiBlbXB0eSBuYW1lc3BhY2VzLgoKVGh1IEZlYiAgOCAxMToyODo1OCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogUkVBRE1FOiBhIGJpdCBvZiBjbGVhbnVwCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIGZvciAyLjMuMCByZWxlYXNlCgpUaHUgRmViICA4IDEwOjM3OjAwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBoYXNoLltjaF06IGFkZGVkIGEgZmlyc3QgdmVyc2lvbiBvZiB4bWxIYXNoU2l6ZSgpCgkqIHZhbGlkLmM6IGFub3RoZXIgYnVnIGZpeCBmcm9tIEdhcnkgUGVubmluZ3RvbgoKV2VkIEZlYiAgNyAxOToyMjozNyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogY291cGxlIG9mIGJ1ZyBmaXhlcyBwb2ludGVkIGJ5IEdhcnkgUGVubmluZ3RvbgoJKiBIVE1MdHJlZS5jOiAjaWYgMCBjbGVhbnVwCgpUdWUgRmViICA2IDE0OjAyOjU2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBzdGFydGVkIHByb2ZpbGluZyBYU0xULCBhZGRlZCB4bWxYUGF0aE5vZGVTZXRBZGRVbmlxdWUoKQoJICB3aGljaCByZW1vdmVzIGEgdGltZSBjb25zdW1pbmcgY2hlY2sgb2YgeG1sWFBhdGhOb2RlU2V0QWRkKCkKCSAgYW5kIHVzZSBpdCBpbiBwbGFjZXMgd2hlcmUgd2UgYXJlIHN1cmUgdG8gbm90IGJyZWFrIHVuaWNpdHkKCk1vbiBGZWIgIDUgMTg6NTE6MzYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGJ1ZyBmaXhlcyBmb3VuZCBmcm9tIFhTTFQKCSogdHJlZS5jOiBwcmVzZXJ2ZSBub2RlLT5uYW1lIHNwZWNpYWwgdmFsdWVzIHdoZW4gY29weWluZyBub2Rlcy4KCSogcGFyc2VySW50ZXJuYWxzLltjaF0gcGFyc2VyLltjaF0gU0FYLmMgOiBhZGRlZCBhIG1vZGUgd2hlcmUKCSAgZXh0ZXJuYWwgc3Vic2V0IGFyZSBmZXRjaGVkIHdoZW4gYXZhaWxhYmxlIGJ1dCB3aXRob3V0IGZ1bGwKCSAgdmFsaWRhdGlvbi4gQWRkZWQgeG1sTG9hZEV4dER0ZERlZmF1bHRWYWx1ZSwgbmVlZCBhIGZ1bmN0aW9uLgoJKiBIVE1MdHJlZS5jOiBhZGQgc3VwcG9ydCBmb3IgeG1sU3RyaW5nVGV4dE5vZW5jIGZvciBYU0x0IEhUTUwKCSAgb3V0cHV0IHdpdGggZW5jb2RpbmcgZGlzYWJsZWQuCgpTYXQgRmViICAzIDA5OjUwOjI5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxpTy5jOiBIYXJyeSBCbHVuZGVsbCBwb2ludGVkIG91dCB0aGF0IHhtbENoZWNrRmlsZW5hbWUKCSAgeG1sQ2hlY2tGaWxlbmFtZSBzaG91bGQgbm90IGJlIGNhbGxlZCBmcm9tIHhtbEZpbGVPcGVuVwoJICBhbmQgeG1sR3pmaWxlT3BlblcKCkZyaSBGZWIgIDIgMTg6MDQ6MzUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHVyaS5jOiByZXdyaXRlIG9mIHhtbE5vcm1hbGl6ZVVSSVBhdGggZnJvbSBQYXVsIEQuIFNtaXRoCgkqIHRlc3QvVVJJL3NtaXRoLnVyaSByZXN1bHQvVVJJL3NtaXRoLnVyaSBNYWtlZmlsZS5hbToKCSAgYWRkZWQgdGhlIG5ldyB0ZXN0cyBmb3IgVVJJIG5vcm1hbGl6YXRpb24KCSogdGVzdFVSSS5jOiBmaXhlZCBzdG9vcGlkIGJ1Z3MKCSogcmVzdWx0L1ZDL09uZUlEMyByZXN1bHQvVkMvVW5pcXVlRWxlbWVudFR5cGVEZWNsYXJhdGlvbjoKCSAgdGhlIFVSSSBpbiB0aGUgZXJyb3IgbWVzc2FnZXMgYXJlIG5vdyBwcm9wZXJseSBub3JtYWxpemVkCgpGcmkgRmViICAyIDA5OjE4OjUzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB1cmkuYzogYXBwbGllZCBNYXJjIFNhbmZhY29uJ3MgcGF0Y2ggZm9yIHhtbE5vcm1hbGl6ZVVSSVBhdGgKClRodSBGZWIgIDEgMDU6Mjg6NTUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgbnVtYmVyIG9mIHByb2JsZW1zIGluIFhQQVRIX1hTTFRfVFJFRSBwcm9jZXNzaW5nCgpXZWQgSmFuIDMxIDIxOjQ1OjM3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCBtb2Qgb3BlcmF0b3IKCldlZCBKYW4gMzEgMTY6NTA6NDIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBmaXhlZCB4bWxTdHJjYXQgZG9jCgkqIHRyZWUuYzogMiBmaXhlcyBmb3JtIEFuZGVycyBDYXJsc29uIGZvciBjb3B5aW5nIG5vZGVzIGFuZAoJICB0cmVlcy4KCldlZCBKYW4gMzEgMTQ6MTk6MTYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmMgcmVzdWx0L1hQYXRoL3Rlc3RzL2NoYXB0ZXJzYmFzZQoJICByZXN1bHQvWFBhdGgvdGVzdHMvc2ltcGxlYmFzZTogZml4ZWQgWFBhdGggbm9kZSgpIAoJKiB0cmVlLmM6IHNtYWxsIGZpeCBpbiB4bWxOZXdOcygpCgkqIE1ha2VmaWxlLmFtOiByZW1vdmVkIGV4dHJhbmVvdXMgeG1sMkNvbmYuc2ggcnVsZQoKU3VuIEphbiAyOCAwODozNzowMyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluIGxpYnhtbC5zcGVjLmluIGV4YW1wbGUvTWFrZWZpbGUuYW06CgkgIENoYW5nZWQgdGhlIGxpYnJhcnkgbmFtZSwgaW4gb3JkZXIgdG8gZ2V0IGxpYnhtbC1kZXZlbCBhbmQKCSAgbGlieG1sMi1kZXZlbCB0byBjb2V4aXN0IG9uIGEgc2luZ2xlIHN5c3RlbQoJKiB4bWwtY29uZmlnLjEgeG1sLWNvbmZpZy5pbiB4bWxDb25mLnNoLmluOiByZW5hbWVkCgkqIHhtbDItY29uZmlnLjEgeG1sMi1jb25maWcuaW4geG1sMkNvbmYuc2guaW46IG5ldyBmaWxlcwoKU2F0IEphbiAyNyAxOTo1ODoyMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluIGxpYnhtbC0yLjAucGMuaW46IHN0YXJ0ZWQgd29ya2luZyBvbiBnZXR0aW5nCgkgIGxpYnhtbDItZGV2ZWwgaW5zdGFsbGFibGUgaW4gLy8gYXMgbGlieG1sLWRldmVsLgoKU2F0IEphbiAyNyAxODo0OTowMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL01ha2VmaWxlLmFtOiBmaXhlZCBtYWtlIHJlYnVpbGQgaW4gZG9jCgkqIGRvYy9odG1sLyouaHRtbDogcmVidWlsdCB0aGUgZG9jcwoKRnJpIEphbiAyNiAxMDozMDo1OCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBwYXRjaCBmcm9tIEJqb3JuIFJlZXNlIG9uIHhtbEJ1ZmZlckNDYXQKClRodSBKYW4gMjUgMTk6MjI6MjUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtIGRvYy9NYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbjogcGFpbmZ1bCB3b3JrIHRvIGdldAoJICB0aGUgSFRNTCBkb2MgdG8gZ28gaW50byB0aGUgLWRldmVsIFJQTSAuLi4KCSogYWNsb2NhbC5tNCBjb25maWcuaC5pbjogc29tZSB1cGRhdGVzIGR1ZSB0byBhdXRvKiBtYWdpYwoKVGh1IEphbiAyNSAxOToxMTo0OSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguaDogYWRkZWQgYSBob29rIGluIHRoZSBjb250ZXh0IHN0cnVjdHVyZSBhbGxvd2luZyB0bwoJICBsaW5rIHRvIGV4dHJhIHN1cHBvcnQsIG5lZWRlZCBmb3IgWFNMVAoKVGh1IEphbiAyNSAxMzozNDoxMSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguW2NoXSB4cG9pbnRlci5jOiBhZGRlZCB4bWxYUGF0aENtcE5vZGVzLCBjaGFuZ2VkCgkgIHhtbFhQdHJDbXBQb2ludHMgdG8gdXNlIGl0LgoJKiBwcm9wYWdhdGVkIHRoZSBmb2xsb3dpbmcgcGF0Y2ggZnJvbSBBbGVqYW5kcm8gRm9yZXJvCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaCB4bWxJTy5jOiBhcHBsaWVkIGZ1cnRoZXIgc3VnZ2VzdGlvbnMKCSAgZnJvbSBJZ29yIFpsYXRrb3ZpYyA8aWdvcnpAZGlhbHVwLm5hY2FtYXIuZGU+IGFuZCBjbGVhbnVwCgkqIGV4YW1wbGUvZ2pvYnJlYWQuYzogZml4ZWQgd2FybmluZ3MsIG5vdyB0aGF0IGl0IGJ1aWxkcwoKV2VkIEphbiAyNCAyMDoyNzoyOCBDT1QgMjAwMSBBbGVqYW5kcm8gRm9yZXJvIDxiYWNodWVAYmFjaHVlLmNvbT4KCiAgICAgICAgKiB4bWxJTy5jICh4bWxGaWxlT3BlbiwgeG1sRmlsZU9wZW5XKTogUmVtb3ZlZCB1bm5lY2VzYXJ5IGNoZWNrcy4KCiAgICAgICAgKiB4bWxJTy5jICh4bWxDaGVja0ZpbGVuYW1lKTogRnVuY3Rpb24gYWRkZWQgdG8ga25vdyB3aGV0aGVyIGEgZ2l2ZW4KICAgICAgICAgIGZpbGVuYW1lIHBvaW50cyB0byBhIHZhbGlkIGZpbGUgKG5vdCBhIGRpcmVjdG9yeSkuCiAgICAgICAgKiB4bWxJTy5jICh4bWxGaWxlT3BlbiwgeG1sRmlsZU9wZW5XLCB4bWxHemZpbGVPcGVuLCB4bWxHemZpbGVPcGVuVyk6CiAgICAgICAgICBBZGRlZCBjYWxscyB0byB4bWxDaGVja0ZpbGVuYW1lRGlyLgoKICAgICAgICAqIHhtbElPLmMgKHhtbEd6ZmlsZU9wZW4sIHhtbEd6ZmlsZU9wZW5XLCB4bWxGZE9wZW4sIHhtbEZkT3BlblcpOiBQYXNzCiAgICAgICAgICBgcGF0aCcgKHJhdGhlciB0aGFuIGBmaWxlbmFtZScpIGFzIHRoZSBwYXJhbWV0ZXIgdG8gZ3pvcGVuIGFuZCBvcGVuLgoKVHVlIEphbiAyMyAxNjoyNjozMCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW06IGZpeGVkIGEgcHJvYmxlbSB3aXRoIEVYVFJBX0RJU1QKCk1vbiBKYW4gMjIgMjM6NDI6MTcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtIGV4YW1wbGUvTWFrZWZpbGUuYW06IGZpbmFsbHkgZm91bmQgdGhlIHRyaWNrCgkgIHRvIGJ1aWxkIHRoZSBleGFtcGxlLCBpLmUuIGFkZCAiLiIgaW4gU1VCRElSUyBiZWZvcmUgZXhhbXBsZQoJICBpbiB0aGUgbGlzdCA8Z3Jpbi8+CgpNb24gSmFuIDIyIDE2OjMwOjM3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZWQgd2l0aCBhbiBYU0xUIHNlY3Rpb24sIHJlbW92ZWQgcG9pbnRlciB0bwoJICBXM0MgQ1ZTIGJhc2UuCgpNb24gSmFuIDIyIDExOjQzOjIxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiB3aGVuIGNvcHlpbmcgYSBYU0xUIHRyZWUgb2JqZWN0IHRlaCB0cmVlIG5lZWQgdG8gYmUgY29waWVkCgkgIHRvbywgYW5kIGRlYWxsb2NhdGlvbiBuZWVkIHRvIG9jY3VyIHRoZSBzYW1lIHdheS4KCk1vbiBKYW4gMjIgMTA6MzU6NDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoSW50ZXJuYWxzLmggeHBhdGguW2NoXSBkZWJ1Z1hNTC5jOiBhZGRlZCB0aGUgWFBBVEhfWFNMVF9UUkVFCgkgIHR5cGUgY29ycmVwb25kaW5nIHRvIGFuIFhTTFQgcmVzdWx0IHRyZWUgZnJhZ21lbnQuIFNoYXJlIG1vc3QKCSAgb2YgdGhlIGRhdGEgZm9ybWF0IHdpdGggbm9kZSBzZXQsIGFzIHdlbGwgYXMgb3BlcmF0b3JzLgoJKiBIVE1MdHJlZS5jOiBhZGRlZCBhIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgZG9jdHlwZSBvdXRwdXQKCSAgd2hlIHRoaXMgb25lIGlzIG5vdCBwcmVzZW50IGluaXRpYWxseS4KCSogdHJlZS5jOiBtYWtlIHN1cmUgdGFodCB0aGUgcGFyZW50IGFuZCBkb2MgcG9pbnRlcnMgYXJlIHByb3Blcmx5CgkgIHNldCB3aGVuIGNvcHlpbmcgYXR0cmlidXRlcyAobGlzdHMpLgoKU3VuIEphbiAyMSAxMDo0NzozOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaHRtbFRyZWUuW2NoXSB4bWxJTy5oOiBleHBvcnRlZCBodG1sRG9jQ29udGVudER1bXBPdXRwdXQKCkZyaSBKYW4gMTkgMTg6MTU6NTAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHNlZW1zIEkgZmluYWxseSBraWxsZWQgdGhhdCB1Z2x5IHBhdGggZXZhbHVhdGlvbgoJICBjb250ZXh0IGJ1ZyAodGFnZ2VkIDk5OTkgaW4gY2FzZSBpcyBpcyB3cm9uZykKCkZyaSBKYW4gMTkgMDY6MzA6MzggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLltjaF0geHBhdGhJbnRlcm5hbHMuaDogYWRkZWQgeG1sWFBhdGhSZWdpc3RlclZhcmlhYmxlTG9va3VwKCkKCSAgZm9yIFhTTFQKClRodSBKYW4gMTggMTY6MTk6NDcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbElPLmM6IEdhcnkgUGVubmluZ3RvbiA8R2FyeS5QZW5uaW5ndG9uQHVrLnN1bi5jb20+IGZpeAoJICBmb3IgeG1sR3pmaWxlT3BlbigpIGJ1ZwoKVGh1IEphbiAxOCAxMzoxMTo1MCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogcmVtb3ZlZCBhbiBlcnJvciBmb3VuZCBieSBYU0xUIHVzYWdlCgkqIHRyZWUuYyBwYXJzZXJJbnRlcm5hbHMuaDogdXNlIGEgcHJlZGVmaW5lZCBzdGF0aWMgc3RyaW5nCgkgIGZvciB0ZXh0IGFuZCBjb21tZW50IG5vZGVzLCBhdm9pZCBmcmVlaW5nIHRoZW0gaW4geG1sRnJlZU5vZGUsCgkgIGV4cG9ydGVkIHRoZSBzdHJpbmcgbmFtZSBpbiBwYXJzZXJJbnRlcm5hbHMuaCBhbmQgYWRkZWQKCSAgYW5vdGhlciB2YWx1ZSB0byBkaXNhYmxlIGVuY29kaW5nIGF0IG91dHB1dCAoZm9yIFhTTFQpLAoJICBnYWluIG1lbW9yeSwgdGltZS4KCldlZCBKYW4gMTcgMDk6MTU6MTYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHdpbjMyL1JFQURNRS5NU0RldiB3aW4zMi9saWJ4bWwyL2xpYnhtbDJfYS5kc3AKCSAgd2luMzIvbGlieG1sMi9saWJ4bWwyX3NvLmRzcDogbmV3IG1ha2VmaWxlcyBhbmQgdXBkYXRlCgkgIHByb3ZpZGVkIGJ5IElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKVHVlIEphbiAxNiAxODoyNDo0NiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jIDogeG1sU2F2ZUZpbGUsIHhtbFNhdmVGaWxlRW5jLCBhcHBsaWVkIHBhdGNoIGZyb20gCgkgIEdhcnkgUGVubmluZ3RvbgoKTW9uIEphbiAxNSAyMDoyNDoxOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgdGhlIGNvbWFwcmlzaW9uIG9mIHZhbHVlcyBhbmQgbm9kZWxpc3RzLAoJICBuZWVkIHRvIGNvbXBhcmUgbm9kZWxpc3Qgc3RpbGwgLi4uCgkqIGRlYnVnWE1MLmM6IGF2b2lkZWQgYSBwb3NzaWJsZSBjb3JlIGR1bXAKCSogSFRNTHBhcnNlci5jOiBjbGVhbnVwCgkqIG5hbm9odHRwLmM6IGNvbnRyaWJ1dGVkIGZpeC4KCSogdHJlZS5jOiBmaXhlcyBpbiBwcm9wZXJ0aWVzIGhhbmRsaW5nIGFkZGVkIHhtbFNldE5zUHJvcAoJICBuZWVkZWQgYnkgbGlieHNsdAoJKiB4cGF0aEludGVybmFscy5oOiBleHBvcnRlZCB4bWxYUGF0aEJvb2xlYW5GdW5jdGlvbiwgYWRkZWQgYSAKCSAgY29tbWVudAoJKiBUT0RPOiB1cGRhdGVkCgpTYXQgSmFuICA2IDIyOjA1OjA5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYzogYXBwbGllZCBCam9ybiBSZWVzZSBvcHRpbWl6YXRpb24KCSAgcGF0Y2gKClNhdCBKYW4gIDYgMTk6MTM6MjcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtOiBhcHBsaWVkIHBhdGNoIGZybyBtYWtlIGNoZWNrIGZyb20gTWFydGluIFZpZG5lcgoKVGh1IEphbiAgNCAxOTowNzo0OSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi4yLjExCgkqIGRvYy9odG1sLyo6IHJlYnVpbGQgdGhlIEhUTUwgZmlsZXMKCSogZG9jL3htbC5odG1sIDogdXBkYXRlZAoKVGh1IEphbiAgNCAxNDowOTo1OCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBmaXhlZCBhIHN0dXBpZCBidWcKCSogdmFsaWQuYzogYXBwbGllZCAiUGF1bCBELiBTbWl0aCIgPHBhdXNtaXRoQG5vcnRlbG5ldHdvcmtzLmNvbT4KCSAgcGF0Y2hlcyByZWxhdGVkIHRvIHZhbGlkYXRpb24gb2YgYW4gWEluY2x1ZGUgcHJvY2Vzc2luZyByZXN1bHQKCSogVE9ETzogdXBkYXRlZAoKVGh1IEphbiAgNCAxMTo0Njo0MCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZW5jb2RpbmcuYyB4bWxJTy5jOiBGaXhpbmcgdGhlIHByb2JsZW0gcmVwb3J0ZWQgYnkgTWFyYyBTYW5mYWNvbgoJICBvbiBsYXJnZSBmaWxlcwoKV2VkIEphbiAgMyAyMTo1MToxMyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sSU8uYzogZml4ZWQgeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVNZW0gZG9jCgpXZWQgSmFuICAzIDE4OjU2OjAwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmM6IGh0bWxDaGVja1BhcmFncmFwaCB0byBjaGVjayBodG1sT21pdHRlZERlZmF1bHRWYWx1ZSwKCSAgcmVwb3J0ZWQgYnkgSm9uYXMgQm9yZ3N0cvZtCgkqIG5hbm9odHRwLmM6IEFwcGxpZWQgQmpvcm4gUmVlc2UnIElQVjYgZmlyc3QgcGF0Y2gKCldlZCBKYW4gIDMgMTY6MTk6MzkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRlc3RYUGF0aC5jIHhwYXRoLmM6IGZpeGluZyB0aGUgWFBhdGggdW5pb24gZXhwcmVzc2lvbnMgcHJvYmxlbQoJICByZXBvcnRlZCBieSAgTWFydGluIFZpZG5lciA8bWFydGluQGFydGF4Lmthcmxpbi5tZmYuY3VuaS5jej4KCldlZCBKYW4gIDMgMTQ6MjI6MzMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbGxpbnQuYzogTWFkZSBpcyBzbyBpZiB0aGUgZmlsZSBuYW1lIGlzICItIiBpcyB3aWxsIHJlYWQgZm9ybQoJICBzdGFuZGFyZCBpbnB1dC4gU3ZlbiBIZWluaWNrZSAgPHN2ZW5AemVuLm9yZz4KCSogdHJlZS5jOiBmaXhlZCBhIHByb2JsZW0gd2hlbiBncm93aW5nIGJ1ZmZlcgoJKiB0cmVlLmg6IGZpeGVkIHRoZSBjb21tZW50IG9mIHRoZSBub2RlIHR5cGVzIGZvbGxvd2luZyBhbmRlcnNjYQoJICBjb21tZW50CgkqIFRPRE86IHVwZGF0ZWQKCldlZCBEZWMgMjcgMTI6MzU6NDkgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5bY2hdOiBhZGRlZCBhIHdheSB0byBhdm9pZCBhZGRpbmcgYXV0b21hdGljYWxseQoJICBvbWl0dGVkIHRhZ3MuIGh0bWxIYW5kbGVPbWl0dGVkRWxlbSgpIGFsbG93cyB0byBjaGFuZ2UgdGhlCgkgIGRlZmF1bHQgaGFuZGxpbmcuCgkqIHRyZWUuW2NoXSB4bWxsaW50LmM6IGFkZGVkIHhtbERvY0R1bXBGb3JtYXRNZW1vcnkoKSBhbmQgCgkgIHhtbERvY0R1bXBGb3JtYXRNZW1vcnlFbmMoKSwgdXNlcyBtZW1vcnkgZnVuY3Rpb25zIGZvciBvdXRwdXQKCSAgb2YgeG1sbGludCB0b28gd2hlbiB1c2luZyAtLW1lbW9yeSBmbGFnLCBhZGRlZCBhIG1lbW9yeSB0ZXN0CgkgIHN1aXRlIGF0IHRoZSBNYWtlZmlsZSBsZXZlbC4KCSogeHBhdGhJbnRlcm5hbHMuaCB4cGF0aC5bY2hdIHhwb2ludGVyLmM6IGZpeGVkIHByb2JsZW1zCgkgIHdpdGggbmFtZXNwYWNlIHVzZSB3aGVuIGVuY291bnRlcmluZyBRTmFtZXMgaW4gWFBhdGggZXZhbGF0aW9uLAoJICBhZGRlZCB4bWxucygpIHNjaGVtZSBpbiBYUG9pbnRlci4KCSogbmFub2Z0cC5jIDogaW5jb3Jwb3JhdGVkIGEgZml4CgkqIHBhcnNlci5jIHhtbElPLmM6IGZpeGVkIHByb2JsZW1zIHJhaXNlZCB3aXRoIGVuY29kaW5nIHdoZW4gdXNpbmcKCSAgdGhlIG1lbW9yeSBJL08KCSogcGFyc2VySW50ZXJuYWxzLmM6IGNsb3NlZCBidWcgMjU5MzQgcmVwb3J0ZWQgYnkgCgkgIHRvcnN0ZW4ubGFuZHNjaG9mZkBpbm5vbWluYXRlLmRlCgkqIFRPRE86IHVwZGF0ZWQKClNhdCBOb3YgMjUgMTE6NDY6MjcgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluIGRvYy9odG1sLyogZG9jL3htbC5odG1sOiBtYWRlIGEgMi4yLjkgcmVsZWFzZQoJICBvbiBhIG5vbi11cGRhdGVkIHRyZWUgOi0oLCBtYWRlIGEgMi4yLjEwIHJlbGVhc2UgdG8gY29ycmVjdCB0aGUKCSAgc2l0dWF0aW9uCgpTYXQgTm92IDI1IDEwOjQxOjM3IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9odHRwLmMgcGFyc2VyLltjaF0gdHJlZS5bY2hdIHhtbElPLltjaF0geG1sbGludC5jIHhwYXRoLmMKCSAgcGFyc2VySW50ZXJuYWxzLmggdm1zL2J1aWxkX2xpYnhtbC5jb20gdm1zL2NvbmZpZy52bXMgTWFrZWZpbGUuYW06CgkgIGludGVncmF0ZWQgYSBzZXQgb2YgT3BlblZNUyBjaGFuZ2VzIGZyb20gSG93YXJkIFRheWxvcgoJICA8SG93YXJkLlRheWxvckBwYWNvYXN0LmNvbT4KClNhdCBOb3YgMjUgMDE6MjE6MDEgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdIHhtbElPLmM6IGFkZGVkIHhtbERvY0R1bXBNZW1vcnlFbmMoKSBmcm9tIEpvaG4gS3JvbGwKCSogZXJyb3IuYzogYXBwbGllZCBmaXggc3VnZ2VzdGVkIGJ5ICJMZW8gRGF2aWRzb24iIDxsZW9Ab3guY29tcHNvYy5uZXQ+CgpTYXQgTm92IDI1IDAwOjI0OjQ5IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYzogc29tZSBmaXhlcyBvbiBhdXRvLW9wZW4gb2YgaHRtbC9oZWFkL2JvZHkKCSogZW5jb2RpbmcuYzogZml4ZWQgYSBjb21waWxhdGlvbiBlcnJvciBvbiBzb21lIGdjYyBlbnYKCSogeHBhdGguYyB4cG9pbnRlci5bY2hdIHhwYXRoSW50ZXJuYWxzLmg6IGltcHJvdmVkIHRoZQoJICBYUG9pbnRlciBpbXBsZW1lbnRhdGlvbgoJKiB0ZXN0L1hQYXRoL3hwdHIvc3RycG9pbnQgdGVzdC9YUGF0aC94cHRyL3N0cnJhbmdlMzogYWRkZWQKCSAgcmVsYXRlZCBYUG9pbnRlciB0ZXN0cyBhbmQgYXNzb2NpYXRlZCByZXN1bHRzCgpGcmkgTm92IDI0IDE0OjAxOjQ0IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWxkdGQuaHRtbCBkb2MveG1sLmh0bWw6IGZvbGxvd2luZyBhIHNob3J0IHN0ZXAgYnkgc3RlcAoJICBndWlkYW5jZSBvbiBJUkMgdG8gaGVscCBtYWNpZWogd2l0aCBEVERzIEkgc3RhcnRlZCBhIHNtYWxsCgkgIHBhZ2Ugb24gdGhlIHN1YmplY3QuCgpGcmkgTm92IDE3IDE3OjI4OjA2IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgaGFuZGxpbmcgb2YgYnJva2VuIGNoYXJyZWZzCgkqIHhtbG1lbW9yeS5oIGxpYnhtbDIuZHNwIGluY2x1ZGUvd2luMzJjb25maWcuaDogcmVwb3J0aW5nIFdpbmRvd3MKCSAgcGF0Y2hlcwoKTW9uIE5vdiAxMyAxOToxNzoyMCBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwgZG9jL2h0bWwvKiA6IHJlYnVpbHQgdGhlIGRvY3MgYWZ0ZXIgYWRkaW5nCgkgIHhpbmNsdWRlIGFuZCB1cGRhdGVkIHBhZ2UgZm9yIDIuMi43IGFuZCAyLjIuOAoJKiBjb25maWd1cmUuaW46IHJlbGVhc2luZyAyLjIuOAoKTW9uIE5vdiAxMyAxMjozOTozOCBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuW2NoXSBwYXJzZXJJbnRlcm5hbHMuYzogYXBwbGllZCB0aGUgY29uZGl0aW9uYWwKCSAgc2VjdGlvbiBwcm9jZXNzaW5nIGZpeCBmcm9tIEpvbmF0aGFuIFAgU3ByaW5nZXIKCSAgPGpvbmF0aGFuLnNwcmluZ2VyMkBndGUubmV0PgoJKiB4bWx2ZXJzaW9uLmguaW4gd2luMzIvbGlieG1sMi9saWJ4bWwyLmRzcCA6IFVwZGF0ZWQgTVMKCSAgcHJvamVjdCBmaWxlLCBmaXhlZCBpY29udiBkZWZhdWx0IG5vbiBzdXBwb3J0CgkqIHhwYXRoLmM6IGZpeGVkIHRoZSBwcm9ibGVtIG9mIGV2YWx1YXRpbmcgcmVsYXRpdmUgZXhwcmVzc2lvbnMKCSAgd2hlbiBhIG5vZGUgY29udGV4dCBpcyBwcm92aWRlZC4KClN1biBOb3YgMTIgMTY6MzE6MTkgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5jOiBmaXhlZCBnY2MgMi45NSBuZXcgd2FybmluZ3MKCSogU0FYLmM6IGZpeGVkIGEgc3R1cGlkIGJ1ZwoJKiB0cmVlLmM6IGZpeGVkIGEgZm9ybWF0dGluZyBwcm9ibGVtIHdoZW4gcm91bmQtdHJpcHBpbmcKCSAgZnJvbS90byBtZW1vcnkKCSogeGluY2x1ZGUuYzogY2hhc2VkIG1lbWxlYWssIGZpeGVkIGEgYmFzZSBwcm9ibGVtCgkqIHhwb2ludGVyLmM6IGFkZGVkIHhtbFhQdHJCdWlsZFJhbmdlTm9kZUxpc3QoKSwgZmluaXNoZWQgPyAKCSAgeG1sWFB0ckJ1aWxkTm9kZUxpc3QoKQoJKiBUT0RPOiB1cGRhdGVkCgkqIE1ha2VmaWxlLmFtIHRlc3QvWEluY2x1ZGUvZG9jcyB0ZXN0L1hJbmNsdWRlL2VudHMgcmVzdWx0L1hJbmNsdWRlOgoJICBhZGRpbmcgYSBmaXJzdCBzbWFsbCBzZXQgb2YgcmVncmVzc2lvbiB0ZXN0cyBmb3IgWEluY2x1ZGUKClR1ZSBOb3YgIDcgMTU6MTE6MzQgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2h0dHAuW2NoXTogYXBwbGllZCBXYXluZSBEYXZpc29uIHBhdGNoZXMgdG8gYWNjZXNzCgkgIHRoZSBXV1ctQXV0aG9yaXphdGlvbiBoZWFkZXIuCgkqIHBhcnNlci5jOiBDbG9zZWQgQnVnIzMwODQ3OiBQcm9ibGVtcyB3aGVuIHN3aXRjaGluZyBlbmNvZGluZwoJICBpbiBzaG9ydCBmaWxlcyBieSBhcHBseWluZyBTaW1vbiBCZXJnJ3MgcGF0Y2guCgkqIHZhbGlkLmM6IGZpeGVkIGEgdmFsaWRhdGlvbiBwcm9ibGVtCgkqIGhhc2guYyBwYXJzZXIuaCBwYXJzZXJJbnRlcm5hbHMuaCB0ZXN0SFRNTC5jIHRlc3RTQVguYyB0cmVlLmgKCSAgeG1sZXJyb3IuaCB4bWxtZW1vcnkuaCB4bWx2ZXJzaW9uLmguaW46IGFwcGxpZWQgYSBETEwgcGF0Y2ggZnJvbQoJICBXYXluZSBEYXZpc29uCgkqIHhwb2ludGVyLltjaF06IGFkZGVkIGZpcnN0IHZlcnNpb24gb2YgeG1sWFB0ckJ1aWxkTm9kZUxpc3QoKQoJICBuZWVkIHRvIGJlIGV4dGVuZGVkIHRvIG5vbiBmdWxsIG5vZGVzIHNlbGVjdGlvbnMuCgkqIHhpbmNsdWRlLmM6IHN0YXJ0cyB0byB3b3JrIGRlY2VudGx5CgpNb24gTm92ICA2IDE3OjIyOjQ2IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXSB4aW5jbHVkZS5bY2hdIHhtbGxpbnQuYyBjb25maWd1cmUuaW4gdmFsaWQuYwoJICBkZWJ1Z1hNTC5jIHhtbHZlcnNpb24uaC5pbjogU3RhcnRlZCBhZGRpbmcgWEluY2x1ZGUgc3VwcG9ydCwKCSAgdGhpcyBpcyBhIG5ldyB4bWxsaW50IG9wdGlvbgoJKiB0cmVlLmMgeHBhdGguYzogYXBwbGllZCBUT00gcGF0Y2hlcyBmb3IgWFBhdGgKCSogeHBvaW50ZXIuYzogZml4ZWQgYSBjb3VwbGUgb2YgZXJyb3JzLgoJKiB1cmkuYzogYWRkZWQgYW4gZXNjYXBpbmcgZnVuY3Rpb24gbmVlZGVkIGZvciB4aW5jbHVkZQoJKiB0ZXN0WFBhdGguYyBoYXNoLmMgSFRNTHRyZWUuYzogbWlub3IgY2xlYW51cHMgcmFpc2VkIGJ5CgkgIG5ldyB3YXJuaW5nIGZyb20gUkg3MCBnY2MncyB2ZXJzaW9uCgpUdWUgT2N0IDMxIDE0OjE0OjEzIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgbG9vcCBvbiBpbnZhbGlkIGNoYXIgaW4gc2NyaXB0cwoJKiBwYXJzZXIuYzogdXBkYXRlIHRvIGRlc2NyaXB0aW9uIG9mIHhtbElPUGFyc2VEVEQoKQoJKiBsaWJ4bWwubTQgeG1sdmVyc2lvbi5oLmluOiBjaGFuZ2VzIGNvbnRyaWJ1dGVkIGJ5CgkgIE1pY2hhZWwgU2NobWVpbmcgPG0uc2NobWVpbmdAaW50ZXJuZXQtZmFjdG9yeS5kZT4KCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgZm9yIDIuMi43CgkqIE1ha2VmaWxlLmFtOiB0cnlpbmcgdG8gYXZvaWQgIGNvbmZpZy5oIGFuZCBhY2NvbmZpZy5oCgkgIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBkaXN0cmliCgkqIGNvbmZpZ3VyZS5pbjogcmVsZWFzZWQgMi4yLjcKCk1vbiBPY3QgMzAgMTc6MDg6MTAgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdIGRlYnVnWE1MLmMgcGFyc2VySW50ZXJuYWxzLmMgeHBhdGguYzogRGVwcmVjYXRlZCBQaSdzCgkgIGxpa2UgbmFtZXNwYWNlcyBmb3IgZ29vZC4gVW5pZmllZCB4bWxOcyBhbmQgeG1sTm9kZSBzb21ld2hhdC4KCk1vbiBPY3QgMzAgMTY6MjY6NDkgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLltjaF06IGFkZGVkIHhtbElPUGFyc2VEVEQoKQoJKiB4cG9pbnRlci5jOiBhZGRlZCBzdXBwb3J0IGZvciB0aGUgMiBleHRyYSBwYXJhbWV0ZXJzIG9mCgkgIHN0cmluZy1yYW5nZSwgZml4ZWQgYSBzdG9vcGlkIGVycm9yIHdoZW4gJzAnIHdhcyBwcmVzZW50CgkgIGluIFhQb2ludGVyIGV4cHJlc3Npb25zCgkqIHRlc3QvWFBhdGgveHB0ci9zdHJyYW5nZTIgcmVzdWx0L1hQYXRoL3hwdHIvc3RycmFuZ2UyOiBhZGRlZAoJICB0ZXN0c3VpdGUgZm9yIHRoZSBhYm92ZQoKTW9uIE9jdCAzMCAxMDoyNjo0MyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBsaWJ4bWwuc3BlYy5pbjogaW1wcm92ZWQgcGFja2FnZSBkZXNjcmlwdGlvbnMKClN1biBPY3QgMjkgMTk6MDM6MTEgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguYyB4cGF0aEludGVybmFscy5oOiBhcHBsaWVkIGEgbGFyZ2UgY2xlYW5pbmcgcGF0Y2gKCSAgZnJvbSBUT00gPHB0aXR0b21AZnJlZS5mcj4sIGl0IGFsc28gYWRkIG5hbWVzcGFjZSBzdXBwb3J0CgkgIGZvciBmdW5jdGlvbiBhbmQgdmFyaWFibGVzIHJlZ2lzdHJhdGlvbi4KClN1biBPY3QgMjkgMTg6NTE6NDYgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdXJpLmM6IFdheW5lIERhdmlzb24ncyBwYXRjaCBmaXhpbmcgeG1sQnVpbGRVUkkoKQoJKiBNYWtlZmlsZS5taW5ndzogV2F5bmUgRGF2aXNvbidzIHVwZGF0ZSBhZGRpbmcgaGFzaC5jCgpTdW4gT2N0IDI5IDE4OjM4OjEyIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLmM6IGZpeGVkIHRoZSByb290IGV2YWx1YXRpb24gcHJvYmxlbXMKCSogSFRNTHBhcnNlci5jIHJlc3VsdC9IVE1ML2RvYzMuaHRtOiBmaXhlZCB0aGUgcHJvYmxlbSBvZiBub24KCSAgaWdub3JhYmxlIHNwYWNlcyB3aXRoIDxiPiA8Ym9sZD4gPGVtPgoJKiB0cmVlLmM6IGZpeGVkIGEgbG9vcCBpbiB4bWxTZWFyY2hOc0J5SHJlZigpCgpGcmkgT2N0IDI3IDE4OjU3OjMyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5jOiBhcHBsaWVkIGFub3RoZXIgWFBhdGggcGF0Y2ggZnJvbSBUT00gCgkqIHhwYXRoLmMgaW5jbHVkZS9tYWtlZmlsZS5hbTogYXBwbGllZCBhbm90aGVyIHBhdGNoIGZyb20gCgkgIGNoaW5hQHRoZXdyaXR0ZW53b3JkLmNvbSAoY2xlYW51cCBvbiBJUklYKS4KCkZyaSBPY3QgMjcgMTM6NDU6MjggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbC1jb25maWcuMTogcmVjZWl2ZWQgYSBmaXhlZCB2ZXJzaW9uIGZyb20gRnJlZHJpayBIYWxsZW5iZXJnCgkgIDxoYWxsb25AbHlzYXRvci5saXUuc2U+CgpUaHUgT2N0IDI2IDE2OjA1OjI1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5jIHRleHRYUGF0aC5jIHhwYXRoSW50ZXJuYWxzLmg6IGFwcGxpZWQgVE9NIDxwdGl0dG9tQGZyZWUuZnI+CgkgIGNsZWFudXAgcGF0Y2ggZm9yIFhQYXRoCgpXZWQgT2N0IDI1IDIxOjMxOjEwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXRjaGVkIHRvIHJlZGlycmVjdCBhbGwgIm91dCBvZiBjb250ZXh0IiBlcnJvciBtZXNzYWdlcyB0bwoJICBhIHJlY29uZmlndXJhYmxlIHJvdXRpbmUuIFRoZSBjaGFuZ2VzIGFyZToKCSogeG1sZXJyb3IuaCA6IGFkZGVkIHRoZSBleHBvcnQgb2YgYW4gZXJyb3IgY29udGV4dCB0eXBlICh2b2lkICopCgkgIGFuIGVycm9yIGhhbmRsZXIgdHlwZSB4bWxHZW5lcmljRXJyb3JGdW5jIHRoZXJlIGlzIGFuIGludGVyZmFjZQoJICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKHZvaWQgKmN0eCwgeG1sR2VuZXJpY0Vycm9yRnVuYyBoYW5kbGVyKTsKCSAgdG8gcmVzZXQgdGhlIGVycm9yIGhhbmRsaW5nIHJvdXRpbmUgYW5kIGl0cyBhcmd1bWVudAoJICAoYnkgZGVmYXVsdCBpdCdzIGVxdWl2YWxlbnQgdG8gcmVzcGVjdGl2ZWx5IGZwcmludGYgYW5kIHN0ZGVyci4KICAgICAgICAqIGFsbCB0aGUgYyBmaWxlczogYWxsIHdpbGQgYWNjZXNzZXMgdG8gc3RkZXJyIG9yIHN0ZG91dCB3aXRoaW4KCSAgdGhlIGxpYnJhcnkgaGF2ZSBiZWVuIHJlcGxhY2VkIHRvIGNhbGxzIHRvIHRoZSBoYW5kbGVyLgoKV2VkIE9jdCAyNSAxNToyNzoxOSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiByZWxlYXNlIDIuMi42CgkqIHhwYXRoLltjaF0geHBvaW50ZXIuYyB4cGF0aEludGVybmFscy5oOiBhZGRlZCB4cGF0aEludGVybmFscy5oCgkgIGV4cG9ydGluZyB0aGUgaW5uZXIgZnVuY3Rpb25zIG9mIHhwYXRoIGZvciBleHRlbnNpb24gbW9kdWxlcwoJKiBkb2MvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jCgpXZWQgT2N0IDI1IDEyOjQ4OjU1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vaHR0cC5jIDogYXBwbGllZCBXYXluZSBIVFRQIGNsZWFudXAgcGF0Y2gKCSogdHJlZS5bY2hdOiBhcHBsaWVkIFRPTSA8cHRpdHRvbUBmcmVlLmZyPiBmb3IgeG1sTm9kZVNldEJhc2UoKQoJICBhbmQgeG1sTm9kZVNldFNwYWNlUHJlc2VydmUoKQoKV2VkIE9jdCAyNSAxMjoxMTowMyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguYzogY2xvc2luZyBidWcgIzI5MjYwCgpUdWUgT2N0IDI0IDE4OjQ5OjM0IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBoYXNoLltjaF0gZGVidWdYTUwuYzogZXhwYW5kZWQvZW5oYW5jZWQgdGhlIEFQSSwgYWRkZWQKCSAgbXVsdGlrZXkgdHVwbGVzLCBtYWRlIGhhc2ggc3RydWN0dXJlIG9wYXF1ZQoJKiB2YWxpZC5bY2hdOiBtb3ZlZCBlbGVtZW50cywgYXR0cmlidXRlcywgbm90YXRpb25zIGRlY2FsYXJhdGlvbnMKCSAgYXMgd2VsbCBhcyBJRCBhbmQgcmVmcyB0byBoYXNoIHRhYmxlcy4KCSogZW50aXRpZXMuYzogaGFzaCBjbGVhbnVwCgkqIHhtbG1lbW9yeS5jOiBmaXhlZCBhIGR1bXAgcHJvYmxlbSBpbiBkZWJ1ZyBtb2RlCgkqIGluY2x1ZGUvTWFrZWZpbGUuYW06IHByb2JsZW0gcGFzc2luZyBpbiBERVNURElSPSB2YWx1ZXMgcGF0Y2gKCSAgZnJvbSBNYXJjIENocmlzdGVuc2VuIDxtYXJjQGNhbGRlcmFzeXN0ZW1zLmNvbT4KCSogbmFub2h0dHAuYzogcmVtb3ZlZCBkZWJ1Z2dpbmcgcmVtYWlucwoJKiBIVE1McGFyc2VyLmM6IHRoZSBib2d1cyB0YWcgc2hvdWxkIGJlIGlnbm9yZWQgKFdheW5lKQoJKiBIVE1McGFyc2VyLmMgcGFyc2VyLmM6IGZpeGluZyBhIG51bWJlciBvZiBwcm9ibGVtcyB3aXRoIHRoZQoJICBtYWNyb3MgaW4gdGhlICpwYXJzZXIuYyBmaWxlcyAoV2F5bmUpLgoJKiBIVE1McGFyc2VyLmM6IGNsb3NlIHRoZSBwcmV2aW91cyBvcHRpb24gd2hlbiBvcGVuaW5nIGEgbmV3IG9uZQoJICAoTWFyYyBTYW5mYWNvbikuCgkqIHJlc3VsdC9IVE1MLyo6IHVwZGF0ZWQgdGhlIEhUTUwgcmVzdWx0cyBhY2NvcmRpbmdseQoKU3VuIE9jdCAyMiAxODozOToxOSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW50aXRpZXMuW2NoXSB4cGF0aC5bY2hdIGhhc2guW2NoXSBkZWJ1Z1hNTC5jIHRyZWUuaDogYWRkZWQvaGFja2VkCgkgIGhhc2ggdGFibGVzIGZyb20gQmpvcm4gUmVlc2UgPGJyZWVzZUBtYWlsMS5zdG9mYW5ldC5kaz4uIFN3aXRjaGVkCgkgIFhQYXRoIGZ1bmN0aW9ucyBhbmQgWE1MIGVudGl0aWVzIHRhYmxlIHRvIHRoZW0uIE1vcmUgdG8gY29tZS4uLgoJKiB4bWxJTy5jOiBmaXhlZCBsaWJ4bWwgY2xvc2luZyBGSUxFcyBpdCBkaWRuJ3Qgb3Blbi4KClN1biBPY3QgMjIgMTM6NTk6NTAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYzogY29hbGVzY2UgYWRqYWNlbnQgdGV4dCBub2RlcwoJKiB2YWxpZC5jOiBoYW5kbGluZyBvZiBibGFuayBub2RlcyBpbiBEVGQgdmFsaWRhdGlvbiAocmFpc2VkCgkgIGJ5IHByb2JsZW1zIHdpdGggYSBwb3N0ZXJpb3JpIHZhbGlkYXRpb24pLgoJKiBuYW5vaHR0cC5jOiBjaGFuZ2luZyBiZWhhdmlvdXIgb24gSFRUUCB3cml0ZSBzdHVmZi4KCSogSFRNTHRyZWUuYzogZm9yY2VkIGJvZHkgYW5kIGh0bWwgdG8gYmUgZXhwbGljaXRlbHkgY2xvc2VkLgoJKiB4cGF0aC5oOiBleHBvcnRlZCBtb3JlIFhQYXRoIGZ1bmN0aW9ucy4KClN1biBPY3QgMTUgMjI6Mjg6MzIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCiAgICAgICAgKiBSZWxlYXNlIG9mIDIuMi41CgkqIHhwb2ludGVyLmM6IHJhbmdlKCkgcmFuZ2UtaW5zaWRlIGFuZCBvdGhlciBoZWxwZXIgZnVuY3Rpb25zCgkqIHBhcnNlckludGVybmFscy5jOiBmaXhlZCBwZXJmIHByb2JsZW0gcmFpc2VkIGJ5IHJvbGZAcG9pbnRzbWFuLmRlCgpTdW4gT2N0IDE1IDE2OjIxOjI3IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBTQVguYzogSFRNTCBhdHRyaWJ1dGVzIG5lZWQgbm9ybWFsaXphdGlvbiB0b28gKEJqb3JuIFJlZXNlKQoJKiBIVE1McGFyc2VyLltjaF06IGFkZGRlZCBodG1sSXNTY3JpcHRBdHRyaWJ1dGUoKQoKU3VuIE9jdCAxNSAxMzoxODozNiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jLyo6IHJlYnVpbHQgZG9jcyBwcmVwYXJpbmcgZm9yIDIuMi41IHJlbGVhc2UsIGFkZGVkIFVSSQoJICBhbmQgWFBvaW50ZXIgbW9kdWxlcwoKU3VuIE9jdCAxNSAxMjoxMzozMCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogU0FYLmg6IGNsb3NlZCAjMjUxMDcKClN1biBPY3QgMTUgMTI6MDY6MTYgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRlc3RTQVguYzogZml4ZWQgcHJvYmxlbSB3aXRoIGNkYXRhIHJlcG9ydGluZwoJKiBTQVhyZXN1bHQvKiA6IHVwZGF0ZWQKClN1biBPY3QgMTUgMTI6MDA6MjQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jIHRlc3Qvd2FwLnhtbCByZXN1bHQvbm9lbnQvd2FwLnhtbCByZXN1bHQvd2FwLnhtbDoKCSAgQ2xvc2VkIGJ1ZyAjMjc0OTksIGFkZGVkIHRvIHJlZ3Jlc3Npb24gdGVzdHMKCSogVE9ETzogdXBkYXRlZAoKU3VuIE9jdCAxNSAwMTozNDozNyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIEhUTUx0cmVlLltjaF0gU0FYLmMgdGVzdEhUTUwuYyB0cmVlLmM6IGZpeGVkIEhUTUwKCSAgc3VwcG9ydCBmb3IgU0NSSVBUIGFuZCBTVFlMRSB3aXRoIGhlbHAgZnJvbSBCam9ybiBSZWVzZQoJKiB0ZXN0L0hUTUwvKiByZXN1bHQvSFRNTC8qOiBhZGRlZCBzaW1wbGUgdGVzdGNhc2UgYW5kIHVwZGF0ZWQKCSAgdGhlIGV4aXN0aW5nIG9uZXMuCgkgIApGcmkgT2N0IDEzIDE4OjI0OjMxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5jIHhwb2ludGVyLmM6IFhQb2ludGVyIHJlb3JkZXIgb2YgcmFuZ2VzIHN0YXJ0L2VuZCBhbmQKCSAgc3RyaW5nLXJhbmdlIGZvciBlbXB0eSBzdHJpbmdzCgkqIHRlc3QvWFBhdGgvZG9jcy9zdHIgdGVzdC9YUGF0aC94cHRyL2NoYXB0ZXJzcmFuZ2UKCSAgdGVzdC9YUGF0aC94cHRyL3N0cnJhbmdlOiBhdWdtZW50ZWQgdGhlIFhQb2ludGVyIHRlc3RzdWl0ZQoKRnJpIE9jdCAxMyAxMjoyMTo0OCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sIGRvYy94bWxtZW0uaHRtbDogYWRkZWQgYSBtb2R1bGUgZGVzY3JpYmluZyBtZW1vcnkKCSAgaW50ZXJmYWNlcyBhbmQgdXNlLCB1cGRhdGVkIHRoZSBtYWluIHBhZ2UuCgpGcmkgT2N0IDEzIDAxOjIzOjQ4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLmMgbmFub2h0dHAuYyB4bWxJTy5jOiBXYXluZSBEYXZpc29uIFdpbjMyIHBhdGNoCgkgIG5hbm9mdHAgY29kZSB3b3JrIG9uIFdpbmRvd3MgdG9vIG5vdwoKRnJpIE9jdCAxMyAwMDo1NDozNyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdGVzdFhQYXRoLmMgeHBhdGguW2NoXTogbW92ZWQgc29tZSBkZWJ1ZyBmdW5jdGlvbnMgdG8geHBhdGggY29yZQoJKiB4cG9pbnRlci5jOiBpbXBsZW1lbnRlZCBzdHJpbmctcmFuZ2UoKSBhdCBsZWFzdCBhIGdvb2QgZmlyc3QgdmVyc2lvbgoJKiB0ZXN0L1hQYXRoL2RvY3Mvc3RyIHRlc3QvWFBhdGgveHB0ci9zdHJyYW5nZQoJICByZXN1bHQvWFBhdGgveHB0ci9zdHJyYW5nZTogdGhlIHN0cmluZy1yYW5nZSgpIHRlc3RzCgpUaHUgT2N0IDEyIDEwOjAyOjU5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBNYWtlZmlsZS5hbSBpbmNsdWRlL01ha2VmaWxlLmFtIGluY2x1ZGUvd2luMzJjb25maWcuaAoJICB3aW4zMi9NYWtlZmlsZS5taW5ndzogZml4ZWQgcHJvYmxlbXMgcmVwb3J0ZWQgYnkgV2F5bmUgRGF2aXNvbgoJICBhbmQgbWFrZSBkaXN0Y2hlY2sKClRodSBPY3QgMTIgMDE6NDQ6MDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9odHRwLmM6IGFkZGVkIHhtbE5hbm9IVFRQVGltZW91dChpbnQgZGVsYXkpLCByZW1vdmVkIGEgYnVnCgkgIHhtbE5hbm9IVFRQTWV0aG9kIG9uIGlucHV0IE1pbWVUeXBlIFRvbnkgTGFtIDxUb255LkxhbUBlbmcuc3VuLmNvbT4KCSogeHBvaW50ZXIuYzogc2xpZ2h0IGV4dGVuc2lvbiBvZiB4bWxYUHRyTG9jYXRpb25TZXRNZXJnZQoKVGh1IE9jdCAxMiAwMTozNzo1MyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlnLmguaW4gY29uZmlndXJlLmluIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHhtbHZlcnNpb24uaC5pbiA6CgkgIHBhdGNoIGZvciBzb2NrbGVuX3QgZGV0ZWN0aW9uIGJ5CgkgIEFsYmVydCBDaGluLUEtWW91bmcgPGNoaW5hQHRoZXdyaXR0ZW53b3JkLmNvbT4KCldlZCBPY3QgMTEgMTc6NTM6NTcgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYyB2YWxpZC5jIHhtbGxpbnQuYzogRml4ZWQgYSBmZXcgcG9zdHZhbGlkYXRpb24gYnVncwoJICBhbmQgYWRkZWQgYSAtLWR0ZHZhbGlkIG9wdGlvbiB0byB4bWxsaW50IHVzZWQgdG8gdGVzdCBpdAoKV2VkIE9jdCAxMSAxNTowMToyOSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sLWNvbmZpZy4xIE1ha2VmaWxlLmFtIGxpYnhtbC5zcGVjLmluOiBhZGRpbmcgYSBtYW4gcGFnZSBmb3IKCSAgeG1sLWNvbmZpZyBieSBGcmVkcmlrIEhhbGxlbmJlcmcgPGhhbGxvbkBseXNhdG9yLmxpdS5zZT4KCldlZCBPY3QgMTEgMTI6NDE6MzAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLltjaF0geHBvaW50ZXIuW2NoXTogd29ya2VkIG9uIFhQYXRoIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGUKCSAgaGFuZGxpbmdzIChyZWdpc3RyYXRpb24sIGxvb2t1cCwgY2xlYW51cCkKCldlZCBPY3QgMTEgMDE6NDY6NDQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbSBpbmNsdWRlL21ha2VmaWxlLmFtOiBhZGRpbmcgWFBvaW50ZXIKCSAgYW5kIFhQdHJ0ZXN0cyB0YXJnZXQKCSogeHBvaW50ZXIuW2NoXSA6IG5ldyBmaWxlcyBmb3IgWFBvaW50ZXIgc3VwcG9ydAoJKiB0ZXN0L1hQYXRoL3hwdHIgcmVzdWx0L1hQYXRoL3hwdHI6IGFkZGVkIFhQb2ludGVyIHRlc3RzdWl0ZSBhbmQKCSAgbW9yZSBYUGF0aCB0ZXN0cwoKV2VkIE9jdCAxMSAwMToyMzoyNSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiBmaXhlZCwgdmVyeSBicm9rZW4sIG1ha2UgZGlzdGNoZWNrIHdvcmtzIGFnYWluCgpXZWQgT2N0IDExIDAyOjUzOjEwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBNb3JlIHdvcmsgdG93YXJkIDIuMi41LCBpbnRlZ3JhdGVkIGEgbnVtYmVyIG9mIHBhdGNoZXMKCSogY29uZmlndXJlLmluIE1ha2VmaWxlLmFtIHdpbjMyY29uZmlnLmguaW46IHRyeWluZyB0byBjbGVhbnVwCgkgIG1ha2UgZGlzdGNoZWNrIC4uLi4gaHVoIC4uLgoJKiBpbmNsdWRlL01ha2VmaWxlLmFtIGluY2x1ZGUvd2luMzJjb25maWcuaDogbmV3IGRpcmVjdG9yeQoJICBmb3IgaW5jbHVkZXMKCSogd2luMzIvTWFrZWZpbGUubWluZ3cgd2luMzIvUkVBRE1FLk1TRGV2IHdpbjMyL2xpYnhtbDIvbGlieG1sMi5kc3AKCSAgdXBkYXRlZCB0ZWggbWFrZWZpbGVzIGFuZCBpbnN0cnVjdGlvbnMgZm9yIFdJTjMyCgkqIHhwYXRoLmM6IHNtYWxsIGZpeGVzCgkqIHRlc3QvWFBhdGgvIHJlc3VsdHMvWFBhdGg6IHVwZGF0ZWQgdGhlIHRlc3RjYXNlcyBhbmQgcmVzdWx0cwoJKiBIVE1McGFyc2VyLmMgbmFub2h0dHAuYyB0ZXN0WFBhdGguYzogaW5jb3Jwb3JhdGVkIHByb3ZpZGVkIG9yCgkgIHN1Z2dlc3RlZCBwYXRjaGVzCgkqIHZhbGlkLmM6IGZpeGVkIGFuIElEIGJ1ZwoKTW9uIE9jdCAgOSAxNDoyODo1NiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbW92ZWQgeG1sLWVycm9yLmggdG8geG1sZXJyb3IuaDogc2VlbXMgdGhpcyBhbGxvd2VkIHRvIGJ5cGFzcwoJICB0aGUgYXV0b21ha2UgYnVnIHdoZXJlIHdyb25nIGRlcGVuZGVuY2llcyB3ZXJlIGdlbmVyYXRlZC4KCSogeHBhdGguW2NoXTogd29ya2VkIG9uIFhQb2ludGVyCgpGcmkgT2N0ICA2IDEyOjU4OjA0IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4gTWFrZWZpbGUuYW06IDIuMi41LCBzaGlwIHRoZSBpbmNsdWRlIGluIGFuCgkgIGluY2x1ZGUvbGlieG1sIHN1YmRpcmVjdG9yeSwgdXNlIHN5bWxpbmtzIHdoZW4gdXNpbmcgQ1ZTCgkqIHRlc3RTQVguYzogZml4ZWQgc21hbGwgYnVnCgkqIHRlc3RYUGF0aC5jOiBjaGFuZ2VkIHRoZSB3YXkgdGVzdGZpbGVzIGFyZSBwYXJzZWQKCSogZGVidWdYTUwuYzogc2FtZSBraW5kIG9mIGNsZWFudXAgd2hlbiBwYXJzaW5nIGFuIGFyZ3VtZW50IGV4cHJlc3Npb24KCSAgWFBhdGgvWFBvaW50ZXJzIGNhbiBoYXZlIGJsYW5rcyBlbWJlZGRlZAoJKiB4cGF0aC5bY2hdOiBtb3JlIGNsZWFudXAsIHJlb3JncyBmb3IgWFBvaW50ZXIgd29yawoJKiBwYXJzZXJJbnRlcm5hbHMuYyBwYXJzZXIuYyBIVE1McGFyc2VyLmM6IGZpeGVkIHdyb25nIGluY2x1ZGUKCSogd2luMzIvUkVBRE1FLk1TRGV2IHdpbjMyL2xpYnhtbDIvbGlieG1sMi5kc3A6IFdpbmRvd3Mgc3R1ZmYKClRodSBPY3QgIDUgMTg6MTM6MTUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRlYnVnWE1MLmMgdGVzdFhQYXRoLmMgeHBhdGguW2NoXTogZ290IHBpc3NlZCBieSBzb21lIG5hc3R5bmVzcwoJICBpbiB0aGUgWFBhdGggZW5naW5lLCByZXdyb3RlIGxhcmdlIHBhcnRzIG9mIGl0LCBub3cgaXQncyBmYXIKCSAgY2xlYW5lciBhbmQgaW4gc3luYyB3aXRoIHRoZSBSRUMgbm90IGFuIG9sZCBXRC4gRml4ZWQgYSBwYXJzaW5nCgkgIHByb2JsZW0gaW4gdGhlIGludGVyYWN0aXZlIFhNTCBzaGVsbCBmb3VuZCB3aGVuIHRlc3RpbmcgWFBhdGguCgpXZWQgT2N0ICA0IDE1OjI1OjUzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkZWJ1Z1hNTC5jIHRlc3RYUGF0aC5jIHhwYXRoLltjaF06IE1vcmUgd29yayBvbiBYUGF0aC9YcG9pbnRlciwKCSAgaW5jb3Jwb3JhdGVkICIoVE9NKSIgPHB0aXR0b21AZnJlZS5mcj4gcGF0Y2hlcyByZWJ1aWx0IHRoZSBYUGF0aAoJICBleGFtcGxlcyB3aXRoIHRoZSBleHRyYSB0ZXN0CgpXZWQgT2N0ICA0IDE0OjM5OjAxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYyB4bWxJTy5jIHhtbElPLmg6IGZpeGVkIGJ1ZyAyNjY1MCwgYW5kIGltcHJvdmVkCgkgIHRoZSBnbG9iYWwgaW5pdCBmdW5jdGlvbi4KClR1ZSBPY3QgIDMgMTE6Mjg6NTIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYzogRG9vaGhoLCBhdHRyaWJ1dGUgbmFtZSBwYXJzaW5nIHdhcyBzdGlsbCBjYXNlCgkgIHNlbnNpdGl2ZSAhIEZpeGVkIHRoaXMgLi4uCgkqIHJlc3VsdC9IVE1MLyogOiB1cGRhdGVkIHRoZSB0ZXN0cyByZXN1bHRzIGFjY29yZGluZ2x5CgpNb24gT2N0ICAyIDIzOjQ3OjMyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5bY2hdIGRlYnVnWE1MLmMgdGVzdFhQYXRoLmM6IGZpeGVkIHRoZSBYUGF0aCBldmFsdWF0aW9uCgkgIGVuZ2luZSwgc2hvdWxkIGJlIGZhciBtb3JlIHN0YWJsZSwgaW5jb3Jwb3JhdGVkIGEgbmV3IHZlcnNpb24gb2YKCSAgcHJlY2VkaW5nL2ZvbGxvd2luZyBheGlzLCBuZWVkIHRlc3RpbmcKICAgICAgICAqIHVyaS5jOiBmaXhlZCBmaWxlOi8vL2M6L2EvYi9jIHByb2JsZW0KCSogdGVzdC9YUGF0aC90ZXN0cy9pZHNpbXBsZTogYXVnbWVudGVkIHRoZSBYUGF0aCB0ZXN0cwoKU3VuIE9jdCAgMSAyMjozMzowMCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jLyogcmVidWlsZGluZyBkb2NzIGZvciAyLjIuNCByZWxlYXNlCgpTdW4gT2N0ICAxIDIyOjE2OjMzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IHJlbGVhc2luZyAyLjIuNAoJKiBwYXJzZXIuW2NoXTogYWRkZWQgeG1sU3RyRXF1YWwoKQoJKiBIVE1McGFyc2VyLmMgSFRNTHRyZWUuYyBTQVguYyBkZWJ1Z1hNTC5jIGVudGl0aWVzLmMgcGFyc2VyLmMKCSAgdHJlZS5jIHZhbGlkLmMgeGxpbmsuYyB4cGF0aC5jOiBjb252ZXJ0ZWQgYWxsICF4bWxTdHJjbXAgdG8KCSAgdXNlIHhtbFN0ckVxdWFsIGluc3RlYWQKCSogVE9ETzogdXBkYXRlZAoJKiBhZGRlZCBhbiBYUGF0aCB0ZXN0CgpTdW4gT2N0ICAxIDIwOjE5OjM5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIGh0bWxTdGFydENsb3NlSW5kZXhpbml0aWFsaXplZCBpbml0CgkqIGVudGl0aWVzLmg6IGV4cG9ydGVkIHhtbEluaXRpYWxpemVQcmVkZWZpbmVkRW50aXRpZXMKCSogcGFyc2VyLltjaF0gOiBhZGRlZCB4bWxJbml0UGFyc2VyKCkKCSogcGFyc2VySW50ZXJuYWxzLmggOiBoYWQgdG8gZXhwb3J0IGh0bWxJbml0QXV0b0Nsb3NlKCkKClN1biBPY3QgIDEgMTY6Mjg6MjIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLltjaF0gOiBmaXhlZCBzb21lIHNlcmlvdXMgWFBhdGggUHJlZGljYXRlIGV2YWx1YXRpb24KCSAgcHJvYmxlbXMKCSogTWFrZWZpbGUuYW0gOiBhZGRlZCBYUGF0aCByZWdyZXNzaW9uIHRlc3RzIHRvIG5vcm1hbCB0ZXN0cwoJKiB1cmkuYzogZml4ZWQgYSBwcm9ibGVtIHdpdGggbG9jYWwgcGF0aHMsIGNsZWFudXAKCSogcGFyc2VyLmM6IGZpeGVkIGEgcHJvYmxlbSB3aXRoIGxhcmdlIENEYXRhIHNlY3Rpb25zCgpTYXQgU2VwIDMwIDE2OjM1OjU0IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4geG1sLWNvbmZpZy5pbjogcGF0Y2ggZnJvbSAiQmVuIFRheWxvciIKCSAgPHNvbDd4ODZAaG90bWFpbC5jb20+IGZvciBzb2xhcmlzIHNoYXJlZCBsaWJzIGxvb2t1cAoKMjAwMC0wOS0zMCAgTWFydGluIEJhdWxpZyAgPGJhdWxpZ0BzdXNlLmRlPgoKCSogbGlieG1sLTIuMC5wYy5pbjogUHJvdmlkZSBwa2ctY29uZmlnIHNjcmlwdC4KCgkqIGNvbmZpZ3VyZS5pbjogQ3JlYXRlIHRoZSBsaWJ4bWwtMi4wLnBjIHNjcmlwdCBmcm9tIHRoZQoJbGlieG1sLTIuMC5wYy5pbiB0ZW1wbGF0ZXMuCgkqIE1ha2VmaWxlLmFtIChwa2djb25maWdfREFUQSk6IEluc3RhbGwgdGhlIGxpYnhtbC0yLjAucGMKCXNjcmlwdCBpbiBgJChsaWJkaXIpL3BrZ2NvbmZpZycuCgpNb24gU2VwIDI1IDE2OjIzOjQxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgcGFyc2VyLmMgdHJlZS5jIHRyZWUuaDogQXZvaWRpbmcgYSBmZXcgd2FybmluZwoJICB3aGVuIGNvbXBpbGluZyB3aXRoIE1TQwoKU3VuIFNlcCAyNCAyMDozMjo1MiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguYzogcGF0Y2ggZm9yIG5vcm1hbGl6ZS1zdHJpbmcoKSBzdWJzdHJpbmctYmVmb3JlKCksCgkgIHN1YnN0cmluZy1hZnRlcigpIGFuZCB0cmFuc2xhdGUoKSBmdW5jdGlvbnMgZnJvbSBCam9ybiBSZWVzZQoJICA8YnJlZXNlQG1haWwxLnN0b2ZhbmV0LmRrPgoJKiBsaWJ4bWwubTQgTWFrZWZpbGUuYW06IGFkZGVkIGxpYnhtbC5tNCBmcm9tIERlYmlhbiA/CgkgIEZyZWRyaWsgSGFsbGVuYmVyZyA8aGFsbG9uQGx5c2F0b3IubGl1LnNlPgoJKiBUT0RPOiB1cGRhdGVkCgpTdW4gU2VwIDI0IDEwOjAwOjQ5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWx2ZXJzaW9uLmguaW4gbmFub2Z0cC5jIG5hbm9odHRwLmM6IHRyYXlpbmcgdG8gd29yayBvdXQgdGhlCgkgIHByb2JsZW0gb2Ygc29ja2xlbl90IGJlaW5nIHVuZGVmaW5lZCBvbiBhIG51bWJlciBvZiBwbGF0Zm9ybXMKCSogZGVidWdYTUwuYzogZml4ZWQgYSBjb21waWxhdGlvbiBwcm9ibGVtIHdoZW4gd2l0aG91dCBzbnByaW50ZgoKU2F0IFNlcCAyMyAxMjoxOTo0NSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIHVyaS5jOiBBbm90aGVyIHBhdGNoIGZyb20gV2F5bmUgRGF2aXNvbiwgY29ycmVjdGluZwoJICBhbiBVUkkgYnVnIGFuZCBhIGZpeCBmb3IgdGhlIGNvbnRyb2wtY2hhcmFjdGVyLWluZHVjZWQgaW5maW5pdGUgbG9vcAoJKiBuYW5vaHR0cC5jOiBwcmV2ZW50aXZlIGZpeCBmb3IgY29tcGlsaW5nIG9uIFdJTjMyCgpGcmkgU2VwIDIyIDE4OjA2OjA4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxpbnQuYzogY2xvc2luZyBidWcgIzI1MDAwCgpGcmkgU2VwIDIyIDE0OjE3OjUzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxJTy5oIHRyZWUuaDogbWFkZSB4bWxOb2RlRHVtcCgpIGFuZCB4bWxOb2RlRHVtcE91dHB1dCgpIHB1YmxpYwoJKiBwYXJzZXIuW2NoXSBuYW5vaHR0cC5jIEhUTUx0cmVlLmMgSFRNTHBhcnNlci5jIHRyZWUuYzogYXBwbGllZCBhbmQKCSAgbW9kaWZpZWQgc2xpZ2h0bHkgV2F5bmUgRGF2aXNvbiBwYXRjaCBhZGRpbmcgeG1sU3RyY2FzZWNtcCBhbmQKCSAgcmVsYXRlZCBmdW5jdGlvbiwgZml4aW5nIHhtbFN0cm5jbXAoKSwgYW5kIGFzc29jaWF0ZWQgY2xlYW51cAoJKiByZXN1bHQvSFRNTC9lbnRpdGllcy5odG1sLnNheDogdXBkYXRpbmcgcmVzdWx0CgpUdWUgU2VwIDE5IDE0OjIwOjEwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB1cmkuYzogYXBwbGllZCBwYXRjaCBmb3IgVVJJIGVzY2FwaW5nIGZyb20gV2F5bmUgRGF2aXNvbgoJICA8d2F5bmVkQGJsb3JmLm5ldD4KCSogdHJlZS5jIHBhcnNlckludGVybmFscy5jIEhUTUxwYXJzZXIuYzogbWVtc2V0IGNoZWNrcyBwYXRjaGVzCgkgIGZyb20gRGVuaXMgQmFyYmllciA8YmFyYmllckBpbWFjcy5wb2x5dGVjaG5pcXVlLmZyPgoJKiBIVE1McGFyc2VyLmM6IFVURjggY2hhcmFjdGVycyBpbiBIVE1MIHRhZy1hdHRyaWJ1dGUgdmFsdWVzCgkgIHBhdGNoIGZyb20gV2F5bmUgRGF2aXNvbgoKU3VuIFNlcCAxNyAxODozNzowMyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sIDogdXBkYXRlZCB3aXRoIG5ldyByZWxlYXNlcywgYWRkaW5nICJob3cgdG8gaGVscCIKClN1biBTZXAgMTcgMTc6NTg6MzcgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFNBWC5jIGRlYnVnWE1MLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdHJlZS5jIHZhbGlkLmMgeHBhdGguYzoKCSAgcmVtb3ZlZCBhIGZldyB3YXJuaW5ncyBpbiBwZWRhbnRpYyBtb2RlIC4uLgoJKiBwYXJzZXJJbnRlcm5hbHMuYyBwYXJzZXIuYzogbW92ZWQgZW5jb2Rpbmcgc3dpdGNoaW5nIGZ1bmN0aW9uCgkgIHRvIHBhcnNlckludGVybmFscy5jCgkqIGNvbmZpZ3VyZS5pbiwgZG9jL01ha2VmaWxlLmFtIGxpYnhtbC5zcGVjLmluOiByZWxlYXNlZCAyLjIuMwoKU2F0IFNlcCAxNiAyMDoxMjo0MSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIHBhcnNlci5jOiBzZXQgY3R4dC0+ZXJyTm8gYmVmb3JlIGNhbGxpbmcgdGhlCgkgIGVycm9yIG9yIHdhcm5pbmcgaGFuZGxlcnMKCldlZCBTZXAgMTMgMjI6MDM6MTggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlckludGVybmFscy5jIHBhcnNlckludGVybmFscy5oIHBhcnNlci5jIE1ha2VmaWxlLmFtOgoJICBjcmVhdGVkIGEgbmV3IG1vZHVsZSBwYXJzZXJJbnRlcm5hbHMuYywgbW92ZWQgbW9zdCBvZiB0aGUKCSAgY29kZSBzaGFyZWQgYnkgdGhlIHZhcmlvdXMgcGFyc2VycyB0aGVyZSwgYXMgd2VsbCBhcwoJICBkZXByZWNhdGVkICBjb2RlIGZyb20gcGFyc2VyLmMuIE1vcmUgY2xlYW51cCBvZiBwYXJzZXIuYwoJKiB1cmkuYzogZml4ZWQgYSBwcm9ibGVtIHdoZW4gVVJJIGlzIE5VTEwKCSogdmFsaWQuYzogc3BlZWR1cCB3aGVuIGxvb2tpbmcgZm9yIGFuIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbgoKU3VuIFNlcCAxMCAxNzo1Mzo0OCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdXJpLmMgdHJlZS5jIFNBWC5jIHBhcnNlci5jIGVudGl0aWVzLmMgZGVidWdYTUwuYzogZmluaXNoZWQKCSAgdGhlIGNsZWFudXAgb2YgdGhlIGNvbXB1dGF0aW9uIG9mIFVSSSByZWZlcmVuY2VzIHdoZW4gc2Vla2luZwoJICBleHRlcm5hbCBlbnRpdGllcy4gVGhlIFVSSSByZWZlcmVuY2Ugc3RyaW5nIGFuZCB0aGUgcmVzdWx0aW5nCgkgIFVSSSBhcmUgYm90aCBzdG9yZWQgbm93LgoJKiBwYXJzZXIuYyBIVE1McGFyc2VyLmMgdmFsaWQuYyBuYW5vZnRwLmMgbmFub2h0dHAuYyB4cGF0aC5jOgoJICBsYXJnZSBzKG4pcHJpbnRmIGNoZWNrcyBhbmQgY2xlYW51cCBmcm9tIERlbmlzIEJhcmJpZXIKCSAgPGJhcmJpZXJAaW1hY3MucG9seXRlY2huaXF1ZS5mcj4KCSogeG1sdmVyc2lvbi5oLmluIHRyZWUuaDogY291cGxlIG9mIFNHTUwgZGVjbGFyYXRpb25zIGZvciBhCgkgIHBvc3NpYmxlIGRvY2Jvb2sgbW9kdWxlLgoJKiByZXN1bHQvVkMvIDogYSBjb3VwbGUgb2YgdGVzdCBvdXRwdXQgY2hhbmdlZCBkdWUgdG8gdGhlIGNoYW5nZQoJICBvZiB0aGUgZW50aXRpZXMgVVJJCgpTdW4gU2VwIDEwIDE1OjU5OjU4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuaDogYWRkZWQgYSBfcHJpdmF0ZSBmaWVsZCBmb3IgbGlua2luZyB1c2VyJ3MgZGF0YQoKU3VuIFNlcCAxMCAxNToxNDo0MyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmg6IGRlbWFjcm9pZmllZCBtb3N0IG9mIHRoZSBJU19YWFgKCSAgdGhlIGdhaW4gaW4gc2l6ZSBpcyBzaWduaWZpY2FudCBzbyAuLi4KCkZyaSBTZXAgIDggMjA6NDg6MjkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGVudGl0aWVzLmM6IGNhc2VzIHdoZXJlIGxvb2tpbmcgdXAgZW50aXRpZXMgd2l0aCBkb2M9PU5VTEwKCSAgY292ZXJlZAoKVHVlIFNlcCAgNSAxMjo0MToxNSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdXJpLmM6IGFwcGxpZWQgV2F5bmUgRGF2aXNvbiBwYXRjaAoJKiBNYWtlZmlsZS5pbiB0ZXN0L1VSSS91cmkuZGF0YSByZXN1bHQvVVJJL3VyaS5kYXRhOiB1cGRhdGVkIFVSSSB0ZXN0cwoKTW9uIFNlcCAgNCAxMzowMTo0NSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdXJpLmMgdGVzdFVyaS5jOiBhcHBsaWVkIFdheW5lIERhdmlzb24gcGF0Y2hlcwoJKiB0ZXN0L1VSSS91cmkuZGF0YSByZXN1bHQvVVJJL3VyaS5kYXRhOiBmaXJzdCBzZXQgb2YgdGVzdHMvcmVzdWx0cwoJKiBNYWtlZmlsZS5pbjogYWRkZWQgVVJJdGVzdCBhbmQgaW5jbHVkZWQgdGhlbmluICJtYWtlIHRlc3RzIgoKU3VuIFNlcCAgMyAxOToxOToyOSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sdmVyc2lvbi5oLmluOiBjbG9zZWQgYnVnIDIyOTQxCgpUaHUgQXVnIDMxIDE2OjU1OjU1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1saW8uaHRtbDogYWRkZWQgZG9jIGFuZCBleGFtcGxlIGZvciBlbnRpdHkgbG9hZGVyCgkgIHJlZGVmaW5pdGlvbi4KClRodSBBdWcgMzEgMTQ6NTk6MjggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWxpby5odG1sIGRvYy94bWwuaHRtbDogYWRkZWQgYSBkb2Mgb24gdGhlIEkvTyBtZWNoYW5pc20KCSAgdXNlZCBieSBsaWJ4bWwKClR1ZSBBdWcgMjkgMjA6MjI6NTMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBGaXhlZCBidWcgb24gaW52YWxpZCBvbnRlbnQgY2hhcmFjdGVycyBhbmQgd2hlbiB1c2luZwoJICBwdXNoLgoJKiB4bWxsaW50LmM6IGZpeGVkIHhtbGxpbnQgZW5kbGluZyBvZiBlcnJvcnMgaW4gcHVzaCBtb2RlCgpUdWUgQXVnIDI5IDExOjI0OjQ4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgdGVzdEhUTUwuYzogYXBwbGllZCB0d28gbmV3IHBhdGNoZXMgZnJvbQoJICBXYXluZSBEYXZpc29uIDx3YXluZWRAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoJKiByZXN1bHQvSFRNTC8qLnNheDogcmVnZW5lcmF0ZWQgSFRNTCBTQVggb3V0cHV0CgkqIHBhcnNlci5jOiBtb3JlIGNsZWFudXAuCgpNb24gQXVnIDI4IDExOjU4OjEyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLltjaF0gdGVzdEhUTUwuYzogYXBwbGllZCB0aGUgc2Vjb25kIHNldCBvZgoJICBwYXRjaGVzIGZyb20gV2F5bmUgRGF2aXNvbiA8d2F5bmVkQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4sCgkgIGFkZGluZyBodG1sRW5jb2RlRW50aXRpZXMoKQoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIGFuIGlnbm9yYWJsZSB3aGl0ZSBzcGFjZSBkZXRlY3Rpb24gYnVnCgkgIG9jY3VyaW5nIHdoZW4gcGFyc2luZyB3aXRoIFNBWCBvbmx5CgkqIHJlc3VsdC9IVE1MLyouc2F4OiB1cGRhdGVkIHNpbmNlIHRoZSBvdXRwdXQgaXMgbm93IEhUTUwKCSAgZW5jb2RlZC4uLgoKTW9uIEF1ZyAyOCAwMDozODozMSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5bY2hdOiBhcHBsaWVkIHNvbWUgb2YgV2F5bmUgRGF2aXNvbgoJICA8d2F5bmVkQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gcGF0Y2hlcwoKU3VuIEF1ZyAyNyAyMjoxNDowMSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogU0FYLmMgdHJlZS5jIGRlYnVnWE1MLmM6IGZpeGVkIGJvZ3VzIGJlaGF2aW91ciB3aGVuIGFuCgkgIHVuZGVjbGFyZWQgbmFtZXNwYWNlIHByZWZpeCB3YXMgdXNlZCwgYWRkZWQgYSB3YXJuaW5nLgoJICBDbGVhbmVkIHVwIHN1cHBvcnQgdy5yLnQuIGVudGl0aWVzLCBzcGlsbGluZyBvdXQgYSB3YXJuaW5nCgkgIGFuZCBiZWluZyBwZWRhbnRpYyBvbiBsb29rdXBzLgoJKiB0ZXN0L3dhcm5pbmcvZW50OSA6IGFkZGVkIHRlc3RjYXNlIGZvciBwcmV2aW91cyBleGFtcGxlLgoJKiBUT0RPOiB1cGRhdGVkCgkqIHBhcnNlckludGVybmFscy5oIHBhcnNlci5jOiBjaGFuZ2VkIHRoZSB3YXkgbmFtZXMgYXJlIHBhcnNlZAoJICBub3cgYWxsb3cgaW5maW5pdGUgc2l6ZSBhbmQgZGVjcmVhc2UgcGVuYWx0eSBmb3Igbm9ybWFsIHVzZQoJKiBwYXJzZXIuYzogU3RhcnRlZCBhIGJpZyBjbGVhbnVwL2NoZWNrIG9mIHRoZSBwYXJzZXIgY29kZSwKCSAgZml4ZWQgc29tZSBvZiB0aGUgbW9zdCB0b3J0dW91cyBlbnRpdHkgY29kZSwgc3BvdHRlZCBjb2RlCgkgIHVudXNlZCBhbnltb3JlCgkqIHRlc3QvKjogYWRkZWQgdGVzdHMgZm9yIHZlcnkgbG9uZyBuYW1lcyBhbmQgcmVsYXRlZCBuYXN0eQoJICB0aGluZ3MuCgpTYXQgQXVnIDI2IDIzOjMxOjA0IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvZW5jb2RpbmcuaHRtbDogYWRkZWQgZW5jb2RpbmcgYWxpYXNlcyBkb2MKCSogZG9jL3htbC5odG1sOiB1cGRhdGVzCgkqIGVuY29kaW5nLltjaF06IGFkZGVkIEVuY29kaW5nQWxpYXNlcyBmdW5jdGlvbnMKCSogZW50aXRpZXMuW2NoXSB2YWxpZC5bY2hdIGRlYnVnWE1MLmM6IHJlbW92ZWQgdHdvIHNlcmlvdXMKCSAgYm90dGxlbmVjayBhZmZlY3RpbmcgbGFyZ2UgRFREcyBsaWtlIERvY2Jvb2sKCSogcGFyc2VyLltjaF0geG1sbGludC5jOiBhZGRlZCBhIHBlZGFudGljIG9wdGlvbiwgd2lsbCBiZQoJICB1c2VmdWwKCSogU0FYLmM6IHJlZGVmaW5pdGlvbiBvZiBlbnRpdGllcyBpcyByZXBvcnRlZCBpbiBwZWRhbnRpYyBtb2RlCgkqIHRlc3RIVE1MLmM6IHVuaW5pdGlhbGl6ZWQgd2FybmluZyBmcm9tIGdjYwoJKiB1cmkuYzogZml4ZWQgYSBjb3VwbGUgb2YgYnVncwoJKiBUT0RPOiBhZGRlZCBpc3N1ZSByYWlzZWQgYnkgTWljaGFlbAoKV2VkIEF1ZyAyMyAwMTo1MDo1MSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL2VuY29kaW5nLmh0bWw6IHByb3BhZ2F0ZWQgTWFydGluIER1ZXJzdCBzdWdnZXN0aW9ucwoKV2VkIEF1ZyAyMyAwMDoyMzo0MSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IEZpeGVkIEJ1ZyMyMTU1MjogbGlieG1sIGZhaWxzIHRvIGRlY29kZSAmYW1wOwoJKiB1cmkuYyB0ZXN0VXJpLmMgcGF0Y2hlcywgYnkgTWFyYyBTYW5mYWNvbiAoMSBsZWZ0KQoJKiBwYXJzZXIuYyBIVE1McGFyc2VyLmM6IEhUTUwvZW5jb2RpbmcgcHVzaCBwcm9ibGVtcyByZXBvcnRlZGkKCSAgYnkgV2F5bmUgRGF2aXNvbgoKU3VuIEF1ZyAyMCAxNzowMzozOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5jIG5hbm9odHRwLmM6IHNtYWxsIGNsZWFudXAKCSogVE9ETzogdXBkYXRlZAoKU2F0IEF1ZyAxOSAyMjo1NzowMiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWRkZWQgYW4gb2xkIFZDIHRlc3RjYXNlIGFuZCB1cGRhdGVkIHRpdGxlLnhtbCBlbnRpdHkKClNhdCBBdWcgMTkgMjE6MDI6MDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyBTQVguYyB0cmVlLmMgSFRNTHRyZWUuaCByZXN1bHQvSFRNTC8qOiB3b3JrCgkgIGRvbmUgb24gYXV0by1vcGVuaW5nIG9mIDxwPiB0YWdzIGFuZCBjbGVhbnVwIG9mIFNBWCBvdXRwdXQKClNhdCBBdWcgMTkgMTg6NDU6NDAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGxpYnhtbC40ICB4bWxsaW50LjEgTWFrZWZpbGUuYW0gbGlieG1sLnNwZWMuaW46IGFkZGVkIG1hbiBwYWdlcwoKU2F0IEF1ZyAxOSAxODozODo1MyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sIGxpYnhtbC4qIHN0cnVjdHVyZS4qOiB1cGRhdGVkIHRoZSBkb2MgYSBiaXQKClRodSBBdWcgMTcgMTU6NTA6MDAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRlc3RTQVguYyB0ZXN0SFRNTC5jIHJlc3VsdC9IVE1MLzogY2xlYW51cCBvZiB0aGUgb3V0cHV0CgkgIG9mIFNBWCB0ZXN0cwoKTW9uIEF1ZyAxNCAxMzo1NjozMyBFRFQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBQYXRjaCBmcm9tIEFsYmVydCBDaGluLUEtWW91bmcgPGNoaW5hQHRoZXdyaXR0ZW53b3JkLmNvbT46CgkqIHhtbGxpbnQuYzogd29ya2Fyb3VuZCBhIE1BUF9GQUlMRWQgZGVmaW5pdGlvbiBidWcgaW4gRFUtNC4wCgpNb24gQXVnIDE0IDExOjEwOjIwIEVEVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFBhdGNoIGZyb20gRGF2ZSBZZWFya2UgPHllYXJrZUBlbmcuYnVmZmFsby5lZHU+OgoJKiB0ZXN0SFRNTC5jOiBmaXggY29yZSBkdW1wIG9uIFNvbGFyaXMgMi54IHN5c3RlbXMKCSogSFRNTHBhcnNlci5jOiBmaXggc2VnZmF1bHQgaWYgY3R4dC0+c2F4LT5jaGFyYWN0ZXJzKCkgaXMgTlVMTAoJKiByZXN1bHQvSFRNTC8qLnNheDogcHJldmlvdXMgYnVnIGZpeCBsZWFkIHRvIG5ldyByZXN1bHRzCgpNb24gQXVnIDE0IDEwOjI2OjA5IEVEVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFBhdGNoIGZyb20gQWxiZXJ0IENoaW4tQS1Zb3VuZyA8Y2hpbmFAdGhld3JpdHRlbndvcmQuY29tPjoKCSogY29uZmlndXJlLmluOiBhZGRlZCAtLXdpdGgtcmVhZGxpbmU9RElSIHRvIGFjY2VwdCBhbHRlcm5hdGUKCSAgcGF0aCBmb3IgcmVhZGxpbmUgaW5jbHVkZS9saWJyYXJ5CgkqIGNvbmZpZ3VyZS5pbjogYWRkZWQgQU1fQ19QUk9UT1RZUEVTIHRvIGFkZCAtQWEgLURfSFBVWF9TT1VSQ0UKCSAgZm9yIEFOU0kgdW5kZXIgSFAtVVgKCSogY29uZmlnLmluOiBSZW1vdmVkIEBMSUJTQCBmcm9tIHhtbC1jb25maWcgYmVjYXVzZSBAWE1MX0xJQlNACgkgIGluY2x1ZGVzIEBMSUJTQAoKU2F0IEF1ZyAxMiAyMzoxOTo0MiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jLyogOiByZWJ1aWx0IHRoZSBkb2NzCgkqIGdldHRpbmcgcmVhZHkgZm9yIDIuMi4yIHJlbGVhc2UKClNhdCBBdWcgMTIgMTY6NDI6MzcgRURUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLltjaF06IGFkZGVkIHhtbEdldEZlYXR1cmVzTGlzdCgpIHhtbEdldEZlYXR1cmUoKQoJICBhbmQgeG1sQWRkRmVhdHVyZSgpCgkqIHRyZWUuW2NoXTogYWRkZWQgeG1sQWRkQ2hpbGRMaXN0KCkKCSogeG1sbGludC5jOiBNQVBfRkFJTEVEIG1hY3JvIHRlc3QKCSogcGFyc2VyLmg6IGFkZGVkIHhtbFBhcnNlQ3R4dEV4dGVybmFsRW50aXR5KCkKCSogdmFsaWQuYzogYXBwbGllZCBidWcgZml4ZXMgcmVtb3ZlZCB3YXJuaW5nCgkqIHRyZWUuYzogYWRkZWQgQ0RBVEEgYmxvY2sgdG8gZWxlbWVudHMgY29udGVudAoJKiB0ZXN0U0FYLmM6IGNsZWFudXAgb2Ygb3V0cHV0CgkqIHRlc3RIVE1MLmM6IGFkZGVkIFNBWCB0ZXN0aW5nCgkqIGVuY29kaW5nLmM6IGJldHRlciBlcnJvciByZWNvdmVyeQoJKiBTQVguYywgcGFyc2VyLmM6IGZpeGVkIG9uZSBvZiB0aGUgZXh0ZXJuYWwgZW50aXR5IHByb2Nlc3NpbmcKCSAgb2YgdGhlIE9BU2lzIHRlc3RzdWl0ZQoJKiBNYWtlZmlsZS5hbTogYWRkZWQgSFRNTCBTQVggcmVncmVzc2lvbiB0ZXN0cwoJKiBjb25maWd1cmUuaW46IGJ1bXBlZCB0byAyLjIuMgoJKiB0ZXN0L0hUTUwvIHJlc3VsdC9IVE1MOiBhZGRlZCBhIGZldyBvZiBIVE1MIHRlc3RzLCBhbmQgYWRkZWQgdGhlCgkgIFNBWCByZXN1bHRzCgpGcmkgQXVnICA0IDExOjIxOjUwIFBEVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogcGF0Y2ggZm9yIEhQIGNvbXBpbGVyCgoyMDAwLTA4LTA0ICBTdmVuIEhlaW5pY2tlICA8c3ZlbkB6ZW4ub3JnPgoKCSogeG1sbGludC5jOiBXYXMgY29yZWR1bXBpbmcgc29tZXRpbWVzIHdoZW4gdGhlIGZpbGUgZ2l2ZW4gZGlkbid0CglleGlzdC4KClNhdCBKdWwgMjIgMDU6NTk6MDUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jIHhtbElPLltjaF06IGZpeGVkIHRoZSBwcm9ibGVtIG9mIGVuY29kaW5nIHN1cHBvcnQKCgkgIHdoZW4gdXNpbmcgaW4gbWVtb3J5IHBhcnNpbmcuIE5lZWQgc29tZSBjbGVhbnVwLgoJKiB4bWxsaW50LmMgY29uZmlndXJlLmluOiBhZGRlZCBhIC0tbWVtb3J5IGZsYWcgdG8gdGVzdCBtZW1vcnkKCSAgcGFyc2luZwoJCkZyaSBKdWwgMjEgMTc6MDk6NTcgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9odHRwLmM6IGZpeGVkIHNvY2tsZW5fdCByZXBsYWNlbWVudCB0byB1bnNpZ25lZCBpbnQKCSogcGFyc2VyLmM6IGZpeGVkIGEgc3BhY2UgaGFuZGRsaW5nIG1pc3NpbmcgYXQgdGhlIGVuZCBvZgoJICBwcm9kdWN0aW9uIDI4IERPQ1RZUEUuCgkqIHhtbG1lbW9yeS5jOiBmaXhlZCBhIHN0dXBpZCBidWcgb24gdGhlIHJvdXRpbmUgdG8gb3ZlcnJpZGUKCSAgYWxsb2NhdGlvbiBmdW5jdGlvbnMKCSogVE9ETzogdXBkYXRlZAoKRnJpIEp1bCAxNCAxNzowMToxNCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jLyByZWdlbmVyYXRlZCB0aGUgZG9jcwoKRnJpIEp1bCAxNCAxNjoxMjoyMCBNRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL2VuY29kaW5nLmh0bWwgZG9jL3htbC5odG1sOiBhZGRlZCBJMThOIGRvYwoJKiBlbmNvZGluZy5bY2hdIEhUTUx0cmVlLltjaF0gcGFyc2VyLmMgSFRNTHBhcnNlci5jOiBJMThOIGVuY29kaW5nCgkgIGltcHJvdmVtZW50cywgYm90aCBwYXJzZXIgYW5kIGZpbHRlcnMsIGFkZGVkIEFTQ0lJICYgSFRNTCwKCSAgZml4ZWQgdGhlIElTTy1MYXRpbi0xIG9uZQoJKiB4bWxsaW50LmMgdGVzdEhUTUwuYzogYWRkZWQvbWFkZSB2aXNpYmxlIC0tZW5jb2RlCgkqIGRlYnVnWE1MLmMgOiBjbGVhbnVwCgkqIG1vc3QgLmMgZmlsZXM6IGFwcGxpZWQgcGF0Y2hlcyBkdWUgdG8gd2FybmluZyBvbiBXaW5kb3dzIGFuZAoJICB3aGVuIHVzaW5nIFN1biBQcm8gY2MgY29tcGlsZXIKCSogeHBhdGguYyA6IGNsZWFudXAgbWVtbGVha3MKCSogbmFub2Z0cC5jIDogYWRkZWQgYSBURVNUSU5HIHByZXByb2Nlc3NvciBmbGFnIGZvciBzdGFuZGFsb25nCgkgIGNvbXBpbGUgc28gdGhhdCBwZW9wbGUgY2FuIHJlcG9ydCBidWdzIG1vcmUgZWFzaWxseQoJKiBuYW5vaHR0cC5jIDogZGl0Y2hlZCBzb2NrbGVuX3Qgd2hpY2ggd2FzIGEgcG9ydGFiaWxpdHkgbWVzcwoJICBhbmQgcmVwbGFjZWQgaXQgd2l0aCB1bnNpZ25lZCBpbnQuCgkqIHRyZWUuW2NoXTogYWRkZWQgeG1sSGFzUHJvcCgpCgkqIFRPRE86IHVwZGF0ZWQKCSogdGVzdC8gOiBhZGRlZCBtb3JlIHRlc3QgZm9yIGVudGl0aWVzLCBOUywgZW5jb2RpbmcsIEhUTUwsIHdhcAoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyBmb3IgMi4yLjAgcmVsZWFzZQoKTW9uIEp1bCAxMCAxNjoxNzoxOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5jOiBmaXhlZCB0aGUgd2F5IHRoZSBjb250cm9sIGNvbm5lY3Rpb24gaXMgaGFuZGxlZAoJKiBsaWJ4bWwuc3BlYy5pbjogZml4ZWQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY2xlYW51cAoKTW9uIEp1bCAgMyAxNDozNzowNyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sOiBjaGFuZ2VkIHRoZSB4bWxzb2Z0Lm9yZyBzdHJ1Y3R1cmUsIHVwZGF0ZWQgdGhlCgkgIGV4YW1wbGVzIHcuci50LiByb290IGFuZCBjaGlsZHMKClN1biBKdWwgIDIgMjA6NTE6NDMgTUVTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGxpYnhtbC5zcGVjLmluOiBmaXhlZCBidWcgIzc0MTksIGRlcGVuZGVuY2llcyBmb3VsZWQgZm9yIGxpYnhtbC1kZXZlbAoKU3VuIEp1bCAgMiAwOTo1Mjo0NSBNRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBXb3JrIG9uIGNoYXJhY3RlciBlbmNvZGluZyBzdXBwb3J0IGZvciB0aGUgSFRNTCBwYXJzZXIKCSogSFRNTHBhcnNlci5jOiBGaXhlZCBzb21lIGF1dG9vcGVuL2F1dG9jbG9zZSBwcm9icyBmb3IgdGhlIEhUTUwgcGFyc2VyCgkqIGVuY29kaW5nLmM6IEZpeGVkIGEgcG90ZW50aWFsIG1lbWxlYWsgaW4gdGhlIGVuY29kaW5nIHN0dWZmCgpTYXQgSnVsICAxIDEzOjQ0OjIyIE1FU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvRkFRLmh0bWwgZG9jL01ha2VmaWxlLmFtIDogYWRkZWQgYSBGQVEKCkZyaSBKdW4gMzAgMjA6Mjk6MDggTUVTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5jIFNBWC5jIHZhbGlkLmMgdHJlZS5oIDogbW9yZSBjbGVhbnVwCgkgIG9mIHRoZSBIVE1MIHBhcnNlciB0byBmb3JjZSBpdCB0byBub3QgYnlwYXNzIFNBWAoKRnJpIEp1biAzMCAxMToxOTo1OSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogd2luMzJjb25maWcuaC5pbjogdXBkYXRlZAoJKiB4bWx2ZXJzaW9uLmguaW46IGNyYXAgZm9yZ290IHRvIHVwZGF0ZSB0aGlzLCB0aGlzIG1lYW4gMi4xLjAKCSAgbGFja3MgaWNvbnYgc3VwcG9ydCA6LSggbmVlZCB0byByZWxlYXNlIDIuMS4xCgkqIGNvbmZpZ3VyZS5pbjogcmVsZWFzZSAyLjEuMQoJKiBIVE1McGFyc2VyOiBmaXhlZCBidWcgIzE0Nzg0CgkqIHhwYXRoLmMgSFRNTHBhcnNlci5jIGVuY29kaW5nLmMgcGFyc2VyLmM6IGZpeCB3YXJuaW5nIHJhaXNlZAoJICBieSBXaW5kb3dzIGNvbXBpbGVyCgkqIEhUTUxwYXJzZXIuYyBTQVguYyBIVE1MdHJlZS5oIHRyZWUuaDogY3JlYXRlIEhUTUwgZG9jdW1lbnQgaW4KCSAgdGhlIFNBWCBzdGFydERvY3VtZW50KCkgY2FsbGJhY2suCgkqIFRPRE86IHVwZGF0ZWQKClRodSBKdW4gMjkgMTI6MDY6NDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFkZGVkIHhtbFN0b3BQYXJzZXIoKQoKV2VkIEp1biAyOCAyMzoxMDoyNiBNRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiAyLjEuMCBwcmVyZWxlYXNlCgkqIExhcmdlIHJlc3luYyBiZXR3ZWVuIFczQyBhbmQgR25vbWUgdHJlZQoJKiBuYW5vZnRwLCBuYW5vaHR0cC5jOiBmaXhlZCBzdGFsbGVkIGNvbm5lY3Rpb25zIHByb2JzCgkqIEhUTUx0cmVlLmMgU0FYLmMgOiBzdXBwb3J0IGZvciBhdHRyaWJ1dGUgd2l0aG91dCB2YWx1ZXMgaW4KCSAgSFRNTCBmb3IgYW5kZXJzY2EKCSogdmFsaWQuYzogRml4ZWQgbW9zdCB2YWxpZGF0aW9uICsgbmFtZXNwYWNlIHByb2JsZW1zCgkqIEhUTUxwYXJzZXIuYzogc3RhcnQgZG9jdW1lbnQgY2FsbGJhY2sgZm9yIGFuZGVyc2NhCgkqIGRlYnVnWE1MLmMgeHBhdGguYzogbG90cyBvZiBYUGF0aCBmaXh1cHMgZnJvbSBQaWNkYXIgVGVjaG5vbG9neQoJKiBwYXJzZXIuaCwgU0FYLmM6IHNlcmlvdXMgc3BlZWQgaW1wcm92ZW1lbnQgZm9yIGxhcmdlCgkgIENEQVRBIGJsb2NrcwoJKiBlbmNvZGluZy5bY2hdIHhtbElPLltjaF06IEltcHJvdmVkIHNlcmlvdXNseSBzYXZpbmcgdG8KCSAgZGlmZmVyZW50IGVuY29kaW5nCgkqIGV4YW1wbGUvTWFrZWZpbGUuYW0gZXhhbXBsZS9nam9icmVhZC5jIHRyZWUuaDogd29yayBvbiAKCSAgbGlieG1sMSBsaWJ4bWwyIGNvbnZlcmdlbmNlLgoJKiBjb25maWcuaC5pbiBwYXJzZXIuYyB4bWxsaW50LmM6IGFkZGVkIHhtbENoZWNrVmVyc2lvbigpCgkgIGFuZCB0aGUgTElCWE1MX1RFU1RfVkVSU0lPTiBtYWNybwoKRnJpIEp1biAyMyAyMjoyNjowNyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sOiB2YXJpb3VzIHBhdGNoZXMgYW5kIGltcHJvdmVtZW50cyB0eXBvIGZpeGVkIGJ5CgkgIEZlbGl4IE5hdHRlcgoJKiBkb2MvbGlieG1sLWRvYy5lbDogRW1hY3MgbW9kdWxlIHRvIGxvb2t1cCB0aGUgbGlieG1sIGRvY3VtZW50YXRpb24KCSAgZnJvbSBGZWxpeCBOYXR0ZXIgPGZuYXR0ZXJAZ214Lm5ldD4KClNhdCBNYXkgIDYgMTA6MDk6NDUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy91cGdyYWRlLmh0bWw6IHVwZGF0ZWQgd2l0aCBpbnN0cnVjdGlvbnMgZm9yIHN1cHBvcnQgb2YgYm90aAoJICBsaWJ4bWwtMS54IGFuZCBsaWJ4bWwtMi54CgkqIGRvYy9nam9icmVhZC5jIDogYXBwbGllZCBUb2RkIER1a2VzIDx0ZHVrZXNAaWJtb3RvLmNvbT4gcGF0Y2gKCSAgZm9yIDIueCBzdXBwb3J0IGFuZCBhbHNvIGZpeGVkIGluY2x1ZGVzCgoKV2VkIE1heSAgMyAxNDoyMToyNSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW5jb2RpbmcuW2NoXSwgeG1sSU8uW2NoXSwgcGFyc2VyLmMsIGNvbmZpZ3VyZS5pbiA6IHJldmFtcGVkCgkgIHRoZSBlbmNvZGluZyBzdXBwb3J0LCBhZGRlZCBpY29udiBzdXBwb3J0LCBzbyBub3cgbGlieG1sIGlmCgkgIGNvbXBpbGVkIHdpdGggaWNvbnYgYXV0b21hdGljYWxseSBzdXBwb3J0IGphcGFuZXNlIGVuY29kaW5ncwoJICBhbW9uZyBvdGhlcnMuIFdvcmsgYmFzZWQgb24gaW5pdGlhbCBwYXRjaCBmcm9tIFl1YW4tQ2hlbiBDaGVuZwoJICBJIG1heSBoYXZlIGJyb2tlbiBiaW5hcnkgY29tcGF0IGluIHRoZSBlbmNvZGluZyBoYW5kbGVyCgkgIHJlZ2lzdHJhdGlvbiBzY2hlbWUsIGJ1dCB0aGF0IHdhcyBzbyB1dHRlcmx5IGJyb2tlbiBJIGRvbid0CgkgIGV4cGVjdCBhbnlib2R5IHRvIGhhdmUgdXNlZCB0aGlzIGZlYXR1cmUgdW50aWwgbm93LgoJKiBwYXJzZXJJbnRlcm5hbHMuaDogZml4dXAgb24gdGhlIENIQVIgcmFuZ2UgbWFjcm8KCSogeG1sLWVycm9yLmgsIHBhcnNlci5jOiBjYXRjaCBVUkwvVVJJIGVycm9ycyB1c2luZyB0aGUgdXJpLmMKCSAgY29kZS4KCSogdHJlZS5bY2hdOiBhZGRlZCB4bWxCdWZmZXJHcm93KCksIHdhcyBuZWVkZWQgZm9yIGljb252CgkqIHVyaS5jOiBhZGRlZCB4bWxQYXJzZVVSSSgpIEkgY2FuJ3QgYmVsaWV2ZSBJIGZvcmdvdCB0bwoJICBpbXBsZW1lbnQgdGhpcyBvbmUgaW4gMi4wICEhIQoJKiBTQVguYzogbW92ZWQgZG9jLT5lbmNvZGluZyB1cGRhdGUgaW4gdGhlIGVuZERvY3VtZW50KCkgY2FsbC4KCSogVE9ETzogdXBkYXRlZC4KCk1vbiBBcHIgMjQgMTM6MzA6MTMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuaDogcmVtb3ZlZCBleHRyYW5lb3VzIHhtbFJlbW92ZVByb3AgZGVmaW5pdGlvbgoJKiBUT0RPOiBhZGRlZCBpdGVtIGFib3V0IC0tZGlzYWJsZS1jb3JiYSBjb25maWd1cmUgc3dpdGNoCgkqIHRyZWUuYyBwYXJzZXIuYzogZml4ZWQgcHJvYmxlbXMgZm9yIHhtbENvcHlEb2MgYW5kIHBvc3R2YWxpZGF0aW9uCgkqIG5hbm9mdHAuYzogZml4ZWQgaW5jbHVkZSBwcm9ibGVtcyBnaXZpbmcgdHJvdWJsZXMgb24gQUlYIGFuZCAKCSAgc2xvd2xhcmlzCgkqIHhtbElPLltjaF0gdmFsaWQuaCB0cmVlLltjaF0geGxpbmsuYyB4bWxtZW1vcnkuYyB1cmkuYyAKCSAgcGFyc2VyLmMgbmFub2Z0cC5jIG5hbm9odHRwLmMgU0FYLmMgdGVzdFNBWC5jIDoKCSAgY29tbWVudCBhbmQgaGVhZGVycyBjaGFuZ2VzIHRvIGxvd2VyIGd0ay1kb2MgbnVtYmVyIG9mIHdhcm5pbmdzCgkqIGRvYy9odG1sLyo6IHJlYnVpbHQgZG9jcwoKU3VuIEFwciAxNiAxMToyMzoyOSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSEFDS0lORzogZG9jdW1lbnRlZCB0aGUgdGFnIGZvciAxLnggYW5kIGluc3RydWN0aW9ucwoKV2VkIEFwciAxMiAxNTo0NzoyMiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sSU8uW2NoXSBwYXJzZXIuW2NoXTogTW9yZSBpbnRlcmZhY2VzIGZvciBuZXcgSS9PIGZ1bmN0aW9ucwoJICB4bWxOZXdJT0lucHV0U3RyZWFtLCB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUlPLAoJICB4bWxDcmVhdGVJT1BhcnNlckN0eHQKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmg6IHNwZWVkdXAgb2YgSVNfQ0hBUiBsaWtlIG1hY3JvcywKCSAgc2lnbmlmaWNhbnQgb3ZlcmFsbCBpbXByb3ZlbWVudAoJKiB4bWxsaW50LmM6IGFkZGVkIEkvTyB0ZXN0IHRvIHhtbGxpbnQKCSogdGVzdFNBWC5jOiBhZGRlZCBhIHNwZWVkIHRlc3QKCSogZG9jLyogOiB1cGRhdGVkL3JlZ2VuZXJhdGVkCgpTYXQgQXByICA4IDE0OjU0OjU0IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5jIHVyaS5oIHBhcnNlckludGVybmFscy5oOiBjb3NtZXRpYyBjaGFuZ2VzIGZyb20KCSAgIlRpbXVyIEkuIEJha2V5ZXYiIDx0aW11ckBiYXQucnU+LCBpbmNsdWRpbmcgbWFraW5nIAoJICB4bWxDcmVhdGVVUkkoKSBwdWJsaWMKCkZyaSBBcHIgIDcgMTg6MzU6MDIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbElPLltjaF0gcGFyc2VyLmM6IGNsZWFuZSB1cCB0aGUgeG1sUGFyc2VySW5wdXRCdWZmZXIgbWVzcwoJICBhbmQgdGhlIGNvZGUgYXQgdGhlIHNhbWUgdGltZS4gQWRkZWQgYSBjbGVhbiBtZWNoYW5pc20gZm9yCgkgIG92ZXJsb2FkIG9yIGFkZGVkIGlucHV0IG1ldGhvZHM6IHhtbFJlZ2lzdGVySW5wdXRDYWxsYmFja3MoKQoJKiB0cmVlLmM6IGZpeGVkIHhtbFByZXZTaWJsaW5nIGFuZCB4bWxOZXh0U2libGluZyBwZXIgCgkgIENocmlzdG9waGUgTGUgR2FsIChDaHJpc3RvcGhlLkxlLUdhbEBpbWFnLmZyKSBpbnB1dAoJKiBUT0RPOiB1cGRhdGVkCgkqIGRvYy8qIDogdXBkYXRlZC9yZWdlbmVyYXRlZAoJKiBkb2MvTWFrZWZpbGUuYW06IHR3ZWFrcyB0byBhdm9pZCBwcm9ibGVtIHdpdGggbGlieG1sIGxpbmsgaW4gdGhlCgkgIHNvdXJjZSBkaXIKCldlZCBBcHIgIDUgMjE6MTE6MzUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRlc3RVUkkuYzogeWV0IGFub3RoZXIgZm9yZ290dGVuIGNvbW1pdCwgSSBzaG91bGQgZ2V0IHNvbWUgc2xlZXAgIQoKV2VkIEFwciAgNSAyMDozNjo0NiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sbGludC5jOiBmb3Jnb3QgdG8gY29tbWl0IHRoaXMgdG9vID8KCldlZCBBcHIgIDUgMTY6MjI6NDQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbHZlcnNpb24uaC5pbiA6IGZvcmdvdCB0byBjb21taXQgdGhpcyBwcmV2aW91c2x5CgpNb24gQXByICAzIDIxOjQ3OjEwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyBsaWJ4bWwtMi4wLjAgdmVyc2lvbiBsb29rcyBPayBzbyBmYXIKCSogUkVBRE1FIFRPRE86IHVwZGF0ZWQgZm9yIHJlbGVhc2UKCSogdXJpLmMgdXJpLmg6IGFkZGVkIGF1dGhvcml0eSBwYXJzaW5nL3NhdmluZwoJKiB1cmkuYyB0ZXN0VVJJLmMgTWFrZWZpbGUuYW06IG1vdmVkIHRoZSB0ZXN0aW5nIGNvZGUgdG8gdGVzdFVSSS5jCgkqIHhtbHZlcnNpb24uaC5pbiBjb25maWd1cmUuaW4gbmFub2Z0cC5bY2hdIG5hbm9odHRwLltjaF0gZW5jb2RpbmcuaAoJICBkZWJ1Z1hNTC5bY2hdIHhwYXRoLltjaF0geG1sSU8uYyB0ZXN0ZXIuYyB0ZXN0WFBhdGguYyB0ZXN0SFRNTC5jCgkgIHRyZWUuYyBIVE1MdHJlZS5jIEhUTUxwYXJzZXIuYyB0cmVlLmMgdHJlZS5oIHBhcnNlci5jCgkgIE1ha2VmaWxlLmFtIDogYWRkZWQgY29tcGlsZS10aW1lIGN1c3RvbWl6YXRpb24gb2YgbGlieG1sCgkgIC0td2l0aC1mdHAgLS13aXRoLWh0dHAgLS13aXRoLWh0bWwgLS13aXRoLXhwYXRoIC0td2l0aC1kZWJ1ZwoJICAtLXdpdGgtbWVtLWRlYnVnCgkqICouW2NoXSBhdXRvY29uZi5zaCA6IG1vdmVkIHRvIGFuIGFic29sdXRlIGFkcmVzc2luZyBvZiBpbmNsdWRlcyA6IAoJICAjaW5jbHVkZSA8bGlieG1sL3h4eC5oPiBJIGhvcGUgaXQgd29uJ3QgYnJlYWsgdG9vIG11Y2ggc3R1ZmYKCSAgYW5kIHdpbGwgYmUgbWFuYWdlYWJsZSBpbiB0aGUgZnV0dXJlLi4uCgkqIHhtbGxpbnQuYyBNYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbiA6IHJlbmFtZWQgdGVzdGVyLmMgdG8geG1sbGludC5jCgkgIGFuZCBhZGRlZCB4bWxsaW50IHRvIHRoZSBpbnN0YWxsZWQgcHJvZ3JhbXMKCSogdXJpLmg6IGFkZGVkIHhtbEZyZWVVUkkoKQoJICAKRnJpIE1hciAyNCAxNDozNToyMSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB1cmkuYyB1cmkuaDogZmluaXNoZWQgdGhlIGVzY2FwaW5nIGhhbmRsaW5nLCB0aGUgYmFzZSBzdXBwb3J0CgkgIGFuZCB0aGUgVVJJIHBhdGggbm9ybWFsaXphdGlvbi4gTG9va3MgZ29vZCBqdXN0IGxhY2tzIHRoZQoJICBhdXRob3JpdHkgY29udGVudCBwYXJzaW5nIGNvZGUuCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCBpbnN0cnVjdGlvbnMgdG8gZ2VuZXJhdGUgdGVzdFVSSQoJKiBUT0RPOiB1cGRhdGVkCgkqIGRvYy94bWwuaHRtbCwgZG9jL3NtYWxsZm9vdG9ubHkuZ2lmIGRvYy93M2MucG5nOiB1cGRhdGVkLAoJICBhZGRlZCBsaW5rcyBhbmQgaWNvbnMgZm9yIFczQyBhbmQgR25vbWUKCk1vbiBNYXIgMjAgMTQ6MDU6MjYgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sbWVtb3J5LltjaF0gOiBzZWVtcyBJIGZvcmdvdCB0byBhY3R1YWxseSB1cGRhdGUgdGhlIGZpbGVzIGluCgkgIHRoZSBsYXN0IGNvbW1pdCA6LSkKCSogZG9jL3htbC5odG1sIGRvYy9odG1sLyogOiB1cGRhdGVkIGFuZCB1cGxvYWRlZCB0aGUgZG9jcwoKTW9uIE1hciAyMCAxMjozMzo1MSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0ZXN0L3ZhbGlkL2R0ZHMveGh0bWwqOiByZW1vdmVkIFJDUyBpbmZvcyAocGFpbiB3aXRoIENWUykKCSogVE9ETzogdXBkYXRlZAoJKiB4bWxtZW1vcnkuW2NoXSA6IGFkZGVkIHhtbE1lbVNldHVwKCkgYW5kIHhtbE1lbUdldCgpIHRvIG92ZXJyaWRlCgkgIGxpYnhtbCBkZWZhdWx0IGFsbG9jYXRpb24gZnVuY3Rpb24gd2l0aCBhbm90aGVyIHNldCAobGlrZSBnbWFsbG9jLwoJICBnZnJlZSkuCgkqIE1ha2VmaWxlLmFtLCB1cmkuYywgdXJpLmg6IGFkZGVkIGEgc2V0IG9mIGZ1bmN0aW9ucyB0byBkbwoJICBleGFjdCAobGl0dGVyYWx5IGNvcGllZCBmcm9tIHRoZSBSRkMgMjM5NiBwcm9kdWN0aW9ucykgcGFyc2luZwoJICBhbmQgaGFuZGxpbmcgb2YgVVJJLiBXaWxsIGJlIG5lZWRlZCBmb3IgWExpbmssIG9uZSBYTUwgV0ZDLCAKCSAgWE1MIEJhc2UgYW5kIHJldXNlZCBpbiB0aGUgbmFub1tmdHAvaHR0cF0gbW9kdWxlcy4gU3RpbGwgd29yawoJICB0byBiZSBkb25lLgoKVHVlIE1hciAxNCAyMDo1MjozNSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4sIGxpYnhtbC5zcGVjLmluIDogbGlieG1sMgoJKiBkb2MvKiA6IHVwZGF0ZWQgdGhlIGRvYyBwYWdlLCByZWJ1aWx0IHRoZSBkb2NzCgpUdWUgTWFyIDE0IDE5OjExOjI5IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFsbDogdGFnZ2VkIExJQl9YTUxfMV9YCgkqICouYyAqLmggOiB1cGRhdGVkIGZyb20gVzNDIENWUyB0cmVlCgkqIGNvbmZpZ3VyZS5pbiA6IDIuMC4wLWJldGEKCSogbGlieG1sLnNwZWMuaW4gOiBsaWJ4bWwyIHBhY2thZ2UgbmFtCgkqIHJlc3VsdC8qIDogbmV3IHZlcnNpb24gb2YgdGhlIHRlc3RzIG91dHB1dAoKTW9uIE1hciAgNiAwOTozNDo1MiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwsIGRvYy91cGRhdGUuaHRtbDogdXBkYXRlZCBkb2NzLCAxLjguNwoKU2F0IE1hciAgNCAxNjoxNDo0MiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvKiA6IHJlYnVpbHQgdGhlIGRvY3MKCSogcGFyc2VyLmM6IGZpbmFsIHBhdGNoIG9uICM2NzY2CgkqIHZhbGlkLmM6IHNtYWxsIHBhdGNoIG9uIHZhbGlkaXR5IGNoZWNrcy4KClNhdCBNYXIgIDQgMTI6Mzg6NDEgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3VwZ3JhZGUuaHRtbDogaW5zdHJ1Y3Rpb24gb24gaG93IHRvIHVwZ3JhZGUgZnJvbSAxLnggdG8gMi54CgkgIGFkZGVkCgkqIHBhcnNlci5jOiBhZGRpbmcgeG1sS2VlcEJsYW5rc0RlZmF1bHQoKSBhcyBhIHdheSB0byBtYW5hZ2UKCSAgY29tcGF0aWJpbGl0eSB3LnIudC4gWE1MIHNwZWMgYW5kIGV4aXN0aW5nIGNvZGUuCgpUaHUgTWFyICAyIDA0OjQ1OjE1IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBzZWVtcyBhIGJldHRlciBzb2x1dGlvbiB0byA8YT4gICA8L2E+IGV4aXN0cywKCSAgd2lsbCB0cnkgaXQgZm9yIGEgd2hpbGUKClRodSBNYXIgIDIgMDI6MjY6MTMgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IHRyaWVkIHRvIHJlbW92ZSB0aGUgPGE+ICAgPC9hPiBnZW5lcmF0aW5nIDxhLz4KCSAgdGhpcyBpcyBoYXJkLiBMZWZ0IGEgZmxhZyBmb3IgdGhhdCBwdXJwb3NlLiBGaXhlZCBidWcgIzY3NjYKCSogY29uZmlndXJlLmluOiBwcmVwYXJlZCAxLjguNyBub3QgcmVsZWFzZWQsIGR1ZSB0byBwcmV2aW91cwoJICBwcm9ibGVtCgpUaHUgTWFyICAyIDAzOjAzOjUwIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbCA6IGFwcGxpZWQgc2Vjb25kIHBhdGNoIGZyb20gUGF1bCBEdUJvaXMKClR1ZSBGZWIgMjkgMjM6NTU6MTMgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sIDogYXBwbGllZCBwYXRjaCBmcm9tIFBhdWwgRHVCb2lzCgpUaHUgRmViICAzIDE2OjM2OjM5IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jIEhUTUxwYXJzZXIuYzogZG8gYSBiaXQgb2YgYnVmZmVyaXphdGlvbiBpbiBwdXNoIG1vZGUuCgpUaHUgRmViICAzIDE1OjU5OjM3IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHRyZWUuYyBIVE1MdHJlZS5bY2hdIGRlYnVnWE1MLmMgeHBhdGguYzogRml4ZWQKCSAgY29tcGlsYXRpb24gd2FybmluZ3Mgb24gdmFyaW91cyBwbGF0Zm9ybXMuCgkqIHBhcnNlci5jOiBGaXhlZCAjNTI4MSB2YWxpZGl0eSBlcnJvciBjYWxsYmFja3MgYXJlIG5vdyBkZXNhY3RpdmVkCgkgIGJ5IGRlZmF1bHQgaWYgbm90IHZhbGlkYXRpbmcuCgpUaHUgRmViICAzIDEzOjQ2OjE0IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuYywgd2luMzJjb25maWcuaC5pbjogcGF0Y2hlcyB0byBjb21waWxlIG9uIFdJTjMyCgpXZWQgRmViICAyIDIyOjUxOjE2IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuYzogc25wcmludGYvc3ByaW50ZiBwYXRjaCBjb3VydGVzeSBHZW9yZ2UgS2F0c2lyZWxvcwoJICA8Z2thdHNpQGNzLnRvcm9udG8uZWR1PgoKTW9uIEphbiAzMSAxODo1ODoyMSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLmMgbmFub2h0dHAuYzogRml4ZWQgJyMnIGFuZCAnPycgc3RyaXBwaW5nIHdoZW4KCSAgcHJvY2Vzc2luZyBVUkxzCgpNb24gSmFuIDMxIDE0OjI1OjU3IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuW2NoXTogY2xlYW51cCwgYnVnIGZpeGVzLCBpbnRlZ3JhdGlvbiBpbiBycG1maW5kLCBhZGRlZAoJICB4bWxOYW5vRlRQVXBkYXRlVVJMIGZvciBwZXJzaXN0ZW50IGNvbnRyb2wgY29ubmVjdGlvbnMuCgkqIGNvbmZpZ3VyZS5pbjogMS44LjYKClRodSBKYW4gMjcgMTc6NTI6MjkgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2h0dHAuW2NoXSwgbmFub2Z0cC5bY2hdOiBjbGVhbnVwLCBhZGRlZCBwcm94eSBzdXBwb3J0CgkqIHRyZWUuW2NoXSA6IGFkZGVkIHhtbFNhdmVOb0VtcHR5VGFncwoKMjAwMC0wMS0yOSAgSmFtZXMgSGVuc3RyaWRnZSA8amFtZXNAZGFhLmNvbS5hdT4KCgkqIG5hbm9mdHAuYzogaW5jbHVkZSA8bmV0aW5ldC9pbi5oPiBmb3IgSVBQUk9UT19UQ1AuCgoJKiBNYWtlZmlsZS5hbTogYWRkZWQgbmFub2Z0cC5bY2hdIHRvIHRoZSBidWlsZC4KCldlZCBKYW4gMjYgMTg6MTQ6NTUgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5bY2hdOiBjbGVhbnVwLCBjb21tZW50cywgQVBJCgkqIGRlYnVnWE1MLmMgOiBmaXhlZCBhIGJ1ZyBpbiB0aGUgY2F0IGNvbW1hbmQKCSogZG9jLyo6IHJlZ2VuZXJhdGVkIHRoZSBkb2NzCgpXZWQgSmFuIDI2IDE2OjUyOjUwIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuW2NoXSBwYXJzZXIuYyB4bWxJTy5bY2hdOiBhZGRlZCBhIE5hbm8gRlRQIGltcGxlbWVudGF0aW9uCgkqIGRlYnVnWE1MLmMgOiBmaXhlZCBhIGJ1ZyBpbiB0aGUgY2F0IGNvbW1hbmQKCSogdmFsaWQuYzogZml4aW5nIHNvbWUgc21hbGwgcHJvYnMKCSogbGlieG1sLnNwZWMuaW46IGdldCByaWQgb2YgdGhlIFNOQVAgc3VmZml4CgkqIGRvYy94bWwuaHRtbDogdXBkYXRlZCB0aGUgc3RhdHVzCgpNb24gSmFuIDI0IDE0OjMxOjA5IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbC1jb25maWcuaW46IHhtbC1jb25maWcgLS12ZXJzaW9uIHRvIGp1c3QgcmV0dXJuIHRoZQoJICB2ZXJzaW9uIG51bWJlcgoJKiB4cGF0aC5jOiBzb21lIGNsZWFudXAgdy5yLnQuIGF4aXMgd2hlbiB0aGUgY3VycmVudCBub2RlIGlzCgkgIGFuIGF0dHJpYnV0ZS4KCSogVE9ETzogdXBkYXRlZAoKVHVlIEphbiAxOCAxODo0NjowNiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmVkIGZvciBsaWJ4bWwtMS44LjUKCSogZG9jLyogcmVjb21waWxlZCB0aGUgZG9jdW1lbnRhdGlvbgoKMjAwMC0wMS0xNyAgSm9keSBHb2xkYmVyZyA8amdvbGRiZXJnQGhvbWUuY29tPgoKCSogY29uZmlndXJlLmluIDogV0FSTklORyBhdXRvY29uZiBzdWJ0bGV0eSBhbGVydCA6CgkgIFVzZSBBQ19DSEVDS19IRUFERVJTIHJhdGhlciB0aGFuIEFDX0NIRUNLX0hFQURFUgoJICB3aGVuIGxvb2tpbmcgZm9yIHpsaWIuaCBzbyB0aGF0IEhBVkVfWkxJQl9IIGlzIGRlZmluZWQuCgkqIGNvbmZpZy5oLmluIDogSGF2ZSBhICN1bmRlZiBmb3IgSEFWRV9aTElCX0ggc28gdGhhdCBpdCB3aWxsCgkgIGdldCBkZWZpbmVkIGJ5IEFDX0NIRUNLX0hFQURFUlMuCgpNb24gSmFuIDE3IDE3OjA0OjEyIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYzogZml4ZWQgYSBoaWRlb3VzIGJ1ZyBpbiB4bWxHZXRQcm9wKCkgdGhhbmtzIHRvCgkgIFJ1bmUuRGp1cmh1dXNAZmFzdC5ubwoKU2F0IEphbiAxNSAxNTowOTowNiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBUT0RPOiB1cGRhdGVkCgkqIHRyZWUuYywgcGFyc2VyLmM6IG1hZGUgc3VyZSB0aGF0IG9ubHkgbWVtb3J5IGFsbG9jIHByb2JsZW1zCgkgIGFuZCBpbnRlcm5hbCBwYXJzZXIgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIHdyaXRlIHRvIHN0ZG91dCBvcgoJICBzdGRlcnIuCgpUaHUgSmFuIDEzIDExOjQ5OjExIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYyA6IHJlc3RvcmVkIHhtbE5ld0dsb2JhbE5zIHNpbmNlIHRoaXMgc2VlbXMgdXNlZCBieQoJICBhIGxvdCBvZiBleGlzdGluZyBjb2RlIDotKCwgZml4ZWQgYSBidWcgaW4geG1sTmV3TnMKCSogbmFub2h0dHAuYzogZml4ZWQgYSBwcm9ibGVtIHdpdGggSU5DTFVERV9XSU5TT0NLCgkqIEhUTUxwYXJzZXIuYywgcGFyc2VyLmMsIGVudGl0aWVzLmMsIHZhbGlkLmMgOiByZW1vdmVkIGFsbCBjYWxscwoJICB0byBleGl0KCkgZnJvbSB0aGUgbGlicmFyeSBjb2RlLgoJKiB4cGF0aC5jLCBwYXJzZXIuYzogcmVtb3ZlZCBidWdzIG9yIHVudXNlZCBjb2RlIGRldGVjdGVkIGJ5IAoJICBXaW5kb3dzIGNvbXBpbGVycwoJKiBwYXJzZXIuYzogc3RhcnRlZCBhZGRpbmcgaW50ZXJmYWNlcyBmb3IgcGFyc2luZyB3ZWxsIGJhbGFuY2VkCgkgIFhNTCBmcmFnbWVudHMKCSogY29uZmlndXJlLmluOiByZWxlYXNpbmcgMS44LjQKCSogZG9jLyogOiByZWJ1aWx0IHRoZSBkb2NzCgpTdW4gSmFuICA5IDIzOjAzOjIwIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXSA6IGFkZGVkIHhtbE5ld0RvY0ZyYWdtZW50KCkgZm9yIERPTQoJKiB0ZXN0SFRNTC5jOiB1bmluaXRpYWxpemVkIHZhcmlhYmxlLgoKV2VkIEphbiAgNSAxNzoyOToxNyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvKiA6IHJlYnVpbGQgdGhlIGRvY3MKCldlZCBKYW4gIDUgMTc6MDg6NDMgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWNjb25maWcuaDogcmVhZGxpbmUgYW5kIGhpc3RvcnkgcGF0Y2gKCSogdmFsaWQuW2NoXTogYWRkZWQgeG1sUmVtb3ZlSUQoKSBhbmQgeG1sUmVtb3ZlUmVmKCkKCSogdHJlZS5jOiBhZGRlZCBjaGVjayBhbmQgaGFuZGxpbmcgd2hlbiBwb3NzaWJseSByZW1vdmluZyBhbiBJRAoJKiB0cmVlLmMsIEhUTUxwYXJzZXIuaCwgSFRNTHRyZWUuaDogZml4ZWQgZW50aXRpZXMgcGFyc2luZwoJICAgICBhbmQgc2F2aW5nLgoJKiB0ZXN0L0hUTUwvZW50aXRpZXMuaHRtbCByZXN1bHQvSFRNTC9lbnRpdGllcy5odG1sKiA6IHRlc3QgZm9yCgkgICAgIHZhcmlvdXMgZW50aXRpZXMgcmVmZXJlbmNlIGNhc2VzCgkqIHJlc3VsdC9IVE1MLyogOiBhcyBhIHJlc3VsdCBvdXRwdXQgb2Ygc29tZSB0ZXN0Y2FzZSBoYXZlCgkgICAgIGNoYW5nZWQKCSogSFRNTHBhcnNlci5jLCBwYXJzZXIuYzogZml4ZWQgYSBidWcgaW4gdGhlIHB1c2ggbW9kZSB0cmlnZ2VyZWQKCSAgICAgYnkgcHJldmlvdXMgZXhhbXBsZS4gYWRkZWQgeG1sUGFyc2VUcnlPckZpbmlzaCgpLgoJKiB4cGF0aC5oIHRyZWUuaCBwYXJzZXIuaCB2YWxpZC5oIHhtbElPLmggeGxpbmsuaCBlbmNvZGluZy5oCgkgIGVudGl0aWVzLmggZGVidWdYTUwuaCBIVE1McGFyc2VyLmg6IGNoYW5nZWQgdGhlIHdheSBzdHJ1Y3QgYXJlIAoJICBkZWNsYXJlZCB0byBhbGxvdyBndGstZG9jIHRvIGV4cG9zZSB0aG9zZQoJKiBwYXJzZXIuYzogY2xvc2VkIGJ1ZyAjNDk2MCAgCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbjogQXBwbGllZCBwYXRjaCBmcm9tIAoJICBBbGJlcnQgQ2hpbi1BLVlvdW5nIDxjaGluYUB0aGV3cml0dGVud29yZC5jb20+IGZvciBiZXR0ZXIgemxpYgoJICBhbmQgbWF0aC9zb2NrZXQgbGlicyBkZXRlY3Rpb24KCk1vbiBKYW4gIDMgMTg6Mjk6NDMgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluLCBNYWtlZmlsZS5hbTogbGluayB0ZXN0ZXIgYWdhaW5zdCByZWFkbGluZQoJKiBkb2MveG1sLmh0bWwgZG9jLyovKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jdW1lbnRhdGlvbiBwYWdlcwoKTW9uIEphbiAgMyAxMTo1ODowNSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF06IGFkZGVkIHhtbFJlbW92ZVByb3AKCSogd2luMzJjb25maWcuaC5pbiBuYW5vaHR0cC5jOiBhdm9pZCBpbmNsdWRpbmcgdGhlIFdpbmRvd3MKCSAgICBzb2NrZXQgc3R1ZmYgaW4gZXZlcnkgQyBmaWxlcwoJKiBwYXJzZXIuYzogcmVtb3ZlZCBhbiBpbmRldGVybWluYXRpb24geG1MRGVjbC9QSSh4bWwuLi4pIGluCgkgICAgdGhlIFhtTCBwYXJzZXIocykKCSogdGVzdC9uczQgcmVzdWx0L25zNCBldGMuLi46IGFkZGVkIHRlc3QgY2FzZSBmb3IgcHJldmlvdXMgcHJvYiAgICAKCSogdHJlZS5jOiB4bWxOZXdOcyB3YXNuJ3QgY2hlY2tpbmcgZm9yIGRvdWJsZSBkZWZpbml0aW9uCgkqIE1ha2VmaWxlLmluOiBmaXhlZCBhIHByb2JsZW0gd2l0aCBkaXN0LWhvb2sgZHVwbGljYXRlcwoJKiBwYXJzZXIuW2hjXSwgeG1sSU8uYzogZml4ZWQgdGhlIGxvYWRpbmcgb2YgZXh0ZXJuYWwgZW50aXRpZXMKCSAgICBBUElzLCBub3cgeG1sTG9hZEV4dGVybmFsRW50aXR5KCkgaXMgdXNlZCBldmVyeXdoZXJlIGFuZAoJICAgIHNldHRpbmcgdXAgYW4gYXBwIHNwZWNpZmljIGZyb250LWVuZCB1c2luZyB0aGUgCgkqIFNBWC5jIHBhcnNlci5jOiBzb21lIGZpeGVzLCBub3cgdGhlIHhodG1sIHNwZWMgdmFsaWRhdGVzCgkgICAgd2l0aCB0aGUgeGh0bWwgRFRELgoJKiBlcnJvci5jOiBmaXhlZCBjcmFzaGVzIGluIGNhc2Ugb2Ygbm8gaW5wdXQgc3RyZWFtICAgIAoJKiB0ZXN0L3ZhbGlkL1tkdGRzL10veGh0bWwqIDogYWRkZWQgdGhlIHhodG1sIHNwZWMgYW5kIGR0ZHMKCSAgICB0byB0aGUgdmFsaWRhdGlvbiB0ZXN0cyBhbmQgcmVzdWx0cwoKV2VkIERlYyAyOSAxNToyOTo1MiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLltjaF0gdGVzdEhUTUwuYzogYWRkZWQgcHVzaCBtb2RlIGZvciB0aGUgSFRNTCBwYXJzZXIKCSAgdG9vIGh0bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dCgpIGFuZCBodG1sUGFyc2VDaHVuaygpCgkqIHBhcnNlci5jOiBhIGJpdCBvZiBjbGVhbnVwLgoJKiBTQVguYywgSFRNTHBhcnNlci5jOiBzb21lIGF0dHJpYnV0ZXMgbWF5IG5vdCBoYXZlIHZhbHVlcyAoY29udHJhcnkKCSAgdG8gWE1MKSByZW1vdmVkIHRoZSBsYXN0IG1lbSBsZWFrIGtub3duCgkqIEhUTUx0cmVlLmM6IG91dHB1dCBtZXNzYWdlIGNsZWFudXAKCSogeG1sbWVtb3J5LmM6IGRpc3BsYXkgY29udGVudCBpbmZvIGFib3V0IG1lbW9yeSBibG9ja3MKCSogcmVzdWx0L0hUTUwvd2lyZWQuKiA6IG1pc3NpbmcgYXR0IHZhbHVlIHdhcm5pbmcgY2hhbmdlCgpUdWUgRGVjIDI4IDE3OjQyOjQxIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy8qIDogcmVidWlsdCB0aGUgZG9jdW1lbnRhdGlvbgoKVHVlIERlYyAyOCAxODo0NDoyMiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuW2NoXSBwYXJzZXJJbnRlcm5hbHMuaDogUHVzaCBwYXJzZXIgZm9yIFhNTCwKCSAgICAgc2VlbXMgdG8gd29yayBmaW5lIG5vdwoJKiB0ZXN0ZXIuYyBkZWJ1Z1hNTC5bY2hdOiBBZGRlZCBhbiBYTUwgc2hlbGwgZGVidWcgZmFjaWxpdHkgYW5kCgkgICAgIC0tcHVzaCBmb3IgcHVzaCB0ZXN0aW5nCgkqIHhwYXRoLltjaF0gOiBjbGVhbmVkIHVwIGZvciBTaGVsbCB1c2FnZSwgYWRkZWQgbWlzc2luZyBBUElzCgkqIHRlc3RTQVguYzogYWRkZWQgLS1wdXNoCgkqIEhUTUx0cmVlLltjaF0gdHJlZS5bY2hdOiBuZXcgZnVuY3Rpb25zIGZvciBkdW1waW5nIHBhcnRzIG9mIHRoZQoJICAgICBzdWJ0cmVlCgkqIHhtbElPLltjaF0gOiBlbnJpY2hlZCBBUEkgKyBmaXhlcyBmb3IgcHVzaCBtb2RlICAgICAKCSogZW50aXRpZXMuW2NoXTogYWRkZWQgdGhlIGVudGl0eSBjb250ZW50IGxlbmd0aCB0byB0aGUgc3RydWN0LgoJKiB4bWxtZW1vcnkuW2NoXTogbmV3IEFQSSB0byBzaG93IHRoZSBsYXN0IGVudHJpZXMgZm9yIHRoZSBzaGVsbAoJKiB2YWxpZC5jOiBhZGRlZCByZXF1aXJlZCBhdHRyaWJ1dGUgdGVzdGluZwoJKiBTQVguYzogdGhlIGNkYXRhIGNhbGxiYWNrIG5vdyBtZXJnZSBjb250aWd1b3VzIGZyYWdtZW50cwoJKiBIVE1McGFyc2VyLmM6IGNsZWFudXAgb2Ygc29tZSBtYWNyb3MKCldlZCBEZWMgMjIgMTI6MjA6NTMgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IGZpeCBmb3IgUElzIG5hbWUgc3RhcnRpbmcgd2l0aCB4bWwKCSogdHJlZS5jOiBmaXhlZCBhIHBvdGVudGlhbCBwcm9ibGVtIHdpdGggfHwgYW5kICYmIG9wcwoJKiAqLmMsIGNvbmZpZ3VyZS5pbiB3aW4zMmNvbmZpZy5oLmluIDogZ2VuZXJhdGUgd2luMzJjb25maWcuaCBmb3IKCSAgdGhvc2Ugb24gdGhlIE90aGVyIFNpZGUgIQoKVHVlIERlYyAyMSAxNzoyMjoxNyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSBzdHVwaWQgPSB2cy4gPT0gYnVnIDotKAoJKiBkb2MvZ25vbWUteG1sLnNnbWw6IHMvZ2xhZGUveG1sLwoKVHVlIERlYyAyMSAxNDoyOTozNCBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4sIGRvYy94bWwuaHRtbCA6IGJ1ZyBmaXggcmVsZWFzZSAxLjguMgoJKiBkZWJ1Z1hNTC5oIG5hbm9odHRwLmggeG1sLWVycm9yLmggeG1sbWVtb3J5LmggeHBhdGguaCA6IAoJICBIb3BlZnVsbHkgdGhlIGVuZCBvZiB0aGF0IHNpbGx5IEMrKyBpbmNsdWRlIHByb2JsZW0KCSogdHJlZS5bY2hdOiBBZGRlZCBhIGZldyBmdW5jdGlvbnM6IHhtbFJlcGxhY2VOb2RlLCB4bWxBZGRQcmV2U2libGluZywKCSAgICAgIHhtbEFkZE5leHRTaWJsaW5nLCB4bWxOb2RlU2V0TmFtZSBhbmQgeG1sRG9jU2V0Um9vdEVsZW1lbnQKCSogSFRNTHBhcnNlci5jIEhUTUxwYXJzZXIuaCBIVE1MdHJlZS5jOiBXaGVuIHNhdmluZyBIVE1MIHRyeSB0byBhdm9pZCAKCSAgICAgIHRyb3VibGVzIHdpdGggYXV0b2Nsb3NlZCBlbGVtZW50cyB3aGVuIHRoZSBzdHJlZSBzaGFwZSBkb2Vzbid0CgkgICAgICBmb2xsb3cgdGhlIER0RCBzcGVjcy4gQWRkZWQgaHRtbElzQXV0b0Nsb3NlZCgpIGFuZAoJICAgICAgaHRtbEF1dG9DbG9zZVRhZygpCgkqIHJlc3VsdC9IVE1MLyouaHRtKjogVXBkYXRlZCB0aGUgSFRNTCBleGFtcGxlcyByZWdyZXNzaW9uIHRlc3RzIG91dHB1dAoJKiBTQVguYyB0cmVlLmM6IGZpeGVkIGJ1ZyBvbiBkZWZhdWx0aW5nIG5hbWVzcGFjZXMgb24gYXR0cmlidXRlcwoJKiBkZWJ1Z1hNTC5jOiBmaXhlZCBhIGJ1ZyBvbiBwcmludGluZyBkZWZhdWx0IG5hbWVzcGFjZXMuCgkqIEhUTUx0cmVlLmM6IGZpeGVkIGEgcHJvYmxlbSB3aGVuIG91dHB1dGluZyBYTUwgcGFyc2VkIGRvY3MgYXMgSFRNTAoKTW9uIERlYyAyMCAxNjoyMDo1NSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiByZXN1bHQvSFRNTC8qLmh0bVtsXSA6IHVwZGF0ZWQgdGhlIEhUTUwgcmVncmVzc2lvbiB0ZXN0cyBhY2NvcmRpbmcKCSAgdG8gdGhlIG5ldyBvdXRwdXQKCSogeHBhdGguaCB4bWwtZXJyb3IuaCB2YWxpZC5oIHRyZWUuaCBwYXJzZXIuaCBlbnRpdGllcy5oIFNBWC5oCgkgIEhUTUx0cmVlLmggdHJlZS5jIGVudGl0aWVzLmM6IGhlYWRlcnMgdHdlYWtpbmdzIHRvIGF2b2lkIGEgbmFzdHkKCSAgcHJvYmxlbSBkdWUgdG8gaW50ZXJtaXggb2YgZXh0ZXJuICJDIiB7IC4uLiB9IGRlY2xhcmF0aW9ucyBmb3IgQysrCgkgIGFuZCByZWN1cnNpdmUgaW5jbHVkZXMgaW4gdGhlIGhlYWRlcnMKCjE5OTktMTItMjAgIENocmlzIExhaGV5ICA8Y2xhaGV5QHVtaWNoLmVkdT4KCgkqIEhUTUx0cmVlLmM6IE1hZGUgaXQgc28gdGhhdCBodG1sIG5vZGVzIHdpdGggYSBzaW5nbGUgY2hpbGQgZG8KCW5vdCBpbnNlcnQgYSBjYXJyaWFnZSByZXR1cm4gYmVmb3JlIG9yIGFmdGVyIHRoZSBjaGlsZCBub2RlLgoKU2F0IERlYyAxOCAxNjowNzowMyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4sIGRvYy94bWwuaHRtbCA6IGJ1ZyBmaXggcmVsZWFzZSAxLjguMQoJKiBwYXJzZXIuYzogZml4ZWQgYnVnICM0MzQ0CgkqIHhwYXRoLmggeG1sLWVycm9yLmggeGxpbmsuaCBuYW5vaHR0cC5oIGRlYnVnWE1MLmggU0FYLmggSFRNTHBhcnNlci5oCgkgIGFkZGVkIHRoZSBnbHVlIHRvIGF2b2lkIEMrKyBwcm9ibGVtcwoJKiBkb2MvKiA6IHJlZ2VuZXJhdGVkIHRoZSBkb2N1bWVudGF0aW9uCgpUaHUgRGVjIDE2IDE2OjE5OjI5IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYzogZml4ZWQgYSBidWcgaW50cm9kdWNlZCBpbiAxLjguMCBhbmQgYnJlYWtpbmcgZGVmYXVsdAoJICBuYW1lc3BhY2UgcmVjb2duaXRpb24sIGFuZCBEaWEgYXMgYSByZXN1bCA6LSgKCSogZW5jb2RpbmcuYzogY2xvc2VkIGJ1ZyAjMzk1MAoKV2VkIERlYyAxNSAxOToyMjoyMyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB2YWxpZC5jOiBkZWJ1Z2dpbmcgYSBwb3N0ZXJpb3JpIHZhbGlkYXRpb24sIGV4Y2VwdCBVUkkgZXhwYW5zaW9uCgkgIHN0dWZmIHRoaXMgc2hvdWxkIGJlIGZpeGVkIG5vdwoJKiBwYXJzZXJJbnRlcm5hbHMuaDogZml4ZWQgYSBidWcgaW4gSVNfQkFTRUNIQVIgcmVwb3J0ZWQgYnkKCSAgQ2FybCBOeWdhcmQgPGNueWdhcmRAYmVsbGF0bGFudGljLm5ldD4KCSogdGVzdGVyLmM6IGFkZGVkIC0tcG9zdHZhbGlkLCBjbGVhbmluZyBvZiB0aGUgY29kZQoJKiB0cmVlLltjaF06IGFkZGVkIHhtbERvY0dldFJvb3RFbGVtZW50KCkKCSAgClR1ZSBEZWMgMTQgMjA6MzA6MzQgUFNUIDE5OTkgUmFtaXJvIEVzdHJ1Z28gPHJhbWlyb0BlYXplbC5jb20+CgoJKiBTQVguaCwgdHJlZS5oIDogY2hhbmdlZCAnbmFtZXNwYWNlJyB0byAnbmFtZVNwYWNlJyB0byB3b3JrYXJvdW5kCgljKysgbG9zYWdlLgoKU3VuIERlYyAxMiAxMzowODoxNSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4sIGRvYy94bWwuaHRtbCA6IGJ1bXBlZCB0byAxLjguMAoJKiB4bGluay5bY2hdLCBNYWtlZmlsZS5hbSA6IGFkZGVkIGZyYW1ld29yayBmb3IgbGluayBkZXRlY3Rpb24KCSogcGFyc2VyLmg6IGFkZGVkIG5iQ2hhcnMgdG8gcGFyc2VyIGNvbnRleHQsIG5lZWRlZCBmb3IgY2xlYW51cC4KCSogeG1sbWVtb3J5LmM6IHJlbW92ZWQgYSBuYXN0eSBidWcgd2hlbiBvdXQgb2YgbWVtCgkqIHZhbGlkLltjaF06IGFkZGluZyBuYW1lc3BhY2Ugc3VwcG9ydCBmb3IgYXR0cmlidXRlIGRlY2wKCSogdGVzdGVyLmM6IGFkZGVkIC0tZGVidWdlbnQgb3B0aW9uCgkqIGRlYnVnWE1MLltjaF06IGFkZGVkIHhtbERlYnVnRHVtcEVudGl0aWVzKCkKCSogcGFyc2VyLmM6IGNsZWFudXAsIGF2b2lkaW5nIHVzZSBvZiBDVVJfUFRSIGxpa2UgcGxhZ3VlLCB1c2luZwoJICBidWZmZXJzIGluc3RlYWQsIHRoaXMgd2FzIHJlYWxseSBuZWVkZWQsIHZhbGlkYXRpb24gd2FzIGJyZWFraW5nCgkgIGluIHN0cmFuZ2Ugd2F5cyBkdWUgdG8gdGhhdC4gQWRkZWQgeG1sUGFyc2VTdHJpbmdQRVJlZmVyZW5jZSgpCgkgIGFuZCBvdGhlciBwYXJzaW5nIGZyb20gc3RyaW5ncyBmdW5jdGlvbnMuIEVudGl0aWVzIHByb2Nlc3NpbmcKCSAgbW9kaWZpZWQgYWdhaW4sIGJ1dCBQRVJlZiBhcmUgc3RpbGwgbm90IGhhbmRsZWQgY29ycmVjbHkgYnV0CgkgIHVubGVzcyB5b3UncmUgRXZlIE1hbGxlciB5b3Ugd29uJ3Qgbm90aWNlIDotKQoJKiBIVE1McGFyc2VyLmM6IGxhcmdlIGNoYW5nZXMgdG93YXJkIHJlbGlhYmlsaXR5LCBhbmQgc3dpdGNoZWQgdG8KCSAgbG93ZXJjYXNlIGludGVybmFsIHRhZ3MsIFhIVE1MIGlzIGxvd2VyY2FzZSwgc28gaXQgd2lsbCBoZWxwCgkgIHRoYXQgb3V0cHV0IGlzIGNsb3NlciB0byBuZXh0IHZlcnNpb24uCgkqIGRvYy8qIDogcmVnZW5lcmF0ZWQgdGhlIGRvY3VtZW50YXRpb24sIGl0IGlzIG5vdyBob3N0ZWQgYXQKCSAgaHR0cDovL3htbHNvZnQub3JnLyAoc2FtZSBiaXRzIEkganVzdCBib3VnaHQgdGhlIGRvbWFpbiA6LSkKCQoJCkZyaSBEZWMgIDMgMTM6NDY6MzIgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogU0FYLmgsIFNBWC5jLCBtYWtlZmlsZS5hbTogYWRkZWQgU0FYLmggbW9zdGx5IHVzZWZ1bCBmb3IgdGhlCgkgICAgICAgICBkb2MgZ2VuZXJhdGlvbgoJKiBwYXJzZXIuYzogZml4ZWQgYnVncyAjMzkwOCBhbmQgIzM5MzcgYW5kIGEgbWVtb3J5IGxlYWsKCSAgICAgICAgIGluIHRoZSBTQVggQVBJCgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBkb2MgbWFraW5nIHN1cmUgZXZlcnl0aGluZyBhcHBlYXJzIGluIHRoZQoJICAgICAgICAgSFRNTCBmaWxlcwoKV2VkIERlYyAgMSAxMDoyNzo0NyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF0gSFRNTHRyZWUuYywgZGVidWdYTUwuYywgY29uZmlndXJlLmluLCB4bWwtY29uZmlnLmluOgoJICAgICBhZGRlZCB0aGUgcGF0Y2ggZnJvbSBDYXJsIE55Z2FyZCA8Y255Z2FyZEBiZWxsYXRsYW50aWMubmV0PgoJICAgICB3aGljaCBhbGxvdyBpbXByZXNzaXZlIHNwZWVkIGltcHJvdmVtZW50IG9uIGRhdGFzZXQgd2l0aAoJICAgICBsYXJnZSB0ZXh0IHBpZWNlcywgYnV0IGF0IHRoZSBjb3N0IG9mIGJyb2tlbiBiaW5hcnkKCSAgICAgY29tcGF0aWJpbGl0eSBhbmQgc2xpZ2h0bHkgYmlnZ2VyIG1lbW9yeSB1c2FnZS4KCSAgICAgQ29uZmlndXJlIHdpdGggLS13aXRoLWJ1ZmZlcnMgdG8gYWN0aXZhdGUgdGhlbSwgdGhleQoJICAgICBhcmUgcHJvdGVjdGVkIHdpdGggWE1MX1VTRV9CVUZGRVJfQ09OVEVOVCBkZWZpbmUuCgkqIGVudGl0aWVzLltjaF0sIHBhcnNlci5jOiBhZGRlZCB4bWxDbGVhbnVwUHJlZGVmaW5lZEVudGl0aWVzKCksCgkgICAgIGdvYWwgaXMgMCBtZW1vcnkgbGVmdCBhbGxvY2F0ZWQgb25jZSBwYXJzZXIgaXMgbm8gbW9yZSB1c2VkCgkqIHRlc3REQVYuYywgdGVzdEhUTUwuYywgdGVzdFNBWC5jLCB0ZXN0WFBhdGguYzogbWFrZSBzdXJlIHdlCgkgICAgIGNhbGwgeG1sQ2xlYW51cFBhcnNlcigpIGFuZCB4bWxNZW1vcnlEdW1wKCkKCldlZCBOb3YgMjQgMTk6MDA6MDYgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdIHhtbElPLltjaF0gcGFyc2VyLmMgdmFsaWQuYzogY29kZSBjbGVhbnVwIHdpdGggLXBlZGFudGljCgkqIHBhcnNlci5bY2hdIGVuY29kaW5nLltjaF06IGFkZGVkIG1lbW9yeSBjbGVhbnVwIHJvdXRpbmVzCgkqIHBhcnNlci5jOiBjbG9zaW5nIGJ1ZyAjMzc4OAoJKiBkb2MvKjogcmVidWlsdCB0aGUgZG9jCgpUdWUgTm92IDIzIDExOjIzOjU1IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXTogY2xvc2luZyBidWcgMzc0OCwgYWRkZWQgeG1sTmV3RG9jUmF3Tm9kZSgpLCAKCSAgICAgICAgICAgICB4bWxOZXdUZXh0Q2hpbGQoKSBhbmQgeG1sU2V0Q29tcHJlc3NNb2RlKCkgYmVoYXZpb3VyLgoJKiB0ZXN0ZXIuYzogYWRkZWQgLS1jb21wcmVzcyBvcHRpb24KCSogZG9jLyo6IHJlYnVpbHQgdGhlIGRvY3VtZW50YXRpb24KCkZyaSBOb3YgMTkgMTg6NDE6MjggQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBidWdmaXhpbmcsIHRoZSBkYW1uIHRoaW5nIE1VU1Qgbm90IGNyYXNoIGV2ZW4KCSAgICAgICAgICAgICAgICBpZiBnaXZlbiAvcHJvYy9rY29yZSBhcyBpbnB1dCAhCgkqIGRvYy94bWwuaHRtbCBkb2MvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jdW1lbnRhdGlvbgoKVGh1IE5vdiAxOCAxNDo1NzoxOCBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogRml4ZWQgc29tZSB3cm9uZ2x5IHNwYWNlIGNvbGxhcHNpbmcgY29kZSBkdWUgdG8KCSAgICAgICAgICAgIGEgbWlzcmVhZGluZyBvZiB0aGUgc3BlYy4KCSogcmVzdWx0Lyo6IGZpeGVkIHRoZSBvdXRwdXQgYWNjb3JkaW5nbHkJICAgIAoKV2VkIE5vdiAxNyAxODoyODowNiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbmNvZGluZy5jOiBidWcgZml4IGFuZCB0eXBvcwoJKiB4bWxJTy5bY2hdIHBhcnNlci5jOiBmaXJzdCBiaXRzIHRvd2FyZCByZWFsIHByb2dyZXNzaXZlIHBhcnNpbmcKCSogcGFyc2VyLmM6IGFkZGVkIGF0dHJpYnV0ZSBub3JtYWxpemF0aW9uIGNsb3NpbmcgYnVnICMzNTk3CgkqIHRlc3QvYXR0KiByZXN1bHQvYXR0KiBTQVhyZXN1bHQvYXR0KjogdGVzdGNhc2UgZm9yIGF0dHJpYnV0ZQoJICAgIG5vcm1hbGl6YXRpb24KCk1vbiBOb3YgMTUgMTg6NTA6NTYgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiBjbG9zaW5nIGJ1ZyAjMzE2MyBieSBhZGRpbmcgZXh0cmEgZmxhZ3MgZm9yIHRoZQoJICAgICAgICAgICAgICAgIGNjIGNvbXBpbGVyIG9uIEhQLVVYCgpGcmkgTm92IDEyIDE3OjQxOjIwIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHZhbGlkLltjaF0gOiByZW1vdmVkIGEgdHlwbyBhbmQgYW4gZW51bWVyYXRlZCB0eXBlIGJ1ZyBpbiB0aGUKCSAgICAgICAgICAgICAgIHhtbEFkZEVsZW1lbnREZWNsKCkgZnVuY3Rpb24KCSogdHJlZS5jIDogSSBjaGFuZ2VkIHhtbFNldFByb3AoKSBhbmQgeG1sTmV3UHJvcCgpIHRvIGRvIHRoZQoJICAgIGNhbGwgdG8geG1sRW5jb2RlRW50aXRpZXNSZWVudHJhbnQoKSBzbyB0aGF0IHRoZSBmdW5jdGlvbnMgCgkgICAgTmV3LCBTZXQgYW5kIEdldCBhcmUgYXQgdGhlIHNhbWUgbGV2ZWwuCgkqIHBhcnNlci5jIEhUTUxwYXJzZXIuYzogZXh0cmEgbWVtb3J5IGFsbG9jYXRpb24gYnVnIGZvcgoJICAgIGF0dHJpYnV0ZXMgZGV0ZWN0ZWQgYnkgc29tZW9uZSB1c2luZyBsaWJ4bWwgaW4gZW1iZWRkZWQgc3lzdGVtcyA6LSkKClRodSBPY3QgMjggMTc6NDk6MjYgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbG1lbW9yeS5oOiB0dXJuZWQgb2ZmIG1lbSBkZWJ1ZyA6LVwKCk1vbiBPY3QgMjUgMTI6MTM6MjUgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBjbG9zZWQgYnVnICMyNzg0IGEgb25lIGxpbmUgZml4LCBidXQgd29ydGggcHVzaGluZwoJICAgICAgICAgICAgYSBuZXcgcmVsZWFzZSBvdXQKICAgICAgICAqIEhUTUxwYXJzZXIuYzogZml4ZWQgYXV0by1jbG9zZSBidWdzIG9uIGxpc3QgaXRlbXMsIHplcm9pbmcKCSAgICAgICAgICAgIHNvbWUgc3RydWN0dXJlcywgY29tbWVudHMgYmVmb3JlIGFuZCBhZnRlciB0aGUKCQkgICAgbWFpbiBlbGVtZW50LCBhbmQgb3RoZXIgbmFzdHluZXNzCgkqIEhUTUx0cmVlLmMgdHJlZS5jOiBhY2NvbW9kYXRlIHRoZSBleHRlbmRlZCBIVE1MIHN1cHBvcnRlZAkgICAgCgkqIGNvbmZpZ3VyZS5pbjogcHVzaGluZyAxLjcuNAoJKiB0ZXN0L2VudDggYW5kIHJlbGF0ZWQgb3V0cHV0cyA6IGFkZGVkIGEgbmV3IHRlc3QgZm9yIGJ1ZyAjMjc4NAoJKiB0ZXN0L0hUTUwvd2lyZWQuaHRtbCBhbmQgcmVsYXRlZCBvdXRwdXQ6IGEgbmFzdHkgSFRNTCBleGFtcGxlCgkqIE1ha2VmaWxlLmFtOiBpbXByb3ZlZCB0aGUgdGVzdCBzY3JpcHRzCgkqIGRvY3MvKiA6IHJlcmFuIHRoZSBkb2N1bWVudGF0aW9uIGV4dHJhY3RvciwgdXBkYXRlZCB4bWwuaHRtbAoKVGh1IE9jdCAxNCAxMDoyOTo1NiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jLCBIVE1MdHJlZS5jLCB0cmVlLmg6IGNvbXBsZXRlbHkgcmV2YW1wZWQgdGhlCgkgICAgIEhUTUxwYXJzZXIgYW5kIGRlYnVnZ2VkIHRoZSBIVE1MIHJlbGF0ZWQgY29kZS4gSFRNTCBkb2N1bWVudHMKCSAgICAgbm93IGhhdmUgdGhlaXIgb3duIHR5cGUKCSogZW50aXRpZXMuYzogZG8gbm90IGR1bXAgJmFwb3M7IGZvciBIVE1MIG91dHB1dAoJKiB4bWxtZW1vcnkuYzogaW1wcm92ZW1lbnQsIGJyZWFrcG9pbnQgbWVjaGFuaXNtCgkqIHRlc3RIVE1MLmM6IGFkZGVkIC0tc2F4IC0tcmVwZWF0IC4uLgoJKiBNYWtlZmlsZS5hbTogaW1wcm92ZWQgdGhlIEhUTUwgdGVzdHMKCSogdmFsaWQuW2NoXTogYWRkZWQgeG1sVmFsaWRHZXRWYWxpZEVsZW1lbnRzIGFuZAoJICAgICAgICAgICAgICB4bWxWYWxpZEdldFBvdGVudGlhbENoaWxkcmVuCgkqIHRlc3Rlci5jOiBhZGRlZCAtLWluc2VydCB0byB0ZXN0IHRoZSAyIG5ldyBmdW5jdGlvbnMKCSogdGVzdC8vKiByZXN1bHQvLyogU0FYcmVzdWx0Ly8qIDogcmVncmVzc2lvbiB0ZXN0IGNsZWFudXAKCSAgICAgICAgICAgICAgIGFuZCBleHRlbnNpb24uCgkqIGRvYy9odG1sIDogYWRkZWQgZG9jIGZvciBuZXcgbW9kdWxlcyBnbm9tZS14bWwteG1sbWVtb3J5Lmh0bWwgYW5kCgkgICAgICAgICAgICAgZ25vbWUteG1sLW5hbm9odHRwLmh0bWwKCk1vbiBPY3QgMTEgMTQ6MzE6NTggQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgcHJvYmxlbXMgd2l0aCBzb21lIGF1dG9jbG9zZSB0YWdzCgkqIHRyZWUuYzogZml4ZWQgWE1MIG91dHB1dCBwcm9ibGVtcy4gCgkqIHJlc3VsdC8qIFNBWHJlc3VsdC8qOiB1cGRhdGUgb2YgdGhlIHRlc3RzIG91dHB1dAoKU2F0IE9jdCAgOSAxMTowMjo1NyBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogTWFrZWZpbGUuYW06IEFydHVybyBwYXRjaCBmb3IgeG1sQ29uZi5zaCB2ZXJzaW9uIGluZm8KCSogcGFyc2VyLmM6IFRpbSBKb3NsaW5nIHBhdGNoIGZvciBzaW5nbGUgcXVvdGVkIGl0ZW1zCgkqIHRlc3Rlci5jOiBUaW0gSm9zbGluZyBwYXRjaCBmb3IgdGVzdGVyIG9wdGlvbnMgdXNhZ2UKCSogdHJlZS5oOiBpbmRlbnQgY2xlYW51cAoKRnJpIE9jdCAgOCAxNjozNTozNyBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIHBhcnNlci5oIDogRml4ZWQgcHJvYmxlbXMgd2l0aCBIVE1MIHBhcnNpbmcKCSAgICByZXBvcnRlZCBieSBLcmlzdGlhbiBIb2dzYmVyZyBLcmlzdGVuc2VuIDxob2dzYmVyZ0BkYWltaS5hdS5kaz4KCkZyaSBPY3QgIDggMTE6Mzc6MTEgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYyA6IFJhcGggcGF0Y2ggZm9yIGluaXRpYWxpemF0aW9uIG9mIENPUkJBIGZpZWxkcwoJKiBwYXJzZXIuYywgeHBhdGguYywgLi4uOiBtb2RpZmljYXRpb24gb2YgZG9jIGNvbW1lbnRzCgkqIHhwYXRoLmMgOiBhbGxvdyBzcGFjZXMgaW4geHBhdGggZXhwcmVzc2lvbnMKCk1vbiBTZXAgMjcgMTA6MTY6NDMgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbG1lbW9yeS5oOiB0dXJuaW5nIG9mZiBtZW1vcnkgZGVidWcgOi0oCgpTdW4gU2VwIDI2IDEzOjE2OjU0IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuW2NoXSA6IGFkZGVkIHhtbFNBWFVzZXJQYXJzZUZpbGUoKSBhbmQgeG1sU0FYVXNlclBhcnNlTWVtb3J5KCkKCSAgICAgICAgICAgICAgICBiZXR0ZXIgU0FYIGludGVyZmFjZXMuCgkqIHRlc3RTQVguYzogdXNlcyB0aGUgbmV3IFNBWCByb3V0aW5lLCBhdm9pZCBmZXRjaGluZyBhbnkgcmVtb3RlCgkgICAgICAgICAgICAgZW50aXR5LgoJKiBjb25maWd1cmUuaW46IDEuNy4yCgpGcmkgU2VwIDI0IDE2OjAxOjAxIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBsaWJ4bWwuc3BlYy5pbjogZml4ZWQgdGhlIFVSTAoJKiBkb2MveG1sLmh0bWw6IGltcHJvdmVkIHRoZSBkb2N1bWVudGF0aW9uIGZyb250LWVuZAoKRnJpIFNlcCAyNCAwMTowNjozNiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2h0dHAuYzogY29uZGl0aW9ubmVkIHJlZmVyZW5jZXMgdG8gc25wcmludGYgd2l0aCBIQVZFX1NOUFJJTlRGCgpGcmkgU2VwIDI0IDAwOjE1OjU4IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBsaWJ4bWwuc3BlYy5pbjogZml4ZWQgdGhlIGFscGhhIGNvbXBpbGUgcHJvYmxlbQoJKiBwYXJzZXIuW2NoXTogY2hhbmdlZCBlcnJubyB0byBlcnJObyBpbiB0aGUgcGFyc2VyIGNvbnRleHQgOi0oCgkqICouW2NoXTogY2hhbmdlZCBDSEFSIHRvIHhtbENoYXIgdG8gYXZvaWQgcHJvYmxlbSBvbiBXSU4zMgoJKiBkb2MveG1sLmh0bWw6IGNoYW5nZWQgQ0hBUiB0byB4bWxDaGFyCgkqIGRvYy9odG1sLyo6IHJlY29tcGlsZWQgdGhlIGRvY3VtZW50YXRpb24KCSogY29uZmlndXJlLmluOiAxLjcuMQoKV2VkIFNlcCAyMiAxMTo0MDozMSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmg6IG1vZGlmaWVkIHRoZSBwYXJzZXIgY29udGV4dCBzdHJ1Y3QgdG8gcmVnYWluIDEuNC4wCgkgICAgICAgICAgICBiaW5hcnkgY29tcGF0aWJpbGl0eQoJKiBwYXJzZXIuYywgeG1sLWVycm9yLmg6IGFkZGVkIGVycm5vIG90IHRlaCBjb250ZXh0IGFuZCBkZWZpbmVkCgkgICAgICAgICAgICBhIHNldCBvZiBlcnJvcnMgdmFsdWVzIHdpdGggdXBkYXRlIG9mIGVycm5vCgkqIG5hbm9odHRwLltjaF06IG1pbmltYWxpc3QgSFRUUCBmcm9udC1lbmQgZm9yIGZldGNoaW5nIHJlbW90ZQoJICAgICAgICAgICAgRFREcyBhbmQgZW50aXRpZXMKCSogKi5oLCAqLmM6IGNvbXBsZXRlIGNsZWFudXAgb2YgdGhlIHVzZSBvZiBjb25maWcuaCBhbmQgaW5jbHVkZQoJICAgICAgICAgICAgcHJvdGVjdGlvbiBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgc2V0dXAuCgkqIG92ZXJhbGxsIGRlYnVnZ2luZywgbWFpbnRlbmFuY2UgYW5kIGJ1Zy1maXhpbmcgb24gYWxsIG1vZHVsZXMKCSogdXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbgoJKiByZWFkeSBmb3IgMS43LjAKCldlZCBTZXAgIDggMjI6NDY6MTQgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyA6IGNsZWFudXAKCSogU0FYLmMgdmFsaWQuYyB2YWxpZC5oOiBhZGRlZCBJRC9JRFJFRiBjaGVja2luZwoJKiB0cmVlLmMgdHJlZS5oOiBleHRlbmRlZCBkb2Mgc3RydWN0dXJlIGZvciByZWZzCgkqIGNvbmZpZ3VyZS5pbjogMS42LjIKCSogcGFyc2VyLmM6IHBhdGNoZWQgYnVnIGluIFNBWCB1c2VyIGFyZyBjYWxsCgkqIHBhcnNlckludGVybmFscy5oOiBwYXRjaGVkIG1pc3NpbmcgY2xvc2UgaW4gQysrIHdyYXBwaW5nCgkqIHRlc3RYUGF0aC5jIHhwYXRoLmMgeHBhdGguaDogcHJlcGFyZWQgZm9yIGV4dGVuc2liaWxpdHksCgkgIGVzcGVjaWFsbHkgdXBjb21pbmcgWFBvaW50ZXIgaW1wbGVtZW50YXRpb24uCgkqIGRvYy94bWwuaHRtbDogYXVnbWVudGVkLCB0eXBvCgpTYXQgU2VwICA0IDIyOjQ4OjA1IENFU1QgMTk5OSBUaW11ciBCYWtleWV2IDxtY0BiYXQucnU+CgoJKiBkb2MvTWFrZWZpbGUuYW06IHJlcGxhY2VkICJpbnN0YWxsIC1kICIgd2l0aCAibWtpbnN0YWxsZGlycyIgLQoJbm90IGFsbCBpbnZvY2F0aW9ucyBvZiBpbnN0YWxsIHVuZGVyc3RhbmQgLWQuCgpTYXQgU2VwICA0IDIyOjIwOjA3IENFU1QgMTk5OSBUaW11ciBCYWtleWV2IDxtY0BiYXQucnU+CgoJKiBNYWtlZmlsZS5hbTogcHJlcGVuZCBhbGwgdGhlIHRlc3QqIGNhbGxzIHdpdGggJCh0b3BfYnVpbGRkaXIpIC0KCXRvIG1ha2UgJ2NoZWNrJyB3b3Jrcywgd2hlbiBidWlsZGRpciAhPSBzcmNkaXIuCgpTYXQgU2VwICA0IDIwOjI1OjQ2IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwgOiB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uCgpGcmkgU2VwICAzIDAwOjAxOjA4IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxtZW1vcnkuW2NoXSBNYWtlZmlsZS5hbSAgOmFkZGVkIGEgbWVtb3J5IHdyYXBwZXIgdG8gY2hhc2UKCSAgICAgIG5vdCBkZWFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzCgkqICouYyA6IHJlcGxhY2VzIGFsbCBjYWxscyB0byBtYWxsb2MoKSBmcmVlKCkgYW5kIHJlYWxsb2MoKSB0bwoJICAgICAgdGhlIHdyYXBwZXIgZnVuY3Rpb25zL21hY3JvcwoJKiB0cmVlLmMgOiByZW1vdmVkIG1lbW9yeSBsZWFrcyBkdWVzIHRvIGNhbGxpbmcgeG1sRnJlZU5vZGUoKQoJICAgICAgaW5zdGVhZCBvZiB4bWxGcmVlTm9kZUxpc3QoKQoKV2VkIFNlcCAgMSAxNDoxNTowOSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBjb3JyZWN0ZWQgYSBzdHVwaWQgYnVnIGxlYWRpbmcgdG8gY29yZSBkdW1wIGF0CgkgICAgICAgICAgICAgICAgdHJlZSBkZWFsbG9jYXRpb24uIFJlbW92ZWQgd2FybmluZ3MgaW5kaWNhdGVkIGJ5CgkJCVN0ZXBoYW5lLkNvbnZlcnN5QGxyaS5mcgoJKiBlbnRpdGllcy5jOiBGaXhlcyBZZXQgQW5vdGhlciBTdHVwaWQgQnVnLCBlbnRpdGllcyB3ZXJlIG5vdAoJICAgICAgICAgICAgICBsb29rZWQgZm9yIGluIHRoZSBleHRlcm5hbCBzdWJzZXQKCk1vbiBBdWcgMzAgMTM6MjI6MjYgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jIHZhbGlkLltjaF0geHBhdGguYzogcGF0Y2hlZCBjb21waWxhdGlvbiB3YXJuaW5ncyByZXBvcnRlZAoJICBvbiBTR0kgYnkgU3RlcGhhbmUuQ29udmVyc3lAbHJpLmZyCgpTdW4gQXVnIDI5IDIyOjI3OjI5IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhbGwgLmggOiBjaGFuZ2VkIHRoZSBwcm90b3R5cGUgZGVjbGFyYXRpb24gaW5kZW50IGFzIGluIGd0awoJKiBtb3N0IC5jIDogd29ya2luZyBvbiByZWR1Y2luZyB0aGUgVE9ET3MgaW4gdGhlIGNvZGUKCSogbW9zdCAuYyA6IGNsZWFudXAgdGhvdWdoIC1wZWRhbnRpYyBhbmQgSW5zdXJlKysKCSogaW1wcm92ZW1lbnRzIG9uIHZhbGlkYXRpb24gSUQgY2hlY2tpbmdzLgoJKiB0cmVlLltjaF0gU0FYLmM6IGFkZGVkIHN1cHBvcnQgZm9yIG5hbWVzcGFjZSBvbiBhdHRyaWJ1dGVzICMyMDIyCgkqIHhtbC1jb25maWcuaW46IGNsb3NlZCAjMTgxMAoKTW9uIEF1ZyAxNiAwMzoyNzozOCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5oLCB2YWxpZC5jLCB2YWxpZC5oOiBtb3JlIHdvcmsgb24gdmFsaWRpdHksIElEcwoJKiB4cGF0aC5jOiBhZGRlZC9maXhlZCBjb21wYXJpZG9uIGFuZCBlcXVsaXR5LCBhZGRlZCBhIG5ldyBpc2luZgoJICBkZWZpbml0aW9uIGZvciBBSVgKClN1biBBdWcgMTUgMjE6MTU6MTcgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1ha2VmaWxlLmFtIGxpYnhtbC5zcGVjLmluOiBjb3JyZWN0ZWQgbWlzc2luZyB4bWxDb25mLnNoIGluCgkgIHRoZSBkaXN0cmlidXRpb24gZHVlIHRvIGEgY3V0J24gcGFzdGUgZXJyb3IgYXQgbGFzdCBjb21taXQKClR1ZSBBdWcgMTAgMjA6Mjg6MDkgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogdXBncmFkZWQgdG8gdmVyc2lvbiAxLjQuMAoJKiB2YWxpZC5bY2hdLCBTQVguYywgcGFyc2VyLltjaF0gcGFyc2VySW50ZXJuYWxzLmggLi4uCgkgIEJpZyB1cGRhdGUsIGFkZGVkIGEgbGFyZ2UgcGFydCBvZiB0aGUgdmFsaWRhdGlvbiBwcm9jZXNzLAoJICBpdCBzaG91bGQgYmUgdXNhYmxlLCBidXQgc29tZSBwYXJ0cyBhcmUgbWlzc2luZwoJKiB4cGF0aC5jOiBpbXByb3ZlZCB0aGUgaW1wbGVtZW50YXRpb24gdy5yLnQuIHJvb3QuCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCBtb3JlIHRlc3RzCgkqIHRlc3QgYW5kIHJlc3VsdCB0cmVlczogYWRkZWQgYSBsb3Qgb2YgdGVzdHMKCSogbGlieG1sLnNwZWMuaW46IGV4cG9ydCBsaWJ4bWwuc28uMCBhbmQgbGlieG1sLnNvLjEKClR1ZSBBdWcgMTAgMTE6MzM6NDEgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEFkZGVkIGFuIEhBQ0tJTkcgZmlsZQoKVHVlIEp1bCAyNyAyMTo0MzowMCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKICAgICAgICAqIHhwYXRoLltjaF0gOiBpbXByb3ZlbWVudHMgYW5kIGRlYnVnIG9mIHRoZSBYUGF0aCBpbXBsZW1lbnRhdGlvbgogICAgICAgICogcGFyc2VyLmMsIEhUTUxwYXJzZXIuYyA6IG1vZGlmaWVkIHRoZSBwYXJzZXJzIHRvIGJlIHByb2dyZXNzaXZlCgkqIHRyZWUuW2NoXSA6IGV4dGVuZGVkIHRoZSBCdWZmZXIgcHJvbWl0aXZlcwoJKiB4bWxJTy5bY2hdIDogYWRkZWQgYmFzaWMgSS9PIHJvdXRpbmVzIHByb3ZpZGluZyBwcm9ncmVzc2l2ZQoJICBwYXJzaW5nIGFuZCByZWFkeSBmb3IgSTE4TiBjb252ZXJzaW9uIHBsdWdpbnMKCSogU0FYcmVzdWx0LyogOiB0aGUgU0FYIGNhbGxiYWNrIHNlcXVlbmNlIG1heWJlIHNsaWdodGx5IGRpZmZlcmVudAoJICBub3cKCSogdGVzdCouYyA6IGltcHJvdmVkL3VwZGF0ZWQgdGhlIHRlc3RzIHByb2dyYW1zCgkqIGRvYy8qIDogcmVjb21waWxlZCB0aGUgZG9jcy4KCjE5OTktMDctMjYgIE1pY2hhZWwgTWVla3MgIDxtaWNoYWVsQGVkZW5wcm9qZWN0Lm9yZz4KCgkqIHRyZWUuaDogQWRkIGNvbnN0IHRvICdjb250ZW50JyBpbiB4bWxOZXdEb2NOb2RlLCB4bWxOZXdDaGlsZAoKCSogdHJlZS5jOiBEaXR0by4KClRodSBKdWwgMTUgMTY6MTc6MTYgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogdXBncmFkZWQgdG8gdmVyc2lvbiAxLjQuMAoJKiB4cGF0aC5jLCB4cGF0aC5oLCB0ZXN0WFBhdGguYywgbWFrZWZpbGUuYW06IGFkZGVkIGNvZGUgZm9yIHRoZSBYUGF0aAoJICBkcmFmdCBmcm9tIFczQy4gV2lsbCBiZSB1c2VkIGJ5IFhQb2ludGVyLCBYbGluaywgWFNMLCBhbmQgcG9zc2libHkKCSAgWE1MIHF1ZXJ5IGxhbmd1YWdlLCBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGggZm9yIG1vcmUgZGV0YWlscy4KCSogcGFyc2VyLmMsIHBhcnNlci5oOiBhZGRlZCBDSEFSKiByZWxhdGVkIHN0cmluZyBmdW5jdGlvbnMgZm9yIFhQYXRoCgkqIEhUTUxwYXJzZXIuW2NoXSwgSFRNTHRyZWUuYzogYSBiaXQgb2YgY2xlYW51cCBvbiBlbnRpdGllcy4KCSogZG9jL2dub21lLXhtbC5zZ21sLCBkb2MvaHRtbC8qIDogYWRkZWQgWFBhdGggYW5kIEhUTUwgZG9jdW1lbnRhdGlvbiwKCSAgcmVidWlsZCB0aGUgZG9jcy4KCSogTWFrZWZpbGUuYW0sIHRlc3QvWFBhdGgvKiwgcmVzdWx0L1hQYXRoLyo6IGFkZGVkIGFuIFhQYXRodGVzdHMgdGFyZ2V0CgkgIGFuZCByZWdyZXNzaW9uIHRlc3RpbmcgY2FwYWJpbGl0aWVzIGZvciBYUGF0aC4KCk1vbiBKdWwgMTIgMTI6MzY6MzkgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCBIVE1McGFyc2VyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBKb2huIEVsbHNvbiA8ZWxsc29uQGx1Y2VudC5jb20+CgkgIGNsb3NpbmcgYnVnICMxNjQ2CgpNb24gSnVsIDEyIDExOjA0OjQ0IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBNYWtlZmlsZS5hbSwgZXhhbXBsZS9NYWtlZmlsZS5hbTogY2xvc2VkIGJ1ZyAjMTY4MwoKU3VuIEp1bCAxMSAxODoxNjozNCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZXhhbXBsZS9NYWtlZmlsZS5hbSwgY29uZmlndXJlLmluOiBhZGRlZCB0aGUgbWFrZWZpbGUgZm9yIHRoZQoJICBnam9icmVhZCBleGFtcGxlCgpTYXQgSnVsIDEwIDE0OjE5OjExIENFU1QgMTk5OSBUb21hc3ogS7NvY3prbyAgPGtsb2N6ZWtAcGxkLm9yZy5wbD4KCiAgICAgICAgKiBkb2MvTWFrZWZpbGUuYW06CiAgICAgICAgLSBmaXggd2hpY2ggYWxsb3cgIm1ha2UgaW5zdGFsbCBERVNURElSPTwvaW5zdGFsbC9wcmVmaXg+Ii4KCkZyaSBKdWwgIDkgMTI6MTA6MjQgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyBwYXJzZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIEpvaG4gRWxsc29uIDxlbGxzb25AbHVjZW50LmNvbT4KCSAgd2hpY2ggZml4ZWQgYSBwcm9ibGVtIG9uIHRoZSBmaWxlIHJlYWRpbmctY29kZS4KCldlZCBKdWwgIDcgMDk6Mjg6NDMgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuW2NoXSwgSFRNTHRyZWUuW2NoXTogbW9yZSB3b3JrIGZvciBIVE1MIHBhcnNpbmcgYW5kCgkgIG91dHB1dC4KICAgICAgICAqIE1ha2VmaWxlLmFtLCB0ZXN0L0hUTUwvKiwgcmVzdWx0L0hUTUwvKjogYWRkZWQgSFRNTHRlc3RzIHRhcmdldGVzdEhUTUx0CgpXZWQgSnVsICA3IDAwOjI1OjQyIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuaCA6IE9vcHMgcmVtb3ZlZCB0aGUgYmluYXJ5IGNvbXBhdGliaWxpdHkgcHJvYmxlbQoJKiBIVE1McGFyc2VyLltjaF0sIEhUTUx0cmVlLmggOiBNb3JlIHdvcmsgb24gdGhlIEhUTUwgcGFyc2UvZHVtcAoJKiBwYXJzZXIuYywgSFRNTHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoZXMgZm9yIHJlYWRpbmcgZnJvbSBzdGRpbgoKTW9uIEp1bCAgNSAxODo0NTozMSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIGVudGl0aWVzLmMsIHZhbGlkLmM6IGNsZWFudXAgYnVnICMxNTkxCgkqIGNvbmZpZ3VyZS5pbjogY2xlYW51cCBidWcgIzE1OTIKCSogSFRNTHBhcnNlci5bY2hdLCB0ZXN0SFRNTC5jOiBzdGFydGVkIGFkZGluZyBhbiBIVE1MIHBhcnNlciB1c2luZwoJICB0aGUgc2FtZSB0cmVlIGJhY2stZW5kLiBIZW5jZSBnZG9tZSB3aWxsIGJlIGF2YWlsYWJsZSBmb3IgaXQuCgkqIGRvYy9NYWtlZmlsZS5hbTogY2xvc2UgYnVnICM2MTcKClNhdCBKdW4gMjYgMjM6MzY6MzggRURUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IGFsbG9jdGF0ZSBhIHBlciBwYXJzZXIgY29udGV4dCBTQVggaW50ZXJmYWNlIGJsb2NrCgpUdWUgSnVuIDIyIDIzOjQ2OjMyIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiByZWxlYXNlZCAxLjMuMCB3aXRoIHhtbEVuY29kZUVudGl0aWVzIHJlc3RvcmluZyBvbGQgYmVoYXZpb3VyCgkgIGFuZCB4bWxFbmNvZGVFbnRpdGllc1JlZW50cmFudCB3aXRoIHRoZSBjb3JyZWN0IG9uZSA6LVwKCk1vbiBKdW4gMjEgMTQ6MDc6NTMgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbW1pdCBvZiBteSBpbnRlcm5hbCBYTUwgYmFzZSBjaGFuZ2VzLCBxdWl0ZSBhIGxvdCBvZgoJICBjaGFuZ2VzLCBjbGVhbnVwcywgYmV0dGVyIGVudGl0aWVzIHN1cHBvcnQsIGZyYW1ld29yayBmb3IKCSAgbmV3IEkvTyBhbmQgY2hhcnNldCBkZXRlY3Rpb24gYW5kIGhhbmRsaW5nCgkqIEZpeGVkIHRoZSBjb25maWd1cmUvTWFrZWZpbGUgc3R1ZmYgdG8gZ2VuZXJhdGUgc2hhcmVkIGxpYnMKCSAgd2l0aCB0aGUgcHJvcGVyIHZlcnNpb24gaW5mbywgc28gd2UganVtcGVkIG9uIHJldiBmcm9tCgkgIDAuMC4wIHRvIDEuMi4wICEgVGhlIGJpbmFyeSBpbnRlcmZhY2VzIGhhdmUgYmVlbiBicm9rZW4sCgkgIHhtbEVuY29kZUVudGl0aWVzKCkgcmVzdWx0IG5lZWQgdG8gYmUgZnJlZWQgbm93LCBhbmQgYSBzdHJpbmcKCSAgeG1sUGFyc2VyVmVyc2lvbiBwcm92aWRlIHRoZSBjdXJyZW50IGxpYnJhcnkgdmVyc2lvbi4KClR1ZSBKdW4gMTUgMTQ6MjQ6MTkgMTk5OSAgUmFwaCBMZXZpZW4gIDxyYXBoQGFjbS5vcmc+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSBidWZmZXIgb3ZlcnJ1biBmb3Igd2hlbiB5b3UgaGF2ZSBhIHZlcnkgbG9uZwoJYXR0cmlidXRlIHdpdGggbm8gZW50aXRpZXMgaW4gaXQuCgpNb24gSnVuIDE0IDAwOjE3OjUwIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhZGRlZCBleGFtcGxlIGRpcmVjdG9yeQoJKiBhZGRlZCBleGFtcGxlL2dqb2JzLnhtbCBnam9icmVhZC5jLCBzdGlsbCBuZWVkIGEgTWFrZWZpbGUuaW4KCldlZCBKdW4gIDIgMTk6NDA6NTggQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFJlbGVhc2Ugb2YgbGlieG1sLTEuMSwgbmVhcmx5IGV2ZXJ5dGhpbmcgaGFzIGJlZW4gdG91Y2hlZCBmb3IKCSAgdGhpcy4KCSogQWRkZWQgbW9yZSByZWdyZXNzaW9uIHRlc3RzCgkqIFVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24KClNhdCBNYXkgMjkgMTM6MzQ6NDIgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXTogdW5pZmllZCB0aGUgWE1MX05PX0NPUkJBIGRlZmluZXMuCgkqIHBhcnNlci5jIGVuY29kaW5nLltjaF06IHN0YXJ0ZWQgcGx1Z2dpbmcgaW4gY2hhciBlbmNvZGluZyBkZXRlY3Rpb24KCkZyaSBNYXkgMjggMjI6NTg6NDIgRURUIDE5OTkgTWFuaXNoIFZhY2hoYXJhamFuaSA8bXZhY2hoYXJAdmdlci5ydXRnZXJzLmVkdT4KCgkqIHRyZWUuYzogKHhtbFNhdmVGaWxlKSAtIHJlbW92ZWQgZG91YmxlIGNhbGwgb2YgeG1sQ29udGVudER1bXAuICAKCSAgQWxzbyBmcmVlZCBhbGxvY2F0ZWQgYnVmZmVyLgoKV2VkIEFwciAyMSAyMjowNzozNSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoJKiBwYXJzZXIuW2NoXSB0cmVlLltjaF0gZW50aXRpZXMuW2NoXSB2YWxpZC5bY2hdIDogcmVtb3ZlZCB0aGUgbWFpbgoJICByZWVudHJhbmN5IHByb2JsZW0gYXQgcHJpbnRpbmcuIE9uZSBpcyBsZWZ0IGluIGVudGl0aWVzLmMsIHRvCgkgIHJlbW92ZSBBU0FQCgkqIHRlc3RTQVguYyA6IGFkZGVkIGEgdGVzdCBleGFtcGxlIHNob3dpbmcgdGhlIHVzZSBvZiB0aGUgU0FYIAoJICBpbnRlcmZhY2UgaWYgb25lIGRvZXNuJ3Qgd2FudCB0byBidWlsZCB0aGUgRE9NIHRyZWUuCgkqIGh0bWwvZ25vbWUteG1sLSouaHRtbCBodG1sL2luZGV4LnNnbWw6IHJlZ2VuZXJhdGVkIHRoZSBkb2N1bWVudGF0aW9uCgpNb24gQXByICA1IDE0OjE0OjQwIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuW2NoXSB0cmVlLltjaF0gU0FYLmMsIHBhcnNlckludGVybmFscy5oIHZhbGlkLltjaF06CgkgIGxhcmdlIHJldmFtcGluZyBvZiB0aGUgcGFyc2VyIHRvIHVzZSBTQVggY2FsbGJhY2tzCgkgIGh0dHA6Ly93d3cubWVnZ2luc29uLmNvbS9TQVgvIChvciBhdCBsZWFzdCBhIEMgbGlrZSBpbnRlcmZhY2UKCSAgYSBsYSBFeHBhdCkuIEl0J3Mgbm93IHBvc3NpYmxlIHRvIHNldCB1cCB5b3VyIG93biBjYWxsYmFja3MKCSAgYW5kIHRoZSBwYXJzZXIgd2lsbCBub3QgYnVpbGQgYSBET00gdHJlZS4KCSogdGVzdC8qIHJlc3VsdC8qOiB1cGRhdGVkIHRoZSB0ZXN0IHN1aXRlLCBJIGZpbmFsbHkgcmVtb3ZlZAoJICB0aGUgb2xkIE5hbWVzcGFjZSBkcmFmdCBzdXBwb3J0IChQSSBiYXNlZCkuCgpGcmkgQXByICAyIDE3OjU3OjMyIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBNYWtlZmlsZS5hbTogYWRkZWQgdGVzdCByZXN1bHQgdG8gRVhUUkFfRElTVCBmb3IgbWFrZSB0ZXN0cwoKV2VkIE1hciAyNCAyMTozNzowMiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgcGFyc2VySW50ZXJuYWxzLmg6IG1vdmVkIHRoZSBjaGFycyBtYWNybyBkZWZpbml0aW9ucwoJICB0byBwYXJzZXJJbnRlcm5hbHMuaAoJKiBwYXJzZXIuYywgZXJyb3IuYzogYXBwbGllZCBwYXRjaGVzIGZyb20gIktudXQgxWtlc3NvbiIKCSAgPGthQHMyLmNoYWxtZXJzLnNlPiBmb3IgY2xlYW4gY29tcGlsYXRpb24gdW5kZXIgTVNWQyA2IDotbwoKVHVlIE1hciAyMyAxMToxMDoxNSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWwtY29uZmlnLmluIDogYXBwbGllZCBwYXRjaCB0byBtYWtlIC0tdmVyc2lvbiB3b3JrCgoxOTk5LTAzLTA1ICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogTWFrZWZpbGUuYW0gKGNoZWNrLWxvY2FsKTogQWxpYXMgZm9yIGB0ZXN0cycgdGFyZ2V0LiAgVGhpcyB3aWxsCgljYXVzZSBgbWFrZSBjaGVjaycgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nLgoJKHRlc3RzKTogRG9uJ3QgcnVuIHRlc3RzIGluIHNyY2Rpci4gIEFsc28sIHJlcGxhY2VkIGNhbGxzIHRvCgliYXNlbmFtZSB3aXRoIGEgYHNlZCcgImVxdWl2YWxlbnQiLgoKRnJpIE1hciAgNSAwNzoyMzo1MyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBSZW5hbWVkIGVycm9yLmggdG8geG1sLWVycm9yLmgsIGNvcnJlY3RlZCBNYWtlZmlsZS5hbSB0byBsaXN0CgkgIGl0IGluIHRoZSBoZWFkZXIgYW5kIG5vdCB0aGUgc291cmNlcywgdXBkYXRlZCB0aGUgZG9jLgoJICBUaGFua3MgdG8gVGltIE1vb25leSA8bW9vbmV5QGRvZ2JlcnQuY2MubmRzdS5ub2Rhay5lZHU+IGZvcgoJICBwb2ludGluZyB0aGlzIG91dC4KCk1vbiBNYXIgIDEgMTM6Mjc6MTcgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIHBhcnNlci5oLCBwYXJzZXJJbnRlcm5hbHMuaDogbWVtb3J5IGxlYWsgaHVudGluZywKCSAgZXhwb3J0ZWQgdGhlIGlucHV0U3RyZWFtIHJvdXRpbmVzLgoJKiBkb2MvaHRtbC8qIDogdXBkYXRlZCBhY2NvcmRpbmdseQoKU3VuIEZlYiAyOCAyMjo1MTozMyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgcGFyc2VyLmgsIHBhcnNlckludGVybmFscy5oOiBhZGRlZCBhIGZldyBleHRyYQoJICBpbnRlcm5hbCBjYWxscyB0byBhbGxvY2F0ZSBhbmQgZnJlZSBwYXJzZXIgY29udGV4dHMgLi4uCgkqIGRvYy9odG1sLyogOiB1cGRhdGVkIGFjY29yZGluZ2x5CgpUaHUgRmViIDI1IDExOjUyOjI0IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiwgTWFrZWZpbGUuYW0sIGRvYy9tYWtlZmlsZS5hbSA6IEdlbmVyYWwgY2hhbmdlcyBmb3IKCSAgMS4wLjAgcmVsZWFzZSBhbmQgaW5jbHVkaW5nIHRoZSBnZW5lcmF0ZWQgSFRNTCBkb2N1bWVudGF0aW9uLgoKVGh1IEZlYiAyNSAwOTo0NDo1MiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBtYWtlZmlsZS5hbSA6IGFkZGVkIHBhcnNlckludGVybmFscy5oLCBvb3BzLgoKTW9uIEZlYiAyMiAxMToyNDo1NiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXJJbnRlcm5hbHMuaDogYWRkZWQgdGhpcyBoZWFkZXIgZ2l2aW5nIGFjY2VzcyB0byB0aGUgcGFyc2VyCgkgIGludGVybmFsIGZ1bmN0aW9ucy4KCSogZG9jL01ha2VmaWxlLmFtIDogYWRkZWQgYSByZWJ1aWxkIHRhcmdldCB3aGljaCByZWJ1aWxkcyB0aGUgZnVsbAoJICBzZXQgb2YgZG9jdW1lbnRhdGlvbnMKCSogcGFyc2VyLltjaF0gdHJlZS5bY2hdIHZhbGlkLltjaF06IHNlcmlvdXMgdXBkYXRlcyB3LnIudC4gcGFyc2luZwoJICB0aGUgaW50ZXJuYWwgc3Vic2V0LiAKCSogKi5jICouaDogbW9kaWZpY2F0aW9ucyBuZWVkZWQgdG8gZ2VuZXJhdGUgdGhlIGRvY3VtZW50YXRpb24gdXNpbmcKCSAgZ3RrLWRvYywgY2xlYW51cCBvZiBmdW5jdGlvbnMgYmxvY2tzLCByZW9yZ2FuaXNhdGlvbiBvZiBzdHJ1Y3QKCSAgZGVjbGFyYXRpb25zLgoKVHVlIEZlYiAxNiAxNzoyNzoyOSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBNYWtlZmlsZS5hbSwgc3BlYywgZG9jL01ha2VmaWxlLmFtIDogdXBncmFkaW5nIHRvIDAuOTkuOCwgZml4aW5nCgkgIHRoZSB0YXIgYW5kIHNwZWMgZmlsZSB0byBpbmNsdWRlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRvYy4KCjE5OTktMDItMTMgIE51bm8gRmVycmVpcmEgIDxubXJmQHJubC5pc3QudXRsLnB0PgoKCSogZG9jLy5jdnNpZ25vcmU6IEFkZGVkIHRoaXMgZmlsZS4KCk1vbiBGZWIgIDggMTk6Mjc6NTYgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBmaXhlZCB4bWxHZXRQcm9wIHRvIHJldHVybiAiIiB3aGVuIHRoZSBhdHRyaWJ1dGUKCSAgZXhpc3RzLCBldmVuIGlmIHRoZSBub2RlLWxpc3QgaXMgTlVMTC4KCk1vbiBGZWIgIDggMTY6MTA6MTUgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBwYXRjaGVkIGFuIGVycm9yIG91dHB1dHRpbmcgZW1wdHkgYXR0cmlidXRlIHZhbHVlcy4KCSogTWFrZWZpbGUuYW0gYW5kIGRvYy9tYWtlZmlsZS5hbTogaGF2ZSBiZWVuIHVwZGF0ZWQgZHVyaW5nIHRoZQoJICB3ZWVrLWVuZC4gU29ycnkgZm9yIGFuIGVtcHR5IENWUyBsb2csIEkgZ290IGEgc2hlbGwgcHJvYmxlbS4KCk1vbiBGZWIgIDEgMTI6MTA6MTMgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5oOiBjbGVhbmVkIHVwIHVzaW5nIGVudW1zIGluc3RlYWQgb2YgZGVmaW5lcwoJKiBwYXJzZXIuYywgdmFsaWQuW2NoXTogbW9yZSB3b3JrIG9uIHBhcnNpbmcvb3V0cHV0IG9mIGVsZW1lbnQKCSAgZGVjbGFyYXRpb25zCgpTdW4gSmFuIDMxIDIyOjA2OjQ4IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHZhbGlkLltjaF0sIHRyZWUuYywgcGFyc2VyLmMgOiBtb3JlIHdvcmsgdG93YXJkIGZ1bGwgcGFyc2luZwoJICBvZiBYTUwgRFREcy4KCSogUkVBRE1FOiBhZGRlZCBpbmZvcm1hdGlvbnMgYWJvdXQgbWFpbGluZy1saXN0IGFuZCBvbi1saW5lCgkgIGRvY3VtZW50YXRpb24KCjE5OTktMDEtMjcgIFJhamEgUiBIYXJpbmF0aCAgPGhhcmluYXRoQGNzLnVtbi5lZHU+CgoJKiBjb25maWd1cmUuaW4gKFhNTF9JTkNMVURFRElSKTogVXNlIC1JIG5vdCAtTCBmb3IgaW5jbHVkZXMuCgpTdW4gSmFuIDE3IDIwOjA2OjM2IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCB0cmVlLltjaF0gOiBtb3JlIHdvcmsgdG93YXJkIGNvbmZvcm1hbmNlIHRlc3RpbmcsCgkgIGFkZGVkIGEgbGFzdCBlbGVtZW50IHRvIGFjY2VsZXJhdGUgcGFyc2luZyBvZiB2ZXJ5IGZsYXQgc3RydWN0dXJlcwoJICBzdGFydGVkIHdvcmtpbmcgb24gaW50ZXJuYWwgc3Vic2V0IEVsZW1lbnQgY29udGVudCBkZWNsYXJhdGlvbi4KCSogdmFsaWQuW2NoXSA6IGZpcnN0IGN1dCBhdCBhZGRpbmcgY29kZSB0b3dhcmQgdmFsaWRhdGlvbi4KCSogcHJldmlvdXMgY2hhbmdlcyBoYWQgYWxzbyBzbWFsbCBpbXBhY3Qgb24gbW9zdCBmaWxlcywgZXNwZWNpYWxseQoJICB0aGUgY29uZm9ybWFuY2UgdGVzdGluZyB1c2luZyBKYW1lcyBDbGFyayB0ZXN0IHN1aXRlLgoKU3VuIEphbiAxNyAxNDo0NTowNiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0ZXN0LyogOiB1cGRhdGVkIHRoZSBleGFtcGxlcywgbW9zdCBvZiB0aGVtIHdlcmUgbm90IHdlbGwKCSAgICAgICAgICAgZm9ybWVkIChodW1tKSwgYW5kIGFkZGVkIHJkZjIuCgkqIHJlc3VsdC8qIDogcmVzdWx0aW5nIGNoYW5nZXMgaW4gdGhlIG91dHB1dC4KClN1biBEZWMgIDYgMTM6MDY6NTggRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBjaGFuZ2VkIHRoZSBiZWhhdmlvdXIgb2YgeG1sR2V0UHJvcCBvbiBOVUxMIHZhbHVlcy4KClNhdCBEZWMgIDUgMTI6MjU6MDkgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBwYXRjaGVkIGEgYnVnIGluIHRoZSBnZW5lcmF0aW9uIG9mIGVtcHR5IGF0dHJpYnV0ZXMKCkZyaSBOb3YgMjcgMDE6MzY6NTQgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW50aXRpZXMuW2NoXSwgdHJlZS5bY2hdLCB0ZXN0ZXIuYzogYWRkZWQgY29weSBpbnRlcmZhY2VzCgkgIGZvciBub2RlL3RyZWVzL2RvY3VtZW50cy8uLi4gQmlnZ2VzdCBwcm9ibGVtIGlzIG5hbWVzcGFjZQoJICBzdXBwb3J0IHdoZW4gY29weWluZyBzdWJ0cmVlcy4KClN1biBOb3YgMTUgMTk6NTk6NDcgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIGVudGl0aWVzLmM6IGltcHJvdmUgZW50aXRpZXMgYW5kIGNoYXIgcmVmIGVuY29kaW5nLAoJICBhbmQgY2xlYW51cHMgb2YgZXJyb3IgbWVzc2FnZXMuCgpGcmkgTm92IDEzIDEzOjAzOjEwIEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCBlbnRpdGllcy5jOiBzaW1wbGUgYnVnIGh1bnRpbmcgZG9uZSBkdXJpbmcgcnBtMmh0bWwgYW5kCgkgIHJwbWZpbmQgaW50ZWdyYXRpb24uCgpTdW4gTm92ICA4IDEzOjExOjA3IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5bY2hdOiBBZGRlZCBpbnRlcmZhY2VzIGFsbG93aW5nIHRvIHNwZWNpZnkgYSBTQVgKCSAgaGFuZGxlciBiZWZvcmUgcGFyc2luZy4KClN1biBOb3YgIDggMDk6Mzk6MTcgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IHJlZGlycmVjdCBhbGwgZXJyb3JzIHJlcG9ydGluZyB0aHJvdWdoIHRoZSBTQVgKCSAgZXJyb3IgZnVuY3Rpb24KCldlZCBOb3YgIDQgMTQ6MjE6NTQgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW50aXRpZXMuYzogcmF0aGVyIHVzZSBIQVZFX1NOUFJJTlRGIGFuZCBub3QgZGVwZW5kIG9uIGdsaWIKCSogbGlidG9vbCwgdGxtYWluIC4uLjogdXBkYXRlIG9mIHRoZSBsaWJ0b29sIGZpbGVzCgoxOTk4LTExLTA0ICBNaWd1ZWwgZGUgSWNhemEgIDxtaWd1ZWxAbnVjbGVjdS51bmFtLm14PgoKCSogZW50aXRpZXMuYzogVXNlIGdfc25wcmludGYgaW5zdGVkYSBvZiBzbnByaW50Zi4KClN1biBOb3YgIDEgMTQ6MzE6MDYgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW50aXRpZXMuYywgcGFyc2VyLmM6IGRlYnVnIGFuZCBjbGVhbnVwIG9mIENoYXJSZWYgaGFuZGxpbmcvc2F2aW5nLgoJICBhZGRlZCBlbnQ1IHRlc3QgZm9yIHRoaXMgcHVycG9zZS4KCSogcGFyc2VyLmMsIHBhcnNlci5oOiBmb3JtYXR0aW5nLCBjb21tZW50cyBhbmQgVVRGLTggcGxhbm5pbmcuCgpGcmkgT2N0IDMwIDAxOjM2OjUyIEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBmaXhlZD8gYSBzdHJhbmdlIGVycm9yIGR1ZSB0byBjb21wcmVzc2lvbiBvbiBhIEdXUAoJICBkb2N1bWVudC4KClRodSBPY3QgMjkgMDA6NDg6NDUgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdOiBidWcgZml4aW5nCgkqIGVudGl0aWVzLltjaF06IGRlZmluZWQgYSBzcGVjaWZpYyB0eXBlIGZvciBwcmVkZWZpbmVkIGVudGl0aWVzCgkqIGRvYy94bWwuaHRtbDogbW9yZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBsaWJyYXJ5LCBob3cgdG8gdXNlIGl0LAoJICBvdmVydmlldyBvZiB0aGUgaW50ZXJmYWNlcy4KCldlZCBPY3QgMjggMTc6NTY6MzUgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdOiBtb3JlIGNsZWFudXAgb24gdGhlIEFQSSwgbWFkZSB0aGUgdHJlZSBtb3IgY29uZm9ybWFudC4KClR1ZSBPY3QgMjcgMTc6NTQ6MDAgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBjb3JyZWN0ZWQgYSBzbWFsbCBidWcKCSogZG9jL3htbC5odG1sOiBjb250aW51aW5nIHdyaXRpbmcgZG9jdW1lbnRhdGlvbi4KClR1ZSBPY3QgMjcgMTc6NTQ6MDAgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZGVidWdYTUwuaCBkZWJ1Z1hNTC5jOiBhZGRlZCBkZWJ1Z2dpbmcgdXRpbGl0aWVzLgoJKiB0ZXN0ZXIuYzogYWRkZWQgLS1kZWJ1ZyBzd2l0Y2guCgkqIHRyZWUuYzogcGF0Y2hlZCBhbiBpbmNvcnJlY3Qgbm9kZS0+dHlwZSBhc3NpZ25tZW50LgoJKiBwYXJzZXIuYzogZm9ybWF0dGluZywgZW5zdXJlIHRoYXQgbm9kZS0+ZG9jICE9IE5VTEwgaW4gYXR0cmlidXRlcwoKVHVlIE9jdCAyNyAwMToxNTozOSBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgogICAgICAgICogcGFyc2VyLltjaF0gU0FYLmMgdHJlZS5bY2hdOiBsYXJnZSBhbW91bnQgb2YgY2hhbmdlcyB0byBpbXByb3ZlCiAgICAgICAgICBlbnRpdHkgc3VwcG9ydCBhbmQgcHJvdmlkZSBhbiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBjbG9zZSB0bwogICAgICAgICAgRE9NIG9uZSAoZW50aXR5IHJlZiBub2RlcywgYW5kIGF0dHJpYnV0ZSB2YWx1ZSBhcyB0cmVlKS4gSSB0cmllZAogICAgICAgICAgdG8gcHJlc2VydmUgdGhlIGludGVyZmFjZSBidXQgdGhpcyB3aWxsIHN1cmVseSBicmVhayBzb21lIGFwcHMKICAgICAgICAgIChJIGhhdmUgdG8gY2hhbmdlIHJwbTJodG1sL3JwbWZpbmQgZm9yIGV4YW1wbGUpLiBJIGhhZCB0byBjaGFuZ2UKCSAgdHdvIGludGVyZmFjZXMsIGFuZCB0aGUgZ2VuZXJhdGVkIHRyZWUgaXMgc29tZXdoYXQgZGlmZmVyZW50LgoJKiBkb2MvKiA6IHN0YXJ0ZWQgZG9jdW1lbnRpbmcgdGhlIFhNTCBsaWJyYXJ5LCB0aGUgdHJlZSBhbmQKCSAgRE9NL0NvcmJhLiBUaGlzIGlzIGEgZmlyc3Qgc3RlcC4KClNhdCBPY3QgMjQgMTQ6MjM6NTEgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IFNldCB1cCB0aGUgZm9uY3Rpb25zIGNvbW1lbnQgYmxvY2ssIGJvcmluZyBidXQgdXNlZnVsLgoJKiBwYXJzZXIuaCwgU0FYLmMsIHBhcnNlci5jOiBub3cgYXR0cmlidXRlcyBhcmUgcHJvY2Vzc2VkIHRocm91Z2gKCSAgdGhlIFNBWCBpbnRlcmZhY2UuIFRoZSBwcm9ibGVtIGlzIHRoYXQgbXkgU0FYIGludGVyZmFjZSBkaXZlcmdlZAoJICBxdWl0ZSBhIGJpdCBmcm9tIHRoZSBvcmlnaW5hbCBvbmUsIHdlbGwgdGhpcyBpcyBub3QgYW4gb2ZmaWNpYWwKCSAgc3BlYywgYW5kIHRyYW5zbGF0aW5nIGl0IGZyb20gSmF2YSB0byBDIGlzIGhhaXJ5IGFueXdheS4uLgoKVHVlIE9jdCAyMCAwMjoxMToyMSBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBTQVguYywgZW50aXRpZXMuYywgdHJlZS5jLCBlbmNvZGluZy5jLCBlcnJvci5jOiBTZXQgdXAgdGhlCgkgIGZvbmN0aW9ucyBjb21tZW50IGJsb2NrLCBib3JpbmcgYnV0IHVzZWZ1bC4KClN1biBPY3QgMTggMjA6NDA6NTggRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW5jb2RpbmcuW2NoXSwgTWFrZWZpbGUuYW06IEFkZGVkIHRoZSBVVEYtOCwgVVRGLTE2IGFuZCBJU08gTGF0aW4gMQoJICBjb252ZXJzaW9uIHJvdXRpbmVzLiBIb3dldmVyIHRoZXkgYXJlIG5vdCB5ZXQgdXNlZCB0byBjb252ZXJ0IHRoZQoJICBpbnB1dHMuIFRoZSBjb3JlIHdpbGwgcnVuIHdpdGggVVRGLTguCgpTdW4gT2N0IDE4IDE1OjA4OjE5IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYyA6IG1ha2Ugc3VyZSB0aGF0IHRoZSB0eXBlIGlkIGlzIHByb3Blcmx5IHNldC11cCB3aGVuCgkgIGEgbmV3IG9iamVjdCBpcyBhbGxvY2F0ZWQsIG5lZWRlZCBmb3IgRE9NLgoKU2F0IE9jdCAxNyAwMjo0MzoyMSBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmgsIHRyZWUuYzogT2ssIHRoZSBtYWluIG9iamVjdHMgaW4gdGhlIHRyZWUgd2lsbCBiZSBuYXRpdmUKCSAgY29yYmEgb2JqZWN0cywgaXQgY29zdHMgOCBieXRlcyBwZXIgTm9kZSwgQXR0cmlidXRlIGFuZCBEb2N1bWVudAoJICBidXQgaXQgc2ltcGxpZmllcyB0aGUgQ29yYmEgaW50ZWdyYXRpb24gYSBsb3QgKG5vIGV4dHJhIGludGVyZmFjZQoJICBvYmplY3RzIHRvIGFsbG9jYXRlL2ZyZWUpLgoKVHVlIE9jdCAxMyAyMTo0Njo1NyBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmgsIHRyZWUuYywgcGFyc2VyLmM6IGFkZGVkIHByZXYgYW5kIGRvYyBwb2ludGVycyB0byBOb2RlLAoJICBhbmQgY2hhbmdlZCBOT0RFcyBjb250YW50cyBmb3IgY29uZm9ybWl0eSB3aXRoIERPTSBMZXZlbCAxCgpXZWQgT2N0ICA3IDIzOjQyOjQ2IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFkZGVkIGhvb2tzIHRvIGtlZXAgdHJhY2sgb2Ygc2VydmFudHMgd2hlbiBjcmVhdGluZyBvYmplY3RzCgkgIHhtbERvYyBhbmQgeG1sTm9kZSAoZm9yIENvcmJhIGV4cG9ydCkuCgpTdW4gT2N0ICA0IDAzOjE4OjA5IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFkZGVkIHhtbC1jb25maWcgc2NyaXB0LgoKVGh1IE9jdCAgMSAxNjoyMjozNyBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgogICAgICAgICogYXV0b2dlbi5zaCA6IGFwcGxpZWQgcGF0Y2ggZnJvbSBGcmVkZXJpYyBEZXZlcm5heSA8ZGV2ZXJuYXlAaXN0YXIuZnI+CgkgIHRvIGF1dG91cGRhdGUgbGlidG9vbCBhbmQgYXV0b21ha2UgY29uZiBmaWxlcy4KCjE5OTgtMDktMzAgIE1pZ3VlbCBkZSBJY2F6YSAgPG1pZ3VlbEBudWNsZWN1LnVuYW0ubXg+CgoJKiBNYWtlZmlsZS5hbTogVXNlICc/JyB0byBzZXBhcmF0ZSB0aGUgc2VkCgljb21tYW5kcyBhcyAnLCcgaXMgdXNlZCB3aGVuIHBlb3BsZSBwYXNzIC1XbCxzb21ldGhpbmcuCgoKVGh1IFNlcCAyNCAxNToxMzoyOSBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmMsIHRyZWUuaDogYWRkZWQgYSBwZXItZG9jdW1lbnQgY29tcHJlc3Npb24gaW50ZXJmYWNlLgoKVHVlIFNlcCAyMiAyMDo0NzozOCBFRFQgMTk5OAoKCSogdHJlZS5jLCB0cmVlLmg6IGFkZGVkIHNhdmluZyB3aXRoIGNvbXByZXNzaW9uIGFuZCBhZGRlZCBpbnRlcmZhY2VzCgkgIHRvIGNvbnRyb2wgdGhlIGNvbXByZXNzaW9uIGxldmVsICh4bWxHZXRDb21wcmVzc01vZGUsCgkgIHhtbFNldENvbXByZXNzTW9kZSkgYW5kIGEgbmV3IHNhdmUgdG8gZmlsZW5hbWUgZnVuY3Rpb24gKHhtbFNhdmVGaWxlKS4KCk1vbiBTZXAgMjEgMjA6MTE6MTMgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IGNvcnJlY3RlZCBhIGxvb3AgZm9yIGZpbGVzIG9mIHNpemUgMAoKMTk5OC0wOC0yMCAgUmFqYSBSIEhhcmluYXRoICA8aGFyaW5hdGhAY3MudW1uLmVkdT4KCgkqIGVycm9yLmg6IE5ldyBmaWxlLiAgQ29udGFpbnMgcHJvdG90eWVzIGZyb20gYGVycm9yLmMnLgoKVGh1IEF1ZyAxMyAxOTowMjozNCAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5hbSAoeG1saW5jZGlyKTogTmV3IG1hY3JvLgoJKHhtbGluY19IRUFERVJTKTogUmVuYW1lZCBmcm9tIGluY2x1ZGVfSEVBREVSUy4KClRodSBBdWcgMTMgMDA6NDA6MTQgRURUIDE5OTggIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFwcGxpZWQgc21hbGwgcGF0Y2ggb24gbnVtZXJpYyBlbnRpdGllcyBmcm9tCgkgIENocmlzdG9waGVyIEJsaXp6YXJkIDxibGl6emFyZEBhcHBsaWVkdGhlb3J5LmNvbT4KCldlZCBBdWcgMTIgMjM6MTI6NTggRURUIDE5OTggIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE5ldyByZWxlYXNlIDAuMiwgcmVtb3ZlZCB0aGUgb2xkIHhtbF8qIGZpbGVzIHNvIHRoYXQgaXQncwoJICAgIGNvaGVyZW50IHdpdGggdGhlIG90aGVyIENWUyBiYXNlIChXM0MpLCBmYXIgYmV0dGVyIGNvbmZvcm1hbmNlCgkgICAgdG8gc3RhbmRhcmQsIG5ldyBuYW1lc3BhY2VzLCBkZWNlbnQgZW50aXRpZXMgc3VwcG9ydCwgYmVnaW5uaW5nCgkgICAgb2YgYSBTQVgtbGlrZSBpbnRlcmZhY2UuIE5lYXJseSBub3RoaW5nIGxlZnQgaW50YWN0LCBldmVuIHRoZQoJICAgIHRlc3QgZXhhbXBsZXMgLi4uCgoxOTk4LTA3LTMwICBDaHJpc3RvcGhlciBCbGl6emFyZCAgPGJsaXp6YXJkQGFwcGxpZWR0aGVvcnkuY29tPgoKCSogLmN2c2lnbm9yZTogQWRkIC5kZXBzIGRpcgoKU3VuIEp1bCAyNiAxNzoyOTo1MiBFRFQgMTk5OCAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sX3RyZWU6IGNoYW5nZWQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHNjaGVtZSBmb3IgbmFtZSBpbiB4bWxOZXdOb2RlCgpTdW4gSnVsIDI2IDAwOjE3OjUxIEVEVCAxOTk4ICBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgogICAgICAgICogY29uZmlndXJlLmluOiBhZGRlZCB0ZXN0IGZvciBDUFAKCSogQVVUSE9SUywgQ2hhbmdlbG9nOiB0aGUgb3JpZ2luYWwgb25lcyBkaWRuJ3QgZ2V0IGNvbW1pdGVkIGJ1dCB0aGUKCSAgICBnbGliIG9uZXMgaW5zdGVhZCwgZml4ZWQuCgkqIE1ha2VmaWxlLmFtOiBjb3JyZWN0ZWQgYW4gZXJyb3IgaW4gbGlicmFyeSBuYW1pbmcKCkZyaSBKdWwgMjQgMTY6NDc6MTQgMTk5OCAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogaW50ZWdyYXRlZCBjb2RlIGRldmVsb3BwZWQgYXQgVzNDCgkqIGNoYW5nZWQgdGhlIG9yaWdpbmFsIENvcHlyaWdodAoJKiBtaWdyYXRlZCB0byBhdXRvbWFrZQoJKiBwcmVmaXhlZCB0aGUgZmlsZW5hbWVzIGJ5IHhtbF8gdG8gYXZvaWQgZmlsZW5hbWUgY2xhc2hlcwoKTW9uIEphbiAgNiAxMjowNToxMiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvdHV0b3JpYWwvKiA6IGZpeGVkICMxMDE4OTQgaWYgZG9jID09IE5VTEwgeG1sRnJlZURvYyAKCSAgc2hvdWxkIG5vdCBiZSBjYWxsZWQuCgpNb24gSmFuICA2IDExOjU5OjA5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC0yLjAucGMuaW46IGFwcGxpZWQgdGhlIHBhdGNoIHRvIGZpeCAjMTAxODk0CgpTdW4gSmFuICA1IDIzOjM1OjQ3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyA6IGFwcGxpZWQgcGF0Y2ggZnJvbSBMdWthcyBTY2hyb2VkZXIgZm9yIHJlZ2lzdGVyIGNhbGxiYWNrcwoJKiB2YWxpZC5jOiBtb2RpZmllZCBwYXRjaCBmcm9tIEx1a2FzIFNjaHJvZWRlciB0byB0ZXN0CgkgIHJlZ2lzdGVyIGNhbGxiYWNrcyB3aXRoIC0tY2hrcmVnaXN0ZXIKClN1biBKYW4gIDUgMDI6MjM6MjAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IHNlcmlvdXNseSBjaGFuZ2VkIHRoZSB3YXkgZGF0YSBhcmUgcHVzaGVkIHRvCgkgIHRoZSB1bmRlcmx5aW5nIHBhcnNlciwgZ28gYnkgYmxvY2sgb2YgNTEyIGJ5dGVzIGluc3RlYWQgb2YKCSAgdHJ5bmcgdG8gZGV0ZWN0IHRhZyBib3VuZGFyaWVzIGF0IHRoYXQgbGV2ZWwuIENoYW5nZWQgdGhlCgkgIHdheSBlbXB0eSBlbGVtZW50IGFyZSBkZXRlY3RlZCBhbmQgdGFnZ2VkLgoJKiBweXRob24vdGVzdHMvcmVhZGVyLnB5IHB5dGhvbi90ZXN0cy9yZWFkZXIyLnB5CgkgIHB5dGhvbi90ZXN0cy9yZWFkZXIzLnB5OiBzbWFsbCBjaGFuZ2VzIG1vc3RseSBkdWUgdG8gY29udGV4dAoJICByZXBvcnRpbmcgYmVpbmcgZGlmZmVyZW50IGFuZCBEVEQgbm9kZSBiZWluZyByZXBvcnRlZC4gU29tZQoJICBlcnJvcnMgcHJldmlvdXNseSB1bmRldGVjdGVkIGFyZSBub3cgY2F1Z2h0IGFuZCBmaXhlZC4KCSogZG9jL3htbHJlYWRlci5odG1sOiBmbGFnZ2VkIGxhc3Qgc2VjdGlvbiBhcyBUT0RPCgpTYXQgSmFuICA0IDIwOjQwOjI4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwucHk6IGludGVncmF0ZWQgdGhlIFB5dGhvbiAyLjIgb3B0aW1pemF0aW9ucwoJICBmcm9tIEhhbm51IEtyb3NpbmcsIHdoaWxlIG1haW50YWluaW5nIGNvbXBhdGliaWxpdHkgd2l0aCAKCSAgMS41IGFuZCAyLjEKClNhdCBKYW4gIDQgMTc6MzM6MTcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhIGJpdCBvZiBjbGVhbnVwCgkqIHhtbHJlYWRlci5jOiBzbWFsbCBmaXgKCSogZG9jL3htbHJlYWRlci5odG1sOiBtb3JlIHdvcmsgb24gdGhlIFhtbFRleHRSZWFkZXIgdHV0b3JpYWwKCSogcHl0aG9uL2xpYnhtbC5weTogYSBmZXcgZml4ZXMgcG9pbnRlZCBvdXQgYnkgSGFubnUgS3Jvc2luZwoKU2F0IEphbiAgNCAxMzo0NjoxNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vc2V0dXAucHkuaW46IHBhdGNoIGZyb20gU3TpcGhhbmUgQmlkb3VsIHRvIGluY2x1ZGUKCSAgZHJ2X2xpYnhtbDIucHkgaW4gc2V0dXAucHkKClNhdCBKYW4gIDQgMDE6NDM6MDYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL3htbHJlYWRlci5odG1sOiBzdGFydGluZyBkb2N1bWVudGluZyB0aGUgbmV3IFhtbFRleHRSZWFkZXIKCSAgaW50ZXJmYWNlLgoKRnJpIEphbiAgMyAxNzoxODozMiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGFkZGVkIHRoZSAtLXN0cmVhbSBmbGFnIHRvIHVzZSB0aGUgVGV4dFJlYWRlciBBUEkKCSogeG1scmVhZGVyLmM6IHNtYWxsIHBlcmZvcm1hbmNlIHR3ZWFrCgpGcmkgSmFuICAzIDEzOjUwOjU1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIHB5dGhvbi90ZXN0cy9yZWFkZXIycHk6IG9rYXkgdGhlIERURCB2YWxpZGF0aW9uCgkgIGNvZGUgb24gdG9wIG9mIHRoZSBYTUxUZXh0UGFyc2VyIEFQSSBzaG91bGQgYmUgc29saWQgbm93LgoKRnJpIEphbiAgMyAwMjoxNzoxOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyMnB5OiBGaXhpbmcgc29tZSBtb3JlIG1lc3MKCSAgd2l0aCB2YWxpZGF0aW9uIGFuZCByZWN1cnNpdmUgZW50aXRpZXMgd2hpbGUgdXNpbmcgdGhlCgkgIHJlYWRlciBpbnRlcmZhY2UsIGl0J3MgZ2V0dGluZyBhIGJpdCBtZXNzeS4uLgoKVGh1IEphbiAgMiAxNToxNToyNiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyLnB5OiBhbm90aGVyIGNvdXBsZSBvZiBwcm9ibGVtCgkgIHJlbGF0ZWQgdG8gSXNFbXB0eUVsZW1lbnQgcmVwb3J0ZWQgYnkgU3TpcGhhbmUgQmlkb3VsIG5lZWRlZCAKCSAgc29tZSBmaXhlcy4KClRodSBKYW4gIDIgMTM6NTc6MDcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW4gcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi9kcnZfbGlieG1sMi5weToKCSAgaW50ZWdyYXRlZCBkcnZfbGlieG1sMi5weSBQeXRob24geG1sLnNheCBkcml2ZXIgZnJvbSBTdOlwaGFuZSBCaWRvdWwKCSAgYmFzZWQgb24gdGhlIHB5dGhvbiBYbWxUZXh0UmVhZGVyIGludGVyZmFjZS4KCldlZCBKYW4gIDEgMjI6MDU6NDAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBiYWNraW5nIG91dCBvbmUgY2hhbmdlIGluIHRoZSBsYXN0IHBhdGNoIHdoaWNoIGJyb2tlIHRoZQoJICByZWdyZXNzaW9uIHRlc3RzCgpXZWQgSmFuICAxIDIxOjU3OjI4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbC5kYXRhIGdsb2JhbHMuYyB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oOiBhcHBsaWVkCgkgIGFuIG9sZCBwYXRjaCBmcm9tIEx1a2FzIFNjaHJvZWRlciB0byB0cmFjayBub2RlIGNyZWF0aW9uIGFuZAoJICBkZXN0cnVjdGlvbi4gUHJvYmFibHkgbWlzc2luZyBhIGxvdCBvZiByZWZlcmVuY2VzIGF0IHRoZSBtb21lbnQKCSAgYW5kIG5vdCB1c2FibGUgcmVsaWFibHkuCgpXZWQgSmFuICAxIDIwOjEyOjA3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE5FV1MgZG9jL01ha2VmaWxlLmFtIGRvYy9uZXdzLnhzbDogZ2VuZXJhdGUgdGhlIE5FV1MgZmlsZQoJICBmcm9tIGRvYy9uZXdzLmh0bWwgYW5kIGEgc3R5bGVzaGVldAoKV2VkIEphbiAgMSAxNjowOTo1NyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyLnB5OiBmaXhlZCBhbm90aGVyIGNvdXBsZSBvZgoJICB4bWxyZWFkZXIgYnVncyByZXBvcnRlZCBieSBTdOlwaGFuZSBCaWRvdWwgYW5kIGFkZGVkIHRlc3RzLgoKV2VkIEphbiAgMSAxNTo0Mjo1NCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyMi5weTogZml4ZWQgYW5vdGhlciB2YWxpZGl0eQoJICBjaGVja2luZyBpbiBleHRlcm5hbCBwYXJzZWQgZW50aXRpZXMgcmFpc2VkIGJ5IFN06XBoYW5lIEJpZG91bAoJICBhbmQgYWRkZWQgYSBzcGVjaWZpYyByZWdyZXNzaW9uIHRlc3QuCgkqIHB5dGhvbi90ZXN0cy9yZWFkZXIzLnB5OiBjbGVhbnVwCgpUdWUgRGVjIDMxIDE1OjQ0OjAyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIHB5dGhvbi90ZXN0cy9yZWFkZXIyLnB5OiBmaXhlZCBhIHByb2JsZW0gd2l0aAoJICB2YWxpZGF0aW9uIHdpdGhpbiBlbnRpdGllcyBwb2ludGVkIGJ5IFN06XBoYW5lIEJpZG91bCwgYXVnbWVudGVkCgkgIHRoZSB0ZXN0cyB0byBjYXRjaCB0aG9zZS4KClR1ZSBEZWMgMzEgMTI6MTU6MzcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weTogbW9kaWZpZWQgdGhlIGdlbmVyYXRvciB0byBhbGxvdyBrZWVwaW5nCgkgIGNsYXNzIHJlZmVyZW5jZXMgd2hlbiBjcmVhdGluZyBuZXcgY2xhc3NlcywgbmVlZGVkIHRvIGZpeCBhIGJ1ZwoJICBwb2ludGVkIGJ5IFN06XBoYW5lIEJpZG91bCB3aGVyZSB0aGUgaW5wdXQgYnVmZmVyIG9mIHRoZQoJICB4bWxUZXh0UmVhZGVyIGluc3RhbmNlIGdldHMgZGVzdHJveWVkIGlmIHRoZSBweXRob24gd3JhcHBlciBmb3IKCSAgdGhlIGlucHV0IGlzIG5vdCByZWZlcmVuY2VkIGFueW1vcmUuCgpNb24gRGVjIDMwIDE5OjM5OjM2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIHB5dGhvbi90ZXN0cy9yZWFkZXIucHk6IGZpeGVkIGFub3RoZXIgcGFpciBvZiBwcm9ibGVtCgkgIHBvaW50ZWQgYnkgU3TpcGhhbmUgQmlkb3VsOiBkZXB0aCBzdGFydCBhdCAwIGFuZCBhIHBhcnNlIHByb2JsZW0uCgpNb24gRGVjIDMwIDEzOjM2OjUwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIHB5dGhvbi90ZXN0cy9yZWFkZXIucHk6IGZpeGVkIGFub3RoZXIgcHJvYmxlbQoJICBwb2ludGVkIGJ5IFN06XBoYW5lIEJpZG91bAoKTW9uIERlYyAzMCAxMjozOTo1NSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyLnB5OiBmaXhlZCBhIGxpbWl0IGNhc2UgcHJvYmxlbQoJICB3aXRoICI8YS8+IgoKTW9uIERlYyAzMCAxMTo1Mzo0NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogd2FybiBvbiB4bWxuczpwcmVmaXg9ImZvbyIKCSogeG1scmVhZGVyLmMgcHl0aG9uL3Rlc3RzL3JlYWRlci5weTogZml4ZWQgYSBjb3VwbGUgb2YgcHJvYmxlbQoJICBmb3IgbmFtZXNwYWNlIGF0dHJpYnV0ZXMgaGFuZGxpbmcuCgpNb24gRGVjIDMwIDAwOjU5OjA3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVudGl0aWVzLmMgcGFyc2VyLmMgdHJlZS5jIGluY2x1ZGUvbGlieG1sL2VudGl0aWVzLmg6IEZpeGVkCgkgIGEgcmVhbGx5IG5hc3R5IHByb2JsZW0gcmFpc2VkIGJ5IGEgRG9jQm9vayBYU0xUIHRyYW5zZm9ybQoJICBwcm92aWRlZCBieSBTZWJhc3RpYW4gQmVyZ21hbm4KClN1biBEZWMgMjkgMTI6MTM6MTggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgcHl0aG9uL3Rlc3RzL3JlYWRlci5weTogZml4ZWQgYSBidWcgcG9pbnRlZCBvdXQKCSAgYnkgU3TpcGhhbmUgQmlkb3VsIGFuZCBpbnRlZ3JhdGVkIGl0IGludG8gdGhlIHRlc3RzCgpTYXQgRGVjIDI4IDIzOjQ5OjEyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oIGRvYy9saWJ4bWwyLWFwaS54bWw6CgkgIGV4dGVuZGVkIHRoZSBYbWxUZXh0UmVhZGVyIEFQSSBhIGJpdCwgYWRkZGluZyBhY2Nlc3NvcnMgZm9yCgkgIHRoZSBjdXJyZW50IGRvYyBhbmQgbm9kZSwgYW5kIGFuIGVudGl0eSBzdWJzdGl0dXRpb24gbW9kZSBmb3IKCSAgdGhlIHBhcnNlci4KCSogcHl0aG9uL2xpYnhtbC5weSBweXRob24vbGlieG1sMmNsYXNzLnR4dDogcmVsYXRlZCB1cGRhdGVzCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvcmVhZGVyLnB5IAoJICBweXRob24vdGVzdHMvcmVhZGVyMi5weSBweXRob24vdGVzdHMvcmVhZGVyMy5weTogdXBkYXRlZCBhIGJpdAoJICB0aGUgb2xkIHRlc3RzIGFuZCBhZGRlZCBhIG5ldyBvbmUgdG8gdGVzdCB0aGUgZW50aXRpZXMgaGFuZGxpbmcKClNhdCBEZWMgMjggMjI6MTE6NTcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sMmNsYXNzLnR4dCAKCSAgcHl0aG9uL3Rlc3RzL3JlYWRlci5weSBweXRob24vdGVzdHMvcmVhZGVyMi5weTogY2hhbmdlZCB0aGUKCSAgZ2VuZXJhdG9yIHRvIHByb3ZpZGUgY2FzaW5nIGZvciB0aGUgWG1sVGV4dFJlYWRlciBzaW1pbGFyIHRvCgkgIEMjIHNvIHRoYXQgZXhhbXBsZXMgYW5kIGRvY3VtZW50YXRpb24gYXJlIG1vcmUgZGlyZWN0bHkgdHJhbnNwb3NhYmxlLgoJICBGaXhlZCB0aGUgY291cGxlIG9mIHRlc3RzIGluIHRoZSBzdWl0ZS4KClNhdCBEZWMgMjggMTU6NTU6MzIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2d1aWRlbGluZXMuaHRtbDogYWRkZWQgYSBkb2N1bWVudCBvbiBndWlsZGVsaW5lIGZvcgoJICBwdWJsaXNoaW5nIGFuZCBkZXBsb3lpbmcgWE1MCgpGcmkgRGVjIDI3IDIwOjM1OjE1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmMgeG1scmVhZGVyLmM6IGZpbmFsIHRvdWNoIHJ1bm5pbmcgRFREIHZhbGlkYXRpb24KCSAgb24gdGhlIFhtbFRleHRSZWFkZXIKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9yZWFkZXIyLnB5OiBhZGRlZCBhCgkgIHNwZWNpZmljIHJ1biBiYXNlZCBvbiB0aGUgZXhhbXBsZXMgZnJvbSB0ZXN0L3ZhbGlkLyoueG1sCgpGcmkgRGVjIDI3IDE1OjE3OjIwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwucHk6IGFkZGVkIGEgZmV3IHByZWRlZmluZWQgeG1sVGV4dFJlYWRlciBwYXJzZXIKCSAgY29uZmlndXJhdGlvbiB2YWx1ZXMuCgpGcmkgRGVjIDI3IDEyOjU3OjIyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWxfd3JhcC5oOiB0cnlpbmcgdG8gZml4ICMxMDIwMzcKCkZyaSBEZWMgMjcgMTI6MTg6MTQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IGZpeGluZyBidWcgIzk1Mjk2LCB3aGVuIHRoZSBwcmVkZWZpbmVkIGVudGl0aWVzCgkgIGFyZSByZWRlZmluZWQgaW4gdGhlIERURCB0aGUgZGVmYXVsdCBvbmUgbXVzdCBiZSB1c2VkCgkgIGluc3RlYWQgYW55d2F5LgoKV2VkIERlYyAyNSAxOToyMjowNiBNU1QgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGxpbnQueG1sCgkqIGRvYy94bWxsaW50LjEKCUFkZCBkaXNjdXNzaW9uIG9mIFhNTF9ERUJVR19DQVRBTE9HIHRvIHhtbGxpbnQgbWFuCglwYWdlIC0gYnVnICMxMDA5MDcKCgpNb24gRGVjIDIzIDE2OjU0OjIyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBGaXhlZCB0aGUgZW1wdHkgbm9kZSBkZXRlY3Rpb24gdG8gYXZvaWQgcmVwb3J0aW5nCgkgIGFuIGluZXhpc3RhbnQgY2xvc2UgdGFnLgoKTW9uIERlYyAyMyAxNTo0MjoyNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmMgcHl0aG9uL3NldHVwLnB5LmluOiBwYXRjaCBmcm9tIFN06XBoYW5lIEJpZG91bAoJICBmb3IgUHl0aG9uIDIuMQoKU3VuIERlYyAyMiAxMToyNDowNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0QzE0Ti5jIHZtcy9jb25maWcudm1zOiBhcHBsaWVkIENyYWlnIEEuIEJlcnJ5IHBhdGNoZXMgZm9yIFZNUwoKRnJpIERlYyAyMCAxMToyNzo0OSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvbGlieG1sMi1hcGkueG1sIHB5dGhvbi90ZXN0cy9yZWFkZXIucHk6IG9uZSByZWFsbHkgbmVlZAoJICB0byBwcm92aWRlIHRoZSBiYXNlIFVSSSBpbmZvcm1hdGlvbiB3aGVuIGNyZWF0aW5nIGEgcmVhZGVyIHBhcnNlcgoJICBmcm9tIGFuIGlucHV0IHN0cmVhbS4gVXBkYXRlZCB0aGUgQVBJIGFuZCB0aGUgZXhhbXBsZSB1c2luZyBpdC4KCkZyaSBEZWMgMjAgMDE6MTE6MzAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdFJlYWRlci5jIHhtbHJlYWRlci5jIHZhbGlkLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oCgkgIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmggaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmg6IHdvcmtpbmcgb24KCSAgRFREIHZhbGlkYXRpb24gb24gdG9wIG9mIHhtbCByZWFkZXIgaW50ZXJmYWNlcy4gQWxsb3dzIHRvCgkgIHZhbGlkYXRlIGFyYml0cmFyeSBsYXJnZSBpbnN0YW5jZXMuIFRoaXMgcmVxdWlyZWQgc29tZSBleHRlbnNpb25zCgkgIHRvIHRoZSB2YWxpZCBtb2R1bGUgaW50ZXJmYWNlIGFuZCBhdWdtZW50aW5nIHRoZSBzaXplIG9mIHhtbElECgkgIGFuZCB4bWxSZWYgc3RydWN0cyBhIGJpdC4KCSogdXJpLmMgeG1scmVnZXhwLmM6IHNpbXBsZSBjbGVhbnVwLgoKV2VkIERlYyAxOCAxNTo1MToyMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaCBkb2MvbGlieG1sMi1hcGkueG1sOiBtb3JlCgkgIHdvcmsgb24gdGhlIHhtbCByZWFkZXIgaW50ZXJmYWNlcy4KCSogQVVUSE9SUyBNQUlOVEFJTkVSUyBkb2MvKiB3aW4zMi8qOiB1cGRhdGVkIElnb3IncyBtYWlsIGFuZCB0aGUKCSAgV2ViIHBhZ2UgZm9yIHRoZSBXaW5kb3dzIGJpbmFyaWVzLgoKVHVlIERlYyAxNyAxOTozMTowNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBhcHBsaWVkIGEgcGF0Y2ggZm9yIFZNUyBmb2xsb3dpbmcgdGhlIHJlcG9ydCBieQoJICBOaWdlbCBIYWxsCgpUdWUgRGVjIDE3IDExOjI5OjQxIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiB0aGUgcGFyc2VTdGFydFRhZyBidWcgZml4IHdhc24ndCBjb21wbGV0ZS4KCQpNb24gRGVjIDE2IDIzOjAwOjA1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBWeWFjaGVzbGF2IFBpbmR5dXJhIG1hbmFnZWQgdG8gdHJpZ2dlciBhIGJ1ZyBpbgoJICBwYXJzZVN0YXJ0VGFnLCBmaXhpbmcgaXQuCgkqIHRlc3QvYXR0NCByZXN1bHQvYXR0NCByZXN1bHQvbm9lbnQvYXR0NDogYWRkaW5nIHRoZSB0ZXN0CgkqIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oIGRvYy9saWJ4bWwyLWFwaS54bWw6IGFkZGVkCgkgIG1vcmUgbWV0aG9kcyB0byBYbWxUZXh0UmVhZGVyLgoKTW9uIERlYyAxNiAxOTozMToxNiBDRVQgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogYWRkZWQgbW9yZSB4bWwgcmVhZGVyIGV4cG9ydHMKCSogd2luMzIvTWFrZWZpbGUubXN2YyB3aW4zMi9NYWtlZmlsZS5taW5ndzogYWRkZWQgeG1sIHJlYWRlciBpbnRlcmZhY2UKCSAgdG8gdGhlIGJ1aWxkCgkKTW9uIERlYyAxNiAwNjozNjo1NCBNU1QgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3R1dG9yaWFsL3htbHR1dG9yaWFsLnhtbAoJcGx1cyBnZW5lcmF0ZWQgaHRtbCBhbmQgcGRmCglVcGRhdGluZyB0dXRvcmlhbCBhZ2FpbiBiYXNlZCBvbiBmdXJ0aGVyIGNvbW1lbnRzIGZyb20gTmlyYWoKCVRvbGlhIG9uIHRoZSBsYXN0IGl0ZXJhdGlvbgoKU3VuIERlYyAxNSAyMToyNzozMCBNU1QgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3R1dG9yaWFsL3htbHR1dG9yaWFsLnhtbAoJKiBkb2MvdHV0b3JpYWwvaW5jbHVkZWtleXdvcmQuYwoJKiBkb2MvdHV0b3JpYWwvaW5jbHVkZWdldGF0dHJpYnV0ZS5jCglwbHVzIGdlbmVyYXRlZCBodG1sIGFuZCBwZGYKCUFkZGluZyBmaXggZnJvbSBOaXJhaiBUb2xpYSB0byB0dXRvcmlhbCB0byBwcm9wZXJseSBmcmVlIG1lbW9yeS4KCQoKTW9uIERlYyAxNiAwMDozNDoyNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaCBkb2MvbGlieG1sMi1hcGkueG1sOiBhZGRlZAoJICBtb3JlIG1ldGhvZHMgb2YgWG1sVGV4dFJlYWRlci4KCSogcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQgcHl0aG9uL3Rlc3RzL3JlYWRlci5weTogdGhpcyBpbmNyZWFzZWQgdGhlCgkgIG1ldGhvZHMgaW4gdGhlIGJuZGluZ3MsIGF1Z21lbnRlZCB0aGUgdGVzdCB0byBjaGVjayB0aG9zZSBuZXcKCSAgZnVuY3Rpb25zLgoKU2F0IERlYyAxNCAyMzo1NzozOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBkb2MvbGlieG1sMi1hcGkueG1sOiBhZGRlZCB0aGUgY2xvc2UgYW5kIGdldGF0dHJpYnV0ZQoJICBtZXRob2RzIG9mIFhtbFRleHRSZWFkZXIuCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL3R5cGVzLmMgCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBhZGRlZCB0aGUgcmVhZGVyIHRvIHRoZSBQeXRob24gYmluZGluZ3MKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9yZWFkZXIucHk6IGFkZGVkIGEgc3BlY2lmaWMKCSAgdGVzdCBmb3IgdGhlIFB5dGhvbiBiaW5kaW5ncyBvZiB0aGUgUmVhZGVyIEFQSXMKCSogcGFyc2VyLmM6IHNtYWxsIGNsZWFudXAuCgpGcmkgRGVjIDEzIDExOjM5OjQ0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IGZhbGxiYWNrIHdhcyBvbmx5IGNvcHlpbmcgdGhlIGZpcnN0IGNoaWxkIG5vdCB0aGUKCSAgZnVsbCBjaGlsZCBsaXN0IG9mIHRoZSBmYWxsYmFjayBlbGVtZW50LCBjbG9zZXMgIzg5Njg0IGFzIHJlb3BlbmVkCgkgIGJ5IEJlcm5kIEt1ZW1tZXJsZW4KClRodSBEZWMgMTIgMTM6MzQ6NTkgQ0VUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGV4cG9ydGVkIGh0bWxOb2RlRHVtcE91dHB1dAoKVGh1IERlYyAxMiAxMDo1OToxMSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyByZWxlYXNlIG9mIDIuNC4zMAoJKiBkb2MvYXBpYnVpbGQucHkgZG9jL2xpYnhtbDItYXBpLnhtbDogZml4dXBzIHRvIHRoZSBhcGkgYnVpbGRlciwKCSAgZ2l2ZXMgZW51bSB2YWx1ZXMsIGZpeCBmdW5jdHlwZSByZXR1cm4gdHlwZSwgcHV0IGJhY2sgZmllbGRzIGluCgkgIHN0cnVjdHMgCgkqIGRvYy8qOiB1cGRhdGVkIHRoZSBkb2NzIHJlYnVpbHQKClRodSBEZWMgMTIgMDE6MDk6MzQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9IVE1MdHJlZS5oOiBwYXRjaCBmcm9tIE1hcmsgVmFkb2sKCSAgYWJvdXQgaHRtbE5vZGVEdW1wT3V0cHV0IGxvY2F0aW9uLgoJKiB4cGF0aC5jOiByZW1vdmVkIGFuIHVuZGVmaW5lZCBmdW5jdGlvbiBzaWduYXR1cmUKCSogZG9jL2FwaWJ1aWxkLnB5IGRvYy9saWJ4bWwyLWFwaS54bWw6IHRoZSBzY3JpcHQgd2FzIGV4cG9ydGluZwoJICB0b28gbWFueSBzeW1ib2xzIGluIHRoZSBBUEkgYnJlYWtpbmcgdGhlIHB5dGhvbiBiaW5kaW5ncy4KCSAgVXBkYXRlZCB3aXRoIHRoZSBsaWJ4c2x0L2xpYmV4c2x0IGNoYW5nZXMuCgpXZWQgRGVjIDExIDIwOjI2OjE1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIHJlbGVhc2Ugb2YgMi40LjI5CgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBkb2NzIGFuZCBBUEkKCSogeG1scmVhZGVyLmM6IGEgZmV3IG1vcmUgZml4ZXMgZm9yIHRoZSBYbWxUZXh0UmVhZGVyIEFQSQoKV2VkIERlYyAxMSAxODowMToxNSBDRVQgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogYXBwbGllZCBtaW5ndyBwYXRjaCBmcm9tIE1hZ251cyBIZW5vY2gKCldlZCBEZWMgMTEgMTY6NTg6NDggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jIGRvYy9saWJ4bWwyLWFwaS54bWw6IGEgYml0IG1vcmUgY2xlYW51cAoKV2VkIERlYyAxMSAxNDo1NDo0NyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvYXBpYnVpbGQucHkgZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvTWFrZWZpbGUuYW06IG5ldyBBUEkKCSAgYnVpbGRpbmcgUHl0aG9uIHNjcmlwdCwgZG9lcyB0aGUgQyBwYXJzaW5nIGRpcmVjdGx5LCBnZW5lcmF0ZXMKCSAgYSBiZXR0ZXIgQVBJIGRlc2NyaXB0aW9uIGluY2x1ZGluZyBzdHJ1Y3R1cmUgZmllZHMgZGVmcyBhbmQKCSAgZW51bXMuIFN0aWxsIGEgY291cGxlIG9mIGJ1Z3MsIGJ1dCBnb29kIGVub3VnaCBmb3IgdGhlIHB5dGhvbgoJICB3cmFwcGVycyBub3cuCgkqIERPQ0JwYXJzZXIuYyBTQVguYyBuYW5vaHR0cC5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHRyZWUuYwoJICB2YWxpZC5jIHhtbElPLmMgeG1sbWVtb3J5LmMgeG1scmVhZGVyLmMgeG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jCgkgIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaCBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IG1vcmUKCSAgY2xlYW51cCBiYXNlZCBvbiB0aGUgcHl0aG9uIGFuYWx5c2lzIHNjcmlwdCByZXBvcnRzLgoJKiBsaWJ4bWwuc3BlYy5pbjogbWFrZSBzdXJlIHRoZSBBUEkgWE1MIGRlc2NyaXB0aW9uIGlzIHBhcnQgb2YgdGhlCgkgIGRldmVsIHBhY2thZ2UuCgpUdWUgRGVjIDEwIDE2OjE2OjM0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgYzE0bi5jIGRlYnVnWE1MLmMgZW5jb2RpbmcuYyBoYXNoLmMKCSAgbmFub2Z0cC5jIG5hbm9odHRwLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdGVzdEMxNE4uYwoJICB0ZXN0RG9jYm9vay5jIHRocmVhZHMuYyB0cmVlLmMgdmFsaWQuYyB4bWxJTy5jIHhtbGxpbnQuYyB4bWxtZW1vcnkuYwoJICB4bWxyZWFkZXIuYyB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmMgeHBhdGguYzoKCSAgY29kZSBjbGVhbnVwLCBlc3BlY2lhbGx5IHRoZSBmdW5jdGlvbiBjb21tZW50cy4KCSogdHJlZS5jOiBmaXhlZCBhIHNtYWxsIGJ1ZyB3aGVuIGZyZWVpbmcgbm9kZXMgd2hpY2ggYXJlIFhJbmNsdWRlIG9uZXMuCgpNb24gRGVjICA5IDE1OjA4OjE3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtCgkgIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oOiAgQWRkaW5nIGEgbmV3IHNldCBvZiBBUElzIGJhc2VkIG9uCgkgIHRoZSBDIyBUZXh0WG1sUmVhZGVyIEFQSSBidXQgY29udmVydGVkIHRvIEMuIEFsbG93IHRvIHBhcnNlCgkgIGluIGNvbnN0YW50IG1lbW9yeSB1c2FnZSwgZmFyIHNpbXBsZXIgdG8gcHJvZ3JhbSBhbmQgZXhwbGFpbgoJICB0aGFuIHRoZSBTQVggbGlrZSBBUElzLCB1bmZpbmlzaGVkIGJ1dCB3b3JraW5nLgoJKiB0ZXN0UmVhZGVyLmM6IHRlc3QgcHJvZ3JhbQoKU3VuIERlYyAgOCAxODozNjowMSBDRVQgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogYXBwbGllZCBZQUxEU1AgZnJvbSBNYXJrIFZha29jCgpXZWQgRGVjICA0IDE2OjA4OjQ5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogQ2hpcCB0dXJuZXIgaW5kaWNhdGVkIHRoYXQgWEhUTUwxIHNlcmlhbGl6YXRpb24KCSAgcnVsZSBmb3Igc3R5bGUgYWN0dWFsbHkgYnJlYWsgb24gYm90aCBJRSBhbmQgTW96aWxsYSwgCgkgIHRyeSB0byBhdm9pZCB0aGUgcnVsZSBpZiBlc2NhcGluZyBhaW4ndCBuZWNlc3NhcnkKCldlZCBEZWMgIDQgMTI6NDM6MjggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFuaHR0cC5jOiBoYW5kbGUgSFRUUCBVUkwgZXNjYXBpbmcsIHByb2JsZW0gcmVwb3J0ZWQgYnkKCSAgR2xlbiBOYWthbXVyYSBhbmQgU3RlZmFubyBaYWNjaGlyb2xpCgpTYXQgTm92IDMwIDEyOjE5OjE3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgcGFyc2VyLmMgdmFsaWQuYyB4cGF0aC5jOiBjb2RlIGNsZWFudXAKClRodSBOb3YgMjggMTI6NTM6MjIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmM6IEpvaGFubiBSaWNoYXJkIHBvaW50ZWQgb3V0IHNvbWUgWFBvaW50ZXIgcHJvYmxlbXMgZm9yCgkgIFVSTiBiYXNlZCBVUkkgcmVmZXJlbmNlcyBpbiBYSW5jbHVkZS4gTW9kaWZpZWQgdGhlIFVSSSBwYXJzaW5nCgkgIGFuZCBzYXZpbmcgcm91dGluZXMgdG8gYWxsb3cgY29ycmVjdCBwYXJzaW5nIGFuZCBzYXZpbmcgb2YgCgkgIFhQb2ludGVycywgZXNwZWNpYWxseSB3aGVuIGF0dGFjaGVkIHRvICJvcGFxdWUiIHNjaGVtZSBhY2NvcmRpbmdseQoJICB0byBSRkMgMjM5NgoKV2VkIE5vdiAyNyAyMDozNjowOCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIGluY2x1ZGUvbGlieG1sL0hUTUx0cmVlLmg6IGFwcGxpZWQgdGhlIHNhbWUga2luZAoJICBvZiByZWZhY3RvcmluZyB0byB0aGUgSFRNTCBzYXZpbmcgY29kZS4KCSogZG9jL2xpYnhtbDItKi54bWwgZG9jL0FQSSouaHRtbDogc2xpZ2h0IEFQSSBjaGFuZ2VzIGdvdCByZWZsZWN0ZWQKCSAgaW4gdGhlIGRvYy4KCldlZCBOb3YgMjcgMTI6NDA6MTYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogcmVmYWN0b3JlZCB0aGUgWE1MIGR1bXAgb2YgYSBub2RlCgkgIHRvIGEgYnVmZmVyIEFQSSB0byByZXVzZSB0aGUgZ2VuZXJpYyBkdW1wIHRvIGFuIE91dHB1dElPIGxheWVyLAoJICB0aGlzIHJlZHVjZXMgY29kZSwgZml4ZXMgeG1sTm9kZUR1bXAoKSBmb3IgWEhUTUwsIGFsc28gbWFkZQoJICB4bWxOb2RlRHVtcCgpIG5vdyByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlIHdyaXR0ZW4uCgpXZWQgTm92IDI3IDA5OjAwOjAwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9zZXR1cC5weS5pbjogYW5vdGhlciBwYXRjaCBmcm9tIFN06XBoYW5lIEJpZG91bCBmb3IgCgkgIFB5dGhvbiBiaW5kaW5ncyBvbiBXaW5kb3dzCgkqIGRvYy9wYXJzZWRlY2wucHk6IHNtYWxsIGNsZWFudXAKCk1vbiBOb3YgMjUgMTc6Mjg6NTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW4gY29uZmlndXJlLmluOiBhZGQgYSBsaW5lIGluICVjaGFuZ2Vsb2cgZm9yIHJlbGVhc2VzCgpNb24gTm92IDI1IDE0OjE4OjI3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBwYXRjaCBmcm9tIE1hcmN1cyBDbGFya2UgZml4aW5nIGEgcHJvYmxlbSBpbiBlbnRpdGllcwoJICBwYXJzaW5nIHRoYXQgd2FzIGRldGVjdGVkIGluIEtEZSBkb2N1bWVudGF0aW9ucyBlbnZpcm9ubWVudC4KCk1vbiBOb3YgMjQgMTQ6MTM6MjEgQ0VUIDIwMDIgRVJESSBHZXJnbyA8Y2FjdHVzQGNhY3R1cy5ydWxlei5vcmc+CgoJKiBweXRob24vbGlieG1sLmMgKGxpYnhtbF9wcmV2KTogUmV0dXJuIHRoZSBwcmV2aW91cyBhcyBvcHBvc2VkIHRvCgl0aGUgbmV4dCBub2RlIChJIGd1ZXNzIHRoaXMgaXMgdGhlIHJlc3VsdCBvZiBzb21lIGN1dCAmIHBhc3RlIHByb2dyYW1taW5nOikKClNhdCBOb3YgMjMgMTc6MjI6MjIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL01ha2VmaWxlLmFtOiBKYW4gUmFmYWogcG9pbnRlZCBhIGJ1ZyBpbiB0aGUgTWFrZWZpbGUuCgpTYXQgTm92IDIzIDEyOjIxOjI0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9zZXR1cC5weS5pbjogdHJ5aW5nCgkgIHRvIGZpeCB0aGUgUHl0aG9uIGJpbmRpbmdzIGJ1aWxkIG9uIFdpbmRvd3MgKFN06XBoYW5lIEJpZG91bCkKCkZyaSBOb3YgMjIgMjI6NDE6MzQgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvY29uZmlndXJlLmpzOiBhZGRlZCBvcHRpb24gZm9yIHB5dGhvbiBiaW5kaW5ncwoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGFkZGVkIG1vcmUgZXhwb3J0cwoKRnJpIE5vdiAyMiAxODo1MDozNCBDRVQgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL01ha2VmaWxlLm1pbmd3OiBmaXhlZCB1bnJlc29sdmVkIHN5bWJvbHMgd2hlbiBsaW5raW5nIHdpdGgKCSAgcHRocmVhZHMKCSogd2luMzIvd2luY2UvKjogYXBwbGllZCB1cGRhdGVzIHRvIFdpbmRvd3MgQ0UgcG9ydCBmcm9tIEphdmllcgoKRnJpIE5vdiAyMiAxNTo1MToyMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjQuMjgKCSogbGlieG1sLnNwZWMuaW4gZG9jL01ha2VmaWxlLmFtOiBzb21lIGNsZWFudXAKCSogZG9jLyo6IHVwZGF0ZWQgdGhlIG5ld3MgYW5kIHJlZ2VuZXJhdGVkLgoKRnJpIE5vdiAyMiAxNDoxNToxNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGZpbmFsIHRvdWNoIGF0IGNsb3NpbmcgIzg3MjM1IDwvcD4gZW5kIHRhZ3MKCSAgbmVlZCB0byBiZSBnZW5lcmF0ZWQuCgkqIHJlc3VsdC9IVE1ML2NmXzEyOC5odG1sIHJlc3VsdC9IVE1ML3Rlc3QyLmh0bWwgcmVzdWx0L0hUTUwvdGVzdDMuaHRtbDoKCSAgdGhpcyBjaGFuZ2Ugc2xpZ2h0bHkgdGhlIG91dHB1dCBvZiBhIGZldyB0ZXN0cwoJKiBkb2MvKjogcmVnZW5lcmF0ZWQKCkZyaSBOb3YgMjIgMTM6MjY6MTkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmM6IGZpeGluZyBidWcgIzk5MTkwIHdoZW4gVVRGOCBkb2N1bWVudCBhcmUKCSAgcGFyc2VkIHVzaW5nIHRoZSBwcm9ncmVzc2l2ZSBwYXJzZXIgYW5kIHRoZSBlbmQgb2YgdGhlIGNodW5rCgkgIGlzIGluIHRoZSBtaWRkbGUgb2YgYW4gVVRGOCBtdWx0aWJ5dGUgY2hhcmFjdGVyLgoKRnJpIE5vdiAyMiAxMzoxMzowMCBIS1QgMjAwMiBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHRocmVhZHMuYzogZml4ZWQgaW5pdGlhbGl6YXRpb24gcHJvYmxlbSBpbiB4bWxOZXdHbG9iYWxTdGF0ZQoJICB3aGljaCB3YXMgY2F1c2luZyBjcmFzaC4KCSogZ2xvYmFscy5jOiByZW1vdmVkIGR1cGxpY2F0ZSBjYWxsIHRvIGluaXR4bWxEZWZhdWx0U0FYSGFuZGxlcgoJICBpbiB4bWxJbml0aWFsaXplR2xvYmFsU3RhdGUuCgkqIHBhcnNlckludGVybmFscy5jOiBjbGVhbmVkIHVwIGN0eHQtPnNheCBpbml0aWFsaXNhdGlvbi4KCQpUaHUgTm92IDIxIDE1OjA1OjQ1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IG1vZGlmaWVkIHRoZSBleGlzdGluZyBBUElzCgkgIHRvIGhhbmRsZSBYSFRNTDEgc2VyaWFsaXphdGlvbiBydWxlcyBhdXRvbWF0aWNhbGx5LCBhbHNvIGFkZAoJICB4bWxJc1hIVE1MKCkgdG8gbGlieG1sMiBBUEkuIFNvbWUgdHdlYWtpbmcgdG8gbWFrZSBzdXJlCgkgIGxpYnhzbHQgc2VyaWFsaXphdGlvbiB1c2VzIGl0IHdoZW4gbmVlZGVkIHdpdGhvdXQgY2hhbmdpbmcKCSAgdGhlIGxpYnJhcnkgQVBJLgoJKiB0ZXN0L3hodG1sMSByZXN1bHQvbm9lbnQveGh0bWwxIHJlc3VsdC92YWxpZC94aHRtbDEueGh0bWwKCSAgcmVzdWx0L3hodG1sMTogYWRkZWQgYSBuZXcgdGVzdCBzcGVjaWZpY2FsbHkgZm9yIHhodG1sMSBvdXRwdXQKCSAgYW5kIHVwZGF0ZWQgdGhlIHJlc3VsdCBvZiBvbmUgWEhUTUwxIHRlc3QKCldlZCBOb3YgMjAgMTQ6MjQ6NTYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYyBwYXJzZXJJbnRlcm5hbHMuYyBlbmNvZGluZy5jOiBmaXhlZCAjOTkwODIKCSAgZm9yIHhpOmluY2x1ZGUgZW5jb2Rpbmc9Ii4uLiIgc3VwcG9ydCBvbiB0ZXh0IGluY2x1ZGVzLgoJKiByZXN1bHQvWEluY2x1ZGUvdHN0ZW5jb2RpbmcueG1sIHRlc3QvWEluY2x1ZGUvZG9jcy90c3RlbmNvZGluZy54bWwKCSAgdGVzdC9YSW5jbHVkZS9lbnRzL2lzb2xhdGluLnR4dCA6IGFkZGVkIGEgc3BlY2lmaWMgcmVncmVzc2lvbiB0ZXN0CgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IGZpeGVkIHRoZSBnZW5lcmF0b3IKCSAgdGhlIG5ldyBzZXQgb2YgY29tbWVudHMgZ2VuZXJhdGVkIGZvciBkb2MvbGlieG1sMi1hcGkueG1sIHdlcmUKCSAgYnJlYWtpbmcgdGhlIHB5dGhvbiBnZW5lcmF0aW9uLgoKVHVlIE5vdiAxOSAyMzoyNTo0NyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvTWFrZWZpbGUuYW06IHJlcGFpciBzb21lIHByb2JsZW0gaWYgZ3RrLWRvYyBmYWlsIG9yIHN1Y2gKCSogY29uZmlndXJlLmluOiBwYXRjaCBmb3IgU29sYXJpcyBvbiBuZXcgYXV0b2NvbmYgY2xvc2VzICM5ODg4MCAKCSogZG9jL3BhcnNlZGVjbC5weTogcmVwYWlyIHRoZSBmcmlnZ2luZyBBUEkgYnVpbGRpbmcgc2NyaXB0LAoJICBkaWQgSSBzYXkgdGhhdCBweXRob24geG1sbGliIHN1Y2tzID8KCSogZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvbGlieG1sMi1yZWZzLnhtbDogcmVnZW5lcmF0ZWQsIHJlb3JkZXJpbmcKCSAgYW5kIHNvbWUgY29tbWVudCBhcmUgbm8gbW9yZSB0cnVuY2F0ZWQuCgpUdWUgTm92IDE5IDA5OjA5OjA0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBNYXJ0aW4gU3RvaWxvdiBwb2ludGVkIG91dCBhIHBvdGVudGlhbCBsZWFrIGluCgkgIHhtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQKCk1vbiBOb3YgMTggMTY6MDU6NTEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBidWcgIzk4ODc5IGEgY29ybmVyIGNhc2Ugd2hlbiAwIGlzCgkgIGluY2x1ZGVkIGluIEhUTUwgZG9jdW1lbnRzIGFuZCB1c2luZyB0aGUgcHVzaCBwYXJzZXIuCgpNb24gTm92IDE4IDAwOjExOjI0IENFVCAyMDAyIEVSREkgR2VyZ28gPGNhY3R1c0BjYWN0dXMucnVsZXoub3JnPgoKCSogY29uZmlndXJlLmluIChQWVRIT05fU0lURV9QQUNLQUdFUyk6IElmIC0td2l0aC1weXRob24gaXMKCSAgc3BlY2lmaWVkLCBsb29rIGZvciB0aGUgUHl0aG9uIGludGVycHJldGVyIG5vdCBqdXN0IGluIHRoZQoJICBzcGVjaWZpZWQgcm9vdCBidXQgYWxzbyBpbiB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLiBGaXhlcyAjOTg4MjUKClN1biBOb3YgMTcgMjM6MzY6MDYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jOiBmaXhpbmcgYnVnICM5ODc5MiAsIG5vZGUgbWF5IGhhdmUgbm8gZG9jCgkgIGFuZCBkZXJlZmVyZW5jaW5nIHdpdGhvdXQgY2hlY2tpbmcgYWluJ3QgZ29vZCAuLi4KClN1biBOb3YgMTcgMTA6MjU6NDMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgcmVsZWFzZSAyLjQuMjcKCSogZG9jLyogOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2NzCgkqIGRvYy9NYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbjogdHJ5IHRvIG1ha2Ugc3VyZSB0aGUgdHV0b3JpYWwKCSAgYW5kIGFsbCB0aGUgZG9jcyBhcmUgYWN0dWFsbHkgcGFja2FnZWQgYW5kIGluIHRoZSBmaW5hbCBSUE1zCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiByZXN0b3JlCgkgIHhtbGxpbnQgLS1yZWNvdmVyIGZlYXR1cmUuCgpTYXQgTm92IDE2IDE2OjMwOjI1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIHhwYXRoLmM6IGZpeGluZyAjOTY5MjUgd2ljaCB3YXMgYWxzbyBkZXBlbmRlbnQgb24gdGhlCgkgIHByb2Nlc3Npbmcgb2YgcGFyc2VkIGVudGl0aWVzLCBhbmQgWFBhdGggY29tcHV0YXRpb24gb24gc3VzdGl0dWVkCgkgIGVudGl0aWVzLgoJKiB0ZXN0WFBhdGguYzogbWFrZSBzdXJlIGVudGl0aWVzIGFyZSBzdWJzdGl0dWVkLgoKRnJpIE5vdiAxNSAxNjoyMjo1NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgIzk2NTk0LCB3aGljaCB3YXMgdG90YWxseSBkZXBlbmRlbnQgb24gdGhlIAoJICBwcm9jZXNzaW5nIG9mIGludGVybmFsIHBhcnNlZCBlbnRpdGllcywgd2hpY2ggaGFkIHRvIGJlIGNoYW5nZWQuCgpGcmkgTm92IDE1IDEyOjE2OjA3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvTWFrZWZpbGUuYW06CgkgIHRyeWluZyB0byBmaXggYnVnICM5ODUxNyBhYm91dCBidWlsZGluZyBvdXRzaWRlIHRoZSBzb3VyY2UgdHJlZQoJKiBkb2MveG1sLmh0bWwgZG9jL0ZBUS5odG1sOiBmaXhlZCB0aGUgbGluayB0byBsaWJpY29udiAjOTQ1ODUKClRodSBOb3YgMTQgMTg6NDE6NTUgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBjbGVhbnVwCgkqIHdpbjMyL01ha2VmaWxlLm1pbmd3OiBpbnRlZ3JhdGVkIG1pbmd3IGluIEpTY3JpcHQgY29uZmlndXJlCgkqIHdpbjMyL01ha2VmaWxlLm1zdmM6IG1vZGlmaWVkIHRvIGFsbG93IG1pbmd3IGNvZXhpc3RlbmNlCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogaW50ZWdyYXRlZCBtaW5ndwoJKiB3aW4zMi9SZWFkbWUudHh0OiBjbGVhbnVwCgpUdWUgTm92IDEyIDIyOjA2OjQ1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogc3RyZW5ndGhlbiB0aGUgZ3VhcmQgaW4gdGhlIFBvcCBtYWNyb3MsCgkgIGxpa2UgaW4gdGhlIFhNTCBwYXJzZXIsIGNsb3NlcyBidWcgIzk3MzE1CgpUdWUgTm92IDEyIDIxOjU2OjM5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBmaXhlZCBidWcgIzk4MzM4ICwgZmF0YWxFcnJvciBTQVgKCSAgY2FsbGJhY2sgaXMgbmV2ZXIgdXNlZC4KClR1ZSBOb3YgMTIgMTM6MzI6NTAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmM6IGZpeGVkIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgU0FYIHN0cnVjdHVyZQoJICB3aGljaCB3YXMgYnJlYWtpbmcgeHNsdHByb2MKCSogeHBhdGguYzogcGF0Y2ggZnJvbSBQZXRyIFBhamFzIGZvciBDREFUQSBub2RlcwoJKiB0cmVlLmM6IHBhdGNoIGZyb20gUGV0ciBQYWphcyBpbXByb3ZpbmcgeG1sR2V0Tm9kZVBhdGgoKQoJKiBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogcGF0Y2ggZnJvbSBQZXRlciBKb25lcwoJICByZW1vdmluZyBhIGxlYWsgaW4geG1sU0FYUGFyc2VNZW1vcnkoKSBhbmQgYWRkaW5nIHRoZQoJICBmdW5jdGlvbiB4bWxTQVhQYXJzZU1lbW9yeVdpdGhEYXRhKCkKCk1vbiBOb3YgMTEgMjA6NDc6MDMgTVNUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCglhZGRpbmcgcGRmIG9mIHR1dG9yaWFsLCBjaGFuZ2luZyB3ZWIgcGFnZSB0byBsaW5rIHRvIGl0CgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC5wZGYKCSogZG9jL3htbC5odG1sCgkqIGRvYy9kb2NzLmh0bWwKClN1biBOb3YgMTAgMjA6NDg6NTcgTVNUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC9hcjAxczA4Lmh0bWwKCWFkZGluZyBmaWxlIHdoYXQgSSBmb3Jnb3QgZm9yIHR1dG9yaWFsCgoKU3VuIE5vdiAxMCAyMDozMzoxMyBNU1QgMjAwMiBKb2huIEZsZWNrICA8amZsZWNrQGlua3N0YWluLm5ldD4KCglBZGRpbmcgZW5jb2RpbmcgZGlzY3Vzc2lvbiB0byB0dXRvcmlhbAoJQWRkZWQ6CgkqIGRvYy90dXRvcmlhbC9pbWFnZXMvKi5wbmc6IERvY0Jvb2sgYWRtb25pdGlvbiBpbWFnZSBmaWxlcwoJKiBkb2MvdHV0b3JpYWwvYXBmLmh0bWwsIGFwZy5odG1sOiBuZXcgZ2VuZXJhdGVkIGh0bWwKCSogZG9jL3R1dG9yaWFsL2luY2x1ZGVjb252ZXJ0LmM6IGNvbnZlcnNpb24gY29kZSBlbnRpdHkgZmlsZQoJY2hhbmdlZDoKCSogZG9jL3R1dG9yaWFsL3htbHR1dG9yaWFsLnhtbDogRG9jQm9vayBvcmlnaW5hbAoJKiBkb2MvdHV0b3JpYWwvKi5odG1sOiBnZW5lcmF0ZWQgaHRtbAoKRnJpIE5vdiAgOCAxNzo1OTozMiBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiBpbmNsdWRlL2xpYnhtbC8qLmg6IHJldGlyZWQgeG1sd2luMzJ2ZXJzaW9uLmgKCSogZG9jL01ha2VmaWxlLmFtOiByZXRpcmVkIHhtbHdpbjMydmVyc2lvbi5oCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogcmV0aXJlZCB4bWx3aW4zMnZlcnNpb24uaAoKRnJpIE5vdiAgOCAxNjo1NTo0NyBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGV4cG9ydGVkIGFkZGl0aW9uYWwgc3ltYm9scwoJKiBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaDogZXhwb3J0ZWQgdGhlIHJlc3Qgb2YgdGhlIHhtbE1lbSogCgkgIHNpc3Rlcmhvb2QKCkZyaSBOb3YgIDggMTY6MDg6MTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2xvYmFscy5jOiBmaXhlZCBhIHR5cG8gcG9pbnRlZCBvdXQgYnkgSWdvcgoJKiB4cGF0aC5jOiB0cnkgdG8gc3BlZWQgdXAgbm9kZSBjb21wYXJlIHVzaW5nIGxpbmUgbnVtYmVycwoJICBpZiBhdmFpbGFibGUuCgpUaHUgTm92ICA3IDE1OjE2OjAyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogbWFrZSB4bWxGcmVlTm9kZSgpIGhhbmRsZSBhdHRyaWJ1dGVzIGNvcnJlY3RseS4KCldlZCBOb3YgIDYgMjM6NTE6MTEgQ0VUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiBjYXRhbG9nLmM6IGNvbXBsZXRlZCB0aGUgIzk2OTYzIGZpeCwgYXMgcmVwb3J0ZWQgYnkgS2FybAoJICBFaWNod2FsZGVyCgpXZWQgTm92ICA2IDE2OjQ4OjQ0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwb2ludGVyLmM6IHRyaWVkIHRvIGZpeCBidWcgIzk3ODUyIHJlcG9ydGVkIGJ5IE5pY29sYXMgTm9mZmtlCgpTdW4gTm92ICAzIDEwOjQzOjQ0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBzd2l0Y2hlZCB0aGUgb3JkZXIgb2YgYSBjb3VwbGUgb2YgaW5jbHVkZXMKCSAgdG8gZml4IGJ1Z3MgIzk3MTAwCgpUaHUgT2N0IDMxIDE3OjExOjQ2IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIGNhdGFsb2cuYzogZml4ZWQgYnVnICM5Njk2MywgcmV2ZXJ0ZWQgdG8gdGhlIG9sZCBiZWhhdmlvdXIgb2YKCSAgeG1sTG9hZENhdGFsb2dzIHRoYXQgdXNlZCB0byBzZXBhcmF0ZSBkaXJlY3RvcmllcyB3aXRoIGEgJzonLgoKVGh1IE9jdCAzMSAxNjo1NToyMSBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB0aHJlYWRzLmM6IGltcHJvdmVtZW50cyB0byB0aGUgV2luZG93cy1zaWRlIG9mIHRocmVhZCBoYW5kbGluZwoJKiB0ZXN0VGhyZWFkcy5jOiBjb25kaXRpb25hbGx5IGV4Y2x1ZGVkIHVuaXN0ZC5oCgkqIHRlc3RUaHJhZHNXaW4zMi5jOiBicm9rZSBvdmVybG9uZyBsaW5lcwoJKiBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IGFkYXB0ZWQgdGhyZWFkLXJlbGF0ZWQgbWFjcm9zIHRvIHRoZSBuZXcKCSAgc2NoZW1lIGFuZCBmb3IgcHRocmVhZHMgb24gV2luZG93cwoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiBpbnRyb2R1Y2VkIGEgbW9yZSBmbGV4aWJsZSB0aHJlYWQgYnVpbGQsIAoJICBhZGRlZCB0ZXN0VGhyZWFkc1tXaW4zMl0uYyB0byB0aGUgYnVpbGQKCSogd2luMzIvY29uZmlndXJlLmpzOiBpbnRyb2R1Y2VkIGEgbW9yZSBmbGV4aWJsZSB0aHJlYWQgY29uZmlnCgoyMDAyLTEwLTMxICBKb2huIEZsZWNrICA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWwuaHRtbCAoYW5kLCBieSBpbXBsaWNhdGlvbiwgRkFRLmh0bWwpCglhZGRlZCBVVEYtOCBjb252ZXJzYWlvbiBGQVEgZnJvbSBNYXJjdXMgTGFiaWIgSXNrYW5kZXIKClR1ZSBPY3QgMjkgMTg6MzI6MzMgQ0VUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiBjb25maWd1cmUuaW46IHJlbW92ZWQgeG1sd2luMzJ2ZXJzaW9uLmgKCSogaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW06IHJlbW92ZWQgeG1sd2luMzJ2ZXJzaW9uLmgKCk1vbiBPY3QgMjggMTQ6MDE6MjkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQnJpYW4gU3RhZmZvcmQgdG8gZml4IGEgYnVnCgkgIGluIHhtbFJlY29uY2lsaWF0ZU5zKCkKCk1vbiBPY3QgMjggMTM6NTE6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQ2hyaXN0aWFuIEdsYWhuIHRvIGFsbG93CgkgIHhtbE5ld0NoaWxkKCkgb24gZG9jdW1lbnQgZnJhZ21lbnQgbm9kZXMKClNhdCBPY3QgMjYgMTU6Mjc6MDAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBDaHJpc3RpYW4gR2xhaG4gZm91bmQgYSBwcm9ibGVtIHdpdGggYSByZWNlbnQKCSAgcGF0Y2ggdG8geG1sUGFyc2VCYWxhbmNlZENodW5rTWVtb3J5UmVjb3ZlcigpCgkqIHhtbHNjaGVtYXMuYzogQ2hhcmxlcyBCb3plbWFuIGZpeGVkIHNvbWUgU2NoZW1hcyB2YWxpZGF0aW9uCgkgIHByb2JsZW1zCgkqIHJlc3VsdC9zY2hlbWFzL2VsZW0qIHJlc3VsdC9zY2hlbWFzL3NlcSogdGVzdC9zY2hlbWFzLmVsZW0qCgkgIHRlc3Qvc2NoZW1hcy9zZXEqOiBhZGRlZCB0aGUgdGVzdCBjYXNlcyBmcm9tIENoYXJsZXMKCldlZCBPY3QgMjMgMTY6NDI6MjkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZy5oLmluIGxpYnhtbC5zcGVjLmluIGRvYy9NYWtlZmlsZS5hbToKCSAgc2VyaW91cyBjbGVhbnVwIG9mIHRoZSBzcGVjIGZpbGUgYW5kIGFzc29jaWF0ZWQgY2hhbmdlcwoJICBpbiB0aGUgTWFrZWZpbGVzLgoJKiB2YWxpZC5jOiB0cnkgdG8gcmVtb3ZlIHNvbWUgd2FybmluZ3Mgb24geDg2XzY0CgpXZWQgT2N0IDIzIDEwOjUzOjQyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL01ha2VmaWxlLmFtOiBhZGRlZCB3aW5zb2NrY29tcGF0LmggdG8gRVhUUkFfRElTVCB0bwoJICBmaXggYnVnICM5NjU4NgoKVHVlIE9jdCAyMiAyMToxMzowNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBNaWtoYWlsIFNvZ3JpbmUgcG9pbnRlZCBvdXQgYSBidWcgaW4gSFRNTAoJICBwYXJzaW5nLCBhcHBsaWVkIGhpcyBwYXRjaAoJKiByZXN1bHQvSFRNTC9hdHRyZW50cy5odG1sIHJlc3VsdC9IVE1ML2F0dHJlbnRzLmh0bWwuZXJyCgkgIHJlc3VsdC9IVE1ML2F0dHJlbnRzLmh0bWwuc2F4IHRlc3QvSFRNTC9hdHRyZW50cy5odG1sOgoJICBhZGRlZCB0aGUgdGVzdCBhbmQgcmVzdWx0IGNhc2UgcHJvdmlkZWQgYnkgTWlraGFpbCBTb2dyaW5lCgpUdWUgT2N0IDIyIDE5OjMzOjIwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2bXMvYnVpbGRfbGlieG1sLmNvbSB2bXMvY29uZmlnLnZtcyB2bXMvcmVhZG1lLnZtcwoJICBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaAoJICBpbmNsdWRlL2xpYnhtbC90cmVlLmggaW5jbHVkZS9saWJ4bWwveG1sSU8uaAoJICBIVE1McGFyc2VyLmMgY2F0YWxvZy5jIGRlYnVnWE1MLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMKCSAgdHJlZS5jIHRyaW9kZWYuaCB0cmlvbmFuLmMgdXJpLmMgeG1sSU8uYyB4cGF0aC5jOgoJICBBcHBsaWVkIHRoZSBWTVMgdXBkYXRlIHBhdGNoIGZyb20gQ3JhaWcgQS4gQmVycnkKCSogZG9jLyouaHRtbDogdXBkYXRlCgpUdWUgT2N0IDIyIDE2OjI3OjMxIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9lbmNvZGluZy5oIGVuY29kaW5nLmM6IG1hZGUgeG1sR2V0VVRGOENoYXIgcHVibGljCgpUdWUgT2N0IDIyIDE2OjI1OjE4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jOiBhZGRpbmcgYSBncmVwIGNvbW1hbmQgdG8gLS1zaGVsbCBpbiB4bWxsaW50CgkgIGZvciBULlYuIFJhbWFuCgpUdWUgT2N0IDIyIDE2OjIzOjU3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxjYXRhbG9nLmM6IHRyaWVkIHRvIGZpeCBzb21lIG9mIHRoZSBwcm9ibGVtIHdpdGggLS1zZ21sCgpNb24gT2N0IDIxIDA5OjU3OjEwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogdHJpZWQgdG8gZml4IGJ1ZyAjOTE1MDAgd2hlcmUgZG9jLT5jaGlsZHJlbiBtYXkKCSAgYmUgb3ZlcnJpZGVuIGJ5IGEgY2FsbCB0byB4bWxQYXJzZUJhbGFuY2VkQ2h1bmtNZW1vcnkoKQoKTW9uIE9jdCAyMSAwOTowNDozMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiB0cmllZCB0byBmaXggYnVnICM5MDk0NSB3LnIudC4gcGFyc2luZyBvZiBzeXN0ZW0KCSAgaWRlbnRpZmllcnMgaW4gU0dNTCBjYXRhbG9ncyBjb250YWluaW5nICcmJwoKU3VuIE9jdCAyMCAyMzozMTo0NyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL3R5cGVzLmM6IGZpeGVkIGJ1Z3Mgd2hlbiBwYXNzaW5nIHJlc3VsdCB2YWx1ZSB0cmVlCgkgIHRvIFB5dGhvbiBmdW5jdGlvbnMuCgpGcmkgT2N0IDE4IDEzOjE4OjUzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyB0aGUgcmVsZWFzZSBvZiAyLjQuMjYKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3VtZW50YXRpb24KCldlZCBPY3QgMTYgMjA6MDE6NDYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCBhIFhNTCBOYW1lc3BhY2UgY29tcGxpYW5jZSBidWcgcmVwb3J0ZWQgYnkKCSAgQWxleGFuZGVyIEdyaW1hbG92c2t5CgpXZWQgT2N0IDE2IDE3OjE4OjQyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jOiBmaXhlZCBzZXJpYWxpemF0aW9uIG9mIHNjcmlwdCBhbmQgc3R5bGUgd2hlbgoJICB0aGV5IGFyZSBub3QgbG93ZXJjYXNlIChpLmUuIGFkZGVkIHVzaW5nIHRoZSBBUEkgdG8gdGhlIHRyZWUpLgoKV2VkIE9jdCAxNiAxNjozMTowNSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogbWFrZSB4bWxWYWxpZGF0ZURvY3VtZW50IGVtaXQgYSB3YXJuaW5nIG1zZyBpZiB0aGVyZQoJICBpcyBubyBEVEQsIHBvaW50ZWQgYnkgQ2hyaXN0aWFuIEdsYWhuCgpXZWQgT2N0IDE2IDE2OjA1OjM4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmM6IGZpeGVkIHRoZSB2YWxpZGF0aW9uIG9mIHNlcXVlbmNlcwoJICBjb250ZW50IG1vZGVsIHdoZW4gc29tZSBvZiB0aGUgYmxvY2tzIGhhdmUgbWluIG9yIG1heCwgYW5kIGEgY291cGxlCgkgIG9mIGJ1Z3MgZm91bmQgaW4gdGhlIHByb2Nlc3MuCgkqIHJlc3VsdC9zY2hlbWFzL2xpc3QwKiB0ZXN0L3NjaGVtYXMvbGlzdDAqOiBhZGRlZCBzb21lIHNwZWNpZmljCgkgIHJlZ3Jlc3Npb24gdGVzdHMKClR1ZSBPY3QgMTUgMTI6NDE6MDEgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFJFQURNRTogdXBkYXRlZCB0aGUgY29udGFjdCBpbmZvcm1hdGlvbnMKClR1ZSBPY3QgMTUgMTA6MzU6NTcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiB1c2UgdGVzdCAtZiBpbnN0ZWFkIG9mIHRlc3QgLWUgc2luY2UgU29sYXJpcyAvYmluL3NoCgkgIG1pc3NlcyBpdCwgcmVwb3J0ZWQgYnkgUGV0ZXIgQnJheS4KCk1vbiBPY3QgMTQgMTc6Mzc6MzIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogaW52ZXN0aWdhdGluZyB4bWxOb2RlR2V0Q29udGVudCgpIG9uIG5hbWVzcGFjZSBub2RlcwoJICBhbmQgcmVtb3ZlZCBhIGZldyB3YXJuaW5ncwoKTW9uIE9jdCAxNCAxMzoxMjo1NSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IENocmlzdGlhbiBHbGFobiBmb3VuZCBhIHNtYWxsIGJ1ZyBpbiB0aGUgcHVzaCBwYXJzZXIuCgkqIHhtbElPLmMgaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogY2xlYW5lZCB1cCBhbmQgbWFkZSB4bWxDaGVja0ZpbGVuYW1lCgkgIHB1YmxpYwoKV2VkIE9jdCAgOSAyMzoxMTowMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaDogYWRkZWQKCSAgeG1sU2NoZW1hTmV3TWVtUGFyc2VyQ3R4dCB0byBwYXJzZSBhIHNjaGVtYXMgZnJvbSBhIG1lbW9yeSBhcmVhCgkqIHRlc3RTY2hlbWFzLmM6IGFkZGVkIC0tbWVtb3J5IHRvIHRlc3QgdGhlIG5ldyBpbnRlcmZhY2UKCldlZCBPY3QgIDkgMTY6MjI6NTQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9pbmRleC5weSBkb2Mvc2VhcmNoLnBocDogaW50ZWdyYXRlZCB0aGUgWFNMVCBpbmRleGluZywKCSAgYSBmZXcgZml4ZWQgaW4gdGhlIGluZGV4ZXIsIGFkZGVkIGEgc2NvcGUgc2VsZWN0aW9uIGF0IHRoZQoJICBzZWFyY2ggbGV2ZWwuCgpXZWQgT2N0ICA5IDEyOjE4OjM3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBKb2UgTWFyY3VzIENsYXJrZSByZXBvcnRlZCBhIHNlZ2ZhdWx0IG9uIEZCc2QgCgkgIHRoaXMgd2FzIGR1ZSB0byB1bmluaXRpYWxpemVkIHBhcnRzIG9mIHRoZSB2YWxpZGF0aW9uIGNvbnRleHQKClR1ZSBPY3QgIDggMjM6MjQ6MjAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBNYXJrIFZha29jIGV4Y2VwdCB0aGUgQVBJCgkgIGNoYW5nZSwgcHJlc2VydmVkIGl0LgoJKiBkb2MvKjogdXBkYXRlZCB0aGUgZG9jcyB0byBwb2ludCB0byB0aGUgc2VhcmNoIGVuZ2luZSBmb3IKCSAgaW5mb3JtYXRpb24gbG9va3VwIG9yIGJlZm9yZSBidWcvaGVscCByZXBvcnRzLgoKVHVlIE9jdCAgOCAxODo1MzozMSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2luZGV4LnB5IGRvYy9zZWFyY2gucGhwOiBhZGRlZCBtYWlsaW5nLWxpc3QgYXJjaGl2ZXMKCSAgaW5kZXhpbmcgYW5kIGxvb2t1cAoKVHVlIE9jdCAgOCAxMDoyNTowNyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBwYXRjaCBmcm9tIE1hcmsgVmFrb2MgdG8gZml4IHhtbE5vZGVHZXRQYXRoKCkKCk1vbiBPY3QgIDcgMTM6MTI6MDMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9pbmRleC5weTogaW1wcm92ZWQgSFRNTCBpbmRleGluZwoJKiBkb2Mvc2VhcmNoLnBocDogbWFrZSB0aGUgcXVlcmllcyBhbHNvIGxvb2t1cCB0aGUgSFRNTCBiYXNlZCBpbmRleGVzCgpTdW4gT2N0ICA2IDIzOjUwOjI5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvaW5kZXgucHk6IGFkZGVkIEhUTUwgcGFnZSBpbmRleGluZyAKCkZyaSBPY3QgIDQgMTU6MzM6NTUgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogeG1sSU8uYzogZXh0ZW5kZWQgV2luZG93cyBwYXRoIG5vcm1hbGlzYXRpb24gdG8gZml4IHRoZSBiYXNlCgkgIHByb2JsZW0gaW4gbGlieHNsdC4KCSogY2F0YWxvZy5jOiBmaXhlZCBsaXN0IGhhbmRsaW5nIGluIFhNTF9DQVRBTE9HX0ZJTEVTCgpGcmkgT2N0ICA0IDEzOjQzOjAyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiB0eXBvL2J1ZyBmb3VuZCBieSBDaHJpc3RpYW4gR2xhaG4KClN1biBTZXAgMjkgMTk6NDQ6MTAgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogeG1sSU8uYzogYXBwbGllZCBXaW5kb3dzIENFIHBhdGNoIGZyb20gSmF2aWVyLgoJKiB3aW4zMi93aW5jZTogbmV3IGRpcmVjdG9yeSwgY29udGFpbnMgc3VwcG9ydCBmb3IgdGhlIFBvY2tldFBDCgkgIHdpdGggV2luZG93cyBDRSBmcm9tIEphdmllci4KCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiByZW9yZ2FuaXNlZCwgcmVtb3ZlZCBkdXBsaWNhdGUgCgkgIGRlZmluaXRpb25zIGFuZCBhcHBsaWVkIFdpbkNFIHBhdGNoIGZyb20gSmF2aWVyLgoJKiBpbmNsdWRlL3dzb2NrY29tcGF0Lmg6IG5ldyBmaWxlLCBub3cgY29udGFpbnMgV2luU29jawoJICBjb21wYXRpYmlsaXR5IG1hY3Jvcy4KCSogd2luMzIvTWFrZWZpbGUubXN2YzogaW50cm9kdWNlZCBkb3VibGUtcnVuIGNvbXBpbGF0aW9uLgoKVGh1IFNlcCAyNiAxOTo0ODowNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiBwcmVwYXJpbmcgcmVsZWFzZQoJICBvZiAyLjQuMjUKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlZ2VuZXJhdGVkIHRlaCBkb2NzIGFuZCB3ZWIgcGFnZXMuCgpUaHUgU2VwIDI2IDE3OjMzOjQ2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYyB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmg6IGZpeGVkIGJ1ZyAjOTI1MTggdmFsaWRhdGlvbgoJICBlcnJvciB3ZXJlIG5vdCBjb3ZlcmluZyBuYW1lc3BhY2UgZGVjbGFyYXRpb25zLgoJKiByZXN1bHQvdmFsaWQvZGlhLnhtbCB0ZXN0L3ZhbGlkL2RpYS54bWw6IHRoZSB0ZXN0IHdhc24ndCB2YWxpZCwKCSAgaXQgd2FzIG1pc3NpbmcgdGhlIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbiBmb3IgdGhlIG5hbWVzcGFjZQoJKiByZXN1bHQvVkMvTlMzOiB0aGUgZml4IG5vdyByZXBvcnQgYnJlYWthZ2VzIGluIHRoYXQgdGVzdAoKVGh1IFNlcCAyNiAxNDozOTowNyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogZml4aW5nIGJ1ZyAjOTQyNDEgb24gSFRNTCBib29sZWFuIGF0dHJpYnV0ZXMKClRodSBTZXAgMjYgMTQ6MjU6MzMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy8qOiBhZGRlZCB0aGUgMyBuZXcgbW9kdWxlcyB4bWxyZWdleHAgeG1sYXV0b21hdGEgYW5kIHhtbHVuaWNvZGUKCSAgYW5kIHJlZ2VuZXJhdGVkIHRoZSBkb2NzIGFuZCB3ZWIgc2l0ZQoKVGh1IFNlcCAyNiAxMTo0NTo0MiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYyB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmMgeHBhdGguYzogbWFrZSBzdXJlCgkgIEFUVFJJQlVURV9VTlVTRUQgaXMgYWx3YXlzIHB1dCBhZnRlciB0aGUgYXR0cmlidXRlIGRlY2xhcmF0aW9uLAoJICBub3QgYmVmb3JlCgpUaHUgU2VwIDI2IDExOjMzOjI4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBmaXhlZCBhIHN0dXBpZCBlcnJvcgoJICBicmVha2luZyB0aGUgcHl0aG9uIEFQSQoKVGh1IFNlcCAyNiAwMDozMTo0NiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJpby5jIHRyaW8uaCB0cmlvZGVmLmggdHJpb25hbi5jIHRyaW9uYW4uaCB0cmlvcC5oCgkgIHRyaW9zdHIuYyB0cmlvc3RyLmg6IGFwcGxpZWQgYSB0cmlvIHVwZGF0ZSBwYXRjaCBmcm9tIAoJICBCam9ybiBSZWVzZSB3aGljaCBzaG91bGQgd29yayB3aXRoIE1pbkdXCgpUaHUgU2VwIDI2IDAwOjIxOjE4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGltcHJvdmluZyBzb21lIGRvY3VtZW50YXRpb24gY29tbWVudHMKCSogeG1scmVnZXhwLmM6IGZvdW5kIGFuZCBmaXhlZCBhIG1lbSBsZWFrIHdpdGggcHl0aG9uIHJlZ3Jlc3Npb24gdGVzdHMKCSogZG9jLyo6IHJlYnVpbHQgdGhlIGRvYyBhbmQgdGhlIEFQSSBYTUwgZmlsZSBpbmNsdWRpbmcgdGhlIAoJICB4bWxyZWdleHAuaCB4bWxhdXRvbWF0YS5oIGFuZCB4bWx1bmljb2RlLmggaGVhZGVycwoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0IHB5dGhvbi9saWJ4bWxfd3JhcC5oCgkgIHB5dGhvbi90eXBlcy5jOiBhZGRlZCBhY2Nlc3MgdG8gdGhlIFhNTCBTY2hlbWFzIHJlZ2V4cHMgZnJvbQoJICBweXRob24KCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9yZWdleHAucHk6IGFkZGVkIGEgCgkgIHNpbXBsZSByZWdleHAgYmluZGluZ3MgdGVzdAoKVHVlIFNlcCAyNCAwODoxMDo0OCBNRFQgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbC5odG1sOgoJICBmaXhpbmcgZnRwIGxpbmtzIC0gdGhhbmtzIHRvIFZpdGFseSBPc3RhbmluCgpUdWUgU2VwIDI0IDE2OjA4OjE3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYzogZml4ZWQgdGhlIGRhdGEgY2FsbGJhY2sgb24gdHJhbnNpdGlvbiBmdW5jdGlvbmFsaXR5CgkgIHdoaWNoIHdhcyBicm9rZW4gd2hlbiB1c2luZyB0aGUgY29tcGFjdCBmb3JtCgkqIHJlc3VsdC9zY2hlbWFzLyo6IHVwZGF0ZWQgdGhlIHJlc3VsdHMsIGxlc3MgdmVyYm9zZSwgYWxsIHRlc3RzCgkgIHBhc3MgbGlrZSBiZWZvcmUKCSogRE9DQnBhcnNlci5jIHRlc3RBdXRvbWF0YS5jIHRlc3RDMTROLmMgdGVzdFNjaGVtYXMuYyB0ZXN0VGhyZWFkcy5jCgkgIHRlc3RYUGF0aC5jIHZhbGlkLmMgeGluY2x1ZGUuYyB4bWxsaW50LmMgeG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jCgkgIHhtbHNjaGVtYXN0eXBlcy5jIHhwYXRoLmMgcHl0aG9uL2xpYnhtbC5jOiByZW1vdmVkIGEgYnVuY2ggb2YKCSAgYW5ub3lpbmcgd2FybmluZ3MKCSogeHBhdGguYzogdHJ5IHRvIHByb3ZpZGUgYmV0dGVyIGVycm9yIHJlcG9ydCB3aGVuIHBvc3NpYmxlCgpTYXQgU2VwIDIxIDE0OjU2OjM3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogZml4ZWQgYSBicmVha2FnZSByYWlzZWQgYnkgSmFjb2IKCkZyaSBTZXAgMjAgMjA6MDg6MTggQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBhZGRlZCBIQVZFX0VSUk5PX0ggZGVmaW5pdGlvbiBmb3IgcGFydHMKCSAgd2hpY2ggZG9uJ3QgdXNlIHNvY2tldHMKCkZyaSBTZXAgMjAgMTg6NDA6NTAgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvTWFrZWZpbGUubXN2YzogYXBwbGllZCB6bGliIHBhdGNoIGZyb20gRGFuaWVsIEdlaHJpZ2VyCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogYXBwbGllZCB6bGliIHBhdGNoIGZyb20gRGFuaWVsIEdlaHJpZ2VyCgpGcmkgU2VwIDIwIDE1OjQwOjE0IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogYXBwbGllZCB0aGUgcGF0Y2ggZnJvbSBNYXJrIFZha29jIGZvciAKCSAgcmVnZXhwIHN1cHBvcnQKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBhcHBsaWVkIHRoZSBwYXRjaCBmcm9tIE1hcmsgVmFrb2MKCSAgZm9yIHJlZ2V4cCBzdXBwb3J0CgkKRnJpIFNlcCAyMCAxNTozNTozMyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGFzIHBvaW50ZWQgYnkgSWdvciBGbG9hdCBhbmQgRG91YmxlCgkgIHBhcnNpbmcgYWluJ3QgZmluaXNoZWQgeWV0CgpGcmkgU2VwIDIwIDE0OjAwOjE2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW46IHRyeWluZyB0byBmaXggIzg4NDEyIGJ5IGJ5cGFzc2luZwoJICBhbGwgdGhlIHB5dGhvbiBzdWJkaXIgaWYgcHl0aG9uIGFpbid0IGRldGVjdGVkCgpUaHUgU2VwIDE5IDIxOjQ2OjUzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOgoJICBtYWRlIGNvbmZpZ3VyaW5nIHdpdGggcmVnZXhwcy9hdXRvbWF0YS91bmljb2RlIHRoZSBkZWZhdWx0CgkgIGJ1dCB3aXRob3V0IHNjaGVtYXMgQVRNCgkqIHRlc3RSZWdleHAuYyB2YWxpZC5jIHhtbHJlZ2V4cC5jIGluY2x1ZGUvbGlieG1sL3htbHJlZ2V4cC5oOgoJICBmaXhlZCB0aGUgcmVnZXhwIGJhc2VkIERURCB2YWxpZGF0aW9uIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkKCSAgcHJvYmxlbSBieSBzd2l0Y2hpbmcgdG8gYSBjb21wYWN0IGZvcm0gZm9yIGRldGVybWluaXN0IHJlZ2V4cHMKCSAgYW5kIGRldGVjdGluZyB0aGUgZGV0ZXJtaW5pc20gcHJvcGVydHkgaW4gdGhlIHByb2Nlc3MuIFNlZW1zCgkgIGFzIGZhc3QgYXMgdGhlIG9sZCBEVEQgdmFsaWRhdGlvbiBzcGVjaWZpYyBlbmdpbmUgOi0pIGRlc3BpdGUKCSAgdGhlIHJlZ2V4cCBidWlsdCBhbmQgY29tcGFjdGlvbiBwcm9jZXNzLgoKV2VkIFNlcCAxOCAxODoyNzoyNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZGV0ZXJtaW5pc20gaXMgZGVidWdnZWQsIG5ldyBEVEQgY2hlY2tpbmcgY29kZSBub3cgd29ya3MKCSAgYnV0IHhtbEZBQ29tcHV0ZXNEZXRlcm1pbmlzbSB0YWtlcyBmYXIgdG9vIG11Y2ggQ1BVIGFuZCB0aGUgd2hvbGUKCSAgc2V0IHVzdWVzIHRvbyBtdWNoIG1lbW9yeSB0byBiZSByZWFsbHkgdXNhYmxlIGFzLWlzCgpXZWQgU2VwIDE4IDAwOjU0OjMwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGVkIGFub3RoZXIgc3R1cGlkIGJ1ZyBpbiB4bWxHZXROb2RlUGF0aCgpCgkqIHhtbGxpbnQuYzogLS12ZXJzaW9uIG5vdyByZXBvcnQgdGhlIG9wdGlvbnMgY29tcGlsZWQgaW4KClR1ZSBTZXAgMTcgMjM6NDg6MDcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogc21hbGwgY2xlYW51cAoJKiB2YWxpZC5jIHhtbHJlZ2V4cC5jOiBzd2l0Y2hlZCBEVEQgdmFsaWRhdGlvbiB0byB1c2Ugb25seSByZWdleHAKCSAgd2hlbiBjb25maWd1cmVkIHdpdGggdGhlbS4gQSBiaXQgb2YgZGVidWdnaW5nIGFyb3VuZCB0aGUgZGV0ZXJtaW5pc20KCSAgY2hlY2tzIGlzIHN0aWxsIG5lZWRlZAoKVHVlIFNlcCAxNyAyMToyMjoyNSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbF93cmFwLmg6IHN0dXBpZCBidWcgZm91bmQgYnkgbWF0dGFtQG5ldGNvdXJyaWVyLmNvbQoKVHVlIFNlcCAxNyAxOTo1ODoyNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogc21hbGwgcG9ydGFiaWxpdHkgZ2xpdGNoIGZpeGVkLgoKTW9uIFNlcCAxNyAxMjozODowOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGluY29tcGxldGUgc3RlcHMgZm9yIHJlYWwvZG91YmxlIHN1cHBvcnQKCSogdGVzdEF1dG9tYXRhLmMgaW5jbHVkZS9saWJ4bWwveG1sYXV0b21hdGEuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxyZWdleHAuaDogYXZvaWRpbmcgYSBjb21waWxhdGlvbiBwcm9ibGVtCgkqIHZhbGlkLmMgaW5jbHVkZS9saWJ4bWwvdmFsaWQuaDogc3RhcnRpbmcgdGhlIHdvcmsgdG93YXJkIHVzaW5nCgkgIHRoZSByZWdleHBzIGZvciBhY3R1YWwgRFREIHZhbGlkYXRpb24KCkZyaSBTZXAgMTMgMTY6NDY6MTQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGhhc2guYzogY29zbWV0aWMgY2xlYW51cAoJKiB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaCBpbmNsdWRlL2xpYnhtbC92YWxpZC5oOiBzdGFydGVkIAoJICBpbnRlZ3JhdGluZyBhIERURCB2YWxpZGF0aW9uIGxheWVyIGJhc2VkIG9uIHRoZSByZWdleHBzCgpUaHUgU2VwIDEyIDE4OjAxOjI5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmM6IGZpeGVkIGEgYnVnIHJlcG9ydGVkIGJ5IEplZmYgR29mZiwKCSAgdGhlIGRldGVybWluaXNtIHdhcyB0ZXN0ZWQgYmVmb3JlIGVsaW1pbmF0aW5nIHRoZSBlcHNpbG9uCgkgIHRyYW5zaXRpb25zIDotKAoKVGh1IFNlcCAxMiAxNjo1Nzo0NSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weQoJICBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbCBweXRob24vbGlieG1sMmNsYXNzLnR4dAoJICBweXRob24vbGlieG1sX3dyYXAuaCBweXRob24vdHlwZXMuYzogdXBkYXRlZCB0aGUgcHl0aG9uCgkgIGJpbmRpbmdzLCBhZGRlZCBjb2RlIGZvciBlYXNpZXIgRmlsZSBJL08sIGFuZCB0aGUgYWJpbGl0eSB0bwoJICBkZWZpbmUgYSByZXNvbHZlciBmcm9tIFB5dGhvbiBmaXhpbmcgYnVnICM5MTYzNQoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL2luYnVmLnB5CgkgIHB5dGhvbi90ZXN0cy9vdXRidWYucHkgcHl0aG9uL3Rlc3RzL3B1c2hTQVhodG1sLnB5CgkgIHB5dGhvbi90ZXN0cy9yZXNvbHZlci5weSBweXRob24vdGVzdHMvc2VyaWFsaXplLnB5OiB1cGRhdGVkCgkgIGFuZCBhdWdtZW50ZWQgdGhlIHNldCBvZiBQeXRob24gdGVzdHMuCgpUdWUgU2VwIDEwIDIxOjA1OjI4IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogYWRkZWQgbW9yZSByZWFkbWUgaW5mbyBmb3IgdGhlIGJpbmFyeQoJICBwYWNrYWdlLgoJClR1ZSBTZXAgMTAgMTQ6MTU6MTggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGZpeGVkIGEgc3R1cGlkIG91dCBvZiBib3VuZCBhcnJheSBlcnJvcgoKVHVlIFNlcCAxMCAxMzowOToxNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sSU8uaCB4bWxJTy5jIHBhcnNlci5jIEhUTUxwYXJzZXIuYyBET0NCcGFyc2VyLmM6CgkgIG1lc3NpbmcgYXJvdW5kIHdpdGggc3VwcG9ydCBmb3IgV2luZG93cyBwYXRoLCBjbGVhbnVwcywKCSAgdHJ5aW5nIHRvIGlkZW50aWZ5IGFuZCBmaXggdGhlIHZhcmlvdXMgY29kZSBwYXRoIHRvIHRoZQoJICBmaWxlbmFtZSBhY2Nlc3MuIEFkZGVkIHhtbE5vcm1hbGl6ZVdpbmRvd3NQYXRoKCkKClRodSBTZXAgIDUgMTY6MTk6MTggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVycm9yLmMgdmFsaWQuYzogd29ya2luZyBvbiBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nIG9mIHZhbGlkaXR5CgkgIGVycm9ycywgZXNwZWNpYWxseSBwcm92aWRpbmcgYW4gYWNjdXJhdGUgY29udGV4dC4KCSogcmVzdWx0L3ZhbGlkL3hsaW5rLnhtbC5lcnIgcmVzdWx0L3ZhbGlkL3Jzcy54bWwuZXJyOiBiZXR0ZXIKCSAgZXJyb3IgcmVwb3J0cyBpbiB0aG9zZSBjYXNlcy4KClRodSBTZXAgIDUgMTM6Mjk6NDcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgYzE0bi5jIGVudGl0aWVzLmMgbGlzdC5jCgkgIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHhtbElPLmM6IGdldCByaWQgb2YgYWxsIHRoZSAKCSAgcGVycm9yKCkgY2FsbHMgbWFkZSBpbiB0aGUgbGlicmFyeSBleGVjdXRpb24gcGF0aHMuIFRoaXMKCSAgc2hvdWxkIGZpeCBib3RoICM5MjA1OSBhbmQgIzkyMzg1CgpUaHUgU2VwICA1IDEzOjEzOjE3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IG1lbW9yeSBsZWFrIHJlcG9ydGluZyB3YXMgYnJva2VuIGFmdGVyIGEgY2hhbmdlCgkgIG9mIHRoZSBwcmVwcm9jZXNzb3Igc3ltYm9sIHVzZWQgdG8gYWN0aXZhdGUgaXQuCgpUaHUgU2VwICA1IDEzOjEwOjU3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IHRyeSB0byBtYWtlIHRoZSBjb3B5IGZ1bmN0aW9uIHdvcmsgZm9yIG5vZGUgb2YKCSAgdHlwZSBYTUxfRE9DVU1FTlRfRlJBR19OT0RFLCB0aGV5IGFyZSBvbmx5IGNyZWF0ZWQgYnkgdGhlCgkgIERPTSBsYXllcnMgdGhvdWdoLCBub3QgbGlieG1sMiBpdHNlbGYuCgpUaHUgU2VwICA1IDEyOjU3OjM4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiB0cnkgdG8gcHJvdmlkZSBmaWxlIGFuZCBsaW5lIGluZm9ybWF0aW9ucywgbm90IGFsbAoJICBtZXNzYWdlcyBhcmUgY292ZXJlZCwgYnV0IGl0J3MgYSAoZ29vZCkgc3RhcnQKClRodSBTZXAgIDUgMTI6NDk6MzUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IHJlaW1wbGVtZW50ZWQgYSBsYXJnZSBwYXJ0IG9mIHRoZSBYSW5jbHVkZQoJICBwcm9jZXNzb3IsIHRyeWluZyB0byBtaW5pbWl6ZSByZXNvdXJjZXMgdXNlZCwgSmFtZXMgSGVuc3RyaWRnZQoJICBwcm92aWRlZCBhIGh1Z2UgdGVzdCBjYXNlIHdoaWNoIHdhcyBleGhpYml0aW5nIHNldmVyZSBtZW1vcnkKCSAgY29uc3VtcHRpb24gcHJvYmxlbXMuCgpUaHUgU2VwICA1IDEwOjA3OjEzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW06IGFwcGxpZWQgcGF0Y2ggZnJvbSBDaHJpc3RvcGhlIE1lcmxldCB0bwoJICByZWVzdGFibGlzaCBERVNURElSCgpXZWQgU2VwICA0IDE0OjEzOjM0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbjogZml4ZXMgbGliYXJ5IHBhdGggZm9yIHg4Nl82NCBBTUQKClR1ZSBTZXAgIDMgMjE6MTQ6MTkgTURUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC9pbmNsdWRla2V5d29yZC5jCgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC54bWw6CgkocGx1cyByZXN1bHRpbmcgZ2VuZXJhdGVkIGh0bWwgZmlsZXMpCglmaXhpbmcgb25lIHNwb3QgSSBtaXNzZWQgaW4gdGhlIHR1dG9yaWFsIHdoZXJlIEkgaGFkbid0IGZyZWVkCgltZW1vcnkgcHJvcGVybHkKClNhdCBBdWcgMzEgMTk6MzE6MTcgTURUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC9pbmNsdWRlYWRkYXR0cmlidXRlLmMKCSogZG9jL3R1dG9yaWFsL2luY2x1ZGVhZGRrZXl3b3JkLmMKCSogZG9jL3R1dG9yaWFsL2luY2x1ZGVnZXRhdHRyaWJ1dGUuYwoJKiBkb2MvdHV0b3JpYWwvaW5jbHVkZWtleXdvcmQuYwoJKiBkb2MvdHV0b3JpYWwveG1sdHV0b3JpYWwueG1sCgkqIGRvYy90dXRvcmlhbC8qLmh0bWw6Cgl1cGRhdGUgdHV0b3JpYWwgdG8gcHJvcGVybHkgZnJlZSBtZW1vcnkgKHRoYW5rcyB0byBDaHJpc3RvcGhlcgoJUi4gSGFycmlzIGZvciBwb2ludGluZyBvdXQgdGhhdCB0aGlzIG5lZWRzIHRvIGJlIGRvbmUpCgkqIGRvYy90dXRvcmlhbC9pbWFnZXMvY2FsbG91dHMvKi5wbmc6CglhZGRlZCBpbWFnZSBmaWxlcyBzbyB0aGUgY2FsbG91dHMgYXJlIGdyYXBoaWNhbCwgbWFraW5nIGl0CgllYXNpZXIgdG8gcmVhZCAoIHVzZSAiLS1wYXJhbSBjYWxsb3V0LmdyYXBoaWNzIDEiIHRvIGdlbmVyYXRlCglodG1sIHdpdGggZ3JhcGhpY2FsIGNhbGxvdXRzKQoJCldlZCBBdWcgMjggMTM6NDQ6NTQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9MaWJ4bWwyLUxvZ28tMTgweDE2OC5naWYgZG9jL0xpYnhtbDItTG9nby05MHgzNC5naWY6CgkgIG5pY2UgbG9nb3MgZ2VuZXJhdGVkIGJ5IE1hcmMgTGl5YW5hZ2UKCSogZG9jL3NpdGUueHNsICouaHRtbDogY2hhbmdlZCB0aGUgc3R5bGVzaGVldCB0byBzaG93IHRoZSBuZXcKCSAgbG9nbyBhbmQgcmVnZW5lcmF0ZWQgdGhlIHBhZ2VzCgpTdW4gQXVnIDI1IDE2OjM4OjA1IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBoYW5kbGUgV2luZG93cyBzZXBlY2lmaWMgZmlsZTovL2xvY2FsaG9zdC8gc2VtYW50aWMgLi4uCgpUaHUgQXVnIDIyIDIyOjAzOjE5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBwb3NzaWJsZSBtZW0gbGVhayBwYXRjaCBmcm9tIEphc29uIEFkYW1zCgpUaHUgQXVnIDIyIDE3OjI3OjMwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBpbnRlZ3JhdGVkIHhmOmVzY2FwZS11cmkoKSBmcm9tIFdlc2xleSBUZXJwc3RyYQoJICBpbiB0aGUgWFF1ZXJ5IG5hbWVzcGFjZQoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjQuMjQKCSogZG9jLyouaHRtbDogdXBkYXRlZCB0aGUgd2ViIHBhZ2VzCgpUaHUgQXVnIDIyIDE2OjE5OjQyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5OiBjbG9zaW5nIGJ1ZyAjODUyNTggYnkgZ2VuZXJhdGluZyBjb25kaXRpb25hbAoJICBjb21waWxlIGNoZWNrIHRvIGF2b2lkIGxpbmtpbmcgdG8gcm91dGluZXMgbm90IGNvbmZpZ3VyZWQgaW4uCgoyMDAyLTA4LTIyICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcG9ib3guY29tPgoKCSogYXV0b2dlbi5zaDogdXBkYXRlIGVycm9yIG1lc3NhZ2UgZm9yIG1pc3NpbmcgYXV0b21ha2UKClRodSBBdWcgMjIgMTE6NDU6NTAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbTogdHlwbyBpbiB0YXJnZXQgbmFtZSByZXN1bHRlZCBpbiBsaWJ4bWwyLnB5CgkgIHRvIG5vdCBiZSByZWJ1aWx0LiBmaXhlZCBERVNURElSIHNpbWlsYXJ5IHRvIHRoZSBsaWJ4c2x0IG9uZS4KClRodSBBdWcgMjIgMDk6MTU6MDAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL3dpbjMyL01ha2VmaWxlLm1pbmd3OiB1cGRhdGVkIHdpdGggdmVyc2lvbiBmcm9tIAoJICBFbGl6YWJldGggQmFyaGFtIGF0IGh0dHA6Ly9zb2dneXRyb3VzZXJzLm5ldC9yZXBvc2l0b3J5LwoKVHVlIEF1ZyAyMCAxNjo0MDo0OCBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiBhZGRlZCB0aGUgcHJlZml4IGxvY2F0aW9uIHRvIHRoZSBpbmNsdWRlCglhbmQgbGliIHNlYXJjaCBwYXRoLgoJCjIwMDItMDgtMTggIEhhdm9jIFBlbm5pbmd0b24gIDxocEBwb2JveC5jb20+CgoJKiBhdXRvZ2VuLnNoOiBoYXJkY29kZSBhY2xvY2FsLTEuNC9hdXRvbWFrZS0xLjQgc28gdGhhdCB1c2VycyB3aXRoCglib3RoIGF1dG9tYWtlIDEuNiBhbmQgMS40IGluc3RhbGxlZCBnZXQgdGhlIHJpZ2h0IGF1dG9tYWtlLiBNZWFucwoJY29tcGlsYXRpb24gZnJvbSBDVlMgd2lsbCBub3cgcmVxdWlyZSB0aGUgbGF0ZXN0IGF1dG9tYWtlIDEuNAoJcmVsZWFzZSwgb3IgbWFudWFsbHkgY3JlYXRpbmcgc3ltbGlua3MgY2FsbGVkICJhdXRvbWFrZS0xLjQiIGFuZAoJImFjbG9jYWwtMS40IgoKV2VkIEF1ZyAxNCAxODo1NDoxOSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIHB5dGhvbi9NYWtlZmlsZS5hbTogbW9yZSBBTUQgNjQgaW5kdWNlZCBjaGFuZ2VzIGZyb20KCSAgRnJlZGVyaWMgQ3JvemF0CgpXZWQgQXVnIDE0IDE2OjQzOjUzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBvb3BzIEkgd2FzIG1pc3NpbmcgdGhlIHhtbDpiYXNlIGZpeHVwIHRvbwoJKiByZXN1bHQvWEluY2x1ZGUvKi54bWw6IHRoaXMgYWRkcyB4bWw6YmFzZSBhdHRyaWJ1dGVzIHRvIG1vc3QKCSAgcmVzdWx0cyBvZiB0aGUgdGVzdHMKCldlZCBBdWcgMTQgMTY6MDU6MzcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IHF1aWNrIGJ1dCBhcHBhcmVudGx5IHdvcmtpbmcgaW1wbGVtZW50YXRpb24gb2YKCSAgeGk6ZmFsbGJhY2ssIHNob3VsZCBjbG9zZSBidWcgIzg5Njg0CgkqIE1ha2VmaWxlLmFtIHRlc3QvWEluY2x1ZGUvZG9jcy9mYWxsYmFjay54bWwgCgkgIHJlc3VsdC9YSW5jbHVkZS9mYWxsYmFjay54bWw6IGFkZGVkIGEgYmFzaWMgdGVzdCBmb3IgZmFsbGJhY2ssCgkgIGFuZCBydW4gd2l0aCAtLW5vd2FybmluZyB0byBhdm9pZCBhIHNwdXJpb3VzIHdhcm5pbmcKCSogY29uZmlndXJlLmluOiBhcHBsaWVkIHBhdGNoIGZyb20gRnJlZGVyaWMgQ3JvemF0IGZvciBweXRob24KCSAgYmluZGluZ3Mgb24gQU1EIDY0Yml0cyBtYWNoaW5lcy4KCldlZCBBdWcgMTQgMTA6NDc6NDYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiB4bWxTQVhVc2VyUGFyc2VNZW1vcnkoKSByZWFsbHkgb3VnaHQgdG8gZmFpbCBpZgoJICB0aGUgY2FsbGVyIGRvbid0IHBhc3MgYSBTQVggY2FsbGJhY2sgYmxvY2suCgpXZWQgQXVnIDE0IDEwOjI5OjAyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFwcGxpZWQgdGhlIHNhbWUgZml4IGZvciB0aGUgWE1MLTEuMCBuYW1lc3BhY2UgdG8KCSAgeG1sU2VhcmNoTnNCeUhyZWYoKSBhcyB3YXMgZG9uZSBmb3IgeG1sU2VhcmNoTnMoKQoKTW9uIEF1ZyAxMiAxNjo1MjowOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLjM6IHNtYWxsIGNsZWFudXAgb2YgdGhlIG1hbiBwYWdlCgkqIEhUTUx0cmVlLmM6IGZpeGVkIGEgcG90ZW50aWFsIHByb2JsZW0gcmFpc2VkIGJ5IFBldHIgVmFuZHJvdmVjCgkgIHdoZW4gc2VyaWFsaXppbmcgSFJFRiBhdHRyaWJ1dGVzIGdlbmVyYXRlZCBieSBYU0xULgoKTW9uIEF1ZyAxMiAxNToyNDowNSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9IVE1MdHJlZS5oOiBpbnRlZ3JhdGVkIGEgY2xlYW5lZCB1cAoJICB2ZXJzaW9uIG9mIE1hcmMgTGl5YW5hZ2UnIHBhdGNoIGZvciBib29sZWFuIGF0dHJpYnV0ZXMgaW4gSFRNTAoJICBvdXRwdXQKCk1vbiBBdWcgMTIgMTQ6MTE6NTkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi90ZXN0cy9zZXJpYWxpemUucHk6IGZpeGVkIHRoZSB0ZXN0IHJlc3VsdHMsIGluZGVudGluZwoJICBiZWhhdmlvdXIgY2hhbmdlZCBzbGlnaHRseQoKVGh1IEF1ZyAgOCAxMTowMDoyNiAyMDAyICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmMgd2luMzIvbGlieG1sMi5kZWYuc3JjOiBhZGRlZAoJbmV3IGMxNG4gZnVuY3Rpb24gdG8gV2luZG93cyBkZWYgZmlsZXMKCQpGcmkgQXVnICAyIDE2OjQ2OjQ2IDIwMDIgIEFsZWtzZXkgU2FuaW4gIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogYzE0bi5jOiBmaXhlZCBhIG1lbW9yeSBsZWFrIGluIGMxNG4gY29kZQoKU2F0IEF1ZyAgMyAwMDoxNTowNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IGFkZGluZyBhIG5ldyBBUEkgZm9yIENocmlzdGlhbgoJICBHbGFobjogeG1sUGFyc2VCYWxhbmNlZENodW5rTWVtb3J5UmVjb3ZlcgoJKiB2YWxpZC5jOiBwYXRjaCBmcm9tIFJpY2sgSm9uZXMgZm9yIHNvbWUgZ3JhbW1hciBjbGVhbnVwIGluCgkgIHZhbGlkYXRpb24gbWVzc2FnZXMKCSogcmVzdWx0L1ZDLyogcmVzdWx0L3ZhbGlkLyo6IHRoaXMgc2xpZ2h0bHkgY2hhbmdlIHNvbWUgb2YgdGhlCgkgIHJlZ3Jlc3Npb24gdGVzdHMgb3V0cHV0cwoKVGh1IEF1ZyAgMSAxNDo1MDoyOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiB0cnlpbmcgdG8gZml4IGEgcHJvYmxlbSBpbiBuYW1lc3BhY2VkIGF0dHJpYnV0ZSBoYW5kbGluZwoJICByYWlzZWQgYnkgQ2hyaXN0aWFuIEdsYWhuCgpUaHUgQXVnICAxIDEyOjE3OjMwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jIGluY2x1ZGUvbGlieG1sL2VuY29kaW5nLmg6IE9wZW5pbmcgdGhlIGludGVyZmFjZQoJICB4bWxOZXdDaGFyRW5jb2RpbmdIYW5kbGVyIGFzIHJlcXVlc3RlZCBpbiAjODk0MTUKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vc2V0dXAucHkuaW46IGFwcGxpZWQgY2xlYW51cAoJICBwYXRjaGVzIGZyb20gTWFyYy1BbmRyZSBMZW1idXJnCgkqIHRyZWUuYzogZml4aW5nIGJ1ZyAjODkzMzIgb24gYSBzcGVjaWZpYyBjYXNlIG9mIGxvb3NpbmcgCgkgIHRoZSBYTUwtMS4wIG5hbWVzcGFjZSBvbiB4bWw6eHh4IGF0dHJpYnV0ZXMKCldlZCBKdWwgMzEgMjM6Mjc6NDIgMjAwMiAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBjMTRuLmMgaW5jbHVkZS9saWJ4bWwvYzE0bi5oOiBmaXhlZCBvbmUgbW9yZSBjMTRuICsgbmFtZXNwYWNlcwoJY29ybmVyIGNhc2UgZnJvbSBuZXcgTWVybGluJ3MgdGVzdCBzdWl0ZSBhbmQgYWRkZWQgYSBjYWxsYmFjawoJdGhhdCB3aWxsIGJlIHVzZWQgdG8gaW1wcm92ZSB4bWxzZWMgcGVyZm9ybWFuY2UKCQoKTW9uIEp1bCAyOSAxODoyMjowMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogdHJ5aW5nIHRvIGZpeCB0aGUgPHN0eWxlPiBlc2NhcGluZyBwcm9ibGVtIGluCgkgIEhUTUwgc2VyaWFsaXphdGlvbiBidWcgIzg5MzQyCgpUaHUgSnVsIDI1IDAxOjMzOjQ3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MveG1sLmh0bWwgZG9jLyouaHRtbDogYXBwbGllZCBzeW50YXggcGF0Y2ggZnJvbSBSaWNrIEpvbmVzCgkgIGFuZCByZWJ1aWx0IHRoZSB3ZWIgc2l0ZS4KCk1vbiBKdWwgMjIgMTE6MDQ6NDggUERUIDIwMDIgIEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGFkZGVkIF9wcml2YXRlIG1lbWJlciB0byB4bWxOcyBzdHJ1Y3QKClN1biBKdWwgMjEgMTc6NDg6NDcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogZml4aW5nIGJ1ZyAjODQ4NzYgYmFzZWQgb24gdGhlIHhtbCB3b3JraW5nCgkgIGNvZGUuCgpTdW4gSnVsIDIxIDE5OjE1OjAwIEhLVCAyMDAyIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtOiBlbmhhbmNlZCB0byBmaXggYnVnIDcyMDEyIChlcnJvcnMKCSAgd2hlbiB1c2luZyAnLWpYJyBtYWtlIHBhcmFtZXRlcikKCkZyaSBKdWwgMTkgMTY6MzU6MDAgSEtUIDIwMDIgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4cGF0aC5jOiBzbWFsbCBhZGRpdGlvbmFsIGVuaGFuY2VtZW50IGZvciBib29sZWFucwoJICBjb21wYXJlZCB0byBub2Rlc2V0cwoKV2VkIEp1bCAxNyAxOTo0ODoxNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogY2hhbmdlZCB0aGUgb3JkZXIgb2YgdGhlIGVuY29kaW5nIGRlY2xhcmF0aW9uCgkgIGF0dHJpYnV0ZXMgaW4gdGhlIG1ldGEgdGFncyBkdWUgdG8gYSBidWcgaW4gSUUvTWFjCgpGcmkgSnVsIDEyIDA4OjQ1OjAwIEhLVCAyMDAyIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogZW5oYW5jZWQgaGFuZGxpbmcgb2YgYm9vbGVhbnMgKGVzcGVjaWFsbHkgJz0nCgkgIGFuZCAnIT0nIGZvciBub2Rlc2V0cykgLSBmaXhlcyBidWcgODUyNTYuICBBZGRlZCBuZXcKCSAgcm91dGluZSB4bWxYUGF0aE5vdEVxdWFsVmFsdWVzIGZvciBtb3JlIHByb3BlciBoYW5kbGluZwoJICBvZiAnIT0nIHdoZW4gbm9kZXNldHMgYXJlIGludm9sdmVkLgoKVGh1IEp1bCAxMSAyMTo0NTo1MiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL01ha2VmaWxlLmFtOiBmaXhpbmcgUmVkIEhhdCBidWcgIzY4NjE0IGJ5IGFkZGluZyB0aGUKCSAgZG9jL3htbGNhdGFsb2dfbWFuLnhtbCB0byB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbgoKV2VkIEp1bCAxMCAyMToyNjoxMyBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgkKCSogd2luMzIvTWFrZWZpbGUubXN2YzogQWRkZWQgYSBjb3B5ICoucGRiIHRvIGluc3RhbGwsIGZldyBoYXZlCgkgIGFza2VkIGZvciB0aGlzLgoJClNhdCBKdWwgIDYgMjE6NTU6NTkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNC4yMwoJKiBkb2MvKjogcmVidWlsdCB0aGUgZG9jcwoKU2F0IEp1bCAgNiAyMToxMToyMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGluZyBidWcgIzg0MTY5IGJ5IGZpeGluZyB0aGUKCSAgY29tbWVudCBvZiB4bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dCB0byBkZXNjcmliZSB0aGUgCgkgIGVuY29kaW5nIGRldGVjdGlvbiBwYXJhbWV0ZXJzIGJldHRlci4KClNhdCBKdWwgIDYgMTk6NDQ6NTYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeGluZyBidWcgIzc5MzMxIGluIG9uZSBwYXRoIHRoZSBsb29rdXAgZm9yCgkgIElEIGF0dHJpYnV0ZXMgb24gYSBuYW1lc3BhY2VkIG5vZGUgd2Fzbid0IGhhbmRsZWQgY29ycmVjdGx5IDotXAoKRnJpIEp1bCAgNSAyMDowNzo0MyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiB0cnlpbmcgdG8gZml4IDg3MjM1IGFib3V0IGRpc2NhcmRlZCB3aGl0ZQoJICBzcGFjZXMgaW4gdGhlIEhUTUwgcGFyc2VyLgoJKiByZXN1bHQvSFRNTC8qOiB0aGlzIGNoYW5nZXMgdGhlIG91dHB1dCBvZiBhIG51bWJlciBvZiBIVE1MCgkgIHJlZ3Jlc3Npb24gdGVzdHMKCk1vbiBKdWwgIDEgMjM6MjM6NDEgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBSaWNoYXJkIEppbmtzIGZvciB0aGUgbmFtZXNwYWNlCgkgIGF4aXMgKyBmaXhlZCBhIG1lbW9yeSBlcnJvci4KCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmM6IGFwcGxpZWQgcGF0Y2hlcyBmcm9tIFBldGVyIEphY29iaQoJICByZW1vdmluZyBjdHh0LT50b2tlbiBmb3IgZ29vZC4KCSogeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jOiBmaXhlZCBhIGZldyBtZW1vcnkgbGVha3MKCSAgcG9wcGVkIG91dCBieSB0aGUgcmVncmVzc2lvbiB0ZXN0cy4KCSogTWFrZWZpbGUuYW06IHBhdGNoIGZvciB0aHJlYWRzIG1ha2VmaWxlIGZyb20gR2FyeSBQZW5uaW5ndG9uCgpGcmkgSnVuIDI4IDE5OjM4OjAwIEhLVCAyMDAyIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogZW5oYW5jZWQgYmVoYXZpb3VyIG9mIHBvc2l0aW9uKCkgYWZ0ZXIgdXNhZ2Ugb2YKCSAgZXhwcmVzc2lvbnMgaW52b2x2aW5nIHByZWNlZGluZy1zaWJsaW5nIChldCBhbCkuCgpUdWUgSnVuIDE4IDA5OjU4OjQ4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBoYXNoLmM6IGFwcGxpZWQgYSBwYXRjaCBmcm9tIFBldGVyIEphY29iaSB0byBzb2x2ZSBhIHByb2JsZW0KCSAgd2hlbiBjb21waWxpbmcgd2l0aCB0aGUgV2F0Y29tIEMgb24gV2luMzIgCgkqIHJlc3VsdC9zY2hlbWFzLyouZXJyOiB0aGUgY2hhbmdlIG9mIGhhc2hpbmcgYWxnbyBnZW5lcmF0ZWQKCSAgcGVybXV0YXRpb25zIGluIHRoZSBvdXRwdXQKCk1vbiBKdW4gMTcgMTk6MDI6NDkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGhhc2guYzogYXBwbGllZCBwYXRjaCBmcm9tIFNhbmRlciBWZXNpayBpbXByb3ZpbmcgdGhlIHF1YWxpdHkgb2YKCSAgdGhlIGhhc2ggZnVuY3Rpb24uCgoyMDAyLTA2LTE0ICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgZGVidWdYTUwuYyBlbmNvZGluZy5jCgluYW5vZnRwLmMgbmFub2h0dHAuYyBwYXJzZXIuYyB0cmVlLmMgdXJpLmMgeG1sSU8uYwoJeG1sbGludC5jIHhwYXRoLmM6IHJlcGxhY2VkIHNwcmludGYoKSB3aXRoIHNucHJpbnRmKCkKCXRvIHByZXZlbnQgcG9zc2libGUgYnVmZmVyIG92ZXJmbG93ICh0aGUgYnVnIHdhcyBwb2ludGVkCglvdXQgYnkgQW5qdSBQcmVtYWNoYW5kcmFuKSAKClRodSBKdW4gMTMgMTc6MzA6MjUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiByZW1vdmVkIGFuIHVuaW5pdGlhbGl6ZWQgZGF0YSBlcnJvciBwb3BwZWQgYnkgdmFsZ3JpbmQKCSAgb24gUEUgcmVmZXJlbmNlcwoKV2VkIEp1biAxMiAyMTozODo0NiBNRFQgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbC5odG1sCglhZGRpbmcgdHV0b3JpYWwgcmVmZXJlbmNlIHRvIHRoZSB3ZWIgcGFnZQoKV2VkIEp1biAxMiAyMToyNjowOCBNRFQgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3R1dG9yaWFsL3htbHR1dG9yaWFsLnhtbAoJKiBkb2MvdHV0b3JpYWwvYXIwMXMwNy5odG1sCgkqIGRvYy90dXRvcmlhbC9hcGUuaHRtbAoJKiBkb2MvdHV0b3JpYWwvaW5jbHVkZWdldGF0dHJpYnV0ZS5jCglhZGRpbmcgc2VjdGlvbiB0byB0dXRvcmlhbCBhYm91dCByZXRyaWV2aW5nIGFuIGF0dHJpYnV0ZQoJdmFsdWUKClR1ZSBKdW4gMTEgMTI6MDc6MDQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBhcHBsaWVkIGEgY291cGxlIG9mIHBhdGNoZXMgZnJvbSBQZXRlciBKYWNvYmkgdG8gc3RhcnQKCSAgdG8gZ2V0IHJpZCBvZiBjdHh0LT50b2tlbiwgd2l0aCBhIHBvc3NpYmxlIHNpZ25pZmljYW50IHNwZWVkCgkgIGltcHJvdmVtZW50IHRvIGJlIGdhaW5lZCBvbmNlIGRvbmUuIEJldHRlciBjb21wbGlhbmNlIHdpdGggUEUKCSAgcmVmZXJlbmNlcyBjb25zdHJ1Y3RzIGluIERURHMgdG9vLgoJKiB0ZXN0L3ZhbGlkL3RbMC05XSogcmVzdWx0L3ZhbGlkL3RbMC05XSo6IGFkZGVkIGEgc2V0IG9mIHRlc3RzCgkgIGZyb20gUGV0ZXIgdG9vCgpUdWUgSnVuIDExIDA5OjI1OjEyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogQmFiYWsgVmFoZWRpcG91ci1LdW56ZSByZXBvcnRlZCB0aGF0IG9wZW5UYWcgaW4gCgkgIHhtbFBhcnNlRWxlbWVudCB3YXMgbGlrZWx5IHRvIGhhdmUgYmVlbiBkZWFsbG9jYXRlZCBhdCB0aGUKCSAgdGltZSBvZiB0aGUgcmVwb3J0LCBwb3NzaWJseSBsZWFkaW5nIHRvIHNlZ2ZhdWx0LiBKdXN0IHJlcG9ydAoJICB0aGUgdGFnIG5hbWUgbm93LgoKTW9uIEp1biAxMCAxODowMDowMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogcGF0Y2ggZnJvbSBSaWNoYXJkIEppbmtzIGZvciBYUGF0aCBzdWJzdHJpbmcoKSBmdW5jdGlvbgoJKiByZXN1bHQvWFBhdGgvZXhwci9zdHJpbmdzIHRlc3QvWFBhdGgvZXhwci9zdHJpbmdzOiBuZXcgc2V0IG9mIHRlc3RzCgoyMDAyLTA2LTA2ICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIHhtbElPLmM6IHBhdGNoIGZyb20gUmFjaGVsIEhlc3RpbG93IHRvIGZpeCBidWcgIzg0MzQwCgpXZWQgSnVuICA1IDE5OjE0OjQ5IE1EVCAyMDAyIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKmRvYy9GQVEuaHRtbAoJZml4aW5nIHR5cG9zIGluIEZBUSwgdGhhbmtzIHRvIFJvYmVydCBGdW5uZWxsIGZvciB0aGUKCWVkaXRpbmcgaGVscAoKV2VkIEp1biAgNSAxNDo1MDoyNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTkVXUzogZ290IGNvbXBsYWludHMgZnJvbSBycG1saW50IHRoYXQgaXQgd2FzIGVtcHR5CgpUdWUgSnVuICA0IDA5OjA5OjE4IE1EVCAyMDAyIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBhZGRlZCBkb2MvdHV0b3JpYWwsIGluY2x1ZGluZzoKCWFwYS5odG1sCglhcGIuaHRtbAoJYXBjLmh0bWwKCWFwZC5odG1sCglhcjAxczAyLmh0bWwKCWFyMDFzMDMuaHRtbAoJYXIwMXMwNC5odG1sCglhcjAxczA1Lmh0bWwKCWFyMDFzMDYuaHRtbAoJaW5jbHVkZWFkZGF0dHJpYnV0ZS5jCglpbmNsdWRlYWRka2V5d29yZC5jCglpbmNsdWRla2V5d29yZC5jCglpbmNsdWRlc3RvcnkueG1sCglpbmRleC5odG1sCgl4bWx0dXRvcmlhbC54bWwKCWxpYnhtbCB0dXRvcmlhbCwgaW5jbHVkaW5nIGdlbmVyYXRlZCBodG1sCgpNb24gSnVuICAzIDIxOjIxOjI2IDIwMDIgIEFsZWtzZXkgU2FuaW4gIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogcmVzdWx0L2MxNG4vZXhjLXdpdGhvdXQtY29tbWVudHMvbWVybGluLWMxNG4tdHdvLSoKCSAgcmVzdWx0L2MxNG4vd2l0aG91dC1jb21tZW50cy9tZXJsaW4tYzE0bi10d28tKgoJICB0ZXN0L2MxNG4vZXhjLXdpdGhvdXQtY29tbWVudHMvbWVybGluLWMxNG4tdHdvLSoKCSAgdGVzdC9jMTRuL3dpdGhvdXQtY29tbWVudHMvbWVybGluLWMxNG4tdHdvLSoKCSAgdGVzdEMxNE4uYyBNYWtlZmlsZS5hbTogYWRkZWQgbWVybGluLWMxNG4tdHdvLnRhci5neiB0ZXN0cyBmb3IgCgljMTRuL2V4Yy1jMTRuIGFuZCBzbGlnaHRseSBtb2RpZmllZCB0ZXN0IHNjcmlwdCB0byBoYW5kbGUKCXRoZXNlIHRlc3QgY2FzZXMKCSogYzE0bi5jOiBmaXhlZCBidWdzIGZvciBjb21wbGljYXRlZCBub2RlcyBzZXQgKG5hbWVzcGFjZQoJd2l0aG91dCBub2RlIGFuZCBvdGhlcnMgZnJvbSBtZXJsaW4tYzE0bi10d28udGFyLmd6KQoJKiBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmMKCXdpbjMyL2xpYnhtbDIuZGVmLnNyYzogIm9wZW5lZCIgeG1sWFBhdGhOb2RlU2V0RnJlZU5zKCkgZnVuY3Rpb24KCWZvciB4bWxzZWMgcGVyZm9ybWFuY2UgcGF0Y2gKCSogeHBhdGguYzogZml4ZWQgc2VsZjo6bm9kZSgpIGZvciBuYW1lc3BhY2VzIGFuZCBhdHRyaWJ1dGVzCgpNb24gSnVuIDAzIDAwOjA0OjIxIDIwMDIgQ2hlbWEgQ2Vsb3JpbyA8Y2hlbWFAeGltaWFuLmNvbT4KCgkqIHRyZWUuaDogYWRkZWQgeG1sRG9jRm9ybWF0RHVtcCB3aGljaCBpcyBqdXN0IGFzIHhtbERvY0R1bXAKCSAgYnV0IHdpdGggdGhlIGZvcm1hdCBwYXJhbWV0ZXIKCSogdHJlZS5jOiBtYWRlIHhtbERvY0R1bXAgYSB3cmFwcGVyIGFycm91bmQgeG1sRG9jRm9ybWF0RHVtcAoKRnJpIE1heSAzMSAxMjoxNjo0OCAyMDAyICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIE1ha2VmaWxlLmFtOiB1cGRhdGVkIGMxNG4gdGVzdHMgc3VpdGUKCSogYzE0bi5jOiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBmb3IgcHJldmlvdXMgYzE0biBwYXRjaAoKRnJpIE1heSAzMSAxMTo0NzoxMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGFub3RoZXIgcGVyb2Zvcm1hbmNlIHBhdGNoIGZyb20gUGV0ZXIgSmFjb2JpLCB0aGF0CgkgIHRpbWUgb24gcGFyc2luZyBhdHRyaWJ1dGUgdmFsdWVzLgoKVGh1IE1heSAzMCAyMzozNDoyNyAyMDAyICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIE1ha2VmaWxlLmFtIHJlc3VsdC9jMTRuLyogdGVzdC9jMTRuLyo6IEMxNE4gdGVzdHMgaW50ZWdyYXRlZAoJaW50byBMaWJYTUwyIHRlc3Qgc3VpdGUKClRodSBNYXkgMzAgMjE6MjM6MDYgMjAwMiAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBjMTRuLmM6IHByb3BhZ2F0aW5nIHhwYXRoIGFuY2Vzc3RvcnMgbm9kZSBmaXggdG8gYzE0bgoJcGx1cyBzbWFsbCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCB0byByZWR1Y2UgbnVtYmVyIG9mCgltYWxsb2NzCgkqIHhwYXRoLmM6IGZpeGVkIGFuY2VzdG9ycyBheGlzIHByb2Nlc3NpbmcgZm9yIG5hbWVzcGFjZSBub2RlcwoKV2VkIE1heSAyOSAxMDoyMTozOSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmMgcGFyc2VyLmMgdHJlZS5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogcGVyZm9ybWFuY2UgcGF0Y2ggZnJvbQoJICBQZXRlciBKYWNvYmkKCk1vbiBNYXkgMjcgMjM6MTg6MzMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNC4yMgoKTW9uIE1heSAyNyAxNjo0NDowNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIHdpbjMyL2xpYnhtbDIuZGVmLnNyYyB3aW4zMi9kc3AvbGlieG1sMi5kZWYuc3JjCgkgIGluY2x1ZGUvbGlieG1sL0hUTUxwYXJzZXIuaDogZml4aW5nICM3OTMzNCBtYWtpbmcgaHRtbFBhcnNlRG9jdW1lbnQKCSAgYSBwdWJsaWMgZW50cnkgcG9pbnQuCgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBBUEkgYW5kIGRvY3MKCk1vbiBNYXkgMjcgMTQ6MTY6MjggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHBhdGNoIGZyb20gUmljaGFyZCBKaW5rcyB0byBmaXggYSBwcm9ibGVtIGludHJvZHVjZWQKCSAgaW4gdGhlIHByZXZpb3VzIHBhdGNoIGFuZCBwb2ludGVkIGJ5IE5vcm0KCkZyaSBNYXkgMjQgMTM6MTA6MjIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluOiBmaXhpbmcgYnVnICM4MTExMgoKRnJpIE1heSAyNCAxMzowMzoyNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmM6IGZpeGluZyBidWcgIzgyODQ4CgpGcmkgTWF5IDI0IDA5OjU0OjQ5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZXN1bHQvY2F0YWxvZ3MvbXljYXRhbG9nLmZ1bGw6IEFsZWtzZXkncyBjb21taXQgY2hhbmdlZCB0aGUKCSAgb3V0cHV0IG9mIG9uZSBjYXRhbG9nIHRlc3QKCkZyaSAyNCBNYXkgMjAwMiAxMjoxNzo0NSBBTSBQRFQgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIGdsb2JhbC5kYXRhIGdsb2JhbHMuYyB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIAoJd2luMzIvbGlieG1sMi5kZWYuc3JjIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmM6IGNoYW5nZWQKCWRlZmF1bHQgdmFsdWUgZm9yIGdsb2JhbCBwYXJhbWV0ZXIgeG1sSW5kZW50VHJlZU91dHB1dCB0byAxIGFuZAoJaW50cm9kdWNlZCBuZXcgZ2xvYmFsIHBhcmFtZXRlciB4bWxUcmVlSW5kZW50U3RyaW5nICh0aGUgc3RyaW5nCgl1c2VkIHRvIGRvIG9uZS1sZXZlbCBpbmRlbnQpIHdpdGggZGVmYXVsdCB2YWx1ZSAiICAiIChhcyBpdCB3YXMKCWluIHRyZWUuYykKClRodSBNYXkgMjMgMTM6NTU6NTcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBNZXJpam4gQnJvZXJlbiBwb2ludGVkIG91dCBhIHByb2JsZW0gd2hlbiBjb21waWxpbmcKCSAgd2l0aCB0cmlvIGFuZCBzY2hlbWFzLgoKV2VkIE1heSAyMiAxMTo1Nzo0OSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogcGF0Y2ggZnJvbSBSaWNoYXJkIEppbmtzIHRvIGZpeCB0aGUgcHJvYmxlbSByYWlzZWQgaW4KCSAgaHR0cDovL21haWwuZ25vbWUub3JnL2FyY2hpdmVzL3htbC8yMDAyLUFwcmlsL21zZzAwMjQ2Lmh0bQoKV2VkIE1heSAyMiAwODozODoxOSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBhIGJpdCBvZiB3b3JrIG9uIGltcG9ydC4KCSogeG1sc2NoZW1hc3R5cGVzLmM6IENoYXJsZXMgQm96ZW1hbiBwcm92aWRlZCBhIGNvbXBhcmUgZnVuY3Rpb24KCSAgZm9yIGRhdGUvdGltZSB0eXBlcyBzbyBtaW4vbWF4IGZhY2V0IHJlc3RyaWN0aW9ucyBzaG91bGQgd29yaywKCSAgaW5kZXRlcm1pbmF0ZSBjb21wYXJpc29ucyByZXR1cm4gYW4gZXJyb3IgaW5zdGVhZCBvZiBlcXVhbC4KCSogdGVzdC9zY2hlbWFzL2RhdGVfMCogcmVzdWx0L3NjaGVtYXMvZGF0ZV8wXzA6IHNwZWNpZmljIHRlc3QKCSAgZnJvbSBDaGFybGVzIEJvemVtYW4gdG9vCgpTYXQgTWF5IDE4IDA5OjU0OjEyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuMyBkb2MvYnVpbGREb2NCb29rQ2F0YWxvZzogYXBwbHkgYSBjb3VwbGUgb2YgcGF0Y2hlcwoJICBmcm9tIENocmlzdGlhbiBDb3JuZWxzc2VuIGZpeGluZyB0aGUgbWFuIHBhZ2VzIGFuZCB0aGUgQ2F0YWxvZwoJICBidWlsZGluZyBzY3JpcHQuCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmg6IG5vdGhpbmcgbmV3IHlldAoJICBuZXh0IHN0ZXAgaXMgPHhzOmltcG9ydD4gSSBub3cgaGF2ZSBhIHJlYXNvbmFibGUgdW5kZXJzdGFuZGluZwoJICBvZiBob3cgaXQgd29ya3MuCgpUaHUgTWF5IDE2IDEwOjQzOjI2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBhcHBsaWVkIGEgc21hbGwgYnVmZmVyIHBlcmZvcm1hbmNlIHBhdGNoIGZyb20gR2FyeSBQZW5uaW5ndG9uCgpXZWQgTWF5IDE1IDAwOjI1OjM0IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogZXhwb3J0ZWQgeG1sWFBhdGhOb2RlU2V0QWRkTnMoKQoKVHVlIE1heSAxNCAxMzowMDo0OCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4aW5nIGFuIFhQYXRoIGZ1bmN0aW9uIGV2YWx1dGF0aW9uIGJ1ZyBwb2ludGVkIG91dAoJICBieSBBbGV4ZXkgRWZpbW92IHdoZXJlIHRoZSBjb250ZXh0IHdhcyBsb3N0IHdoZW4gZXZhbHVhdGluZwoJICB0aGUgZnVuY3Rpb24gYXJndW1lbnRzCgpNb24gMTMgTWF5IDIwMDIgMTE6Mzc6MzkgUE0gUERUIEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmg6IG1ha2VkIHhtbFhQYXRoTm9kZVNldEFkZE5zKCkgCgkgIGZ1bmN0aW9uIHB1YmxpYyBmb3IgWE1MU2VjIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMKCk1vbiBNYXkgMTMgMTI6MzI6MjIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQgOiBmaXhlZCBhIHByb2JsZW0KCSAgd2l0aCB0aGUgSFRNTCBwYXJzZXIgcG9pbnRlZCBieSBHYXJ5IEJlbnNvbgoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3B1c2hTQVhodG1sLnB5OiBzZGRpbmcgdGhlCgkgIGV4YW1wbGUKClRodSAwOSBNYXkgMjAwMiAxMToxOTowMCBBTSBQRFQgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCSogcGFyc2VyLmM6IGZpeGVkIGJ1ZyAjODExNTkgKG1lbW9yeSBncm93dGggaW4gU0FYKQoJClR1ZSAwNyBNYXkgMjAwMiAwOToyMDoyMSBBTSBQRFQgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCSogeHBhdGguYzogZml4ZWQgYnVnICM3ODg1OCAodGhlIHJlYWwgZml4KQoKU2F0IDA0IE1heSAyMDAyIDExOjU2OjMxIFBNIFBEVCBBbGVrc2V5IFNhbmluIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoJKiB4cGF0aC5jOiBmaXhlZCBidWcgIzc4ODU4IChxdWljayBhbmQgZHVydHkgZml4IHRvIGhpZGUgdGhlIHByb2JsZW0pCgkKU3VuIE1heSAgNSAwODo1NzowOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBtb2RpZmllZCB4bWxOb2RlU2V0QmFzZSB0byBhbGxvdyBjaGFuZ2luZyB0aGUKCSAgYmFzZSBvZiBhIGRvY3VtZW50LgoKRnJpIE1heSAgMyAwOToyMDo0MSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IHBhdGNoIENoYXJsZXMgQm96ZW1hbiBmb3IgdmFsaWRhdGlvbiBvZgoJICBhbGwgdGhlIGRhdGUsIHRpbWUsIGFuZCBkdXJhdGlvbiB0eXBlcwoJKiB0ZXN0L3NjaGVtYXMvZHVyXzAqIHJlc3VsdC9zY2hlbWFzL2R1cl8wKjogYXNzb2NpYXRlZCB0ZXN0cwoJKiBjb25maWd1cmUuaW46IGZpeGVkIGFuIGVycm9yIHBvaW50ZWQgYnkgYW4gdXNlcgoJKiB4bWwyLWNvbmZpZy5pbjogZml4ZWQgYW4gZXJyb3IgcG9pbnRlZCBieSBhbiB1c2VyCgpXZWQgMDEgTWF5IDIwMDIgMTE6Mjk6MjcgQU0gUERUIEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxJTy5oIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmMKCXdpbjMyL2xpYnhtbDIuZGVmLnNyYyB4bWxJTy5jOiBleHBvcnRlZCBkZWZhdWx0CgknZmlsZTonLCAnaHR0cDonIGFuZCAnZnRwOicgcHJvdG9jb2xzIGlucHV0IGhhbmRsZXJzIAoJYW5kIG1ha2VkIHByb3RvY29scyBjb21wYXJpc3NvbiBjYXNlIGluc2Vuc2l0aXZlCgpUdWUgQXByIDMwIDE2OjI5OjA1IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IE5ldmVuIEhhcyBkZXRlY3RlZCBhIHR5cG8KClR1ZSBBcHIgMzAgMDg6NDg6MTEgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEFVVEhPUlMgSEFDS0lORzogYWRkZWQgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCSAgYXMgb25lIG9mIHRoZSBwZXJzb25zIGFsbG93ZWQgdG8gY29tbWl0IGRpcmVjdGx5IHRvIHRoZQoJICBtb2R1bGUuCgpNb24gQXByIDI5IDE3OjQ4OjI2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHByZXBhcmluZyAyLjQuMjEKCSogdmFsaWQuYzogcmFpc2VkIGEgdG9vIGxvdyBsaW1pdAoJKiBkb2MvKjogcmVidWlsdCB0aGUgZG9jcyAKCldlZCBBcHIgMjQgMTM6NDE6MDMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3QvWFBhdGgvZXhwci9mbG9hdHMgdGVzdC9YUGF0aC9leHByL2Z1bmN0aW9ucwoJICByZXN1bHQvWFBhdGgvZXhwci9mbG9hdHMgcmVzdWx0L1hQYXRoL2V4cHIvZnVuY3Rpb25zCgkgIHhwYXRoLmM6IGFub3RoZXIgWFBhdGggY29uZm9ybWFuY2UgcGF0Y2ggZnJvbSBSaWNoYXJkIEppbmtzCgpUdWUgQXByIDIzIDE5OjUwOjQwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IGZpeGVkIHZhbGlkYXRpb24gb2YgYXR0cmlidXRlIGdyb3Vwcy4KCSogdGVzdC9zY2hlbWFzIHJlc3VsdC9zY2hlbWFzOiBhZGRlZCBhbiBleGFtcGxlIGZyb20gdGhlIHByaW1lcgoKVHVlIEFwciAyMyAwOToxMTozNyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0geG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jOiBtb3JlIHdvcmsgb24gU2NoZW1hcwoJKiB0ZXN0L3NjaGVtYXMgcmVzdWx0L3NjaGVtYXM6IHVwZGF0ZWQgdGhlIHRlc3QgbGlzdAoKTW9uIEFwciAyMiAxNzo1OToxNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogVE9ETzogdXBkYXRlZCBhIGJpdAoJKiBwYXJzZXIuYzogbWFkZSBhIGNvbW1lbnQgbW9yZSBzcGVjaWZpYwoJKiB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmM6IG1vcmUgd29yayBvbiB0aGUKCSAgU2NoZW1hcyBjb25mb3JtYW5jZS4KCSogdGVzdC9zY2hlbWFzIHJlc3VsdC9zY2hlbWFzOiB1cGRhdGVkIHRoZSB0ZXN0IGxpc3QKClNhdCBBcHIgMjAgMTk6MzY6MzkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC94bWxhdXRvbWF0YS5oOgoJICBpbXBsZW1lbnRpbmcgeHM6YWxsIHdpdGggbWluT2NjdXJzID0gMAoJKiB0ZXMvc2NoZW1hcy8qIHJlc3VsdC9zY2hlbWFzLyo6IGFkZGVkIG1vcmUgdGVzdHMgY292ZXJpbmcKCSAgeHM6YWxsCgpTYXQgQXByIDIwIDA5OjIyOjUwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYzogZmlyc3QgaW1wbGVtZW50YXRpb24gb2YgdGhlIGFsbCBwYXJ0aWNsZSwgdGhpcwoJICBtYXkgbmVlZCB0byBiZSByZXZpc2l0ZWQgZm9yIGNhc2Ugd2hlcmUgbm90IGFsbCB0cmFuc2l0aW9ucwoJICBtdXN0IGJlIGNyb3NzZWQuCgpGcmkgQXByIDE5IDE4OjI2OjA0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFub3RoZXIgZW50aXR5IHByb2Nlc3NpbmcgdXBkYXRlIGZyb20gTWFya3VzIEhlbmtlCgpGcmkgQXByIDE5IDE3OjE0OjI0IENFU1QgMjAwMiBCam9ybiBSZWVzZSA8YnJlZXNlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCgkqIHRyaW9uYW4uYzogZml4ZWQgY3Jhc2ggb24gT1NGLzEKCkZyaSBBcHIgMTkgMDk6MDA6NTYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogbW9yZSBTY2hlbWFzIHdvcmsKCSogdGVzdC9zY2hlbWFzLyogcmVzdWx0L3NjaGVtYXMvKjogYWRkZWQgbW9yZSB0ZXN0cyBjb21pbmcKCSAgZnJvbSB0aGUgc3BlYy4KClRodSBBcHIgMTggMjM6MDA6MDIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGMxNG4uYzogcGF0Y2ggZnJvbSBBbGVrc2V5IFNhbmluIHJlZmxlY3RpbmcgYSBjaGFuZ2UgaW4gdGhlCgkgIEV4Y0MxNE4gc3BlY2lmaWNhdGlvbgoKVGh1IEFwciAxOCAxODozODozMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBwYXRjaCBmcm9tIE1hcmt1cyBIZW5rZSwgZml4IGZvciByZWN1cnNpdmUgZW50aXRpZXMuCgpUaHUgQXByIDE4IDE3OjQ5OjI0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXggYSBwcm9ibGVtIHdpdGggc3RyaW5nKCkgb24gYSBkb2N1bWVudCBub2RlLgoKVGh1IEFwciAxOCAxNjo0MDo0MiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0geG1sc2NoZW1hcy5jOiBtb3JlIFNjaGVtYXMgd29yawoJKiB0ZXN0L3NjaGVtYXMvKiByZXN1bHQvc2NoZW1hcy8qOiBhZGRlZCBtb3JlIHRlc3RzIGNvbWluZwoJICBmcm9tIHRoZSBzcGVjLgoKVGh1IEFwciAxOCAxMzo1Mjo1MiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogZml4ZWQgJiBzZXJpYWxpemF0aW9uIGJ1ZyBpbnRyb2R1Y2VkIGluIDIuNC4yMAoJKiByZXN1bHQvSFRNTC8qOiB0aGlzIGNoYW5nZXMgYSBmZXcgdGhpbmdzIGluIHRoZSByZXN1bHRzCgpXZWQgQXByIDE3IDIwOjM0OjM3IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogZWxpbWluYXRlZCAnZGVjbGFyYXRpb24gZGlmZmVyZW50IHRoYW4KCSBwcm90b3R5cGUnIHdhcm5pbmcKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiAicmVzb2x2ZWQiIGNvbmZsaWN0cyB3aXRoIGVycm5vLmgKCldlZCBBcHIgMTcgMTg6MjY6MDcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC94bWxhdXRvbWF0YS5oOiBtb3JlIHdvcmsKCSAgb24gdGhlIGF1dG9tYXRhIGludGVyZmFjZXMgYW5kIGRlYnVnIG9mIGNvdW50ZWQgY2hvaWNlcwoJKiB0ZXN0L3NjaGVtYXMvKiByZXN1bHQvc2NoZW1hcy8qOiBhZGRlZCBhIG51bWJlciBvZiB0ZXN0cwoKV2VkIEFwciAxNyAxMTowMzowMyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaDoKCSAgYSBiaXQgb2Ygd29yayBvbiBTY2hlbWFzCgkqIHRlc3RTY2hlbWFzLmM6IHRyeSB0byBtYWtlIGl0IG1vcmUgdXNlZnVsCgkqIHRlc3Qvc2NoZW1hcy8qIHJlc3VsdC9zY2hlbWFzLyogTWFrZWZpbGUuYW06IGNoYW5nZWQgdGhlCgkgIFNjaGVtYXMgcmVncmVzc2lvbiB0ZXN0IHByb2NlZHVyZSwgc3RhcnRlZCBhZGRpbmcgYSBmZXcgc2FtcGxlcwoKVHVlIEFwciAxNiAxOTo1MjowMSBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGl6bGF0a292aWNAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiBpbmNsdWRlL2xpYnhtbC9lbmNvZGluZy5oOiBQYXRjaCBmb3IgdGhlIEJvcmxhbmQgQysrIGJ1aWxkZXIKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBQYXRjaCBmb3IgdGhlIEJvcmxhbmQgQysrIGJ1aWxkZXIKCSogdGhyZWFkcy5jOiBQYXRjaCBmb3IgdGhlIEJvcmxhbmQgQysrIGJ1aWxkZXIKCSogd2luMzIvYmNiNTogTmV3IGRpcmVjdG9yeSBmb3IgdGhlIEJvcmxhbmQgQysrIGJ1aWxkZXIKCSBwcm9qZWN0IGZpbGVzICAgICAgIAoKVHVlIEFwciAxNiAxOTo0Njo1NSBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGl6bGF0a292aWNAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiBVcGRhdGUgZm9yIFhNTCBTY2hlbWEgc3VwcG9ydAoJKiB3aW4zMi9jb25maWd1cmUuanM6IFVwZGF0ZSBmb3IgWE1MIFNjaGVtYSBzdXBwb3J0CgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogVXBkYXRlIGZvciBYTUwgU2NoZW1hIHN1cHBvcnQKClR1ZSBBcHIgMTYgMTc6NDY6NDMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIFRPRE9fU0NIRU1BUyBjb25maWd1cmUuaW4gZ2VuVW5pY29kZS5weSB0ZXN0QXV0b21hdGEuYwoJIHRlc3RSZWdleHAuYyB0ZXN0U2NoZW1hcy5jIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYwoJIHhtbHVuaWNvZGUuYyBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbQoJIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaCBpbmNsdWRlL2xpYnhtbC94bWxhdXRvbWF0YS5oCgkgaW5jbHVkZS9saWJ4bWwveG1scmVnZXhwLmggaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hcy5oCgkgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hc3R5cGVzLmggaW5jbHVkZS9saWJ4bWwveG1sdW5pY29kZS5oCgkgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluIDogbWVyZ2VkIHRoZSBjdXJyZW50IHN0YXRlIG9mCgkgWE1MIFNjaGVtYXMgaW1wbGVtZW50YXRpb24sIGl0IGlzIG5vdCBjb25maWd1cmVkIGluIGJ5IGRlZmF1bHQsCgkgYSBzcGVjaWZpYyAtLXNjaGVtYXMgY29uZmlndXJlIG9wdGlvbiBoYXMgYmVlbiBhZGRlZC4KCSogdGVzdC9hdXRvbWF0YSB0ZXN0L3JlZ2V4cCB0ZXN0L3NjaGVtYXMgTWFrZWZpbGUuYW0KCSAgcmVzdWx0L2F1dG9tYXRhIHJlc3VsdC9yZWdleHAgcmVzdWx0L3NjaGVtYXM6CgkgIG1lcmdlZCBhdXRvbWF0YS9yZWdleHAvc2NoZW1hcyByZWdyZXNzaW9uIHRlc3RzCgpUdWUgQXByIDE2IDA5OjQ4OjQ0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBHYXJ5IGZvdW5kIGEgY29tcGlsZSB0aW1lIHByb2JsZW0sIGZpeGVzICM3ODgyMwoKTW9uIEFwciAxNSAxOToxMTozNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiByZWxlYXNlIG9mIDIuNC4yMAoJKiBkb2MvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcwoKTW9uIEFwciAxNSAxNDo1NTo1MyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtOiBwYXRjaCBmcm9tIENyaXN0aWFuIEdhZnRvbiB0byBidWlsZCBvbgoJICBSZWQgSGF0IDYuMiwgc2hvdWxkIGFsc28gZml4ICM3NTc3OQoKTW9uIEFwciAxNSAxMjoxNDo0OSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZmlyc3QgcGFydCBvZiBmaXhpbmcgIzc4NzI5CgpTdW4gQXByIDE0IDIzOjQ0OjU4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIHVyaS5jOiBmaXhpbmcgYnVnICM3ODY2MiBpLmUuIGFkZCBwcm9wZXIKCSAgZXNjYXBpbmcgb2YgVVJJIHdoZW4gc2F2aW5nIEhUTUwgZmlsZXMuCgkqIHJlc3VsdC9IVE1MLyo6IHRoaXMgaW1wYWN0ZWQgc29tZSB0ZXN0cwoKU3VuIEFwciAxNCAxNDo1NToxNSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiB0cnlpbmcgdG8gZml4ICM3NzQ0MQoKRnJpIEFwciAxMiAyMzowMjoxNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogSGFsbHNraSBjb21wbGFpbmVkIGl0IGNvdWxkIG5vdCBiZQoJICBpbmNsdWRlZCBieSBpdHNlbGYuCgpUaHUgQXByIDExIDEwOjIzOjM2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IGFwcGxpZWQgYW4gSUVFRSBmbGFnIHBhdGNoIGZvciBPU0YvMSAjNzc4MjUKCldlZCBBcHIgMTAgMjM6MzE6MzQgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvY29uZmlndXJlLmpzOiBwYXRjaCBmcm9tIE5pbG8gZm9yIHRoZSBjMTRuIG9wdGlvbgoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiBmaXhlZCBsaWJ4bWwyLmRlZiBnZW5lcmF0aW9uIHdpdGggdGhyZWFkcwoKV2VkIEFwciAxMCAyMToyNDoxNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYyBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaC5pbjogU2lsdmFuIE1pbmdoZXR0aQoJICBwb2ludGVkIGVycm9uZW91cyB1c2Ugb2YgTElCWE1MX1RIUkVBRFNfRU5BQkxFRCBpbnN0ZWFkIG9mCgkgICBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKCldlZCBBcHIgMTAgMTg6MTI6NTIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGFub3RoZXIgcGF0Y2ggZnJvbSBSaWNoYXJkIEppbmtzIGZvciBzdWJzdHJpbmcgY29uZm9ybWFuY2UKCSogdGVzdC9YUGF0aC9leHByL2Zsb2F0cyB0ZXN0L1hQYXRoL2V4cHIvc3RyaW5ncwoJICByZXN1bHQvWFBhdGgvZXhwci9mbG9hdHMgcmVzdWx0L1hQYXRoL2V4cHIvc3RyaW5nczogdXBkYXRlIG9mIHRoZQoJICB0ZXN0IHN1aXRlIHRvIGNoZWNrIHRob3NlLgoKV2VkIEFwciAxMCAxMzoyOTo0OSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogcGF0Y2ggZnJvbSBSaWNoYXJkIEppbmtzIGZvciAueCBmbG9hdCBwYXJzaW5nLgoKVHVlIEFwciAgOSAxODowOTozMSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHBhdGNoIGZyb20gTWFya3VzIEhlbmtlIHdoZW4gYW4gZW5jb2RpbmcgYWluJ3QgcmVjb2duaXplZAoKVHVlIEFwciAgOSAxNTo0NzoxNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLm00OiBnb3QgYSByZXBvcnQgdGhhdCAjaW5jbHVkZSA8c3RyaW5nLmg+IHdhcyBuZWVkZWQKClR1ZSBBcHIgIDkgMTE6NTE6MjUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYXBwbGllZCBhIGZpeCBmcm9tIEFudGhvbnkgSm9uZXMgZm9yIC1vIC8tLW91dHB1dAoKVHVlIEFwciAgMiAyMDoyNzoxMSBNU1QgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL2V4YW1wbGUuaHRtbDogZml4aW5nIHR5cG8KCk1vbiBBcHIgIDEgMTA6MDI6NTcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgYnVnIGluIHRoZSBub2Rlc2V0IHRvIGJvb2xlYW4gY29tcGFyaXNvbiBjb2RlCgkgIHBvaW50ZWQgb3V0IGJ5IE1lbHZ5biBTb3BhY3VhLgoKRnJpIE1hciAyOSAyMzo0MTo1MyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwubTQ6IEZy6WTpcmljIENyb3phdCBnYXZlIGEgcGF0Y2ggcmVsYXRlZCB0byB0aGUgY2hhbmdlCgkgIG9mIEluY2x1ZGUgcGF0aHMgYnJlYWtpbmcgdGhlIGxpYnhtbC5tNAoKRnJpIE1hciAyOSAxODoyNTo1NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBGaXggYnVnICM3NjkyNyBmb3Jnb3QgdG8gc2F2ZSBzb21lIGNvbnRleHQKCSAgd2hlbiBldmFsdWF0aW5nIGJpbmFyeSBleHByZXNzaW9ucwoKVGh1IE1hciAyOCAxOToyMjo0OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IGZpeGVkIGNvbmZpZ3VyZSBmb3IgTVBFL2lYIGZyb20gTWFya3VzIEhlbmtlCgkqIHhtbG1lbW9yeS5jOiBmaXhlZCBpbml0aWFsaXphdGlvbiBwcm9ibGVtcwoJKiB4cGF0aC5jOiBhbm90aGVyIHNldCBvZiBwYXRjaGVzIGZyb20gUmljaGFyZCBKaW5rcyB0aGlzCgkgIGZpeGVzICJtYWtlIFhQYXRodGVzdHMiIG9uIGxpbnV4CgpXZWQgTWFyIDI3IDE3OjA5OjQzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyaW9uYW4uYyB0cmlvbmFuLmggeHBhdGguYzogbW9yZSBwYXRjaGVzIGZyb20gUmljaGFyZCBKaW5rcwoJKiB0ZXN0L1hQYXRoL2V4cHIvY29tcGFyZSB0ZXN0L1hQYXRoL2V4cHIvZXF1YWxpdHkKCSAgdGVzdC9YUGF0aC9leHByL2Zsb2F0cyB0ZXN0L1hQYXRoL2V4cHIvZnVuY3Rpb25zCgkgIHRlc3QvWFBhdGgvZXhwci9zdHJpbmdzIHJlc3VsdC9YUGF0aC9leHByL2NvbXBhcmUKCSAgcmVzdWx0L1hQYXRoL2V4cHIvZXF1YWxpdHkgcmVzdWx0L1hQYXRoL2V4cHIvZmxvYXRzCgkgIHJlc3VsdC9YUGF0aC9leHByL2Z1bmN0aW9ucyByZXN1bHQvWFBhdGgvZXhwci9zdHJpbmdzOiBVcGRhdGVkCgkgIHRlc3RzIHRob3VnaCB0aGV5IHNob3cgYSBkaXZlcmdlbmNlIG9uIExpbnV4CgpXZWQgTWFyIDI3IDEwOjA2OjUzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmMgdHJpb25hbi5jOiBwcmV2aW91cyBjb21taXQgYWxzbyBpbmNsdWRlZCBwYXRjaGVzCgkgIGZyb20gUmljaGFyZCBKaW5rcyBvbiBzb21lIElFRUUgc3VwcG9ydCBjb3JuZXIgY2FzZQoKV2VkIE1hciAyNyAxMDowMzoxMSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBBVVRIT1JTIEhBQ0tJTkc6IEFkZGVkIElnb3IgWmxhdGtvdmljIGFzIG9mZmljaWFsIG1haW50YWluZXIKCSogcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbTogQWxiZXJ0IENoaW4gcG9pbnRlZAoJICB0aGF0ICQoZGF0YWRpcikgc2hvdWxkIGJlIHVzZWQgZm9yIGRvY3MKClR1ZSBNYXIgMjYgMTM6NDM6MTYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogVGhvbWFzIFN0ZWluYm9ybiBwb2ludGVkIG91dCAjNzY0MDQgdGhhdCBsaWJ4bWwyCgkgIGNvdWxkIGxlYWsgZmlsZWRlc2NyaXB0b3JzCgpUdWUgTWFyIDI2IDA4OjU1OjUzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBuYW5vaHR0cC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQWxsYW4gQ2xhcmsgZm9yCgkgIFVuaXhXYXJlL09wZW5TZXJ2ZXIKCk1vbiBNYXIgMjUgMTc6NDU6NDQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi40LjE5CgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBkb2NzCgpNb24gTWFyIDI1IDE3OjM0OjA2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbm9odHRwLmM6IGZpeGluZyAjNzYwNDMsIGdvdCBmZWQgdXAgd2l0aCBub24tcG9ydGFiaWxpdHkKCSAgb2YgdGhhdCBwaWVjZSBvZiBjb2RlLgoKTW9uIE1hciAyNSAxMzowODoyMSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jIFNBWC5jOiBOZXZlciBjb21taXQgd2l0aG91dCBydW5uaW5nICJtYWtlIHRlc3RzIiA6LSgKCSAgZml4IGEgY291cGxlIG9mIHN0dXBpZGl0aWVzIGluIHRoZSBwcmV2aW91cyBjb21taXQKCSogcmVzdWx0Lyo6IGEgZmV3IGNoYW5nZXMgaW4gc29tZSBhdHRyaWJ1dGUgb3JkZXIgcmVzdWx0IG9mIHByZXZpb3VzCgkgIGNvbW1pdC4KCk1vbiBNYXIgMjUgMTE6NDY6MDUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYyBTQVguYzogZml4ZWQgYnVnICM3NjE2OCwgYXR0cmlidXRlIHJlZGVjbGFyZWQgaW4KCSAgdGhlIGludGVybmFsIHN1YnNldCBzaG91bGQgbm90IHJhaXNlIGR1cGxpY2F0ZSBJRCBlcnJvcnMsCgkgIGFsc28gdGhlcmUgd2FzIGEgc21hbGwgYnVnIGluIGNvbmp1bmN0aW9uIHRvIG5hbWVzcGFjZQoJICBkZWNsYXJhdGlvbnMgZGVmYXVsdGVkIGFuZCB4bWw6eHh4IGF0dHJpYnV0ZXMgRFREIGRlZmluaXRpb25zLgoJICAKRnJpIE1hciAyMiAxNToxMzo0OSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBSaWNoYXJkIEppbmtzIGFsc28gcmFpc2VkIHNvbWUgcm91bmRpbmcgcHJvYmxlbXMKCSAgdGhpcyB0cmllcyB0byBmaXggdGhlbQoKRnJpIE1hciAyMiAxMzoyMjowOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBSaWNoYXJkIEppbmtzIHNwb3R0ZWQgYW4gaW5jb2hlcmVudCBtZW1vcnkgYWxsb2NhdGlvbgoJICBiZWhhdmlvdXIgaW4geG1sWFBhdGhDYXN0VG9TdHJpbmcoKQoKVGh1IE1hciAyMSAxNDoyNToyOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jOiBmaXhlZCBhIGJ1ZyBpbiB0aGUgSVNPLUxhdGluIDEgdG8gVVRGOCBlbmNvZGVyCgkgIHJhaXNlZCBieSBNb3J1cyBXYWx0ZXIKClRodSBNYXIgMjEgMTQ6MDc6MTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sY2F0YWxvZy5jIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjogYXBwbGllZCAyIGZpeHVwcwoJICBmcm9tIElnb3IKClRodSBNYXIgMjEgMTM6MzA6MDYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4aW5nICM3NTYxOSwgcmVsYXRlZCB0byBhIHByb2JsZW0gd2hlbiB0cnlpbmcKCSAgdG8gZXZhbHVhdGUgY29uZGl0aW9uIHdoZW4gdGhlIGN1cnJlbnQgbm9kZSBzZXQgcmVzdWx0aW5nCgkgIGZyb20gdGhhdCBzdWItc3RlcCBldmFsdWF0aW9uIGlzIGVtcHR5LiBBbHNvIGZpeGVzIDIgcG90ZW50aWFsCgkgIHByb2JsZW0gd2l0aCBwcmV2aW91cy1zaWJsaW5nIGFuZCBuZXh0LXNpYmxpbmdzIGF4aXMuCgpUaHUgTWFyIDIxIDA5OjAzOjU5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGMxNG4uYzogcGF0Y2ggZnJvbSBNYXJrIFZha29jIHRvIGJ1aWxkIEMxNE4gaWYgRG9jQm9vayBhbmQKCSAgSFRNTCBzdXBwb3J0IGlzIG5vdCBjb25maWd1cmVkIGluLgoKV2VkIE1hciAyMCAyMjo0Mjo0MiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmMgZXJyb3IuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0cmVlLmMgeG1sSU8uYwoJICBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGRvaGggSSByZWFsbHkgZGlkbid0IGludGVuZGVkIHRvIGNvbW1pdAoJICB0aGlzIHRlc3QgdmVyc2lvbiA6LSgKCldlZCBNYXIgMjAgMjA6MjA6NTcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdFNBWC5jOiBJIHdhbnRlZCB0byBzZWUgdGhlIHJlYWwgc3BlZWQgYXQgdGhlIFNBWCBpbnRlcmZhY2UKCSAgYWZ0ZXIgYSBsaXR0bGUgdG9vIG1hbnkgWGltaWFuZXIgc3RhcnRlZCBjb21wbGFpbmluZyBhYm91dCB0aGUKCSAgcGFyc2VyIHNwZWVkLgoJICBhZGRlZCBhIC0tcXVpZXQgb3B0aW9uOgoJICBwYXBoaW86fi9YTUwgLT4gbHMgLWwgZGIxMDAwMDAueG1sIAoJICAtcnctcnctci0tICAgIDEgdmVpbGxhcmQgd3d3ICAgICAgMjAxODIwNDAgTWFyIDIwIDEwOjMwIGRiMTAwMDAwLnhtbAoJICBwYXBoaW86fi9YTUwgLT4gdGltZSAuL3Rlc3RTQVggLS1xdWlldCBkYjEwMDAwMC54bWwgCgkgIDMyMDAwMDYgY2FsbGJhY2tzIGdlbmVyYXRlZAoJICByZWFsCTBtMS4yNzBzCgkgIFdoaWNoIG1lYW5zIDE2TUJ5dGVzL3MgYW5kIDNNY2FsbGJhY2svcwoKVHVlIE1hciAxOSAxOTozMzo1NyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiB2YWxncmluZCBzcG90dGVkIGFub3RoZXIgZXJyb3IgdGhhdCB0aW1lIHdoZW4gcnVubmluZwoJICBvbiBsaWJ4c2x0IHJlZ3Jlc3Npb24gdGVzdHMKClR1ZSBNYXIgMTkgMTU6MjQ6NDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGFkZGluZyAibWFrZSB2YWxncmluZCIgcnVubmluZyB0aGUgZnVsbCByZWdyZXNzaW9uCgkgIHRlc3RzIChleGNlcHQgcHl0aG9uIG9uZXMpIHVuZGVyIFZhbGdyaW5kICh1c2luZyB2YWxncmluZCAtcQoJICB3aGljaCB3YXMga2luZGx5IGFkZGVkIGJ5IHRoZSBhdXRob3IpLgoJKiB2YWxpZC5jOiBzdHVwaWQgYnVnIHBpbnBvaW50ZWQgYnkgVmFsZ3JpbmQsIHRoZSByZWdyZXNzaW9uIHRlc3RzCgkgIHBhc3NlcyBjbGVhbmx5IG5vdyBleGNlcHQgYW4gb2JjdXJlIGZsb2F0aW5nIHBvaW50IGluaXRpYWxpemF0aW9uCgkgIHJhaXNlZCBpbiBsb2cxMCgpIGluIG9uZSBYUGF0aCByZWdyZXNzaW9uIHRlc3QgPz8/CgkqIHRyZWUuYzogZWRpdGVkIHNvbWUgY29tbWVudHMgdG8gY2xvc2UgIzc1MjQ0CgpUdWUgTWFyIDE5IDEyOjE1OjIwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHByZXR0eSBpbnNhbmUgdGhpbmcsIHRoZSB4bWxYUGF0aEZvcm1hdE51bWJlcigpCgkgIHdhcyBub3Qgc2VyaWFsaXppbmcgMSBhcyAiMSIgaWYgTENfQUxMPXN2X1NFIDotKCBhbmQgaW4gdGhlCgkgIGNvbnRleHQgb2YgU2Nyb2xsS2VlcGVyLCBtYWRlIHN1cmUgdGhhdCBpZiB0aGUgbnVtYmVyIGlzCgkgIGFuIGludGVnZXIsIHRoZSBzZXJpYWxpemF0aW9uIGZvbGxvd3MgdGhlIGRlc2NyaXB0aW9uIGF0CgkgIGh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoI3NlY3Rpb24tU3RyaW5nLUZ1bmN0aW9ucwoKTW9uIE1hciAxOCAxOToxODoxMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjQuMTgKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIHdlYiBzaXRlCgkqICouYyBsaWJ4bWwuaDogaW1wbGVtZW50IHRoZSBuZXcgSU5fTElCWE1MIHNjaGVtZSBkaXNjdXNzZWQgd2l0aAoJICB0aGUgV2luZG93cyBhbmQgQ3lnd2luIG1haW50YWluZXJzLgoJKiBwYXJzZXIuYzogaHVtbSwgY2hhbmdlZCB0aGUgd2F5IHRoZSBTQVggcGFyc2VyIHdvcmsgd2hlbgoJICB4bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0KDEpIGlzIHNldCwgaXQgd2lsbCB0aGVuIAoJICBkbyB0aGUgZW50aXR5IHJlZ2lzdHJhdGlvbiBhbmQgbG9hZGluZyBieSBpdHNlbGYgaW4gY2FzZSB0aGUKCSAgdXNlciBwcm92aWRlZCBTQVggZ2V0RW50aXR5KCkgcmV0dXJucyBOVUxMLgoJKiB0ZXN0U0FYLmM6IGFkZGVkIC0tbm9lbnQgdG8gdGVzdCB0aGUgYmVoYXZpb3VyLgoKTW9uIE1hciAxOCAxMjo0NDoyMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogV2lsZnJpZWQgVGVpa2VuIHByb3ZpZGVkIGEgaGFja2lzaCBidXQgd29ya2luZwoJICB3YXkgdG8gZ2V0IGNvbnRleHQgcmVwb3J0ZWQgYmFjayBvbiBlbnRpdGllcyB3aGVuIHBhcnNpbmcKCSAgd2l0aCBTQVggYW5kIHdpdGhvdXQgYnJlYWtpbmcgdGhlIERPTSBidWlsZC4KClN1biBNYXIgMTcgMTE6MzE6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogYzE0bi5jOiBhcHBsaWVkIGEgbmV3IHBhdGNoIGZyb20gQWxla3NleSBTYW5pbgoJKiBkb2Mvc2l0ZS54c2wgZG9jL3htbC5odG1sIGRvYy8qLmh0bWw6IHVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24KCSAgdG8gcmVmZXJlbmNlIEFsZWtzZXkgaW1wbGVtZW50YXRpb24gb2YgWE1MIGRpZ2l0YWwgU2lnbmF0dXJlcwoKU2F0IE1hciAxNiAyMzowMTo0MiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBzbWFsbCBmaXggdG8gYXZvaWQgcG90ZW50aWFsIHByb2JsZW0gZHVlIHRvCgkgIG9yZGVyaW5nIG9mIGZyZWVpbmcgZGF0YQoJKiBweXRob24vTWFrZWZpbGUuYW06IHBlb3BsZSB3ZXJlIGNvbXBsYWluaW5nIGFib3V0IAoJICB0aGUgZ2VuZXJhdGVkIGZpbGUgaW4gcHl0aG9uIGRpciBub3QgYmVpbmcgYnVpbHQKCkZyaSBNYXIgMTUgMjM6MjE6NDAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW4gcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbQoJICBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vdHlwZXMuYzogQ2xlYW51cAoJICBvZiB0aGUgcHl0aG9uIE1ha2VmaWxlcyBiYXNlZCBvbiBKYWNvYiBhbmQgSmFtZXMgZmVlZGJhY2ssCgkgIGZpeGVkIHRoZSBzcGVjIGZpbGUgYWNjb3JkaW5nbHksIGZpeGVkIHRoZSBudW1iZXIgb2Ygd2FybmluZwoJICB0aGF0IHBhc3NpbmcgbXkgcGVkYW50aWMgQ0ZMQUdTIHdhcyBnZW5lcmF0aW5nLiBDb25jbHVzaW9uCgkgIGlzIHRoYXQgUHl0aG9uIGluY2x1ZGVzIGFyZSByZWFsIGNyYXAuCgpGcmkgTWFyIDE1IDE5OjQxOjI1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZSxpbjogaXQgd2FzIHJlcG9ydGVkIHF1aXRlIGEgZmV3IHRpbWVzIHRoYXQKCSAgeG1sMi1jb25maWcgLS1jZmxhZ3Mgc2hvdWxkIG5vdCBvdXRwdXQKCSAgLUkkaW5jbHVkZXByZWZpeC9saWJ4bWwyL2xpYnhtbCBiZWNhdXNlIGxpYnhtbDIgaGVhZGVyIG5hbWVzCgkgIGNsYXNoZXMgd2l0aCBleGlzdGluZyBuYW1lcyBsaWtlIGxpc3QuaCBmcm9tIEMrKyBzdGwuCgkgIEluY2x1ZGVzIHNob3VsZCBiZSAjaW5jbHVkZTxsaWJ4bWwveHh4Lmg+IHNvIC4uLgoKRnJpIE1hciAxNSAxMDo0MTo1MCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjMTRuLmM6IGFub3RoZXIgcGF0Y2ggZnJvbSBBbGVrc2V5IFNhbmluCgpGcmkgTWFyIDE1IDA4OjU1OjU1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGMxNG4uYzogYXBwbGllZCBwYXRjaCBmcm9tIEFsZWtzZXkgU2FuaW4gZml4aW5nIGEgcHJvYmxlbSBpbiB0aGUKCSAgY2Fub25pY2FsaXphdGlvbiBhbGdvcml0aG0KCSogZG9jL3htbC5odG1sIGRvYy9pbmRleC5odG1sOiBhZGRlZCB0aGUgQzE0TiByZWZlcmVuY2VzIG9uIHRoZSAKCSAgaW5kZXggcGFnZS4KCjIwMDItMDMtMTMgIGphY29iIGJlcmttYW4gIDxqYWNvYkB4aW1pYW4uY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtOiByZW1vdmUgTERBREQgYW5kIENGTEFHUyBhcyB0aGlzIGlzIGJyb2tlbgoJdXNhZ2UsIHJlZHVuZGFudCwgYW5kIGdjYyBzcGVjaWZpYwoKV2VkIE1hciAxMyAxMTowMDo1OSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBzcGVlZHVwIHNvbWUgbm9kZSBzZWxlY3Rpb24gb3BlcmF0aW9ucywgdGhpcyBjYW4KCSAgaGF2ZSBhIHNpZ25pZmljYW50IGltcGFjdCBvbiBEb2NCb29rIE5vcm0ncyBzdHlsZXNoZWV0cwoJKiBuYW5vaHR0cC5jOiBzb21lb25lIHJlcG9ydGVkIHRoYXQgU09DS0xFTl9UIG1heSBub3QgYmUgZGVmaW5lZAoJICBtYWtlIHN1cmUgaXQncyBhbHdheXMgdGhlIGNhc2UKCSogZGVidWdYTUwuYzogZGlzdGluZ3Vpc2ggQ0RBVEEgYW5kIGNvbW1lbnRzIGluIGxzIG9wZXJhdGlvbnMKClR1ZSBNYXIgMTIgMTk6NDU6MjQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvKi5oOiBIZWlrbyBXLiBSdXBwIGZpeGVkIGEgbG90IG9mIGNvbW1lbnRzCgkgIHRvIGdlbmVyYXRlIGJldHRlciBBUEkgZGVzY3JpcHRpb25zIGV0Yy4uLgoKTW9uIE1hciAxMSAxMDoxMDozMCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjMTRuLmM6IEZpeGluZyAjNzQxODYsIG1hZGUgc3VyZSBhbGwgYm9vbGVhbiBleHByZXNzaW9ucwoJICBnZXQgZnVsbHkgcGFyZW50aGVzaXplZCwgcmFuIGluZGVudCBvbiB0aGUgb3V0cHV0CgkqIGNvbmZpZ3VyZS5pbiBIVE1MdHJlZS5jIFNBWC5jIGMxNG4uYyBkZWJ1Z1hNTC5jIHRyZWUuYyB4cG9pbnRlci5jCgkgIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogYWxzbyAjNzQxODYgcmVsYXRlZCwgcmVtb3ZlZCB0aGUKCSAgLS13aXRoLWJ1ZmZlcnMgb3B0aW9uLCBhbmQgYWxsIHRoZSBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWwKCSAgc2VjdGlvbnMgdGhhdCB3ZXJlIHJlc3VsdGluZyBmcm9tIGl0LgoKU3VuIE1hciAxMCAxNzo0Nzo1OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gRG9kamkgU2VrZXRlbGkgZml4aW5nIGFuCgkgIHVuaW5pdGFpbGl6ZWQgdmFyaWFibGUgaW4geG1sVmFsaWRHZXRWYWxpZEVsZW1lbnRzKCkKClNhdCBNYXIgIDkgMTU6MTA6NDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogYzE0bi5jOiBmaXhlZCBhIGZldyBjb21tZW50cwoJKiBkb2MvKi5odG1sIGRvYy8qLyouaHRtbDogcmVnZW5lcmF0ZWQgdGhlIGRvY3MgYW5kIGFkZGVkCgkgIHRoZSBDMTROIEFQSQoJKiBkb2MvYXBpLnhzbCBkb2MvZ25vbWUteG1sLnNnbWw6IGZpeHVwcyBhbmQgYWRkZWQgSURzCgpTYXQgTWFyICA5IDExOjE2OjExIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNoZWNrLXhtbC10ZXN0LXN1aXRlLnB5OiBmaXggdG8gYWRhcHQgdmFyYWlhdGlvbnMgaW4gdGhlCgkgIGJpbmRpbmdzCgkqIGNvbmZpZ3VyZS5pbiBweXRob24vc2V0dXAucHkgcHl0aG9uL3NldHVwLnB5LmluOiBmaXhlZCB0bwoJICBoYXZlIHRoZSB2ZXJzaW9uIG9mIHRoZSBweXRob24gc2NyaXB0cyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQKCkZyaSBNYXIgIDggMTY6NDU6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXhlZCBhIGJ1ZyBuZXdseSBpbnRyb2R1Y2VkIGFuZCBwb2ludGVkIGJ5IFV3ZSBGZWNobmVyCgkgIGluIHhtbENvcHlQcm9wKCkKCkZyaSBNYXIgIDggMTU6NDk6MTAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi40LjE3IHJlbGVhc2UKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3MKCSogeHBhdGguYzogZml4ZWQgYSBjb21tZW50CgkqIHB5dGhvbi9saWJ4bWwuYzogZml4ZWQgYSBwb3NzaWJsZSByZWVudHJhbmN5IHByb2JsZW0KClRodSBNYXIgIDcgMjM6MTk6MjggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvYXR0cmlicy5weToKCSAgZml4ZWQgeG1sSGFzTnNQcm9wKCkgYnVncyBmb3IgZGVmYXVsdGVkIGZyb20gRFREIGF0dHJpYnMsCgkgIGFkZGVkIGEgc3BlY2lmaWMgcmVncmVzc2lvbiB0ZXN0CgkqIHB5dGhvbi9nZW5lcmF0b3IucHk6IHhtbEhhc05zUHJvcCgpIGFuZCB4bWxIYXNQcm9wKCkgc2hhbGwKCSAgbm90IHJhaXNlIGV4Y2VwdGlvbnMgd2hlbiBmYWlsaW5nIHRvIGZpbmQgdGhlIGF0dHJpYnV0ZS4KClRodSBNYXIgIDcgMTY6MTE6MzUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIHhtbGxpbnQuYzogb3dlbiBwb2ludGVkIG91dCBhIHByb2JsZW0gd2l0aCB0aGUKCSAgZnRtZSBmaXgsIGdldHRpbWVvZmRheSgpIHdhcyBub3QgZGV0ZWN0ZWQgYnkgY29uZmlndXJlIGFuZAoJICB0aGUgZnRpbWUgaGVhZGVyIHdhc24ndCBpbmNsdWRlZCwgZG9oaGgKClRodSBNYXIgIDcgMTI6MTk6MzYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIHhtbGxpbnQuYzogdHJ5aW5nIHRvIGZpeCAjNzE0NTcgZm9yIHRpbWluZwoJICBwcmVjaXNpb24gd2hlbiBnZXR0aW1lb2ZkYXkoKSBpcyBub3QgYXZhaWxibGUgYnV0IGZ0aW1lKCkgaXMKClRodSBNYXIgIDcgMTE6MjQ6MDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW4gZG9jL01ha2VmaWxlLmFtOiBGaXhlZCAjNzM0MDggbWlzc2luZyBpbWFnZXMKCSAgYXJlIG5vdyBjb3BpZWQgb24gaW5zdGFsbCBhbmQgcGFydCBvZiB0aGUgLWRldmVsIFJQTQoKVGh1IE1hciAgNyAwOTozNDoxNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiB0cnlpbmcgdG8gYXZvaWQgYnVnICM3MjE1MCB3aGljaCB3YXMgYXBwYXJlbnRseQoJICBjYXVzZWQgYnkgYSBnY2MgYnVnIChvciBhIHByb2Nlc3NvciBwcm9ibGVtKSBhcyBkZXRhaWxlZAoJICBhdCBodHRwOi8vdmVpbGxhcmQuY29tL2djYy5idWcKClRodSBNYXIgIDcgMDE6MDI6MzcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvY3V0bnBhc3RlLnB5OgoJICBmaXhlZCB4bWxSZWNvbmNpbGlhdGVOcygpLCBhZGRlZCBhIFB5dGhvbiB0ZXN0L2V4YW1wbGUgZm9yCgkgIGludGVyLWRvY3VtZW50IGN1dCduIHBhc3RlCgkqIHB5dGhvbi9saWJ4bWwucHk6IGZpeGVkIG5vZGUuZG9jIG9uIGRvY3VtZW50IG5vZGVzIGFuZCBhZGRlZAoJICB4cGF0aEV2YWwoKSBvbnRvIG5vZGUgb2JqZWN0cwoKV2VkIE1hciAgNiAyMjozODowMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jOiBmaXhlZCBzb21lIGh0bWxTZXRNZXRhRW5jb2RpbmcoKSBwcm9ibGVtcwoJKiBweXRob24vbGlieG1sLmMgcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9zZXJpYWxpemUucHk6CgkgIGZpeHVwIGFuZCBpbnRlZ3JhdGVkIHRlc3RzIGZvciB0aGUgc2VyaWFsaXphdGlvbiBzdHVmZgoKV2VkIE1hciAgNiAxOTo0MDo1NyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBsaWJ4bWwuMyBsaWJ4bWwuNCBsaWJ4bWwuc3BlYy5pbjogRml4ZWQgYnVnICM3MjU3MAoJICBtb3ZlZCB0aGUgbGlieG1sIG1hbiBwYWdlIHRvIHNlY3Rpb24gMwoKV2VkIE1hciAgNiAxODozNDowNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeCBidWcgIzcyNDkwCgkqIHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sLnB5OiBhZGRlZCBtZXRob2RzIHNlcmlhbGl6ZSgpCgkgIGFuZCBzYXZlVG8oKSB0byBhbGwgbm9kZSBlbGVtZW50cy4KClR1ZSBNYXIgIDUgMjE6Mjc6MDMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogY2xvc2VkICM3MzQzMCwgZG9uJ3QgcmVhZCBmcm9tIGFuIGlucHV0IHNvdXJjZQoJICB3aGljaCBpbmRpY2F0ZWQgYW4gZW5kLW9mLWZpbGUgb3IgYW4gZXJyb3IuCgpUdWUgTWFyICA1IDE2OjMzOjQyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBtYWtlIHN1cmUgU0FYIGVuZERvY3VtZW50IGlzIGFsd2F5cyBjYWxsZWQgYXMKCSAgdGhpcyBjb3VsZCByZXN1bHQgaW4gYSBQeXRob24gbWVtb3J5IGxlYWsgb3RoZXJ3aXNlIChpdCdzCgkgIHVzZWQgdG8gZGVjcmVtZW50IHJlZi1jb3VudGluZykKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weQoJICBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbCBweXRob24vbGlieG1sMmNsYXNzLnR4dAoJICBweXRob24vdGVzdHMvZXJyb3IucHkgcHl0aG9uL3Rlc3RzL3hwYXRoLnB5OiBpbXBsZW1lbnRlZAoJICB0aGUgc3VnZ2VzdGlvbnMgbWFkZSBieSBHYXJ5IEJlbnNvbiBhbmQgZXh0ZW5kZWQgdGhlIHRlc3RzCgkgIHRvIG1hdGNoIGl0LgoKVHVlIE1hciAgNSAxMDozNToyNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5OiBhcHBsaWVkIHBhdGNoIGZpeGluZyAjNzM0NTAKCk1vbiBNYXIgIDQgMTc6NTk6MjkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4aW5nICM2MTI5MCAibmFtZXNwYWNlIG5vZGVzIGhhdmUgbm8gcGFyZW50IgoJICBsb25nIHN0YW5kaW5nIGRpdmVyZ2VuY2UgZnJvbSB0aGUgWFBhdGggUkVDLiBOb2RlU2V0cwoJICBzaW1wbHkgaG9sZCBhIGNvcHkgb2YgbmFtZXNwYWNlIG5vZGVzIGFuZCB0aG9zZSBub2RlIC0+bmV4dAoJICBwb2ludHMgdG8gdGhlIHBhcmVudCAod2hpY2ggbWF5IG5vdCBiZSB0aGUgbm9kZSBjYXJyeWluZyB0aGUKCSAgZGVmaW5pdGlvbikuCgkqIGluY2x1ZGUvbGlieG1sL3hwYXRoLmg6IGZsYWdnZWQgYnV0IGRpZG4ndCBhZGRlZCBhIHBvc3NpYmxlCgkgIHNwZWVkdXAKCSogRE9DQnBhcnNlci5jIEhUTUxwYXJzZXIuYzogcmVtb3ZlZCBzb21lIHdhcm5pbmdzIGZyb20gcHVzaAoJICBwYXJzZXIgZHVlIHRvIG5ldyBzdGF0ZSBiZWluZyBhZGRlZC4KCSogdHJlZS5jOiBuZXcgZml4IGZyb20gQm9yaXMgRXJkbWFubgoJKiBjb25maWd1cmUuaW4gYzE0bi5jIGluY2x1ZGUvbGlieG1sL2MxNG4uaCB0ZXN0QzE0Ti5jOiBhZGRlZAoJICB0aGUgWE1MIENhbm9uYWxpemF0aW9uIHN1cHBvcnQgZnJvbSBBbGVrc2V5IFNhbmluCgpTdW4gTWFyICAzIDE1OjEyOjQyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogcGF0Y2ggZnJvbSBCb3JpcyBFcmRtYW5uIGZpeGluZyBzb21lIG5hbWVzcGFjZSBvZGl0aWVzCgkgIHdpdGggeG1sQ29weU5vZGUoKQoKU2F0IE1hciAgMiAxMDozMzowNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBmaXggYnVnICM3MjcwNiB3aGVuIGxvYWRpbmcgYSBOVUxMIGVudGl0eQoKRnJpIE1hciAgMSAxNzoxNDo0MiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogRml4ZWQgIzcyMzQ2LCBhYm91dCBoYW5kbGluZyBvZiB4bWxuczpmb289IiIsIHRoaXMgY291bGQKCSAgYWN0dWFsbHkgY2hhbmdlIGluIGEgZnV0dXJlIFhNTCBOYW1lc3BhY2UgcmV2aXNpb24uCgpGcmkgTWFyICAxIDE3OjEyOjE1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi90eXBlcy5jIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMveHBhdGhyZXQucHk6CgkgIGFkZGVkIHRoZSBwb3NzaWJpbGl0eSBvZiByZXR1cm5pbmcgbm9kZXNldHMgZnJvbSBYUGF0aCBleHRlbnNpb24KCSAgZnVuY3Rpb25zIHdyaXR0ZW4gaW4gUHl0aG9uCgpGcmkgTWFyICAxIDEzOjU2OjEyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi8qOiBjb21taXRpbmcgc29tZSBQeXRob24gYmluZGluZ3Mgd29yayBkb25lIHdoaWxlIHRyYXZlbGxpbmcKCkZyaSBNYXIgIDEgMTA6MTE6MTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBjbG9zZSAjNzI2NjMgYW5kICM3MjY1OCwgZG9uJ3QgbWVtZHVtcCB1bmxlc3MgY29tcGlsZWQKCSAgZXhwbGljaXRlbHkgd2l0aCBtZW1vcnkgZGVidWdnaW5nIHN3aXRjaGVkIG9uCgpTYXQgRmViIDIzIDExOjA4OjA5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0IHB5dGhvbi9saWJ4bWxfd3JhcC5oIHB5dGhvbi90eXBlcy5jOgoJICBBZGRlZCB3cmFwcGVyIGZvciB0aGUgeG1sVVJJUHRyIHR5cGUsIHByb3ZpZGVkIGFjY2Vzc29ycywgZml4ZWQKCSAgdGhlIGFjY2Vzc29yIGdlbmVyYXRvciBmb3Igc3RyaW5ncwoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3RzdFVSSS5weTogYWRkZWQgYSBzcGVjaWZpYwoJICByZWdyZXNzaW9uIHRlc3QuCgpGcmkgRmViIDIyIDIzOjQ0OjU3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9SRUFETUUgcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL3NldHVwLnB5OgoJICBhZGRlZCB0aGUgJ3VzdWFsJyBzZXR1cC5weSB0byBhbGxvdyBidWlsZGluZyBhIGxpYnhtbDItcHl0aG9uCgkgIG1vZHVsZSBiYXNlZCBvbiB0aGUgc2FtZSBjb2RlLiBUaGUgaW5pdGlhbGl6YXRpb24gaXMgaG93ZXZlcgoJICBkaWZmZXJlbnQgdGhlIDIgLnNvIGZpbGVzIGZvIGxpYnhtbDIgYW5kIGxpYnhzbHQgYXJlIGlkZW50aWNhbCBhbmQKCSAgdGhleSBlbnRyeSBwb2ludCBpbml0aWFsaXplIGJvdGggbGlicmFyaWVzLiB0aGlzIGlzIGRvbmUgdG8gYXZvaWQKCSAgc29tZSBwb3NzaWJsZSBuYXN0eSBwcm9ibGVtIHNpbmNlIHRoZSBQeXRob24gZG9uJ3QgbWVyZ2UgdGhlIG1hcHMKCSAgb2YgYWxsIHNoYXJlZCBtb2R1bGVzLgoKV2VkIEZlYiAyMCAyMzoxNjowOCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSBwdXNoL2VuY29kaW5nIGJ1ZyByZXBvcnRlZCBieSBNaWNoYWVsCgkgIG9uIGxpYnJzdmcKCldlZCBGZWIgMjAgMTk6NTQ6MDUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg6IGZpeGVzIGEgbWlzcGxhY2VkICNlbmRpZgoKV2VkIEZlYiAyMCAxNzo0Nzo1NSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyB2YWxpZC5jOiBmb3VuZCBhbmQgZml4ZWQgYSBjb3VwbGUgb2YgYWxsb2NhdGlvbiBidWdzCgpXZWQgRmViIDIwIDE1OjM2OjAzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy94bWwuaHRtbCBkb2MvcHl0aG9uLmh0bWwgZG9jLyo6IGFkZGVkIGEgUHl0aG9uIGFuZCBiaW5kaW5nCgkgIHBhZ2UgZGVzY3JpYmluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgUHl0aG9uIGJpbmRpbmdzIGFuZCAKCSAgZ2l2aW5nIHBvaW50ZXJzIHRvIHRoZSBvdGhlciBsYW5ndWFnZXMgd3JhcHBlcnMuCgpXZWQgRmViIDIwIDExOjE2OjE1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogcHJlcGFyaW5nIDIuNC4xNgoJKiBkb2MvKiBweXRob24vbGlieG1sMmNsYXNzLnR4dDogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcywKCSAgcmVidWlsdCB0aGUgQVBJIGFuZCB3ZWIgc2l0ZQoJKiB4cGF0aC5jOiBmaXhlZCAjNzE5NzggcG9ydGFiaWxpdHkgYnVncwoKVHVlIEZlYiAxOSAyMjo0OTozNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogb29wcyBicm9rZSBhdXRvbWF0aWMgZGVmYXVsdGluZyBvZiBuYW1lc3BhY2VzIGF0dHJpYnV0ZXMuCgpUdWUgRmViIDE5IDIyOjAxOjM1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oIHBhcnNlci5jOiBoYWQgdG8gY2hhbmdlCgkgIDIgaW50ZXJuYWwgcGFyc2luZyBBUEkgd2hlbiBwcm9jZXNzaW5nIGRvY3VtZW50IGNvbnRlbnQKCSAgdG8gY2hlY2sgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgZWxlbWVudCBjb250ZW50IGFyZSBkZWZpbmVkCgkgIGluIHRoZSBzYW1lIGVudGl0eQoJKiB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmg6IGF0dHJpYnV0ZSBub3JtYWxpemF0aW9uIGNhbgoJICBnZW5lcmF0ZSBhIHZhbGlkaXR5IGVycm9yIGFkZGVkIHhtbFZhbGlkQ3R4dE5vcm1hbGl6ZUF0dHJpYnV0ZVZhbHVlKCkKCSAgd2l0aCB0aGUgY29udGV4dCB0byByZXBvcnQgaXQuCgkqIFNBWC5jOiBmaXhlZCB0aGUgbGFzdCBrbm93biBidWdzLCBjcmF6eSB2YWxpZGF0aW9uIGNvbnN0cmFpbnRzCgkgIHdoZW4gYSBkb2N1bWVudCBpcyBzdGFuZGFsb25lIHNlZW1zIGNvcnJlY3RseSBoYW5kbGVkLiBUaGVyZQoJICBpcyBhIGNvdXBsZSBvZiBvcGVuIGlzc3VlcyBsZWZ0IHdoaWNoIG5lZWQgY29uc2lkZXJhdGlvbiBlc3BlY2lhbGx5CgkgIFBFOTMgb24gZXh0ZXJuYWwgdW5wYXJzZWQgZW50aXRpZXMgYW5kIHN0YW5kYWxvbmUgc3RhdHVzLiAKCSAgUmFuIDE4MTkgdGVzdHM6IDE4MTcgc3VjZWVkZWQsIDIgZmFpbGVkIGFuZCAwIGdlbmVyYXRlZCBhbiBlcnJvciBpbiA4LjI2IHMuCgkgIFRoZSAyIHRlc3RzIGxlZnQgZmFpbGluZyBhcmUgYWN0dWFsbHkgaW4gZXJyb3IuIENsZWFudXAgZG9uZS4KClR1ZSBGZWIgMTkgMTU6MTc6MDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogaW1wbGVtZW50ZWQgRTU5IHNwYWNlcyBpbiBDREFUQSBkb2VzIG5vdCBtYXRjaCB0aGUKCSAgbm9udGVybWluYWwgUwoKVHVlIEZlYiAxOSAxNDo0NDo1MyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYyBwYXJzZXIuYyB2YWxpZC5jOiBtb3JlIHZhbGlkYXRpb24gdGVzdCBmaXh1cHMKCSogY2hlY2steG1sLXRlc3Qtc3VpdGUucHk6IGFkZGVkIGR1cmF0aW9uIGluZm8gZm9yIHRoZSB0ZXN0cwoKTW9uIEZlYiAxOCAyMzoyNTowOCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyB2YWxpZC5jOiBhIGNvdXBsZSBvZiBlcnJvcnMgd2VyZSByZXBvcnRlZCBidXQgbm90CgkgIHNhdmVkIGJhY2sgYXMgc3VjaCBpbiB0aGUgcGFyc2luZyBjb250ZXh0LiBEb3duIHRvIDElIGZhaWx1cmUgcmF0ZQoJICBSYW4gMTgxOSB0ZXN0czogMTgwMSBzdWNlZWRlZCwgMTggZmFpbGVkIGFuZCAwIGdlbmVyYXRlZCBhbiBlcnJvcgoKTW9uIEZlYiAxOCAyMDoxNjoxNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJbnRlcm5hbGQuYzogaXNFeHRlbmRlciB3YXMgbWlzc2luZyBhIGNoYXIgCgkqIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiAlIGFyZSBhY2NlcHRhYmxlIGluIHRoZQoJICBpbnRlcm5hbCBzdWJzZXQgaWYgd2l0aGluIGEgUFVCTElDIElECgpNb24gRmViIDE4IDE5OjI3OjMyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jIHBhcnNlckludGVybmFscy5jIHZhbGlkLmM6IG1vcmUgd29yayBvbiB0aGUgY29uZm9ybWFuY2UKCSAgc3VpdGUuIFRvb2sgdGhlIHN0ZXAgdG8gZmluYWxseSBibG9jayBkb2N1bWVudHMgd2l0aCBlbmNvZGluZwoJICBlcnJvcnMuIEl0J3MgYSBmYXRhbCBlcnJvciBwZXIgdGhlIHNwZWMsIHBlb3BsZSBzaG91bGQgaGF2ZSBmaXhlZAoJICB0aGVpciBkb2N1bWVudHMgYnkgbm93LgoKTW9uIEZlYiAxOCAxNTozMDoxNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay14bWwtdGVzdC1zdWl0ZS5weTogZml4ZWQgdGhlIHRlc3Qgc2NyaXB0IGFmdGVyIHNvbWUgZGlzY3Vzc2lvbgoJICBvbiB0aGUgc2VtYW50aWMgb2YgVFlQRT0iZXJyb3IiCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCB0aGUgc2NyaXB0IHRvIHRoZSBkaXN0cmliCgpNb24gRmViIDE4IDEyOjE3OjQxIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jIGVudGl0aWVzLmM6IGZpeGVkIGEgY291cGxlIG9mIGNvbmZvcm1hbmNlcyBpc3N1ZXMgZGVlcAoJICBpbnRvIHRoZSB2YWxpZGF0aW9uIGNvZGUgKHN0YW5kYWxvbmUgYW5kIHVuZGVjbGFyZWQgTm90YXRpb25zKQoKTW9uIEZlYiAxOCAwMDoxNzoyNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgIzcxNzQxIHN1cGlkIHR5cG8gYW4gYSBidWcgYWJvdXQgZW5jb2RpbmcgcGFyc2luZwoJICBzdGF5ZWQgdGhlcmUgZm9yIHllYXJzICEKCk1vbiBGZWIgMTggMDA6MDY6NDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYyBTQVguYzogZml4ZWQgIzcxNzQwIE5vdGF0aW9uRGVjbCB3aXRoIGEgcmVxdWlyZWQgZmllbGQKCSAgbWlzc2luZwoKU3VuIEZlYiAxNyAyMzo0NTo0MCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay14bWwtdGVzdC1zdWl0ZS5weTogaW1wcm92ZWQgdGhlIGJlaGF2aW91ciBhIGJpdCBhcwoJICB3ZWxsIGFzIHRoZSBsb2dzCgkqIHBhcnNlci5jIHZhbGlkLmMgU0FYLmM6IGZpeGVkIGEgZmV3IG1vcmUgYnVncyAKCSAgIlJhbiAxODE5IHRlc3RzOiAxNzc4IHN1Y2VlZGVkLCA0MSBmYWlsZWQsIGFuZCAwIGdlbmVyYXRlZCBhbiBlcnJvciIKClN1biBGZWIgMTcgMjA6NDE6MzcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2hlY2steG1sLXRlc3Qtc3VpdGUucHk6IHB5dGhvbiBzY3JpcHQgdG8gcnVuIHJlZ3Jlc3Npb24gdGVzdHMKCSAgYWdhaW5zdCB0aGUgWE1MIFRlc3Qgc3VpdGUgb2YgVzNDL09BU2lzCgkqIFNBWC5jOiBmaXhlZCBhIHZhbGlkYXRpb24gYnVnCgkqIHBhcnNlci5jOiBmaXhlZCAzIGVycm9ycyBwb2ludGVkIGJ5IHRoZSB0ZXN0IHN1aXRlCgkqIGRvYy9idWlsZERvY0Jvb2tDYXRhbG9nOiBmaXhlZCBhIHR5cG8gcG9pbnRlZCBieSBkcmFrZQoJKiBweXRob24vTWFrZWZpbGUuYW06IGZpeGVkIGEgZGVwZW5kZW5keQoKRnJpIEZlYiAxNSAyMTo0NzoxMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxtZW1vcnkuYzogYXZvaWQgYSB3YXJuaW5nIGJ1ZyAjNzE1OTQKCldlZCBGZWIgMTMgMjI6MTM6MzMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbWVtb3J5LmM6IEplc3NlIFBlcnJ5IHByb3ZpZGVkIGEgcGF0Y2ggdG8gcmVtb3ZlIGEgZmV3CgkgIHdhcm5pbmcgb24gYWxwaGEvVHJ1NjQKCldlZCBGZWIgMTMgMTQ6MzA6NDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvZW50aXRpZXMuaDogZml4aW5nIGEgY29tbWVudAoJKiB2YWxpZC5jOiBmaXhpbmcgc29tZSB0cm91YmxlcyB3aXRoIHZhbGlkaXR5IGNoZWNrIG9uIG5hbWVzcGFjZXMKCSogcmVzdWx0L1ZDL05TMyB0ZXN0L1ZDL05TMzogYWRkZWQgYSBzcGVjaWZpYyByZWdyZXNzaW9uIHRlc3QKCldlZCBGZWIgMTMgMTQ6MDU6MjQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBGaXhpbmcgIzcxMzQyIHNlcmlhbGl6aW5nICdcbicgaW4gYXR0cmlidXRlIHZhbHVlcwoJKiByZXN1bHQvbm9lbnQvYXR0MyByZXN1bHQvYXR0MyB0ZXN0L2F0dDM6IGFkZGVkIGEgc3BlY2lmaWMKCSAgdGVzdC4KClR1ZSBGZWIgMTIgMTQ6NDU6MzIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jOiBjb3VwbGUgb2YgYnVnIGZpeGVzCgpNb24gRmViIDExIDE5OjQxOjI5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi8qLnB5OiByZW1vdmVkIHRhYnMgYW5kIHVzZWQgc3BhY2VzLgoKTW9uIEZlYiAxMSAxOToyNTo0NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHByZXBhcmluZyAyLjQuMTUKCSogZG9jL25ld3MuaHRtbCBkb2MveG1sLmh0bWwgZG9jL3htbGlvLmh0bWw6IHJlYnVpbHQgc29tZSBkb2NzCgpNb24gRmViIDExIDE0OjUzOjI0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy94bWxjYXRhbG9nX21hbi54bWw6IHRyeWluZyB0byBjbG9zZSBSZWQgSGF0IGJ1ZyAjNTg3MDcKCSAgaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01ODcwNwoKTW9uIEZlYiAxMSAwOTo1MzowMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9lbmNvZGluZy5oIGluY2x1ZGUvbGlieG1sL2VudGl0aWVzLmgKCSAgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oCgkgIGluY2x1ZGUvbGlieG1sL3RocmVhZHMuaCBpbmNsdWRlL2xpYnhtbC90cmVlLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IHRyeWluZyB0byBmaXggdGhlIGluY2x1ZGUgbWVzcwoKTW9uIEZlYiAxMSAwODo1MzozMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaDogcmV2ZXJ0ZWQgcGFydCBvZiB0aGUgcHJldmlvdXMKCSAgYXR0ZW1wdCB0byBwcm92aWRlICM2OTY1NSwgdGhpcyB3YXMgYnJlYWtpbmcgdGhlIGJ1aWxkLgoKU3VuIEZlYiAxMCAxNDoxMzozNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIE1ha2VmaWxlLmFtIGJ1aWxkX2dsb2IucHkgY29uZmlndXJlLmluIGRlYnVnWE1MLmMKCSAgZ2xvYmFscy5jIHBhcnNlci5jIHRocmVhZHMuYyB0cmVlLmMgdmFsaWQuYyB4bWxtZW1vcnkuYwoJICB4cGF0aC5jIHhwb2ludGVyLmMgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oCgkgIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oIGluY2x1ZGUvbGlieG1sL3RyZWUuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaCBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oOgoJICBUZW50YXRpdmVseSBmaXhlZCAjNjk2NTUgLCBtYWtlIGNvbXBpbGluZyB3aXRoIC1XcmVkdW5kYW50LWRlY2xzCgkgIGNsZWFuLgogICAgICAgICogcHl0aG9uL2xpYnhtbC5jOiBmaXhlZCBhIHdhcm5pbmcuCgpTdW4gRmViIDEwIDEyOjAyOjU5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyB2YWxpZC5jIHhpbmNsdWRlLmM6IGZpeCAjNjg4ODIsIGNsZWFudXAgdGhlIFhJbmNsdWRlCgkgIGNvcHlpbmcgb2Ygbm9kZSwgbWVyZ2UgYmFjayBJRHMgaW4gdGhlIHRhcmdldCBkb2N1bWVudC4KCSogcmVzdWx0L1hJbmNsdWRlL2RvY2lkcy54bWwgdGVzdC9YSW5jbHVkZS9kb2NzL2RvY2lkcy54bWwKCSAgdGVzdC9YSW5jbHVkZS9lbnRzL2lkcy54bWw6IHRlc3QgY2FzZQoJKiByZXN1bHQvVkMvRWxlbWVudFZhbGlkNDogb3V0cHV0IGNoYW5nZWQgZHVlIHRvIGEgdHlwbyBmaXgKClNhdCBGZWIgIDkgMjM6MTU6MDQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtOiBzZWVtcyBzb21lIHZlcnNpb24gb2YgYXV0b21ha2UgZGlkbid0CgkgIGdlbmVyYXRlIHRoZSBkZXBlbmRlbmNpZXMgcmlnaHQgYXMgSmFjb2IgZm91bmQgb3V0LiBBZGQKCSAgYW4gZXh0cmEgZGVwZW5kZW5jeSBydWxlLgoKU2F0IEZlYiAgOSAxODo1OToyMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYyB2YWxpZC5jOiBKdXN0aW4gRmxldGNoZXIgZm91bmQgc29tZSBwYXJ0cwoJICBvZiB0aGUgY29kZSBuZWVkaW5nIGNsZWFudXAKCSogbGlieG1sLnNwZWMuaW4gcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi9nZW5lcmF0b3IucHkKCSAgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHk6IEZpeGVkIHRoZSBweXRob24gTWFrZWZpbGVzCgkgIGNvcnJlY3RlZCBhIGJ1ZyBzaG93aW5nIHVwIG9uIGlhNjQsIGNoYW5nZWQgdGhlIG5hbWUgb2YgdGhlCgkgIHB5dGhvbiBpbnRlcm5hbCBtb2R1bGUgdG9vCgpGcmkgRmViICA4IDE1OjE5OjI4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBhcHBsaWVkIHBhdGNoIGZyb20gQW5kcmlzIFBhdmVuaXMgZm9yIGJpbmFyeQoJICBuYW1lIHN1ZmZpeGVzCgpGcmkgRmViICA4IDE0OjQzOjE3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYyB3aW4zMi93aW4zMmNvbmZpZy5oOiBmaXhpbmcgIzY4NzQ4CgpGcmkgRmViICA4IDE0OjM3OjA1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeGluZyAjNzAxNjYKCkZyaSBGZWIgIDggMTQ6MzE6MjQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4aW5nICM3MDA3NwoKRnJpIEZlYiAgOCAxNDoyNDowMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBDb3B5cmlnaHQgTWFrZWZpbGUuYW0gUkVBRE1FIGNvbmZpZ3VyZS5pbiBsaWJ4bWwuc3BlYy5pbjoKCSAgQ2hhbmdlZCB0byB0aGUgTUlUIExpY2VuY2UKCSogZG9jL0ZBUS5odG1sIGRvYy9jYXRhbG9nLmh0bWwgZG9jL2ludHJvLmh0bWwgZG9jL3htbC5odG1sCgkgIGRvYy94bWxpby5odG1sOiB1cGRhdGVkIHRoZSBkb2MgYWNjb3JkaW5nbHkKCSogaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmggY29uZmlndXJlLmluOiBwcmVwYXJpbmcKCSAgMi40LjE0IHJlbGVhc2UKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwKCSAgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL3R5cGVzLmM6CgkgIGZpeGVkIHRoZSBjb25zdCB4bWxDaGFyICogd3JhcHBlciBhbmQgZ2VuZXJhdG9yLCBYUGF0aCBleHRlbnNpb24KCSAgZnVuY3Rpb25zIG5vdyB1c2UgdGhlIGNvbnRleHQgYXMgZmlyc3QgYXJndW1lbnQKCSogcHl0aG9uL3Rlc3RzL3RzdHhwYXRoLnB5IHB5dGhvbi90ZXN0cy94cGF0aC5weQoJICBweXRob24vdGVzdHMveHBhdGhleHQucHk6IFVwZGF0ZWQgdGhlIHRlc3RzIGFjY29yZGluZ2x5CgkqIHRyZWUuYzogZml4ZWQgYnVnICM3MDA2NwoKVGh1IEZlYiAgNyAxNzozMzo1OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogY2xlYW51cAoJKiBkZWJ1Z1hNTC5jOiBhbHdheXMgdXNlIHN0ZG91dCBpZiBvdXRwdXQgaXMgTlVMTAoJKiB4bWxJTy5jOiBkb24ndCBjbG9zZSBmaWxlZGVzY3JpcHRvcnMgcGFzc2VkIHRvIG91dHB1dEJ1ZmZlcnMKCSogcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQKCSAgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL3R5cGVzLmM6IGF1Z21lbnRlZCB0aGUgbnVtYmVyIG9mIGJpbmRpbmdzCgkgIGhhbmRsaW5nIEZJTEUgKiBhbmQgWFBhdGggY29udGV4dHMKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtOiBhdm9pZCBhIHN0dXBpZCBwcm9ibGVtIGR1ZSB0byB0aGUKCSAgdXNlIG9mIFRFU1QuCgpXZWQgRmViICA2IDIzOjM3OjA3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogZml4ZWQgc3R1cGlkIGJ1ZyAjNzA3MzggZm91bmQgYnkgYWxmb25zIGhvb2dlcnZvcnN0CgpXZWQgRmViICA2IDE3OjA0OjUxIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9UT0RPIHB5dGhvbi9saWJ4bWwuYzogY2xlYW51cCB0aGUgZXh0ZW5zaW9uIGZ1bmN0aW9uIGxvb2t1cAoJKiB4bWxtZW1vcnkuYyBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaDogYWx3YXlzIGNvbXBpbGUgdGhlIGxpc3QKClR1ZSBGZWIgIDUgMTc6MzM6MzAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIHB5dGhvbi9NYWtlZmlsZS5hbTogZG8gbm90IGluc3RhbGwgb3V0c2lkZQoJICBvZiBwcmVmaXgKCk1vbiBGZWIgIDQgMTU6MDU6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL1RPRE8gcHl0aG9uL2xpYnhtbC5jOiBzdGFydGVkIGFkZGluZyBTQVggaW50ZXJmYWNlcwoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3B1c2hTQVgucHk6IGFkZGVkIGEgYmFzaWMKCSAgU0FYIHRlc3QKCk1vbiBGZWIgIDQgMDE6MTI6NDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBoYXJkZW5lZCB0aGUgYWRkQ2hpbGQgZnVuY3Rpb24KCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwKCSAgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL1RPRE86CgkgIGFkZGVkIGFjY2Vzc29ycyBuZWVkZWQgZm9yIHhtbE5vZGUsIGEgYml0IG1vcmUgdGVzdGluZyBhbmQKCSAgZXh0ZW5zaW9uIG9mIGludGVyZmFjZXMKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9idWlsZC5weTogYWRkZWQgYSB0ZXN0CgkgIGJ1aWxkIGZyb20gc2NyYXRjaC9zYXZlL2xvYWQvY2hlY2sKClN1biBGZWIgIDMgMjE6MTA6MzkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmM6IGNoYW5nZSBhIHNtYWxsIGJpdCBpbiB0aGUgd2F5IHZhbGlkaWR5CgkgIGVycm9yIG1lc3NhZ2VzIGdldCBpbml0aWFsaXplZAoJKiBweXRob24vVE9ETyBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwKCSAgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL3R5cGVzLmM6CgkgIGFkZGVkIHNvbWUgbWVtb3J5IGRlYnVnZ2luZyB0byB0cmFjayBsZWFrcyBhdCB0aGUgbGlieG1sMiBsZXZlbAoJKiBweXRob24vdGVzdHMvKi5weTogY2hhbmdlZCBhbGwgdGVzdHMgdG8gY2hlY2sgZm9yIGxlYWtzLAoJICB0aGVyZSBpcyBqdXN0IG9uZSBsZWZ0IGluIFhQYXRoIGV4dGVuc2lvbiByZWdpc3RyYXRpb25zLgoKU3VuIEZlYiAgMyAxNzo1MDo0NiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vVE9ETyBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBtb3JlIGFjY2Vzc29yIGNsYXNzZXMgZm9yIHRoZSBwYXJzZXIKCSAgY29udGV4dCwgYWxsb3cgdG8gc3dpdGNoIG9uIGFuZCBjaGVjayB2YWxpZGl0eQoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL2Vycm9yLnB5CgkgIHB5dGhvbi90ZXN0cy9pbnZhbGlkLnhtbCBweXRob24vdGVzdHMvdmFsaWQueG1sCgkgIHB5dGhvbi90ZXN0cy92YWxpZGF0ZS5weTogYXR0ZGVkIG1vcmUgdGVzdCBhbmQgYW5kIGFkZGVkIGVycm9yLnB5CgkgIHdoaWNoIEkgZm9yZ290IHRvIGNvbW1pdCBpbiB0aGUgbGFzdCBzdGVwCgpTdW4gRmViICAzIDE2OjAzOjU1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vdHlwZXMuYzogY2xlYW51cAoJKiBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weSBweXRob24vbGlieG1sX3dyYXAuaAoJICBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sIAoJICBweXRob24vbGlieG1sMmNsYXNzLnR4dDogYWRkZWQgY2xhc3MgZm9yIHBhcnNlciBjb250ZXh0LCBhZGRlZAoJICBmaXJzdCBjdXQgZm9yIHB1c2ggbW9kZSBzdXBwb3J0LiBBZGRlZCBhIGZyYW1ld29yayB0byBnZW5lcmF0ZQoJICBhY2Nlc3NvcnMgZnVuY3Rpb25zLgoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3B1c2gucHk6IGFkZGVkIGEgcHVzaAoJICB0ZXN0CgpTdW4gRmViICAzIDAwOjE3OjI2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vVE9ETyBweXRob24vbGlieG1sLnB5OiBmaXhlZCBhIHNtYWxsCgkgIGJ1ZyBhIGJpdCBvZiBjbGVhbnVwLgoKU2F0IEZlYiAgMiAyMjo0NzoxMCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBhZGRpbmcgZXJyb3IgcmVkaXJlY3Rpb25zIGFuZCBwcmVmb3JtYXQKCSAgdG8gYSBweXRob24gaGFuZGxlcgoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzLyoucHk6IGNsZWFudXAgbWFkZSBhbGwKCSAgdGVzdHMgc2VsZiBjaGVja2luZwoKU2F0IEZlYiAgMiAxMzoxODo1NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weTogZml4ZWQgYSBzdHVwaWQgYnVnIHdoZW4gcmVuYW1pbmcKCSAgYSBmdW5jdGlvbgoKU2F0IEZlYiAgMiAxMToyNTo1MSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL1RPRE8gcHl0aG9uL2dlbmVyYXRvci5weQoJICBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwKCSAgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IFByb2dyZXNzaW5nIHRocm91Z2ggdGhlIFRPRE9zLCBjbGFzcwoJICBkZXNjcmlwdGlvbiBvdXRwdXQsIGV4dHJhIFhNTCBBUEksIFJQTSBub3cgYnVpbGRzIHRoZSB3cmFwcGVycwoJICBmb3IgYWxsIHB5dGhvbiBpbnN0YWxsZWQgdmVyc2lvbnMKClNhdCBGZWIgIDIgMTA6MTM6NTIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGxpYnhtbC5zcGVjLmluIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vVE9ETwoJICBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBhZGRlZCBtb3JlIGluZm9ybWF0aW9ucwoJICBpbiB0aGUgbGlieG1sMi1weXRob24gcGFja2FnZSBpbmNsdWRpbmcgZG9jcy4gU2xpZ2h0bHkgY2hhbmdlZAoJICB0aGUgY2xhc3MgaGllcmFyY2h5CgkqIHB5dGhvbi90ZXN0cy8qOiBhZGRlZCBiYXNpYyByZWdyZXNzaW9uIHRlc3RzIGluZnJhc3RydWN0dXJlIHRvbwoKRnJpIEZlYiAgMSAyMzoxMTo1OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gbGlieG1sLnNwZWMuaW4gZXhhbXBsZS9NYWtlZmlsZS5hbSBweXRob24vTWFrZWZpbGUuYW06CgkgIGFkZGVkIGxpYnhtbDItcHl0aG9uIGFzIHBhcnQgb2YgdGhlIHBhY2thZ2VzIGluc3RhbGxlZAoKRnJpIEZlYiAgMSAxODo0ODoxOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMKCSAgcHl0aG9uL2xpYnhtbC5weTogbW9yZSB3b3JrLCBub3cgYWJsZSB0byBleHRlbmQgdGhlCgkgIFhQYXRoIGludGVycHJldGVyIHdpdGggZnVuY3Rpb25zIHdyaXR0ZW4gaW4gcHl0aG9uLgoKRnJpIEZlYiAgMSAxMDoyODo1MSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW06IEphY29iIHNlbnQgYSBwYXRjaCB0byBhbGxvdyBidWlsZGluZyBmcm9tCgkgIHRhcmZpbGUuCgpGcmkgRmViICAxIDAwOjQwOjQ4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vbGlieG1sLmMgY29uZmlndXJlLmluIE1ha2VmaWxlLmFtOgoJICBpbnNlcnRlZCB0aGUgcHl0aG9uIHdyYXBwZXJzIGJ1aWxkLCBJIGhvcGUgdGhpcyB3b24ndCBiZSB0b28KCSAgdW5wb3J0YWJsZQoKVGh1IEphbiAzMSAyMToyNzozNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBtaW5vciBvcHRpbWl6YXRpb24KCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weQoJICBweXRob24vbGlieG1sX3dyYXAuaDogbW9yZSB3b3JrIG9uIHRoZSBweXRob24gYmluZGluZ3MsCgkgIHRoZXkgbm93IHN1cHBvcnQgWFBhdGggYW5kIHRoZXJlIGlzIG5vIGV2aWRlbnQgbGVhawoKVGh1IEphbiAzMSAwMDo0ODowNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sLnB5OgoJICBtb3JlIHdvcmsgb24gdGhlIHB5dGhvbiBiaW5kaW5ncyBnZW5lcmF0b3IuCgpXZWQgSmFuIDMwIDIxOjUxOjI2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWxfd3JhcC5oOgoJICBtb3JlIHdvcmsgb24gdGhlIHB5dGhvbiBiaW5kaW5ncy4KCldlZCBKYW4gMzAgMTc6MzU6MzMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weQoJICBweXRob24vbGlieG1sX3dyYXAuaDogY29tbWl0ZWQgZWFybHkgdmVyc2lvbiBvZiBhIHB5dGhvbiBiaW5kaW5nCgkgIGZvciBwcml2YXRlIHVzZSBvbmx5IEFUTQoKU2F0IEphbiAyNiAyMjo0MToxMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbnRpdGllcy5jIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9lbnRpdGllcy5oOiBhcHBsaWVkIHBhdGNoCgkgIGZyb20gQW50aG9ueSBKb25lcyB0byBpbXBsZW1lbnQgY29weSBvZiBEVEQgc3VidHJlZSB0b28uIEhhZAoJICBqdXN0IHRvIGtlZXAgMiBmdW5jdGlvbiBwcml2YXRlIHdoaWNoIHJlYWxseSBvdWdodCB0byBiZWNvbWUKCSAgcHVibGljIG9uZXMuCgpGcmkgSmFuIDI1IDE1OjE0OjU1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYWRkZWQgcG9pbnRlcnMgdG8gdGhlIHdlYiBwYWdlcyBpbiB0aGUgdXNhZ2UoKQoKVGh1IEphbiAyNCAxNzowNDowNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IG1vcmUgZml4ZXMgZnJvbSBQZXRyIEtvemVsa2EgZm9yIGF0dHJpYnV0ZSBoYW5kbGluZwoJICBpbiB0aGUgdHJlZSBBUEkgdG8gYWxpZ24gdGhlIHNlbWFudGljIHdpdGggRE9NLgoKVGh1IEphbiAyNCAxNjowMDo1MyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jIHRyZWUuYyBlbnRpdGllcy5jOiBhbm90aGVyIHNldCBvZiBwYXRjaGVzIGZyb20KCSAgQW50aG9ueSBKb25lcyBmb3IgY29weSBvcGVyYXRpb25zIGNsZWFudXAgYW5kIHJvYnVzdG5lc3MKCldlZCBKYW4gMjMgMTg6NTM6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL0FQSWNodW5rKi5odG1sIGRvYy9wYXJzZWRlY2wucHkgZG9jL2FwaS54c2w6IGdlbmVyYXRlZAoJICBhbiBhbHBoYWJldGljIGluZGV4IGJhc2VkIG9uIGNvbW1lbnRzIGNvbnRlbnQKCSogZG9jLyo6IHJlYnVpbHQgdGhlIHdlYiBzaXRlIHdpdGggdGhlIG5ldyByZWZlcmVuY2VzCgpXZWQgSmFuIDIzIDE1OjE0OjIyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5oOiBHcmVnIFNqYWFyZGVtYSBzdWdnZXN0ZWQgdG8gdXNlIGFuCgkgIGVwb25lbnRpYWwgYnVmZmVyIGdyb3RoIHBvbGljeSBpbiB4bWxQYXJzZXJBZGROb2RlSW5mbygpCgpXZWQgSmFuIDIzIDEzOjMyOjQwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9hcGkueHNsIGRvYy9BUEljb25zdHJ1Y3RvcnMuaHRtbCBkb2MvQVBJZmlsZXMuaHRtbAoJICBkb2MvQVBJZnVuY3Rpb25zLmh0bWwgZG9jL0FQSXN5bWJvbHMuaHRtbCBkb2MvbGlieG1sMi1yZWZzLnhtbAoJICBkb2MvcGFyc2VkZWNsLnB5IGRvYy9NYWtlZmlsZS5hbTogdXBkYXRlZCB0aGUgcHl0aG9uIGV4dHJhY3RvcgoJICB0byBnZW5lcmF0ZSBjcm9zcy1yZWZlcmVuY2VzLCBhbmQgYWRkZWQvdXBkYXRlZCB0aGUgc3R5bGVzaGVldHMKCSAgdG8gZ2VuZXJhdGUgYW5kIGxpbmsgQVBJIGluZGV4ZXMuIFRoZSBnZW5lcmljIGtleXdvcmQgaW5kZXgKCSAgaXMgbm90IGRvbmUgeWV0LgoJKiBkb2MvKi5odG1sOiByZWdlbmVyYXRlZCBhbGwgdGhlIHVzdWFsIGRvY3MgdG9vCgpUdWUgSmFuIDIyIDIzOjExOjI2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmM6IGFkZGVkIGFuIHhwYXRoIGZ1bmN0aW9uIHRvIHRoZSBzaGVsbCBmb3IgVC4gVi4gUmFtYW4KClR1ZSBKYW4gMjIgMjI6NDI6MjMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYzogcGF0Y2ggZnJvbSBBbnRob255IEpvbmVzIHRvIGNhdGNoIE5VTEwgbm9kZXMgaW4KCSAgZGVidWcgcm91dGluZXMuCgpUdWUgSmFuIDIyIDIyOjM4OjQyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYXBwbHkgYW4gcGF0Y2ggZnJvbSBQZXRyIEtvemVsa2EgZm9yIHVubGluayBhbmQgcmVwbGFjZSAKCSAgc3VwcG9ydCBvZiBhdHRyaWJ1dGUgbm9kZXMKClR1ZSBKYW4gMjIgMTk6MTI6MDYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvcGFyc2VkZWNsLnB5OiBCdWlsZCBhIG5ldyB2ZXJzaW9uCgkgIGhvcGVmdWxseSBuZWFyIGNvbXBsZXRlIGFuZCBmdWxseSBkb2N1bWVudGVkIG9mIHRoZSBBUEkgaW4gWE1MCgkqIEhUTUx0cmVlLmMgU0FYLmMgZGVidWdYTUwuYyBlcnJvci5jIGdsb2JhbHMuYyBwYXJzZXIuYyB0cmVlLmMKCSB4bWxJTy5jIHhtbG1lbW9yeS5jIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaCBpbmNsdWRlL2xpYnhtbC9oYXNoLmgKCSBpbmNsdWRlL2xpYnhtbC9saXN0LmggaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggaW5jbHVkZS9saWJ4bWwvdHJlZS5oCgkgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmggaW5jbHVkZS9saWJ4bWwvdmFsaWQuaGkKCSBpbmNsdWRlL2xpYnhtbC94bWxJTy5oIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmhpCgkgaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5LmggaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluaQoJIGluY2x1ZGUvbGlieG1sL3hwYXRoLmggaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaDoKCSAgQ2xlYW5lZCB1cCB0aGUgZG9jIGNvbW1lbnRzIGEgbG90IGluIHRoZSBwcm9jZXNzLCB0aGUgaW50ZXJmYWNlCgkgIGNvdmVyYWdlIGlzIG5vdyAxMDAlCgpUdWUgSmFuIDIyIDAwOjEyOjU4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL3BhcnNlZGVjbC5weTogaW1wcm92ZWQgdGhlIHNjcmlwdCB0bwoJICBleHRyYWN0cyBjb21tZW50cyBmcm9tIHRoZSBndGstZG9jIERvY0Jvb2sgb3V0cHV0IChhIGJpdAoJICBjb252b2x1dGVkIGJ1dCBzZWVtcyB0byB3b3JrKS4KCk1vbiBKYW4gMjEgMTg6Mjk6MTkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gZG9jL01ha2VmaWxlLmFtIGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL3BhcnNlZGVjbC5weToKCSAgYWRkZWQgYW4gWE1MIGRlc2NyaXB0aW9uIG9mIHRoZSBBUEksIG1vdmVkIHRoZSBzY3JpcHQgZ2VuZXJhdGluZwoJICBpdCBoZXJlLiBBZGRlZCBhICJtYWtlIGFwaSIgdGFyZ2V0CgpNb24gSmFuIDIxIDE0OjM0OjM3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogQWRhbSBMb3VuZHMgcG9pbnRlZCBvdXQgYSBidWcgaW4geG1sU2VhcmNoTnMoKQoJICAKTW9uIEphbiAyMSAwOTo1NToyMSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmg6IHRoZSBjaGFuZ2UgbWFkZSB0bwoJICB4bWxYUGF0aEZ1bmNMb29rdXBGdW5jIHdhcyBpbmNvbXBhdGlibGUgcm9sbCBpdCBiYWNrCgpTdW4gSmFuIDIwIDIzOjAzOjQxIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBjbGVhbnVwIHBhdGNoIGZyb20gQW50aG9ueSBKb25lcwoJKiBkb2MvTWFrZWZpbGUuYW06IGZpeCB0aGUgaGVhZGVycyB0byBhdm9pZCBpbiBtYWtlIHNjYW4KCSogcGFyc2VySW50ZXJuYWxzLmMgeHBhdGguYyBpbmNsdWRlL2xpYnhtbC8qLmg6IGNsZWFudXAgb2YgdGhlCgkgIGluY2x1ZGVzLCAqIHZzIFB0ciBhbmQgZ2VuZXJhbCBjbGVhbnVwCgkqIHBhcnNlZGVjbC5weTogZmlyc3QgdmVyc2lvbiBvZiBhIHNjcmlwdCB0byBleHRyYWN0IHRoZQoJICBtb2R1bGUgaW50ZXJmYWNlcywgdGhlIGdvYWwgd2lsbCBiZSB0byBwcm92aWRlIC5kZWNsIG9yIFhNTAoJICBzcGVjaWZpY2F0aW9uIG9mIHRoZSBpbnRlcmZhY2VzIHRvIGJ1aWxkIHdyYXBwZXJzLgoKU3VuIEphbiAyMCAxMzozODoyMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MveG1sY2F0YWxvZ19tYW4ueG1sIHhtbGNhdGFsb2cuYzogRml4ZWQgYnVnICM2ODgzMCwgeG1sY2F0YWxvZwoJICBub3cgcHJvdmlkZXMgcmV0dXJuIGNvZGVzIGluIGNhc2Ugb2YgZXJyb3JzCgpTYXQgSmFuIDE5IDE2OjM2OjIxIENFVCAyMDAyIEJqb3JuIFJlZXNlIDxicmVlc2VAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoKCSogdHJpby5oIHRyaW8uYyB0cmlvZGVmLmggdHJpb3AuaCB0cmlvbmFuLmggdHJpb25hbi5jIE1ha2VmaWxlLmFtOgoJICBVcGdyYWRlZCB0byB0cmlvIGJhc2VsaW5lIDEuNgoJKiBzdHJpby5oIHN0cmlvLmM6IFJlcGxhY2VkIGJ5IHRyaW9zdHIuaCBhbmQgdHJpb3N0ci5jCgpGcmkgSmFuIDE4IDE3OjIyOjUwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYyB4bWxJTy5jIHhtbGNhdGFsb2cuYzogcmVtb3ZlZCB0aGUgbGFzdCBvY2N1cmVuY2VzCgkgIG9mIHN0cmR1cCB1c2FnZSBpbiB0aGUgY29kZQoKRnJpIEphbiAxOCAxMjo0NzoxNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBlcnJvci5jOiBLZWl0aCBJc2RhbGUgY29tcGxhaW5lZCByaWdodGx5IHRoYXQgCgkgIHhtbEluaXRQYXJzZXIoKSBkaWQgbm90IHByZXNlcnZlIHZhbHVlIHNldCBieSB4bWxTZXRHZW5lcmljRXJyb3JGdW5jCgpUaHUgSmFuIDE3IDA5OjQ0OjQ0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4ZWQgdGhlIGZ1bnh0aW9uIHRvIHNldCB0aGUgeG1sOiBhdHRyaWJ1dGVzCgkqIGRlYnVnWE1MLmM6IGFkZGVkICJzZXRiYXNlIiB0byB0ZXN0IGl0LgoKV2VkIEphbiAxNiAxNjozNjowOCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IHVwZGF0ZSB4bWxOb2RlU2V0Q29udGVudCgpIGFuZCB4bWxOb2RlU2V0Q29udGVudExlbigpCgkgIHRvIGFsbG93IHVwZGF0aW5nIGFuIGF0dHJpYnV0ZSBjb250ZW50CgpUdWUgSmFuIDE1IDE4OjA5OjIzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5oOiB0cnkgdG8gYXZvaWQgcHJvYmxlbXMgd2hlbiBjb21waWxpbmcgb24gV2luZG93cwoKTW9uIEphbiAxNCAxODo1NjoyNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBoYXNoLmM6IHBhdGNoIGZyb20gQW50aG9ueSBKb25lcyBmb3IgaGFzaC5jIGFsbG9jYXRpb24gc2l6ZQoJKiBNYWtlZmlsZS5hbTogdHJ5aW5nIHRvIHdvcmsgYXJvdW5kIFlldCBBbm90aGVyIExpYnRvb2wgTWFkbmVzcwoJICBhbmQgYnVpbGQgdGhlIDIuNC4xMyByZWxlYXNlIGZpbmFsbHkgLi4uCgpNb24gSmFuIDE0IDE4OjI3OjE5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogdXBkYXRlZCB0byAyLjQuMTMKCSogZG9jLyogOiB1cGRhdGUgb2YgdGhlIGRvY3VtZW50YXRpb24KCk1vbiBKYW4gMTQgMTc6NTM6NDEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYyB0cmVlLmM6IHNvbWUgY2xlYW51cCBhZnRlciBhbiB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdAoJICBhdCBmaXhpbmcgIzYxMjkwIDotKAoKU3VuIEphbiAxMyAyMTozMDo1NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbFNhdmVGb3JtYXRGaWxlRW5jKCkgd2hlbiBlbmNvZGluZyA9PSBOVUxMCgkgIEZpeGVzIGJ1ZyAjNjcyMjkKClN1biBKYW4gMTMgMTc6MTQ6MDYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiB0cnlpbmcgdG8gYXZvaWQgdHJvdWJsZXMgd2hlbiBhIHN1YnRyZWUgaXMgY29waWVkCgkgIGFuZCBjb2FsZXNjZWQgaW4gcGFydCB3aXRoIHRoZSB0YXJnZXQgdHJlZS4gU2hvdWxkIGZpeCAKCSAgYnVnICM2NzQwNwoKU3VuIEphbiAxMyAxNjozNzoxNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXhlZCB2YWxpZGF0aW9uIG9mIGF0dHJpYnV0ZXMgY29udGVudCBvZiB0eXBlCgkgIE5BTUUgTkFNRVMgTk1UT0tFTiBhbmQgTk1UT0tFTlMgdG8gYWNjZXB0IGludGVybmF0aW9uYWxpemVkCgkgIHZhbHVlcywgdmVyeSBvbGQgYnVnLiBGaXhlcyAjNjc2NzEKClN1biBKYW4gMTMgMTU6MDc6NDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmggdHJlZS5jOiBpbnRlZ3JhdGVkCgkgIGEgY291cGxlIG9mIGZpeGVzIGFuZCBhIG5ldyBBUEkgZnVuY3Rpb24geG1sU2V0RW50aXR5UmVmZXJlbmNlRnVuYygpCgkgIGZyb20gS2VpdGggSXNkYWxlIGFuZCBkZWRpY2F0ZWQgdG8geHNsZGJnIHRoZSBYU0xUIGRlYnVnZ2VyLgoKU3VuIEphbiAxMyAxNDoyMzoyMSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0aHJlYWRzLmM6IGFwcGxpZWQgU2VyZ3VlaSBOYXJvam55aSdzIHBhdGNoIHRvIGFkZCBuYXRpdmUKCSAgdGhyZWFkIHN1cHBvcnQgb24gdGhlIFdpbjMyIHBsYXRmb3JtCgkqIHRlc3RUaHJlYWRzV2luMzIuYyBNYWtlZmlsZS5hbTogYWRkZWQgdGhlIHRlc3QgcHJvZ3JhbSBhbHNvCgkgIGZyb20gU2VyZ3VlaSwgV2luMzIgc3BlY2lmaWMKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLmluOgoJICBhZGRlZCBwYXRjaCBmcm9tIElnb3IgZm9yIHRoZSBXaW5kb3dzIHRocmVhZCBzcGVjaWZpYyBkZWZpbmVzLgoKV2VkIEphbiAgOSAxMjo1MDozOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbnRpdGllcy5jOiBBbnRob255IEpvbmVzIHBvaW50ZWQgYSBidWcgaW4geG1sQ29weUVudGl0eSgpCgpUdWUgSmFuICA4IDE0OjIzOjIyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy8qLmh0bWwgZG9jL3NpdGUueHNsIGRvYy9NYWtlZmlsZTogcmVuYW1lZCBYTUwuaHRtbAoJICBvdXRwdXQgcGFnZSBpbnRvIFhNTGluZm8uaHRtbC4gQ2xvc2UgYnVnICM2Njk1MSBhbmQKCSAgcmFpc2VkIGJ5IFJvYmVydCBDb2xsaW5zIHRvby4KClR1ZSBKYW4gIDggMTQ6MTM6MTggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYzogUGF1bCBLZW9naCBwb2ludGVkIG91dCBhIHBvc3NpYmlsaXR5IG9mIHNlZ2ZhdWx0CgkgIG9uIHJlcGV0ZWQgeG1sQWRkRW5jb2RpbmdBbGlhcygpIC8geG1sQ2xlYW51cEVuY29kaW5nQWxpYXMoKS4KCSAgQ2xvc2VzIGJ1ZyAjIDY4MjM4CgpUdWUgSmFuICA4IDEyOjQ4OjI3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy8qLmh0bWw6IHVwZGF0ZWQgdGhlIEdkb21lMiBsaW5rcwoKVHVlIEphbiAgOCAxMTozMjozMCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuaDogQXBwbGllZCBmb2xsb3dpbmcgcGF0Y2hlcyBmcm9tIFJvYmVydCBDb2xsaW5zCgkgIGFuZCBtYWtlIHN1cmUgSU5fTElCWE1MIGlzIGRlZmluZWQgd2hlbiBjb21waWxpbmcgaXQKCS0tLS0tLS0KCSogaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluIChMSUJYTUxfRExMX0lNUE9SVCk6IFVzZSBvbiBDeWd3aW4KCSAgYXMgd2VsbCBhcyBWaXN1YWwgQy4KCSogcGFyc2VyLmMgKFhNTF9ESVJfU0VQKTogRG9uJ3QgdXNlICdcXCcgZm9yIEN5Z3dpbi4KCSogcGFyc2VySW50ZXJuYWxzLmMgKFhNTF9ESVJfU0VQKTogRG9uJ3QgdXNlICdcXCcgZm9yIEN5Z3dpbi4KCSogc3RyaW8uYyAoUExBVEZPUk1fVU5JWCk6IERlZmluZSBmb3IgQ3lnd2luLgoJKiB0cmlvZGVmLmggKFRSSU9fUExBVEZPUk1fVU5JWCk6IERlZmluZSBmb3IgQ3lnd2luLgoJKiB4bWxJTy5jICh4bWxGaWxlT3Blbik6IFVzZSB1bml4IGJlaGF2aW91ciBmb3IgQ3lnd2luLgoJICBVc2UgYmluYXJ5IG1vZGUgb3BlbnMgZm9yIEN5Z3dpbiAoeG1sRmlsZU9wZW5XIHhtbFBhcnNlckdldERpcmVjdG9yeQoJICB4bWxTeXNJREV4aXN0cyB4bWxOb05ldEV4aXN0cykuCgkqIHhtbGxpbnQuYzogRG9uJ3QgaW5jbHVkZSB3aW5zb2NrMi5oIGZvciBDeWd3aW4uCgpNb24gSmFuICA3IDE3OjUyOjQ4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBKaXJrYSBLb3NlayBwb2ludGVyIG91dCBhIGJ1ZyBpbiB4bWxQYXJzZVRleHREZWNsKCkKCSAgd2hlbiB0aGUgdmVyc2lvbiBpbmZvIGlzIG5vdCBwcmVzZW50LgoKTW9uIEphbiAgNyAwMDowMzo1OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IEFudGhvbnkgSm9uZXMgIHBvaW50ZWQgb3V0IGEgcHJvYmxlbSBpbgoJICB4bWxTdHJpbmdHZXROb2RlTGlzdCgpIGFuZCBwcm92aWRlZCBhIGZpeCBmb3IgaXQKClN1biBKYW4gIDYgMTM6NDU6NDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHBhdGNoIGZyb20gRnJhbmsgSiBGcmFua2xpbiB0byByZW1vdmUgYSBidWcgaW4KCSAgeG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoKSB3aGVuIHRoZSBpbml0aWFsIGJ1ZmZlciBwYXNzZWQKCSAgaXMgbGFyZ2UuCgpTYXQgSmFuICA1IDE5OjI0OjIzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyLyo6IGJpZyBjbGVhbnVwIG9mIHRoZSBXaW5kb3dzL01TVkMgcHJvamVjdCBmaWxlcwoJICBmcm9tIElnb3IgWmxhdGtvdmljCgpXZWQgSmFuICAyIDE0OjExOjM1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9NYWtlZmlsZS5hbTogc2hvdWxkIGZpeCAjNjc2NzQgYW5kIGF2b2lkIHRyb3VibGVzIGlmIAoJICB4c2x0cHJvYyBpcyBub3QgYXZhaWxhYmxlIG9yIGZhaWxzIGluIHRoZSBwcmVmaXggcHJvdmlkZWQKClR1ZSBKYW4gIDEgMTc6NDg6NTYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbWVtb3J5LmM6IG9uZSBtb3JlIGRvYyBwYXRjaCBmcm9tIENoYXJsaWUgQm96ZW1hbi4KCk1vbiBEZWMgMzEgMTc6MzU6NDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogRE9DQnBhcnNlci5jIHBhcnNlci5jIHZhbGlkLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaCBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oOgoJICBGaXhlZCBhIGZldyBvdGhlciBwcm9ibGVtcyByYWlzZWQgYnkgQ2hhcmxpZSBCb3plbWFuLgoJKiByZXN1bHQvVkMvRWxlbWVudFZhbGlkWzUtN106IGZpeGVkIHRoZSBvdXRwdXQKCk1vbiBEZWMgMzEgMTc6MTM6MzQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogKi5jIGluY2x1ZGUvbGlieG1sLyouaCBkb2MvaHRtbC8qOiBhcHBsaWVkIDQyIGRvY3VtZW50YXRpb24KCSAgcGF0Y2hlcyBmcm9tIENoYXJsaWUgQm96ZW1hbi4gUmVnZW5lcmF0ZWQgdGhlIEhUTUwgZG9jcy4KClRodSBEZWMgMjAgMTQ6NTk6NTIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvZGVidWdYTUwuaCB3aW4zMi9kc3AvbGlieG1sMi5kZWYuc3JjOiBmaXhlcwoJICBmb3IgV2luZG93cyBmcm9tIElnb3IKClR1ZSBEZWMgMTggMTI6MTM6MzMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhcHBsaWVkIEp1c3RpbiBGbGV0Y2hlciBwYXRjaCBmb3IgLS1vdXRwdXQgb3IgLW8KClR1ZSBEZWMgMTggMDg6NTI6MzIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvbGlieG1sMi9saWJ4bWwyLmRlZi5zcmM6IGNsb3NlICM2NzAxOQoKVHVlIERlYyAxOCAwODowODo1MSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGFwcGxpZWQgSnVzdGluIEZsZXRjaGVyIGdlbmVyaWMgdGltaW5nIHBhdGNoCgkgIHNpbWlsYXIgdG8gdGhlIG9uZSBhbHJlYWR5IGFwcGxpZWQgdG8geHNsdHByb2MuCgpNb24gRGVjIDE3IDE2OjI5OjA4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaCB0cmVlLmM6IGFwcGxpZWQgZG9jdW1lbnRhdGlvbiBwYXRjaGVzCgkgIGZyb20gQ2hhcmxpZSBCb3plbWFuCgpUaHUgRGVjIDEzIDIxOjI0OjE2IE1TVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKmRvYy94bWxsaW50LnhtbCwgeG1sbGludC4xIC0gZG9jdW1lbnQgLS1kcm9wZHRkCgkKVGh1IERlYyAxMyAyMzoxOTo1MCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXggdGhlIHhtbFN0cmR1cCgpIHVzZWQgaW4gdGhlIHByZXZpb3VzIHBhdGNoLgoJKiB2YWxpZC5jOiBhZGRlZCAtLWRyb3BkdGQKCSogdHJlZS5jOiBmaXhlZCB4bWxVbmxpbmtOb2RlIHNvIGl0IGFsc28gcmVtb3ZlcyB0aGUgcmVmZXJlbmNlcwoJICBmcm9tIHRoZSBkb2N1bWVudCBpZiB0aGUgbm9kZSBpcyBhIERURAoKVGh1IERlYyAxMyAxNTo1NDozNSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIHZhbGlkLmM6IGNsZWFudXAgc29tZSBzdGF0aWMgZGVjbGFyYXRpb25zCgpUaHUgRGVjIDEzIDE1OjIzOjA0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogcmVtb3ZlZCBhbm90aGVyIHN0cmR1cCgpCgkqIGRvYy9GQVE6IHJlbW92ZWQgdGhlIEhQL1VYIGVudHJ5CgpUaHUgRGVjIDEzIDA5OjQ0OjU4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeCBidWcgIzY2ODE2IHdoZW4gdmFsaWRhdGluZy4KCSogeG1sbGludC5jOiBkb24ndCB1c2Ugc3lzL3RpbWUuaCBpZiBjb25maWd1cmUgZGlkIG5vdCBmb3VuZCBpdAoKTW9uIERlYyAxMCAyMTozOTo1NSBNU1QgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jcy94bWxsaW50LjEsIHhtbGxpbnQueG1sLCB4bWxjYXRhbG9nLjEsIHhtbGNhdGFsb2dfbWFuLmh0bWwsCgl4bWxjYXRhbG9nX21hbi54bWwKCk1vbiBEZWMgMTAgMjI6MDY6MTYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IEhpZXRhbmllbWkgSmFya2tvIHBvaW50ZWQgb3V0IHRoYXQKCSAgeG1sSW5pdE1lbW9yeSgpIHdhcyBkZWNsYXJlZCB0d2ljZQoKU3VuIERlYyAgOSAxNDo1OToyMyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnbG9iYWxzLmM6IGRvIG5vdCByZWZlcmVuY2Ugc3RyZHVwKCkgIQoJKiBjb25maWd1cmUuaW4gbGlieG1sLTIuMC5wYy5pbjogdHJ5aW5nIHRvIGZpeCB0aGUgbGlicwoJICBvZiB0aGUgdmFyaW91cyBjb25maWcgZXh0cmFjdGlvbiBtb2R1bGVzCgpGcmkgRGVjICA3IDE1OjIxOjMzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiA6IHByZXBhcmluZyAyLjQuMTIKCSogZG9jLyogOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2NzCgpGcmkgRGVjICA3IDEyOjMyOjAwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jOiBjbG9zZWQgYnVnICM2NjE1OQoJKiB0ZXN0VVJJLmM6IGFkZGVkIC0tZXNjYXBlIG9wdGlvbgoJKiBjb25maWd1cmUuaW46IHNvbWUgY2xlYW51cCBmb3IgeG1sMi1jb25maWcgLS1jZmxhZ3MKClRodSBEZWMgIDYgMTU6MzE6MzAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2xvYmFscy5jIHRlc3RUaHJlYWRzLmM6IHJlbW92ZWQgc29tZSBtaXNwbGFjZWQgaW5jbHVkZXMKCSAgb2YgeG1sdmVyc2lvbi5oCgpUaHUgRGVjICA2IDA5OjA2OjA4IEVTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRocmVhZHMuYzogcGF0Y2ggZnJvbSBHYXJ5IFBlbm5pbmd0b24gZml4aW5nIGEgcG9zc2libGUKCSAgcHJvYmxlbSBhdCBpbml0aWFsaXphdGlvbiB0aW1lLgoKV2VkIERlYyAgNSAxMzowMTozNyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gbGlieG1sLmggcGFyc2VyLmMgdGVzdFRocmVhZHMuYyBtYWNvcy86IGludGVncmF0ZWQKCSAgRXJpYyBMYXZpZ25lIGNvbnRyaWJ1dGlvbiB0byBidWlsZCBsaWJ4bWwyIG9uIE1hY09TIHVzaW5nCgkgIENvZGVXYXJyaW9yLgoKVHVlIERlYyAgNCAxNDoxMzo0NCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGFwcGxpZWQgR2VlcnQgS2xvb3N0ZXJtYW4ncyBwYXRjaCB0byBmaXgKCSAgLS1yZXBlYXQgLS10aW1pbmcgb3V0cHV0CgpUaHUgTm92IDI5IDE3OjEwOjIyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBSb2JpbiBCZXJqb24gPHJvYmluQGtub3dzY2FwZS5jb20+IGZvdW5kIGEgY2FzZQoJICB3aGVyZSBub24td2VsbGZvcm1lZCBYTUwgZGVjbGFyYWN0aW9ucyB3ZXJlIG5vdCBkZXRlY3RlZC4KCldlZCBOb3YgMjggMTU6NDE6NDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBvaW50ZXIuYzogZml4ZWQgYSBjb21waWxhdGlvbiBidWcgcG9pbnRlZCBieSBEYW5ueSBKYW1zaHkKCldlZCBOb3YgMjggMTA6MDk6NTEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogYXMgcm9iZXJ0IHBvaW50ZWQgYWdhaW4sIHhtbElucHV0Q2FsbGJhY2tJbml0aWFsaXplZAoJICBnZXRzIHJlc2V0IGJ5IHhtbENsZWFudXBJbnB1dENhbGxiYWNrcygpIGFuZCB0aGlzIG1ha2VzIHRoZQoJICBmdW5jdGlvbiB1c2VsZXNzLiBTYW1lIGZvciBvdXRwdXQuCgpUdWUgTm92IDI3IDE3OjIyOjM2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IHJvYmVydCBwb2ludGVkIG91dCBhIGxvb3AgZXJyb3IgaW4gY2FsbGJhY2sgY2xlYW51cHMKCk1vbiBOb3YgMjYgMTY6NTY6MDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIGRlYnVnWE1MLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGluY2x1ZGUvbGlieG1sL2RlYnVnWE1MLmg6CgkgIG1vdmVkIHhtbEdldExpbmVObygpIGFuZCB4bWxHZXROb2RlUGF0aCgpIGludG8gdGhlIG1haW4gdHJlZSBtb2R1bGUsCgkgIHRoZXkgYXJlIG5vdCByZWFsbHkgdGllZCB0byBkZWJ1Z2dpbmcKCk1vbiBOb3YgMjYgMTE6MzE6MzYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiBwcmVwYXJpbmcgMi40LjExCgkqIHhtbGxpbnQuYzogYmV0dGVyIC0tY2F0YWxvZ3MgZGVzY3JpcHRpb24KClN1biBOb3YgMjUgMTE6MzQ6MjQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXhlZCBhIGNvdXBsZSBvZiBwcm9ibGVtcyBpbiB4bWxTZXRQcm9wKCkKClRodSBOb3YgMjIgMTk6MTk6MTAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYyB0cmVlLmMgeG1sSU8uYyB4bWxtZW1vcnkuYzogc29tZSBjbGVhbnVwcyB3aGVuIGNoYXNpbmcKCSAgdW5hcHByb3ByaWF0ZSBzdGRvdXQgb3V0cHV0LgoKVGh1IE5vdiAyMiAxMzo1ODoxNCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IEZpeGVkIGEgY291cGxlIG9mIG1hY3JvIGVycm9ycyBwb2ludGVkIG91dAoJICBieSBEZW5pcyBCZXVyaXZlLCBjbG9zZXMgIzY1MTExCgpUdWUgTm92IDIwIDEwOjM0OjAxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGluIGNhc2Ugb2YgY29udGVudCBtb2RlbCB2YWxpZGl0eSBlcnJvciwgZG9uJ3QKCSAgcHJpbnQgaXQgaWYgdmFsaWRpdHkgd2FybmluZ3Mgd2VyZSBub3QgcmVxdWVzdGVkLgoKVHVlIE5vdiAyMCAwOTozMDowMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vZnRwLmM6IGFwcGxpZWQgYSBjb3VwbGUgb2YgcGF0Y2hlcyBmcm9tIEJyaWFuIEQgUmlwbGV5LgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogcmVtb3ZlZCB0aGUgbGFzdCBleGl0KCkgY2FsbC4gUHJpbnQgYW4KCSAgdW5tYXNrYWJsZSBlcnJvciBvbiBzdGRlcnIgaW5zdGVhZCAobGlicmFyeSBtaXNtYXRjaCBkZXRlY3Rpb24pCgpTYXQgTm92IDE3IDE3OjE2OjUxIE1TVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sbGludC54bWwsIGRvYy94bWxsaW50LjEgLSB1cGRhdGUgeG1sbGludCBtYW4gcGFnZSB3aXRoCglzaGVsbCBpbnN0cnVjdGlvbnMgZnJvbSBIZWlrbyBSdXBwCgpUaHUgTm92IDE1IDE0OjUzOjQyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogdXNlIHRoZSBVUkwgbm90YXRpb24gZmlsZTovLyBmb3IgZGVmYXVsdCBjYXRhbG9nIHBhdGhzCgpXZWQgTm92IDE0IDE2OjAzOjAyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogYmV0dGVyIGNvbW1lbnRzIGZvciBfcHJpdmF0ZSBmaWVsZHMKCSogdHJlZS5jOiByZW1vdmVkIGEgcHJvYmxlbSB3aGVuIGNvcHlpbmcgYW4gZW50aXR5IHJlZmVyZW5jZS4KClR1ZSBOb3YgMTMgMTY6MjM6MDQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdm1zLyo6IHVwZGF0ZWQgaW5zdHJ1Y3Rpb25zIGFuZCBkaWZmcyBmcm9tIEpvaG4gQSBGb3RoZXJpbmdoYW0KCk1vbiBOb3YgMTIgMjM6NDM6MjIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogYXZvaWQgYW4gaW5jbHVkZSBwcm9ibGVtIGlmCgkgICNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4gaGFwcGVucyBmaXJzdCBpbiBjb2RlCgkgIHNlZW1zIHRvIGJlIHRoZSBjYXNlIGluIEtERSBsaWJzCgpNb24gTm92IDEyIDIyOjMyOjQxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2RzcC8qIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLmluOiB1cGRhdGUKCSAgZnJvbSBJZ29yIGZvciBXaW5kb3dzCgpNb24gTm92IDEyIDEwOjE5OjQxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBHYXJ5IFBlbm5pbmd0b24gcG9pbnRlZCBvdXQgYSBtaXNzaW5nIHByZWZpeAoKU2F0IE5vdiAxMCAxMjo1NTo0MiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHByZXBhcmluZyAyLjQuMTAKCSogZG9jLyo6IHVwZ3JhZGVkIGFuZCByZWJ1aWx0IHRoZSBkb2NzCgpTYXQgTm92IDEwIDEyOjMzOjM4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogZml4IGNvbW1lbnQgaW4gc2NyaXB0cyBlbGVtZW50IHBhcnNpbmcuCgkqIHJlc3VsdC9IVE1ML2RvYzMqOiB1cGRhdGVkIHRoZSByZXN1bHRzLgoKU2F0IE5vdiAxMCAxMToxODoxOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYzogYW5vdGhlciBVUkkgYnVnIGZpeCAjNjMzMzYsIHVzaW5nIEpvZWwgWW91bmcgcGF0Y2guCgpTYXQgTm92IDEwIDExOjA3OjI2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmMgaW5jbHVkZS9saWJ4bWwvZGVidWdYTUwuaDogYWRkIHhtbEdldE5vZGVQYXRoKCkKCSAgYSBjbGVhbmVkIHVwIHZlcnNpb24gb2YgdGhlIFB3ZCBzaGVsbCBzdHJpbmcgZ2VuZXJhdGlvbi4KCkZyaSBOb3YgIDkgMDA6MzQ6MTMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IHRyeWluZyB0byBmaXggbmFtZXNwYWNlcyArCgkgIHZhbGlkYXRpb24gcHJvYmxlbXMgZm9yIGdvb2QsIGNsb3NpbmcgIzYzNjE5IGluIHRoZSBwcm9jZXNzCgkqIHJlc3VsdC92YWxpZC9kaWEueG1sIHRlc3QvdmFsaWQvZGlhLnhtbDogdGhlIERpYSB0ZXN0IHdhcwoJICB3cm9uZyBpbiB0aGlzIHJlc3BlY3QsIGZpeGVkIGl0LgoKVGh1IE5vdiAgOCAxODozMTo0MCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IE1vcnVzIFdhbHRlciBwYXRjaCB0byBhbGxvdyAtLWZvcm1hdCBhbmQgLS1lbmNvZGUKClRodSBOb3YgIDggMTQ6NTI6MTggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYzogU3RlZmFuIEtvc3QgcHJvdmlkZWQgYW4gaGVscCBjb21tYW5kIGZvciB0aGUgc2hlbGwKCldlZCBOb3YgIDcgMTQ6MzI6NTUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYzogSGVpa28gUnVwcCBwb2ludGVkIHRoYXQgdGhlIHNoZWxsIHdvdWxkIGNyYXNoCgkgIG9uIGVtcHR5IG5vZGVzZXRzIHJldHVybnMuCgpXZWQgTm92ICA3IDEzOjUyOjM2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBXZWlxaSBHYW8gcG9pbnRlZCBvdXQgdGhhdCB4bWxjYXRhbG9nCgkgIG1pZ2ggbmVlZCB0aGUgaGlzdG9yeSBsaWJyYXJpZXMKClR1ZSBOb3YgIDYgMjM6NDk6MDkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIHRlc3QvSFRNTC9sdC5odG1sIHJlc3VsdC9IVE1ML2x0Lmh0bWwqOgoJICBoYW5kbGUgdGhlIGNhc2Ugb2YgPCBpbiBxdW90ZWQgYXR0cmlidXRlcywgQmFzdGlhbiBLbGVpbmVpZGFtCgpUdWUgTm92ICA2IDE2OjIxOjMzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogcmVsZWFzaW5nIDIuNC45CgkgIGZpeGluZyBjYXRhbG9nIGJyZWFrYWdlcwoJKiBNYWtlZmlsZS5hbSBjYXRhbG9nLmMgcmVzdWx0L2NhdGFsb2dzL2NhdGFsIAoJICByZXN1bHQvY2F0YWxvZ3MvbXljYXRhbG9nLiogdGVzdC9jYXRhbG9ncy9jYXRhbCo6CgkgIGZpeGVkIG1vcmUgcHJvYmxlbXMgaW4gY2F0YWxvZyBzdXBwb3J0LCBhZGRlZCBtb3JlIHJlZ3Jlc3Npb24gdGVzdHMKCSAgZm9yIGJvdGggWE1MIGFuZCBTR01MIGNhdGFsb2cgaGFuZGxpbmcKCk1vbiBOb3YgIDUgMjA6MjY6NDEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYzogYXBwbGllZCBhbiBpbXByb3ZlbWVudCB0byB4bWxHZXRMaW5lTm8oKSBmcm9tCgkgIEtlaXRoIElzZGFsZQoKTW9uIE5vdiAgNSAxNToyMDoxNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IGRvaGhoaCBYTUwgY2F0YWxvZyBhZGQgYW5kIHJlbW92ZSBvcHMgd2VyZSBicm9rZW4gdG9vLgoJICBTaWRlIGVmZmVjdCBvZiB0aGUgcHJvZ3Jlc3NpdmUgY2F0YWxvZyBsb2FkaW5nCgpNb24gTm92ICA1IDEyOjQwOjU0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBjb25mZXhlY2RpciBhbmQgY29uZmV4ZWNfREFUQSB3ZXJlIGRlZmluZWQgdHdpY2UKCSAgcG9pbnRlZCBvdXQgYnkgS2FybCBFaWNod2FsZGVyCgkgIApTdW4gTm92ICA0IDIzOjE4OjM0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGNhdGFsb2cuYzogYXZvaWQgdW5saW5rKCkgYW5kIHVzZSByZW1vdmUoKSBpbnN0ZWFkLgoKU3VuIE5vdiAgNCAyMzoxMjozOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbjogY2xlYW51cAoJKiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogdXBkYXRlZCB3aXRoIDIuNC44CgpTdW4gTm92ICA0IDIxOjE3OjI0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmMgZ2xvYmFsLmRhdGEgZ2xvYmFscy5jIHRlc3RUaHJlYWRzLmM6IGZpeCBidWcgIzYzNzUyCgkgIG9mIGNvbXBpbGluZyBsaWJ4bWwgd2l0aCBhIG5vbiBzdGFuZGFyZCBzZXQgb2Ygb3B0aW9ucwoKU3VuIE5vdiAgNCAxMzoxMTo0MSBNU1QgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0CgoJKiBkb2MveG1sbGludC54bWwsIHhtbGxpbnQuMSAtIHVwZGF0aW5nIHhtbGxpbnQgbWFuIHBhZ2UgdG8KCWRvY3VtZW50IC0tc2dtbCBvcHRpb24sIGZpeGluZyBnbm9tZSBidWd6aWxsYSAjNjMzODIKClN1biBOb3YgIDQgMjA6NTY6NTMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oIGNhdGFsb2cuYzogRml4ZWQgU0dNTCBjYXRhbG9ncwoJICBicmVha2FnZSBvZiAyLjQuNywgYWRkZWQgYSBjb3VwbGUgb2YgcmVhbGx5IG5lZWRlZCBBUElzCgkgIGxpa2UgeG1sQ2F0YWxvZ0lzRW1wdHkoKSBhbmQgeG1sTmV3Q2F0YWxvZygpCgkqIHhtbGNhdGFsb2cuYzogdXBkYXRlZCAtLXNnbWwgLS1ub291dCB0byBiZSBhIHN1aXRhYmxlIHJlcGxhY2VtZW50CgkgIGZvciBpbnN0YWxsLWNhdGFsb2cKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi40LjgKClRodSBOb3YgIDEgMTU6Mjk6MzEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvSFRNTHRyZWUuaAoJICBpbmNsdWRlL2xpYnhtbC90cmVlLmggaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogbW9yZSBpbmNsdWRlCgkgIGNsZWFudXBzLCBleHBvcnQgY2xlYW5seSBvbmUgaHRtbCBvdXRwdXQgKyBmb3JtYXQgZnVuY3Rpb24uCgpUaHUgTm92ICAxIDE0OjEyOjEyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiByZW1vdmVkIGluaXRHZW5lcmljRXJyb3JEZWZhdWx0RnVuYyBjYWxsIGZyb20KCSAgeG1sSW5pdFBhcnNlcigpIHNpbmNlIGl0IGNvdWxkIGRlc3Ryb3kgcHJldmlvdXMgY2FsbHMgdG8KCSAgeHNsdFNldEdlbmVyaWNFcnJvckZ1bmMoKSBlZmZlY3RzCgpUaHUgTm92ICAxIDA5OjM3OjEzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmMgaW5jbHVkZS9saWJ4bWwvZGVidWdYTUwuaDogYm9vbCBjYW4gYmUgYSByZXNlcnZlZAoJICBrZXl3b3JkLgoKV2VkIE9jdCAzMSAxODo1MDowOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogY2xlYW51cAoJKiB0aHJlYWRzLmM6IGNsZWFudXAgdG9vCgkqIHhtbElPLmMgaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogYWRkZWQgeG1sTm9OZXRFeHRlcm5hbEVudGl0eUxvYWRlcigpCgkgIGZyb20geHNsdHByb2MKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiB0cnlpbmcgdG8gYnJlYWsgYQoJICBkZXBlbmRlbmN5IGxvb3AuCgpUdWUgT2N0IDMwIDE4OjM4OjUzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogSnVzdGluIEZsZXRjaGVyIHBvaW50ZWQgb3V0IHRoYXQgeG1sUGFyc2VYTUxDYXRhbG9nCgkgIHdhcyBub3QgdXNlZCBhbnltb3JlICEKClR1ZSBPY3QgMzAgMTM6MzM6MTMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi40LjcKCSogTWFrZWZpbGUuYW0gZG9jL01ha2VmaWxlLmFtOiBzd2l0Y2hlZCB0byB0aGUgbGF0ZXN0IHhtbGxpbnQKCSAgbWFudWFsIHBhZ2UgZnJvbSBKb2huCgkqIGRvYy8qOiB1cGRhdGVkIHRoZSBkb2MgYW5kIHJlYnVpbHQgdGhlIGdlbmVyYXRlZCBwYWdlcwoKVHVlIE9jdCAzMCAxMTozMToxOSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBjbG9zaW5nIGJ1ZyAjNjI3MTEsIHRoZSBsaWJyYXJ5IHNob3VsZCBuZXZlcgoJICBjbG9zZSBzdGRpbiBvciBzdGRvdXQuCgpUdWUgT2N0IDMwIDEwOjQ2OjEyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jOiBzZWNvbmQgcGFzcyBhdCBmaXhpbmcgIzYzMzM2LCB1c2luZyBKb2VsIFlvdW5nCgkgIGZpbmFsIHBhdGNoLiBsb29rcyBva2F5LgoKVHVlIE9jdCAzMCAwMDo1NjowNSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYyBpbmNsdWRlL2xpYnhtbC91cmkuaDogdHJ5aW5nIHRvIGNsZWFyICM2MzMzNgoJICBhbGxvd2luZyB0aGUgZXNjYXBpbmcgcm91dGluZSB0byBwYXJzZSB1bmNvbmZvcm1hbnQKCSAgVVJJLVJlZmVyZW5jZXMuCgpNb24gT2N0IDI5IDE5OjA5OjQ2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZtcy9yZWFkbWUudm1zIHZtcy9idWlsZF9saWJ4bWwuY29tIG5hbm9mdHAuYyAKCSAgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOiBhIGZldyBWTVMgdXBkYXRlcyBmcm9tCgkgIEpvaG4gQSBGb3RoZXJpbmdoYW0KCSogaW5jbHVkZS9saWJ4bWwveG1sSU8uaCB4bWxJTy5jOiBhZGRlZCB4bWxDbGVhbnVwSW5wdXRDYWxsYmFja3MoKQoJICBhbmQgeG1sQ2xlYW51cE91dHB1dENhbGxiYWNrcygpIGZvciB0aGUgUGVybCBiaW5kaW5nIHBlb3BsZS4KCk1vbiBPY3QgMjkgMTI6NDQ6MTcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgZ2xvYmFscy5jIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgZXJyb3IuYzoKCSAgYXBwbHkgZml4ZXMgdG8gY2xvc2UgIzYzMjcxIGFuZCBhdm9pZCBzZWdmYXVsdHMgd2hlbgoJICB0aGUgZXJyb3Igcm91dGluZSBnZXRzIGNhbGxiZWQgYmVmb3JlIHhtbEluaXRQYXJzZXIoKQoJICBnZXQgY2FsbGVkLgoJKiBuYW5vZnRwLmMgZXJyb3IuYzogQXBwbGllZCBwYXRjaGVzIGZyb20gSnVzdGluIEZsZXRjaGVyCgkgIGNvcnJlY3Rpbmcgc29tZSB4bWxHZW5lcmljRXJyb3IgbWlzdXNlcy4KClNhdCBPY3QgMjcgMTQ6MDQ6NDUgTURUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqZG9jL3htbGxpbnQueG1sLCBkb2MveG1sbGludC4xCglOZXcgYW5kIGltcHJvdmVkIG1hbiBwYWdlIGZvciB4bWxsaW50IC0gLnhtbCBpcyB0aGUgb3JpZ2luYWwsIC4xCglpcyB0aGUgZ2VuZXJhdGVkIG1hbiBwYWdlCgpXZWQgT2N0IDI0IDE0OjM0OjI1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2Mvc2l0ZS54c2wgZG9jLyouaHRtbCBkb2MvTWFrZWZpbGUuYW06IG5vdyBhdXRvZ2VuZXJhdGUKCSAgdGhlIHdlYiBzaXRlIGZyb20gdGhlIG1haW4gSFRNTCBkb2N1bWVudC4KClR1ZSBPY3QgMjMgMTQ6MzI6MDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCBhbiBlcnJvbmVvdXMgdmFsaWRhdGlvbiBidWcgd2hlbiBQRSByZWZzCgkgIG9jY3VycyBpbiBleHRlcm5hbCBwYXJzZWQgZW50aXRpZXMgcmVmZXJlbmNlZCBmcm9tIHRoZQoJICBpbnRlcm5hbHMgc3Vic2V0CgkqIHRlc3QvdmFsaWQvaW5kZXgueG1sIHRlc3QvdmFsaWQvZHRkcy9uaXRmLTItNS5kdGQKCSAgdGVzdC92YWxpZC9kdGRzL05ld3NNTHYxLjAuZHRkIHJlc3VsdC92YWxpZC9pbmRleC54bWwqOgoJICBhZGRlZCB0aGUgYXNzb2NpYXRlZCB0ZXN0Y2FzZSwgaXQncyBhIG5pY2Ugb25lLgoJKiBIVE1McGFyc2VyLmM6IGdlbmVyYXRlIHRoZSBEVEQgbm9kZSBhcyBIVE1MIHN0aWxsIC4uLgoJKiBIVE1MdHJlZS5jOiBmaXhlZCBlcnJvcnMgaW4gU2V0L0dldE1ldGFFbmNvZGluZyAKCk1vbiBPY3QgMjIgMTQ6MjA6MTcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgYSBidWcgaW4gaHRtbE5ld0RvYygpCgpNb24gT2N0IDIyIDExOjMyOjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0L3RocmVhZHMvKjogYWRkZWQgZW50aXRpZXMgdGVzdGluZyB0byB0aGUgVGhyZWFkIHRlc3QKCSogdGVzdFRocmVhZHMuYzogbWFrZSB0aGUgdGVzdCByZWFzb25hYmxlCgkqIERPQ0JwYXJzZXIuYzogZml4IHRoZSBEVEQgcHVibGljIGFuZCBzeXN0ZW0gSUQKCSogeG1sbGludC5jOiBhZGRlZCAtLXNnbWwgZm9yIFNHTUwgRG9jQm9vayBpbXBvcnRpbmcKCSogTWFrZWZpbGUuYW06IGFkZGVkIERvY2J0ZXN0cyB0YXJnZXQKCkZyaSBPY3QgMTkgMTE6NDc6MTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbm9mdHAuYzogdXNlIG9ubHkgImFub255bW91c0AiIHN0cmluZyBmb3IgYW5vbnltb3VzIHBhc3N3ZHMKCSogdGVzdFRocmVhZHMuYzogcmVtb3ZlZCBib2d1cyBpbmNsdWRlCgpUaHUgT2N0IDE4IDE2OjU2OjIzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyB2YWxpZC5jIHJlc3VsdC92YWxpZC9yc3MueG1sIHJlc3VsdC92YWxpZC9yc3MueG1sLmVycjoKCSAgZml4ZWQgYSB2ZXJ5IHNlcmlvdXMgKGxvb3BpbmcpIHZhbGlkYXRpb24gYnVnCgpXZWQgT2N0IDE3IDExOjU2OjI1IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBpbmNsdWRlL2xpYnhtbC90aHJlYWRzLmggdGhyZWFkcy5jCgkgIHRlc3RUaHJlYWRzLmM6IGZhciBtb3JlIHRlc3RpbmcsIGNsZWFuaW5nIHVwIGJ1Z3MKCSogKi5jIDogbWFrZSBzdXJlIGdsb2JhbHMuaCBpcyBhbHdheXMgaW5jbHVkZWQuCgpXZWQgT2N0IDE3IDE3OjQxOjQxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IHRyeSB0byBnZXQgcmlkIG9mIHBhcnNlciBsb29wcyBmb3IgZ29vZC4KCldlZCBPY3QgMTcgMTM6Mjk6MDIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogZml4ZWQgc29tZSBidWdzIGluIENGTEFHUyBwYXNzaW5nLgoJKiB0ZXN0L3RocmVhZHMgTWFrZWZpbGUuYW0gdGVzdFRocmVhZHMuYzogYWRkZWQgYSBzcGVjaWZpYwoJICB0aHJlYWRlZCB0ZXN0IGNhc2UgKHJlYWxseSBuYXN0eSwgZ3VhcmFudGVlZCkuCgpUdWUgT2N0IDE2IDIzOjAxOjQ5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IHNlcmlvdXMgY2xlYW51cCBvbiB0aGUgbWFuYWdlbWVudCBvZiB0aGUKCSAgWE1MIGNhdGFsb2cgdHJlZSwgbW9yZSB0ZXN0cyBkb25lLCBlc3BlY2lhbGx5IHdpdGgKCSAgdGhlIGNhdGFsb2cgUEkuCgpUdWUgT2N0IDE2IDA4OjQzOjQzIEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogYXZvaWQgYSBwcm9ibGVtIGluIGNhdGFsb2cgY2xlYW51cCBvbiBTTVAgaWYKCSAgY2F0YWxvZ3Mgd2VyZSBub3QgaW5pdGlhbGl6ZWQuCgpUdWUgT2N0IDE2IDE0OjMzOjE5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmMgeHBhdGguYzogdHJ5aW5nIHRvIGNsZWFudXAgdGhlIG5vdCB0aHJlYWQgc2FmZQoJICBwYXJ0cyBvZiB0aGUgbGlicmFyeS4KCk1vbiBPY3QgMTUgMTQ6MzA6MTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBjb25maWd1cmUuaW4gZ2xvYmFsLmRhdGE6IG1ha2UKCSAgdGhlIGFsbG9jYXRpb24gYmUgcGVyLXRocmVhZCBhIGNvbmZpZ3VyZSBvcHRpb24KCSogZW5jb2RpbmcuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogZml4ZWQgY29tcGlsYXRpb24KCSAgZXJyb3JzCgpNb24gT2N0IDE1IDEyOjQ1OjAzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogTm9ybSByZXBvcnRlZCB0aGF0IGEgZmV3IGxpbmVzCgkgIGFkZGVkIHdlcmUgYnJlYWtpbmcgbGlieHNsdCBjb21waWxlLCByZW1vdmVkIHRoZW0gZm9yIG5vdwoKU3VuIE9jdCAxNCAwNTo1NTowMSBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0aHJlYWRzLmM6IGRlYnVnZ2VkIGFuZCBmaXhlZAoJICBpbml0aWFsaXphdGlvbiBwcm9ibGVtcyB3aGljaCB3ZXJlIGdpdmluZyB0cm91YmxlcyBvbiBTTVAKCSAgYm94ZXMuCgpTYXQgT2N0IDEzIDE2OjE3OjEzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbTogbWlzc2luZyBnbG9iYWxzLmgKClNhdCBPY3QgMTMgMTQ6MTU6MDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYzogYWRkZWQgYSBjb3VwbGUgb2Ygc3RhbmRhcmQgaW5jbHVkZXMuCgpTYXQgT2N0IDEzIDExOjA4OjIwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9TQVguaCBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmgKCSAgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmggaW5jbHVkZS9saWJ4bWwvdHJlZS5oCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmggSFRNTHBhcnNlci5jIFNBWC5jIGVycm9yLmMgZ2xvYmFscy5jCgkgIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHRlc3REb2Nib29rLmMKCSAgdGVzdEhUTUwuYyB0ZXN0U0FYLmMgdHJlZS5jIHVyaS5jIHhsaW5rLmMgeG1sbWVtb3J5LmM6CgkgIEFwcGxpZWQgdGhlIGxhc3QgcGF0Y2hlcyBmcm9tIEdhcnksIGNsZWFudXAsIGFjdGl2YXRlZCB0aHJlYWRpbmcKCSAgYWxsIHVzZXIgYWNjZXNzaWJsZSBnbG9iYWwgdmFyaWFibGVzIGFyZSBub3cgaGFuZGxlZCBpbiBnbG9iYWxzLltjaF0KCSAgU3RpbGwgYSBiaXQgcm91Z2h0IGJ1dCBtYWtlIHRlc3RzIHBhc3NlcyB3aXRoIGVpdGhlciAKCSAgLS13aXRoLXRocmVhZHMgZGVmaW5lZCBhdCBjb25maWd1cmUgdGltZSBvciBub3QuCgkqIE1ha2VmaWxlLmFtIGV4YW1wbGUvTWFrZWZpbGUuYW06IGFkZGVkIGdsb2JhbHMuW2NoXSBhbmQgdGhyZWFkcwoJICBsaW5raW5nIG9wdGlvbnMKCkZyaSBPY3QgMTIgMTk6MjU6NTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtCgkgIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBnbG9iYWxzLmMgIGluY2x1ZGUvbGlieG1sL3RocmVhZHMuaAoJICB0aHJlYWRzLmMgYnVpbGRfZ2xvYi5weSBnbG9iYWwuZGF0YSB4bWxjYXRhbG9nLmMgYWNjb25maWcuaAoJICBjb25maWd1cmUuaW46IHN0YXJ0ZWQgaW50ZWdyYXRpbmcgdGhlIGNvcmUgb2YgdGhlIHRocmVhZCBzdXBwb3J0CgkgIG5vdCBhY3RpdmF0ZWQgeWV0IGJ1dCBoYWxmIGludGVncmF0ZWQuIFRoZSBjb2RlIHNob3VsZCBzdGlsbAoJICBjb21waWxlIGFuZCB3b3JrIGFueXdheS4KCkZyaSBPY3QgMTIgMDA6NTM6MDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmMgY2F0YWxvZy5jIGRlYnVnWE1MLmMgZW50aXRpZXMuYyBuYW5vZnRwLmMKCSAgcGFyc2VyLmMgdmFsaWQuYyB4bWxtZW1vcnkuYyB4cGF0aC5jIHhwb2ludGVyLmM6IHN0YXJ0ZWQKCSAgaW50ZWdyYXRpbmcgdGhlIG5vbi1jb250cm92ZXJzaWFsIHBhcnRzIG9mIEdhcnkgUGVubmluZ3RvbgoJICBtdWx0aXRocmVhZCBwYXRjaGVzCgkqIGNhdGFsb2cuYzogY29ycmVjdGVkIGEgc21hbGwgYnVnIGludHJvZHVjZWQKClRodSBPY3QgMTEgMjA6NTg6MTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYyBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmg6IHZlcnkgc2VyaW91cyBjbGVhbnVwLAoJICBpc29sYXRpbmcgdW5wb3J0YWJsZSBjb2RlIGFuZCBhcyBtdWNoIGFzIHBvc3NpYmxlIHRoZSBhY2Nlc3NlcwoJICB0byB0aGUgZ2xvYmFsIHNoYXJlZCBjYXRhbG9nLiBNYXkgbmVlZCBtb3JlIHRlc3RpbmcgIQoKVGh1IE9jdCAxMSAxMToxMDozMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvZGVidWdYTUwuaCBkZWJ1Z1hNTC5jIHRyZWUuYzogaW50ZWdyYXRpbmcKCSAgS2VpdGggSXNkYWxlIHBhdGNoZXMgZm9yIHRoZSBYU0xUIGRlYnVnZ2VyIGludGVyZmFjZXMuIFNvbWUKCSAgY2xlYW51cAoKVGh1IE9jdCAxMSAwODo0NDowMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvTWFrZWZpbGUubWluZ3c6IHVwZGF0ZSBmcm9tIFRvYmlhcyBQZXRlcnMgZm9yIDIuNC41CgkqIERPQ0JwYXJzZXIuYzogZ2VuZXJhdGUgbGluZSBudWJlcnMgaW4gZWxlbWVudHMKCldlZCBPY3QgMTAgMTE6MzU6NDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNC42IHJlbGVhc2UKCSogZG9jL3htbC5odG1sIGRvYy9odG1sLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3MKCSogaW5jbHVkZS9saWJ4bWwvKi5oICouYzogZml4ZWQgYSBudW1iZXIgb2YgdGVoL3RoZSB3aWRodC93aWR0aCB0eXBvcwoKTW9uIE9jdCAgOCAyMDozODoyNyBNRFQgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGNhdGFsb2dfbWFuLnhtbCwgeG1sY2F0YWxvZy4xLCB4bWxjYXRhbG9nX21hbi5odG1sCglhZGRpbmcgZG9jdW1lbnRhdGlvbiBmb3IgRFYncyBzdXBlcmNhdGFsb2cgc3VwcG9ydAoKTW9uIE9jdCAgOCAxNzowMDoxNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oIGNhdGFsb2cuYyB4bWxjYXRhbG9nLmM6IGFkZGluZyBTR01MCgkgIHN1cGVyIGNhdGFsb2cgc3VwcG9ydCBhZGRpbmcgb25lIEFQSSBhbmQgb25lIGZsYWcgLS1zZ21sIHRvCgkgIHhtbGNhdGFsb2cKClN1biBPY3QgIDcgMTY6NDM6NTcgTURUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxjYXRhbG9nX21hbi54bWwsIHhtbGNhdGFsb2cuMQoJT25lIG1vcmUgY3JhY2sgYXQKCWh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTQzOTIgCgkKClN1biBPY3QgIDcgMTg6NDc6MDIgQ0VTVCAyMDAxIFRob21hcyBCcm95ZXIgPHRicm95ZXJAbHRndC5uZXQ+CgoJKiB4cGF0aC5jOiBpbXBsZW1lbnRlZCB4bWxYUGF0aE9iamVjdENvcHkgZm9yIGV4dGVybmFsIG9iamVjdHMKCSogaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaDogYWRkZWQgeG1sWFBhdGhTdGFja0lzRXh0ZXJuYWwKClNhdCBPY3QgIDYgMTY6MjU6NTIgTURUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqZG9jL3htbGNhdGFsb2dfbWFuLnhtbCwgeG1sY2F0YWxvZ19tYW4uaHRtbCwgeG1sY2F0YWxvZy4xCglmaW5pc2hpbmcgdXAgZml4IHRvCglodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU0MzkyLCBtYWtpbmcKCXRoZSB4bWxjYXRhbG9nIG1hbiBwYWdlIGRpc3BsYXkgbW9yZSBlbGVnYW50bHkKClNhdCBPY3QgIDYgMTU6Mjc6MTIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogY2xvc2luZyBidWcgIzYxODMyCgkqIEhUTUxwYXJzZXIuYzogcmVtb3ZlZCBhIHdhcm5pbmcKClNhdCBPY3QgIDYgMTU6MDc6MTQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGluZyAjNjE2NzMgcGFydCBJLCBkbyBub3QgbG9vc2UgZG9jIGluZm9ybWF0aW9uCgkgIHdoZW4gY29weWluZyByZXN1bHQgdmFsdWUgdHJlZXMuCgpTYXQgT2N0ICA2IDExOjU4OjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiB0cnlpbmcgdG8gaGFyZGVuIHRoZSBYUGF0aCBpbnRlcnByZXRlcgoKRnJpIE9jdCAgNSAyMDozNzo1MSBNRFQgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGNhdGFsb2cuMSB1cGRhdGVkIHVzaW5nIGEgbmV3IHN0eWxlc2hlZXQgdG8gYWRkcmVzcywgaW4KCXBhcnQsIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTQzOTIKCkZyaSBPY3QgIDUgMjM6MzU6MDAgSEtUIDIwMDEgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBIVE1McGFyc2VyOiByZXBhaXJlZCBhbm90aGVyIGxvb3AgcHJvYmxlbQoKRnJpIE9jdCAgNSAxMToxNjoyMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmM6IGFwcGxpZWQgZml4IGZyb20gTWF0aGlhcyBIYXNzZWxtYW5uIGFib3V0IGEgYnVnIGluIFVSSQoJICBwYXJzaW5nLgoJKiB4cGF0aC5jOiBmaXggYnVnICM2MTI5MSB0aGUgZGVmYXVsdCBYTUwgbmFtZXNwYWNlIG5vZGUgaXMKCSAgbWlzc2luZyBmcm9tIHRoZSBuYW1lc3BhY2UgYXhpcy4KCSogdHJlZS5jOiByZWZ1c2UgdG8gY3JlYXRlIG5hbWVzcGFjZXMgbm9kZXMgd2l0aCBwcmVmaXggInhtbCIKClRodSBPY3QgIDQgMTY6NDc6NDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBvdWNoIGEgbm9uLWRlZmluZWQgbmFtZXNwYWNlIGNvdWxkIGxlYWQgdG8gYSBjcmFzaCwKCSAgZml4ZWQgIzYxMjE1CgpUaHUgT2N0ICA0IDE2OjI0OjI2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogY2xvc2VkIGJ1ZyAjNjEwNTQKCldlZCBPY3QgIDMgMTU6MTk6MDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtOiBjbG9zaW5nICM2MDcwOAoKVHVlIE9jdCAgMiAxNTo1MjowNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvZHNwL2xpYnhtbDIuZGVmLnNyYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBwYXJzZXIuYzoKCSAgYWRkaW5nIHhtbFNBWFBhcnNlRmlsZVdpdGhEYXRhIGZvbGxvd2luZyBNYXJjbyBTdGlwZWsgc3VnZ2VzdGlvbgoKVHVlIE9jdCAgMiAxMToyNzo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogY2xvc2UgYnVnICM2MTU1MCB3aGVuIHhtbDogd2Fzbid0IGNvbnNpZGVyZWQgYSBuYW1lc3BhY2UKClR1ZSBPY3QgIDIgMTE6MTg6MzIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmM6IElnb3IgWmxhdGtvdmljIHBhdGNoZXMKCSogRE9DQnBhcnNlci5jIEhUTUxwYXJzZXIuYyBwYXJzZXIuYzogZml4ZWQgdHlwb3MKCk1vbiBPY3QgIDEgMDk6MzQ6NTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogSnVzdGluIEZsZXRjaGVyIHByb3ZpZGVkIGNsZWF1cCBjb2RlIGluIGNhc2UKCSAgSEFWRV9TVEFUIGlzIG5vdCBkZWZpbmVkCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogSWdvciBabGF0a292aWMgc3VnZ2VzdGVkIHRvIGhhdmUKCSAgSEFWRV9TVEFUIGRlZmluZWQgdGhlcmUKClNhdCBTZXAgMjkgMDA6MTU6MDAgSEtUIDIwMDEgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBjYXRhbG9nLmMgLSBmaXhlZCB0eXBpbmcgZXJyb3IgcmVwb3J0ZWQgYnkgTS4gQmFycm9zCgpTdW4gU2VwIDIzIDIxOjAyOjM5IE1EVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiB4bWxsaW50LmMgLSBmaXhpbmcgdHlwbwoKU2F0IFNlcCAyMiAxMDowMDowMCBIS1QgMjAwMSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIEhUTUxwYXJzZXIuYzogc21hbGwgZW5oYW5jZW1lbnQgdG8gcHJldmVudCBsb29wIG9uCgkgIHVucmVjb2duaXphYmxlIGRhdGEKCkZyaSBTZXAgMjEgMTE6NDU6NTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jOiBhcHBseWluZyBwYXRjaCBmcm9tIGJ1ZyAjNjA3NTcgdGhpcwoJICBzaG91bGQgY2xvc2UgaXQKClRodSBTZXAgMjAgMTU6NTQ6MjkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYyB4bWxjYXRhbG9nLmM6IHJlbW92ZWQgYSBjb3VwbGUgb2Ygd2FybmluZwoJKiB4cGF0aC5jOiB0cnkgdG8gc29sdmUgdGhlIGxpbmtpbmcgcHJvYmxlbSBvbiBwbGF0Zm9ybXMKCSAgbmVlZGluZyB0cmlvIHRvIGNvbXBpbGUKCldlZCBTZXAgMTkgMTA6MDE6MzcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGxpYnhtbC5zcGVjLmluOiBiYWNraW5nIHVwIG5vbi1kb2N1bWVudGVkIGNoYW5nZXMKCSAgY29tbWl0ZWQgd2l0aG91dCByZXZpZXcgb3IgYXByb3ZhbCBieSBKZW5zIEZpbmtlIDxqZW5zQGdub21lLm9yZz4KCSogSEFDS0lORzogbWFkZSAxMDAlIGNsZWFyIHRoYXQgbm8gY29tbWl0IHNob3VsZCBiZSBkb25lIGRpcmVjdGx5CgpNb24gU2VwIDE3IDE4OjUyOjM3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IEpvZSBPcnRvbiBwcm92aWRlZCBhIHBhdGNoIGZpeGluZyBhIHByb2JsZW0KCSAgd2hlbiBpY29udiBpcyBzcGVjaWZpZWQgdG8gYmUgaW4gYSBub24tc3RhbmRhcmQgZGlyZWN0b3J5CgkgIGJ1dCB3YXNuJ3QgZXhwb3J0ZWQgaW4geG1sMi1jb25maWcgLS1jZmxhZ3MKCkZyaSBTZXAgMTQgMTk6MzI6NDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogbGV0J3Mgc2hpcCAyLjQuNSBiZWZvcmUgZ2V0dGluZyB0b28gbXVjaAoJICB0cm91YmxlcyB3aXRoIDIuNC40IGVycm9ycy4KCkZyaSBTZXAgMTQgMTI6MjY6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmMgZW50aXRpZXMuYzogZG8gbm90IG91dHB1dCBoZXhhZGVjaW1hbCBjaGFycmVmcwoJICB3aGVuIHNlcmlhbGl6aW5nIEhUTUwgc2luY2Ugc29tZSB2ZXJzaW9uIG9mIE5ldHNjYXBlIGNhbid0CgkgIGdyb2sgaXQsIGdlbmVyYXRlIGRlY2ltYWwgb25lcy4KCSogcmVzdWx0L0hUTUwvZG9jMy5odG06IG91dHB1dCBjaGFuZ2VkIGR1ZSB0byBwcmV2aW91cyB0ZXN0CgkqIHBhcnNlckludGVybmFscy5jOiByZXBhaXIgeG1sS2VlcEJsYW5rc0RlZmF1bHQoKSBicm9rZW4gaW4gMi40LjQKClRodSBTZXAgMTMgMTM6MzQ6MjcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC0yLjAucGMuaW46IGRvaGggZ2VuZXJhdGVkIHRoZSB3cm9uZyBpbmNsdWRlIHBhdGggOi0oCgkqIGRvYy9NYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbjogcmUtZG9oaCBmb3Jnb3QgdGhlIG5ldyBtYW5wYWdlIDotKAoKV2VkIFNlcCAxMiAyMjoxNDo1NSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgogICAgICAgIFJlbGVhc2VkIDIuNC40CgoJKiBjb25maWcuaC5pbiBjb25maWd1cmUuaW4gbGlieG1sLnNwZWMuaW4gaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW0KCSAgbGlieG1sLTIuMC5wYy5pbjogbW92ZWQgaW5jbHVkZXMgdG8gaW5jbHVkZWRpci9saWJ4bWwyL2xpYnhtbCwKCSAgdXBkYXRlZCB0aGUgY29uZmlndXJhdGlvbiBzY3JpcHRzIHN5c3RlbXMgYWNjb3JkaW5nbHkKCldlZCBTZXAgMTIgMjA6NDk6MzIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIGZvciAyLjQuNAoJKiBkb2MveG1sLmh0bWwgZG9jL2h0bWwvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcwoKV2VkIFNlcCAxMiAxNjo1ODoxNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvZHNwL2xpYnhtbDIuZGVmLnNyYzogdHJpZWQgdG8gaW5jb3Jwb3JhdGUgY29tbWVudHMKCSAgZnJvbSBidWcgIzU5MjIwCgpUdWUgU2VwIDExIDExOjI1OjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyByZXN1bHQvbm9lbnQvd21sLnhtbDogZml4ZWQgYnVnICM1OTk4MSByZWxhdGVkCgkgIHRvIGhhbmRsaW5nIG9mICcmJyBpbiBhdHRyaWJ1dGVzIHdoZW4gZW50aXRpZXMgYXJlIHN1YnN0aXR1ZWQKCk1vbiBTZXAgMTAgMjI6MTQ6NDIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5oIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbgoJICBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaCBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaC5pbjoKCSAgVHJpZWQgdG8gY2xvc2UgYnVnICM2MDEzMQoKTW9uIFNlcCAxMCAyMDo0NjowMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IGZpeGVkIGEgYnVnIGluIHRoZSBIVE1MIHBhcnNlciBpbnRyb2R1Y2VkIFNlcCAgOQoKTW9uIFNlcCAxMCAyMDoxMzowOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IGZpeGluZyBidWcgIzU5OTQ2IG9uIHhtbG5zPSIiCgpNb24gU2VwIDEwIDE2OjM5OjQyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oIFNBWC5jOiBmaXhpbmcgYnVnIDU5NzMyLCBzaW1wbGUKCSAgYnV0IGFsbG9jYXRlcyBhIG5ldyBlcnJvciBjb2RlLgoKU3VuIFNlcCAgOSAxMDozMzoxNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBKb2huIEZsZWNrIGZpeGVkIHR5cG9zIGluIHRoZSBvcHRpb25zIG91dHB1dAoJKiBwYXJzZXIuYyBTQVguYzogZml4IGlnbm9yYWJsZSB3aGl0ZSBzcGFjZSBTQVggc2VsZWN0aW9uCgpTYXQgU2VwICA4IDExOjQzOjUzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbnRpdGllcy5jOiBTdGV2ZSBVbmRlcndvb2QgZm91bmQgdGhlIHBvc3NpYmlsaXR5IG9mIGFuCgkgIGluaW5pdGUgbG9vcCBpbiBjYXNlIG9mIGVycm9yLgoKRnJpIFNlcCAgNyAxMTozNTowMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IE5lZWQgJChJQ09OVl9MSUJTKSBpbiBsaWJ4bWwyX2xhX0xJQkFERAoKV2VkIFNlcCAgNSAxNzo0Nzo0MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHdhcm4gaWYgdmVyc2lvbiBpcyBub3QgMS4wIGJ1dCBpdCdzIG5vdAoJICBzdHJpY3RseSBzcGVha2luZyBhbiBlcnJvciBhZnRlciBhbmFseXppbmcgdGhlIHNwZWMKCk1vbiBTZXAgIDMgMTA6MDc6MDMgTURUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqZG9jL2NhdGFsb2cuaHRtbCAtIGFkZCBsaW5rIHRvIHRoZSBodG1sIHZlcnNpb24gb2YgdGhlCgltYW4gcGFnZSwgb3RoZXIgbGluZ3Vpc3RpYyBjbGVhbnVwcwoKTW9uIFNlcCAgMyAwOToxMDowOCBNRFQgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGNhdGFsb2dfbWFuLnhtbCwgeG1sY2F0YWxvZ19tYW4uaHRtbCwgeG1sY2F0YWxvZy4xCglhZGRpbmcgZG9jdW1lbnRhdGlvbiBmb3IgeG1sY2F0YWxvZy4gTm90ZTogeG1sY2F0YWxvZy4xLCB0aGUgbWFuCglmaWxlLCBoYXMgbm90IHlldCBiZWVuIGluY2x1ZGVkIGluIHRoZSBidWlsZC4KClNhdCBTZXAgIDEgMTg6MTc6NDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogcmVtb3ZlZCBhIGR1cGxpY2F0ZSBhZmZlY3RhdGlvbiBKdXN0aW4gRmxldGNoZXIKCkZyaSBBdWcgMzEgMjI6MDI6MTAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogQXJtaW4gU2FuZGVyIHBvaW50ZWQgYSBwb3NzaWJsZSB0ZXh0IGNvYWxlc2NpbmcgCgkgIHByb2JsZW0sIGNvbXBsZXRlZCBoaXMgcGF0Y2guCgpGcmkgQXVnIDMxIDE4OjMwOjI4IENFU1QgMjAwMSBCam9ybiBSZWVzZSA8YnJlZXNlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCgkqIHRyaW9uYW4uYzogRml4ZWQgY29uc3QgYW5kIHZvbGF0aWxlIHJlLWRlZmluaXRpb24gcHJvYmxlbQoJCkZyaSBBdWcgMzEgMTY6NTE6MjggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC40IHBhcnNlci5jOiBkb2MgdXBkYXRlcyBmcm9tIEhlaWtvIFJ1cHAKCSogcGFyc2VySW50ZXJuYWxzLmM6IDIgc2FuaXR5IGNoZWNrcyBmcm9tIEhlaWtvIFJ1cHAKClR1ZSBBdWcgMjggMjI6Mzg6NDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYXBwbGllZCBwYXRjaCBmcm9tIEFybWluIFNhbmRlciB0byBtYWtlIHNvbWUgcG9pbnRlcnMKCSAgY29uc3QgaW4geG1sQ29weU5vZGUoKQoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGFkZGVkIGZpeCB0byB0aGUgaGVhZGVyCgpNb24gQXVnIDI3IDE2OjI0OjQ3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBodW0sIHJlc3RyaWN0IHRoZSBpbnRlZ2VyIHVzYWdlIGdjYyBidWcgd29ya2Fyb3VuZAoJICB0byBvbmx5IGdjYyBjb21waWxlcnMgc28gdGhhdCBvdGhlciBhcmNoaXRlY3R1cmUgZG9uJ3QgZ2V0CgkgIHBlbmFsaXplZCBieSB0aGlzIGxpbWl0YXRpb24uCgkqIGluY2x1ZGUvbGlieG1sL3hwYXRoLmg6IHNtYWxsIHR5cG8gZml4IGZyb20gSGVpa28gVy4gUnVwcAoKU3VuIEF1ZyAyNiAyMDo0NTowNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4ZWQgYSBXaW5kb3dzIGNvbXBpbGVyIHdhcm5pbmcgKENocmlzIFBvYmxldGUpCgkqIHhwYXRoLmM6IGZpeCBmb3IgbW9kIHdoZW4gZGl2aWRlbmQgaXMgMCAoQ2hyaXMgUG9ibGV0ZSkKClNhdCBBdWcgMjUgMTU6MzA6MTcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaCBjYXRhbG9nLmMgeG1sY2F0YWxvZy5jOiBhZGRlZCBhIAoJICAtLWNvbnZlcnQgb3B0aW9uIHRvIHhtbGNhdGFsb2cgdG8gY29udmVydCBTR01MIG9uZXMgdG8KCSAgdGhlIFhNTCBzeW50YXguCgkqIHhtbGxpbnQuYzogc21hbGwgY2xlYW51cCBmb3IgJFNHTUxfQ0FUQUxPR19GSUxFUyBzdXBwb3J0LgoKICAgICAgICAyLjQuMyBnb3QgcmVsZWFzZWQgYXQgdGhhdCBwb2ludApUaHUgQXVnIDIzIDIzOjE2OjMyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmMgeG1sSU8uYzogc3RhcnRlZCBzb21lIHNlcmlvdXMgdGVzdGluZyBhbmQgZml4ZWQKCSAgYSBmZXcgYnVnIGFuZCBvcHRtaXphdGlvbiBuZWVkcy4KClRodSBBdWcgMjMgMTc6MjY6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDoKCSAgcHJlcGFyaW5nIGZvciBhIDIuNC4zIHJlbGVhc2UgZXZlbiBpZiBpdCBtYXkgbm90IGJlIHJlYWR5IHlldAoJKiBjYXRhbG9nLmMgcGFyc2VyLmMgeG1sSU8uYyBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmg6IHJlZGlyZWN0ZWQKCSAgYWxsIGZpbGUgcGFyc2luZyBsb29rdXAgdG8gZ28gdGhyb3VnaCB0aGUgZW50aXR5IHJlc29sdmVyLCBhZGQKCSAgdG8gYWRkIGFuIEFQSSB0byBieXBhc3MgaXQgKG5lZWRlZCB0byBsb2FkIGNhdGFsb2dzIHRoZW1zZWx2ZXMpLAoJICBzb21lIGNsZWFudXAgb24gdGhlIGNhdGFsb2cgY29kZSB0b28uCgkqIG5hbm9mdHAuYzogc21hbGwgY2xlYW51cAoJKiBkb2MvY2F0YWxvZy5odG1sOiBzbWFsbCB1cGRhdGUKClRodSBBdWcgMjMgMTI6MjI6MjYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogZml4ZWQgYnVnaSAjNTk0MDYgaW4gU0dNTCBjYXRhbG9nIHBhcnNpbmcgcmVwb3J0ZWQgYnkKCSAgSnVuIEt1cml5YW1hCgkgIApUaHUgQXVnIDIzIDAyOjUxOjI5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvY2F0YWxvZy5odG1sOiBmaW5pc2hlZCB0aGUgY2F0YWxvZyBkb2N1bWVudGF0aW9uCgpUaHUgQXVnIDIzIDAxOjM4OjQyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvY2F0YWxvZy5odG1sIGRvYy94bWwuaHRtbDogYWRkZWQgZG9jdW1lbnRhdGlvbiBhYm91dAoJICBDYXRhbG9nIHN1cHBvcnQsIG1pc3NlcyBhbiBBUEkgZGVzY3JpcHRpb24gCgkqIGRvYy9odG1sLyo6IHJlZXh0cmFjdGVkIHRoZSBBUEkgcGFnZXMKCldlZCBBdWcgMjIgMTg6Mjc6NDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaCBjYXRhbG9nLmMgeG1sSU8uYyBIVE1McGFyc2VyLmM6CgkgIEFkZGVkIHRoZSBwYXJ0IGFib3V0IHNlY3Rpb24gNy4yIG9uIFVSSSByZXNvbHV0aW9uLAoJICBmaXhlZCBhIHNpZGUgZWZmZWN0IGluIHRoZSBIVE1MIHBhcnNlciwgbG9vayBjb21wbGV0ZQoJICBhbmQgcmVhZHkgdG8gcm9jayBleGNlcHQgdGhlIFVSSS9TeXN0ZW1JRCBwYXJ0IQoKV2VkIEF1ZyAyMiAxNjoyNzowMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmggY2F0YWxvZy5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jCgkgIHhtbElPLmM6IGFkZGVkIHN1cHBvcnQgYW5kIEFQSXMgbmVlZGVkIGZvciB0aGUgY2F0YWxvZyBQSQoJKiBpbmNsdWRlL2xpYnhtbC94bWxJTy5oOiBjbGVhbnVwCgpXZWQgQXVnIDIyIDAyOjAzOjMxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmMgcGFyc2VyLmMgeG1sSU8uYyB4bWxjYXRhbG9nLmMgeG1sbGludC5jIAoJICBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmg6IHN0YXJ0cyB0byBsb29rIG9rYXksIHJlYWxseQoJICBwbHVnZ2VkIHRoZSBuZXcgZnJhbWV3b3JrLCBjbGVhbmVkIGEgbG90IG9mIHN0dWZmLAoJICBhZGRlZCBzb21lIEFQSXMsIGV4Y2VwdCB0aGUgUEkncyBzdXBwb3J0IG1pc3NpbmcgdGhpcwoJICBzaG91bGQgYmUgbW9zdGx5IGNvbXBsZXRlCgkqIHJlc3VsdC9jYXRhbG9ncy8qIHRlc3QvY2F0YWxvZ3MvKjogYWRkZWQgbmV3IHRlc3QsIGVucmljaGVkCgkgIHRoZSBleGlzdGluZyBvbmUgd2l0aCBVUk4gSUQgdGVzdHMKClR1ZSBBdWcgMjEgMTQ6NTY6MTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogZml4ZWQgbmV4dENhdGFsb2cKCSogcmVzdWx0L2NhdGFsb2dzL2RvY2Jvb2sgdGVzdC9jYXRhbG9ncy8qOiBzdGFydGVkIGFkZGluZwoJICBhIHNtYWxsIHJlZ3Jlc3Npb24gdGVzdAoKVHVlIEF1ZyAyMSAxMjo1MjozOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY2F0YWxvZy5jIHhtbGNhdGFsb2cuYyBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmg6CgkgIG1vcmUgd29yayBvbiB0aGUgWE1MIGNhdGFsb2cgc3VwcG9ydC4KCSogcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IHNtYWxsIGNsZWFudXAgc2VlbXMgdXNpbmcKCSAgbGlzdCBhcyBhIHB1YmxpYyBwYXJhbWV0ZXIgbmFtZSBjYW4gZ2l2ZSBwb3J0YWJpbGl0eSB0cm91YmxlcwoJKiB0cmlvbmFuLmMgdHJpb25hbi5oIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwvdHJpb25hbi5oCgkgIGluY2x1ZGUvbGlieG1sL3hwYXRoLmggaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW06IHJlbW92ZWQKCSAgdHJpb25hbiBmcm9tIHRoZSBsaWJ4bWwgQVBJLCBhZGRlZCB4bWxYUGF0aElzSW5mIGFuZCB4bWxYUGF0aElzTmFOCgkgIHdyYXBwZXJzCgpUdWUgQXVnIDIxIDExOjE4OjQ1IENFU1QgMjAwMSBCam9ybiBSZWVzZSA8YnJlZXNlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCgkqIE1ha2VmaWxlLmFtIHRyaW8uYyB0cmlvZGVmLmggdHJpb25hbi5jIHhwYXRoLmMKCSAgaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW0gaW5jbHVkZS9saWJ4bWwvdHJpb25hbi5oOgoJICBSZS13b3JrZWQgTm90LUEtTnVtYmVyIGFuZCBJbmZpbml0eSBzdXBwb3J0LgoJKiB4bWxjYXRhbG9nLmM6IGFkZGVkIHJlYWRsaW5lIGluY2x1ZGUgZmlsZXMKCk1vbiBBdWcgMjAgMDI6MDQ6MTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIHhtbGNhdGFsb2cuYyBsaWJ4bWwuc3BlYy5pbjogcmVuYW1pbmcgCgkgIHRlc3RDYXRhbG9nIGFzIHhtbGNhdGFsb2csIG1ha2luZyBpdCBhbiBpbnN0YWxsZWQgYXBwCgkgIGFkZGluZyBhIHNoZWxsLCBhbmQgcHJlcGFyaW5nIGl0IHRvIGJlIGEgL2V0Yy94bWwvY2F0YWxvZwoJICBtYW5hZ2VtZW50IHRvb2wsIHRob3VnaCBub3QgcmVhZHkgeWV0CgkqIGNhdGFsb2cuYyBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmg6IGFkZGluZyBzdXBwb3J0IGZvcgoJICBYTUwgQ2F0YWxvZ3MgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS8KCSAgbm90IGZpbmlzaGVkLCB0aGVyZSBpcyBzb21lIGludGVyZXN0aW5nIHRyYWRlb2ZmcyBhbmQgYQoJICBmZXcgb3BlbiBxdWVzdGlvbnMgbGVmdC4KClN1biBBdWcgMTkgMTQ6NTk6NTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogZml4ZWQgYSBsaW5lIGZvcm1hdHRpbmcgcHJvYmxlbQoKRnJpIEF1ZyAxNyAxMTozNTozMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IHJlbW92ZWQgYSBjb3VwbGUgb2YgdW51c2VkIHZhcmlhYmxlIChBbGJlcnQgQ2hpbikKCkZyaSBBdWcgMTcgMDE6MjU6MjEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5jIGluY2x1ZGUvbGlieG1sL0hUTUxwYXJzZXIuaDoKCSAgdHJ5aW5nIHRvIGZpeCBzb21lIHRyb3VibGVzIHcuci50LiBmdW5jdGlvbiByZXR1cm5pbmcKCSAgY29uc3QgeHh4UHRyLgoKVGh1IEF1ZyAxNiAyMTozMzoyMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvZHNwL2xpYnhtbDIuZGVmLnNyYzogYW5vdGhlciBzZXQgb2Ygc3ltYm9scyBjb25kaXRpb25hbGx5CgkgIGRlZmluZWQKClRodSBBdWcgMTYgMjE6MzE6MTQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwb2ludGVyLmM6IHJlbW92ZWQgdW51c2VkIHZhcgoKVGh1IEF1ZyAxNiAxODoyNjo0MCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdFhQYXRoLmM6IGFub3RoZXIgc21hbGwgY2xlYW51cCBjbG9zaW5nIGJ1ZyAjNTkxMTAKClRodSBBdWcgMTYgMTc6NTk6MTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmM6IHNtYWxsIGNsZWFudXAgY2xvc2luZyBidWcKCSAgIzU5MTA4CgpXZWQgQXVnIDE1IDIyOjQ2OjAxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBleGFtcGxlL2dqb2JyZWFkLmM6IGFkZCB4bWxDbGVhbnVwUGFyc2VyKCkgYmVmb3JlIGxlYXZpbmcKCldlZCBBdWcgMTUgMTQ6NTc6MDggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZy5oLmluIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDoKCSAgcmVsZWFzZWQgMi40LjIKCldlZCBBdWcgMTUgMTM6NTY6MjIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmggZGVidWdYTUwuYyB2YWxpZC5jOiBkZXByZWNhdGUKCSAgdGhlIG5vbi1ib3VuZGNoZWNraW5nIFNwcmludGYgZnVuY3Rpb25zLCBhZGQgU25wcmludGYKCSAgdGhpcyBzaG91bGQgY2xvc2UgYnVnICM1Nzk4NAoKV2VkIEF1ZyAxNSAxMDo0NjowNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWUoKSBkaWRuJ3QgdW5lc2NhcGVkCgkgIFVSSXMgYmVmb3JlIGRvaW5nIHRoZSBsb29rdXBzIChwb2ludGVkIGJ5IE1hcmsgVmFrb2MpCgpUdWUgQXVnIDE0IDE4OjM3OjIzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBzZXJpb3VzIGNoYW5nZXMgb24gUmVzdWx0IFZhbHVlIFRyZWVzIGFuZCBOb2RlU2V0cwoJICB3LnIudC4gZGVhbGxvY2F0aW9uIGFuZCBjb2xsZWN0IG9wZXJhdGlvbnMuIFByb2JhYmx5IG5vdAoJICAxMDAlIGNsZWFuIChtZXJnZSBvZiBhbGxvY2F0ZWQgdHJlZXMgc21lbGxzIGxpa2UgYSBwcm9ibGVtKS4KCSAgU2VlbXMgc3VmZmljaWVudCB0byBjbG9zZSAjNTg5NDMKClR1ZSBBdWcgMTQgMTY6MTI6MDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYWRkaW5nIGEgLS1mb3JtYXQgb3B0aW9uCgpUdWUgQXVnIDE0IDE0OjE2OjI0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBjb3VudCgpIHdhcyBicm9rZW4gb24gUmVzdWx0IFZhbHVlIFRyZWUKCSogeG1sSU8uYzogZml4ZWQgZmlsZTovLy8gYWNjZXNzZXMgb24gX1dJTjMyCgpNb24gQXVnIDEzIDEzOjIyOjUzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwubTQ6IHMvTElCWE1MX1ZFUlNJT05fTlVNQkVSL0xJQlhNTF9WRVJTSU9OLyBzZWVtcyB0aGUKCSAgbWFjcm8gd2FzIHJlbmFtZWQsIHRoaXMgc2hvdWxkIGNsb3NlIGJ1ZyAjNTg2ODMKCk1vbiBBdWcgMTMgMTI6MzM6NDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBzbWFsbCBmaXggZml4aW5nIGJ1ZyAjNTg1MzkgcmVwb3J0ZWQgYnkgY29vbG8sIGluCgkgIGVudGl0eSBzdWJzdGl0dXRpb24gbW9kZSB0ZXh0IGF0IHRoZSBlbmQgb2YgdGhlIGVudGl0eSBtaWdodAoJICBiZSBhZGRlZCBkdWUgdG8gdGV4dCBjb2FsZXNjaW5nLgoJKiBuYW5vZnRwLmMgcGFyc2VyLmM6IHNtYWxsIGNsZWFudXAKCldlZCBBdWcgIDggMjI6NTc6MDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCiAgICAgICAgKiBIQUNLSU5HOiBhZGRlZCBKb2huIEZsZWNrIHJpZ2h0IHRvIGNvbW1pdCBpbiB0aGUgZG9jIHN1YmRpcgoKVHVlIEF1ZyAgNyAwMzowNTo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmMgdGVzdFhQYXRoLmMgdmFsaWQuYyB4bWxsaW50LmMgaW5jbHVkZS9saWJ4bWwvdmFsaWQuaDoKCSAgYWxsb3cgdG8gaW5oZXJpdCBhdHRyaWJ1dGVzIGZyb20gdGhlIERURCBkaXJlY3RseSBpbiB0aGUKCSAgdHJlZSwgdGhpcyBpcyBuZWVkZWQgZm9yIFhQYXRoIGFuZCBjYW4gYmUgYSB1c2VmdWwgZmVhdHVyZS4KCSAgSW5oZXJpdGVkIG5hbWVzcGFjZXMgYXJlIGFsd2F5cyBwcm92aWRlZCBhdCB0aGUgdHJlZSBsZXZlbCBub3cKCSogdGVzdC9kZWZhdHRyKiByZXN1bHQvZGVmYXR0ciogcmVzdWx0L25vZW50L2RlZmF0dHIqOiBhZGRlZCBhIGNvdXBsZQoJICBvZiB0ZXN0cyBmb3IgdGhpcyBmZWF0dXJlIChYU0xUIGJlaW5nIHRoZSBwcmltZSB1c2VyKS4KCkZyaSBBdWcgIDMgMTQ6MDI6MjAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBNYWtlZmlsZS5hbSBuYW5vaHR0cC5jIHBhcnNlci5jIHRlc3RIVE1MLmMKCSAgdGVzdFNBWC5jIHhtbElPLmMgeG1sbGludC5jIGluY2x1ZGUvd2luMzJjb25maWcuaAoJICBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmguaW4gd2luMzIvUkVBRE1FLk1TRGV2CgkgIHdpbjMyL2RzcC8qOiBhcHBsaWVkIFdpbjMyIEZhY2VsaWZ0IE5vLjIgcGF0Y2hlcyBmcm9tIAoJICBJZ29yIFpsYXRrb3ZpYyBmb3IgV2luZG93cy9NU0MKCldlZCBBdWcgIDEgMjM6MjE6MDYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiB1bnBhcnNlZEVudGl0eURlY2woKSB0aGUgVVJJIGNvbXB1dGF0aW9uIG9mIHRoZQoJICBlbnRpdHkgd2Fzbid0IGRvbmUgYnJlYWtpbmcgWFNMVCB1bnBhcnNlZC1lbnRpdHktdXJpKCkKCldlZCBBdWcgIDEgMTc6NDQ6NTcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgYnVnIHdoZW4gd2Fsa2luZyB0aGUgZGVzY2VuZGFudHMgYW5kCgkgIHRoZSBjdXJyZW50IG5vZGUgaGFzIG5vIGNoaWxkcmVuCgkqIGRlYnVnWE1MLmM6IHNob3cgdXAgd2hlbiBhIHRleHQgbm9kZSBpcyBzdXBwb3NlZCB0byBub3QgYmUgZXNjYXBlZAoKV2VkIEF1ZyAgMSAwMTozMzozNSBDRVNUIDIwMDEgVGhvbWFzIEJyb3llciA8dGJyb3llckBsdGd0Lm5ldD4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgYnVnIGluIHhtbFhQYXRoTm9kZVRyYWlsaW5nU29ydGVkIChmb3Igbm93IGl0CgkgIHdvcmtlZCBsaWtlIHRoZSBzZXQ6bGVhZGluZygpIGZ1bmN0aW9uKQoJKiBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oOiBhZGRlZCB4bWxYUGF0aE5vZGVTZXRDb250YWlucwoKVHVlIEp1bCAzMSAxODoyNDozNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIG5hbm9odHRwLmM6IHByb3RlY3RlZCBhbiB1c2Ugb2YgRUFHQUlOLCBCcmlhbiBTdGFmZm9yZAoKVHVlIEp1bCAzMSAxNzo0ODo0NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvbGlieG1sL3htbElPLmg6IGFwcGx5IGNoYW5nZSB0byBjbG9zZSAjNTgxNDEgCgkqIHdpbjMyL2xpYnhtbDIvKjogdXBkYXRlIG9mIHRoZSBNU0MgcHJvamVjdHMgZnJvbSBJZ29yICBabGF0a292aWMKClR1ZSBKdWwgMzEgMTc6MDk6MzEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogd2hlbiB0aGUgaW50ZXJuYWwgc3Vic2V0IHVzZXMgYSBQRSwgdGhlbiB0aGUKCSAgaW5jbHVkZWQgZW50aXR5IGNhbiB1c2UgY29uZGl0aW9uYWwgc2VjdGlvbnMuCgpNb24gSnVsIDMwIDEyOjU4OjM5IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3hwYXRoLmg6IGZpeGVkIGEgc2VyaW91cyBtZW1vcnkgcHJvYmxlbgoJICB3aGVuIHdhbGtpbmcgdGhlIG5hbWVzcGFjZSBheGlzIHNob3dpbmcgdXAgaW4KCSAgbGlieHN0L3Rlc3RzL2dlbmVyYWwvYnVnLTEyCgkqIHhtbG1lbW9yeS5jOiBhZGRlZCB0aGUgcG9zc2liaWxpdHkgdG8gdHJhY2UgYSBnaXZlbiBibG9jawoJICBkZWZpbmVkIGJ5IGl0cyBhZGRyZXNzCgpTdW4gSnVsIDI5IDA3OjE4OjUzIEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogZG9uJ3Qgb3ZlcnJpZGUgZXhpc3RpbmcgZW5jb2Rpbmcgc3BlY2lmaWVkIGJlZm9yZQoJICBzdGFydGluZyB4bWxQYXJzZURvY3VtZW50KCkKClNhdCBKdWwgMjggMTM6MzM6MTAgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiByZWluc2VydGVkLCBuZWVkZWQgZm9yCgkgIFdpbmRvd3MgdXNlcnMgb2YgQ1ZTCgoyMDAxLTA3LTI3ICBEYXJpbiBBZGxlciAgPGRhcmluQGJlbnRzcG9vbi5jb20+CgoJKiBlbmNvZGluZy5jOiAoeG1sSWNvbnZXcmFwcGVyKTogQWRkIGNhc3QgdG8gZml4IHdhcm5pbmcuCgkqIHRlc3RDYXRhbG9nLmM6IEFkZCBpbmNsdWRlIG9mIDxsaWJ4bWwvcGFyc2VyLmg+LgoKMjAwMS0wNy0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBiZW50c3Bvb24uY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvLmN2c2lnbm9yZToKCSogaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6CglSZW1vdmUgdGhpcyBmaWxlIGZyb20gQ1ZTIGJlY2F1c2UgaXQncyBnZW5lcmF0ZWQuCgpGcmkgSnVsIDI3IDEwOjAzOjU2IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogYXBwbGllZCBjb25zdCBwYXRjaGVzIGZyb20KCSAgVG9tIE1vb2cgIzU4MDAyCgpUaHUgSnVsIDI2IDE4OjU1OjUyIENFU1QgMjAwMSBUaG9tYXMgQnJveWVyIDx0YnJveWVyQGx0Z3QubmV0PgoKCSogeHBhdGguYyBpbmNsdWRlL2xpYnhtbC94cGF0aHssSW50ZXJuYWxzfS5oOiBhZGRlZCBhIGZ1bmN0aW9uCgkgIGxvb2t1cCBmcmFtZXdvcmsKCkZyaSBKdWwgMjcgMDE6NTA6MjAgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogZml4ZWQgeG1sQ29weU5vZGUoKSBmb3IgZG9jdW1lbnRzCgpUaHUgSnVsIDI2IDEyOjQwOjM1IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogZml4ZWQgYnVncyAjNTgwNzMgcmVwb3J0ZWQgYnkgR3JlZyBTaHRpbG1hbgoKVGh1IEp1bCAyNiAxMTozODozNyBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGZpeGVzIGJ1ZyAjNTc2NTIgcmVwb3J0ZWQgYnkgTW9ydXMgV2FsdGVyCgpUaHUgSnVsIDI2IDEwOjI0OjM0IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBuYW5vaHR0cC5jOiBKb2huIEtyb2xsIHByb3ZpZGVkIGEgc21hbGwgZml4IHRvIHhtbE5hbm9IVFRQU2F2ZQoKVGh1IEp1bCAyNiAwNzoxNjowNCBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmM6IGZpeGVkIHRoZSB4bWxMaW5lTnVtYmVyc0RlZmF1bHQoKQoJICBlcnJvcnMsIGxlc3NvbiBkb24ndCBhZGQgbmV3IGZ1bmN0aW9ucyBhdCAxYW0gYmVmb3JlIGEgcmVsZWFzZQoJKiB4cGF0aC5jOiBpbnRlZ3JhdGVkIGZpeCBmcm9tIEJqb3JuIHRvIGF2b2lkIGRpdmlkZSBieSB6ZXJvCgkgIGZyb20gWFBhdGggaW5pdGlhbGl6YXRpb24gd2hlbiBwb3NzaWJsZS4KClR1ZSBKdWwgMjQgMTU6Mzk6MTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiByZXN1bHQvc2NyaXB0cy9iYXNlKjogcmVtb3ZpbmcgaGlzdG9yeS9yZWFkbGluZSBjaGFuZ2VkCgkgIHRoaXMgc2xpZ2h0bHkKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggU0FYLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMKCSAgeG1sbGludC5jOiBtYWtlIGVsZW1lbnQgY29udGVudCBsaW5lIG51bWJlciBnZW5lcmF0aW9uCgkgIG9wdGlvbm5hbCB0byBhdm9pZCBicmVha2luZyBvbGQgYXBwcyBhZGRlZCBpbnRlcmZhY2UgdG8gc3dpdGNoCgpUdWUgSnVsIDI0IDE1OjA2OjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBnZXQgcmlkIG9mIHRoZSByZWFkbGluZSBhbmQgbGliaGlzdG9yeQoJICBkZXBlbmRlbmNpZXMgYnkgZGVmYXVsdCwgcmVsZWFzZSAyLjQuMSB3aXRoIElBNjQgZml4CgkqIG5hbm9odHRwLmMgdHJlZS5jIHhtbElPLmMgaW5jbHVkZS9saWJ4bWwvbmFub2h0dHAuaAoJICBpbmNsdWRlL2xpYnhtbC90cmVlLmggaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogaW5jb3Jwb3JhdGVkCgkgIEpvaG4gS3JvbGwgZml4ZXMgdG8gYWxsb3cgc2F2aW5nIHRvIEhUVFAgdmlhIFBVVCAob3IKCSAgUE9TVCBvZiBuZWVkZWQpLgoJKiBkb2MvaHRtbC8qLmh0bWw6IHJlZ2VuZXJhdGVkIHRoZSBkb2NzCgpTdW4gSnVsIDIyIDA1OjU2OjE2IENFU1QgMjAwMSBUaG9tYXMgQnJveWVyIDx0YnJveWVyQGx0Z3QubmV0PgoKCSogaGFzaC5jIGluY2x1ZGUvbGlieG1sL2hhc2guaDogYWRkZWQgeG1sSGFzaFNjYW5uZXJGdWxsLAoJICB4bWxIYXNoU2NhbkZ1bGwgYW5kIHhtbEhhc2hTY2FubkZ1bGwzIHRvIGdldCBwYXNzZWQgdGhlCgkgIHRocmVlIGtleXMgYXMgYXJndW1lbnRzIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbgoKVGh1IEp1bCAxOSAxNToyOToyNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbTogcmVtb3ZlZCBsaWJ4bWwgc29mdGxpbmsgZm9yIGdvb2QKCSogaW5jbHVkZS9saWJ4bWwvKi5oICouYyBkb2MvTWFrZWZpbGUuYW06IGNsZWFudXAgdG8gZ2V0CgkgIDEwMCUgY292ZXJhZ2UgYnkgZ3RrLWRvYwoKVHVlIEp1bCAxNyAxNzozNjo0NiBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sbWVtb3J5LmMgaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IGRlYnVnZ2luZyBvbiBJQTY0LAoJICBmaXhlZCBzZXJpb3VzIHRyb3VibGVzIGR1ZSB0byBzaXplX3QgdnMuIGludCBtaXNtYXRjaAoKVHVlIEp1bCAxNyAxNjowNDozNiBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogU0FYLmMgeG1sSU8uYzogY2xlYW5lZCB1cCBzb21lIHdhcm5pbmcgb24gdGhlIEFscGhhCgpNb24gSnVsIDE2IDA2OjMyOjQ0IENFU1QgMjAwMSBUaG9tYXMgQnJveWVyIDx0YnJveWVyQGx0Z3QubmV0PgoKCSogaW5jbHVkZS9saWJ4bWwveHBhdGh7LEludGVybmFsc30uaCB4cGF0aC5jOiBhZGRlZCBhIG1vcmUKCSAgY29udmVuaWVudCBleHRlbnNpb24gQVBJIGZvciB2YWx1ZSBhbmQgY29udGV4dCBtYW5hZ2luZwoJICBOb3cgaGFuZGxlcyBleHRlcm5hbCBvYmplY3RzIHRocm91Z2ggeG1sWFBhdGhQb3BFeHRlcm5hbCwKCSAgeG1sWFBhdGhXcmFwRXh0ZXJuYWwgYW5kIHhtbFhQYXRoUmV0dXJuRXh0ZXJuYWwuCgkgIEFkZGVkIGZ1bmN0aW9ucyBmb3Igc2V0cyBvcGVyYXRpb25zIChpbnRlcnNlY3Rpb24sIGV0Yy4pCgpNb24gSnVsIDE2IDIwOjA1OjI3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmggaW5jbHVkZS9saWJ4bWwvSFRNTHBhcnNlci5oCgkgIHhtbElPLmMgdHJlZS5jIHBhcnNlckludGVybmFscy5jIGVudGl0aWVzLmMgZW5jb2RpbmcuYwoJICBIVE1McGFyc2VyLmM6IGNsZWFudXAgb2YgZ2xvYmFsIHZhcmlhYmxlcywgbWFya2luZyBzb21lCgkgIGNvbnN0IG9yIHByaXZhdGUuCgpNb24gSnVsIDE2IDAwOjE3OjE1IENFU1QgMjAwMSBUaG9tYXMgQnJveWVyIDx0YnJveWVyQGx0Z3QubmV0PgoKCSogaW5jbHVkZS9saWJ4bWwveHBhdGguaDogZXhwb3J0ZWQgeG1sWFBhdGh7TkFOLFBJTkYsTklORn0KCSAgZml4ZWQgeG1sWFBhdGhOb2RlU2V0SXRlbSB3aGVuIHBhc3NpbmcgaW5kZXg9MAoKU3VuIEp1bCAxNSAxNzo1ODo0NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLmluOiBhZGRlZCB4bWxDaGVja1ZlcnNpb24oKQoKU2F0IEp1bCAxNCAxOTozMToyMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbGxpbnQuYzogZml4ZWQgY29tcGlsYXRpb24gdW5kZXIgQ3lnd2luICM1NzUwMwoJKiBUT0RPOiB1cGRhdGUKCjIwMDEtMDctMTMgIFBldGVyIFdpbGxpYW1zICA8cGV0ZXJ3QHhpbWlhbi5jb20+CgoJKiBjb25maWcuaC5pbjogYWRkICN1bmRlZiBIQVZFX0RMRkNOX0gKCgkqIGV4YW1wbGUvTWFrZWZpbGUuYW0gKElOQ0xVREVTKTogQ29tcGlsZSBmaXggd2hlbiBzcmNkaXIgIT0KCWJ1aWxkZGlyLgoKRnJpIEp1bCAxMyAxMTowOTo1NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHdpbjMyL2xpYnhtbDIvbGlieG1sMi5kZWYuc3JjOiBhZGRlZCBhIGNvdXBsZSBvZiBleHBvcnRlZCBlbnRyaWVzCgkgIHJhaXNlZCBieSAjNTczNDggYW5kICM1NzM4MQoKVGh1IEp1bCAxMiAyMToyMDoxNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgSFRNTHRyZWUuYyBTQVguYyBkZWJ1Z1hNTC5jIHBhcnNlci5jCgkgIHRyZWUuYyB4cG9pbnRlci5jOiBzdG9yZSB0aGUgbGluZSBudW1iZGVyIGluIGVsZW1lbnQtPmNvbnRlbnQsCgkgIG1heSBicmVhayBzb21lIHNvZnR3YXJlLCBuZWVkIGEgY29uZmlndXJhdGlvbiBtZWNoYW5pc20KCjIwMDEtMDctMTAgIERhcmluIEFkbGVyICA8ZGFyaW5AYmVudHNwb29uLmNvbT4KCgkqIC5jdnNpZ25vcmU6CgkqIGV4YW1wbGUvLmN2c2lnbm9yZToKCSogaW5jbHVkZS8uY3ZzaWdub3JlOgoJKiBpbmNsdWRlL2xpYnhtbC8uY3ZzaWdub3JlOgoJVmFyaW91cyB0aGluZ3MgdGhhdCBhcmUgZ2VuZXJhdGVkIGFuZCBzaG91bGQgYmUgaWdub3JlZC4KClR1ZSBKdWwgMTAgMTc6NDc6MDkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHJlbGVhc2Ugb2YgMi40LjAKCSogZG9jL3htbC5odG1sIGRvYy9odG1sLyo6ICB1cGRhdGVkIHRoZSBkb2NzCgpNb24gSnVsICA5IDIyOjA2OjUzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogZml4ZWQgIkludGVybmFsOiBNSVhFRCBzdHJ1Y3QgYmFkIiB3aGVuICNDREFUQSBlbGVtZW50cwoJICB2YWxpZGF0aW9uIG9jY3VyZWQgb24gY29udGVudCB3aXRoIGVsZW1lbnQgY2hpbGQKCk1vbiBKdWwgIDkgMTc6NTk6MDggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkIFhNTCBCYXNlIGNvbXB1dGF0aW9uIHdoaWNoIHdhcyBicm9rZW4KCSogZGVidWdYTUwuYzogYWRkZWQgYSBiYXNlIGZ1bmN0aW9uIHRvIHRoZSBzaGVsbAoJKiBNYWtlZmlsZS5hbSByZXN1bHQvc2NyaXB0cy8qIHRlc3Qvc2NyaXB0cy8qOiBhZGRlZCBzY3JpcHRzCgkgIGJhc2VkIHJlZ3Jlc3Npb24gdGVzdHMsIGFuZCBhZGRpbmcgMiBYTUwgQmFzZSB0ZXN0cwoKTW9uIEp1bCAgOSAxMjozMTowNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogc2V0IHByb3BlcnRpZXMgZG9jIGFuZCBjYWxsIHhtbFNldExpc3REb2MgZm9yIHByb3BlcnRpZXMKCSAgY29udGVudCB3aGVuIGdyYWZ0aW5nIHRoZW0gaW4gYSBkaWZmZXJlbnQgdHJlZS4KCSogYWNsb2NhbC5tNDogcmVtb3ZlIGZyb20gQ1ZTCgpTdW4gSnVsICA4IDIzOjA5OjA3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogd2luMzIvbGlieG1sMi9saWJ4bWwyLmRlZi5zcmM6IGFkZGVkIHNvbWUgbWlzc2luZyBlbnRyeSBwb2ludAoJICBmb3IgWFBhdGggKE1hcmsgVmFrb2MpCgpTdW4gSnVsICA4IDIwOjM0OjM1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sSU8uYzogZml4ZWQgYW4gb2xkIGJ1ZyByYWlzZWQgYnkgQmVybmhhcmQgWndpc2NoLCB0aGUgSS9PCgkgIGxheWVyIHNob3VsZCBVUkktVW5lc2NhcGUgYmVmb3JlIHRyeWluZyB0byBvcGVuIHJlc291cmNlcy4KClN1biBKdWwgIDggMTY6MjY6MDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXggdGhlIG5hbWUoKSBidWcgZm9yIGVsZW1lbnRzIGluIHRoZSBkZWZhdWx0IAoJICBuYW1lc3BhY2UgcmVwb3J0ZWQgYnkgQ2hhcmxpZSBCb3plbWFuCgpTdW4gSnVsICA4IDE1OjExOjA1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogU0FYLmMgcGFyc2VyLmMgdGVzdFhQYXRoLmMgeHBhdGguYzogdHJ5aW5nIHRvIGZpeCAjNTY5NDgsIHRoaXMKCSAgbGVkIHRvIGFuIFhQYXRoIGZpeCwgaW1wcm92ZW1lbnRzIG9mIFNBWCBpbml0aWFsaXphdGlvbiwgYW5kCgkgIGFuIGFkZGVkIG9wdGlvbiAtLW5vY2RhdGEgdG8gdGVzdFhQYXRoCgpTYXQgSnVsICA3IDIxOjA5OjU1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL2xpYnhtbC1kb2MuZWw6IEZlbGl4IE5hdHRlciBwcm92aWRlZCBhbmV3IHZlcnNpb24gd29ya2luZwoJICB3aXRoIFhFbWFjcyB0b28KClNhdCBKdWwgIDcgMDI6MTY6MDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL2xpYnhtbC94cGF0aC5oOiBzbWFsbCBjbGVhbnVwCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlCgpGcmkgSnVsICA2IDAxOjQwOjIzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOgoJICByZWxlYXNlZCAyLjMuMTQKCkZyaSBKdWwgIDYgMDA6NDc6NDEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MvaHRtbC8qOiByZWJ1aWx0IHRoZSBkb2NzIGZvciB0aGUgcmVsZWFzZQoJKiBkb2MveG1sLmh0bWw6IGFkZGVkIDIuMy4xNCByZWxlYXNlLgoKVGh1IEp1bCAgNSAyMjowMTozMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGEgYnVnIHJlcG9ydGVkIGJ5IFN0ZXBoYW4gS3Vsb3cgZW1wdHkgbm9kZXNldHMKCSAgd2VyZSBub3QgZXF1YWwgdG8gZW1wdHkgc3RyaW5ncwoKVGh1IEp1bCAgNSAwMDo1MjoyNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFNBWC5jOiBmaXhlZCBhIFVSSS1SZWZlcmVuY2UgY29tcHV0YXRpb24gcHJvYmxlbSB3aGVuIHZhbGlkYXRpbmcKCSogeG1sSU8uYzogc21hbGwgY2xlYW51cAoKVGh1IEp1bCAgNSAwMDowNDo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBpbXByb3ZlZCB0aGUgZGVzY3JpcHRpb24gb2YgYSBjb3VwbGUgb2YgaW50ZXJmYWNlcwoJICB1cG9uIExhcnJ5IFN0YW1wZXIgc3VnZ2VzdGlvbgoKV2VkIEp1bCAgNCAyMTo0MjoyNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFNBWC5jIGVudGl0aWVzLmMgcGFyc2VyLmM6IGNoYW5nZWQgY29tcGxldGVseSB0aGUgd2F5IGVudGl0aWVzCgkgIGFyZSBoYW5kbGVkIHdoZW4gcnVubmluZyB0aGUgcGFyc2VyIGluIGVudGl0eSBzdWJzdGl0dXRpb24gbW9kZS4KCSAgVGhpcyBmaXhlcyBhIGJ1ZyByZXBvcnRlZCBieSBTdGVwaGFuIEt1bG93IGFuZCBuZWFybHkgZGl2aWRlcwoJICBieSAzIHRoZSBhbW91bnQgb2YgbWVtb3J5IHJlcXVpcmVkIGJ5IGxpYnhzbHQgdG8gbG9hZCBhbmQgcHJvY2VzcwoJICBEb2NCb29rIFRERy4KCldlZCBKdWwgIDQgMTg6MDI6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGluZyBhIHRvbyBlYXJseSByb290IGNsb3NpbmcgcHJvYmxlbSByYWlzZWQKCSAgYnl0IFByYXNoYW50aCBOYWlkdQoKV2VkIEp1bCAgNCAwMTo0MjowMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgbWlzc2luZyBjb3B5IGluIHhtbFhQYXRoVmFyaWFibGVMb29rdXBOUygpIAoJICByYWlzZWQgYnkgTWFyayBWYWtvYy4KClR1ZSBKdWwgIDMgMTg6MzU6NDggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBleGFtcGxlL01ha2VmaWxlLmFtOiBmaXhlZCB0aGUgaW5jbHVkZSBwYXRoIHRvIGFkZCBzcmNkaXIvaW5jbHVkZQoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW46IGZpeCBmcm9tIEFsYmVydCBDaGluIGZvciBpY29udiBkZXRlY3Rpb24KCSAgYW5kIHNvbWUgY2xlYW51cAoKVHVlIEp1bCAgMyAxMDoxMjowMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwveHBhdGguaCBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oOgoJICBsb3Qgb2Ygb3B0aW1pemF0aW9uIHdvcmssIHJlc3VsdHMgaW4gc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnRzCgkgIHdoZW4gaGFuZGxpbmcgcmVhbGx5IGNvbXBsZXggWFBhdGggcXVlcmllcy4gQWRkIGEgc21hbGwgb3B0aW1pemVyCgkgIGZvciB1bmlvbnMsIGltcHJvdmUgW25dIGFuZCBbbGFzdCgpXSwgYXZvaWQgc29tZSBjb3N0bHkgb3BzLgoKRnJpIEp1biAyOSAyMzoyNjo1NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oIHBhcnNlci5jOiB4bWxTdHJzdHIgYXJncyBhcmUgYm90aCBjb25zdAoJKiB4cGF0aC5jOiBzbWFsbCBjbGVhbnVwCgkqIHhtbEdldE5zTGlzdDogcmVmb3JtYXRlZCwgZml4ZWQgcHJvYmxlbXMgaWYgdXNlZCBvbiBFbnRpdGllcwoKVGh1IEp1biAyOCAxODoxOTo0NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy94bWwuaHRtbDogYWRkZWQgMS44LjE0IGFuZCAyLjMuMTMgcmVsZWFzZXMKClRodSBKdW4gMjggMTg6MTY6MjggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHJlbGVhc2VkIDIuMy4xMwoJKiBNYWtlZmlsZS5hbSBleGFtcGxlL01ha2VmaWxlLmFtOiB3b3JrYXJvdW5kIGF1dG9tYWtlIGdlbmVyYXRpbmcKCSAgZXJyb25lb3VzIGRlcHMKClRodSBKdW4gMjggMTU6MDg6MjIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IGJ1ZyAjNTY4MDEgWW9uIERlcmVrIHByb3ZpZGVkIGEgcGF0Y2gKCSAgdG8gdGhlIHdpbmRvd3MgY29uZmlnIGZpbGUuCgpUaHUgSnVuIDI4IDE0OjUxOjQ0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBvaW50ZXIuYyBpbmNsdWRlL3dpbjMyY29uZmlnLmggd2luMzIvbGlieG1sMi9saWJ4bWwyLmRlZi5zcmMKCSAgbGlieG1sLmggOiBZb24gRGVyZWsgcHJvdmlkZWQgYSBzZXQgb2YgY2hhbmdlcyB0byBjb21waWxlIGZyb20KCSAgQ1ZTIG9uIFdpbmRvd3MvTVNDCgpUaHUgSnVuIDI4IDE0OjExOjI4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGZpeGVkIFVURjggQk9NIHN1cHBvcnQgaW4gcHVzaCBtb2RlCgkqIHRlc3QvdXRmOGJvbS54bWwgcmVzdWx0L3V0Zjhib20ueG1sIHJlc3VsdC9ub2VudC91dGY4Ym9tLnhtbDoKCSAgYWRkZWQgYSBzcGVjaWZpYyB0ZXN0Y2FzZQoKV2VkIEp1biAyNyAxODozMzoxMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCAtLXB1c2ggcmVncmVzc2lvbiB0ZXN0cwoJKiBwYXJzZXJJbnRlcm5hbHMuYzogdGhlIFhNTCBwYXJzZXIgc2VnZmF1bHRlZCBpbiAtLXB1c2ggbW9kZQoKV2VkIEp1biAyNyAxMzowOTo1MSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogbW92ZWQgdGhlIHN5bWxpbmtzIGRldGVjdGlvbiB3aXRoaW4gYSBDVlMKCSAgY2hlY2ssIHRoaXMgaXMgbm90IHBvcnRhYmxlIGFuZCB3aWxsIGJlIHJlbW92ZWQgc29vbi4KCSogeHBhdGguYzogc21hbGwgY2xlYW51cC9zcGVlZHVwCgpUdWUgSnVuIDI2IDE4OjA1OjI2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluIGRvYy94bWwuaHRtbCBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDoKCSAgcmVsZWFzZSBvZiAyLjMuMTIKCSogcGFyc2VyLmM6IG1ha2UgYW4gZXJyb3IgbWVzc2FnZSBpZiB1bmtub3cgZW50aXRpZXMgaW4gYWxsIGNhc2VzCgpUdWUgSnVuIDI2IDA5OjQ2OjI5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdXJpLmM6IGZpeGVkIDIgdXJpIG5vcm1hbGl6YXRpb24gYnVncyBvbiAnLy8nIHJlZHVjdGlvbgoKTW9uIEp1biAyNSAxODowNjoyMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtOiBMYXN6bG8gUGV0ZXIgcG9pbnRlZCBvdXQgdGhhdAoJICBpbmNsdWRlcyB3ZXJlIGluc3RhbGxlZCBpbiB0aGUgd3JvbmcgZGlyCgpNb24gSnVuIDI1IDE3OjA3OjM3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL2h0bWwueG1sOiB3YXJuIGFnYWluc3Qgc2VuZGluZyBjb2RlIHRvIGV4aGliaXQgYnVncy4KClN1biBKdW4gMjQgMjM6MzE6NTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBwYXRjaCB0byB4bWxYUGF0aEZvcm1hdE51bWJlciBmb3IgdGhlIG9wdGltaXplciBvbgoJICBUcnU2NCBmcm9tIFRob21hcyBMZWl0bmVyCgpTdW4gSnVuIDI0IDE0OjA1OjU0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogQVVUSE9SUzogYWRkZWQgV2lsbGlhbSBhbmQgQmpvcm4KCSogaW5jbHVkZS9saWJ4bWwvKi5oICouYyBSRUFETUUgZG9jLyouaHRtbCBldGMuOiBjaGFuZ2VkIG9sZCBlbWFpbCB0bwoJICBkYW5pZWxAdmVpbGxhcmQuY29tIGhvcGVmdWxseSBJIHdvbid0IGhhdmUgdG8gZG8gdGhpcyBhZ2FpbgoJKiBkb2MvTWFrZWZpbGUuYW0gZG9jL2h0bWwvKi5odG1sOiBjbGVhbnVwIG1ha2VmaWxlLCBjaGVja2VkIHRoYXQKCSAgZG9jcyBjYW4gYmUgcmVidWlsdCBjbGVhbmx5IG5vdwoJKiBpbmNsdWRlL2xpYnhtbC94bWwqdmVyc2lvbi5oKjogcmVtb3ZlZCBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmgKCSAgZnJvbSBDVnMgaXQncyBnZW5lcmF0ZWQsIGFkZGVkIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oCgkgIGFsc28gZ2VuZXJhdGVkIGJ1dCB3aGljaCBzaG91bGQgY2hhbmdlIGZhciBsZXNzIGZyZXF1ZW50bHkuCgkqIGNhdGFsb2cuYyBuYW5vZnRwLmM6IG1hZGUgc3VyZSB0byBpbmNsdWRlIGxpYnhtbC5oIG5vdAoJICBsaWJ4bWwveG1sdmVyc2lvbi5oIGRpcmVjdGx5CgkqIGluY2x1ZGUvbGlieG1sLyouaDogaW5jbHVkZSB4bWx3aW4zMnZlcnNpb24uaCBpbnN0ZWFkIG9mIHhtbHZlcnNpb24uaAoJICB3aGVuIGNvbXBpbGluZyBvbiBXSU4zMiBhbmQgTVNDCgpTYXQgSnVuIDIzIDIzOjU0OjEyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS9NYWtlZmlsZS5hbSBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbSBjb25maWd1cmUuaW46CgkgIGZpeGVkIG1ha2UgZGlzdGNoZWNrIGFuZCByZWJ1aWxkaW5nIHRoZSBycG1zCgpTYXQgSnVuIDIzIDIwOjUwOjUzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBzaG91bGQgZmluaXNoIHRoZSBtaWdyYXRpb24gb2YgZXhwb3J0ZWQgaW5jbHVkZXMKCSAgaW50byBhIHJlYWwgaW5jbHVkZS9saWJ4bWwgaW4gQ1ZTLCBhdCBsZWFzdCBmb3IgQ1ZTIHVzZXJzLgoJKiByZW1vdmVkIHRoZSBleHBvcnRlZCBoZWFkZXJzLCBhZGRlZCBpbiBpbmNsdWRlL2xpYnhtbCAoYXMgd2VsbAoJICBhcyB4bWx2ZXJzaW9uLmguaW4pLgoKU2F0IEp1biAyMyAyMDozNzoxOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogZml4ZWQgdGhlIHdheSB0byBkZXRlY3Qgc3ltbGluawoKU2F0IEp1biAyMyAyMDozMDoxMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogdXBkYXRlZCwgaW5jbHVkZS9saWJ4bWwgaXMgbm93IGEgcmVhbCBDVlMgZGlyCgpTYXQgSnVuIDIzIDE5OjM2OjMxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL2xpYnhtbC1kb2MuZWw6IGEgbmV3IHZlcnNpb24gb2YgbGlieG1sLWRvYy5lbC4gVGhpcyBuZXcKCSAgdmVyc2lvbiB3b3JrcyB3aXRoIGJvdGggbGlieG1sMSBhbmQgbGlieG1sMiAoaXQgYXV0b2RldGVjdHMKCSAgdGhlIHByZWZpeCBvZiB0aGUgaHRtbC1maWxlcykgZnJvbSBGZWxpeCBOYXR0ZXIuCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlZCBkb2MgYWNjb3JkaW5nbHkKClNhdCBKdW4gMjMgMTg6MzA6MjggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCB0aGUgYnVnIGdlbmVyYXRpbmcgYSB0ZW1wbGF0ZSBsb29wIGluIGxpYnhzbHQKCSAgd2hlbiB1c2luZyBkb2Nib29rLXhzbC0xLjQsICogc2hvdWxkIGZpbHRlciBvdXQgZG9jdW1lbnQgbm9kZXMKCSogSEFDS0lORzogYWRkZWQgV2lsbGlhbQoJKiBUT0RPOiB1cGRhdGVkCgpGcmkgSnVuIDIyIDE4OjAyOjM3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL0ZBUS5odG1sOiBhZGRlZCBhIHdhcm5pbmcgYWJvdXQgZ2NjLTMuMAoJKiBkb2MveG1sLmh0bWw6IGFkZGVkIHJlZmVyZW5jZSB0byBnZG9tZTIgYW5kIHJlbW92ZWQgYSBjb25mdXNpbmcKCSAgc2VudGVuY2UKCkZyaSBKdW4gMjIgMTc6MDI6MTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWx2ZXJzaW9uLmg6IG9rYXkgdGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlLCBidXQgV2luZG93cwoJICB1c2VycyBuZWVkIGl0IGFuZCB0aGV5IGNhbid0IGdlbmVyYXRlIGl0LCBhbmQgSSB3YW50IENWUwoJICBXaW5kb3dzIHVzZXJzIC4uLgoJKiB3aW4zMi9saWJ4bWwyL2xpYnhtbDJfc28uZHNwOiBXaW5kb3dzIHByb2plY3QgZmlsZSBmb3IgCgkgIHRoZSBzaGFyZWQgbGliIHZlcnNpb24gb2YgbGlieG1sMgoJKiB3aW4zMi9saWJ4bWwyL2xpYnhtbDIuZGVmLnNyYzogYnVnICM1NjUyNyBzZXQgb2YgZXhwb3J0ZWQKCSAgcmVzb3VyY2VzIG5lZWRlZCBmb3IgbGlieHNsdC94c2x0cHJvYyBieSBZb24gRGVyZWsKCkZyaSBKdW4gMjIgMTY6Mzk6MzYgQ0VTVCAyMDAxIEJqb3JuIFJlZXNlIDxicmVlc2VAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoKCSogdHJpby5jOiBNU1ZDIGZpeCAocHJvdmlkZWQgYnkgSWdvciBabGF0a292aWMpCgkKRnJpIEp1biAyMiAxMjo0MjoxNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogYW5vdGhlciBzbWFsbCBmaXggZm9yIEFUVFJJQlVURV9VTlVTRUQKCkZyaSBKdW4gMjIgMTI6NDI6MTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IFlvbiBEZXJlayBwcm92aWRlZCBhIGZpcnN0IGZpeAoJICB0byBiZSBhYmxlIHRvIGNvbXBpbGUgbGlieHNsdC94c2x0cHJvYyBvbiBXaW5kb3dzCgpGcmkgSnVuIDIyIDAwOjA0OjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogYXR0ZW1wdCB0byB3b3JrIGFyb3VuZCB3aGF0IHNlZW1lZCBhIGdjYyBvcHRpbWl6ZXIKCSAgYnVnIHdoZW4gaGFuZGxpbmcgZmxvYXRzIG9uIGkzODYgaHR0cDovL3ZlaWxsYXJkLmNvbS9nY2MuYnVnCgkqIHRyZWUuYyBlbnRpdGllcy5jIGVuY29kaW5nLmM6IGRvaW5nIHNvbWUgY2xlYW51cHMgd2hpbGUKCSAgY2hhc2luZyBpdAoKVGh1IEp1biAyMSAxMzoxMzozNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtOiBjbGVhbnVwIHdoZW4gLS13aXRob3V0LWRlYnVnIGlzIHNwZWNpZmllZAoJKiB4aW5jbHVkZS5jIHhwYXRoLmMgeHBhdGhJbnRlcm5hbHMuaCB4cG9pbnRlci5jOiBjbGVhbnVwCgkgIHcuci50LiAtLXdpdGhvdXQtZGVidWcgYW5kIG90aGVyIGluY2x1ZGUgcG9pbnRzCgkqIGNhdGFsb2cuaCB0ZXN0Q2F0YWxvZy5jOiBhIGJpdCBvZiBjbGVhbnVwIGFuZCBwcmVwYXJlIGZvciBYTUwKCSAgQ2F0YWxvZ3MKCSogY29uZmlndXJlLmluIGVudGl0aWVzLmggdHJlZS5oIEhUTUxwYXJzZXIuYzogcmVtb3ZlZAoJICAtLXdpdGhvdXQtY29yYmEsIG1hZGUgdGhlIF9wcml2YXRlIGZpZWxkIG1hbmRhdG9yeQoKV2VkIEp1biAyMCAxOTozNzoyNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIGVuY29kaW5nLmM6IFNpbmNlIE5vdGVwYWQgb24gV2luMmsKCSAgb3V0cHV0cyBhIEJPTSBpbiBVVEY4LCBhbiBlcnJhdGEgaGFzIGJlZW4gaXNzdWVkIHRvIGF2b2lkIHRoZQoJICBwcm9ibGVtLCB0aGF0IHdhcyB0aGUgbW9zdCByZWFzb25hYmxlIHNvbHV0aW9uLi4uIEFkZCBzdXBwb3J0CgkgIGZvciBhIGxlYWRpbmcgVVRGOCBCT00gaW4gZW50aXRpZXMuCgpXZWQgSnVuIDIwIDE1OjM4OjU5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogZml4ZWQgYSBidWcgZm91bmQgd2hlbiBwb3N0IHZhbGlkYXRpbmcgYW4gZW50aXR5IHJlZgoJKiB4bWxsaW50LmM6IGFkZGVkIC0tbG9hZGR0ZCBhbmQgc2xpZ2x5IGNoYW5nZWQgLS1wb3N0dmFsaWQgdG8KCSAgYWN0aXZhdGUgaXQgdG9vCgpUdWUgSnVuIDE5IDIwOjAzOjQwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jIHhpbmNsdWRlLmMgeHBvaW50ZXIuYzogYnVnICM1NjQwMiBleHBvc2VkIGEgbnVtYmVyIG9mCgkgIHdlYWtuZXNzIGluIHRoZSBub2RlIGNvcHkgdGhlIFhQb2ludGVyIGFuZCB0aGUgWEluY2x1ZGUKCSAgaW1wbGVtZW50YXRpb25zLiBTZXJpb3VzIGNsZWFudXAuCgpUdWUgSnVuIDE5IDE0OjUwOjE4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW06IEtqYXJ0YW4gTWFyYWFzIHByb3ZpZGVkIGEgc21hbGwgcGF0Y2ggdG8KCSAgYWRkIHhtbDItY29uZmlnLmluIHRvIEVYVFJBX0RJU1QKClR1ZSBKdW4gMTkgMTM6MDQ6MTAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jIHRyZWUuYyBwYXJzZXJJbnRlcm5hbHMuYyBwYXJzZXIuYzogU3RlcGhhbiBLdWxvdwoJICBwcm92aWRlZCBhbm90aGVyIGZhaWxpbmcgY2FzZSBmb3VuZCBpbiBLREUsIHRoZSB3YXkgdGhlCgkgIGN0eHQtPnZjdHh0Lm5vZGVUYWIgd2FzIGFsbG9jYXRlZCBhbmQgZnJlZWQgY2hhbmdlZCBvdmVyCgkgIHRpbWUgYnV0IGl0IHdhc24ndCBjb21wbGV0ZWx5IGNsZWFuZWQgdXAuIFRoaXMgc2hvdWxkIGZpeCBpdC4KClN1biBKdW4gMTcgMTk6NTY6MzMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogU3RlcGhhbiBLdWxvdyBhbHNvIHJhaXNlZCB0aGUgZmFjdCB0aGF0IGxpbmUgbnVtYmVyCgkgIGNvdWxkIGdldCBtaXNjb3VudGVkIG1ha2luZyBkZWJ1ZyBoYXJkZXIsIGZpeGVkIHRoZSBwcm9ibGVtCgkgIGluIHhtbFBhcnNlQ2hhckRhdGEoKQoKU3VuIEp1biAxNyAxOToxNzoyNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IFN0ZXBoYW4gS3Vsb3cgcG9pbnRlZCBvdXQgYSBwcm9ibGVtIHdoZW4gdmFsaWRhdGluZwoJICBhbmQgdXNpbmcgYW4gZW1wdHkgZW50aXR5LCBmb3Jnb3QgYSAnYnJlYWsnIGluIGEgY2FzZS4KClN1biBKdW4gMTcgMTY6NDc6NDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbEhhc05zUHJvcCgpIGFjY29yZGluZ2x5IHRvIGJ1ZyAjNTU2ODMKCSogZG9jL3htbC5odG1sOiB1cGRhdGVkIHdpdGggMi4zLjExCgpTdW4gSnVuIDE3IDEyOjI0OjExIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogVE9ETzogdXBkYXRlZCBhZGRpbmcgY2xlYW51cCBvZiBnZW5lcmF0ZWQgZG9jCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyZWQgdG8gcmVsZWFzZSAyLjMuMTEKCSogeG1sbGludC5jOiBhZGRlZCAtLXZlcnNpb24gZm9yIGJ1ZyByZXBvcnRpbmcKCSogZG9jL2h0bWwvKi5odG1sOiByZWJ1aWx0IHRoZSBkb2MKClNhdCBKdW4gMTYgMjM6MjM6MzMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXJzdCBwYXJ0IG9mIHRoZSB3b3JrIG9uIHNlbGVjdGluZyBuYW1lc3BhY2UgdG8KCSAgZml4IGJ1ZyAjNTYxMTUgCgpTYXQgSnVuIDE2IDAwOjIwOjQ2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW0gZXhhbXBsZS9NYWtlZmlsZS5hbTogTGFzemxvIFBFVEVSIHByb3ZpZGVkIGEgZml4CgkgIHdoZW4gdXNpbmcgLWxpY29udgoJKiBUT0RPOiB1cGRhdGVkCgpGcmkgSnVuIDE1IDA3OjA4OjU3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuW2NoXTogbW9yZSB3b3JrIG9uIHRoZSBIVE1MIHNlcmlhbGl6YXRpb24gcm91dG5lcywKCSAgY2xlYW51cCwgZW5jb2Rpbmcgc3VwcG9ydC4KClRodSBKdW4gMTQgMTA6MzE6MTcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBUaG9tYXMgQnJveWVyIHN1Z2dlc3RlZCBhIGJldHRlciBwYXRjaCBmb3IgdGhlIC8gYXJnCgpUaHUgSnVuIDE0IDAxOjAxOjMwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogYnVnIGRldGVjdGVkIGJ5IEFua2ggd2hlbiAvIGlzIHVzZWQgYXMgYSBmdW5jdGlvbiBhcmcKCldlZCBKdW4gMTMgMjM6MDg6NDYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLltjaF0gSFRNTHRyZWUuYzogc3RvcmVkIHRoZSBpbmxpbmUvYmxvY2sgcHJvcGVydHkKCSAgb2YgZWxlbWVudCBhbmQgdXNlIGl0IHRvIGF2b2lkIG91dHB1dHRpbmcgZm9ybWF0dGluZyBzcGFjZXMgYXQKCSAgdGhlIHdyb25nIHBsYWNlLiBJbXBsZW1lbnRlZCB0aGUgZm9ybWF0IHBhcmFtZXRlciBmb3IgSFRNTCBzYXZlLgoJKiByZXN1bHQvSFRNTC9kb2MyLmh0bSByZXN1bHQvSFRNTC9kb2MzLmh0bSByZXN1bHQvSFRNTC9mcDQwLmh0bQoJICByZXN1bHQvSFRNTC9zY3JpcHQuaHRtbCByZXN1bHQvSFRNTC90ZXN0Mi5odG1sIHJlc3VsdC9IVE1ML3Rlc3QzLmh0bWwKCSAgcmVzdWx0L0hUTUwvd2lyZWQuaHRtbDogb2YgY291cnNlIHRoaXMgaW1wYWN0IHRoZSByZXN1bHQgb2YgYQoJICBudW1iZXIgb2YgSFRNTCB0ZXN0cwoKVGh1IEp1biAxNCAwOTo0OTowOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLltjaF06IHN0YXJ0ZWQgYXVnbWVudGluZyB0aGUgSFRNTCBzYXZlIEFQSSB3aXRoCgkgIGVuY29kaW5nIGFuZCBmb3JtYXR0aW5nIHBhcmFtZXRlcnMKCldlZCBKdW4gMTMgMDk6NDQ6MTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5oOiBjbGVhbnVwIGFuZCBzdGFydGVkIGV2YWx1YXRpbmcgdGhlIHdvcmsgbmVlZGVkIG9uCgkgIHJldmFtcGluZyB0aGUgSFRNTCBvdXRwdXQgY29kZQoKTW9uIEp1biAxMSAxOToyOTo0MCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIERPQ0JwYXJzZXIuYzogaGFuZGxpbmcgb2YgUElzIGFuZCA8P3NnbWwtZGVjbGFyYXRpb24gaW4gZW50aXRpZXMuCgpUdWUgSnVuIDEyIDA4OjQ2OjI4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogZml4ZWQgYnVnICM1NjA0OSwgZm9yZ290IG9uZSBjaGVjayBpbiB0aGUKCSAgdmFsaWRhdGlvbiByb3V0aW5lCgpUdWUgSnVuIDEyIDA4OjA5OjQ2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5bY2hdOiBncnJyIC4uLiBuYW1lc3BhY2UgaXMgYSBDKysgcmVzZXJ2ZWQga2V5d29yZAoKVHVlIEp1biAxMiAwNjoyOTozOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGxpYnhtbC5oOiBmaXhlZCBhbiBlcnJvciBpbiBsYXN0IGNvbW1pdAoJKiBkb2MvRkFRLmh0bWw6IGFkZGVkIGFuIGVudHJ5IGZvciBjb21waWxhdGlvbiBmcm9tIENWUwoKTW9uIEp1biAxMSAxMDowNzoyOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbHZlcnNpb24uaC5pbiBsaWJ4bWwuaDogQ3lnd2luIHBhdGNoZXMKCSogdHJlZS5jOiB4bWxGcmVlTm9kZUxpc3QgcGF0Y2ggc2ltaWxhciB0byB4bWxGcmVlTm9kZSBvbmUKCSogdHJlZS5oOiBjbGVhbnVwCgpTYXQgSnVuICA5IDE5OjE2OjAwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBwYXRjaGVkIHhtbEZyZWVOb2RlKCkgdG8gYXZvaWQgZnJlZWluZygpIGEgc3RhdGljCgkgIG1lbW9yeSBibG9jayBpbiBhIHN0cmFuZ2UgY2FzZSB3aGVyZSBsaWJ4bWwgaXMgbGlua2VkIHR3aWNlCgkgIGluIHRoZSBiaW5hcnkuCgpTYXQgSnVuICA5IDE4OjM5OjAzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogKGE/ICwgYj8gLCBjPyAsIC4uLiAsIHo/KSB3YXMgc3RvcmluZy9yZXN0YXVyaW5nCgkgIHN0YXRlIGZhciB0b28gb2Z0ZW4sIHNpbXBsZSBmaXggdXNlZCB0byBhdm9pZCBpdC4KClNhdCBKdW4gIDkgMTY6MTA6MzYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4aW5jbHVkZS5jOiBSYXBoYWVsIEhlcnR6b2cgaGFkIGEgdHJvdWJsZSB3aXRoIERURCBub2RlcwoJICBiZWluZyBwcm9jZXNzZWQsIGFwcGxpZWQgaGlzIHBhdGNoCgkqIHRyZWUuYzogZml4ZWQgYSBidWcgcmFpc2VkIGluIHhtbFN0YXRpY0NvcHlOb2RlTGlzdCgpCgpTYXQgSnVuICA5IDE1OjUwOjExIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogbmFub2Z0cC5jIG5hbm9odHRwLmMgdXJpLmMgaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBJZ29yICBabGF0a292aWMKCSAgcHJvdmlkZWQgZml4ZXMgdG8gY29tcGlsZSBvbiBNU0NDIGFnYWluCgkqIHdpbjMyL2xpYnhtbDIvbGlieG1sMi5kZWYuc3JjIHdpbjMyL2xpYnhtbDIvbGlieG1sMiouZHNwOiBoZQoJICBhbHNvIHByb3ZpZGVkIGFuIHVwZGF0ZSBmb3IgdGhlIHByb2plY3QgZmlsZXMuCgpUaHUgSnVuICA3IDIxOjUyOjEwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBhcHBsaWVkIFN0ZXZlIFRpbm5leSBwYXRjaCB0byB4bWxOZXdOc1Byb3AgdG8gZml4CgkgIGJ1ZyAjNTU4MTAKClRodSBKdW4gIDcgMjE6Mjk6MzkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbEdldE5zUHJvcCgpIHRvIGNsb3NlIGJ1ZyAjNTU2ODMKCSAgTm90ZSB0aGlzIHJlcXVpcmVzIGxpYnhzbHQgdG8gdXNlIGl0J3Mgb3duIGZ1bmN0aW9uIGluc3RlYWQuCgpUaHUgSnVuICA3IDE4OjA2OjM0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuYzogd2hlbiBpbiBhIHByZSBlbGVtZW50IG5vIGZvcm1hdHRpbmcgc3BhY2Ugc2hvdWxkCgkgIGJlIGFkZGVkLgoJKiB0ZXN0L0hUTUwvcHJlLmh0bWwgcmVzdWx0L0hUTUwvcHJlLmh0bWwqOiBhZGRlZCBhIHJlZ3Jlc3Npb24gdGVzdAoKVGh1IEp1biAgNyAxNzoyOTozOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogYWRkZWQgdGVzdHMgZm9yIHNpZ25hbCgpIGFuZCBzaWduYWwuaAoKRnJpIEp1biAgOCAxMDoxNzoxNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHJvYmVydCBwb2ludGVkIG91dCB4bWxYUGF0aE5JTkYgd2FzIG5vdCBpbml0aWFsaXplZAoKRnJpIEp1biAgOCAxMDowMTo0NSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy9saWJ4bWwtZG9jLmVsOiBGZWxpeCBOYXR0ZXIgcHJvdmlkZWQgYSBuZXcgdmVyc2lvbiBmb3IKCSAgbGlieG1sMgoKRnJpIEp1biAgOCAwNzoyMDo0NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLmM6IHdoZW4gaW4gYSBwcmUgZWxlbWVudCBubyBmb3JtYXR0aW5nIHNwYWNlIHNob3VsZAoJICBiZSBhZGRlZC4KCldlZCBKdW4gIDYgMTg6MDc6MzYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGFkZCAtbWllZWUgdG8gQ0ZMQUdTIHdoZW4gY29tcGlsaW5nIG9uIExpbnV4L2FscGhhCgpUaHUgSnVuICA3IDA2OjQ0OjAxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogRE9DQnBhcnNlci5jOiBpbXBsZW1lbnRlZCB0aGUgPD9zZ21sLWRlY2xhcmF0aW9uIGVuY29kaW5nPSJ4eHgiPz4KCSAgaGFjawoJKiB0cmVlLltjaF06IGFkZGVkIHhtbEhhc05zUHJvcCBhcyBzdWdnZXN0ZWQgaW4gYnVnIHJlcG9ydCAjNTU2NTMgCgkqIHVyaS5jOiBmaXhlZCBhIHdhcm5pbmcKClR1ZSBKdW4gIDUgMjI6NTQ6MjEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5jOiB0cnlpbmcgdG8gY2xvc2UgYnVnICM1NTc3MiBlc2NhcGluZyBpbiBzY3JpcHQKCSAgZWxlbWVudHMKCSogZG9jL3htbC5odG1sOiBzdWdnZXN0IHRvIHNlbmQgbWFpbCB0byB0aGUgbGlzdAoKVHVlIEp1biAgNSAxOToxMTowMiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGVycm9yLmM6IGF0dGVtcHQgdG8gZml4IHRoZSB4bWxHZXRWYXJTdHIgYnJlYWthZ2Ugb25jZSBhbmQgZm9yCgkgIGdvb2QuIFVzZSBhIG1hY3JvIGFuZCBiYXNlZCBvbiB0aGUgc29sdXRpb24gcHJvdmlkZWQgaW4gCgkgIHZzbnByaW50ZiBtYW51YWwgcGFnZSBmcm9tIEdOVS4KClR1ZSBKdW4gIDUgMTQ6NDY6MTAgQ0VTVCAyMDAxIEJqb3JuIFJlZXNlIDxicmVlc2VAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoKCSogZXJyb3IuYzogV29ya2Fyb3VuZCBmb3Igbm9uLXByZXNlcnZpbmcgdmFyaWFkaWMgbGlzdC4KCSogdHJpby5jIHRyaW8uaCB0cmlvcC5oIHN0cmlvLmMgc3RyaW8uaDogVXBncmFkZWQgdG8gdHJpbyBiYXNlbGluZSAxLjQKCQpTYXQgSnVuICAyIDA2OjEyOjMzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL3htbC5odG1sOiBhZGRlZCAyLjMuMTAgcmVsZWFzZQoKRnJpIEp1biAgMSAxMToyNzoxMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogcmVsZWFzaW5nIDIuMy4xMAoKVGh1IE1heSAzMSAyMDo0MjozOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbElPLmM6IEdhcnkgUGVubmluZ3RvbiBzcG90dGVkIGEgZmV3IHRyb3VibGVzIHdpdGggZmlsZTovLy8KClRodSBNYXkgMzEgMjA6MTg6NTkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBlbmNvZGluZy5jOiBSb2JlcnQgQ29sbGlucyBwcm92aWRlZCBhIHBhdGNoIHRvIGFkZCB0aGUKCSAgIlVTLUFTQ0lJIiBlbmNvZGluZyBhbGlhcwoKV2VkIE1heSAzMCAyMToxMjo0NSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmMgZW5jb2RpbmcuW2NoXTogV2lsbGlhbSBNLiBCcmFjayBwcm92aWRlZCBhIHNldCBvZiBVVEY4CgkgIHN0cmluZyBvcmllbnRlZCBmdW5jdGlvbnMgYW5kIHN0YXJ0ZWQgY2xlYW5pbmcgdGhlIHJlbGF0ZWQgYXJlYXMKCSAgaW4geHBhdGguYyB3aGljaCBuZWVkZWQgZml4aW5nIGluIHRoaXMgcmVzcGVjdAoKV2VkIE1heSAzMCAyMDozMDo0NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBKYXJvc2xhdyBLb2xha293c2tpIHRvIGNsb3NlIGJ1ZwoJICAjNTUzODAKCSogdHJlZS5jOiBwYXRjaCB0byB4bWxOb2RlR2V0Q29udGVudCgpIHRvIGdldCBDREFUQSBzZWN0aW9uIGNvbnRlbnQKCk1vbiBNYXkgMjggMTI6NTY6MjkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBUT0RPOiB1cGRhdGVkCgkqIG5hbm9odHRwLltjaF0gOiBzdGFydGVkIGFkZGluZyBBUElzIHRvIGdldCB0aGUgcmVkaXJlY3RlZCBVUkwKCSAgd2hlbiB0aGlzIG9jY3VycyAobmVlZGVkIGZvciBmdXJ0aGVyIGJhc2UgY29tcHV0YXRpb24KCSogdHJlZS5oOiBjbGVhbnVwCgkqIGVuY29kaW5nLmM6IGNsZWFudXAKCSogU0FYLmM6IG1pbm9yIGNoYW5nZSBhcm91bmQgY3R4dC0+bG9hZHN1YnNldAoKRnJpIE1heSAyNSAwOTozNjoyNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtIGluY2x1ZGUvTWFrZWZpbGUuYW06IHNtYWxsIGNoYW5nZSB0byBoYXZlCgkgIGluY2x1ZGUvbGlieG1sIHJlYnVpbHQgaWYgd29ya2luZyBmcm9tIENWUy4KCSogdXJpLmM6IGFwcGxpZWQgYW5vdGhlciBwYXRjaCBmcm9tIENhcmwgRG91Z2xhcyBmb3IgVVJJIGVzY2FwaW5nLAoJICB0aGlzIHNob3VsZCBjbG9zZSBidWcgIzUxODc2CgpXZWQgTWF5IDIzIDE1OjQwOjI3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeGluY2x1ZGUuYzogZml4ZWQgWEluY2x1ZGUgcmVjdXJzaXZlIGJlaGF2aW91ciBidWcgIzU0Njc4CgkqIHJlc3VsdC9YSW5jbHVkZS9yZWN1cnNpdmUueG1sIHRlc3QvWEluY2x1ZGUvZG9jcy9yZWN1cnNpdmUueG1sCgkgIHRlc3QvWEluY2x1ZGUvZW50cy9pbmMudHh0IHRlc3QvWEluY2x1ZGUvZW50cy9zdWItaW5jLmVudDoKCSAgYWRkZWQgc3BlY2lmaWMgcmVncmVzc2lvbiB0ZXN0CgkqIHBhcnNlci5oOiBwcmVwYXJpbmcgZm9yIHRoZSBYU0xUIG1vZGUgd2hlcmUgRFREIGluaGVyaXRlZAoJICBhdHRyaWJ1dGVzIGFyZSBhZGRlZCB0byB0aGUgdHJlZS4KCldlZCBNYXkgMjMgMTM6NTk6MTkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4aW5jbHVkZS5bY2hdOiBVcGRhdGVkIHRoZSBuYW1lc3BhY2UgZm9yIHRoZSBMYXN0IENhbGwgdmVyc2lvbgoJKiByZXN1bHQvWEluY2x1ZGUvaW5jbHVkZSB0ZXN0L1hJbmNsdWRlL2luY2x1ZGU6IHVwZGF0ZWQgdGhlCgkgIHRlc3RzdWl0ZSBhY2NvcmRpbmdseQoKV2VkIE1heSAyMyAxMjoyNzo0NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHVyaS5bY2hdOiBhcHBsaWVkIGEgcGF0Y2ggZnJvbSBDYXJsIERvdWdsYXMgZm9yIFVSSSBlc2NhcGluZywKCSAgcmVsYXRlZCB0byBidWcgIzUxODc2CgpUdWUgTWF5IDIyIDE4OjQ2OjU2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBmaXhlZCBhIGdyb3NzIG1pc3Rha2UgaW4gYmFzZSBjb21wdXRhdGlvbiwgeG1sOmJhc2UgaXMKCSAgbm90IGNvbXBsZXRlbHkgY29ycmVjdCB5ZXQgKG5lZWQgY2FzY2FkZSkuCgkqIHhwYXRoLltjaF06IGFkZGVkIHRoZSBmZXcgdGhpbmdzIG5lZWRlZCB0byBmaW5kIGEgZnVuY3Rpb24gbmFtZQoJICBhbmQgVVJJIGZyb20gdGhlIFhQYXRoIGNvbnRleHQgd2hlbiBpdCBpcyBjYWxsZWQuCgpUdWUgTWF5IDIyIDE3OjAwOjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY2F0YWxvZy5bY2hdOiBmaXhlcyBhbmQgYWRkIHhtbExvYWRDYXRhbG9ncygpCgkqIERPQ0JwYXJzZXIuYzogc21hbGwgY2xlYW51cAoJKiB4bWxsaW50LmM6IGFkZGVkIGEgLS1jYXRhbG9ncyBvcHRpb24gdG8gbG9hZCBjYXRhbG9ncyBmcm9tCgkgICRTR01MX0NBVEFMT0dfRklMRVMKCSogdHJlZS5jOiBjbGVhbnVwCgkqIGNvbmZpZ3VyZS5pbjogaWNvbnYgbGlicmFyeSBmaXh1cCwgSUNPTlZfTElCUyAKCk1vbiBNYXkgMjEgMTY6MDU6MjIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjYXRhbG9nLmM6IGhhbmRsaW5nIG9mIENBVEFMT0cgZW50cmllcy4gZGV0ZWN0aW9uIG9mIHJlY3Vyc2lvbiwKCSAgYW5kIGEgZmV3IGJ1Z2ZpeGVzCgkqIHhwYXRoLmM6IGZpeGluZyBidWcgIzU0OTUxIFFOQU1FIHdpdGggbm8gcHJlZml4IHNob3VsZCBub3QgbWF0Y2gKCSAgYWdhaW5zdCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UKCk1vbiBNYXkgMjEgMTA6MTQ6MDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBKb2UgT3J0b24gcmVwb3J0ZWQgYSBidWcgZm91bmQgd2l0aCBJUkl4IGNvbXBpbGVyLgoKU3VuIE1heSAyMCAxNToxNTo0NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBmaXhlZCBwcm9wYWdhdGlvbiBjb250ZXh0IGluZm8gd2hlbiBwYXJzaW5nIGFuCgkgIGV4dGVybmFsIGVudGl0eS4KCSogZG9jL2h0bWwvKi5odG1sOiByZWdlbmVyYXRlZCBhIGNvdXBsZSBvZiBkb2NzCgpTYXQgTWF5IDE5IDE3OjExOjE1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL3htbC5odG1sOiB1cGRhdGUgd2l0aCAyLjMuOSBpbmZvcm1hdGlvbnMKClNhdCBNYXkgMTkgMTY6NTA6NDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5oIGRlYnVnWE1MLmggcGFyc2VySW50ZXJuYWxzLmggdHJlZS5oIHZhbGlkLmMKCSAgeG1sdmVyc2lvbi5oLmluIHhwYXRoSW50ZXJuYWxzLmggeHBhdGguaDogc29tZSBjbGVhbnVwIGZvciBndGstZG9jCgkqIGRvYy9odG1sLyogOiByZWJ1aWx0IHRoZSBkb2NzCgkqIHZhbGlkLmM6IHNtYWxsIHBhdGNoIHdoaWNoIG1heSBpbXByb3ZlIHNvbWUgY2FzZSB3aGVuCgkgIHZhbGlkYXRpbmcuCgpTYXQgTWF5IDE5IDE1OjIwOjAzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jOiBDbG9zZWQgYnVnICM1NDg5MQoJKiByZXN1bHQvSFRNTC9jZl8xMjguaHRtbCogdGVzdC9IVE1ML2NmXzEyOC5odG1sOiBhZGRlZCB0aGUgdGVzdAoJICB0byB0aGUgc3VpdGUKClRodSBNYXkgMTcgMTQ6MTU6MDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBlbmNvZGluZy5oIGhhc2guYyBuYW5vZnRwLmggcGFyc2VyLmggdHJlZS5oIHVyaS5oIHhsaW5rLmggeHBvaW50ZXIuYzoKCSAgYXBwbGllZCBhIGRvY3VtZW50YXRpb24gcGF0Y2ggZnJvbSBMb3RSIGFuZCBmaWxsZWQgaW4gYSBmZXcgbWlzc2luZwoJICBkZXNjcmlwdGlvbnMKCldlZCBNYXkgMTYgMjM6MDI6NDEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jIHRyZWUuYyBwYXJzZXIuYzogc3BlZWQgb3B0aW1pemF0aW9ucyBhdCB0aGUgcGFyc2VyIGxldmVsCgkgIGRvY3VtZW50IHRyZWUgZnJlZWluZyBhbmQgeHBhdGggZXZhbHVhdGlvbgoKV2VkIE1heSAxNiAxMjo1NTo0OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jIHBhcnNlci5oIHBhcnNlckludGVybmFscy5oOiBmaXhlZCBhIGNvdXBsZSBvZgoJICBpbnRlcmZhY2VzIGZvciBoYW5kbGluZyBtZW1vcnkgYnVmZmVyIGlucHV0IHRvIGNvbnN0IGNoYXIgKgoJICB1cG9uIHN1Z2dlc3Rpb24gb2YgSmFtZXNILgoKVHVlIE1heSAxNSAxNzoyMjoyNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogTG9UUiBzZW50IGEgcGF0Y2ggZml4aW5nIHRoZSBwcmV2aW91cyBjb21taXQgCgpUdWUgTWF5IDE1IDE0OjQwOjA0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiB0cnlpbmcgdG8gZGVhbCBhZ2FpbiB3aXRoIHRoZSBzdG9vcGlkIC1SIGxpbmtpbmcKCSAgZmxhZyBvZiBTb2xhcmlzCgpUdWUgTWF5IDE1IDEyOjQ5OjUwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguaDogdHdvIG5vZGVzZXQgYWNjZXNzIG1hY3JvcyBmcm9tIFRob21hcyBCcm95ZXIKClR1ZSBNYXkgMTUgMTE6NDI6MzkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jIHhwYXRoLmggeHBhdGhJbnRlcm5hbHMuaDogYXBwbHkgYW4gWFBhdGggQVBJIGNsZWFudXAKCSAgcGF0Y2ggZnJvbSBUaG9tYXMgQnJveWVyCgpUdWUgTWF5IDE1IDEwOjUyOjE5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYyB0ZXN0L1ZDTS92MlszNF0ueG1sOiBGaXhlZCBidWcgIzU0NjMxIGFkZGVkIHNwZWNpZmljIHRlc3QKCSAgY2FzZQoJKiBJTlNUQUxMOiB3YXMgZW1wdHkgYWRkZWQgc3R1ZmYgZnJvbSB0aGUgRkFRCgpGcmkgTWF5IDExIDE5OjM3OjMwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5bY2hdOiBmaXhpbmcgYnVnICM1NDQ0NiwgYnkgY2xlYW5pbmcgc29tZSBidWdzIGluIHRoZQoJICBhdHRyaWJ1dGVzIGhhbmRsaW5nIGFuZCAjNTQ0MzMgYnkgYWRkaW5nIHhtbFVuc2V0UHJvcCgpCgkgIGFuZCB4bWxVbnNldE5zUHJvcCgpCgpGcmkgTWF5IDExIDE2OjA3OjEzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jOiBQYXRjaCBmcm9tIEpvbmFzIEJvcmdzdHL2bQoJKGh0bWxHZXRFbmRQcmlvcml0eSk6IE5ldyBmdW5jdGlvbiwgcmV0dXJucyAKCXRoZSBwcmlvcml0eSBvZiBhIGNlcnRhaW4gZWxlbWVudC4KCShodG1sQXV0b0Nsb3NlT25DbG9zZSk6IE9ubHkgY2xvc2UgaW5saW5lIGVsZW1lbnRzIGlmIHRoZXkgCglhbGwgaGF2ZSBsb3dlciBvciBlcXVhbCBwcmlvcml0eS4KCSogcmVzdWx0L0hUTUw6IHRoaXMgb2YgY291cnNlIGNoYW5nZWQgYSBudW1iZXIgb2YgdGVzdHMgcmVzdWx0cy4KClRodSBNYXkgMTAgMTc6MzA6MjIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxJTy5jIGNhdGFsb2cuYzogcGx1Z2dlZCBpbiB0aGUgZGVmYXVsdCBjYXRhbG9nIHJlc29sdXRpb24KCSogZG9jL2dub21lLXhtbC5zZ21sOiBsaW5rZWQgaW4gdGhlIERvY2Jvb2sgcGFyc2VyIGFuZCBjYXRhbG9nCgkgIGRvY3VtZW50YXRpb25zCgkqIGRvYy9odG1sL2xpYnhtbC0qLmh0bWw6IHJlYnVpbGQgYWRkZWQgdGhlIG1pc3Npbmcgb25lcyB0byBDVlMKClRodSBNYXkgMTAgMTY6MTQ6MzYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbSB4bWx2ZXJzaW9uLmguaW4gY29uZmlndXJlLmluIGluY2x1ZGUvTWFrZWZpbGUuYW06CgkgIGludGVncmF0aW5nIGNhdGFsb2dzCgkqIGNhdGFsb2cuW2NoXSB0ZXN0Q2F0YWxvZy5jOiBhZGRpbmcgYSBzbWFsbCBjYXRhbG8gQVBJCgkgIChvbmx5IFNHTUwgY2F0YWxvZyBzdXBwb3J0KS4KCSogcGFyc2VyLmM6IHJlc3RhdXJlZCB4bWxLZWVwQmxhbmtzRGVmYXVsdCgwKSBBUEkKCldlZCBNYXkgIDkgMTI6NTA6MTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IHpiQGJpc3AuY29tIHJlcG9ydGVkIGFuIGVycm9yIGluIHhtbE5vZGVHZXRMYW5nKCkKClR1ZSBNYXkgIDggMTI6MzE6NDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogYWRkZWQgeG1sUGFyc2VFeHRlcm5hbEVudGl0eVByaXZhdGUoKSB0byBhbGxvdwoJICBwcm9wYWdhdGlvbiBvZiBjdHh0LT5fcHJpdmF0ZSB3aGVuIHBhcnNpbmcgZXh0ZXJuYWwgZW50aXRpZXMKClR1ZSBNYXkgIDggMTA6MjY6MjIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5jOiBmaXhlZCB0aGUgYnVnIHJlcG9ydGVkIGJ5IEJqb3JuIGluIGh0bWxOb2RlRHVtcAoKVHVlIE1heSAgOCAwOTozMDoxMiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogZml4ZWQgYSBzbWFsbCBwb3J0YWJpbGl0eSBwcm9ibGVtIHdpdGggQU1fQ09ORElUSU9OQUwKCk1vbiBNYXkgIDcgMjI6NDQ6NDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiB3YXJuIHdoZW4gaW5kZXRlcm1pbmlzdCBjb250ZW50IG1vZGVsIGlzIGRldGVjdGVkCgkqIHJlc3VsdC9WQy9FbGVtZW50VmFsaWQ4OiB0aGlzIGFkZHMgYSBtZXNzYWdlCgkqIE1ha2VmaWxlLmFtOiBhZGQgLS1ub3ZhbGlkIGZvciBWQ00gdGVzdHMKCSogcGFyc2VySW50ZXJuYWxzLmM6IGFkZGVkIGEgY2FsbCB0byBJbml0IG1lbW9yeSAKCkZyaSBNYXkgIDQgMTk6NTE6MTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIGh0bWxOZXdEb2MgU1lTVEVNIGFuZCBQVUJMSUMgSUQgaW52ZXJzaW9uCgkgIHdoZW4gYm90aCBwYXJhbWV0ZXJzIGFyZSBOVUxMLgoKRnJpIE1heSAgNCAxNzoxOTozOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IGFwcGxpZWQgc21hbGwgcGF0Y2ggZnJvbSBHYXJ5IFBlbm5pbmd0b24sIHJlaW5kZW50ZWQKCSAgc29tZSBwYXJ0IG9mIHRoZSBjb2RlLgoKVGh1IE1heSAgMyAxMzoxMDo0MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbiBkb2MveG1sLmh0bWwgZG9jL2h0bWwvKjogcHJlcGFyaW5nIGZvciAyLjMuOAoJICByZWxlYXNlLCB1cGRhdGVkIGFuZCByZWdlbmVyYXRlZCB0aGUgZG9jcwoKVGh1IE1heSAgMyAxMjo0Nzo0NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmMgcmVzdWx0L1hQYXRoL2V4cHIvZmxvYXRzIDogY2xhcmlmaWVkIGFuZCBjbGVhbnVwCgkgIHByaW50aW5nIG9mIGFibm9ybWFsIGZsb2F0cyBpbiB0ZXN0cy4KClRodSBNYXkgIDMgMTA6MjU6MTkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmM6IHRyeWluZyB0byBmaXggdGhlIHByb2JsZW0gcmVwb3J0ZWQgYnkgSm9uYXMgQm9yZ3N0cvZtCgkqIHJlc3VsdHMvSFRNTC8gOiBhIGZldyBjaGFuZ2VzIGluIHRoZSBvdXRwdXQgb2YgdGhlIEhUTUwgdGVzdHMgYXMKCSAgYSByZXN1bHQuCgkqIGNvbmZpZ3VyZS5pbjogdHlpbmcgdG8gZml4IC1saWNvbnYgd2hlcmUgbmVlZGVkCgpXZWQgTWF5ICAyIDE5OjEwOjI2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW06IGZpeGVkIGEgc3R1cGlkIGVycm9yCgpXZWQgTWF5ICAyIDE4OjM5OjM5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluIE1ha2VmaWxlLmFtOiBtYWtlIHRoZSBpbmNsdXNpb24gb2YgdGhlIHRyaW8KCSAgbW9kdWxlcyBpbiB0aGUgbGlicmFyeSBjb25kaXRpb25hbAoKV2VkIE1heSAgMiAxNDozOTo1NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIERPQ0JwYXJzZXIuYzogcGF0Y2hlIGZyb20gIEzhc3ps8yBLb3bhY3MsIGZpeGVkIGVudGl0aWVzIHJlZnMKCSAgaW4gYXR0cmlidXRlcyBoYW5kbGluZwoKV2VkIE1heSAgMiAxMjo1NjowNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbElPLmM6IEJqb3JuIFJlZXNlIHByb3ZpZGVkIGEgZml4IGZvciBhIHByb2JsZW0gb24gYnVmZmVyCgkgZmx1c2hpbmcKCk1vbiBBcHIgMzAgMjI6Mjk6MzQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXggb2YgYW4gWFNMVCBuYW1lc3BhY2UgYnVnIHJlcG9ydGVkIG9uIHRoZSBsaXN0CgkgIGdlbmVyYWwvYnVnLTgtCgpNb24gQXByIDMwIDE5OjQyOjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogc3RyaW8uaCB0cmlvLmM6IERhbiBNY05pY2hvbCBzdWdnZXN0ZWQgYSBjb3VwbGUgb2Ygc21hbGwKCSAgZml4ZXMgZm9yIEFJWCA0LjMuMyB1c2luZyBWaXN1YWwgQWdlIDUuMC4yIGNvbXBpbGVyCgpNb24gQXByIDMwIDEzOjQ0OjQ4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jIHBhcnNlci5jIGVuY29kaW5nLmM6IHNwZW50IGEgYml0IG1vcmUgdGltZSBsb29raW5nCgkgIGF0IHRoZSBwYXJzaW5nIHNwZWVkIGFuZCBET00gaGFuZGxpbmcuIEFkZGVkIGEgZmV3IG1vcmUKCSAgc3BlZWR1cHMuCgpTdW4gQXByIDI5IDIxOjUzOjQ3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IHNtYWxsIGJ1dCBlZmZlY3RpdmUgcGFyc2luZyBzcGVlZCBpbXByb3ZlbWVudAoKU3VuIEFwciAyOSAxOTowMjoxMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogZGVmYXVsdCBvbiB0aGUgRG9jQm9vayBwYXJzZXIgaW5jbHVzaW9uIChmb3IgR25vbWUpCgkqIERPQ0JwYXJzZXIuaDogZml4ZWQgYSBoZWFkZXIgcmVmZXJlbmNlCgpTYXQgQXByIDI4IDE5OjAwOjM5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluIHhwYXRoLmM6IGFwcGxpZWQgQmpvcm4gcGF0Y2hlcyBmb3IgRlBFIG9uIHRoZQoJICBhbHBoYQoKU2F0IEFwciAyOCAxODo1NDoyOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuW2NoXSB4bWxJTy5oOiBhcHBsaWVkIHBhdGNoIGZyb20gSm9lIE1jQWxlcm5leSB0byBhZGQKCSAgeG1sU2F2ZUZvcm1hdEZpbGVUbygpCgpTYXQgQXByIDI4IDE2OjMzOjA1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogc2ltcGxlIGFuZCBlZmZpY2llbnQgb3B0aW1pemF0aW9uLCBYUGF0aCBmdW5jdGlvbnMKCSAgYXdheXMgYmluZCB0byB0aGUgc2FtZSBjb2RlLCBjYWNoZSB0aGlzCgkqIFRPRE86IHVwZGF0ZWQgKGJ5IHNheWluZyBzb21lIGlzIG9ic29sZXRlKQoKU2F0IEFwciAyOCAxNDoyMzozMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IG1vcmUgY2xlYW51cCB3b3JrIG9uIFhQYXRoIG5hbWUgcGFyc2luZyByb3V0aW5lcwoKRnJpIEFwciAyNyAxOTowNjoxMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlckludGVybmFscy5jIHhwYXRoLltjaF06IHNvbWUgVVRGOCBjbGVhbnVwIG9uCgkgIHhtbFhQYXRoUGFyc2VOYW1lCgkqIHhwYXRoLmM6IElnb3IgWmxhdGtvdmljIHN1Z2dlc3RlZCBhIGNoYW5nZSBmb3IgTkFOIGFuZCBNU0MKCSogZGVidWdYTUwuYzogYXZvaWQgY29tcGlsYXRpb24gcHJvYmxlbXMgaWYgY29tcGlsaW5nIHdpdGhvdXQKCSAgSFRNTCBzdXBwb3J0LCBJZ29yIFpsYXRrb3ZpYwoJKiB3aW4zMi9saWJ4bWwyL2xpYnhtbDIuZGVmLnNyYzogYmVpbmcgYWJsZSB0byBjb21waWxlIHdpdGhvdXQKCSAgWFBhdGggb24gV2luZG93cwoKVGh1IEFwciAyNiAyMjo1MzowMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGxpYnhtbC5tNDogeWV0IGFub3RoZXIgcGF0Y2ggZnJvbSBUb3NoaW8gS3VyYXRvbWkKClRodSBBcHIgMjYgMjE6Mjc6NDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBsaWJ4bWwubTQgbGlieG1sMi1zcGVjLmluOiBuZXcgcGF0Y2hlcyBmcm9tIFRvc2hpbyBLdXJhdG9taQoKVGh1IEFwciAyNiAyMDo1Mzo0OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuW2NoXTogYWRkZWQgeG1sU2F2ZUZvcm1hdEZpbGUgaW50ZXJmYWNlIGZvciBzYXZpbmcKCSAgYW5kIGluZGVudGluZyBhIGZpbGUuCgpUaHUgQXByIDI2IDE2OjM1OjUzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgYnVnICM1MzY4OSByZWxhdGVkIHRvIHByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24oKQoKVGh1IEFwciAyNiAxMjo1Nzo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIERPQ0JwYXJzZXIuYzogcGF0Y2hlIGZyb20gIEzhc3ps8yBLb3bhY3MKClRodSBBcHIgMjYgMTE6MzE6NTQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogYXBwbGllZCBmaXhlcyBmcm9tIENocmlzdGlhbiBHbGFobiBidWcgcmVwb3J0ICM1MzM5MQoKVGh1IEFwciAyNiAxMToxNDo1NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGVycm9yLmM6IEplYW4gRnJhbudvaXMgTGVjb210ZSBwcm92aWRlZCBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uCgkgIGFuZCBhIGZpeCB0byBidWcgIzUzNTM3CgpUaHUgQXByIDI2IDA5OjQyOjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogbGlieG1sLm00OiBhZGRlZCBBTV9QQVRIX1hNTDIgcHJvdmlkZWQgYnkgVG9zaGlvIEt1cmF0b21pCgpXZWQgQXByIDI1IDIxOjA1OjMxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogRE9DQnBhcnNlci5jIFNBWC5jOiBhIGJpdCBtb3JlIHdvcmsgb24gZW50aXRpZXMgcHJvY2Vzc2luZy4KCSAgU3RpbGwgTmVlZCB0byBjbGVhbnVwIFhNTCBvdXRwdXQgYW5kIHJlZmVyZW5jZXMgaW4gYXR0cmlidXRlcwoKV2VkIEFwciAyNSAxNzo1MjoyNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIERPQ0JwYXJzZXIuYyBpbmNsdWRlL01ha2VmaWxlLmFtOiB0d28gcGF0Y2hlcyBmcm9tICBM4XN6bPMgS2924WNzCgpXZWQgQXByIDI1IDE0OjU2OjI2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiB0cnlpbmcgdG8gZml4ICM1MzU3NCwgbm90IGNvbXBsZXRlbHkgY29tcGxldGUsCgkgIEkgd291bGQgbGlrZSB4bWxsaW50IC0tY29weSAtLWRlYnVnIHRlc3QvZW50MSBhbmQKCSAgeG1sbGludCAtLWRlYnVnIHRlc3QvZW50MSB0byBzaG93IHRoZSBzYW1lIHJlc3VsdC4KCSogeHBhdGguYzogZml4IGEgYnVnIHdoZW4gdHJ5aW5nIHRvIHNvcnQgbmFtZXNwYWNlIG5vZGVzCgpXZWQgQXByIDI1IDEyOjI4OjU3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuYzogcmVhbCBmaXggZm9yICAjNTM0MDIKClR1ZSBBcHIgMjQgMTc6MzY6MzUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5jIEhUTUx0cmVlLmggOiBjbG9zaW5nICM1MzQwMiBpLmUuIG91dHB1dCBvZgoJICBQSXMgd2hlbiB1c2luZyB4c2w6b3V0cHV0CgkqIHZhbGlkLmM6IGNsb3NpbmcgIzUzNTM3IHNvbWUgY2FzZSBnZW5lcmF0ZSBzZWdmYXVsdHMgaWYgdGhlcmUKCSAgaXMgdmFsaWRpdHkgZXJyb3JzCgpUdWUgQXByIDI0IDE1OjE5OjUzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogU0FYLmMgdGVzdERvY2Jvb2suYyBET0NCcGFyc2VyLmM6IG1vcmUgd29yayBvbiB0aGUgc3VwcG9ydAoJICBvZiBleHRlcm5hbCBwYXJzZWQgZW50aXRpZXMsIGFkZGVkIC0tbm9lbnQgdG8gdGVzdERvY2Jvb2sKCSogdmFsaWQuYzogR2FycnkgUGVubmluZ3RvbiBmb3VuZCBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlCgkgIGFjY2VzcyBpbiB4bWxWYWxpZGF0ZUVsZW1lbnRDb250ZW50KCkKClR1ZSBBcHIgMjQgMTQ6NDE6MjUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmMgOiBIVE1MIHBhcnNpbmcgc3RpbGwgc3Vja3MgLi4uIHRyeWluZyB0byBkZWFsCgkgIHdpdGggbWFkbmVzcwoJKiByZXN1bHQvSFRNTC8gOiB0aGlzIG1vZGlmaWVkIHRoZSByZXN1bHQgb2YgdGhlIHJlZ3Jlc3Npb24gdGVzdHMKCSAgYSBsb3QuCgpUdWUgQXByIDI0IDE0OjEwOjM4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZW50aXRpZXMuYzogeG1sRW5jb2RlRW50aXRpZXNSZWVudHJhbnQgZml4ZWQgYSBmZXcgYWNjZXNzZXMKCSAgdG8gZG9jIHdoZXJlIGl0IHdhc24ndCBjaGVja2VkIGFnYWluc3QgTlVMTCByZXBvcnRlZCBieQoJICBKZW5zIExhYXMKClR1ZSBBcHIgMjQgMTM6MjE6MzYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmM6IEpvbmFzIEJvcmdzdHL2bSBwYXRjaCwgdGhlIDx0ZD4sIGFuZCA8dGg+IGVsZW1lbnRzCgkgIG5vdyBtZWFucyB0aGUgZW5kIG9mIGFueSBvcGVuIDxzcGFuPiw8Zm9udD4sPGE+LDxiPiw8aT4sPHU+LgoKTW9uIEFwciAyMyAxNTo0MDowNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIERPQ0JwYXJzZXIuYyBET0NCcGFyc2VyLmggdGVzdERvY2Jvb2suYyBjb25maWd1cmUuaW4gTWFrZWZpbGUuYW0KCSAgeG1sdmVyc2lvbi5oLmluOiBzdGFydGVkIChyZSlpbnRlZ3JhdGluZyB0aGUgRG9jQm9vayBTR01MIHBhcnNlci4KCSogU0FYLltjaF06IGNsZWFudXAgYW5kIHVwZGF0ZXMgZm9yIERvY0Jvb2sKCSogZGVidWdYTUwuYyBwYXJzZXIuaCB0cmVlLltjaF0gdmFsaWQuYyB4cGF0aC5jOiBzbWFsbCBtYWNybyBvcgoJICBleCBTR01MIGlkZW50aWZpZXIgY2hhbmdlcwoJKiB2YWxpZC5jOiByZW1vdmVkIGEgc3RhdGljIHVudXNlZCBmdW5jdGlvbi4KCk1vbiBBcHIgMjMgMTE6MDU6NTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5jOiBhcHBsaWVkIGNoYW5nZSBmb3IgUGF1bCBTcG9uYWdsIG9uIHNjcmlwdCBzYXZpbmcKCSogTWFrZWZpbGUuYW06IHRoZSB3YXJuaW5nIGFib3V0IGVudGl0eSB0aXRsZS54bWwgYXJlIG5vcm1hbC4KClN1biBBcHIgMjIgMjI6MDk6MzUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IHJlbGVhc2Ugb2YgMi4zLjcKCSogTWFrZWZpbGUuYW06IGZpeGluZyBtYWtlIGRpc3RjaGVjawoKU3VuIEFwciAyMiAyMToyOTo1MiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy9odG1sLyogZG9jL3htbC5odG1sOiB1cGRhdGVkIGFuZCByZWdlbmVyYXRlZCB0aGUgZG9jcwoKU3VuIEFwciAyMiAyMToxMTo0NSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIHRoZSBYUG9pbnRlciBwcm9ibGVtIGludHJvZHVjZWQgaW4gMi4zLjYKClN1biBBcHIgMjIgMTQ6MTE6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkICM1MzM4OCB3aXRoIHRoZSBwcm92aWRlZCBwYXRjaAoKU3VuIEFwciAyMiAxMjozNDo0MSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IEJqb3JuIGRldGVjdGVkIGFuIGludmFsaWQgbWVtb3J5IGFjY2Vzcy4gRml4ZWQKCSAgdnN0YXRlVlB1c2goKQoKU3VuIEFwciAyMiAxMDo0OToyMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIHhtbFhQYXRoQ29tcGlsZSB0byBkZXRlY3RlZCB1bnByb3Blcmx5IGVuZGVkIGV4cHIKClNhdCBBcHIgMjEgMTg6Mjc6NTEgQ0VTVCAyMDAxIEJqb3JuIFJlZXNlIDxicmVlc2VAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoKCSogbGlieG1sLmg6IG5ldyBoZWFkZXIgdXNlZCBvbmx5IGZvciB0aGUgY29tcGlsYXRpb24gb2YgbGlieG1sCgkqIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5jIFNBWC5jIGRlYnVnWE1MLmMgZW5jb2RpbmcuYyBlbnRpdGllcy5jCgkgIGVycm9yLmMgaGFzaC5jIGxpc3QuYyBuYW5vZnRwLmMgbmFub2h0dHAuYyBwYXJzZXIuYwoJICBwYXJzZXJJbnRlcm5hbHMuYyB0ZXN0SFRNTC5jIHRlc3RTQVguYyB0ZXN0VVJJLmMgdGVzdFhQYXRoLmMKCSAgdHJlZS5jIHVyaS5jIHZhbGlkLmMgeGluY2x1ZGUuYyB4bGluay5jIHhtbElPLmMgeG1sbGludC5jCgkgIHhtbG1lbW9yeS5jIHhwYXRoLmMgeHBvaW50ZXIuYzogbGlieG1sLmggaW50ZWdyYXRpb24KCSogdHJpby5bY2hdIHRyaW9wLmggc3RyaW8uW2NoXTogdXBncmFkZWQgdG8gdGhlIGxhdGVzdCB0cmlvCgkgIGJhc2VsaW5lICh2ZXJzaW9uIDEuMiBwbHVzIGEgc2luZ2xlIHBhdGNoKS4KCSogeHBhdGguYyByZXN1bHQvWFBhdGgvZXhwci9mbG9hdHMgdGVzdC9YUGF0aC9leHByL2Zsb2F0czogcGFyc2VzCgkgIHNjaWVudGlmaWMgbm90YXRpb24gZm9yIG51bWJlcnMuIFRlc3RzIGFkZGVkLgoJKiB4cGF0aC5jOiBmb3JtYXR0aW5nIG9mIG51bWJlcnMgY2hhbmdlZCB0byB1c2Ugc3ByaW50ZgoJICAoY29udHJpYnV0aW9uIGZyb20gV2lsbGlhbSBCcmFjaykKClNhdCBBcHIgMjEgMTY6MTI6NTkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBjbGVhbnVwLCBtb3JlIHVzZWZ1bCBkZWJ1Z2dpbmcKCSogcGFyc2VySW50ZXJuYWxzLmM6IGNsZWFudXAgdmN0eHQubm9kZVRhYiAoZGUpYWxsb2NhdGlvbgoJKiB4bWxJTy5jOiBlbnRpdHkgbG9hZGluZyBpcyBwcmludGVkIGFzIGFuIGVycm9yIHdoZW4gdmFsaWRhdGluZwoKU2F0IEFwciAyMSAxMjoyNTo0OSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IGZpeGVkIHRvIHZhbGlkYXRlIHdpdGhpbiBlbnRpdGllcwoJKiB0ZXN0L1ZDTS92MjIueG1sOiBhZGRlZCBhIHNwZWNpZmljIHRlc3RjYXNlCgpGcmkgQXByIDIwIDE3OjQ1OjQ3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogZm9yZ290IGFuIGVwc2lsb24gdHJhbnNpdGlvbiBpbiBmb3IgKCkrCgkqIHRlc3QvVkNNL3YyMS54bWwgOiBhZGRlZCBhIHNwZWNpZmljIHRlc3QgY2FzZQoKRnJpIEFwciAyMCAxNTo0NjowNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IHJlbW92ZWQgYSBzdGF0ZSBleHBsb3Npb24gZXhoaWJpdGVkIGJ5IFJTUwoJKiB0ZXN0L3ZhbGlkL3Jzcy54bWwgcmVzdWx0L3ZhbGlkL3Jzcy54bWwqOiBhZGRlZCB0aGUgdGVzdGNhc2UKCSAgZnJvbSBidWcgIzUxODcyCgpGcmkgQXByIDIwIDE0OjUyOjQ0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuW2NoXSB0cmVlLmg6IHdvcmtlZCAqaGFyZCogdG8gZ2V0IG5vbi1kZXRlcm1pbmlzdCBjb250ZW50CgkgIHZhbGlkYXRpb24gd2l0aG91dCB1c2luZyBhbiB1Z2x5IE5GQSAtPiBERkEgYWxnbyBpbiB0aGUgc291cmNlLgoJICBNYWRlIGEgc3BlY2lmaWMgYWxnb3JpdGhtIGVhc2llciB0byBtYWludGFpbiwgdXNpbmcgYSBzaW5nbGUKCSAgc3RhY2sgYW5kIHdpdGhvdXQgcmVjdXJzaW9uLgoJKiBNYWtlZmlsZS5hbSB0ZXN0L1ZDTS8qLnhtbDogYWRkZWQgbW9yZSB0ZXN0cyB0byAibWFrZSBWYWxpZHRlc3RzIgoJKiBoYXNoLmM6IG1hZGUgdGhlIGdyb3dpbmcgcm91dGluZSBzdGF0aWMKCSogdHJlZS5oIHBhcnNlci5jOiBhZGRlZCB0aGUgcGFyZW50IGluZm9ybWF0aW9uIHRvIGFuCgkgIHhtbEVsZW1lbnRDb250ZW50IG5vZGUuCgpXZWQgQXByIDE4IDIzOjMzOjExIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogU0FYLmMgcGFyc2VyLmMgeHBhdGguYzogZ2VuZXJhdGluZyBJRHMgd2hlbiBub3QgdmFsaWRhdGluZwoJICBmcm9tIGFuIGV4dGVybmFsIHBhcnNlZCBlbnRpdHkgd2FzIHBvaXNvbmluZyB0aGUgSUQgaGFzIHRhYmxlCgkgIHdpdGggcmVtb3ZlZCB2YWx1ZXMuIFRoaXMgd2FzIGtpbGxpbmcgWFNMVCBvbiB0aGUgS0RFIGhlbHAKCSAgYnJvd3Nlci4KCldlZCBBcHIgMTggMTc6MDk6MTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBlbnRpdGllcy5oOiBhbmRyZXdAdWdoLm5ldC5hdSBkZXRlY3RlZCBhIGRvdWJsZSBkZWNsYXJhdGlvbgoKV2VkIEFwciAxOCAxNTowNjozMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRlYnVnWE1MLmMgaGFzaC5jIHRyZWUuaCB2YWxpZC5jIDogc29tZSBjaGFuZ2VzIHJlbGF0ZWQgdG8KCSAgdGhlIHZhbGlkYXRpb24gc3Vwb3J0IHRvIGltcHJvdmUgc3BlZWQgd2l0aCBEb2NCb29rCgkqIHJlc3VsdC9WQy9PbmVJRDIgcmVzdWx0L1ZDL09uZUlEMyA6IHRoaXMgc2xpZ2h0bHkgY2hhbmdlcwoJICB0aGUgd2F5IHZhbGlkYXRpb24gZXJyb3JzIGdldCByZXBvcnRlZAoKV2VkIEFwciAxOCAxMTo0Mjo0NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5jOiBhcHBsaWVkIHBhcnQgb2YgdGhlIHBhdGNoZXMgcHJvdmlkZWQKCSAgYnkgUCBDIENob3cgYW5kIFdpbGxpYW0gTS4gQnJhY2sgZm9yIFhTTFQgSFRNTCBvdXRwdXQKCk1vbiBBcHIgMTYgMTk6NDQ6MzYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWx2ZXJzaW9uLmguaW4gd2luMzJjb25maWcuaCB3aW4zMi9saWJ4bWwyLyo6IGFwcGxpZWQgCgkgIElnb3IgWmxhdGtvdmljIHBhdGNoZXMgZm9yIE1TQyBjb21waWxhdGlvbiBhbmQgYWRkZWQgaGlzCgkgIHVwZGF0ZXMKClR1ZSBBcHIgMTcgMTA6MDg6MTkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCB4bWxYUGF0aE5vZGVDb2xsZWN0QW5kVGVzdCgpIHRvIGRvIHByb3BlcgoJICBwcmVmaXggbG9va3VwLgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogZml4ZWQgdGhlIGJ1ZyByZXBvcnRlZCBieSBNb3J1cyBXYWx0ZXIKCSAgZHVlIHRvIGFuIG9mZiBieSBvbmUgdHlwbyBpbiB4bWxTdHJpbmdDdXJyZW50Q2hhcigpCgkKVGh1IEFwciAxMiAxNzo0MTowOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYyByZXN1bHQvSFRNTC8qOiByZXZhbXBlZCB0aGUgd2F5IHRoZSBIVE1MCgkgIHBhcnNlciBoYW5kbGVzIGVuZCBvZiB0YWdzIG9yIGVuZCBvZiBpbnB1dAoKVGh1IEFwciAxMiAxMDo1MDozNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuW2NoXSA6IGFkZGVkIHhtbERvY0NvcHlOb2RlIGZvciBnZG9tZTIgc3VwcG9ydAoKV2VkIEFwciAxMSAxNjozNzo1MCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuaDogaW5jbHVkZSB4bWxtZW1vcnkuaCB0aGlzIHNlZW1zIHRvIGhhdm9pZCBhIG5hc3R5IGdsaWJjCgkgIGJ1ZyB3aGVyZSB0aGUgbGlua3RpbWUgdmVyaW9ucyBvZiBmcmVlKCkgd29uJ3Qgd29yayAuLi4KCldlZCBBcHIgMTEgMTQ6MjE6MzEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWcuaC5pbiBjb25maWd1cmUuaW4geG1sdmVyc2lvbi5oLmluOiBhZGRlZCBhbnNpZGVjbC5oIHRlc3QKCldlZCBBcHIgMTEgMTM6NTA6NDIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MveG1sLmh0bWw6IGFkZGVkIDIuMy42IHJlbGVhc2UKCldlZCBBcHIgMTEgMTM6MjY6MzQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbFN0cmluZ0dldE5vZGVMaXN0KCkgdG8gaGFuZGxlIGNoYXJyZWZzCgkqIHJlc3VsdC93bWwueG1sOiByZXN1bHRlZCBpbiBhIHNtYWxsIG91dHB1dCBjaGFuZ2UKCldlZCBBcHIgMTEgMDk6NDc6NTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IHhtbE5ld0RvYyB3YXMgbWlzc2luZyB0aGUgY2hhcnNldCBpbml0aWFsaXphdGlvbgoJKiB4bWxsaW50LmM6IGFkZGVkIC0tYXV0byB0byBhdXRvZ2VuZXJhdGUgYSBkb2MsIGFsbG93IHRvCgkgIHJlcHJvZHVjZSB0aGUgcHJvYmxlbSBmaXhlZCBvbiB4bWxOZXdEb2MKClR1ZSBBcHIgMTAgMTg6MTM6MTAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiB0cnlpbmcgdG8gZ2V0IDUyOTc5IHNvbHZlZAoJKiB0cmVlLmMgcmVzdWx0LyByZXN1bHQvbm9lbnQvOiB0cnlpbmcgdG8gZ2V0IDUyNzEyIHNvbHZlZCwgdGhpcwoJICBhbHNvIG1hZGUgbWUgY2xlYW4gdXAgdGhlIGZhY3QgdGhhdCBYTUwgb3V0cHV0IGluIGdlbmVyYWwgc2hvdWxkCgkgIG5vdCBhZGQgZm9ybWF0aW5nIGJsYW5rcyBieSBkZWZhdWx0LCB0aGlzIGNoYW5nZWQgdGhlIG91dHB1dCBvZgoJICBhIGZldyB0ZXN0cwoKVHVlIEFwciAxMCAxNjozMDoyMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IEJpbGwgQnJhY2sgcG9pbnRlciBhbiBlcnJvciBpbiBkZXRlY3RpbmcgYSBudWxsIG5vZGVzZXQKClN1biBBcHIgIDggMTU6MDc6MTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGZpbmFsbHkgcmVsZWFzZWQgMi4zLjYKClN1biBBcHIgIDggMTE6Mzk6MjEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBjaGVja2luZyBmb3IgbnVsbCBwb2ludGVyIGdlbmVyYXRlZCBieSBuZXcgY29kZQoKRnJpIEFwciAgNiAxMjo1MzowNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgW10gZXZhbHVhdGlvbiBwcm9ibGVtIHJlcG9ydGVkCgkqIHRlc3QvWFBhdGgvdGVzdHMvc2ltcGxlYWRkcjogZXh0ZW5kZWQgdGVzdAoJKiByZXN1bHQvWFBhdGgvc2ltcGxlYWRkcjogdXBkYXRlZCByZXN1bHQKCldlZCBBcHIgIDQgMDI6MDc6NTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxsaW50LmM6IERhbiBUaW1pcyByZXBvcnRlZCBhIHBvcnRhYmlsaXR5IHByb2JsZW0KCSAgb24gTWFjcyB3aXRob3V0IG1tYXAsIGZpeGVkIGl0LgoKVHVlIEFwciAgMyAyMDoyMDo1MSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRlc3RYUGF0aC5jIDogYWRkZWQgYSAtLXRyZWUgb3B0aW9uIGFsbG93aW5nIHRvIGRpc3BsYXkgdGhlCgkgIHRyZWUgZHVtcCBvZiB0aGUgWFBhdGggZXhwcmVzc2lvbgoKTW9uIEFwciAgMiAxNzoxMzo1MSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgbWVtbGVhayB3aGVuIGNvbXBhcmluZyBub2Rlc2V0cwoJKiBIVE1MdHJlZS5jOiBkb24ndCBpbnZlbnQgdGhlIEhUTUwgZG9jdHlwZSBpZiBub3QgYXZhaWxhYmxlIChYU0xUKQoJKiB0cmVlLmM6IGFkZGVkIGEgVE9ETwoKVHVlIE1hciAyNyAxNDozMjowNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbSBjb25maWcuaC5pbiB4bWx2ZXJzaW9uLmguaW46IGRldGVjdCBpZgoJICB3ZSBuZWVkIHN0cmluZyBmdW5jdGlvbnMKCSogdHJpby5bY2hdIHN0cmlvLltjaF06IGVtYmVkZGVkIHRoZSBUcmlvLTAuMjMgc3RyaW5nIGZ1bmN0aW9ucwoJICB0byBiZSBhYmxlIHRvIHVzZSB0aGVtIHdoZXJlIG5lZWRlZC4gQXBwbGllZCBzb21lIGNoYW5nZXMKCSAgdG8gcmVkdWNlIG5hbWUgbGlua2luZyBwb2xsdXRpb24gYW5kIGNvbXBpbGUgaW4gb25seSB3aGF0J3MKCSAgbmVlZGVkLgoJKiBIVE1MdHJlZS5jIGRlYnVnWE1MLmMgZW50aXRpZXMuYyBlcnJvci5jIG5hbm9mdHAuYyB2YWxpZC5jCgkgIHhsaW5rLmMgeG1sdmVyc2lvbi5oLmluIHhwYXRoLmM6IGdvdCByaWQgb2YgdGhlICNpZmRlZiAKCSAgZm9yIHRoZSBzdHJpbmcgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucwoJKiB4bWxtZW1vcnkuW2NoXTogcmVtb3ZlZCBERUJVR19NRU1PUllfRlJFRUQgYW5kIGFkZGVkIGl0IGF1dG9tYXRpY2FsbHkKCSAgdG8gdGhlIGZyZWUoKSBmdW5jdGlvbiBvZiB4bWxtZW1vcnkuYwoJKiBlbnRpdGllcy5jIEhUTUx0cmVlLmMgcGFyc2VySW50ZXJuYWxzLmMgdHJlZS5jIHVyaS5jIHZhbGlkLmMKCSAgeGluY2x1ZGUuYyB4bWxJTy5jIHhwYXRoLmMgeHBvaW50ZXIuYzogcmVtb3ZlZCB0aGUgTUVNX0NMRUFOVVAKCSAgdXNhZ2UuCgoKVHVlIE1hciAyNyAwMjozMDoyMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGVycm9yLmM6IGFwcGxpZWQgdGhlIGNvbnRleHQgb3V0cHV0IHBhdGNoIG9mIHRoZSBlcnJvcgoJICBoYW5kbGluZyBzdWJtaXR0ZWQgYnkgQ2h1Y2sgR3JpZmZpdGgKCSogZXJyb3IvVkMvKjogdGhpcyBzbGlnaHRseSBjaGFuZ2Ugc29tZSBlcnJvciBsb2dzCgpUdWUgTWFyIDI3IDAwOjUxOjI3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGZpeGVkIGxpbmUgbnVtYmVyIHJlcG9ydGluZyBvbiBlcnJvcgoKTW9uIE1hciAyNiAyMzoyMTo0MSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBTdWxsaXZhbiBhbmQgRGFyaW4gZm91bmQgYSBwYXJzZXIgYnVnLAoJICBhcHBsaWVkIHRoZSBwYXRjaC4KCk1vbiBNYXIgMjYgMTg6MjQ6NTIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmMgSFRNTHRyZWUuYyBTQVguYyBkZWJ1Z1hNTC5jIGVycm9yLmMgcGFyc2VySW50ZXJuYWxzLmMKCSAgdGVzdEhUTUwuYyB0ZXN0U0FYLmMgdHJlZS5jIHZhbGlkLmMgeG1sSU8uYyB4bWxtZW1vcnkuYwoJICB4bWx2ZXJzaW9uLmguaW4geHBvaW50ZXIuYzogb2YgY291cnNlIHRoZSB3YXkgSSBkZWZpbmVkCgkgIFVOVVNFRCBicmVha3Mgb24gb2xkIGdjYyB2ZXJzaW9uLiBUcnkgdG8gYmUgc21hcnQgYW5kCgkgIGFsc28gZGVmaW5lIGl0IGRpcmVjdGx5IGluIHhtbHZlcnNpb24uaAoJKiBjb25maWd1cmUuaW46IHJlbW92ZWQgLWFuc2kgZmxhZyBmcm9tIHRoZSBwZWRhbnRpYyBzZXQKClNhdCBNYXIgMjQgMTc6NDU6MzYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KICAgICAgICBIdWdlIGNsZWFudXAsIEkgc3dpdGNoZWQgdG8gY29tcGlsZSB3aXRoCgktV2FsbCAtZyAtTyAtYW5zaSAtcGVkYW50aWMgLVcgLVd1bnVzZWQgLVdpbXBsaWNpdAoJLVdyZXR1cm4tdHlwZSAtV3N3aXRjaCAtV2NvbW1lbnQgLVd0cmlncmFwaHMgLVdmb3JtYXQKCS1XY2hhci1zdWJzY3JpcHRzIC1XdW5pbml0aWFsaXplZCAtV3BhcmVudGhlc2VzIC1Xc2hhZG93CgktV3BvaW50ZXItYXJpdGggLVdjYXN0LWFsaWduIC1Xd3JpdGUtc3RyaW5ncyAtV2FnZ3JlZ2F0ZS1yZXR1cm4KCS1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduZXN0ZWQtZXh0ZXJucyAtV2lubGluZQoJKiBIVE1McGFyc2VyLltjaF0gSFRNTHRyZWUuYyBTQVguYyBkZWJ1Z1hNTC5jIGVuY29kaW5nLltjaF0KCSAgZW5jb2RpbmcuaCBlbnRpdGllcy5jIGVycm9yLmMgbGlzdC5bY2hdIG5hbm9mdHAuYwoJICBuYW5vaHR0cC5jIHBhcnNlci5bY2hdIHBhcnNlckludGVybmFscy5bY2hdIHRlc3RIVE1MLmMKCSAgdGVzdFNBWC5jIHRlc3RVUkkuYyB0ZXN0WFBhdGguYyB0cmVlLltjaF0gdXJpLmMKCSAgdmFsaWQuW2NoXSB4aW5jbHVkZS5jIHhtbElPLltjaF0geG1sbGludC5jIHhtbG1lbW9yeS5jCgkgIHhwYXRoLmMgeHBhdGhJbnRlcm5hbHMuaCB4cG9pbnRlci5bY2hdIGV4YW1wbGUvZ2pvYnJlYWQuYzoKCSAgQ2xlYW51cCwgc3RhdGljZmllZCBhIG51bWJlciBvZiBub24tZXhwb3J0ZWQgZnVuY3Rpb25zLAoJICBkZXRlY3RlZCBhbmQgY2xlYW5lZCB1cCBhIGRvemVuIG9mIHByb2JsZW0gZm91bmQgdGhpcyB3YXksCgkgIGF2b2lkZWQgYSBsb3Qgb2YgcHVibGljIGZ1bmN0aW9uIG5hbWUvdHlwZWRlZi9zeXN0ZW0gbmFtZXMgY2xhc2hlcwoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZWQKCSogY29uZmlndXJlLmluOiBzd2l0Y2hlZCBwcml2YXRlIGZsYWdzIHRvIHRoZSByZWFsbHkgcGVkYW50aWMgb25lcy4KClRodSBNYXIgMjIgMjI6NDQ6MTUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogMi4zLjUKCSogZG9jL2h0bWwvKjogcmVidWlsdCB0aGUgZG9jcwoKVGh1IE1hciAyMiAxNTozNjo0NSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGZpeGVkIGEgcmVwb3J0ZWQgYnVnIGluIE5PVEFUSU9OIHBhcnNpbmcKCSogdXJpLmM6IGFjY2VwdGVkIGJ1dCBub3QgZml4ZWQgYnVnIDUxODc2LCBhZGRlZCBUT0RPIAoJKiBNYWtlZmlsZS5hbTogZml4ZWQgYnVnIDUxODc2CgpUaHUgTWFyIDIyIDEzOjQxOjIyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWcuaC5pbiBjb25maWd1cmUuaW4gZXJyb3IuYzogZml4IGEgY29tcGlsYXRpb24gcHJvYmxlbQoJICBvbiBwbGF0Zm9ybXMgd2l0aG91dCB2c25wcmludGYgKHhtbEB0aGV3cml0dGVud29yZC5jb20pCgpXZWQgTWFyIDIxIDE5OjA0OjM0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSBmdW5jdGlvbiBuYW1lIGhlYWRlciB0eXBvCgkqIFNBWC5jOiBub3RhdGlvbnMgY2FuIGFsc28gb2NjdXIgaW4gZXh0ZXJuYWwgc3Vic2V0LgoKVHVlIE1hciAyMCAxNDoyMToyOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZXJyb3IuYzogcmVtb3ZlZCBhIEMrKyBsaWtlIGNvbW1lbnQKClR1ZSBNYXIgMjAgMTI6MjI6MzYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBmaXhpbmcgYnVnIDUyMjk5IHN0cmFuZ2UgY29uZGl0aW9uIGxlYWRpbmcKCSAgdG8gYSBwYXJzZXIgY3Jhc2ggZHVlIHRvIGEgYnVmZmVyIG92ZXJmbG93CgkqIHJlc3VsdC9ub2VudC9hdHRyaWIueG1sIHJlc3VsdC9hdHRyaWIueG1sIHRlc3QvYXR0cmliLnhtbDoKCSAgYWRkZWQgdGhlIHNwZWNpZmljIHRlc3QgY2FzZQoKTW9uIE1hciAxOSAxNjo1MDo1MiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguW2NoXTogc3RpbGwgYSBsb3Qgb2YgY2xlYW51cCBiYXNlZCBvbiBYU0xULCBhZGRlZAoJICB4bWxYUGF0aENvbnZlcnR7U3RyaW5nLE51bWJlcixCb29sZWFufSB0byBiZSBhYmxlIHRvIG1ha2UKCSAgdHlwZSBjYXN0cyB3aXRob3V0IGEgY29udGV4dCBzdGFjaywgZml4ZWQgc29tZSBpbXBsZW1lbnRhdGlvbgoJICBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSBhYnNlbmNlIG9mIGNvbnRleHQgYXQgcGFyc2UtdGltZSwKCSAgYWRkZWQgeG1sWFBhdGhFdmFsUHJlZGljYXRlKCkgYW5kIHhtbFhQYXRoRnJlZUNvbXBFeHByKCkKCSAgaW4gdGhlIHB1YmxpYyBBUEkgdG9vCgkqIHhwb2ludGVyLmMgeHBhdGhJbnRlcm5hbHMuaDogd2UgbmVlZCB0byBrbm93IGF0IHBhcnNlIHRpbWUKCSAgd2hldGhlciB3ZSBhcmUgY29tcGlsaW5nIGFuIFhQb2ludGVyCgpNb24gTWFyIDE5IDExOjU0OjMxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5bY2hdIHhwb2ludGVyLmM6IHJlc3RhdXJlZCB0aGUgQmluYXJ5IGFuZCBBUEkgY29tcGF0aWJpbGl0eQoJICBjbGVhbmVkIHVwIHRoZSBwYXJzZXIgaW50ZXJuYWxzLCByZWZhY3RvcmVkIFhQYXRoIGNvZGUsIGFkZGVkCgkgIG5ldyBjb21waWxhdGlvbiBiYXNlZCBBUElzIGFuZCBjbGVhbmx5IHNlcGFyYXRlZCBwdWJsaWMgYW5kCgkgIHByaXZhdGUgQVBJcy4KCk1vbiBNYXIgMTkgMDA6NTk6MjUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmg6IHRoZSBjb21wIGZpZWxkIG11c3QgYmUgYWRkZWQgYXQgdGhlIGVuZCB0byBhdm9pZAoJICBraWxsaW5nIGJpbmFyeSBjb21wYXQuCgpNb24gTWFyIDE5IDAwOjExOjE4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbTogZGV0ZWN0IFhQYXRoIG1lbWxlYWtzIGluIHJlZ3Jlc29uIHRlc3RzCgkqIGVycm9yLmM6IGZpeGVkIGFuZCBlcnJvciB3LnIudC4gZXJyb3IgcmVwb3J0aW5nIHN0aWxsIHVzaW5nCgkgIHN0ZGVycgoJKiBoYXNoLmM6IGFkZGVkIG5ldyBsaW5lIGF0IGVuZCBvZiBmaWxlCgkqIHRyZWUuaDogbWlub3IgY2xlYW51cAoJKiB4cGF0aC5bY2hdIHhwb2ludGVyLltjaF06IE1ham9yIGNoYW5nZXMgISBTZXBhcmF0ZWQgWFBhdGgKCSAgZXhwcmVzc2lvbiBwYXJzaW5nIGZyb20gZXZhbHVhdGlvbiwgcmVzdWx0ZWQgaW4gYSBudW1iZXIgb2YKCSAgY2hhbmdlcyBpbnRlcm5hbGx5LCBhbmQgaW4gWFBvaW50ZXIuIExpa2VseSB0byBicmVhayBzdHVmZgoJICB1c2luZyB4cGF0aEludGVybmFscy5oIGJ1dCBzaG91bGQgcmVtYWluIGJpbmFyeSBjb21wYXRpYmxlLAoJICBuZXcgaW50ZXJmYWNlcyB3aWxsIGJlIGFkZGVkLgoKV2VkIE1hciAxNCAyMDozNDowMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBmaXhlZCBhIGNvdXBsZSBvZiBwcm9ibGVtcyByZXBvcnRlZCBieSAKCSAgb2tpZGRsZUB5YWhvby5jby51ayBhbmQgYWxsYW5jQGNoaWNrZW5hbmRwb3JuLmNvbSB3aGVuIGNvbXBpbGluZwoJICB3aXRob3V0IGdjYyBvbiBub24gbGludXggcGxhdGZvcm1zLgoKV2VkIE1hciAxNCAyMDoxMzo1NCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL01ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbjogeWVhcmtlQGVuZy5idWZmYWxvLmVkdSBzdWdnZXN0ZWQKCSAgYSBmaXggZm9yIC0td2l0aC1odG1sLWRpcj0gY29uZmlndXJlIHN1cHBvcnQuIEkgaG9wZSBpdCB3b24ndAoJICBicmVhayBycG0gZ2VuZXJhdGlvbgoKV2VkIE1hciAxNCAxNzoyODo0OSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sSU8uYzogb25lIGZ1bmN0aW9uIGNvbW1lbnQgY2xlYW51cC4KCldlZCBNYXIgMTQgMTQ6NTU6NDYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFNBWC5jOiBleHRlcm5hbCBzdWJzZXQgbm90YXRpb25zIHdlcmUgaW1wcm9wZXJseSByZWdpc3RlcmVkCgkgIGluIHRoZSBpbnRlcm5hbCBzdWJzZXQuCgpUdWUgTWFyIDEzIDEwOjI4OjQ5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBSRUFETUUuY3ZzLWNvbW1pdHM6IGFkZGVkLCBwb2ludGluZyB0byBIQUNLSU5HCgkqIEhBQ0tJTkc6IHVwZGF0ZWQKCk1vbiBNYXIgMTIgMjI6MDk6NDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBhbmQgTWF0dCBTZXJnZWFudCBmb3VuZCBvbmUgaW4gdGhlIFhNTCBwdXNoCgkgIHBhcnNlciAoZXJyb25lb3VzIGNoZWNrIEkgZm9yZ290IHRvIHJlbW92ZSB3aGVuIEkgZml4ZWQgdGhlCgkgIG1haW4gcGFyc2VyKS4KCk1vbiBNYXIgMTIgMTk6MTk6MDQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHB0aXR0b20gZm91bmQgYSBzbWFsbCBidWcgaW4gVW5hcnlFeHByCgpTYXQgTWFyIDEwIDEzOjA5OjUzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGJ1bXBlZCB0byAyLjMuNAoJKiBlcnJvci5jOiBmaXhlZCBidWcgIzUxODYwCgkqIHRyZWUuYzogZml4ZWQgYnVnICM1MTg2MQoJKiB2YWxpZC5jOiBjbGVhbnVwLCBtb3JlIGRlYnVnLCBmYWlsZWQgdG8gZml4IG9uZSBidWcgY3JhcCAuLi4KCSogdHJlZS5bY2hdIDogYWRkZWQgeG1sRGVmYXVsdEJ1ZmZlclNpemUKCSogbmFub2Z0cC5jOiB0eXBvIGluIGZ1bmN0aW9uIG5hbWUgaGVhZGVyIGJsb2NrCgkqIGRvYy94bWwuaHRtbCA6IHVwZGF0ZWQsIGFkZGVkIGxpbmsgdG8gWE1MOjpMaWJYU0xUCgkqIGRvYy9odG1sLyogOiByZWJ1aWx0IHRoZSBkb2NzCgpXZWQgTWFyICA3IDIwOjQzOjQ3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYyBTQVguYzogdGhlIG5ldyBjb250ZW50IHBhcnNpbmcgY29kZSByYWlzZWQgYW4KCSAgdWdseSBidWcgaW4gdGhlIGNoYXJhY3RlcnMoKSBTQVggY2FsbGJhY2suIEZvdW5kIGl0CgkgIGp1c3QgYmVjYXVzZSBvZiBzdHJhbmdlbmVzcyBpbiBYU0xUIFhNTCBSZWMgb3VwdHV0IDotKAoKV2VkIE1hciAgNyAxNjo1MDoyMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW06IE1hcnRpbiBCYXVsaWcgc3VnZ2VzdGVkIHRvIGFkZCAtbG0KCSogdHJlZS5jOiBmb3VuZCBhbm90aGVyIGJ1ZyBpbiB4bWxOb2RlR2V0Q29udGVudCgpCgpUdWUgTWFyICA2IDA5OjIxOjMwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBCam9ybiBmb3VuZCB0aGUgZXJyb3IgcmVsYXRlZCB0byBzdHJpY3RuZXNzIG9mIGNvbXBhcmlzb24uCgpNb24gTWFyICA1IDIxOjQ3OjMxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogdHJ5aW5nIHRvIGZpeCB0aGUgRHRkIHBhcnNpbmcgcHJvYmxlbSByZXBvcnRlZAoJICBieSBHYXJ5LCBzaWRlIGVmZmVjdCBvZiBsYXN0IHdlZWsgc3BlZWQgb3B0aW1pemF0aW9ucy4KClNhdCBNYXIgIDMgMTk6NDU6NTkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbDJDb25mLnNoLmluOiBmaXhlcyBwb2ludGVkIG91dCBieSBGcmVkcmlrIEhhbGxlbmJlcmcKCSogcGFyc2VySW50ZXJuYWxzLmM6IHJlbW92ZWQgdW5uZWVkZWQgdGVzdCByYWlzZWQgYnkgU3RyaWMKClNhdCBNYXIgIDMgMTM6MDQ6MzcgQ0VUIDIwMDEgQmpvcm4gUmVlc2UgPGJyZWVzZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CgoJKiB4cGF0aC5jOiBGaXhlZCB4bWxYUGF0aE5vZGVDb2xsZWN0QW5kVGVzdCAocHJvYmxlbSByZXBvcnRlZAoJICBhbmQgZml4ZWQgYnkgV2lsbGlhbSBCcmFjaykuIEFkZGVkIHhtbFhQYXRoRm9ybWF0TnVtYmVyLgoJICBDaGFuZ2VkIHRoZSBzb3J0aW5nIHNsaWdodGx5LgoJKiBjb25maWd1cmUuaW4gTWFrZWZpbGUuYW0gZXhhbXBsZS9NYWtlZmlsZS5hbTogQWRkZWQgLWxtLgoJICBQbGVhc2Ugbm90ZSB0aGF0IGFwcGxpY2F0aW9ucyBsaW5raW5nIHdpdGggbGlieG1sMiwgbXVzdAoJICBhbHNvIGxpa2Ugd2l0aCB0aGUgbWF0aCBsaWJyYXJ5IGZyb20gbm93IG9uLgoKU2F0IE1hciAgMyAwNzozODo1OCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBsb29wIHJlcG9ydGVkIGJ5IE1hcmMgU2FuZmFjb24KClNhdCBNYXIgIDMgMDI6MTA6MjQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBvbmUgbXVzdCByZXBvcnQgc3BhY2VzIGV2ZW4gaWYgdGhlIER0ZCBlbGVtZW50CgkgIGNvbnRlbnQgcHJvdmVzIHRoYXQgdGhpcyBpcyBub3QgcGFydCBvZiB0aGUgZWxlbWVudCBjb250ZW50LgoJKiByZXN1bHQvdmFsaWQvKi54bWw6IHRoaXMgY2hhbmdlZCB0aGUgb3VwdHUgc2xpZ2h0bHkKClRodSBNYXIgIDEgMTc6NTM6MzkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogYnVtcGVkIHRvIDIuMy4zCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlZAoKV2VkIEZlYiAyOCAwMDo0Mzo1OCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBtaW5vciBkb2MgZml4CgkqIHhwYXRoLmM6IGRlYWxsb2NhdGlvbiBpc3N1ZXMgd2hlbiBhIHJlc3VsdCB0cmVlIGhhcyBiZWVuCgkgIGNvbnZlcnRlZCB0byBhIG5vZGUtc2V0CgpNb24gRmViIDI2IDIyOjA5OjQ1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MveG1sLmh0bWw6IG9vcHMgY29ycmVjdGVkIGRhdGVzIHMvMjAwMC8yMDAxCgpNb24gRmViIDI2IDEyOjQ4OjM1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBuZXcgcGF0Y2ggZnJvbSBHYXJ5IFBlbm5pbmd0b24KCk1vbiBGZWIgMjYgMDk6MzA6MjMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy94bWwuaHRtbDogYXBwbGllZCBwYXRjaCBmcm9tIEFua2gKCk1vbiBGZWIgMjYgMDM6MzQ6NDMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhpbmNsdWRlLmM6IGZpeGVkIGEgcHJvYmxlbSBidWlsZGluZyBvbiBNYWMKClN1biBGZWIgMjUgMjE6NTI6MzAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBtb3JlIHdvcmsgb24gaW5jcmVhc2luZyBwYXJzaW5nIGZlcmZvcm1hbmNlcwoKU3VuIEZlYiAyNSAxODowMzo0MiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sbWVtb3J5LmggSFRNTHBhcnNlci5jIEhUTUx0cmVlLmMgZW50aXRpZXMuYyBwYXJzZXIuYwoJICB4cGF0aC5jIHhwb2ludGVyLmMgdHJlZS5jIHVyaS5jIHZhbGlkLmMgeGluY2x1ZGUuYyB4bWxJTy5jOgoJICBhdm9pZGluZyBtZW1jcHkgaW4gcHJvZHVjdGlvbiBidWlsZHMgTUVNX0NMRUFOVVAgbWFjcm8gdXNlCgkqIHBhcnNlci5bY2hdIHBhcnNlckludGVybmFscy5jOiBvcHRpbWl6YXRpb25zIG9mIHRoZSB0aWdodGVzdAoJICBpbnRlcm5hbCBsb29wcyBpbnNpZGUgdGhlIHBhcnNlci4gQmV0dGVyIGNoZWNraW5nIG9mIEkvTwoJICBmbHVzaGluZy9sb2FkaW5nIGNvbmRpdGlvbnMKCSogeG1sbGludC5jIDogYWRkZWQgLS10aW1pbmcKClN1biBGZWIgMjUgMDU6NDg6NTEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogYnVtcGVkIHRvIDIuMy4yCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlZCBmb3IgcmVsZWFzZQoKU2F0IEZlYiAyNCAxNDowNzo1MiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZm91bmQgYSBtZW1sZWFrIGFuZCBmaXhlZCBhIG5hc3R5IGJ1ZwoKU2F0IEZlYiAyNCAwMzozNTo0OCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sbGludC5bYzFdIDogYWRkZWQgcmV0dXJuIGNvZGUgZXJyb3JzIGZvciB4bWxsaW50CgkqIHhwYXRoLmM6IHNwZWNpZmljIGRlYnVnIGR1bXAgZnVuY3Rpb24gZm9yIHJlc3VsdCB2YWx1ZSB0cmVlcwoKVGh1IEZlYiAyMiAwNzo1MjoyNyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZmluYWxseSBpbXBsZW1lbnRlZCB4bWxYUGF0aENvbXBhcmVOb2RlU2V0cwoJKiB0ZXN0L1hQYXRoL2V4cHIvZmxvYXRzIHJlc3VsdHMvWFBhdGgvZXhwci9mbG9hdHM6IGFkZGVkIAoJICBhIHRlc3QgZm9yIGZsb2F0IGV4cHJlc3Npb25zCgpUdWUgRmViIDIwIDE4OjU3OjU0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbE5vZGVHZXRDb250ZW50LCBpdCB3YXMgbm90IHJlY3Vyc2luZyBvbiBjaGlsZAoJKiBwYXJzZXJJbnRlcm5hbHMuW2NoXTogdHJ5aW5nIHRvIHNwZWVkIHVwIHBhcnNpbmcKCSogeHBhdGguYyA6IHNwZWVkZWQgdXAgbm9kZSBzZXQgZXF1YWxpdHkgb3AKCk1vbiBGZWIgMTkgMTk6MDE6NTcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtIHZhbGlkLmMgbGlzdC5bY2hdOiBHYXJ5IFBlbm5pbmd0b24gcHJvdmlkZWQgYQoJICBiZXR0ZXIgaGFuZGxpbmcgb2YgSUQvSURSRUYgYW5kIHRoZSBsaXN0IG1vZHVsZXMgYXNzb2NpYXRlZAoJKiBjb25maWd1cmUuaW46IHNtYWxsIENGTEFHUyBjbGVhbnVwCgpNb24gRmViIDE5IDE2OjEzOjIyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGZpeGVkIGljb252IGRldGVjdGlvbiBvbiBBSVggKHN0cmljKQoKTW9uIEZlYiAxOSAxMDo1OTo0MSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgIioiICh1bmJlbGlldmFibGUgISkgYW5kIGEgY291cGxlIG9mIHdhcm5pbmdzCgpTdW4gRmViIDE4IDE3OjUyOjM3IE1FVCAyMDAxIEJqb3JuIFJlZXNlIDxicmVlc2VAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoKCSogeHBhdGguYzogZml4ZWQgd2hpdGVzcGFjZSBoYW5kbGluZyBpbiB4bWxYUGF0aFN0cmluZ0V2YWxOdW1iZXIsCgkgIGFuZCBvcHRpbWl6ZWQgeG1sWFBhdGhOb2RlU2V0U29ydAoKU2F0IEZlYiAxNyAxNDoxODo0MiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogYnVnIGZpeCB3aGVuIGNvbnRleHQgc2l6ZSBpcyAwCgkqIHBhcnNlci5jOiBJIGxpa2UgTm9ybSdzIER0ZCBiZWNhdXNlIHRoZXkgc3RpbGwgbWFuYWdlIHRvIGJyZWFrCgkgIHRoZSBwYXJzZXIgb2NjYXNpb25hbGx5CgpGcmkgRmViIDE2IDE0OjIwOjM1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiB4bWxYUGF0aEVxdWFsTm9kZVNldEZsb2F0IHRoZSBhcmcgaXMgcmVhbGx5IGEgZG91YmxlIG5vdwoKRnJpIEZlYiAxNiAwMToxMDowNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5bY2hdIHBhcnNlci5jIHhwYXRoLmM6IGZpeGVkIHRoZSBwcm9ibGVtIG9mIGFkZHJlc3NpbmcKCSAgYXR0cmlidXRlcyB3aXRoaW4gdGhlIFhNTC0xLjAgbmFtZXNwYWNlCgpUaHUgRmViIDE1IDE2OjUzOjIwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aEludGVybmFscy5oOiBleHBvcnRlZCBhIGZldyBheGlzIGZ1bmN0aW9ucwoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZWQgdGhlIGRvYwoKVGh1IEZlYiAxNSAxNTo1NzoxNCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBhcHBsaWVkIHBhdGNoIGZyb20gRGFuaWVsIHZhbiBCYWxlbiBmb3IgT3BlbkJTRAoJICBhbmQgYnVtcGVkIHZlcnNpb24gdG8gMi4zLjEKCSogSFRNTHRyZWUuYyByZXN1bHQvSFRNTC9kb2MzLmh0bSByZXN1bHQvSFRNTC93aXJlZC5odG1sOiB0aGUKCSAgYXR0ZW1wdCB0byBmaW5kIGF1dG9jbG9zaW5nIHdhcyBzaW1wbHkgYnJva2VuLCByZW1vdmVkIGl0LAoJICB1cGRhdGVkIHRoZSBleGFtcGxlcywgdGhpcyBpcyBiZXR0ZXIKCldlZCBGZWIgMTQgMTE6MzU6MzkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGhhc2guW2NoXTogYWRkZWQgUGFvbG8gQ2FzYXJpbmkgcGF0Y2ggdG8gcHJvdmlkZSBEZWxldGUgZnJvbQoJICBoYXNoIGZ1bmN0aW9ubmFsaXRpZXMuCgkqIGRvYy9odG1sLyogOiByZWJ1aWxkIHRoZSBkb2MKClR1ZSBGZWIgMTMgMTg6MDE6NDggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmMgcmVzdWx0L1hQYXRoL3Rlc3RzL2NoYXB0ZXJzcHJlZm9sOiBidWdmaXhlcyBvbiBvcmRlciBhbmQKCSAgb24gcHJlZGljYXRlCgkqIEhUTUxwYXJzZXIuW2NoXSBIVE1MdHJlZS5jIHJlc3VsdC9IVE1ML2RvYzMuaHRtLmVycgoJICByZXN1bHQvSFRNTC9kb2MzLmh0bS5zYXggcmVzdWx0L0hUTUwvd2lyZWQuaHRtbDogc29tZXRpbWVzIG9uZQoJICByZWFsbHkgd2FudCB0byBoYXZlIHRhZ3MgY2xvc2VkIG9uIG91dHB1dCBldmVuIGlmIHdlIGFjY2VwdAoJICB1bmNsb3NlZCBvbmVzIG9uIGlucHV0CgpNb24gRmViIDEyIDE4OjMzOjIwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBvdWNoIGRvbid0IGZyZWUgTlVMTCwgcmFyZSBjYXNlIGZpeGVkCgkqIHRyZWUuYzogZG9uJ3QgY29hbGVzY2UgdGV4dCBub2RlcyBpZiB0aGV5IGRvbid0IGhhdmUgdGhlCgkgIHNhbWUgYmVoYXZpb3VyIHdydCBlc2NhcGluZyBvbiBvdXRwdXQKClN1biBGZWIgMTEgMjE6MTU6NDEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHNtYWxsIGZpeHVwCgkqIFNBWC5jOiBkb24ndCB3YXJuIG9uIGVtcHR5IG5hbWVzcGFjZXMuCgpUaHUgRmViICA4IDExOjI4OjU4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBSRUFETUU6IGEgYml0IG9mIGNsZWFudXAKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgZm9yIDIuMy4wIHJlbGVhc2UKClRodSBGZWIgIDggMTA6Mzc6MDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGhhc2guW2NoXTogYWRkZWQgYSBmaXJzdCB2ZXJzaW9uIG9mIHhtbEhhc2hTaXplKCkKCSogdmFsaWQuYzogYW5vdGhlciBidWcgZml4IGZyb20gR2FyeSBQZW5uaW5ndG9uCgpXZWQgRmViICA3IDE5OjIyOjM3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBjb3VwbGUgb2YgYnVnIGZpeGVzIHBvaW50ZWQgYnkgR2FyeSBQZW5uaW5ndG9uCgkqIEhUTUx0cmVlLmM6ICNpZiAwIGNsZWFudXAKClR1ZSBGZWIgIDYgMTQ6MDI6NTYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHN0YXJ0ZWQgcHJvZmlsaW5nIFhTTFQsIGFkZGVkIHhtbFhQYXRoTm9kZVNldEFkZFVuaXF1ZSgpCgkgIHdoaWNoIHJlbW92ZXMgYSB0aW1lIGNvbnN1bWluZyBjaGVjayBvZiB4bWxYUGF0aE5vZGVTZXRBZGQoKQoJICBhbmQgdXNlIGl0IGluIHBsYWNlcyB3aGVyZSB3ZSBhcmUgc3VyZSB0byBub3QgYnJlYWsgdW5pY2l0eQoKTW9uIEZlYiAgNSAxODo1MTozNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogYnVnIGZpeGVzIGZvdW5kIGZyb20gWFNMVAoJKiB0cmVlLmM6IHByZXNlcnZlIG5vZGUtPm5hbWUgc3BlY2lhbCB2YWx1ZXMgd2hlbiBjb3B5aW5nIG5vZGVzLgoJKiBwYXJzZXJJbnRlcm5hbHMuW2NoXSBwYXJzZXIuW2NoXSBTQVguYyA6IGFkZGVkIGEgbW9kZSB3aGVyZQoJICBleHRlcm5hbCBzdWJzZXQgYXJlIGZldGNoZWQgd2hlbiBhdmFpbGFibGUgYnV0IHdpdGhvdXQgZnVsbAoJICB2YWxpZGF0aW9uLiBBZGRlZCB4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlLCBuZWVkIGEgZnVuY3Rpb24uCgkqIEhUTUx0cmVlLmM6IGFkZCBzdXBwb3J0IGZvciB4bWxTdHJpbmdUZXh0Tm9lbmMgZm9yIFhTTHQgSFRNTAoJICBvdXRwdXQgd2l0aCBlbmNvZGluZyBkaXNhYmxlZC4KClNhdCBGZWIgIDMgMDk6NTA6MjkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbGlPLmM6IEhhcnJ5IEJsdW5kZWxsIHBvaW50ZWQgb3V0IHRoYXQgeG1sQ2hlY2tGaWxlbmFtZQoJICB4bWxDaGVja0ZpbGVuYW1lIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20geG1sRmlsZU9wZW5XCgkgIGFuZCB4bWxHemZpbGVPcGVuVwoKRnJpIEZlYiAgMiAxODowNDozNSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdXJpLmM6IHJld3JpdGUgb2YgeG1sTm9ybWFsaXplVVJJUGF0aCBmcm9tIFBhdWwgRC4gU21pdGgKCSogdGVzdC9VUkkvc21pdGgudXJpIHJlc3VsdC9VUkkvc21pdGgudXJpIE1ha2VmaWxlLmFtOgoJICBhZGRlZCB0aGUgbmV3IHRlc3RzIGZvciBVUkkgbm9ybWFsaXphdGlvbgoJKiB0ZXN0VVJJLmM6IGZpeGVkIHN0b29waWQgYnVncwoJKiByZXN1bHQvVkMvT25lSUQzIHJlc3VsdC9WQy9VbmlxdWVFbGVtZW50VHlwZURlY2xhcmF0aW9uOgoJICB0aGUgVVJJIGluIHRoZSBlcnJvciBtZXNzYWdlcyBhcmUgbm93IHByb3Blcmx5IG5vcm1hbGl6ZWQKCkZyaSBGZWIgIDIgMDk6MTg6NTMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHVyaS5jOiBhcHBsaWVkIE1hcmMgU2FuZmFjb24ncyBwYXRjaCBmb3IgeG1sTm9ybWFsaXplVVJJUGF0aAoKVGh1IEZlYiAgMSAwNToyODo1NSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgYSBudW1iZXIgb2YgcHJvYmxlbXMgaW4gWFBBVEhfWFNMVF9UUkVFIHByb2Nlc3NpbmcKCldlZCBKYW4gMzEgMjE6NDU6MzcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIG1vZCBvcGVyYXRvcgoKV2VkIEphbiAzMSAxNjo1MDo0MiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGZpeGVkIHhtbFN0cmNhdCBkb2MKCSogdHJlZS5jOiAyIGZpeGVzIGZvcm0gQW5kZXJzIENhcmxzb24gZm9yIGNvcHlpbmcgbm9kZXMgYW5kCgkgIHRyZWVzLgoKV2VkIEphbiAzMSAxNDoxOToxNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYyByZXN1bHQvWFBhdGgvdGVzdHMvY2hhcHRlcnNiYXNlCgkgIHJlc3VsdC9YUGF0aC90ZXN0cy9zaW1wbGViYXNlOiBmaXhlZCBYUGF0aCBub2RlKCkgCgkqIHRyZWUuYzogc21hbGwgZml4IGluIHhtbE5ld05zKCkKCSogTWFrZWZpbGUuYW06IHJlbW92ZWQgZXh0cmFuZW91cyB4bWwyQ29uZi5zaCBydWxlCgpTdW4gSmFuIDI4IDA4OjM3OjAzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4gbGlieG1sLnNwZWMuaW4gZXhhbXBsZS9NYWtlZmlsZS5hbToKCSAgQ2hhbmdlZCB0aGUgbGlicmFyeSBuYW1lLCBpbiBvcmRlciB0byBnZXQgbGlieG1sLWRldmVsIGFuZAoJICBsaWJ4bWwyLWRldmVsIHRvIGNvZXhpc3Qgb24gYSBzaW5nbGUgc3lzdGVtCgkqIHhtbC1jb25maWcuMSB4bWwtY29uZmlnLmluIHhtbENvbmYuc2guaW46IHJlbmFtZWQKCSogeG1sMi1jb25maWcuMSB4bWwyLWNvbmZpZy5pbiB4bWwyQ29uZi5zaC5pbjogbmV3IGZpbGVzCgpTYXQgSmFuIDI3IDE5OjU4OjIyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4gbGlieG1sLTIuMC5wYy5pbjogc3RhcnRlZCB3b3JraW5nIG9uIGdldHRpbmcKCSAgbGlieG1sMi1kZXZlbCBpbnN0YWxsYWJsZSBpbiAvLyBhcyBsaWJ4bWwtZGV2ZWwuCgpTYXQgSmFuIDI3IDE4OjQ5OjAyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MvTWFrZWZpbGUuYW06IGZpeGVkIG1ha2UgcmVidWlsZCBpbiBkb2MKCSogZG9jL2h0bWwvKi5odG1sOiByZWJ1aWx0IHRoZSBkb2NzCgpGcmkgSmFuIDI2IDEwOjMwOjU4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IHBhdGNoIGZyb20gQmpvcm4gUmVlc2Ugb24geG1sQnVmZmVyQ0NhdAoKVGh1IEphbiAyNSAxOToyMjoyNSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW0gZG9jL01ha2VmaWxlLmFtIGxpYnhtbC5zcGVjLmluOiBwYWluZnVsIHdvcmsgdG8gZ2V0CgkgIHRoZSBIVE1MIGRvYyB0byBnbyBpbnRvIHRoZSAtZGV2ZWwgUlBNIC4uLgoJKiBhY2xvY2FsLm00IGNvbmZpZy5oLmluOiBzb21lIHVwZGF0ZXMgZHVlIHRvIGF1dG8qIG1hZ2ljCgpUaHUgSmFuIDI1IDE5OjExOjQ5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5oOiBhZGRlZCBhIGhvb2sgaW4gdGhlIGNvbnRleHQgc3RydWN0dXJlIGFsbG93aW5nIHRvCgkgIGxpbmsgdG8gZXh0cmEgc3VwcG9ydCwgbmVlZGVkIGZvciBYU0xUCgpUaHUgSmFuIDI1IDEzOjM0OjExIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5bY2hdIHhwb2ludGVyLmM6IGFkZGVkIHhtbFhQYXRoQ21wTm9kZXMsIGNoYW5nZWQKCSAgeG1sWFB0ckNtcFBvaW50cyB0byB1c2UgaXQuCgkqIHByb3BhZ2F0ZWQgdGhlIGZvbGxvd2luZyBwYXRjaCBmcm9tIEFsZWphbmRybyBGb3Jlcm8KCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oIHhtbElPLmM6IGFwcGxpZWQgZnVydGhlciBzdWdnZXN0aW9ucwoJICBmcm9tIElnb3IgWmxhdGtvdmljIDxpZ29yekBkaWFsdXAubmFjYW1hci5kZT4gYW5kIGNsZWFudXAKCSogZXhhbXBsZS9nam9icmVhZC5jOiBmaXhlZCB3YXJuaW5ncywgbm93IHRoYXQgaXQgYnVpbGRzCgpXZWQgSmFuIDI0IDIwOjI3OjI4IENPVCAyMDAxIEFsZWphbmRybyBGb3Jlcm8gPGJhY2h1ZUBiYWNodWUuY29tPgoKICAgICAgICAqIHhtbElPLmMgKHhtbEZpbGVPcGVuLCB4bWxGaWxlT3BlblcpOiBSZW1vdmVkIHVubmVjZXNhcnkgY2hlY2tzLgoKICAgICAgICAqIHhtbElPLmMgKHhtbENoZWNrRmlsZW5hbWUpOiBGdW5jdGlvbiBhZGRlZCB0byBrbm93IHdoZXRoZXIgYSBnaXZlbgogICAgICAgICAgZmlsZW5hbWUgcG9pbnRzIHRvIGEgdmFsaWQgZmlsZSAobm90IGEgZGlyZWN0b3J5KS4KICAgICAgICAqIHhtbElPLmMgKHhtbEZpbGVPcGVuLCB4bWxGaWxlT3BlblcsIHhtbEd6ZmlsZU9wZW4sIHhtbEd6ZmlsZU9wZW5XKToKICAgICAgICAgIEFkZGVkIGNhbGxzIHRvIHhtbENoZWNrRmlsZW5hbWVEaXIuCgogICAgICAgICogeG1sSU8uYyAoeG1sR3pmaWxlT3BlbiwgeG1sR3pmaWxlT3BlblcsIHhtbEZkT3BlbiwgeG1sRmRPcGVuVyk6IFBhc3MKICAgICAgICAgIGBwYXRoJyAocmF0aGVyIHRoYW4gYGZpbGVuYW1lJykgYXMgdGhlIHBhcmFtZXRlciB0byBnem9wZW4gYW5kIG9wZW4uCgpUdWUgSmFuIDIzIDE2OjI2OjMwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbTogZml4ZWQgYSBwcm9ibGVtIHdpdGggRVhUUkFfRElTVAoKTW9uIEphbiAyMiAyMzo0MjoxNyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW0gZXhhbXBsZS9NYWtlZmlsZS5hbTogZmluYWxseSBmb3VuZCB0aGUgdHJpY2sKCSAgdG8gYnVpbGQgdGhlIGV4YW1wbGUsIGkuZS4gYWRkICIuIiBpbiBTVUJESVJTIGJlZm9yZSBleGFtcGxlCgkgIGluIHRoZSBsaXN0IDxncmluLz4KCk1vbiBKYW4gMjIgMTY6MzA6MzcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlZCB3aXRoIGFuIFhTTFQgc2VjdGlvbiwgcmVtb3ZlZCBwb2ludGVyIHRvCgkgIFczQyBDVlMgYmFzZS4KCk1vbiBKYW4gMjIgMTE6NDM6MjEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHdoZW4gY29weWluZyBhIFhTTFQgdHJlZSBvYmplY3QgdGVoIHRyZWUgbmVlZCB0byBiZSBjb3BpZWQKCSAgdG9vLCBhbmQgZGVhbGxvY2F0aW9uIG5lZWQgdG8gb2NjdXIgdGhlIHNhbWUgd2F5LgoKTW9uIEphbiAyMiAxMDozNTo0MCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGhJbnRlcm5hbHMuaCB4cGF0aC5bY2hdIGRlYnVnWE1MLmM6IGFkZGVkIHRoZSBYUEFUSF9YU0xUX1RSRUUKCSAgdHlwZSBjb3JyZXBvbmRpbmcgdG8gYW4gWFNMVCByZXN1bHQgdHJlZSBmcmFnbWVudC4gU2hhcmUgbW9zdAoJICBvZiB0aGUgZGF0YSBmb3JtYXQgd2l0aCBub2RlIHNldCwgYXMgd2VsbCBhcyBvcGVyYXRvcnMuCgkqIEhUTUx0cmVlLmM6IGFkZGVkIGEgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBkb2N0eXBlIG91dHB1dAoJICB3aGUgdGhpcyBvbmUgaXMgbm90IHByZXNlbnQgaW5pdGlhbGx5LgoJKiB0cmVlLmM6IG1ha2Ugc3VyZSB0YWh0IHRoZSBwYXJlbnQgYW5kIGRvYyBwb2ludGVycyBhcmUgcHJvcGVybHkKCSAgc2V0IHdoZW4gY29weWluZyBhdHRyaWJ1dGVzIChsaXN0cykuCgpTdW4gSmFuIDIxIDEwOjQ3OjM4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBodG1sVHJlZS5bY2hdIHhtbElPLmg6IGV4cG9ydGVkIGh0bWxEb2NDb250ZW50RHVtcE91dHB1dAoKRnJpIEphbiAxOSAxODoxNTo1MCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogc2VlbXMgSSBmaW5hbGx5IGtpbGxlZCB0aGF0IHVnbHkgcGF0aCBldmFsdWF0aW9uCgkgIGNvbnRleHQgYnVnICh0YWdnZWQgOTk5OSBpbiBjYXNlIGlzIGlzIHdyb25nKQoKRnJpIEphbiAxOSAwNjozMDozOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguW2NoXSB4cGF0aEludGVybmFscy5oOiBhZGRlZCB4bWxYUGF0aFJlZ2lzdGVyVmFyaWFibGVMb29rdXAoKQoJICBmb3IgWFNMVAoKVGh1IEphbiAxOCAxNjoxOTo0NyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sSU8uYzogR2FyeSBQZW5uaW5ndG9uIDxHYXJ5LlBlbm5pbmd0b25AdWsuc3VuLmNvbT4gZml4CgkgIGZvciB4bWxHemZpbGVPcGVuKCkgYnVnCgpUaHUgSmFuIDE4IDEzOjExOjUwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiByZW1vdmVkIGFuIGVycm9yIGZvdW5kIGJ5IFhTTFQgdXNhZ2UKCSogdHJlZS5jIHBhcnNlckludGVybmFscy5oOiB1c2UgYSBwcmVkZWZpbmVkIHN0YXRpYyBzdHJpbmcKCSAgZm9yIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMsIGF2b2lkIGZyZWVpbmcgdGhlbSBpbiB4bWxGcmVlTm9kZSwKCSAgZXhwb3J0ZWQgdGhlIHN0cmluZyBuYW1lIGluIHBhcnNlckludGVybmFscy5oIGFuZCBhZGRlZAoJICBhbm90aGVyIHZhbHVlIHRvIGRpc2FibGUgZW5jb2RpbmcgYXQgb3V0cHV0IChmb3IgWFNMVCksCgkgIGdhaW4gbWVtb3J5LCB0aW1lLgoKV2VkIEphbiAxNyAwOToxNToxNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogd2luMzIvUkVBRE1FLk1TRGV2IHdpbjMyL2xpYnhtbDIvbGlieG1sMl9hLmRzcAoJICB3aW4zMi9saWJ4bWwyL2xpYnhtbDJfc28uZHNwOiBuZXcgbWFrZWZpbGVzIGFuZCB1cGRhdGUKCSAgcHJvdmlkZWQgYnkgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgpUdWUgSmFuIDE2IDE4OjI0OjQ2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmMgOiB4bWxTYXZlRmlsZSwgeG1sU2F2ZUZpbGVFbmMsIGFwcGxpZWQgcGF0Y2ggZnJvbSAKCSAgR2FyeSBQZW5uaW5ndG9uCgpNb24gSmFuIDE1IDIwOjI0OjE4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCB0aGUgY29tYXByaXNpb24gb2YgdmFsdWVzIGFuZCBub2RlbGlzdHMsCgkgIG5lZWQgdG8gY29tcGFyZSBub2RlbGlzdCBzdGlsbCAuLi4KCSogZGVidWdYTUwuYzogYXZvaWRlZCBhIHBvc3NpYmxlIGNvcmUgZHVtcAoJKiBIVE1McGFyc2VyLmM6IGNsZWFudXAKCSogbmFub2h0dHAuYzogY29udHJpYnV0ZWQgZml4LgoJKiB0cmVlLmM6IGZpeGVzIGluIHByb3BlcnRpZXMgaGFuZGxpbmcgYWRkZWQgeG1sU2V0TnNQcm9wCgkgIG5lZWRlZCBieSBsaWJ4c2x0CgkqIHhwYXRoSW50ZXJuYWxzLmg6IGV4cG9ydGVkIHhtbFhQYXRoQm9vbGVhbkZ1bmN0aW9uLCBhZGRlZCBhIAoJICBjb21tZW50CgkqIFRPRE86IHVwZGF0ZWQKClNhdCBKYW4gIDYgMjI6MDU6MDkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jOiBhcHBsaWVkIEJqb3JuIFJlZXNlIG9wdGltaXphdGlvbgoJICBwYXRjaAoKU2F0IEphbiAgNiAxOToxMzoyNyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW06IGFwcGxpZWQgcGF0Y2ggZnJvIG1ha2UgY2hlY2sgZnJvbSBNYXJ0aW4gVmlkbmVyCgpUaHUgSmFuICA0IDE5OjA3OjQ5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjIuMTEKCSogZG9jL2h0bWwvKjogcmVidWlsZCB0aGUgSFRNTCBmaWxlcwoJKiBkb2MveG1sLmh0bWwgOiB1cGRhdGVkCgpUaHUgSmFuICA0IDE0OjA5OjU4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkIGEgc3R1cGlkIGJ1ZwoJKiB2YWxpZC5jOiBhcHBsaWVkICJQYXVsIEQuIFNtaXRoIiA8cGF1c21pdGhAbm9ydGVsbmV0d29ya3MuY29tPgoJICBwYXRjaGVzIHJlbGF0ZWQgdG8gdmFsaWRhdGlvbiBvZiBhbiBYSW5jbHVkZSBwcm9jZXNzaW5nIHJlc3VsdAoJKiBUT0RPOiB1cGRhdGVkCgpUaHUgSmFuICA0IDExOjQ2OjQwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBlbmNvZGluZy5jIHhtbElPLmM6IEZpeGluZyB0aGUgcHJvYmxlbSByZXBvcnRlZCBieSBNYXJjIFNhbmZhY29uCgkgIG9uIGxhcmdlIGZpbGVzCgpXZWQgSmFuICAzIDIxOjUxOjEzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxJTy5jOiBmaXhlZCB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZU1lbSBkb2MKCldlZCBKYW4gIDMgMTg6NTY6MDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYzogaHRtbENoZWNrUGFyYWdyYXBoIHRvIGNoZWNrIGh0bWxPbWl0dGVkRGVmYXVsdFZhbHVlLAoJICByZXBvcnRlZCBieSBKb25hcyBCb3Jnc3Ry9m0KCSogbmFub2h0dHAuYzogQXBwbGllZCBCam9ybiBSZWVzZScgSVBWNiBmaXJzdCBwYXRjaAoKV2VkIEphbiAgMyAxNjoxOTozOSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdGVzdFhQYXRoLmMgeHBhdGguYzogZml4aW5nIHRoZSBYUGF0aCB1bmlvbiBleHByZXNzaW9ucyBwcm9ibGVtCgkgIHJlcG9ydGVkIGJ5ICBNYXJ0aW4gVmlkbmVyIDxtYXJ0aW5AYXJ0YXgua2FybGluLm1mZi5jdW5pLmN6PgoKV2VkIEphbiAgMyAxNDoyMjozMyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sbGludC5jOiBNYWRlIGlzIHNvIGlmIHRoZSBmaWxlIG5hbWUgaXMgIi0iIGlzIHdpbGwgcmVhZCBmb3JtCgkgIHN0YW5kYXJkIGlucHV0LiBTdmVuIEhlaW5pY2tlICA8c3ZlbkB6ZW4ub3JnPgoJKiB0cmVlLmM6IGZpeGVkIGEgcHJvYmxlbSB3aGVuIGdyb3dpbmcgYnVmZmVyCgkqIHRyZWUuaDogZml4ZWQgdGhlIGNvbW1lbnQgb2YgdGhlIG5vZGUgdHlwZXMgZm9sbG93aW5nIGFuZGVyc2NhCgkgIGNvbW1lbnQKCSogVE9ETzogdXBkYXRlZAoKV2VkIERlYyAyNyAxMjozNTo0OSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLltjaF06IGFkZGVkIGEgd2F5IHRvIGF2b2lkIGFkZGluZyBhdXRvbWF0aWNhbGx5CgkgIG9taXR0ZWQgdGFncy4gaHRtbEhhbmRsZU9taXR0ZWRFbGVtKCkgYWxsb3dzIHRvIGNoYW5nZSB0aGUKCSAgZGVmYXVsdCBoYW5kbGluZy4KCSogdHJlZS5bY2hdIHhtbGxpbnQuYzogYWRkZWQgeG1sRG9jRHVtcEZvcm1hdE1lbW9yeSgpIGFuZCAKCSAgeG1sRG9jRHVtcEZvcm1hdE1lbW9yeUVuYygpLCB1c2VzIG1lbW9yeSBmdW5jdGlvbnMgZm9yIG91dHB1dAoJICBvZiB4bWxsaW50IHRvbyB3aGVuIHVzaW5nIC0tbWVtb3J5IGZsYWcsIGFkZGVkIGEgbWVtb3J5IHRlc3QKCSAgc3VpdGUgYXQgdGhlIE1ha2VmaWxlIGxldmVsLgoJKiB4cGF0aEludGVybmFscy5oIHhwYXRoLltjaF0geHBvaW50ZXIuYzogZml4ZWQgcHJvYmxlbXMKCSAgd2l0aCBuYW1lc3BhY2UgdXNlIHdoZW4gZW5jb3VudGVyaW5nIFFOYW1lcyBpbiBYUGF0aCBldmFsYXRpb24sCgkgIGFkZGVkIHhtbG5zKCkgc2NoZW1lIGluIFhQb2ludGVyLgoJKiBuYW5vZnRwLmMgOiBpbmNvcnBvcmF0ZWQgYSBmaXgKCSogcGFyc2VyLmMgeG1sSU8uYzogZml4ZWQgcHJvYmxlbXMgcmFpc2VkIHdpdGggZW5jb2Rpbmcgd2hlbiB1c2luZwoJICB0aGUgbWVtb3J5IEkvTwoJKiBwYXJzZXJJbnRlcm5hbHMuYzogY2xvc2VkIGJ1ZyAyNTkzNCByZXBvcnRlZCBieSAKCSAgdG9yc3Rlbi5sYW5kc2Nob2ZmQGlubm9taW5hdGUuZGUKCSogVE9ETzogdXBkYXRlZAoKU2F0IE5vdiAyNSAxMTo0NjoyNyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4gZG9jL2h0bWwvKiBkb2MveG1sLmh0bWw6IG1hZGUgYSAyLjIuOSByZWxlYXNlCgkgIG9uIGEgbm9uLXVwZGF0ZWQgdHJlZSA6LSgsIG1hZGUgYSAyLjIuMTAgcmVsZWFzZSB0byBjb3JyZWN0IHRoZQoJICBzaXR1YXRpb24KClNhdCBOb3YgMjUgMTA6NDE6MzcgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2h0dHAuYyBwYXJzZXIuW2NoXSB0cmVlLltjaF0geG1sSU8uW2NoXSB4bWxsaW50LmMgeHBhdGguYwoJICBwYXJzZXJJbnRlcm5hbHMuaCB2bXMvYnVpbGRfbGlieG1sLmNvbSB2bXMvY29uZmlnLnZtcyBNYWtlZmlsZS5hbToKCSAgaW50ZWdyYXRlZCBhIHNldCBvZiBPcGVuVk1TIGNoYW5nZXMgZnJvbSBIb3dhcmQgVGF5bG9yCgkgIDxIb3dhcmQuVGF5bG9yQHBhY29hc3QuY29tPgoKU2F0IE5vdiAyNSAwMToyMTowMSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF0geG1sSU8uYzogYWRkZWQgeG1sRG9jRHVtcE1lbW9yeUVuYygpIGZyb20gSm9obiBLcm9sbAoJKiBlcnJvci5jOiBhcHBsaWVkIGZpeCBzdWdnZXN0ZWQgYnkgIkxlbyBEYXZpZHNvbiIgPGxlb0BveC5jb21wc29jLm5ldD4KClNhdCBOb3YgMjUgMDA6MjQ6NDkgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBzb21lIGZpeGVzIG9uIGF1dG8tb3BlbiBvZiBodG1sL2hlYWQvYm9keQoJKiBlbmNvZGluZy5jOiBmaXhlZCBhIGNvbXBpbGF0aW9uIGVycm9yIG9uIHNvbWUgZ2NjIGVudgoJKiB4cGF0aC5jIHhwb2ludGVyLltjaF0geHBhdGhJbnRlcm5hbHMuaDogaW1wcm92ZWQgdGhlCgkgIFhQb2ludGVyIGltcGxlbWVudGF0aW9uCgkqIHRlc3QvWFBhdGgveHB0ci9zdHJwb2ludCB0ZXN0L1hQYXRoL3hwdHIvc3RycmFuZ2UzOiBhZGRlZAoJICByZWxhdGVkIFhQb2ludGVyIHRlc3RzIGFuZCBhc3NvY2lhdGVkIHJlc3VsdHMKCkZyaSBOb3YgMjQgMTQ6MDE6NDQgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbGR0ZC5odG1sIGRvYy94bWwuaHRtbDogZm9sbG93aW5nIGEgc2hvcnQgc3RlcCBieSBzdGVwCgkgIGd1aWRhbmNlIG9uIElSQyB0byBoZWxwIG1hY2llaiB3aXRoIERURHMgSSBzdGFydGVkIGEgc21hbGwKCSAgcGFnZSBvbiB0aGUgc3ViamVjdC4KCkZyaSBOb3YgMTcgMTc6Mjg6MDYgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBoYW5kbGluZyBvZiBicm9rZW4gY2hhcnJlZnMKCSogeG1sbWVtb3J5LmggbGlieG1sMi5kc3AgaW5jbHVkZS93aW4zMmNvbmZpZy5oOiByZXBvcnRpbmcgV2luZG93cwoJICBwYXRjaGVzCgpNb24gTm92IDEzIDE5OjE3OjIwIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbCBkb2MvaHRtbC8qIDogcmVidWlsdCB0aGUgZG9jcyBhZnRlciBhZGRpbmcKCSAgeGluY2x1ZGUgYW5kIHVwZGF0ZWQgcGFnZSBmb3IgMi4yLjcgYW5kIDIuMi44CgkqIGNvbmZpZ3VyZS5pbjogcmVsZWFzaW5nIDIuMi44CgpNb24gTm92IDEzIDEyOjM5OjM4IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5bY2hdIHBhcnNlckludGVybmFscy5jOiBhcHBsaWVkIHRoZSBjb25kaXRpb25hbAoJICBzZWN0aW9uIHByb2Nlc3NpbmcgZml4IGZyb20gSm9uYXRoYW4gUCBTcHJpbmdlcgoJICA8am9uYXRoYW4uc3ByaW5nZXIyQGd0ZS5uZXQ+CgkqIHhtbHZlcnNpb24uaC5pbiB3aW4zMi9saWJ4bWwyL2xpYnhtbDIuZHNwIDogVXBkYXRlZCBNUwoJICBwcm9qZWN0IGZpbGUsIGZpeGVkIGljb252IGRlZmF1bHQgbm9uIHN1cHBvcnQKCSogeHBhdGguYzogZml4ZWQgdGhlIHByb2JsZW0gb2YgZXZhbHVhdGluZyByZWxhdGl2ZSBleHByZXNzaW9ucwoJICB3aGVuIGEgbm9kZSBjb250ZXh0IGlzIHByb3ZpZGVkLgoKU3VuIE5vdiAxMiAxNjozMToxOSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLmM6IGZpeGVkIGdjYyAyLjk1IG5ldyB3YXJuaW5ncwoJKiBTQVguYzogZml4ZWQgYSBzdHVwaWQgYnVnCgkqIHRyZWUuYzogZml4ZWQgYSBmb3JtYXR0aW5nIHByb2JsZW0gd2hlbiByb3VuZC10cmlwcGluZwoJICBmcm9tL3RvIG1lbW9yeQoJKiB4aW5jbHVkZS5jOiBjaGFzZWQgbWVtbGVhaywgZml4ZWQgYSBiYXNlIHByb2JsZW0KCSogeHBvaW50ZXIuYzogYWRkZWQgeG1sWFB0ckJ1aWxkUmFuZ2VOb2RlTGlzdCgpLCBmaW5pc2hlZCA/IAoJICB4bWxYUHRyQnVpbGROb2RlTGlzdCgpCgkqIFRPRE86IHVwZGF0ZWQKCSogTWFrZWZpbGUuYW0gdGVzdC9YSW5jbHVkZS9kb2NzIHRlc3QvWEluY2x1ZGUvZW50cyByZXN1bHQvWEluY2x1ZGU6CgkgIGFkZGluZyBhIGZpcnN0IHNtYWxsIHNldCBvZiByZWdyZXNzaW9uIHRlc3RzIGZvciBYSW5jbHVkZQoKVHVlIE5vdiAgNyAxNToxMTozNCBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vaHR0cC5bY2hdOiBhcHBsaWVkIFdheW5lIERhdmlzb24gcGF0Y2hlcyB0byBhY2Nlc3MKCSAgdGhlIFdXVy1BdXRob3JpemF0aW9uIGhlYWRlci4KCSogcGFyc2VyLmM6IENsb3NlZCBCdWcjMzA4NDc6IFByb2JsZW1zIHdoZW4gc3dpdGNoaW5nIGVuY29kaW5nCgkgIGluIHNob3J0IGZpbGVzIGJ5IGFwcGx5aW5nIFNpbW9uIEJlcmcncyBwYXRjaC4KCSogdmFsaWQuYzogZml4ZWQgYSB2YWxpZGF0aW9uIHByb2JsZW0KCSogaGFzaC5jIHBhcnNlci5oIHBhcnNlckludGVybmFscy5oIHRlc3RIVE1MLmMgdGVzdFNBWC5jIHRyZWUuaAoJICB4bWxlcnJvci5oIHhtbG1lbW9yeS5oIHhtbHZlcnNpb24uaC5pbjogYXBwbGllZCBhIERMTCBwYXRjaCBmcm9tCgkgIFdheW5lIERhdmlzb24KCSogeHBvaW50ZXIuW2NoXTogYWRkZWQgZmlyc3QgdmVyc2lvbiBvZiB4bWxYUHRyQnVpbGROb2RlTGlzdCgpCgkgIG5lZWQgdG8gYmUgZXh0ZW5kZWQgdG8gbm9uIGZ1bGwgbm9kZXMgc2VsZWN0aW9ucy4KCSogeGluY2x1ZGUuYzogc3RhcnRzIHRvIHdvcmsgZGVjZW50bHkKCk1vbiBOb3YgIDYgMTc6MjI6NDYgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdIHhpbmNsdWRlLltjaF0geG1sbGludC5jIGNvbmZpZ3VyZS5pbiB2YWxpZC5jCgkgIGRlYnVnWE1MLmMgeG1sdmVyc2lvbi5oLmluOiBTdGFydGVkIGFkZGluZyBYSW5jbHVkZSBzdXBwb3J0LAoJICB0aGlzIGlzIGEgbmV3IHhtbGxpbnQgb3B0aW9uCgkqIHRyZWUuYyB4cGF0aC5jOiBhcHBsaWVkIFRPTSBwYXRjaGVzIGZvciBYUGF0aAoJKiB4cG9pbnRlci5jOiBmaXhlZCBhIGNvdXBsZSBvZiBlcnJvcnMuCgkqIHVyaS5jOiBhZGRlZCBhbiBlc2NhcGluZyBmdW5jdGlvbiBuZWVkZWQgZm9yIHhpbmNsdWRlCgkqIHRlc3RYUGF0aC5jIGhhc2guYyBIVE1MdHJlZS5jOiBtaW5vciBjbGVhbnVwcyByYWlzZWQgYnkKCSAgbmV3IHdhcm5pbmcgZnJvbSBSSDcwIGdjYydzIHZlcnNpb24KClR1ZSBPY3QgMzEgMTQ6MTQ6MTMgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBsb29wIG9uIGludmFsaWQgY2hhciBpbiBzY3JpcHRzCgkqIHBhcnNlci5jOiB1cGRhdGUgdG8gZGVzY3JpcHRpb24gb2YgeG1sSU9QYXJzZURURCgpCgkqIGxpYnhtbC5tNCB4bWx2ZXJzaW9uLmguaW46IGNoYW5nZXMgY29udHJpYnV0ZWQgYnkKCSAgTWljaGFlbCBTY2htZWluZyA8bS5zY2htZWluZ0BpbnRlcm5ldC1mYWN0b3J5LmRlPgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyBmb3IgMi4yLjcKCSogTWFrZWZpbGUuYW06IHRyeWluZyB0byBhdm9pZCAgY29uZmlnLmggYW5kIGFjY29uZmlnLmgKCSAgYmVpbmcgaW5jbHVkZWQgaW4gdGhlIGRpc3RyaWIKCSogY29uZmlndXJlLmluOiByZWxlYXNlZCAyLjIuNwoKTW9uIE9jdCAzMCAxNzowODoxMCBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF0gZGVidWdYTUwuYyBwYXJzZXJJbnRlcm5hbHMuYyB4cGF0aC5jOiBEZXByZWNhdGVkIFBpJ3MKCSAgbGlrZSBuYW1lc3BhY2VzIGZvciBnb29kLiBVbmlmaWVkIHhtbE5zIGFuZCB4bWxOb2RlIHNvbWV3aGF0LgoKTW9uIE9jdCAzMCAxNjoyNjo0OSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuW2NoXTogYWRkZWQgeG1sSU9QYXJzZURURCgpCgkqIHhwb2ludGVyLmM6IGFkZGVkIHN1cHBvcnQgZm9yIHRoZSAyIGV4dHJhIHBhcmFtZXRlcnMgb2YKCSAgc3RyaW5nLXJhbmdlLCBmaXhlZCBhIHN0b29waWQgZXJyb3Igd2hlbiAnMCcgd2FzIHByZXNlbnQKCSAgaW4gWFBvaW50ZXIgZXhwcmVzc2lvbnMKCSogdGVzdC9YUGF0aC94cHRyL3N0cnJhbmdlMiByZXN1bHQvWFBhdGgveHB0ci9zdHJyYW5nZTI6IGFkZGVkCgkgIHRlc3RzdWl0ZSBmb3IgdGhlIGFib3ZlCgpNb24gT2N0IDMwIDEwOjI2OjQzIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGxpYnhtbC5zcGVjLmluOiBpbXByb3ZlZCBwYWNrYWdlIGRlc2NyaXB0aW9ucwoKU3VuIE9jdCAyOSAxOTowMzoxMSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5jIHhwYXRoSW50ZXJuYWxzLmg6IGFwcGxpZWQgYSBsYXJnZSBjbGVhbmluZyBwYXRjaAoJICBmcm9tIFRPTSA8cHRpdHRvbUBmcmVlLmZyPiwgaXQgYWxzbyBhZGQgbmFtZXNwYWNlIHN1cHBvcnQKCSAgZm9yIGZ1bmN0aW9uIGFuZCB2YXJpYWJsZXMgcmVnaXN0cmF0aW9uLgoKU3VuIE9jdCAyOSAxODo1MTo0NiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB1cmkuYzogV2F5bmUgRGF2aXNvbidzIHBhdGNoIGZpeGluZyB4bWxCdWlsZFVSSSgpCgkqIE1ha2VmaWxlLm1pbmd3OiBXYXluZSBEYXZpc29uJ3MgdXBkYXRlIGFkZGluZyBoYXNoLmMKClN1biBPY3QgMjkgMTg6Mzg6MTIgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguYzogZml4ZWQgdGhlIHJvb3QgZXZhbHVhdGlvbiBwcm9ibGVtcwoJKiBIVE1McGFyc2VyLmMgcmVzdWx0L0hUTUwvZG9jMy5odG06IGZpeGVkIHRoZSBwcm9ibGVtIG9mIG5vbgoJICBpZ25vcmFibGUgc3BhY2VzIHdpdGggPGI+IDxib2xkPiA8ZW0+CgkqIHRyZWUuYzogZml4ZWQgYSBsb29wIGluIHhtbFNlYXJjaE5zQnlIcmVmKCkKCkZyaSBPY3QgMjcgMTg6NTc6MzIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLmM6IGFwcGxpZWQgYW5vdGhlciBYUGF0aCBwYXRjaCBmcm9tIFRPTSAKCSogeHBhdGguYyBpbmNsdWRlL21ha2VmaWxlLmFtOiBhcHBsaWVkIGFub3RoZXIgcGF0Y2ggZnJvbSAKCSAgY2hpbmFAdGhld3JpdHRlbndvcmQuY29tIChjbGVhbnVwIG9uIElSSVgpLgoKRnJpIE9jdCAyNyAxMzo0NToyOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sLWNvbmZpZy4xOiByZWNlaXZlZCBhIGZpeGVkIHZlcnNpb24gZnJvbSBGcmVkcmlrIEhhbGxlbmJlcmcKCSAgPGhhbGxvbkBseXNhdG9yLmxpdS5zZT4KClRodSBPY3QgMjYgMTY6MDU6MjUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLmMgdGV4dFhQYXRoLmMgeHBhdGhJbnRlcm5hbHMuaDogYXBwbGllZCBUT00gPHB0aXR0b21AZnJlZS5mcj4KCSAgY2xlYW51cCBwYXRjaCBmb3IgWFBhdGgKCldlZCBPY3QgMjUgMjE6MzE6MTAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhdGNoZWQgdG8gcmVkaXJyZWN0IGFsbCAib3V0IG9mIGNvbnRleHQiIGVycm9yIG1lc3NhZ2VzIHRvCgkgIGEgcmVjb25maWd1cmFibGUgcm91dGluZS4gVGhlIGNoYW5nZXMgYXJlOgoJKiB4bWxlcnJvci5oIDogYWRkZWQgdGhlIGV4cG9ydCBvZiBhbiBlcnJvciBjb250ZXh0IHR5cGUgKHZvaWQgKikKCSAgYW4gZXJyb3IgaGFuZGxlciB0eXBlIHhtbEdlbmVyaWNFcnJvckZ1bmMgdGhlcmUgaXMgYW4gaW50ZXJmYWNlCgkgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmModm9pZCAqY3R4LCB4bWxHZW5lcmljRXJyb3JGdW5jIGhhbmRsZXIpOwoJICB0byByZXNldCB0aGUgZXJyb3IgaGFuZGxpbmcgcm91dGluZSBhbmQgaXRzIGFyZ3VtZW50CgkgIChieSBkZWZhdWx0IGl0J3MgZXF1aXZhbGVudCB0byByZXNwZWN0aXZlbHkgZnByaW50ZiBhbmQgc3RkZXJyLgogICAgICAgICogYWxsIHRoZSBjIGZpbGVzOiBhbGwgd2lsZCBhY2Nlc3NlcyB0byBzdGRlcnIgb3Igc3Rkb3V0IHdpdGhpbgoJICB0aGUgbGlicmFyeSBoYXZlIGJlZW4gcmVwbGFjZWQgdG8gY2FsbHMgdG8gdGhlIGhhbmRsZXIuCgpXZWQgT2N0IDI1IDE1OjI3OjE5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IHJlbGVhc2UgMi4yLjYKCSogeHBhdGguW2NoXSB4cG9pbnRlci5jIHhwYXRoSW50ZXJuYWxzLmg6IGFkZGVkIHhwYXRoSW50ZXJuYWxzLmgKCSAgZXhwb3J0aW5nIHRoZSBpbm5lciBmdW5jdGlvbnMgb2YgeHBhdGggZm9yIGV4dGVuc2lvbiBtb2R1bGVzCgkqIGRvYy8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2MKCldlZCBPY3QgMjUgMTI6NDg6NTUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9odHRwLmMgOiBhcHBsaWVkIFdheW5lIEhUVFAgY2xlYW51cCBwYXRjaAoJKiB0cmVlLltjaF06IGFwcGxpZWQgVE9NIDxwdGl0dG9tQGZyZWUuZnI+IGZvciB4bWxOb2RlU2V0QmFzZSgpCgkgIGFuZCB4bWxOb2RlU2V0U3BhY2VQcmVzZXJ2ZSgpCgpXZWQgT2N0IDI1IDEyOjExOjAzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5jOiBjbG9zaW5nIGJ1ZyAjMjkyNjAKClR1ZSBPY3QgMjQgMTg6NDk6MzQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGhhc2guW2NoXSBkZWJ1Z1hNTC5jOiBleHBhbmRlZC9lbmhhbmNlZCB0aGUgQVBJLCBhZGRlZAoJICBtdWx0aWtleSB0dXBsZXMsIG1hZGUgaGFzaCBzdHJ1Y3R1cmUgb3BhcXVlCgkqIHZhbGlkLltjaF06IG1vdmVkIGVsZW1lbnRzLCBhdHRyaWJ1dGVzLCBub3RhdGlvbnMgZGVjYWxhcmF0aW9ucwoJICBhcyB3ZWxsIGFzIElEIGFuZCByZWZzIHRvIGhhc2ggdGFibGVzLgoJKiBlbnRpdGllcy5jOiBoYXNoIGNsZWFudXAKCSogeG1sbWVtb3J5LmM6IGZpeGVkIGEgZHVtcCBwcm9ibGVtIGluIGRlYnVnIG1vZGUKCSogaW5jbHVkZS9NYWtlZmlsZS5hbTogcHJvYmxlbSBwYXNzaW5nIGluIERFU1RESVI9IHZhbHVlcyBwYXRjaAoJICBmcm9tIE1hcmMgQ2hyaXN0ZW5zZW4gPG1hcmNAY2FsZGVyYXN5c3RlbXMuY29tPgoJKiBuYW5vaHR0cC5jOiByZW1vdmVkIGRlYnVnZ2luZyByZW1haW5zCgkqIEhUTUxwYXJzZXIuYzogdGhlIGJvZ3VzIHRhZyBzaG91bGQgYmUgaWdub3JlZCAoV2F5bmUpCgkqIEhUTUxwYXJzZXIuYyBwYXJzZXIuYzogZml4aW5nIGEgbnVtYmVyIG9mIHByb2JsZW1zIHdpdGggdGhlCgkgIG1hY3JvcyBpbiB0aGUgKnBhcnNlci5jIGZpbGVzIChXYXluZSkuCgkqIEhUTUxwYXJzZXIuYzogY2xvc2UgdGhlIHByZXZpb3VzIG9wdGlvbiB3aGVuIG9wZW5pbmcgYSBuZXcgb25lCgkgIChNYXJjIFNhbmZhY29uKS4KCSogcmVzdWx0L0hUTUwvKjogdXBkYXRlZCB0aGUgSFRNTCByZXN1bHRzIGFjY29yZGluZ2x5CgpTdW4gT2N0IDIyIDE4OjM5OjE5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbnRpdGllcy5bY2hdIHhwYXRoLltjaF0gaGFzaC5bY2hdIGRlYnVnWE1MLmMgdHJlZS5oOiBhZGRlZC9oYWNrZWQKCSAgaGFzaCB0YWJsZXMgZnJvbSBCam9ybiBSZWVzZSA8YnJlZXNlQG1haWwxLnN0b2ZhbmV0LmRrPi4gU3dpdGNoZWQKCSAgWFBhdGggZnVuY3Rpb25zIGFuZCBYTUwgZW50aXRpZXMgdGFibGUgdG8gdGhlbS4gTW9yZSB0byBjb21lLi4uCgkqIHhtbElPLmM6IGZpeGVkIGxpYnhtbCBjbG9zaW5nIEZJTEVzIGl0IGRpZG4ndCBvcGVuLgoKU3VuIE9jdCAyMiAxMzo1OTo1MCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBjb2FsZXNjZSBhZGphY2VudCB0ZXh0IG5vZGVzCgkqIHZhbGlkLmM6IGhhbmRsaW5nIG9mIGJsYW5rIG5vZGVzIGluIERUZCB2YWxpZGF0aW9uIChyYWlzZWQKCSAgYnkgcHJvYmxlbXMgd2l0aCBhIHBvc3RlcmlvcmkgdmFsaWRhdGlvbikuCgkqIG5hbm9odHRwLmM6IGNoYW5naW5nIGJlaGF2aW91ciBvbiBIVFRQIHdyaXRlIHN0dWZmLgoJKiBIVE1MdHJlZS5jOiBmb3JjZWQgYm9keSBhbmQgaHRtbCB0byBiZSBleHBsaWNpdGVseSBjbG9zZWQuCgkqIHhwYXRoLmg6IGV4cG9ydGVkIG1vcmUgWFBhdGggZnVuY3Rpb25zLgoKU3VuIE9jdCAxNSAyMjoyODozMiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKICAgICAgICAqIFJlbGVhc2Ugb2YgMi4yLjUKCSogeHBvaW50ZXIuYzogcmFuZ2UoKSByYW5nZS1pbnNpZGUgYW5kIG90aGVyIGhlbHBlciBmdW5jdGlvbnMKCSogcGFyc2VySW50ZXJuYWxzLmM6IGZpeGVkIHBlcmYgcHJvYmxlbSByYWlzZWQgYnkgcm9sZkBwb2ludHNtYW4uZGUKClN1biBPY3QgMTUgMTY6MjE6MjcgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFNBWC5jOiBIVE1MIGF0dHJpYnV0ZXMgbmVlZCBub3JtYWxpemF0aW9uIHRvbyAoQmpvcm4gUmVlc2UpCgkqIEhUTUxwYXJzZXIuW2NoXTogYWRkZGVkIGh0bWxJc1NjcmlwdEF0dHJpYnV0ZSgpCgpTdW4gT2N0IDE1IDEzOjE4OjM2IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvKjogcmVidWlsdCBkb2NzIHByZXBhcmluZyBmb3IgMi4yLjUgcmVsZWFzZSwgYWRkZWQgVVJJCgkgIGFuZCBYUG9pbnRlciBtb2R1bGVzCgpTdW4gT2N0IDE1IDEyOjEzOjMwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBTQVguaDogY2xvc2VkICMyNTEwNwoKU3VuIE9jdCAxNSAxMjowNjoxNiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdGVzdFNBWC5jOiBmaXhlZCBwcm9ibGVtIHdpdGggY2RhdGEgcmVwb3J0aW5nCgkqIFNBWHJlc3VsdC8qIDogdXBkYXRlZAoKU3VuIE9jdCAxNSAxMjowMDoyNCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMgdGVzdC93YXAueG1sIHJlc3VsdC9ub2VudC93YXAueG1sIHJlc3VsdC93YXAueG1sOgoJICBDbG9zZWQgYnVnICMyNzQ5OSwgYWRkZWQgdG8gcmVncmVzc2lvbiB0ZXN0cwoJKiBUT0RPOiB1cGRhdGVkCgpTdW4gT2N0IDE1IDAxOjM0OjM3IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgSFRNTHRyZWUuW2NoXSBTQVguYyB0ZXN0SFRNTC5jIHRyZWUuYzogZml4ZWQgSFRNTAoJICBzdXBwb3J0IGZvciBTQ1JJUFQgYW5kIFNUWUxFIHdpdGggaGVscCBmcm9tIEJqb3JuIFJlZXNlCgkqIHRlc3QvSFRNTC8qIHJlc3VsdC9IVE1MLyo6IGFkZGVkIHNpbXBsZSB0ZXN0Y2FzZSBhbmQgdXBkYXRlZAoJICB0aGUgZXhpc3Rpbmcgb25lcy4KCSAgCkZyaSBPY3QgMTMgMTg6MjQ6MzEgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLmMgeHBvaW50ZXIuYzogWFBvaW50ZXIgcmVvcmRlciBvZiByYW5nZXMgc3RhcnQvZW5kIGFuZAoJICBzdHJpbmctcmFuZ2UgZm9yIGVtcHR5IHN0cmluZ3MKCSogdGVzdC9YUGF0aC9kb2NzL3N0ciB0ZXN0L1hQYXRoL3hwdHIvY2hhcHRlcnNyYW5nZQoJICB0ZXN0L1hQYXRoL3hwdHIvc3RycmFuZ2U6IGF1Z21lbnRlZCB0aGUgWFBvaW50ZXIgdGVzdHN1aXRlCgpGcmkgT2N0IDEzIDEyOjIxOjQ4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwgZG9jL3htbG1lbS5odG1sOiBhZGRlZCBhIG1vZHVsZSBkZXNjcmliaW5nIG1lbW9yeQoJICBpbnRlcmZhY2VzIGFuZCB1c2UsIHVwZGF0ZWQgdGhlIG1haW4gcGFnZS4KCkZyaSBPY3QgMTMgMDE6MjM6NDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHhtbElPLmM6IFdheW5lIERhdmlzb24gV2luMzIgcGF0Y2gKCSAgbmFub2Z0cCBjb2RlIHdvcmsgb24gV2luZG93cyB0b28gbm93CgpGcmkgT2N0IDEzIDAwOjU0OjM3IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0ZXN0WFBhdGguYyB4cGF0aC5bY2hdOiBtb3ZlZCBzb21lIGRlYnVnIGZ1bmN0aW9ucyB0byB4cGF0aCBjb3JlCgkqIHhwb2ludGVyLmM6IGltcGxlbWVudGVkIHN0cmluZy1yYW5nZSgpIGF0IGxlYXN0IGEgZ29vZCBmaXJzdCB2ZXJzaW9uCgkqIHRlc3QvWFBhdGgvZG9jcy9zdHIgdGVzdC9YUGF0aC94cHRyL3N0cnJhbmdlCgkgIHJlc3VsdC9YUGF0aC94cHRyL3N0cnJhbmdlOiB0aGUgc3RyaW5nLXJhbmdlKCkgdGVzdHMKClRodSBPY3QgMTIgMTA6MDI6NTkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1ha2VmaWxlLmFtIGluY2x1ZGUvTWFrZWZpbGUuYW0gaW5jbHVkZS93aW4zMmNvbmZpZy5oCgkgIHdpbjMyL01ha2VmaWxlLm1pbmd3OiBmaXhlZCBwcm9ibGVtcyByZXBvcnRlZCBieSBXYXluZSBEYXZpc29uCgkgIGFuZCBtYWtlIGRpc3RjaGVjawoKVGh1IE9jdCAxMiAwMTo0NDowOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2h0dHAuYzogYWRkZWQgeG1sTmFub0hUVFBUaW1lb3V0KGludCBkZWxheSksIHJlbW92ZWQgYSBidWcKCSAgeG1sTmFub0hUVFBNZXRob2Qgb24gaW5wdXQgTWltZVR5cGUgVG9ueSBMYW0gPFRvbnkuTGFtQGVuZy5zdW4uY29tPgoJKiB4cG9pbnRlci5jOiBzbGlnaHQgZXh0ZW5zaW9uIG9mIHhtbFhQdHJMb2NhdGlvblNldE1lcmdlCgpUaHUgT2N0IDEyIDAxOjM3OjUzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWcuaC5pbiBjb25maWd1cmUuaW4gbmFub2Z0cC5jIG5hbm9odHRwLmMgeG1sdmVyc2lvbi5oLmluIDoKCSAgcGF0Y2ggZm9yIHNvY2tsZW5fdCBkZXRlY3Rpb24gYnkKCSAgQWxiZXJ0IENoaW4tQS1Zb3VuZyA8Y2hpbmFAdGhld3JpdHRlbndvcmQuY29tPgoKV2VkIE9jdCAxMSAxNzo1Mzo1NyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jIHZhbGlkLmMgeG1sbGludC5jOiBGaXhlZCBhIGZldyBwb3N0dmFsaWRhdGlvbiBidWdzCgkgIGFuZCBhZGRlZCBhIC0tZHRkdmFsaWQgb3B0aW9uIHRvIHhtbGxpbnQgdXNlZCB0byB0ZXN0IGl0CgpXZWQgT2N0IDExIDE1OjAxOjI5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWwtY29uZmlnLjEgTWFrZWZpbGUuYW0gbGlieG1sLnNwZWMuaW46IGFkZGluZyBhIG1hbiBwYWdlIGZvcgoJICB4bWwtY29uZmlnIGJ5IEZyZWRyaWsgSGFsbGVuYmVyZyA8aGFsbG9uQGx5c2F0b3IubGl1LnNlPgoKV2VkIE9jdCAxMSAxMjo0MTozMCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguW2NoXSB4cG9pbnRlci5bY2hdOiB3b3JrZWQgb24gWFBhdGggZnVuY3Rpb25zIGFuZCB2YXJpYWJsZQoJICBoYW5kbGluZ3MgKHJlZ2lzdHJhdGlvbiwgbG9va3VwLCBjbGVhbnVwKQoKV2VkIE9jdCAxMSAwMTo0Njo0NCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluIE1ha2VmaWxlLmFtIGluY2x1ZGUvbWFrZWZpbGUuYW06IGFkZGluZyBYUG9pbnRlcgoJICBhbmQgWFB0cnRlc3RzIHRhcmdldAoJKiB4cG9pbnRlci5bY2hdIDogbmV3IGZpbGVzIGZvciBYUG9pbnRlciBzdXBwb3J0CgkqIHRlc3QvWFBhdGgveHB0ciByZXN1bHQvWFBhdGgveHB0cjogYWRkZWQgWFBvaW50ZXIgdGVzdHN1aXRlIGFuZAoJICBtb3JlIFhQYXRoIHRlc3RzCgpXZWQgT2N0IDExIDAxOjIzOjI1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IGZpeGVkLCB2ZXJ5IGJyb2tlbiwgbWFrZSBkaXN0Y2hlY2sgd29ya3MgYWdhaW4KCldlZCBPY3QgMTEgMDI6NTM6MTAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1vcmUgd29yayB0b3dhcmQgMi4yLjUsIGludGVncmF0ZWQgYSBudW1iZXIgb2YgcGF0Y2hlcwoJKiBjb25maWd1cmUuaW4gTWFrZWZpbGUuYW0gd2luMzJjb25maWcuaC5pbjogdHJ5aW5nIHRvIGNsZWFudXAKCSAgbWFrZSBkaXN0Y2hlY2sgLi4uLiBodWggLi4uCgkqIGluY2x1ZGUvTWFrZWZpbGUuYW0gaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBuZXcgZGlyZWN0b3J5CgkgIGZvciBpbmNsdWRlcwoJKiB3aW4zMi9NYWtlZmlsZS5taW5ndyB3aW4zMi9SRUFETUUuTVNEZXYgd2luMzIvbGlieG1sMi9saWJ4bWwyLmRzcAoJICB1cGRhdGVkIHRlaCBtYWtlZmlsZXMgYW5kIGluc3RydWN0aW9ucyBmb3IgV0lOMzIKCSogeHBhdGguYzogc21hbGwgZml4ZXMKCSogdGVzdC9YUGF0aC8gcmVzdWx0cy9YUGF0aDogdXBkYXRlZCB0aGUgdGVzdGNhc2VzIGFuZCByZXN1bHRzCgkqIEhUTUxwYXJzZXIuYyBuYW5vaHR0cC5jIHRlc3RYUGF0aC5jOiBpbmNvcnBvcmF0ZWQgcHJvdmlkZWQgb3IKCSAgc3VnZ2VzdGVkIHBhdGNoZXMKCSogdmFsaWQuYzogZml4ZWQgYW4gSUQgYnVnCgpNb24gT2N0ICA5IDE0OjI4OjU2IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBtb3ZlZCB4bWwtZXJyb3IuaCB0byB4bWxlcnJvci5oOiBzZWVtcyB0aGlzIGFsbG93ZWQgdG8gYnlwYXNzCgkgIHRoZSBhdXRvbWFrZSBidWcgd2hlcmUgd3JvbmcgZGVwZW5kZW5jaWVzIHdlcmUgZ2VuZXJhdGVkLgoJKiB4cGF0aC5bY2hdOiB3b3JrZWQgb24gWFBvaW50ZXIKCkZyaSBPY3QgIDYgMTI6NTg6MDQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbTogMi4yLjUsIHNoaXAgdGhlIGluY2x1ZGUgaW4gYW4KCSAgaW5jbHVkZS9saWJ4bWwgc3ViZGlyZWN0b3J5LCB1c2Ugc3ltbGlua3Mgd2hlbiB1c2luZyBDVlMKCSogdGVzdFNBWC5jOiBmaXhlZCBzbWFsbCBidWcKCSogdGVzdFhQYXRoLmM6IGNoYW5nZWQgdGhlIHdheSB0ZXN0ZmlsZXMgYXJlIHBhcnNlZAoJKiBkZWJ1Z1hNTC5jOiBzYW1lIGtpbmQgb2YgY2xlYW51cCB3aGVuIHBhcnNpbmcgYW4gYXJndW1lbnQgZXhwcmVzc2lvbgoJICBYUGF0aC9YUG9pbnRlcnMgY2FuIGhhdmUgYmxhbmtzIGVtYmVkZGVkCgkqIHhwYXRoLltjaF06IG1vcmUgY2xlYW51cCwgcmVvcmdzIGZvciBYUG9pbnRlciB3b3JrCgkqIHBhcnNlckludGVybmFscy5jIHBhcnNlci5jIEhUTUxwYXJzZXIuYzogZml4ZWQgd3JvbmcgaW5jbHVkZQoJKiB3aW4zMi9SRUFETUUuTVNEZXYgd2luMzIvbGlieG1sMi9saWJ4bWwyLmRzcDogV2luZG93cyBzdHVmZgoKVGh1IE9jdCAgNSAxODoxMzoxNSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZGVidWdYTUwuYyB0ZXN0WFBhdGguYyB4cGF0aC5bY2hdOiBnb3QgcGlzc2VkIGJ5IHNvbWUgbmFzdHluZXNzCgkgIGluIHRoZSBYUGF0aCBlbmdpbmUsIHJld3JvdGUgbGFyZ2UgcGFydHMgb2YgaXQsIG5vdyBpdCdzIGZhcgoJICBjbGVhbmVyIGFuZCBpbiBzeW5jIHdpdGggdGhlIFJFQyBub3QgYW4gb2xkIFdELiBGaXhlZCBhIHBhcnNpbmcKCSAgcHJvYmxlbSBpbiB0aGUgaW50ZXJhY3RpdmUgWE1MIHNoZWxsIGZvdW5kIHdoZW4gdGVzdGluZyBYUGF0aC4KCldlZCBPY3QgIDQgMTU6MjU6NTMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRlYnVnWE1MLmMgdGVzdFhQYXRoLmMgeHBhdGguW2NoXTogTW9yZSB3b3JrIG9uIFhQYXRoL1hwb2ludGVyLAoJICBpbmNvcnBvcmF0ZWQgIihUT00pIiA8cHRpdHRvbUBmcmVlLmZyPiBwYXRjaGVzIHJlYnVpbHQgdGhlIFhQYXRoCgkgIGV4YW1wbGVzIHdpdGggdGhlIGV4dHJhIHRlc3QKCldlZCBPY3QgIDQgMTQ6Mzk6MDEgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jIHhtbElPLmMgeG1sSU8uaDogZml4ZWQgYnVnIDI2NjUwLCBhbmQgaW1wcm92ZWQKCSAgdGhlIGdsb2JhbCBpbml0IGZ1bmN0aW9uLgoKVHVlIE9jdCAgMyAxMToyODo1MiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBEb29oaGgsIGF0dHJpYnV0ZSBuYW1lIHBhcnNpbmcgd2FzIHN0aWxsIGNhc2UKCSAgc2Vuc2l0aXZlICEgRml4ZWQgdGhpcyAuLi4KCSogcmVzdWx0L0hUTUwvKiA6IHVwZGF0ZWQgdGhlIHRlc3RzIHJlc3VsdHMgYWNjb3JkaW5nbHkKCk1vbiBPY3QgIDIgMjM6NDc6MzIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLltjaF0gZGVidWdYTUwuYyB0ZXN0WFBhdGguYzogZml4ZWQgdGhlIFhQYXRoIGV2YWx1YXRpb24KCSAgZW5naW5lLCBzaG91bGQgYmUgZmFyIG1vcmUgc3RhYmxlLCBpbmNvcnBvcmF0ZWQgYSBuZXcgdmVyc2lvbiBvZgoJICBwcmVjZWRpbmcvZm9sbG93aW5nIGF4aXMsIG5lZWQgdGVzdGluZwogICAgICAgICogdXJpLmM6IGZpeGVkIGZpbGU6Ly8vYzovYS9iL2MgcHJvYmxlbQoJKiB0ZXN0L1hQYXRoL3Rlc3RzL2lkc2ltcGxlOiBhdWdtZW50ZWQgdGhlIFhQYXRoIHRlc3RzCgpTdW4gT2N0ICAxIDIyOjMzOjAwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvKiByZWJ1aWxkaW5nIGRvY3MgZm9yIDIuMi40IHJlbGVhc2UKClN1biBPY3QgIDEgMjI6MTY6MzMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogcmVsZWFzaW5nIDIuMi40CgkqIHBhcnNlci5bY2hdOiBhZGRlZCB4bWxTdHJFcXVhbCgpCgkqIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5jIFNBWC5jIGRlYnVnWE1MLmMgZW50aXRpZXMuYyBwYXJzZXIuYwoJICB0cmVlLmMgdmFsaWQuYyB4bGluay5jIHhwYXRoLmM6IGNvbnZlcnRlZCBhbGwgIXhtbFN0cmNtcCB0bwoJICB1c2UgeG1sU3RyRXF1YWwgaW5zdGVhZAoJKiBUT0RPOiB1cGRhdGVkCgkqIGFkZGVkIGFuIFhQYXRoIHRlc3QKClN1biBPY3QgIDEgMjA6MTk6MzkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgaHRtbFN0YXJ0Q2xvc2VJbmRleGluaXRpYWxpemVkIGluaXQKCSogZW50aXRpZXMuaDogZXhwb3J0ZWQgeG1sSW5pdGlhbGl6ZVByZWRlZmluZWRFbnRpdGllcwoJKiBwYXJzZXIuW2NoXSA6IGFkZGVkIHhtbEluaXRQYXJzZXIoKQoJKiBwYXJzZXJJbnRlcm5hbHMuaCA6IGhhZCB0byBleHBvcnQgaHRtbEluaXRBdXRvQ2xvc2UoKQoKU3VuIE9jdCAgMSAxNjoyODoyMiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguW2NoXSA6IGZpeGVkIHNvbWUgc2VyaW91cyBYUGF0aCBQcmVkaWNhdGUgZXZhbHVhdGlvbgoJICBwcm9ibGVtcwoJKiBNYWtlZmlsZS5hbSA6IGFkZGVkIFhQYXRoIHJlZ3Jlc3Npb24gdGVzdHMgdG8gbm9ybWFsIHRlc3RzCgkqIHVyaS5jOiBmaXhlZCBhIHByb2JsZW0gd2l0aCBsb2NhbCBwYXRocywgY2xlYW51cAoJKiBwYXJzZXIuYzogZml4ZWQgYSBwcm9ibGVtIHdpdGggbGFyZ2UgQ0RhdGEgc2VjdGlvbnMKClNhdCBTZXAgMzAgMTY6MzU6NTQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiB4bWwtY29uZmlnLmluOiBwYXRjaCBmcm9tICJCZW4gVGF5bG9yIgoJICA8c29sN3g4NkBob3RtYWlsLmNvbT4gZm9yIHNvbGFyaXMgc2hhcmVkIGxpYnMgbG9va3VwCgoyMDAwLTA5LTMwICBNYXJ0aW4gQmF1bGlnICA8YmF1bGlnQHN1c2UuZGU+CgoJKiBsaWJ4bWwtMi4wLnBjLmluOiBQcm92aWRlIHBrZy1jb25maWcgc2NyaXB0LgoKCSogY29uZmlndXJlLmluOiBDcmVhdGUgdGhlIGxpYnhtbC0yLjAucGMgc2NyaXB0IGZyb20gdGhlCglsaWJ4bWwtMi4wLnBjLmluIHRlbXBsYXRlcy4KCSogTWFrZWZpbGUuYW0gKHBrZ2NvbmZpZ19EQVRBKTogSW5zdGFsbCB0aGUgbGlieG1sLTIuMC5wYwoJc2NyaXB0IGluIGAkKGxpYmRpcikvcGtnY29uZmlnJy4KCk1vbiBTZXAgMjUgMTY6MjM6NDEgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyBwYXJzZXIuYyB0cmVlLmMgdHJlZS5oOiBBdm9pZGluZyBhIGZldyB3YXJuaW5nCgkgIHdoZW4gY29tcGlsaW5nIHdpdGggTVNDCgpTdW4gU2VwIDI0IDIwOjMyOjUyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5jOiBwYXRjaCBmb3Igbm9ybWFsaXplLXN0cmluZygpIHN1YnN0cmluZy1iZWZvcmUoKSwKCSAgc3Vic3RyaW5nLWFmdGVyKCkgYW5kIHRyYW5zbGF0ZSgpIGZ1bmN0aW9ucyBmcm9tIEJqb3JuIFJlZXNlCgkgIDxicmVlc2VAbWFpbDEuc3RvZmFuZXQuZGs+CgkqIGxpYnhtbC5tNCBNYWtlZmlsZS5hbTogYWRkZWQgbGlieG1sLm00IGZyb20gRGViaWFuID8KCSAgRnJlZHJpayBIYWxsZW5iZXJnIDxoYWxsb25AbHlzYXRvci5saXUuc2U+CgkqIFRPRE86IHVwZGF0ZWQKClN1biBTZXAgMjQgMTA6MDA6NDkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbHZlcnNpb24uaC5pbiBuYW5vZnRwLmMgbmFub2h0dHAuYzogdHJheWluZyB0byB3b3JrIG91dCB0aGUKCSAgcHJvYmxlbSBvZiBzb2NrbGVuX3QgYmVpbmcgdW5kZWZpbmVkIG9uIGEgbnVtYmVyIG9mIHBsYXRmb3JtcwoJKiBkZWJ1Z1hNTC5jOiBmaXhlZCBhIGNvbXBpbGF0aW9uIHByb2JsZW0gd2hlbiB3aXRob3V0IHNucHJpbnRmCgpTYXQgU2VwIDIzIDEyOjE5OjQ1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgdXJpLmM6IEFub3RoZXIgcGF0Y2ggZnJvbSBXYXluZSBEYXZpc29uLCBjb3JyZWN0aW5nCgkgIGFuIFVSSSBidWcgYW5kIGEgZml4IGZvciB0aGUgY29udHJvbC1jaGFyYWN0ZXItaW5kdWNlZCBpbmZpbml0ZSBsb29wCgkqIG5hbm9odHRwLmM6IHByZXZlbnRpdmUgZml4IGZvciBjb21waWxpbmcgb24gV0lOMzIKCkZyaSBTZXAgMjIgMTg6MDY6MDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbGludC5jOiBjbG9zaW5nIGJ1ZyAjMjUwMDAKCkZyaSBTZXAgMjIgMTQ6MTc6NTMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbElPLmggdHJlZS5oOiBtYWRlIHhtbE5vZGVEdW1wKCkgYW5kIHhtbE5vZGVEdW1wT3V0cHV0KCkgcHVibGljCgkqIHBhcnNlci5bY2hdIG5hbm9odHRwLmMgSFRNTHRyZWUuYyBIVE1McGFyc2VyLmMgdHJlZS5jOiBhcHBsaWVkIGFuZAoJICBtb2RpZmllZCBzbGlnaHRseSBXYXluZSBEYXZpc29uIHBhdGNoIGFkZGluZyB4bWxTdHJjYXNlY21wIGFuZAoJICByZWxhdGVkIGZ1bmN0aW9uLCBmaXhpbmcgeG1sU3RybmNtcCgpLCBhbmQgYXNzb2NpYXRlZCBjbGVhbnVwCgkqIHJlc3VsdC9IVE1ML2VudGl0aWVzLmh0bWwuc2F4OiB1cGRhdGluZyByZXN1bHQKClR1ZSBTZXAgMTkgMTQ6MjA6MTAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHVyaS5jOiBhcHBsaWVkIHBhdGNoIGZvciBVUkkgZXNjYXBpbmcgZnJvbSBXYXluZSBEYXZpc29uCgkgIDx3YXluZWRAYmxvcmYubmV0PgoJKiB0cmVlLmMgcGFyc2VySW50ZXJuYWxzLmMgSFRNTHBhcnNlci5jOiBtZW1zZXQgY2hlY2tzIHBhdGNoZXMKCSAgZnJvbSBEZW5pcyBCYXJiaWVyIDxiYXJiaWVyQGltYWNzLnBvbHl0ZWNobmlxdWUuZnI+CgkqIEhUTUxwYXJzZXIuYzogVVRGOCBjaGFyYWN0ZXJzIGluIEhUTUwgdGFnLWF0dHJpYnV0ZSB2YWx1ZXMKCSAgcGF0Y2ggZnJvbSBXYXluZSBEYXZpc29uCgpTdW4gU2VwIDE3IDE4OjM3OjAzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwgOiB1cGRhdGVkIHdpdGggbmV3IHJlbGVhc2VzLCBhZGRpbmcgImhvdyB0byBoZWxwIgoKU3VuIFNlcCAxNyAxNzo1ODozNyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogU0FYLmMgZGVidWdYTUwuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0cmVlLmMgdmFsaWQuYyB4cGF0aC5jOgoJICByZW1vdmVkIGEgZmV3IHdhcm5pbmdzIGluIHBlZGFudGljIG1vZGUgLi4uCgkqIHBhcnNlckludGVybmFscy5jIHBhcnNlci5jOiBtb3ZlZCBlbmNvZGluZyBzd2l0Y2hpbmcgZnVuY3Rpb24KCSAgdG8gcGFyc2VySW50ZXJuYWxzLmMKCSogY29uZmlndXJlLmluLCBkb2MvTWFrZWZpbGUuYW0gbGlieG1sLnNwZWMuaW46IHJlbGVhc2VkIDIuMi4zCgpTYXQgU2VwIDE2IDIwOjEyOjQxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgcGFyc2VyLmM6IHNldCBjdHh0LT5lcnJObyBiZWZvcmUgY2FsbGluZyB0aGUKCSAgZXJyb3Igb3Igd2FybmluZyBoYW5kbGVycwoKV2VkIFNlcCAxMyAyMjowMzoxOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VySW50ZXJuYWxzLmMgcGFyc2VySW50ZXJuYWxzLmggcGFyc2VyLmMgTWFrZWZpbGUuYW06CgkgIGNyZWF0ZWQgYSBuZXcgbW9kdWxlIHBhcnNlckludGVybmFscy5jLCBtb3ZlZCBtb3N0IG9mIHRoZQoJICBjb2RlIHNoYXJlZCBieSB0aGUgdmFyaW91cyBwYXJzZXJzIHRoZXJlLCBhcyB3ZWxsIGFzCgkgIGRlcHJlY2F0ZWQgIGNvZGUgZnJvbSBwYXJzZXIuYy4gTW9yZSBjbGVhbnVwIG9mIHBhcnNlci5jCgkqIHVyaS5jOiBmaXhlZCBhIHByb2JsZW0gd2hlbiBVUkkgaXMgTlVMTAoJKiB2YWxpZC5jOiBzcGVlZHVwIHdoZW4gbG9va2luZyBmb3IgYW4gYXR0cmlidXRlIGRlY2xhcmF0aW9uCgpTdW4gU2VwIDEwIDE3OjUzOjQ4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB1cmkuYyB0cmVlLmMgU0FYLmMgcGFyc2VyLmMgZW50aXRpZXMuYyBkZWJ1Z1hNTC5jOiBmaW5pc2hlZAoJICB0aGUgY2xlYW51cCBvZiB0aGUgY29tcHV0YXRpb24gb2YgVVJJIHJlZmVyZW5jZXMgd2hlbiBzZWVraW5nCgkgIGV4dGVybmFsIGVudGl0aWVzLiBUaGUgVVJJIHJlZmVyZW5jZSBzdHJpbmcgYW5kIHRoZSByZXN1bHRpbmcKCSAgVVJJIGFyZSBib3RoIHN0b3JlZCBub3cuCgkqIHBhcnNlci5jIEhUTUxwYXJzZXIuYyB2YWxpZC5jIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHhwYXRoLmM6CgkgIGxhcmdlIHMobilwcmludGYgY2hlY2tzIGFuZCBjbGVhbnVwIGZyb20gRGVuaXMgQmFyYmllcgoJICA8YmFyYmllckBpbWFjcy5wb2x5dGVjaG5pcXVlLmZyPgoJKiB4bWx2ZXJzaW9uLmguaW4gdHJlZS5oOiBjb3VwbGUgb2YgU0dNTCBkZWNsYXJhdGlvbnMgZm9yIGEKCSAgcG9zc2libGUgZG9jYm9vayBtb2R1bGUuCgkqIHJlc3VsdC9WQy8gOiBhIGNvdXBsZSBvZiB0ZXN0IG91dHB1dCBjaGFuZ2VkIGR1ZSB0byB0aGUgY2hhbmdlCgkgIG9mIHRoZSBlbnRpdGllcyBVUkkKClN1biBTZXAgMTAgMTU6NTk6NTggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5oOiBhZGRlZCBhIF9wcml2YXRlIGZpZWxkIGZvciBsaW5raW5nIHVzZXIncyBkYXRhCgpTdW4gU2VwIDEwIDE1OjE0OjQzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuaDogZGVtYWNyb2lmaWVkIG1vc3Qgb2YgdGhlIElTX1hYWAoJICB0aGUgZ2FpbiBpbiBzaXplIGlzIHNpZ25pZmljYW50IHNvIC4uLgoKRnJpIFNlcCAgOCAyMDo0ODoyOSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW50aXRpZXMuYzogY2FzZXMgd2hlcmUgbG9va2luZyB1cCBlbnRpdGllcyB3aXRoIGRvYz09TlVMTAoJICBjb3ZlcmVkCgpUdWUgU2VwICA1IDEyOjQxOjE1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB1cmkuYzogYXBwbGllZCBXYXluZSBEYXZpc29uIHBhdGNoCgkqIE1ha2VmaWxlLmluIHRlc3QvVVJJL3VyaS5kYXRhIHJlc3VsdC9VUkkvdXJpLmRhdGE6IHVwZGF0ZWQgVVJJIHRlc3RzCgpNb24gU2VwICA0IDEzOjAxOjQ1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB1cmkuYyB0ZXN0VXJpLmM6IGFwcGxpZWQgV2F5bmUgRGF2aXNvbiBwYXRjaGVzCgkqIHRlc3QvVVJJL3VyaS5kYXRhIHJlc3VsdC9VUkkvdXJpLmRhdGE6IGZpcnN0IHNldCBvZiB0ZXN0cy9yZXN1bHRzCgkqIE1ha2VmaWxlLmluOiBhZGRlZCBVUkl0ZXN0IGFuZCBpbmNsdWRlZCB0aGVuaW4gIm1ha2UgdGVzdHMiCgpTdW4gU2VwICAzIDE5OjE5OjI5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWx2ZXJzaW9uLmguaW46IGNsb3NlZCBidWcgMjI5NDEKClRodSBBdWcgMzEgMTY6NTU6NTUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWxpby5odG1sOiBhZGRlZCBkb2MgYW5kIGV4YW1wbGUgZm9yIGVudGl0eSBsb2FkZXIKCSAgcmVkZWZpbml0aW9uLgoKVGh1IEF1ZyAzMSAxNDo1OToyOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbGlvLmh0bWwgZG9jL3htbC5odG1sOiBhZGRlZCBhIGRvYyBvbiB0aGUgSS9PIG1lY2hhbmlzbQoJICB1c2VkIGJ5IGxpYnhtbAoKVHVlIEF1ZyAyOSAyMDoyMjo1MyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IEZpeGVkIGJ1ZyBvbiBpbnZhbGlkIG9udGVudCBjaGFyYWN0ZXJzIGFuZCB3aGVuIHVzaW5nCgkgIHB1c2guCgkqIHhtbGxpbnQuYzogZml4ZWQgeG1sbGludCBlbmRsaW5nIG9mIGVycm9ycyBpbiBwdXNoIG1vZGUKClR1ZSBBdWcgMjkgMTE6MjQ6NDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyB0ZXN0SFRNTC5jOiBhcHBsaWVkIHR3byBuZXcgcGF0Y2hlcyBmcm9tCgkgIFdheW5lIERhdmlzb24gPHdheW5lZEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CgkqIHJlc3VsdC9IVE1MLyouc2F4OiByZWdlbmVyYXRlZCBIVE1MIFNBWCBvdXRwdXQKCSogcGFyc2VyLmM6IG1vcmUgY2xlYW51cC4KCk1vbiBBdWcgMjggMTE6NTg6MTIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuW2NoXSB0ZXN0SFRNTC5jOiBhcHBsaWVkIHRoZSBzZWNvbmQgc2V0IG9mCgkgIHBhdGNoZXMgZnJvbSBXYXluZSBEYXZpc29uIDx3YXluZWRAdXNlcnMuc291cmNlZm9yZ2UubmV0PiwKCSAgYWRkaW5nIGh0bWxFbmNvZGVFbnRpdGllcygpCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgYW4gaWdub3JhYmxlIHdoaXRlIHNwYWNlIGRldGVjdGlvbiBidWcKCSAgb2NjdXJpbmcgd2hlbiBwYXJzaW5nIHdpdGggU0FYIG9ubHkKCSogcmVzdWx0L0hUTUwvKi5zYXg6IHVwZGF0ZWQgc2luY2UgdGhlIG91dHB1dCBpcyBub3cgSFRNTAoJICBlbmNvZGVkLi4uCgpNb24gQXVnIDI4IDAwOjM4OjMxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLltjaF06IGFwcGxpZWQgc29tZSBvZiBXYXluZSBEYXZpc29uCgkgIDx3YXluZWRAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBwYXRjaGVzCgpTdW4gQXVnIDI3IDIyOjE0OjAxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBTQVguYyB0cmVlLmMgZGVidWdYTUwuYzogZml4ZWQgYm9ndXMgYmVoYXZpb3VyIHdoZW4gYW4KCSAgdW5kZWNsYXJlZCBuYW1lc3BhY2UgcHJlZml4IHdhcyB1c2VkLCBhZGRlZCBhIHdhcm5pbmcuCgkgIENsZWFuZWQgdXAgc3VwcG9ydCB3LnIudC4gZW50aXRpZXMsIHNwaWxsaW5nIG91dCBhIHdhcm5pbmcKCSAgYW5kIGJlaW5nIHBlZGFudGljIG9uIGxvb2t1cHMuCgkqIHRlc3Qvd2FybmluZy9lbnQ5IDogYWRkZWQgdGVzdGNhc2UgZm9yIHByZXZpb3VzIGV4YW1wbGUuCgkqIFRPRE86IHVwZGF0ZWQKCSogcGFyc2VySW50ZXJuYWxzLmggcGFyc2VyLmM6IGNoYW5nZWQgdGhlIHdheSBuYW1lcyBhcmUgcGFyc2VkCgkgIG5vdyBhbGxvdyBpbmZpbml0ZSBzaXplIGFuZCBkZWNyZWFzZSBwZW5hbHR5IGZvciBub3JtYWwgdXNlCgkqIHBhcnNlci5jOiBTdGFydGVkIGEgYmlnIGNsZWFudXAvY2hlY2sgb2YgdGhlIHBhcnNlciBjb2RlLAoJICBmaXhlZCBzb21lIG9mIHRoZSBtb3N0IHRvcnR1b3VzIGVudGl0eSBjb2RlLCBzcG90dGVkIGNvZGUKCSAgdW51c2VkIGFueW1vcmUKCSogdGVzdC8qOiBhZGRlZCB0ZXN0cyBmb3IgdmVyeSBsb25nIG5hbWVzIGFuZCByZWxhdGVkIG5hc3R5CgkgIHRoaW5ncy4KClNhdCBBdWcgMjYgMjM6MzE6MDQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy9lbmNvZGluZy5odG1sOiBhZGRlZCBlbmNvZGluZyBhbGlhc2VzIGRvYwoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZXMKCSogZW5jb2RpbmcuW2NoXTogYWRkZWQgRW5jb2RpbmdBbGlhc2VzIGZ1bmN0aW9ucwoJKiBlbnRpdGllcy5bY2hdIHZhbGlkLltjaF0gZGVidWdYTUwuYzogcmVtb3ZlZCB0d28gc2VyaW91cwoJICBib3R0bGVuZWNrIGFmZmVjdGluZyBsYXJnZSBEVERzIGxpa2UgRG9jYm9vawoJKiBwYXJzZXIuW2NoXSB4bWxsaW50LmM6IGFkZGVkIGEgcGVkYW50aWMgb3B0aW9uLCB3aWxsIGJlCgkgIHVzZWZ1bAoJKiBTQVguYzogcmVkZWZpbml0aW9uIG9mIGVudGl0aWVzIGlzIHJlcG9ydGVkIGluIHBlZGFudGljIG1vZGUKCSogdGVzdEhUTUwuYzogdW5pbml0aWFsaXplZCB3YXJuaW5nIGZyb20gZ2NjCgkqIHVyaS5jOiBmaXhlZCBhIGNvdXBsZSBvZiBidWdzCgkqIFRPRE86IGFkZGVkIGlzc3VlIHJhaXNlZCBieSBNaWNoYWVsCgpXZWQgQXVnIDIzIDAxOjUwOjUxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvZW5jb2RpbmcuaHRtbDogcHJvcGFnYXRlZCBNYXJ0aW4gRHVlcnN0IHN1Z2dlc3Rpb25zCgpXZWQgQXVnIDIzIDAwOjIzOjQxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogRml4ZWQgQnVnIzIxNTUyOiBsaWJ4bWwgZmFpbHMgdG8gZGVjb2RlICZhbXA7CgkqIHVyaS5jIHRlc3RVcmkuYyBwYXRjaGVzLCBieSBNYXJjIFNhbmZhY29uICgxIGxlZnQpCgkqIHBhcnNlci5jIEhUTUxwYXJzZXIuYzogSFRNTC9lbmNvZGluZyBwdXNoIHByb2JsZW1zIHJlcG9ydGVkaQoJICBieSBXYXluZSBEYXZpc29uCgpTdW4gQXVnIDIwIDE3OjAzOjM4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLmMgbmFub2h0dHAuYzogc21hbGwgY2xlYW51cAoJKiBUT0RPOiB1cGRhdGVkCgpTYXQgQXVnIDE5IDIyOjU3OjAyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhZGRlZCBhbiBvbGQgVkMgdGVzdGNhc2UgYW5kIHVwZGF0ZWQgdGl0bGUueG1sIGVudGl0eQoKU2F0IEF1ZyAxOSAyMTowMjowOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIFNBWC5jIHRyZWUuYyBIVE1MdHJlZS5oIHJlc3VsdC9IVE1MLyo6IHdvcmsKCSAgZG9uZSBvbiBhdXRvLW9wZW5pbmcgb2YgPHA+IHRhZ3MgYW5kIGNsZWFudXAgb2YgU0FYIG91dHB1dAoKU2F0IEF1ZyAxOSAxODo0NTo0MCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbGlieG1sLjQgIHhtbGxpbnQuMSBNYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbjogYWRkZWQgbWFuIHBhZ2VzCgpTYXQgQXVnIDE5IDE4OjM4OjUzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwgbGlieG1sLiogc3RydWN0dXJlLio6IHVwZGF0ZWQgdGhlIGRvYyBhIGJpdAoKVGh1IEF1ZyAxNyAxNTo1MDowMCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdGVzdFNBWC5jIHRlc3RIVE1MLmMgcmVzdWx0L0hUTUwvOiBjbGVhbnVwIG9mIHRoZSBvdXRwdXQKCSAgb2YgU0FYIHRlc3RzCgpNb24gQXVnIDE0IDEzOjU2OjMzIEVEVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFBhdGNoIGZyb20gQWxiZXJ0IENoaW4tQS1Zb3VuZyA8Y2hpbmFAdGhld3JpdHRlbndvcmQuY29tPjoKCSogeG1sbGludC5jOiB3b3JrYXJvdW5kIGEgTUFQX0ZBSUxFZCBkZWZpbml0aW9uIGJ1ZyBpbiBEVS00LjAKCk1vbiBBdWcgMTQgMTE6MTA6MjAgRURUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogUGF0Y2ggZnJvbSBEYXZlIFllYXJrZSA8eWVhcmtlQGVuZy5idWZmYWxvLmVkdT46CgkqIHRlc3RIVE1MLmM6IGZpeCBjb3JlIGR1bXAgb24gU29sYXJpcyAyLnggc3lzdGVtcwoJKiBIVE1McGFyc2VyLmM6IGZpeCBzZWdmYXVsdCBpZiBjdHh0LT5zYXgtPmNoYXJhY3RlcnMoKSBpcyBOVUxMCgkqIHJlc3VsdC9IVE1MLyouc2F4OiBwcmV2aW91cyBidWcgZml4IGxlYWQgdG8gbmV3IHJlc3VsdHMKCk1vbiBBdWcgMTQgMTA6MjY6MDkgRURUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogUGF0Y2ggZnJvbSBBbGJlcnQgQ2hpbi1BLVlvdW5nIDxjaGluYUB0aGV3cml0dGVud29yZC5jb20+OgoJKiBjb25maWd1cmUuaW46IGFkZGVkIC0td2l0aC1yZWFkbGluZT1ESVIgdG8gYWNjZXB0IGFsdGVybmF0ZQoJICBwYXRoIGZvciByZWFkbGluZSBpbmNsdWRlL2xpYnJhcnkKCSogY29uZmlndXJlLmluOiBhZGRlZCBBTV9DX1BST1RPVFlQRVMgdG8gYWRkIC1BYSAtRF9IUFVYX1NPVVJDRQoJICBmb3IgQU5TSSB1bmRlciBIUC1VWAoJKiBjb25maWcuaW46IFJlbW92ZWQgQExJQlNAIGZyb20geG1sLWNvbmZpZyBiZWNhdXNlIEBYTUxfTElCU0AKCSAgaW5jbHVkZXMgQExJQlNACgpTYXQgQXVnIDEyIDIzOjE5OjQyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvKiA6IHJlYnVpbHQgdGhlIGRvY3MKCSogZ2V0dGluZyByZWFkeSBmb3IgMi4yLjIgcmVsZWFzZQoKU2F0IEF1ZyAxMiAxNjo0MjozNyBFRFQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuW2NoXTogYWRkZWQgeG1sR2V0RmVhdHVyZXNMaXN0KCkgeG1sR2V0RmVhdHVyZSgpCgkgIGFuZCB4bWxBZGRGZWF0dXJlKCkKCSogdHJlZS5bY2hdOiBhZGRlZCB4bWxBZGRDaGlsZExpc3QoKQoJKiB4bWxsaW50LmM6IE1BUF9GQUlMRUQgbWFjcm8gdGVzdAoJKiBwYXJzZXIuaDogYWRkZWQgeG1sUGFyc2VDdHh0RXh0ZXJuYWxFbnRpdHkoKQoJKiB2YWxpZC5jOiBhcHBsaWVkIGJ1ZyBmaXhlcyByZW1vdmVkIHdhcm5pbmcKCSogdHJlZS5jOiBhZGRlZCBDREFUQSBibG9jayB0byBlbGVtZW50cyBjb250ZW50CgkqIHRlc3RTQVguYzogY2xlYW51cCBvZiBvdXRwdXQKCSogdGVzdEhUTUwuYzogYWRkZWQgU0FYIHRlc3RpbmcKCSogZW5jb2RpbmcuYzogYmV0dGVyIGVycm9yIHJlY292ZXJ5CgkqIFNBWC5jLCBwYXJzZXIuYzogZml4ZWQgb25lIG9mIHRoZSBleHRlcm5hbCBlbnRpdHkgcHJvY2Vzc2luZwoJICBvZiB0aGUgT0FTaXMgdGVzdHN1aXRlCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCBIVE1MIFNBWCByZWdyZXNzaW9uIHRlc3RzCgkqIGNvbmZpZ3VyZS5pbjogYnVtcGVkIHRvIDIuMi4yCgkqIHRlc3QvSFRNTC8gcmVzdWx0L0hUTUw6IGFkZGVkIGEgZmV3IG9mIEhUTUwgdGVzdHMsIGFuZCBhZGRlZCB0aGUKCSAgU0FYIHJlc3VsdHMKCkZyaSBBdWcgIDQgMTE6MjE6NTAgUERUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiBwYXRjaCBmb3IgSFAgY29tcGlsZXIKCjIwMDAtMDgtMDQgIFN2ZW4gSGVpbmlja2UgIDxzdmVuQHplbi5vcmc+CgoJKiB4bWxsaW50LmM6IFdhcyBjb3JlZHVtcGluZyBzb21ldGltZXMgd2hlbiB0aGUgZmlsZSBnaXZlbiBkaWRuJ3QKCWV4aXN0LgoKU2F0IEp1bCAyMiAwNTo1OTowNSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMgeG1sSU8uW2NoXTogZml4ZWQgdGhlIHByb2JsZW0gb2YgZW5jb2Rpbmcgc3VwcG9ydAoKCSAgd2hlbiB1c2luZyBpbiBtZW1vcnkgcGFyc2luZy4gTmVlZCBzb21lIGNsZWFudXAuCgkqIHhtbGxpbnQuYyBjb25maWd1cmUuaW46IGFkZGVkIGEgLS1tZW1vcnkgZmxhZyB0byB0ZXN0IG1lbW9yeQoJICBwYXJzaW5nCgkKRnJpIEp1bCAyMSAxNzowOTo1NyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2h0dHAuYzogZml4ZWQgc29ja2xlbl90IHJlcGxhY2VtZW50IHRvIHVuc2lnbmVkIGludAoJKiBwYXJzZXIuYzogZml4ZWQgYSBzcGFjZSBoYW5kZGxpbmcgbWlzc2luZyBhdCB0aGUgZW5kIG9mCgkgIHByb2R1Y3Rpb24gMjggRE9DVFlQRS4KCSogeG1sbWVtb3J5LmM6IGZpeGVkIGEgc3R1cGlkIGJ1ZyBvbiB0aGUgcm91dGluZSB0byBvdmVycmlkZQoJICBhbGxvY2F0aW9uIGZ1bmN0aW9ucwoJKiBUT0RPOiB1cGRhdGVkCgpGcmkgSnVsIDE0IDE3OjAxOjE0IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvIHJlZ2VuZXJhdGVkIHRoZSBkb2NzCgpGcmkgSnVsIDE0IDE2OjEyOjIwIE1FU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvZW5jb2RpbmcuaHRtbCBkb2MveG1sLmh0bWw6IGFkZGVkIEkxOE4gZG9jCgkqIGVuY29kaW5nLltjaF0gSFRNTHRyZWUuW2NoXSBwYXJzZXIuYyBIVE1McGFyc2VyLmM6IEkxOE4gZW5jb2RpbmcKCSAgaW1wcm92ZW1lbnRzLCBib3RoIHBhcnNlciBhbmQgZmlsdGVycywgYWRkZWQgQVNDSUkgJiBIVE1MLAoJICBmaXhlZCB0aGUgSVNPLUxhdGluLTEgb25lCgkqIHhtbGxpbnQuYyB0ZXN0SFRNTC5jOiBhZGRlZC9tYWRlIHZpc2libGUgLS1lbmNvZGUKCSogZGVidWdYTUwuYyA6IGNsZWFudXAKCSogbW9zdCAuYyBmaWxlczogYXBwbGllZCBwYXRjaGVzIGR1ZSB0byB3YXJuaW5nIG9uIFdpbmRvd3MgYW5kCgkgIHdoZW4gdXNpbmcgU3VuIFBybyBjYyBjb21waWxlcgoJKiB4cGF0aC5jIDogY2xlYW51cCBtZW1sZWFrcwoJKiBuYW5vZnRwLmMgOiBhZGRlZCBhIFRFU1RJTkcgcHJlcHJvY2Vzc29yIGZsYWcgZm9yIHN0YW5kYWxvbmcKCSAgY29tcGlsZSBzbyB0aGF0IHBlb3BsZSBjYW4gcmVwb3J0IGJ1Z3MgbW9yZSBlYXNpbGx5CgkqIG5hbm9odHRwLmMgOiBkaXRjaGVkIHNvY2tsZW5fdCB3aGljaCB3YXMgYSBwb3J0YWJpbGl0eSBtZXNzCgkgIGFuZCByZXBsYWNlZCBpdCB3aXRoIHVuc2lnbmVkIGludC4KCSogdHJlZS5bY2hdOiBhZGRlZCB4bWxIYXNQcm9wKCkKCSogVE9ETzogdXBkYXRlZAoJKiB0ZXN0LyA6IGFkZGVkIG1vcmUgdGVzdCBmb3IgZW50aXRpZXMsIE5TLCBlbmNvZGluZywgSFRNTCwgd2FwCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIGZvciAyLjIuMCByZWxlYXNlCgpNb24gSnVsIDEwIDE2OjE3OjE4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLmM6IGZpeGVkIHRoZSB3YXkgdGhlIGNvbnRyb2wgY29ubmVjdGlvbiBpcyBoYW5kbGVkCgkqIGxpYnhtbC5zcGVjLmluOiBmaXhlZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjbGVhbnVwCgpNb24gSnVsICAzIDE0OjM3OjA3IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWw6IGNoYW5nZWQgdGhlIHhtbHNvZnQub3JnIHN0cnVjdHVyZSwgdXBkYXRlZCB0aGUKCSAgZXhhbXBsZXMgdy5yLnQuIHJvb3QgYW5kIGNoaWxkcwoKU3VuIEp1bCAgMiAyMDo1MTo0MyBNRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbGlieG1sLnNwZWMuaW46IGZpeGVkIGJ1ZyAjNzQxOSwgZGVwZW5kZW5jaWVzIGZvdWxlZCBmb3IgbGlieG1sLWRldmVsCgpTdW4gSnVsICAyIDA5OjUyOjQ1IE1FU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmM6IFdvcmsgb24gY2hhcmFjdGVyIGVuY29kaW5nIHN1cHBvcnQgZm9yIHRoZSBIVE1MIHBhcnNlcgoJKiBIVE1McGFyc2VyLmM6IEZpeGVkIHNvbWUgYXV0b29wZW4vYXV0b2Nsb3NlIHByb2JzIGZvciB0aGUgSFRNTCBwYXJzZXIKCSogZW5jb2RpbmcuYzogRml4ZWQgYSBwb3RlbnRpYWwgbWVtbGVhayBpbiB0aGUgZW5jb2Rpbmcgc3R1ZmYKClNhdCBKdWwgIDEgMTM6NDQ6MjIgTUVTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy9GQVEuaHRtbCBkb2MvTWFrZWZpbGUuYW0gOiBhZGRlZCBhIEZBUQoKRnJpIEp1biAzMCAyMDoyOTowOCBNRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIEhUTUx0cmVlLmMgU0FYLmMgdmFsaWQuYyB0cmVlLmggOiBtb3JlIGNsZWFudXAKCSAgb2YgdGhlIEhUTUwgcGFyc2VyIHRvIGZvcmNlIGl0IHRvIG5vdCBieXBhc3MgU0FYCgpGcmkgSnVuIDMwIDExOjE5OjU5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB3aW4zMmNvbmZpZy5oLmluOiB1cGRhdGVkCgkqIHhtbHZlcnNpb24uaC5pbjogY3JhcCBmb3Jnb3QgdG8gdXBkYXRlIHRoaXMsIHRoaXMgbWVhbiAyLjEuMAoJICBsYWNrcyBpY29udiBzdXBwb3J0IDotKCBuZWVkIHRvIHJlbGVhc2UgMi4xLjEKCSogY29uZmlndXJlLmluOiByZWxlYXNlIDIuMS4xCgkqIEhUTUxwYXJzZXI6IGZpeGVkIGJ1ZyAjMTQ3ODQKCSogeHBhdGguYyBIVE1McGFyc2VyLmMgZW5jb2RpbmcuYyBwYXJzZXIuYzogZml4IHdhcm5pbmcgcmFpc2VkCgkgIGJ5IFdpbmRvd3MgY29tcGlsZXIKCSogSFRNTHBhcnNlci5jIFNBWC5jIEhUTUx0cmVlLmggdHJlZS5oOiBjcmVhdGUgSFRNTCBkb2N1bWVudCBpbgoJICB0aGUgU0FYIHN0YXJ0RG9jdW1lbnQoKSBjYWxsYmFjay4KCSogVE9ETzogdXBkYXRlZAoKVGh1IEp1biAyOSAxMjowNjo0OCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWRkZWQgeG1sU3RvcFBhcnNlcigpCgpXZWQgSnVuIDI4IDIzOjEwOjI2IE1FU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IDIuMS4wIHByZXJlbGVhc2UKCSogTGFyZ2UgcmVzeW5jIGJldHdlZW4gVzNDIGFuZCBHbm9tZSB0cmVlCgkqIG5hbm9mdHAsIG5hbm9odHRwLmM6IGZpeGVkIHN0YWxsZWQgY29ubmVjdGlvbnMgcHJvYnMKCSogSFRNTHRyZWUuYyBTQVguYyA6IHN1cHBvcnQgZm9yIGF0dHJpYnV0ZSB3aXRob3V0IHZhbHVlcyBpbgoJICBIVE1MIGZvciBhbmRlcnNjYQoJKiB2YWxpZC5jOiBGaXhlZCBtb3N0IHZhbGlkYXRpb24gKyBuYW1lc3BhY2UgcHJvYmxlbXMKCSogSFRNTHBhcnNlci5jOiBzdGFydCBkb2N1bWVudCBjYWxsYmFjayBmb3IgYW5kZXJzY2EKCSogZGVidWdYTUwuYyB4cGF0aC5jOiBsb3RzIG9mIFhQYXRoIGZpeHVwcyBmcm9tIFBpY2RhciBUZWNobm9sb2d5CgkqIHBhcnNlci5oLCBTQVguYzogc2VyaW91cyBzcGVlZCBpbXByb3ZlbWVudCBmb3IgbGFyZ2UKCSAgQ0RBVEEgYmxvY2tzCgkqIGVuY29kaW5nLltjaF0geG1sSU8uW2NoXTogSW1wcm92ZWQgc2VyaW91c2x5IHNhdmluZyB0bwoJICBkaWZmZXJlbnQgZW5jb2RpbmcKCSogZXhhbXBsZS9NYWtlZmlsZS5hbSBleGFtcGxlL2dqb2JyZWFkLmMgdHJlZS5oOiB3b3JrIG9uIAoJICBsaWJ4bWwxIGxpYnhtbDIgY29udmVyZ2VuY2UuCgkqIGNvbmZpZy5oLmluIHBhcnNlci5jIHhtbGxpbnQuYzogYWRkZWQgeG1sQ2hlY2tWZXJzaW9uKCkKCSAgYW5kIHRoZSBMSUJYTUxfVEVTVF9WRVJTSU9OIG1hY3JvCgpGcmkgSnVuIDIzIDIyOjI2OjA3IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWw6IHZhcmlvdXMgcGF0Y2hlcyBhbmQgaW1wcm92ZW1lbnRzIHR5cG8gZml4ZWQgYnkKCSAgRmVsaXggTmF0dGVyCgkqIGRvYy9saWJ4bWwtZG9jLmVsOiBFbWFjcyBtb2R1bGUgdG8gbG9va3VwIHRoZSBsaWJ4bWwgZG9jdW1lbnRhdGlvbgoJICBmcm9tIEZlbGl4IE5hdHRlciA8Zm5hdHRlckBnbXgubmV0PgoKU2F0IE1heSAgNiAxMDowOTo0NSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3VwZ3JhZGUuaHRtbDogdXBkYXRlZCB3aXRoIGluc3RydWN0aW9ucyBmb3Igc3VwcG9ydCBvZiBib3RoCgkgIGxpYnhtbC0xLnggYW5kIGxpYnhtbC0yLngKCSogZG9jL2dqb2JyZWFkLmMgOiBhcHBsaWVkIFRvZGQgRHVrZXMgPHRkdWtlc0BpYm1vdG8uY29tPiBwYXRjaAoJICBmb3IgMi54IHN1cHBvcnQgYW5kIGFsc28gZml4ZWQgaW5jbHVkZXMKCgpXZWQgTWF5ICAzIDE0OjIxOjI1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbmNvZGluZy5bY2hdLCB4bWxJTy5bY2hdLCBwYXJzZXIuYywgY29uZmlndXJlLmluIDogcmV2YW1wZWQKCSAgdGhlIGVuY29kaW5nIHN1cHBvcnQsIGFkZGVkIGljb252IHN1cHBvcnQsIHNvIG5vdyBsaWJ4bWwgaWYKCSAgY29tcGlsZWQgd2l0aCBpY29udiBhdXRvbWF0aWNhbGx5IHN1cHBvcnQgamFwYW5lc2UgZW5jb2RpbmdzCgkgIGFtb25nIG90aGVycy4gV29yayBiYXNlZCBvbiBpbml0aWFsIHBhdGNoIGZyb20gWXVhbi1DaGVuIENoZW5nCgkgIEkgbWF5IGhhdmUgYnJva2VuIGJpbmFyeSBjb21wYXQgaW4gdGhlIGVuY29kaW5nIGhhbmRsZXIKCSAgcmVnaXN0cmF0aW9uIHNjaGVtZSwgYnV0IHRoYXQgd2FzIHNvIHV0dGVybHkgYnJva2VuIEkgZG9uJ3QKCSAgZXhwZWN0IGFueWJvZHkgdG8gaGF2ZSB1c2VkIHRoaXMgZmVhdHVyZSB1bnRpbCBub3cuCgkqIHBhcnNlckludGVybmFscy5oOiBmaXh1cCBvbiB0aGUgQ0hBUiByYW5nZSBtYWNybwoJKiB4bWwtZXJyb3IuaCwgcGFyc2VyLmM6IGNhdGNoIFVSTC9VUkkgZXJyb3JzIHVzaW5nIHRoZSB1cmkuYwoJICBjb2RlLgoJKiB0cmVlLltjaF06IGFkZGVkIHhtbEJ1ZmZlckdyb3coKSwgd2FzIG5lZWRlZCBmb3IgaWNvbnYKCSogdXJpLmM6IGFkZGVkIHhtbFBhcnNlVVJJKCkgSSBjYW4ndCBiZWxpZXZlIEkgZm9yZ290IHRvCgkgIGltcGxlbWVudCB0aGlzIG9uZSBpbiAyLjAgISEhCgkqIFNBWC5jOiBtb3ZlZCBkb2MtPmVuY29kaW5nIHVwZGF0ZSBpbiB0aGUgZW5kRG9jdW1lbnQoKSBjYWxsLgoJKiBUT0RPOiB1cGRhdGVkLgoKTW9uIEFwciAyNCAxMzozMDoxMyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5oOiByZW1vdmVkIGV4dHJhbmVvdXMgeG1sUmVtb3ZlUHJvcCBkZWZpbml0aW9uCgkqIFRPRE86IGFkZGVkIGl0ZW0gYWJvdXQgLS1kaXNhYmxlLWNvcmJhIGNvbmZpZ3VyZSBzd2l0Y2gKCSogdHJlZS5jIHBhcnNlci5jOiBmaXhlZCBwcm9ibGVtcyBmb3IgeG1sQ29weURvYyBhbmQgcG9zdHZhbGlkYXRpb24KCSogbmFub2Z0cC5jOiBmaXhlZCBpbmNsdWRlIHByb2JsZW1zIGdpdmluZyB0cm91YmxlcyBvbiBBSVggYW5kIAoJICBzbG93bGFyaXMKCSogeG1sSU8uW2NoXSB2YWxpZC5oIHRyZWUuW2NoXSB4bGluay5jIHhtbG1lbW9yeS5jIHVyaS5jIAoJICBwYXJzZXIuYyBuYW5vZnRwLmMgbmFub2h0dHAuYyBTQVguYyB0ZXN0U0FYLmMgOgoJICBjb21tZW50IGFuZCBoZWFkZXJzIGNoYW5nZXMgdG8gbG93ZXIgZ3RrLWRvYyBudW1iZXIgb2Ygd2FybmluZ3MKCSogZG9jL2h0bWwvKjogcmVidWlsdCBkb2NzCgpTdW4gQXByIDE2IDExOjIzOjI5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIQUNLSU5HOiBkb2N1bWVudGVkIHRoZSB0YWcgZm9yIDEueCBhbmQgaW5zdHJ1Y3Rpb25zCgpXZWQgQXByIDEyIDE1OjQ3OjIyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxJTy5bY2hdIHBhcnNlci5bY2hdOiBNb3JlIGludGVyZmFjZXMgZm9yIG5ldyBJL08gZnVuY3Rpb25zCgkgIHhtbE5ld0lPSW5wdXRTdHJlYW0sIHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlSU8sCgkgIHhtbENyZWF0ZUlPUGFyc2VyQ3R4dAoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuaDogc3BlZWR1cCBvZiBJU19DSEFSIGxpa2UgbWFjcm9zLAoJICBzaWduaWZpY2FudCBvdmVyYWxsIGltcHJvdmVtZW50CgkqIHhtbGxpbnQuYzogYWRkZWQgSS9PIHRlc3QgdG8geG1sbGludAoJKiB0ZXN0U0FYLmM6IGFkZGVkIGEgc3BlZWQgdGVzdAoJKiBkb2MvKiA6IHVwZGF0ZWQvcmVnZW5lcmF0ZWQKClNhdCBBcHIgIDggMTQ6NTQ6NTQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLmMgdXJpLmggcGFyc2VySW50ZXJuYWxzLmg6IGNvc21ldGljIGNoYW5nZXMgZnJvbQoJICAiVGltdXIgSS4gQmFrZXlldiIgPHRpbXVyQGJhdC5ydT4sIGluY2x1ZGluZyBtYWtpbmcgCgkgIHhtbENyZWF0ZVVSSSgpIHB1YmxpYwoKRnJpIEFwciAgNyAxODozNTowMiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sSU8uW2NoXSBwYXJzZXIuYzogY2xlYW5lIHVwIHRoZSB4bWxQYXJzZXJJbnB1dEJ1ZmZlciBtZXNzCgkgIGFuZCB0aGUgY29kZSBhdCB0aGUgc2FtZSB0aW1lLiBBZGRlZCBhIGNsZWFuIG1lY2hhbmlzbSBmb3IKCSAgb3ZlcmxvYWQgb3IgYWRkZWQgaW5wdXQgbWV0aG9kczogeG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrcygpCgkqIHRyZWUuYzogZml4ZWQgeG1sUHJldlNpYmxpbmcgYW5kIHhtbE5leHRTaWJsaW5nIHBlciAKCSAgQ2hyaXN0b3BoZSBMZSBHYWwgKENocmlzdG9waGUuTGUtR2FsQGltYWcuZnIpIGlucHV0CgkqIFRPRE86IHVwZGF0ZWQKCSogZG9jLyogOiB1cGRhdGVkL3JlZ2VuZXJhdGVkCgkqIGRvYy9NYWtlZmlsZS5hbTogdHdlYWtzIHRvIGF2b2lkIHByb2JsZW0gd2l0aCBsaWJ4bWwgbGluayBpbiB0aGUKCSAgc291cmNlIGRpcgoKV2VkIEFwciAgNSAyMToxMTozNSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdGVzdFVSSS5jOiB5ZXQgYW5vdGhlciBmb3Jnb3R0ZW4gY29tbWl0LCBJIHNob3VsZCBnZXQgc29tZSBzbGVlcCAhCgpXZWQgQXByICA1IDIwOjM2OjQ2IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxsaW50LmM6IGZvcmdvdCB0byBjb21taXQgdGhpcyB0b28gPwoKV2VkIEFwciAgNSAxNjoyMjo0NCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sdmVyc2lvbi5oLmluIDogZm9yZ290IHRvIGNvbW1pdCB0aGlzIHByZXZpb3VzbHkKCk1vbiBBcHIgIDMgMjE6NDc6MTAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIGxpYnhtbC0yLjAuMCB2ZXJzaW9uIGxvb2tzIE9rIHNvIGZhcgoJKiBSRUFETUUgVE9ETzogdXBkYXRlZCBmb3IgcmVsZWFzZQoJKiB1cmkuYyB1cmkuaDogYWRkZWQgYXV0aG9yaXR5IHBhcnNpbmcvc2F2aW5nCgkqIHVyaS5jIHRlc3RVUkkuYyBNYWtlZmlsZS5hbTogbW92ZWQgdGhlIHRlc3RpbmcgY29kZSB0byB0ZXN0VVJJLmMKCSogeG1sdmVyc2lvbi5oLmluIGNvbmZpZ3VyZS5pbiBuYW5vZnRwLltjaF0gbmFub2h0dHAuW2NoXSBlbmNvZGluZy5oCgkgIGRlYnVnWE1MLltjaF0geHBhdGguW2NoXSB4bWxJTy5jIHRlc3Rlci5jIHRlc3RYUGF0aC5jIHRlc3RIVE1MLmMKCSAgdHJlZS5jIEhUTUx0cmVlLmMgSFRNTHBhcnNlci5jIHRyZWUuYyB0cmVlLmggcGFyc2VyLmMKCSAgTWFrZWZpbGUuYW0gOiBhZGRlZCBjb21waWxlLXRpbWUgY3VzdG9taXphdGlvbiBvZiBsaWJ4bWwKCSAgLS13aXRoLWZ0cCAtLXdpdGgtaHR0cCAtLXdpdGgtaHRtbCAtLXdpdGgteHBhdGggLS13aXRoLWRlYnVnCgkgIC0td2l0aC1tZW0tZGVidWcKCSogKi5bY2hdIGF1dG9jb25mLnNoIDogbW92ZWQgdG8gYW4gYWJzb2x1dGUgYWRyZXNzaW5nIG9mIGluY2x1ZGVzIDogCgkgICNpbmNsdWRlIDxsaWJ4bWwveHh4Lmg+IEkgaG9wZSBpdCB3b24ndCBicmVhayB0b28gbXVjaCBzdHVmZgoJICBhbmQgd2lsbCBiZSBtYW5hZ2VhYmxlIGluIHRoZSBmdXR1cmUuLi4KCSogeG1sbGludC5jIE1ha2VmaWxlLmFtIGxpYnhtbC5zcGVjLmluIDogcmVuYW1lZCB0ZXN0ZXIuYyB0byB4bWxsaW50LmMKCSAgYW5kIGFkZGVkIHhtbGxpbnQgdG8gdGhlIGluc3RhbGxlZCBwcm9ncmFtcwoJKiB1cmkuaDogYWRkZWQgeG1sRnJlZVVSSSgpCgkgIApGcmkgTWFyIDI0IDE0OjM1OjIxIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHVyaS5jIHVyaS5oOiBmaW5pc2hlZCB0aGUgZXNjYXBpbmcgaGFuZGxpbmcsIHRoZSBiYXNlIHN1cHBvcnQKCSAgYW5kIHRoZSBVUkkgcGF0aCBub3JtYWxpemF0aW9uLiBMb29rcyBnb29kIGp1c3QgbGFja3MgdGhlCgkgIGF1dGhvcml0eSBjb250ZW50IHBhcnNpbmcgY29kZS4KCSogTWFrZWZpbGUuYW06IGFkZGVkIGluc3RydWN0aW9ucyB0byBnZW5lcmF0ZSB0ZXN0VVJJCgkqIFRPRE86IHVwZGF0ZWQKCSogZG9jL3htbC5odG1sLCBkb2Mvc21hbGxmb290b25seS5naWYgZG9jL3czYy5wbmc6IHVwZGF0ZWQsCgkgIGFkZGVkIGxpbmtzIGFuZCBpY29ucyBmb3IgVzNDIGFuZCBHbm9tZQoKTW9uIE1hciAyMCAxNDowNToyNiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxtZW1vcnkuW2NoXSA6IHNlZW1zIEkgZm9yZ290IHRvIGFjdHVhbGx5IHVwZGF0ZSB0aGUgZmlsZXMgaW4KCSAgdGhlIGxhc3QgY29tbWl0IDotKQoJKiBkb2MveG1sLmh0bWwgZG9jL2h0bWwvKiA6IHVwZGF0ZWQgYW5kIHVwbG9hZGVkIHRoZSBkb2NzCgpNb24gTWFyIDIwIDEyOjMzOjUxIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRlc3QvdmFsaWQvZHRkcy94aHRtbCo6IHJlbW92ZWQgUkNTIGluZm9zIChwYWluIHdpdGggQ1ZTKQoJKiBUT0RPOiB1cGRhdGVkCgkqIHhtbG1lbW9yeS5bY2hdIDogYWRkZWQgeG1sTWVtU2V0dXAoKSBhbmQgeG1sTWVtR2V0KCkgdG8gb3ZlcnJpZGUKCSAgbGlieG1sIGRlZmF1bHQgYWxsb2NhdGlvbiBmdW5jdGlvbiB3aXRoIGFub3RoZXIgc2V0IChsaWtlIGdtYWxsb2MvCgkgIGdmcmVlKS4KCSogTWFrZWZpbGUuYW0sIHVyaS5jLCB1cmkuaDogYWRkZWQgYSBzZXQgb2YgZnVuY3Rpb25zIHRvIGRvCgkgIGV4YWN0IChsaXR0ZXJhbHkgY29waWVkIGZyb20gdGhlIFJGQyAyMzk2IHByb2R1Y3Rpb25zKSBwYXJzaW5nCgkgIGFuZCBoYW5kbGluZyBvZiBVUkkuIFdpbGwgYmUgbmVlZGVkIGZvciBYTGluaywgb25lIFhNTCBXRkMsIAoJICBYTUwgQmFzZSBhbmQgcmV1c2VkIGluIHRoZSBuYW5vW2Z0cC9odHRwXSBtb2R1bGVzLiBTdGlsbCB3b3JrCgkgIHRvIGJlIGRvbmUuCgpUdWUgTWFyIDE0IDIwOjUyOjM1IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiwgbGlieG1sLnNwZWMuaW4gOiBsaWJ4bWwyCgkqIGRvYy8qIDogdXBkYXRlZCB0aGUgZG9jIHBhZ2UsIHJlYnVpbHQgdGhlIGRvY3MKClR1ZSBNYXIgMTQgMTk6MTE6MjkgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWxsOiB0YWdnZWQgTElCX1hNTF8xX1gKCSogKi5jICouaCA6IHVwZGF0ZWQgZnJvbSBXM0MgQ1ZTIHRyZWUKCSogY29uZmlndXJlLmluIDogMi4wLjAtYmV0YQoJKiBsaWJ4bWwuc3BlYy5pbiA6IGxpYnhtbDIgcGFja2FnZSBuYW0KCSogcmVzdWx0LyogOiBuZXcgdmVyc2lvbiBvZiB0aGUgdGVzdHMgb3V0cHV0CgpNb24gTWFyICA2IDA5OjM0OjUyIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbCwgZG9jL3VwZGF0ZS5odG1sOiB1cGRhdGVkIGRvY3MsIDEuOC43CgpTYXQgTWFyICA0IDE2OjE0OjQyIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy8qIDogcmVidWlsdCB0aGUgZG9jcwoJKiBwYXJzZXIuYzogZmluYWwgcGF0Y2ggb24gIzY3NjYKCSogdmFsaWQuYzogc21hbGwgcGF0Y2ggb24gdmFsaWRpdHkgY2hlY2tzLgoKU2F0IE1hciAgNCAxMjozODo0MSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvdXBncmFkZS5odG1sOiBpbnN0cnVjdGlvbiBvbiBob3cgdG8gdXBncmFkZSBmcm9tIDEueCB0byAyLngKCSAgYWRkZWQKCSogcGFyc2VyLmM6IGFkZGluZyB4bWxLZWVwQmxhbmtzRGVmYXVsdCgpIGFzIGEgd2F5IHRvIG1hbmFnZQoJICBjb21wYXRpYmlsaXR5IHcuci50LiBYTUwgc3BlYyBhbmQgZXhpc3RpbmcgY29kZS4KClRodSBNYXIgIDIgMDQ6NDU6MTUgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IHNlZW1zIGEgYmV0dGVyIHNvbHV0aW9uIHRvIDxhPiAgIDwvYT4gZXhpc3RzLAoJICB3aWxsIHRyeSBpdCBmb3IgYSB3aGlsZQoKVGh1IE1hciAgMiAwMjoyNjoxMyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogdHJpZWQgdG8gcmVtb3ZlIHRoZSA8YT4gICA8L2E+IGdlbmVyYXRpbmcgPGEvPgoJICB0aGlzIGlzIGhhcmQuIExlZnQgYSBmbGFnIGZvciB0aGF0IHB1cnBvc2UuIEZpeGVkIGJ1ZyAjNjc2NgoJKiBjb25maWd1cmUuaW46IHByZXBhcmVkIDEuOC43IG5vdCByZWxlYXNlZCwgZHVlIHRvIHByZXZpb3VzCgkgIHByb2JsZW0KClRodSBNYXIgIDIgMDM6MDM6NTAgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sIDogYXBwbGllZCBzZWNvbmQgcGF0Y2ggZnJvbSBQYXVsIER1Qm9pcwoKVHVlIEZlYiAyOSAyMzo1NToxMyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwgOiBhcHBsaWVkIHBhdGNoIGZyb20gUGF1bCBEdUJvaXMKClRodSBGZWIgIDMgMTY6MzY6MzkgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMgSFRNTHBhcnNlci5jOiBkbyBhIGJpdCBvZiBidWZmZXJpemF0aW9uIGluIHB1c2ggbW9kZS4KClRodSBGZWIgIDMgMTU6NTk6MzcgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5jIG5hbm9odHRwLmMgdHJlZS5jIEhUTUx0cmVlLltjaF0gZGVidWdYTUwuYyB4cGF0aC5jOiBGaXhlZAoJICBjb21waWxhdGlvbiB3YXJuaW5ncyBvbiB2YXJpb3VzIHBsYXRmb3Jtcy4KCSogcGFyc2VyLmM6IEZpeGVkICM1MjgxIHZhbGlkaXR5IGVycm9yIGNhbGxiYWNrcyBhcmUgbm93IGRlc2FjdGl2ZWQKCSAgYnkgZGVmYXVsdCBpZiBub3QgdmFsaWRhdGluZy4KClRodSBGZWIgIDMgMTM6NDY6MTQgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5jLCB3aW4zMmNvbmZpZy5oLmluOiBwYXRjaGVzIHRvIGNvbXBpbGUgb24gV0lOMzIKCldlZCBGZWIgIDIgMjI6NTE6MTYgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5jOiBzbnByaW50Zi9zcHJpbnRmIHBhdGNoIGNvdXJ0ZXN5IEdlb3JnZSBLYXRzaXJlbG9zCgkgIDxna2F0c2lAY3MudG9yb250by5lZHU+CgpNb24gSmFuIDMxIDE4OjU4OjIxIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuYyBuYW5vaHR0cC5jOiBGaXhlZCAnIycgYW5kICc/JyBzdHJpcHBpbmcgd2hlbgoJICBwcm9jZXNzaW5nIFVSTHMKCk1vbiBKYW4gMzEgMTQ6MjU6NTcgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5bY2hdOiBjbGVhbnVwLCBidWcgZml4ZXMsIGludGVncmF0aW9uIGluIHJwbWZpbmQsIGFkZGVkCgkgIHhtbE5hbm9GVFBVcGRhdGVVUkwgZm9yIHBlcnNpc3RlbnQgY29udHJvbCBjb25uZWN0aW9ucy4KCSogY29uZmlndXJlLmluOiAxLjguNgoKVGh1IEphbiAyNyAxNzo1MjoyOSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vaHR0cC5bY2hdLCBuYW5vZnRwLltjaF06IGNsZWFudXAsIGFkZGVkIHByb3h5IHN1cHBvcnQKCSogdHJlZS5bY2hdIDogYWRkZWQgeG1sU2F2ZU5vRW1wdHlUYWdzCgoyMDAwLTAxLTI5ICBKYW1lcyBIZW5zdHJpZGdlIDxqYW1lc0BkYWEuY29tLmF1PgoKCSogbmFub2Z0cC5jOiBpbmNsdWRlIDxuZXRpbmV0L2luLmg+IGZvciBJUFBST1RPX1RDUC4KCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCBuYW5vZnRwLltjaF0gdG8gdGhlIGJ1aWxkLgoKV2VkIEphbiAyNiAxODoxNDo1NSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLltjaF06IGNsZWFudXAsIGNvbW1lbnRzLCBBUEkKCSogZGVidWdYTUwuYyA6IGZpeGVkIGEgYnVnIGluIHRoZSBjYXQgY29tbWFuZAoJKiBkb2MvKjogcmVnZW5lcmF0ZWQgdGhlIGRvY3MKCldlZCBKYW4gMjYgMTY6NTI6NTAgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5bY2hdIHBhcnNlci5jIHhtbElPLltjaF06IGFkZGVkIGEgTmFubyBGVFAgaW1wbGVtZW50YXRpb24KCSogZGVidWdYTUwuYyA6IGZpeGVkIGEgYnVnIGluIHRoZSBjYXQgY29tbWFuZAoJKiB2YWxpZC5jOiBmaXhpbmcgc29tZSBzbWFsbCBwcm9icwoJKiBsaWJ4bWwuc3BlYy5pbjogZ2V0IHJpZCBvZiB0aGUgU05BUCBzdWZmaXgKCSogZG9jL3htbC5odG1sOiB1cGRhdGVkIHRoZSBzdGF0dXMKCk1vbiBKYW4gMjQgMTQ6MzE6MDkgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sLWNvbmZpZy5pbjogeG1sLWNvbmZpZyAtLXZlcnNpb24gdG8ganVzdCByZXR1cm4gdGhlCgkgIHZlcnNpb24gbnVtYmVyCgkqIHhwYXRoLmM6IHNvbWUgY2xlYW51cCB3LnIudC4gYXhpcyB3aGVuIHRoZSBjdXJyZW50IG5vZGUgaXMKCSAgYW4gYXR0cmlidXRlLgoJKiBUT0RPOiB1cGRhdGVkCgpUdWUgSmFuIDE4IDE4OjQ2OjA2IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyZWQgZm9yIGxpYnhtbC0xLjguNQoJKiBkb2MvKiByZWNvbXBpbGVkIHRoZSBkb2N1bWVudGF0aW9uCgoyMDAwLTAxLTE3ICBKb2R5IEdvbGRiZXJnIDxqZ29sZGJlcmdAaG9tZS5jb20+CgoJKiBjb25maWd1cmUuaW4gOiBXQVJOSU5HIGF1dG9jb25mIHN1YnRsZXR5IGFsZXJ0IDoKCSAgVXNlIEFDX0NIRUNLX0hFQURFUlMgcmF0aGVyIHRoYW4gQUNfQ0hFQ0tfSEVBREVSCgkgIHdoZW4gbG9va2luZyBmb3IgemxpYi5oIHNvIHRoYXQgSEFWRV9aTElCX0ggaXMgZGVmaW5lZC4KCSogY29uZmlnLmguaW4gOiBIYXZlIGEgI3VuZGVmIGZvciBIQVZFX1pMSUJfSCBzbyB0aGF0IGl0IHdpbGwKCSAgZ2V0IGRlZmluZWQgYnkgQUNfQ0hFQ0tfSEVBREVSUy4KCk1vbiBKYW4gMTcgMTc6MDQ6MTIgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBmaXhlZCBhIGhpZGVvdXMgYnVnIGluIHhtbEdldFByb3AoKSB0aGFua3MgdG8KCSAgUnVuZS5EanVyaHV1c0BmYXN0Lm5vCgpTYXQgSmFuIDE1IDE1OjA5OjA2IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFRPRE86IHVwZGF0ZWQKCSogdHJlZS5jLCBwYXJzZXIuYzogbWFkZSBzdXJlIHRoYXQgb25seSBtZW1vcnkgYWxsb2MgcHJvYmxlbXMKCSAgYW5kIGludGVybmFsIHBhcnNlciBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gd3JpdGUgdG8gc3Rkb3V0IG9yCgkgIHN0ZGVyci4KClRodSBKYW4gMTMgMTE6NDk6MTEgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jIDogcmVzdG9yZWQgeG1sTmV3R2xvYmFsTnMgc2luY2UgdGhpcyBzZWVtcyB1c2VkIGJ5CgkgIGEgbG90IG9mIGV4aXN0aW5nIGNvZGUgOi0oLCBmaXhlZCBhIGJ1ZyBpbiB4bWxOZXdOcwoJKiBuYW5vaHR0cC5jOiBmaXhlZCBhIHByb2JsZW0gd2l0aCBJTkNMVURFX1dJTlNPQ0sKCSogSFRNTHBhcnNlci5jLCBwYXJzZXIuYywgZW50aXRpZXMuYywgdmFsaWQuYyA6IHJlbW92ZWQgYWxsIGNhbGxzCgkgIHRvIGV4aXQoKSBmcm9tIHRoZSBsaWJyYXJ5IGNvZGUuCgkqIHhwYXRoLmMsIHBhcnNlci5jOiByZW1vdmVkIGJ1Z3Mgb3IgdW51c2VkIGNvZGUgZGV0ZWN0ZWQgYnkgCgkgIFdpbmRvd3MgY29tcGlsZXJzCgkqIHBhcnNlci5jOiBzdGFydGVkIGFkZGluZyBpbnRlcmZhY2VzIGZvciBwYXJzaW5nIHdlbGwgYmFsYW5jZWQKCSAgWE1MIGZyYWdtZW50cwoJKiBjb25maWd1cmUuaW46IHJlbGVhc2luZyAxLjguNAoJKiBkb2MvKiA6IHJlYnVpbHQgdGhlIGRvY3MKClN1biBKYW4gIDkgMjM6MDM6MjAgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdIDogYWRkZWQgeG1sTmV3RG9jRnJhZ21lbnQoKSBmb3IgRE9NCgkqIHRlc3RIVE1MLmM6IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUuCgpXZWQgSmFuICA1IDE3OjI5OjE3IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy8qIDogcmVidWlsZCB0aGUgZG9jcwoKV2VkIEphbiAgNSAxNzowODo0MyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhY2NvbmZpZy5oOiByZWFkbGluZSBhbmQgaGlzdG9yeSBwYXRjaAoJKiB2YWxpZC5bY2hdOiBhZGRlZCB4bWxSZW1vdmVJRCgpIGFuZCB4bWxSZW1vdmVSZWYoKQoJKiB0cmVlLmM6IGFkZGVkIGNoZWNrIGFuZCBoYW5kbGluZyB3aGVuIHBvc3NpYmx5IHJlbW92aW5nIGFuIElECgkqIHRyZWUuYywgSFRNTHBhcnNlci5oLCBIVE1MdHJlZS5oOiBmaXhlZCBlbnRpdGllcyBwYXJzaW5nCgkgICAgIGFuZCBzYXZpbmcuCgkqIHRlc3QvSFRNTC9lbnRpdGllcy5odG1sIHJlc3VsdC9IVE1ML2VudGl0aWVzLmh0bWwqIDogdGVzdCBmb3IKCSAgICAgdmFyaW91cyBlbnRpdGllcyByZWZlcmVuY2UgY2FzZXMKCSogcmVzdWx0L0hUTUwvKiA6IGFzIGEgcmVzdWx0IG91dHB1dCBvZiBzb21lIHRlc3RjYXNlIGhhdmUKCSAgICAgY2hhbmdlZAoJKiBIVE1McGFyc2VyLmMsIHBhcnNlci5jOiBmaXhlZCBhIGJ1ZyBpbiB0aGUgcHVzaCBtb2RlIHRyaWdnZXJlZAoJICAgICBieSBwcmV2aW91cyBleGFtcGxlLiBhZGRlZCB4bWxQYXJzZVRyeU9yRmluaXNoKCkuCgkqIHhwYXRoLmggdHJlZS5oIHBhcnNlci5oIHZhbGlkLmggeG1sSU8uaCB4bGluay5oIGVuY29kaW5nLmgKCSAgZW50aXRpZXMuaCBkZWJ1Z1hNTC5oIEhUTUxwYXJzZXIuaDogY2hhbmdlZCB0aGUgd2F5IHN0cnVjdCBhcmUgCgkgIGRlY2xhcmVkIHRvIGFsbG93IGd0ay1kb2MgdG8gZXhwb3NlIHRob3NlCgkqIHBhcnNlci5jOiBjbG9zZWQgYnVnICM0OTYwICAKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluOiBBcHBsaWVkIHBhdGNoIGZyb20gCgkgIEFsYmVydCBDaGluLUEtWW91bmcgPGNoaW5hQHRoZXdyaXR0ZW53b3JkLmNvbT4gZm9yIGJldHRlciB6bGliCgkgIGFuZCBtYXRoL3NvY2tldCBsaWJzIGRldGVjdGlvbgoKTW9uIEphbiAgMyAxODoyOTo0MyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4sIE1ha2VmaWxlLmFtOiBsaW5rIHRlc3RlciBhZ2FpbnN0IHJlYWRsaW5lCgkqIGRvYy94bWwuaHRtbCBkb2MvKi8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2N1bWVudGF0aW9uIHBhZ2VzCgpNb24gSmFuICAzIDExOjU4OjA1IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXTogYWRkZWQgeG1sUmVtb3ZlUHJvcAoJKiB3aW4zMmNvbmZpZy5oLmluIG5hbm9odHRwLmM6IGF2b2lkIGluY2x1ZGluZyB0aGUgV2luZG93cwoJICAgIHNvY2tldCBzdHVmZiBpbiBldmVyeSBDIGZpbGVzCgkqIHBhcnNlci5jOiByZW1vdmVkIGFuIGluZGV0ZXJtaW5hdGlvbiB4bUxEZWNsL1BJKHhtbC4uLikgaW4KCSAgICB0aGUgWG1MIHBhcnNlcihzKQoJKiB0ZXN0L25zNCByZXN1bHQvbnM0IGV0Yy4uLjogYWRkZWQgdGVzdCBjYXNlIGZvciBwcmV2aW91cyBwcm9iICAgIAoJKiB0cmVlLmM6IHhtbE5ld05zIHdhc24ndCBjaGVja2luZyBmb3IgZG91YmxlIGRlZmluaXRpb24KCSogTWFrZWZpbGUuaW46IGZpeGVkIGEgcHJvYmxlbSB3aXRoIGRpc3QtaG9vayBkdXBsaWNhdGVzCgkqIHBhcnNlci5baGNdLCB4bWxJTy5jOiBmaXhlZCB0aGUgbG9hZGluZyBvZiBleHRlcm5hbCBlbnRpdGllcwoJICAgIEFQSXMsIG5vdyB4bWxMb2FkRXh0ZXJuYWxFbnRpdHkoKSBpcyB1c2VkIGV2ZXJ5d2hlcmUgYW5kCgkgICAgc2V0dGluZyB1cCBhbiBhcHAgc3BlY2lmaWMgZnJvbnQtZW5kIHVzaW5nIHRoZSAKCSogU0FYLmMgcGFyc2VyLmM6IHNvbWUgZml4ZXMsIG5vdyB0aGUgeGh0bWwgc3BlYyB2YWxpZGF0ZXMKCSAgICB3aXRoIHRoZSB4aHRtbCBEVEQuCgkqIGVycm9yLmM6IGZpeGVkIGNyYXNoZXMgaW4gY2FzZSBvZiBubyBpbnB1dCBzdHJlYW0gICAgCgkqIHRlc3QvdmFsaWQvW2R0ZHMvXS94aHRtbCogOiBhZGRlZCB0aGUgeGh0bWwgc3BlYyBhbmQgZHRkcwoJICAgIHRvIHRoZSB2YWxpZGF0aW9uIHRlc3RzIGFuZCByZXN1bHRzCgpXZWQgRGVjIDI5IDE1OjI5OjUyIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuW2NoXSB0ZXN0SFRNTC5jOiBhZGRlZCBwdXNoIG1vZGUgZm9yIHRoZSBIVE1MIHBhcnNlcgoJICB0b28gaHRtbENyZWF0ZVB1c2hQYXJzZXJDdHh0KCkgYW5kIGh0bWxQYXJzZUNodW5rKCkKCSogcGFyc2VyLmM6IGEgYml0IG9mIGNsZWFudXAuCgkqIFNBWC5jLCBIVE1McGFyc2VyLmM6IHNvbWUgYXR0cmlidXRlcyBtYXkgbm90IGhhdmUgdmFsdWVzIChjb250cmFyeQoJICB0byBYTUwpIHJlbW92ZWQgdGhlIGxhc3QgbWVtIGxlYWsga25vd24KCSogSFRNTHRyZWUuYzogb3V0cHV0IG1lc3NhZ2UgY2xlYW51cAoJKiB4bWxtZW1vcnkuYzogZGlzcGxheSBjb250ZW50IGluZm8gYWJvdXQgbWVtb3J5IGJsb2NrcwoJKiByZXN1bHQvSFRNTC93aXJlZC4qIDogbWlzc2luZyBhdHQgdmFsdWUgd2FybmluZyBjaGFuZ2UKClR1ZSBEZWMgMjggMTc6NDI6NDEgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jLyogOiByZWJ1aWx0IHRoZSBkb2N1bWVudGF0aW9uCgpUdWUgRGVjIDI4IDE4OjQ0OjIyIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5bY2hdIHBhcnNlckludGVybmFscy5oOiBQdXNoIHBhcnNlciBmb3IgWE1MLAoJICAgICBzZWVtcyB0byB3b3JrIGZpbmUgbm93CgkqIHRlc3Rlci5jIGRlYnVnWE1MLltjaF06IEFkZGVkIGFuIFhNTCBzaGVsbCBkZWJ1ZyBmYWNpbGl0eSBhbmQKCSAgICAgLS1wdXNoIGZvciBwdXNoIHRlc3RpbmcKCSogeHBhdGguW2NoXSA6IGNsZWFuZWQgdXAgZm9yIFNoZWxsIHVzYWdlLCBhZGRlZCBtaXNzaW5nIEFQSXMKCSogdGVzdFNBWC5jOiBhZGRlZCAtLXB1c2gKCSogSFRNTHRyZWUuW2NoXSB0cmVlLltjaF06IG5ldyBmdW5jdGlvbnMgZm9yIGR1bXBpbmcgcGFydHMgb2YgdGhlCgkgICAgIHN1YnRyZWUKCSogeG1sSU8uW2NoXSA6IGVucmljaGVkIEFQSSArIGZpeGVzIGZvciBwdXNoIG1vZGUgICAgIAoJKiBlbnRpdGllcy5bY2hdOiBhZGRlZCB0aGUgZW50aXR5IGNvbnRlbnQgbGVuZ3RoIHRvIHRoZSBzdHJ1Y3QuCgkqIHhtbG1lbW9yeS5bY2hdOiBuZXcgQVBJIHRvIHNob3cgdGhlIGxhc3QgZW50cmllcyBmb3IgdGhlIHNoZWxsCgkqIHZhbGlkLmM6IGFkZGVkIHJlcXVpcmVkIGF0dHJpYnV0ZSB0ZXN0aW5nCgkqIFNBWC5jOiB0aGUgY2RhdGEgY2FsbGJhY2sgbm93IG1lcmdlIGNvbnRpZ3VvdXMgZnJhZ21lbnRzCgkqIEhUTUxwYXJzZXIuYzogY2xlYW51cCBvZiBzb21lIG1hY3JvcwoKV2VkIERlYyAyMiAxMjoyMDo1MyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogZml4IGZvciBQSXMgbmFtZSBzdGFydGluZyB3aXRoIHhtbAoJKiB0cmVlLmM6IGZpeGVkIGEgcG90ZW50aWFsIHByb2JsZW0gd2l0aCB8fCBhbmQgJiYgb3BzCgkqICouYywgY29uZmlndXJlLmluIHdpbjMyY29uZmlnLmguaW4gOiBnZW5lcmF0ZSB3aW4zMmNvbmZpZy5oIGZvcgoJICB0aG9zZSBvbiB0aGUgT3RoZXIgU2lkZSAhCgpUdWUgRGVjIDIxIDE3OjIyOjE3IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBmaXhlZCBhIHN0dXBpZCA9IHZzLiA9PSBidWcgOi0oCgkqIGRvYy9nbm9tZS14bWwuc2dtbDogcy9nbGFkZS94bWwvCgpUdWUgRGVjIDIxIDE0OjI5OjM0IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiwgZG9jL3htbC5odG1sIDogYnVnIGZpeCByZWxlYXNlIDEuOC4yCgkqIGRlYnVnWE1MLmggbmFub2h0dHAuaCB4bWwtZXJyb3IuaCB4bWxtZW1vcnkuaCB4cGF0aC5oIDogCgkgIEhvcGVmdWxseSB0aGUgZW5kIG9mIHRoYXQgc2lsbHkgQysrIGluY2x1ZGUgcHJvYmxlbQoJKiB0cmVlLltjaF06IEFkZGVkIGEgZmV3IGZ1bmN0aW9uczogeG1sUmVwbGFjZU5vZGUsIHhtbEFkZFByZXZTaWJsaW5nLAoJICAgICAgeG1sQWRkTmV4dFNpYmxpbmcsIHhtbE5vZGVTZXROYW1lIGFuZCB4bWxEb2NTZXRSb290RWxlbWVudAoJKiBIVE1McGFyc2VyLmMgSFRNTHBhcnNlci5oIEhUTUx0cmVlLmM6IFdoZW4gc2F2aW5nIEhUTUwgdHJ5IHRvIGF2b2lkIAoJICAgICAgdHJvdWJsZXMgd2l0aCBhdXRvY2xvc2VkIGVsZW1lbnRzIHdoZW4gdGhlIHN0cmVlIHNoYXBlIGRvZXNuJ3QKCSAgICAgIGZvbGxvdyB0aGUgRHREIHNwZWNzLiBBZGRlZCBodG1sSXNBdXRvQ2xvc2VkKCkgYW5kCgkgICAgICBodG1sQXV0b0Nsb3NlVGFnKCkKCSogcmVzdWx0L0hUTUwvKi5odG0qOiBVcGRhdGVkIHRoZSBIVE1MIGV4YW1wbGVzIHJlZ3Jlc3Npb24gdGVzdHMgb3V0cHV0CgkqIFNBWC5jIHRyZWUuYzogZml4ZWQgYnVnIG9uIGRlZmF1bHRpbmcgbmFtZXNwYWNlcyBvbiBhdHRyaWJ1dGVzCgkqIGRlYnVnWE1MLmM6IGZpeGVkIGEgYnVnIG9uIHByaW50aW5nIGRlZmF1bHQgbmFtZXNwYWNlcy4KCSogSFRNTHRyZWUuYzogZml4ZWQgYSBwcm9ibGVtIHdoZW4gb3V0cHV0aW5nIFhNTCBwYXJzZWQgZG9jcyBhcyBIVE1MCgpNb24gRGVjIDIwIDE2OjIwOjU1IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHJlc3VsdC9IVE1MLyouaHRtW2xdIDogdXBkYXRlZCB0aGUgSFRNTCByZWdyZXNzaW9uIHRlc3RzIGFjY29yZGluZwoJICB0byB0aGUgbmV3IG91dHB1dAoJKiB4cGF0aC5oIHhtbC1lcnJvci5oIHZhbGlkLmggdHJlZS5oIHBhcnNlci5oIGVudGl0aWVzLmggU0FYLmgKCSAgSFRNTHRyZWUuaCB0cmVlLmMgZW50aXRpZXMuYzogaGVhZGVycyB0d2Vha2luZ3MgdG8gYXZvaWQgYSBuYXN0eQoJICBwcm9ibGVtIGR1ZSB0byBpbnRlcm1peCBvZiBleHRlcm4gIkMiIHsgLi4uIH0gZGVjbGFyYXRpb25zIGZvciBDKysKCSAgYW5kIHJlY3Vyc2l2ZSBpbmNsdWRlcyBpbiB0aGUgaGVhZGVycwoKMTk5OS0xMi0yMCAgQ2hyaXMgTGFoZXkgIDxjbGFoZXlAdW1pY2guZWR1PgoKCSogSFRNTHRyZWUuYzogTWFkZSBpdCBzbyB0aGF0IGh0bWwgbm9kZXMgd2l0aCBhIHNpbmdsZSBjaGlsZCBkbwoJbm90IGluc2VydCBhIGNhcnJpYWdlIHJldHVybiBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGNoaWxkIG5vZGUuCgpTYXQgRGVjIDE4IDE2OjA3OjAzIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiwgZG9jL3htbC5odG1sIDogYnVnIGZpeCByZWxlYXNlIDEuOC4xCgkqIHBhcnNlci5jOiBmaXhlZCBidWcgIzQzNDQKCSogeHBhdGguaCB4bWwtZXJyb3IuaCB4bGluay5oIG5hbm9odHRwLmggZGVidWdYTUwuaCBTQVguaCBIVE1McGFyc2VyLmgKCSAgYWRkZWQgdGhlIGdsdWUgdG8gYXZvaWQgQysrIHByb2JsZW1zCgkqIGRvYy8qIDogcmVnZW5lcmF0ZWQgdGhlIGRvY3VtZW50YXRpb24KClRodSBEZWMgMTYgMTY6MTk6MjkgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBmaXhlZCBhIGJ1ZyBpbnRyb2R1Y2VkIGluIDEuOC4wIGFuZCBicmVha2luZyBkZWZhdWx0CgkgIG5hbWVzcGFjZSByZWNvZ25pdGlvbiwgYW5kIERpYSBhcyBhIHJlc3VsIDotKAoJKiBlbmNvZGluZy5jOiBjbG9zZWQgYnVnICMzOTUwCgpXZWQgRGVjIDE1IDE5OjIyOjIzIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHZhbGlkLmM6IGRlYnVnZ2luZyBhIHBvc3RlcmlvcmkgdmFsaWRhdGlvbiwgZXhjZXB0IFVSSSBleHBhbnNpb24KCSAgc3R1ZmYgdGhpcyBzaG91bGQgYmUgZml4ZWQgbm93CgkqIHBhcnNlckludGVybmFscy5oOiBmaXhlZCBhIGJ1ZyBpbiBJU19CQVNFQ0hBUiByZXBvcnRlZCBieQoJICBDYXJsIE55Z2FyZCA8Y255Z2FyZEBiZWxsYXRsYW50aWMubmV0PgoJKiB0ZXN0ZXIuYzogYWRkZWQgLS1wb3N0dmFsaWQsIGNsZWFuaW5nIG9mIHRoZSBjb2RlCgkqIHRyZWUuW2NoXTogYWRkZWQgeG1sRG9jR2V0Um9vdEVsZW1lbnQoKQoJICAKVHVlIERlYyAxNCAyMDozMDozNCBQU1QgMTk5OSBSYW1pcm8gRXN0cnVnbyA8cmFtaXJvQGVhemVsLmNvbT4KCgkqIFNBWC5oLCB0cmVlLmggOiBjaGFuZ2VkICduYW1lc3BhY2UnIHRvICduYW1lU3BhY2UnIHRvIHdvcmthcm91bmQKCWMrKyBsb3NhZ2UuCgpTdW4gRGVjIDEyIDEzOjA4OjE1IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiwgZG9jL3htbC5odG1sIDogYnVtcGVkIHRvIDEuOC4wCgkqIHhsaW5rLltjaF0sIE1ha2VmaWxlLmFtIDogYWRkZWQgZnJhbWV3b3JrIGZvciBsaW5rIGRldGVjdGlvbgoJKiBwYXJzZXIuaDogYWRkZWQgbmJDaGFycyB0byBwYXJzZXIgY29udGV4dCwgbmVlZGVkIGZvciBjbGVhbnVwLgoJKiB4bWxtZW1vcnkuYzogcmVtb3ZlZCBhIG5hc3R5IGJ1ZyB3aGVuIG91dCBvZiBtZW0KCSogdmFsaWQuW2NoXTogYWRkaW5nIG5hbWVzcGFjZSBzdXBwb3J0IGZvciBhdHRyaWJ1dGUgZGVjbAoJKiB0ZXN0ZXIuYzogYWRkZWQgLS1kZWJ1Z2VudCBvcHRpb24KCSogZGVidWdYTUwuW2NoXTogYWRkZWQgeG1sRGVidWdEdW1wRW50aXRpZXMoKQoJKiBwYXJzZXIuYzogY2xlYW51cCwgYXZvaWRpbmcgdXNlIG9mIENVUl9QVFIgbGlrZSBwbGFndWUsIHVzaW5nCgkgIGJ1ZmZlcnMgaW5zdGVhZCwgdGhpcyB3YXMgcmVhbGx5IG5lZWRlZCwgdmFsaWRhdGlvbiB3YXMgYnJlYWtpbmcKCSAgaW4gc3RyYW5nZSB3YXlzIGR1ZSB0byB0aGF0LiBBZGRlZCB4bWxQYXJzZVN0cmluZ1BFUmVmZXJlbmNlKCkKCSAgYW5kIG90aGVyIHBhcnNpbmcgZnJvbSBzdHJpbmdzIGZ1bmN0aW9ucy4gRW50aXRpZXMgcHJvY2Vzc2luZwoJICBtb2RpZmllZCBhZ2FpbiwgYnV0IFBFUmVmIGFyZSBzdGlsbCBub3QgaGFuZGxlZCBjb3JyZWNseSBidXQKCSAgdW5sZXNzIHlvdSdyZSBFdmUgTWFsbGVyIHlvdSB3b24ndCBub3RpY2UgOi0pCgkqIEhUTUxwYXJzZXIuYzogbGFyZ2UgY2hhbmdlcyB0b3dhcmQgcmVsaWFiaWxpdHksIGFuZCBzd2l0Y2hlZCB0bwoJICBsb3dlcmNhc2UgaW50ZXJuYWwgdGFncywgWEhUTUwgaXMgbG93ZXJjYXNlLCBzbyBpdCB3aWxsIGhlbHAKCSAgdGhhdCBvdXRwdXQgaXMgY2xvc2VyIHRvIG5leHQgdmVyc2lvbi4KCSogZG9jLyogOiByZWdlbmVyYXRlZCB0aGUgZG9jdW1lbnRhdGlvbiwgaXQgaXMgbm93IGhvc3RlZCBhdAoJICBodHRwOi8veG1sc29mdC5vcmcvIChzYW1lIGJpdHMgSSBqdXN0IGJvdWdodCB0aGUgZG9tYWluIDotKQoJCgkKRnJpIERlYyAgMyAxMzo0NjozMiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBTQVguaCwgU0FYLmMsIG1ha2VmaWxlLmFtOiBhZGRlZCBTQVguaCBtb3N0bHkgdXNlZnVsIGZvciB0aGUKCSAgICAgICAgIGRvYyBnZW5lcmF0aW9uCgkqIHBhcnNlci5jOiBmaXhlZCBidWdzICMzOTA4IGFuZCAjMzkzNyBhbmQgYSBtZW1vcnkgbGVhawoJICAgICAgICAgaW4gdGhlIFNBWCBBUEkKCSogZG9jLyo6IHJlYnVpbHQgdGhlIGRvYyBtYWtpbmcgc3VyZSBldmVyeXRoaW5nIGFwcGVhcnMgaW4gdGhlCgkgICAgICAgICBIVE1MIGZpbGVzCgpXZWQgRGVjICAxIDEwOjI3OjQ3IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXSBIVE1MdHJlZS5jLCBkZWJ1Z1hNTC5jLCBjb25maWd1cmUuaW4sIHhtbC1jb25maWcuaW46CgkgICAgIGFkZGVkIHRoZSBwYXRjaCBmcm9tIENhcmwgTnlnYXJkIDxjbnlnYXJkQGJlbGxhdGxhbnRpYy5uZXQ+CgkgICAgIHdoaWNoIGFsbG93IGltcHJlc3NpdmUgc3BlZWQgaW1wcm92ZW1lbnQgb24gZGF0YXNldCB3aXRoCgkgICAgIGxhcmdlIHRleHQgcGllY2VzLCBidXQgYXQgdGhlIGNvc3Qgb2YgYnJva2VuIGJpbmFyeQoJICAgICBjb21wYXRpYmlsaXR5IGFuZCBzbGlnaHRseSBiaWdnZXIgbWVtb3J5IHVzYWdlLgoJICAgICBDb25maWd1cmUgd2l0aCAtLXdpdGgtYnVmZmVycyB0byBhY3RpdmF0ZSB0aGVtLCB0aGV5CgkgICAgIGFyZSBwcm90ZWN0ZWQgd2l0aCBYTUxfVVNFX0JVRkZFUl9DT05URU5UIGRlZmluZS4KCSogZW50aXRpZXMuW2NoXSwgcGFyc2VyLmM6IGFkZGVkIHhtbENsZWFudXBQcmVkZWZpbmVkRW50aXRpZXMoKSwKCSAgICAgZ29hbCBpcyAwIG1lbW9yeSBsZWZ0IGFsbG9jYXRlZCBvbmNlIHBhcnNlciBpcyBubyBtb3JlIHVzZWQKCSogdGVzdERBVi5jLCB0ZXN0SFRNTC5jLCB0ZXN0U0FYLmMsIHRlc3RYUGF0aC5jOiBtYWtlIHN1cmUgd2UKCSAgICAgY2FsbCB4bWxDbGVhbnVwUGFyc2VyKCkgYW5kIHhtbE1lbW9yeUR1bXAoKQoKV2VkIE5vdiAyNCAxOTowMDowNiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF0geG1sSU8uW2NoXSBwYXJzZXIuYyB2YWxpZC5jOiBjb2RlIGNsZWFudXAgd2l0aCAtcGVkYW50aWMKCSogcGFyc2VyLltjaF0gZW5jb2RpbmcuW2NoXTogYWRkZWQgbWVtb3J5IGNsZWFudXAgcm91dGluZXMKCSogcGFyc2VyLmM6IGNsb3NpbmcgYnVnICMzNzg4CgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBkb2MKClR1ZSBOb3YgMjMgMTE6MjM6NTUgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdOiBjbG9zaW5nIGJ1ZyAzNzQ4LCBhZGRlZCB4bWxOZXdEb2NSYXdOb2RlKCksIAoJICAgICAgICAgICAgIHhtbE5ld1RleHRDaGlsZCgpIGFuZCB4bWxTZXRDb21wcmVzc01vZGUoKSBiZWhhdmlvdXIuCgkqIHRlc3Rlci5jOiBhZGRlZCAtLWNvbXByZXNzIG9wdGlvbgoJKiBkb2MvKjogcmVidWlsdCB0aGUgZG9jdW1lbnRhdGlvbgoKRnJpIE5vdiAxOSAxODo0MToyOCBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmM6IGJ1Z2ZpeGluZywgdGhlIGRhbW4gdGhpbmcgTVVTVCBub3QgY3Jhc2ggZXZlbgoJICAgICAgICAgICAgICAgIGlmIGdpdmVuIC9wcm9jL2tjb3JlIGFzIGlucHV0ICEKCSogZG9jL3htbC5odG1sIGRvYy8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2N1bWVudGF0aW9uCgpUaHUgTm92IDE4IDE0OjU3OjE4IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBGaXhlZCBzb21lIHdyb25nbHkgc3BhY2UgY29sbGFwc2luZyBjb2RlIGR1ZSB0bwoJICAgICAgICAgICAgYSBtaXNyZWFkaW5nIG9mIHRoZSBzcGVjLgoJKiByZXN1bHQvKjogZml4ZWQgdGhlIG91dHB1dCBhY2NvcmRpbmdseQkgICAgCgpXZWQgTm92IDE3IDE4OjI4OjA2IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGVuY29kaW5nLmM6IGJ1ZyBmaXggYW5kIHR5cG9zCgkqIHhtbElPLltjaF0gcGFyc2VyLmM6IGZpcnN0IGJpdHMgdG93YXJkIHJlYWwgcHJvZ3Jlc3NpdmUgcGFyc2luZwoJKiBwYXJzZXIuYzogYWRkZWQgYXR0cmlidXRlIG5vcm1hbGl6YXRpb24gY2xvc2luZyBidWcgIzM1OTcKCSogdGVzdC9hdHQqIHJlc3VsdC9hdHQqIFNBWHJlc3VsdC9hdHQqOiB0ZXN0Y2FzZSBmb3IgYXR0cmlidXRlCgkgICAgbm9ybWFsaXphdGlvbgoKTW9uIE5vdiAxNSAxODo1MDo1NiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IGNsb3NpbmcgYnVnICMzMTYzIGJ5IGFkZGluZyBleHRyYSBmbGFncyBmb3IgdGhlCgkgICAgICAgICAgICAgICAgY2MgY29tcGlsZXIgb24gSFAtVVgKCkZyaSBOb3YgMTIgMTc6NDE6MjAgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdmFsaWQuW2NoXSA6IHJlbW92ZWQgYSB0eXBvIGFuZCBhbiBlbnVtZXJhdGVkIHR5cGUgYnVnIGluIHRoZQoJICAgICAgICAgICAgICAgeG1sQWRkRWxlbWVudERlY2woKSBmdW5jdGlvbgoJKiB0cmVlLmMgOiBJIGNoYW5nZWQgeG1sU2V0UHJvcCgpIGFuZCB4bWxOZXdQcm9wKCkgdG8gZG8gdGhlCgkgICAgY2FsbCB0byB4bWxFbmNvZGVFbnRpdGllc1JlZW50cmFudCgpIHNvIHRoYXQgdGhlIGZ1bmN0aW9ucyAKCSAgICBOZXcsIFNldCBhbmQgR2V0IGFyZSBhdCB0aGUgc2FtZSBsZXZlbC4KCSogcGFyc2VyLmMgSFRNTHBhcnNlci5jOiBleHRyYSBtZW1vcnkgYWxsb2NhdGlvbiBidWcgZm9yCgkgICAgYXR0cmlidXRlcyBkZXRlY3RlZCBieSBzb21lb25lIHVzaW5nIGxpYnhtbCBpbiBlbWJlZGRlZCBzeXN0ZW1zIDotKQoKVGh1IE9jdCAyOCAxNzo0OToyNiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sbWVtb3J5Lmg6IHR1cm5lZCBvZmYgbWVtIGRlYnVnIDotXAoKTW9uIE9jdCAyNSAxMjoxMzoyNSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IGNsb3NlZCBidWcgIzI3ODQgYSBvbmUgbGluZSBmaXgsIGJ1dCB3b3J0aCBwdXNoaW5nCgkgICAgICAgICAgICBhIG5ldyByZWxlYXNlIG91dAogICAgICAgICogSFRNTHBhcnNlci5jOiBmaXhlZCBhdXRvLWNsb3NlIGJ1Z3Mgb24gbGlzdCBpdGVtcywgemVyb2luZwoJICAgICAgICAgICAgc29tZSBzdHJ1Y3R1cmVzLCBjb21tZW50cyBiZWZvcmUgYW5kIGFmdGVyIHRoZQoJCSAgICBtYWluIGVsZW1lbnQsIGFuZCBvdGhlciBuYXN0eW5lc3MKCSogSFRNTHRyZWUuYyB0cmVlLmM6IGFjY29tb2RhdGUgdGhlIGV4dGVuZGVkIEhUTUwgc3VwcG9ydGVkCSAgICAKCSogY29uZmlndXJlLmluOiBwdXNoaW5nIDEuNy40CgkqIHRlc3QvZW50OCBhbmQgcmVsYXRlZCBvdXRwdXRzIDogYWRkZWQgYSBuZXcgdGVzdCBmb3IgYnVnICMyNzg0CgkqIHRlc3QvSFRNTC93aXJlZC5odG1sIGFuZCByZWxhdGVkIG91dHB1dDogYSBuYXN0eSBIVE1MIGV4YW1wbGUKCSogTWFrZWZpbGUuYW06IGltcHJvdmVkIHRoZSB0ZXN0IHNjcmlwdHMKCSogZG9jcy8qIDogcmVyYW4gdGhlIGRvY3VtZW50YXRpb24gZXh0cmFjdG9yLCB1cGRhdGVkIHhtbC5odG1sCgpUaHUgT2N0IDE0IDEwOjI5OjU2IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMsIEhUTUx0cmVlLmMsIHRyZWUuaDogY29tcGxldGVseSByZXZhbXBlZCB0aGUKCSAgICAgSFRNTHBhcnNlciBhbmQgZGVidWdnZWQgdGhlIEhUTUwgcmVsYXRlZCBjb2RlLiBIVE1MIGRvY3VtZW50cwoJICAgICBub3cgaGF2ZSB0aGVpciBvd24gdHlwZQoJKiBlbnRpdGllcy5jOiBkbyBub3QgZHVtcCAmYXBvczsgZm9yIEhUTUwgb3V0cHV0CgkqIHhtbG1lbW9yeS5jOiBpbXByb3ZlbWVudCwgYnJlYWtwb2ludCBtZWNoYW5pc20KCSogdGVzdEhUTUwuYzogYWRkZWQgLS1zYXggLS1yZXBlYXQgLi4uCgkqIE1ha2VmaWxlLmFtOiBpbXByb3ZlZCB0aGUgSFRNTCB0ZXN0cwoJKiB2YWxpZC5bY2hdOiBhZGRlZCB4bWxWYWxpZEdldFZhbGlkRWxlbWVudHMgYW5kCgkgICAgICAgICAgICAgIHhtbFZhbGlkR2V0UG90ZW50aWFsQ2hpbGRyZW4KCSogdGVzdGVyLmM6IGFkZGVkIC0taW5zZXJ0IHRvIHRlc3QgdGhlIDIgbmV3IGZ1bmN0aW9ucwoJKiB0ZXN0Ly8qIHJlc3VsdC8vKiBTQVhyZXN1bHQvLyogOiByZWdyZXNzaW9uIHRlc3QgY2xlYW51cAoJICAgICAgICAgICAgICAgYW5kIGV4dGVuc2lvbi4KCSogZG9jL2h0bWwgOiBhZGRlZCBkb2MgZm9yIG5ldyBtb2R1bGVzIGdub21lLXhtbC14bWxtZW1vcnkuaHRtbCBhbmQKCSAgICAgICAgICAgICBnbm9tZS14bWwtbmFub2h0dHAuaHRtbAoKTW9uIE9jdCAxMSAxNDozMTo1OCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBwcm9ibGVtcyB3aXRoIHNvbWUgYXV0b2Nsb3NlIHRhZ3MKCSogdHJlZS5jOiBmaXhlZCBYTUwgb3V0cHV0IHByb2JsZW1zLiAKCSogcmVzdWx0LyogU0FYcmVzdWx0Lyo6IHVwZGF0ZSBvZiB0aGUgdGVzdHMgb3V0cHV0CgpTYXQgT2N0ICA5IDExOjAyOjU3IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBNYWtlZmlsZS5hbTogQXJ0dXJvIHBhdGNoIGZvciB4bWxDb25mLnNoIHZlcnNpb24gaW5mbwoJKiBwYXJzZXIuYzogVGltIEpvc2xpbmcgcGF0Y2ggZm9yIHNpbmdsZSBxdW90ZWQgaXRlbXMKCSogdGVzdGVyLmM6IFRpbSBKb3NsaW5nIHBhdGNoIGZvciB0ZXN0ZXIgb3B0aW9ucyB1c2FnZQoJKiB0cmVlLmg6IGluZGVudCBjbGVhbnVwCgpGcmkgT2N0ICA4IDE2OjM1OjM3IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgcGFyc2VyLmggOiBGaXhlZCBwcm9ibGVtcyB3aXRoIEhUTUwgcGFyc2luZwoJICAgIHJlcG9ydGVkIGJ5IEtyaXN0aWFuIEhvZ3NiZXJnIEtyaXN0ZW5zZW4gPGhvZ3NiZXJnQGRhaW1pLmF1LmRrPgoKRnJpIE9jdCAgOCAxMTozNzoxMSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jIDogUmFwaCBwYXRjaCBmb3IgaW5pdGlhbGl6YXRpb24gb2YgQ09SQkEgZmllbGRzCgkqIHBhcnNlci5jLCB4cGF0aC5jLCAuLi46IG1vZGlmaWNhdGlvbiBvZiBkb2MgY29tbWVudHMKCSogeHBhdGguYyA6IGFsbG93IHNwYWNlcyBpbiB4cGF0aCBleHByZXNzaW9ucwoKTW9uIFNlcCAyNyAxMDoxNjo0MyBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sbWVtb3J5Lmg6IHR1cm5pbmcgb2ZmIG1lbW9yeSBkZWJ1ZyA6LSgKClN1biBTZXAgMjYgMTM6MTY6NTQgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5bY2hdIDogYWRkZWQgeG1sU0FYVXNlclBhcnNlRmlsZSgpIGFuZCB4bWxTQVhVc2VyUGFyc2VNZW1vcnkoKQoJICAgICAgICAgICAgICAgIGJldHRlciBTQVggaW50ZXJmYWNlcy4KCSogdGVzdFNBWC5jOiB1c2VzIHRoZSBuZXcgU0FYIHJvdXRpbmUsIGF2b2lkIGZldGNoaW5nIGFueSByZW1vdGUKCSAgICAgICAgICAgICBlbnRpdHkuCgkqIGNvbmZpZ3VyZS5pbjogMS43LjIKCkZyaSBTZXAgMjQgMTY6MDE6MDEgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGxpYnhtbC5zcGVjLmluOiBmaXhlZCB0aGUgVVJMCgkqIGRvYy94bWwuaHRtbDogaW1wcm92ZWQgdGhlIGRvY3VtZW50YXRpb24gZnJvbnQtZW5kCgpGcmkgU2VwIDI0IDAxOjA2OjM2IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vaHR0cC5jOiBjb25kaXRpb25uZWQgcmVmZXJlbmNlcyB0byBzbnByaW50ZiB3aXRoIEhBVkVfU05QUklOVEYKCkZyaSBTZXAgMjQgMDA6MTU6NTggQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGxpYnhtbC5zcGVjLmluOiBmaXhlZCB0aGUgYWxwaGEgY29tcGlsZSBwcm9ibGVtCgkqIHBhcnNlci5bY2hdOiBjaGFuZ2VkIGVycm5vIHRvIGVyck5vIGluIHRoZSBwYXJzZXIgY29udGV4dCA6LSgKCSogKi5bY2hdOiBjaGFuZ2VkIENIQVIgdG8geG1sQ2hhciB0byBhdm9pZCBwcm9ibGVtIG9uIFdJTjMyCgkqIGRvYy94bWwuaHRtbDogY2hhbmdlZCBDSEFSIHRvIHhtbENoYXIKCSogZG9jL2h0bWwvKjogcmVjb21waWxlZCB0aGUgZG9jdW1lbnRhdGlvbgoJKiBjb25maWd1cmUuaW46IDEuNy4xCgpXZWQgU2VwIDIyIDExOjQwOjMxIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuaDogbW9kaWZpZWQgdGhlIHBhcnNlciBjb250ZXh0IHN0cnVjdCB0byByZWdhaW4gMS40LjAKCSAgICAgICAgICAgIGJpbmFyeSBjb21wYXRpYmlsaXR5CgkqIHBhcnNlci5jLCB4bWwtZXJyb3IuaDogYWRkZWQgZXJybm8gb3QgdGVoIGNvbnRleHQgYW5kIGRlZmluZWQKCSAgICAgICAgICAgIGEgc2V0IG9mIGVycm9ycyB2YWx1ZXMgd2l0aCB1cGRhdGUgb2YgZXJybm8KCSogbmFub2h0dHAuW2NoXTogbWluaW1hbGlzdCBIVFRQIGZyb250LWVuZCBmb3IgZmV0Y2hpbmcgcmVtb3RlCgkgICAgICAgICAgICBEVERzIGFuZCBlbnRpdGllcwoJKiAqLmgsICouYzogY29tcGxldGUgY2xlYW51cCBvZiB0aGUgdXNlIG9mIGNvbmZpZy5oIGFuZCBpbmNsdWRlCgkgICAgICAgICAgICBwcm90ZWN0aW9uIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBzZXR1cC4KCSogb3ZlcmFsbGwgZGVidWdnaW5nLCBtYWludGVuYW5jZSBhbmQgYnVnLWZpeGluZyBvbiBhbGwgbW9kdWxlcwoJKiB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uCgkqIHJlYWR5IGZvciAxLjcuMAoKV2VkIFNlcCAgOCAyMjo0NjoxNCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIDogY2xlYW51cAoJKiBTQVguYyB2YWxpZC5jIHZhbGlkLmg6IGFkZGVkIElEL0lEUkVGIGNoZWNraW5nCgkqIHRyZWUuYyB0cmVlLmg6IGV4dGVuZGVkIGRvYyBzdHJ1Y3R1cmUgZm9yIHJlZnMKCSogY29uZmlndXJlLmluOiAxLjYuMgoJKiBwYXJzZXIuYzogcGF0Y2hlZCBidWcgaW4gU0FYIHVzZXIgYXJnIGNhbGwKCSogcGFyc2VySW50ZXJuYWxzLmg6IHBhdGNoZWQgbWlzc2luZyBjbG9zZSBpbiBDKysgd3JhcHBpbmcKCSogdGVzdFhQYXRoLmMgeHBhdGguYyB4cGF0aC5oOiBwcmVwYXJlZCBmb3IgZXh0ZW5zaWJpbGl0eSwKCSAgZXNwZWNpYWxseSB1cGNvbWluZyBYUG9pbnRlciBpbXBsZW1lbnRhdGlvbi4KCSogZG9jL3htbC5odG1sOiBhdWdtZW50ZWQsIHR5cG8KClNhdCBTZXAgIDQgMjI6NDg6MDUgQ0VTVCAxOTk5IFRpbXVyIEJha2V5ZXYgPG1jQGJhdC5ydT4KCgkqIGRvYy9NYWtlZmlsZS5hbTogcmVwbGFjZWQgImluc3RhbGwgLWQgIiB3aXRoICJta2luc3RhbGxkaXJzIiAtCglub3QgYWxsIGludm9jYXRpb25zIG9mIGluc3RhbGwgdW5kZXJzdGFuZCAtZC4KClNhdCBTZXAgIDQgMjI6MjA6MDcgQ0VTVCAxOTk5IFRpbXVyIEJha2V5ZXYgPG1jQGJhdC5ydT4KCgkqIE1ha2VmaWxlLmFtOiBwcmVwZW5kIGFsbCB0aGUgdGVzdCogY2FsbHMgd2l0aCAkKHRvcF9idWlsZGRpcikgLQoJdG8gbWFrZSAnY2hlY2snIHdvcmtzLCB3aGVuIGJ1aWxkZGlyICE9IHNyY2Rpci4KClNhdCBTZXAgIDQgMjA6MjU6NDYgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbCA6IHVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24KCkZyaSBTZXAgIDMgMDA6MDE6MDggQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbG1lbW9yeS5bY2hdIE1ha2VmaWxlLmFtICA6YWRkZWQgYSBtZW1vcnkgd3JhcHBlciB0byBjaGFzZQoJICAgICAgbm90IGRlYWxsb2NhdGVkIG1lbW9yeSBibG9ja3MKCSogKi5jIDogcmVwbGFjZXMgYWxsIGNhbGxzIHRvIG1hbGxvYygpIGZyZWUoKSBhbmQgcmVhbGxvYygpIHRvCgkgICAgICB0aGUgd3JhcHBlciBmdW5jdGlvbnMvbWFjcm9zCgkqIHRyZWUuYyA6IHJlbW92ZWQgbWVtb3J5IGxlYWtzIGR1ZXMgdG8gY2FsbGluZyB4bWxGcmVlTm9kZSgpCgkgICAgICBpbnN0ZWFkIG9mIHhtbEZyZWVOb2RlTGlzdCgpCgpXZWQgU2VwICAxIDE0OjE1OjA5IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmM6IGNvcnJlY3RlZCBhIHN0dXBpZCBidWcgbGVhZGluZyB0byBjb3JlIGR1bXAgYXQKCSAgICAgICAgICAgICAgICB0cmVlIGRlYWxsb2NhdGlvbi4gUmVtb3ZlZCB3YXJuaW5ncyBpbmRpY2F0ZWQgYnkKCQkJU3RlcGhhbmUuQ29udmVyc3lAbHJpLmZyCgkqIGVudGl0aWVzLmM6IEZpeGVzIFlldCBBbm90aGVyIFN0dXBpZCBCdWcsIGVudGl0aWVzIHdlcmUgbm90CgkgICAgICAgICAgICAgIGxvb2tlZCBmb3IgaW4gdGhlIGV4dGVybmFsIHN1YnNldAoKTW9uIEF1ZyAzMCAxMzoyMjoyNiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMgdmFsaWQuW2NoXSB4cGF0aC5jOiBwYXRjaGVkIGNvbXBpbGF0aW9uIHdhcm5pbmdzIHJlcG9ydGVkCgkgIG9uIFNHSSBieSBTdGVwaGFuZS5Db252ZXJzeUBscmkuZnIKClN1biBBdWcgMjkgMjI6Mjc6MjkgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFsbCAuaCA6IGNoYW5nZWQgdGhlIHByb3RvdHlwZSBkZWNsYXJhdGlvbiBpbmRlbnQgYXMgaW4gZ3RrCgkqIG1vc3QgLmMgOiB3b3JraW5nIG9uIHJlZHVjaW5nIHRoZSBUT0RPcyBpbiB0aGUgY29kZQoJKiBtb3N0IC5jIDogY2xlYW51cCB0aG91Z2ggLXBlZGFudGljIGFuZCBJbnN1cmUrKwoJKiBpbXByb3ZlbWVudHMgb24gdmFsaWRhdGlvbiBJRCBjaGVja2luZ3MuCgkqIHRyZWUuW2NoXSBTQVguYzogYWRkZWQgc3VwcG9ydCBmb3IgbmFtZXNwYWNlIG9uIGF0dHJpYnV0ZXMgIzIwMjIKCSogeG1sLWNvbmZpZy5pbjogY2xvc2VkICMxODEwCgpNb24gQXVnIDE2IDAzOjI3OjM4IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmgsIHZhbGlkLmMsIHZhbGlkLmg6IG1vcmUgd29yayBvbiB2YWxpZGl0eSwgSURzCgkqIHhwYXRoLmM6IGFkZGVkL2ZpeGVkIGNvbXBhcmlkb24gYW5kIGVxdWxpdHksIGFkZGVkIGEgbmV3IGlzaW5mCgkgIGRlZmluaXRpb24gZm9yIEFJWAoKU3VuIEF1ZyAxNSAyMToxNToxNyBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogTWFrZWZpbGUuYW0gbGlieG1sLnNwZWMuaW46IGNvcnJlY3RlZCBtaXNzaW5nIHhtbENvbmYuc2ggaW4KCSAgdGhlIGRpc3RyaWJ1dGlvbiBkdWUgdG8gYSBjdXQnbiBwYXN0ZSBlcnJvciBhdCBsYXN0IGNvbW1pdAoKVHVlIEF1ZyAxMCAyMDoyODowOSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiB1cGdyYWRlZCB0byB2ZXJzaW9uIDEuNC4wCgkqIHZhbGlkLltjaF0sIFNBWC5jLCBwYXJzZXIuW2NoXSBwYXJzZXJJbnRlcm5hbHMuaCAuLi4KCSAgQmlnIHVwZGF0ZSwgYWRkZWQgYSBsYXJnZSBwYXJ0IG9mIHRoZSB2YWxpZGF0aW9uIHByb2Nlc3MsCgkgIGl0IHNob3VsZCBiZSB1c2FibGUsIGJ1dCBzb21lIHBhcnRzIGFyZSBtaXNzaW5nCgkqIHhwYXRoLmM6IGltcHJvdmVkIHRoZSBpbXBsZW1lbnRhdGlvbiB3LnIudC4gcm9vdC4KCSogTWFrZWZpbGUuYW06IGFkZGVkIG1vcmUgdGVzdHMKCSogdGVzdCBhbmQgcmVzdWx0IHRyZWVzOiBhZGRlZCBhIGxvdCBvZiB0ZXN0cwoJKiBsaWJ4bWwuc3BlYy5pbjogZXhwb3J0IGxpYnhtbC5zby4wIGFuZCBsaWJ4bWwuc28uMQoKVHVlIEF1ZyAxMCAxMTozMzo0MSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogQWRkZWQgYW4gSEFDS0lORyBmaWxlCgpUdWUgSnVsIDI3IDIxOjQzOjAwIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgogICAgICAgICogeHBhdGguW2NoXSA6IGltcHJvdmVtZW50cyBhbmQgZGVidWcgb2YgdGhlIFhQYXRoIGltcGxlbWVudGF0aW9uCiAgICAgICAgKiBwYXJzZXIuYywgSFRNTHBhcnNlci5jIDogbW9kaWZpZWQgdGhlIHBhcnNlcnMgdG8gYmUgcHJvZ3Jlc3NpdmUKCSogdHJlZS5bY2hdIDogZXh0ZW5kZWQgdGhlIEJ1ZmZlciBwcm9taXRpdmVzCgkqIHhtbElPLltjaF0gOiBhZGRlZCBiYXNpYyBJL08gcm91dGluZXMgcHJvdmlkaW5nIHByb2dyZXNzaXZlCgkgIHBhcnNpbmcgYW5kIHJlYWR5IGZvciBJMThOIGNvbnZlcnNpb24gcGx1Z2lucwoJKiBTQVhyZXN1bHQvKiA6IHRoZSBTQVggY2FsbGJhY2sgc2VxdWVuY2UgbWF5YmUgc2xpZ2h0bHkgZGlmZmVyZW50CgkgIG5vdwoJKiB0ZXN0Ki5jIDogaW1wcm92ZWQvdXBkYXRlZCB0aGUgdGVzdHMgcHJvZ3JhbXMKCSogZG9jLyogOiByZWNvbXBpbGVkIHRoZSBkb2NzLgoKMTk5OS0wNy0yNiAgTWljaGFlbCBNZWVrcyAgPG1pY2hhZWxAZWRlbnByb2plY3Qub3JnPgoKCSogdHJlZS5oOiBBZGQgY29uc3QgdG8gJ2NvbnRlbnQnIGluIHhtbE5ld0RvY05vZGUsIHhtbE5ld0NoaWxkCgoJKiB0cmVlLmM6IERpdHRvLgoKVGh1IEp1bCAxNSAxNjoxNzoxNiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiB1cGdyYWRlZCB0byB2ZXJzaW9uIDEuNC4wCgkqIHhwYXRoLmMsIHhwYXRoLmgsIHRlc3RYUGF0aC5jLCBtYWtlZmlsZS5hbTogYWRkZWQgY29kZSBmb3IgdGhlIFhQYXRoCgkgIGRyYWZ0IGZyb20gVzNDLiBXaWxsIGJlIHVzZWQgYnkgWFBvaW50ZXIsIFhsaW5rLCBYU0wsIGFuZCBwb3NzaWJseQoJICBYTUwgcXVlcnkgbGFuZ3VhZ2UsIHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aCBmb3IgbW9yZSBkZXRhaWxzLgoJKiBwYXJzZXIuYywgcGFyc2VyLmg6IGFkZGVkIENIQVIqIHJlbGF0ZWQgc3RyaW5nIGZ1bmN0aW9ucyBmb3IgWFBhdGgKCSogSFRNTHBhcnNlci5bY2hdLCBIVE1MdHJlZS5jOiBhIGJpdCBvZiBjbGVhbnVwIG9uIGVudGl0aWVzLgoJKiBkb2MvZ25vbWUteG1sLnNnbWwsIGRvYy9odG1sLyogOiBhZGRlZCBYUGF0aCBhbmQgSFRNTCBkb2N1bWVudGF0aW9uLAoJICByZWJ1aWxkIHRoZSBkb2NzLgoJKiBNYWtlZmlsZS5hbSwgdGVzdC9YUGF0aC8qLCByZXN1bHQvWFBhdGgvKjogYWRkZWQgYW4gWFBhdGh0ZXN0cyB0YXJnZXQKCSAgYW5kIHJlZ3Jlc3Npb24gdGVzdGluZyBjYXBhYmlsaXRpZXMgZm9yIFhQYXRoLgoKTW9uIEp1bCAxMiAxMjozNjozOSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIEhUTUxwYXJzZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIEpvaG4gRWxsc29uIDxlbGxzb25AbHVjZW50LmNvbT4KCSAgY2xvc2luZyBidWcgIzE2NDYKCk1vbiBKdWwgMTIgMTE6MDQ6NDQgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1ha2VmaWxlLmFtLCBleGFtcGxlL01ha2VmaWxlLmFtOiBjbG9zZWQgYnVnICMxNjgzCgpTdW4gSnVsIDExIDE4OjE2OjM0IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBleGFtcGxlL01ha2VmaWxlLmFtLCBjb25maWd1cmUuaW46IGFkZGVkIHRoZSBtYWtlZmlsZSBmb3IgdGhlCgkgIGdqb2JyZWFkIGV4YW1wbGUKClNhdCBKdWwgMTAgMTQ6MTk6MTEgQ0VTVCAxOTk5IFRvbWFzeiBLs29jemtvICA8a2xvY3pla0BwbGQub3JnLnBsPgoKICAgICAgICAqIGRvYy9NYWtlZmlsZS5hbToKICAgICAgICAtIGZpeCB3aGljaCBhbGxvdyAibWFrZSBpbnN0YWxsIERFU1RESVI9PC9pbnN0YWxsL3ByZWZpeD4iLgoKRnJpIEp1bCAgOSAxMjoxMDoyNCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gSm9obiBFbGxzb24gPGVsbHNvbkBsdWNlbnQuY29tPgoJICB3aGljaCBmaXhlZCBhIHByb2JsZW0gb24gdGhlIGZpbGUgcmVhZGluZy1jb2RlLgoKV2VkIEp1bCAgNyAwOToyODo0MyBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5bY2hdLCBIVE1MdHJlZS5bY2hdOiBtb3JlIHdvcmsgZm9yIEhUTUwgcGFyc2luZyBhbmQKCSAgb3V0cHV0LgogICAgICAgICogTWFrZWZpbGUuYW0sIHRlc3QvSFRNTC8qLCByZXN1bHQvSFRNTC8qOiBhZGRlZCBIVE1MdGVzdHMgdGFyZ2V0ZXN0SFRNTHQKCldlZCBKdWwgIDcgMDA6MjU6NDIgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5oIDogT29wcyByZW1vdmVkIHRoZSBiaW5hcnkgY29tcGF0aWJpbGl0eSBwcm9ibGVtCgkqIEhUTUxwYXJzZXIuW2NoXSwgSFRNTHRyZWUuaCA6IE1vcmUgd29yayBvbiB0aGUgSFRNTCBwYXJzZS9kdW1wCgkqIHBhcnNlci5jLCBIVE1McGFyc2VyLmM6IGFwcGxpZWQgcGF0Y2hlcyBmb3IgcmVhZGluZyBmcm9tIHN0ZGluCgpNb24gSnVsICA1IDE4OjQ1OjMxIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgZW50aXRpZXMuYywgdmFsaWQuYzogY2xlYW51cCBidWcgIzE1OTEKCSogY29uZmlndXJlLmluOiBjbGVhbnVwIGJ1ZyAjMTU5MgoJKiBIVE1McGFyc2VyLltjaF0sIHRlc3RIVE1MLmM6IHN0YXJ0ZWQgYWRkaW5nIGFuIEhUTUwgcGFyc2VyIHVzaW5nCgkgIHRoZSBzYW1lIHRyZWUgYmFjay1lbmQuIEhlbmNlIGdkb21lIHdpbGwgYmUgYXZhaWxhYmxlIGZvciBpdC4KCSogZG9jL01ha2VmaWxlLmFtOiBjbG9zZSBidWcgIzYxNwoKU2F0IEp1biAyNiAyMzozNjozOCBFRFQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogYWxsb2N0YXRlIGEgcGVyIHBhcnNlciBjb250ZXh0IFNBWCBpbnRlcmZhY2UgYmxvY2sKClR1ZSBKdW4gMjIgMjM6NDY6MzIgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHJlbGVhc2VkIDEuMy4wIHdpdGggeG1sRW5jb2RlRW50aXRpZXMgcmVzdG9yaW5nIG9sZCBiZWhhdmlvdXIKCSAgYW5kIHhtbEVuY29kZUVudGl0aWVzUmVlbnRyYW50IHdpdGggdGhlIGNvcnJlY3Qgb25lIDotXAoKTW9uIEp1biAyMSAxNDowNzo1MyBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29tbWl0IG9mIG15IGludGVybmFsIFhNTCBiYXNlIGNoYW5nZXMsIHF1aXRlIGEgbG90IG9mCgkgIGNoYW5nZXMsIGNsZWFudXBzLCBiZXR0ZXIgZW50aXRpZXMgc3VwcG9ydCwgZnJhbWV3b3JrIGZvcgoJICBuZXcgSS9PIGFuZCBjaGFyc2V0IGRldGVjdGlvbiBhbmQgaGFuZGxpbmcKCSogRml4ZWQgdGhlIGNvbmZpZ3VyZS9NYWtlZmlsZSBzdHVmZiB0byBnZW5lcmF0ZSBzaGFyZWQgbGlicwoJICB3aXRoIHRoZSBwcm9wZXIgdmVyc2lvbiBpbmZvLCBzbyB3ZSBqdW1wZWQgb24gcmV2IGZyb20KCSAgMC4wLjAgdG8gMS4yLjAgISBUaGUgYmluYXJ5IGludGVyZmFjZXMgaGF2ZSBiZWVuIGJyb2tlbiwKCSAgeG1sRW5jb2RlRW50aXRpZXMoKSByZXN1bHQgbmVlZCB0byBiZSBmcmVlZCBub3csIGFuZCBhIHN0cmluZwoJICB4bWxQYXJzZXJWZXJzaW9uIHByb3ZpZGUgdGhlIGN1cnJlbnQgbGlicmFyeSB2ZXJzaW9uLgoKVHVlIEp1biAxNSAxNDoyNDoxOSAxOTk5ICBSYXBoIExldmllbiAgPHJhcGhAYWNtLm9yZz4KCgkqIHBhcnNlci5jOiBmaXhlZCBhIGJ1ZmZlciBvdmVycnVuIGZvciB3aGVuIHlvdSBoYXZlIGEgdmVyeSBsb25nCglhdHRyaWJ1dGUgd2l0aCBubyBlbnRpdGllcyBpbiBpdC4KCk1vbiBKdW4gMTQgMDA6MTc6NTAgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFkZGVkIGV4YW1wbGUgZGlyZWN0b3J5CgkqIGFkZGVkIGV4YW1wbGUvZ2pvYnMueG1sIGdqb2JyZWFkLmMsIHN0aWxsIG5lZWQgYSBNYWtlZmlsZS5pbgoKV2VkIEp1biAgMiAxOTo0MDo1OCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogUmVsZWFzZSBvZiBsaWJ4bWwtMS4xLCBuZWFybHkgZXZlcnl0aGluZyBoYXMgYmVlbiB0b3VjaGVkIGZvcgoJICB0aGlzLgoJKiBBZGRlZCBtb3JlIHJlZ3Jlc3Npb24gdGVzdHMKCSogVXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbgoKU2F0IE1heSAyOSAxMzozNDo0MiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdOiB1bmlmaWVkIHRoZSBYTUxfTk9fQ09SQkEgZGVmaW5lcy4KCSogcGFyc2VyLmMgZW5jb2RpbmcuW2NoXTogc3RhcnRlZCBwbHVnZ2luZyBpbiBjaGFyIGVuY29kaW5nIGRldGVjdGlvbgoKRnJpIE1heSAyOCAyMjo1ODo0MiBFRFQgMTk5OSBNYW5pc2ggVmFjaGhhcmFqYW5pIDxtdmFjaGhhckB2Z2VyLnJ1dGdlcnMuZWR1PgoKCSogdHJlZS5jOiAoeG1sU2F2ZUZpbGUpIC0gcmVtb3ZlZCBkb3VibGUgY2FsbCBvZiB4bWxDb250ZW50RHVtcC4gIAoJICBBbHNvIGZyZWVkIGFsbG9jYXRlZCBidWZmZXIuCgpXZWQgQXByIDIxIDIyOjA3OjM1IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgkqIHBhcnNlci5bY2hdIHRyZWUuW2NoXSBlbnRpdGllcy5bY2hdIHZhbGlkLltjaF0gOiByZW1vdmVkIHRoZSBtYWluCgkgIHJlZW50cmFuY3kgcHJvYmxlbSBhdCBwcmludGluZy4gT25lIGlzIGxlZnQgaW4gZW50aXRpZXMuYywgdG8KCSAgcmVtb3ZlIEFTQVAKCSogdGVzdFNBWC5jIDogYWRkZWQgYSB0ZXN0IGV4YW1wbGUgc2hvd2luZyB0aGUgdXNlIG9mIHRoZSBTQVggCgkgIGludGVyZmFjZSBpZiBvbmUgZG9lc24ndCB3YW50IHRvIGJ1aWxkIHRoZSBET00gdHJlZS4KCSogaHRtbC9nbm9tZS14bWwtKi5odG1sIGh0bWwvaW5kZXguc2dtbDogcmVnZW5lcmF0ZWQgdGhlIGRvY3VtZW50YXRpb24KCk1vbiBBcHIgIDUgMTQ6MTQ6NDAgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5bY2hdIHRyZWUuW2NoXSBTQVguYywgcGFyc2VySW50ZXJuYWxzLmggdmFsaWQuW2NoXToKCSAgbGFyZ2UgcmV2YW1waW5nIG9mIHRoZSBwYXJzZXIgdG8gdXNlIFNBWCBjYWxsYmFja3MKCSAgaHR0cDovL3d3dy5tZWdnaW5zb24uY29tL1NBWC8gKG9yIGF0IGxlYXN0IGEgQyBsaWtlIGludGVyZmFjZQoJICBhIGxhIEV4cGF0KS4gSXQncyBub3cgcG9zc2libGUgdG8gc2V0IHVwIHlvdXIgb3duIGNhbGxiYWNrcwoJICBhbmQgdGhlIHBhcnNlciB3aWxsIG5vdCBidWlsZCBhIERPTSB0cmVlLgoJKiB0ZXN0LyogcmVzdWx0Lyo6IHVwZGF0ZWQgdGhlIHRlc3Qgc3VpdGUsIEkgZmluYWxseSByZW1vdmVkCgkgIHRoZSBvbGQgTmFtZXNwYWNlIGRyYWZ0IHN1cHBvcnQgKFBJIGJhc2VkKS4KCkZyaSBBcHIgIDIgMTc6NTc6MzIgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCB0ZXN0IHJlc3VsdCB0byBFWFRSQV9ESVNUIGZvciBtYWtlIHRlc3RzCgpXZWQgTWFyIDI0IDIxOjM3OjAyIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCBwYXJzZXJJbnRlcm5hbHMuaDogbW92ZWQgdGhlIGNoYXJzIG1hY3JvIGRlZmluaXRpb25zCgkgIHRvIHBhcnNlckludGVybmFscy5oCgkqIHBhcnNlci5jLCBlcnJvci5jOiBhcHBsaWVkIHBhdGNoZXMgZnJvbSAiS251dCDFa2Vzc29uIgoJICA8a2FAczIuY2hhbG1lcnMuc2U+IGZvciBjbGVhbiBjb21waWxhdGlvbiB1bmRlciBNU1ZDIDYgOi1vCgpUdWUgTWFyIDIzIDExOjEwOjE1IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbC1jb25maWcuaW4gOiBhcHBsaWVkIHBhdGNoIHRvIG1ha2UgLS12ZXJzaW9uIHdvcmsKCjE5OTktMDMtMDUgIFJhamEgUiBIYXJpbmF0aCAgPGhhcmluYXRoQGNzLnVtbi5lZHU+CgoJKiBNYWtlZmlsZS5hbSAoY2hlY2stbG9jYWwpOiBBbGlhcyBmb3IgYHRlc3RzJyB0YXJnZXQuICBUaGlzIHdpbGwKCWNhdXNlIGBtYWtlIGNoZWNrJyB0byBkbyB0aGUgcmlnaHQgdGhpbmcuCgkodGVzdHMpOiBEb24ndCBydW4gdGVzdHMgaW4gc3JjZGlyLiAgQWxzbywgcmVwbGFjZWQgY2FsbHMgdG8KCWJhc2VuYW1lIHdpdGggYSBgc2VkJyAiZXF1aXZhbGVudCIuCgpGcmkgTWFyICA1IDA3OjIzOjUzIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFJlbmFtZWQgZXJyb3IuaCB0byB4bWwtZXJyb3IuaCwgY29ycmVjdGVkIE1ha2VmaWxlLmFtIHRvIGxpc3QKCSAgaXQgaW4gdGhlIGhlYWRlciBhbmQgbm90IHRoZSBzb3VyY2VzLCB1cGRhdGVkIHRoZSBkb2MuCgkgIFRoYW5rcyB0byBUaW0gTW9vbmV5IDxtb29uZXlAZG9nYmVydC5jYy5uZHN1Lm5vZGFrLmVkdT4gZm9yCgkgIHBvaW50aW5nIHRoaXMgb3V0LgoKTW9uIE1hciAgMSAxMzoyNzoxNyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgcGFyc2VyLmgsIHBhcnNlckludGVybmFscy5oOiBtZW1vcnkgbGVhayBodW50aW5nLAoJICBleHBvcnRlZCB0aGUgaW5wdXRTdHJlYW0gcm91dGluZXMuCgkqIGRvYy9odG1sLyogOiB1cGRhdGVkIGFjY29yZGluZ2x5CgpTdW4gRmViIDI4IDIyOjUxOjMzIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCBwYXJzZXIuaCwgcGFyc2VySW50ZXJuYWxzLmg6IGFkZGVkIGEgZmV3IGV4dHJhCgkgIGludGVybmFsIGNhbGxzIHRvIGFsbG9jYXRlIGFuZCBmcmVlIHBhcnNlciBjb250ZXh0cyAuLi4KCSogZG9jL2h0bWwvKiA6IHVwZGF0ZWQgYWNjb3JkaW5nbHkKClRodSBGZWIgMjUgMTE6NTI6MjQgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluLCBNYWtlZmlsZS5hbSwgZG9jL21ha2VmaWxlLmFtIDogR2VuZXJhbCBjaGFuZ2VzIGZvcgoJICAxLjAuMCByZWxlYXNlIGFuZCBpbmNsdWRpbmcgdGhlIGdlbmVyYXRlZCBIVE1MIGRvY3VtZW50YXRpb24uCgpUaHUgRmViIDI1IDA5OjQ0OjUyIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG1ha2VmaWxlLmFtIDogYWRkZWQgcGFyc2VySW50ZXJuYWxzLmgsIG9vcHMuCgpNb24gRmViIDIyIDExOjI0OjU2IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlckludGVybmFscy5oOiBhZGRlZCB0aGlzIGhlYWRlciBnaXZpbmcgYWNjZXNzIHRvIHRoZSBwYXJzZXIKCSAgaW50ZXJuYWwgZnVuY3Rpb25zLgoJKiBkb2MvTWFrZWZpbGUuYW0gOiBhZGRlZCBhIHJlYnVpbGQgdGFyZ2V0IHdoaWNoIHJlYnVpbGRzIHRoZSBmdWxsCgkgIHNldCBvZiBkb2N1bWVudGF0aW9ucwoJKiBwYXJzZXIuW2NoXSB0cmVlLltjaF0gdmFsaWQuW2NoXTogc2VyaW91cyB1cGRhdGVzIHcuci50LiBwYXJzaW5nCgkgIHRoZSBpbnRlcm5hbCBzdWJzZXQuIAoJKiAqLmMgKi5oOiBtb2RpZmljYXRpb25zIG5lZWRlZCB0byBnZW5lcmF0ZSB0aGUgZG9jdW1lbnRhdGlvbiB1c2luZwoJICBndGstZG9jLCBjbGVhbnVwIG9mIGZ1bmN0aW9ucyBibG9ja3MsIHJlb3JnYW5pc2F0aW9uIG9mIHN0cnVjdAoJICBkZWNsYXJhdGlvbnMuCgpUdWUgRmViIDE2IDE3OjI3OjI5IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1ha2VmaWxlLmFtLCBzcGVjLCBkb2MvTWFrZWZpbGUuYW0gOiB1cGdyYWRpbmcgdG8gMC45OS44LCBmaXhpbmcKCSAgdGhlIHRhciBhbmQgc3BlYyBmaWxlIHRvIGluY2x1ZGUgdGhlIGJlZ2lubmluZyBvZiB0aGUgZG9jLgoKMTk5OS0wMi0xMyAgTnVubyBGZXJyZWlyYSAgPG5tcmZAcm5sLmlzdC51dGwucHQ+CgoJKiBkb2MvLmN2c2lnbm9yZTogQWRkZWQgdGhpcyBmaWxlLgoKTW9uIEZlYiAgOCAxOToyNzo1NiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbEdldFByb3AgdG8gcmV0dXJuICIiIHdoZW4gdGhlIGF0dHJpYnV0ZQoJICBleGlzdHMsIGV2ZW4gaWYgdGhlIG5vZGUtbGlzdCBpcyBOVUxMLgoKTW9uIEZlYiAgOCAxNjoxMDoxNSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IHBhdGNoZWQgYW4gZXJyb3Igb3V0cHV0dGluZyBlbXB0eSBhdHRyaWJ1dGUgdmFsdWVzLgoJKiBNYWtlZmlsZS5hbSBhbmQgZG9jL21ha2VmaWxlLmFtOiBoYXZlIGJlZW4gdXBkYXRlZCBkdXJpbmcgdGhlCgkgIHdlZWstZW5kLiBTb3JyeSBmb3IgYW4gZW1wdHkgQ1ZTIGxvZywgSSBnb3QgYSBzaGVsbCBwcm9ibGVtLgoKTW9uIEZlYiAgMSAxMjoxMDoxMyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmg6IGNsZWFuZWQgdXAgdXNpbmcgZW51bXMgaW5zdGVhZCBvZiBkZWZpbmVzCgkqIHBhcnNlci5jLCB2YWxpZC5bY2hdOiBtb3JlIHdvcmsgb24gcGFyc2luZy9vdXRwdXQgb2YgZWxlbWVudAoJICBkZWNsYXJhdGlvbnMKClN1biBKYW4gMzEgMjI6MDY6NDggQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdmFsaWQuW2NoXSwgdHJlZS5jLCBwYXJzZXIuYyA6IG1vcmUgd29yayB0b3dhcmQgZnVsbCBwYXJzaW5nCgkgIG9mIFhNTCBEVERzLgoJKiBSRUFETUU6IGFkZGVkIGluZm9ybWF0aW9ucyBhYm91dCBtYWlsaW5nLWxpc3QgYW5kIG9uLWxpbmUKCSAgZG9jdW1lbnRhdGlvbgoKMTk5OS0wMS0yNyAgUmFqYSBSIEhhcmluYXRoICA8aGFyaW5hdGhAY3MudW1uLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbiAoWE1MX0lOQ0xVREVESVIpOiBVc2UgLUkgbm90IC1MIGZvciBpbmNsdWRlcy4KClN1biBKYW4gMTcgMjA6MDY6MzYgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIHRyZWUuW2NoXSA6IG1vcmUgd29yayB0b3dhcmQgY29uZm9ybWFuY2UgdGVzdGluZywKCSAgYWRkZWQgYSBsYXN0IGVsZW1lbnQgdG8gYWNjZWxlcmF0ZSBwYXJzaW5nIG9mIHZlcnkgZmxhdCBzdHJ1Y3R1cmVzCgkgIHN0YXJ0ZWQgd29ya2luZyBvbiBpbnRlcm5hbCBzdWJzZXQgRWxlbWVudCBjb250ZW50IGRlY2xhcmF0aW9uLgoJKiB2YWxpZC5bY2hdIDogZmlyc3QgY3V0IGF0IGFkZGluZyBjb2RlIHRvd2FyZCB2YWxpZGF0aW9uLgoJKiBwcmV2aW91cyBjaGFuZ2VzIGhhZCBhbHNvIHNtYWxsIGltcGFjdCBvbiBtb3N0IGZpbGVzLCBlc3BlY2lhbGx5CgkgIHRoZSBjb25mb3JtYW5jZSB0ZXN0aW5nIHVzaW5nIEphbWVzIENsYXJrIHRlc3Qgc3VpdGUuCgpTdW4gSmFuIDE3IDE0OjQ1OjA2IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRlc3QvKiA6IHVwZGF0ZWQgdGhlIGV4YW1wbGVzLCBtb3N0IG9mIHRoZW0gd2VyZSBub3Qgd2VsbAoJICAgICAgICAgICBmb3JtZWQgKGh1bW0pLCBhbmQgYWRkZWQgcmRmMi4KCSogcmVzdWx0LyogOiByZXN1bHRpbmcgY2hhbmdlcyBpbiB0aGUgb3V0cHV0LgoKU3VuIERlYyAgNiAxMzowNjo1OCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IGNoYW5nZWQgdGhlIGJlaGF2aW91ciBvZiB4bWxHZXRQcm9wIG9uIE5VTEwgdmFsdWVzLgoKU2F0IERlYyAgNSAxMjoyNTowOSBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IHBhdGNoZWQgYSBidWcgaW4gdGhlIGdlbmVyYXRpb24gb2YgZW1wdHkgYXR0cmlidXRlcwoKRnJpIE5vdiAyNyAwMTozNjo1NCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbnRpdGllcy5bY2hdLCB0cmVlLltjaF0sIHRlc3Rlci5jOiBhZGRlZCBjb3B5IGludGVyZmFjZXMKCSAgZm9yIG5vZGUvdHJlZXMvZG9jdW1lbnRzLy4uLiBCaWdnZXN0IHByb2JsZW0gaXMgbmFtZXNwYWNlCgkgIHN1cHBvcnQgd2hlbiBjb3B5aW5nIHN1YnRyZWVzLgoKU3VuIE5vdiAxNSAxOTo1OTo0NyBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgZW50aXRpZXMuYzogaW1wcm92ZSBlbnRpdGllcyBhbmQgY2hhciByZWYgZW5jb2RpbmcsCgkgIGFuZCBjbGVhbnVwcyBvZiBlcnJvciBtZXNzYWdlcy4KCkZyaSBOb3YgMTMgMTM6MDM6MTAgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIGVudGl0aWVzLmM6IHNpbXBsZSBidWcgaHVudGluZyBkb25lIGR1cmluZyBycG0yaHRtbCBhbmQKCSAgcnBtZmluZCBpbnRlZ3JhdGlvbi4KClN1biBOb3YgIDggMTM6MTE6MDcgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLltjaF06IEFkZGVkIGludGVyZmFjZXMgYWxsb3dpbmcgdG8gc3BlY2lmeSBhIFNBWAoJICBoYW5kbGVyIGJlZm9yZSBwYXJzaW5nLgoKU3VuIE5vdiAgOCAwOTozOToxNyBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogcmVkaXJyZWN0IGFsbCBlcnJvcnMgcmVwb3J0aW5nIHRocm91Z2ggdGhlIFNBWAoJICBlcnJvciBmdW5jdGlvbgoKV2VkIE5vdiAgNCAxNDoyMTo1NCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbnRpdGllcy5jOiByYXRoZXIgdXNlIEhBVkVfU05QUklOVEYgYW5kIG5vdCBkZXBlbmQgb24gZ2xpYgoJKiBsaWJ0b29sLCB0bG1haW4gLi4uOiB1cGRhdGUgb2YgdGhlIGxpYnRvb2wgZmlsZXMKCjE5OTgtMTEtMDQgIE1pZ3VlbCBkZSBJY2F6YSAgPG1pZ3VlbEBudWNsZWN1LnVuYW0ubXg+CgoJKiBlbnRpdGllcy5jOiBVc2UgZ19zbnByaW50ZiBpbnN0ZWRhIG9mIHNucHJpbnRmLgoKU3VuIE5vdiAgMSAxNDozMTowNiBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbnRpdGllcy5jLCBwYXJzZXIuYzogZGVidWcgYW5kIGNsZWFudXAgb2YgQ2hhclJlZiBoYW5kbGluZy9zYXZpbmcuCgkgIGFkZGVkIGVudDUgdGVzdCBmb3IgdGhpcyBwdXJwb3NlLgoJKiBwYXJzZXIuYywgcGFyc2VyLmg6IGZvcm1hdHRpbmcsIGNvbW1lbnRzIGFuZCBVVEYtOCBwbGFubmluZy4KCkZyaSBPY3QgMzAgMDE6MzY6NTIgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IGZpeGVkPyBhIHN0cmFuZ2UgZXJyb3IgZHVlIHRvIGNvbXByZXNzaW9uIG9uIGEgR1dQCgkgIGRvY3VtZW50LgoKVGh1IE9jdCAyOSAwMDo0ODo0NSBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF06IGJ1ZyBmaXhpbmcKCSogZW50aXRpZXMuW2NoXTogZGVmaW5lZCBhIHNwZWNpZmljIHR5cGUgZm9yIHByZWRlZmluZWQgZW50aXRpZXMKCSogZG9jL3htbC5odG1sOiBtb3JlIGRvY3VtZW50YXRpb24gb24gdGhlIGxpYnJhcnksIGhvdyB0byB1c2UgaXQsCgkgIG92ZXJ2aWV3IG9mIHRoZSBpbnRlcmZhY2VzLgoKV2VkIE9jdCAyOCAxNzo1NjozNSBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF06IG1vcmUgY2xlYW51cCBvbiB0aGUgQVBJLCBtYWRlIHRoZSB0cmVlIG1vciBjb25mb3JtYW50LgoKVHVlIE9jdCAyNyAxNzo1NDowMCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IGNvcnJlY3RlZCBhIHNtYWxsIGJ1ZwoJKiBkb2MveG1sLmh0bWw6IGNvbnRpbnVpbmcgd3JpdGluZyBkb2N1bWVudGF0aW9uLgoKVHVlIE9jdCAyNyAxNzo1NDowMCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkZWJ1Z1hNTC5oIGRlYnVnWE1MLmM6IGFkZGVkIGRlYnVnZ2luZyB1dGlsaXRpZXMuCgkqIHRlc3Rlci5jOiBhZGRlZCAtLWRlYnVnIHN3aXRjaC4KCSogdHJlZS5jOiBwYXRjaGVkIGFuIGluY29ycmVjdCBub2RlLT50eXBlIGFzc2lnbm1lbnQuCgkqIHBhcnNlci5jOiBmb3JtYXR0aW5nLCBlbnN1cmUgdGhhdCBub2RlLT5kb2MgIT0gTlVMTCBpbiBhdHRyaWJ1dGVzCgpUdWUgT2N0IDI3IDAxOjE1OjM5IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCiAgICAgICAgKiBwYXJzZXIuW2NoXSBTQVguYyB0cmVlLltjaF06IGxhcmdlIGFtb3VudCBvZiBjaGFuZ2VzIHRvIGltcHJvdmUKICAgICAgICAgIGVudGl0eSBzdXBwb3J0IGFuZCBwcm92aWRlIGFuIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGNsb3NlIHRvCiAgICAgICAgICBET00gb25lIChlbnRpdHkgcmVmIG5vZGVzLCBhbmQgYXR0cmlidXRlIHZhbHVlIGFzIHRyZWUpLiBJIHRyaWVkCiAgICAgICAgICB0byBwcmVzZXJ2ZSB0aGUgaW50ZXJmYWNlIGJ1dCB0aGlzIHdpbGwgc3VyZWx5IGJyZWFrIHNvbWUgYXBwcwogICAgICAgICAgKEkgaGF2ZSB0byBjaGFuZ2UgcnBtMmh0bWwvcnBtZmluZCBmb3IgZXhhbXBsZSkuIEkgaGFkIHRvIGNoYW5nZQoJICB0d28gaW50ZXJmYWNlcywgYW5kIHRoZSBnZW5lcmF0ZWQgdHJlZSBpcyBzb21ld2hhdCBkaWZmZXJlbnQuCgkqIGRvYy8qIDogc3RhcnRlZCBkb2N1bWVudGluZyB0aGUgWE1MIGxpYnJhcnksIHRoZSB0cmVlIGFuZAoJICBET00vQ29yYmEuIFRoaXMgaXMgYSBmaXJzdCBzdGVwLgoKU2F0IE9jdCAyNCAxNDoyMzo1MSBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogU2V0IHVwIHRoZSBmb25jdGlvbnMgY29tbWVudCBibG9jaywgYm9yaW5nIGJ1dCB1c2VmdWwuCgkqIHBhcnNlci5oLCBTQVguYywgcGFyc2VyLmM6IG5vdyBhdHRyaWJ1dGVzIGFyZSBwcm9jZXNzZWQgdGhyb3VnaAoJICB0aGUgU0FYIGludGVyZmFjZS4gVGhlIHByb2JsZW0gaXMgdGhhdCBteSBTQVggaW50ZXJmYWNlIGRpdmVyZ2VkCgkgIHF1aXRlIGEgYml0IGZyb20gdGhlIG9yaWdpbmFsIG9uZSwgd2VsbCB0aGlzIGlzIG5vdCBhbiBvZmZpY2lhbAoJICBzcGVjLCBhbmQgdHJhbnNsYXRpbmcgaXQgZnJvbSBKYXZhIHRvIEMgaXMgaGFpcnkgYW55d2F5Li4uCgpUdWUgT2N0IDIwIDAyOjExOjIxIEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFNBWC5jLCBlbnRpdGllcy5jLCB0cmVlLmMsIGVuY29kaW5nLmMsIGVycm9yLmM6IFNldCB1cCB0aGUKCSAgZm9uY3Rpb25zIGNvbW1lbnQgYmxvY2ssIGJvcmluZyBidXQgdXNlZnVsLgoKU3VuIE9jdCAxOCAyMDo0MDo1OCBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbmNvZGluZy5bY2hdLCBNYWtlZmlsZS5hbTogQWRkZWQgdGhlIFVURi04LCBVVEYtMTYgYW5kIElTTyBMYXRpbiAxCgkgIGNvbnZlcnNpb24gcm91dGluZXMuIEhvd2V2ZXIgdGhleSBhcmUgbm90IHlldCB1c2VkIHRvIGNvbnZlcnQgdGhlCgkgIGlucHV0cy4gVGhlIGNvcmUgd2lsbCBydW4gd2l0aCBVVEYtOC4KClN1biBPY3QgMTggMTU6MDg6MTkgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jIDogbWFrZSBzdXJlIHRoYXQgdGhlIHR5cGUgaWQgaXMgcHJvcGVybHkgc2V0LXVwIHdoZW4KCSAgYSBuZXcgb2JqZWN0IGlzIGFsbG9jYXRlZCwgbmVlZGVkIGZvciBET00uCgpTYXQgT2N0IDE3IDAyOjQzOjIxIEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuaCwgdHJlZS5jOiBPaywgdGhlIG1haW4gb2JqZWN0cyBpbiB0aGUgdHJlZSB3aWxsIGJlIG5hdGl2ZQoJICBjb3JiYSBvYmplY3RzLCBpdCBjb3N0cyA4IGJ5dGVzIHBlciBOb2RlLCBBdHRyaWJ1dGUgYW5kIERvY3VtZW50CgkgIGJ1dCBpdCBzaW1wbGlmaWVzIHRoZSBDb3JiYSBpbnRlZ3JhdGlvbiBhIGxvdCAobm8gZXh0cmEgaW50ZXJmYWNlCgkgIG9iamVjdHMgdG8gYWxsb2NhdGUvZnJlZSkuCgpUdWUgT2N0IDEzIDIxOjQ2OjU3IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuaCwgdHJlZS5jLCBwYXJzZXIuYzogYWRkZWQgcHJldiBhbmQgZG9jIHBvaW50ZXJzIHRvIE5vZGUsCgkgIGFuZCBjaGFuZ2VkIE5PREVzIGNvbnRhbnRzIGZvciBjb25mb3JtaXR5IHdpdGggRE9NIExldmVsIDEKCldlZCBPY3QgIDcgMjM6NDI6NDYgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWRkZWQgaG9va3MgdG8ga2VlcCB0cmFjayBvZiBzZXJ2YW50cyB3aGVuIGNyZWF0aW5nIG9iamVjdHMKCSAgeG1sRG9jIGFuZCB4bWxOb2RlIChmb3IgQ29yYmEgZXhwb3J0KS4KClN1biBPY3QgIDQgMDM6MTg6MDkgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWRkZWQgeG1sLWNvbmZpZyBzY3JpcHQuCgpUaHUgT2N0ICAxIDE2OjIyOjM3IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCiAgICAgICAgKiBhdXRvZ2VuLnNoIDogYXBwbGllZCBwYXRjaCBmcm9tIEZyZWRlcmljIERldmVybmF5IDxkZXZlcm5heUBpc3Rhci5mcj4KCSAgdG8gYXV0b3VwZGF0ZSBsaWJ0b29sIGFuZCBhdXRvbWFrZSBjb25mIGZpbGVzLgoKMTk5OC0wOS0zMCAgTWlndWVsIGRlIEljYXphICA8bWlndWVsQG51Y2xlY3UudW5hbS5teD4KCgkqIE1ha2VmaWxlLmFtOiBVc2UgJz8nIHRvIHNlcGFyYXRlIHRoZSBzZWQKCWNvbW1hbmRzIGFzICcsJyBpcyB1c2VkIHdoZW4gcGVvcGxlIHBhc3MgLVdsLHNvbWV0aGluZy4KCgpUaHUgU2VwIDI0IDE1OjEzOjI5IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYywgdHJlZS5oOiBhZGRlZCBhIHBlci1kb2N1bWVudCBjb21wcmVzc2lvbiBpbnRlcmZhY2UuCgpUdWUgU2VwIDIyIDIwOjQ3OjM4IEVEVCAxOTk4CgoJKiB0cmVlLmMsIHRyZWUuaDogYWRkZWQgc2F2aW5nIHdpdGggY29tcHJlc3Npb24gYW5kIGFkZGVkIGludGVyZmFjZXMKCSAgdG8gY29udHJvbCB0aGUgY29tcHJlc3Npb24gbGV2ZWwgKHhtbEdldENvbXByZXNzTW9kZSwKCSAgeG1sU2V0Q29tcHJlc3NNb2RlKSBhbmQgYSBuZXcgc2F2ZSB0byBmaWxlbmFtZSBmdW5jdGlvbiAoeG1sU2F2ZUZpbGUpLgoKTW9uIFNlcCAyMSAyMDoxMToxMyBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogY29ycmVjdGVkIGEgbG9vcCBmb3IgZmlsZXMgb2Ygc2l6ZSAwCgoxOTk4LTA4LTIwICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogZXJyb3IuaDogTmV3IGZpbGUuICBDb250YWlucyBwcm90b3R5ZXMgZnJvbSBgZXJyb3IuYycuCgpUaHUgQXVnIDEzIDE5OjAyOjM0IDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmFtICh4bWxpbmNkaXIpOiBOZXcgbWFjcm8uCgkoeG1saW5jX0hFQURFUlMpOiBSZW5hbWVkIGZyb20gaW5jbHVkZV9IRUFERVJTLgoKVGh1IEF1ZyAxMyAwMDo0MDoxNCBFRFQgMTk5OCAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYXBwbGllZCBzbWFsbCBwYXRjaCBvbiBudW1lcmljIGVudGl0aWVzIGZyb20KCSAgQ2hyaXN0b3BoZXIgQmxpenphcmQgPGJsaXp6YXJkQGFwcGxpZWR0aGVvcnkuY29tPgoKV2VkIEF1ZyAxMiAyMzoxMjo1OCBFRFQgMTk5OCAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogTmV3IHJlbGVhc2UgMC4yLCByZW1vdmVkIHRoZSBvbGQgeG1sXyogZmlsZXMgc28gdGhhdCBpdCdzCgkgICAgY29oZXJlbnQgd2l0aCB0aGUgb3RoZXIgQ1ZTIGJhc2UgKFczQyksIGZhciBiZXR0ZXIgY29uZm9ybWFuY2UKCSAgICB0byBzdGFuZGFyZCwgbmV3IG5hbWVzcGFjZXMsIGRlY2VudCBlbnRpdGllcyBzdXBwb3J0LCBiZWdpbm5pbmcKCSAgICBvZiBhIFNBWC1saWtlIGludGVyZmFjZS4gTmVhcmx5IG5vdGhpbmcgbGVmdCBpbnRhY3QsIGV2ZW4gdGhlCgkgICAgdGVzdCBleGFtcGxlcyAuLi4KCjE5OTgtMDctMzAgIENocmlzdG9waGVyIEJsaXp6YXJkICA8YmxpenphcmRAYXBwbGllZHRoZW9yeS5jb20+CgoJKiAuY3ZzaWdub3JlOiBBZGQgLmRlcHMgZGlyCgpTdW4gSnVsIDI2IDE3OjI5OjUyIEVEVCAxOTk4ICBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxfdHJlZTogY2hhbmdlZCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc2NoZW1lIGZvciBuYW1lIGluIHhtbE5ld05vZGUKClN1biBKdWwgMjYgMDA6MTc6NTEgRURUIDE5OTggIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCiAgICAgICAgKiBjb25maWd1cmUuaW46IGFkZGVkIHRlc3QgZm9yIENQUAoJKiBBVVRIT1JTLCBDaGFuZ2Vsb2c6IHRoZSBvcmlnaW5hbCBvbmVzIGRpZG4ndCBnZXQgY29tbWl0ZWQgYnV0IHRoZQoJICAgIGdsaWIgb25lcyBpbnN0ZWFkLCBmaXhlZC4KCSogTWFrZWZpbGUuYW06IGNvcnJlY3RlZCBhbiBlcnJvciBpbiBsaWJyYXJ5IG5hbWluZwoKRnJpIEp1bCAyNCAxNjo0NzoxNCAxOTk4ICBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBpbnRlZ3JhdGVkIGNvZGUgZGV2ZWxvcHBlZCBhdCBXM0MKCSogY2hhbmdlZCB0aGUgb3JpZ2luYWwgQ29weXJpZ2h0CgkqIG1pZ3JhdGVkIHRvIGF1dG9tYWtlCgkqIHByZWZpeGVkIHRoZSBmaWxlbmFtZXMgYnkgeG1sXyB0byBhdm9pZCBmaWxlbmFtZSBjbGFzaGVzCgo=