MjAwNjA0MjMKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMDEgMDU6NDI6MjAKICAgICBbc2NwLmNdCiAgICAgbWluaW1hbCBsaW50IGNsZWFudXAgKHVudXNlZCBjcnVkLCBhbmQgc29tZSBzaXplX3QpOyBvayBkam0KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMDEgMDU6NTA6MjkKICAgICBbc2NwLmNdCiAgICAgeGFzcHJpbnRpZmljYXRpb247IG9rIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzAxIDA1OjUxOjM0CiAgICAgW2F0b21pY2lvLmNdCiAgICAgQU5TSWZ5OyByZXF1ZXN0ZWQgZGVyYWFkdEAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzAyIDA4OjM0OjUyCiAgICAgW3NzaC1rZXlzaWduLmNdCiAgICAgc2Vzc2lvbmlkIGNhbiBiZSAzMiBieXRlcyBub3cgdG9vIHdoZW4gc2hhMjU2IGtleCBpcyB1c2VkOyBvayBkam1ACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzAzIDA3OjEwOjM4CiAgICAgW2dzcy1nZW5yLmNdCiAgICAgR1NTQVBJIGJ1ZmZlcnMgc2hvdWxkbid0IGJlIG51bC10ZXJtaW5hdGVkLCBzcG90dGVkIGluIGJ1Z3ppbGxhICMxMDY2CiAgICAgYnkgZGxlb25hcmQgQVQgdmludGVsYS5jb20uIHVzZSB4YXNwcmludGYoKSB0byBzaW1wbGlmeSBjb2RlIHdoaWxlIGluCiAgICAgdGhlcmU7ICJsb29rcyByaWdodCIgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMTYgMDA6NDg6NTIKICAgICBbYnVmZmVyLmMgYnVmZmVyLmggY2hhbm5lbHMuY10KICAgICBGaXggY29uZGl0aW9uIHdoZXJlIHdlIGNvdWxkIGV4aXQgd2l0aCBhIGZhdGFsIGVycm9yIHdoZW4gYW4gaW5wdXQKICAgICBidWZmZXIgYmVjYW1lIHRvbyBsYXJnZSBhbmQgdGhlIHJlbW90ZSBlbmQgaGFkIGFkdmVydGlzZWQgYSBiaWcgd2luZG93LgogICAgIFRoZSBwcm9ibGVtIHdhcyBhIG1pc21hdGNoIGluIHRoZSBiYWNrb2ZmIG1hdGggYmV0d2VlbiB0aGUgY2hhbm5lbHMgY29kZQogICAgIGFuZCB0aGUgYnVmZmVyIGNvZGUsIHNvIG1ha2UgYSBidWZmZXJfY2hlY2tfYWxsb2MoKSBmdW5jdGlvbiB0aGF0IHRoZQogICAgIGNoYW5uZWxzIGNvZGUgY2FuIHVzZSB0byBwcm9wc2VjdGl2bHkgY2hlY2sgd2hldGhlciBhbiBpbmNyZW1lbnRhbAogICAgIGFsbG9jYXRpb24gd2lsbCBzdWNjZWVkLiAgYnogIzExMzEsIGRlYnVnZ2VkIHdpdGggdGhlIGFzc2lzdGFuY2Ugb2YKICAgICBjb3ZlIEFUIHdpbGRwYWNrZXRzLmNvbTsgb2sgZHR1Y2tlckAgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMTYgMDA6NTI6NTUKICAgICBbYXRvbWljaW8uYyBhdG9taWNpby5oXQogICAgIGludHJvZHVjZSBhdG9taWNpb3YoKSBmdW5jdGlvbiB0aGF0IHdyYXBzIHJlYWR2L3dyaXRldiB0byByZXRyeQogICAgIGludGVycnVwdGVkIHRyYW5zZmVycyBsaWtlIGF0b21pY2lvKCkgZG9lcyBmb3IgcmVhZC93cml0ZTsKICAgICBmZWVkYmFjayBkZXJhYWR0QCBkdHVja2VyQCBzdGV2ZXNrQCBvayBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNC8xNiAwMDo1NDoxMAogICAgIFtzZnRwLWNsaWVudC5jXQogICAgIGF2b2lkIG1ha2luZyBhIHRpbnkgNC1ieXRlIHdyaXRlIHRvIHNlbmQgdGhlIHBhY2tldCBsZW5ndGggb2Ygc2Z0cAogICAgIGNvbW1hbmRzLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gYSBzZXBhcmF0ZSB0aW55IHBhY2tldCBvbiB0aGUgd2lyZSBieQogICAgIHVzaW5nIGF0b21pY2lvdih3cml0ZXYsIC4uLikgdG8gd3JpdGUgdGhlIGxlbmd0aCBhbmQgdGhlIGNvbW1hbmQgaW4gb25lCiAgICAgcGFzczsgb2sgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMTYgMDc6NTk6MDAKICAgICBbYXRvbWljaW8uY10KICAgICByZW9yZGVyIHNhbml0eSB0ZXN0IHNvIHRoYXQgaXQgY2Fubm90IGRlcmVmZXJlbmNlIHBhc3QgdGhlIGVuZCBvZiB0aGUKICAgICBpb3YgYXJyYXk7IHdlbGwgc3BvdHRlZCBjYW5hY2FyQCEKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzE4IDEwOjQ0OjI4CiAgICAgW2J1ZmF1eC5jIGJ1ZmJuLmNdCiAgICAgTW92ZSBCdWZmZXIgYmlnbnVtIGZ1bmN0aW9ucyBpbnRvIHRoZWlyIG93biBmaWxlLCBidWZibi5jLiBUaGlzIG1lYW5zCiAgICAgdGhhdCBzZnRwIGFuZCBzZnRwLXNlcnZlciAod2hpY2ggdXNlIHRoZSBCdWZmZXIgZnVuY3Rpb25zIGluIGJ1ZmF1eC5jIAogICAgIGJ1dCBub3QgdGhlIGJpZ251bSBvbmVzKSBubyBsb25nZXIgbmVlZCB0byBiZSBsaW5rZWQgd2l0aCBsaWJjcnlwdG8uCiAgICAgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNC8yMCAwOToyNzowOQogICAgIFthdXRoLmggY2xpZW50bG9vcC5jIGRpc3BhdGNoLmMgZGlzcGF0Y2guaCBrZXguaF0KICAgICByZXBsYWNlIHRoZSBsYXN0IG5vbi1zaWdfYXRvbWljX3QgZmxhZyB1c2VkIGluIGEgc2lnbmFsIGhhbmRsZXIgd2l0aCBhCiAgICAgc2lnX2F0b21pY190LCB1bmZvcnR1bmF0ZWx5IHdpdGggc29tZSBrbm9jay1vbiBlZmZlY3RzIGluIG90aGVyIChub24tCiAgICAgc2lnbmFsKSBjb250ZXh0cyBpbiB3aGljaCBpdCBpcyB1c2VkOyBvayBtYXJrdXNACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzIwIDA5OjQ3OjU5CiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBzaW1wbGlmeTsgb2sgZGptQAoKMjAwNjA0MjEKIC0gKGRqbSkgW01ha2VmaWxlLmluIGNvbmZpZ3VyZS5hYyBzZXNzaW9uLmMgc3NocHR5LmNdCiAgIFtjb250cmliL3JlZGhhdC9zc2hkLmluaXQgb3BlbmJzZC1jb21wYXQvTWFrZWZpbGUuaW5dCiAgIFtvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtbGludXguY10KICAgW29wZW5ic2QtY29tcGF0L3BvcnQtbGludXguaF0gQWRkIHN1cHBvcnQgZm9yIFNFTGludXgsIHNldHRpbmcgCiAgIHRoZSBleGVjdXRpb24gYW5kIFRUWSBjb250ZXh0cy4gYmFzZWQgb24gcGF0Y2ggZnJvbSBEYW5pZWwgV2Fsc2gsCiAgIGJ6ICM4ODA7IG9rIGR0dWNrZXJACgoyMDA2MDQxOAogLSAoZGptKSBbY2Fub2hvc3QuY10gUmVvcmRlciBJUCBvcHRpb25zIGNoZWNrIHNvIHRoYXQgaXQgaXNuJ3QgYnJva2VuCiAgIGJ5IG1hcHBlZCBhZGRyZXNzZXM7IGJ6ICMxMTc5IHJlcG9ydGVkIGJ5IG1hcmt3IHd0ZWNoLWxsYy5jb207CiAgIG9rIGR0dWNrZXJACgoyMDA2MDMzMQogLSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNyAwMToyMToxOAogICAgIFt4bWFsbG9jLmNdCiAgICAgd2UgY2FuIGRvIHRoZSBzaXplICYgbm1lbWIgY2hlY2sgYmVmb3JlIHRoZSBpbnRlZ2VyIG92ZXJmbG93IGNoZWNrOyAKICAgICBldm9sCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNyAxMzowMzo1NAogICAgIFtkaC5jXQogICAgIHVzZSBzdHJ0b251bSgpIGluc3RlYWQgb2YgYXRvaSgpLCBsaW1pdCBkaGcgc2l6ZSB0byA2NGs7IG9rIGRqbQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNyAyMzoxNTo0NgogICAgIFtzZnRwLmNdCiAgICAgYWx3YXlzIHVzZSBhIGZvcm1hdCBzdHJpbmcgZm9yIGFkZGFyZ3M7IHNwb3R0ZWQgYnkgbW91cmluZ0AKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI4IDAwOjEyOjMxCiAgICAgW1JFQURNRS50dW4gc3NoLmNdCiAgICAgc3BhY2luZwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjggMDE6NTI6MjgKICAgICBbY2hhbm5lbHMuY10KICAgICBkbyBub3QgYWNjZXB0IHVucmVhc29uYWJsZSBYIHBvcnRzIG51bWJlcnM7IG9rIGRqbQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjggMDE6NTM6NDMKICAgICBbc3NoLWFnZW50LmNdCiAgICAgdXNlIHN0cnRvbnVtKCkgdG8gcGFyc2UgdGhlIHBpZCBmcm9tIHRoZSBmaWxlLCBhbmQgcmFuZ2UgY2hlY2sgaXQKICAgICBiZXR0ZXI7IG9rIGRqbQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8zMCAwOTo0MToyNQogICAgIFtjaGFubmVscy5jXQogICAgIEFSR1NVU0VEIGZvciBkaXNwYXRjaCB0YWJsZS1kcml2ZW4gZnVuY3Rpb25zCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzMwIDA5OjU4OjE2CiAgICAgW2F1dGhmZC5jIGJ1ZmF1eC5jIGRlYXR0YWNrLmMgZ3NzLXNlcnYuYyBtYWMuYyBtaXNjLmMgbWlzYy5oXQogICAgIFttb25pdG9yX3dyYXAuYyBtc2cuYyBwYWNrZXQuYyBzZnRwLWNsaWVudC5jIHNmdHAtc2VydmVyLmMgc3NoLWFnZW50LmNdCiAgICAgcmVwbGFjZSB7R0VULFBVVH1fWFhCSVQgbWFjcm9zIHdpdGggZnVuY3Rpb25hbGx5IHNpbWlsYXIgZnVuY3Rpb25zLAogICAgIHNpbGVuY2luZyBhIGhlYXAgb2YgbGludCB3YXJuaW5ncy4gYWxzbyBhbGxvd3MgdGhlbSB0byB1c2UKICAgICBfX2JvdW5kZWRfXyBjaGVja2luZyB3aGljaCBjYW4ndCBiZSBhcHBsaWVkIHRvIG1hY3JvczsgcmVxdWVzdGVkCiAgICAgYnkgYW5kIGZlZWRiYWNrIGZyb20gZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMzAgMTA6NDE6MjUKICAgICBbc3NoLmMgc3NoX2NvbmZpZy41XQogICAgIGFkZCBwZXJjZW50IGVzY2FwZSBjaGFycyB0byB0aGUgSWRlbnRpdHlGaWxlIG9wdGlvbiwgYnogIzExNTkgYmFzZWQKICAgICBvbiBhIHBhdGNoIGJ5IGltYWdpbmcgQVQgbWF0aC51YWxiZXJ0YS5jYTsgZmVlZGJhY2sgYW5kIG9rIGR0dWNrZXJACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8zMCAxMTowNToxNwogICAgIFtzc2gta2V5Z2VuLmNdCiAgICAgQ29ycmVjdGx5IGhhbmRsZSB0cnVuY2F0ZWQgZmlsZXMgd2hpbGUgY29udmVydGluZyBrZXlzOyBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8zMCAxMTo0MDoyMQogICAgIFthdXRoLmMgbW9uaXRvci5jXQogICAgIFByZXZlbnQgZHVwbGljYXRlIGxvZyBtZXNzYWdlcyB3aGVuIHByaXZzZXA9eWVzOyBvayBkam1ACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzMxIDA5OjA5OjMwCiAgICAgW3NzaF9jb25maWcuNV0KICAgICBraWxsIHRyYWlsaW5nIHdoaXRlc3BhY2U7CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzMxIDA5OjEzOjU2CiAgICAgW3NzaF9jb25maWcuNV0KICAgICByZW1vdGUgdXNlciBlc2NhcGUgaXMgJXIgbm90ICVoOyBzcG90dGVkIGJ5IGptY0AKCjIwMDYwMzI2CiAtIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqYWtvYkBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xNSAwODo0Njo0NAogICAgIFtzc2gta2V5Z2VuLmNdCiAgICAgaWYgbm8ga2V5IGZpbGUgYXJlIGdpdmVuIHdoZW4gcHJpbnRpbmcgdGhlIEROUyBob3N0IHJlY29yZCwgdXNlIHRoZQogICAgIGhvc3Qga2V5IGZpbGUocykgYXMgZGVmYXVsdC4gb2sgZGptQAogICAtIGJpb3JuQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE2IDEwOjMxOjQ1CiAgICAgW3NjcC5jXQogICAgIFRyeSB0byBkaXNwbGF5IGVycm9ybWVzc2FnZSBldmVuIGlmIHJlbW91dCA9PSAtMQogICAgIG9rIGRqbUAsIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTcgMjI6MzE6NTAKICAgICBbYXV0aGZkLmNdCiAgICAgYW5vdGhlciB1bnJlYWNoYWJsZSBmb3VuZCBieSBsaW50CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE3IDIyOjMxOjExCiAgICAgW2F1dGhmZC5jXQogICAgIHVucmVhY2hhbmJsZSBzdGF0ZW1lbnQsIGZvdW5kIGJ5IGxpbnQKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTkgMDI6MjI6MzIKICAgICBbc2VydmVybG9vcC5jXQogICAgIG1lbW9yeSBsZWFrcyBkZXRlY3RlZCBieSBDb3Zlcml0eSB2aWEgZWxhZCBBVCBuZXRic2Qub3JnOwogICAgIG9rIGRlcmFhZHRAIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE5IDAyOjIyOjU2CiAgICAgW3NmdHAuY10KICAgICBtb3JlIG1lbW9yeSBsZWFrcyBkZXRlY3RlZCBieSBDb3Zlcml0eSB2aWEgZWxhZCBBVCBuZXRic2Qub3JnOwogICAgIGRlcmFhZHRAIG9rCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE5IDAyOjIzOjI2CiAgICAgW2hvc3RmaWxlLmNdCiAgICAgRklMRSogbGVhayBkZXRlY3RlZCBieSBDb3Zlcml0eSB2aWEgZWxhZCBBVCBuZXRic2Qub3JnOwogICAgIG9rIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE5IDAyOjI0OjA1CiAgICAgW2RoLmMgcmVhZGNvbmYuYyBzZXJ2Y29uZi5jXQogICAgIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGRldGVjdGVkIGJ5IENvdmVyaXR5CiAgICAgdmlhIGVsYWQgQVQgbmV0YnNkLm9yZzsgb2sgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTkgMDc6NDE6MzAKICAgICBbc3NoY29ubmVjdDIuY10KICAgICBtZW1vcnkgbGVha3MgZGV0ZWN0ZWQgYnkgQ292ZXJpdHkgdmlhIGVsYWQgQVQgbmV0YnNkLm9yZzsKICAgICBkZXJhYWR0QCBvawogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTkgMTE6NTE6NTIKICAgICBbc2VydmNvbmYuY10KICAgICBDb3JyZWN0IHN0cmRlbGltIG51bGwgdGVzdDsgb2sgZGptQAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTkgMTg6NTI6MTEKICAgICBbYXV0aDEuYyBhdXRoZmQuYyBjaGFubmVscy5jXQogICAgIHNwYWNpbmcKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE5IDE4OjUzOjEyCiAgICAgW2tleC5jIGtleC5oIG1vbml0b3IuYyBteXByb3Bvc2FsLmggc2Vzc2lvbi5jXQogICAgIHNwYWNpbmcKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE5IDE4OjU2OjQxCiAgICAgW2NsaWVudGxvb3AuYyBwcm9ncmVzc21ldGVyLmMgc2VydmVybG9vcC5jIHNzaGQuY10KICAgICBBUkdTVVNFRCBmb3Igc2lnbmFsIGhhbmRsZXJzCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xOSAxODo1OTo0OQogICAgIFtzc2gta2V5c2Nhbi5jXQogICAgIHBsZWFzZSBsaW50CiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xOSAxODo1OTozMAogICAgIFtzc2guY10KICAgICBzcGFjaW5nCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xOSAxODo1OTowOQogICAgIFthdXRoZmlsZS5jXQogICAgIHdob2V2ZXIgdGhvdWdodCB0aGF0IGJyZWFrIGFmdGVyIHJldHVybiB3YXMgYSBnb29kIGlkZWEgbmVlZHMgdG8KICAgICBnZXQgdGhlaXIgaGVhZCBleGFtaW1lZAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAwNDowOTo0NAogICAgIFttb25pdG9yLmNdCiAgICAgbWVtb3J5IGxlYWtzIGRldGVjdGVkIGJ5IENvdmVyaXR5IHZpYSBlbGFkIEFUIG5ldGJzZC5vcmc7CiAgICAgZGVyYWFkdEAgb2sKICAgICB0aGF0IHNob3VsZCBiZSBhbGwgb2YgdGhlbSBub3cKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMTE6Mzg6NDYKICAgICBba2V5LmNdCiAgICAgKHJlYWxseSkgbGFzdCBvZiB0aGUgQ292ZXJpdHkgZGlmZnM6IGF2b2lkIHBvc3NpYmxlIE5VTEwgZGVyZWYgaW4KICAgICBrZXlfZnJlZS4gdmlhIGVsYWQgQVQgbmV0YnNkLm9yZzsgbWFya3VzQCBvawogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMTc6MTA6MTkKICAgICBbYXV0aC5jIGtleS5jIG1pc2MuYyBwYWNrZXQuYyBzc2gtYWRkLmNdCiAgICAgaW4gYSBzd2l0Y2ggKCksIGJyZWFrIGFmdGVyIHJldHVybiBvciBnb3RvIGlzIHN0dXBpZAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMTc6MTM6MTYKICAgICBba2V5LmNdCiAgICAgZGptIGRpZCBhIHR5cG8KICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDE3OjE3OjIzCiAgICAgW3NzaC1yc2EuY10KICAgICBpbiBhIHN3aXRjaCAoKSwgYnJlYWsgYWZ0ZXIgcmV0dXJuIG9yIGdvdG8gaXMgc3R1cGlkCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAxODoxNDowMgogICAgIFtjaGFubmVscy5jIGNsaWVudGxvb3AuYyBtb25pdG9yX3dyYXAuYyBtb25pdG9yX3dyYXAuaCBzZXJ2ZXJsb29wLmNdCiAgICAgW3NzaC5jIHNzaHB0eS5jIHNzaHB0eS5oXQogICAgIHNwcmlua2xlIHVfaW50IHRocm91Z2hvdXQgcHR5IHN1YnN5c3RlbSwgb2sgbWFya3VzCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAxODoxNzoyMAogICAgIFthdXRoMS5jIGF1dGgyLmMgc3NoZC5jXQogICAgIHNwcmlua2xlIHNvbWUgQVJHU1VTRUQgZm9yIHRhYmxlIGRyaXZlbiBmdW5jdGlvbnMgKHdoaWNoIHNvbWV0aW1lcyAKICAgICBtdXN0IGlnbm9yZSB0aGVpciBhcmdzKQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMTg6MjY6NTUKICAgICBbY2hhbm5lbHMuYyBtb25pdG9yLmMgc2Vzc2lvbi5jIHNlc3Npb24uaCBzc2gtYWdlbnQuYyBzc2gta2V5Z2VuLmNdCiAgICAgW3NzaC1yc2EuYyBzc2guYyBzc2hsb2dpbi5jXQogICAgIGFubm95aW5nIHNwYWNpbmcgZml4ZXMgZ2V0dGluZyBpbiB0aGUgd2F5IG9mIHJlYWwgZGlmZnMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDE4OjI3OjUwCiAgICAgW21vbml0b3IuY10KICAgICBzcGFjaW5nCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAxODozNToxMgogICAgIFtjaGFubmVscy5jXQogICAgIHgxMV9mYWtlX2RhdGEgaXMgb25seSBldmVyIHVzZWQgYXMgdV9jaGFyICoKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDE4OjQxOjQzCiAgICAgW2Rucy5jXQogICAgIGNhc3QgeHN0cmR1cCB0byBwcm9wZXJ0IHVfY2hhciAqCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAxODo0MjoyNwogICAgIFtjYW5vaG9zdC5jIG1hdGNoLmMgc3NoLmMgc3NoY29ubmVjdC5jXQogICAgIGJlIHN0cmljdCB3aXRoIHRvbG93ZXIoKSBjYXN0aW5nCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAxODo0ODozNAogICAgIFtjaGFubmVscy5jIGZhdGFsLmMga2V4LmMgcGFja2V0LmMgc2VydmVybG9vcC5jXQogICAgIHNwYWNpbmcKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDIxOjExOjUzCiAgICAgW3R0eW1vZGVzLmNdCiAgICAgc3BhY2luZwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNSAwMDowNTo0MQogICAgIFthdXRoLWJzZGF1dGguYyBhdXRoLXNrZXkuYyBhdXRoLmMgYXV0aDItY2hhbGwuYyBjaGFubmVscy5jXQogICAgIFtjbGllbnRsb29wLmMgZGVhdHRhY2suYyBnc3MtZ2Vuci5jIGtleC5jIGtleS5jIG1pc2MuYyBtb2R1bGkuY10KICAgICBbbW9uaXRvci5jIG1vbml0b3Jfd3JhcC5jIHBhY2tldC5jIHNjYXJkLmMgc2Z0cC1zZXJ2ZXIuYyBzc2gtYWdlbnQuY10KICAgICBbc3NoLWtleXNjYW4uYyBzc2guYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdDIuYyBzc2hkLmMgdXVlbmNvZGUuY10KICAgICBbeG1hbGxvYy5jIHhtYWxsb2MuaF0KICAgICBpbnRyb2R1Y2UgeGNhbGxvYygpIGFuZCB4YXNwcmludGYoKSBmYWlsdXJlLWNoZWNrZWQgYWxsb2NhdGlvbnMgCiAgICAgZnVuY3Rpb25zIGFuZCB1c2UgdGhlbSB0aHJvdWdob3V0IG9wZW5zc2gKCiAgICAgeGNhbGxvYyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGJlY2F1c2UgbWFsbG9jKG5tZW1iICogc2l6ZSkgaXMgYQogICAgIGRhbmdlcm91cyBpZGlvbSAoc3ViamVjdCB0byBpbnRlZ2VyIG92ZXJmbG93KSBhbmQgaXQgaXMgdGltZSBmb3IgaXQgCiAgICAgdG8gZGllCgogICAgIGZlZWRiYWNrIGFuZCBvayBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNSAwMToxMzoyMwogICAgIFtidWZmZXIuYyBjaGFubmVscy5jIGRlYXR0YWNrLmMgbWlzYy5jIHNjcC5jIHNlc3Npb24uYyBzZnRwLWNsaWVudC5jXQogICAgIFtzZnRwLXNlcnZlci5jIHNzaC1hZ2VudC5jIHNzaC1yc2EuYyB4bWFsbG9jLmMgeG1hbGxvYy5oIGF1dGgtcGFtLmNdCiAgICAgW3VpZHN3YXAuY10KICAgICBjaGFuZ2UgT3BlblNTSCdzIHhyZWFsbG9jKCkgZnVuY3Rpb24gZnJvbSBiZWluZyB4cmVhbGxvYyhwLCBuZXdfc2l6ZSkKICAgICB0byB4cmVhbGxvYyhwLCBuZXdfbm1lbWIsIG5ld19pdGVtc2l6ZSkuCgogICAgIHJlYWxsb2MgaXMgcGFydGljdWxhcmx5IHByb25lIHRvIGludGVnZXIgb3ZlcmZsb3dzIGJlY2F1c2UgaXQgaXMKICAgICBhbG1vc3QgYWx3YXlzIGFsbG9jYXRpbmcgIm4gKiBzaXplIiBieXRlcywgc28gdGhpcyBpcyBhIGZhciBzYWZlciAKICAgICBBUEk7IG9rIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI1IDAxOjMwOjIzCiAgICAgW3NmdHAuY10KICAgICAiYWJvcm1hbGx5IiBpcyBhIHBlcmZlY3RseSBjcm9tdWxlbnQgd29yZCwgYnV0ICJhYm5vcm1hbGx5IiBpcyBiZXR0ZXIKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjUgMTM6MTc6MDMKICAgICBbYXRvbWljaW8uYyBhdXRoLWJzZGF1dGguYyBhdXRoLWNoYWxsLmMgYXV0aC1vcHRpb25zLmMgYXV0aC1wYXNzd2QuY10KICAgICBbYXV0aC1yaC1yc2EuYyBhdXRoLXJob3N0cy5jIGF1dGgtcnNhLmMgYXV0aC1za2V5LmMgYXV0aC5jIGF1dGgxLmNdCiAgICAgW2F1dGgyLWNoYWxsLmMgYXV0aDItaG9zdGJhc2VkLmMgYXV0aDIta2JkaW50LmMgYXV0aDItbm9uZS5jXQogICAgIFthdXRoMi1wYXNzd2QuYyBhdXRoMi1wdWJrZXkuYyBhdXRoMi5jIGF1dGhmZC5jIGF1dGhmaWxlLmMgYnVmYXV4LmNdCiAgICAgW2J1ZmZlci5jIGNhbm9ob3N0LmMgY2hhbm5lbHMuYyBjaXBoZXItM2RlczEuYyBjaXBoZXItYmYxLmNdCiAgICAgW2NpcGhlci1jdHIuYyBjaXBoZXIuYyBjbGVhbnVwLmMgY2xpZW50bG9vcC5jIGNvbXBhdC5jIGNvbXByZXNzLmNdCiAgICAgW2RlYXR0YWNrLmMgZGguYyBkaXNwYXRjaC5jIGZhdGFsLmMgZ3JvdXBhY2Nlc3MuYyBob3N0ZmlsZS5jIGtleC5jXQogICAgIFtrZXhkaC5jIGtleGRoYy5jIGtleGRocy5jIGtleGdleC5jIGtleGdleGMuYyBrZXhnZXhzLmMga2V5LmMgbG9nLmNdCiAgICAgW21hYy5jIG1hdGNoLmMgbWQtc2hhMjU2LmMgbWlzYy5jIG1vbml0b3IuYyBtb25pdG9yX2ZkcGFzcy5jXQogICAgIFttb25pdG9yX21tLmMgbW9uaXRvcl93cmFwLmMgbXNnLmMgbmNoYW4uYyBwYWNrZXQuYyBwcm9ncmVzc21ldGVyLmNdCiAgICAgW3JlYWRjb25mLmMgcmVhZHBhc3MuYyByc2EuYyBzY2FyZC5jIHNjcC5jIHNlcnZjb25mLmMgc2VydmVybG9vcC5jXQogICAgIFtzZXNzaW9uLmMgc2Z0cC1jbGllbnQuYyBzZnRwLWNvbW1vbi5jIHNmdHAtZ2xvYi5jIHNmdHAtc2VydmVyLmNdCiAgICAgW3NmdHAuYyBzc2gtYWRkLmMgc3NoLWFnZW50LmMgc3NoLWRzcy5jIHNzaC1rZXlnZW4uYyBzc2gta2V5c2Nhbi5jXQogICAgIFtzc2gta2V5c2lnbi5jIHNzaC1yc2EuYyBzc2guYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdDEuY10KICAgICBbc3NoY29ubmVjdDIuYyBzc2hkLmMgc3NobG9naW4uYyBzc2hwdHkuYyBzc2h0dHkuYyB0dHltb2Rlcy5jXQogICAgIFt1aWRzd2FwLmMgdXVlbmNvZGUuYyB4bWFsbG9jLmNdCiAgICAgUHV0ICRPcGVuQlNEJCB0YWdzIGJhY2sgKGFzIGNvbW1lbnRzKSB0byByZXBsYWNlIHRoZSBSQ1NJRCgpcyB0aGF0CiAgICAgVGhlbyBudWtlZCAtIG91ciBzY3JpcHRzIHRvIHN5bmMgLXBvcnRhYmxlIG5lZWQgdGhlbSBpbiB0aGUgZmlsZXMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI1IDE4OjI5OjM1CiAgICAgW2F1dGgtcnNhLmMgYXV0aGZkLmMgcGFja2V0LmNdCiAgICAgbmVlZGVkIGNhc3RzIChhbHdheXMgd2lsbCBiZSBuZWVkZWQpCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNSAxODozMDo1NQogICAgIFtjbGllbnRsb29wLmMgc2VydmVybG9vcC5jXQogICAgIHNwYWNpbmcKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI1IDE4OjM2OjE1CiAgICAgW3NzaGxvZ2luLmMgc3NobG9naW4uaF0KICAgICBuaWNlciBzaXplX3QgYW5kIHRpbWVfdCB0eXBlcwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjUgMTg6NDA6MTQKICAgICBbc3NoLWtleWdlbi5jXQogICAgIGNhc3Qgc3RydG9udW0oKSByZXN1bHQgdG8gcmlnaHQgdHlwZQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjUgMTg6NDE6NDUKICAgICBbc3NoLWFnZW50LmNdCiAgICAgbWFyayB0d28gbW9yZSBzaWduYWwgaGFuZGxlcnMgQVJHU1VTRUQKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI1IDE4OjQzOjMwCiAgICAgW2NoYW5uZWxzLmNdCiAgICAgdXNlIHN0cnRvbnVtKCkgaW5zdGVhZCBvZiBhdG9pKCkgW2xpbWl0IFggc2NyZWVucyB0byA0MDAsIHNvcnJ5XQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjUgMTg6NTY6NTUKICAgICBbYnVmYXV4LmMgY2hhbm5lbHMuYyBwYWNrZXQuY10KICAgICByZW1vdmUgKGNoYXIgKikgY2FzdHMgdG8gYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdm9pZCAqIGZvciB0aGUgYXJnCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNSAxODo1ODoxMAogICAgIFtjaGFubmVscy5jXQogICAgIGRlbGV0ZSBjYXN0IG5vdCByZXF1aXJlZAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNSAyMjoyMjo0MwogICAgIFthdG9taWNpby5oIGF1dGgtb3B0aW9ucy5oIGF1dGguaCBhdXRoMi1nc3MuYyBhdXRoZmQuaCBhdXRoZmlsZS5oXQogICAgIFtidWZhdXguaCBidWZmZXIuaCBjYW5vaG9zdC5oIGNoYW5uZWxzLmggY2lwaGVyLmggY2xpZW50bG9vcC5oXQogICAgIFtjb21wYXQuaCBjb21wcmVzcy5oIGNyYzMyLmMgY3JjMzIuaCBkZWF0dGFjay5oIGRoLmggZGlzcGF0Y2guaF0KICAgICBbZG5zLmMgZG5zLmggZ2V0cHV0LmggZ3JvdXBhY2Nlc3MuaCBnc3MtZ2Vuci5jIGdzcy1zZXJ2LWtyYjUuY10KICAgICBbZ3NzLXNlcnYuYyBob3N0ZmlsZS5oIGluY2x1ZGVzLmgga2V4Lmgga2V5LmggbG9nLmggbWFjLmggbWF0Y2guaF0KICAgICBbbWlzYy5oIG1vbml0b3IuaCBtb25pdG9yX2ZkcGFzcy5oIG1vbml0b3JfbW0uaCBtb25pdG9yX3dyYXAuaCBtc2cuaF0KICAgICBbbXlwcm9wb3NhbC5oIHBhY2tldC5oIHBhdGhuYW1lcy5oIHByb2dyZXNzbWV0ZXIuaCByZWFkY29uZi5oIHJzYS5oXQogICAgIFtzY2FyZC5oIHNlcnZjb25mLmggc2VydmVybG9vcC5oIHNlc3Npb24uaCBzZnRwLWNvbW1vbi5oIHNmdHAuaF0KICAgICBbc3NoLWdzcy5oIHNzaC5oIHNzaDEuaCBzc2gyLmggc3NoY29ubmVjdC5oIHNzaGxvZ2luLmggc3NocHR5LmhdCiAgICAgW3R0eW1vZGVzLmggdWlkc3dhcC5oIHV1ZW5jb2RlLmggeG1hbGxvYy5oXQogICAgIHN0YW5kYXJkaXNlIHNwYWNpbmcgaW4gJE9wZW5CU0QkIHRhZ3M7IHJlcXVlc3RlZCBieSBkZXJhYWR0QAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjYgMDE6MzE6NDgKICAgICBbdXVlbmNvZGUuY10KICAgICB0eXBvCgoyMDA2MDMyNQogLSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE2IDA0OjI0OjQyCiAgICAgW3NzaC4xXQogICAgIEFkZCBSRkM0NDE5IChEaWZmaWUtSGVsbG1hbiBncm91cCBleGNoYW5nZSBLRVgpIHRvIHRoZSBsaXN0IG9mIFNTSCBSRkNzCiAgICAgdGhhdCBPcGVuU1NIIHN1cHBvcnRzCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xOSAxODo1MToxOAogICAgIFthdG9taWNpby5jIGF1dGgtYnNkYXV0aC5jIGF1dGgtY2hhbGwuYyBhdXRoLWtyYjUuYyBhdXRoLW9wdGlvbnMuY10KICAgICBbYXV0aC1wYW0uYyBhdXRoLXBhc3N3ZC5jIGF1dGgtcmgtcnNhLmMgYXV0aC1yaG9zdHMuYyBhdXRoLXJzYS5jXQogICAgIFthdXRoLXNoYWRvdy5jIGF1dGgtc2tleS5jIGF1dGguYyBhdXRoMS5jIGF1dGgyLWNoYWxsLmNdCiAgICAgW2F1dGgyLWhvc3RiYXNlZC5jIGF1dGgyLWtiZGludC5jIGF1dGgyLW5vbmUuYyBhdXRoMi1wYXNzd2QuY10KICAgICBbYXV0aDItcHVia2V5LmMgYXV0aDIuYyBhdXRoZmQuYyBhdXRoZmlsZS5jIGJ1ZmF1eC5jIGJ1ZmZlci5jXQogICAgIFtjYW5vaG9zdC5jIGNoYW5uZWxzLmMgY2lwaGVyLTNkZXMxLmMgY2lwaGVyLWFjc3MuYyBjaXBoZXItYWVzLmNdCiAgICAgW2NpcGhlci1iZjEuYyBjaXBoZXItY3RyLmMgY2lwaGVyLmMgY2xlYW51cC5jIGNsaWVudGxvb3AuYyBjb21wYXQuY10KICAgICBbY29tcHJlc3MuYyBkZWF0dGFjay5jIGRoLmMgZGlzcGF0Y2guYyBkbnMuYyBlbnRyb3B5LmMgZmF0YWwuY10KICAgICBbZ3JvdXBhY2Nlc3MuYyBob3N0ZmlsZS5jIGluY2x1ZGVzLmgga2V4LmMga2V4ZGguYyBrZXhkaGMuY10KICAgICBba2V4ZGhzLmMga2V4Z2V4LmMga2V4Z2V4Yy5jIGtleGdleHMuYyBrZXkuYyBsb2cuYyBsb2dpbnJlYy5jXQogICAgIFtsb2dpbnJlYy5oIGxvZ2ludGVzdC5jIG1hYy5jIG1hdGNoLmMgbWQtc2hhMjU2LmMgbWQ1Y3J5cHQuYyBtaXNjLmNdCiAgICAgW21vbml0b3IuYyBtb25pdG9yX2ZkcGFzcy5jIG1vbml0b3JfbW0uYyBtb25pdG9yX3dyYXAuYyBtc2cuY10KICAgICBbbmNoYW4uYyBwYWNrZXQuYyBwcm9ncmVzc21ldGVyLmMgcmVhZGNvbmYuYyByZWFkcGFzcy5jIHJzYS5jXQogICAgIFtzY2FyZC5jIHNjcC5jIHNlcnZjb25mLmMgc2VydmVybG9vcC5jIHNlc3Npb24uYyBzZnRwLWNsaWVudC5jXQogICAgIFtzZnRwLWNvbW1vbi5jIHNmdHAtZ2xvYi5jIHNmdHAtc2VydmVyLmMgc2Z0cC5jIHNzaC1hZGQuY10KICAgICBbc3NoLWFnZW50LmMgc3NoLWRzcy5jIHNzaC1rZXlnZW4uYyBzc2gta2V5c2Nhbi5jIHNzaC1rZXlzaWduLmNdCiAgICAgW3NzaC1yYW5kLWhlbHBlci5jIHNzaC1yc2EuYyBzc2guYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdDEuY10KICAgICBbc3NoY29ubmVjdDIuYyBzc2hkLmMgc3NobG9naW4uYyBzc2hwdHkuYyBzc2h0dHkuYyB0dHltb2Rlcy5jXQogICAgIFt1aWRzd2FwLmMgdXVlbmNvZGUuYyB4bWFsbG9jLmMgb3BlbmJzZC1jb21wYXQvYnNkLWFyYzRyYW5kb20uY10KICAgICBbb3BlbmJzZC1jb21wYXQvYnNkLWNsb3NlZnJvbS5jIG9wZW5ic2QtY29tcGF0L2JzZC1jeWd3aW5fdXRpbC5jXQogICAgIFtvcGVuYnNkLWNvbXBhdC9ic2QtZ2V0cGVlcmVpZC5jIG9wZW5ic2QtY29tcGF0L2JzZC1taXNjLmNdCiAgICAgW29wZW5ic2QtY29tcGF0L2JzZC1uZXh0c3RlcC5jIG9wZW5ic2QtY29tcGF0L2JzZC1zbnByaW50Zi5jXQogICAgIFtvcGVuYnNkLWNvbXBhdC9ic2Qtd2FpdHBpZC5jIG9wZW5ic2QtY29tcGF0L2Zha2UtcmZjMjU1My5jXQogICAgIFJDU0lEKCkgY2FuIGRpZQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTkgMTg6NTM6MTIKICAgICBba2V4LmggbXlwcm9wb3NhbC5oXQogICAgIHNwYWNpbmcKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMDQ6MDc6MjIKICAgICBbYXV0aDItZ3NzLmNdCiAgICAgR1NTQVBJIHJlbGF0ZWQgbGVha3MgZGV0ZWN0ZWQgYnkgQ292ZXJpdHkgdmlhIGVsYWQgQVQgbmV0YnNkLm9yZzsKICAgICByZXZpZXdlZCBieSBzaW1vbiBBVCBzeHcub3JnLnVrOyBkZXJhYWR0QCBvawogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAwNDowNzo0OQogICAgIFtnc3MtZ2Vuci5jXQogICAgIG1vcmUgR1NTQVBJIHJlbGF0ZWQgbGVha3MgZGV0ZWN0ZWQgYnkgQ292ZXJpdHkgdmlhIGVsYWQgQVQgbmV0YnNkLm9yZzsKICAgICByZXZpZXdlZCBieSBzaW1vbiBBVCBzeHcub3JnLnVrOyBkZXJhYWR0QCBvawogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAwNDowODoxOAogICAgIFtnc3Mtc2Vydi5jXQogICAgIGxhc3QgbG90IG9mIEdTU0FQSSByZWxhdGVkIGxlYWtzIGRldGVjdGVkIGJ5IENvdmVyaXR5IHZpYQogICAgIGVsYWQgQVQgbmV0YnNkLm9yZzsgcmV2aWV3ZWQgYnkgc2ltb24gQVQgc3h3Lm9yZy51azsgZGVyYWFkdEAgb2sKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDE4OjE0OjAyCiAgICAgW21vbml0b3Jfd3JhcC5oIHNzaHB0eS5oXQogICAgIHNwcmlua2xlIHVfaW50IHRocm91Z2hvdXQgcHR5IHN1YnN5c3RlbSwgb2sgbWFya3VzCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAxODoyNjo1NQogICAgIFtzZXNzaW9uLmhdCiAgICAgYW5ub3lpbmcgc3BhY2luZyBmaXhlcyBnZXR0aW5nIGluIHRoZSB3YXkgb2YgcmVhbCBkaWZmcwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMTg6NDE6NDMKICAgICBbZG5zLmNdCiAgICAgY2FzdCB4c3RyZHVwIHRvIHByb3BlcnQgdV9jaGFyICoKICAgLSBqYWtvYkBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMiAyMToxNjoyNAogICAgIFtzc2guMV0KICAgICBzaW1wbGlmeSBTU0hGUCBleGFtcGxlOyBvayBqbWNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIyIDIxOjI3OjE1CiAgICAgW2RlYXR0YWNrLmMgZGVhdHRhY2suaF0KICAgICByZW1vdmUgSVYgc3VwcG9ydCBmcm9tIHRoZSBDUkMgYXR0YWNrIGRldGVjdG9yLCBPcGVuU1NIIGhhcyBuZXZlciB1c2VkCiAgICAgaXQgLSBpdCBvbmx5IGFwcGxpZWQgdG8gSURFQS1DRkIsIHdoaWNoIHdlIGRvbid0IHN1cHBvcnQuCiAgICAgcHJvbXB0ZWQgYnkgTmV0QlNEIENvdmVyaXR5IHJlcG9ydCB2aWEgZWxhZCBBVCBuZXRic2Qub3JnOwogICAgIGZlZWRiYWNrIG1hcmt1c0AgIm51a2UgaXQiIGRlcmFhZHRACgoyMDA2MDMxOAogLSAoZGptKSBbYXV0aC1wYW0uY10gRml4IG1lbWxlYWsgaW4gZXJyb3IgcGF0aCwgZnJvbSBDb3Zlcml0eSB2aWEKICAgZWxhZCBBVCBOZXRCU0Qub3JnCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYnNkLXNucHJpbnRmLmNdIEJ1ZyAjMTE3MzogbWFrZSBmbXRpbnQoKSB0YWtlCiAgIGEgTExPTkcgcmF0aGVyIHRoYW4gYSBsb25nLiAgRml4ZXMgc2NwJ2luZyBvZiBsYXJnZSBmaWxlcyBvbiBwbGF0Zm9ybXMKICAgd2l0aCBtaXNzaW5nL2Jyb2tlbiBzbnByaW50ZnMuICBQYXRjaCBmcm9tIGUuYm9yb3ZhYyBhdCBib20uZ292LmF1LgoKMjAwNjAzMTYKIC0gKGR0dWNrZXIpIFtlbnRyb3B5LmNdIEFkZCBoZWFkZXJzIGZvciBXSUZFWElURUQgYW5kIGZyaWVuZHMuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIG1kLXNoYTI1Ni5jXSBOZXRCU0QgaGFzIHNoYTIuaCBpbgogICAvdXNyL2luY2x1ZGUvY3J5cHRvLiAgSGludCBmcm9tIGRqbUAuCiAtICh0aW0pIFtrZXguYyBteXByb3Bvc2FsLmggbWQtc2hhMjU2LmMgb3BlbmJzZC1jb21wYXQvc2hhMi5jLGhdCiAgIERpc2FibGUgc2hhMjU2IHdoZW4gb3BlbnNzbCA8IDAuOS43LiBQYXRjaCBmcm9tIGRqbUAuCiAtIChkam0pIFtrZXguY10gU2xpZ2h0bHkgbW9yZSBjbGVhbiBkZWFjdGl2YXRpb24gb2YgZGhnZXgtc2hhMjU2IG9uIG9sZAogICBPcGVuU1NMOyBvayB0aW0KCjIwMDYwMzE1CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmM6CiAgIC0gbXNmQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA2IDE1OjU0OjA3CiAgICAgW3NzaC4xXQogICAgIC0gdHlwbyBmaXgKICAgICBvayBqbWNACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA2IDIxOjQ0OjQ3CiAgICAgW3NzaC4xXQogICAgIG1ha2UgdGhpcyBhIGxpdHRsZSBsZXNzIGFtYmlndW91cy4uLgogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDcgMDE6MDg6MDQKICAgICBbYXV0aC1yaG9zdHMuYyBpbmNsdWRlcy5oXQogICAgIG1vdmUgI2luY2x1ZGUgPG5ldGdyb3VwLmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wNyAwMToxODowOQogICAgIFtpbmNsdWRlcy5oIHNzaC1hZ2VudC5jIHNzaC1rZXlzY2FuLmMgc3NoY29ubmVjdDIuY10KICAgICBtb3ZlICNpbmNsdWRlIDxzeXMvcXVldWUuaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA3IDAxOjQyOjAwCiAgICAgW2NoYW5uZWxzLmMgY2xpZW50bG9vcC5jIGNsaWVudGxvb3AuaCBpbmNsdWRlcy5oIHBhY2tldC5oXQogICAgIFtzZXJ2ZXJsb29wLmMgc3NocHR5LmMgc3NocHR5Lmggc3NodHR5LmMgdHR5bW9kZXMuY10KICAgICBtb3ZlICNpbmNsdWRlIDx0ZXJtaW9zLmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wNyAwMTo1Mjo1MAogICAgIFtzc2h0dHkuY10KICAgICAibG9nLmgiIG5vdCBuZWVkZWQKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA3IDAzOjQ3OjA1CiAgICAgW2hvc3RmaWxlLmNdCiAgICAgInBhY2tldC5oIiBub3QgbmVlZGVkCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wNyAwMzo1OToyMAogICAgIFtkZWF0dGFjay5jXQogICAgIGR1cGxpY2F0ZSAjaW5jbHVkZQogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDggMTI6MTU6MjcKICAgICBbYXV0aC5jIGNsaWVudGxvb3AuYyBpbmNsdWRlcy5oIG1pc2MuYyBtb25pdG9yLmMgcmVhZHBhc3MuY10KICAgICBbc2Vzc2lvbi5jIHNmdHAuYyBzc2gtYWdlbnQuYyBzc2gta2V5c2lnbi5jIHNzaC5jIHNzaGNvbm5lY3QuY10KICAgICBbc3NoZC5jIHNzaHB0eS5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHBhdGhzLmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wOCAxMjozMjo0OQogICAgIFtpbmNsdWRlcy5oIG1pc2MuY10KICAgICBtb3ZlICNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDggMTM6MTU6NDQKICAgICBbZ3NzLXNlcnYuYyBtb25pdG9yLmNdCiAgICAgc21hbGwgS05GCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wOCAxNDoxNjo1OQogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgPG9wZW5zc2wvYm4uaD4gbm90IG5lZWRlZAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDggMTQ6MzE6MzAKICAgICBbaW5jbHVkZXMuaCBzc2gtYWdlbnQuYyBzc2gta2V5c2Nhbi5jIHNzaC5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDggMTQ6Mzg6MTgKICAgICBbaW5jbHVkZXMuaCBwYWNrZXQuY10KICAgICBtb3ZlICNpbmNsdWRlIDxuZXRpbmV0L2luX3N5c3RtLmg+IGFuZCA8bmV0aW5ldC9pcC5oPiBvdXQgb2YKICAgICBpbmNsdWRlcy5oOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wOCAyMzo1MToyNAogICAgIFtpbmNsdWRlcy5oIHNjcC5jIHNmdHAtZ2xvYi5jIHNmdHAtc2VydmVyLmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8ZGlyZW50Lmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wOSAwMDozMjowNwogICAgIFtpbmNsdWRlcy5oXQogICAgICNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+IG5vdCBuZWVkZWQ7IG9rIGRqbUAKICAgICBOQi4gSUQgU3luYyBvbmx5IC0gd2Ugc3RpbGwgbmVlZCB0aGlzIChidXQgaXQgbWF5IG1vdmUgbGF0ZXIpCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA5IDEwOjEwOjQ3CiAgICAgW3NzaGQuOF0KICAgICAtIG1vdmUgc29tZSB0ZXh0IGludG8gYSBDQVZFQVRTIHNlY3Rpb24KICAgICAtIG1lcmdlIHRoZSBDT01NQU5EIEVYRUNVVElPTi4uLiBzZWN0aW9uIGludG8gQVVUSEVOVElDQVRJT04KICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzEwIDAwOjI3OjEzCiAgICAgW2NoYW5uZWxzLmMgY2xpZW50bG9vcC5jIGluY2x1ZGVzLmggbWlzYy5jIHByb2dyZXNzbWV0ZXIuYyBzZnRwLmNdCiAgICAgW3NzaC5jIHNzaGQuYyBzc2hwdHkuY10KICAgICBtb3ZlICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzEwIDAxOjQ0OjI3CiAgICAgW2luY2x1ZGVzLmggbW9uaXRvci5jIHJlYWRwYXNzLmMgc2NwLmMgc2VydmVybG9vcC5jIHNlc3Npb24uY39dCiAgICAgW3NmdHAuYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdDIuYyBzc2hkLmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8c3lzL3dhaXQuaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIG1hcmt1c0AKICAgLSBvdHRvQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzExIDE5OjMxOjE4CiAgICAgW2F0b21pY2lvLmNdCiAgICAgdHlwZSBjb3JyZWN0bmVzczsgZnJvbSBSYXkgTGFpIGluIFBSIDUwMTE7IG9rIG1pbGxlcnRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzEyIDA2OjQ1OjM0CiAgICAgW3NzaC5jIHNzaF9jb25maWcuNV0KICAgICBhZGQgYSAlbCBleHBhbnNpb24gY29kZSB0byB0aGUgQ29udHJvbFBhdGgsIHdoaWNoIGlzIGZpbGxlZCBpbiB3aXRoIHRoZQogICAgIGxvY2FsIGhvc3RuYW1lIGF0IHJ1bnRpbWUuIFJlcXVlc3RlZCBieSBoZW5uaW5nQCB0byBhdm9pZCBzb21lIHByb2JsZW1zCiAgICAgd2l0aCAvaG9tZSBvbiBORlM7IG9rIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzEyIDEwOjQ0OjE4CiAgICAgW3JlYWRjb25mLmNdCiAgICAgcmFpc2UgZXJyb3Igd2hlbiB0aGUgdXNlciBzcGVjaWZpZXMgYSBSZWtleUxpbWl0IHRoYXQgaXMgc21hbGxlciB0aGFuIDE2CiAgICAgKHRoZSBzbWFsbGVzdCBvZiBvdXIgY2lwaGVyJ3MgYmxvY2tzaXplKSBvciBiaWcgZW5vdWdoIHRvIGNhdXNlIGludGVnZXIKICAgICB3cmFwYXJvdW5kOyBvayAmIGZlZWRiYWNrIGR0dWNrZXJACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzEyIDEwOjQ5OjQ0CiAgICAgW3NzaF9jb25maWcuNV0KICAgICBzbGlnaHQgcmV3b3JkaW5nOyBvayBkam0KICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTIgMTA6NTI6NDEKICAgICBbc3NoZC44XQogICAgIHJld29yayB0aGUgZGVzY3JpcHRpb24gb2YgYXV0aG9yaXplZF9rZXlzIGEgbGl0dGxlOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xMiAxNzo1NzoxOQogICAgIFtzc2hkLjhdCiAgICAgc29ydCB0aGUgbGlzdCBvZiBvcHRpb25zIHBlcm1pc3NhYmxlIHcvIGF1dGhvcml6ZWRfa2V5czsKICAgICBvayBkam0gZHR1Y2tlcgogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xMyAxMDoxNjozOQogICAgIFtzc2hkLjhdCiAgICAgbm8gbmVlZCB0byBzdWJzZWN0aW9uIHRoZSBhdXRob3JpemVkX2tleXMgZXhhbXBsZXMgLSBpbnN0ZWFkLCBjb252ZXJ0CiAgICAgdGhpcyB0byBsb29rIGxpa2UgYW4gYWN0dWFsIGZpbGUuIGFsc28gdXNlIHByb3RvIDIga2V5cywgYW5kIHVzZSBJRVRGCiAgICAgZXhhbXBsZSBhZGRyZXNzZXM7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzEzIDEwOjIxOjI1CiAgICAgW3NzaGQuOF0KICAgICBzbWFsbCB0d2Vha3MgZm9yIHRoZSBzc2hfa25vd25faG9zdHMgc2VjdGlvbjsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTMgMTE6MDI6MjYKICAgICBbc3NoZC44XQogICAgIHR1cm4gdGhpcyBpbnRvIGFuIGV4YW1wbGUgc3NoX2tub3duX2hvc3RzIGZpbGU7IG9rIGRqbQogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xMyAxMTowODo0MwogICAgIFtzc2hkLjhdCiAgICAgLSBhdm9pZCBuYXN0eSBsaW5lIHNwbGl0CiAgICAgLSBgKicgZG9lcyBub3QgbmVlZCB0byBiZSBlc2NhcGVkCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzEzIDExOjI3OjI1CiAgICAgW3NzaGQuOF0KICAgICBzb3J0IEZJTEVTIGFuZCB1c2UgYSAtY29tcGFjdCBsaXN0OwogICAtIGRhdmlkQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzE1IDA1OjA4OjI0CiAgICAgW3NmdHAtY2xpZW50LmNdCiAgICAgdHlwbyBpbiBjb21tZW50OyBvayBkam1ACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzE1IDE2OjUzOjIwCiAgICAgW3NzaC4xXQogICAgIHJlbW92ZSB0aGUgSUVURiBkcmFmdCByZWZlcmVuY2VzIGFuZCByZXBsYWNlIHRoZW0gd2l0aCBzb21lIHVwZGF0ZWQgUkZDczsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTUgMTY6NTU6MzMKICAgICBbc3NoZC44XQogICAgIHJlbW92ZSBpZXRmIGRyYWZ0IHJlZmVyZW5jZXM7IFJGQyBsaXN0IG5vdyBtYWludGFpbmVkIGluIHNzaC4xOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xNiAwOTowNTozNAogICAgIFtzc2hkLjhdCiAgICAgc3luYyBzb21lIG9mIHRoZSBGSUxFUyBlbnRyaWVzIHcvIHNzaC4xOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xOSAxOTo1MjoxMAogICAgIFtzc2hkLjhdCiAgICAgbW92ZSB0aGUgc3NocmMgc3R1ZmYgb3V0IG9mIEZJTEVTLCBhbmQgaW50byBpdHMgb3duIHNlY3Rpb246CiAgICAgRklMRVMgaXMgbm90IGEgZ29vZCBwbGFjZSB0byBkb2N1bWVudCBob3cgc3R1ZmYgd29ya3M7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzE5IDIwOjAyOjE3CiAgICAgW3NzaGQuOF0KICAgICBzeW5jIHRoZSAocylob3N0cy5lcXVpdiBGSUxFUyBlbnRyaWVzIHcvIHRob3NlIGZyb20gc3NoLjE7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzE5IDIwOjA1OjAwCiAgICAgW3NzaGQuOF0KICAgICBncmFtbWFyOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xOSAyMDoxMjoyNQogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgYWRkIHNvbWUgdmVydGljYWwgc3BhY2U7CiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yMCAxNjozNjoxNQogICAgIFthdXRoZmQuYyBjaGFubmVscy5jIGluY2x1ZGVzLmggc2Vzc2lvbi5jIHNzaC1hZ2VudC5jIHNzaC5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHN5cy91bi5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgZGptQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjAgMTc6MDI6NDQKICAgICBbY2xpZW50bG9vcC5jIGluY2x1ZGVzLmggbW9uaXRvci5jIHByb2dyZXNzbWV0ZXIuYyBzY3AuY10KICAgICBbc2VydmVybG9vcC5jIHNlc3Npb24uYyBzZnRwLmMgc3NoLWFnZW50LmMgc3NoLmMgc3NoZC5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHNpZ25hbC5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjAgMTc6MTk6NTQKICAgICBbYXV0aC1yaG9zdHMuYyBhdXRoLXJzYS5jIGF1dGguYyBhdXRoMi1ub25lLmMgYXV0aDItcHVia2V5LmNdCiAgICAgW2F1dGhmaWxlLmMgY2xpZW50bG9vcC5jIGluY2x1ZGVzLmggcmVhZGNvbmYuYyBzY3AuYyBzZXNzaW9uLmNdCiAgICAgW3NmdHAtY2xpZW50LmMgc2Z0cC1jb21tb24uYyBzZnRwLWNvbW1vbi5oIHNmdHAtZ2xvYi5jXQogICAgIFtzZnRwLXNlcnZlci5jIHNmdHAuYyBzc2gtYWRkLmMgc3NoLWtleWdlbi5jIHNzaC5jIHNzaGNvbm5lY3QuY10KICAgICBbc3NoY29ubmVjdDIuYyBzc2hkLmMgc3NocHR5LmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8c3lzL3N0YXQuaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzIyIDAwOjA0OjQ1CiAgICAgW2Nhbm9ob3N0LmMgY2xpZW50bG9vcC5jIGluY2x1ZGVzLmggbWF0Y2guYyByZWFkY29uZi5jIHNjcC5jIHNzaC5jXQogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8Y3R5cGUuaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIGRqbUAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjQgMTA6MjU6MTQKICAgICBbc3NoX2NvbmZpZy41XQogICAgIGFkZCBzZWN0aW9uIG9uIHBhdHRlcm5zOwogICAgIGZyb20gZHR1Y2tlciArIG15c2VsZgogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yNCAxMDozMzo1NAogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIHNpZ25wb3N0IHRvIFBBVFRFUk5TOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yNCAxMDozNzowNwogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgdGlkeSB1cCB0aGUgcmVmcyB0byBQQVRURVJOUzsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjQgMTA6Mzk6NTIKICAgICBbc3NoZC44XQogICAgIHNpZ25wb3N0IHRvIFBBVFRFUk5TIHNlY3Rpb247CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzI0IDIwOjIyOjE2CiAgICAgW3NzaC1rZXlzaWduLjggc3NoX2NvbmZpZy41IHNzaGRfY29uZmlnLjVdCiAgICAgc29tZSBjb25zaXN0ZW5jeSBmaXhlczsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjQgMjA6MzE6MzEKICAgICBbc3NoLjEgc3NoX2NvbmZpZy41IHNzaGQuOCBzc2hkX2NvbmZpZy41XQogICAgIG1vcmUgY29uc2lzdGVuY3kgZml4ZXM7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzI0IDIzOjIwOjA3CiAgICAgW3NzaF9jb25maWcuNV0KICAgICBzb21lIGdyYW1tYXIvd29yZGluZyBmaXhlczsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjQgMjM6NDM6NTcKICAgICBbc3NoZF9jb25maWcuNV0KICAgICBzb21lIGdyYW1tYXIvd29yZGluZyBmaXhlczsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjQgMjM6NTE6MTcKICAgICBbc3NoZF9jb25maWcuNV0KICAgICBvb3BzIC0gYml0cyBpIG1pc3NlZDsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjUgMTI6MjY6MTcKICAgICBbc3NoX2NvbmZpZy41XQogICAgIGRvY3VtZW50IHRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIEtiZEludGVyYWN0aXZlRGV2aWNlczsKICAgICBoZWxwL29rIGR0dWNrZXIKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjUgMTI6Mjg6MzQKICAgICBbc3NoZF9jb25maWcuNV0KICAgICBkb2N1bWVudCB0aGUgb3JkZXIgaW4gd2hpY2ggYWxsb3cvZGVueSBkaXJlY3RpdmVzIGFyZSBwcm9jZXNzZWQ7CiAgICAgaGVscC9vayBkdHVja2VyCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzI2IDE3OjE3OjE4CiAgICAgW3NzaF9jb25maWcuNV0KICAgICBtb3ZlIFBBVFRFUk5TIHRvIHRoZSBlbmQgb2YgdGhlIG1haW4gYm9keTsgcmVxdWVzdGVkIGJ5IGR0dWNrZXIKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjYgMTg6MDE6MTMKICAgICBbc3NoZF9jb25maWcuNV0KICAgICBzdWJzZWN0aW9uIGlzIHBvaW50bGVzcyBoZXJlOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yNiAxODowMzoxMAogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgY29tbWE7CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzI4IDAxOjEwOjIxCiAgICAgW3Nlc3Npb24uY10KICAgICBmaXggbG9nb3V0IHJlY29yZGluZyB3aGVuIHByaXZpbGVnZSBzZXBhcmF0aW9uIGlzIGRpc2FibGVkLCBhbmFseXNpcyBhbmQKICAgICBwYXRjaCBmcm9tIHZpbnNjaGVuIGF0IHJlZGhhdC5jb207IHRlc3RlZCBieSBkdHVja2VyQCBvayBkZXJhYWR0QAogICAgIE5CLiBJRCBzeW5jIG9ubHkgLSBwYXRjaCBhbHJlYWR5IGluIHBvcnRhYmxlCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzA0IDA0OjEyOjU4CiAgICAgW3NlcnZlcmxvb3AuY10KICAgICBtb3ZlIGEgZGVidWcoKSBvdXRzaWRlIG9mIGEgc2lnbmFsIGhhbmRsZXI7IG9rIG1hcmt1c0AgYSBsaXR0bGUgd2hpbGUgYmFjawogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xMiAwNDoyMzowNwogICAgIFtzc2guY10KICAgICBrbmYgbml0CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzEzIDA4OjE2OjAwCiAgICAgW3NzaGQuY10KICAgICBkb24ndCBsb2cgdGhhdCB3ZSBhcmUgbGlzdGVuaW5nIG9uIGEgc29ja2V0IGJlZm9yZSB0aGUgbGlzdGVuKCkgY2FsbAogICAgIGFjdHVhbGx5IHN1Y2NlZWRzLCBieiAjMTE2MiByZXBvcnRlZCBieSBTZW50aGlsIEt1bWFyOyBvayBkdHVja2VyQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTMgMDg6MzM6MDAKICAgICBbcGFja2V0LmNdCiAgICAgU2V0IFRDUF9OT0RFTEFZIGZvciBhbGwgY29ubmVjdGlvbnMgbm90IGp1c3QgImludGVyYWN0aXZlIiBvbmVzLiAgRml4ZXMKICAgICBwb29yIHBlcmZvcm1hbmNlIGFuZCBwcm90b2NvbCBzdGFsbHMgdW5kZXIgc29tZSBuZXR3b3JrIGNvbmRpdGlvbnMgKG1pbmRyb3QKICAgICBidWdzICM1NTYgYW5kICM5ODEpLiBQYXRjaCBvcmlnaW5hbGx5IGZyb20gbWFya3VzQCwgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTMgMDg6NDM6MTYKICAgICBbc3NoLWtleWdlbi5jXQogICAgIE1ha2Ugc3NoLWtleWdlbiBoYW5kbGUgQ1IgYW5kIENSTEYgbGluZSB0ZXJtaW5hdGlvbiB3aGVuIGNvbnZlcnRpbmcgSUVURgogICAgIGZvcm1hdCBrZXlzLCBpbiBhZGl0aW9uIHRvIHZhbmlsbGEgTEYuICBtaW5kcm90ICMxMTU3LCB0ZXN0ZWQgYnkgQ2hyaXMKICAgICBQZXBwZXIsIG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzEzIDEwOjE0OjI5CiAgICAgW21pc2MuYyBzc2hfY29uZmlnLjUgc3NoZF9jb25maWcuNV0KICAgICBBbGxvdyBjb25maWcgZGlyZWN0aXZlcyB0byBjb250YWluIHdoaXRlc3BhY2UgYnkgc3Vycm91bmRpbmcgdGhlbSBieSBkb3VibGUKICAgICBxdW90ZXMuICBtaW5kcm90ICM0ODIsIG1hbiBwYWdlIGhlbHAgZnJvbSBqbWNALCBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xMyAxMDoyNjo1MgogICAgIFthdXRoZmlsZS5jIGF1dGhmaWxlLmggc3NoLWFkZC5jXQogICAgIE1ha2Ugc3NoLWFkZCBjaGVjayBmaWxlIHBlcm1pc3Npb25zIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGxvYWQgcHJpdmF0ZQogICAgIGtleSBmaWxlcyBtdWx0aXBsZSB0aW1lczsgaXQgd2lsbCBmYWlsIGFueXdheSBhbmQgdGhpcyBwcmV2ZW50cyBjb25mdXNpbmcKICAgICBtdWx0aXBsZSBwcm9tcHRzIGFuZCB3YXJuaW5ncy4gIG1pbmRyb3QgIzExMzgsIG9rIGRqbUAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTQgMDA6MTU6MzkKICAgICBbY2Fub2hvc3QuY10KICAgICBsb2cgdGhlIG9yaWdpbmF0aW5nIGFkZHJlc3MgYW5kIG5vdCBqdXN0IHRoZSBuYW1lIHdoZW4gYSByZXZlcnNlCiAgICAgbWFwcGluZyBjaGVjayBmYWlscywgcmVxdWVzdGVkIGJ5IGxpbnV4IEFUIGxpbnVvbi5jb20KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTQgMTY6MzI6NDgKICAgICBbc3NoX2NvbmZpZy41IHNzaGRfY29uZmlnLjVdCiAgICAgKkFsaXZlQ291bnRNYXggYXBwbGllcyB0byBwcm90Y29sIHYyIG9ubHk7IG9rIGR0dWNrZXIsIGRqbQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8wNyAwOTowNzo0MAogICAgIFtrZXguYyBrZXguaCBtb25pdG9yLmMgbXlwcm9wb3NhbC5oIHNzaC1rZXlzY2FuLmMgc3NoY29ubmVjdDIuYyBzc2hkLmNdCiAgICAgSW1wbGVtZW50IHRoZSBkaWZmaWUtaGVsbG1hbi1ncm91cC1leGNoYW5nZS1zaGEyNTYga2V5IGV4Y2hhbmdlIG1ldGhvZAogICAgIHVzaW5nIHRoZSBTSEEyNTYgY29kZSBpbiBsaWJjIChhbmQgd3JhcHBlciB0byBtYWtlIGl0IGludG8gYW4gT3BlblNTTAogICAgIEVWUCksIGludGVyb3AgdGVzdGVkIGFnYWluc3QgQ1ZTIFB1VFRZCiAgICAgTkIuIG5vIHBvcnRhYmlsaXR5IGJpdHMgY29tbWl0dGVkIHlldAogLSAoZGptKSBbY29uZmlndXJlLmFjIGRlZmluZXMuaCBrZXguYyBtZC1zaGEyNTYuY10KICAgW29wZW5ic2QtY29tcGF0L3NoYTIuaCBvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oXQogICBbb3BlbmJzZC1jb21wYXQvc2hhMi5jXSBGaXJzdCBzdGFiIGF0IHBvcnRhYmlsaXR5IGdsdWUgZm9yIFNIQTI1NgogICBLRVggc3VwcG9ydCwgc2hvdWxkIHdvcmsgd2l0aCBsaWJjIFNIQTI1NiBzdXBwb3J0IG9yIE9wZW5TU0wKICAgRVZQX3NoYTI1NiBpZiBwcmVzZW50CiAtIChkam0pIFtpbmNsdWRlcy5oXSBSZXN0b3JlIGFjY2lkZW50YWxseSBkcm9wcGVkIG5ldGluZXQvaW4uaAogLSAoZGptKSBbTWFrZWZpbGUuaW4gb3BlbmJzZC1jb21wYXQvTWFrZWZpbGUuaW5dIEFkZCBhZGRlZCBmaWxlcwogLSAoZGptKSBbbWQtc2hhMjU2LmMgY29uZmlndXJlLmFjXSBtZC1zaGEyNTYuYyBuZWVkcyBzaGEyLmggaWYgcHJlc2VudAogLSAoZGptKSBbcmVncmVzcy8uY3ZzaWdub3JlXSBJZ25vcmUgTWFrZWZpbGUgaGVyZQogLSAoZGptKSBbbG9naW5yZWMuY10gTmVlZCBzdGF0LmgKIC0gKGRqbSkgW29wZW5ic2QtY29tcGF0L3NoYTIuaF0gQXZvaWQgaW5jbHVkZSBtYWNybyBjbGFzaCB3aXRoCiAgIHN5c3RlbSBzaGEyLmgKIC0gKGRqbSkgW3NzaC1yYW5kLWhlbHBlci5jXSBOZWVkcyBhIGJ1bmNoIG9mIGhlYWRlcnMKIC0gKGRqbSkgW3NzaC1hZ2VudC5jXSBSZXN0b3JlIGRyb3BwZWQgc3RhdC5oCiAtIChkam0pIFtvcGVuYnNkLWNvbXBhdC9zaGEyLmggb3BlbmJzZC1jb21wYXQvc2hhMi5jXSBDb21tZW50IG91dCAKICAgU0hBMzg0LCB3aGljaCB3ZSBkb24ndCBuZWVkIGFuZCBkb2Vzbid0IGNvbXBpbGUgd2l0aG91dCB0d2Vha3MKIC0gKGRqbSkgW2F1dGgtcGFtLmMgY2xpZW50bG9vcC5jIGluY2x1ZGVzLmggbW9uaXRvci5jIHNlc3Npb24uY10KICAgW3NmdHAtY2xpZW50LmMgc3NoLWtleXNpZ24uYyBzc2guYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdDIuY10KICAgW3NzaGQuYyBvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5jIG9wZW5ic2QtY29tcGF0L2JzZC1vcGVucHR5LmNdCiAgIFtvcGVuYnNkLWNvbXBhdC9nbG9iLmMgb3BlbmJzZC1jb21wYXQvbWt0ZW1wLmNdCiAgIFtvcGVuYnNkLWNvbXBhdC9yZWFkcGFzc3BocmFzZS5jXSBMb3RzIG9mIGluY2x1ZGUgZml4ZXMgZm9yCiAgIE9wZW5Tb2xhcmlzCiAtICh0aW0pIFtpbmNsdWRlcy5oXSBwdXQgc3lzL3N0YXQuaCBiYWNrIGluIHRvIHF1aWV0IHNvbWUgIm1hY3JvIHJlZGVmaW5lZDoiCiAtICh0aW0pIFtvcGVuc3NoL3NzaHB0eS5jIG9wZW5zc2gvb3BlbmJzZC1jb21wYXQvcG9ydC10dW4uY10gcHV0IGluIHNvbWUKICAgaW5jbHVkZXMgcmVtb3ZlZCBmcm9tIGluY2x1ZGVzLmgKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEZpeCBnbG9iIHRlc3QgY29udmVyc2lvbiB0byBBQ19UUllfQ09NUElMRQogLSAoZGptKSBbaW5jbHVkZXMuaF0gUHV0IGJhY2sgcGF0aHMuaCwgaXQgaXMgbmVlZGVkIGluIGRlZmluZXMuaAogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0LmhdIEFJWCAoYXQgbGVhc3QpIG5lZWRzCiAgIHN5cy9pb2N0bC5oIGZvciBzdHJ1Y3Qgd2luc2l6ZS4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIGxvZ2luX2NhcC5oIHJlcXVpcmVzIHN5cy90eXBlcy5oIG9uIE5ldEJTRC4KCjIwMDYwMzEzCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzExNzE6IERvbid0IHVzZSBwcmludGYoIiVsbGQiLCBsb25nbG9uZykKICAgc2luY2Ugbm90IGFsbCBwbGF0Zm9ybXMgc3VwcG9ydCBpdC4gIEluc3RlYWQsIHVzZSBpbnRlcm5hbCBlcXVpdmFsZW50IHdoaWxlCiAgIGNvbXB1dGluZyBMTE9OR19NSU4gYW5kIExMT05HX01BWC4gIFJlbW92ZSBzcGVjaWFsIGNhc2UgZm9yIGFscGhhLWRlYy1vc2YqCiAgIGFzIGl0J3Mgbm8gbG9uZ2VyIHJlcXVpcmVkLiAgVGVzdGVkIGJ5IEJlcm5oYXJkIFNpbW9uLCBvayBkam1ACgoyMDA2MDMwNAogLSAoZHR1Y2tlcikgW2NvbnRyaWIvY3lnd2luL3NzaC1ob3N0LWNvbmZpZ10gUmVxdWlyZSB1c2Ugb2YgbGFzdGxvZyBhcyBhCiAgIGZpbGUgcmF0aGVyIHRoYW4gZGlyZWN0b3J5LCByZXF1aXJlZCBhcyBDeWd3aW4gd2lsbCBiZSBpbXBvcnRpbmcgbGFzdGxvZygxKS4KICAgQWxzbyB0aWdodGVucyB1cCBwZXJtaXNzaW9ucyBvbiB0aGUgZmlsZS4gIFBhdGNoIGZyb20gdmluc2NoZW5AcmVkaGF0LmNvbS4KIC0gKGR0dWNrZXIpIFtnc3Mtc2Vydi1rcmI1LmNdIEJ1ZyAjMTE2NjogQ29ycmVjdCAjaWZkZWZzIGZvciBnc3NhcGlfa3JiNS5oCiAgIGluY2x1ZGVzLiAgUGF0Y2ggZnJvbSBnZW50b28ucml2ZXJyYXQgYXQgZ21haWwuY29tLgoKMjAwNjAyMjYKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTE1NjogUU5YIGFwcGFyZW50bHkgbmVlZHMgU1NIRF9BQ1FVSVJFU19DVFRZCiAgIHBhdGNoIGZyb20ga3JhYWkgYXQgZnRiZnMub3JnLgoKMjAwNjAyMjMKIC0gKGR0dWNrZXIpIFtzc2hkX2NvbmZpZyBzc2hkX2NvbmZpZy41XSBVcGRhdGUgVXNlUEFNIHRvIHJlZmxlY3QgY3VycmVudAogICByZWFsaXR5LiAgUG9pbnRlZCBvdXQgYnkgdHJ5cG9ucmFqIGF0IGdtYWlsLmNvbS4KCjIwMDYwMjIyCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvb3BlbnNzbC1jb21wYXQue2MsaH1dIE1pbm9yIHRpZHkgdXA6IG9ubHkKICAgY29tcGlsZSBpbiBjb21wYXQgY29kZSBpZiByZXF1aXJlZC4KCjIwMDYwMjIxCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvb3BlbnNzbC1jb21wYXQuaF0gUHJldmVudCB3YXJuaW5nIGFib3V0CiAgIHJlZGVmaW5pdGlvbiBvZiBTU0xlYXlfYWRkX2FsbF9hbGdvcml0aG1zLgoKMjAwNjAyMjAKIC0gKGR0dWNrZXIpIFtJTlNUQUxMIGNvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC9vcGVuc3NsLWNvbXBhdC57YyxofV0KICAgQWRkIG9wdGlvbmFsIGVuYWJsaW5nIG9mIE9wZW5TU0wncyAoaGFyZHdhcmUpIEVuZ2luZSBzdXBwb3J0LCB2aWEKICAgY29uZmlndXJlIC0td2l0aC1zc2wtZW5naW5lLiAgQmFzZWQgaW4gcGFydCBvbiBhIGRpZmYgYnkgbWljaGFsIGF0CiAgIGxvZ2l4LmN6LgoKMjAwNjAyMTkKIC0gKGR0dWNrZXIpIFtNYWtlZmlsZS5pbiBjb25maWd1cmUuYWMsIGFkZGVkIG9wZW5ic2QtY29tcGF0L3JlZ3Jlc3MvXQogICBBZGQgZmlyc3QgYXR0ZW1wdCBhdCByZWdyZXNzIHRlc3RzIGZvciBjb21wYXQgbGlicmFyeS4gIG9rIGRqbUAKCjIwMDYwMjE0CiAtICh0aW0pIFtidWlsZHBrZy5zaC5pbl0gTWFrZSB0aGUgbmFtZXMgY29uc2lzdGVudC4KICAgcy9wa2dfcG9zdF9tYWtlX2luc3RhbGxfZml4ZXMuc2gvcGtnLXBvc3QtbWFrZS1pbnN0YWxsLWZpeGVzLnNoLyBPSyBkdHVja2VyQAoKMjAwNjAyMTIKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ic2QtY3lnd2luX3V0aWwuY10gTWFrZSBsb29wIGNvdW50ZXIgdW5zaWduZWQKICAgdG8gc2lsZW5jZSBjb21waWxlciB3YXJuaW5nLCBmcm9tIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20uCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTE0OS4gRGlzYWJsZSAvZXRjL2RlZmF1bHQvbG9naW4gY2hlY2sgZm9yIFFOWC4KIC0gKGR0dWNrZXIpIFtSRUFETUUgdmVyc2lvbi5oIGNvbnRyaWIvY2FsZGVyYS9vcGVuc3NoLnNwZWMKICAgY29udHJpYi9yZWRoYXQvb3BlbnNzaC5zcGVjIGNvbnRyaWIvc3VzZS9vcGVuc3NoLnNwZWNdIEJ1bXAgdmVyc2lvbgogICBzdHJpbmdzIHRvIG1hdGNoIDQuM3AyIHJlbGVhc2UuCgoyMDA2MDIwOAogLSAodGltKSBbc2Vzc2lvbi5jXSBMb2dvdXQgcmVjb3JkcyB3ZXJlIG5vdCB1cGRhdGVkIG9uIHN5c3RlbXMgd2l0aAogICBwb3N0IGF1dGggcHJpdnNlcCBkaXNhYmxlZCBkdWUgdG8gYnVnIDEwODYgY2hhbmdlcy4gQW5hbHlzaXMgYW5kIHBhdGNoCiAgIGJ5IHZpbnNjaGVuIGF0IHJlZGhhdC5jb20uIE9LIHRpbUAsIGR0dWNrZXJALgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gVHlwbyBpbiBVbHRyaXggYW5kIE5ld3NPUyBzZWN0aW9ucyAoTkVFRF9TRVRQUkdQCiAgIC0+IE5FRURfU0VUUEdSUCksIHJlcG9ydGVkIGJ5IEJlcm5oYXJkIFNpbW9uLiAgb2sgdGltQAoKMjAwNjAyMDYKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gUmVtb3ZlIHVubmVjZXNzYXJ5IHRlc3RzIGZvciBuZXQvaWYuaCBhbmQgCiAgIG5ldGluZXQvaW5fc3lzdG0uaC4gT0sgZHR1Y2tlckAuCgoyMDA2MDIwNQogLSAodGltKSBbY29uZmlndXJlLmFjXSBBZGQgQUNfUkVWSVNJT04uIEFkZCBzeXMvdGltZS5oIHRvIGxhc3Rsb2cuaCB0ZXN0CiAgIGZvciBTb2xhcmlzLiBPSyBkdHVja2VyQC4KIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gQnVnICMxMTQ5LiBDaGFuZ2VzIGluIFFOWCBzZWN0aW9uIG9ubHkuIFBhdGNoIGJ5CiAgIGtyYWFpIGF0IGZ0YmZzLm9yZy4KCjIwMDYwMjAzCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIHRlc3QgZm9yIGVncmVwIChBQ19QUk9HX0VHUkVQKSBiZWZvcmUgZmlyc3QKICAgQUNfQ0hFQ0tfSEVBREVSUyB0ZXN0LiBXaXRob3V0IGl0LCBpZiBBQ19DSEVDS19IRUFERVJTIGlzIGZpcnN0IHJ1bgogICBieSBhIHBsYXRmb3JtIHNwZWNpZmljIGNoZWNrLCBidWlsdGluIHN0YW5kYXJkIGluY2x1ZGVzIHRlc3RzIHdpbGwgYmUKICAgc2tpcHBlZCBvbiB0aGUgb3RoZXIgcGxhdGZvcm1zLgogICBBbmFseXNpcyBhbmQgc3VnZ2VzdGlvbiBieSB2aW5zY2hlbiBhdCByZWRoYXQuY29tLCBwYXRjaCBieSBkdHVja2VyQC4KICAgT0sgdGltQCwgZGptQC4KCjIwMDYwMjAyCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzExNDg6IEZpeCAiY3JpcHBsZWQgQUVTIiB0ZXN0IHNvIHRoYXQgaXQKICAgd29ya3Mgd2l0aCBwaWNreSBjb21waWxlcnMuICBQYXRjaCBmcm9tIGFsZXgua2llcm5hbiBhdCB0aHVzLm5ldC4KCjIwMDYwMjAxCiAtIChkam0pIFtyZWdyZXNzL3Rlc3QtZXhlYy5zaF0gVHJ5ICdsb2duYW1lJyBhcyB3ZWxsIGFzICd3aG9hbWknIHRvIAogICBkZXRlcm1pbmUgdGhlIHVzZXIncyBsb2dpbiBuYW1lIC0gbmVlZGVkIGZvciByZWdyZXNzIHRlc3RzIG9uIFNvbGFyaXMgCiAgIDEwIGFuZCBPcGVuU29sYXJpcwogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzAxIDA5OjA2OjUwCiAgICAgW3NzaGQuOF0KICAgICAtIG1lcmdlIHNlY3Rpb25zIG9uIHByb3RvY29scyAxIGFuZCAyIGludG8gYSBzaW5nbGUgc2VjdGlvbgogICAgIC0gcmVtb3ZlIGNvbmZpZ3VyYXRpb24gZmlsZSBzZWN0aW9uCiAgICAgb2sgbWFya3VzCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzAxIDA5OjExOjQxCiAgICAgW3NzaGQuOF0KICAgICBzbWFsbCB0d2VhazsKIC0gKGRqbSkgW2NvbnRyaWIvY2FsZGVyYS9vcGVuc3NoLnNwZWMgY29udHJpYi9yZWRoYXQvb3BlbnNzaC5zcGVjXQogICBbY29udHJpYi9zdXNlL29wZW5zc2guc3BlY10gVXBkYXRlIHZlcnNpb25zIGFoZWFkIG9mIHJlbGVhc2UKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDEgMTE6Mjc6MjIKICAgICBbdmVyc2lvbi5oXQogICAgIG9wZW5zc2ggNC4zCiAtIChkam0pIFJlbGVhc2UgT3BlblNTSCA0LjNwMQoKMjAwNjAxMzEKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8yMCAxMToyMTo0NQogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgLSB3b3JkIGNoYW5nZSwgYWdyZWVkIHcvIG1hcmt1cwogICAgIC0gY29uc2lzdGVuY3kgZml4ZXMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMjUgMDk6MDQ6MzQKICAgICBbc3NoZC44XQogICAgIG1vdmUgdGhlIG9wdGlvbnMgZGVzY3JpcHRpb24gdXAgdGhlIHBhZ2UsIGFuZCBhIGZldyBhZGRpdGlvbmFsIHR3ZWFrcwogICAgIHdoaWxzdCBpbiBoZXJlOwogICAgIG9rIG1hcmt1cwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8yNSAwOTowNzoyMgogICAgIFtzc2hkLjhdCiAgICAgbW92ZSBzdWJzZWN0aW9ucyB0byBmdWxsIHNlY3Rpb25zOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8yNiAwODo0Nzo1NgogICAgIFtzc2guMV0KICAgICBhZGQgYSBzZWN0aW9uIG9uIHZlcmlmeWluZyBob3N0IGtleXMgaW4gZG5zOwogICAgIHdyaXR0ZW4gd2l0aCBhIGxvdCBvZiBoZWxwIGZyb20gamFrb2I7CiAgICAgZmVlZGJhY2sgZHR1Y2tlci9tYXJrdXM7CiAgICAgb2sgbWFya3VzCiAgIC0gcmV5a0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8zMCAxMjoyMjoyMgogICAgIFtjaGFubmVscy5jXQogICAgIG1hcmsgY2hhbm5lbCBhcyB3cml0ZSBmYWlsZWQgb3IgZGVhZCBpbnN0ZWFkIG9mIHJlYWQgZmFpbGVkIG9uIGVycm9yCiAgICAgb2YgdGhlIGNoYW5uZWwgb3V0cHV0IGZpbHRlci4KICAgICBvayBtYXJrdXNACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzMwIDEzOjM3OjQ5CiAgICAgW3NzaC4xXQogICAgIHJlbW92ZSBhbiBpbmNvcnJlY3Qgc2VudGVuY2U7CiAgICAgcmVwb3J0ZWQgYnkgcm91bWVuIHBldHJvdjsKICAgICBvayBkam0gbWFya3VzCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzMxIDEwOjE5OjAyCiAgICAgW21pc2MuYyBtaXNjLmggc2NwLmMgc2Z0cC5jXQogICAgIGZpeCBsb2NhbCBhcmJpdHJhcnkgY29tbWFuZCBleGVjdXRpb24gdnVsbmVyYWJpbGl0eSBvbiBsb2NhbC9sb2NhbCBhbmQKICAgICByZW1vdGUvcmVtb3RlIGNvcGllcyAoQ1ZFLTIwMDYtMDIyNSwgYnogIzEwOTQpLCBwYXRjaCBieQogICAgIHQ4bSBBVCBjZW50cnVtLmN6LCBwb2xpc2hlZCBieSBkdHVja2VyQCBhbmQgbXlzZWxmOyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzMxIDEwOjM1OjQzCiAgICAgW3NjcC5jXQogICAgICJzY3AgYSBiIGMiIHNob3VsZG4ndCBjbG9iYmVyICJjIiB3aGVuIGl0IGlzIG5vdCBhIGRpcmVjdG9yeSwgcmVwb3J0IGFuZAogICAgIGZpeCBmcm9tIGJpb3JuQDsgb2sgbWFya3VzQAogLSAoZGptKSBTeW5jIHJlZ3Jlc3MgdGVzdHMgdG8gT3BlbkJTRDoKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzEwIDEwOjIwOjM5CiAgICAgW3JlZ3Jlc3MvZm9yd2FyZGluZy5zaF0KICAgICBSZWdyZXNzIHRlc3QgZm9yIENsZWFyQWxsRm9yd2FyZGluZ3MgKGJ6ICM5OTQpOyBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNC8yNSAwOTo1NDowOQogICAgIFtyZWdyZXNzL211bHRpcGxleC5zaF0KICAgICBEb24ndCBjYWxsIGNsZWFudXAgaW4gbXVsdGlwbGV4IGFzIHRlc3QtZXhlYyB3aWxsIGNsZWFudXAgYW55d2F5CiAgICAgZm91bmQgYnkgdGltQCwgb2sgZGptQAogICAgIE5CLiBJRCBzeW5jIG9ubHksIHdlIGFscmVhZHkgaGFkIHRoaXMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDUvMjAgMjM6MTQ6MTUKICAgICBbcmVncmVzcy90ZXN0LWV4ZWMuc2hdCiAgICAgZm9yY2UgYWRkcmVzc2ZhbWlseT1pbmV0IGZvciB0ZXN0cywgdW5icmVha2luZyBkeW5hbWljLWZvcndhcmQgcmVncmVzcyBmb3IKICAgICByZWNlbnRseSBjb21taXR0ZWQgbmMgU09DS1M1IGNoYW5nZXMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDUvMjQgMDQ6MTA6NTQKICAgICBbcmVncmVzcy90cnktY2lwaGVycy5zaF0KICAgICBvb3BzLCBuZXcgYXJjZm91ciBtb2RlcyBoZXJlIHRvbwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wNi8zMCAxMTowMjozNwogICAgIFtyZWdyZXNzL3NjcC5zaF0KICAgICBhbGxvdyBTVURPPXN1ZG87IGZyb20gQWxleGFuZGVyIEJsdWhtCiAgIC0gZ3J1bmtAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTEvMTQgMjE6MjU6NTYKICAgICBbcmVncmVzcy9hZ2VudC1nZXRwZWVyZWlkLnNoXQogICAgIGFsbCBvdGhlciBzY3JpcHRzIGluIHRoaXMgZGlyIHVzZSAkU1VETywgbm90ICdzdWRvJywgc28gcHVsbCB0aGlzIGV2ZW4KICAgICBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8xNCAwNDozNjozOQogICAgIFtyZWdyZXNzL3NjcC1zc2gtd3JhcHBlci5zaF0KICAgICBGaXggYXNzdW1wdGlvbiBhYm91dCBob3cgbWFueSBhcmdzIHNjcCB3aWxsIHBhc3M7IG9rIGRqbUAKICAgICBOQi4gSUQgc3luYyBvbmx5LCB3ZSBhbHJlYWR5IGhhZCB0aGlzCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzI3IDA2OjQ5OjIxCiAgICAgW3NjcC5zaF0KICAgICByZWdyZXNzIHRlc3QgZm9yIGxvY2FsIHRvIGxvY2FsIHNjcCBjb3BpZXM7IG9rIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzMxIDEwOjIzOjIzCiAgICAgW3NjcC5zaF0KICAgICByZWdyZXNzaW9uIHRlc3QgZm9yIENWRS0yMDA2LTAyMjUgd3JpdHRlbiBieSBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8zMSAxMDozNjozMwogICAgIFtzY3Auc2hdCiAgICAgcmVncmVzcyB0ZXN0IGZvciAic2NwIGEgYiBjIiB3aGVyZSAiYyIgaXMgbm90IGEgZGlyZWN0b3J5CgoyMDA2MDEyOQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBvcGVuc3NoZC5pbml0LmluXSBCdWcgIzExNDQ6IFVzZSAvYmluL3NoIGZvciB0aGUKICAgb3BlbnNzaGQuaW5pdCBzY3JpcHQgaW50ZXJwcmV0dGVyIGlmIC9zYmluL3NoIGRvZXMgbm90IGV4aXN0LiAgb2sgdGltQAoKMjAwNjAxMjAKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMTUgMTc6Mzc6MDUKICAgICBbc3NoLjFdCiAgICAgY29ycmVjdGlvbiBmcm9tIGRlcmFhZHQKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMTggMTA6NTM6MjkKICAgICBbc3NoLjFdCiAgICAgYWRkIGEgc2VjdGlvbiBvbiBzc2gtYmFzZWQgdnBuLCBiYXNlZCBvbiByZXlrJ3MgUkVBRE1FLnR1bjsKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzIwIDAwOjE0OjU1CiAgICAgW3NjcC4xIHNzaC4xIHNzaF9jb25maWcuNSBzZnRwLjFdCiAgICAgRG9jdW1lbnQgUmVrZXlMaW1pdC4gIEJhc2VkIG9uIHBhdGNoIGZyb20gamFuLml2ZW4gYXQgY2Vybi5jaCBmcm9tIG1pbmRyb3QKICAgICAjMTA1NiB3aXRoIGZlZWRiYWNrIGZyb20gam1jLCBkam0gYW5kIG1hcmt1czsgb2sgam1jQCBkam1ACgoyMDA2MDExNAogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzA2IDEzOjI3OjMyCiAgICAgW3NzaC4xXQogICAgIHdlZWQgb3V0IHNvbWUgZHVwbGljYXRlIGluZm8gaW4gdGhlIGtub3duX2hvc3RzIEZJTEVTIGVudHJpZXM7CiAgICAgb2sgZGptCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzA2IDEzOjI5OjEwCiAgICAgW3NzaC4xXQogICAgIGZpbmFsIHJvdW5kIG9mIHdoYWNraW5nIEZJTEVTIGZvciBkdXBsaWNhdGUgaW5mbywgYW5kIHNvbWUgY29uc2lzdGVuY3kKICAgICBmaXhlczsKICAgICBvayBkam0KICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMTIgMTQ6NDQ6MTIKICAgICBbc3NoLjFdCiAgICAgc3BsaXQgc2VjdGlvbnMgb24gdGNwIGFuZCB4MTEgZm9yd2FyZGluZyBpbnRvIHR3byBzZWN0aW9ucy4KICAgICBhZGQgYW4gZXhhbXBsZSBpbiB0aGUgdGNwIHNlY3Rpb24sIGJhc2VkIG9uIHN0aCBpIHdyb3RlIGZvciBzc2ggZmFxOwogICAgIGhlbHAgKyBvazogZGptIG1hcmt1cyBkdHVja2VyCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzEyIDE4OjQ4OjQ4CiAgICAgW3NzaC4xXQogICAgIHJlZmVyIHRvIGBUQ1AnIHJhdGhlciB0aGFuIGBUQ1AvSVAnIGluIHRoZSBjb250ZXh0IG9mIGNvbm5lY3Rpb24KICAgICBmb3J3YXJkaW5nOwogICAgIG9rIG1hcmt1cwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8xMiAyMjoyMDowMAogICAgIFtzc2hkLjhdCiAgICAgcmVmZXIgdG8gVENQIGZvcndhcmRpbmcsIHJhdGhlciB0aGFuIFRDUC9JUCBmb3J3YXJkaW5nOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8xMiAyMjoyNjowMgogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgcmVmZXIgdG8gVENQIGZvcndhcmRpbmcsIHJhdGhlciB0aGFuIFRDUC9JUCBmb3J3YXJkaW5nOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8xMiAyMjozNDoxMgogICAgIFtzc2guMV0KICAgICBiYWNrIG91dCBhIHNlbnRlbmNlIC0gQVVUSEVOVElDQVRJT04gYWxyZWFkeSBkb2N1bWVudHMgdGhpczsKCjIwMDYwMTA5CiAtIChkdHVja2VyKSBbY29udHJpYi9jeWd3aW4vc3NoLWhvc3QtY29uZmlnXSBNYWtlIHNzaGQgc2VydmljZSBkZXBlbmQgb24KICAgdGNwaXAgc2VydmljZSBzbyBpdCdzIGFsd2F5cyBzdGFydGVkIGFmdGVyIElQIGlzIHVwLiAgUGF0Y2ggZnJvbQogICB2aW5zY2hlbiBhdCByZWRoYXQuY29tLgoKMjAwNjAxMDYKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8wMyAxNjozMToxMAogICAgIFtzc2guMV0KICAgICBtb3ZlIEZJTEVTIHRvIGEgLWNvbXBhY3QgbGlzdCwgYW5kIG1ha2UgZWFjaCBmaWxlcyBhbiBpdGVtIGluIHRoYXQgbGlzdC4KICAgICB0aGlzIGF2b2lkcyBuYXN0bHkgbGluZSB3cmFwIHdoZW4gd2UgaGF2ZSBsb25nIHBhdGhuYW1lcywgYW5kIHRyZWF0cwogICAgIGVhY2ggZmlsZSBhcyBhIHNlcGFyYXRlIGl0ZW07CiAgICAgcmVtb3ZlIHRoZSAuUGEgdG9vLCBzaW5jZSBpdCBpcyB1c2VsZXNzLgogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8wMyAxNjozNTozMAogICAgIFtzc2guMV0KICAgICB1c2UgYSBsYXJnZXIgd2lkdGggZm9yIHRoZSBFTlZJUk9OTUVOVCBsaXN0OwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8wMyAxNjo1MjozNgogICAgIFtzc2guMV0KICAgICBwdXQgRklMRVMgaW4gc29tZSBzb3J0IG9mIG9yZGVyOiBzb3J0IGJ5IHBhdGhuYW1lCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzAzIDE2OjU1OjE4CiAgICAgW3NzaC4xXQogICAgIHR3ZWFrIHRoZSBkZXNjcmlwdGlvbiBvZiB+Ly5zc2gvZW52aXJvbm1lbnQKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDQgMTg6NDI6NDYKICAgICBbc3NoLjFdCiAgICAgY2hvcCBvdXQgc29tZSBkdXBsaWNhdGlvbiBpbiB0aGUgLntyLHN9aG9zdHMve2gsc2h9b3N0cy5lcXVpdiBGSUxFUwogICAgIGVudHJpZXM7CiAgICAgb2sgbWFya3VzCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzA0IDE4OjQ1OjAxCiAgICAgW3NzaC4xXQogICAgIHJlbW92ZSAuWHIncyB0byByc2goMSkgYW5kIHRlbG5ldCgxKTogdGhleSBhcmUgaGFyZGx5IG5lZWRlZDsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDQgMTk6NDA6MjQKICAgICBbc3NoLjFdCiAgICAgKy5YciBzc2gta2V5c2NhbiAxICwKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDQgMTk6NTA6MDkKICAgICBbc3NoLjFdCiAgICAgLS5YciBnemlwIDEgLAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8wNSAyMzo0Mzo1MwogICAgIFttaXNjLmNdCiAgICAgY2hlY2sgdGhhdCBzdGRpbyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBhY3R1YWxseSBjbG9zZWQgYmVmb3JlIGNsb2JiZXJpbmcKICAgICB0aGVtIGluIHNhbml0aXNlX3N0ZGZkKCkuIHByb2JsZW1zIG9jY3VycmVkIHdoZW4gYSBsb3dlciBudW1iZXJlZCBmZCB3YXMKICAgICBjbG9zZWQsIGJ1dCBoaWdoZXIgb25lcyB3ZXJlbid0LiBzcG90dGVkIGJ5LCBhbmQgcGF0Y2ggdGVzdGVkIGJ5CiAgICAgRnLpZOlyaWMgT2xpdmnpCgoyMDA2MDEwMwogLSAoZGptKSBbY2hhbm5lbHMuY10gY2xlYW4gdXAgaGFybWxlc3MgbWVyZ2UgZXJyb3IsIGZyb20gcmV5a0AKCjIwMDYwMTAzCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDIgMTc6MDk6NDkKICAgICBbc3NoX2NvbmZpZy41IHNzaGRfY29uZmlnLjVdCiAgICAgc29tZSBjb3JyZWN0aW9ucyBmcm9tIG1pY2hhZWwga251ZHNlbjsKCjIwMDYwMTAyCiAtIChkam0pIFtSRUFETUUudHVuXSBBZGQgUkVBRE1FLnR1biwgbWlzc2VkIGR1cmluZyBzeW5jIG9mIHR1big0KSBzdXBwb3J0CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMzEgMTA6NDY6MTcKICAgICBbc3NoLjFdCiAgICAgbWVyZ2UgdGhlICJMT0dJTiBTRVNTSU9OIEFORCBSRU1PVEUgRVhFQ1VUSU9OIiBhbmQgIlNFUlZFUgogICAgIEFVVEhFTlRJQ0FUSU9OIiBzZWN0aW9ucyBpbnRvICJBVVRIRU5USUNBVElPTiI7CiAgICAgc29tZSByZXdvcmRpbmcgZG9uZSB0byBtYWtlIHRoZSB0ZXh0IHJlYWQgYmV0dGVyLCBwbHVzIHNvbWUKICAgICBpbXByb3ZlbWVudHMgZnJvbSBkam07CiAgICAgb2sgZGptCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzMxIDEzOjQ0OjA0CiAgICAgW3NzaC4xXQogICAgIGNsZWFuIHVwIEVOVklST05NRU5UIGEgbGl0dGxlOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8zMSAxMzo0NToxOQogICAgIFtzc2guMV0KICAgICAuTm0gZG9lcyBub3QgcmVxdWlyZSBhbiBhcmd1bWVudDsKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzAxIDA4OjU5OjI3CiAgICAgW2luY2x1ZGVzLmggbWlzYy5jXQogICAgIG1vdmUgPG5ldC9pZi5oPjsgb2sgZGptQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDEgMTA6MDg6NDgKICAgICBbbWlzYy5jXQogICAgIG5vIHRyYWlsaW5nICJcbiIgZm9yIGRlYnVnKCkKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDIgMDE6MjA6MzEKICAgICBbc2Z0cC1jbGllbnQuYyBzZnRwLWNvbW1vbi5oIHNmdHAtc2VydmVyLmNdCiAgICAgdXNlIGEgY29tbW9uIG1heC4gcGFja2V0IGxlbmd0aCwgbm8gYmluYXJ5IGNoYW5nZQogICAtIHJleWtAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDIgMDc6NTM6NDQKICAgICBbbWlzYy5jXQogICAgIGNsYXJpZnkgdHVuKDQpIG9wZW5pbmcgLSBzZXQgdGhlIG1vZGUgYW5kIGJyaW5nIHRoZSBpbnRlcmZhY2UgdXAuIGFsc28KICAgICAocmUpc2V0cyB0aGUgdHVuKDQpIGxheWVyIDIgTElOSzAgZmxhZyBmb3IgZXhpc3RpbmcgdHVubmVsIGludGVyZmFjZXMuCiAgICAgc3VnZ2VzdGVkIGFuZCBvayBieSBkam1ACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzAyIDEyOjMxOjA2CiAgICAgW3NzaC4xXQogICAgIHN0YXJ0IHRvIGN1dCBzb21lIGR1cGxpY2F0ZSBpbmZvIGZyb20gRklMRVM7CiAgICAgaGVscC9vayBkam0KCjIwMDYwMTAxCiAtIChkam0pIFtNYWtlZmlsZS5pbiBjb25maWd1cmUuYWMgaW5jbHVkZXMuaCBtaXNjLmNdCiAgICAgICAgIFtvcGVuYnNkLWNvbXBhdC9wb3J0LXR1bi5jIG9wZW5ic2QtY29tcGF0L3BvcnQtdHVuLmhdIEFkZCBzdXBwb3J0CiAgICAgICAgIGZvciB0dW5uZWwgZm9yd2FyZGluZyBmb3IgRnJlZUJTRCBhbmQgTmV0QlNELiBOZXRCU0QncyBzdXBwb3J0IGlzCiAgICAgICAgIGxpbWl0ZWQgdG8gSVB2NCB0dW5uZWxzIG9ubHksIGFuZCBtb3N0IHZlcnNpb25zIGRvbid0IHN1cHBvcnQgdGhlCiAgICAgICAgIHRhcCg0KSBkZXZpY2UgYXQgYWxsLgogLSAoZGptKSBbY29uZmlndXJlLmFjXSBGaXggbGludXgvaWZfdHVuLmggdGVzdAogLSAoZGptKSBbb3BlbmJzZC1jb21wYXQvcG9ydC10dW4uY10gTGludXggbmVlZHMgbGludXgvaWYuaCB0b28KCjIwMDUxMjI5CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzI4IDIyOjQ2OjA2CiAgICAgW2Nhbm9ob3N0LmMgY2hhbm5lbHMuYyBjbGllbnRsb29wLmNdCiAgICAgdXNlICdicmVhay1pbicgZm9yIGNvbnNpc3RlbmN5OyBvayBkZXJhYWR0QCBvayBhbmQgaW5wdXQgam1jQAogICAtIHJleWtAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMzAgMTU6NTY6MzcKICAgICBbY2hhbm5lbHMuYyBjaGFubmVscy5oIGNsaWVudGxvb3AuY10KICAgICBhZGQgY2hhbm5lbCBvdXRwdXQgZmlsdGVyIGludGVyZmFjZS4KICAgICBvayBkam1ALCBzdWdnZXN0ZWQgYnkgbWFya3VzQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8zMCAxNjo1OTowMAogICAgIFtzZnRwLjFdCiAgICAgZG8gbm90IHN1Z2dlc3QgdGhhdCBpbnRlcmFjdGl2ZSBhdXRoZW50aWNhdGlvbiB3aWxsIHdvcmsKICAgICB3aXRoIHRoZSAtYiBmbGFnOwogICAgIGJhc2VkIG9uIGEgZGlmZiBmcm9tIGpvaG4gbC4gc2NhcmZvbmU7CiAgICAgb2sgZGptCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8zMSAwMTozODo0NQogICAgIFtzc2guMV0KICAgICBkb2N1bWVudCAtTU07IG9rIGRqbUAKIC0gKGRqbSkgW29wZW5ic2QtY29tcGF0L3BvcnQtdHVuLmMgb3BlbmJzZC1jb21wYXQvcG9ydC10dW4uaCBjb25maWd1cmUuYWNdCiAgIFtzZXJ2ZXJsb29wLmMgc3NoLmMgb3BlbmJzZC1jb21wYXQvTWFrZWZpbGUuaW5dCiAgIFtvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oXSBJbXBsZW1lbnQgdHVuKDQpIGZvcndhcmRpbmcgCiAgIGNvbXBhdGFiaWxpdHkgc3VwcG9ydCBmb3IgTGludXgsIGRpZmYgZnJvbSByZXlrQAogLSAoZGptKSBbY29uZmlndXJlLmFjXSBEaXNhYmxlIExpbnV4IHR1big0KSBjb21wYXQgY29kZSBpZiBsaW51eC90dW4uaCBkb2VzCiAgIG5vdCBleGlzdAogLSAoZGptKSBbY29uZmlndXJlLmFjXSBvb3BzLCBtYWtlIHRoYXQgbGludXgvaWZfdHVuLmgKCjIwMDUxMjI5CiAtICh0aW0pIFtidWlsZHBrZy5zaC5pbl0gZ3JlcCBmb3IgJFNTSERVSUQgaW5zdGVhZCBvZiAkU1NIREdJRCBvbiAvZXRjL3Bhc3N3ZAoKMjAwNTEyMjQKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8yMCAyMTo1OTo0MwogICAgIFtzc2guMV0KICAgICBtZXJnZSB0aGUgc2VjdGlvbnMgb24gcHJvdG9jb2xzIDEgYW5kIDIgaW50byBvbmUgc2VjdGlvbiBvbgogICAgIGF1dGhlbnRpY2F0aW9uOwogICAgIGZlZWRiYWNrIGRqbSBkdHVja2VyCiAgICAgb2sgZGVyYWFkdCBtYXJrdXMgZHR1Y2tlcgogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8yMCAyMjowMjo1MAogICAgIFtzc2guMV0KICAgICAuU3MgLT4gLlNoOiBzdWJzZWN0aW9ucyBoYXZlIG5vdCBtYWRlIHRoaXMgcGFnZSBtb3JlIHJlYWRhYmxlCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzIwIDIyOjA5OjQxCiAgICAgW3NzaC4xXQogICAgIG1vdmUgaW5mbyBvbiBzc2ggcmV0dXJuIHZhbHVlcyBhbmQgY29uZmlnIGZpbGVzIHVwIGludG8gdGhlIG1haW4KICAgICBkZXNjcmlwdGlvbjsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMjEgMTE6NDg6MTYKICAgICBbc3NoLjFdCiAgICAgLUwgYW5kIC1SIGRlc2NyaXB0aW9ucyBhcmUgbm93IGFib3ZlLCBub3QgYmVsb3csIH5DIGRlc2NyaXB0aW9uOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8yMSAxMTo1NzoyNQogICAgIFtzc2guMV0KICAgICBvcHRpb25zIG5vdyBkZXNjcmliZWQgYGFib3ZlJywgcmF0aGVyIHRoYW4gYGxhdGVyJzsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMjEgMTI6NTM6MzEKICAgICBbc3NoLjFdCiAgICAgLVkgZG9lcyBYMTEgZm9yd2FyZGluZyB0b287CiAgICAgb2sgbWFya3VzCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8yMSAyMjo0NDoyNgogICAgIFtzc2hkLjhdCiAgICAgY2xhcmlmeSBwcmVjZWRlbmNlIG9mIC1wLCBQb3J0LCBMaXN0ZW5BZGRyZXNzOyBvayBhbmQgaGVscCBqbWNACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzIyIDEwOjMxOjQwCiAgICAgW3NzaF9jb25maWcuNV0KICAgICBwdXQgdGhlIGRlc2NyaXB0aW9uIG9mICJVc2VQcml2aWxlZ2VkUG9ydCIgaW4gdGhlIGNvcnJlY3QgcGxhY2U7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzIyIDExOjIzOjQyCiAgICAgW3NzaC4xXQogICAgIGV4cGFuZCB0aGUgZGVzY3JpcHRpb24gb2YgLXcgc29tZXdoYXQ7CiAgICAgaGVscC9vayByZXlrCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzIzIDE0OjU1OjUzCiAgICAgW3NzaC4xXQogICAgIC0gc3luYyB0aGUgZGVzY3JpcHRpb24gb2YgLWUgdy8gc3lub3BzaXMKICAgICAtIHNpbXBsaWZ5IHRoZSBkZXNjcmlwdGlvbiBvZiAtSQogICAgIC0gbm90ZSB0aGF0IC1JIGlzIG9ubHkgYXZhaWxhYmxlIGlmIHN1cHBvcnQgY29tcGlsZWQgaW4sIGFuZCB0aGF0IGl0CiAgICAgaXNuJ3QgYnkgZGVmYXVsdAogICAgIGZlZWRiYWNrL29rIGRqbUAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMjMgMjM6NDY6MjMKICAgICBbc3NoLjFdCiAgICAgbGVzcyBtYXJrIHVwIGZvciAtYzsKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMjQgMDI6Mjc6NDEKICAgICBbc2Vzc2lvbi5jIHNzaGQuY10KICAgICBlbGltaW5hdGUgc29tZSBjb2RlIGR1cGxpY2F0ZWQgaW4gcHJpdnNlcCBhbmQgbm9uLXByaXZzZXAgcGF0aHMsIGFuZAogICAgIGV4cGxpY2l0bHkgY2xlYXIgU0lHQUxSTSBoYW5kbGVyOyAiZ3Jvb3Z5IiBkZXJhYWR0QAoKMjAwNTEyMjAKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSByZXlrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzEzIDE1OjAzOjAyCiAgICAgW3NlcnZlcmxvb3AuY10KICAgICBpZiBmb3JjZWRfdHVuX2RldmljZSBpcyBub3Qgc2V0LCBpdCBpcyAtMSBhbmQgbm90IFNTSF9UVU5JRF9BTlkKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMTYgMTg6MDc6MDgKICAgICBbc3NoLjFdCiAgICAgbW92ZSB0aGUgb3B0aW9uIGRlc2NyaXB0aW9ucyB1cCB0aGUgcGFnZTogc3RhcnQgb2YgYSByZXN0cnVjdHVyZTsKICAgICBvayBtYXJrdXMgZGVyYWFkdAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8xNiAxODowODo1MwogICAgIFtzc2guMV0KICAgICBzaW1wbGlmeSBhIHNlbnRlbmNlOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8xNiAxODoxMjoyMgogICAgIFtzc2guMV0KICAgICBtYWtlIHRoZSBkZXNjcmlwdGlvbiBvZiAtYyBhIGxpdHRsZSBuaWNlcjsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMTYgMTg6MTQ6NDAKICAgICBbc3NoLjFdCiAgICAgc2lnbnBvc3QgdGhlIHByb3RvY29sIHNlY3Rpb25zOwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMTcgMjE6MTM6MDUKICAgICBbc3NoX2NvbmZpZy41IHNlc3Npb24uY10KICAgICBzcGVsbGluZzogZm93YXJkaW5nLCBmb3dhcmRlZAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMTcgMjE6MzY6NDIKICAgICBbc3NoX2NvbmZpZy41XQogICAgIHNwZWxsaW5nOiBpbnRlbnRlZCAtPiBpbnRlbmRlZAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMjAgMDQ6NDE6MDcKICAgICBbc3NoLmNdCiAgICAgZXhpdCgyNTUpIG9uIGVycm9yIHRvIG1hdGNoIGRlc2NyaXB0aW9uIGluIHNzaCgxKTsgYnogIzExMzc7IG9rIGRlcmFhZHRACgoyMDA1MTIxOQogLSAoZHR1Y2tlcikgW2NpcGhlci1hZXMuYyBjaXBoZXItY3RyLmMgY2lwaGVyLmMgY29uZmlndXJlLmFjCiAgIG9wZW5ic2QtY29tcGF0L29wZW5zc2wtY29tcGF0LmhdIENoZWNrIGZvciBhbmQgd29yayBhcm91bmQgYnJva2VuIEFFUwogICBjaXBoZXJzID4xMjhiaXQgb24gKHNvbWUpIFNvbGFyaXMgMTAgc3lzdGVtcy4gIG9rIGRqbUAKCjIwMDUxMjE3CiAtIChkdHVja2VyKSBbZGVmaW5lcy5oXSBIUC1VWCBzeXN0ZW0gaGVhZGVycyBkZWZpbmUgIllFUyIgYW5kICJOTyIgd2hpY2gKICAgc2NwLmMgYWxzbyB1c2VzLCBzbyB1bmRlZiB0aGVtIGhlcmUuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L2JzZC1zbnByaW50Zi5jXSBCdWcgIzExMzM6IE91cgogICBzbnByaW50ZiByZXBsYWNlbWVudCBjYW4gaGF2ZSBhIGNvbmZsaWN0aW5nIGRlY2xhcmF0aW9uIGluIEhQLVVYJ3Mgc3lzdGVtCiAgIGhlYWRlcnMgKGNvbnN0IHZzLiBubyBjb25zdCkgc28gd2Ugbm93IGNoZWNrIGZvciBhbmQgd29yayBhcm91bmQgaXQuICBQYXRjaAogICBmcm9tIHRoZSBkeW5hbWljIGR1byBvZiBEYXZpZCBMZW9uYXJkIGFuZCBUZWQgUGVyY2l2YWwuCgoyMDA1MTIxNAogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYyAocmVncmVzcy8pCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8zMCAwNDozNjozOQogICAgIFtyZWdyZXNzL3NjcC1zc2gtd3JhcHBlci5zaF0KICAgICBGaXggYXNzdW1wdGlvbiBhYm91dCBob3cgbWFueSBhcmdzIHNjcCB3aWxsIHBhc3M7IG9rIGRqbUAKCjIwMDUxMjEzCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTEvMzAgMTE6MTg6MjcKICAgICBbc3NoLjFdCiAgICAgdGltZXpvbmUgLT4gdGltZSB6b25lCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzExLzMwIDExOjQ1OjIwCiAgICAgW3NzaC4xXQogICAgIGF2b2lkIGFtYmlndWl0aWVzIGluIGRlc2NyaWJpbmcgVFo7CiAgICAgb2sgZGptQAogICAtIHJleWtAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMDYgMjI6Mzg6MjgKICAgICBbYXV0aC1vcHRpb25zLmMgYXV0aC1vcHRpb25zLmggY2hhbm5lbHMuYyBjaGFubmVscy5oIGNsaWVudGxvb3AuY10KICAgICBbbWlzYy5jIG1pc2MuaCByZWFkY29uZi5jIHJlYWRjb25mLmggc2NwLmMgc2VydmNvbmYuYyBzZXJ2Y29uZi5oXQogICAgIFtzZXJ2ZXJsb29wLmMgc2Z0cC5jIHNzaC4xIHNzaC5jIHNzaF9jb25maWcgc3NoX2NvbmZpZy41IHNzaGNvbm5lY3QuY10KICAgICBbc3NoY29ubmVjdC5oIHNzaGQuOCBzc2hkX2NvbmZpZyBzc2hkX2NvbmZpZy41XQogICAgIEFkZCBzdXBwb3J0IGZvciB0dW4oNCkgZm9yd2FyZGluZyBvdmVyIE9wZW5TU0gsIGJhc2VkIG9uIGFuIGlkZWEgYW5kCiAgICAgaW5pdGlhbCBjaGFubmVsIGNvZGUgYml0cyBieSBtYXJrdXNALiBUaGlzIGlzIGEgc2ltcGxlIGFuZCBlYXN5IHdheSB0bwogICAgIHVzZSBPcGVuU1NIIGZvciBhZCBob2MgdmlydHVhbCBwcml2YXRlIG5ldHdvcmsgY29ubmVjdGlvbnMsIGUuZy4KICAgICBhZG1pbmlzdHJhdGl2ZSB0dW5uZWxzIG9yIHNlY3VyZSB3aXJlbGVzcyBhY2Nlc3MuIEl0J3MgYmFzZWQgb24gYSBuZXcKICAgICBzc2ggY2hhbm5lbCBhbmQgd29ya3Mgc2ltaWxhciB0byB0aGUgZXhpc3RpbmcgVENQIGZvcndhcmRpbmcgc3VwcG9ydCwKICAgICBleGNlcHQgdGhhdCBpdCBkZXBlbmRzIG9uIHRoZSB0dW4oNCkgbmV0d29yayBpbnRlcmZhY2Ugb24gYm90aCBlbmRzIG9mCiAgICAgdGhlIGNvbm5lY3Rpb24gZm9yIGxheWVyIDIgb3IgbGF5ZXIgMyB0dW5uZWxpbmcuIFRoaXMgZGlmZiBhbHNvIGFkZHMKICAgICBzdXBwb3J0IGZvciBMb2NhbENvbW1hbmQgaW4gdGhlIHNzaCgxKSBjbGllbnQuCiAgICAgb2sgZGptQCwgbWFya3VzQCwgam1jQCAobWFucGFnZXMpLCB0ZXN0ZWQgYW5kIGRpc2N1c3NlZCB3aXRoIG90aGVycwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8wNyAwMzo1MjoyMgogICAgIFtjbGllbnRsb29wLmNdCiAgICAgcmV5ayBmb3Jnb3QgdG8gY29tcGlsZSB3aXRoIC1XZXJyb3IgKG1pc3NpbmcgaGVhZGVyKQogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8wNyAxMDo1MjoxMwogICAgIFtzc2guMV0KICAgICAtIGF2b2lkIGxpbmUgc3BsaXQgaW4gU1lOT1BTSVMKICAgICAtIGFkZCBhcmdzIHRvIC13CiAgICAgLSBraWxsIHRyYWlsaW5nIHdoaXRlc3BhY2UKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMDggMTQ6NTk6NDQKICAgICBbc3NoLjEgc3NoX2NvbmZpZy41XQogICAgIG1ha2UgYCFjb21tYW5kJyBhIGxpdHRsZSBjbGVhcmVyOwogICAgIG9rIHJleWsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMDggMTU6MDY6MjkKICAgICBbc3NoX2NvbmZpZy41XQogICAgIGtlZXAgb3B0aW9ucyBpbiBvcmRlcjsKICAgLSByZXlrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzA4IDE4OjM0OjExCiAgICAgW2F1dGgtb3B0aW9ucy5jIGluY2x1ZGVzLmggbWlzYy5jIG1pc2MuaCByZWFkY29uZi5jIHNlcnZjb25mLmNdCiAgICAgW3NlcnZlcmxvb3AuYyBzc2guYyBzc2hfY29uZmlnLjUgc3NoZF9jb25maWcuNSBjb25maWd1cmUuYWNdCiAgICAgdHdvIGNoYW5nZXMgdG8gdGhlIG5ldyBzc2ggdHVubmVsIHN1cHBvcnQuIHRoaXMgYnJlYWtzIGNvbXBhdGliaWxpdHkKICAgICB3aXRoIHRoZSBpbml0aWFsIGNvbW1pdCBidXQgaXMgcmVxdWlyZWQgZm9yIGEgcG9ydGFibGUgYXBwcm9hY2guCiAgICAgLSBtYWtlIHRoZSB0dW5uZWwgaWQgdV9pbnQgYW5kIHBsYXRmb3JtIGZyaWVuZGx5LCB1c2UgcHJlZGVmaW5lZCB0eXBlcy4KICAgICAtIHN1cHBvcnQgY29uZmlndXJhdGlvbiBvZiBsYXllciAyIChldGhlcm5ldCkgb3IgbGF5ZXIgMwogICAgIChwb2ludC10by1wb2ludCwgZGVmYXVsdCkgbW9kZXMuIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSB1c2luZyB0aGUKICAgICBUdW5uZWwgKHllc3xwb2ludC10by1wb2ludHxldGhlcm5ldHxubykgb3B0aW9uIGlzIHNzaF9jb25maWcoNSkgYW5kCiAgICAgcmVzdHJpY3RlZCBieSB0aGUgUGVybWl0VHVubmVsICh5ZXN8cG9pbnQtdG8tcG9pbnR8ZXRoZXJuZXR8bm8pIG9wdGlvbgogICAgIGluIHNzaGRfY29uZmlnKDUpLgogICAgIG9rIGRqbUAsIG1hbiBwYWdlIGJpdHMgYnkgam1jQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8wOCAyMTozNzo1MAogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgbmV3IHNlbnRlbmNlLCBuZXcgbGluZTsKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMTIgMTM6NDY6MTgKICAgICBbY2hhbm5lbHMuYyBjaGFubmVscy5oIHNlc3Npb24uY10KICAgICBtYWtlIHN1cmUgcHJvdG9jb2wgbWVzc2FnZXMgZm9yIGludGVybmFsIGNoYW5uZWxzIGFyZSBpZ25vcmVkLgogICAgIGFsbG93IGFkanVzdCBtZXNzYWdlcyBmb3Igbm9uLW9wZW4gY2hhbm5lbHM7IHdpdGggYW5kIG9rIGRqbUAKIC0gKGRqbSkgW21pc2MuY10gRGlzYWJsZSB0dW5uZWwgY29kZSBmb3Igbm9uLU9wZW5CU0QgKGZvciBub3cpLCBlbmFibGUKICAgYWdhaW4gYnkgcHJvdmlkaW5nIGEgc3lzX3R1bl9vcGVuKCkgZnVuY3Rpb24gZm9yIHlvdXIgcGxhdGZvcm0gYW5kIAogICBzZXR0aW5nIHRoZSBDVVNUT01fU1lTX1RVTl9PUEVOIGRlZmluZS4gTW9yZSB3b3JrIGlzIHJlcXVpcmVkIHRvIG1hdGNoIAogICBPcGVuQlNEJ3MgdHVubmVsIHByb3RvY29sLCB3aGljaCBwcmVwZW5kcyB0aGUgYWRkcmVzcyBmYW1pbHkgdG8gdGhlIAogICBwYWNrZXQKCjIwMDUxMjAxCiAtIChkam0pIFtlbnZwYXNzLnNoXSBSZW1vdmUgcmVncmVzcyBzY3JpcHQgdGhhdCB3YXMgYWNjaWRlbnRhbGx5IGNvbW1pdHRlZCAKICAgaW4gdG9wIGxldmVsIGRpcmVjdG9yeSBhbmQgbm90IG5vdGljZWQgZm9yIG92ZXIgYSB5ZWFyIDopCgoyMDA1MTEyOQogLSAodGltKSBbc3NoLWtleWdlbi5jXSBNb3ZlIERTQSBsZW5ndGggdGVzdCBhZnRlciBzZXR0aW5nIGRlZmF1bHQgd2hlbgogICBiaXRzID09IDAuCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMS8yOSAwMjowNDo1NQogICAgIFtzc2gta2V5Z2VuLmNdCiAgICAgUG9wdWxhdGUgZGVmYXVsdCBrZXkgc2l6ZXMgYmVmb3JlIGNoZWNraW5nIHRoZW07IGZyb20gJiBvayB0aW1ACiAtICh0aW0pIFtjb25maWd1cmUuYWMgc3NoZC44XSBFbmFibGUgbG9ja2VkIGFjY291bnQgY2hlY2sgKGEgIipMSyoiIHN0cmluZykKICAgZm9yIFVuaXhXYXJlLgoKMjAwNTExMjgKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL3llcy1oZWFkLnNoXSBXb3JrIGFyb3VuZCBicmVha2FnZSBjYXVzZWQgYnkgc29tZQogICB2ZXJzaW9ucyBvZiBHTlUgaGVhZC4gIEJhc2VkIG9uIHBhdGNoIGZyb20gemFwcGFtYW4gYXQgYnVyYXBoYWxpbnV4Lm9yZwogLSAoZHR1Y2tlcikgW2luY2x1ZGVzLmhdIEJ1ZyAjMTEyMjogX19VU0VfR05VIGlzIGEgZ2xpYmMgaW50ZXJuYWwgbWFjcm8sIHVzZQogICBfR05VX1NPVVJDRSBpbnN0ZWFkLiAgUGF0Y2ggZnJvbSB0OG0gYXQgY2VudHJ1bS5jei4KIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzExLzI4IDA1OjE2OjUzCiAgICAgW3NzaC1rZXlnZW4uMSBzc2gta2V5Z2VuLmNdCiAgICAgRW5mb3JjZSBEU0Ega2V5IGxlbmd0aCBvZiBleGFjdGx5IDEwMjQgYml0cyB0byBjb21wbHkgd2l0aCBGSVBTLTE4Ni0yLAogICAgIGluY3JlYXNlIG1pbnVtdW0gUlNBIGtleSBzaXplIHRvIDc2OCBiaXRzIGFuZCB1cGRhdGUgbWFuIHBhZ2UgdG8gcmVmbGVjdAogICAgIHRoZXNlLiAgUGF0Y2ggb3JpZ2luYWxseSBieiMxMTE5IChzZW50aGlsa3VtYXJfc2VuIGF0IGhvdHBvcC5jb20pLAogICAgIG9rIGRqbUAsIGdydWRnaW5nIG9rIGRlcmFhZHRALgogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTEvMjggMDY6MDI6NTYKICAgICBbc3NoLWFnZW50LjFdCiAgICAgVXBkYXRlIGFnZW50IHNvY2tldCBwYXRoIHRlbXBsYXRlcyB0byByZWZsZWN0IHJlYWxpdHksIGNvcnJlY3QgeHJlZiBmb3IKICAgICB0aW1lIGZvcm1hdHMuICBieiMxMTIxLCBwYXRjaCBmcm9tIG9wZW5zc2ggYXQgcm91bWVucGV0cm92LmluZm8sIG9rIGRqbUAKCjIwMDUxMTI2CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzExMjY6IEFJWCA1LjIgYW5kIDUuMyAoYW5kIHByZXN1bWFibHkgbmV3ZXIsCiAgIHdoZW4gdGhleSdyZSBhdmFpbGFibGUpIG5lZWQgdGhlIHJlYWwgVUlEIHNldCBvdGhlcndpc2UgcGFtX2NoYXV0aHRvayB3aWxsCiAgIHNldCBBRE1DSEcgYWZ0ZXIgY2hhbmdpbmcgdGhlIHBhc3N3b3JkLCBmb3JjaW5nIHRoZSB1c2VyIHRvIGNoYW5nZSBpdAogICBhZ2FpbiBpbW1lZGlhdGVseS4KCjIwMDUxMTI1CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBBcHBseSB0aW0ncyBmaXggZm9yIG9sZGVyIHN5c3RlbXMgd2hlcmUgdGhlCiAgIHJlc29sdmVyIHN0YXRlIGluIHJlc29sdi5oIGlzICJzdGF0ZSIgbm90ICJfX3Jlc19zdGF0ZSIuICBXaXRoIHNsaWdodAogICBtb2RpZmljYXRpb24gYnkgbWUgdG8gYWxzbyB3b3JrIG9uIG9sZCBBSVhlcy4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtwcm9ncmVzc21ldGVyLmMgc2NwLmMgc2Z0cC1zZXJ2ZXIuY10gVXNlIGNvcnJlY3QgY2FzdHMgZm9yCiAgIHNucHJpbnRmIGZvcm1hdHMsIGZpeGVzIHdhcm5pbmdzIG9uIHNvbWUgNjQgYml0IHBsYXRmb3Jtcy4gIFBhdGNoIGZyb20KICAgc2hhdyBhdCB2cmFuaXguY29tLCBvayBkam1ACgoyMDA1MTEyNAogLSAoZGptKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluIG9wZW5ic2QtY29tcGF0L2JzZC1hc3ByaW50Zi5jIAogICBvcGVuYnNkLWNvbXBhdC9ic2Qtc25wcmludGYuYyBvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oXSBBZGQgYW4gCiAgIGFzcHJpbnRmKCkgaW1wbGVtZW50YXRpb24sIGFmdGVyIHN5bmNpbmcgb3VyIHt2LH1zbnByaW50ZigpIGltcGxlbWVudGF0aW9uCiAgIHdpdGggc29tZSBleHRyYSBmaXhlcyBmcm9tIFNhbWJhJ3MgdmVyc2lvbi4gV2l0aCBoZWxwIGFuZCBkZWJ1Z2dpbmcgZnJvbSAKICAgZHR1Y2tlciBhbmQgdGltOyBvayBkdHVja2VyQAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gRml4IHR5cG9zIGluIGNvbW1lbnRzIGFuZCBBQ19TRUFSQ0hfTElCIGFyZ3VtZW50CiAgIG9yZGVyIGluIFJlbGlhbnQgVW5peCBibG9jay4gIFBhdGNoIGZyb20gam9oYW5lIGF0IGx5c2F0b3IubGl1LnNlLgogLSAoZHR1Y2tlcikgW3JlZ3Jlc3MvdGVzdC1leGVjLnNoXSBVc2UgMTAyNCBiaXQga2V5cyBzaW5jZSB3ZSBnZW5lcmF0ZSBzbwogICBtYW55IGFuZCB1c2UgdGhlbSBvbmx5IG9uY2UuICBTcGVlZHMgdXAgdGVzdGluZyBvbiBvbGRlci9zbG93ZXIgaGFyZHdhcmUuCgoyMDA1MTEyMgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTEvMTIgMTg6Mzc6NTkKICAgICBbc3NoLWFkZC5jXQogICAgIHNwYWNlCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMS8xMiAxODozODoxNQogICAgIFtzY3AuY10KICAgICBhdm9pZCBjbG9zZSgtMSksIGFzIGluIHJjcDsgb2sgY2xvZGVyCiAgIC0gbWlsbGVydEBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMS8xNSAxMTo1OTo1NAogICAgIFtpbmNsdWRlcy5oXQogICAgIEluY2x1ZGUgc3lzL3F1ZXVlLmggZXhwbGljaXRseSBpbnN0ZWFkIG9mIGFzc3VtaW5nIHNvbWUgb3RoZXIgaGVhZGVyCiAgICAgd2lsbCBwdWxsIGl0IGluLiAgQXQgdGhlIG1vbWVudCBpdCBnZXRzIHB1bGxlZCBpbiBieSBzeXMvc2VsZWN0LmgKICAgICAod2hpY2ggc3NoIGhhcyBubyBidXNpbmVzcyBpbmNsdWRpbmcpIHZpYSBldmVudC5oLiAgT0sgbWFya3VzQAogICAgIChJRCBzeW5jIG9ubHkgaW4gLXBvcnRhYmxlKQogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTEvMjEgMDk6NDI6MTAKICAgICBbYXV0aC1rcmI1LmNdCiAgICAgUGVyZm9ybSBLZXJiZXJvcyBjYWxscyBldmVuIGZvciBpbnZhbGlkIHVzZXJzIHRvIHByZXZlbnQgbGVha2luZwogICAgIGluZm9ybWF0aW9uIGFib3V0IGFjY291bnQgdmFsaWRpdHkuICBieiAjOTc1LCBwYXRjaCBvcmlnaW5hbGx5IGZyb20KICAgICBTZW50aGlsIEt1bWFyLCBzYW5pdHkgY2hlY2tlZCBieSBTaW1vbiBXaWxraW5zb24sIHRlc3RlZCBieSBkam1ALCBiaW9ybkAsCiAgICAgb2sgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTEvMjIgMDM6MzY6MDMKICAgICBbaG9zdGZpbGUuY10KICAgICBDb3JyZWN0IGZvcm1hdC9hcmd1bWVudHMgdG8gZGVidWcgY2FsbDsgc3BvdHRlZCBieSBzaGF3IGF0IHZyYW5peC5jb20KICAgICBvayBkam1ACiAtIChkdHVja2VyKSBbbG9naW5yZWMuY10gQWRkIGNhc3RzIHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZ3MsIHBhdGNoCiAgIGZyb20gc2hhdyBhdCB2cmFuaXguY29tLgoKMjAwNTExMjAKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9vcGVuc3NsLWNvbXBhdC5oXSBBZGQgY29tbWVudCBleHBsYWluaW5nIHdoYXQKICAgaXMgZ29pbmcgb24uCgoyMDA1MTExMgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmNdIFJlc3RvcmUgUG9ydGFibGUtc3BlY2lmaWMKICAgaWZkZWYgbG9zdCBkdXJpbmcgc3luYy4gIFNwb3R0ZWQgYnkgdGltQC4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC97cmVhbHBhdGguYyxzdHJvbGwuYyxycmVzdnBvcnQuY31dICRPcGVuQlNEIHRhZy4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIFVzZSAiJEFXSyIgaW5zdGVhZCBvZiAiYXdrIiBpbiBnY2MgdmVyc2lvbiB0ZXN0LgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gUmVtb3ZlIGR1cGxpY2F0ZSB1dGltZXMoKSBjaGVjay4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL3JlY29uZmlndXJlLnNoXSBGaXggcG90ZW50aWFsIHJhY2UgaW4gdGhlIHJlY29uZmlndXJlCiAgIHRlc3Q6IGlmIHNzaGQgdGFrZXMgdG9vIGxvbmcgdG8gcmVjb25maWd1cmUgdGhlIHN1YnNlcXVlbnQgY29ubmVjdGlvbiB3aWxsCiAgIGZhaWwuICBaYXAgcGlkZmlsZSBiZWZvcmUgSFVQaW5nIHNzaGQgd2hpY2ggd2lsbCByZXdyaXRlIGl0IHdoZW4gaXQncyByZWFkeS4KCjIwMDUxMTEwCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvc2V0ZW52LmNdIE1lcmdlIGNoYW5nZXMgZm9yIF9fZmluZGVudiBmcm9tCiAgIE9wZW5CU0QgZ2V0ZW52LmMgcmV2cyAxLjQgLSAxLjggKEFOU0lmaWNhdGlvbiBvZiBhcmd1bWVudHMsIHJlbW92YWwgb2YKICAgInJlZ2lzdGVyIikuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvc2V0ZW52LmNdIE1ha2UgX19maW5kZW52IHN0YXRpYywgcmVtb3ZlCiAgIHVubmVjZXNzYXJ5IHByb3RvdHlwZS4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9zZXRlbnYuY10gU3luYyBjaGFuZ2VzIGZyb20gT3BlbkJTRCBzZXRlbnYuYwogICByZXZzIDEuNyAtIDEuOS4KIC0gKGR0dWNrZXIpIFthdXRoLWtyYjUuY10gRml4IC1Xc2lnbi1jb21wYXJlIHdhcm5pbmcgaW4gbm9uLUhlaW1kYWwgcGF0aC4KICAgUGF0Y2ggZnJvbSBkam1ALgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gRGlzYWJsZSBwb2ludGVyLXNpZ24gd2FybmluZ3Mgb24gZ2NjIDQuMCsKICAgc2luY2UgdGhleSdyZSBub3QgdXNlZnVsIHJpZ2h0IG5vdy4gIFBhdGNoIGZyb20gZGptQC4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9nZXRncm91cGxpc3QuY10gU3luYyBPcGVuQlNEIHJldnMgMS4xMCAtIDEuMiAoQU5TSQogICBwcm90b3R5cGVzLCByZW1vdmFsIG9mICJyZWdpc3RlciIpLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3N0cmxjYXQuY10gU3luYyBPcGVuQlNEIHJldnMgMS4xMSAtIDEuMTIgKHJlbW92YWwKICAgb2YgInJlZ2lzdGVyIikuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQve0xPVFN9XSBNb3ZlIHRoZSAiT1BFTkJTRCBPUklHSU5BTCIgbWFya2VycyB0bwogICBhZnRlciB0aGUgY29weXJpZ2h0IG5vdGljZXMuICBIYXZpbmcgdGhlbSBhdCB0aGUgdG9wIG5leHQgdG8gdGhlIENWU0lEcwogICBndWFyYW50ZWVzIGEgY29uZmxpY3QgZm9yIGVhY2ggYW5kIGV2ZXJ5IHN5bmMuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvc3RybGNweS5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuOCAtPiAxLjEwLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3NpZ2FjdC5oXSBBZGQgIk9QRU5CU0QgT1JJR0lOQUwiIG1hcmtlci4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9zdHJtb2RlLmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS41IC0+IDEuNy4KICAgUmVtb3ZhbCBvZiByY3NpZCwgIndoaXRlb3V0IiBpbm9kZSB0eXBlLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2Jhc2VuYW1lLmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS4xMSAtPiAxLjE0LgogICBSZW1vdmFsIG9mIHJjc2lkLCB3aWxsIG5vIGxvbmdlciBzdHJsY3B5IHBhcnRzIG9mIHRoZSBzdHJpbmcuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvc3RydG9sbC5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuNCAtPiAxLjUuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvc3RydG91bC5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuNSAtPiAxLjcuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcmVhZHBhc3NwaHJhc2UuY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjE2IC0+IDEuMTguCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcmVhZHBhc3NwaHJhc2UuaF0gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjMgLT4gMS41LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2dsb2IuY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjIyIC0+IDEuMjUuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZ2xvYi5oXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuOCAtPiAxLjkuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZ2V0Y3dkLmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS45IC0+IDEuMTQuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZ2V0Y3dkLmNdIFJlcGxhY2UgbHN0YXQgd2l0aCBmc3RhdCB0byBtYXRjaCB1cAogICB3aXRoIE9wZW5CU0QgY29kZSBzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IHBsYXRmb3JtcyB3aXRob3V0IGZzdGF0IGFueSBtb3JlLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2luZXRfYXRvbi5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuNyAtPiAxLjkuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvaW5ldF9udG9hLmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS40IC0+IDEuNi4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9pbmV0X250b3AuY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjUgLT4gMS43LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2RhZW1vbi5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuNSAtPiAxLjYuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvc3Ryc2VwLmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS41IC0+IDEuNi4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9kYWVtb24uY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjEwIC0+IDEuMTMuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvbWt0ZW1wLmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS4xNyAtPiAxLjE5LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3JyZXN2cG9ydC5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuNiAtPiAxLjguCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYmluZHJlc3Zwb3J0LmNdIEFkZCAiT1BFTkJTRCBPUklHSU5BTCIgbWFya2VyLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JpbmRyZXN2cG9ydC5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuMTYgLT4gMS4xNy4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9zaWdhY3QuY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjMgLT4gMS40LgogICBJZCBhbmQgY29weXJpZ2h0IHN5bmMgb25seSwgdGhlcmUgd2VyZSBubyBzdWJzdGFudGlhbCBjaGFuZ2VzIHdlIG5lZWQuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYnNkLWNsb3NlZnJvbS5jIG9wZW5ic2QtY29tcGF0L2Jhc2U2NC5jXQogICAtV3NpZ24tY29tcGFyZSBmaXhlcyBmcm9tIGRqbS4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9zaWdhY3QuaF0gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjIgLT4gMS4zLgogICBJZCBhbmQgY29weXJpZ2h0IHN5bmMgb25seSwgdGhlcmUgd2VyZSBubyBzdWJzdGFudGlhbCBjaGFuZ2VzIHdlIG5lZWQuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBUcnkgdG8gZ2V0IHRoZSBnY2MgdmVyc2lvbiBudW1iZXIgaW4gYSB3YXkgdGhhdAogICBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIHZlcnNpb25zLCBhbmQgdXNlIGEgc2FmZXIgZGVmYXVsdC4KCjIwMDUxMTA1CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMDcgMTE6MTM6NTcKICAgICBbc3NoLWtleWdlbi5jXQogICAgIGNoYW5nZSBEU0EgZGVmYXVsdCBiYWNrIHRvIDEwMjQsIGFzIGl0J3MgZGVmaW5lZCBmb3IgMTAyNCBiaXRzIG9ubHkKICAgICBhbmQgdGhpcyBjYXVzZXMgaW50ZXJvcCBwcm9ibGVtcyB3aXRoIG90aGVyIGNsaWVudHMuICBtb3Jlb3ZlciwKICAgICBpbiBvcmRlciB0byBpbXByb3ZlIHRoZSBzZWN1cml0eSBvZiBEU0EgeW91IG5lZWQgdG8gY2hhbmdlIG1vcmUKICAgICBjb21wb25lbnRzIG9mIERTQSBrZXkgZ2VuZXJhdGlvbiAoZS5nLiB0aGUgaW50ZXJuYWwgU0hBMSBoYXNoKTsKICAgICBvayBkZXJhYWR0CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzEwIDEwOjIzOjA4CiAgICAgW2NoYW5uZWxzLmMgY2hhbm5lbHMuaCBjbGllbnRsb29wLmMgc2VydmVybG9vcC5jIHNlc3Npb24uY10KICAgICBmaXggcmVncmVzc2lvbiBJIGludHJvZHVjZWQgaW4gNC4yOiBYMTEgZm9yd2FyZGluZ3MgaW5pdGlhdGVkIGFmdGVyCiAgICAgYSBzZXNzaW9uIGhhcyBleGl0ZWQgKGUuZy4gIihzbGVlcCA1OyB4dGVybSkgJiIpIHdvdWxkIG5vdCBzdGFydC4KICAgICBieiAjMTA4NiByZXBvcnRlZCBieSB0OG0gQVQgY2VudHJ1bS5jejsgb2sgbWFya3VzQCBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8xMSAyMzozNzozNwogICAgIFtjaGFubmVscy5jXQogICAgIGJ6ICMxMDc2IHNldCBTT19SRVVTRUFERFIgb24gWDExIGZvcndhcmRpbmcgbGlzdG5lciBzb2NrZXRzLCBwcmV2ZW50aW5nCiAgICAgYmluZCgpIGZhaWx1cmUgd2hlbiBhIHByZXZpb3VzIGNvbm5lY3Rpb24ncyBsaXN0ZW5lcnMgYXJlIGluIFRJTUVfV0FJVCwKICAgICByZXBvcnRlZCBieSBwbGF0dG5lciBBVCBpbmYuZXRoei5jaDsgb2sgZHR1Y2tlckAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzEzIDE0OjAzOjAxCiAgICAgW2F1dGgyLWdzcy5jIGdzcy1nZW5yLmMgZ3NzLXNlcnYuY10KICAgICByZW1vdmUgdW5uZWVkZWQgI2luY2x1ZGVzOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8xMyAxNDoyMDozNwogICAgIFtnc3Mtc2Vydi5jXQogICAgIHNwZWxsaW5nIGluIGNvbW1lbnRzCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8xMyAxOTowODowOAogICAgIFtnc3Mtc2Vydi1rcmI1LmMgZ3NzLXNlcnYuY10KICAgICB1bnVzZWQgZGVjbGFyYXRpb25zOyBvayBkZXJhYWR0QAogICAgIChpZCBzeW5jIG9ubHkgZm9yIGdzcy1zZXJ2LWtyYjUuYykKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzEzIDE5OjEzOjQxCiAgICAgW2Rucy5jXQogICAgIHVubmVlZGVkICNpbmNsdWRlLCB1bnVzZWQgZGVjbGFyYXRpb24sIGxpdHRsZSBrbmY7IG9rIGRlcmFhZHRACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8xMyAyMjoyNDozMQogICAgIFthdXRoMi1nc3MuYyBnc3MtZ2Vuci5jIGdzcy1zZXJ2LmMgbW9uaXRvci5jXQogICAgIEtORjsgb2sgZGptQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMTQgMDI6MTc6NTkKICAgICBbc3NoLWtleWdlbi5jIHNzaC5jIHNzaGNvbm5lY3QyLmNdCiAgICAgbm8gdHJhaWxpbmcgIlxuIiBmb3IgbG9nIGZ1bmN0aW9uczsgb2sgZGptQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMTQgMDI6Mjk6MzcKICAgICBbY2hhbm5lbHMuYyBjbGllbnRsb29wLmNdCiAgICAgZnJlZSgpLT54ZnJlZSgpOyBvayBkam1ACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8xNSAxNToyODoxMgogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgbWFrZSBleHRlcm5hbCBkZWZpbml0aW9uIHN0YXRpYzsgb2sgZGVyYWFkdEAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzE3IDEzOjQ1OjA1CiAgICAgW2Rucy5jXQogICAgIGZpeCBtZW1vcnkgbGVha3MgZnJvbSAyIHNvdXJjZXM6CiAgICAgICAgIDEpIGtleV9maW5nZXJwcmludF9yYXcoKQogICAgICAgICAyKSBtYWxsb2MgaW4gZG5zX3JlYWRfcmRhdGEoKQogICAgIG9rIGpha29iQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMTcgMTQ6MDE6MjgKICAgICBbZG5zLmNdCiAgICAgcmVtb3ZlICNpZmRlZiBMV1JFUzsgb2sgamFrb2JACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8xNyAxNDoxMzozNQogICAgIFtkbnMuYyBkbnMuaF0KICAgICBtb3JlIGNsZWFudXBzOyBvayBqYWtvYkAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMzAgMDE6MjM6MTkKICAgICBbc3NoX2NvbmZpZy41XQogICAgIG1lbnRpb24gY29udHJvbCBzb2NrZXQgZmFsbGJhY2sgYmVoYXZpb3VyLCByZXBvcnRlZCBieSAKICAgICB0cnlwb25yYWogQVQgZ21haWwuY29tCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzMwIDA0OjAxOjAzCiAgICAgW3NzaC1rZXlzY2FuLmNdCiAgICAgbWFrZSBzc2gta2V5Z2VuIGRpc2NhcmQganVuayBmcm9tIHNlcnZlciBiZWZvcmUgU1NILSBpZGVudCwgc3BvdHRlZCBieQogICAgIGRhdmUgQVQgY2lydC5uZXQ7IG9rIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzMwIDA0OjAzOjI0CiAgICAgW3NzaC5jXQogICAgIGZpeCBtaXNsZWFkaW5nIGRlYnVnIG1lc3NhZ2U7IG9rIGR0dWNrZXJACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8zMCAwODoyOToyOQogICAgIFtjYW5vaG9zdC5jIHNzaGQuY10KICAgICBDaGVjayBmb3IgY29ubmVjdGlvbnMgd2l0aCBJUCBvcHRpb25zIGVhcmxpZXIgYW5kIGRyb3Agc2lsZW50bHkuICBvayBkam1ACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzMwIDA4OjQzOjQ3CiAgICAgW3NzaF9jb25maWcuNV0KICAgICByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZTsKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMzAgMDg6NTI6MTgKICAgICBbY2xpZW50bG9vcC5jIHBhY2tldC5jIHNlcnZlcmxvb3AuYyBzZXNzaW9uLmMgc3NoLWFnZW50LmMgc3NoLWtleWdlbi5jXQogICAgIFtzc2guYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdDEuYyBzc2hkLmNdCiAgICAgbm8gbmVlZCB0byBlc2NhcGUgc2luZ2xlIHF1b3RlcyBpbiBjb21tZW50cywgbm8gYmluYXJ5IGNoYW5nZQogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMzEgMDY6MTU6MDQKICAgICBbc2Z0cC5jXQogICAgIEZpeCBzb3J0aW5nIHdpdGggImxzIC0xIiBjb21tYW5kLiBGcm9tIFJvYmVydCBUc2FpLCAibG9va3MgcmlnaHQiIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzMxIDExOjEyOjQ5CiAgICAgW3NzaC1rZXlnZW4uMSBzc2gta2V5Z2VuLmNdCiAgICAgZ2VuZXJhdGUgYSBwcm90b2NvbCAyIFJTQSBrZXkgYnkgZGVmYXVsdAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8zMSAxMTo0ODoyOQogICAgIFtzZXJ2ZXJsb29wLmNdCiAgICAgbWFrZSBzdXJlIHdlIGNsZWFuIHVwIHd0bXAsIGV0Yy4gZmlsZSB3aGVuIHdlIHJlY2VpdmUgYSBTSUdURVJNLAogICAgIFNJR0lOVCBvciBTSUdRVUlUIHdoZW4gcnVubmluZyB3aXRob3V0IHByaXZpbGVnZSBzZXBhcmF0aW9uICh0aGUKICAgICBub3JtYWwgcHJpdnNlcCBjYXNlIGlzIGFscmVhZHkgT0spLiBQYXRjaCBtYWlubHkgYnkgZHR1Y2tlckAgYW5kCiAgICAgc2VudGhpbGt1bWFyX3NlbiBBVCBob3Rwb3AuY29tOyBvayBkdHVja2VyQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8zMSAxOTo1NToyNQogICAgIFtzc2gta2V5Z2VuLjFdCiAgICAgZ3JhbW1hcjsKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzExLzAzIDEzOjM4OjI5CiAgICAgW2Nhbm9ob3N0LmNdCiAgICAgQ2FjaGUgcmV2ZXJzZSBsb29rdXBzIHdpdGggYW5kIHdpdGhvdXQgRE5TIHNlcGFyYXRlbHk7IG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTEvMDQgMDU6MTU6NTkKICAgICBba2V4LmMga2V4Lmgga2V4ZGguYyBrZXhkaGMuYyBrZXhkaHMuYyBrZXhnZXguYyBrZXhnZXhjLmMga2V4Z2V4cy5jXQogICAgIHJlbW92ZSBoYXJkY29kZWQgaGFzaCBsZW5ndGhzIGluIGtleSBleGNoYW5nZSBjb2RlLCBhbGxvd2luZwogICAgIGltcGxlbWVudGF0aW9uIG9mIEtFWCBtZXRob2RzIHdpdGggZGlmZmVyZW50IGhhc2hlcyAoZS5nLiBTSEEtMjU2KTsKICAgICBvayBtYXJrdXNAIGR0dWNrZXJAIHN0ZXZlc2tACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzExLzA1IDA1OjAxOjE1CiAgICAgW2J1ZmF1eC5jXQogICAgIEZpeCBsZWFrcyBpbiBlcnJvciBwYXRocywgYnogIzExMDkgYW5kICMxMTEwIHJlcG9ydGVkIGJ5IGtyZW1lbmVrIEFUCiAgICAgY3Muc3RhbmZvcmQuZWR1OyBvayBkdHVja2VyQAogLSAoZHR1Y2tlcikgW1JFQURNRS5wbGF0Zm9ybV0gQWRkIFBBTSBzZWN0aW9uLgogLSAoZGptKSBbb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5hbWUuY10gU3luYyB0byBsYXRlc3QgT3BlbkJTRCB2ZXJzaW9uLAogICByZXNvbHZpbmcgbWVtb3J5IGxlYWsgYnojMTExMSByZXBvcnRlZCBieSBrcmVtZW5layBBVCBjcy5zdGFuZm9yZC5lZHU7CiAgIG9rIGR0dWNrZXJACgoyMDA1MTEwMgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JzZC1taXNjLmNdIEJ1ZyAjMTEwODogZml4IGJyb2tlbiBzdHJkdXAoKS4KICAgUmVwb3J0ZWQgYnkgb2xhdmkgYXQgaXB1bnBsdWdnZWQuY29tIGFuZCBhbnRvaW5lLmJyb2RpbiBhdCBsYXBvc3RlLm5ldAogICB2aWEgRnJlZUJTRC4KCjIwMDUxMDMwCiAtIChkam0pIFtjb250cmliL3N1c2Uvb3BlbnNzaC5zcGVjIGNvbnRyaWIvc3VzZS9yYy4KICAgc3NoZCBjb250cmliL3N1c2Uvc3lzY29uZmlnLnNzaF0gQnVnICMxMTA2OiBVcGRhdGVkIFN1U0Ugc3BlYyBhbmQgaW5pdCAKICAgZmlsZXMgZnJvbSBpbW9yZ2FuIEFUIG5hcy5uYXNhLmdvdgogLSAoZHR1Y2tlcikgW3Nlc3Npb24uY10gQnVnICMxMDQ1ZG8gbm90IGNoZWNrIC9ldGMvbm9sb2dpbiB3aGVuIFBBTSBpcwogICBlbmFibGVkLCBpbnN0ZWFkIGFsbG93IFBBTSB0byBoYW5kbGUgaXQuICBOb3RlIHRoYXQgb24gcGxhdGZvcm1zIHVzaW5nIFBBTSwKICAgdGhlIHBhbV9ub2xvZ2luIG1vZHVsZSBzaG91bGQgYmUgYWRkZWQgdG8gc3NoZCdzIHNlc3Npb24gc3RhY2sgaW4gb3JkZXIgdG8KICAgbWFpbnRhaW4gZXhpc2luZyBiZWhhdmlvdXIuICBCYXNlZCBvbiBwYXRjaCBhbmQgZGlzY3Vzc2lvbiBmcm9tIHQ4bSBhdAogICBjZW50cnVtLmN6LCBvayBkam1ACgoyMDA1MTAyNQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gUmVsb2NhdGUgTExPTkdfTUFYIGNhbGN1bGF0aW9uIHRvIGFmdGVyIHRoZQogICBzaXplb2YobG9uZyBsb25nKSBjaGVja3MsIHRvIG1ha2UgZml4aW5nIGJ1ZyAjMTEwNCBlYXNpZXIgKG5vIGNoYW5nZXMKICAgeWV0KS4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTEwNDogVHJ1NjQncyBwcmludGYgZmFtaWx5IGRvZXNuJ3QKICAgdW5kZXJzdGFuZCAiJWxsZCIsIGV2ZW4gdGhvdWdoIHRoZSBjb21waWxlciBoYXMgImxvbmcgbG9uZyIsIHNvIGhhbmRsZQogICBpdCBhcyBhIHNwZWNpYWwgY2FzZS4gIFBhdGNoIHRlc3RlZCBieSBtY2Fza2lsbC5zY290dCBhdCBlcGEuZ292LgogLSAoZHR1Y2tlcikgW2NvbnRyaWIvY3lnd2luL3NzaC11c2VyLWNvbmZpZ10gUmVtb3ZlIGR1cGxpY2F0ZSB5ZXMvbm8KICAgcHJvbXB0LiAgUGF0Y2ggZnJvbSB2aW5zY2hlbiBhdCByZWRoYXQuY29tLgoKMjAwNTEwMTcKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTA5NzogRml4IGNvbmZpZ3VyZSBmb3IgY3Jvc3MtY29tcGlsaW5nLgogICAvZXRjL2RlZmF1bHQvbG9naW4gcmVwb3J0IGFuZCB0ZXN0aW5nIGZyb20gYWFiYWtlciBhdCBpZWUub3JnLCBjb3JyZWN0aW9ucwogICBmcm9tIHRpbUAuCgoyMDA1MTAwOQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBkZWZpbmVzLmggb3BlbmJzZC1jb21wYXQvdmlzLntjLGh9XSBTeW5jIGN1cnJlbnQKICAgdmVyc2lvbnMgZnJvbSBPcGVuQlNELiAgb2sgZGptQAoKMjAwNTEwMDgKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTA5ODogZGVmaW5lICRNQUlMIGZvciBIUC1VWDsgcmVwb3J0IGZyb20KICAgYnJpYW4uc21pdGggYXQgYWdpbGVudCBjb20uCiAtIChkam0pIFtjb25maWd1cmUuYWNdIG1pc3NpbmcgJ3Rlc3QnIGNhbGwgZm9yIC13aXRoLVdlcnJvciB0ZXN0CgoyMDA1MTAwNQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBzc2hkLjhdIEVuYWJsZSBsb2NrZWQgYWNjb3VudCBjaGVjayAoYSBwcmVwZW5kZWQKICAgIipMT0NLRUQqIiBzdHJpbmcpIGZvciBGcmVlQlNELiAgUGF0Y2ggamVyZW1pZSBhdCBsZS1oZW4ub3JnIGFuZAogICBzZW50aGlsa3VtYXJfc2VuIGF0IGhvdHBvcC5jb20uCgoyMDA1MTAwMwogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wOS8wNyAwODo1Mzo1MwogICAgIFtjaGFubmVscy5jXQogICAgIGVuZm9yY2UgY2hhbmlkICE9IE5VTEw7IG9rIGRqbQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wOS8wOSAxOToxODowNQogICAgIFtjbGllbnRsb29wLmNdCiAgICAgdHlwbzsgZnJvbSBtYXJrIGF0IG1jcy52dXcuYWMubnosIGJ1ZyAjMTA4MgogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wOS8xMyAyMzo0MDowNwogICAgIFtzc2hkLmMgc3NoLmMgbWlzYy5oIHNmdHAuYyBzc2gta2V5Z2VuLmMgc3NoLWtleXNpZ24uYyBzZnRwLXNlcnZlci5jCiAgICAgc2NwLmMgbWlzYy5jIHNzaC1rZXlzY2FuLmMgc3NoLWFkZC5jIHNzaC1hZ2VudC5jXQogICAgIGVuc3VyZSB0aGF0IHN0ZGlvIGZkcyBhcmUgYXR0YWNoZWQ7IG9rIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA5LzE5IDExOjM3OjM0CiAgICAgW3NzaF9jb25maWcuNSBzc2guMV0KICAgICBtZW50aW9uIGFiaWxpdHkgdG8gc3BlY2lmeSBiaW5kX2FkZHJlc3MgZm9yIER5bmFtaWNGb3J3YXJkIGFuZCAtRCBvcHRpb25zOwogICAgIGJ6IzEwNzcgc3BvdHRlZCBieSBIYXJ1eWFtYSBTZWlnbwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wOS8xOSAxMTo0NzowOQogICAgIFtzc2hkLmNdCiAgICAgc3RvcCBjb25uZWN0aW9uIGFib3J0IG9uIHJla2V5IHdpdGggZGVsYXllZCBjb21wcmVzc2lvbiBlbmFibGVkIHdoZW4KICAgICBwb3N0LWF1dGggcHJpdnNlcCBpcyBkaXNhYmxlZCAoZS5nLiB3aGVuIHJvb3QgaXMgbG9nZ2VkIGluKTsgb2sgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDkvMTkgMTE6NDg6MTAKICAgICBbZ3NzLXNlcnYuY10KICAgICB0eXBvCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA5LzE5IDE1OjM4OjI3CiAgICAgW3NzaC4xXQogICAgIHNvbWUgbW9yZSAuQmsvLkVrIHRvIGF2b2lkIHVnbHkgbGluZSBzcGxpdDsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDkvMTkgMTU6NDI6NDQKICAgICBbc3NoLmNdCiAgICAgdXBkYXRlIC1EIHVzYWdlIGhlcmUgdG9vOwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wOS8xOSAyMzozMTozMQogICAgIFtzc2guMV0KICAgICBzcGVsbGluZyBuaXQgZnJvbSBzdGV2ZXNrQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wOS8yMSAyMzozNjo1NAogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIGFxdWlyZSAtPiBhY3F1aXJlLCBmcm9tIHN0ZXZlc2tACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA5LzIxIDIzOjM3OjExCiAgICAgW3NzaGQuY10KICAgICBjaGFuZ2UgbGFiZWwgYXQgbWFya3VzQCdzIHJlcXVlc3QKICAgLSBqYXJlZHlAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDkvMzAgMjA6MzQ6MjYKICAgICBbc3NoLWtleXNjYW4uMV0KICAgICBkZXBsb3kgLkFuIC1ub3NwbGl0OyBvayBqbWMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzAzIDA3OjQ0OjQyCiAgICAgW2Nhbm9ob3N0LmNdCiAgICAgUmVsb2NhdGUgY2hlY2tfaXBfb3B0aW9ucyBjYWxsIHRvIHByZXZlbnQgbG9nZ2luZyBvZiBnYXJiYWdlIGZvcgogICAgIGNvbm5lY3Rpb25zIHdpdGggSVAgb3B0aW9ucyBzZXQuICBieiMxMDkyIGZyb20gRGF2aWQgTGVvbmFyZCwKICAgICAibG9va3MgZ29vZCIgZGVyYWFkdEAKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL1JFQURNRS5yZWdyZXNzXSBCdWcgIzk4OTogRG9jdW1lbnQgbGltaXRhdGlvbiB0aGF0IHNjcAogICBpcyByZXF1aXJlZCBpbiB0aGUgc3lzdGVtIHBhdGggZm9yIHRoZSBtdWx0aXBsZXggdGVzdCB0byB3b3JrLgoKMjAwNTA5MzAKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oXSBCdWcgIzEwOTY6IEFkZCBwcm90b3R5cGUKICAgZm9yIHN0cnRvbGwuICBQYXRjaCBmcm9tIG8uZmxlYmJlIGF0IHNjaWVuY2UtY29tcHV0aW5nLmRlLgogLSAoZHR1Y2tlcikgW21vbml0b3IuY10gQnVnICMxMDg3OiBTZW5kIGxvZ2lubXNnIHRvIHByZWF1dGggcHJpdnNlcAogICBjaGlsZCBkdXJpbmcgUEFNIGFjY291bnQgY2hlY2sgd2l0aG91dCBjbGVhcmluZyBpdC4gIFRoaXMgcmVzdG9yZXMgdGhlCiAgIHBvc3QtbG9naW4gd2FybmluZ3Mgc3VjaCBhcyBMREFQIHBhc3N3b3JkIGV4cGlyeS4gIFBhdGNoIGZyb20gVG9tYXMgTXJhegogICB3aXRoIGhlbHAgZnJvbSBzZXZlcmFsIG90aGVycy4KCjIwMDUwOTI5CiAtIChkdHVja2VyKSBbbW9uaXRvcl93cmFwLmNdIFJlbW92ZSBkdXBsaWNhdGUgZGVmaW5pdGlvbiBvZiBsb2dpbm1zZwogICBpbnRyb2R1Y2VkIGR1cmluZyBzeW5jLgoKMjAwNTA5MjgKIC0gKGR0dWNrZXIpIFtlbnRyb3B5LmNdIFVzZSB1X2NoYXIgZm9yIHJlY2VpdmluZyBSTkcgc2VlZCBmb3IgY29uc2lzdGVuY3kuCiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gQnVnICMxMDI4OiBzZW5kIGZpbmFsIG5vbi1xdWVyeSBtZXNzYWdlcyBmcm9tCiAgIFBBTSB2aWEga2V5Ym9hcmQtaW50ZXJhY3RpdmUuICBQYXRjaCB0ZXN0ZWQgYnkgdGhlIGZvbGtzIGF0IFZpbnRlbGEuCgoyMDA1MDkyNwogLSAoZHR1Y2tlcikgW2VudHJvcHkuY10gUmVtb3ZlIHVubmVjZXNzYXJ5IHRlc3RzIGZvciBnZXR1aWQgYW5kIGdldGV1aWQKICAgY2FsbHMsIHNpbmNlIHRoZXkgY2FuJ3QgcG9zc2libHkgZmFpbC4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtlbnRyb3B5LmMgZW50cm9weS5oIHNzaGQuY10gUGFzcyBSTkcgc2VlZCB0byB0aGUgcmVleGVjJ2VkCiAgIHByb2Nlc3Mgd2hlbiBzc2hkIHJlbGllcyBvbiBzc2gtcmFuZG9tLWhlbHBlci4gIFNob3VsZCByZXN1bHQgaW4gZmFzdGVyCiAgIGxvZ2lucyBvbiBzeXN0ZW1zIHdpdGhvdXQgYSByZWFsIHJhbmRvbSBkZXZpY2Ugb3IgcHJuZ2QuICBvayBkam1ACgoyMDA1MDkyNAogLSAoZHR1Y2tlcikgW2F1dGgyLmNdIE1vdmUgc3RhcnRfcGFtKCkgY2FsbHMgb3V0IG9mIGlmLWVsc2UgYmxvY2sgdG8gcmVtb3ZlCiAgIGR1cGxpY2F0ZSBjYWxsLiAgb2sgZGptQAoKMjAwNTA5MjIKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIFVzZSAtUiBsaW5rZXIgZmxhZyBmb3IgbGliZWRpdCB0b287IHBhdGNoIGZyb20KICAgc2tlbGV0ZW4gYXQgc2hpbGxlc3QubmV0LgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gRml4IGhlbHAgZm9yIC0td2l0aC1vcGVuc2M7IHBhdGNoIGZyb20gc2tlbGV0ZW4gYXQKICAgc2hpbGxlc3QubmV0LgoKMjAwNTA5MTkKIC0gKHRpbSkgW2FjbG9jYWwubTQgY29uZmlndXJlLmFjXSBEZWxldGUgYWNjb25maWcuaCBhbmQgYWRkIHRlbXBsYXRlcyB0bwogICBBQ19ERUZJTkUgYW5kIEFDX0RFRklORV9VTlFVT1RFRCB0byBxdWlldCBhdXRvY29uZiAyLjU5IHdhcm5pbmcgbWVzc2FnZXMuCiAgIG9rIGR0dWNrZXJACgoyMDA1MDkxMgogLSAodGltKSBbY29uZmlndXJlLmFjXSBCdWcgMTA3OC4gRml4IC0td2l0aG91dC1rZXJiZXJvczUuIFJlcG9ydGVkIGJ5CiAgIE1pa2UgRnJ5c2luZ2VyLgoKMjAwNTA5MDgKIC0gKHRpbSkgW2RlZmluZXMuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LXV3LmNdIEFkZCBsb25nIHBhc3N3b3JkIHN1cHBvcnQgdG8KICAgT3BlblNlcnZlciA2IGFuZCBhZGQgb3NyNWJpZ2NyeXB0IHN1cHBvcnQgc28gd2hlbiBzb21lb25lIG1pZ3JhdGVzCiAgIHBhc3N3b3JkcyBiZXR3ZWVuIFVuaXhXYXJlIGFuZCBPcGVuU2VydmVyIHRoZXkgd2lsbCBzdGlsbCB3b3JrLiBPSyBkdHVja2VyQAoKMjAwNTA5MDEKIC0gKGRqbSkgVXBkYXRlIFJQTSBzcGVjIGZpbGUgdmVyc2lvbnMKCjIwMDUwODMxCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDgvMzAgMjI6MDg6MDUKICAgICBbZ3NzLXNlcnYuYyBzc2hjb25uZWN0Mi5jXQogICAgIGRlc3Ryb3kgY3JlZGVudGlhbHMgaWYga3JiNV9rdXNlcm9rKCkgY2FsbCBmYWlscy4gU3RvcHMgY3JlZGVudGlhbHMgYmVpbmcKICAgICBkZWxlZ2F0ZWQgdG8gdXNlcnMgd2hvIGFyZSBub3QgYXV0aG9yaXNlZCBmb3IgR1NTQVBJQXV0aGVudGljYXRpb24gd2hlbgogICAgIEdTU0FQSURlbGV0ZWdhdGVDcmVkZW50aWFscz15ZXMgYW5kIGFub3RoZXIgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIAogICAgIHN1Y2NlZWRzOyBieiMxMDczIHJlcG9ydGVkIGJ5IHBhdWwubW9vcmUgQVQgY2VudHJpZnkuY29tLCBmaXggYnkgCiAgICAgc2ltb24gQVQgc3h3Lm9yZy51aywgdGVzdGVkIHRvZGRAIGJpb3JuQCBqYWtvYkA7IG9rIGRlcmFhZHRACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA4LzMxIDA5OjI4OjQyCiAgICAgW3ZlcnNpb24uaF0KICAgICA0LjIKIC0gKGR0dWNrZXIpIFtSRUFETUVdIFVwZGF0ZSByZWxlYXNlIG5vdGUgVVJMIHRvIDQuMgogLSAodGltKSBbY29uZmlndXJlLmFjIGF1dGguYyBkZWZpbmVzLmggc2Vzc2lvbi5jIG9wZW5ic2QtY29tcGF0L3BvcnQtdXcuYwogICBvcGVuYnNkLWNvbXBhdC9wb3J0LXV3Lmggb3BlbmJzZC1jb21wYXQveGNyeXB0LmNdIGxpYmlhZiBjbGVhbnVwLiBEaXNhYmxlCiAgIGxpYmlhZiBiaXRzIGZvciBPcGVuU2VydmVyNi4gRnJlZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGlhX2dldF9sb2dwd2QoKS4KICAgRmVlZGJhY2sgYW5kIE9LIGR0dWNrZXJACgoyMDA1MDgzMAogLSAodGltKSBbY29uZmlndXJlLmFjXSBCYWNrIG91dCBsYXN0IGNoYW5nZS4gSXQgbmVlZHMgdG8gYmUgZG9uZSBkaWZmZXJlbnRseS4KCjIwMDUwODI5CiAtICh0aW0pIFtjb25maWd1cmUuYWNdIGlhX29wZW5pbmZvKCkgc2VlbXMgYnJva2VuIG9uIE9TUjYuIExpbWl0IFVXIGxvbmcKICAgcGFzc3dvcmQgc3VwcG9ydCB0byA3LnggZm9yIG5vdy4KCjIwMDUwODI2CiAtICh0aW0pIFtDUkVESVRTIExJQ0VOQ0UgYXV0aC5jIGNvbmZpZ3VyZS5hYyBkZWZpbmVzLmggaW5jbHVkZXMuaCBzZXNzaW9uLmMKICAgb3BlbmJzZC1jb21wYXQvTWFrZWZpbGUuaW4gb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaAogICBvcGVuYnNkLWNvbXBhdC94Y3J5cHQuY10gTmV3IGZpbGVzIFtvcGVuc3NoL29wZW5ic2QtY29tcGF0L3BvcnQtdXcuYwogICBvcGVuc3NoL29wZW5ic2QtY29tcGF0L3BvcnQtdXcuaF0gU3VwcG9ydCBsb25nIHBhc3N3b3JkcyAoPiA4LWNoYXIpCiAgIG9uIFVuaXhXYXJlIDcgZnJvbSBEaGlyYWogR3VsYXRpIGFuZCBBaHNhbiBSYXNoaWQuIENsZWFudXAgYW5kIHRlc3RpbmcKICAgYnkgdGltQC4gRmVlZGJhY2sgYW5kIE9LIGR0dWNrZXJACgoyMDA1MDgyMwogLSAoZHR1Y2tlcikgW3JlZ3Jlc3MvdGVzdC1leGVjLnNoXSBEbyBub3QgcHJlcGVuZCBhbiBleHRyYSAiLyIgdG8gYSBmdWxseS0KICAgcXVhbGlmaWVkIHNzaGQgcGF0aG5hbWUgc2luY2Ugc29tZSBzeXN0ZW1zIChlZyBDeWd3aW4pIG1heSBjb25zaWRlciAiL2ZvbyIKICAgYW5kICIvL2ZvbyIgdG8gYmUgZGlmZmVyZW50LiAgU3BvdHRlZCBieSB2aW5zY2hlbiBhdCByZWRoYXQuY29tLgogLSAodGltKSBbY29uZmlndXJlLmFjXSBOb3QgYWxsIGdjYydzIHN1cHBvcnQgLVdzaWduLWNvbXBhcmUuIEVuaGFuY2VtZW50cwogICBhbmQgT0sgZHR1Y2tlckAKIC0gKHRpbSkgW2RlZmluZXMuaF0gUEFUSF9NQVggYml0cyBmb3IgT3BlblNlcnZlciBPSyBkdHVja2VyQAoKMjAwNTA4MjEKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgZGVmaW5lcy5oIGluY2x1ZGVzLmggc2Z0cC5jXSBBZGQgc3VwcG9ydCBmb3IKICAgTHlueE9TLCBwYXRjaCBmcm9tIE9sbGkgU2F2aWEgKG9wcyBhdCBpa2kuZmkpLiAgb2sgZGptQAoKMjAwNTA4MTYKIC0gKGRqbSkgW3R0eW1vZGVzLmNdIGJ1Z3ppbGxhICMxMDI1OiBGaXggZW5jb2Rpbmcgb2YgX1BPU0lYX1ZESVNBQkxFLAogICBmcm9tIEphY29iIE5ldmluczsgb2sgZHR1Y2tlckAKCjIwMDUwODE1CiAtICh0aW0pIFtzZnRwLmNdIHdyYXAgZWxfZW5kKCkgaW4gI2lmZGVmIFVTRV9MSUJFRElUCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIGNvcnJlY3Rpb25zIHRvIGxpYmVkaXQgdGVzdHMuIFJlcG9ydCBhbmQgcGF0Y2hlcwogICBieSBza2VsZXRlbiBBVCBzaGlsbGVzdC5uZXQKCjIwMDUwODEyCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDcvMjggMTc6MzY6MjIKICAgICBbcGFja2V0LmNdCiAgICAgbWlzc2luZyBwYWNrZXRfaW5pdF9jb21wcmVzc2lvbigpOyBmcm9tIHNvbGFyCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA3LzMwIDAxOjI2OjE2CiAgICAgW3NzaC5jXQogICAgIGZpeCAtRCBsaXN0ZW5faG9zdCBpbml0aWFsaXNhdGlvbiwgc28gaXQgcGlja3MgdXAgZ2F0ZXdheV9wb3J0cyBzZXR0aW5nCiAgICAgY29ycmVjdGx5CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA3LzMwIDAyOjAzOjQ3CiAgICAgW3JlYWRjb25mLmNdCiAgICAgbGlzdGVuX2hvc3RzIGluaXRpYWxpc2F0aW9uIGhlcmUgdG9vOyBzcG90dGVkIGdyZWcgQVQgeTIwMDUubmVzdC5jeAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDgvMDYgMTA6MDM6MTIKICAgICBbc2VydmNvbmYuY10KICAgICBVbmJyZWFrIHNzaGQgTGlzdGVuQWRkcmVzcyBmb3IgYmFyZSBJUHY2IGFkZHJlc3Nlcy4KICAgICBSZXBvcnQgZnJvbSBKYW51c3ogTXVja2E7IG9rIGRqbUAKICAgLSBqYXJlZHlAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDgvMDggMTM6MjI6NDgKICAgICBbc2Z0cC5jXQogICAgIHNmdHAgcHJvbXB0IGVuaGFuY2VtZW50czoKICAgICAtIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLCBkbyBub3QgcHJpbnQgYW4gZW1wdHkgcHJvbXB0IGF0IHRoZSBlbmQKICAgICAgIGJlZm9yZSBmaW5pc2hpbmcKICAgICAtIHByaW50IG5ld2xpbmUgYWZ0ZXIgRU9GIGluIGVkaXRsaW5lIG1vZGUKICAgICAtIGNhbGwgZWxfZW5kKCkgaW4gZWRpdGxpbmUgbW9kZQogICAgIG9rIGR0dWNrZXIgZGptCgoyMDA1MDgxMAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gVGVzdCBsaWJlZGl0IGxpYnJhcnkgYW5kIGhlYWRlcnMgZm9yIGNvbXBhdGliaWxpdHkuCiAgIFJlcG9ydCBmcm9tIHNrZWxldGVuIEFUIHNoaWxsZXN0Lm5ldCwgb2sgZGptQAogLSAoZHR1Y2tlcikgW0xJQ0VOQ0UgY29uZmlndXJlLmFjIGRlZmluZXMuaCBvcGVuYnNkLWNvbXBhdC9yZWFscGF0aC5jXQogICBTeW5jIGN1cnJlbnQgKHRocmVhZC1zYWZlKSB2ZXJzaW9uIG9mIHJlYWxwYXRoLmMgZnJvbSBPcGVuQlNEICh3aGljaCBpcwogICBpbiB0dXJuIGJhc2VkIG9uIEZyZWVCU0QncykuICBvayBkam1ACgoyMDA1MDgwOQogLSAodGltKSBbY29uZmlndXJlLmFjXSBBbGxvdyAtLXdpdGgtYXVkaXQ9bm8uIE9LIGR0dWNrZXJACiAgIFJlcG9ydCBieSBza2VsZXRlbiBBVCBzaGlsbGVzdC5uZXQKCjIwMDUwODAzCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZmFrZS1yZmMyNTUzLmhdIENoZWNrIGZvciBFQUlfKiBkZWZpbmVzCiAgIGluZGl2aWR1YWxseSBhbmQgdXNlIGEgdmFsdWUgbGVzcyBsaWtlbHkgdG8gY29sbGlkZSB3aXRoIHJlYWwgdmFsdWVzIGZyb20KICAgbmV0ZGIuaC4gIEZpeGVzIGNvbXBpbGUgd2FybmluZ3Mgb24gRnJlZUJTRCA1LjMuICBvayBkam1ACiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZmFrZS1yZmMyNTUzLmhdIE1BWF9JTlQgLT4gSU5UX01BWCBzaW5jZSB0aGUKICAgbGF0dGVyIGlzIHNwZWNpZmllZCBpbiB0aGUgc3RhbmRhcmQuCgoyMDA1MDgwMgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDcvMjcgMTA6Mzk6MDMKICAgICBbc2NwLmMgaG9zdGZpbGUuYyBzZnRwLWNsaWVudC5jXQogICAgIFNpbGVuY2UgYm9ndXMgLVd1bmluaXRpYWxpemVkIHdhcm5pbmdzOyBvayBkam1ACiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBFbmFibGUgLVd1bmluaXRpYWxpemVkIGJ5IGRlZmF1bHQgd2hlbiBjb21waWxpbmcKICAgd2l0aCBnY2MuICBvayBkam1ACiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBBZGQgYSAtLXdpdGgtV2Vycm9yIG9wdGlvbiB0byBjb25maWd1cmUgZm9yCiAgIGFkZGluZyAtV2Vycm9yIHRvIENGTEFHUyB3aGVuIGFsbCBvZiB0aGUgY29uZmlndXJlIHRlc3RzIGFyZSBkb25lLiBvayBkam1ACgoyMDA1MDcyNgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gVXBkYXRlIHpsaWIgd2FybmluZyBtZXNzYWdlIHRvbywgcG9pbnRlZCBvdXQgYnkKICAgdGltQC4KIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIG90dG9AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDcvMTkgMTU6MzI6MjYKICAgICBbYXV0aC1wYXNzd2QuY10KICAgICBhdXRoX3VzZXJjaGVjaygzKSBjYW4gcmV0dXJuIE5VTEwsIHNvIGNoZWNrIGZvciB0aGF0LiBSZXBvcnQgZnJvbQogICAgIG1wZWNoQC4gb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wNy8yNSAxMTo1OTo0MAogICAgIFtrZXguYyBrZXguaCBteXByb3Bvc2FsLmggcGFja2V0LmMgcGFja2V0Lmggc2VydmNvbmYuYyBzZXNzaW9uLmNdCiAgICAgW3NzaGNvbm5lY3QyLmMgc3NoZC5jIHNzaGRfY29uZmlnIHNzaGRfY29uZmlnLjVdCiAgICAgYWRkIGEgbmV3IGNvbXByZXNzaW9uIG1ldGhvZCB0aGF0IGRlbGF5cyBjb21wcmVzc2lvbiB1bnRpbCB0aGUgdXNlcgogICAgIGhhcyBiZWVuIGF1dGhlbnRpY2F0ZWQgc3VjY2Vzc2Z1bGx5IGFuZCBzZXQgY29tcHJlc3Npb24gdG8gJ2RlbGF5ZWQnCiAgICAgZm9yIHNzaGQuCiAgICAgdGhpcyBicmVha3Mgb2xkZXIgb3BlbnNzaCBjbGllbnRzICg8IDMuNSkgaWYgdGhleSBpbnNpc3Qgb24KICAgICBjb21wcmVzc2lvbiwgc28geW91IGhhdmUgdG8gcmUtZW5hYmxlIGNvbXByZXNzaW9uIGluIHNzaGRfY29uZmlnLgogICAgIG9rIGRqbUAKCjIwMDUwNzI1CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBVcGRhdGUgemxpYiB2ZXJzaW9uIGNoZWNrIGZvciBDQU4tMjAwNS0yMDk2LgoKMjAwNTA3MTcKLSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA3LzE2IDAxOjM1OjI0CiAgICAgW2F1dGgxLmMgY2hhbm5lbHMuYyBjaXBoZXIuYyBjbGllbnRsb29wLmMga2V4LmMgc2Vzc2lvbi5jIHNzaC5jXQogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgc3BhY2luZwogLSAoZGptKSBbYWNzcy5jIGF1dGgtcGFtLmMgYXV0aC1zaGFkb3cuYyBhdXRoLXNrZXkuYyBhdXRoMS5jIGNhbm9ob3N0LmNdCiAgIFtjaXBoZXItYWNzcy5jIGxvZ2lucmVjLmMgc3NoLXJhbmQtaGVscGVyLmMgc3NoZC5jXSBGaXggd2hpdGVzcGFjZSBhdCBFT0wgCiAgIGluIHBvcnRhYmxlIHRvbyAoInBlcmwgLXAgLWkgLWUgJ3MvXHMrJC9cbi8nICouW2NoXSIpCiAtIChkam0pIFthdXRoLXBhbS5jIHNmdHAuY10gc3BhY2VzIHZzLiB0YWJzIGF0IHN0YXJ0IG9mIGxpbmUKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDcvMTcgMDY6NDk6MDQKICAgICBbY2hhbm5lbHMuYyBjaGFubmVscy5oIHNlc3Npb24uYyBzZXNzaW9uLmhdCiAgICAgRml4IGEgbnVtYmVyIG9mIFgxMSBmb3J3YXJkaW5nIGNoYW5uZWwgbGVha3M6CiAgICAgMS4gUmVmdXNlIG11bHRpcGxlIFgxMSBmb3J3YXJkaW5nIHJlcXVlc3RzIG9uIHRoZSBzYW1lIHNlc3Npb24KICAgICAyLiBDbGVhbiB1cCBhbGwgbGlzdGVuZXJzIGFmdGVyIGEgc2luZ2xlX2Nvbm5lY3Rpb24gWDExIGZvcndhcmQsIG5vdCBqdXN0CiAgICAgICAgdGhlIG9uZSB0aGF0IG1hZGUgdGhlIHNpbmdsZSBjb25uZWN0aW9uCiAgICAgMy4gRGVzdHJveSBYMTEgbGlzdGVuZXJzIHdoZW4gdGhlIHNlc3Npb24gb3duaW5nIHRoZW0gZ29lcyBhd2F5CiAgICAgdGVzdGluZyBhbmQgb2sgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDcvMTcgMDc6MTc6NTUKICAgICBbYXV0aC1yaC1yc2EuYyBhdXRoLXJob3N0cy5jIGF1dGgyLWNoYWxsLmMgYXV0aDItZ3NzLmMgY2hhbm5lbHMuY10KICAgICBbY2lwaGVyLWN0ci5jIGdzcy1nZW5yLmMgZ3NzLXNlcnYuYyBrZXguYyBtb2R1bGkuYyByZWFkY29uZi5jXQogICAgIFtzZXJ2ZXJsb29wLmMgc2Vzc2lvbi5jIHNmdHAtY2xpZW50LmMgc2Z0cC5jIHNzaC1hZGQuYyBzc2gta2V5Z2VuLmNdCiAgICAgW3NzaGNvbm5lY3QuYyBzc2hjb25uZWN0Mi5jXQogICAgIGtuZiBzYXlzIHRoYXQgYSAybmQgbGV2ZWwgaW5kZW50IGlzIGZvdXIgKG5vdCB0aHJlZSBvciBmaXZlKSBzcGFjZXMKIC0oZGptKSBbYXVkaXQuYyBhdXRoMS5jIGF1dGgyLmMgZW50cm9weS5jIGxvZ2lucmVjLmMgc2VydmVybG9vcC5jXQogIFtzc2gtcmFuZC1oZWxwZXIuY10gZml4IHBvcnRhYmxlIDJuZCBsZXZlbCBpbmRlbnRzIGF0IDQgc3BhY2VzIHRvbwogLSAoZGptKSBbbW9uaXRvci5jIG1vbml0b3Jfd3JhcC5jXSAtV3NpZ24tY29tcGFyZSBmb3IgUEFNIG1vbml0b3IgY2FsbHMKIAoyMDA1MDcxNgogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIEVuc3VyZSB0aGF0IG9ubHkgb25lIHNpZGUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uCiAgIHNvY2tldHBhaXIgc3RheXMgb3BlbiBvbiBpbiBib3RoIHRoZSBtb25pdG9yIGFuZCBQQU0gcHJvY2Vzcy4gIFBhdGNoIGZyb20KICAgSm9lcmcgU29ubmVuYmVyZ2VyLgoKMjAwNTA3MTQKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA3LzA2IDA5OjMzOjA1CiAgICAgW3NzaC4xXQogICAgIGNsYXJpZnkgbWVhbmluZyBvZiBzc2ggLWIgOyB3aXRoICYgb2sgam1jQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDcvMDggMDk6MjY6MTgKICAgICBbbWlzYy5jXQogICAgIE1ha2UgY29tbWVudCBtYXRjaCBjb2RlOyBvayBkam1ACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA3LzA4IDA5OjQxOjMzCiAgICAgW2NoYW5uZWxzLmhdCiAgICAgcmFjZSB3aGVuIGVmZCBnZXRzIGNsb3NlZCB3aGlsZSB0aGVyZSBpcyBzdGlsbCBidWZmZXJlZCBkYXRhOgogICAgIGNoYW5nZSBDSEFOTkVMX0VGRF9PVVRQVVRfQUNUSVZFKCkKICAgICAgICAxKSBjLT5lZmQgbXVzdCBhbHdheXMgYmUgdmFsaWQgQU5ECiAgICAgICAgMmEpIG5vIEVPRiBoYXMgYmVlbiBzZWVuIE9SCiAgICAgICAgMmIpIHRoZXJlIGlzIGJ1ZmZlcmVkIGRhdGEKICAgICByZXBvcnQsIGluaXRpYWwgZml4IGFuZCB0ZXN0aW5nIENodWNrIENyYW5vcgogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDcvMDggMTA6MjA6NDEKICAgICBbc3NoX2NvbmZpZy41XQogICAgIGNoYW5nZSBCaW5kQWRkcmVzcyB0byBtYXRjaCByZWNlbnQgc3NoIC1iIGNoYW5nZTsgcHJvbXB0ZWQgYnkgbWFya3VzQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wNy8wOCAxMjo1MzoxMAogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgbmV3IHNlbnRlbmNlLCBuZXcgbGluZTsKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA3LzE0IDA0OjAwOjQzCiAgICAgW21pc2MuaF0KICAgICB1c2UgX19zZW50aW5lbF9fIGF0dHJpYnV0ZTsgb2sgZGVyYWFkdEAgZGptQCBtYXJrdXNACiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIGRlZmluZXMuaF0gRGVmaW5lIF9fc2VudGluZWxfXyB0byBub3RoaW5nIGlmIHRoZQogICBjb21waWxlciBkb2Vzbid0IHVuZGVyc3RhbmQgaXQgdG8gcHJldmVudCB3YXJuaW5ncy4gIElmIGFueSBtYWluc3RyZWFtCiAgIGNvbXBpbGVyIHZlcnNpb25zIGFjcXVpcmUgaXQgd2UgY2FuIHRlc3QgZm9yIHRob3NlIHZlcnNpb25zLiAgQmFzZWQgb24KICAgZGlzY3Vzc2lvbiB3aXRoIGRqbUAuCgoyMDA1MDcwNwogLSBkdHVja2VyIFthdXRoLWtyYjUuYyBhdXRoLmggZ3NzLXNlcnYta3JiNS5jXSBNb3ZlIEtSQjVDQ05BTUUgZ2VuZXJhdGlvbiBmb3IKICAgdGhlIE1JVCBLZXJiZXJvcyBjb2RlIHBhdGggaW50byBhIGNvbW1vbiBmdW5jdGlvbiBhbmQgZXhwYW5kIG1rc3RlbXAKICAgdGVtcGxhdGUgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSByZXN0IG9mIE9wZW5TU0guICBGcm9tIHN4dyBhdAogICBpbmYuZWQuYWMudWssIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFthdXRoLWtyYjUuY10gVGhlcmUncyBubyBndWFyYW50ZWUgdGhhdCBzbnByaW50ZiB3aWxsIHNldCBlcnJubwogICBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgYnVmZmVyIGlzIGluc3VmZmljaWVudCwgc28gYWx3YXlzIHJldHVybiBFTk9NRU0uCiAgIEFsc28gcG9pbnRlZCBvdXQgYnkgc3h3IGF0IGluZi5lZC5hYy51ay4KIC0gKGR0dWNrZXIpIFthY2NvbmZpZy5oIGF1dGgta3JiNS5jIGNvbmZpZ3VyZS5hYyBnc3Mtc2Vydi1rcmI1LmNdIFJlbW92ZQogICBjYWxscyB0byBrcmI1X2luaXRfZXRzLCB3aGljaCBoYXMgbm90IGJlZW4gcmVxdWlyZWQgc2luY2Uga3JiLTEuMS54IGFuZAogICBtb3N0IEtlcmJlcm9zIHZlcnNpb25zIG5vIGxvbmdlciBleHBvcnQgaW4gdGhlaXIgcHVibGljIEFQSS4gIEZyb20gc3h3CiAgIGF0IGluZi5lZC5hYy51aywgb2sgZGptQAoKMjAwNTA3MDYKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wNy8wMSAxMzoxOTo0NwogICAgIFtjaGFubmVscy5jXQogICAgIGRvbid0IGZyZWUoKSBpZiBnZXRhZGRyaW5mbygpIGZhaWxzOyByZXBvcnQgbXBlY2hACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA3LzA0IDAwOjU4OjQzCiAgICAgW2NoYW5uZWxzLmMgY2xpZW50bG9vcC5jIGNsaWVudGxvb3AuaCBtaXNjLmMgbWlzYy5oIHNzaC5jIHNzaF9jb25maWcuNV0KICAgICBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgWDExIGFuZCBhZ2VudCBmb3J3YXJkaW5nIG92ZXIgbXVsdGlwbGV4IHNsYXZlCiAgICAgY29ubmVjdGlvbnMuIEJlY2F1c2Ugb2YgcHJvdG9jb2wgbGltaXRhdGlvbnMsIHRoZSBzbGF2ZSBjb25uZWN0aW9ucyBpbmhlcml0CiAgICAgdGhlIG1hc3RlcidzIERJU1BMQVkgYW5kIFNTSF9BVVRIX1NPQ0sgcmF0aGVyIHRoYW4gZGlzdGluY3RseSBmb3J3YXJkaW5nCiAgICAgdGhlaXIgb3duLgogICAgIG9rIGR0dWNrZXJAICJwdXQgaXQgaW4iIGRlcmFhZHRACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA3LzA0IDExOjI5OjUxCiAgICAgW3NzaF9jb25maWcuNV0KICAgICBmaXggWHIgYW5kIGEgbGl0dGxlIGdyYW1tYXI7CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA3LzA0IDE0OjA0OjExCiAgICAgW2NoYW5uZWxzLmNdCiAgICAgZG9uJ3QgZm9yZ2V0IHRvIHNldCB4MTFfc2F2ZWRfZGlzcGxheQoKMjAwNTA2MjYKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNi8xNyAyMjo1Mzo0NwogICAgIFtzc2guYyBzc2hjb25uZWN0LmNdCiAgICAgRml4IENvbnRyb2xQYXRoJ3MgJXAgZXhwYW5kaW5nIHRvICIwIiBmb3IgYSBkZWZhdWx0IHBvcnQsCiAgICAgc3BvdHRlZCBkd213MiBBVCBpbmZyYWRlYWQub3JnOyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA2LzE4IDA0OjMwOjM2CiAgICAgW3NzaC5jIHNzaF9jb25maWcuNV0KICAgICBhbGxvdyBDb250cm9sUGF0aD1ub25lLCBwYXRjaCBmcm9tIGR3bXcyIEFUIGluZnJhZGVhZC5vcmc7IG9rIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA2LzI1IDIyOjQ3OjQ5CiAgICAgW3NzaC5jXQogICAgIGRvIHRoZSBkZWZhdWx0IHBvcnQgZmlsbGluZyBjb2RlIGEgZmV3IGxpbmVzIGVhcmxpZXIsIHNvIGl0IHJlYWxseSAKICAgICBkb2VzIGZpeCAlcAoKMjAwNTA2MTgKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNS8yMCAxMjo1NzowMTsKICAgW2F1dGgxLmNdIHNwbGl0IHByb3RvY29sIDEgYXV0aCBtZXRob2RzIGludG8gc2VwYXJhdGUgZnVuY3Rpb25zLCBtYWtlcyAKICAgYXV0aGxvb3AgbXVjaCBtb3JlIHJlYWRhYmxlOyBmaXhlcyBhbmQgb2sgbWFya3VzQCAocG9ydGFibGUgb2sgJiAKICAgcG9saXNoIGR0dWNrZXJAKQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNi8xNyAwMjo0NDozMwogICBbYXV0aDEuY10gbWFrZSB0aGlzIC1Xc2lnbi1jb21wYXJlIGNsZWFuOyBvayBhdnNtQCBtYXJrdXNACiAtIChkam0pIFtsb2dpbnJlYy5jIHNzaC1yYW5kLWhlbHBlci5jXSBGaXggLVdzaWduLWNvbXBhcmUgZm9yIHBvcnRhYmxlLAogICB0ZXN0ZWQgYW5kIGZpeGVzIHRpbUAKCjIwMDUwNjE3CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDYvMTYgMDM6Mzg6MzYKICAgICBbY2hhbm5lbHMuYyBjaGFubmVscy5oIGNsaWVudGxvb3AuYyBjbGllbnRsb29wLmggc3NoLmNdCiAgICAgbW92ZSB4MTFfZ2V0X3Byb3RvIGZyb20gc3NoLmMgdG8gY2xpZW50bG9vcC5jLCB0byBtYWtlIG11bGlwbGV4ZWQgeGZ3ZAogICAgIGVhc2llciBsYXRlcjsgb2sgZGVyYWFkdEAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDYvMTYgMDg6MDA6MDAKICAgICBbY2Fub2hvc3QuYyBjaGFubmVscy5jIHNzaGQuY10KICAgICBkb24ndCBleGl0IGlmIGdldHBlZXJuYW1lIGZhaWxzIGZvciBmb3J3YXJkZWQgcG9ydHM7IGJ1Z3ppbGxhICMxMDU0OwogICAgIG9rIGRqbQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNi8xNyAwMjo0NDozMwogICAgIFthdXRoLXJzYS5jIGF1dGguYyBhdXRoMS5jIGF1dGgyLWNoYWxsLmMgYXV0aDItZ3NzLmMgYXV0aGZkLmMgYXV0aGZpbGUuY10KICAgICBbYnVmYXV4LmMgY2Fub2hvc3QuYyBjaGFubmVscy5jIGNpcGhlci5jIGNsaWVudGxvb3AuYyBkbnMuYyBnc3Mtc2Vydi5jXQogICAgIFtrZXguYyBrZXguaCBrZXkuYyBtYWMuYyBtYXRjaC5jIG1pc2MuYyBwYWNrZXQuYyBwYWNrZXQuaCBzY3AuY10KICAgICBbc2VydmNvbmYuYyBzZXNzaW9uLmMgc2Vzc2lvbi5oIHNmdHAtY2xpZW50LmMgc2Z0cC1zZXJ2ZXIuYyBzZnRwLmNdCiAgICAgW3NzaC1rZXlzY2FuLmMgc3NoLXJzYS5jIHNzaGNvbm5lY3QuYyBzc2hjb25uZWN0MS5jIHNzaGNvbm5lY3QyLmMgc3NoZC5jXQogICAgIG1ha2UgdGhpcyAtV3NpZ24tY29tcGFyZSBjbGVhbjsgb2sgYXZzbUAgbWFya3VzQAogICAgIE5CLiBhdXRoMS5jIGNoYW5nZXMgbm90IGNvbW1pdHRlZCB5ZXQgKGNvbmZsaWN0cyB3aXRoIHVuY29tbWl0dGVkIHN5bmMpCiAgICAgTkIyLiBtb3JlIHdvcmsgbWF5IGJlIG5lZWRlZCB0byBtYWtlIHBvcnRhYmxlIFdzaWduLWNvbXBhcmUgY2xlYW4KIC0gKGR0dWNrZXIpIFtjaXBoZXIuYyBvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oCiAgIG9wZW5ic2QtY29tcGF0L29wZW5zc2wtY29tcGF0LmNdIG9ubHkgaW5jbHVkZSBvcGVuc3NsIGNvbXBhdCBzdHVmZiB3aGVyZQogICBpdCdzIG5lZWRlZCBhcyBpdCBjYW4gY2F1c2UgY29uZmxpY3RzIGVsc2V3aGVyZSAoZWcgeGNyeXB0LmMpLiAgRm91bmQgYnkKICAgYW5kIG9rIHRpbUAKCjIwMDUwNjE2CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqYXJlZHlAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDYvMDcgMTM6MjU6MjMKICAgICBbcHJvZ3Jlc3NtZXRlci5jXQogICAgIGNhdGNoIFNJR1dJTkNIIGFuZCByZXNpemUgcHJvZ3Jlc3MgbWV0ZXIgYWNjb3JkaW5nbHk7IG9rIG1hcmt1cyBkdHVja2VyCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA2LzA2IDExOjIwOjM2CiAgICAgW2F1dGguYyBhdXRoLmggbWlzYy5jIG1pc2MuaCBzc2guYyBzc2hfY29uZmlnLjUgc3NoY29ubmVjdC5jXQogICAgIGludHJvZHVjZSBhIGdlbmVyaWMgJWZvbyBleHBhbnNpb24gZnVuY3Rpb24uIHJlcGxhY2UgZXhpc3RpbmcgJSBleHBhbnNpb24gCiAgICAgYW5kIGFkZCBleHBhbnNpb24gdG8gQ29udHJvbFBhdGg7IG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDYvMDggMDM6NTA6MDAKICAgICBbc3NoLWtleWdlbi4xIHNzaC1rZXlnZW4uYyBzc2hkLjhdCiAgICAgaW5jcmVhc2UgZGVmYXVsdCByc2EvZHNhIGtleSBsZW5ndGggZnJvbSAxMDI0IHRvIDIwNDggYml0czsKICAgICBvayBtYXJrdXNAIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA2LzA4IDExOjI1OjA5CiAgICAgW2NsaWVudGxvb3AuYyByZWFkY29uZi5jIHJlYWRjb25mLmggc3NoLmMgc3NoX2NvbmZpZy41XQogICAgIGFkZCBDb250cm9sTWFzdGVyPWF1dG8vYXV0b2FzayBvcHRpb25zIHRvIHN1cHBvcnQgb3Bwb3J0dW5pc3RpYwogICAgIG11bHRpcGxleGluZzsgdGVzdGVkIGF2c21AIGFuZCBqYWtvYkAsIG9rIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA2LzA5IDEzOjQzOjQ5CiAgICAgW2NpcGhlci5jXQogICAgIENvcnJlY3RseSBpbml0aWFsaXplIGVuZCBvZiBhcnJheSBzZW50aW5lbDsgb2sgZGptQAogICAgIChJZCBzeW5jIG9ubHksIGNoYW5nZSBhbHJlYWR5IGluIHBvcnRhYmxlKQoKMjAwNTA2MDkKIC0gKGR0dWNrZXIpIFtjaXBoZXIuYyBvcGVuYnNkLWNvbXBhdC9NYWtlZmlsZS5pbgogICBvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oIG9wZW5ic2QtY29tcGF0L29wZW5zc2wtY29tcGF0LntjLGh9XQogICBNb3ZlIGNvbXBhdGliaWxpdHkgY29kZSBmb3Igc3VwcG9ydGluZyBvbGRlciBPcGVuU1NMIHZlcnNpb25zIHRvIHRoZQogICBjb21wYXQgbGF5ZXIuICBTdWdnZXN0ZWQgYnkgYW5kICJubyBvYmplY3Rpb24iIGRqbUAKCjIwMDUwNjA3CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBDb250aW51ZSB0aGUgaHVudCBmb3IgTExPTkdfTUlOIGFuZCBMTE9OR19NQVg6CiAgIGluIHRvZGF5J3MgZXBpc29kZSB3ZSBhdHRlbXB0IHRvIGNvYXggaXQgZnJvbSBsaW1pdHMuaCB3aGVyZSBpdCBtYXkgYmUKICAgaGlkaW5nLCBmYWlsaW5nIHRoYXQgd2UgdGFrZSB0aGUgRElZIGFwcHJvYWNoLiAgVGVzdGVkIGJ5IHRpbUAKCjIwMDUwNjAzCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBPbmx5IHRyeSBnY2MgLXN0ZD1nbnU5OSBpZiBMTE9OR19NQVggaXNuJ3QKICAgZGVmaW5lZCwgYW5kIGNoZWNrIHRoYXQgaXQgaGVscHMgYmVmb3JlIGtlZXBpbmcgaXQgaW4gQ0ZMQUdTLiAgU29tZSBvbGQKICAgZ2NjJ3MgZG9uJ3Qgc2V0IGFuIGVycm9yIGNvZGUgd2hlbiBlbmNvdW50ZXJpbmcgYW4gdW5rbm93biB2YWx1ZSBpbiAtc3RkLgogICBGb3VuZCBhbmQgdGVzdGVkIGJ5IHRpbUAuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBQb2ludCBjb25maWd1cmUncyByZXBvcnRpbmcgYWRkcmVzcyBhdCB0aGUKICAgb3BlbnNzaC11bml4LWRldiBsaXN0LiAgb2sgdGltQCBkam1ACgoyMDA1MDYwMgogLSAodGltKSBbY29uZmlndXJlLmFjXSBTb21lIHBsYXRmb3JtcyBuZWVkIHN5cy90eXBlcy5oIGZvciBhcnBhL25hbWVzZXIuaC4KICAgVGFrZSBBQ19DSEVDS19IRUFERVJTIHRlc3Qgb3V0IG9mIHVsdHJpeCBzZWN0aW9uLiBJdCBjYXVzZWQgb3RoZXIgcGxhdGZvcm1zCiAgIHRvIHNraXAgYnVpbHRpbiBzdGFuZGFyZCBpbmNsdWRlcyB0ZXN0cy4gKGZpcnN0IEFDX0NIRUNLX0hFQURFUlMgdGVzdAogICBtdXN0IGJlIHJ1biBvbiBhbGwgcGxhdGZvcm1zKSBBZGQgbWlzc2luZyA7OyB0byBjYXNlIHN0YXRlbWVudC4gT0sgZHR1Y2tlckAKCjIwMDUwNjAxCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBMb29rIGZvciBfZ2V0c2hvcnQgYW5kIF9nZXRsb25nIGluCiAgIGFycGEvbmFtZXNlci5oLgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC9NYWtlZmlsZS5pbiBvcGVuYnNkLWNvbXBhdC9zdHJ0b2xsLmNdCiAgIEFkZCBzdHJ0b2xsIHRvIHRoZSBjb21wYXQgbGlicmFyeSwgZnJvbSBPcGVuQlNELgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGF2c21AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDUvMjYgMDI6MDg6MDUKICAgICBbc2NwLmNdCiAgICAgSWYgY29weWluZyBtdWx0aXBsZSBmaWxlcyB0byBhIHRhcmdldCBmaWxlICh3aGljaCBub3JtYWxseSBmYWlscywgYXMgaXQKICAgICBtdXN0IGJlIGEgdGFyZ2V0IGRpcmVjdG9yeSksIGtpbGwgdGhlIHNwYXduZWQgc3NoIGNoaWxkIGJlZm9yZSBleGl0aW5nLgogICAgIFRoaXMgc3RvcHMgaXQgdHJ5aW5nIHRvIGF1dGhlbnRpY2F0ZSBhbmQgc3Bld2luZyBsb3RzIG9mIG91dHB1dC4KICAgICBkZXJhYWR0QCBvawogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDUvMjYgMDk6MDg6MTIKICAgICBbc3NoLWtleWdlbi5jXQogICAgIHVpbnQzMl90IC0+IHVfaW50MzJfdCBmb3IgY29uc2lzdGVuY3k7IG9rIGRqbUAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDUvMjcgMDg6MzA6MzcKICAgICBbc3NoLmNdCiAgICAgZml4IC1PIGZvciBjYXNlcyB3aGVyZSBubyBDb250cm9sUGF0aCBoYXMgYmVlbiBzcGVjaWZpZWQgb3Igc29ja2V0IGF0CiAgICAgQ29udHJvbFBhdGggaXMgbm90IGNvbnRhY3RhYmxlOyBzcG90dGVkIGJ5IGFuZCBvayBhdnNtQAogLSAodGltKSBbY29uZmlnLmd1ZXNzIGNvbmZpZy5zdWJdIFVwZGF0ZSB0byAnMjAwNS0wNS0yNycgdmVyc2lvbi4KIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gc2V0IFRFU1RfU0hFTEwgZm9yIE9wZW5TZXJ2ZXIgNgoKMjAwNTA1MzEKIC0gKGR0dWNrZXIpIFtjb250cmliL2FpeC9wYW0uY29uZl0gQ29ycmVjdCBjb21tZW50cy4gIEZyb20gZGF2aWRsIGF0CiAgIHZpbnRlbGEuY29tLgogLSAoZHR1Y2tlcikgW21kb2MybWFuLmF3a10gVGVhY2ggaXQgdG8gdW5kZXJzdGFuZCAuT3guCgoyMDA1MDUzMAogLSAoZHR1Y2tlcikgW1JFQURNRV0gTGluayB0byBuZXcgcmVsZWFzZSBub3Rlcy4gIEJldGVyIGxhdGUgdGhhbiBuZXZlci4uLgoKMjAwNTA1MjkKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5jXSBCdWcgIzEwNDY6IEFJWCA1LjMgZXhwZWN0cyB0aGUKICAgYXJndW1lbnQgdG8gcGFzc3dkZXhwaXJlZCB0byBiZSBpbml0aWFsaXplZCB0byBOVUxMLiAgU3VnZ2VzdGVkIGJ5IHRpbUAKICAgV2hpbGUgYXQgaXQsIGluaXRpYWxpemUgdGhlIG90aGVyIGFyZ3VtZW50cyB0byBhdXRoIGZ1bmN0aW9ucyBpbiBjYXNlIHRoZXkKICAgZXZlciBhY3F1aXJlIHRoaXMgYmVoYXZpb3VyLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3BvcnQtYWl4LmNdIFdoaXRlc3BhY2UgY2xlYW51cHMgd2hpbGUgdGhlcmUuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcG9ydC1haXguY10gTWlub3IgY29ycmVjdGlvbiB0byBkZWJ1ZyBtZXNzYWdlLAogICBzcG90dGVkIGJ5IHRpbUAuCgoyMDA1MDUyOAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gRm9yIEFDX0NIRUNLX0hFQURFUlMoKSBhbmQgQUNfQ0hFQ0tfRlVOQ1MoKSBoYXZlCiAgIG9uZSBlbnRyeSBwZXIgbGluZSB0byBtYWtlIGl0IGVhc2llciB0byBtZXJnZSBjaGFuZ2VzLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gc3Ryc2VwKCkgbWF5IGJlIGRlZmluZWQgaW4gc3RyaW5nLmgsIHNvIGNoZWNrCiAgIGZvciBpdHMgcHJlc2VuY2UgYW5kIGluY2x1ZGUgaXQgaW4gdGhlIHN0cnNlcCBjaGVjay4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIGdldHBncnAgbWF5IGJlIGRlZmluZWQgaW4gdW5pc3RkLmgsIHNvIGNoZWNrIGZvcgogICBpdHMgcHJlc2VuY2UgYmVmb3JlIGRvaW5nIEFDX0ZVTkNfR0VUUEdSUC4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIE1lcmdlIEhQLVVYIGJsb2NrcyBpbnRvIGEgY29tbW9uIGJsb2NrIHdpdGggbWlub3IKICAgdmVyc2lvbi1zcGVjaWZpYyB2YXJpYXRpb25zIGFzIHJlcXVpcmVkLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3BvcnQtYWl4LmhdIFVzZSB0aGUgSEFWRV9ERUNMXyogZGVmaW5pdGlvbnMgYXMKICAgcGVyIHRoZSBhdXRvY29uZiBtYW4gcGFnZS4gIENvbmZpZ3VyZSBzaG91bGQgYWx3YXlzIGRlZmluZSB0aGVtIGJ1dCBpdAogICBkb2Vzbid0IGh1cnQgdG8gY2hlY2suCgoyMDA1MDUyNwogLSAoZGptKSBbZGVmaW5lcy5oXSBVc2Ugb3VyIHJlYWxwYXRoIGlmIHdlIGhhdmUgdG8gZGVmaW5lIFBBVEhfTUFYLCBzcG90dGVkIGJ5CiAgIERhdmlkIExlYWNoOyBvayBkdHVja2VyQAogLSAoZHR1Y2tlcikgW2FjY29uZmlnLmggY29uZmlndXJlLmFjIGRlZmluZXMuaCBpbmNsdWRlcy5oIHNzaHB0eS5jCiAgIG9wZW5ic2QtY29tcGF0L2JzZC1taXNjLmNdIEFkZCBzdXBwb3J0IGZvciBVbHRyaXguICBObywgdGhhdCdzIG5vdCBhIHR5cG8uCiAgIFJlcXVpcmVkIGNoYW5nZXMgZnJvbSBCZXJuaGFyZCBTaW1vbiwgaW50ZWdyYXRlZCBieSBtZS4gIG9rIGRqbUAKCjIwMDUwNTI1CiAtIChkam0pIFttcGF1eC5jIG1wYXV4LmggTWFrZWZpbGUuaW5dIFJlbW92ZSBvbGQgbXBhdXguW2NoXSBjb2RlLCBpdCBoYXMgbm90IAogICBiZWVuIHVzZWQgZm9yIGEgd2hpbGUKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIG90dG9AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDQvMDUgMTM6NDU6MzEKICAgICBbc3NoLWtleWdlbi5jXQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNC8wNiAwOTo0Mzo1OQogICAgIFtzc2hkLmNdCiAgICAgYXZvaWQgaGFybWxlc3MgbG9nc3BhbSBieSBub3QgcGVyZm9ybWluZyBzZXRzb2Nrb3B0KCkgb24gbm9uLXNvY2tldDsKICAgICBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNC8wNiAxMjoyNjowNgogICAgIFtzc2guY10KICAgICBGaXggZGVidWcgY2FsbCBmb3IgcG9ydCBmb3J3YXJkczsgcGF0Y2ggZnJvbSBwZXRlIGF0IHNlZWJleW9uZC5jb20sCiAgICAgb2sgZGptQCAoSUQgc3luYyBvbmx5IC0gY2hhbmdlIGFscmVhZHkgaW4gcG9ydGFibGUpCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA0LzA5IDA0OjMyOjU0CiAgICAgW21pc2MuYyBtaXNjLmggdGlsZGV4cGFuZC5jIE1ha2VmaWxlLmluXQogICAgIHJlcGxhY2UgdGlsZGVfZXhwYW5kX2ZpbGVuYW1lIHdpdGggYSBzaW1wbGVyIGltcGxlbWVudGF0aW9uLCBhaGVhZCBvZgogICAgIG1vcmUgd2hhY2tpbmc7IG9rIGRlcmFhZHRACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA0LzE0IDEyOjMwOjMwCiAgICAgW3NzaC4xXQogICAgIGFyZyB0byAtYiBpcyBhbiBhZGRyZXNzLCBub3QgaWZfbmFtZTsKICAgICBvayBtYXJrdXNACiAgIC0gamFrb2JAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDQvMjAgMTA6MDU6NDUKICAgICBbZG5zLmNdCiAgICAgZG8gbm90IHRyeSB0byBsb29rIHVwIFNTSEZQIGZvciBudW1lcmljYWwgaG9zdG5hbWUuIG9rIGRqbUAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDQvMjEgMDY6MTc6NTAKICAgICBbc3NoLWFkZC4xIHNzaC1hZ2VudC4xIHNzaC1rZXlnZW4uMSBzc2guMSBzc2hfY29uZmlnLjUgc3NoZC44XQogICAgIFtzc2hkX2NvbmZpZy41XSBPcGVuU1NIIGRvZXNuJ3QgZXZlciBsb29rIGF0IHRoZSAkSE9NRSBlbnZpcm9ubWVudAogICAgIHZhcmlhYmxlLCBzbyBkb24ndCBzYXkgdGhhdCB3ZSBkbyAoYnogIzYyMyk7IG9rIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA0LzIxIDExOjQ3OjE5CiAgICAgW3NzaC5jXQogICAgIGRvbid0IGFsbG9jYXRlIGEgcHR5IHdoZW4gLW4gZmxhZyAoL2Rldi9udWxsIHN0ZGluKSBpcyBzZXQsIHBhdGNoIGZyb20KICAgICBpZ25hc2kucm9jYSBBVCBmdWppdHN1LXNpZW1lbnMuY29tIChieiAjODI5KTsgb2sgZHR1Y2tlckAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA0LzIzIDIzOjQzOjQ3CiAgICAgW3JlYWRwYXNzLmNdCiAgICAgQWRkIGRlYnVnIG1lc3NhZ2UgaWYgcmVhZF9wYXNzcGhyYXNlIGNhbid0IG9wZW4gL2Rldi90dHk7IGJ6ICM0NzE7CiAgICAgb2sgZGptQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wNC8yNiAxMjo1OTowMgogICAgIFtzZnRwLWNsaWVudC5oXQogICAgIHNwZWxsaW5nIGNvcnJlY3Rpb24gaW4gY29tbWVudCBmcm9tIHdpekBuZXRic2Q7CiAgIC0gamFrb2JAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDQvMjYgMTM6MDg6MzcKICAgICBbc3NoLmMgc3NoX2NvbmZpZy41XQogICAgIGZhbGxiYWNrIGdyYWNlZnVsbHkgaWYgY2xpZW50IGNhbm5vdCBjb25uZWN0IHRvIENvbnRyb2xQYXRoLiBvayBkam1ACiAgIC0gbW9yaXR6QGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA0LzI4IDEwOjE3OjU2CiAgICAgW3Byb2dyZXNzbWV0ZXIuYyBzc2gta2V5c2Nhbi5jXQogICAgIGFkZCBzbnByaW50ZiBjaGVja3MuIG9rIGRqbUAgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wNS8wMiAyMToxMzoyMgogICAgIFtyZWFkcGFzcy5jXQogICAgIG1pc3Npbmcge30KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDUvMTAgMTA6Mjg6MTEKICAgICBbc3NoLmNdCiAgICAgcHJpbnQgbmljZSBlcnJvciBtZXNzYWdlIGZvciBFQUREUklOVVNFIGFzIHdlbGwgKElEIHN5bmMgb25seSkKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDUvMTAgMTA6MzA6NDMKICAgICBbc3NoLmNdCiAgICAgcmVwb3J0IHJlYWwgZXJyb3JzIG9uIGZhbGxiYWNrIGZyb20gQ29udHJvbE1hc3Rlcj1ubyB0byBub3JtYWwgY29ubmVjdAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wNS8xNiAxNTozMDo1MQogICAgIFtyZWFkY29uZi5jIHNlcnZjb25mLmNdCiAgICAgY2hlY2sgcmV0dXJuIHZhbHVlIGZyb20gc3RyZGVsaW0oKSBmb3IgTlVMTCAoQWRkcmVzc0ZhbWlseSk7IG1wZWNoCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA1LzE5IDAyOjM5OjU1CiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgc29ydCBjb25maWcgb3B0aW9ucywgZnJvbSBncnVuayBBVCBwZXN0aWxlbnoub3JnOyBvayBqbWNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA1LzE5IDAyOjQwOjUyCiAgICAgW3NzaGRfY29uZmlnXQogICAgIHdoaXRlc3BhY2Ugbml0LCBmcm9tIGdydW5rIEFUIHBlc3RpbGVuei5vcmcKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDUvMTkgMDI6NDI6MjYKICAgICBbaW5jbHVkZXMuaF0KICAgICBmaXggY2FzdCwgZnJvbSBncnVuayBBVCBwZXN0aWxlbnoub3JnCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA1LzIwIDEwOjUwOjU1CiAgICAgW3NzaF9jb25maWcuNV0KICAgICBnaXZlIGEgUHJveHlDb21tYW5kIGV4YW1wbGUgdXNpbmcgbmMoMSksIHdpdGggYW5kIG9rIGptY0AKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDUvMjAgMTE6MjM6MzIKICAgICBbc3NoX2NvbmZpZy41XQogICAgIG9vcHMgLSBhcnRpY2xlIGFuZCBzcGFjaW5nOwogICAtIGF2c21AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDUvMjMgMjI6NDQ6MDEKICAgICBbbW9kdWxpLmMgc3NoLWtleWdlbi5jXQogICAgIC0gcmVtb3ZlcyBzaWduZWQvdW5zaWduZWQgY29tcGFyaXNvbnMgaW4gbW9kdWxpIGdlbmVyYXRpb24KICAgICAtIHVzZSBzdHJ0b251bSBpbnN0ZWFkIG9mIGF0b2kgd2hlcmUgaXRzIGVhc2llcgogICAgIC0gY2hlY2sgc29tZSBzdHJsY3B5IG92ZXJmbG93IGFuZCBmYXRhbCBpbnN0ZWFkIG9mIHRydW5jYXRlCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA1LzIzIDIzOjMyOjQ2CiAgICAgW2NpcGhlci5jIG15cHJvcG9zYWwuaCBzc2guMSBzc2hfY29uZmlnLjUgc3NoZF9jb25maWcuNV0KICAgICBhZGQgc3VwcG9ydCBmb3IgZHJhZnQtaGFycmlzLXNzaC1hcmNmb3VyLWZpeGVzLTAyIGltcHJvdmVkIGFyY2ZvdXIgbW9kZXM7CiAgICAgb2sgbWFya3VzQAogICAtIGF2c21AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDUvMjQgMDI6MDU6MDkKICAgICBbc3NoLWtleWdlbi5jXQogICAgIHNvbWUgc3R5bGUgbml0cyBmcm9tIGRtaWxsZXJALCBhbmQgdXNlIGEgZmF0YWwoKSBpbnN0ZWFkIG9mIGEgcHJpbnRmKCkvZXhpdAogICAtIGF2c21AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDUvMjQgMTc6MzI6NDQKICAgICBbYXRvbWljaW8uYyBhdG9taWNpby5oIGF1dGhmZC5jIG1vbml0b3Jfd3JhcC5jIG1zZy5jIHNjcC5jIHNmdHAtY2xpZW50LmNdCiAgICAgW3NzaC1rZXlzY2FuLmMgc3NoY29ubmVjdC5jXQogICAgIFN3aXRjaCBhdG9taWNpbyB0byB1c2UgYSBzaW1wbGVyIGludGVyZmFjZTsgaXQgbm93IHJldHVybnMgYSBzaXplX3QKICAgICAoY29udGFpbmluZyBudW1iZXIgb2YgYnl0ZXMgcmVhZC93cml0dGVuKSwgYW5kIGluZGljYXRlcyBlcnJvciBieQogICAgIHJldHVybmluZyAwLiAgRU9GIGlzIHNpZ25hbGxlZCBieSBlcnJubz09RVBJUEUuCiAgICAgVHlwaWNhbCB1c2Ugbm93IGJlY29tZXM6CgogICAgIGlmIChhdG9taWNpbyhyZWFkLCAuLi4sIGxlbikgIT0gbGVuKQogICAgICAgICAgICAgZXJyKDEsInJlYWQiKTsKCiAgICAgb2sgZGVyYWFkdEAsIGNsb2RlckAsIGRqbUAKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL3JlZXhlYy5zaF0gQWRkICR7RVhFRVhUfSBzbyB0aGlzIHRlc3QgYWxzbyB3b3JrcyBvbgogICBDeWd3aW4uCiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gQnVnICMxMDMzOiBGaXggd2FybmluZ3MgYnVpbGRpbmcgd2l0aCBQQU0gb24gTGludXg6CiAgIHdhcm5pbmc6IGRlcmVmZXJlbmNpbmcgdHlwZS1wdW5uZWQgcG9pbnRlciB3aWxsIGJyZWFrIHN0cmljdC1hbGlhc2luZyBydWxlcwogICB3YXJuaW5nOiBwYXNzaW5nIGFyZyAzIG9mIGBwYW1fZ2V0X2l0ZW0nIGZyb20gaW5jb21wYXRpYmxlIHBvaW50ZXIgdHlwZQogICBUaGUgdHlwZS1wdW5uZWQgcG9pbnRlciBmaXggaXMgYmFzZWQgb24gYSBwYXRjaCBmcm9tIFN1U0UncyBycG0uICBvayBkam1ACiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmNdIEJ1ZyAjMTAzMzogUHJvdmlkZQogICB0ZW1wbGF0ZXMgZm9yIF9nZXRzaG9ydCBhbmQgX2dldGxvbmcgaWYgbWlzc2luZyB0byBwcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmdzCiAgIG9uIExpbnV4LgogLSAoZGptKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluXQogICAgICAgICBbb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaCBvcGVuYnNkLWNvbXBhdC9zdHJ0b251bS5jXQogICAgICAgICBBZGQgc3RydG9udW0oMykgZnJvbSBPcGVuQlNEIGxpYmMsIG5ldyBjb2RlIG5lZWRzIGl0LiAKICAgICAgICAgVW5mb3J0dW5hdGVseSBMaW51eCBmb3JjZXMgdXMgdG8gZG8gYSBiaXphcnJlIGRhbmNlIHdpdGggY29tcGlsZXIKICAgICAgICAgb3B0aW9ucyB0byBnZXQgTExPTkdfTUlOL01BWDsgU3BvdHRlZCBieSBhbmQgb2sgZHR1Y2tlckAgCgoyMDA1MDUyNAogLSAoZGptKSBbY29udHJpYi9jYWxkZXJhL29wZW5zc2guc3BlYyBjb250cmliL3JlZGhhdC9vcGVuc3NoLnNwZWNdCiAgICAgICAgIFtjb250cmliL3N1c2Uvb3BlbnNzaC5zcGVjXSBVcGRhdGUgc3BlYyBmaWxlIHZlcnNpb25zIHRvIDQuMXAxCiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gU2luY2UgcGVvcGxlIGRvbid0IHNlZW0gdG8gYmUgZ2V0dGluZyB0aGUgbWVzc2FnZQogICB0aGF0IFVTRV9QT1NJWF9USFJFQURTIGlzIHVuc3VwcG9ydGVkLCBub3QgcmVjb21tZW5kZWQgYW5kIGdlbmVyYWxseSBhIGJhZAogICBpZGVhLCBpdCBpcyBub3cga25vd24gYXMgVU5TVVBQT1JURURfUE9TSVhfVEhSRUFEU19IQUNLLiAgQXR0ZW1wdGluZyB0byB1c2UKICAgVVNFX1BPU0lYX1RIUkVBRFMgd2lsbCBub3cgZ2VuZXJhdGUgYW4gZXJyb3Igc28gd2UgZG9uJ3Qgc2lsZW50bHkgY2hhbmdlCiAgIGJlaGF2aW91ci4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ic2QtY3lnd2luX3V0aWwuY10gRW5zdXJlIHN1ZmZpY2llbnQgbWVtb3J5CiAgIGFsbG9jYXRpb24gd2hlbiByZXRyaWV2aW5nIGNvcmUgV2luZG93cyBlbnZpcm9ubWVudC4gIEFkZCBDWUdXSU4gdmFyaWFibGUKICAgdG8gcHJvcGFnYXRlZCB2YXJpYWJsZXMuICBQYXRjaCBmcm9tIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20sIG9rIGRqbUAKIC0gUmVsZWFzZSA0LjFwMQoKMjAwNTA1MjQKIC0gKGRqbSkgW29wZW5ic2QtY29tcGF0L3JlYWRwYXNzcGhyYXNlLmNdIGJ6ICM5NTA6IFJldHJ5IHRjc2V0YXR0ciB0byBlbnN1cmUKICAgdGVybWluYWwgbW9kZXMgYXJlIHJlc2V0IGNvcnJlY3RseS4gRml4IGZyb20gcGVhayBBVCBhcmdvLnRyb2phLm1mZi5jdW5pLmN6OwogICAibG9va3Mgb2siIGR0dWNrZXJACgoyMDA1MDUxMgogLSAodGltKSBbYnVpbGRwa2cuc2guaW5dIG1pc3NpbmcgJHtQS0dfSU5TVEFMTF9ST09UfSBpbiBpbml0IHNjcmlwdAogICBoYXJkIGxpbmsgc2VjdGlvbi4gQnVnIDEwMzguCgoyMDA1MDUwOQogLSAoZHR1Y2tlcikgW2NvbnRyaWIvY3lnd2luL3NzaC1ob3N0LWNvbmZpZ10gQWRkIGEgdGVzdCBhbmQgd2FybmluZyBmb3IgYQogICB1c2VyLW1vZGUgbW91bnRzIGluIEN5Z3dpbiBpbnN0YWxsYXRpb24uICBQYXRjaCBmcm9tIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20uCgoyMDA1MDUwNAogLSAoZGptKSBbc3NoLmNdIHNvbWUgc3lzdGVtcyByZXR1cm4gRUFERFJJTlVTRSBvbiBhIGJpbmQgdG8gYW4gYWxyZWFkeS11c2VkCiAgIHVuaXggZG9tYWluIHNvY2tldCwgc28gY2F0Y2ggdGhhdCB0b287IGZyb20gamFrb2JAIG9rIGR0dWNrZXJACgoyMDA1MDUwMwogLSAoZHR1Y2tlcikgW2Nhbm9ob3N0LmNdIG5vcm1hbGlzZSBzb2NrZXQgYWRkcmVzc2VzIHJldHVybmVkIGJ5CiAgIGdldF9yZW1vdGVfaG9zdG5hbWUoKS4gIFRoaXMgbWVhbnMgdGhhdCBJUHY0IGFkZHJlc3NlcyBpbiBsb2cgbWVzc2FnZXMKICAgb24gSVB2NiBlbmFibGVkIG1hY2hpbmVzIHdpbGwgbm8gbG9uZ2VyIGJlIHByZWZpeGVkIGJ5ICI6OmZmZmY6IiBhbmQKICAgQWxsb3dVc2VycywgRGVueVVzZXJzLCBBbGxvd0dyb3VwcywgRGVueUdyb3VwcyB3aWxsIG1hdGNoIElQdjQtc3R5bGUKICAgYWRkcmVzc2VzIG9ubHkgZm9yIDQtaW4tNiBtYXBwZWQgY29ubmVjdGlvbnMsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcgogICBvciBub3QgdGhlIG1hY2hpbmUgaXMgSVB2NiBlbmFibGVkLiAgb2sgZGptQAoKMjAwNTA0MjUKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL211bHRpcGxleC5zaF0gVXNlICJraWxsIC0wICRwaWQiIHRvIGNoZWNrIGZvciB0aGUKICAgZXhpc3RlbmNlIG9mIGEgcHJvY2VzcyBzaW5jZSBpdCdzIG1vcmUgcG9ydGFibGUuICBGb3VuZCBieSBqYmFzbmV5IGF0CiAgIG5jc2EudWl1Yy5lZHU7IG9rIHRpbUAKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL211bHRpcGxleC5zaF0gUmVtb3ZlIGNsZWFudXAgY2FsbCBzaW5jZSB0ZXN0LWV4ZWMuc2gKICAgd2lsbCBjbGVhbiB1cCBhbnl3YXkuICBGcm9tIHRpbUAKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL211bHRpcGxleC5zaF0gUHV0IGNvbnRyb2wgc29ja2V0IGluIC90bXAgc28gcnVubmluZwogICAibWFrZSB0ZXN0cyIgd29ya3MgZXZlbiBpZiB5b3UncmUgYnVpbGRpbmcgb24gYSBmaWxlc3lzdGVtIHRoYXQgZG9lc24ndAogICBzdXBwb3J0IHNvY2tldHMuICBGcm9tIGRlZW5nZXJ0IGF0IGFubC5nb3YsIG9rIGRqbUAKCjIwMDUwNDI0CiAtIChkdHVja2VyKSBbSU5TVEFMTCBjb25maWd1cmUuYWNdIE1ha2UgemxpYiB2ZXJzaW9uIGNoZWNrIHRlc3QgZm9yIDEuMS40IG9yCiAgIDEuMi4xLjIgb3IgaGlnaGVyLiAgV2l0aCB0aW1ALCBvayBkam1ACgoyMDA1MDQyMwogLSAodGltKSBbY29uZmlnLmd1ZXNzXSBBZGQgc3VwcG9ydCBmb3IgT3BlblNlcnZlciA2LgoKMjAwNTA0MjEKIC0gKGR0dWNrZXIpIFtzZXNzaW9uLmNdIEJ1ZyAjMTAyNDogRG9uJ3QgY2hlY2sgcGFtX3Nlc3Npb25faXNfb3BlbiBpZgogICBVc2VMb2dpbiBpcyBzZXQgYXMgUEFNIGlzIG5vdCB1c2VkIHRvIGVzdGFibGlzaCBjcmVkZW50aWFscyBpbiB0aGF0CiAgIGNhc2UuICBGb3VuZCBieSBNaWNoYWVsIFNlbHZlc3RlZW4sIG9rIGRqbUAKCjIwMDUwNDE5CiAtIChkdHVja2VyKSBbSU5TVEFMTF0gUmVmZXJlbmNlIFJFQURNRS5wcml2c2VwIGZvciB0aGUgcHJpdmlsZWdlIHNlcGFyYXRpb24KICAgcmVxdWlyZW1lbnRzLiAgUG9pbnRlZCBvdXQgYnkgQmVuZ3QgU3ZlbnNzb24uCiAtIChkdHVja2VyKSBbSU5TVEFMTF0gUHV0IHRoZSBzL2tleSB0ZXh0IGFuZCBVUkwgYmFjayB0b2dldGhlci4KIC0gKGR0dWNrZXIpIFtJTlNUQUxMXSBGaXggcy9rZXkgdGV4dCB0b28uCgoyMDA1MDQxMQogLSAodGltKSBbY29uZmlndXJlLmFjXSBVbml4V2FyZSBuZWVkcyBQQVNTV0RfTkVFRFNfVVNFUk5BTUUKCjIwMDUwNDA1CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBEZWZpbmUgSEFWRV9TT19QRUVSQ1JFRCBpZiB3ZSBoYXZlIGl0LiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2F1dGgtc2lhLmNdIENvbnN0aWZ5IHN5c19hdXRoX3Bhc3N3ZCwgZml4ZXMgYnVpbGQgZXJyb3Igb24KICAgVHJ1NjQuICBQYXRjaCBmcm9tIGNtYWRhbXMgYXQgaGl3YWF5Lm5ldC4KIC0gKGR0dWNrZXIpIFthdXRoLXBhc3N3ZC5jIGF1dGgtc2lhLmhdIFJlbW92ZSBkdXBsaWNhdGUgZGVmaW5pdGlvbnMgb2YKICAgc3lzX2F1dGhfcGFzc3dkLCBwb2ludGVkIG91dCBieSBjbWFkYW1zIGF0IGhpd2FheS5uZXQuCgoyMDA1MDQwMwogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8zMSAxODozOToyMQogICAgIFtzY3AuY10KICAgICBjb3B5IGFyZ3ZbXSBlbGVtZW50IGluc3RlYWQgb2Ygc21hc2hpbmcgdGhlIG9uZSB0aGF0IHBzIHdpbGwgc2VlOyBvayBvdHRvCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA0LzAyIDEyOjQxOjE2CiAgICAgW3NjcC5jXQogICAgIHNpbmNlIHNzaCBoYXMgeHN0cmR1cCwgdXNlIGl0IGluc3RlYWQgb2Ygc3RyZHVwK3Rlc3QuIHVuYnJlYWtzIC1XZXJyb3IKICAgICBidWlsZAogLSAoZHR1Y2tlcikgW21vbml0b3IuY10gRG9uJ3QgZnJlZSBidWZmZXJzIGluIGF1ZGl0IGZ1bmN0aW9ucywgbW9uaXRvcl9yZWFkCiAgIHdpbGwgZnJlZSBhcyBuZWVkZWQuICBvayB0aW1AIGRqbUAKCjIwMDUwMzMxCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzE2IDExOjEwOjM4CiAgICAgW3NzaF9jb25maWcuNV0KICAgICBnZXQgdGhlIHN5bnRheCByaWdodCBmb3Ige0xvY2FsLFJlbW90ZX1Gb3J3YXJkOwogICAgIGJhc2VkIG9uIGEgZGlmZiBmcm9tIG1hcmt1czsKICAgICBwcm9ibGVtIHJlcG9ydCBmcm9tIHBvbnJhajsKICAgICBvayBkdHVja2VyQCBtYXJrdXNAIGRlcmFhZHRACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzE2IDIxOjE3OjM5CiAgICAgW3ZlcnNpb24uaF0KICAgICA0LjEKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDMvMTggMTc6MDU6MDAKICAgICBbc3NoZF9jb25maWcuNV0KICAgICB0eXBvOwogLSAoZHR1Y2tlcikgW2F1dGguaCBzc2hkLmMgb3BlbmJzZC1jb21wYXQvcG9ydC1haXguY10gQnVnICMxMDA2OiBmaXggYnVnIGluCiAgIGhhbmRsaW5nIG9mIHBhc3N3b3JkIGV4cGlyeSBtZXNzYWdlcyByZXR1cm5lZCBieSBBSVgncyBhdXRoZW50aWNhdGlvbgogICByb3V0aW5lcywgb3JpZ2luYWxseSByZXBvcnRlZCBieSByb2J2ZHdhbCBhdCBzYXJhLm5sLgogLSAoZHR1Y2tlcikgW3NzaC5jXSBQcmV2ZW50IG51bGwgcG9pbnRlciBkZXJlZiBpbiBwb3J0IGZvcndhcmRpbmcgZGVidWcKICAgbWVzc2FnZSBvbiBzb21lIHBsYXRmb3Jtcy4gIFBhdGNoIGZyb20gcGV0ZSBhdCBzZWViZXlvbmQuY29tIHZpYSBkam0uCiAtIChkdHVja2VyKSBbbW9uaXRvci5jXSBSZW1haW5pbmcgcGFydCBvZiBmaXggZm9yIGJ1ZyAjMTAwNi4KCjIwMDUwMzI5CiAtIChkdHVja2VyKSBbY29udHJpYi9haXgvYnVpbGRiZmYuc2hdIEJ1ZyAjMTAwNTogTG9vayB1cCBvbmx5IHRoZSB1c2VyIHdlJ3JlCiAgIGludGVyZXN0ZWQgaW4gd2hpY2ggaXMgbXVjaCBmYXN0ZXIgaW4gbGFyZ2UgKGVnIExEQVAgb3IgTklTKSBlbnZpcm9ubWVudHMuCiAgIFBhdGNoIGZyb20gZGxlb25hcmQgYXQgdmludGVsYS5jb20uCgoyMDA1MDMyMQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gUHJldmVudCBjb25maWd1cmUgLS13aXRoLXpsaWIgZnJvbSBhZGRpbmcgLUl5ZXMKICAgYW5kIC1MeWVzIHRvIENGTEFHUyBhbmQgTElCUy4gIFBvaW50ZWQgb3V0IGJ5IHBldGVyIGF0IHNsYWdoZWFwLm5ldCwKICAgd2l0aCAmIG9rIHRpbUAKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIE1ha2UgY29uZmlndXJlIGVycm9yIG91dCBpZiB0aGUgdXNlciBzcGVjaWZpZXMKICAgLS13aXRoLWxpYmVkaXQgYnV0IHRoZSByZXF1aXJlZCBsaWJzIGNhbid0IGJlIGZvdW5kLCByYXRoZXIgdGhhbiBzaWxlbnRseQogICBpZ25vcmluZyBhbmQgY29udGludWluZy4gIG9rIHRpbUAKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgb3BlbmJzZC1jb21wYXQvcG9ydC1haXguaF0gUHJldmVudCByZWRlZmluaXRpb25zCiAgIG9mIHNldGF1dGhkYiBvbiBBSVggNS4zLCByZXBvcnRlZCBieSBhbmRlcnMubGlsamVncmVuIGF0IGl0cy51dS5zZS4KCjIwMDUwMzE3CiAtICh0aW0pIFtjb25maWd1cmUuYWNdIEJ1ZyA5OTguIE1ha2UgcGF0aCBmb3IgLS13aXRoLW9wZW5zYyBvcHRpb25hbC4KICAgTWFrZSAtLXdpdGhvdXQtb3BlbnNjIHdvcmsuCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIHBvcnRhYmlsaXR5IGNoYW5nZXMgb24gdGVzdCBzdGF0ZW1lbnRzLiBTb21lIHNoZWxscwogICBoYXZlIHByb2JsZW1zIHdpdGggLWEgb3BlcmF0b3IuCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIG1ha2Ugc29tZSBjb25maWd1cmUgb3B0aW9ucyBhIGxpdHRsZSBtb3JlIGVycm9yIHByb29mLgogLSAodGltKSBbY29uZmlndXJlLmFjXSByZW1vdmUgdHJhaWxpbmcgd2hpdGUgc3BhY2UuCgoyMDA1MDMxNAogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDMvMTAgMTA6MTU6MDIKICAgICBbcmVhZGNvbmYuY10KICAgICBDaGVjayBsaXN0ZW4gYWRkcmVzc2VzIGZvciBudWxsLCBwcmV2ZW50cyB4ZnJlZSBmcm9tIGR5aW5nIGR1cmluZwogICAgIENsZWFyQWxsRm9yd2FyZGluZ3MgKGJ6ICM5OTYpLiAgRnJvbSAgQ3JhaWcgTGVyZXMsIG9rIG1hcmt1c0AKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzEwIDIyOjAxOjA1CiAgICAgW21pc2MuYyBzc2gta2V5Z2VuLmMgc2VydmNvbmYuYyBjbGllbnRsb29wLmMgYXV0aC1vcHRpb25zLmMgc3NoLWFkZC5jCiAgICAgbW9uaXRvci5jIHNmdHAtY2xpZW50LmMgYnVmYXV4LmggaG9zdGZpbGUuYyBzc2guYyBzc2hjb25uZWN0LmMgY2hhbm5lbHMuYwogICAgIHJlYWRjb25mLmMgYnVmYXV4LmMgc2Z0cC5jXQogICAgIHNwYWNpbmcKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzEwIDIyOjQwOjM4CiAgICAgW2F1dGgtb3B0aW9ucy5jXQogICAgIHNwYWNpbmcKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDMvMTEgMTQ6NTk6MDYKICAgICBbc3NoLWtleWdlbi5jXQogICAgIHR5cG8sIG1pc3NpbmcgXG47IG1wZWNoCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzEyIDExOjU1OjAzCiAgICAgW3NzaF9jb25maWcuNV0KICAgICBlc2NhcGUgYC4nIGF0IGVvbCB0byBhdm9pZCBkb3VibGUgc3BhY2luZyBpc3N1ZXM7CiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8xNCAxMDowOTowMwogICAgIFtzc2gta2V5Z2VuLjFdCiAgICAgQ29ycmVjdCBkZXNjcmlwdGlvbiBvZiAtSCAoYnogIzk5Nyk7ICBvayBtYXJrdXNALCBwdW5jdHVhdGlvbiBqbWNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8xNCAxMTo0NDo0MgogICAgIFthdXRoLmNdCiAgICAgUG9wdWxhdGUgaG9zdCBmb3IgbG9nIG1lc3NhZ2UgZm9yIGxvZ2lucyBkZW5pZWQgYnkgQWxsb3dVc2VycyBhbmQKICAgICBEZW55VXNlcnMgKGJ6ICM5OTkpOyBvayBtYXJrdXNAIChwYXRjaCBieSB0cnlwb25yYWogYXQgZ21haWwuY29tKQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8xNCAxMTo0Njo1NgogICAgIFtidWZmZXIuYyBidWZmZXIuaCBjaGFubmVscy5jXQogICAgIGxpbWl0IGlucHV0IGJ1ZmZlciBzaXplIGZvciBjaGFubmVsczsgYnVnemlsbGEgIzg5Njsgd2l0aCBhbmQgb2sgZHR1Y2tlckAKIC0gKHRpbSkgW2NvbnRyaWIvY2FsZGVyYS9vcGVuc3NoLnNwZWNdIGxpbmtzIGluIHJjPy5kIHdlcmUgZ2V0dGluZyB0cmFzaGVkCiAgIHdpdGggYSBycG0gLUYKCjIwMDUwMzEzCiAtIChkdHVja2VyKSBbY29udHJpYi9jeWd3aW4vc3NoLWhvc3QtY29uZmlnXSBNYWtlcyB0aGUgcXVlcnkgZm9yIHRoZQogICBsb2NhbGl6ZWQgbmFtZSBvZiB0aGUgbG9jYWwgYWRtaW5pc3RyYXRvcnMgZ3JvdXAgbW9yZSByZWxpYWJsZS4gIEZyb20KICAgdmluc2NoZW4gYXQgcmVkaGF0LmNvbS4KCjIwMDUwMzEyCiAtIChkdHVja2VyKSBbcmVncmVzcy90ZXN0LWV4ZWMuc2hdIERFQlVHIGNhbiBjYXVzZSBwcm9ibGVtcyB3aGVyZSBkZWJ1ZwogICBvdXRwdXQgZW5kcyB1cCBpbiB0aGUgY2xpZW50J3Mgb3V0cHV0LCBjYXVzaW5nIHJlZ3Jlc3MgZmFpbHVyZXMuICBGb3VuZAogICBieSBDb3Jpbm5hIFZpbnNjaGVuLgoKMjAwNTAzMDkKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL3Rlc3QtZXhlYy5zaF0gU2V0IEJJTl9TSD14cGc0IG9uIE9TRjEvRGlnaXRhbCBVbml4L1RydTY0CiAgIHNvIHRoYXQgcmVncmVzcyB0ZXN0cyBiZWhhdmUuICBGcm9tIENocmlzIEFkYW1zLgogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzA3IDIzOjQxOjU0CiAgICAgW3NzaC4xIHNzaF9jb25maWcuNV0KICAgICBtb3JlIG1hY3JvIHNpbXBsaWZpY2F0aW9uOwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8wOCAyMzo0OTo0OAogICAgIFt2ZXJzaW9uLmhdCiAgICAgT3BlblNTSCA0LjAKIC0gKGRqbSkgW2NvbnRyaWIvY2FsZGVyYS9vcGVuc3NoLnNwZWMgY29udHJpYi9yZWRoYXQvb3BlbnNzaC5zcGVjXSAKICAgW2NvbnRyaWIvc3VzZS9vcGVuc3NoLnNwZWNdIFVwZGF0ZSBzcGVjIGZpbGUgdmVyc2lvbnMKIC0gKGRqbSkgW2xvZy5jXSBGaXggZHVtYiBzeW50YXggZXJyb3I7IG9rIGR0dWNrZXJACiAtIChkam0pIFJlbGVhc2UgT3BlblNTSCA0LjBwMQoKMjAwNTAzMDcKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIERpc2FibGUgZ2V0dGV4dCBzZWFyY2ggd2hlbiBjb25maWd1cmluZyB3aXRoCiAgIEJTTSBhdWRpdCBzdXBwb3J0IGZvciB0aGUgdGltZSBiZWluZy4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMgKHJlZ3Jlc3MvKQogICAtIGZnc2NoQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzEyLzEwIDAxOjMxOjMwCiAgICAgW01ha2VmaWxlIHNmdHAtZ2xvYi5zaF0KICAgICBzb21lIGdsb2JiaW5nIHJlZ3Jlc3M7IHByb21wdGVkIGFuZCBvayBkam1ACiAgIC0gZGF2aWRAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDEvMTQgMDQ6MjE6MTgKICAgICBbTWFrZWZpbGUgdGVzdC1leGVjLnNoXQogICAgIHBhc3MgdGhlIFNVRE8gbWFrZSB2YXJpYWJsZSB0byB0aGUgaW5kaXZpZHVhbCBzaCB0ZXN0czsgb2sgZHR1Y2tlckAgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDIvMjcgMTE6MzM6MzAKICAgICBbbXVsdGlwbGV4LnNoIHRlc3QtZXhlYy5zaCBzc2hkLWxvZy13cmFwcGVyLnNoXQogICAgIEFkZCBvcHRpb25hbCBjYXBhYmlsaXR5IHRvIGxvZyBvdXRwdXQgZnJvbSByZWdyZXNzIGNvbW1hbmRzOyBvayBtYXJrdXNACiAgICAgVXNlIHdpdGg6IG1ha2UgVEVTVF9TU0hfTE9HRklMRT0vdG1wL3JlZ3Jlc3MubG9nCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAyLzI3IDIzOjEzOjM2CiAgICAgW2xvZ2luLXRpbWVvdXQuc2hdCiAgICAgYXZvaWQgbmFtZXNlcnZpY2UgbG9va3VwcyBpbiByZWdyZXNzIHRlc3Q7IG9rIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzA0IDA4OjQ4OjQ2CiAgICAgW01ha2VmaWxlIGVudnBhc3Muc2hdCiAgICAgcmVncmVzcyB0ZXN0IGZvciBTZW5kRW52IGNvbmZpZyBwYXJzaW5nIGJ1Zzsgb2sgZHR1Y2tlckAKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL3Rlc3QtZXhlYy5zaF0gUHV0IFNVRE8gaW4gdGhlIHJpZ2h0IHBsYWNlLgogLSAodGltKSBbY29uZmlndXJlLmFjXSBTQ08gMy4ydjQuMiBubyBsb25nZXIgc3VwcG9ydGVkLgoKMjAwNTAzMDYKIC0gKGR0dWNrZXIpIFttb25pdG9yLmNdIEJ1ZyAjMTI1IGNvbW1lbnQgIzQ3OiBmaXggZXJyb3JzIHJldHVybmVkIGJ5IG1vbml0b3IKICAgd2hlbiBhdHRlbXB0aW5nIHRvIGF1ZGl0IGRpc2Nvbm5lY3QgZXZlbnRzLiAgUmVwb3J0ZWQgYnkgUGhpbCBEaWJvd2l0ei4KIC0gKGR0dWNrZXIpIFtzZXNzaW9uLmMgc3NoZC5jXSBCdWcgIzEyNSBjb21tZW50ICM0OTogU2VuZCBkaXNjb25uZWN0IGF1ZGl0CiAgIGV2ZW50cyBlYXJsaWVyLCBwcmV2ZW50cyBtbV9yZXF1ZXN0X3NlbmQgZXJyb3JzIHJlcG9ydGVkIGJ5IE1hdHQgR29lYmVsLgoKMjAwNTAzMDUKIC0gKGRqbSkgW2NvbnRyaWIvY3lnd2luL1JFQURNRV0gSW1wcm92ZSBDeWd3aW4gYnVpbGQgZG9jdW1lbnRhdGlvbi4gUGF0Y2ggCiAgIGZyb20gdmluc2NoZW4gYXQgcmVkaGF0LmNvbQogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzAyIDExOjQ1OjAxCiAgICAgW3NzaC4xXQogICAgIG1pc3Npbmcgd29yZDsKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDMvMDQgMDg6NDg6MDYKICAgICBbcmVhZGNvbmYuY10KICAgICBmaXggU2VuZEVudiBjb25maWcgcGFyc2luZyBidWcgZm91bmQgYnkgUm91bWVuIFBldHJvdjsgb2sgZHR1Y2tlckAKCjIwMDUwMzAyCiAtIChkam0pIE9wZW5CU0QgQ1ZTIHN5bmM6CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzAxIDE0OjQ3OjU4CiAgICAgW3NzaC4xXQogICAgIHJlbW92ZSBzb21lIHVubmVjY2VzYXJ5IG1hY3JvczsKICAgICBkbyBub3QgbWFyayB1cCBwdW5jdHVhdGlvbjsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDMvMDEgMTQ6NTU6MjMKICAgICBbc3NoX2NvbmZpZy41XQogICAgIGRvIG5vdCBtYXJrIHVwIHB1bmN0dWF0aW9uOwogICAgIHdoaXRlc3BhY2U7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzAxIDE0OjU5OjQ5CiAgICAgW3NzaGQuOF0KICAgICBuZXcgc2VudGVuY2UsIG5ldyBsaW5lOwogICAgIHdoaXRlc3BhY2U7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzAxIDE1OjA1OjAwCiAgICAgW3NzaC1rZXlnZW4uMV0KICAgICB3aGl0ZXNwYWNlOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8wMSAxNTo0NzoxNAogICAgIFtzc2gta2V5c2Nhbi4xIHNzaC1rZXlzY2FuLmNdCiAgICAgc29ydCBvcHRpb25zIGFuZCBzeW5jIHVzYWdlKCk7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzAxIDE3OjE5OjM1CiAgICAgW3NjcC4xIHNmdHAuMV0KICAgICBhZGQgSGFzaEtub3duSG9zdHMgdG8gLW8gbGlzdDsKICAgICBvayBtYXJrdXNACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzAxIDE3OjIyOjA2CiAgICAgW3NzaC5jXQogICAgIHN5bmMgdXNhZ2UoKSB3LyBtYW4gU1lOT1BTSVM7CiAgICAgb2sgbWFya3VzQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8wMSAxNzozMjoxOQogICAgIFtzc2gtYWRkLjFdCiAgICAgc29ydCBvcHRpb25zOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8wMSAxODoxNTo1NgogICAgIFtzc2gta2V5Z2VuLjFdCiAgICAgc29ydCBvcHRpb25zIChubyBhdHRlbXB0IG1hZGUgYXQgc3lub3BzaXMgY2xlYW4gdXAgdGhvdWdoKTsKICAgICBzcGVsbGluZyAob2NjdXJhbmNlIC0+IG9jY3VycmVuY2UpOwogICAgIHVzZSBwcm9tcHQgYmVmb3JlIGV4YW1wbGVzOwogICAgIGdyYW1tYXI7CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzAyIDAxOjAwOjA2CiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBmaXggYWRkaXRpb24gb2YgbmV3IGhhc2hlZCBob3N0bmFtZXMgd2hlbiBDaGVja0hvc3RJUD15ZXM7CiAgICAgZm91bmQgYW5kIG9rIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzAyIDAxOjI3OjQxCiAgICAgW3NzaC1rZXlnZW4uY10KICAgICBpZ25vcmUgaG9zdG5hbWVzIHdpdGggbWV0YWNoYXJzIHdoZW4gaGFzaGluZzsgb2sgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDMvMDIgMDI6MjE6MDcKICAgICBbc3NoLjFdCiAgICAgYnojOTg3OiBtZW50aW9uIEZvcndhcmRYMTFUcnVzdGVkIGluIHNzaC4xLAogICAgIHJlcG9ydGVkIGJ5IGFuZHJldy5iZW5oYW0gQVQgdGh1cy5uZXQ7IG9rIGRlcmFhZHRACiAtICh0aW0pIFtyZWdyZXNzL2FnZW50LXB0cmFjZS5zaF0gYWRkIGFub3RoZXIgcG9zc2libGUgZ2RiIGVycm9yLgoKMjAwNTAzMDEKIC0gKGRqbSkgT3BlbkJTRCBDVlMgc3luYzoKICAgLSBvdHRvQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAyLzE2IDA5OjU2OjQ0CiAgICAgW3NzaC5jXQogICAgIEJldHRlciBkaWFnbm9zdGljIGlmIGFuIGlkZW50aXR5IGZpbGUgaXMgbm90IGFjY2VzaWJsZS4gb2sgbWFya3VzQCBkam1ACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAyLzE4IDAzOjA1OjUzCiAgICAgW2Nhbm9ob3N0LmNdCiAgICAgYmV0dGVyIGVycm9yIG1lc3NhZ2VzIGZvciBnZXRuYW1laW5mbyBmYWlsdXJlczsgb2sgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDIvMjAgMjI6NTk6MDYKICAgICBbc2Z0cC5jXQogICAgIHR1cm4gb24gc3NoIGJhdGNoIG1vZGUgd2hlbiBpbiBzZnRwIGJhdGNoIG1vZGUsIHBhdGNoIGZyb20gCiAgICAgamRtb3NzaCBBVCBuYW5kLm5ldDsKICAgICBvayBtYXJrdXNACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAyLzI1IDEwOjU1OjEzCiAgICAgW3NzaGQuOF0KICAgICBhZGQgL2V0Yy9tb3RkIGFuZCAkSE9NRS8uaHVzaGxvZ2luIHRvIEZJTEVTOwogICAgIGZyb20gbWljaGFlbCBrbnVkc2VuOwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMi8yOCAwMDo1NDoxMAogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgYnojODQ5OiBkb2N1bWVudCB0aW1lb3V0IG9uIHVudHJ1c3RlZCB4MTEgZm9yd2FyZGluZyBzZXNzaW9ucy4gUmVwb3J0ZWQgYnkKICAgICBvcmlvbiBBVCBjb3JhLm53cmEuY29tOyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzAxIDEwOjA5OjUyCiAgICAgW2F1dGgtb3B0aW9ucy5jIGNoYW5uZWxzLmMgY2hhbm5lbHMuaCBjbGllbnRsb29wLmMgY29tcGF0LmMgY29tcGF0LmhdCiAgICAgW21pc2MuYyBtaXNjLmggcmVhZGNvbmYuYyByZWFkY29uZi5oIHNlcnZjb25mLmMgc3NoLjEgc3NoLmMgc3NoX2NvbmZpZy41XQogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIGJ6IzQxMzogYWxsb3cgb3B0aW9uYWwgc3BlY2lmaWNhdGlvbiBvZiBiaW5kIGFkZHJlc3MgZm9yIHBvcnQgZm9yd2FyZGluZ3MuCiAgICAgUGF0Y2ggb3JpZ2luYWxseSBieSBEYW4gQXN0b3JpYW4sIGJ1dCB3b3JrZWQgb24gYnkgc2V2ZXJhbCBwZW9wbGUKICAgICBBZGRzIEdhdGV3YXlQb3J0cz1jbGllbnRzcGVjaWZpZWQgb3B0aW9uIG9uIHNlcnZlciB0byBhbGxvdyByZW1vdGUgCiAgICAgZm9yd2FyZHMgdG8gYmluZCB0byBjbGllbnQtc3BlY2lmaWVkIHBvcnRzLgogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8wMSAxMDo0MDoyNwogICAgIFtob3N0ZmlsZS5jIGhvc3RmaWxlLmggcmVhZGNvbmYuYyByZWFkY29uZi5oIHNzaC4xIHNzaF9jb25maWcuNV0KICAgICBbc3NoY29ubmVjdC5jIHNzaGQuOF0KICAgICBhZGQgc3VwcG9ydCBmb3IgaGFzaGluZyBob3N0IG5hbWVzIGFuZCBhZGRyZXNzZXMgYWRkZWQgdG8ga25vd25faG9zdHMKICAgICBmaWxlcywgdG8gaW1wcm92ZSBwcml2YWN5IG9mIHdoaWNoIGhvc3RzIHVzZXIgaGF2ZSBiZWVuIHZpc2l0aW5nOyBvayAKICAgICBtYXJrdXNAIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzAxIDEwOjQxOjI4CiAgICAgW3NzaC1rZXlzY2FuLjEgc3NoLWtleXNjYW4uY10KICAgICBvcHRpb24gdG8gaGFzaCBob3N0bmFtZXMgb3V0cHV0IGJ5IHNzaC1rZXlzY2FuOyBvayBtYXJrdXNAIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzAxIDEwOjQyOjQ5CiAgICAgW3NzaC1rZXlnZW4uMSBzc2gta2V5Z2VuLmMgc3NoX2NvbmZpZy41XQogICAgIGFkZCB0b29scyBmb3IgbWFuYWdpbmcga25vd25faG9zdHMgZmlsZXMgd2l0aCBoYXNoZWQgaG9zdG5hbWVzLCBpbmNsdWRpbmcKICAgICBoYXNoaW5nIGV4aXN0aW5nIGZpbGVzIGFuZCBkZWxldGluZyBob3N0cyBieSBuYW1lOyBvayBtYXJrdXNAIGRlcmFhZHRACgoyMDA1MDIyNgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JzZC1vcGVucHR5LmMgb3BlbmJzZC1jb21wYXQvaW5ldF9udG9wLmNdCiAgIFJlbW92ZSB0d28gb2Jzb2xldGUgQ3lnd2luICNpZmRlZnMuICBQYXRjaCBmcm9tIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20uCiAtIChkdHVja2VyKSBbYWNjb25maWcuaCBjb25maWd1cmUuYWMgb3BlbmJzZC1jb21wYXQvYnNkLW1pc2Mue2MsaH1dCiAgIFJlbW92ZSBTRVRHUk9VUFNfTk9PUCwgd2FzIG9ubHkgdXNlZCBieSBDeWd3aW4sIHdoaWNoIGRvZXNuJ3QgbmVlZCBpdCBhbnkKICAgbW9yZS4gIFBhdGNoIGZyb20gdmluc2NoZW4gYXQgcmVkaGF0LmNvbS4KIC0gKGR0dWNrZXIpIFtNYWtlZmlsZS5pbl0gQWRkIGEgaW5zdGFsbC1ub3N5c2NvbmYgdGFyZ2V0IGZvciBpbnN0YWxsaW5nIHRoZQogICBiaW5hcmllcyB3aXRob3V0IHRoZSBjb25maWcgZmlsZXMuICBQcmltYXJpbHkgdXNlZnVsIGZvciBwYWNrYWdpbmcuCiAgIFBhdGNoIGZyb20gcGhpbCBhdCB1c2MuZWR1LiAgb2sgZGptQAoKMjAwNTAyMjQKIC0gKGRqbSkgW2NvbmZpZ3VyZS5hY10gaW5fYWRkcl90IHRlc3QgbmVlZHMgc3lzL3R5cGVzLmggdG9vCgoyMDA1MDIyMgogLSAoZHR1Y2tlcikgW3VpZHN3YXAuY10gU2tpcCB1aWQgcmVzdG9yZSB0ZXN0IG9uIEN5Z3dpbi4gIFBhdGNoIGZyb20KICAgdmluc2NoZW4gYXQgcmVkaGF0LmNvbS4KCjIwMDUwMjIwCiAtIChkdHVja2VyKSBbTElDRU5DRSBNYWtlZmlsZS5pbiBSRUFETUUucGxhdGZvcm0gYXVkaXQtYnNtLmMgY29uZmlndXJlLmFjCiAgIGRlZmluZXMuaF0gQnVnICMxMjU6IEFkZCAqRVhQRVJJTUVOVEFMKiBCU00gYXVkaXQgc3VwcG9ydC4gIENvbmZpZ3VyZQogICAtLXdpdGgtYXVkaXQ9YnNtIHRvIGVuYWJsZS4gIFBhdGNoIG9yaWdpbmFsbHkgZnJvbSBTdW4gTWljcm9zeXN0ZW1zLAogICBwYXJ0cyBieSBKb2huIFIuIEphY2tzb24uICBvayBkam1ACiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBNaXNzaW5nIGNvbW1hIGluIEFJWCBzZWN0aW9uLCBzb21laG93IGNhdXNlcwogICB1bnJlbGF0ZWQgcGxhdGZvcm1zIHRvIGJlIGNvbmZpZ3VyZWQgaW5jb3JyZWN0bHkuCgoyMDA1MDIxNgogLSAoZGptKSB3cml0ZSBzZWVkIHRvIHRlbXBvcmFyeSBmaWxlIGFuZCBhdG9taWNhbGx5IHJlbmFtZSBpbnRvIHBsYWNlOyAKICAgb2sgZHR1Y2tlckAKIC0gKGR0dWNrZXIpIFtzc2gtcmFuZC1oZWxwZXIuY10gUHJvdmlkZSBzZWVkX3JuZyBzaW5jZSBpdCBtYXkgYmUgY2FsbGVkCiAgIHZpYSBta3N0ZW1wIGluIHNvbWUgY29uZmlndXJhdGlvbnMuICBvayBkam1ACiAtIChkdHVja2VyKSBbYXV0aC1zaGFkb3cuY10gUHJldmVudCBjb21waWxlciB3YXJuaW5ncyBpZiAiREFZIiBpcyBkZWZpbmVkCiAgIGJ5IHRoZSBzeXN0ZW0gaGVhZGVycy4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjODkzOiBjaGVjayBmb3IgbGlicmVzb2x2IGVhcmx5IG9uIFJlbGlhbnQKICAgVW5peDsgcHJldmVudHMgcHJvYmxlbXMgcmVsYXRpbmcgdG8gdGhlIGxvY2F0aW9uIG9mIC1scmVzb2x2IGluIHRoZQogICBsaW5rIG9yZGVyLgogLSAoZHR1Y2tlcikgW3Nlc3Npb24uY10gQnVnICM5MTg6IHN0b3JlIGNyZWRlbnRpYWxzIGZyb20gZ3NzYXBpLXdpdGgtbWljCiAgIGF1dGhlbnRpY2F0aW9uIGVhcmx5IGVub3VnaCB0byBiZSBhdmFpbGFibGUgdG8gUEFNIHNlc3Npb24gbW9kdWxlcyB3aGVuCiAgIHByaXZzZXA9eWVzLiAgUGF0Y2ggZnJvbSBkZWVuZ2VydCBhdCBhbmwuZ292LCBvaydlZCBpbiBwcmluY2lwbGUgYnkgU2FtCiAgIEhhcnRtYW4gYW5kIHNpbWlsYXIgdG8gRGViaWFuJ3Mgc3NoLWtyYjUgcGFja2FnZS4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgb3BlbmJzZC1jb21wYXQvcG9ydC1haXgue2MsaH1dIFNpbGVuY2Ugc29tZSBtb3JlCiAgIGNvbXBpbGVyIHdhcm5pbmdzIG9uIEFJWC4KCjIwMDUwMjE1CiAtIChkdHVja2VyKSBbY29uZmlnLnNoLmluXSBDb2xsZWN0IG9zbGV2ZWwgLXIgdG9vLgogLSAoZHR1Y2tlcikgW1JFQURNRS5wbGF0Zm9ybSBhdXRoLmMgY29uZmlndXJlLmFjIGxvZ2lucmVjLmMKICAgb3BlbmJzZC1jb21wYXQvcG9ydC1haXguYyBvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5oXSBCdWcgIzgzNTogZW5hYmxlIElQdjYKICAgb24gQUlYIHdoZXJlIHBvc3NpYmxlIChzZWUgUkVBRE1FLnBsYXRmb3JtIGZvciBkZXRhaWxzKSBhbmQgd29yayBhcm91bmQKICAgYSBtaXNmZWF0dXJlIG9mIEFJWCdzIGdldG5hbWVpbmZvLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2xvZ2lucmVjLmNdIEFkZCBtaXNzaW5nICNpbmNsdWRlLgoKMjAwNTAyMTEKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIFRpZHkgdXAgY29uZmlndXJlIC0taGVscCBvdXRwdXQuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZmFrZS1yZmMyNTUzLmhdIFdlIG5vdyBuZWVkIEVBSV9TWVNURU0gdG9vLgoKMjAwNTAyMTAKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjOTE5OiBQcm92aWRlIHZpc2libGUgZmVlZGJhY2sgZm9yIHRoZQogICAtLWRpc2FibGUtZXRjLWRlZmF1bHQtbG9naW4gY29uZmlndXJlIG9wdGlvbi4KCjIwMDUwMjA5CiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMS8yOCAwOTo0NTo1MwogICAgIFtzc2hfY29uZmlnXQogICAgIE1ha2UgaXQgY2xlYXIgdGhhdCB0aGUgZXhhbXBsZSBlbnRyaWVzIGluIHNzaF9jb25maWcgYXJlIG9ubHkgc29tZSBvZiB0aGUKICAgICBjb21tb25seS11c2VkIG9wdGlvbnMgYW5kIHJlZmVyIHRoZSB1c2VyIHRvIHNzaF9jb25maWcoNSkgZm9yIG1vcmUKICAgICBkZXRhaWxzOyBvayBkam1ACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAxLzI4IDE1OjA1OjQzCiAgICAgW3NzaF9jb25maWcuNV0KICAgICBncmFtbWFyOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wMS8yOCAxODoxNDowOQogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgd29yZGluZzsKICAgICBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMS8zMCAxMToxODowOAogICAgIFttb25pdG9yLmNdCiAgICAgTWFrZSBjb2RlIG1hdGNoIGludGVudDsgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDIvMDggMjI6MjQ6NTcKICAgICBbc3NoZC5jXQogICAgIFByb3ZpZGUgcmVhc29uIGluIGVycm9yIG1lc3NhZ2UgaWYgZ2V0bmFtZWluZm8gZmFpbHM7IG9rIG1hcmt1c0AKIC0gKGR0dWNrZXIpIFthdXRoLXBhc3N3ZC5jIG9wZW5ic2QtY29tcGF0L3BvcnQtYWl4LmNdIERvbid0IGNhbGwKICAgZGlzYWJsZV9mb3J3YXJkaW5nKCkgZnJvbSBjb21wYXQgbGlicmFyeS4gUHJldmVudCBsaW5rZXIgZXJycm9ycyB0cnlpbmcKICAgdG8gcmVzb2x2ZSBpdCBmb3IgYmluYXJpZXMgb3RoZXIgdGhhbiBzc2hkLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICM4NTQ6IHByZXBlbmQgcHdkIHRvIHJlbGF0aXZlIC0td2l0aC1zc2wtZGlyCiAgIHBhdGhzLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBzZXNzaW9uLmNdIFNvbWUgcGxhdGZvcm1zIChlZyBzb21lIFNDTykgcmVxdWlyZQogICB0aGUgdXNlcm5hbWUgdG8gYmUgcGFzc2VkIHRvIHRoZSBwYXNzd2QgY29tbWFuZCB3aGVuIGNoYW5naW5nIGV4cGlyZWQKICAgcGFzc3dvcmRzLiAgb2sgZGptQAoKMjAwNTAyMDgKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL3Rlc3QtZXhlYy5zaF0gQnVnICM5MTI6IFNldCBfUE9TSVgyX1ZFUlNJT04gZm9yIHRoZQogICByZWdyZXNzIHRlc3RzIHNvIG5ld2VyIHZlcnNpb25zIG9mIEdOVSBoZWFkKDEpIGJlaGF2ZSB0aGVtc2VsdmVzLiAgUGF0Y2gKICAgYnkgZGptLCBzbyBvayBtZS4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5jXSBTaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmdzLgogLSAoZHR1Y2tlcikgW2F1ZGl0LmMgYXVkaXQuaCBhdXRoLmMgYXV0aDEuYyBhdXRoMi5jIGxvZ2lucmVjLmMgbW9uaXRvci5jCiAgIG1vbml0b3Jfd3JhcC5jIG1vbml0b3Jfd3JhcC5oIHNlc3Npb24uYyBzc2hkLmNdOiBQcmVwZW5kIGFsbCBvZiB0aGUgYXVkaXQKICAgZGVmaW5lcyBhbmQgZW51bXMgd2l0aCBTU0hfIHRvIHByZXZlbnQgbmFtZXNwYWNlIGNvbGxpc2lvbnMgb24gc29tZQogICBwbGF0Zm9ybXMgKGVnIEFJWCkuCgoyMDA1MDIwNAogLSAoZHR1Y2tlcikgW21vbml0b3IuY10gUGVybWl0IElOVkFMSURfVVNFUiBhdWRpdCBldmVudHMgZnJvbSBzbGF2ZSB0b28uCiAtIChkdHVja2VyKSBbYXV0aC5jXSBGaXggcGFyZW5zIGluIGF1ZGl0IGxvZyBjaGVjay4KCjIwMDUwMjAyCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L3JlYWxwYXRoLmNdIFN5bmMgdXAgd2l0aCByZWFscGF0aAogICByZXYgMS4xMSBmcm9tIE9wZW5CU0QgYW5kIG1ha2UgaXQgdXNlIGZjaGRpciBpZiBhdmFpbGFibGUuICBvayBkam1ACiAtIChkdHVja2VyKSBbYXV0aC5jIGxvZ2lucmVjLmggb3BlbmJzZC1jb21wYXQve2JzZC1jcmF5LHBvcnQtYWl4fS57YyxofV0KICAgTWFrZSByZWNvcmRfZmFpbGVkX2xvZ2luKCkgY2FsbCBwcm92aWRlIGhvc3RuYW1lIHJhdGhlciB0aGFuIGhhdmluZyB0aGUKICAgaW1wbGVtZW50YXRpb25zIGhhdmluZyB0byBkbyBsb29rdXBzIHRoZW1zZWx2ZXMuICBPbmx5IGFmZmVjdHMgQUlYIGFuZAogICBVTklDT1MgKHRoZSBsYXR0ZXIgb25seSB1c2VzIHRoZSAidXNlciIgcGFyYW1ldGVyIGFueXdheSkuICBvayBkam1ACiAtIChkdHVja2VyKSBbc2Vzc2lvbi5jIHNzaGQuY10gQnVnICM0NDU6IFByb3BvZ2F0ZSBLUkI1Q0NOQU1FIGlmIHNldCB0byBjaGlsZAogICB0aGUgcHJvY2Vzcy4gIFNpbmNlIHdlIGFsc28gdW5zZXQgS1JCNUNDTkFNRSBhdCBzdGFydHVwLCBpZiBpdCdzIHNldCBhZnRlcgogICBhdXRoZW50aWNhdGlvbiBpdCBtdXN0IGhhdmUgYmVlbiBzZXQgYnkgdGhlIHBsYXRmb3JtJ3MgbmF0aXZlIGF1dGggc3lzdGVtLgogICBUaGlzIHdhcyBhbHJlYWR5IGRvbmUgZm9yIEFJWDsgdGhpcyBlbmFibGVzIGl0IGZvciB0aGUgZ2VuZXJhbCBjYXNlLgogLSAoZHR1Y2tlcikgW2F1dGguYyBjYW5vaG9zdC5jIGNhbm9ob3N0LmggY29uZmlndXJlLmFjIGRlZmluZXMuaCBsb2dpbnJlYy5jXQogICBCdWcgIzk3NDogVGVhY2ggc3NoZCB0byB3cml0ZSBmYWlsZWQgbG9naW4gcmVjb3JkcyB0byBidG1wIGZvciBmYWlsZWQgYXV0aAogICBhdHRlbXB0cyAoY3VycmVudGx5IG9ubHkgZm9yIHBhc3N3b3JkLCBrYmRpbnQgYW5kIEMvUiwgb25seSBvbiBMaW51eCBhbmQKICAgSFAtVVgpLCBiYXNlZCBvbiBjb2RlIGZyb20gbG9naW4uYyBmcm9tIHV0aWwtbGludXguIFdpdGggYXNob2tfa292YWkgYXQKICAgaG90bWFpbC5jb20sIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtNYWtlZmlsZS5pbiBhdXRoLmMgYXV0aC5oIGF1dGgxLmMgYXV0aDIuYyBsb2dpbnJlYy5jIG1vbml0b3IuYwogICBtb25pdG9yLmggbW9uaXRvcl93cmFwLmMgbW9uaXRvcl93cmFwLmggc2Vzc2lvbi5jIHNzaGQuY10gQnVnICMxMjU6CiAgIChmaXJzdCBzdGFnZSkgQWRkIGF1ZGl0IGluc3RydW1lbnRhdGlvbiB0byBzc2hkLCBjdXJyZW50bHkgZGlzYWJsZWQgYnkKICAgZGVmYXVsdC4gIHdpdGggc3VnZ2VzdGlvbnMgZnJvbSBhbmQgb2sgZGptQAoKMjAwNTAyMDEKIC0gKGR0dWNrZXIpIFtsb2cuY10gQnVnICM5NzM6IGZvcmNlIGxvZ19pbml0KCkgdG8gb3BlbiBzeXNsb2csIHNpbmNlIG9uIHNvbWUKICAgcGxhdGZvcm1zIHN5c2xvZyB3aWxsIHJldmVydCB0byBpdHMgZGVmYXVsdCB2YWx1ZXMuICBUaGlzIG1heSByZXN1bHQgaW4KICAgbWVzc2FnZXMgZnJvbSBleHRlcm5hbCBsaWJyYXJpZXMgKGVnIGxpYndyYXApIGJlaW5nIHNlbnQgdG8gYSBkaWZmZXJlbnQKICAgZmFjaWxpdHkuCiAtIChkdHVja2VyKSBbc3NoZF9jb25maWcuNV0gQnVnICM3MDE6IHJlbW92ZSB3YXJuaW5nIGFib3V0CiAgIGtleWJvYXJkLWludGVyYWN0aXZlIHNpbmNlIHRoaXMgaXMgbm8gbG9uZ2VyIHRoZSBjYXNlLgoKMjAwNTAxMjQKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBvdHRvQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAxLzIxIDA4OjMyOjAyCiAgICAgW2F1dGgtcGFzc3dkLmMgc3NoZC5jXQogICAgIFdhcm4gaW4gYWR2YW5jZSBmb3IgcGFzc3dvcmQgYW5kIGFjY291bnQgZXhwaXJ5OyBpbml0aWFsaXplIGxvZ2lubXNnCiAgICAgYnVmZmVyIGVhcmxpZXIgYW5kIGNsZWFyIGl0IGFmdGVyIHByaXZzZXAgZm9yay4gb2sgYW5kIGhlbHAgZHR1Y2tlckAKICAgICBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMS8yMiAwODoxNzo1OQogICAgIFthdXRoLmNdCiAgICAgTG9nIHNvdXJjZSBvZiBjb25uZWN0aW9ucyBkZW5pZWQgYnkgQWxsb3dVc2VycywgRGVueVVzZXJzLCBBbGxvd0dyb3VwcyBhbmQKICAgICBEZW55R3JvdXBzLiAgYnogIzkwOSwgb2sgZGptQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMS8yMyAxMDoxODoxMgogICAgIFtjaXBoZXIuY10KICAgICBjb25maWcgb3B0aW9uICJDaXBoZXJzIiBzaG91bGQgYmUgY2FzZS1zZW5zaXRpdmU7IG9rIGR0dWNrZXJACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMS8yNCAxMDoyMjowNgogICAgIFtzY3AuYyBzZnRwLmNdCiAgICAgSGF2ZSBzY3AgYW5kIHNmdHAgd2FpdCBmb3IgdGhlIHNwYXduZWQgc3NoIHRvIGV4aXQgYmVmb3JlIHRoZXkgZXhpdAogICAgIHRoZW1zZWx2ZXMuICBUaGlzIHByZXZlbnRzIHNzaCBmcm9tIGJlaW5nIHVuYWJsZSB0byByZXN0b3JlIHRlcm1pbmFsCiAgICAgbW9kZXMgKG5vdCBub3JtYWxseSBhIHByb2JsZW0gb24gT3BlbkJTRCBidXQgY29tbW9uIHdpdGggLVBvcnRhYmxlCiAgICAgb24gUE9TSVggcGxhdGZvcm1zKS4gIEZyb20gcGVhayBhdCBhcmdvLnRyb2phLm1mZi5jdW5pLmN6IChieiM5NTApOwogICAgIG9rIGRqbUAgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDEvMjQgMTA6Mjk6MDYKICAgICBbbW9kdWxpXQogICAgIEltcG9ydCBuZXcgbW9kdWxpOyByZXF1ZXN0ZWQgYnkgZGVyYWFkdEAgYSB3ZWVrIGFnbwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDEvMjQgMTE6NDc6MTMKICAgICBbYXV0aC1wYXNzd2QuY10KICAgICAjaWYgLT4gI2lmZGVmIHNvIGJ1aWxkcyB3aXRob3V0IEhBVkVfTE9HSU5fQ0FQIHdvcmsgdG9vOyBvayBkam1AIG90dG9ACgoyMDA1MDEyMAogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8xMi8yMyAxNzozNTo0OAogICAgIFtzZXNzaW9uLmNdCiAgICAgY2hlY2sgZm9yIE5VTEw7IGZyb20gbXBlY2gKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTIvMjMgMTc6Mzg6MDcKICAgICBbc3NoLWtleWdlbi5jXQogICAgIGxlYWs7IGZyb20gbXBlY2gKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTIvMjMgMjM6MTE6MDAKICAgICBbc2VydmNvbmYuYyBzZXJ2Y29uZi5oIHNzaGQuYyBzc2hkX2NvbmZpZyBzc2hkX2NvbmZpZy41XQogICAgIGJ6ICM4OTg6IHN1cHBvcnQgQWRkcmVzc0ZhbWlseSBpbiBzc2hkX2NvbmZpZy4gZnJvbQogICAgIHBlYWtAYXJnby50cm9qYS5tZmYuY3VuaS5jejsgb2sgZGVyYWFkdEAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDEvMDUgMDg6NTE6MzIKICAgICBbc3NoY29ubmVjdC5jXQogICAgIHJlbW92ZSBkZWFkIGNvZGUsIGxvZyBjb25uZWN0KCkgZmFpbHVyZXMgd2l0aCBsZXZlbCBlcnJvciwgb2sgZGptQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wMS8wOCAwMDo0MToxOQogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIGBsb2dpbicobikgLT4gYGxvZyBpbicodik7CiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMS8xNyAwMzoyNTo0NgogICAgIFttb2R1bGkuY10KICAgICBDb3JyZWN0IHNwZWxsaW5nOiBTQ0hOT09SLT5TQ0hOT1JSOyBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMS8xNyAyMjo0ODozOQogICAgIFtzc2hkLmNdCiAgICAgTWFrZSBkZWJ1Z2dpbmcgb3V0cHV0IGNvbnRpbnVlIGFmdGVyIHJlZXhlYzsgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDEvMTkgMTM6MTE6NDcKICAgICBbYXV0aC1ic2RhdXRoLmMgYXV0aDItY2hhbGwuY10KICAgICBIYXZlIGtleWJvYXJkLWludGVyYWN0aXZlIGNvZGUgY2FsbCB0aGUgZHJpdmVycyBldmVuIGZvciByZXNwb25zZXMgZm9yCiAgICAgaW52YWxpZCBsb2dpbnMuICBUaGlzIGFsbG93cyB0aGUgZHJpdmVycyB0aGVtc2VsdmVzIHRvIGRlY2lkZSBob3cgdG8KICAgICBoYW5kbGUgdGhlbSBhbmQgcHJldmVudCBsZWFraW5nIGluZm9ybWF0aW9uIHdoZXJlIHBvc3NpYmxlLiAgRXhpc3RpbmcKICAgICBiZWhhdmlvdXIgZm9yIGJzZGF1dGggaXMgbWFpbnRhaW5lZCBieSBjaGVja2luZyBhdXRoY3R4dC0+dmFsaWQgaW4gdGhlCiAgICAgYnNkYXV0aCBkcml2ZXIuICBOb3RlIHRoYXQgYW55IHRoaXJkLXBhcnR5IGtiZGludCBkcml2ZXJzIHdpbGwgbm93IG5lZWQKICAgICB0byBiZSBhYmxlIHRvIGhhbmRsZSByZXNwb25zZXMgZm9yIGludmFsaWQgbG9naW5zLiAgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8xMi8yMiAwMjoxMzoxOQogICAgIFtjaXBoZXItY3RyLmMgY2lwaGVyLmNdCiAgICAgcmVtb3ZlIGZhbGxiYWNrIEFFUyBzdXBwb3J0IGZvciBvbGQgT3BlblNTTCwgYXMgT3BlbkJTRCBoYXMgaGFkIGl0IGZvcgogICAgIG1hbnkgeWVhcnMgbm93OyBvayBkZXJhYWR0QAogICAgIChJZCBzeW5jIG9ubHk6IFBvcnRhYmxlIHdpbGwgY29udGludWUgdG8gc3VwcG9ydCBvbGRlciBPcGVuU1NMcykKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBCdWcgIzk3MTogUHJldmVudCBsZWFraW5nIGluZm9ybWF0aW9uIGFib3V0IHVzZXIKICAgZXhpc3RlbmNlIHZpYSBrZXlib2FyZC1pbnRlcmFjdGl2ZS9wYW0sIGluIGNvbmp1bmN0aW9uIHdpdGggcHJldmlvdXMKICAgYXV0aDItY2hhbGwuYyBjaGFuZ2U7IHdpdGggQ29saW4gV2F0c29uIGFuZCBkam0uCiAtIChkdHVja2VyKSBbbG9naW5yZWMuaF0gQnVnICM5NTI6IEluY3JlYXNlIHNpemUgb2YgdXNlcm5hbWUgZmllbGQgdG8gMTI4CiAgIGJ5dGVzIHRvIHByZXZlbnQgZXJyb3JzIGZyb20gbG9naW5faW5pdF9lbnRyeSgpIHdoZW4gdGhlIHVzZXJuYW1lIGlzCiAgIGV4YWN0bHkgNjQgYnl0ZXMoISkgbG9uZy4gIEZyb20gYnJoYW1vbiBhdCBjaXNjby5jb20sIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFthdXRoLWNoYWxsLmMgYXV0aC5oIGF1dGgyLWNoYWxsLmNdIEJ1ZyAjOTM2OiBSZW1vdmUgcGFtIGZyb20KICAgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGtiZGludCBkZXZpY2VzIGlmIFVzZVBBTT1uby4gIG9rIGRqbUAKCjIwMDUwMTE4CiAtIChkdHVja2VyKSBbSU5TVEFMTCBNYWtlZmlsZS5pbiBjb25maWd1cmUuYWMgc3VydmV5LnNoLmluXSBJbXBsZW1lbnQKICAgIm1ha2Ugc3VydmV5IiBhbmQgIm1ha2Ugc2VuZC1zdXJ2ZXkiLiAgVGhpcyB3aWxsIHByb3ZpZGUgZGF0YSBvbiB0aGUKICAgY29uZmlndXJlIHBhcmFtZXRlcnMsIHBsYXRmb3JtIGFuZCBwbGF0Zm9ybSBmZWF0dXJlcyB0byB0aGUgZGV2ZWxvcG1lbnQKICAgdGVhbSwgd2hpY2ggd2lsbCBhbGxvdyAoYW1vbmcgb3RoZXIgdGhpbmdzKSBiZXR0ZXIgdGFyZ2V0dGluZyBvZiB0ZXN0aW5nLgogICBJdCdzIGVudGlyZWx5IHZvbHVudGFyeSBhbmQgaXMgb2ZmIGJlIGRlZmF1bHQuIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtzdXJ2ZXkuc2guaW5dIFJlbW92ZSBhbnkgYmxhbmsgbGluZXMgZnJvbSB0aGUgb3V0cHV0IG9mCiAgIGNjdmVyLXYgYW5kIGNjdmVyLVYuCgoyMDA0MTIyMAogLSAoZHR1Y2tlcikgW3NzaC1yYW5kLWhlbHBlci5jXSBGYWxsIGJhY2sgdG8gY29tbWFuZC1iYXNlZCBzZWVkaW5nIGlmIHJlYWRpbmcKICAgZnJvbSBwcm5nZCBpcyBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSBidXQgZmFpbHMgYXQgcnVuIHRpbWUsIGVnIGJlY2F1c2UKICAgcHJuZ2QgaXMgbm90IHJ1bm5pbmcuICBOb3RlIHRoYXQgaWYgeW91IGhhdmUgcHJuZ2QgcnVubmluZyB3aGVuIE9wZW5TU0ggaXMKICAgYnVpbHQsIE9wZW5TU0wgd2lsbCBjb25zaWRlciBpdHNlbGYgaW50ZXJuYWxseSBzZWVkZWQgYW5kIHJhbmQtaGVscGVyIHdvbid0CiAgIGJlIGJ1aWx0IGF0IGFsbCB1bmxlc3MgZXhwbGljaXRseSBlbmFibGVkIHZpYSAtLXdpdGgtcmFuZC1oZWxwZXIuICBvayBkam1ACiAtIChkdHVja2VyKSBbcmVncmVzcy9yZWtleS5zaF0gVG91Y2ggZGF0YWZpbGUgYmVmb3JlIGZpbGxpbmcgd2l0aCBkZCwgc2luY2UKICAgb24gc29tZSB3YWNreSBwbGF0Zm9ybXMgKGVnIG9sZCBBSVhlcyksIGRkIHdpbGwgcmVmdXNlIHRvIGNyZWF0ZSBhbiBvdXRwdXQKICAgZmlsZSBpZiBpdCBkb2Vzbid0IGV4aXN0LgoKMjAwNDEyMTMKIC0gKGR0dWNrZXIpIFtjb250cmliL2ZpbmRzc2guc2hdIENsZWFuIHVwIG9uIGludGVycnVwdDsgZnJvbQogICBhbWFyZW5kcmEuZ29kYm9sZSBhdCBnZSBjb20uCgoyMDA0MTIxMQogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8xMi8wNiAxNjowMDo0MwogICAgIFtidWZhdXguY10KICAgICB1c2UgMHgwMCBub3QgXDAgc2luY2UgYnVmW10gaXMgYSBiaWdudW0KICAgLSBmZ3NjaEBjdnMub3BlbmJzZC5vcmcgMjAwNC8xMi8xMCAwMzoxMDo0MgogICAgIFtzZnRwLmNdCiAgICAgLSBmaXggZ2xvYmJlZCBscyBmb3IgcGF0aHMgdGhlIHNhbWUgbGVuZ2h0IGFzIHRoZSBnbG9iYmVkIHBhdGggd2hlbgogICAgICAgd2UgaGF2ZSBhIHVuaXF1ZSBtYXRjaGluZy4KICAgICAtIGZpeCBnbG9iYmVkIGxzIGluIGNhc2Ugb2YgYSBkaXJlY3Rvcnkgd2hlbiB3ZSBoYXZlIGEgdW5pcXVlIG1hdGNoaW5nLgogICAgIC0gYXMgYSBzaWRlIGVmZmVjdCwgaWYgdGhlIHBhdGggZG9lcyBub3QgZXhpc3QgZXJyb3IgKHVzZWQgdG8gc2lsZW50bHkKICAgICAgIGlnbm9yZSkuCiAgICAgLSBkb24ndCBkbyBleHRyYSBkb19sc3RhdCgpIGlmIHdlIG9ubHkgaGF2ZSBvbmUgbWF0Y2hpbmcgZmlsZS4KICAgICBkam1AIG9rCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8xMi8xMSAwMTo0ODo1NgogICAgIFthdXRoLXJzYS5jIGF1dGgyLXB1YmtleS5jIGF1dGhmaWxlLmMgbWlzYy5jIG1pc2MuaF0KICAgICBGaXggZGVidWcgY2FsbCBpbiBlcnJvciBwYXRoIG9mIGF1dGhvcml6ZWRfa2V5cyBwcm9jZXNzaW5nIGFuZCBmaXggcmVsYXRlZAogICAgIHdhcm5pbmdzOyBvayBkam1ACgoyMDA0MTIwOAogLSAodGltKSBbY29uZmlndXJlLmFjXSBDb21tZW50IHNvbWUgbm9uIG9idmlvdXMgcGxhdGZvcm1zIGluIHRoZQogdGFyZ2V0LXNwZWNpZmljIGNhc2Ugc3RhdGVtZW50LiBTdWdnZXN0ZWQgYW5kIE9LIGJ5IGR0dWNrZXJACgoyMDA0MTIwNwogLSAoZHR1Y2tlcikgW3JlZ3Jlc3Mvc2NwLnNoXSBVc2UgcG9ydGFibGUtZnJpZW5kbHkgJERJRkZPUFRzIGluIG5ldyB0ZXN0LgoKMjAwNDEyMDYKIC0gKGR0dWNrZXIpIFtUT0RPIFdBUk5JTkcuUk5HXSBVcGRhdGUgdG8gcmVmbGVjdCBjdXJyZW50IHJlYWxpdHkuICBvayBkam1ACiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzExLzI1IDIyOjIyOjE0CiAgICAgW3NmdHAtY2xpZW50LmMgc2Z0cC5jXQogICAgIGxlYWs7IGZyb20gbXBlY2gKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTEvMjkgMDA6MDU6MTcKICAgICBbc2Z0cC4xXQogICAgIG1pc3NpbmcgZnVsbCBzdG9wOwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8xMS8yOSAwNzo0MToyNAogICAgIFtzZnRwLWNsaWVudC5oIHNmdHAuY10KICAgICBTb21lIHNtYWxsIGZpeGVzIGZyb20gbW9yaXR6QGpvZGVpdC5vcmcuIG9rIGRlcmFhZHRACiAgIC0gamFyZWR5QGN2cy5vcGVuYnNkLm9yZyAyMDA0LzEyLzA1IDIzOjU1OjA3CiAgICAgW3NmdHAuMV0KICAgICAtIGV4cGxhaW4gdGhhdCBwYXR0ZXJucyBjYW4gYmUgdXNlZCBhcyBhcmd1bWVudHMgaW4gZ2V0L3B1dC9scy9ldGMKICAgICAgIGNvbW1hbmRzIChwcm9kZGVkIGJ5IE1pY2hhZWwgS251ZHNlbikKICAgICAtIGRlc2NyaWJlIGxzIGZsYWdzIGFzIGEgbGlzdAogICAgIC0gb3RoZXIgbWlub3IgaW1wcm92ZW1lbnRzCiAgICAgb2sgam1jLCBkam0KICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzEyLzA2IDExOjQxOjAzCiAgICAgW2F1dGgtcnNhLmMgYXV0aDItcHVia2V5LmMgYXV0aGZpbGUuYyBtaXNjLmMgbWlzYy5oIHNzaC5oIHNzaGQuOF0KICAgICBEaXNjYXJkIG92ZXItbGVuZ3RoIGF1dGhvcml6ZWRfa2V5cyBlbnRyaWVzIHJhdGhlciB0aGFuIGNvbXBsYWluaW5nIHdoZW4KICAgICB0aGV5IGRvbid0IGRlY29kZS4gIGJ6ICM4ODQsIHdpdGggJiBvayBkam1ACiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jIChyZWdyZXNzLykKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMjYgMDY6MTY6MDcKICAgICBbcmVleGVjLnNoXQogICAgIGRvbid0IGNoYW5nZSB0aGUgbmFtZSBvZiB0aGUgY29waWVkIHNzaGQgZm9yIHRoZSByZWV4ZWMgZmFsbGJhY2sgdGVzdCwKICAgICBtYWtlcyBsaWZlIHNpbXBsZXIgZm9yIHBvcnRhYmxlCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNy8wOCAxMjo1OTozNQogICAgIFtzY3Auc2hdCiAgICAgUmVncmVzcyB0ZXN0IGZvciBieiAjODYzIChzY3AgZG91YmxlLWVycm9yKSwgcmVxdWlyZXMgJFNVRE8uICBvayBtYXJrdXNACiAgIC0gZGF2aWRAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDcvMDkgMTk6NDU6NDMKICAgICBbTWFrZWZpbGVdCiAgICAgYWRkIGEgbWlzc2luZyBDTEVBTkZJTEVTIHVzZWQgaW4gdGhlIHJlLWV4ZWMgdGVzdAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8xMC8wOCAwMjowMTo1MAogICAgIFtyZWV4ZWMuc2hdCiAgICAgc2hyaW5rIGFuZCB0aWR5OyBvayBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8xMC8yOSAyMzo1OToyMgogICAgIFtNYWtlZmlsZSBhZGRlZCBicm9rZW5rZXlzLnNoXQogICAgIHJlZ3Jlc3Npb24gdGVzdCBmb3IgaGFuZGxpbmcgb2YgY29ycnVwdCBrZXlzIGluIGF1dGhvcml6ZWRfa2V5cyBmaWxlCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzExLzA3IDAwOjMyOjQxCiAgICAgW211bHRpcGxleC5zaF0KICAgICByZWdyZXNzaW9uIHRlc3RzIGZvciBuZXcgbXVsdGlwbGV4IGNvbW1hbmRzCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8xMS8yNSAwOTozOToyNwogICAgIFt0ZXN0LWV4ZWMuc2hdCiAgICAgUmVtb3ZlIG9ic29sZXRlIFJob3N0c0F1dGhlbnRpY2F0aW9uIGZyb20gdGVzdCBjb25maWc7IG9rIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzEyLzA2IDEwOjQ5OjU2CiAgICAgW3Rlc3QtZXhlYy5zaF0KICAgICBDaGVjayBpZiBURVNUX1NTSF9TU0hEIGlzIGEgZnVsbCBwYXRoIHRvIHNzaGQgYmVmb3JlIHNlYXJjaGluZzsgb2sgbWFya3VzQAoKMjAwNDEyMDMKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTEvMDcgMTc6NDI6MzYKICAgICBbc3NoLjFdCiAgICAgb3B0aW9ucyBzb3J0LCBhbmQgd2hpdGVzcGFjZTsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTEvMDcgMTc6NTc6MzAKICAgICBbc3NoLmNdCiAgICAgdXNhZ2UoKToKICAgICAtIGFkZCAtTwogICAgIC0gc3luYyAtUyB3LyBtYW5wYWdlCiAgICAgLSByZW1vdmUgLWgKIC0gKGR0dWNrZXIpIFthdXRoMS5jIGF1dGgyLmNdIElmIHRoZSB1c2VyIHN1Y2Nlc3NmdWxseSBhdXRoZW50aWNhdGVzIGJ1dCBpcwogICBzdWJzZXF1ZW50bHkgZGVuaWVkIGJ5IHRoZSBQQU0gYXV0aCBzdGFjaywgc2VuZCB0aGUgUEFNIG1lc3NhZ2UgdG8gdGhlCiAgIHVzZXIgdmlhIHBhY2tldF9kaXNjb25uZWN0IChQcm90b2NvbCAxKSBvciB1c2VyYXV0aF9iYW5uZXIgKFByb3RvY29sIDIpLgogICBvayBkam1ACgoyMDA0MTEwNwogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8xMS8wNSAxMjoxOTo1NgogICAgIFtzZnRwLmNdCiAgICAgY29tbWFuZCBlZGl0aW5nIGFuZCBoaXN0b3J5IHN1cHBvcnQgdmlhIGxpYmVkaXQ7IG9rIG1hcmt1c0AKICAgICB0aGFua3MgdG8gaHNob2V4ZXJAIGFuZCBtYW55IHRlc3RlcnMgb24gdGVjaEAgdG9vCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzExLzA3IDAwOjAxOjQ2CiAgICAgW2NsaWVudGxvb3AuYyBjbGllbnRsb29wLmggc3NoLjEgc3NoLmNdCiAgICAgYWRkIGJhc2ljIGNvbnRyb2wgb2YgYSBydW5uaW5nIG11bHRpcGxleCBtYXN0ZXIgY29ubmVjdGlvbjsgaW5jbHVkaW5nIHRoZQogICAgIGFiaWxpdHkgdG8gY2hlY2sgaXRzIHN0YXR1cyBhbmQgcmVxdWVzdCBpdCB0byBleGl0OyBvayBtYXJrdXNACiAtIChkdHVja2VyKSBbSU5TVEFMTCBNYWtlZmlsZS5pbiBjb25maWd1cmUuYWNdIEFkZCAtLXdpdGgtbGliZWRpdCBjb25maWd1cmUKICAgb3B0aW9uIGFuZCBzdXBwb3J0aW5nIG1ha2VmaWxlIGJpdHMgYW5kIGRvY3VtZW50YXRpb24uCgoyMDA0MTEwNQogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wOC8zMCAwOToxODowOAogICAgIFtMSUNFTkNFXQogICAgIHMva2V5Z2VuL2tleXNjYW4vCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA4LzMwIDIxOjIyOjQ5CiAgICAgW3NzaC1hZGQuMSBzc2guMV0KICAgICAuWHNlc3Npb24gLT4gLnhzZXNzaW9uOwogICAgIG9yaWdpbmFsbHkgZnJvbSBhIHByIGZyb20gZiBhdCBvYmlpdCBkb3Qgb3JnLCBidXQgbWlzc2VkIGJ5IG15c2VsZjsKICAgICBvayBtYXJrdXNAIG1hdHRoaWV1QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wOS8wNyAyMzo0MTozMAogICAgIFtjbGllbnRsb29wLmMgc3NoLmNdCiAgICAgY2xlYW51cCBtdWx0aXBsZXggY29udHJvbCBzb2NrZXQgb24gU0lHSFVQIHRvbywgc3BvdHRlZCBieSBzdHVybUAKICAgICBvayBtYXJrdXNAIGRlcmFhZHRACiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNC8wOS8xNSAwMDo0NjowMQogICAgIFtzc2guY10KICAgICAvKiBmYWxsdGhyb3VnaCAqLyBpcyBzb21ldGhpbmcgYSBwcm9ncmFtbWVyIHVuZGVyc3RhbmRzLiAgQnV0CiAgICAgLyogRkFMTFRIUk9VR0ggKi8gaXMgYWxzbyB1bmRlcnN0b29kIGJ5IGxpbnQsIHNvIHRoYXQgaXMgYmV0dGVyLgogICAtIGphcmVkeUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wOS8xNSAwMzoyNTo0MQogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIG1lbnRpb24gUHJpbnRMYXN0TG9nIG9ubHkgcHJpbnRzIGxhc3QgbG9naW4gdGltZSBmb3IgaW50ZXJhY3RpdmUKICAgICBzZXNzaW9ucywgbGlrZSBQcmludE1vdGQgbWVudGlvbnMuCiAgICAgRnJvbSBNaWNoYWVsIEtudWRzZW4sIHdpdGggd29yZGluZyBjaGFuZ2VkIHNsaWdodGx5IHRvIG1hdGNoIHRoZQogICAgIFByaW50TW90ZCBkZXNjcmlwdGlvbi4KICAgICBvayBkam0KICAgLSBtaWNrZXlAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDkvMTUgMTg6NDI6MjcKICAgICBbc3NoZC5jXQogICAgIHVzZSBsZXNzIGRvdWJsZXMgaW4gZGFlbW9uczsgbWFya3VzQCBvawogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDkvMTUgMTg6NDY6MDQKICAgICBbc2NwLmNdCiAgICAgc2NyYXRjaCB0aGF0IGRvIHsgfSB3aGlsZSAoMCkgd3JhcHBlciBpbiB0aGlzIGNhc2UKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDkvMjMgMTM6MDA6MDQKICAgICBbc3NoLmNdCiAgICAgY29ycmVjdGx5IGhvbm91ciAtbiBpbiBtdWx0aXBsZXggY2xpZW50IG1vZGU7IHNwb3R0ZWQgYnkgc3R1cm1AIG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDkvMjUgMDM6NDU6MTQKICAgICBbc3NoZC5jXQogICAgIHRoZXNlIHByaW50ZiBhcmdzIGFyZSBubyBsb25nZXIgZG91YmxlOyBvayBkZXJhYWR0QCBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzEwLzA3IDEwOjEwOjI0CiAgICAgW3NjcC4xIHNmdHAuMSBzc2guMSBzc2hfY29uZmlnLjVdCiAgICAgZG9jdW1lbnQgS2JkSW50ZXJhY3RpdmVEZXZpY2VzOyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzEwLzA3IDEwOjEyOjM2CiAgICAgW3NzaC1hZ2VudC5jXQogICAgIGRvbid0IHVubGluayBhZ2VudCBzb2NrZXQgd2hlbiBiaW5kKCkgZmFpbHMsIHNwb3R0ZWQgYnkgcmljaCBBVAogICAgIHJpY2gtcGF1bC5uZXQsIG9rIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTAvMjAgMTE6NDg6NTMKICAgICBbcGFja2V0LmMgc3NoMS5oXQogICAgIGRpc2Nvbm5lY3QgZm9yIGludmFsaWQgKG91dCBvZiByYW5nZSkgbWVzc2FnZSB0eXBlcy4KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTAvMjkgMjE6NDc6MTUKICAgICBbY2hhbm5lbHMuYyBjaGFubmVscy5oIGNsaWVudGxvb3AuY10KICAgICBmaXggc29tZSB3aW5kb3cgc2l6ZSBjaGFuZ2UgYnVncyBmb3IgbXVsdGlwbGV4ZWQgY29ubmVjdGlvbnM6IHdpbmRvd3Mgc2l6ZXMKICAgICB3ZXJlIG5vdCBiZWluZyB1cGRhdGVkIGlmIHRoZXkgaGFkIGNoYW5nZWQgYWZ0ZXIgfl5aIHN1c3BlbmRzIGFuZCBTSUdXSU5DSAogICAgIHdhcyBub3QgYmVpbmcgcHJvY2Vzc2VkIHVubGVzcyB0aGUgZmlyc3QgY29ubmVjdGlvbiBoYWQgcmVxdWVzdGVkIGEgdHR5OwogICAgIG9rIG1hcmt1cwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8xMC8yOSAyMjo1Mzo1NgogICAgIFtjbGllbnRsb29wLmMgbWlzYy5oIHJlYWRwYXNzLmMgc3NoLWFnZW50LmNdCiAgICAgZmFjdG9yIG91dCBjb21tb24gcGVybWlzc2lvbi1hc2tpbmcgY29kZSB0byBzZXBhcmF0ZSBmdW5jdGlvbjsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8xMC8yOSAyMzo1NjoxNwogICAgIFtidWZhdXguYyBidWZhdXguaCBidWZmZXIuYyBidWZmZXIuaF0KICAgICBpbnRyb2R1Y2UgYSBuZXcgYnVmZmVyIEFQSSB0aGF0IHJldHVybnMgYW4gZXJyb3IgcmF0aGVyIHRoYW4gZmF0YWwoKWluZwogICAgIHdoZW4gcHJlc2VudGVkIHdpdGggYmFkIGRhdGE7IG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTAvMjkgMjM6NTc6MDUKICAgICBba2V5LmNdCiAgICAgdXNlIG5ldyBidWZmZXIgQVBJIHRvIGF2b2lkIGZhdGFsIGVycm9ycyBvbiBjb3JydXB0IGtleXMgaW4gYXV0aG9yaXplZF9rZXlzCiAgICAgZmlsZXM7IG9rIG1hcmt1c0AKCjIwMDQxMTAyCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIGluY2x1ZGVzLmhdIEJ1ZyAjOTQ3OiBGaXggY29tcGlsZSBlcnJvciBvbiBIUC1VWAogICAxMC54IGJ5IHRlc3RpbmcgZm9yIGNvbmZsaWN0cyBpbiBzaGFkb3cuaCBhbmQgdW5kZWYnaW5nIF9JTkNMVURFX19TVERDX18KICAgb25seSBpZiBhIGNvbmZsaWN0IGlzIGRldGVjdGVkLgoKMjAwNDEwMTkKIC0gKGR0dWNrZXIpIFt1aWRzd2FwLmNdIERvbid0IHRlc3QgZHJvcHBpbmcgb2YgZ2lkcyBmb3IgdGhlIHJvb3QgdXNlciBvcgogICBvbiBDeWd3aW4uICBDeWd3aW4gcGFydHMgZnJvbSB2aW5zY2hlbiBhdCByZWRoYXQgY29tOyBvayBkam1ACgoyMDA0MTAxNgogLSAoZGptKSBbYXV0aC1wYW0uY10gc25wcmludGYtPnN0cmwqLCBmaXggc2VydmVyIG1lc3NhZ2UgbGVuZ3RoIGNhbGN1bGF0aW9uczsKICAgb2sgZHR1Y2tlckAKCjIwMDQxMDA2CiAtIChkdHVja2VyKSBbUkVBRE1FLnByaXZzZXBdIEJ1ZyAjOTM5OiB1cGRhdGUgaW5mbyBhYm91dCBIUC1VWCBUcnVzdGVkIE1vZGUKICAgYW5kIG90aGVyIFBBTSBwbGF0Zm9ybXMuCiAtIChkdHVja2VyKSBbbW9uaXRvcl9tbS5jIG9wZW5ic2QtY29tcGF0L3htbWFwLmNdIEJ1ZyAjOTQwOiBjYXN0IGNvbnN0YW50cwogICB0byB2b2lkICogdG8gYXBwZWFzZSBwaWNreSBjb21waWxlcnMgKGVnIFRydTY0J3MgImNjIC1zdGQxIikuCgoyMDA0MDkzMAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gU2V0IEFDX1BBQ0tBR0VfTkFNRS4gIG9rIGRqbUAKCjIwMDQwOTIzCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYnNkLXNucHJpbnRmLmNdIFByZXZpb3VzIGNoYW5nZSB3YXMgb2ZmIGJ5IG9uZSwKICAgd2hpY2ggY291bGQgaGF2ZSBjYXVzZWQgdGhlIGp1c3RpZmljYXRpb24gdG8gYmUgd3JvbmcuICBvayBkam1ACgoyMDA0MDkyMQogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JzZC1zbnByaW50Zi5jXSBDaGVjayBmb3IgbWF4IGxlbmd0aCB0b28uCiAgIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtjb250cmliL2N5Z3dpbi9zc2gtaG9zdC1jb25maWddIFVwZGF0ZSB0byBtYXRjaCBjdXJyZW50IEN5Z3dpbgogICBpbnN0YWxsIHByb2Nlc3MuICBQYXRjaCBmcm9tIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20uCgoyMDA0MDkxMgogLSAoZGptKSBbbG9naW5yZWMuY10gU3RhcnQgS05GIGFuZCB0aWR5IHVwIG9mIHRoaXMgbG9uZy1uZWdsZWN0ZWQgZmlsZS4KICAgTm8gY2hhbmdlIGluIHJlc3VsdGFudCBiaW5hcnkKIC0gKGRqbSkgW2xvZ2lucmVjLmNdIF9fZnVuY19faWZpeQogLSAoZGptKSBbbG9naW5yZWMuY10geG1hbGxvYwogLSAoZGptKSBbc3NoLmMgc3NoZC5jIHZlcnNpb24uaF0gRG9uJ3QgZGl2dWxnZSBwb3J0YWJsZSB2ZXJzaW9uIGluIHByb3RvY29sCiAgIGJhbm5lci4gU3VnZ2VzdGVkIGJ5IGRlcmFhZHRALCBvayBtb3VyaW5nQCwgZHR1Y2tlckAKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEZpeCBpbmNvcnJlY3QgcXVvdGluZyBhbmQgdGVzdHMgZm9yIGNyb3NzLWNvbXBpbGUuCiAgIFBhcnRseSBieSAmIG9rIGRqbUAuCgoyMDA0MDkxMQogLSAoZGptKSBbc3NoLWFnZW50LmNdIHVuaWZkZWYgc29tZSBjeWd3aW4gY29kZTsgb2sgZHR1Y2tlckAKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jIGF1dGgtcGFtLmggc2Vzc2lvbi5jXSBCdWcgIzg5MDogU2VuZCBvdXRwdXQgZnJvbQogICBmYWlsaW5nIFBBTSBzZXNzaW9uIG1vZHVsZXMgdG8gdXNlciB0aGVuIGV4aXQsIHNpbWlsYXIgdG8gdGhlIHdheQogICAvZXRjL25vbG9naW4gaXMgaGFuZGxlZC4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBSZWxvY2F0ZSBzc2hwYW1fc3RvcmVfY29udigpLCBubyBjb2RlIGNoYW5nZS4KIC0gKGRqbSkgW2F1dGgyLWtiZGludC5jIGF1dGgyLW5vbmUuYyAgYXV0aDItcGFzc3dkLmMgYXV0aDItcHVia2V5LmNdIAogICBNYWtlIGN5Z3dpbiBjb2RlIG1vcmUgY29uc2lzdGVudCB3aXRoIHRoYXQgd2hpY2ggc3Vycm91bmRzIGl0CiAtIChkdHVja2VyKSBbYXV0aC1wYW0uYyBhdXRoLmggYXV0aDItbm9uZS5jIGF1dGgyLmMgbW9uaXRvci5jIG1vbml0b3Jfd3JhcC5jXQogICBCdWcgIzg5MjogU2VuZCBtZXNzYWdlcyBmcm9tIGZhaWxpbmcgUEFNIGFjY291bnQgbW9kdWxlcyB0byB0aGUgY2xpZW50IHZpYQogICBTU0gyX01TR19VU0VSQVVUSF9CQU5ORVIgbWVzc2FnZXMuICBOb3RlIHRoYXQgdGhpcyB3aWxsIG5vdCBoYXBwZW4gd2l0aAogICBTU0gyIGtiZGludCBhdXRoZW50aWNhdGlvbiwgd2hpY2ggbmVlZCB0byBiZSBkZWFsdCB3aXRoIHNlcGFyYXRlbHkuICBvayBkam1ACiAtIChkdHVja2VyKSBbc2Vzc2lvbi5jXSBCdWcgIzkyNzogbWFrZSAuaHVzaGxvZ2luIHNpbGVudCBhZ2Fpbi4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjMzIxOiBBZGQgY3Jvc3MtY29tcGlsZSBzdXBwb3J0IHRvIGNvbmZpZ3VyZS4KICAgUGFydHMgYnkgY2h1YSBhdCBheXJuZXR3b3Jrcy5jb20sIGFzdHJhbmQgYXQgbHlzYXRvci5saXUuc2UgYW5kIG1lLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2F1dGgta3JiNS5jXSBCdWcgIzkyMjogUGFzcyBLUkI1Q0NOQU1FIHRvIFBBTS4gIEZyb20gZGVlbmdlcnQKICAgYXQgYW5sLmdvdiwgb2sgZGptQAoKMjAwNDA4MzAKIC0gKGR0dWNrZXIpIFtzZXNzaW9uLmMgb3BlbmJzZC1jb21wYXQvYnNkLWN5Z3dpbl91dGlsLntjLGh9XSBCdWcgIzkxNTogb25seQogICBjb3B5IHJlcXVpcmVkIGVudmlyb25tZW50IHZhcmlhYmxlcyBvbiBDeWd3aW4uICBQYXRjaCBmcm9tIHZpbnNjaGVuIGF0CiAgIHJlZGhhdC5jb20sIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL01ha2VmaWxlXSBDbGVhbiBzY3Atc3NoLXdyYXBwZXIuc2NwIHRvby4gIFBhdGNoIGZyb20KICAgdmluc2NoZW4gYXQgcmVkaGF0LmNvbS4KIC0gKGR0dWNrZXIpIFtNYWtlZmlsZS5pbiBjb250cmliL3NzaC1jb3B5LWlkXSBCdWcgIzg5NDogSW1wcm92ZSBwb3J0YWJpbGl0eQogICBvZiBzaGVsbCBjb25zdHJ1Y3RzLiAgUGF0Y2ggZnJvbSBjandhdHNvbiBhdCBkZWJpYW4ub3JnLgoKMjAwNDA4MjkKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5jXSBQcmV2ZW50IGdldHJyc2V0YnluYW1lIGZyb20KICAgZmFpbGluZyB3aXRoIE5PTUVNT1JZIGlmIG5vIHNpZ3MgYXJlIHJldHVybmVkIGFuZCBtYWxsb2MoMCkgcmV0dXJucyBOVUxMLgogICBGcm9tIE1hcnRpbi5LcmFlbWVyIGF0IEZ1aml0c3UtU2llbWVucy5jb207IG9rIGRqbUAKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDgvMjMgMTE6NDg6MDkKICAgICBbYXV0aGZpbGUuY10KICAgICBmaXggZXJyb3IgcGF0aCwgc3BvdHRlZCBieSBNYXJ0aW4uS3JhZW1lciBBVCBGdWppdHN1LVNpZW1lbnMuY29tOyBvayBtYXJrdXMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDgvMjMgMTE6NDg6NDcKICAgICBbY2hhbm5lbHMuY10KICAgICB0eXBvLCBzcG90dGVkIGJ5IE1hcnRpbi5LcmFlbWVyIEFUIEZ1aml0c3UtU2llbWVucy5jb207IG9rIG1hcmt1cwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDgvMjMgMTQ6MjY6MzgKICAgICBbc3NoLWtleXNpZ24uYyBzc2guY10KICAgICBVc2UgcGVybWFuZW50bHlfc2V0X3VpZCgpIGluIHNzaCBhbmQgc3NoLWtleXNpZ24gZm9yIGNvbnNpc3RlbmN5LCBtYXRjaGVzCiAgICAgY2hhbmdlIGluIFBvcnRhYmxlOyBvayBtYXJrdXNAIChDVlMgSUQgc3luYyBvbmx5KQogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDgvMjMgMTQ6Mjk6MjMKICAgICBbc3NoLWtleXNpZ24uY10KICAgICBSZW1vdmUgZHVwbGljYXRlIGdldHVpZCgpLCBzdWdnZXN0ZWQgYnkgJiBvayBtYXJrdXNACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA4LzI2IDE2OjAwOjU1CiAgICAgW3NzaC4xIHNzaGQuOF0KICAgICBnZXQgcmlkIG9mIHJlZmVyZW5jZXMgdG8gcmhvc3RzIGF1dGhlbnRpY2F0aW9uOyB3aXRoIGptY0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDgvMjggMDE6MDE6NDgKICAgICBbc3NoZC5jXQogICAgIGRvbid0IGVycm9uZW91c2x5IGNsb3NlIHN0ZGluIGZvciAhcmVleGVjIGNhc2UsIGZyb20gRGF2ZSBKb2huc29uOwogICAgIG9rIG1hcmt1c0AKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEluY2x1ZGUgc3lzL3N0cmVhbS5oIGluIHN5cy9wdG1zLmggaGVhZGVyIGNoZWNrLAogICBmaXhlcyBjb25maWd1cmUgd2FybmluZyBvbiBTb2xhcmlzIHJlcG9ydGVkIGJ5IHdrbm94IGF0IG1pdHJlLm9yZy4KIC0gKGR0dWNrZXIpIFtyZWdyZXNzL211bHRpcGxleC5zaF0gU2tpcCB0ZXN0IG9uIHBsYXRmb3JtcyB0aGF0IGRvIG5vdAogICBzdXBwb3J0IEZEIHBhc3Npbmcgc2luY2UgbXVsdGlwbGV4IHJlcXVpcmVzIGl0LiAgTm90ZWQgYnkgdGltQAogLSAoZHR1Y2tlcikgW3JlZ3Jlc3MvZHluYW1pYy1mb3J3YXJkLnNoXSBBbGxvdyB0aW1lIGZvciBjb25uZWN0aW9ucyB0byBiZSB0b3JuCiAgIGRvd24sIG5lZWRlZCBvbiBzb21lIHBsYXRmb3Jtcywgc2hvdWxkIGJlIGhhcm1sZXNzIG9uIG90aGVycy4gIFBhdGNoIGZyb20KICAgamFzb24gYXQgZGV2cmFuZG9tLm9yZy4KIC0gKGR0dWNrZXIpIFtyZWdyZXNzL3NjcC5zaF0gTWFrZSB0aGlzIHdvcmsgb24gQ3lnd2luIHRvbywgd2hpY2ggZG9lc24ndCBsaWtlCiAgIGZpbGVzIGVuZGluZyBpbiAuZXhlIHRoYXQgYXJlbid0IGJpbmFyaWVzOyBwYXRjaCBmcm9tIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20uCiAtIChkdHVja2VyKSBbTWFrZWZpbGUuaW5dIEdldCByZWdyZXNzL01ha2VmaWxlIHN5bWxpbmsgcmlnaHQgZm9yIG91dC1vZi10cmVlCiAgIGJ1aWxkcyB0b28sIGZyb20gdmluc2NoZW4gYXQgcmVkaGF0LmNvbS4KIC0gKGR0dWNrZXIpIFtyZWdyZXNzL2FnZW50LXB0cmFjZS5zaF0gU2tpcCBwdHJhY2UgdGVzdCBvbiBPU0YxL0RVbml4L1RydTY0CiAgIHRvbzsgcGF0Y2ggZnJvbSBjbWFkYW1zIGF0IGhpd2FheS5uZXQuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBSZXBsYWNlIG5vbi1wb3J0YWJsZSBlY2hvIFxuIHdpdGggZXh0cmEgZWNoby4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5jXSBCdWcgIzcxMjogRXhwbGljaXRseSBjaGVjayBmb3IKICAgYWNjb3VudHMgd2l0aCBhdXRoZW50aWNhdGlvbiBjb25maWdzIHRoYXQgc3NoZCBjYW4ndCBzdXBwb3J0IChpZQogICBTWVNURU09Tk9ORSBhbmQgQVVUSDE9c29tZXRoaW5nKS4KCjIwMDQwODI4CiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvbWt0ZW1wLmNdIFJlbW92ZSBzdXBlcmZsdW91cyBDeWd3aW4gI2lmZGVmOyBmcm9tCiAgIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20uCgoyMDA0MDgyMwogLSAoZGptKSBbc3NoLXJhbmQtaGVscGVyLmNdIFR5cG8uIEZvdW5kIGJ5IAogICBNYXJ0aW4uS3JhZW1lciBBVCBGdWppdHN1LVNpZW1lbnMuY29tCiAtIChkam0pIFtsb2dpbnJlYy5jXSBUeXBvIGFuZCBiYWQgYXJncyBpbiBlcnJvciBtZXNzYWdlczsgU3BvdHRlZCBieSAKICAgTWFydGluLktyYWVtZXIgQVQgRnVqaXRzdS1TaWVtZW5zLmNvbQoKMjAwNDA4MTcKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL1JFQURNRS5yZWdyZXNzXSBOb3RlIGNvbXBhdGliaWxpdHkgaXNzdWVzIHdpdGggR05VIGhlYWQuCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDgvMTYgMDg6MTc6MDEKICAgICBbdmVyc2lvbi5oXQogICAgIDMuOQogLSAoZGptKSBDcmFuayBSUE0gc3BlYyB2ZXJzaW9uIG51bWJlcnMKIC0gKGRqbSkgUmVsZWFzZSAzLjlwMQoKMjAwNDA4MTYKIC0gKGR0dWNrZXIpIFthY2NvbmZpZy5oIGF1dGgtcGFtLmMgY29uZmlndXJlLmFjXSBTZXQgcmVhbCB1aWQgdG8gbm9uLXJvb3QKICAgdG8gY29udmluY2UgU29sYXJpcyBQQU0gdG8gaG9ub3VyIHBhc3N3b3JkIGNvbXBsZXhpdHkgcnVsZXMuICBvayBkam1ACgoyMDA0MDgxNQogLSAoZHR1Y2tlcikgW01ha2VmaWxlLmluIHNzaC1rZXlzaWduLmMgc3NoLmNdIFVzZSBwZXJtYW5lbnRseV9zZXRfdWlkKCkgc2luY2UKICAgaXQgZG9lcyB0aGUgcmlnaHQgdGhpbmcgb24gYWxsIHBsYXRmb3Jtcy4gIG9rIGRqbUAKIC0gKGRqbSkgW2FjY29uZmlnLmggY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluIAogICBvcGVuYnNkLWNvbXBhdC9ic2QtY2xvc2Vmcm9tLmMgb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuYyAKICAgb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuaCBvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oXSBVc2Ugc21hcnRlciAKICAgY2xvc2Vmcm9tKCkgcmVwbGFjZW1lbnQgZnJvbSBzdWRvOyBvayBkdHVja2VyQAogLSAoZGptKSBbbG9naW5yZWMuY10gQ2hlY2sgdGhhdCBzZWVrIHN1Y2NlZWRlZCBoZXJlIHRvbzsgb2sgZHR1Y2tlcgogLSAoZHR1Y2tlcikgW01ha2VmaWxlLmluXSBGaXggdHlwby4KCjIwMDQwODE0CiAtIChkdHVja2VyKSBbYXV0aC1rcmI1LmMgZ3NzLXNlcnYta3JiNS5jIG9wZW5ic2QtY29tcGF0L3htbWFwLmNdCiAgIEV4cGxpY2l0bHkgc2V0IHVtYXNrIGZvciBta3N0ZW1wOyBvayBkam1ACiAtIChkdHVja2VyKSBbaW5jbHVkZXMuaF0gVW5kZWYgX0lOQ0xVREVfX1NURENfXyBvbiBIUC1VWCwgb3RoZXJ3aXNlCiAgIHByb3QuaCBhbmQgc2hhZG93LmggcHJvdmlkZSBjb25mbGljdGluZyBkZWNsYXJhdGlvbnMgb2YgZ2V0c3BuYW0uICBvayBkam1ACiAtIChkdHVja2VyKSBbbG9naW5yZWMuYyBvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5jIG9wZW5ic2QtY29tcGF0L3BvcnQtYWl4LmhdCiAgIFBsdWcgQUlYIGxvZ2luIHJlY29yZGluZyBpbnRvIGxvZ2luX3dyaXRlIHNvIGxvZ2lucyB3aWxsIGJlIHJlY29yZGVkIGZvcgogICBhbGwgYXV0aCB0eXBlcy4KCjIwMDQwODEzCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuY10gVHlwbyBpbiAjaWZkZWY7IGZyb20gdmluc2NoZW4gYXQKICAgcmVkaGF0LmNvbQotIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gYXZzbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wOC8xMSAyMTo0MzowNQogICAgIFtjaGFubmVscy5jIGNoYW5uZWxzLmggY2xpZW50bG9vcC5jIG1pc2MuYyBtaXNjLmggc2VydmVybG9vcC5jIHNzaC1hZ2VudC5jXQogICAgIHNvbWUgc2lnbmVkL3Vuc2lnbmVkIGludCBjb21wYXJpc29uIGNsZWFudXBzOyBtYXJrdXNAIG9rCiAgIC0gYXZzbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wOC8xMSAyMTo0NDozMgogICAgIFthdXRoZmQuYyBzY3AuYyBzc2gta2V5c2Nhbi5jXQogICAgIHVzZSBhdG9taWNpbyBpbnN0ZWFkIG9mIGhvbWVncm93biBlcXVpdmFsZW50cyBvciByZWFkL3dyaXRlLgogICAgIG1hcmt1c0Agb2sKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDgvMTIgMDk6MTg6MjQKICAgICBbc3NobG9naW4uY10KICAgICB0eXBvIGluIGVycm9yIG1lc3NhZ2UsIHNwb3R0ZWQgYnkgbW9yaXR6IEFUIGpvZGVpdC5vcmcgKElkIHN5bmMgb25seSkKICAgLSBqYWtvYkBjdnMub3BlbmJzZC5vcmcgMjAwNC8wOC8xMiAyMTo0MToxMwogICAgIFtzc2gta2V5Z2VuLjEgc3NoLjFdCiAgICAgaW1wcm92ZSBTU0hGUCBkb2N1bWVudGF0aW9uOyBvayBkZXJhYWR0QAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wOC8xMyAwMDowMTo0MwogICAgIFtzc2gta2V5Z2VuLjFdCiAgICAga2lsbCB3aGl0ZXNwYWNlIGF0IGVvbDsKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDgvMTMgMDI6NTE6NDgKICAgICBbbW9uaXRvcl9mZHBhc3MuY10KICAgICBleHRyYSBjaGVjayBmb3Igbm8gbWVzc2FnZSBjYXNlOyBvayBtYXJrdXMsIGRlcmFhZHQsIGhzaG9leGVyLCBoZW5uaW5nCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wOC8xMyAxMTowOToyNAogICAgIFtzZXJ2Y29uZi5jXQogICAgIEZpeCBsaW5lIG51bWJlcnMgb2ZmLWJ5LW9uZSBpbiBlcnJvciBtZXNzYWdlcywgZnJvbSB0b3J0YXkgYXQgY2MuaW4ycDMuZnIKICAgICBvayBtYXJrdXNALCBkam1ACgoyMDA0MDgxMgogLSAoZHR1Y2tlcikgW3NzaGQuY10gUmVtb3ZlIGR1cGxpY2F0ZSB2YXJpYWJsZSBpbXBvcnRlZCBkdXJpbmcgc3luYy4KIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDcvMjggMDg6NTY6MjIKICAgICBbc3NoZC5jXQogICAgIGNhbGwgc2V0c2lkKCkgX2JlZm9yZV8gcmUtZXhlYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wNy8yOCAwOTo0MDoyOQogICAgIFthdXRoLmMgYXV0aDEuYyBhdXRoMi5jIGNpcGhlci5jIGNpcGhlci5oIGtleS5jIHNlc3Npb24uYyBzc2guYwogICAgIHNzaGNvbm5lY3QxLmNdCiAgICAgbW9yZSBzL2lsbGVnYWwvaW52YWxpZC8KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDgvMDQgMTA6Mzc6NTIKICAgICBbZGguY10KICAgICByZXR1cm4gZ3JvdXAxNCB3aGVuIG5vIHByaW1lcyBmb3VuZCAtIGZpeGVzIGhhbmcgb24gZW1wdHkgL2V0Yy9tb2R1bGk7CiAgICAgb2sgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDgvMTEgMTE6MDk6NTQKICAgICBbc2VydmNvbmYuY10KICAgICBGaXggbWlub3IgbGVhazsgImxvb2tzIHJpZ2h0IiBkZXJhYWR0QAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDgvMTEgMTE6NTA6MDkKICAgICBbc3NoZC5jXQogICAgIERvbid0IHRyeSB0byBjbG9zZSBzdGFydHVwX3BpcGUgaWYgaXQncyBub3Qgb3Blbjsgb2sgZGptQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wOC8xMSAxMTo1OToyMgogICAgIFtzc2hsb2dpbi5jXQogICAgIGNoZWNrIHRoYXQgbHNlZWsgd2VudCB3ZXJlIHdlIHRvbGQgaXQgdG87IG9rIG1hcmt1c0AKICAgICAoSWQgc3luYyBvbmx5LCBidXQgc2ltaWxhciBjaGFuZ2VzIGFyZSBuZWVkZWQgaW4gbG9naW5yZWMuYykKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDgvMTEgMTI6MDE6MTYKICAgICBbc3NobG9naW4uY10KICAgICBtYWtlIHN0b3JlX2xhc3Rsb2dfbWVzc2FnZSgpIHN0YXRpYyB0byBhcHBlYXNlIC1XYWxsOyBvayBtYXJrdXMKIC0gKGR0dWNrZXIpIFtzc2hkLmNdIENsZWFyIGxvZ2lubXNnIGluIHBvc3RhdXRoIG1vbml0b3IsIHByZXZlbnRzIGRvdWJsaW5nCiAgICBtZXNzYWdlcyBnZW5lcmF0ZWQgYmVmb3JlIHRoZSBwb3N0YXV0aCBwcml2c2VwIHNwbGl0LgoKMjAwNDA3MjAKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wNy8yMSAwODo1NjoxMgogICAgIFthdXRoLmNdCiAgICAgcy9JbGxlZ2FsIHVzZXIvSW52YWxpZCB1c2VyLzsgbWFueSByZXF1ZXN0czsgb2sgZGptLCBtaWxsZXJ0LCBuaWtsYXMsCiAgICAgbWlvZCwgLi4uCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA3LzIxIDEwOjMzOjMxCiAgICAgW2F1dGgxLmMgYXV0aDIuY10KICAgICBieiM4OTk6IERvbid0IGRpc3BsYXkgaW52YWxpZCB1c2VybmFtZXMgaW4gc2V0cHJvY3RpdGxlCiAgICAgZnJvbSBwZWFrIEFUIGFyZ28udHJvamEubWZmLmN1bmkuY3o7IG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDcvMjEgMTA6MzY6MjMKICAgICBbZ3NzLXNlcnYta3JiNS5jXQogICAgIGZpeCBmdW5jdGlvbiBkZWNsYXJhdGlvbgogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNy8yMSAxMTo1MToyOQogICAgIFtjYW5vaG9zdC5jXQogICAgIGJ6IzkwMjogY2FjaGUgcmVtb3RlIHBvcnQgc28gd2UgZG9uJ3QgZmF0YWwoKSBpbiBhdXRoX2xvZyB3aGVuIHJlbW90ZQogICAgIGNvbm5lY3Rpb24gZ29lcyBhd2F5IHF1aWNrbHkuIGZyb20gcGVhayBBVCBhcmdvLnRyb2phLm1mZi5jdW5pLmN6OwogICAgIG9rIG1hcmt1c0AKIC0gKGRqbSkgW2F1dGgtcGFtLmNdIFBvcnRhYmxlIHBhcnRzIG9mIGJ6Izg5OTogRG9uJ3QgZGlzcGxheSBpbnZhbGlkIAogICB1c2VybmFtZXMgaW4gc2V0cHJvY3RpdGxlIGZyb20gcGVhayBBVCBhcmdvLnRyb2phLm1mZi5jdW5pLmN6OwoKMjAwNDA3MjAKIC0gKGRqbSkgW2xvZy5jXSBieiAjMTExOiBFc2NhcGUgbW9yZSBjb250cm9sIGNoYXJhY3RlcnMgd2hlbiBzZW5kaW5nIGRhdGEgCiAgIHRvIHN5c2xvZzsgZnJvbSBwZWFrIEFUIGFyZ28udHJvamEubWZmLmN1bmkuY3oKIC0gKGRqbSkgW2NvbnRyaWIvcmVkaGF0L3NzaGQucGFtXSBieiAjOTAzOiBSZW1vdmUgcmVkdW5kYW50IGVudHJpZXM7IGZyb20gCiAgIHBlYWsgQVQgYXJnby50cm9qYS5tZmYuY3VuaS5jegogLSAoZGptKSBbcmVncmVzcy9SRUFETUUucmVncmVzc10gUmVtb3ZlIGNhdmVhdCByZWdhcmRpbmcgVENQIHdyYXBwZXJzLCBub3cKICAgdGhhdCBzc2hkIGlzIGZpeGVkIHRvIGJlaGF2ZSBiZXR0ZXI7IHN1Z2dlc3RlZCBieSB0aW0KCjIwMDQwNzE5CiAtIChkam0pIFtvcGVuYnNkLWNvbXBhdC9ic2QtYXJjNHJhbmRvbS5jXSBEaXNjYXJkIGVhcmx5IGtleXN0cmVhbSwgbGlrZSBPcGVuQlNECiAgIG9rIGR0dWNrZXJACiAtIChkam0pIFthdXRoLXBhbS5jXSBBdm9pZCB1c2Ugb2YgeHN0cmR1cCBhbmQgZnJpZW5kcyBpbiBjb252ZXJzYXRpb24gZnVuY3Rpb24sCiAgIGluc3RlYWQgcmV0dXJuIFBBTV9DT05WX0VSUiwgYXZvaWRpbmcgYW5vdGhlciBwYXRoIHRvIGZhdGFsKCk7IG9rIGR0dWNrZXJACiAtICh0aW0pIFtjb25maWd1cmUuYWNdIHVwZHd0bXB4KCkgb24gT3BlblNlcnZlciBzZWVtcyB0byBhZGQgZHVwbGljYXRlIGVudHJ5LgogICBSZXBvcnQgYnkgcmFjIEFUIHRlbnppbmcub3JnCgoyMDA0MDcxNwogLSAoZHR1Y2tlcikgW2xvZ2ludGVzdC5jIHNjcC5jIHNmdHAtc2VydmVyLmMgc2Z0cC5jIHNzaC1hZGQuYyBzc2gtYWdlbnQuYwogICBzc2gta2V5Z2VuLmMgc3NoLWtleXNjYW4uYyBzc2gta2V5c2lnbi5jIHNzaC1yYW5kLWhlbHBlci5jIHNzaC5jIHNzaGQuYwogICBvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5jXSBNb3ZlICJjaGFyICpfX3Byb2duYW1lIiB0byBic2QtbWlzYy5jLiAgUmVkdWNlcwogICBkaWZmIHZzIE9wZW5CU0Q7IG9rIG1vdXJpbmdALCB0ZXN0ZWQgYnkgdGltQCB0b28uCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNy8xMSAxNzo0ODo0NwogICAgIFtjaGFubmVscy5jIGNpcGhlci5jIGNsaWVudGxvb3AuYyBjbGllbnRsb29wLmggY29tcGF0LmggbW9kdWxpLmMKICAgICByZWFkY29uZi5jIG5jaGFuLmMgcGF0aG5hbWVzLmggcHJvZ3Jlc3NtZXRlci5jIHJlYWRjb25mLmggc2VydmNvbmYuYwogICAgIHNlc3Npb24uYyBzZnRwLWNsaWVudC5jIHNmdHAuYyBzc2gtYWdlbnQuMSBzc2gta2V5Z2VuLmMgc3NoLmMgc3NoMS5oCiAgICAgc3NoZC5jIHR0eW1vZGVzLmhdCiAgICAgc3BhY2VzCiAgIC0gYnJhZEBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNy8xMiAyMzozNDoyNQogICAgIFtzc2gta2V5c2Nhbi4xXQogICAgIEZpeCBpbmNvcnJlY3QgbWFjcm8sIC5JIC0+IC5FbQogICAgIEZyb206IEVyaWMgUy4gUmF5bW9uZCA8ZXNyIGF0IHRoeXJzdXMgZG90IGNvbT4KICAgICBvayBqbWNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNy8xNyAwNTozMTo0MQogICAgIFttb25pdG9yLmMgbW9uaXRvcl93cmFwLmMgc2Vzc2lvbi5jIHNlc3Npb24uaCBzc2hkLmMgc3NobG9naW4uY10KICAgICBNb3ZlICJMYXN0IGxvZ2dlZCBpbiBhdC4uIiBtZXNzYWdlIGdlbmVyYXRpb24gdG8gdGhlIG1vbml0b3IsIHJpZ2h0CiAgICAgYmVmb3JlIHJlY29yZGluZyB0aGUgbmV3IGxvZ2luLiAgRml4ZXMgbWlzc2luZyBsYXN0bG9nIG1lc3NhZ2Ugd2hlbgogICAgIC92YXIvbG9nL2xhc3Rsb2cgaXMgbm90IHdvcmxkLXJlYWRhYmxlIGFuZCBpbmNvcnJlY3QgZGF0ZXN0YW1wIHdoZW4KICAgICBtdWx0aXBsZSBzZXNzaW9ucyBhcmUgdXNlZCAoYnogIzQ2Myk7ICBtdWNoIGFzc2lzdGFuY2UgJiBvayBtYXJrdXNACgoyMDA0MDcxMQogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIENoZWNrIGZvciB6ZXJvIGZyb20gd2FpdHBpZCgpIHRvbywgd2hpY2ggYWxsb3dzCiAgIHRoZSBtb25pdG9yIHRvIHByb3Blcmx5IGNsZWFuIHVwIHRoZSBQQU0gdGhyZWFkIChEZWJpYW4gYnVnICMyNTI2NzYpLgoKMjAwNDA3MDkKIC0gKHRpbSkgW2NvbnRyaWIvY3lnd2luL1JFQURNRV0gYWRkIG1pbmlyZXMtZGV2ZWwgcmVxdWlyZW1lbnQuIFBhdGNoIGZyb20KICAgdmluc2NoZW4gQVQgcmVkaGF0LmNvbQoKMjAwNDA3MDgKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA3LzAzIDA1OjExOjMzCiAgICAgW3NzaGxvZ2luLmNdIChSQ1NJRCBzeW5jIG9ubHksIHRoZSBjb3JyZXNwb25kaW5nIGNvZGUgaXMgbm90IGluIFBvcnRhYmxlKQogICAgIFVzZSAnXDAnIG5vdCAwIGZvciBzdHJpbmc7IG9rIGRqbUAsIGRlcmFhZHRACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNy8wMyAxMTowMjoyNQogICAgIFttb25pdG9yX3dyYXAuY10KICAgICBQdXQgcy9rZXkgZnVuY3Rpb25zIGluc2lkZSAjaWZkZWYgU0tFWSBzYW1lIGFzIG1vbml0b3IuYywKICAgICBmcm9tIGRlc0BmcmVlYnNkIHZpYSBieiAjMzMwLCBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNy8wOCAxMjo0NzoyMQogICAgIFtzY3AuY10KICAgICBQcmV2ZW50IHNjcCBmcm9tIHNraXBwaW5nIHRoZSBmaWxlIGZvbGxvd2luZyBhIGRvdWJsZS1lcnJvci4KICAgICBieiAjODYzLCBvayBtYXJrdXNACgoyMDA0MDcwMgogLSAoZHR1Y2tlcikgW21kb2MybWFuLmF3a10gVGVhY2ggaXQgdG8gaWdub3JlIC5CayAtd29yZHMsIHJlcG9ydGVkIGJ5CiAgIHN0cnViZSBhdCBwaHlzaWszLmd3ZGcuZGUgYSBsb25nIHRpbWUgYWdvLgoKMjAwNDA3MDEKIC0gKGR0dWNrZXIpIFtzZXNzaW9uLmNdIENhbGwgZGlzcGxheV9sb2dpbm1zZyBhZ2FpbiBhZnRlciBkb19wYW1fc2Vzc2lvbi4KICAgRW5zdXJlcyBtZXNzYWdlcyBmcm9tIFBBTSBtb2R1bGVzIGFyZSBkaXNwbGF5ZWQgd2hlbiBwcml2c2VwPW5vLgogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIEJ1ZyAjNzA1OiBNYWtlIGFyZ3VtZW50cyBtYXRjaCBQQU0gc3BlY3MsIGZpeGVzCiAgIHdhcm5pbmdzIG9uIGNvbXBsaWFudCBwbGF0Zm9ybXMuICBGcm9tIHBhdWwuYS5ib2x0b24gYXQgYnQuY29tLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIEJ1ZyAjNTU5IChsYXN0IHBpZWNlKTogUGFzcyBESVNBTExPV19OVUxMX0FVVEhUT0sKICAgdG8gcGFtX2F1dGhlbnRpY2F0ZSBmb3IgY2hhbGxlbmdlLXJlc3BvbnNlIGF1dGggdG9vLiAgT3JpZ2luYWxseSBmcm9tCiAgIGZjdXNhY2sgYXQgZmN1c2Fjay5jb20sIG9rIGRqbUAKIC0gKHRpbSkgW2J1aWxkcGtnLnNoLmluXSBBZGQgJFJFViB0byBidW1wIHRoZSBwYWNrYWdlIHJldmlzaW9uIHdpdGhpbgogICB0aGUgc2FtZSB2ZXJzaW9uLiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgc29tZW9uZSB1c2VzIC0td2l0aC1wcml2c2VwLXVzZXI9CiAgIGFuZCB0aGUgdXNlciBuYW1lIGRvZXMgbm90IG1hdGNoIHRoZSBncm91cCBuYW1lLiBvayBkdHVja2VyQAoKMjAwNDA2MzAKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBDaGVjayBmb3IgYnVnZ3kgUEFNIG1vZHVsZXMgdGhhdCByZXR1cm4gYSBOVUxMCiAgIGFwcGRhdGFfcHRyIHRvIHRoZSBjb252ZXJzYXRpb24gZnVuY3Rpb24uICBvayBkam1ACiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMjYgMDk6MDM6MjEKICAgICBbc3NoLjFdCiAgICAgLSByZW1vdmUgZG91YmxlIHdvcmQKICAgICAtIHJlYXJyYW5nZSAuQmsgdG8ga2VlcCBTWU5PUFNJUyBuaWNlCiAgICAgLSAtTSBiZWZvcmUgLW0gaW4gb3B0aW9ucyBkZXNjcmlwdGlvbgogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8yNiAwOToxMToxNAogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgcHVuY3R1YXRpb24gYW5kIGdyYW1tYXIgZml4ZXMuIGFsc28sIGtlZXAgdGhlIG9wdGlvbnMgaW4gb3JkZXIuCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzI2IDA5OjE0OjQwCiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgbmV3IHNlbnRlbmNlLCBuZXcgbGluZTsKICAgLSBhdnNtQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzI2IDIwOjA3OjE2CiAgICAgW3NzaGQuY10KICAgICBpbml0aWFsaXNlIHNvbWUgZmQgdmFyaWFibGVzIHRvIC0xLCBkam1AIG9rCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzMwIDA4OjM2OjU5CiAgICAgW3Nlc3Npb24uY10KICAgICB1bmJyZWFrIFRUWSBicmVhaywgZGlhZ25vc2VkIGJ5IGRhcnJlbiBBVCBkYXp3aW4uY29tOyBvayBtYXJrdXNACgoyMDA0MDYyNwogLSAodGltKSB1cGRhdGUgUkVBRE1FIGZpbGVzLgogLSAoZHR1Y2tlcikgW21kb2MybWFuLmF3a10gQnVnICM4ODM6IGNvcnJlY3RseSByZWNvZ25pc2UgLlBhIGFuZCAuRXYgbWFjcm9zLgogLSAoZHR1Y2tlcikgW3JlZ3Jlc3MvUkVBRE1FLnJlZ3Jlc3NdIERvY3VtZW50IG5ldyB2YXJpYWJsZXMuCiAtIChkdHVja2VyKSBbYWNjb25maWcuaCBjb25maWd1cmUuYWMgc2Z0cC1zZXJ2ZXIuY10gQnVnICM4MjM6IGFkZCBzZnRwCiAgIHJlbmFtZSBoYW5kbGluZyBmb3IgTGludXggd2hpY2ggcmV0dXJucyBFUEVSTSBmb3IgbGluaygpIG9uIChhdCBsZWFzdCBzb21lKQogICBmaWxlc3lzdGVtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGhhcmQgbGlua3MuICBzZnRwLXNlcnZlciB3aWxsIGZhbGwgYmFjayB0bwogICBzdGF0K3JlbmFtZSgpIGluIHN1Y2ggY2FzZXMuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcG9ydC1haXguY10gTWlzc2luZyBfX2Z1bmNfXy4KCjIwMDQwNjI2CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMjUgMTg6NDM6MzYKICAgICBbc3NoZC5jXQogICAgIGZpeCBicm9rZW4gZmQgaGFuZGxpbmcgaW4gdGhlIHJlLWV4ZWMgZmFsbGJhY2sgcGF0aCwgcGFydGljdWxhcmx5IHdoZW4KICAgICAvZGV2L2NyeXB0byBpcyBpbiB1c2U7IG9rIGRlcmFhZHRAIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMjUgMjM6MjE6MzgKICAgICBbc2Z0cC5jXQogICAgIGJ6ICM4NzU6IGZpeCBiYWQgZXNjYXBlIGNoYXIgZXJyb3IgbWVzc2FnZTsgcmVwb3J0ZWQgYnkgZl9tb2hyIEFUIHlhaG9vLmRlCgoyMDA0MDYyNQogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8yNCAxOTozMDo1NAogICAgIFtzZXJ2Y29uZi5jIHNlcnZjb25mLmggc3NoZC5jXQogICAgIHJlLWV4ZWMgc3NoZCBvbiBhY2NlcHQoKTsgaW5pdGlhbCB3b3JrLCBmaW5hbCBkZWJ1Z2dpbmcgYW5kIG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMjUgMDE6MTY6MDkKICAgICBbc3NoZC5jXQogICAgIG9ubHkgcGVyZm9ybSB0Y3Agd3JhcHBlcnMgY2hlY2tzIHdoZW4gdGhlIGluY29taW5nIGNvbm5lY3Rpb24gaXMgb24gYQogICAgIHNvY2tldC4gIHNpbGVuY2VzIHVzZWxlc3Mgd2FybmluZ3MgZnJvbSByZWdyZXNzIHRlc3RzIHRoYXQgdXNlCiAgICAgcHJveHljb21tYW5kPSJzc2hkIC1pIi4gIHByb21wdGVkIGJ5IGRhdmlkQCBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzI0IDE5OjMyOjAwCiAgICAgW3JlZ3Jlc3MvTWFrZWZpbGUgcmVncmVzcy90ZXN0LWV4ZWMuc2gsIGFkZGVkIHJlZ3Jlc3MvcmVleGVjLnNoXQogICAgIHJlZ3Jlc3MgdGVzdCBmb3IgcmUtZXhlYyBjb3JuZXIgY2FzZXMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMjUgMDE6MjU6MTIKICAgICBbcmVncmVzcy90ZXN0LWV4ZWMuc2hdCiAgICAgY2xlYW4gcmVleGVjLXNwZWNpZmljIGp1bmsgb3V0IG9mIHRleHQtZXhlYy5zaCBhbmQgc2ltcGxpZnk7IGlkZWEgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMjUgMDU6Mzg6NDgKICAgICBbc2Z0cC1zZXJ2ZXIuY10KICAgICBGYWxsIGJhY2sgdG8gc3RhdCtyZW5hbWUgaWYgZmlsZXN5c3RlbSBkb2Vzbid0IGRvZXNuJ3Qgc3VwcG9ydCBoYXJkCiAgICAgbGlua3MuICBieiM4MjMsIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgb3BlbmJzZC1jb21wYXQvbWlzYy5jIFtvcGVuYnNkLWNvbXBhdC9taXNjLmhdCiAgIEFkZCBjbG9zZWZyb20oKSBmb3IgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgaGF2ZSBpdC4KIC0gKGR0dWNrZXIpIFtzc2hkLmNdIGFkZCBsaW5lIG1pc3NpbmcgZnJvbSByZWV4ZWMgc3luYy4KCjIwMDQwNjIzCiAtIChkdHVja2VyKSBbYXV0aDEuY10gRW5zdXJlIGRvX3BhbV9hY2NvdW50IGlzIGNhbGxlZCBmb3IgUHJvdG9jb2wgMQogICBjb25uZWN0aW9ucyB3aXRoIGVtcHR5IHBhc3N3b3Jkcy4gIFBhdGNoIGZyb20gZGF2aWR3dSBhdCBuYnR0ZWNoLmNvbSwKICAgb2sgZGptQAogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMjIgMjI6NDI6MDIKICAgICBbcmVncmVzcy9lbnZwYXNzLnNoXQogICAgIEFkZCBxdW90aW5nIGZvciB0ZXN0IC16OyBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8yMiAyMjo0NTo1MgogICAgIFtyZWdyZXNzL3Rlc3QtZXhlYy5zaF0KICAgICBBZGQgVEVTVF9TU0hfU1NIRF9DT05GT1BUUyBhbmQgVEVTVF9TU0hfU1NIX0NPTkZPUFRTIHRvIGFsbG93IGFkZGluZwogICAgIGFyYml0YXJ5IG9wdGlvbnMgdG8gc3NoZF9jb25maWcgYW5kIHNzaF9jb25maWcgZHVyaW5nIHRlc3RzLiAgb2sgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMjIgMjI6NTU6NTYKICAgICBbcmVncmVzcy9keW5hbWljLWZvcndhcmQuc2ggcmVncmVzcy90ZXN0LWV4ZWMuc2hdCiAgICAgQWxsb3cgc2V0dGluZyBvZiBwb3J0IGZvciByZWdyZXNzIGZyb20gVEVTVF9TU0hfUE9SVCB2YXJpYWJsZTsgb2sgbWFya3VzQAogICAtIG1vdXJpbmdAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMjMgMDA6Mzk6MzgKICAgICBbcmlqbmRhZWwuY10KICAgICAtV3NoYWRvdyBmaXggdXAgcy9lbmNyeXB0L2RvX2VuY3J5cHQvLiAgT0sgZGptQCwgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMjMgMTQ6MzE6MDEKICAgICBbc3NoLmNdCiAgICAgRml4IGNvdW50aW5nIGluIG1hc3Rlci9zbGF2ZSB3aGVuIHBhc3NpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzOyBvayBkam1ACiAtIChkdHVja2VyKSBbY2lwaGVyLmNdIGVuY3J5cHQtPmRvX2VuY3J5cHQgaW5zaWRlIFNTSF9PTERfRVZQIHRvIG1hdGNoCiAgIC1Xc2hhZG93IGNoYW5nZS4KIC0gKGJhbCkgW01ha2VmaWxlLmluXSBSZW1vdmUgb3BlbnNzaGQuaW5pdCBvbiAnbWFrZSBkaXN0Y2xlYW4nCiAtIChkdHVja2VyKSBbYXV0aC5jIG9wZW5ic2QtY29tcGF0L3BvcnQtYWl4LmMgb3BlbmJzZC1jb21wYXQvcG9ydC1haXguaF0KICAgTW92ZSBsb2dpbnJlc3RyaWN0aW9ucyB0ZXN0IHRvIHBvcnQtYWl4LmMsIHJlcGxhY2Ugd2l0aCBhIGdlbmVyaWMgaG9vay4KIC0gKHRpbSkgW3JlZ3Jlc3MvdHJ5LWNpcGhlcnMuc2hdICJpZiAhIHNvbWVfY29tbWFuZCIgaXMgbm90IHBvcnRhYmxlLgogLSAoYmFsKSBbY29udHJpYi9SRUFETUVdIFJlbW92ZWQgIm1kb2MybWFuLnBsIiByZWZlcmVuY2UgYW5kIGFkZGVkCiAgIHJlZmVyZW5jZSB0byAiZmluZHNzbC5zaCIKCjIwMDQwNjIyCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzIwIDE3OjM2OjU5CiAgICAgW3NzaC5jXQogICAgIGZpbHRlciBwYXNzZWQgZW52IHZhcnMgYXQgc2xhdmUgaW4gY29ubmVjdGlvbiBzaGFyaW5nIGNhc2U7IG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMjAgMTg6NTM6MzkKICAgICBbc2Z0cC5jXQogICAgIG1ha2UgImxzIC1sIiBsaXN0aW5ncyBwcmludCB1c2VyL2dyb3VwIG5hbWVzLCBhZGQgImxzIC1uIiB0byBzaG93IHVpZC9naWQKICAgICAobGlrZSAvYmluL2xzKTsgaWRlYSAmIG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMjAgMTk6Mjg6MTIKICAgICBbc2Z0cC4xXQogICAgIG1lbnRpb24gbmV3IC1uIGZsYWcKICAgLSBhdnNtQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzIxIDE3OjM2OjMxCiAgICAgW2F1dGgtcnNhLmMgYXV0aDItZ3NzLmMgYXV0aDItcHVia2V5LmMgYXV0aGZpbGUuYyBjYW5vaG9zdC5jIGNoYW5uZWxzLmMKICAgICBjaXBoZXIuYyBkbnMuYyBrZXguYyBtb25pdG9yLmMgbW9uaXRvcl9mZHBhc3MuYyBtb25pdG9yX3dyYXAuYwogICAgIG1vbml0b3Jfd3JhcC5oIG5jaGFuLmMgcGFja2V0LmMgcHJvZ3Jlc3NtZXRlci5jIHNjcC5jIHNmdHAtc2VydmVyLmMgc2Z0cC5jCiAgICAgc3NoLWdzcy5oIHNzaC1rZXlnZW4uYyBzc2guYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdDEuYyBzc2hsb2dpbi5jCiAgICAgc3NocHR5LmNdCiAgICAgbWFrZSBzc2ggLVdzaGFkb3cgY2xlYW4sIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcwogICAgIG1hcmt1c0Agb2sKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMjEgMTc6NTM6MDMKICAgICBbc2Vzc2lvbi5jXQogICAgIGZpeCBmZCBsZWFrIGZvciBtdWx0aXBsZSBzdWJzeXN0ZW0gY29ubmVjdGlvbnM7IHdpdGggbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8yMSAyMjowMjo1OAogICAgIFtsb2cuaF0KICAgICBtYXJrIGZhdGFsIGFuZCBjbGVhbnVwIGV4aXQgYXMgX19kZWFkOyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzIxIDIyOjA0OjUwCiAgICAgW3NmdHAuY10KICAgICBpbnRyb2R1Y2Ugc29ydGluZyBmb3IgbHMsIHNhbWUgb3B0aW9ucyBhcyAvYmluL2xzOyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzIxIDIyOjMwOjQ1CiAgICAgW3NmdHAuY10KICAgICBwcmVmaXggbHMgb3B0aW9uIGZsYWdzIHdpdGggTFNfCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzIxIDIyOjQxOjMxCiAgICAgW3NmdHAuMV0KICAgICBkb2N1bWVudCBzb3J0IG9wdGlvbnMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMjIgMDE6MTY6MzkKICAgICBbc2Z0cC5jXQogICAgIGRvbid0IHNob3cgLmZpbGVzIGJ5IGRlZmF1bHQgaW4gbHMsIGFkZCAtYSBvcHRpb24gdG8gdHVybiB0aGVtIGJhY2sgb247CiAgICAgb2sgbWFya3VzCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzIyIDAzOjEyOjEzCiAgICAgW3JlZ3Jlc3MvZW52cGFzcy5zaCByZWdyZXNzL211bHRpcGxleC5zaF0KICAgICBtb3JlIHBvcnRhYmxlIGVudiBwYXNzaW5nIHRlc3RzCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8yMiAwNTowNTo0NQogICAgIFttb25pdG9yLmMgbW9uaXRvcl93cmFwLmNdCiAgICAgQ2hhbmdlIGxvZ2luLT51c2VybmFtZSwgd2lsbCBwcmV2ZW50IC1Xc2hhZG93IGVycm9ycyBpbiBQb3J0YWJsZTsKICAgICBvayBtYXJrdXNACiAtIChkdHVja2VyKSBbbW9uaXRvci5jXSBGaXggUG9ydGFibGUtc3BlY2lmaWMgLVdzaGFkb3cgd2FybmluZ3Mgb24gInNvY2tldCIuCiAtIChkdHVja2VyKSBbZGVmaW5lcy5oXSBEZWZpbmUgX19kZWFkIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuCiAtIChiYWwpIFthdXRoLXBhc3N3ZC5jIGF1dGgxLmNdIENsZWFuIHVwIHVudXNlZCB2YXJpYWJsZXMuCgoyMDA0MDYyMAogLSAodGltKSBbY29uZmlndXJlLmFjIE1ha2VmaWxlLmluXSBPbmx5IGNoYW5nZSBURVNUX1NIRUxMIG9uIGJyb2tlbiBwbGF0Zm9ybXMuCgoyMDA0MDYxOQogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIERvbid0IHVzZSBQQU0gbmFtZXNwYWNlIGZvcgogICAgcGFtX3Bhc3N3b3JkX2NoYW5nZV9yZXF1aXJlZCBlaXRoZXIuCiAtICh0aW0pIFtjb25maWd1cmUuYWMgYnVpbGRwa2cuc2guaW4gY29udHJpYi9zb2xhcmlzL1JFQURNRV0gbW92ZSBvcGVuc3NoZAogICBpbml0IHNjcmlwdCB0byB0b3AgbGV2ZWwgZGlyZWN0b3J5LiAgQWRkIG9wZW5zc2hkLmluaXQuaW4uCiAgIFJlbW92ZSBjb250cmliL3NvbGFyaXMvYnVpbGRwa2cuc2gsIGNvbnRyaWIvc29sYXJpcy9vcGVuc3NoZC5pbgoKMjAwNDA2MTgKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8xNyAxNDo1Mjo0OAogICAgIFtjbGllbnRsb29wLmMgY2xpZW50bG9vcC5oIHNzaC5jXQogICAgIHN1cHBvcnQgZW52aXJvbm1lbnQgcGFzc2luZyBvdmVyIHNoYXJlZCBjb25uZWN0aW9uczsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8xNyAxNToxMDoxNAogICAgIFtjbGllbnRsb29wLmMgbWlzYy5oIHJlYWRjb25mLmMgcmVhZHBhc3MuYyBzc2guYyBzc2hfY29uZmlnLjVdCiAgICAgQWRkIG9wdGlvbiBmb3IgY29uZmlybWF0aW9uIChDb250cm9sTWFzdGVyPWFzaykgdmlhIHNzaC1hc2twYXNzIGJlZm9yZSAKICAgICBvcGVuaW5nIHNoYXJlZCBjb25uZWN0aW9uczsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8xNyAxNDo1MzoyNwogICAgIFtyZWdyZXNzL211bHRpcGxleC5zaF0KICAgICBzaGFyZWQgY29ubmVjdGlvbiBlbnYgcGFzc2luZyByZWdyZXNzIHRlc3QKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL1JFQURNRS5yZWdyZXNzXSBBZGQgZGV0YWlsIG9uIGhvdyB0byBydW4gYSBzaW5nbGUKICAgdGVzdCBmcm9tIHRoZSB0b3AtbGV2ZWwgTWFrZWZpbGUuCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzE3IDIzOjU2OjU3CiAgICAgW3NzaC4xIHNzaC5jXQogICAgIHN5bmMgdXNhZ2UoKSBhbmQgU1lOUE9TSVMgd2l0aCBjb25uZWN0aW9uIHNoYXJpbmcgY2hhbmdlcwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMTggMDY6MTM6MjUKICAgICBbc2Z0cC5jXQogICAgIFVzZSBleGVjdnAgaW5zdGVhZCBvZiBleGVjdiBzbyBzZnRwIC1TIHNzaCB3b3Jrcy4gICJtYWtlcyBzZW5zZSIgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMTggMDY6MTU6NTEKICAgICBbbXVsdGlwbGV4LnNoXQogICAgIFVzZSAtUyBmb3Igc2NwL3NmdHAgdG8gZm9yY2UgdGhlIHVzZSBvZiB0aGUgc3NoIGJlaW5nIHRlc3RlZC4KICAgICBvayBkam1ALG1hcmt1c0AKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8xOCAxMDo0MDoxOQogICAgIFtzc2guY10KICAgICBkZWxheSBzaWduYWwgaGFuZGxlciBzZXR1cCB1bnRpbCB3ZSBoYXZlIGZpbmlzaGVkIHRhbGtpbmcgdG8gdGhlIG1hc3Rlci4KICAgICBhbGxvdyBpbnRlcnJ1cHRpbmcgb2Ygc2V0dXAgKGUuZy4gaWYgbWFzdGVyIGlzIHN0dWNrKTsgb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8xOCAxMDo1NTo0MwogICAgIFtzc2guMSBzc2guY10KICAgICB0cmltIHN5bm9wc2lzIGZvciAtUywgYWxsb3cgLVMgYW5kIC1vQ29udHJvbE1hc3RlciwgLU1NIG1lYW5zICdhc2snOwogICAgIG9rIGRqbQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8xOCAxMToxMTo1NAogICAgIFtjaGFubmVscy5jIGNsaWVudGxvb3AuY10KICAgICBEb24ndCBleHBsb2RlIGluIGNsaWVudGxvb3Agd2hlbiB3ZSByZWNlaXZlIGEgYm9ndXMgY2hhbm5lbCBpZCwgYnV0CiAgICAgYWxzbyBkb24ndCBnZW5lcmF0ZSB0aGVtIHRvIGJlZ2luIHdpdGg7IG9rIG1hcmt1c0AKCjIwMDQwNjE3CiAtIChkdHVja2VyKSBbcmVncmVzcy9zY3Auc2hdIGRpZmYgLU4gaXMgbm90IHBvcnRhYmxlIChidXQgbmVlZGVkIGZvciBzb21lCiAgIHBsYXRmb3JtcyksIHNvIHRlc3QgaWYgZGlmZiB1bmRlcnN0YW5kcyBpdC4gIFBvaW50ZWQgb3V0IGJ5IHRpbUAsIG9rIGRqbUAKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMgcmVncmVzcy8KICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzE3IDA1OjUxOjU5CiAgICAgW3JlZ3Jlc3MvbXVsdGlwbGV4LnNoXQogICAgIFJlbW92ZSBkYXRhZmlsZSBiZXR3ZWVuIGFuZCBhZnRlciB0ZXN0cywga2lsbCBzc2hkIHJhdGhlciB0aGFuIHdhaXQ7CiAgICAgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMTcgMDY6MDA6MDUKICAgICBbcmVncmVzcy9tdWx0aXBsZXguc2hdCiAgICAgVXNlIERBVEEgYW5kIENPUFkgZm9yIHRlc3QgZGF0YSByYXRoZXIgdGhhbiBoYXJkLWNvZGVkIHBhdGhzOyBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8xNyAwNjoxOTowNgogICAgIFtyZWdyZXNzL211bHRpcGxleC5zaF0KICAgICBBZGQgc21hbGwgZGVzY3JpcHRpb24gb2YgZmFpbGluZyB0ZXN0IHRvIGZhaWx1cmUgbWVzc2FnZTsgb2sgZGptQAogLSAoZHR1Y2tlcikgW3JlZ3Jlc3MvbXVsdGlwbGV4LnNoXSBhZGQgRVhFRVhUIGZvciB0aG9zZSBwbGF0Zm9ybXMgdGhhdCBuZWVkCiAgIGl0LgogLSAoZHR1Y2tlcikgW3JlZ3Jlc3MvbXVsdGlwbGV4LnNoXSBJbmNyZWFzZSBzbGVlcCB0aW1lIHRvIDEyMCBzZWMgKDYwIGlzIG5vdAogICBlbm91Z2ggZm9yIHNsb3cgc3lzdGVtcywgZXNwZWNpYWxseSBpZiB0aGV5IGRvbid0IGhhdmUgYSBrZXJuZWwgUk5HKS4KCjIwMDQwNjE2CiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcG9ydC1haXguY10gRXhwYW5kIHdoaXRlc3BhY2UgLT4gdGFicy4gTm8KICAgY29kZSBjaGFuZ2VzLgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYyByZWdyZXNzLwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNC8yNyAwOTo0NzozMAogICAgIFtyZWdyZXNzL01ha2VmaWxlIHJlZ3Jlc3MvdGVzdC1leGVjLnNoLCBhZGRlZCByZWdyZXNzL2VudnBhc3Muc2hdCiAgICAgcmVncmVzcyB0ZXN0IGZvciBlbnZpcm9ubWVudCBwYXNzaW5nLCBTZW5kRW52ICYgQWNjZXB0RW52IG9wdGlvbnM7CiAgICAgb2sgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMTMgMTM6NTE6MDIKICAgICBbcmVncmVzcy9NYWtlZmlsZSByZWdyZXNzL3Rlc3QtZXhlYy5zaCwgYWRkZWQgcmVncmVzcy9zY3Atc3NoLXdyYXBwZXIuc2gKICAgICByZWdyZXNzL3NjcC5zaF0KICAgICBBZGQgc2NwIHJlZ3Jlc3Npb24gdGVzdDsgd2l0aCAmIG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMTMgMTU6MDQ6MDgKICAgICBbcmVncmVzcy9NYWtlZmlsZSByZWdyZXNzL3Rlc3QtZXhlYy5zaCwgYWRkZWQgcmVncmVzcy9lbnZwYXNzLnNoXQogICAgIHJlZ3Jlc3MgdGVzdCBmb3IgY2xpZW50IG11bHRpcGxleGluZzsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8xMyAxNToxNjo1NAogICAgIFtyZWdyZXNzL3Rlc3QtZXhlYy5zaF0KICAgICByZW1vdmUgZHVwbGljYXRlIHNldHRpbmcgb2YgJFNDUDsgc3BvdHRlZCBieSBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8xNiAxMzoxNTowOQogICAgIFtyZWdyZXNzL3NjcC5zaF0KICAgICBNYWtlIHNjcCAtciB0ZXN0cyB1c2UgZGlmZiAtck4gbm90IGNtcCAod2hpY2ggd29uJ3QgZG8gZGlycy4gIG9rIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzE2IDEzOjE2OjQwCiAgICAgW3JlZ3Jlc3MvbXVsdGlwbGV4LnNoXQogICAgIFNpbGVuY2UgbXVsdGlwbGV4IHNmdHAgYW5kIHNjcCB0ZXN0cy4gIG9rIG1hcmt1c0AKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL3Rlc3QtZXhlYy5zaF0KICAgTW92ZSBQb3J0YWJsZS1vbmx5IFN0cmljdE1vZGVzIHRvIHRvcCBvZiBsaXN0IHRvIG1ha2Ugc3luY3MgZWFzaWVyLgogLSAoZHR1Y2tlcikgW3JlZ3Jlc3MvUkVBRE1FLnJlZ3Jlc3NdCiAgIEFkZCAkVEVTVF9TSEVMTCB0byByZWFkbWUuCgoyMDA0MDYxNQogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA1LzI2IDA4OjU5OjU3CiAgICAgW3NmdHAuY10KICAgICBleGl0IC0+IF9leGl0IGluIGZvcmtlZCBjaGlsZCBvbiBlcnJvcjsgZnJvbSBhbmRydXNob2NrIEFUIGtvcm92aW5vLm5ldAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wNS8yNiAyMzowMjozOQogICAgIFtjaGFubmVscy5jXQogICAgIG1pc3NpbmcgZnJlZWFkZHJpbmZvOyBBbmRyZXkgTWF0dmVldgogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDUvMjcgMDA6NTA6MTMKICAgICBbcmVhZGNvbmYuY10KICAgICBLaWxsIGRlYWQgY29kZSBhZnRlciBmYXRhbCgpOyBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8wMSAxNDoyMDo0NQogICAgIFthdXRoMi1jaGFsbC5jXQogICAgIFJlbW92ZSByZWR1bmRhbnQgI2luY2x1ZGU7IG9rIG1hcmt1c0AKICAgLSBwZWRyb0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8wMyAxMjoyMjoyMAogICAgIFtzZnRwLWNsaWVudC5jIHNmdHAuY10KICAgICBpbml0aWFsaXplIHBvaW50ZXJzLCBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzEzIDEyOjUzOjI0CiAgICAgW2RoLmMgZGguaCBrZXguYyBrZXguaCBrZXhkaGMuYyBrZXhkaHMuYyBtb25pdG9yLmMgbXlwcm9wb3NhbC5oXSAKICAgICBbc3NoLWtleXNjYW4uYyBzc2hjb25uZWN0Mi5jIHNzaGQuY10KICAgICBpbXBsZW1lbnQgZGlmZmllLWhlbGxtYW4tZ3JvdXAxNC1zaGExIGtleCBtZXRob2QgKHRyaXZpYWwgZXh0ZW5zaW9uIHRvCiAgICAgZXhpc3RpbmcgZGlmZmllLWhlbGxtYW4tZ3JvdXAxLXNoYTEpOyBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8xMyAxNDowMTo0MgogICAgIFtzc2guMSBzc2hfY29uZmlnLjUgc3NoZF9jb25maWcuNV0KICAgICBMaXN0IHN1cHBvcnRlZCBjaXBoZXJzIGluIG1hbiBwYWdlcywgdGlkeSB1cCBzc2ggLWM7CiAgICAgImxvb2tzIGZpbmUiIGptY0AsIG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMTMgMTU6MDM6MDIKICAgICBbY2hhbm5lbHMuYyBjaGFubmVscy5oIGNsaWVudGxvb3AuYyBjbGllbnRsb29wLmggaW5jbHVkZXMuaCByZWFkY29uZi5jXSAKICAgICBbcmVhZGNvbmYuaCBzY3AuMSBzZnRwLjEgc3NoLjEgc3NoLmMgc3NoX2NvbmZpZy41XQogICAgIGltcGxlbWVudCBzZXNzaW9uIG11bHRpcGxleGluZyBpbiB0aGUgY2xpZW50ICh0aGUgc2VydmVyIGhhcyBzdXBwb3J0ZWQgCiAgICAgdGhpcyBzaW5jZSAyLjApOyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzE0IDAxOjQ0OjM5CiAgICAgW2NoYW5uZWxzLmMgY2xpZW50bG9vcC5jIG1pc2MuYyBtaXNjLmggcGFja2V0LmMgc3NoLWFnZW50LmMgc3NoLWtleXNjYW4uY10KICAgICBbc3NoZC5jXQogICAgIHNldF9ub25ibG9jaygpIGluc3RlYWQgb2YgZm5jdGwoLi4uLE9fTk9OQkxPQ0spOyAibG9va3Mgc2FuZSIgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMTUgMDU6NDU6MDQKICAgICBbY2xpZW50bG9vcC5jXQogICAgIG1pc3NlZCBvbmUgdW5zZXRfbm9uYmxvY2s7IHNwb3R0ZWQgYnkgVGltIFJpY2UKIC0gKGRqbSkgRml4IE1ha2VmaWxlLmluIGZvciBjb25uZWN0aW9uIHNoYXJpbmcgY2hhbmdlcwogLSAoZGptKSBbc3NoLmNdIFVzZSBzZXBhcmF0ZSB2YXIgZm9yIGFkZHJlc3MgbGVuZ3RoCgoyMDA0MDYwMwogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIERvbid0IHVzZSBwYW1fKiBuYW1lc3BhY2UgZm9yIHNzaGQncyBQQU0gZnVuY3Rpb25zLgogICBvayBkam1ACgoyMDA0MDYwMQogLSAoZGptKSBbYXV0aC1wYW0uY10gQWRkIGNvcHlyaWdodCBmb3IgbG9jYWwgY2hhbmdlcwoKMjAwNDA1MzAKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jIGF1dGgtcGFtLmggYXV0aC1wYXNzd2QuY10gQnVnICM4NzQ6IFJlLWFkZCBQQU0gCiAgIHN1cHBvcnQgZm9yIFBhc3N3b3JkQXV0aGVudGljYXRpb249eWVzLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIFVzZSBhbiBpbnZhbGlkIHBhc3N3b3JkIGZvciByb290IGlmCiAgIFBlcm1pdFJvb3RMb2dpbiAhPSB5ZXMgb3IgdGhlIGxvZ2luIGlzIGludmFsaWQsIHRvIHByZXZlbnQgbGVha2luZwogICBpbmZvcm1hdGlvbi4gIEJhc2VkIG9uIE9wZW53YWxsJ3Mgb3dsLWFsd2F5cy1hdXRoIHBhdGNoLiAgb2sgZGptQAogLSAodGltKSBbY29uZmlndXJlLmFjIE1ha2VmaWxlLmluXSBBZGQgc3VwcG9ydCBmb3IgIm1ha2UgcGFja2FnZSIgb2sgZGptQAogLSAodGltKSBbYnVpbGRwa2cuc2guaW5dIE5ldyBmaWxlLiBBIG1vcmUgZmxleGlibGUgdmVyc2lvbiBvZgogICBjb250cmliL3NvbGFyaXMvYnVpbGRwa2cuc2ggdXNlZCBmb3IgIm1ha2UgcGFja2FnZSIuCiAtICh0aW0pIFtidWlsZHBrZy5zaC5pbl0gTGFzdCBtaW51dGUgZml4IGRpZG4ndCBtYWtlIGl0IGluIHRoZSAuaW4gZmlsZS4KCjIwMDQwNTI3CiAtIChkdHVja2VyKSBbY29udHJpYi9jYWxkZXJhL29wZW5zc2guc3BlYyBjb250cmliL3JlZGhhdC9vcGVuc3NoLnNwZWMKICAgY29udHJpYi9SRUFETUUgQ1JFRElUUyBJTlNUQUxMXSBCdWcgIzg3MzogQ29ycmVjdCBVUkxzIGZvciB4MTEtc3NoLWFza3Bhc3MKICAgYW5kIEppbSBLbm9ibGUncyBlbWFpbCBhZGRyZXNzICwgZnJvbSBKaW0gaGltc2VsZi4KCjIwMDQwNTI0CiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA1LzE5IDEyOjE3OjMzCiAgICAgW3NmdHAtY2xpZW50LmMgc2Z0cC5jXQogICAgIGdyYWNlZnVsbHkgYWJvcnQgdHJhbnNmZXJzIG9uIHJlY2VpcHQgb2YgU0lHSU5ULCBhbHNvIGlnbm9yZSBTSUdJTlQgd2hpbGUKICAgICB3YWl0aW5nIGZvciBhIGNvbW1hbmQ7IG9rIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA1LzIwIDEwOjU4OjA1CiAgICAgW2NsaWVudGxvb3AuY10KICAgICBUcml2aWFsIHR5cGUgZml4IDAgLT4gJ1wwJzsgb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wNS8yMSAwODo0MzowMwogICAgIFtrZXguaCBtb2R1bGkuYyB0aWxkZXhwYW5kLmNdCiAgICAgYWRkIHByb3RvdHlwZXMgZm9yIC1XYWxsOyBvayBkam0KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDUvMjEgMTE6MzM6MTEKICAgICBbY2hhbm5lbHMuYyBjaGFubmVscy5oIGNsaWVudGxvb3AuYyBzZXJ2ZXJsb29wLmMgc3NoLjFdCiAgICAgYnogIzc1NjogYWRkIHN1cHBvcnQgZm9yIHRoZSBjYW5jZWwtdGNwaXAtZm9yd2FyZCByZXF1ZXN0IGZvciB0aGUgc2VydmVyCiAgICAgYW5kIHRoZSBjbGllbnQgKHRocm91Z2ggdGhlIH5DIGNvbW1hbmRsaW5lKS4gcmVwb3J0ZWQgYnkgejNwIEFUCiAgICAgdHdpc3RlZG1hdHJpeC5jb207IG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDUvMjIgMDY6MzI6MTIKICAgICBbY2xpZW50bG9vcC5jIHNzaC4xXQogICAgIHVzZSAnLWgnIGZvciBoZWxwIGluIH5DIGNvbW1hbmRsaW5lIGluc3RlYWQgb2YgJy0/JzsgaW5zcGlyZWQgYnkgam1jQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wNS8yMiAxNjowMTowNQogICAgIFtzc2guMV0KICAgICBraWxsIHdoaXRlc3BhY2UgYXQgZW9sOwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDUvMjMgMjM6NTk6NTMKICAgICBbYXV0aC5jIGF1dGguaCBhdXRoMS5jIGF1dGgyLmMgc2VydmNvbmYuYyBzZXJ2Y29uZi5oIHNzaGRfY29uZmlnCiAgICAgc3NoZF9jb25maWcuNV0KICAgICBBZGQgTWF4QXV0aFRyaWVzIHNzaGQgY29uZmlnIG9wdGlvbjsgb2sgbWFya3VzQAogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIEJ1ZyAjODM5OiBFbnN1cmUgdGhhdCBwYW0gYXV0aGVudGljYXRpb24gInRocmVhZCIKICAgaXMgdGVybWluYXRlZCBpZiB0aGUgcHJpdnNlcCBzbGF2ZSBleGl0cyBkdXJpbmcga2V5Ym9hcmQtaW50ZXJhY3RpdmUKICAgYXV0aGVudGljYXRpb24uICBvayBkam1ACiAtIChkdHVja2VyKSBbc3NoZC5jXSBGaXggdHlwbyBpbiBjb21tZW50LgoKMjAwNDA1MjMKIC0gKGRqbSkgW3NzaGRfY29uZmlnXSBFeHBsYWluIGNvbnNlcXVlbmNlcyBvZiBVc2VQQU09eWVzIGEgbGl0dGxlIGJldHRlciBpbiAKICAgc3NoZF9jb25maWc7IG9rIGR0dWNrZXJACiAtIChkam0pIFtjb25maWd1cmUuYWNdIFdhcm4gaWYgdGhlIHN5c3RlbSBoYXMgbm8ga25vd24gd2F5IG9mIGZpZ3VyaW5nIG91dCAKICAgd2hpY2ggdXNlciBpcyBvbiB0aGUgb3RoZXIgZW5kIG9mIGEgVW5peCBkb21haW4gc29ja2V0OyBvayBkdHVja2VyQAogLSAoYmFsKSBbb3BlbmJzZC1jb21wYXQvc3lzLXF1ZXVlLmhdIFJlaW50cm9kdWNlIG1hY2hpbmFyeSB0byBoYW5kbGUKICAgb2xkL2Jyb2tlbi9pbmNvbXBsZXRlIDxzeXMvcXVldWUuaD4uCgoyMDA0MDUxMwogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICM4Njc6IEFkZGl0aW9uYWwgdGVzdHMgZm9yIHJlc19xdWVyeSBpbgogICBsaWJyZXNvbHYsIGZpeGVzIHByb2JsZW1zIGRldGVjdGluZyBpdCBvbiBzb21lIHBsYXRmb3JtcwogICAoZWcgTGludXgveDg2LTY0KS4gIEZyb20gS3VydCBSb2Vja3ggdmlhIERlYmlhbiwgb2sgbW91cmluZ0AKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDUvMDQgMTg6MzY6MDcKICAgICBbc2NwLjFdCiAgICAgU2VuZEVudiBoZXJlIHRvbzsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDUvMDYgMTE6MjQ6MjMKICAgICBbc3NoX2NvbmZpZy41XQogICAgIHR5cG8gZnJvbSBKb2huIENvc2ltYW5vIChQUiAzNzcwKTsKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA1LzA4IDAwOjAxOjM3CiAgICAgW2F1dGguYyBjbGllbnRsb29wLmMgbWlzYy5oIHNlcnZjb25mLmMgc3NoLmMgc3NocHR5Lmggc3NodHR5LmMKICAgICB0aWxkZXhwYW5kLmNdLCByZW1vdmVkOiBzc2h0dHkuaCB0aWxkZXhwYW5kLmgKICAgICBtYWtlIHR3byB0aW55IGhlYWRlciBmaWxlcyBnbyBhd2F5OyBkam0gb2sKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDUvMDggMDA6MjE6MzEKICAgICBbY2xpZW50bG9vcC5jIG1pc2MuaCByZWFkcGFzcy5jIHNjYXJkLmMgc3NoLWFkZC5jIHNzaC1hZ2VudC5jIHNzaC1rZXlnZW4uYwogICAgIHNzaGNvbm5lY3QuYyBzc2hjb25uZWN0MS5jIHNzaGNvbm5lY3QyLmNdIHJlbW92ZWQ6IHJlYWRwYXNzLmgKICAgICBraWxsIGEgdGlueSBoZWFkZXI7IG9rIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA1LzA5IDAwOjA2OjQ3CiAgICAgW21vZHVsaS5jIHNzaC1rZXlnZW4uY10gcmVtb3ZlZDogbW9kdWxpLmgKICAgICB6YXAgYW5vdGhlciB0aW55IGhlYWRlcjsgb2sgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDUvMDkgMDE6MTk6MjgKICAgICBbT1ZFUlZJRVcgYXV0aC1yc2EuYyBhdXRoMS5jIGtleC5jIG1vbml0b3IuYyBzZXNzaW9uLmMgc3NoY29ubmVjdDEuYwogICAgIHNzaGQuY10gcmVtb3ZlZDogbXBhdXguYyBtcGF1eC5oCiAgICAga2lsbCBzb21lIG1vcmUgdGlueSBmaWxlczsgb2sgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDUvMDkgMDE6MjY6NDgKICAgICBba2V4LmNdCiAgICAgZG9uJ3Qgb3ZlcndyaXRlIHdoYXQgd2UgYXJlIHRyeWluZyB0byBjb21wdXRlCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNS8xMSAxOTowMTo0MwogICAgIFthdXRoLmMgYXV0aDItbm9uZS5jIGF1dGhmaWxlLmMgY2hhbm5lbHMuYyBtb25pdG9yLmMgbW9uaXRvcl9tbS5jCiAgICAgcGFja2V0LmMgcGFja2V0LmggcHJvZ3Jlc3NtZXRlci5jIHNlc3Npb24uYyBvcGVuYnNkLWNvbXBhdC94bW1hcC5jXQogICAgIGltcHJvdmUgc29tZSBjb2RlIGxpbnQgZGlkIG5vdCBsaWtlOyBkam0gbWlsbGVydCBvawogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDUvMTMgMDI6NDc6NTAKICAgICBbc3NoLWFnZW50LjFdCiAgICAgQWRkIGV4YW1wbGVzIHRvIHNzaC1hZ2VudC4xLCBieiM0ODEgZnJvbSBSYWxmIEhhdXNlcjsgb2sgZGVyYWFkdEAKIC0gKGR0dWNrZXIpIFtzc2hkLjhdIEJ1ZyAjODQzOiBBZGQgd2FybmluZyBhYm91dCBQYXNzd29yZEF1dGhlbnRpY2F0aW9uIHRvCiAgIFVzZVBBTSBzZWN0aW9uLiAgUGFydHMgZnJvbSBkam1AIGFuZCBqbWNALgogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmMgc2NhcmQtb3BlbnNjLmNdIFRpbmRlcmJveCBzYXlzIGF1dGgtcGFtLmMgdXNlcwogICByZWFkcGFzcy5oLCBncmVwIHNheXMgc2NhcmQtb3BlbnNjLmMgZG9lcyB0b28uICBSZXBsYWNlIHdpdGggbWlzYy5oLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmNdIENoZWNrIHRoYXQgSEFWRV9ERUNMX0hfRVJST1IKICAgaXMgZGVmaW5lZCBiZWZvcmUgdXNpbmcuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5hbWUuY10gRml4IHR5cG8gdG9vOiBIQVZFX0RFQ0xfSF9FUlJPUgogICAtPiBIQVZFX0RFQ0xfSF9FUlJOTy4KCjIwMDQwNTAyCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA0LzIyIDExOjU2OjU3CiAgICAgW21vZHVsaS5jXQogICAgIEJ1Z3ppbGxhICM4NTA6IFNvcGhpZSBHZXJtYWluIGlzIHRoZSBjb3JyZWN0IG5hbWUgb2YgdGhlIEZyZW5jaAogICAgIG1hdGhlbWF0aWNpYW4sICJTb3BoaWUgR2VybWFpbmUiIGlzbid0OyBmcm9tIEx1Yy5NYWlzb25vYmVAYy1zLmZyCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA0LzI3IDA5OjQ2OjM3CiAgICAgW3JlYWRjb25mLmMgcmVhZGNvbmYuaCBzZXJ2Y29uZi5jIHNlcnZjb25mLmggc2Vzc2lvbi5jIHNlc3Npb24uaCBzc2guYwogICAgIHNzaF9jb25maWcuNSBzc2hkX2NvbmZpZy41XQogICAgIGJ6ICM4MTU6IGltcGxlbWVudCBhYmlsaXR5IHRvIHBhc3Mgc3BlY2lmaWVkIGVudmlyb25tZW50IHZhcmlhYmxlcyBmcm9tCiAgICAgdGhlIGNsaWVudCB0byB0aGUgc2VydmVyOyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA0LzI4IDA1OjE3OjEwCiAgICAgW3NzaF9jb25maWcuNSBzc2hkX2NvbmZpZy41XQogICAgIG1hbnBhZ2UgZml4ZXMgaW4gZW52cGFzcyBzdHVmZiBmcm9tIEJyaWFuIFBvb2xlIChyYWogQVQgY2VyaWFzLnB1cmR1ZS5lZHUpCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA0LzI4IDA3OjAyOjU2CiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgcmVtb3ZlIHVubmVjZXNzYXJ5IC5QcDsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDQvMjggMDc6MTM6NDIKICAgICBbc2Z0cC4xIHNzaC4xXQogICAgIGFkZCBTZW5kRW52IHRvIC1vIGxpc3Q7CiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNS8wMiAxMTo1NDozMQogICAgIFtzc2hkLjhdCiAgICAgTWFuIHBhZ2UgZ3JhbW1hciBmaXggKGJ6ICM4NTgpLCBmcm9tIGRhbWVyZWxsIGF0IGNoaWFyay5ncmVlbmVuZC5vcmcudWsKICAgICB2aWEgRGViaWFuOyBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNS8wMiAxMTo1Nzo1MgogICAgIFtzc2guMV0KICAgICBDb25uZWN0aW9uVGltZW91dCAtPiBDb25uZWN0VGltZW91dCwgZnJvbSBtLmEuZWxsaXMgYXQgbmNsLmFjLnVrIHZpYQogICAgIERlYmlhbi4gIG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA1LzAyIDIzOjAyOjE3CiAgICAgW3NmdHAuMV0KICAgICBDb25uZWN0aW9uVGltZW91dCAtPiBDb25uZWN0VGltZW91dCBoZXJlIHRvbywgcG9pbnRlZCBvdXQgYnkgam1jQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDUvMDIgMjM6MTc6NTEKICAgICBbc2NwLjFdCiAgICAgQ29ubmVjdGlvblRpbWVvdXQgLT4gQ29ubmVjdFRpbWVvdXQgZm9yIHNjcC4xIHRvby4KCjIwMDQwNDIzCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmNdIERlY2xhcmUgaF9lcnJubwogICBhcyBleHRlcm4gaW50IGlmIG5vdCBhbHJlYWR5IGRlY2xhcmVkLiAgRml4ZXMgY29tcGlsZSBlcnJvcnMgb24gb2xkIFNDTwogICBwbGF0Zm9ybXMuICBvayB0aW1ACiAtIChkdHVja2VyKSBbUkVBRE1FLnBsYXRmb3JtXSBMaXN0IHByZXJlcXMgZm9yIGJ1aWxkaW5nIG9uIEN5Z3dpbi4KCjIwMDQwNDIxCiAtIChkam0pIFVwZGF0ZSBjb25maWcuZ3Vlc3MgYW5kIGNvbmZpZy5zdWIgdG8gYXV0b2NvbmYtMi41OSB2ZXJzaW9uczsgb2sgdGltQAoKMjAwNDA0MjAKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGhlbm5pbmdAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDQvMDggMTY6MDg6MjEKICAgICBbc3NoY29ubmVjdDIuY10KICAgICBzd2FwIHRoZSBsYXN0IHR3byBwYXJhbWV0ZXJzIHRvIFRBSUxRX0ZPUkVBQ0hfUkVWRVJTRS4gbWF0Y2hlcyB3aGF0CiAgICAgRnJlZUJTRCBhbmQgTmV0QlNEIGRvLgogICAgIG9rIG1pbGxlcnRAIG1jYnJpZGVAIG1hcmt1c0AgaG9ALCBjaGVja2VkIHRvIG5vdCBhZmZlY3QgcG9ydHMgYnkgbmFkZHlACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA0LzE4IDIzOjEwOjI2CiAgICAgW3JlYWRjb25mLmMgcmVhZGNvbmYuaCBzc2gta2V5c2lnbi5jIHNzaC5jXQogICAgIHBlcmZvcm0gc3RyaWN0IG93bmVyc2hpcCBhbmQgbW9kZXMgY2hlY2tzIGZvciB+Ly5zc2gvY29uZmlnIGZpbGVzLCAKICAgICBhcyB0aGVzZSBjYW4gYmUgdXNlZCB0byBleGVjdXRlIGFyYml0cmFyeSBwcm9ncmFtczsgb2sgbWFya3VzQAogICAgIE5CLiBzc2ggd2lsbCBub3cgZXhpdCB3aGVuIGl0IGRldGVjdHMgYSBjb25maWcgd2l0aCBwb29yIHBlcm1pc3Npb25zCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA0LzE5IDEzOjAyOjQwCiAgICAgW3NzaC4xIHNzaF9jb25maWcuNV0KICAgICBkb2N1bWVudCBzdHJpY3QgcGVybWlzc2lvbiBjaGVja3Mgb24gfi8uc3NoL2NvbmZpZzsgcHJvbXB0ZWQgYnksIAogICAgIHdpdGggJiBvayBqbWNACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA0LzE5IDE2OjEyOjE0CiAgICAgW3NzaF9jb25maWcuNV0KICAgICBraWxsIHdoaXRlc3BhY2UgYXQgZW9sOwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNC8xOSAyMTo1MTo0OQogICAgIFtzc2guY10KICAgICBmaXggaWRpb3QgdHlwbyB0aGF0IGkgaW50cm9kdWNlZCBpbiBteSBsYXN0IGNvbW1pdDsKICAgICBzcG90dGVkIGJ5IGNzY2huZWlkIEFUIGNzY2huZWlkLmNvbQogLSAoZGptKSBbb3BlbmJzZC1jb21wYXQvc3lzLXF1ZXVlLmhdIFN5bmMgd2l0aCBPcGVuQlNELCBuZWVkZWQgZm9yIAogICBhYm92ZSBjaGFuZ2UKIC0gKGRqbSkgW2NvbmZpZ3VyZS5hY10gQ2hlY2sgd2hldGhlciBsaWJyb2tlbiBpcyByZXF1aXJlZCB3aGVuIGJ1aWxkaW5nIAogICB3aXRoIEhlaW1kYWwKCjIwMDQwNDE5CiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wMi8yOSAyMjowNDo0NQogICAgIFtyZWdyZXNzL2xvZ2luLXRpbWVvdXQuc2hdCiAgICAgVXNlIHN1ZG8gd2hlbiByZXN0YXJ0aW5nIGRhZW1vbiBkdXJpbmcgdGVzdC4gIG9rIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAzLzA4IDEwOjE3OjEyCiAgICAgW3JlZ3Jlc3MvbG9naW4tdGltZW91dC5zaF0KICAgICBNaXNzaW5nIE9CSiwgZnJvbSB0aW1ALiAgb2sgbWFya3VzQCAoQWxyZWFkeSBmaXhlZCwgSUQgc3luYyBvbmx5KQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wMy8zMCAxMjo0MTo1NgogICAgIFtzZnRwLWNsaWVudC5jXQogICAgIHN5bmMgY29tbWVudCB3aXRoIHJlYWxpdHkKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDMvMzEgMjE6NTg6NDcKICAgICBbY2Fub2hvc3QuY10KICAgICBkb24ndCBza2lwIGlwIG9wdGlvbnMgY2hlY2sgd2hlbiBVc2VETlM9bm87IG9rIG1hcmt1c0AgKElEIHN5bmMgb25seSkKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDQvMDEgMTI6MTk6NTcKICAgICBbc2NwLmNdCiAgICAgbGltaXQgdHJ1c3QgYmV0d2VlbiBsb2NhbCBhbmQgcmVtb3RlIHJjcC9zY3AgcHJvY2VzcywKICAgICBub3RpY2VkIGJ5IGxjYW10dWY7IG9rIGRlcmFhZHRALCBkam1ACgoyMDA0MDQxOAogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIExvZyB1c2VybmFtZSBhbmQgc291cmNlIGhvc3QgZm9yIGZhaWxlZCBQQU0KICAgYXV0aGVudGljYXRpb24gYXR0ZW1wdHMuICBXaXRoICYgb2sgZGptQAogLSAoZGptKSBbb3BlbmJzZC1jb21wYXQvYnNkLWN5Z3dpbl91dGlsLmNdIFJlY2VudCB2ZXJzaW9ucyBvZiBDeWd3aW4gYWxsb3cKICAgY2hhbmdlIG9mIHVzZXIgY29udGV4dCB3aXRob3V0IGEgcGFzc3dvcmQsIHNvIHJlbGF4IGF1dGggbWV0aG9kIAogICByZXN0cmljdGlvbnM7IGZyb20gdmluc2NoZW4gQVQgcmVkaGF0LmNvbTsgb2sgZHR1Y2tlckAKCjIwMDQwNDE2CiAtIChkdHVja2VyKSBbcmVncmVzcy9zZnRwLWNtZHMuc2hdIFNraXAgcXVvdGluZyB0ZXN0IG9uIEN5Z3dpbiwgc2luY2UKICAgRkFUL05URlMgZG9lcyBub3QgcGVybWl0IHF1b3RlcyBpbiBmaWxlbmFtZXMuICBGcm9tIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20KIC0gKGRqbSkgW2F1dGgta3JiNS5jIGF1dGguaCBzZXNzaW9uLmNdIEV4cGxpY2l0bHkgcmVmZXIgdG8gS2VyYmVyb3MgY2NhY2hlIAogICBmaWxlIHVzaW5nIEZJTEU6IG1ldGhvZCwgZml4ZXMgcHJvYmxlbXMgb24gTWFjIE9TWC4KICAgUGF0Y2ggZnJvbSBzaW1vbkBzeHcub3JnLnVrOyBvayBkdHVja2VyQAogLSAodGltKSBbY29uZmlndXJlLmFjXSBTZXQgU0VURVVJRF9CUkVBS1NfU0VUVUlELCBCUk9LRU5fU0VUUkVVSUQgYW5kCiAgIEJST0tFTl9TRVRSRUdJRCBmb3IgU0NPIE9wZW5TZXJ2ZXIgMwoKMjAwNDA0MTIKIC0gKGR0dWNrZXIpIFtzc2hkX2NvbmZpZy41XSBBZGQgUGVybWl0Um9vdExvZ2luIHdpdGhvdXQtcGFzc3dvcmQgd2FybmluZwogICBmcm9tIGJ1ZyAjNzAxICh0ZXh0IGZyb20gamZoIGF0IGNpc2UudWZsLmVkdSkuCiAtIChkdHVja2VyKSBbYWNjb25maWcuaCBjb25maWd1cmUuYWMgZGVmaW5lcy5oXSBCdWcgIzY3MzogY2hlY2sgZm9yIDQtYXJnCiAgIHNrZXljaGFsbGVuZ2UoKSwgZWcgb24gTmV0QlNELiAgb2sgbW91cmluZ0AKIC0gKGR0dWNrZXIpIFthdXRoLXNrZXkuYyBkZWZpbmVzLmggbW9uaXRvci5jXSBNYWtlIHNrZXljaGFsbGVuZ2UgZXhwbGljaXRseQogICA0LWFyZywgd2l0aCBjb21wYXRpYmlsaXR5IGZvciAzLWFyZyB2ZXJzaW9ucy4gIEZyb20gZGptQCwgb2sgbWUuCiAtIChkam0pIFtjb25maWd1cmUuYWNdIEZpeCBkZXRlY3Rpb24gb2YgbGlid3JhcCBvbiBPcGVuQlNEOyBvayBkdHVja2VyQAoKMjAwNDA0MDgKIC0gKGR0dWNrZXIpIFtsb2dpbnJlYy5jXSBVc2UgVVRfTElORVNJWkUgaWYgYXZhaWxhYmxlLCBwcmV2ZW50cyB0cnVuY2F0aW5nCiAgIHB0eSBuYW1lIG9uIExpbnV4IDIuNi54IHN5c3RlbXMuICBQYXRjaCBmcm9tIGpwZSBhdCBlaXNlbm1lbmdlci5vcmcuCiAtIChiYWwpIFttb25pdG9yLmMgbW9uaXRvcl93cmFwLmNdIFNlY29uZCB0cnkuICBQdXQgdGhlIHpsaWIuaCBoZWFkZXJzCiAgIGJhY2sgYW5kICN1bmRlZiBUQVJHRVRfT1NfTUFDIGluc3RlYWQuICAoQnVnIHJlcG9ydCBwZW5kaW5nIHdpdGggQXBwbGUpCiAtIChkdHVja2VyKSBbZGVmaW5lcy5oIGxvZ2lucmVjLmNdIERlZmluZSBVVF9MSU5FU0laRSBpZiBub3QgZGVmaW5lZCBhbmQKICAgc2ltcGxpZnkgbG9naW5yZWMuYy4gIG9rIHRpbUAKIC0gKGJhbCkgW21vbml0b3IuYyBtb25pdG9yX3dyYXAuY10gT2suLiBMYXN0IHRpbWUuICBQcm9taXNlLiAgVGltIHN1Z2dlc3RlZAogICBsaW1pdGluZyBzY29wZSBhbmQgZHR1Y2tlckAgYWdyZWVkLgoKMjAwNDA0MDcKIC0gKGR0dWNrZXIpIFtzZXNzaW9uLmNdIEZsdXNoIHN0ZG91dCBhZnRlciBkaXNwbGF5aW5nIGxvZ2lubXNnLiAgRnJvbQogICBmX21vaHIgYXQgeWFob28uZGUuCiAtIChiYWwpIFthY2NvbmZpZy5oIGF1dGgta3JiNS5jIGNvbmZpZ3VyZS5hYyBnc3Mtc2Vydi1rcmI1LmNdIENoZWNrIHRvIHNlZQogICBpZiBLcmI1IGxpYnJhcnkgZXhwb3J0cyBrcmI1X2luaXRfZXRjKCkgc2luY2Ugc29tZSBPU2VzIChsaWtlIE1hY09TL1gpCiAgIGFyZSBzdGFydGluZyB0byByZXN0cmljdCBpdCBhcyBpbnRlcm5hbCBzaW5jZSBpdCBpcyBub3QgbmVlZGVkIGJ5CiAgIGRldmVsb3BlcnMgYW55IG1vcmUuIChQYXRjaCBiYXNlZCBvbiBBcHBsZSB0cmVlKQogLSAoYmFsKSBbbW9uaXRvci5jIG1vbml0b3Jfd3JhcC5jXSBtb25pdG9yX3dyYXAuY10gbW92ZWQgemxpYi5oIGhpZ2hlciBzaW5jZSAKICAga3JiNSBvbiBNYWNPUy9YIGNvbmZsaWN0cy4gIFRoZXJlIG1heSBiZSBhIGJldHRlciBzb2x1dGlvbiwgYnV0IHRoaXMgd2lsbCAKICAgd29yayBmb3Igbm93LgoKMjAwNDA0MDYKIC0gKGR0dWNrZXIpIFthY2NvbmZpZy5oIGNvbmZpZ3VyZS5hYyBkZWZpbmVzLmhdIEJ1ZyAjODIwOiBkb24ndCB1c2UKICAgdXBkd3RtcHgoKSBvbiBJUklYIHNpbmNlIGl0IHNlZW1zIHRvIGNsb2JiZXIgdXRtcC4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjODE2LCAjNzQ4IChhZ2Fpbik6IEF0dGVtcHQgdG8gZGV0ZWN0CiAgIGJyb2tlbiBnZXRhZGRyaW5mbyBhbmQgZnJpZW5kcyBvbiBIUC1VWC4gIG9rIGRqbUAKCjIwMDQwMzMwCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzgxMTogVXNlICIhIiBmb3IgTE9DS0VEX1BBU1NXRF9QUkVGSVggb24KICAgTGludXhlcywgc2luY2UgdGhhdCdzIHdoYXQgbWFueSB1c2UuICBvayBkam1ACiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gcmVuYW1lIHRoZV9hdXRoY3R4dCB0byBzc2hwYW1fYXV0aGN0eHQgaW4gYXV0aC1wYW0uYwogICB0byByZWR1Y2UgcG90ZW50aWFsIGNvbmZ1c2lvbiB3aXRoIHRoZSBvbmUgaW4gc3NoZC5jLiAgb2sgZGptQAogLSAoZGptKSBCdWcgIzgyNTogRml4IGlwX29wdGlvbnNfY2hlY2soKSBmb3IgbWFwcGVkIElQdjQvSVB2NiBjb25uZWN0aW9uOyAKICAgd2l0aCAmIG9rIGR0dWNrZXJACgoyMDA0MDMyNwogLSAoZHR1Y2tlcikgW3Nlc3Npb24uY10gQnVnICM4MTc6IENsZWFyIGxvZ2lubXNnIGFmdGVyIGZvcmsgdG8gcHJldmVudAogICBkdXBsaWNhdGUgbG9naW4gbWVzc2FnZXMgZm9yIG11dGxpLXNlc3Npb24gbG9naW5zLiAgb2sgZGptQAoKMjAwNDAzMjIKIC0gKGRqbSkgW3NzaGQuY10gRHJvcCBzdXBwbGVtZW50YWwgZ3JvdXBzIGlmIHN0YXJ0ZWQgYXMgcm9vdAogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAzLzA5IDIyOjExOjA1CiAgICAgW3NzaC5jXQogICAgIGluY3JlYXNlIHgxMSBjb29raWUgbGlmZXRpbWUgdG8gMjAgbWludXRlczsgb2sgZGptCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAzLzEwIDA5OjQ1OjA2CiAgICAgW3NzaC5jXQogICAgIHRyaW0gdXNhZ2UgdG8gbWF0Y2ggc3NoKDEpIGFuZCBsb29rIG1vcmUgbGlrZSB1bml4LiBvayBkam1ACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAzLzExIDA4OjM2OjI2CiAgICAgW3NzaGQuY10KICAgICB0cmltIHVzYWdlOyBvayBkZXJhYWR0CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAzLzExIDEwOjIxOjE3CiAgICAgW3NzaC5jIHNzaGQuY10KICAgICBzc2gsIHNzaGQ6IHN5bmMgdmVyc2lvbiBvdXRwdXQsIG9rIGRqbQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wMy8yMCAxMDo0MDo1OQogICAgIFt2ZXJzaW9uLmhdCiAgICAgMy44LjEKIC0gKGRqbSkgQ3JhbmsgUlBNIHNwZWMgdmVyc2lvbnMKCjIwMDQwMzExCiAtIChkam0pIFtjb25maWd1cmUuYWNdIEFkZCBzdGFuZGFyZCBsaWNlbnNlIHRvIGNvbmZpZ3VyZS5hYzsgb2sgYmVuLCBkdHVja2VyCgoyMDA0MDMxMAogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2Zha2UtcmZjMjU1My5oXSBCdWcgIzgxMjogI3VuZGVmIGdldGFkZHJpbmZvCiAgIGJlZm9yZSByZWRlZmluaW5nIGl0LCBzaWxlbmNlcyB3YXJuaW5ncyBvbiBUcnU2NC4KCjIwMDQwMzA4CiAtIChkdHVja2VyKSBbc3NoZC5jXSBCYWNrIG91dCByZXYgMS4yNzAgYXMgaXQgY2F1c2VkIHByb2JsZW1zIG9uIHNvbWUKICAgcGxhdGZvcm1zIChlZyBTQ08sIEhQLVVYKSB3aXRoIGxvZ2dpbmcgaW4gdGhlIHdyb25nIFRaLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBzc2hkLmMgb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuaAogICBvcGVuYnNkLWNvbXBhdC9zZXRlbnYuY10gVW5zZXQgS1JCNUNDTkFNRSBvbiBBSVggdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nCiAgIGluaGVyaXRlZCBieSB0aGUgY2hpbGQuICBvayBkam1ACiAtIChkdHVja2VyKSBbYXV0aC1wYW0uYyBhdXRoLXBhbS5oIGF1dGgxLmMgYXV0aDIuYyBtb25pdG9yLmMgbW9uaXRvcl93cmFwLmMKICAgbW9uaXRvcl93cmFwLmhdIEJ1ZyAjODA4OiBFbnN1cmUgZm9yY2VfcHdjaGFuZ2UgaXMgY29ycmVjdGx5IGluaXRpYWxpemVkCiAgIGV2ZW4gaWYga2V5Ym9hcmQtaW50ZXJhY3RpdmUgaXMgbm90IHVzZWQgYnkgdGhlIGNsaWVudC4gIFByZXZlbnRzIAogICBzZWdmYXVsdHMgaW4gc29tZSBjYXNlcyB3aGVyZSB0aGUgdXNlcidzIHBhc3N3b3JkIGlzIGV4cGlyZWQgKG5vdGUgdGhpcyAKICAgaXMgbm90IGNvbnNpZGVyZWQgYSBzZWN1cml0eSBleHBvc3VyZSkuICBvayBkam1ACiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDMvMDMgMDY6NDc6NTIKICAgICBbc3NoZC5jXQogICAgIGNoYW5nZSBwcm9jdGlsdGxlIGFmdGVyIGFjY2VwdCgyKTsgb2sgaGVubmluZywgZGVyYWFkdCwgZGptCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAzLzAzIDA5OjMwOjQyCiAgICAgW3NmdHAtY2xpZW50LmNdCiAgICAgRG9uJ3QgcHJpbnQgZHVwbGljYXRlIG1lc3NhZ2VzIHdoZW4gcHJvZ3Jlc3NtZXRlciBpcyBvZmYKICAgICBTcG90dGVkIGJ5IGpvYjMxNyBBVCBtYWlsdmF1bHQuY29tOyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAzLzAzIDA5OjMxOjIwCiAgICAgW3NmdHAuY10KICAgICBGaXggaW5pdGlhbGlzYXRpb24gb2YgcHJvZ3Jlc3MgbWV0ZXI7IG9rIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDMvMDUgMTA6NTM6NTgKICAgICBbcmVhZGNvbmYuYyByZWFkY29uZi5oIHNjcC4xIHNmdHAuMSBzc2guMSBzc2hfY29uZmlnLjUgc3NoY29ubmVjdDIuY10KICAgICBhZGQgSWRlbnRpdGllc09ubHk7IG9rIGRqbUAsIHBiQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wMy8wOCAwOTozODowNQogICAgIFtzc2gta2V5c2Nhbi5jXQogICAgIGV4cGxpY2l0bHkgaW5pdGlhbGlzZSByZW1vdGVfbWFqb3IgYW5kIHJlbW90ZV9taW5vci4KICAgICBmcm9tIGNqd2F0c29uIEFUIGRlYmlhbi5vcmc7IG9rIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAzLzA4IDEwOjE4OjU3CiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgRG9jdW1lbnQgS2VyYmVyb3NHZXRBRlNUb2tlbjsgIG9rIG1hcmt1c0AKIC0gKHRpbSkgW3JlZ3Jlc3MvUkVBRE1FLnJlZ3Jlc3NdIERvY3VtZW50IHNzaC1yYW5kLWhlbHBlciBpc3N1ZS4gb2sgYmFsCgoyMDA0MDMwNwogLSAodGltKSBbcmVncmVzcy9sb2dpbi10aW1lb3V0LnNoXSBmaXggYnVpbGRpbmcgb3V0c2lkZSBvZiBzb3VyY2UgdHJlZS4KCjIwMDQwMzA0CiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gRG9uJ3QgdHJ5IHRvIGV4cG9ydCBQQU0gd2hlbiBjb21waWxlZCB3aXRoCiAgIC1EVVNFX1BPU0lYX1RIUkVBRFMuICBGcm9tIGFudG9pbmUudmVyaGVpamVuIGF0IHVhbGJlcnQgY2EuICBvayBkam1ACiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gUmVzZXQgc2lnbmFsIHN0YXR1cyB3aGVuIHN0YXJ0aW5nIHBhbSBhdXRoIHRocmVhZCwKICAgcHJldmVudCBoYW5naW5nIGR1cmluZyBQQU0ga2V5Ym9hcmQtaW50ZXJhY3RpdmUgYXV0aGVudGljYXRpb25zLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2F1dGgtcGFzc3dkLmMgYXV0aC1zaWEuYyBhdXRoLXNpYS5oIGRlZmluZXMuaAogICBvcGVuYnNkLWNvbXBhdC94Y3J5cHQuY10gQnVnICM4MDI6IEZpeCBidWlsZCBlcnJvciBvbiBUcnU2NCB3aGVuCiAgIGNvbmZpZ3VyZWQgLS13aXRoLW9zZnNpYS4gIG9rIGRqbUAKCjIwMDQwMzAzCiAtIChkam0pIFtjb25maWd1cmUuYWMgc3NoLWFnZW50LmNdIFVzZSBwcmN0bCB0byBwcmV2ZW50IHB0cmFjZSBvbiBzc2gtYWdlbnQKICAgb2sgZHR1Y2tlciAgCgoyMDA0MDIyOQogLSAodGltKSBbY29uZmlndXJlLmFjXSBQdXQgYmFjayBiaXRzIG1pc3Rha2VubHkgcmVtb3ZlZCBmcm9tIFJldiAxLjE4OAoKMjAwNDAyMjkKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDIvMjUgMDA6MjI6NDUKICAgICBbc3NoZC5jXQogICAgIHR5cG8gaW4gY29tbWVudAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDIvMjcgMjI6NDI6NDcKICAgICBbZGguY10KICAgICBQcmV2ZW50IHNzaGQgZnJvbSBzZW5kaW5nIERIIGdyb3VwcyB3aXRoIGEgcHJpbWl0aXZlIGdlbmVyYXRvciBvZiB6ZXJvIG9yCiAgICAgb25lLCBldmVuIGlmIHRoZXkgYXJlIGxpc3RlZCBpbiAvZXRjL21vZHVsaS4gIG9rIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAyLzI3IDIyOjQ0OjU2CiAgICAgW2RoLmNdCiAgICAgTWFrZSAvZXRjL21vZHVsaSBsaW5lIGJ1ZmZlciBiaWcgZW5vdWdoIGZvciA4a2JpdCBwcmltZXMsIGluIGNhc2UgYW55b25lCiAgICAgZXZlciB1c2VzIG9uZS4gIG9rIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAyLzI3IDIyOjQ5OjI3CiAgICAgW2RoLmNdCiAgICAgUmVzZXQgYml0IGNvdW50ZXIgYXQgdGhlIHJpZ2h0IHRpbWUsIGZpeGVzIGRlYnVnIG91dHB1dCBpbiB0aGUgY2FzZSB3aGVyZQogICAgIHRoZSBESCBncm91cCBpcyByZWplY3RlZC4gIG9rIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAyLzE3IDA4OjIzOjIwCiAgICAgW3JlZ3Jlc3MvTWFrZWZpbGUgcmVncmVzcy9sb2dpbi10aW1lb3V0LnNoXQogICAgIEFkZCByZWdyZXNzaW9uIHRlc3QgZm9yIExvZ2luR3JhY2VUaW1lOyBvayBtYXJrdXNACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAyLzI0IDE2OjU2OjMwCiAgICAgW3JlZ3Jlc3MvdGVzdC1leGVjLnNoXQogICAgIGFsbG93IGFyZ3VtZW50cyBpbiAke1RFU1RfU1NIX1hYWH0KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDIvMjQgMTc6MDY6NTIKICAgICBbcmVncmVzcy9zc2gtY29tLWNsaWVudC5zaCByZWdyZXNzL3NzaC1jb20ta2V5Z2VuLnNoCiAgICAgcmVncmVzcy9zc2gtY29tLXNmdHAuc2ggcmVncmVzcy9zc2gtY29tLnNoXQogICAgIHRlc3QgYWdhaW5zdCByZWNlbnQgc3NoLmNvbSByZWxlYXNlcwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDIvMjggMTI6MTY6NTcKICAgICBbcmVncmVzcy9keW5hbWljLWZvcndhcmQuc2hdCiAgICAgTWFrZSBkeW5hbWljLWZvcndhcmQgdW5kZXJzdGFuZCBuYydzIG5ldyBvdXRwdXQuICBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wMi8yOCAxMzo0NDo0NQogICAgIFtyZWdyZXNzL3RyeS1jaXBoZXJzLnNoXQogICAgIFRlc3QgYWNzcyB0b287IG9rIG1hcmt1c0AKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL3RyeS1jaXBoZXJzLnNoXSBTa2lwIGFjc3MgaWYgbm90IGNvbXBpbGVkIGluIChlZyBpZiB3ZQogICBidWlsdCB3aXRoIG9wZW5zc2wgPCAwLjkuNykKCjIwMDQwMjI2CiAtIChiYWwpIEtORiBvdXIgc3NobG9naW4uYyBldmVuIGlmIHRoZSBjb2RlIGxvb2tzIG5vdGhpbmcgbGlrZSB1cHN0cmVhbQogICBjb2RlIGR1ZSB0byBkaXZlcnNpdHkgaXNzdWVzLgoKMjAwNDAyMjUKIC0gKGRqbSkgVHJpbSBDaGFuZ2VMb2cgCiAtIChkam0pIERvbid0IHNwZWNpZnkgcGF0aCB0byBQQU0gbW9kdWxlcyBpbiBSZWRoYXQgc3NoZC5wYW07IGZyb20gRmVkb3JhCgoyMDA0MDIyNAogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wMi8xOSAyMToxNTowNAogICAgIFtzZnRwLXNlcnZlci5jXQogICAgIHN3aXRjaCB0byBuZXcgbGljZW5zZS50ZW1wbGF0ZQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wMi8yMyAxMjowMjozMwogICAgIFtzc2hkLmNdCiAgICAgYmFja291dCByZXZpc2lvbiAxLjI3OTsgc2V0IGxpc3RlbiBzb2NrZXQgdG8gbm9uLWJsb2NrOyBvayBoZW5uaW5nLgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wMi8yMyAxNToxMjo0NgogICAgIFtidWZhdXguY10KICAgICBlbmNvZGUgMCBjb3JyZWN0bHkgaW4gYnVmZmVyX3B1dF9iaWdudW0yOyBub3RlZCBieSBNaWt1bGFzIFBhdG9ja2EKICAgICBhbmQgZHJvcCBzdXBwb3J0IGZvciBuZWdhdGl2ZSBCTnM7IG9rIG90dG9ACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAyLzIzIDE1OjE2OjQ2CiAgICAgW3ZlcnNpb24uaF0KICAgICBlbnRlciAzLjgKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgZ3NzLXNlcnYta3JiNS5jIHNzaC1nc3MuaF0gRGVmaW5lIEdTU0FQSSB3aGVuIGZvdW5kCiAgIHdpdGgga3JiNS1jb25maWcsIGh1bnQgZG93biBnc3NhcGkuaCBhbmQgZnJpZW5kcy4gIEJhc2VkIHBhcnRpYWxseSBvbiBwYXRjaAogICBmcm9tIGRlZW5nZXJ0IGF0IGFubC5nb3YuICBvayBkam1ACiAtIChkam0pIFtncm91cGFjY2Vzcy5jIHVpZHN3YXAuY10gQnVnICM3ODc6IFNpemUgZ3JvdXAgYXJyYXlzIGF0IHJ1bnRpbWUgCiAgIHVzaW5nIHN5c2NvbmYoKSBpZiBhdmFpbGFibGUgQmFzZWQgb24gcGF0Y2hlcyBmcm9tIAogICBob2xnZXIgQVQgdmFuLWxlbmdlcmljaC5kZSBhbmQgb3BlbnNzaF9idWd6aWxsYSBBVCBob2NraW4ub3JnCiAtIChkdHVja2VyKSBbdWlkc3dhcC5jXSBNaW5vciBLTkYuICBvayBkam1ACiAtICh0aW0pIFtvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5jXSBNYWtlIGdjYyAyLjcuMi4zIGhhcHB5LiAgb2sgZGptQAogLSAoZGptKSBDcmFuayBSUE0gc3BlYyB2ZXJzaW9ucwogLSAoZHR1Y2tlcikgW1JFQURNRV0gQWRkIHBvaW50ZXIgdG8gcmVsZWFzZSBub3Rlcy4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIHtSRUFETUUucGxhdGZvcm1dIEFkZCBwbGF0Zm9ybS1zcGVjaWZpYyBub3Rlcy4KIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gU0NPMyBuZWVkcyAtbGNyeXB0X2kgZm9yIC1scHJvdAogLSAoZGptKSBSZWxlYXNlIDMuOHAxCgoyMDA0MDIyMwogLSAoZHR1Y2tlcikgW3Nlc3Npb24uY10gQnVnICM3ODk6IE9ubHkgbWFrZSBzZXRjcmVkIGNhbGwgZm9yICFwcml2c2VwIGluIHRoZQogICBub24taW50ZXJhY3RpdmUgcGF0aC4gIG9rIGRqbUAKCjIwMDQwMjIyCiAtIChkdHVja2VyKSBbYXV0aC1zaGFkb3cuYyBhdXRoLmMgYXV0aC5oXSBNb3ZlIHNoYWRvdyBhY2NvdW50IGV4cGlyeSB0ZXN0CiAgIHRvIGF1dGgtc2hhZG93LmMsIG5vIGZ1bmN0aW9uYWwgY2hhbmdlLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2F1dGgtc2hhZG93LmMgYXV0aC5oXSBQcm92aWRlIHdhcm5pbmdzIG9mIGltcGVuZGluZyBhY2NvdW50IG9yCiAgIHBhc3N3b3JkIGV4cGlyeS4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFthdXRoLXBhc3N3ZC5jXSBPbmx5IGNoZWNrIHBhc3N3b3JkIGV4cGlyeSBvbmNlLiAgUHJldmVudHMKICAgbXVsdGlwbGUgd2FybmluZ3MgaWYgYSB3cm9uZyBwYXNzd29yZCBpcyBlbnRlcmVkLgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQXBwbHkga3JiNS1jb25maWcgLS1saWJzIGZpeCB0byBub24tZ3NzYXBpIHBhdGgKICAgdG9vLgoKMjAwNDAyMjAKIC0gKGRqbSkgW29wZW5ic2QtY29tcGF0L3NldHByb2N0aXRsZS5jXSBmaXggY29tbWVudHM7IGZyb20gZ3JhbmdlQAoKMjAwNDAyMTgKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEhhbmRsZSBjYXNlIHdoZXJlIGtyYjUtY29uZmlnIC0tbGlicyByZXR1cm5zIGEKICAgcGF0aCB3aXRoIGEgIi0iIGluIGl0LiAgRnJvbSBTZXJnaW8uR2VsYXRvIGF0IGFzdHJvLnN1LnNlLgogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAyLzE3IDA3OjE3OjI5CiAgICAgW3NmdHAtZ2xvYi5jIHNmdHAuY10KICAgICBSZW1vdmUgdXNlbGVzcyBoZWFkZXJzOyBvayBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wMi8xNyAxMTowMzowOAogICAgIFtzZnRwLmNdCiAgICAgc2Z0cC5jIGFuZCBzZnRwLWludC5jLCB0b2dldGhlciBhdCBsYXN0OyBvayBtYXJrdXNACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAyLzE3IDE5OjM1OjIxCiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgcmVtb3ZlIGNydWZ0IGxlZnQgb3ZlciBmcm9tIFJob3N0c0F1dGhlbnRpY2F0aW9uIHJlbW92YWw7CiAgICAgb2sgbWFya3VzQAogLSAoZGptKSBbbG9nLmNdIENvcnJlY3QgdXNlIG9mIEhBVkVfT1BFTkxPR19SCiAtIChkam0pIFtsb2cuY10gVGlnaHRlbiBvcGVubG9nX3IgdGVzdHMKCjIwMDQwMjE3CiAtIChkam0pIFNpbXBsaWZ5IHRoZSBsaWNlbnNlIG9uIGNvZGUgSSBoYXZlIHdyaXR0ZW4uIE5vIGNvZGUgY2hhbmdlcy4KIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wMi8xNyAwNTozOTo1MQogICAgIFtzZnRwLWNsaWVudC5jIHNmdHAtY2xpZW50Lmggc2Z0cC1nbG9iLmMgc2Z0cC1nbG9iLmggc2Z0cC1pbnQuY10KICAgICBbc2Z0cC1pbnQuaCBzZnRwLmNdCiAgICAgc3dpdGNoIHRvIGxpY2Vuc2UudGVtcGxhdGUgZm9yIGNvZGUgd3JpdHRlbiBieSBtZSAoYmVsYXRlZCwgSSBrbm93Li4uKQogLSAoZGptKSBCdWcgIzY5ODogU3BlY2lmeSBGSUxFOiBmb3IgS1JCNUNDTkFNRTsgcGF0Y2ggZnJvbSAKICAgc3RhZGFsQHN1c2UuY3ogYW5kIHNpbW9uQHN4dy5vcmcudWsKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBUaWR5IHVwIFBBTSBkZWJ1Z2dpbmcuICBvayBkam1ACiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gU3RvcmUgb3V0cHV0IGZyb20gcGFtX3Nlc3Npb24gYW5kIHBhbV9zZXRjcmVkIGZvcgogICBkaXNwbGF5IGFmdGVyIGxvZ2luLiAgU2hvdWxkIGZpeCBwcm9ibGVtcyBsaWtlIHBhbV9tb3RkIG5vdCBkaXNwbGF5aW5nCiAgIGFueXRoaW5nLCBub3RpY2VkIGJ5IGNqd2F0c29uIGF0IGRlYmlhbi5vcmcuICBvayBkam1ACgoyMDA0MDIxMgogLSAodGltKSBbTWFrZWZpbGUuaW4gcmVncmVzcy9zZnRwLWJhZGNtZHMuc2ggcmVncmVzcy90ZXN0LWV4ZWMuc2hdCiAgIFBvcnRhYmxpdHkgZml4ZXMuIERhdGEgc2Z0cCB0cmFuc2ZlcnMgbmVlZHMgdG8gYmUgd29ybGQgcmVhZGFibGUuIFNvbWUKICAgb2xkZXIgc2hlbGxzIGhhbmcgb24gd2hpbGUgbG9vcHMgd2hlbiAgZG9pbmcgc2ggLW4gc29tZV9zY3JpcHQuIE9LIGR0dWNrZXJACiAtICh0aW0pIFtjb25maWd1cmUuYWNdIE1ha2Ugc3VyZSAtbGNyeXB0byBpcyBiZWZvcmUgLWxzb2NrZXQgZm9yIHNjbzMuCiAgIG9rIG1vdXJpbmdACgoyMDA0MDIxMQogLSAoZHR1Y2tlcikgW2F1dGgtcGFzc3dkLmMgYXV0aC1zaGFkb3cuY10gT25seSBlbmFibGUgc2hhZG93IGV4cGlyeSBjaGVjawogICBpZiBIQVNfU0hBRE9XX0VYUElSWSBpcyBzZXQuCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIEZpeCBjb21tZW50IHRvIG1hdGNoIGNvZGUgY2hhbmdlcyBpbiB2ZXIgMS4xMTcKCjIwMDQwMjEwCiAtIChkdHVja2VyKSBbYXV0aC1wYXNzd2QuYyBhdXRoLmggb3BlbmJzZC1jb21wYXQvcG9ydC1haXguYwogICBvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5oXSBCdWcgIzE0OiBVc2UgZG9fcHdjaGFuZ2UgdG8gc3VwcG9ydCBBSVgncwogICBuYXRpdmUgcGFzc3dvcmQgZXhwaXJ5LgogLSAoZHR1Y2tlcikgW0xJQ0VOQ0UgTWFrZWZpbGUuaW4gYXV0aC1wYXNzd2QuYyBhdXRoLXNoYWRvdy5jIGF1dGguYyBhdXRoLmgKICAgZGVmaW5lcy5oXSBCdWcgIzE0OiBVc2UgZG9fcHdjaGFuZ2UgdG8gc3VwcG9ydCBwYXNzd29yZCBleHBpcnkgYW5kIGZvcmNlCiAgIGNoYW5nZSBmb3IgcGxhdGZvcm1zIHVzaW5nIC9ldGMvc2hhZG93LiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2Zha2UtcmZjMjU1My5oXSBCdWcgIzU2MzogUHJlcGVuZCBzc2hfIHRvIGNvbXBhdAogICBmdW5jdGlvbnMgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggSGVpbWRhbCdzIGxpYnJva2VuLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmMgYXV0aC1wYW0uaCBzZXNzaW9uLmNdIEJ1ZyAjMTQ6IFVzZSBkb19wd2NoYW5nZSB0bwogICBjaGFuZ2UgZXhwaXJlZCBQQU0gcGFzc3dvcmRzIGZvciBTU0h2MSBjb25uZWN0aW9ucyB3aXRob3V0IHByaXZzZXAuCiAgIHBhbV9jaGF1dGh0b2sgaXMgc3RpbGwgdXNlZCB3aGVuIHByaXZzZXAgaXMgZGlzYWJsZWQuICBvayBkam1ACiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcG9ydC1haXguYyBvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5oXSBNb3ZlCiAgIGluY2x1ZGUgZnJvbSBwb3J0LWFpeC5oIHRvIHBvcnQtYWl4LmMgYW5kIHJlbW92ZSB1bm5lY2Vzc2FyeSBmdW5jdGlvbgogICBkZWZpbml0aW9uLiAgRml4ZXMgYnVpbGQgZXJyb3JzIG9uIEFJWC4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgbG9naW5yZWMuY10gQnVnICM0NjQ6IFVzZSB1cGR3dG1weCBvbiBwbGF0Zm9ybXMKICAgdGhhdCBzdXBwb3J0IGl0LiAgZnJvbSAmIG9rIG1vdXJpbmdACiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzM0NTogRG8gbm90IGRpc2FibGUgdXRtcCBvbiBIUC1VWCAxMC54LgogICBvayBkam1ACgoyMDA0MDIwNwogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDIvMDYgMjM6NDE6MTMKICAgICBbY2lwaGVyLWN0ci5jXQogICAgIFVzZSBFVlBfQ0lQSEVSX0NUWF9rZXlfbGVuZ3RoIGZvciBrZXkgbGVuZ3RoLiAgb2sgbWFya3VzQAogICAgIChUaGlzIHdpbGwgZml4IGJ1aWxkcyB3aXRoIE9wZW5TU0wgMC45LjUpCiAtIChkdHVja2VyKSBbY2lwaGVyLmNdIGVuYWJsZSBBRVMgY291bnRlciBtb2RlcyB3aXRoIE9wZW5TU0wgMC45LjUuCiAgIG9rIGRqbUAsIG1hcmt1c0AKCjIwMDQwMjA2CiAtIChkdHVja2VyKSBbYWNzcy5jIGFjc3MuaF0gRml4ICRJZCB0YWdzLgogLSAoZHR1Y2tlcikgW2NpcGhlci1hY3NzLmMgY2lwaGVyLmNdIEVuYWJsZSBhY3NzIG9ubHkgaWYgYnVpbGRpbmcgd2l0aAogICBPcGVuU1NMID49IDAuOS43LiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW3Nlc3Npb24uY10gQnVnICM3ODk6IERvIG5vdCBjYWxsIGRvX3BhbV9zZXRjcmVkIGFzIGEgbm9uLXJvb3QKICAgdXNlciwgc2luY2Ugc29tZSBtb2R1bGVzIG1pZ2h0IGZhaWwgZHVlIHRvIGxhY2sgb2YgcHJpdmlsZWdlLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICM3NDg6IEFsd2F5cyBkZWZpbmUgQlJPS0VOX0dFVEFERFJJTkZPCiAgIGZvciBIUC1VWCAxMS4xMS4gIElmIHRoZXJlIGFyZSBrbm93bi1nb29kIGNvbmZpZ3Mgd2hlcmUgdGhpcyBpcyBub3QKICAgcmVxdWlyZWQsIHBsZWFzZSByZXBvcnQgdGhlbS4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtzc2hkLmNdIEJ1ZyAjNzU3OiBDbGVhciBjaGlsZCdzIGVudmlyb25tZW50IHRvIHByZXZlbnQKICAgYWNjaWRlbnRhbGx5IGluaGVyaXRpbmcgZnJvbSByb290J3MgZW52aXJvbm1lbnQuICBvayBkam1ACiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcG9ydC1haXguYyBvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5oXSBCdWcgIzc5NjoKICAgUmVzdG9yZSBwcmV2aW91cyBhdXRoZGIgc2V0dGluZyBhZnRlciBhdXRoIGNhbGxzLiAgRml4ZXMgcHJvYmxlbXMgd2l0aAogICBzZXRwY3JlZCBmYWlsaW5nIG9uIGFjY291bnRzIHRoYXQgdXNlIEFGUyBvciBOSVMgcGFzc3dvcmQgcmVnaXN0cmllcy4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgaW5jbHVkZXMuaF0gSW5jbHVkZSA8c3lzL3N0cmVhbS5oPiBpZiBwcmVzZW50LAogICByZXF1aXJlZCBvbiBTb2xhcmlzIDIuNS4xIGZvciBxdWV1ZV90LCB3aGljaCBpcyB1c2VkIGJ5IDxzeXMvcHRtcy5oPi4KIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDEvMzAgMDk6NDg6NTcKICAgICBbYXV0aC1wYXNzd2QuYyBhdXRoLmggcGF0aG5hbWVzLmggc2Vzc2lvbi5jXQogICAgIHN1cHBvcnQgZm9yIHBhc3N3b3JkIGNoYW5nZTsgb2sgZHR1Y2tlckAKICAgICAoc2V0IHBhc3N3b3JkLWRlYWQ9MXcgaW4gbG9naW4uY29uZiB0byB1c2UgdGhpcykuCiAgICAgSW4gLVBvcnRhYmxlLCB0aGlzIGlzIGN1cnJlbnRseSBvbmx5IHBsYXRmb3JtcyB1c2luZyBic2RhdXRoLgogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDIvMDUgMDU6Mzc6MTcKICAgICBbbW9uaXRvci5jIHNzaGQuY10KICAgICBQYXNzIFNJR0FMUk0gdGhyb3VnaCB0byBwcml2c2VwIGNoaWxkIGlmIExvZ2luR3JhY2VUaW1lIGV4cGlyZXMuIG9rIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDIvMDUgMTU6MzM6MzMKICAgICBbcHJvZ3Jlc3NtZXRlci5jXQogICAgIGZpeCBFVEEgZm9yID4gNEdCOyBidWd6aWxsYSAjNzkxOyBvayBoZW5uaW5nQCBkZXJhYWR0QAoKMjAwNDAxMjkKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMgcmVncmVzcy8KICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEwLzExIDExOjQ5OjQ5CiAgICAgW01ha2VmaWxlIGJhbm5lci5zaF0KICAgICBUZXN0IG1pc3NpbmcgYmFubmVyIGZpbGUsIHN1cHByZXNzaW9uIG9mIGJhbm5lciB3aXRoIHNzaCAtcSwgY2hlY2sgcmV0dXJuCiAgICAgY29kZSBmcm9tIHNzaC4gIG9rIG1hcmt1c0AKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMDcgMTA6MTY6NDQKICAgICBbc3NoLWNvbS5zaF0KICAgICBhZHJlc3MgLT4gYWRkcmVzcywgYW5kIGEgZmV3IG1vcmU7IGFsbCBmcm9tIEpvbmF0aG9uIEdyYXk7CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAxLzEzIDA5OjQ5OjA2CiAgICAgW3NmdHAtYmF0Y2guc2hdCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBBZGQgLS13aXRob3V0LXpsaWItdmVyc2lvbi1jaGVjay4gIEZlZWRiYWNrIGZyb20KICAgdGltQCwgb2sgc2V2ZXJhbAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC9ic2QtY3JheS5jIG9wZW5ic2QtY29tcGF0L2JzZC1jcmF5LmhdCiAgIEJ1ZyAjNzc1OiBDcmF5IGZpeGVzIGZyb20gd2VuZHkgYXQgY3JheS5jb20KCjIwMDQwMTI4CiAtIChkdHVja2VyKSBbcmVncmVzcy9SRUFETUUucmVncmVzc10gQWRkIHRjcHdyYXBwZXJzIGlzc3VlLCBub3RlZCBieSB0aW1ACiAtIChkdHVja2VyKSBbbW9kdWxpXSBJbXBvcnQgbmV3IG1vZHVsaSBmaWxlIGZyb20gT3BlbkJTRC4KCjIwMDQwMTI3CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBoc2hvZXhlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wMS8yMyAxNzowNjowMwogICAgIFtjaXBoZXIuY10KICAgICBlbmFibGUgYWNzcyBmb3Igc3NoCiAgICAgb2sgZGVyYWFkdEAgbWFya3VzQAogICAtIG1vdXJpbmdAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDEvMjMgMTc6NTc6NDgKICAgICBbc2Z0cC1pbnQuY10KICAgICBGaXggaXNzdWUgcG9pbnRlZCBvdXQgd2l0aCBscyBub3QgaGFuZGxpbmcgbGFyZ2UgZGlyZWN0b3JpZXMgCiAgICAgd2l0aCBlbWJlZGVkIHBhdGhzIGNvcnJlY3RseS4gIE9LIGRhbWllbkAKICAgLSBoc2hvZXhlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wMS8yMyAxOToyNjozMwogICAgIFtjaXBoZXIuY10KICAgICByZW5hbWUgYWNzc0BvcGVic2Qub3JnIHRvIGFjc3NAb3BlbnNzaC5vcmcKICAgICBvayBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wMS8yNSAwMzo0OTowOQogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgcmVzZXQgbm9uYmxvY2tpbmcgZmxhZyBhZnRlciBDb25uZWN0VGltZW91dCA+IDAgY29ubmVjdDsgKGJ1Z3ppbGxhICM3ODUpCiAgICAgZnJvbSBqY2xvbmd1ZXQgQVQgZnJlZS5mcjsgb2sgbWlsbGVydEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDEvMjcgMTA6MDg6MTAKICAgICBbc2Z0cC5jXQogICAgIHJlb3JkZXIgcGFyc2luZyBzbyB1c2VyOnNrZXlAaG9zdDpmaWxlIHdvcmtzIChidWd6aWxsYSAjNzc3KQogICAgIHBhdGNoIGZyb20gYWRtb3J0ZW4gQVQgdW1pY2guZWR1OyBvayBtYXJrdXNACiAtIChkam0pIFthY3NzLmMgYWNzcy5oIGNpcGhlci1hY3NzLmNdIFBvcnRhYmxlIHN1cHBvcnQgZm9yIEFDU1MgCiAgIGlmIGxpYmNyeXB0byBsYWNrcyBpdAoKMjAwNDAxMjYKIC0gKHRpbSkgVHlwbyBpbiByZWdyZXNzL1JFQURNRS5yZWdyZXNzCiAtICh0aW0pIFtyZWdyZXNzL3Rlc3QtZXhlYy5zaF0gUmhvc3RzQXV0aGVudGljYXRpb24gaXMgZGVwcmVjYXRlZC4KIC0gKHRpbSkgW2RlZmluZXMuaF0gQWRkIGRlZmluZXMgZm9yIEhGSVhFRFNaIGFuZCBUX1NJRwogLSAodGltKSBbY29uZmlndXJlLmFjIGluY2x1ZGVzLmhdIGFkZCA8c3lzL3B0bXMuaD4gZm9yIGdyYW50cHQoKSBhbmQgZnJpZW5kcy4KIC0gKHRpbSkgW2RlZmluZXMuaCBvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5oXSBNb3ZlIGRlZmluZXMgZm9yIEhGSVhFRFNaCiAgIGFuZCBUX1NJRyB0byBnZXRycnNldGJ5bmFtZS5oCgoyMDA0MDEyNAogLSAoZGptKSBUeXBvIGluIG9wZW5ic2QtY29tcGF0L2JzZC1vcGVucHR5LmM7IGZyb20gd2VuZHlwIEFUIGNyYXkuY29tCgoyMDA0MDEyMyAKIC0gKGRqbSkgRG8gcGFtX3Nlc3Npb24gcHJvY2Vzc2luZyBmb3Igc3lzdGVtcyB3aXRoIEhBVkVfTE9HSU5fQ0FQOyBmcm9tIAogICByYWxmLmhhY2sgQVQgcGlwZXgubmV0OyBvayBkdHVja2VyQAogLSAoZGptKSBCdWcgIzc3NjogVXBkYXRlIGNvbnRyaWIvcmVkaGF0L29wZW5zc2guc3BlYyB0byBkeW5hbWljYWxseSBkZXRlY3QKICAgS2VyYmVyb3MgbG9jYXRpb24gKGFuZCB0aHVzIHdvcmsgd2l0aCBGZWRvcmEgQ29yZSAxKTsKICAgZnJvbSBqYXNvbiBBVCBkZXZyYW5kb20ub3JnCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzc4ODogVGVzdCBmb3IgemxpYi5oIHByZXNlbmNlIGFuZCBmb3IKICAgemxpYiA+PSAxLjEuNC4gIFBhcnRseSBmcm9tIGpiYXNuZXkgYXQgbmNzYS51aXVjLmVkdS4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtjb250cmliL2N5Z3dpbi9SRUFETUVdIERvY3VtZW50IG5ldyBzc2gtaG9zdC1jb25maWcgb3B0aW9ucy4KICAgUGF0Y2ggZnJvbSB2aW5zY2hlbiBhdCByZWRoYXQuY29tLgogLSAoZHR1Y2tlcikgW2FjY29uZmlnLmggY29uZmlndXJlLmFjIGluY2x1ZGVzLmggc2VydmNvbmYuYyBzZXNzaW9uLmNdCiAgIENoYW5nZSBBRlMgc3ltYm9sIHRvIFVTRV9BRlMgdG8gcHJldmVudCBuYW1lc3BhY2UgY29sbGlzaW9ucywgZG8gbm90CiAgIGluY2x1ZGUga2Fmcy5oIHVubGVzcyBuZWNlc3NhcnkuICBGcm9tIGRlZW5nZXJ0IGF0IGFubC5nb3YuCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIFJlbW92ZSBoYXJkIGNvZGVkIC1ML3Vzci9sb2NhbC9saWIgYW5kCiAgIC1JL3Vzci9sb2NhbC9pbmNsdWRlLiBVc2VycyBjYW4gZG8gTERGTEFHUz0iLUwvdXNyL2xvY2FsL2xpYiIgXAogICBDUFBGTEFHUz0iLUkvdXNyL2xvY2FsL2luY2x1ZGUiIC4vY29uZmlndXJlIGlmIG5lZWRlZC4KCjIwMDQwMTIyCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBVc2Uga3JiNS1jb25maWcgd2hlcmUgYXZhaWxhYmxlIGZvciBLZXJiZXJvcy8KICAgR1NTQVBJIGRldGVjdGlvbiwgbGlicyBhbmQgaW5jbHVkZXMuICBvayBkam1ACiAtIChkdHVja2VyKSBbc2Vzc2lvbi5jXSBFbmFibGUgQUZTIHN1cHBvcnQgaW4gY29uanVuY3Rpb24gd2l0aCBLUkI1IG5vdAogICBqdXN0IEhFSU1EQUwuCiAtICh0aW0pIFtjb250cmliL3NvbGFyaXMvYnVpbGRwa2cuc2hdIEFsbG93IGZvciB0aGUgcG9zc2liaWxpdHkgb2YKICAgL3Vzci9sb2NhbCBiZWluZyBhIHN5bWJvbGljIGxpbmsuIEZpeGVzIHByb2JsZW0gcmVwb3J0ZWQgYnkgSGVucnkgR3JlYmxlci4KCjIwMDQwMTIxCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDEvMTMgMDk6MjU6MDUKICAgICBbc2Z0cC1pbnQuYyBzZnRwLjEgc2Z0cC5jXQogICAgIFRpZHkgc2Z0cCBiYXRjaG1vZGUgaGFuZGxpbmcsIGVsaW1pbmF0ZSBqdW5rIHRvIHN0ZGVyciAoYnVnemlsbGEgIzc1NCkgYW5kCiAgICAgZW5hYmxlIHVzZSBvZiAiLWIgLSIgdG8gYWNjZXB0IGJhdGNoZmlsZSBmcm9tIHN0ZGluOyBvayBtYXJrdXNACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAxLzEzIDEyOjE3OjMzCiAgICAgW3NmdHAuMV0KICAgICByZW1vdmUgdW5uZWNlc3NhcnkgSWMnczsKICAgICBraWxsIHdoaXRlc3BhY2UgYXQgRU9MOwogICAgIG9rIGRqbUAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDEvMTMgMTk6MjM6MTUKICAgICBbY29tcHJlc3MuYyBzZXNzaW9uLmNdCiAgICAgLVdhbGw7IG9rIGhlbm5pbmcKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDEvMTMgMTk6NDU6MTUKICAgICBbY29tcHJlc3MuY10KICAgICBjYXN0IGZvciBwb3J0YWJpbGl0eTsgbWlsbGVydEAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDEvMTkgMDk6MjQ6MjEKICAgICBbY2hhbm5lbHMuY10KICAgICBmYWtlIGNvbnN1bXB0aW9uIGZvciBoYWxmIGNsb3NlZCBjaGFubmVscyBzaW5jZSB0aGUgcGVlciBpcyB3YWl0aW5nIGZvcgogICAgIHdpbmRvdyBhZGp1c3QgbWVzc2FnZXM7IGJ1Z3ppbGxhICM3OTAgTWF0dGhldyBEaWxsb247IHRlc3QgKyBvayBkdHVja2VyQAogICAgIHJlcHJvZHVjZSB3aXRoIHNoIC1jICd1bGltaXQgLWYgMTA7IHNzaCBob3N0IC1uIG9kIC9ic2QgfCBjYXQgPiBmb28nCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAxLzE5IDIxOjI1OjE1CiAgICAgW2F1dGgyLWhvc3RiYXNlZC5jIGF1dGgyLXB1YmtleS5jIHNlcnZlcmxvb3AuYyBzc2gta2V5c2lnbi5jIHNzaGNvbm5lY3QyLmNdCiAgICAgZml4IG1lbSBsZWFrczsgc29tZSBmaXhlcyBmcm9tIFBldGUgRmx1Z3N0YWQ7IHRlc3RlZCBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wMS8yMSAwMzowNzo1OQogICAgIFtzZnRwLmNdCiAgICAgaW5pdGlhbGlzZSBpbmZpbGUgaW4gbWFpbiwgcmF0aGVyIHRoYW4gc3RhdGljYWxseSAtIGZyb20gcG9ydGFibGUKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAxLzExIDIxOjU1OjA2CiAgICAgW3NzaHB0eS5jXQogICAgIGZvciBwdHkgb3BlbmluZywgb25seSB1c2UgdGhlIG9wZW5wdHkoKSBwYXRoLiAgdGhlIG90aGVyIHN0dWZmIG9ubHkgbmVlZHMKICAgICB0byBiZSBpbiBvcGVuc3NoLXA7IG1hcmt1cyBvawogLSAoZGptKSBbb3BlbmJzZC1jb21wYXQvYnNkLW9wZW5wdHkuY10gUmV3b3JrIG9sZCBzc2hwdHkuYyBjb2RlIGludG8gYW4KICAgb3BlbnB0eSgpIHJlcGxhY2VtZW50CgoyMDA0MDExNAogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIEhhdmUgbW9uaXRvciBkaWUgaWYgUEFNIGF1dGhlbnRpY2F0aW9uIHRocmVhZCBleGl0cwogICB1bmV4cGVjdGVkbHkuICB3aXRoICYgb2sgZGptQAogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIFJlc2V0IHNpZ25hbCBoYW5kbGVyIGluIHB0aHJlYWRfY2FuY2VsIHRvbywgYWRkCiAgIHRlc3QgZm9yIGNhc2Ugd2hlcmUgY2xlYW51cCBoYXMgYWxyZWFkeSBydW4uCiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gQWRkIG1pbm9yIGRlYnVnZ2luZy4KCjIwMDQwMTEzCiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gUmVsb2NhdGUgc3RydWN0IHBhbV9jdHh0IGFuZCBwcm90b3R5cGVzLiAgTm8KICAgZnVuY3Rpb25hbCBjaGFuZ2VzLgoKMjAwNDAxMDgKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jIGRlZmluZXMuaF0gQnVnICM3ODM6IG1vdmUgX191bnVzZWQgdG8gZGVmaW5lcy5oIGFuZAogICBvbmx5IGRlZmluZSBpZiBub3QgYWxyZWFkeS4gIEZyb20gZGVzIGF0IGZyZWVic2Qub3JnLgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gUmVtb3ZlIGV4dHJhICh0eXBvKSBjb21tYS4KCjIwMDQwMTA1CiAtIChkdHVja2VyKSBbY29udHJpYi9zc2gtY29weS1pZF0gQnVnICM3ODE6IGV4aXQgaWYgc3NoIGZhaWxzLiAgUGF0Y2ggZnJvbQogICBjandhdHNvbiBhdCBkZWJpYW4ub3JnLgogLSAoZHR1Y2tlcikgW2FjY29uZmlnLmggY29uZmlndXJlLmFjIGluY2x1ZGVzLmggc2VydmNvbmYuYyBzZXNzaW9uLmNdCiAgIE9ubHkgZW5hYmxlIEtlcmJlcm9zR2V0QUZTVG9rZW4gaWYgSGVpbWRhbCdzIGxpYmthZnMgaXMgZm91bmQuICB3aXRoIGpha29iQAoKMjAwNDAxMDIKIC0gKGRqbSkgT1NYL0RhcndpbiBuZWVkcyBCSU5EXzhfQ09NUEFUIHRvIGJ1aWxkIGdldHJyc2V0YnluYW1lLiBSZXBvcnQgZnJvbQogICBqYWtvYkAKIC0gKGRqbSkgUmVtb3ZlIHVzZWxlc3MgRE5TIHN1cHBvcnQgY29uZmlndXJlIHN1bW1hcnkgbWVzc2FnZS4gZnJvbSBqYWtvYkAKIC0gKGRqbSkgT1NYL0RhcndpbiBwdXQgdGhlIFBBTSBoZWFkZXJzIGluIGEgZGlmZmVyZW50IHBsYWNlLCBkZXRlY3QgdGhpcy4KICAgUmVwb3J0IGZyb20gamFrb2JACgoyMDAzMTIzMQogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMi8yMiAwOToxNjo1OAogICAgIFttb2R1bGkuYyBzc2gta2V5Z2VuLjEgc3NoLWtleWdlbi5jXQogICAgIHRpZHkgdXAgbW9kdWxpIGdlbmVyYXRpb24gZGVidWdnaW5nLCBhZGQgLXYgKHZlcmJvc2UvZGVidWcpIG9wdGlvbiB0bwogICAgIHNzaC1rZXlnZW47IG9rIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTIvMjIgMjA6Mjk6NTUKICAgICBbY2lwaGVyLTNkZXMxLmNdCiAgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgpIGZvciB0aGUgZGVzIGNvbnRleHRzOyBwcnVpa3NtYUBmcmVlc3VyZi5mcgogICAtIGpha29iQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEyLzIzIDE2OjEyOjEwCiAgICAgW3NlcnZjb25mLmMgc2VydmNvbmYuaCBzZXNzaW9uLmMgc3NoZF9jb25maWddCiAgICAgaW1wbGVtZW50IEtlcmJlcm9zR2V0QUZTVG9rZW4gc2VydmVyIG9wdGlvbi4gb2sgbWFya3VzQCwgYmVja0AKICAgLSBtaWxsZXJ0QGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEyLzI5IDE2OjM5OjUwCiAgICAgW3NzaGRfY29uZmlnXQogICAgIEtlZXBBbGl2ZSBoYXMgYmVlbiBvYnNvbGV0ZWQsIHVzZSBUQ1BLZWVwQWxpdmUgaW5zdGVhZDsgbWFya3VzQCBPSwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTIvMzEgMDA6MjQ6NTAKICAgICBbYXV0aDItcGFzc3dkLmNdCiAgICAgSWdub3JlIHBhc3N3b3JkIGNoYW5nZSByZXF1ZXN0IGR1cmluZyBwYXNzd29yZCBhdXRoICh3aGljaCB3ZSBjdXJyZW50bHkKICAgICBkb24ndCBzdXBwb3J0KSBhbmQgZGlzY2FyZCBwcm9wb3NlZCBuZXcgcGFzc3dvcmQuICBjb3JyZWN0aW9ucy9vayBtYXJrdXNACiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBPbmx5IHRlc3Qgc2V0cmVzdWlkIGFuZCBzZXRyZXNnaWQgaWYgdGhleSBleGlzdC4KCjIwMDMxMjE5CiAtIChkdHVja2VyKSBbZGVmaW5lcy5oXSBCdWcgIzQ1ODogRGVmaW5lIFNJWkVfVF9NQVggYXMgVUlOVF9NQVggaWYgd2UKICAgdHlwZWRlZiBzaXplX3Qgb3Vyc2VsdmVzLgoKMjAwMzEyMTgKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIERvbid0IHVzZSBzZXRyZVt1Z11pZCBvbiBERy1VWCwgZnJvbSBUb20gT3JiYW4uCiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gRG8gUEFNIGNoYXV0aHRvayBkdXJpbmcgU1NIMiBrZXlib2FyZC1pbnRlcmFjdGl2ZQogICBhdXRoZW50aWNhdGlvbi4gIFBhcnRpYWxseSBmaXhlcyBidWcgIzQyMy4gIEZlZWRiYWNrICYgb2sgZGptQAoKMjAwMzEyMTcKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMi8wOSAxNToyODo0MwogICAgIFtzZXJ2ZXJsb29wLmNdCiAgICAgbWFrZSBDbGllbnRLZWVwQWxpdmUgd29yayBmb3Igc3NoIC1OLCB0b28gKG5vIGxvZ2luIHNoZWxsIHJlcXVlc3RlZCkuCiAgICAgMSkgc2VuZCBhIGJvZ3VzIGNoYW5uZWwgcmVxdWVzdCBpZiB3ZSBmaW5kIGEgY2hhbm5lbAogICAgIDIpIHNlbmQgYSBib2d1cyBnbG9iYWwgcmVxdWVzdCBpZiB3ZSBkb24ndCBoYXZlIGEgY2hhbm5lbAogICAgIG9rICsgdGVzdCBiZWNrQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMi8wOSAxNzoyOTowNAogICAgIFtzc2hkLmNdCiAgICAgZml4IC1vIGFuZCBIVVA7IG9rIGhlbm5pbmdACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEyLzA5IDE3OjMwOjA1CiAgICAgW3NzaC5jXQogICAgIGRvbid0IG1vZGlmeSBhcmd2IGZvciBzc2ggLW87IHNpbWlsYXIgdG8gc3NoZC5jIDEuMjgzCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEyLzA5IDIxOjUzOjM3CiAgICAgW3JlYWRjb25mLmMgcmVhZGNvbmYuaCBzY3AuMSBzZXJ2Y29uZi5jIHNlcnZjb25mLmggc2Z0cC4xIHNzaC4xXQogICAgIFtzc2hfY29uZmlnLjUgc3NoY29ubmVjdC5jIHNzaGQuYyBzc2hkX2NvbmZpZy41XQogICAgIHJlbmFtZSBrZWVwYWxpdmUgdG8gdGNwa2VlcGFsaXZlOyB0aGUgb2xkIG5hbWUgY2F1c2VzIHRvbyBtdWNoCiAgICAgY29uZnVzaW9uOyBvayBkam0sIGR0dWNrZXI7IHdpdGggaGVscCBmcm9tIGptY0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEyLzA5IDIzOjQ1OjMyCiAgICAgW2NsaWVudGxvb3AuY10KICAgICBDbGVhciBleGl0IGNvZGUgd2hlbiBzc2ggLU4gaXMgdGVybWluYXRlZCB3aXRoIGEgU0lHVEVSTS4gIG9rIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTIvMTQgMTI6Mzc6MjEKICAgICBbc3NoX2NvbmZpZy41XQogICAgIHdlIGRvbid0IHN1cHBvcnQgR1NTIEtFWDsgZnJvbSBTaW1vbiBXaWxraW5zb24KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTIvMTYgMTU6NDk6NTEKICAgICBbY2xpZW50bG9vcC5jIGNsaWVudGxvb3AuaCByZWFkY29uZi5jIHJlYWRjb25mLmggc2NwLjEgc2Z0cC4xIHNzaC4xXQogICAgIFtzc2guYyBzc2hfY29uZmlnLjVdCiAgICAgYXBwbGljYXRpb24gbGF5ZXIga2VlcCBhbGl2ZSAoU2VydmVyQWxpdmVJbnRlcnZhbCBTZXJ2ZXJBbGl2ZUNvdW50TWF4KQogICAgIGZvciBzc2goMSksIHNpbWlsYXIgdG8gdGhlIHNzaGQoOCkgb3B0aW9uOyBvayBiZWNrQDsgd2l0aCBoZWxwIGZyb20KICAgICBqbWMgYW5kIGR0dWNrZXJACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEyLzE2IDE1OjUxOjU0CiAgICAgW2RoLmNdCiAgICAgdXNlIDw9IGluc3RlYWQgb2YgPCBpbiBkaF9lc3RpbWF0ZTsgb2sgcHJvdm9zL2hzaG9leGVyOyAKICAgICBkbyBub3QgcmV0dXJuIDwgREhfR1JQX01JTgogLSAoZHR1Y2tlcikgW2FjY29uZmlnLmggY29uZmlndXJlLmFjIHVpZHN3YXAuY10gQnVnICM2NDU6IENoZWNrIGZvcgogICBzZXRyZXNbdWddaWQoKSBwcmVzZW50IGJ1dCBub3QgaW1wbGVtZW50ZWQgKGVnIHNvbWUgTGludXgvZ2xpYmMKICAgY29tYmluYXRpb25zKS4KIC0gKGJhbCkgW29wZW5ic2QtY29tcGF0L2JzZC1taXNjLmNdIHVuc2V0ICdzaWduYWwnIGRlZmluZWQgaWYgd2UgYXJlCiAgIHVzaW5nIGEgcmVhbCAnc2lnbmFsKCknIChOb3RpY2VkIGJ5IGEgTmVYVCBDb21waWxlKQoKMjAwMzEyMDkKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXR0aGlldUBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMS8yNSAyMzoxMDowOAogICAgIFtzc2gtYWRkLjFdCiAgICAgc3NoLWFkZCBkb2Vzbid0IG5lZWQgdG8gYmUgYSBkZXNjZW5kYW50IG9mIHNzaC1hZ2VudC4gT2sgbWFya3VzQCwgam1jQC4KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMjYgMjE6NDQ6MjkKICAgICBbY2lwaGVyLWFlcy5jXQogICAgIGZpeCAjaWZkZWYgYmVmb3JlICNkZWZpbmU7IG9rIG1hcmt1c0AKICAgICAoUkNTIElEIHN5bmMgb25seSwgUG9ydGFibGUgYWxyZWFkeSBoYWQgdGhpcykKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTIvMDIgMTI6MTU6MTAKICAgICBbcHJvZ3Jlc3NtZXRlci5jXQogICAgIGltcHJvdm1lbnRzIGZyb20gYW5kcmVhc0A6CiAgICAgKiBzYW5lciBzcGVlZCBlc3RpbWF0ZSBmb3IgdHJhbnNmZXJzIHRoYXQgdGFrZXMgbGVzcyB0aGFuIGEgc2Vjb25kIGJ5CiAgICAgICByb3VuZGluZyB0aGUgdGltZSB0byAxIHNlY29uZC4KICAgICAqIHdoZW4gdGhlIHRyYW5zZmVyIGlzIGZpbmlzaGVkIGNhbGN1bGF0ZSB0aGUgYWN0dWFsIHRvdGFsIHNwZWVkCiAgICAgICByYXRoZXIgdGhhbiB0aGUgY3VycmVudCBzcGVlZCB3aGljaCBpcyBnaXZlbiBkdXJpbmcgdGhlIHRyYW5zZmVyCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEyLzAyIDE3OjAxOjE1CiAgICAgW2NoYW5uZWxzLmMgc2Vzc2lvbi5jIHNzaC1hZ2VudC5jIHNzaC5oIHNzaGQuY10KICAgICB1c2UgU1NIX0xJU1RFTl9CQUNLTE9HICg9MTI4KSBpbiBsaXN0ZW4oMikuCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEyLzA3IDA2OjM0OjE4CiAgICAgW21vZHVsaS5jXQogICAgIHJlbW92ZSB1bnVzZWQgZGVidWdnaW5nICNkZWZpbmUgdGVtcGxhdGVzCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEyLzA4IDExOjAwOjQ3CiAgICAgW2tleGdleGMuY10KICAgICBwcmludCByZXF1ZXN0ZWQgZ3JvdXAgc2l6ZSBpbiBkZWJ1Zzsgb2sgZGptCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMi8wOSAxMzo1Mjo1NQogICAgIFttb2R1bGkuY10KICAgICBQcmV2ZW50IHNzaC1rZXlnZW4gLVQgZnJvbSBvdXRwdXR0aW5nIG1vZHVsaSB3aXRoIGEgZ2VuZXJhdG9yIG9mIDAsIHNpbmNlCiAgICAgdGhleSBjYW4ndCBiZSB1c2VkIGZvciBEaWZmaWUtSGVsbG1hbi4gIEFzc2lzdGFuY2UgYW5kIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtzc2gta2V5c2Nhbi5jXSBTeW5jIFJDU0lEcywgbWlzc2VkIGluIFNTSF9TU0ZETUFYIGNoYW5nZSBiZWxvdy4KCjIwMDMxMjA4CiAtICh0aW0pIFtjb25maWd1cmUuYWNdIEJ1ZyA3NzAuIEZpeCAtLXdpdGhvdXQtcnBhdGguCgoyMDAzMTEyMwogLSAoZGptKSBbY2Fub2hvc3QuY10gTW92ZSBJUHY0aW5WNiBtYXBwZWQgYWRkcmVzcyBub3JtYWxpc2F0aW9uIHRvIGl0cyBvd24KICAgZnVuY3Rpb24gYW5kIGNhbGwgaXQgdW5jb25kaXRpb25hbGx5CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMjMgMjM6MTc6MzQKICAgICBbc3NoLWtleXNjYW4uY10KICAgICBmcm9tIHBvcnRhYmxlIC0gdXNlIHN5c2NvbmYgdG8gZGV0ZWN0IGZkIGxpbWl0OyBvayBtYXJrdXNACiAgICAgKHRpZHkgZGlmZiBieSBhZGRpbmcgU1NIX1NTRkRNQVggbWFjcm8gdG8gZGVmaW5lcy5oKQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMS8yMyAyMzoxODo0NQogICAgIFtzc2gta2V5Z2VuLmNdCiAgICAgY29uc2lzdGVuY3kgUEFUSF9NQVggLT4gTUFYUEFUSExFTjsgb2sgbWFya3VzQAogICAgIChSQ1MgSUQgc3luYyBvbmx5KQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMS8yMyAyMzoyMToyMQogICAgIFtzY3AuY10KICAgICBmcm9tIHBvcnRhYmxlOiByZW5hbWUgY2xhc2hpbmcgdmFyaWFibGUgbGltaXQtPiBsaW1pdF9yYXRlOyBvayBtYXJrdXNACiAgICAgKFJDUyBJRCBzeW5jIG9ubHkpCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMS8yNCAwMDoxNjozNQogICAgIFtzc2guMSBzc2guY10KICAgICBNYWtlIHNzaCAtayBtZWFuIEdTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHM9bm8uIFN1Z2dlc3Rpb24gJiBvayBtYXJrdXNACiAtIChkam0pIEFubm90YXRlIE9wZW5CU0QtZGVyaXZlZCBmaWxlcyBpbiBvcGVuYnNkLWNvbXBhdC8gd2l0aCBvcmlnaW5hbCAKICAgc291cmNlIGZpbGUgcGF0aCAoaW4gT3BlbkJTRCB0cmVlKS4KCjIwMDMxMTIyCiAtIChkdHVja2VyKSBbY2hhbm5lbHMuY10gTWFrZSBBSVggd3JpdGUgbGltaXQgY29kZSBjbGVhcmVyLiAgU3VnZ2VzdGVkIGJ5IGRqbUAKIC0gKGR0dWNrZXIpIFthdXRoLXBhc3N3ZC5jIG9wZW5ic2QtY29tcGF0L3BvcnQtYWl4LmMgb3BlbmJzZC1jb21wYXQvcG9ydC1haXguaF0KICAgTW92ZSBBSVggc3BlY2lmaWMgcGFzc3dvcmQgYXV0aGVudGljYXRpb24gY29kZSB0byBwb3J0LWFpeC5jLCBjYWxsCiAgIGF1dGhlbnRpY2F0ZSgpIHVudGlsIHJlZW50ZXIgZmxhZyBpcyBjbGVhci4KIC0gKGR0dWNrZXIpIFthdXRoLXNpYS5jIGNvbmZpZ3VyZS5hY10gVHJ1NjQgdXBkYXRlIGZyb20gY21hZGFtcyBhdCBoaXdhYXkubmV0LgogICBVc2UgcGVybWFuZW50bHlfc2V0X3VpZCBmb3IgU0lBLCBvbmx5IGRlZmluZSBESVNBQkxFX0ZEX1BBU1NJTkcgd2hlbiBTSUEKICAgaXMgZW5hYmxlZCwgcmVseSBvbiBTSUEgdG8gY2hlY2sgZm9yIGxvY2tlZCBhY2NvdW50cyBpZiBlbmFibGVkLiAgb2sgZGptQAogLSAoZGptKSBbc2NwLmNdIFJlbmFtZSBsaW1pdGJ3IC0+IGxpbWl0X3JhdGUgdG8gbWF0Y2ggdXBzdHJlYW1lZCBwYXRjaAogLSAoZGptKSBbc2Z0cC1pbnQuY10gUmVtb3ZlIGR1cGxpY2F0ZWQgY29kZSBmcm9tIGJvZ3VzIHN5bmMKIC0gKGRqbSkgW3BhY2tldC5jXSBTaHVmZmxlICNpZmRlZiB0byByZWR1Y2UgY29uZGl0aW9uYWxseSBjb21waWxlZCBjb2RlCgoyMDAzMTEyMQogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzIwIDExOjM5OjI4CiAgICAgW3Byb2dyZXNzbWV0ZXIuY10KICAgICBmaXggcm91bmRpbmcgZXJyb3JzOyBmcm9tIGFuZHJlYXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzIxIDExOjU3OjAzCiAgICAgW2V2ZXJ5dGhpbmddCiAgICAgdW5leHBhbmQgYW5kIGRlbGV0ZSB3aGl0ZXNwYWNlIGF0IEVPTDsgb2sgbWFya3VzQAogICAgIChkb25lIGxvY2FsbHkgYW5kIFJDUyBJRHMgc3luY2VkKQoKMjAwMzExMTgKIC0gKGRqbSkgRml4IGVhcmx5IGV4aXQgZm9yIHJvb3QgYXV0aCBzdWNjZXNzIHdoZW4gVXNlUEFNPXllcyBhbmQgCiAgIFBlcm1pdFJvb3RMb2dpbj1ubwogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIENvbnZlcnQgY2hhdXRodG9rX2NvbnYgaW50byBhIGdlbmVyaWMgdHR5X2NvbnYsCiAgIGFuZCB1c2UgaXQgZm9yIGRvX3BhbV9zZXNzaW9uLiAgRml4ZXMgcHJvYmxlbXMgbGlrZSBwYW1fbW90ZCBub3QKICAgZGlzcGxheWluZyBhbnl0aGluZy4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBPbmx5IHVzZSBwYW1fcHV0ZW52IGlmIG91ciBwbGF0Zm9ybSBoYXMgaXQuIG9rIGRqbUAKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMTggMDA6NDA6MDUKICAgICBbc2VydmVybG9vcC5jXQogICAgIENvcnJlY3QgY2hlY2sgZm9yIGF1dGhjdHh0LT52YWxpZC4gIG9rIGRqbUAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMTggMTA6NTM6MDcKICAgICBbbW9uaXRvci5jXQogICAgIHVuYnJlYWsgZmFrZSBhdXRobG9vcCBmb3Igbm9uLWV4aXN0ZW50IHVzZXJzIChteSBzY3Jld3VwKS4gU3BvdHRlZCBhbmQKICAgICB0ZXN0ZWQgYnkgZHR1Y2tlckA7IG9rIG1hcmt1c0AKCjIwMDMxMTE3CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMDMgMDk6MDM6MzcKICAgICBbYXV0aC1jaGFsbC5jXQogICAgIG1ha2UgdGhpcyBhIGxpdHRsZSBtb3JlIGlkaW90LXByb29mOyBvayBtYXJrdXNACiAgICAgKGluY2x1ZGVzIHBvcnRhYmxlLXNwZWNpZmljIGNoYW5nZXMpCiAgIC0gamFrb2JAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMDMgMDk6MDk6NDEKICAgICBbc3NoY29ubmVjdC5jXQogICAgIG1vdmUgY2hhbmdlZCBrZXkgd2FybmluZyBpbnRvIHdhcm5fY2hhbmdlZF9rZXkoKS4gb2sgbWFya3VzQAogICAtIGpha29iQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzAzIDA5OjM3OjMyCiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBkbyBub3QgZnJlZSBzdGF0aWMgdHlwZSBwb2ludGVyIGluIHdhcm5fY2hhbmdlZF9rZXkoKQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMS8wNCAwODo1NDowOQogICAgIFthdXRoMS5jIGF1dGgyLmMgYXV0aDItcHVia2V5LmMgYXV0aC5oIGF1dGgta3JiNS5jIGF1dGgtcGFzc3dkLmNdCiAgICAgW2F1dGgtcmhvc3RzLmMgYXV0aC1yaC1yc2EuYyBhdXRoLXJzYS5jIG1vbml0b3IuYyBzZXJ2ZXJsb29wLmNdCiAgICAgW3Nlc3Npb24uY10KICAgICBzdGFuZGFyZGlzZSBhcmd1bWVudHMgdG8gYXV0aCBtZXRob2RzIC0gdGhleSBzaG91bGQgYWxsIHRha2UgYXV0aGN0eHQuCiAgICAgY2hlY2sgYXV0aGN0eHQtPnZhbGlkIHJhdGhlciB0aGVuIHB3ICE9IE5VTEw7IG9rIG1hcmt1c0AKICAgLSBqYWtvYkBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMS8wOCAxNjowMjo0MAogICAgIFthdXRoMS5jXQogICAgIHJlbW92ZSB1bnVzZWQgdmFyaWFibGUgKHB3KS4gb2sgZGptQAogICAgIChpZCBzeW5jIG9ubHkgLSBzdGlsbCB1c2VkIGluIHBvcnRhYmxlKQogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMS8wOCAxOToxNzoyOQogICAgIFtzZnRwLWludC5jXQogICAgIHR5cG9zIGZyb20gSm9uYXRob24gR3JheTsKICAgLSBqYWtvYkBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMS8xMCAxNjoyMzo0MQogICAgIFtidWZhdXguYyBidWZhdXguaCBjaXBoZXIuYyBjaXBoZXIuaCBob3N0ZmlsZS5jIGhvc3RmaWxlLmgga2V5LmNdCiAgICAgW2tleS5oIHNmdHAtY29tbW9uLmMgc2Z0cC1jb21tb24uaCBzZnRwLXNlcnZlci5jIHNzaGNvbm5lY3QuYyBzc2hkLmNdCiAgICAgW3NzaC1kc3MuYyBzc2gtcnNhLmMgdXVlbmNvZGUuYyB1dWVuY29kZS5oXQogICAgIGNvbnN0aWZ5LiBvayBtYXJrdXNAICYgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMTIgMTA6MTI6MTUKICAgICBbc2NwLmNdCiAgICAgV2hlbiBjYWxsZWQgd2l0aCAtcSwgcGFzcyAtcSB0byBzc2g7IHN1cHByZXNzZXMgU1NIMiBiYW5uZXIuICBvayBtYXJrdXNACiAgIC0gamFrb2JAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMTIgMTY6Mzk6NTgKICAgICBbZG5zLmMgZG5zLmggcmVhZGNvbmYuYyBzc2hfY29uZmlnLjUgc3NoY29ubmVjdC5jXQogICAgIHVwZGF0ZSBTU0hGUCB2YWxpZGF0aW9uLiBvayBtYXJrdXNACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzEyIDIwOjE0OjUxCiAgICAgW3NzaF9jb25maWcuNV0KICAgICBtYWtlIHZlcmIgYWdyZWUgd2l0aCBzdWJqZWN0LCBhbmQga2lsbCBzb21lIHdoaXRlc3BhY2U7CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzE0IDEzOjE5OjA5CiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgY2xlYW51cCBhbmQgbWlub3IgZml4ZXMgZm9yIHRoZSBjbGllbnQgY29kZTsgZnJvbSBTaW1vbiBXaWxraW5zb24KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMTcgMDk6NDU6MzkKICAgICBbbXNnLmMgbXNnLmggc3NoY29ubmVjdDIuYyBzc2gta2V5c2lnbi5jXQogICAgIHJldHVybiBlcnJvciBvbiBtc2cgc2VuZC9yZWNlaXZlIGZhaWx1cmUgKHJhdGhlciB0aGFuIGZhdGFsKTsgb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMS8xNyAxMTowNjowNwogICAgIFthdXRoMi1nc3MuYyBnc3MtZ2Vuci5jIGdzcy1zZXJ2LmMgbW9uaXRvci5jIG1vbml0b3IuaCBtb25pdG9yX3dyYXAuY10KICAgICBbbW9uaXRvcl93cmFwLmggc3NoY29ubmVjdDIuYyBzc2gtZ3NzLmhdCiAgICAgcmVwbGFjZSAiZ3NzYXBpIiB3aXRoICJnc3NhcGktd2l0aC1taWMiOyBmcm9tIFNpbW9uIFdpbGtpbnNvbjsgCiAgICAgdGVzdCArIG9rIGpha29iLgogLSAoZGptKSBCdWcgIzYzMjogRG9uJ3QgY2FsbCBwYW1fZW5kIGluZGlyZWN0bHkgZnJvbSB3aXRoaW4ga2JkLWludAogICBjb252ZXJzYXRpb24gZnVuY3Rpb24KIC0gKGRqbSkgRXhwb3J0IGVudmlyb25tZW50IHZhcmlhYmxlcyBmcm9tIGF1dGhlbnRpY2F0aW9uIHN1YnByb2Nlc3MgdG8gCiAgIHBhcmVudC4gUGFydCBvZiBCdWcgIzcxNwoKMjAwMzExMTUKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL2FnZW50LXB0cmFjZS5zaF0gVGVzdCBmb3IgR0RCIG91dHB1dCBmcm9tIFNvbGFyaXMgYW5kCiAgIEhQLVVYLCBza2lwIHRlc3Qgb24gQUlYLgoKMjAwMzExMTMKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBBcHBlbmQgbmV3bGluZXMgdG8gbGluZXMgb3V0cHV0IGJ5IHRoZQogICBwYW1fY2hhdXRodG9rX2NvbnYoKS4KIC0gKGR0dWNrZXIpIFtSRUFETUUgc3NoLWhvc3QtY29uZmlnIHNzaC11c2VyLWNvbmZpZyBNYWtlZmlsZV0gKEFsbAogICBjb250cmliL2N5Z3dpbikuICBNYWpvciB1cGRhdGUgZnJvbSB2aW5zY2hlbiBhdCByZWRoYXQuY29tLgogICAtIE1ha2VmaWxlIHByb3ZpZGVzIGEgYGN5Z3dpbi1wb3N0aW5zdGFsbCcgdGFyZ2V0IHRvIHJ1biByaWdodCBhZnRlcgogICAgIGBtYWtlIGluc3RhbGwnLgogICAtIEJldHRlciBzdXBwb3J0IGZvciBXaW5kb3dzIDIwMDMgU2VydmVyLgogICAtIFRyeSB0byBnZXQgcGVybWlzc2lvbnMgYXMgY29ycmVjdCBhcyBwb3NzaWJsZS4KICAgLSBOZXcgY29tbWFuZCBsaW5lIG9wdGlvbnMgdG8gYWxsb3cgZnVsbCBhdXRvbWF0ZWQgaG9zdCBjb25maWd1cmF0aW9uLgogICAtIENyZWF0ZSBjb25maWdzIGZyb20gc2tlbGV0b25zIGluIC9ldGMvZGVmYXVsdHMvZXRjLgogICAtIFVzZSAvYmluL2Jhc2gsIGFsbG93cyByZWFkaW5nIHVzZXIgaW5wdXQgd2l0aCByZWFkbGluZSBzdXBwb3J0LgogICAtIFJlbW92ZSByZWFsbHkgb2xkIGNvbmZpZ3MgZnJvbSAvdXNyL2xvY2FsLgogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIEFkZCBuZXdsaW5lIHRvIGFjY3VtdWxhdGVkIFBBTV9URVhUX0lORk8gYW5kCiAgIFBBTV9FUlJPUl9NU0cgbWVzc2FnZXMuCgoyMDAzMTEwNgogLSAoZGptKSBDbGFyaWZ5IFVzZVBBTSBjb25zZXF1ZW5jZXMgYSBsaXR0bGUgbW9yZQoKMjAwMzExMDMKIC0gKGR0dWNrZXIpIFtjb250cmliL2N5Z3dpbi9zc2gtaG9zdC1jb25maWddIEVuc3VyZSBlbnRyaWVzIGluIC9ldGMvc2VydmljZXMKICAgYXJlIGNyZWF0ZWQgY29ycmVjdGx5IHdpdGggQ1JMRiBsaW5lIHRlcm1pbmF0aW9ucy4gIFBhdGNoIGZyb20gdmluc2NoZW4gYXQKICAgcmVkaGF0LmNvbS4KIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMTUgMDk6NDg6NDUKICAgICBbbW9uaXRvcl93cmFwLmNdCiAgICAgY2hlY2sgcG1vbml0b3IgIT0gTlVMTAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMC8yMSAwOTo1MDowNgogICAgIFthdXRoMi1nc3MuY10KICAgICBtYWtlIHN1cmUgdGhlIGRvaWQgaXMgbGFyZ2VyIHRoYW4gMgogICAtIGF2c21AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMjYgMTY6NTc6NDMKICAgICBbc3NoY29ubmVjdDIuY10KICAgICByZW5hbWUgJ3N1cHBvcnRlZCcgc3RhdGljIHZhciBpbiB1c2VyYXV0aF9nc3NhcGkoKSB0byAnZ3NzX3N1cHBvcnRlZCcKICAgICB0byBhdm9pZCBzaGFkb3dpbmcgdGhlIGdsb2JhbCB2ZXJzaW9uLiAgbWFya3VzQCBvawogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMC8yOCAwOTowODowNgogICAgIFttaXNjLmNdCiAgICAgZXJyb3ItPmRlYnVnIGZvciBnZXRzb2Nrb3B0K1RDUF9OT0RFTEFZOyBzZXZlcmFsIHJlcXVlc3RzCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzAyIDExOjAxOjAzCiAgICAgW2F1dGgyLWdzcy5jIGNvbXBhdC5jIGNvbXBhdC5oIHNzaGNvbm5lY3QyLmNdCiAgICAgcmVtb3ZlIHN1cHBvcnQgZm9yIFNTSF9CVUdfR1NTQVBJX0JFUjsgc2ltb25Ac3h3Lm9yZy51awogLSAoZHR1Y2tlcikgW3JlZ3Jlc3MvYWdlbnQtcHRyYWNlLnNoXSBVc2UgbnVtZXJpYyB1aWQgYW5kIGdpZC4KCjIwMDMxMDIxCiAtIChkdHVja2VyKSBbSU5TVEFMTF0gU29tZSBzeXN0ZW0gY3J5cHQoKSBmdW5jdGlvbnMgc3VwcG9ydCBNRDUgcGFzc3dvcmRzCiAgIGRpcmVjdGx5LiAgTm90ZWQgYnkgRGFycmVuLk1vZmZhdCBhdCBzdW4uY29tLgogLSAoZHR1Y2tlcikgW3JlZ3Jlc3MvYWdlbnQtcHRyYWNlLnNoXSBTa2lwIGFnZW50LXRlc3QgdW5sZXNzIFNVRE8gaXMgc2V0LAogICBtYWtlIGFnZW50IHNldGdpZCBkdXJpbmcgdGVzdC4KCjIwMDMxMDE3CiAtIChkdHVja2VyKSBbSU5TVEFMTF0gTm90ZSB0aGF0IC0td2l0aC1tZDUgaXMgbm93IHJlcXVpcmVkIG9uIHBsYXRmb3JtcyB3aXRoCiAgIE1ENSBwYXNzd29yZHMgZXZlbiBpZiBQQU0gc3VwcG9ydCBpcyBlbmFibGVkLiAgRnJvbSBzdGVldiBhdCBkZXRyaXR1cy5uZXQuCgoyMDAzMTAxNQogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMC8wOCAwODoyNzozNgogICAgIFtzY3AuMSBzY3AuYyBzZnRwLXNlcnZlci44IHNmdHAuMSBzZnRwLmMgc3NoLjEgc3NoZC44XQogICAgIHNjcCBhbmQgc2Z0cDogYWRkIG9wdGlvbnMgbGlzdCBhbmQgc29ydCBvcHRpb25zLiBvcHRpb25zIGxpc3QgcmVxdWVzdGVkCiAgICAgYnkgZGVyYWFkdEAKICAgICBzc2hkOiB1c2Ugc2FtZSBmb3JtYXQgYXMgc3NoCiAgICAgc3NoOiByZW1vdmUgd3Jvbmcgb3B0aW9uIGZyb20gbGlzdAogICAgIHNmdHAtc2VydmVyOiBTdWJzeXN0ZW0gaXMgZG9jdW1lbnRlZCBpbiBzc2hfY29uZmlnKDUpLCBub3Qgc3NoZCg4KQogICAgIG9rIGRlcmFhZHRAIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMDggMTU6MjE6MjQKICAgICBbcmVhZGNvbmYuYyBzc2hfY29uZmlnLjVdCiAgICAgZGVmYXVsdCBHU1MgQVBJIHRvIG5vIGluIGNsaWVudCwgdG9vOyBvayBqYWtvYiwgZGVyYWFkdEAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMTEgMDg6MjQ6MDgKICAgICBbcmVhZGNvbmYuYyByZWFkY29uZi5oIHNzaC4xIHNzaC5jIHNzaF9jb25maWcuNV0KICAgICByZW1vdGUgeDExIGNsaWVudHMgYXJlIG5vdyB1bnRydXN0ZWQgYnkgZGVmYXVsdCwgdXNlcyB4YXV0aCg4KSB0byBnZW5lcmF0ZQogICAgIHVudHJ1c3RlZCBjb29raWVzOyBGb3J3YXJkWDExVHJ1c3RlZD15ZXMgcmVzdG9yZXMgb2xkIGJlaGF2aW91ci4KICAgICBvayBkZXJhYWR0OyBmZWVkYmFjayBhbmQgb2sgZGptL2ZyaWVzCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEwLzExIDA4OjI2OjQzCiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgc2VhcmNoIGtleXMgaW4gcmV2ZXJzZSBvcmRlcjsgZml4ZXMgIzY4NAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMC8xMSAxMTozNjoyMwogICAgIFttb25pdG9yX3dyYXAuY10KICAgICByZXR1cm4gTlVMTCBmb3IgbWlzc2luZyBiYW5uZXI7IG9rIGRqbUAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMTIgMTM6MTI6MTMKICAgICBbc3NoX2NvbmZpZy41XQogICAgIG5vdGUgdGhhdCBFbmFibGVTU0hLZXlTaWduIHNob3VsZCBiZSBpbiB0aGUgbm9uLWhvc3RzcGVjaWZpYyBzZWN0aW9uOwogICAgIHJlbW92ZSB1bm5lY2Vzc2FyeSAuUHA7CiAgICAgb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMC8xMyAwODoyMjoyNQogICAgIFtzY3AuMSBzZnRwLjFdCiAgICAgZG9uJ3QgcmVmZXIgdG8gb3B0aW9ucyByZWxhdGVkIHRvIGZvcndhcmRpbmc7IG9rIGptY0AKICAgLSBqYWtvYkBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMC8xNCAxOTo0MjoxMAogICAgIFtkbnMuYyBkbnMuaCByZWFkY29uZi5jIHNzaC1rZXlnZW4uYyBzc2hjb25uZWN0LmNdCiAgICAgaW5jbHVkZSBTU0hGUCBsb29rdXAgY29kZSAobm90IGVuYWJsZWQgYnkgZGVmYXVsdCkuIG9rIG1hcmt1c0AKICAgLSBqYWtvYkBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMC8xNCAxOTo0MzoyMwogICAgIFtSRUFETUUuZG5zXQogICAgIHVwZGF0ZQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMC8xNCAxOTo1NDozOQogICAgIFtzZXNzaW9uLmMgc3NoLWFnZW50LmNdCiAgICAgMTBYIGZvciBta2R0ZW1wOyBkam1ACiAtIChkdHVja2VyKSBbYWNjb25maWcuaCBjb25maWd1cmUuYWMgZG5zLmMgb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5hbWUuYwogICBvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5oXSBETlMgZmluZ2VycHJpbnQgc3VwcG9ydCBpcyBub3cgYWx3YXlzCiAgIGNvbXBpbGVkIGluIGJ1dCBkaXNhYmxlZCBpbiBjb25maWcuCiAtIChkdHVja2VyKSBbYXV0aC5jXSBDaGVjayBmb3IgZGlzYWJsZWQgcGFzc3dvcmQgZXhwaXJ5IG9uIEhQLVVYIFRydXN0ZWQgTW9kZS4KIC0gKHRpbSkgW3JlZ3Jlc3MvYmFubmVyLnNoXSBwb3J0YWJpbGl0eSBmaXguCgoyMDAzMTAwOQogLSAoZHR1Y2tlcikgW3NzaGRfY29uZmlnLjVdIFVzZVBBTSBkZWZhdWx0cyB0byAibm8iLiAgb2sgZGptQAoKMjAwMzEwMDgKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEwLzA3IDAxOjQ3OjI3CiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgRG9uJ3QgdXNlIGxvZ2l0IGZvciBiYW5uZXIsIHNpbmNlIGl0IHRydW5jYXRlcyB0byBNU0dCVUZTSVo7IGJ6ICM2NjggJgogICAgICM3MDcuICBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEwLzA3IDA3OjA0OjE2CiAgICAgW3NmdHAtaW50LmNdCiAgICAgc2Z0cCBxdW90aW5nIGZpeCBmcm9tIGFkbW9ydGVuIEFUIHVtaWNoLmVkdTsgb2sgbWFya3VzQAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMDcgMjE6NTg6MjgKICAgICBbc3NoY29ubmVjdDIuY10KICAgICBzZXQgcHRyIHRvIE5VTEwgYWZ0ZXIgZnJlZQogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMDcgMDE6NTI6MTMKICAgICBbcmVncmVzcy9NYWtlZmlsZSByZWdyZXNzL2Jhbm5lci5zaF0KICAgICBUZXN0IFNTSDIgYmFubmVyLiAgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMC8wNyAwNzowNDo1MgogICAgIFtyZWdyZXNzL3NmdHAtY21kcy5zaF0KICAgICBtb3JlIHNmdHAgcXVvdGluZyByZWdyZXNzIHRlc3RzOyBvayBtYXJrdXMKCjIwMDMxMDA3CiAtIChkam0pIERlbGV0ZSBhdXRvbTR0ZS5jYWNoZSBhZnRlciBhdXRvcmVjb25mCiAtIChkdHVja2VyKSBbYXV0aC1wYW0uYyBhdXRoLXBhbS5oIHNlc3Npb24uY10gTWFrZSBQQU0gdXNlIHRoZSBuZXcgc3RhdGljCiAgIGNsZWFudXAgZnVuY3Rpb25zLiAgV2l0aCAmIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtjb250cmliL3JlZGhhdC9vcGVuc3NoLnNwZWNdIEJ1ZyAjNzE0OiBOb3cgdGhhdCBVc2VQQU0gaXMgYQogICBydW4tdGltZSBzd2l0Y2gsIGFsd2F5cyBidWlsZCAtLXdpdGgtbWQ1LXBhc3N3b3Jkcy4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgb3BlbmJzZC1jb21wYXQvTWFrZWZpbGUuaW4gb3BlbmJzZC1jb21wYXQvc3RydG91bC5jXQogICBCdWcgIzY3MDogYWRkIHN0cnRvdWwoKSB0byBvcGVuYnNkLWNvbXBhdCBmb3IgcGxhdGZvcm1zIGxhY2tpbmcgaXQuICBvayBkam1ACiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzcxNTogU2V0IEJST0tFTl9TRVRSRVVJRCBhbmQgQlJPS0VOX1NFVFJFR0lECiAgIG9uIFJlbGlhbnQgVW5peC4gIFBhdGNoIGZyb20gUm9iZXJ0LkRhaGxlbSBhdCBzaWVtZW5zLmNvbS4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjNzEwOiBDaGVjayBmb3IgZGxzeW0oKSBpbiBsaWJkbCBvbgogICBSZWxpYW50IFVuaXguICBCYXNlZCBvbiBwYXRjaCBmcm9tIFJvYmVydC5EYWhsZW0gYXQgc2llbWVucy5jb20uCgoyMDAzMTAwMwogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMC8wMiAxMDo0MTo1OQogICAgIFtzc2hkLmNdCiAgICAgcHJpbnQgb3BlbnNzbCB2ZXJzaW9uLCB0b28sIHNldmVyYWwgcmVxdWVzdHM7IG9rIGhlbm5pbmcvZGptLgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMC8wMiAwODoyNjo1MwogICAgIFtzc2gtZ3NzLmhdCiAgICAgbWlzc2luZyAkT3BlbkJTRDo7IGR0dWNrZXIKIC0gKHRpbSkgW2NvbnRyaWIvY2FsZGVyYS9vcGVuc3NoLnNwZWNdIFJlbW92ZSBvYnNvbGV0ZSAtLXdpdGgtaXB2NC1kZWZhdWx0CiAgIG9wdGlvbi4KCjIwMDMxMDAyCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA5LzIzIDIwOjE3OjExCiAgICAgW01ha2VmaWxlLmluIGF1dGgxLmMgYXV0aDIuYyBhdXRoLmMgYXV0aC5oIGF1dGgta3JiNS5jIGNhbm9ob3N0LmMKICAgICBjbGVhbnVwLmMgY2xpZW50bG9vcC5jIGZhdGFsLmMgZ3NzLXNlcnYuYyBsb2cuYyBsb2cuaCBtb25pdG9yLmMgbW9uaXRvci5oCiAgICAgbW9uaXRvcl93cmFwLmMgbW9uaXRvcl93cmFwLmggcGFja2V0LmMgc2VydmVybG9vcC5jIHNlc3Npb24uYyBzZXNzaW9uLmgKICAgICBzc2gtYWdlbnQuYyBzc2hkLmNdCiAgICAgcmVwbGFjZSBmYXRhbF9jbGVhbnVwKCkgYW5kIGxpbmtlZCBsaXN0IG9mIGZhdGFsIGNhbGxiYWNrcyB3aXRoIHN0YXRpYwogICAgIGNsZWFudXBfZXhpdCgpIGZ1bmN0aW9uLiAgcmUtcmVmaW5lIGNsZWFudXBfZXhpdCgpIHdoZXJlIGFwcHJvcHJpYXRlLAogICAgIGFsbG9jYXRlIHNzaGQncyBhdXRoY3R4dCBlYXJ5IHRvIGFsbG93IHNpbXBsZXIgY2xlYW51cCBpbiBzc2hkLgogICAgIHRlc3RlZCBieSBtYW55LCBvayBkZXJhYWR0QAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8yMyAyMDoxODo1MgogICAgIFtwcm9ncmVzc21ldGVyLmNdCiAgICAgZG9uJ3QgcHJpbnQgdHJhaWxpbmcgXDA7IGJ1ZyAjNzA5OyBSb2JlcnQuRGFobGVtQHNpZW1lbnMuY29tCiAgICAgb2sgbWlsbGVydC9kZXJhYWR0QAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8yMyAyMDo0MToxMQogICAgIFtjaGFubmVscy5jIGNoYW5uZWxzLmggY2xpZW50bG9vcC5jXQogICAgIG1vdmUgY2xpZW50IG9ubHkgYWdlbnQgY29kZSB0byBjbGllbnRsb29wLmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDkvMjYgMDg6MTk6MjkKICAgICBbc3NoZC5jXQogICAgIG5vIG5lZWQgdG8gc2V0IHRoZSBsaXN0ZW4gc29ja2V0cyB0byBub24tYmxvY2s7IG9rIGRlcmFhZHRACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA5LzI5IDExOjQwOjUxCiAgICAgW3NzaC4xXQogICAgIC0gYWRkIGxpc3Qgb2Ygb3B0aW9ucyB0byAtbyBhbmQgLlhyIHNzaF9jb25maWcoNSkKICAgICAtIHNvbWUgb3RoZXIgY2xlYW51cAogICAgIHJlcXVlc3RlZCBieSBkZXJhYWR0QDsKICAgICBvayBkZXJhYWR0QCBtYXJrdXNACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA5LzI5IDIwOjE5OjU3CiAgICAgW3NlcnZjb25mLmMgc3NoZF9jb25maWddCiAgICAgR1NTQVBJQ2xlYW51cENyZWRzIC0+IEdTU0FQSUNsZWFudXBDcmVkZW50aWFscwogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gRG9uJ3Qgc2V0IERJU0FCTEVfU0hBRE9XIHdoZW4gY29uZmlndXJpbmcKICAgLS13aXRoLXBhbS4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtzc2gtZ3NzLmhdIFByb3RvdHlwZSBjaGFuZ2UgbWlzc2VkIGluIHN5bmMuCiAtIChkdHVja2VyKSBbc2Vzc2lvbi5jXSBGaXggYnVzIGVycm9ycyBvbiBzb21lIDY0LWJpdCBTb2xhcmlzIGNvbmZpZ3VyYXRpb25zLgogICBCYXNlZCBvbiBwYXRjaGVzIGJ5IE1hdHRoaWFzIEtvZXBwZSBhbmQgVGhvbWFzIEJhZGVuLiAgb2sgZGptQAoKMjAwMzA5MzAKIC0gKGJhbCkgRml4IGlzc3VlcyBpbiBvcGVuYnNkLWNvbXBhdC9yZWFscGF0aC5jCgoyMDAzMDkyNQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC94Y3J5cHQuY10gQnVnICM2MzM6IFJlbW92ZQogICBESVNBQkxFX1NIQURPVyBmb3IgSFAtVVgsIHVzZSBnZXRzcG5hbSBpbnN0ZWFkIG9mIGdldHBycHduYW0uICBQYXRjaCBmcm9tCiAgIG1pY2hhZWxfc3RlZmZlbnMgYXQgaHAuY29tLCBvayBkam1ACiAtICh0aW0pIFtzc2hkX2NvbmZpZ10gVXNlUEFNIGRlZmF1bHRzIHRvIG5vLgoKMjAwMzA5MjQKIC0gKGRqbSkgVXBkYXRlIHZlcnNpb24uaCBhbmQgc3BlYyBmaWxlcyBmb3IgSEVBRAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gSVJJWDUgbmVlZHMgdGhlIHNhbWUgc2V0cmVbdWddaWQgZGVmaW5lcyBhcyBJUklYNi4KCjIwMDMwOTIzCiAtIChkdHVja2VyKSBbTWFrZWZpbGUuaW5dIEJ1ZyAjNjQ0OiBGaXggIm1ha2UgY2xlYW4iIGZvciBvdXQtb2YtdHJlZQogICBidWlsZHMuICBQb3J0YWJpbGl0eSBjb3JyZWN0aW9ucyBmcm9tIHRpbUAuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzY2NTogdWlkIHN3YXBwaW5nIGlzc3VlcyBvbiBNYWMgT1MgWC4KICAgUGF0Y2ggZnJvbSBtYXggYXQgcXVlbmRpLmRlLgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICM2NTc6IHVpZCBzd2FwcGluZyBpc3N1ZXMgb24gQlNEaS4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjNjUzOiB1aWQgc3dhcHBpbmcgaXNzdWVzIG9uIFRydTY0LgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICM2OTM6IHVpZCBzd2FwcGluZyBpc3N1ZXMgb24gTkNSIE1QLVJBUy4KICAgUGF0Y2ggZnJvbSBkYXZpZC5oYXVnaHRvbiBhdCBuY3IuY29tCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzY1OTogdWlkIHN3YXBwaW5nIGlzc3VlcyBvbiBJUklYIDYuCiAgIFBhcnQgb2YgcGF0Y2ggc3VwcGxpZWQgYnkgYnVnemlsbGEtb3BlbnNzaCBhdCB0aGV3cml0dGVud29yZC5jb20KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgb3BlbmJzZC1jb21wYXQvZmFrZS1yZmMyNTUzLmMKICAgb3BlbmJzZC1jb21wYXQvZmFrZS1yZmMyNTUzLmhdIEJ1ZyAjNjU5OiBUZXN0IGZvciBhbmQgaGFuZGxlIHN5c3RlbXMgd2l0aAogICB3aGVyZSBnYWlfc3RyZXJyb3IgaXMgZGVmaW5lZCBhcyAiY29uc3QgY2hhciAqIi4gIFBhcnQgb2YgcGF0Y2ggc3VwcGxpZWQKICAgYnkgYnVnemlsbGEtb3BlbnNzaCBhdCB0aGV3cml0dGVud29yZC5jb20KIC0gKGR0dWNrZXIpIFtjb250cmliL2N5Z3dpbi9SRUFETUUgY29udHJpYi9jeWd3aW4vc3NoLWhvc3QtY29uZmlnXSBVcGRhdGUKICAgc3NoLWhvc3QtY29uZmlnIHRvIG1hdGNoIGN1cnJlbnQgZGVmYXVsdHMsIGJ1bXAgUkVBRE1FIHZlcnNpb24uICBQYXRjaCBmcm9tCiAgIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20uCiAtIChkdHVja2VyKSBbdWlkc3dhcC5jXSBEb24ndCB0ZXN0IHJlc3RvcmF0aW9uIG9mIHVpZCBvbiBDeWd3aW4gc2luY2UgdGhlCiAgIE9TIGRvZXMgbm90IHN1cHBvcnQgcGVybWFuZW50bHkgZHJvcHBpbmcgcHJpdmlsZWdlcy4gIFBhdGNoIGZyb20KICAgdmluc2NoZW4gYXQgcmVkaGF0LmNvbS4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5jXSBVc2UgY29ycmVjdCBpbmNsdWRlIGZvciB4bWFsbG9jLmgsCiAgIGFkZCBjYW5vaG9zdC5oIHRvIHN0b3Agd2FybmluZy4gIEJhc2VkIG9uIHBhdGNoIGZyb20gb3BlbnNzaC11bml4LWRldiBhdAogICB0aGV3cml0dGVud29yZC5jb20KIC0gKGR0dWNrZXIpIFtJTlNUQUxMXSBCdWcgIzY4NjogRG9jdW1lbnQgcmVxdWlyZW1lbnQgZm9yIHpsaWIgMS4xLjQgb3IKICAgaGlnaGVyLgogLSAodGltKSBGaXggdHlwby4gcy9TRVRFSVVEX0JSRUFLU19TRVRVSUQvU0VURVVJRF9CUkVBS1NfU0VUVUlELwogLSAodGltKSBbY29uZmlndXJlLmFjXSBCdWcgNjY1OiBtb3ZlIDMgbmV3IEFDX0RFRklORVMgb3V0c2lkZSBvZiBBQ19UUllfUlVOLgogICBSZXBvcnQgYnkgZGlzdGxlciBBVCBnb2xlbSBwaCB1dGV4YXMgZWR1LgogLSAoZHR1Y2tlcikgW2NvbnRyaWIvYWl4L3BhbS5jb25mXSBJbmNsdWRlIGV4YW1wbGUgcGFtLmNvbmYgZm9yIEFJWCBmcm9tCiAgIGFydGljbGUgYnkgZ2VudHkgYXQgYXVzdGluLmlibS5jb20sIGluY2x1ZGVkIHdpdGggdGhlIGF1dGhvcidzIHBlcm1pc3Npb24uCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA5LzE4IDA3OjUyOjU0CiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBtaXNzaW5nIHt9OyBidWcgIzY1NjsgamNsb25ndWV0IGF0IGZyZWUuZnIKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDkvMTggMDc6NTQ6NDgKICAgICBbYnVmZmVyLmNdCiAgICAgcHJvdGVjdCBhZ2FpbnN0IGRvdWJsZSBmcmVlOyAjNjYwOyAgemFyZG96IGF0IHVzZXJzLnNmLm5ldAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8xOCAwNzo1NjowNQogICAgIFthdXRoZmlsZS5jXQogICAgIG1pc3NpbmcgIGJ1ZmZlcl9mcmVlKCZlbmNyeXB0ZWQpOyAjNjYyOyB6YXJkb3ogYXQgdXNlcnMuc2YubmV0CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA5LzE4IDA4OjQ5OjQ1CiAgICAgW2RlYXR0YWNrLmMgbWlzYy5jIHNlc3Npb24uYyBzc2gtYWdlbnQuY10KICAgICBtb3JlIGJ1ZmZlciBhbGxvY2F0aW9uIGZpeGVzOyBmcm9tIFNvbGFyIERlc2lnbmVyOyBDQU4tMjAwMy0wNjgyOwogICAgIG9rIG1pbGxlcnRACiAgIC0gbWlvZEBjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8xOCAxMzowMjoyMQogICAgIFthdXRoZmQuYyBidWZhdXguYyBkaC5jIG1hYy5jIHNzaC1rZXlnZW4uY10KICAgICBBIGZldyBzaWduZWRuZXNzIGZpeGVzIGZvciBoYXJtbGVzcyBzaXR1YXRpb25zOyBtYXJrdXNAIG9rCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA5LzE5IDA5OjAyOjAyCiAgICAgW3BhY2tldC5jXQogICAgIGJ1ZmZlcl9kdW1wIG9ubHkgaWYgUEFDS0VUX0RFQlVHIGlzIGRlZmluZWQ7IEplZGkvU2VjdG9yIE9uZTsgcHIgMzQ3MQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8xOSAwOTowMzowMAogICAgIFtidWZmZXIuY10KICAgICBzaWduIGZpeCBpbiBidWZmZXJfZHVtcDsgSmVkaS9TZWN0b3IgT25lOyBwciAzNDczCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA5LzE5IDExOjI5OjQwCiAgICAgW3NzaC1hZ2VudC5jXQogICAgIHByb3ZpZGUgYSBzc2gtYWdlbnQgc3BlY2lmaWMgZmF0YWwoKSBmdW5jdGlvbjsgb2sgZGVyYWFkdAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8xOSAxMTozMDozOQogICAgIFtzc2gta2V5c2Nhbi5jXQogICAgIGF2b2lkIGZhdGFsX2NsZWFudXAsIGp1c3QgY2FsbCBleGl0KCk7IG9rIGRlcmFhZHQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDkvMTkgMTE6MzE6MzMKICAgICBbY2hhbm5lbHMuY10KICAgICBkbyBub3QgY2FsbCBjaGFubmVsX2ZyZWVfYWxsIG9uIGZhdGFsOyBvayBkZXJhYWR0CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA5LzE5IDExOjMzOjA5CiAgICAgW3BhY2tldC5jIHNzaGQuY10KICAgICBkbyBub3QgY2FsbCBwYWNrZXRfY2xvc2Ugb24gZmF0YWw7IG9rIGRlcmFhZHQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDkvMTkgMTc6NDA6MjAKICAgICBbc2NwLmNdCiAgICAgZXJyb3IgaGFuZGxpbmcgZm9yIHJlbW90ZS1yZW1vdGUgY29weTsgIzYzODsgcmVwb3J0IEhhcmFsZCBLb2VuaWc7CiAgICAgb2sgbWlsbGVydCwgZmdzLCBoZW5uaW5nLCBkZXJhYWR0CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA5LzE5IDE3OjQzOjM1CiAgICAgW2NsaWVudGxvb3AuYyBzc2h0dHkuYyBzc2h0dHkuaF0KICAgICByZW1vdmUgZmF0YWwgY2FsbGJhY2tzIGZyb20gY2xpZW50IGNvZGU7IG9rIGRlcmFhZHQKIC0gKGJhbCkgImV4dHJhdGlvbiIgLT4gImV4dHJhY3Rpb24iIGluIHNzaC1yYW5kLWhlbHBlci5jOyByZXBvdGVkIGJ5IGpvaG4KCW9uICN1bml4aGVscEBlZm5ldAogLSAodGltKSBbY29uZmlndXJlLmFjXSBhZGQgLS1kaXNhYmxlLWV0Yy1kZWZhdWx0LWxvZ2luIG9wdGlvbi4gb2sgZGptCiAtIChkam0pIFN5bmMgd2l0aCBWXzNfNyBicmFuY2g6CiAgIC0gKGRqbSkgRml4IFNTSDEgY2hhbGxlbmdlIGtsdWRnZQogICAtIChkam0pIEJ1ZyAjNjcxOiBGaXggYnVpbGRzIG9uIE9wZW5CU0QKICAgLSAoZGptKSBCdWcgIzY3NjogRml4IFBBTSBzdGFjayBjb3JydXB0aW9uCiAgIC0gKGRqbSkgRml4IGJhZCBmcmVlKCkgaW4gUEFNIGNvZGUKICAgLSAoZGptKSBEb24ndCBjYWxsIHBhbV9lbmQgYmVmb3JlIHBhbV9pbml0CiAgIC0gKGRqbSkgRW5hYmxlIGJ1aWxkIHdpdGggb2xkIE9wZW5TU0wgYWdhaW4KICAgLSAoZGptKSBUcmltIGRlcHJlY2F0ZWQgb3B0aW9ucyBmcm9tIElOU1RBTEwuIE1lbnRpb24gVXNlUEFNCiAgIC0gKGRqbSkgRml4IHF1b3RlIGhhbmRsaW5nIGluIHNmdHA7IFBhdGNoIGZyb20gYWRtb3J0ZW4gQVQgdW1pY2guZWR1CgokSWQ6IENoYW5nZUxvZyx2IDEuNDMxMyAyMDA2LzA0LzIzIDAyOjA4OjU5IGRqbSBFeHAgJAo=