MjAwMjA3MjEKIC0gKHN0ZXZlc2spIFthdXRoLXBhbS5jXSBtZXJnZSBjb3NtZXRpYyBjaGFuZ2VzIGZyb20gc29sYXIncwogICBvcGVuc3NoLTMuNHAxLW93bC1wYXNzd29yZC1jaGFuZ2luZy5kaWZmCiAtIChzdGV2ZXNrKSBbYXV0aC1wYW0uY10gbWVyZ2UgcmVzdCBvZiBzb2xhcidzIFBBTSBwYXRjaDsKICAgUEFNX05FV19BVVRIVE9LX1JFUUQgcmVtYWlucyBpbiAjaWYgMCBmb3Igbm93LgogLSAoc3RldmVzaykgW2F1dGgtcGFtLmNdIGNhc3QgdG8gYXZvaWQgaW5pdGlhbGl6YXRpb24gdHlwZSBtaXNtYXRjaAogICB3YXJuaW5nIG9uIHBhbV9jb252IHN0cnVjdCBjb252ZXJzYXRpb24gZnVuY3Rpb24uCiAtIChzdGV2ZXNrKSBbYXV0aC1wYW0uaF0gbGljZW5zZQogLSAoc3RldmVzaykgW2F1dGgtcGFtLmhdIHVubmVlZGVkIGluY2x1ZGUKIC0gKHN0ZXZlc2spIFthdXRoLXBhbS5bY2hdIHNzaC5oXSBtb3ZlIFNTSERfUEFNX1NFUlZJQ0UgdG8gYXV0aC1wYW0uaAoKMjAwMjA3MjAKIC0gKHN0ZXZlc2spIFtzc2gta2V5Z2VuLmNdIGJ1ZyAjMjMxOiBhbHdheXMgaW5pdC9zZWVkX3JuZygpLgoKMjAwMjA3MTkKIC0gKHRpbSkgW2NvbnRyaWIvc29sYXJpcy9idWlsZHBrZy5zaF0gY3JlYXRlIHByaXZzZXAgdXNlci9ncm91cCBpZiBuZWVkZWQuCiAgIFBhdGNoIGJ5IGR0dWNrZXJAemlwLmNvbS5hdQogLSAodGltKSBbY29uZmlndXJlLmFjXSAgdGVzdCBmb3IgbGlieG5ldCBvbiBIUC4gUGF0Y2ggYnkgZHR1Y2tlckB6aXAuY29tLmF1CgoyMDAyMDcxOAogLSAodGltKSBbZGVmaW5lcy5oXSBCdWcgMzEzIHBhdGNoIGJ5IGRpcmsubWV5ZXJAZGlub2V4LnN1Yi5vcmcKIC0gKHRpbSkgW21vbml0b3JfbW0uY10gYWRkIG1pc3NpbmcgZGVjbGFyYXRpb24gZm9yIHhtbWFwKCkuIFJlcG9ydGVkCiAgIGJ5IGF5YW11cmFAYXlhbXVyYS5vcmcKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gQnVnIDI2NyByZXdvcmsgaW50NjRfdCB0ZXN0LgogLSAodGltKSBbaW5jbHVkZXMuaF0gQnVnIDI2NyBhZGQgc3RkaW50LmgKCjIwMDIwNzE3CiAtIChiYWwpIGFpeGJmZiBwYWNrYWdlIHVwZGF0ZWQgYnkgZHR1Y2tlckB6aXAuY29tLmF1CiAtICh0aW0pIFtjb25maWd1cmUuYWNdIGNoYW5nZSBob3cgd2UgZG8gcGF0aHMgaW4gQUNfUEFUSF9QUk9HUyB0ZXN0cwogICBmb3IgYXV0b2NvbmYgMi41My4gQmFzZWQgb24gYSBwYXRjaCBieSBqcmpAcHVyZHVlLmVkdQoKMjAwMjA3MTYKIC0gKHRpbSkgW2NvbnRyaWIvc29sYXJpcy9vcGVuc3NoZC5pbl0gT25seSBraWxsIHNzaGQgaWYgLnBpZCBmaWxlIGZvdW5kCgoyMDAyMDcxNQogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gaXRvanVuQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA3LzEyIDEzOjI5OjA5CiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBwcmludCBjb25uZWN0IGZhaWx1cmUgZHVyaW5nIGRlYnVnZ2luZyBtb2RlLgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNy8xMiAxNTo1MDoxNwogICAgIFtjaXBoZXIuY10KICAgICBFVlBfQ0lQSF9DVVNUT01fSVYgZm9yIG91ciBvd24gcmlqbmRhZWwKIC0gKGJhbCkgUmVtb3ZlIHVudXNlZCB0dHkgZGVmaW5lZCBpbiBkb19zZXR1c2VyY29udGV4dCgpIHBvaW50ZWQgb3V0IGJ5CiAgIGR0dWNrZXJAemlwLmNvbS5hdSBwbHVzIGEgYSBtb3JlIEtORiBzaW5jZSBJIGFtIG5lYXIgaXQuCiAtIChiYWwpIFByaXZzZXAgdXNlciBjcmVhdGlvbiBzdXBwb3J0IGluIFNvbGFyaXMgYnVpbGRwa2cuc2ggYnkgCiAgIGR0dWNrZXJAemlwLmNvbS5hdQoKMjAwMjA3MTQKIC0gKHRpbSkgW01ha2VmaWxlLmluXSByZXBsYWNlICJpZCBzc2hkIiB3aXRoICJzc2hkIC10IgogLSAoYmFsL3RpbSkgW2FjY29uZmlnLmggY29uZmlndXJlLmFjIG1vbml0b3JfbW0uYyBzZXJ2Y29uZi5jCiAgIG9wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluXSBzdXBwb3J0IGNvbXByZXNzaW9uIG9uIHBsYXRmb3JtcyB0aGF0CiAgIGhhdmUgbm8vYnJva2VuIE1BUF9BTk9OLiBNb3ZlZCBjb2RlIHRvIG9wZW5ic2QtY29tcGF0L3htbWFwLmMKICAgQmFzZWQgb24gcGF0Y2ggZnJvbSBuYWxpbkByZWRoYXQuY29tIG9mIGNvZGUgZXh0cmFjdGVkIGZyb20gT3dsJ3MgcGFja2FnZQogLSAodGltKSBbc3NoX3BybmdfY21kcy5pbl0gQnVnIDMyMyBhcnAgLW4gZmxhZyBkb2Vzbid0IGV4aXN0IHVuZGVyIFNvbGFyaXMuCiAgIHJlcG9ydCBieSBjaHJpc0BieS1kZXNpZ24ubmV0CiAtICh0aW0pIFtsb2dpbnJlYy5jXSBCdWcgMzQ3OiBGaXggdHlwbyAoV1RNUFhfRklMRSkgcmVwb3J0IGJ5IHJvZG5leUBib25kLm5ldAogLSAodGltKSBbbG9naW5yZWMuY10gQnVnIDM0ODogYWRkIG1pc3NpbmcgZm91bmQgPSAxOyB0byB3dG1weF9pc2xvZ2luKCkKICAgcmVwb3J0IGJ5IHJvZG5leUBib25kLm5ldAoKMjAwMjA3MTIKIC0gKHRpbSkgW01ha2VmaWxlLmluXSBxdWlldCBkb3duIGluc3RhbGwtZmlsZXM6IGFuZCBjaGVjay11c2VyOgogLSAodGltKSBbY29uZmlndXJlLmFjXSByZW1vdmUgdW51c2VkIGZpbGVwcml2IGxpbmUKCjIwMDIwNzEwCiAtICh0aW0pIFtjb250cmliL2N5Z3dpbi9zc2gtaG9zdC1jb25maWddIGV4cGxpY2l0ZWx5IHNldHMgdGhlIHBlcm1pc3Npb25zCiAgIG9uIC92YXIvZW1wdHkgdG8gNzU1IFBhdGNoIGJ5IHZpbnNjaGVuQHJlZGhhdC5jb20KIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIGl0b2p1bkBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNy8wOSAxMTo1Njo1MAogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgc2lsZW50bHkgdHJ5IG5leHQgYWRkcmVzcyBvbiBjb25uZWN0KDIpLiAgbWFya3VzIG9rCiAgIC0gaXRvanVuQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA3LzA5IDExOjU2OjI3CiAgICAgW2Nhbm9ob3N0LmNdCiAgICAgc3VwcHJlc3MgbG9nIG9uIHJldmVyc2UgbG9va3VwIGZhaWxpdXJlLCBhcyB0aGVyZSdzIG5vIHJlYWwgdmFsdWUgaW4KICAgICBkb2luZyBzby4KICAgICBtYXJrdXMgb2sKICAgLSBpdG9qdW5AY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDcvMDkgMTI6MDQ6MDIKICAgICBbc3NoY29ubmVjdC5jXQogICAgIGVkIHN0YXRpYyBmdW5jdGlvbiAobGVzcyB3YXJuaW5ncykKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA3LzA5IDE3OjQ2OjI1CiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgY2xhcmlmeSBubyBwcmVmZXJlbmNlIG9yZGVyaW5nIGluIHByb3RvY29sIGxpc3Q7IG9rIG1hcmt1c0AKICAgLSBpdG9qdW5AY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDcvMTAgMTA6Mjg6MTUKICAgICBbc3NoY29ubmVjdC5jXQogICAgIGJhcmsgaWYgYWxsIGNvbm5lY3Rpb24gYXR0ZW1wdCBmYWlscy4KICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA3LzEwIDE3OjUzOjU0CiAgICAgW3Jpam5kYWVsLmNdCiAgICAgdXNlIHJpZ2h0IHNpemVvZiBpbiBtZW1jcHk7IG1hcmt1cyBvawoKMjAwMjA3MDkKIC0gKGJhbCkgTk9fSVBQT1JUX1JFU0VSVkVEX0NPTkNFUFQgdXNlZCBpbnN0ZWFkIG9mIENZR1dJTiBzbyBvdGhlciBwbGF0Zm9ybXMKICAgbGFja2luZyB0aGF0IGNvbmNlcHQgY2FuIHNoYXJlIGl0LiBQYXRjaCBieSB2aW5zY2hlbkByZWRoYXQuY29tCgoyMDAyMDcwOAogLSAodGltKSBbb3BlbnNzaC9jb250cmliL3NvbGFyaXMvYnVpbGRwa2cuc2hdIGFkZCBQS0dfSU5TVEFMTF9ST09UIHRvCiAgIHdvcmsgaW4gYSBqdW1wc3RhcnQgZW52aXJvbm1lbnQuIHBhdGNoIGJ5IGticmludEBydWZ1cy5uZXQKIC0gKHRpbSkgW01ha2VmaWxlLmluXSB3b3JrYXJvdW5kIGZvciBicm9rZW4gcGFrYWRkIG9uIHNvbWUgc3lzdGVtcy4KIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gZml4IGxpYmM4OSB1dGltZXMgdGVzdC4gTWVudGlvbiBkZWZhdWx0IHBhdGggZm9yCiAgIC0td2l0aC1wcml2c2VwLXBhdGg9CgoyMDAyMDcwNwogLSAodGltKSBbTWFrZWZpbGUuaW5dIHVzZSB1bWFzayBpbnN0ZWFkIG9mIGNobW9kIG9uICQoUFJJVlNFUF9QQVRIKQogLSAodGltKSBbYWNjb25maWcuaCBjb25maWd1cmUuYWMgc3NoZC5jXQogICBzL0JST0tFTl9GRF9QQVNTSU5HL0RJU0FCTEVfRkRfUEFTU0lORy8KIC0gKHRpbSkgW2NvbnRyaWIvY3lnd2luL3NzaC1ob3N0LWNvbmZpZ10gc3NoZCBhY2NvdW50IGNyZWF0aW9uIGZpeGVzCiAgIHBhdGNoIGZyb20gdmluc2NoZW5AcmVkaGF0LmNvbQogLSAoYmFsKSBbcmVhbHBhdGguY10gVXBkYXRlZCB3aXRoIE9wZW5CU0QgdHJlZS4KIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDcvMDQgMDQ6MTU6MzMKICAgICBba2V5LmMgbW9uaXRvcl93cmFwLmMgc2Z0cC1nbG9iLmMgc3NoLWRzcy5jIHNzaC1yc2EuY10KICAgICBwYXRjaCBtZW1vcnkgbGVha3M7IGdyZW5kZWxAemVpdGJvbWJlLm9yZwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDcvMDQgMDg6MTI6MTUKICAgICBbY2hhbm5lbHMuYyBwYWNrZXQuY10KICAgICBibGFoIGJsYWggbWlub3Igbm90aGluZyBhcyBpIHJlYWQgYW5kIHJlLXJlYWQgYW5kIHJlLXJlYWQuLi4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDcvMDQgMTA6NDE6NDcKICAgICBba2V5LmMgbW9uaXRvcl93cmFwLmMgc3NoLWRzcy5jIHNzaC1yc2EuY10KICAgICBkb24ndCBhbGxvY2F0ZSwgY29weSwgYW5kIGRpc2NhcmQgaWYgdGhlcmUgaXMgbm90IGludGVyZXN0ZWQgaW4gdGhlIGRhdGE7IAogICAgIG9rIGRlcmFhZHRACiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNy8wNiAwMTowMDo0OQogICAgIFtsb2cuY10KICAgICBLTkYKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA3LzA2IDAxOjAxOjI2CiAgICAgW3NzaC1rZXlzY2FuLmNdCiAgICAgS05GLCByZWFsbG9jIGZpeCwgYW5kIGNsZWFuIHVzYWdlCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNy8wNiAxNzo0Nzo1OAogICAgIFtzc2gta2V5c2Nhbi5jXQogICAgIHVudXNlZCB2YXJpYWJsZQogLSAoYmFsKSBNaW5vciBLTkYgb24gc3NoLWtleXNjYW4uYwoKMjAwMjA3MDUKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gQUlYIDQuMi4xIGhhcyBhdXRoZW50aWNhdGUoKSBpbiBsaWJzLgogICBSZXBvcnRlZCBieSBEYXJyZW4gVHVja2VyIDxkdHVja2VyQHppcC5jb20uYXU+CiAtICh0aW0pIFtjb250cmliL2N5Z3dpbi9zc2gtaG9zdC1jb25maWddIGRvdWJsZSBzbGFzaCBjb3JyY3Rpb24KICAgZnJvbSB2aW5zY2hlbkByZWRoYXQuY29tCgoyMDAyMDcwNAogLSAoYmFsKSBMaW1pdCBkYXRhIHRvIFRUWSBmb3IgQUlYIG9ubHkgKE5ld2VyIHZlcnNpb25zIGNhbid0IGhhbmRsZSB0aGUKICAgZmFzdGVyIGRhdGEgcmF0ZSkgIEJ1ZyAjMTI0CiAtIChiYWwpIGdsb2IuYyBkZWZpbmVzIFRJTERFIGFuZCBBSVggYWxzbyBkZWZpbmVzIGl0LiAgI3VuZGVmIGl0IGZpcnN0LgogICBidWcgIzI2NQogLSAoYmFsKSBPbmUgdG9vIG1hbnkgbnVsbHMgaW4gcG9ydHMtYWl4LmMKIAoyMDAyMDcwMwogLSAoYmFsKSBVcGRhdGVkIGNvbnRyaWIvY3lnd2luLyAgcGF0Y2ggYnkgdmluc2NoZW5AcmVkaGF0LmNvbSAKIC0gKGJhbCkgbWlub3IgY29ycmVjdGlvbiB0byB1dGltZXMoKSByZXBsYWNlbWVudC4gIFBhdGNoIGJ5CiAgIG9ub2VAc20uc29ueS5jby5qcAogLSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI3IDA4OjQ5OjQ0CiAgICAgW2RoLmMgc3NoLWtleXNjYW4uYyBzc2hjb25uZWN0LmNdCiAgICAgbW9yZSBjaGVja3MgZm9yIE5VTEwgcG9pbnRlcnM7IGZyb20gZ3JlbmRlbEB6ZWl0Ym9tYmUub3JnOyBvayBkZXJhYWR0QAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjcgMDk6MDg6MDAKICAgICBbbW9uaXRvci5jXQogICAgIGltcHJvdmUgbW1femFsbG9jIGNoZWNrOyBtYXJrdXMgb2sKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI3IDEwOjM1OjQ3CiAgICAgW2F1dGgyLW5vbmUuYyBtb25pdG9yLmMgc2Z0cC1jbGllbnQuY10KICAgICB1c2UgeGZyZWUoKQogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjcgMTk6NDk6MDgKICAgICBbc3NoLWtleXNjYW4uY10KICAgICB1c2UgY29udnRpbWUoKTsgb2sgbWFya3VzQAogICAtIG1pbGxlcnRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjggMDE6NDk6MzEKICAgICBbbW9uaXRvcl9tbS5jXQogICAgIHRyZWUoMykgd2FudHMgYW4gaW50IHJldHVybiB2YWx1ZSBmb3IgaXRzIGNvbXBhcmUgZnVuY3Rpb25zIGFuZAogICAgIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHBvaW50ZXJzIGlzIG5vdCBhbiBpbnQuICBKdXN0IGRvIHRoZQogICAgIHNhZmVzdCB0aGluZyBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiBhIGxvbmcgYW5kIHRoZW4gcmV0dXJuIDAsCiAgICAgLTEsIG9yIDEgYmFzZWQgb24gdGhhdCByZXN1bHQuCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yOCAwMTo1MDozNwogICAgIFttb25pdG9yX3dyYXAuY10KICAgICB1c2Ugc3NpemVfdAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjggMTA6MDg6MjUKICAgICBbc3NoZC5jXQogICAgIHJhbmdlIGNoZWNrIC11IG9wdGlvbiBhdCBpbnZvY2F0aW9uCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yOCAyMzowNTowNgogICAgIFtzc2hkLmNdCiAgICAgZ2lkc2V0WzJdIC0+IGdpZHNldFsxXTsgbWFya3VzIG9rCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8zMCAyMTo1NDoxNgogICAgIFthdXRoMi5jIHNlc3Npb24uYyBzc2hkLmNdCiAgICAgbGludCBhc2tzIHRoYXQgd2UgdXNlIG5hbWVzIHRoYXQgZG8gbm90IG92ZXJsYXAKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzMwIDIxOjU5OjQ1CiAgICAgW2F1dGgtYnNkYXV0aC5jIGF1dGgtc2tleS5jIGF1dGgyLWNoYWxsLmMgY2xpZW50bG9vcC5jIGtleS5jCiAgICAgIG1vbml0b3Jfd3JhcC5jIG1vbml0b3Jfd3JhcC5oIHNjYXJkLmggc2Vzc2lvbi5oIHNmdHAtZ2xvYi5jIHNzaC5jCiAgICAgIHNzaGNvbm5lY3QyLmMgc3NoZC5jXQogICAgIG1pbm9yIEtORgogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDcvMDEgMTY6MTU6MjUKICAgICBbbXNnLmNdCiAgICAgJXUKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDcvMDEgMTk6NDg6NDYKICAgICBbc3NoY29ubmVjdDIuY10KICAgICBmb3IgY29tcHJlc3Npb249eWVzLCB3ZSBmYWxsYmFjayB0byBuby1jb21wcmVzc2lvbiBpZiB0aGUgc2VydmVyIGRvZXMKICAgICBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiwgdmljZSB2ZXJzYSBmb3IgY29tcHJlc3Npb249bm8uIG9rIG1vdXJpbmdACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA3LzAzIDA5OjU1OjM4CiAgICAgW3NzaC1rZXlzaWduLmNdCiAgICAgdXNlIFJTQV9ibGluZGluZ19vbigpIGZvciByc2EgaG9zdGtleXMgKHN1Z2dlc3RlZCBieSBCaWxsIFNvbW1lcmZlbGQpCiAgICAgaW4gb3JkZXIgdG8gYXZvaWQgYSBwb3NzaWJsZSBLb2NoZXIgdGltaW5nIGF0dGFjayBwb2ludGVkIG91dCBieSBDaGFybGVzCiAgICAgSGFubnVtOyBvayBwcm92b3NACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA3LzAzIDE0OjIxOjA1CiAgICAgW3NzaC1rZXlzaWduLjggc3NoLWtleXNpZ24uYyBzc2guYyBzc2hfY29uZmlnXQogICAgIHJlLWVuYWJsZSBzc2gta2V5c2lnbidzIHNiaXQsIGJ1dCBtYWtlIHNzaC1rZXlzaWduIHJlYWQgCiAgICAgL2V0Yy9zc2gvc3NoX2NvbmZpZyBhbmQgZXhpdCBpZiBIb3N0YmFzZWRBdXRoZW50aWNhdGlvbiBpcyBkaXNhYmxlZCAKICAgICBnbG9iYWxseS4gYmFzZWQgb24gZGlzY3Vzc2lvbnMgd2l0aCBkZXJhYWR0LCBpdG9qdW4gYW5kIHNvbW1lcmZlbGQ7IAogICAgIG9rIGl0b2p1bkAKIC0gKGJhbCkgRmFpbGVkIHBhc3N3b3JkIGF0dGVtcHRzIGRvbid0IGluY3JlbWVudCBjb3VudGVyIG9uIEFJWC4gQnVnICMxNDUKIC0gKGJhbCkgTWlzc2VkIE1ha2VmaWxlLmluIGNoYW5nZS4gIGtleXNpZ24gbmVlZHMgcmVhZGNvbmYubwogLSAoYmFsKSBDbGVhbiB1cCBhaXhfdXNyaW5mbygpLiAgSWdub3JlIFRUWT0gcGVyaW9kIEkgZ3Vlc3MuCiAgCjIwMDIwNzAyCiAtIChkam0pIFVzZSBQQU1fTVNHX01FTUJFUiBmb3IgUEFNX1RFWFRfSU5GTyBtZXNzYWdlcywgdXNlIHhtYWxsb2MgJiAKICAgZnJpZW5kcyBjb25zaXN0ZW50bHkuIFNwb3R0ZWQgYnkgU29sYXIgRGVzaWduZXIgPHNvbGFyQG9wZW53YWxsLmNvbT4KCjIwMDIwNjI5CiAtIChiYWwpIGZpeCB0byBhdXRoMi1wYW0uYyB0byBzd2FwIGZhdGFsKCkgYXJndW1lbnRzLCAgQSBiaXQgb2Ygc3R5bGUKICAgY2xlYW4gdXAgd2hpbGUgSSdtIG5lYXIgaXQuCgoyMDAyMDYyOAogLSAoc3RldmVzaykgW3NzaGRfY29uZmlnXSBQQU1BdXRoZW50aWNhdGlvblZpYUtiZEludCBubzsgY29tbWVudGVkCiAgIG9wdGlvbnMgc2hvdWxkIGNvbnRhaW4gZGVmYXVsdCB2YWx1ZS4gIGZyb20gc29sYXIuCiAtIChiYWwpIEN5Z3dpbiB1aWQwIGZpeCBieSB2aW5zY2hlbkByZWRoYXQuY29tCiAtIChiYWwpIHMvY29uZmlnLmgvaW5jbHVkZXMuaC8gaW4gb3BlbmJzZC1jb21wYXQvIGZvciAqLmMuICBPdGhlcndpc2Ugd2lzZQogICBoYXZlIGlzc3VlcyBvZiBvdXIgZml4ZXMgbm90IHByb3BvZ2F0aW5nIHJpZ2h0IChpZSBiY29weSBpbnN0ZWFkIG9mCiAgIG1lbW1vdmUpLiAgT0sgdGltCiAtIChiYWwpIEZyZWVCU0QgbmVlZHMgPHN5cy90eXBlcy5oPiB0byBkZXRlY3QgaWYgbW1hcCgpIGlzIHN1cHBvcnRlZC4KICAgQnVnICMzMDMKCjIwMDIwNjI3CiAtIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI2IDE0OjQ5OjM2CiAgICAgW21vbml0b3IuY10KICAgICBjb3JyZWN0ICV1CiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNiAxNDo1MDowNAogICAgIFttb25pdG9yX2ZkcGFzcy5jXQogICAgIHVzZSBzc2l6ZV90IGZvciByZWN2bXNnKCkgYW5kIHNlbmRtc2coKSByZXR1cm4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjYgMTQ6NTE6MzMKICAgICBbc3NoLWFkZC5jXQogICAgIGZpeCBleGl0IGNvZGUgZm9yIC1YLy14CiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNiAxNTowMDozMgogICAgIFttb25pdG9yX3dyYXAuY10KICAgICBtb3JlICV1CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI2IDIyOjI3OjMyCiAgICAgW3NzaC1rZXlzaWduLmNdCiAgICAgYnVnICMzMDQsIHhmcmVlKGRhdGEpIGNhbGxlZCB0byBlYXJseTsgb3BlbnNzaEBzaWdpbnQuY3MucHVyZHVlLmVkdQoKMjAwMjA2MjYKIC0gKHN0ZXZlc2spIFttb25pdG9yLmNdIHJlbW92ZSBkdXBsaWNhdGUgcHJvdG8xNSBkaXNwYXRjaCBlbnRyeSBmb3IgUEFNCiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjMgMjE6MzQ6MDcKICAgICBbY2hhbm5lbHMuY10KICAgICB0Y29kZSBpcyB1X2ludAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNCAxMzoxMjoyMwogICAgIFtzc2gtYWdlbnQuMV0KICAgICB0aGUgc29ja2V0IG5hbWUgY29udGFpbnMgc3NoLWFnZW50J3MgcHBpZDsgdmlhIG1wZWNoQCBmcm9tIGZvcm1ACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI0IDE0OjMzOjI3CiAgICAgW2NoYW5uZWxzLmMgY2hhbm5lbHMuaCBjbGllbnRsb29wLmMgc2VydmVybG9vcC5jXQogICAgIG1vdmUgY2hhbm5lbCBjb3VudGVyIHRvIHVfaW50CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI0IDE0OjU1OjM4CiAgICAgW2F1dGhmaWxlLmMga2V4LmMgc3NoLWFnZW50LmNdCiAgICAgY2F0IHRvICh2b2lkKSB3aGVuIG91dHB1dCBmcm9tIGJ1ZmZlcl9nZXRfWCBpcyBpZ25vcmVkCiAgIC0gaXRvanVuQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI0IDE1OjQ5OjIyCiAgICAgW21zZy5jXQogICAgIHByaW50ZiB0eXBlIHBlZGFudAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjQgMTc6NTc6MjAKICAgICBbc2Z0cC1zZXJ2ZXIuYyBzc2hwdHkuY10KICAgICBleHBsaWNpdCAodV9pbnQpIGZvciB1aWQgYW5kIGdpZAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNSAxNjoyMjo0MgogICAgIFthdXRoZmQuY10KICAgICB1bm5lY2Vzc2FyeSBjYXN0CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI1IDE4OjUxOjA0CiAgICAgW3NzaGQuY10KICAgICBsaWdodHdlaWdodCBkb19zZXR1c2VyY29udGV4dCBhZnRlciBjaHJvb3QoKQogLSAoYmFsKSBVcGRhdGVkIEFJWCBwYWNrYWdlIGJ1aWxkLiAgUGF0Y2ggYnkgZHR1Y2tlckB6aXAuY29tLmF1CiAtICh0aW0pIFtNYWtlZmlsZS5pbl0gZml4IHRlc3Qgb24gaW5zdGFsbGluZyBzc2gtcmFuZC1oZWxwZXIuOAogLSAoYmFsKSBhZGRlZCBiYWNrIGluIGVycm9yIGNoZWNrIGZvciBtbWFwKCkuICBJIHNjcmV3ZWQgdXAsIFBvaW50ZWQKICAgb3V0IGJ5IHN0ZXZlc2tACiAtICh0aW0pIFtSRUFETUUucHJpdnNlcF0gVW5peFdhcmUgdGlwIG5vIGxvbmdlciBuZWVkZWQuCiAtIChiYWwpIGZpeGVkIE5lWFRTdGVwIG1pc3NpbmcgbXVubWFwKCkgaXNzdWUuIEl0IGRlZmluZXMgSEFWRV9NTUFQLAogICBidXQgaXQgYWxsIGRhbW5lZCBsaWVzLgogLSAoc3RldmVzaykgW1JFQURNRS5wcml2c2VwXSBtb3JlIGZvciBzc2hkIHBzZXVkby1hY2NvdW50LgogLSAodGltKSBbY29udHJpYi9jYWxkZXJhL29wZW5zc2guc3BlY10gYWRkIHN1cHBvcnQgZm9yIHByaXZzZXAKIC0gKGRqbSkgc2V0bG9naW4gbmVlZHMgcGdpZD09cGlkIG9uIEJTRC9PUzsgZnJvbSBpdG9qdW5ACiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjYgMDg6NTM6MTIKICAgICBbYnVmYXV4LmNdCiAgICAgbGltaXQgc2l6ZSBvZiBCTnMgdG8gOEtCOyBvayBwcm92b3MvZGVyYWFkdAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNiAwODo1NDoxOAogICAgIFtidWZmZXIuY10KICAgICBsaW1pdCBhcHBlbmQgdG8gMU1CIGFuZCBidWZmZXJzIHRvIDEwTUIKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjYgMDg6NTU6MDIKICAgICBbY2hhbm5lbHMuY10KICAgICBsaW1pdCAjIG9mIGNoYW5uZWxzIHRvIDEwMDAwCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI2IDA4OjU4OjI2CiAgICAgW3Nlc3Npb24uY10KICAgICBsaW1pdCAjIG9mIGVudiB2YXJzIHRvIDEwMDA7IG9rIGRlcmFhZHQvZGptCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNiAxMzoyMDo1NwogICAgIFttb25pdG9yLmNdCiAgICAgYmUgY2FyZWZ1bCBpbiBtbV96YWxsb2MKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI2IDEzOjQ5OjI2CiAgICAgW3Nlc3Npb24uY10KICAgICBkaXNjbG9zZSBsZXNzIGluZm9ybWF0aW9uIGZyb20gZW52aXJvbm1lbnQgZmlsZXM7IGJhc2VkIG9uIGlucHV0IAogICAgIGZyb20gZGptLCBhbmQgZHNjaHVsdHpAdWNsaW5rLkJlcmtlbGV5LkVEVQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNiAxMzo1NTozNwogICAgIFthdXRoMi1jaGFsbC5jXQogICAgIG1ha2Ugc3VyZSAjIG9mIHJlc3BvbnNlIG1hdGNoZXMgIyBvZiBxdWVyaWVzLCBmaXhlcyBpbnQgb3ZlcmZsb3c7IAogICAgIGZyb20gSVNTCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI2IDEzOjU2OjI3CiAgICAgW3ZlcnNpb24uaF0KICAgICAzLjQKIC0gKGRqbSkgUmVxdWlyZSBrcmI1IGRldmVsIGZvciBSUE0gYnVpbGQgdy8gS3JiViAKIC0gKGRqbSkgSW1wcm92ZSBQQU1BdXRoZW50aWNhdGlvblZpYUtiZEludCB0ZXh0IGZyb20gTmFsaW4gRGFoeWFiaGFpIAogICA8bmFsaW5AcmVkaGF0LmNvbT4KIC0gKGRqbSkgVXBkYXRlIHNwZWMgZmlsZXMgZm9yIHJlbGVhc2UgCiAtIChkam0pIEZpeCBpbnQgb3ZlcmZsb3cgaW4gYXV0aDItcGFtLmMsIHNpbWlsYXIgdG8gb25lIGRpc2NvdmVyZWQgYnkgSVNTCiAtIChkam0pIFJlbGVhc2UgMy40cDEKIC0gKHRpbSkgW2NvbnRyaWIvY2FsZGVyYS9vcGVuc3NoLnNwZWNdIHJlbW92ZSAyIGNvbmZpZ3VyZSBvcHRpb25zIEkgcHV0IGluCiAgIGJ5IG1pc3Rha2UKCjIwMDIwNjI1CiAtIChzdGV2ZXNrKSBbSU5TVEFMTCBhY2NvbmZpZy5oIGNvbmZpZ3VyZS5hYyBkZWZpbmVzLmhdIHJlbW92ZSAtLXdpdGgtcnNoCiAtIChzdGV2ZXNrKSBbUkVBRE1FLnByaXZzZXBdIG1pbm9yIHVwZGF0ZXMKIC0gKGRqbSkgQ3JlYXRlIHByaXZzZXAgZGlyZWN0b3J5IGFuZCB3YXJuIGlmIHByaXZzZXAgdXNlciBpcyBtaXNzaW5nIAogICBkdXJpbmcgbWFrZSBpbnN0YWxsCiAtIChiYWwpIFN0YXJ0ZWQgbGlzdCBvZiBQcml2U2VwIGlzc3VlcyBpbiBUT0RPCiAtIChiYWwpIGlmIG1tYXAoKSBpcyBzdWJzdGFuZGFyZCwgZG9uJ3QgYWxsb3cgY29tcHJlc3Npb24gb24gc2VydmVyIHNpZGUuCiAgIFBvc3QgJ2V2ZW50JyB3ZSB3aWxsIGFkZCBtb3JlIG9wdGlvbnMuCiAtICh0aW0pIFtjb250cmliL2NhbGRlcmEvb3BlbnNzaC5zcGVjXSBTeW5jIHdpdGggQ2FsZGVyYQogLSAoYmFsKSBtb3ZlZCBhaXhfdXNyaW5mbygpIGFuZCBub3RlZCBub3Qgc2V0dGluZyByZWFsIFRUWS4gIFBhdGNoIGJ5CiAgIGR0dWNrZXJAemlwLmNvbS5hdQogLSAodGltKSBbYWNjb25maWcuaCBjb25maWd1cmUuYWMgc3NoZC5jXSBCUk9LRU5fRkRfUEFTU0lORyBmaXggZnJvbSBNYXJrdXMKICAgZm9yIEN5Z3dpbiwgQ3JheSwgJiBTQ08KCjIwMDIwNjI0CiAtIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIzIDAzOjI1OjUwCiAgICAgW3RpbGRleHBhbmQuY10KICAgICBLTkYKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIzIDAzOjI2OjE5CiAgICAgW2NpcGhlci5jIGtleS5jXQogICAgIEtORgogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjMgMDM6MzA6NTgKICAgICBbc2NhcmQuYyBzc2gtZHNzLmMgc3NoLXJzYS5jIHNzaGNvbm5lY3QuYyBzc2hjb25uZWN0Mi5jIHNzaGQuYyBzc2hsb2dpbi5jCiAgICAgIHNzaHB0eS5jXQogICAgIHZhcmlvdXMgS05GIGFuZCAlZCBmb3IgdW5zaWduZWQKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIzIDA5OjMwOjE0CiAgICAgW3NmdHAtY2xpZW50LmMgc2Z0cC1jbGllbnQuaCBzZnRwLWNvbW1vbi5jIHNmdHAtaW50LmMgc2Z0cC1zZXJ2ZXIuYwogICAgICBzZnRwLmNdCiAgICAgYnVuY2ggb2YgdV9pbnQgdnMgaW50IHN0dWZmCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMyAwOTozOTo1NQogICAgIFtzc2gta2V5Z2VuLmNdCiAgICAgdV9pbnQgc3R1ZmYKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIzIDA5OjQ2OjUxCiAgICAgW2J1ZmF1eC5jIHNlcnZjb25mLmNdCiAgICAgbWlub3IgS05GLiAgdGhpbmdzIHRoZSBmaW5nZXJzIGRvIHdoaWxlIHlvdSByZWFkCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMyAxMDoyOTo1MgogICAgIFtzc2gtYWdlbnQuYyBzc2hkLmNdCiAgICAgc29tZSBtaW5vciBLTkYgYW5kICV1CiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMyAyMDozOTo0NQogICAgIFtzZXNzaW9uLmNdCiAgICAgY29tcHJlc3Npb25fbGV2ZWwgaXMgdV9pbnQKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIzIDIxOjA2OjEzCiAgICAgW3NzaHB0eS5jXQogICAgIEtORgogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjMgMjE6MDY6NDEKICAgICBbY2hhbm5lbHMuYyBjaGFubmVscy5oIHNlc3Npb24uYyBzZXNzaW9uLmhdCiAgICAgZGlzcGxheSwgc2NyZWVuLCByb3csIGNvbCwgeHBpeGVsLCB5cGl4ZWwgYXJlIHVfaW50OyBtYXJrdXMgb2sKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIzIDIxOjEwOjAyCiAgICAgW3BhY2tldC5jXQogICAgIHBhY2tldF9nZXRfaW50KCkgcmV0dXJucyB1bnNpZ25lZCBmb3IgcmVhc29uICYgc2VxbnIKICAtIChiYWwpIEFsc28gZml4ZWQgSVBBRERSX0lOX0RJU1BMQVkgY2FzZSB3aGVyZSBkaXNwbGF5LCBzY3JlZW4sIHJvdywgY29sLAogICAgeHBpeGVsIGFyZSB1X2ludC4KCgoyMDAyMDYyMwogLSAoc3RldmVzaykgW2NvbmZpZ3VyZS5hY10gYnVnICMyNTUgTE9HSU5fTkVFRFNfVVRNUFggZm9yIEFJWC4KIC0gKGJhbCkgcmVtb3ZlZCBHTlVpc20gZm9yIGdldG9wcyBpbiBzc2gtYWdlbnQgc2luY2UgZ2xpYmMgbGFja3Mgb3B0cmVzZXQuCiAtIChiYWwpIGFkZCBleHRlcm4gY2hhciAqZ2V0b3B0LiAgQmFzZWQgb24gcmVwb3J0IGJ5IGR0dWNrZXJAemlwLmNvbS5hdSAKIC0gT3BlbkJTRCBDVlMgU3luYwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjIgMDI6MDA6MjkKICAgICBbc3NoLmhdCiAgICAgY29ycmVjdCBjb21tZW50CiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMiAwMjo0MDoyMwogICAgIFtzc2guMV0KICAgICBzZWN0aW9uIDUgbm90IDQgZm9yIHNzaF9jb25maWcKICAgLSBuYWRkeUBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMiAxMTo1MTozOQogICAgIFtzc2guMV0KICAgICB0eXBvCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMiAxNjozMjo1NAogICAgIFtzc2hkLjhdCiAgICAgYWRkIC92YXIvZW1wdHkgaW4gRklMRVMgc2VjdGlvbgogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjIgMTY6NDA6MTkKICAgICBbc3NoZC5jXQogICAgIGNoZWNrIC92YXIvZW1wdHkgb3duZXIgbW9kZTsgb2sgcHJvdm9zQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjIgMTY6NDE6NTcKICAgICBbc2NwLjFdCiAgICAgdHlwbwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjIgMTY6NDU6MjkKICAgICBbc3NoLWFnZW50LjEgc3NoZC44IHNzaGRfY29uZmlnLjVdCiAgICAgdXNlIHByb2Nlc3MgSUQgdnMuIHBpZC9QSUQvcHJvY2VzcyBpZGVudGlmaWVyCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMiAyMDowNToyNwogICAgIFtzc2hkLmNdCiAgICAgZG9uJ3QgY2FsbCBzZXRzaWQoKSBpZiBkZWJ1Z2dpbmcgb3IgcnVuIGZyb20gaW5ldGQ7IG5vICJPcGVyYXRpb24gbm90CiAgICAgcGVybWl0dGVkIiBlcnJvcnMgbm93OyBvayBtaWxsZXJ0QCBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMiAyMzowOTo1MQogICAgIFttb25pdG9yLmNdCiAgICAgc2F2ZSBhdXRoIG1ldGhvZCBiZWZvcmUgbW9uaXRvcl9yZXNldF9rZXlfc3RhdGUoKTsgYnVnemlsbGEgYnVnICMyODQ7CiAgICAgb2sgcHJvdm9zQAoKMjAwMjA2MjIKIC0gKGRqbSkgVXBkYXRlIFJFQURNRS5wcml2c2VwOyBzcG90dGVkIGJ5IGZyaWVzQAogLSAoZGptKSBSZWxlYXNlIDMuM3AxCiAtIChiYWwpIGdldG9wdCBub3cgY2FuIGJlIHN0YXRpY2x5IGNvbXBpbGVkIG9uIHRob3NlIHBsYXRmb3JtcyBtaXNzaW5nCiAgIG9wdHJlc2V0LiAgUGF0Y2ggYnkgYmluZGVyQGFyYWdvLmRlCgoyMDAyMDYyMQogLSAoZGptKSBTeW5jOgogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMSAwNTo1MDo1MQogICAgIFttb25pdG9yLmNdCiAgICAgRG9uJ3QgaW5pdGlhbGlzZSBjb21wcmVzc2lvbiBidWZmZXJzIHdoZW4gY29tcHJlc3Npb249bm8gaW4gc3NoZF9jb25maWc7CiAgICAgb2sgTmllbHNACiAgLSBJRCBzeW5jIGZvciBhdXRoLXBhc3N3ZC5jCiAtIChkam0pIFdhcm4gYW5kIGRpc2FibGUgY29tcHJlc3Npb24gb24gcGxhdGZvcm1zIHdoaWNoIGNhbid0IGhhbmRsZSBib3RoCiAgIHVzZXByaXZpbGVnZXNlcGFyYXRpb249eWVzIGFuZCBjb21wcmVzc2lvbj15ZXMKIC0gKGRqbSkgY29udHJpYi9yZWRoYXQvb3BlbnNzaC5zcGVjIGhhY2tpbmc6CiAgIC0gTWVyZ2UgaW4gc3BlYyBjaGFuZ2VzIGZyb20gc2ViYUBpcS5wbCAoU2ViYXN0aWFuIFBhY2h1dGEpCiAgIC0gQWRkIG5ldyB7c3NoLHNzaGR9X2NvbmZpZy41IG1hbnBhZ2VzCiAgIC0gQWRkIG5ldyBzc2gta2V5c2lnbiBwcm9ncmFtIGFuZCByZW1vdmUgc2V0dWlkIGZyb20gc3NoIGNsaWVudAoKMjAwMjA2MjAKIC0gKGJhbCkgRml4ZWQgQUlYIGVudmlyb25tZW50IGhhbmRsaW5nLCB1c2Ugc2V0cGNyZWQoKSBpbnN0ZWFkIG9mIGV4aXN0aW5nCiAgIGNvZGUuICAoQnVnemlsbGEgQnVnIDI2MSkKIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIHRvZGRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMTQgMjE6MzU6MDAKICAgICBbbW9uaXRvcl93cmFwLmNdCiAgICAgc3BlbGxpbmc7IGZyb20gQnJpYW4gUG9vbGUgPHJhakBjZXJpYXMucHVyZHVlLmVkdT4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMTUgMDA6MDE6MzYKICAgICBbYXV0aGZkLmMgYXV0aGZkLmggc3NoLWFkZC5jIHNzaC1hZ2VudC5jXQogICAgIGJyZWFrIGFnZW50IGtleSBsaWZldGltZSBwcm90b2NvbCBhbmQgYWxsb3cgb3RoZXIgY29udHJhaW50cyBmb3Iga2V5CiAgICAgdXNhZ2UuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzE1IDAwOjA3OjM4CiAgICAgW2F1dGhmZC5jIGF1dGhmZC5oIHNzaC1hZGQuYyBzc2gtYWdlbnQuY10KICAgICBmaXggc3R1cGlkIHR5cG8KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMTUgMDE6Mjc6NDgKICAgICBbYXV0aGZkLmMgYXV0aGZkLmggc3NoLWFkZC5jIHNzaC1hZ2VudC5jXQogICAgIHJlbW92ZSB0aGUgQ09OU1RSQUlOX0lERU5USVRZIG1lc3NhZ2VzIGFuZCBpbnRyb2R1Y2UgYSBuZXcKICAgICBBRERfSUQgbWVzc2FnZSB3aXRoIGNvbnRyYWludHMgaW5zdGVhZC4gY29udHJhaW50cyBjYW4gYmUKICAgICBvbmx5IGFkZGVkIHRvZ2V0aGVyIHdpdGggdGhlIHByaXZhdGUga2V5LgogICAtIGl0b2p1bkBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8xNiAyMTozMDo1OAogICAgIFtzc2gta2V5c2Nhbi5jXQogICAgIHVzZSBUQUlMUV94eCBtYWNyby4gIGZyb20gbHVrZW1AbmV0YnNkLiAgbWFya3VzIG9rCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8xNyAwNjowNTo1NgogICAgIFtzY3AuY10KICAgICBtYWtlIHVzYWdlIGxpa2UgbWFuIHBhZ2UKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzE5IDAwOjI3OjU1CiAgICAgW2F1dGgtYnNkYXV0aC5jIGF1dGgtc2tleS5jIGF1dGgxLmMgYXV0aDItY2hhbGwuYyBhdXRoMi1ub25lLmMgYXV0aGZkLmMKICAgICAgYXV0aGZkLmggbW9uaXRvcl93cmFwLmMgbXNnLmMgbmNoYW4uYyByYWRpeC5jIHJlYWRjb25mLmMgc2NwLmMgc2Z0cC4xCiAgICAgIHNzaC1hZGQuMSBzc2gtYWRkLmMgc3NoLWFnZW50LjEgc3NoLWFnZW50LmMgc3NoLWtleWdlbi4xIHNzaC1rZXlnZW4uYwogICAgICBzc2gta2V5c2lnbi5jIHNzaC4xIHNzaGNvbm5lY3QuYyBzc2hjb25uZWN0Lmggc3NoY29ubmVjdDIuYyB0dHltb2Rlcy5jCiAgICAgIHhtYWxsb2MuaF0KICAgICBLTkYgZG9uZSBhdXRvbWF0aWNhbGx5IHdoaWxlIHJlYWRpbmcuLi4uCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzE5IDE4OjAxOjAwCiAgICAgW2NpcGhlci5jIG1vbml0b3IuYyBtb25pdG9yX3dyYXAuYyBwYWNrZXQuYyBwYWNrZXQuaF0KICAgICBtYWtlIHRoZSBtb25pdG9yIHN5bmMgdGhlIHRyYW5zZmVyIHNzaDEgc2Vzc2lvbiBrZXk7CiAgICAgdHJhbnNmZXIga2V5Y29udGV4dCBvbmx5IGZvciBSQzQgKHRoaXMgaXMgc3RpbGwgZGVwZW5kcyBvbiBFVlAKICAgICBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCBpcyBicm9rZW4pLgogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjAgMTk6NTY6MDcKICAgICBbc3NoLjEgc3NoZC44XQogICAgIG1vdmUgY29uZmlndXJhdGlvbiBmaWxlIG9wdGlvbnMgZnJvbSBzc2guMS9zc2hkLjggdG8KICAgICBzc2hfY29uZmlnLjUvc3NoZF9jb25maWcuNTsgb2sgZGVyYWFkdEAgbWlsbGVydEAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIwIDIwOjAwOjA1CiAgICAgW3NjcC4xIHNmdHAuMV0KICAgICBzc2hfY29uZmlnKDUpCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMCAyMDowMzozNAogICAgIFtzc2hfY29uZmlnIHNzaGRfY29uZmlnXQogICAgIHJlZmVyIHRvIGNvbmZpZyBmaWxlIG1hbiBwYWdlCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIwIDIzOjA1OjU2CiAgICAgW3NlcnZjb25mLmMgc2VydmNvbmYuaCBzZXNzaW9uLmMgc3NoZC5jXQogICAgIGFsbG93IENvbXByZXNzaW9uPXllcy9ubyBpbiBzc2hkX2NvbmZpZwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMCAyMzozNzoxMgogICAgIFtzc2hkX2NvbmZpZ10KICAgICBhZGQgQ29tcHJlc3Npb24KICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzI1IDIwOjQwOjA4CiAgICAgW0xJQ0VOQ0VdCiAgICAgbWlzc2VkIFBlciBBbGxhbnNzb24gKGF1dGgyLWNoYWxsLmMpCiAtIChiYWwpIEN5Z3dpbiBzcGVjaWFsIGhhbmRsaW5nIG9mIGVtcHR5IHBhc3N3b3JkcyB3cm9uZy4gIFBhdGNoIGJ5CiAgIHZpbnNjaGVuQHJlZGhhdC5jb20KIC0gKGJhbCkgTWlzc2VkIGludGVncmF0aW5nIHNzaF9jb25maWcuNSBhbmQgc3NoZF9jb25maWcuNQogLSAoYmFsKSBTdGlsbCBtb3JlIE1ha2VmaWxlLmluIHVwZGF0ZXMgZm9yIHNzaHtkfV9jb25maWcuNQoKMjAwMjA2MTMKIC0gKGJhbCkgdHlwbyBvZiBzZXRncm91cCBmb3IgY3lnd2luLiAgUGF0Y2ggYnkgdmluc2NoZW5AcmVkaGF0LmNvbQoKMjAwMjA2MTIKIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8xMSAyMzowMzo1NAogICAgIFtzc2guY10KICAgICByZW1vdmUgdW51c2VkIGNydWZ0LgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8xMiAwMTowOTo1MgogICAgIFtzc2guY10KICAgICBzc2hfY29ubmVjdCByZXR1cm5zIDAgb24gc3VjY2VzcwogLSAoYmFsKSBCdWlsZCBub29wIHNldGdyb3VwcygpIGZvciBjeWd3aW4gdG8gY2xlYW4gdXAgY29kZSAoRm9yIG90aGVyCiAgIHBsYXRmb3JtcyB3aXRob3V0IHRoZSBzZXRncm91cHMoKSByZXF1aXJlbWVudCwgeW91IE1VU1QgZGVmaW5lCiAgIFNFVEdST1VQU19OT09QIGluIHRoZSBjb25maWd1cmUuYWMpIEJhc2VkIG9uIHBhdGNoIGJ5IHZpbnNjaGVuQHJlZGhhdC5jb20KIC0gKGJhbCkgU29tZSBwbGF0Zm9ybXMgZG9uJ3QgaGF2ZSBPTkxDUiAoTm90YWJsZSBNaW50KQoKMjAwMjA2MTEKIC0gKGJhbCkgc3NoLWFnZW50LmMgUkNTRCBmaXggKHx1bmV4cGFuZCBhbHJlYWR5IGRvbmUpCiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA5IDIyOjE1OjE1CiAgICAgW3NzaC4xXQogICAgIHVwZGF0ZSBmb3Igbm8gc2V0dWlkIHJvb3QgYW5kIHNzaC1rZXlzaWduOyBvayBkZXJhYWR0QAogICAtIGl0b2p1bkBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wOSAyMjoxNzoyMQogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgcGFzcyBzYWxlbiB0byBzb2NrYWRkcl9udG9wIHNvIHRoYXQgd2UgYXJlIGhhcHB5IG9uIGxpbnV4L3NvbGFyaXMKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzEwIDE2OjUzOjA2CiAgICAgW2F1dGgtcnNhLmMgc3NoLXJzYS5jXQogICAgIGRpc3BsYXkgbWluaW11bSBSU0EgbW9kdWx1cyBpbiBlcnJvcigpOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8xMCAxNjo1NjozMAogICAgIFtzc2gta2V5c2lnbi44XQogICAgIG1lcmdlIGluIHN0dWZmIGZyb20gbXkgbWFuIHBhZ2U7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzEwIDE3OjM2OjIzCiAgICAgW3NzaC1hZGQuMSBzc2gtYWRkLmNdCiAgICAgdXNlIGNvbnZ0aW1lKCkgdG8gcGFyc2UgYW5kIHZhbGlkYXRlIGtleSBsaWZldGltZS4gIGNhbiBub3cKICAgICB1c2UgJy10IDJoJyBldGMuICBvayBtYXJrdXNAIHByb3Zvc0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzEwIDE3OjQ1OjIwCiAgICAgW3JlYWRjb25mLmMgc3NoLjFdCiAgICAgY2hhbmdlIFJob3N0c1JTQUF1dGhlbnRpY2F0aW9uIGFuZCBSaG9zdHNBdXRoZW50aWNhdGlvbiBkZWZhdWx0IHRvIG5vCiAgICAgc2luY2Ugc3NoIGlzIG5vIGxvbmdlciBzZXR1aWQgcm9vdCBieSBkZWZhdWx0OyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8xMCAyMToyMToxMAogICAgIFtzc2hfY29uZmlnXQogICAgIHVwZGF0ZSBkZWZhdWx0cyBmb3IgUmhvc3RzUlNBQXV0aGVudGljYXRpb24gYW5kIFJob3N0c0F1dGhlbnRpY2F0aW9uCiAgICAgaGVyZSB0b28gKGFsbCBvcHRpb25zIGNvbW1lbnRlZCBvdXQgd2l0aCBkZWZhdWx0IHZhbHVlKS4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMTAgMjI6Mjg6NDEKICAgICBbY2hhbm5lbHMuYyBjaGFubmVscy5oIHNlc3Npb24uY10KICAgICBtb3ZlIGNyZWF0aW9uIG9mIGFnZW50IHNvY2tldCB0byBzZXNzaW9uLmM7IG5vIG5lZWQgZm9yIHVpZHN3YXBwaW5nCiAgICAgaW4gY2hhbm5lbC5jLgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8xMSAwNDoxNDoyNgogICAgIFtzc2guYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdC5oXQogICAgIG5vIGxvbmdlciB1c2UgdWlkc3dhcC5bY2hdIGZyb20gdGhlIHNzaCBjbGllbnQKICAgICBydW4gbGVzcyBjb2RlIHdpdGggZXVpZD09MCBpZiBzc2ggaXMgaW5zdGFsbGVkIHNldHVpZCByb290CiAgICAganVzdCBzd2l0Y2ggdGhlIGV1aWQsIGRvbid0IHN3aXRjaCB0aGUgY29tcGxldGUgc2V0IG9mIGdyb3VwcwogICAgICh0aGlzIGlzIG9ubHkgbmVlZGVkIGJ5IHNzaGQpLiBvayBwcm92b3NACiAgIC0gbXBlY2hAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMTEgMDU6NDY6MjAKICAgICBbYXV0aC1rcmI0LmMgbW9uaXRvci5oIHNlcnZlcmxvb3AuYyBzZXNzaW9uLmMgc3NoLWFnZW50LmMgc3NoZC5jXQogICAgIHBpZF90IGNsZWFudXAuIE1hcmt1cyBuZWVkIHRoaXMgbm93IHRvIGtlZXAgaGFja2luZy4KICAgICBtYXJrdXNALCBtaWxsZXJ0QCBvawogICAtIGl0b2p1bkBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8xMSAwODoxMTo0NQogICAgIFtjYW5vaG9zdC5jXQogICAgIHVzZSAibnRvcCIgb25seSBhZnRlciBpbml0aWFsaXplZAogLSAoYmFsKSBDeWd3aW4gZml4IHVwIGZyb20gc3dhcCB1aWQgY2xlYW4gdXAgaW4gc3NoLmMgcGF0Y2ggYnkKICAgdmluc2NoZW5AcmVkaGF0LmNvbQoKMjAwMjA2MDkKIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wOCAwNTowNzo1NgogICAgIFtzc2guY10KICAgICBudWtlIHB0cmFjZSBjb21tZW50CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA4IDA1OjA3OjA5CiAgICAgW3NzaC1rZXlzaWduLmNdCiAgICAgb25seSBhY2NlcHQgMjAgYnl0ZSBzZXNzaW9uIGlkcwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wOCAwNToxNzowMQogICAgIFtyZWFkY29uZi5jIHJlYWRjb25mLmggc3NoLjEgc3NoLmNdCiAgICAgZGVwcmVjYXRlIEZhbGxCYWNrVG9Sc2ggYW5kIFVzZVJzaDsgcGF0Y2ggZnJvbSBkam1ACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA4IDA1OjQwOjAxCiAgICAgW3JlYWRjb25mLmNdCiAgICAganVzdCB3YXJuIGFib3V0IERlcHJlY2F0ZWQgb3B0aW9ucyBmb3Igbm93CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA4IDA1OjQxOjE4CiAgICAgW3NzaF9jb25maWddCiAgICAgcmVtb3ZlIEZhbGxCYWNrVG9Sc2gvVXNlUnNoCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA4IDEyOjM2OjUzCiAgICAgW3NjcC5jXQogICAgIHJlbW92ZSBGYWxsQmFja1RvUnNoCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA4IDEyOjQ2OjE0CiAgICAgW3JlYWRjb25mLmNdCiAgICAgc2lsZW50bHkgaWdub3JlIGRlcHJlY2F0ZWQgb3B0aW9ucywgc2luY2UgRmFsbEJhY2tUb1JzaCBtaWdodCBiZSBwYXNzZWQKICAgICBieSByZW1vdGUgc2NwIGNvbW1hbmRzLgogIC0gaXRvanVuQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA4IDIxOjE1OjI3CiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBhbHdheXMgdXNlIGdldG5hbWVpbmZvLiAgKGRpYWcgbWVzc2FnZSBvbmx5KQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wOSAwNDozMzoyNwogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgYWJvcnQoKSAtID4gZmF0YWwoKQogLSAoYmFsKSBSQ1NJRCB0YWcgdXBkYXRlcyBvbiBjaGFubmVscy5jLCBjbGllbnRsb29wLmMsIG5jaGFuLmMsCiAgIHNmdHAtY2xpZW50LmMsIHNzaC1hZ2VuZXQuYywgc3NoLWtleWdlbi5jIGFuZCBjb25uZWN0LmggKHdlIGRpZCB1bmV4cGFuZAogICBpbmRlcGVuZGFudCBvZiB0aGVtKQoKMjAwMjA2MDcKIC0gKGJhbCkgUmVtb3ZlZCAtLXtlbmFibGUvZGlzYWJsZX0tc3VpZC1zc2gKIC0gKGJhbCkgTWlzc2VkIF9fcHJvZ25hbWUgaW4gc3NoLWtleXNpZ24uYyAgcGF0Y2ggYnkgZHR1Y2tlckB6aXAuY29tLmF1CiAtIChiYWwpIHVzZSAnTE9HSU5fUFJPR1JBTScgIG5vdCAnL3Vzci9iaW4vbG9naW4nIGluIHNlc3Npb24uYyBwYXRjaCBieQogICBCZXJ0cmFuZC5WZWxsZUBhcG9nZWUtY29tLmZyCgoyMDAyMDYwNgogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzE1IDIxOjU2OjM4CiAgICAgW3NlcnZjb25mLmMgc3NoZC44IHNzaGRfY29uZmlnXQogICAgIHJlLWVuYWJsZSBwcml2c2VwIGFuZCBkaXNhYmxlIHNldHVpZCBmb3IgcG9zdC0zLjIuMgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8xNiAyMjowMjo1MAogICAgIFtjaXBoZXIuYyBrZXguaCBtYWMuY10KICAgICBmaXggd2FybmluZ3MgKG9wZW5zc2wgMC45LjcgcmVxdWlyZXMgY29uc3QpCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8xNiAyMjowOTo1OQogICAgIFtzZXNzaW9uLmMgc3NoLmNdCiAgICAgZG9uJ3QgbGltaXQgeGF1dGggcGF0aGxlbiBvbiBjbGllbnQgc2lkZSBhbmQgbG9uZ2VyIHByaW50IGxlbmd0aCBvbgogICAgIHNlcnZlciB3aGVuIGRlYnVnOyBvayBtYXJrdXNACiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8xOSAyMDo1NDo1MgogICAgIFtsb2cuaF0KICAgICBleHRyYSBjb21tYXMgaW4gZW51bSBub3QgMTAwJSBwb3J0YWJsZQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMjIgMjM6MTg6MjUKICAgICBbc3NoLmMgc3NoZC5jXQogICAgIHNwZWxsaW5nOyBhYmlzaG9mZkBhcmMubmFzYS5nb3YKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMjMgMTk6MjQ6MzAKICAgICBbYXV0aGZpbGUuYyBhdXRoZmlsZS5oIHBhdGhuYW1lcy5oIHNzaC5jIHNzaGNvbm5lY3QuYyBzc2hjb25uZWN0LmggCiAgICAgIHNzaGNvbm5lY3QxLmMgc3NoY29ubmVjdDIuYyBzc2gta2V5c2lnbi44IHNzaC1rZXlzaWduLmMgTWFrZWZpbGUuaW5dCiAgICAgYWRkIC91c3IvbGliZXhlYy9zc2gta2V5c2lnbjogYSBzZXR1aWQgaGVscGVyIHByb2dyYW0gZm9yIGhvc3RiYXNlZCAKICAgICBhdXRoZW50aWNhdGlvbiBpbiBwcm90b2NvbCB2MiAobmVlZHMgdG8gYWNjZXNzIHRoZSBob3N0a2V5cykuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzIzIDE5OjM5OjM0CiAgICAgW3NzaC5jXQogICAgIGFkZCBjb21tZW50IGFib3V0IHNzaC1rZXlzaWduCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzI0IDA4OjQ1OjE0CiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgc3RhdCBzc2gta2V5c2lnbiBmaXJzdCwgcHJpbnQgZXJyb3IgaWYgc3RhdCBmYWlsczsKICAgICBzb21lIGRlYnVnLT5lcnJvcjsgZml4IGNvbW1lbnQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMjUgMDg6NTA6MzkKICAgICBbc3NoY29ubmVjdDIuY10KICAgICBleGVjbHAtPmV4ZWNsOyBmcm9tIHN0ZXZlc2sKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMjUgMTg6NTE6MDcKICAgICBbYXV0aC5oIGF1dGgyLmMgYXV0aDItaG9zdGJhc2VkLmMgYXV0aDIta2JkaW50LmMgYXV0aDItbm9uZS5jCiAgICAgIGF1dGgyLXBhc3N3ZC5jIGF1dGgyLXB1YmtleS5jIE1ha2VmaWxlLmluXQogICAgIHNwbGl0IGF1dGgyLmMgaW50byBvbmUgZmlsZSBwZXIgbWV0aG9kOyBvayBwcm92b3NAL2RlcmFhZHRACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8yNiAyMDozNToxMAogICAgIFtzc2guMV0KICAgICBzb3J0IENoYWxsZW5nZVJlc3BvbnNlQXV0aGVudGljYXRpb247IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzI4IDE2OjQ1OjI3CiAgICAgW21vbml0b3JfbW0uY10KICAgICBwcmludCBzdHJlcnJvcihlcnJubykgb24gbW1hcC9tdW5tYXAgZXJyb3I7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzI4IDE3OjI4OjAyCiAgICAgW3VpZHN3YXAuY10KICAgICBmb3JtYXQgc3BlYyBjaGFuZ2UvY2FzdHMgYW5kIHNvbWUgS05GOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8yOCAyMToyNDowMAogICAgIFt1aWRzd2FwLmNdCiAgICAgdXNlIGNvcnJlY3QgZnVuY3Rpb24gbmFtZSBpbiBmYXRhbCgpCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8yOSAwMzowNjozMAogICAgIFtzc2guMSBzc2hkLjhdCiAgICAgc3BlbGxpbmcKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMjkgMTE6MjE6NTcKICAgICBbc3NoZC5jXQogICAgIGRvbid0IHN0YXJ0IGlmIHByaXZzZXAgaXMgZW5hYmxlZCBhbmQgU1NIX1BSSVZTRVBfVVNFUiBvcgogICAgIF9QQVRIX1BSSVZTRVBfQ0hST09UX0RJUiBhcmUgbWlzc2luZzsgb2sgZGVyYWFkdEAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMzAgMDg6MDc6MzEKICAgICBbY2lwaGVyLmNdCiAgICAgdXNlIHJpam5kYWVsL2FlcyBmcm9tIGxpYmNyeXB0byAob3BlbnNzbCA+PSAwLjkuNykgaW5zdGVhZCBvZgogICAgIG91ciBvd24gaW1wbGVtZW50YXRpb24uIGFsbG93IHVzZSBvZiBBRVMgaGFyZHdhcmUgdmlhIGxpYmNyeXB0bywgCiAgICAgb2sgZGVyYWFkdEAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMzEgMTA6MzA6MzMKICAgICBbc3NoY29ubmVjdDIuY10KICAgICBleHRlbnQgc3NoLWtleXNpZ24gcHJvdG9jb2w6CiAgICAgcGFzcyAjIG9mIHNvY2tldC1mZCB0byBzc2gta2V5c2lnbiwga2V5c2lnbiB2ZXJmaWVzIGxvY2FsbHkgdXNlZAogICAgIGlwLWFkZHJlc3MgdXNpbmcgdGhpcyBzb2NrZXQtZmQsIHJlc3RyaWN0cyBmYWtlIGxvY2FsIGhvc3RuYW1lcwogICAgIHRvIGFjdHVhbCBsb2NhbCBob3N0bmFtZXM7IG9rIHN0ZXZlc2tACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzMxIDExOjM1OjE1CiAgICAgW2F1dGguaCBhdXRoMi5jXQogICAgIG1vdmUgQXV0aG1ldGhvZCBkZWZpbml0b25zIHRvIHBlci1tZXRob2QgZmlsZS4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMzEgMTM6MTY6NDgKICAgICBba2V5LmNdCiAgICAgYWRkIGNvbW1lbnQ6CiAgICAga2V5X3ZlcmlmeSByZXR1cm5zIDEgZm9yIGEgY29ycmVjdCBzaWduYXR1cmUsIDAgZm9yIGFuIGluY29ycmVjdCBzaWduYXR1cmUKICAgICBhbmQgLTEgb24gZXJyb3IuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzMxIDEzOjIwOjUwCiAgICAgW3NzaC1yc2EuY10KICAgICBwYWQgcmVjZWl2ZWQgc2lnbmF0dXJlIHdpdGggbGVhZGluZyB6ZXJvcywgYmVjYXVzZSBSU0FfdmVyaWZ5IGV4cGVjdHMKICAgICBhIHNpZ25hdHVyZSBvZiBSU0Ffc2l6ZS4gdGhlIGRyYWZ0cyBzYXlzIHRoZSBzaWduYXR1cmUgaXMgdHJhbnNtaXR0ZWQKICAgICB1bnBhZGRlZCAoZS5nLiBwdXR0eSBkb2VzIG5vdCBwYWQpLCByZXBvcnRlZCBieSBhbmFraW5AcG9ib3guY29tCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wMyAxMjowNDowNwogICAgIFtzc2guaF0KICAgICBjb21wYXRpYmxpdHkgLT4gY29tcGF0aWJpbGl0eQogICAgIGRlY3JpcHRvciAtPiBkZXNjcmlwdG9yCiAgICAgYXV0aGVudGNpYXRlZCAtPiBhdXRoZW50aWNhdGVkCiAgICAgdHJhbnNtaXRpb24gLT4gdHJhbnNtaXNzaW9uCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA0IDE5OjQyOjM1CiAgICAgW21vbml0b3IuY10KICAgICBvbmx5IGFsbG93IGVuYWJsZWQgYXV0aGVudGljYXRpb24gbWV0aG9kczsgb2sgcHJvdm9zQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wNCAxOTo1Mzo0MAogICAgIFttb25pdG9yLmNdCiAgICAgc2F2ZSB0aGUgc2Vzc2lvbiBpZCAoaGFzaCkgZm9yIHNzaDIgKGl0IHdpbGwgYmUgcGFzc2VkIHdpdGggdGhlIAogICAgIGluaXRpYWwgc2lnbiByZXF1ZXN0KSBhbmQgdmVyaWZ5IHRoYXQgdGhpcyB2YWx1ZSBpcyB1c2VkIGR1cmluZyAKICAgICBhdXRoZW50aWNhdGlvbjsgb2sgcHJvdm9zQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wNCAyMzowMjowNgogICAgIFtwYWNrZXQuY10KICAgICByZW1vdmUgX19GVU5DVElPTl9fCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA0IDIzOjA1OjQ5CiAgICAgW2NpcGhlci5jIG1vbml0b3IuYyBtb25pdG9yX2ZkcGFzcy5jIG1vbml0b3JfbW0uYyBtb25pdG9yX3dyYXAuY10KICAgICBfX0ZVTkNUSU9OX18gLT4gX19mdW5jX18KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDUgMTY6MDg6MDcKICAgICBbc3NoLWFnZW50LjEgc3NoLWFnZW50LmNdCiAgICAgJy1hIGJpbmRfYWRkcmVzcycgYmluZHMgdGhlIGFnZW50IHRvIHVzZXItc3BlY2lmaWVkIHVuaXgtZG9tYWluCiAgICAgc29ja2V0IGluc3RlYWQgb2YgL3RtcC9zc2gtWFhYWFhYWFgvYWdlbnQuPHBpZD47IG9rIGRqbUAgKHNvbWUgdGltZSBhZ28pLgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wNSAxNjowODowNwogICAgIFtzc2gtYWdlbnQuMSBzc2gtYWdlbnQuY10KICAgICAnLWEgYmluZF9hZGRyZXNzJyBiaW5kcyB0aGUgYWdlbnQgdG8gdXNlci1zcGVjaWZpZWQgdW5peC1kb21haW4KICAgICBzb2NrZXQgaW5zdGVhZCBvZiAvdG1wL3NzaC1YWFhYWFhYWC9hZ2VudC48cGlkPjsgb2sgZGptQCAoc29tZSB0aW1lIGFnbykuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA1IDE2OjQ4OjU0CiAgICAgW3NzaC1hZ2VudC5jXQogICAgIGNvcHkgY3VycmVudCByZXF1ZXN0IGludG8gYW4gZXh0cmEgYnVmZmVyIGFuZCBqdXN0IGZsdXNoIHRoaXMKICAgICByZXF1ZXN0IG9uIGVycm9ycywgb2sgcHJvdm9zQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wNSAxOTo1NzoxMgogICAgIFthdXRoZmQuYyBhdXRoZmQuaCBzc2gtYWRkLjEgc3NoLWFkZC5jIHNzaC1hZ2VudC5jXQogICAgIHNzaC1hZGQgLXggZm9yIGxvY2sgYW5kIC1YIGZvciB1bmxvY2tpbmcgdGhlIGFnZW50LgogICAgIHRvZG86IGVuY3J5cHQgcHJpdmF0ZSBrZXlzIHdpdGggbG9ja2VkLi4uCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA1IDIwOjU2OjM5CiAgICAgW3NzaC1hZGQuY10KICAgICBhZGQgLXgvLVggdG8gdXNhZ2UKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDUgMjE6NTU6NDQKICAgICBbYXV0aGZkLmMgYXV0aGZkLmggc3NoLWFkZC4xIHNzaC1hZGQuYyBzc2gtYWdlbnQuY10KICAgICBzc2gtYWRkIC10IGxpZmUsICBTZXQgbGlmZXRpbWUgKGluIHNlY29uZHMpIHdoZW4gYWRkaW5nIGlkZW50aXRpZXM7IAogICAgIG9rIHByb3Zvc0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA2IDAxOjA5OjQxCiAgICAgW21vbml0b3IuaF0KICAgICBubyB0cmFpbGluZyBjb21tYSBpbiBlbnVtOyBjaGluYUB0aGV3cml0dGVud29yZC5jb20KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDYgMTc6MTI6NDQKICAgICBbc2Z0cC1zZXJ2ZXIuY10KICAgICBkaXNjYXJkIHJlbWFpbmluZyBieXRlcyBvZiBjdXJyZW50IHJlcXVlc3Q7IG9rIHByb3Zvc0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDYgMTc6MzA6MTEKICAgICBbc2Z0cC1zZXJ2ZXIuY10KICAgICB1c2UgZ2V0X2ludCgpIG1hY3JvIChoaWRlIGlxdWV1ZSkKIC0gKGJhbCkgTWlzc2VkIG1zZy5bY2hdIGluIG1lcmdlLiAgUmVxdWlyZWQgZm9yIHNzaC1rZXlzaWduLgogLSAoYmFsKSBGb3Jnb3QgdG8gYWRkIG1zZy5jIE1ha2VmaWxlLmluLgogLSAoYmFsKSBtb25pdG9yX21tLmMgdHlwb3MuCiAtIChiYWwpIFJlZml4ZWQgYXV0aDIuYy4gIEl0IHdhcyBuZXZlciBmdWxseSBjb21taXRlZCB3aGlsZSBzcGxpdGluZyBvdXQKICAgYXV0aGVudGljYXRpb24gdG8gZGlmZmVyZW50IGZpbGVzLgogLSAoYmFsKSBzc2gta2V5c2lnbiBzaG91bGQgYnVpbGQgYW5kIGluc3RhbGwgY29ycmVjdGx5IG5vdy4gIFBoYXNlIHR3bwogICB3b3VsZCBiZSB0byBjbGVhbiBvdXQgYW55IGRlYWQgd29vZCBhbmQgZGlzYWJsZSBzc2ggc2V0dWlkIG9uIGluc3RhbGwuCiAtIChiYWwpIFJldmVyc2UgbG9naWMsIHVzZSBfX2Z1bmNfXyBmaXJzdCBzaW5jZSBpdCdzIEM5OQoKMjAwMjA2MDQKIC0gKHN0ZXZlc2spIFtjaGFubmVscy5jXSBidWcgIzE2NCBwYXRjaCBmcm9tIFlPU0hJRlVKSSBIaWRlYWtpIChjaGFuZ2VkCiAgIHNldHNvY2tvcHQgZnJvbSBkZWJ1ZyB0byBlcnJvciBmb3Igbm93KS4KCjIwMDIwNTI3CiAtICh0aW0pIFtjb25maWd1cmUuYWMub3JpZyBtb25pdG9yX2ZkcGFzcy5jXSBFbmFobmNlIG1zZ2hkciB0ZXN0cyB0byBhZGRyZXNzCiAgIGJ1aWxkIHByb2JsZW0gb24gSXJpeCByZXBvcnRlZCBieSBEYXZlIExvdmUgPGQubG92ZUBkbC5hYy51az4uIEJhY2sgb3V0CiAgIGxhc3QgbW9uaXRvcl9mZHBhc3MuYyBjaGFuZ2VzIHRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQgd2l0aCBuZXcgdGVzdHMuCiAgIFBhdGNoIHRlc3RlZCBvbiBJcml4IGJ5IEphbi1Gcm9kZSBNeWtsZWJ1c3QgPGphbmZyb2RlQHBhcmFsbGFiLnVpYi5ubz4KCjIwMDIwNTIyCiAtIChkam0pIEZpeCBzcGVsbGluZyBtaXN0YWtlcywgc3BvdHRlZCBieSBTb2xhciBEZXNpZ25lciBpCiAgIDxzb2xhckBvcGVud2FsbC5jb20+CiAtIFN5bmMgc2NhcmQvIChub3Qgc3VyZSB3aGVuIGl0IGRyaWZ0ZWQpCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmM6CiAgIFthdXRoLmNdCiAgIEZpeCB0eXBvL3RoaW5rby4gIFBhc3MgaW4gYXMgdG8gYXV0aF9hcHByb3ZhbCgpLCBub3QgTlVMTC4KICAgQ2xvc2VzIFBSIDI2NTkuCiAtIENyYW5rIHZlcnNpb24KIC0gQ3JhbmsgUlBNIHNwZWMgdmVyc2lvbnMKCjIwMDIwNTIxCiAtIChzdGV2ZXNrKSBbc3NoZC5jXSBidWcgMjQ1OyBkaXNhYmxlIHNldHNpZCgpIGZvciBub3cKIC0gKHN0ZXZlc2spIFtzc2hkLmNdICNpZm5kZWYgSEFWRV9DWUdXSU4gZm9yIHNldGdyb3VwcygpCgoyMDAyMDUxNwogLSAodGltKSBbY29uZmlndXJlLmFjXSByZW1vdmUgZXh0cmEgTUQ1X01TRz0ibm8iIGxpbmUuCgoyMDAyMDUxNQogLSAoYmFsKSBDVlMgSUQgZml4IHVwIG9uIGF1dGgtcGFzc3dkLmMKIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMDcgMTk6NTQ6MzYKICAgICBbc3NoLmhdCiAgICAgdXNlIHNzaCB1aWQKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzA4IDIxOjA2OjM0CiAgICAgW3NzaC5oXQogICAgIG1vdmUgdG8gc3NoZC5zc2hkIGluc3RlYWQKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzExIDIwOjI0OjQ4CiAgICAgW3NzaC5oXQogICAgIHR5cG8gaW4gY29tbWVudAogICAtIGl0b2p1bkBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8xMyAwMjozNzozOQogICAgIFthdXRoLXNrZXkuYyBhdXRoMi5jXQogICAgIGxlc3Mgd2FybmluZ3MuICBza2V5X3tyZXNwb25kLHF1ZXJ5fSBhcmUgcHVibGljIChpbiBhdXRoLmgpCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzEzIDIwOjQ0OjU4CiAgICAgW2F1dGgtb3B0aW9ucy5jIGF1dGguYyBhdXRoLmhdCiAgICAgbW92ZSB0aGUgcGFja2V0X3NlbmRfZGVidWcgaGFuZGxpbmcgZnJvbSBhdXRoLW9wdGlvbnMuYyB0byBhdXRoLmM7IAogICAgIG9rIHByb3Zvc0AKICAgLSBtaWxsZXJ0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzEzIDE1OjUzOjE5CiAgICAgW3NzaGQuY10KICAgICBDYWxsIHNldHNpZCgpIGluIHRoZSBjaGlsZCBhZnRlciBzc2hkIGFjY2VwdHMgdGhlIGNvbm5lY3Rpb24gYW5kIGZvcmtzLgogICAgIFRoaXMgaXMgbmVlZGVkIGZvciBwcml2c2VwIHdoaWNoIGNhbGxzIHNldGxvZ2luKCkgd2hlbiBpdCBjaGFuZ2VzIHVpZHMuCiAgICAgV2l0aG91dCB0aGlzLCB0aGVyZSBpcyBhIHJhY2Ugd2hlcmUgdGhlIGxvZ2luIG5hbWUgb2YgYW4gZXhpc3RpbmcgCiAgICAgY29ubmVjdGlvbiwgYXMgcmV0dXJuZWQgYnkgZ2V0bG9naW4oKSwgbWF5IGJlIGNoYW5nZWQgdG8gdGhlIHByaXZzZXAgCiAgICAgdXNlciAoc3NoZCkuICBtYXJrdXNAIE9LCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzEzIDIxOjI2OjQ5CiAgICAgW2F1dGgtcmhvc3RzLmNdCiAgICAgaGFuZGxlIGRlYnVnIG1lc3NhZ2VzIGR1cmluZyByaG9zdHMtcnNhIGFuZCBob3N0YmFzZWQgYXV0aGVudGljYXRpb247IAogICAgIG9rIHByb3Zvc0AKICAgLSBtb3VyaW5nQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzE1IDE1OjQ3OjQ5CiAgICAgW2tleC5jIG1vbml0b3IuYyBtb25pdG9yX3dyYXAuYyBzc2hkLmNdCiAgICAgJ21vbml0b3InIHZhcmlhYmxlIGNsYXNoZXMgd2l0aCBhdCBsZWFzdCBvbmUgbGFtZSBwbGF0Zm9ybSAoTmVYVCkuICBpCiAgICAgUmVuYW1lZCB0byAncG1vbml0b3InLiAgcHJvdm9zQAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMDQgMDI6Mzk6MzUKICAgICBbc2VydmNvbmYuYyBzc2hkLjggc3NoZF9jb25maWddCiAgICAgZW5hYmxlIHByaXZzZXAgYnkgZGVmYXVsdDsgcHJvdm9zIG9rCiAgIC0gbWlsbGVydEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8wNiAyMzozNDozMwogICAgIFtzc2guMSBzc2hkLjhdCiAgICAgS2lsbC9hZGp1c3Qgcihsb2dpbnxleGVjKWQ/IHJlZmVyZW5jZXMgbm93IHRoYXQgdGhvc2UgYXJlIG5vIGxvbmdlciBpbgogICAgIHRoZSB0cmVlLgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8xNSAyMTowMjo1MwogICAgIFtzZXJ2Y29uZi5jIHNzaGQuOCBzc2hkX2NvbmZpZ10KICAgICBkaXNhYmxlIHByaXZzZXAgYW5kIGVuYWJsZSBzZXR1aWQgZm9yIHRoZSAzLjIuMiByZWxlYXNlCiAtIChiYWwpIEZpeGVkIHVwIFBBTSBjYXNlLiAgSSB0aGluay4KIC0gKGJhbCkgQ2xhcmlmaWVkIG9wZW5ic2QtY29tcGF0LyotY3JheS4qIExpY2VuY2UgcHJvdmlkZWQgYnkgV2VuZHkKIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8xNSAyMTowNToyOQogICAgIFt2ZXJzaW9uLmhdCiAgICAgZW50ZXIgT3BlblNTSF8zLjIuMgogLSAoYmFsKSBDYWxkYXJhLCBTdXNlLCBhbmQgUmVkaGF0IG9wZW5zc2guc3BlY3MgdXBkYXRlZC4KCjIwMDIwNTE0CiAtIChzdGV2ZXNrKSBbUkVBRE1FLnByaXZzZXBdIFBBTStwcml2c2VwIHdvcmtzIHdpdGggU29sYXJpcyA4LgogLSAodGltKSBbc3NocHR5LmNdIHNldCB0dHkgbW9kZXMgd2hlbiBhbGxvY2F0aW5nIG9sZCBzdHlsZSBic2QgcHR5cyB0bwogICBtYXRjaCB3aGF0IG5ld2VyIHN0eWxlIHB0eXMgaGF2ZSB3aGVuIGFsbG9jYXRlZC4gQmFzZWQgb24gYSBwYXRjaCBieQogICBSb2dlciBDb3JuZWxpdXMgPHJhY0B0ZW56aW5nLm9yZz4KIC0gKHRpbSkgW1JFQURNRS5wcml2c2VwXSBVbml4V2FyZSA3IGFuZCBPcGVuVU5JWCA4IHdvcmsuCiAtICh0aW0pIFtSRUFETUUucHJpdnNlcF0gcmVtb3ZlIHJlZmVyZW5jZSB0byBVbml4V2FyZSA3IGFuZCBPcGVuVU5JWCA4CiAgIGZyb20gUEFNLWVuYWJsZWQgcHJhZ3JhcGguIFVuaXhXYXJlIGhhcyBubyBQQU0uCiAtICh0aW0pIFtjb250cmliL2NhbGRlcmEvb3BlbnNzaC5zcGVjXSB1cGRhdGUgdmVyc2lvbi4KCjIwMDIwNTEzCiAtIChzdGV2ZXNrKSBhZGQgaW5pdGlhbCBSRUFETUUucHJpdnNlcAogLSAoc3RldmVzaykgW2NvbmZpZ3VyZS5hY10gbmljZXIgbWVzc2FnZTogLS13aXRoLXByaXZzZXAtdXNlcj11c2VyCiAtIChkam0pIEFkZCAtLXdpdGgtc3VwZXJ1c2VyLXBhdGg9eHh4IGNvbmZpZ3VyZSBvcHRpb24gdG8gc3BlY2lmeSAKICAgd2hhdCAkUEFUSCB0aGUgc3VwZXJ1c2VyIHJlY2VpdmVzLgogLSAoZGptKSBCdWcgIzIzMTogVXNlUHJpdmlsZWdlU2VwYXJhdGlvbiB0dXJucyBvZmYgQmFubmVyLgogLSAoZGptKSBBZGQgLS13aXRoLXByaXZzZXAtcGF0aCBjb25maWd1cmUgb3B0aW9uCiAtIChkam0pIFVwZGF0ZSBSUE0gc3BlYyBmaWxlOiBkaWZmZXJlbnQgc3VwZXJ1c2VyIHBhdGgsIHVzZQogICAvdmFyL2VtcHR5L3NzaGQgZm9yIHByaXZzZXAKIC0gKGRqbSkgQnVnICMyMzQ6IG1pc3NpbmcgcmVhZHBhc3NwaHJhc2UgZGVjbGFyYXRpb24gYW5kIGRlZmluZXMKIC0gKGRqbSkgQWRkIElOU1RBTEwgd2FybmluZyBhYm91dCBTU0ggcHJvdG9jb2wgMSBibG93ZmlzaCB3LyAKICAgIE9wZW5TU0wgPCAwLjkuNgoKMjAwMjA1MTEKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gYXBwbGllZCBhIHJld29yayBvZiBkam0ncyBPcGVuU1NMIHNlYXJjaCBjbGVhbnVwIHBhdGNoLgogICBOb3cgb25seSBzZWFyY2hlcyBzeXN0ZW0gYW5kIC91c3IvbG9jYWwvc3NsIChPcGVuU1NMJ3MgZGVmYXVsdCBpbnN0YWxsIHBhdGgpCiAgIE90aGVycyBtdXN0IHVzZSAtLXdpdGgtc3NsLWRpcj0uLi4uCiAtICh0aW0pIFttb25pdG9yX2ZkcGFzcy5jXSBmaXggZm9yIHN5c3RlbXMgdGhhdCBoYXZlIGJvdGgKICAgSEFWRV9BQ0NSSUdIVFNfSU5fTVNHSERSIGFuZCBIQVZFX0NPTlRST0xfSU5fTVNHSERSLiBJZS4gc3lzL3NvY2tldC5oIAogICBoYXMgI2RlZmluZSBtc2dfYWNjcmlnaHRzIG1zZ19jb250cm9sCgoyMDAyMDUxMAogLSAoc3RldmVzaykgW2F1dGguY10gU2hhZG93IGFjY291bnQgYW5kIGV4cGlyYXRpb24gY2xlYW51cC4gIE5vdwogICBjaGVjayBmb3Igcm9vdCBmb3JjZWQgZXhwaXJlLiAgU3RpbGwgZG9uJ3QgY2hlY2sgZm9yIGluYWN0aXZlLgogLSAoZGptKSBSZXdvcmsgUmVkSGF0IFJQTSBmaWxlcy4gQmFzZWQgb24gc3BlYyBmcm9tIE5hbGluIAogICBEYWh5YWJoYWkgPG5hbGluQHJlZGhhdC5jb20+IGFuZCBwYXRjaGVzIGZyb20gCiAgIFBla2thIFNhdm9sYSA8cGVra2FzQG5ldGNvcmUuZmk+CiAtIChkam0pIFRyeSB0byBkcm9wIHN1cHBsZW1lbnRhbCBncm91cHMgYXQgZGFlbW9uIHN0YXJ0dXAuIFBhdGNoIGZyb20gCiAgIFJlZEhhdAogLSAoYmFsKSBCYWNrIGFsbCB0aGUgd2F5IG91dCBvZiBhdXRoLXBhc3N3ZC5jIGNoYW5nZXMuICBCcmVha3MgdG9vIG1hbnkKICAgdGhpbmdzIHRoYXQgZG9uJ3Qgc2V0IHB3LT5wd19wYXNzd2QuCgoyMDAyMDUwOQogLSAodGltKSBbTWFrZWZpbGUuaW5dIFVuYnJlYWsgbWFrZSAtZiBNYWtlZmlsZS5pbiBkaXN0cHJlcAoKMjAwMjA1MDgKIC0gKHRpbSkgW29wZW5ic2QtY29tcGF0L2JzZC1hcmM0cmFuZG9tLmNdIGZpeCBsb2dpYyBvbiB3aGVuIHNlZWRfcm5nKCkgaXMKICAgY2FsbGVkLiBSZXBvcnQgYnkgQ2hyaXMgTWF4d2VsbCA8bWF4d2VsbEBjcy5kYWwuY2E+CiAtICh0aW0pIFtNYWtlZmlsZS5pbiBjb25maWd1cmUuYWNdIHNldCBTSEVMTCB2YXJpYWJsZSBpbiBNYWtlZmlsZQogLSAoZGptKSBEaXNhYmxlIFBBTSBrYmQtaW50IGF1dGggaWYgcHJpdnNlcCBpcyB0dXJuZWQgb24gKGl0IGRvZXNuJ3Qgd29yaykKCjIwMDIwNTA3CiAtICh0aW0pIFtjb25maWd1cmUuYWMgb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuYyBvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5oXQogICBBZGQgdHJ1bmNhdGUoKSBlbXVsYXRpb24gdG8gYWRkcmVzcyBCdWcgMjA4CgoyMDAyMDUwNgogLSAoZGptKSBVbmJyZWFrIGF1dGgtcGFzc3dkLmMgZm9yIFBBTSBhbmQgU0lBCiAtIChkam0pIFVuYnJlYWsgUEFNIGF1dGggZm9yIHByb3RvY29sIDEuIFJlcG9ydCBmcm9tIFBla2thIFNhdm9sYSAKICAgPHBla2thc0BuZXRjb3JlLmZpPgogLSAoZGptKSBEb24ndCByZWluaXRpYWxpc2UgUEFNIGNyZWRlbnRpYWxzIGJlZm9yZSB3ZSBoYXZlIHN0YXJ0ZWQgUEFNLgogICBSZXBvcnQgZnJvbSBQZWtrYSBTYXZvbGEgPHBla2thc0BuZXRjb3JlLmZpPgogICAKMjAwMjA1MDYKIC0gKGJhbCkgRml4ZWQgYXV0aC1wYXNzd2QuYyB0byByZXNvbHZlIFBlcm1pdEVtcHR5UGFzc3dvcmQgaXNzdWUKIAoyMDAyMDUwMQogLSAoZGptKSBJbXBvcnQgT3BlbkJTRCByZWdyZXNzaW9uIHRlc3RzLiBSZXF1aXJlcyBCU0QgbWFrZSB0byBydW4KIC0gKGRqbSkgRml4IHJlYWRwYXNzcGhhc2UgY29tcGlsYXRpb24gZm9yIHN5c3RlbXMgd2hpY2ggaGF2ZSBpdAoKMjAwMjA0MjkKIC0gKHRpbSkgW2NvbnRyaWIvY2FsZGVyYS9vcGVuc3NoLnNwZWNdIHVwZGF0ZSBmaXhVUCB0byByZWZsZWN0IGNoYW5nZXMgaW4KICAgc3NoZF9jb25maWcuCiAtICh0aW0pIFtjb250cmliL2N5Z3dpbi9SRUFETUVdIHJlbW92ZSByZWZlcmVuY2UgdG8gcmVnZXguCiAgIHBhdGNoIGZyb20gQ29yaW5uYSBWaW5zY2hlbiA8dmluc2NoZW5AcmVkaGF0LmNvbT4KCjIwMDIwNDI2CiAtIChkam0pIEJ1ZyAjMTM3LCAjMjA5OiBmaXggbWFrZSBwcm9ibGVtcyBmb3Igc2NhcmQvU3NoLmJpbiwgZG8gdXVkZWNvZGUKICAgZHVyaW5nIGRpc3RwcmVwIG9ubHkKIC0gKGRqbSkgRGlzYWJsZSBQQU0gcGFzc3dvcmQgZXhwaXJ5IHVudGlsIGEgY29tcGxldGUgZml4IGZvciBidWcgIzE4OCAKICAgZXhpc3RzCiAtIChkam0pIEJ1ZyAjMTgwOiBTZXQgVG9TIGJpdHMgb24gSVB2NC1pbi1JUHY2IG1hcHBlZCBhZGRyZXNzZXMuIEJhc2VkIG9uIAogICBwYXRjaCBmcm9tIG9wZW5zc2hAbWlzYy50ZWNxLm9yZwoKMjAwMjA0MjUKIC0gKHN0ZXZlc2spIFtkZWZpbmVzLmhdIHJlbW92ZSBVU0VfVElNRVZBTDsgdW51c2VkCiAtIChzdGV2ZXNrKSBbYWNjb25maWcuaCBhdXRoLXBhc3N3ZC5jIGNvbmZpZ3VyZS5hYyBzc2hkLmNdIEhQLVVYIDEwLjI2CiAgIHN1cHBvcnQuICBidWcgIzE4NC4gIG1vc3QgZnJvbSBkY29sZUBrZXlzb2Z0c3lzLmNvbS4KCjIwMDIwNDI0CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMjMgMTI6NTQ6MTAKICAgICBbdmVyc2lvbi5oXQogICAgIDMuMi4xCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzIzIDIyOjE2OjI5CiAgICAgW3NzaGQuY10KICAgICBJbXByb3ZlIGVycm9yIG1lc3NhZ2U7IG9rIG1hcmt1c0Agc3RldmVza0AKCjIwMDIwNDIzCiAtIChzdGV2ZXNrKSBbYWNjb25maWcuaCBjb25maWd1cmUuYWMgc2Vzc2lvbi5jXSBMT0dJTl9OT19FTkRPUFQgZm9yIEhQLVVYCiAtIChzdGV2ZXNrKSBbYWNjb25maWcuaF0gTkVFRF9JTl9TWVNUTV9IIHVudXNlZAogLSAobWFya3VzKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzIzIDEyOjU4OjI2CiAgICAgW3JhZGl4LmNdCiAgICAgc2VuZCBjb21wbGV0ZSB0aWNrZXQ7IHNlbWVyYWRAc3MxMDAwLm1zLm1mZi5jdW5pLmN6CiAtIChkam0pIFRyaW0gQ2hhbmdlTG9nIHRvIGluY2x1ZGUgb25seSBwb3N0LTMuMSBjaGFuZ2VzCiAtIChkam0pIFVwZGF0ZSBSUE0gc3BlYyBmaWxlIHZlcnNpb25zCiAtIChkam0pIFJlZGhhdCBzcGVjIGVuYWJsZXMgS3JiViBieSBkZWZhdWx0CiAtIChkam0pIEFwcGxpZWQgT3BlblNDIHNtYXJ0Y2FyZCB1cGRhdGVzIGZyb20gTWFya3VzICYgCiAgIEFudHRpIFRhcGFuaW5lbiA8YWV0QGNjLmh1dC5maT4KIC0gKGRqbSkgRGVmaW5lIEJST0tFTl9SRUFMUEFUSCBmb3IgQUlYLCBwYXRjaCBmcm9tIAogICBBbnR0aSBUYXBhbmluZW4gPGFldEBjYy5odXQuZmk+CiAtIChkam0pIEJ1ZyAjMjE0OiBGaXggdXRtcCBmb3IgSXJpeCAoZG9uJ3Qgc3RyaXAgInR0eSIpLiBQYXRjaCBmcm9tIAogICBLZXZpbiBUYXlsb3IgPG5vQG5vd2hlcmUub3JnPiAoPz8pIHZpYSBQaGlsaXBwIEdyYXUKICAgPHBoZ3JhdUB6ZWRhdC5mdS1iZXJsaW4uZGU+CiAtIChkam0pIEJ1ZyAjMjEzOiBTaW1wbGlmeSBDTVNHX0FMSUdOIG1hY3JvcyB0byBhdm9pZCBzeW1ib2wgY2xhc2hlcy4gCiAgIFJlcG9ydGVkIGJ5IERvdWcgTWFudG9uIDxkbWFudG9uQGVtZWEuYXR0LmNvbT4KIC0gKGRqbSkgQnVnICMyMjI6IEZpeCB0ZXN0cyBmb3IgZ2V0YWRkcmluZm8gb24gT1NGLzEuIFNwb3R0ZWQgYnkKICAgUm9iZXJ0IFVyYmFuIDx1cmJhbkBzcGllbHdpZXNlLmRlPgogLSAoZGptKSBCdWcgIzIwNiAtIGJsaWJwYXRoIGlzbid0IGFsd2F5cyBuZWVkZWQgZm9yIEFJWCBsZCwgYXZvaWQgCiAgIHNpemVvZihsb25nIGxvbmcgaW50KSA9PSA0IGJyZWFrYWdlLiBQYXRjaCBmcm9tIE1hdHRoZXcgQ2xhcmtlCiAgIDxNYXR0aGV3X0NsYXJrZUBtaW5kbGluay5iYy5jYT4KIC0gKGRqbSkgTWFrZSBwcml2c2VwIHdvcmsgd2l0aCBQQU0gKHN0aWxsIGV4cGVyaW1lbnRhbCkKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMjAgMDk6MDI6MDMKICAgICBbc2VydmNvbmYuY10KICAgICBObywgYWZzIHJlcXVpcmVzIGV4cGxpY2l0IGVuYWJsaW5nCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzIwIDA5OjE0OjU4CiAgICAgW2J1ZmF1eC5jIGJ1ZmF1eC5oXQogICAgIGFkZCBidWZmZXJfe2dldCxwdXR9X3Nob3J0CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzIwIDA5OjE3OjE5CiAgICAgW3JhZGl4LmNdCiAgICAgcmV3cml0ZSB1c2luZyB0aGUgYnVmZmVyXyogQVBJLCBmaXhlcyBvdmVyZmxvdzsgb2sgZGVyYWFkdEAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzIxIDE2OjE5OjI3CiAgICAgW3NzaGQuOCBzc2hkX2NvbmZpZ10KICAgICBkb2N1bWVudCBkZWZhdWx0IEFGU1Rva2VuUGFzc2luZyBubzsgb2sgZGVyYWFkdEAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzIxIDE2OjI1OjA2CiAgICAgW3NzaGNvbm5lY3QxLmNdCiAgICAgc3BlbGxpbmcgaW4gZXJyb3IgbWVzc2FnZTsgb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8yMiAwNjoxNTo0NwogICAgIFtyYWRpeC5jXQogICAgIGZpeCBjaGVjayBmb3Igb3ZlcmZsb3cKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMjIgMTY6MTY6NTMKICAgICBbc2VydmNvbmYuYyBzc2hkLjggc3NoZF9jb25maWddCiAgICAgZG8gbm90IGF1dG8tZW5hYmxlIEtlcmJlcm9zQXV0aGVudGljYXRpb247IG9rIGRqbUAsIHByb3Zvc0AsIGRlcmFhZHRACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzIyIDIxOjA0OjUyCiAgICAgW2NoYW5uZWxzLmMgY2xpZW50bG9vcC5jIGNsaWVudGxvb3AuaCBzc2guY10KICAgICByZXF1ZXN0IHJlcGx5IChzdWNjZXNzL2ZhaWx1cmUpIGZvciAtUiBzdHlsZSBmd2QgaW4gcHJvdG9jb2wgdjIsCiAgICAgZGVwZW5kcyBvbiBvcmRlcmVkIHJlcGxpZXMuCiAgICAgZml4ZXMgaHR0cDovL2J1Z3ppbGxhLm1pbmRyb3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU7IG9rIHByb3Zvc0AKCjIwMDIwNDIxCiAtICh0aW0pIFtlbnRyb3B5LmMuXSBQb3J0YWJpbGl0eSBmaXggZm9yIFNDTyBVbml4IDMuMnY0LnggKFNDTyBPU1IgMy4wKS4KICAgZW50cm9weS5jIG5lZWRzIHNldGV1aWQoZ2V0dWlkKCkpIGZvciB0aGUgc2V0dWlkKG9yaWdpbmFsX3VpZCkgdG8gCiAgIHN1Y2NlZWQuIFBhdGNoIGJ5IGdlcnRAZ3JlZW5pZS5tdWMuZGUuIFRoaXMgZml4ZXMgb25lIHBhcnQgb2YgQnVnIDIwOAoKMjAwMjA0MTgKIC0gKGRqbSkgQXZvaWQgU0lHQ0hMRCBicmVha2FnZSB3aGVuIHJ1biBmcm9tIHJzeW5jLiBGaXggZnJvbSAKICAgU3R1cmxlIFN1bmRlIDxzdHVybGUuc3VuZGVAdXNpdC51aW8ubm8+CgoyMDAyMDQxNwogLSAoZGptKSBUZWxsIHVzZXJzIHRvIGNvbmZpZ3VyZSAvZGV2L3JhbmRvbSBzdXBwb3J0IGludG8gT3BlblNTTCBpbiAKICAgSU5TVEFMTAogLSAoZGptKSBGaXggLk5tIGluIG1kb2MybWFuLnBsIGZyb20gcHNwZW5jZXJAZmllbGRzLnV0b3JvbnRvLmNhCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIElzc3VlIHdhcm5pbmcgb24gLS13aXRoLWRlZmF1bHQtcGF0aD0vc29tZV9wYXRoCiAgIGlmIExPR0lOX0NBUCBpcyBlbmFibGVkLiBSZXBvcnQgJiB0ZXN0aW5nIGJ5IFR1YyA8dHVjQHR0c2cuY29tPgoKMjAwMjA0MTUKIC0gKGRqbSkgVW5icmVhayAibWFrZSBpbnN0YWxsIi4gRml4IGZyb20gRGFycmVuIFR1Y2tlciAKICAgPGR0dWNrZXJAemlwLmNvbS5hdT4KIC0gKHN0ZXZlc2spIGJzZC1jeWd3aW5fdXRpbC5bY2hdIEJTRCBsaWNlbnNlIGZyb20gQ29yaW5uYSBWaW5zY2hlbgogLSAodGltKSBbY29uZmlndXJlLmFjXSBhZGQgdGVzdHMgZm9yIHJlY3Ztc2cgYW5kIHNlbmRtc2cuCiAgIFttb25pdG9yX2ZkcGFzcy5jXSBhZGQgY2hlY2tzIGZvciBIQVZFX1NFTkRNU0cgYW5kIEhBVkVfUkVDVk1TRyBmb3IKICAgc3lzdGVtcyB0aGF0IEhBVkVfQUNDUklHSFRTX0lOX01TR0hEUiBidXQgbm8gcmVjdm1zZyBvciBzZW5kbXNnLgoKMjAwMjA0MTQKIC0gKGRqbSkgc3NoLXJhbmQtaGVscGVyIGltcHJvdmVtZW50cwogICAtIEFkZCBjb21tYW5kbGluZSBkZWJ1Z2dpbmcgb3B0aW9ucwogICAtIERvbid0IHdyaXRlIGJpbmFyeSBkYXRhIGlmIHN0ZG91dCBpcyBhIHR0eSAodXNlIGhleCBpbnN0ZWFkKQogICAtIEdpdmUgaXQgYSBtYW5wYWdlCiAtIChkam0pIFJhbmRvbSBudW1iZXIgY29sbGVjdGlvbiBkb2MgZml4ZXMgZnJvbSBCZW4KCjIwMDIwNDEzCiAtIChkam0pIEFkZCBLcmJWIHN1cHBvcnQgcGF0Y2ggZnJvbSBTaW1vbiBXaWxraW5zb24gPHNpbW9uQHN4dy5vcmcudWs+CgoyMDAyMDQxMgogLSAoc3RldmVzaykgW2F1dGgtc2lhLltjaF1dIGFkZCBCU0QgbGljZW5zZSBmcm9tIENocmlzIEFkYW1zCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIGFkZCA8c3lzL3R5cGVzLmg+IHRvIG1zZ2hkciB0ZXN0cy4gQ2hhbmdlIC1MCiAgIHRvIC1oIG9uIHRlc3RpbmcgZm9yIC9iaW4gYmVpbmcgc3ltYm9saWMgbGluawogLSAoYmFsKSBNaXN0YWtlbiBpbiBDeWd3aW4gc2NyaXB0cyBmb3Igc3NoIHN0YXJ0aW5nLiAgUGF0Y2ggYnkKICAgQ29yaW5uYSBWaW5zY2hlbiA8dmluc2NoZW5AcmVkaGF0LmNvbT4gCiAtIChiYWwpIGRpc2FibGUgcHJpdnNlcCBpZiBubyBNQVBfQU5PTi4gIFdlIGNhbiByZS1lbmFibGUgaXQKICAgYWZ0ZXIgdGhlIHJlbGVhc2Ugd2hlbiB3ZSBjYW4gZG8gbW9yZSB0ZXN0aW5nLgoKMjAwMjA0MTEKIC0gKHN0ZXZlc2spIFthdXRoLXNpYS5jXSBjbGVhbnVwCiAtICh0aW0pIFthY2NvbmZpZy5oIGRlZmluZXMuaCBpbmNsdWRlcy5oXSBwdXQgaW5jbHVkZXMgaW4gaW5jbHVkZXMuaCBhbmQKICAgZGVmaW5lcyBpbiBkZWZpbmVzLmggW3Jpam5kYWVsLmMgb3BlbmJzZC1jb21wYXQvZmFrZS1zb2NrZXQuaAogICBvcGVuYnNkLWNvbXBhdC9pbmV0X2F0b24uY10gaW5jbHVkZSAiaW5jbHVkZXMuaCIgaW5zdGVhZCBvZiAiY29uZmlnLmgiCiAgIG9rIHN0ZXZlc2tACgoyMDAyMDQxMAogLSAoc3RldmVzaykgW2NvbmZpZ3VyZS5hYyBtb25pdG9yLmNdIEhBVkVfU09DS0VUUEFJUgogLSAoc3RldmVzaykgW2F1dGgtc2lhLmNdIGNvbXBpbGUgZml4IENocmlzIEFkYW1zIDxjbWFkYW1zQGhpd2FheS5uZXQ+CiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMTAgMDg6MjE6NDcKICAgICBbYXV0aDEuYyBjb21wYXQuYyBjb21wYXQuaF0KICAgICBzdHJpcCAnQCcgZnJvbSB1c2VybmFtZSBvbmx5IGZvciBLZXJiViBhbmQga25vd24gYnJva2VuIGNsaWVudHMsIAogICAgIGJ1ZyAjMjA0CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzEwIDA4OjU2OjAxCiAgICAgW3ZlcnNpb24uaF0KICAgICBPcGVuU1NIXzMuMgogLSBBZGRlZCBwMSB0byBpZGVuaWZ5IFBvcnRhYmxlIHJlbGVhc2UgdmVyc2lvbi4KCjIwMDIwNDA4CiAtIChiYWwpIE1pbm9yIE9wZW5TQyB1cGRhdGVzLiAgRml4IHVwIGhlYWRlciBsb2NhdGlvbnMgYW5kIHVwZGF0ZQogICBSRUFETUUuc21hcnRjYXJkIHByb3ZpZGVkIGJ5IEp1aGEgWXJq9mzkIDxqeXJqb2xhQGNjLmh1dC5maT4KCjIwMDIwNDA3CiAtIChzdGV2ZXNrKSBIQVZFX0NPTlRST0xfSU5fTVNHSERSOyBub3QgdXNlZCByaWdodCBub3cuCiAgIEZ1dHVyZTogd2UgbWF5IHdhbnQgdG8gdGVzdCBpZiBmZCBwYXNzaW5nIHdvcmtzIGNvcnJlY3RseS4KIC0gKHN0ZXZlc2spIFttb25pdG9yX2ZkcGFzcy5jXSBmYXRhbCgpIGZvciBVc2VQcml2aWxlZ2VTZXBhcmF0aW9uPXllcwogICBhbmQgbm8gZmQgcGFzc2luZyBzdXBwb3J0LgogLSAoc3RldmVzaykgSEFWRV9NTUFQIGFuZCBIQVZFX1NZU19NTUFOX0ggYW5kIHVzZSB0aGVtIGluCiAgIG1vbml0b3JfbW0uYwogLSAoc3RldmVzaykgcmVtb3ZlIGNvbmZpZ3VyZSBzdXBwb3J0IGZvciBwb2xsLmg7IGl0IHdhcyByZW1vdmVkCiAgIGZyb20gc3NoZC5jIGEgbG9uZyB0aW1lIGFnby4KIC0gKHN0ZXZlc2spIC0td2l0aC1wcml2c2VwLXVzZXI7IGRlZmF1bHQgc3NoZAogLSAoc3RldmVzaykgd3JhcCBtdW5tYXAoKSB3aXRoIEhBVkVfTU1BUCBhbHNvLgoKMjAwMjA0MDYKIC0gKGRqbSkgVHlwbyBpbiBTdXNlIFNQRUMgZmlsZS4gRml4IGZyb20gQ2Fyc3RlbiBHcm9obWFubiAKICAgPGNhcnN0ZW4uZ3JvaG1hbm5AZHItYmFsZGV3ZWcuZGU+CiAtIChiYWwpIEFkZGVkIE1BUF9GQUlMRUQgdG8gYWxsb3cgQUlYIGFuZCBUcnVzdGVkIEhQIHRvIGNvbXBpbGUuCiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMDYgMDA6MzA6MDgKICAgICBbc2Z0cC1jbGllbnQuY10KICAgICBGaXggb2NjYXNpb25hbCBjb3JydXB0aW9uIG9uIHVwbG9hZCBkdWUgdG8gYmFkIHJldXNlIG9mIHJlcXVlc3QgCiAgICAgaWQsIHNwb3R0ZWQgYnkgY2hvbWJpZXJAbWFjLmNvbTsgb2sgbWFya3VzQAogICAtIG1vdXJpbmdAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMDYgMTg6MjQ6MDkKICAgICBbc2NwLmNdCiAgICAgRml4ZXMgcG90ZW50YWwgZG91YmxlIC8vIHdpdGhpbiBwYXRoLgogICAgIGh0dHA6Ly9idWd6aWxsYS5taW5kcm90Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYKIC0gKGJhbCkgU2xpZ2h0IHVwZGF0ZSB0byBPcGVuU0Mgc3VwcG9ydC4gIEJldHRlciB2ZXJzaW9uIGNoZWNraW5nLiBwYXRjaAogICBieSBKdWhhIFlyavZs5CA8anlyam9sYUBjYy5odXQuZmk+IAogLSAoYmFsKSBSZXZlcmVkIG91dCBvZiBydW50aW1lIElSSVggZGV0ZWN0aW9uIG9mIGpvYmxpbWl0cy4gIENvZGUgaXMKICAgaW5jb21wbGV0ZS4KIC0gKGJhbCkgUXVpZXQgZG93biBjb25maWd1cmUuYWMgaWYgL2Jpbi90ZXN0IGRvZXMgbm90IGV4aXN0LgogLSAoYmFsKSBXZSBubyBsb25nZXIgdXNlIGF0ZXhpdCgpL3hhdGV4aXQoKS9vbl9leGl0KCkKCjIwMDIwNDA1CiAtIChiYWwpIFBhdGNoIGZvciBPcGVuU0MgU21hcnRDYXJkIGxpYnJhcnk7IG9rIG1hcmt1c0A7IHBhdGNoIGJ5CiAgIEp1aGEgWXJq9mzkIDxqeXJqb2xhQGNjLmh1dC5maT4KIC0gKGJhbCkgTWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGUgdG8gcmVmbGVjdCBzbWFydGNhcmQgbGlicmFyeQogICBzdXBwb3J0IGNoYW5nZXMuCiAtIChiYWwpIFRvbyBtYW55IDxzeXMvcXVldWUuaD4gaXNzdWVzLiAgUmVtb3ZlIGFsbCB3b3JrYXJvdW5kcyBhbmQKICAgdXNpbmcgaW50ZXJuYWwgdmVyc2lvbiBvbmx5LgogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8wNSAyMDo1NjoyMQogICAgIFtzc2hkLjhdCiAgICAgY2xhcmlmeSBzc2hyYyBzb21lIGFuZCBoYW5kbGUgWDExVXNlTG9jYWxob3N0PXllczsgb2sgbWFya3VzQAoKMjAwMjA0MDQKIC0gKHN0ZXZlc2spIFthdXRoLXBhbS5jIGF1dGgtcGFtLmggYXV0aC1wYXNzd2QuYyBhdXRoLXNpYS5jIGF1dGgtc2lhLmgKICAgIGF1dGgxLmMgYXV0aDIuY10gUEFNLCBPU0ZfU0lBIHBhc3N3b3JkIGF1dGggY2xlYW51cDsgZnJvbSBkam0uCiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMDMgMDk6MjY6MTEKICAgICBbY2lwaGVyLmMgbXlwcm9wb3NhbC5oXQogICAgIHJlLWFkZCByaWpuZGFlbC1jYmNAbHlzYXRvci5saXUuc2UgZm9yIE1hY1NTSDsgYXNoQGxhYi5wb2MubmV0CgoyMDAyMDQwMgogLSAoYmFsKSBIYW5kIFN5bmMgb2Ygc2NwLmMgKHJldmVydGVkIHRvIHVwc3RyZWFtIGNvZGUpCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8zMCAxNzo0NTo0NgogICAgIFtzY3AuY10KICAgICBzdHJldGNoIGJhbm5lcnMKIC0gKGJhbCkgQ1ZTIElEIHN5bmMgb2YgdWlkc3dhcC5jCiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMgKG5vdyBmb3IgdGhlIHJlYWwgc3luYykKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjcgMjI6MjE6NDUKICAgICBbc3NoLWtleWdlbi5jXQogICAgIHRyeSB0byBpbXBvcnQga2V5cyB3aXRoIGV4dHJhIHRyYWlsaW5nID09PSAoc2VlbiB3aXRoIHNzaC5jb20gPCAKICAgICAyLjAuMTIpCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI4IDE1OjM0OjUxCiAgICAgW3Nlc3Npb24uY10KICAgICBkbyBub3QgY2FsbCByZWNvcmRfbG9naW4gdHdpY2UgKGZvciB1c2VfcHJpdnNlcCkKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjkgMTg6NTk6MzIKICAgICBbc2Vzc2lvbi5jIHNlc3Npb24uaF0KICAgICByZXRyaWV2ZSBsYXN0IGxvZ2luIHRpbWUgYmVmb3JlIHRoZSBwdHkgaXMgYWxsb2NhdGVkLCBzdG9yZSBwZXIgCiAgICAgc2Vzc2lvbgogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjkgMTk6MTY6MjIKICAgICBbc3NoZC44XQogICAgIFJTQSBrZXkgbW9kdWx1cyBzaXplIG1pbmltdW0gNzY4OyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yOSAxOToxODozMwogICAgIFthdXRoLXJzYS5jIHNzaC1yc2EuYyBzc2guaF0KICAgICBtYWtlIFJTQSBtb2R1bHVzIG1pbmltdW0gI2RlZmluZTsgb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8zMCAxODo1MToxNQogICAgIFttb25pdG9yLmMgc2VydmVybG9vcC5jIHNmdHAtaW50LmMgc2Z0cC5jIHNzaGQuY10KICAgICBjaGVjayB3YWl0cGlkIGZvciBFSU5UUjsgYmFzZWQgb24gcGF0Y2ggZnJvbSBwZXRlckBpZm0ubGl1LnNlCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzAxIDIyOjAyOjE2CiAgICAgW3NmdHAtY2xpZW50LmNdCiAgICAgMjA0ODAgaXMgYW4gdXBwZXIgbGltaXQgZm9yIG9sZGVyIHNlcnZlcgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8wMSAyMjowNzoxNwogICAgIFtzZnRwLWNsaWVudC5jXQogICAgIGZhbGxiYWNrIHRvIHN0YXQgaWYgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgbHN0YXQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMDIgMTE6NDk6MzkKICAgICBbc3NoLWFnZW50LmNdCiAgICAgY2hlY2sgJFNIRUxMIGZvciAtayBhbmQgLWQsIHRvbzsKICAgICBodHRwOi8vYnVnemlsbGEubWluZHJvdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8wMiAxNzozNzo0OAogICAgIFtzZnRwLmNdCiAgICAgYWx3YXlzIGNhbGwgbG9nX2luaXQoKQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8wMiAyMDoxMTozOAogICAgIFtzc2gtcnNhLmNdCiAgICAgaWdub3JlIFNTSF9CVUdfU0lHQkxPQiBmb3Igc3NoLXJzYTsgIzE4NwogLSAoYmFsKSBtaXNwZWxsaW5nIGluIHVpZHN3YXAuYyAocG9ydGFibGUgb25seSkKCjIwMDIwNDAxCiAtIChzdGV2ZXNrKSBbbW9uaXRvci5jXSBQQU0gc2hvdWxkIHdvcmsgYWdhaW47IHdpbGwgKm5vdCogd29yayB3aXRoCiAgIFVzZVByaXZpbGVnZVNlcGFyYXRpb249eWVzLgogLSAoc3RldmVzaykgW2F1dGgxLmNdIGZpeCBwYXNzd29yZCBhdXRoIGZvciBwcm90b2NvbCAxIHdoZW4KICAgIVVTRV9QQU0gJiYgIUhBVkVfT1NGX1NJQTsgbWVyZ2UgaXNzdWUuCgoyMDAyMDMzMQogLSAodGltKSBbY29uZmlndXJlLmFjXSB1c2UgL2Jpbi90ZXN0IC1MIHRvIHdvcmsgYXJvdW5kIGJyb2tlbiBidWlsdGluIG9uCiAgIFNvbGFyaXMgOAogLSAodGltKSBbc3NoY29ubmVjdDIuY10gY2hhbmdlIHVpbnQzMl90IHRvIHVfaW50MzJfdAoKMjAwMjAzMzAKIC0gKHN0ZXZlc2spIFtjb25maWd1cmUuYWNdIHJlbW92ZSBoZWFkZXIgY2hlY2sgZm9yIHN5cy90dGNvbXBhdC5oCiAgIGJ1ZyAxNjcKCjIwMDIwMzI3CiAtIChiYWwpICdwdycgc2hvdWxkIGJlICdhdXRoY3R4dC0+cHcnIGluIGF1dGgxLmMgc3BvdHRlZCBieSAKICAga2VudEBseXNhdG9yLmxpdS5zZQogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI2IDExOjM0OjQ5CiAgICAgW3NzaC4xIHNzaGQuOF0KICAgICB1cGRhdGUgdG8gcmVjZW50IGRyYWZ0cwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNiAxMTozNzowNQogICAgIFtzc2guY10KICAgICB1cGRhdGUgQ29weXJpZ2h0CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI2IDE1OjIzOjQwCiAgICAgW2J1ZmF1eC5jXQogICAgIGRvIG5vdCB0YWxrIGFib3V0IHBhY2tldHMgaW4gYnVmYXV4CiAgIC0gcmVlc0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNiAxODo0Njo1OQogICAgIFtzY2FyZC5jXQogICAgIHRyeV9BVVQwIGluIHJlYWRfcHVia2V5IHRvbywgZm9yIHRob3NlIHBhcmFub2lkIGZldyB3aG8gd2FudCB0byAKICAgICBhY2wgJ3NoJwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNiAyMjo1MDozOQogICAgIFtjaGFubmVscy5oXQogICAgIENIQU5ORUxfRUZEX09VVFBVVF9BQ1RJVkUgaXMgZmFsc2UgZm9yIENIQU5fQ0xPU0VfUkNWRCwgdG9vCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI2IDIzOjEzOjAzCiAgICAgW2F1dGgtcnNhLmNdCiAgICAgZGlzYWxsb3cgUlNBIGtleXMgPCA3NjggZm9yIHByb3RvY29sIDEsIHRvbyAocmhvc3RzLXJzYSBhbmQgcnNhIGF1dGgpCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI2IDIzOjE0OjUxCiAgICAgW2tleC5jXQogICAgIGdlbmVyYXRlIGEgbmV3IGNvb2tpZSBmb3IgZWFjaCBTU0gyX01TR19LRVhJTklUIG1lc3NhZ2Ugd2Ugc2VuZCBvdXQKICAgLSBtb3VyaW5nQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI3IDExOjQ1OjQyCiAgICAgW21vbml0b3IuY10KICAgICBtb25pdG9yX2FsbG93ZWRfa2V5KCkgcmV0dXJucyBpbnQgaW5zdGVhZCBvZiBwb2ludGVyLiAgb2sgbWFya3VzQAogIAoyMDAyMDMyNQogLSAoc3RldmVzaykgaW1wb3J0IE9wZW5CU0QgPHN5cy90cmVlLmg+IGFzICJvcGVuYnNkLWNvbXBhdC90cmVlLmgiCiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIzIDIwOjU3OjI2CiAgICAgW3NzaGQuY10KICAgICBzZXRwcm9jdGl0bGUoKSBhZnRlciBwcmVhdXRoIGNoaWxkOyBvayBtYXJrdXNACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI0IDE2OjAwOjI3CiAgICAgW3NlcnZlcmxvb3AuY10KICAgICByZW1vdmUgdW51c2VkIGRlYnVnCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI0IDE2OjAxOjEzCiAgICAgW3BhY2tldC5jXQogICAgIGRlYnVnLT5kZWJ1ZzMgZm9yIGV4dHJhIHBhZGRpbmcKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI0IDE3OjI3OjAzCiAgICAgW2tleGdleC5jXQogICAgIHR5cG87IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI0IDE3OjUzOjE2CiAgICAgW21vbml0b3JfZmRwYXNzLmNdCiAgICAgbWlub3IgY2xlYW51cCBhbmQgbW9yZSBlcnJvciBjaGVja2luZzsgb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNCAxODowNToyOQogICAgIFtzY2FyZC5jXQogICAgIHdlIG5lZWQgdG8gZmlndXJlIG91dCBBVVQwIGZvciBzY19wcml2YXRlX2VuY3J5cHQsIHRvbwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjQgMjM6MjA6MDAKICAgICBbbW9uaXRvci5jXQogICAgIHJlbW92ZSAiXG4iIGZyb20gZmF0YWwoKQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNSAwOToyMToxMwogICAgIFthdXRoLXJzYS5jXQogICAgIHJldHVybiAwIChub3QgTlVMTCk7IHRvbWhAcG8uY3JsLmdvLmpwCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI1IDA5OjI1OjA2CiAgICAgW2F1dGgtcmgtcnNhLmNdCiAgICAgcm0gYm9ndXMgY29tbWVudAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNSAxNzozNDoyNwogICAgIFtzY2FyZC5jIHNjYXJkLmggc3NoLWFnZW50LmMgc3NoLWtleWdlbi5jIHNzaC5jXQogICAgIGNoYW5nZSBzY19nZXRfa2V5IHRvIHNjX2dldF9rZXlzIGFuZCBoaWRlIHNtYXJ0Y2FyZCBkZXRhaWxzIGluIHNjYXJkLmMKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI1IDIwOjEyOjEwCiAgICAgW21vbml0b3JfbW0uYyBtb25pdG9yX3dyYXAuY10KICAgICBzc2l6ZV90IGFyZ3MgdXNlICIlbGQiIGFuZCBjYXN0IHRvIChsb25nKQogICAgIHNpemVfdCBhcmdzIHVzZSAiJWx1IiBhbmQgY2FzdCB0byAodV9sb25nKQogICAgIG9rIG1hcmt1c0AgYW5kIHRoYW5rcyBtaWxsZXJ0QAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNSAyMTowNDowMgogICAgIFtzc2guY10KICAgICBzaW1wbGlmeSBudW1faWRlbnRpdHlfZmlsZXMgaGFuZGxpbmcKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjUgMjE6MTM6NTEKICAgICBbY2hhbm5lbHMuYyBjaGFubmVscy5oIGNvbXBhdC5jIGNvbXBhdC5oIG5jaGFuLmNdCiAgICAgZG9uJ3Qgc2VuZCBzdGRlcnIgZGF0YSBhZnRlciBFT0YsIGFjY2VwdCB0aGlzIGZyb20gb2xkZXIga25vd24gCiAgICAgKGJyb2tlbikgc3NoZCBzZXJ2ZXJzIG9ubHksIGZpeGVzCiAgICAgaHR0cDovL2J1Z3ppbGxhLm1pbmRyb3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzkKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI2IDAzOjI0OjAxCiAgICAgW21vbml0b3IuaCBtb25pdG9yX2ZkcGFzcy5oIG1vbml0b3JfbW0uaCBtb25pdG9yX3dyYXAuaF0KICAgICAkT3BlbkJTRCQKCjIwMDIwMzI0CiAtIChzdGV2ZXNrKSBbc2Vzc2lvbi5jXSBkaXNhYmxlIExPR0lOX05FRURTX1RFUk0gdW50aWwgd2UgYXJlIHN1cmUKICAgaXQgY2FuIGJlIHJlbW92ZWQuIG9ubHkgdXNlZCBvbiBzb2xhcmlzLiB3aWxsIG5vIGxvbmdlciBjb21waWxlIHdpdGgKICAgcHJpdnNlcCBzaHVmZmxpbmcuCgoyMDAyMDMyMgogLSAoc3RldmVzaykgSEFWRV9BQ0NSSUdIVFNfSU5fTVNHSERSIGNvbmZpZ3VyZSBzdXBwb3J0CiAtIChzdGV2ZXNrKSBbbW9uaXRvci5jIG1vbml0b3Jfd3JhcC5jXSAjaWZkZWYgSEFWRV9QV19DTEFTU19JTl9QQVNTV0QKIC0gKHN0ZXZlc2spIGNvbmZpZ3VyZSBhbmQgY3BwIF9fRlVOQ1RJT05fXyBneW1uYXN0aWNzIHRvIGhhbmRsZSBuaWVsc2lzbXMKIC0gKHN0ZXZlc2spIFttb25pdG9yX2ZkcGFzcy5jXSBzdXBwb3J0IGZvciBhY2Nlc3MgcmlnaHRzIHN0eWxlIGZpbGUKICAgZGVzY3JpcHRvciBwYXNzaW5nCiAtIChzdGV2ZXNrKSBbYXV0aDIuY10gbWVyZ2UgY2xlYW51cC9zeW5jCiAtIChzdGV2ZXNrKSBbZGVmaW5lcy5oXSBocC11eCAxMSBoYXMgYW5jaWxsYXJ5IGRhdGEgc3R5bGUgZmQgcGFzc2luZywgYnV0CiAgIGlzIG1pc3NpbmcgQ01TR19MRU4oKSBhbmQgQ01TR19TUEFDRSgpIG1hY3Jvcy4KIC0gKHN0ZXZlc2spIFtkZWZpbmVzLmhdICNkZWZpbmUgTUFQX0FOT04gTUFQX0FOT05ZTU9VUyBmb3IgSFAtVVg7IG90aGVyCiAgIHBsYXRmb3JtcyBtYXkgbmVlZCB0aGlzLS1JJ20gbm90IHN1cmUuICBtbWFwKCkgaXNzdWVzIHdpbGwgbmVlZCB0byBiZQogICBhZGRyZXNzZWQgZnVydGhlci4KIC0gKHRpbSkgW2NpcGhlci5jXSBmaXggcHJvYmxlbSB3aXRoIE9wZW5CU0Qgc3luYwogLSAoc3RldmVzaykgW0xJQ0VOQ0VdIE9wZW5CU0Qgc3luYwoKMjAwMjAzMjEKIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIGl0b2p1bkBjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8wOCAwNjoxMDoxNgogICAgIFtzZnRwLWNsaWVudC5jXQogICAgIHByaW50ZiB0eXBlIG1pc21hdGNoCiAgIC0gaXRvanVuQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzExIDAzOjE4OjQ5CiAgICAgW3NmdHAtY2xpZW50LmNdCiAgICAgY29ycmVjdCB0eXBlIG1pc21hdGNoZXMgKHVfaW50NjRfdCAhPSB1bnNpZ25lZCBsb25nIGxvbmcpCiAgIC0gaXRvanVuQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzExIDAzOjE5OjUzCiAgICAgW3NmdHAtY2xpZW50LmNdCiAgICAgaW5kZW50CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE0IDE1OjI0OjI3CiAgICAgW3NzaGNvbm5lY3QxLmNdCiAgICAgZG9uJ3QgdHJ1c3Qgc2l6ZSBzZW50IGJ5IChyb2d1ZSkgc2VydmVyOyBub3RlZCBieSAKICAgICBzLmVzc2VyQGUtbWF0dGVycy5kZQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xNCAxNjozODoyNgogICAgIFtzc2hkLmNdCiAgICAgc3BsaXQgb3V0IHNzaDEgc2Vzc2lvbiBrZXkgZGVjcnlwdGlvbjsgb2sgcHJvdm9zQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xNCAxNjo1NjozMwogICAgIFthdXRoLXJoLXJzYS5jIGF1dGgtcnNhLmMgYXV0aC5oXQogICAgIHNwbGl0IGF1dGhfcnNhKCkgZm9yIGJldHRlciByZWFkYWJpbGl0eSBhbmQgcHJpdnNlcDsgb2sgcHJvdm9zQAogICAtIGl0b2p1bkBjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xNSAxMTowMDozOAogICAgIFthdXRoLmNdCiAgICAgZml4IGZpbGUgdHlwZSBjaGVja2luZyAodXNlIFNfSVNSRUcpLiAgb2sgYnkgbWFya3VzCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE2IDExOjI0OjUzCiAgICAgW2NvbXByZXNzLmNdCiAgICAgc2tpcCBpbmZsYXRlRW5kIGlmIGluZmxhdGUgZmFpbHM7IG9rIHByb3Zvc0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTYgMTc6MjI6MDkKICAgICBbYXV0aC1yaC1yc2EuYyBhdXRoLmhdCiAgICAgc3BsaXQgYXV0aF9yaG9zdHNfcnNhKCksIG9rIHByb3Zvc0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE2IDE3OjQxOjI1CiAgICAgW2F1dGgta3JiNS5jXQogICAgIEJTRCBsaWNlbnNlLiAgZnJvbSBEYW5pZWwgS291cmlsIHZpYSBEdWcgU29uZy4gIG9rIG1hcmt1c0AKICAgLSBwcm92b3NAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTcgMjA6MjU6NTYKICAgICBbYXV0aC5jIGF1dGguaCBhdXRoMS5jIGF1dGgyLmNdCiAgICAgZ2V0cHduYW1hbGxvdyByZXR1cm5zIHN0cnVjdCBwYXNzd2QgKiBvbmx5IGlmIHVzZXIgdmFsaWQ7IAogICAgIG9rYXkgbWFya3VzQAogICAtIHByb3Zvc0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOCAwMToxMjoxNAogICAgIFthdXRoLmggYXV0aDEuYyBhdXRoMi5jIHNzaGQuY10KICAgICBoYXZlIHRoZSBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbnMgcmV0dXJuIHRoZSBhdXRoZW50aWNhdGlvbiBjb250ZXh0CiAgICAgYW5kIHRoZW4gZG9fYXV0aGVudGljYXRlZDsgb2theSBtaWxsZXJ0QAogICAtIGR1Z3NvbmdAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTggMDE6MzA6MTAKICAgICBbYXV0aC1rcmI0LmNdCiAgICAgc2V0IGNsaWVudCB0byBOVUxMIGFmdGVyIHhmcmVlKCksIGZyb20gUm9sZiBCcmF1biAKICAgICA8cmJyYXVuK3NzaEBhbmRyZXcuY211LmVkdT4KICAgLSBwcm92b3NAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTggMDM6NDE6MDgKICAgICBbYXV0aC5jIHNlc3Npb24uY10KICAgICBtb3ZlIGF1dGhfYXBwcm92YWwgaW50byBnZXRwd25hbWFsbG93IHdpdGggaGVscCBmcm9tIG1pbGxlcnRACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDE3OjEzOjE1CiAgICAgW2NpcGhlci5jIGNpcGhlci5oXQogICAgIGV4cG9ydC9pbXBvcnQgY2lwaGVyIHN0YXRlczsgbmVlZGVkIGJ5IHNzaC1wcml2c2VwCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDE3OjE2OjM4CiAgICAgW3BhY2tldC5jIHBhY2tldC5oXQogICAgIGV4cG9ydC9pbXBvcnQgY2lwaGVyIHN0YXRlLCBpdiBhbmQgc3NoMiBzZXFucjsgbmVlZGVkIGJ5IHNzaC1wcml2c2VwCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDE3OjIzOjMxCiAgICAgW2tleS5jIGtleS5oXQogICAgIGFkZCBrZXlfZGVtb3RlKCkgZm9yIHNzaC1wcml2c2VwCiAgIC0gcHJvdm9zQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDE3OjI1OjI5CiAgICAgW2J1ZmF1eC5jIGJ1ZmF1eC5oXQogICAgIGJ1ZmZlcl9za2lwX3N0cmluZyBhbmQgZXh0cmEgc2FuaXR5IGNoZWNraW5nOyBuZWVkZWQgYnkgc3NoLXByaXZzZXAKICAgLSBwcm92b3NAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTggMTc6MzE6NTQKICAgICBbY29tcHJlc3MuY10KICAgICBleHBvcnQgY29tcHJlc3Npb24gc3RyZWFtcyBmb3Igc3NoLXByaXZzZXAKICAgLSBwcm92b3NAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTggMTc6NTA6MzEKICAgICBbYXV0aC1ic2RhdXRoLmMgYXV0aC1vcHRpb25zLmMgYXV0aC1yaC1yc2EuYyBhdXRoLXJzYS5jXQogICAgIFthdXRoLXNrZXkuYyBhdXRoLmggYXV0aDEuYyBhdXRoMi1jaGFsbC5jIGF1dGgyLmMga2V4LmMga2V4Lmgga2V4ZGguY10KICAgICBba2V4Z2V4LmMgc2VydmNvbmYuY10KICAgICBbc2Vzc2lvbi5oIHNlcnZjb25mLmggc2VydmVybG9vcC5jIHNlc3Npb24uYyBzc2hkLmNdCiAgICAgaW50ZWdyYXRlIHByaXZpbGVnZSBzZXBhcmF0ZWQgb3BlbnNzaDsgaXRzIHR1cm5lZCBvZmYgYnkgZGVmYXVsdCAKICAgICBmb3Igbm93LiB3b3JrIGRvbmUgYnkgbWUgYW5kIG1hcmt1c0AKICAgLSBwcm92b3NAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTggMTc6NTM6MDgKICAgICBbc3NoZC44XQogICAgIGNyZWRpdHMgZm9yIHByaXZzZXAKICAgLSBwcm92b3NAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTggMTc6NTk6MDkKICAgICBbc3NoZC44XQogICAgIGRvY3VtZW50IFVzZVByaXZpbGVnZVNlcGFyYXRpb24KICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDIzOjUyOjUxCiAgICAgW3NlcnZjb25mLmNdCiAgICAgVW5wcml2VXNlci9VbnByaXZHcm91cCB1c2FibGUgbm93LS1zcGVjaWZ5IG51bWVyaWMgdXNlci9ncm91cDsgb2sKICAgICBwcm92b3NACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOSAwMzowMzo0MwogICAgIFtwYXRobmFtZXMuaCBzZXJ2Y29uZi5jIHNlcnZjb25mLmggc3NoZC5jXQogICAgIF9QQVRIX1BSSVZTRVBfQ0hST09UX0RJUjsgb2sgcHJvdm9zQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTkgMDU6MjM6MDgKICAgICBbc3NoZC44XQogICAgIEJhbm5lciBoYXMgbm8gZGVmYXVsdC4KICAgLSBtcGVjaEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOSAwNjozMjo1NgogICAgIFtzZnRwLWludC5jXQogICAgIHVzZSB4ZnJlZSgpIGFmdGVyIHhzdHJkdXAoKS4KCiAgICAgbWFya3VzQCBvawogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOSAxMDozNTozOQogICAgIFthdXRoLW9wdGlvbnMuYyBhdXRoLmggc2Vzc2lvbi5jIHNlc3Npb24uaCBzc2hkLmNdCiAgICAgY2xlYW4gdXAgcHJvdG90eXBlcwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOSAxMDo0OTozNQogICAgIFthdXRoLWtyYjUuYyBhdXRoLXJoLXJzYS5jIGF1dGguYyBjaXBoZXIuYyBrZXkuYyBtaXNjLmhdCiAgICAgW3BhY2tldC5jIHNlc3Npb24uYyBzZnRwLWNsaWVudC5jIHNmdHAtZ2xvYi5oIHNmdHAuYyBzc2gtYWRkLmMgc3NoLmNdCiAgICAgW3NzaGNvbm5lY3QyLmMgc3NoZC5jIHR0eW1vZGVzLmNdCiAgICAgS05GIHdoaXRlc3BhY2UKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTkgMTQ6Mjc6MzkKICAgICBbYXV0aC5jIGF1dGgxLmMgYXV0aDIuY10KICAgICBtYWtlIGdldHB3bmFtYWxsb3coKSBhbGx3YXlzIGNhbGwgcHdjb3B5KCkKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTkgMTU6MzE6NDcKICAgICBbYXV0aC5jXQogICAgIGNoZWNrIGZvciBOVUxMOyBmcm9tIHByb3Zvc0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIwIDE5OjEyOjI1CiAgICAgW3NlcnZjb25mLmMgc2VydmNvbmYuaCBzc2guaCBzc2hkLmNdCiAgICAgZm9yIHVucHJpdmlsZWdlZCB1c2VyLCBncm91cCBkbzoKICAgICBwdz1nZXRwd25hbShTU0hfUFJJVlNFUF9VU0VSKTsgZG9fc2V0dXNlcmNvbnRleHQocHcpLiAgb2sgcHJvdm9zQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjAgMjE6MDg6MDgKICAgICBbc3NoZC5jXQogICAgIHN0cmVycm9yKCkgb24gY2hkaXIoKSBmYWlsOyBvayBwcm92b3NACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIxIDEwOjIxOjIwCiAgICAgW3NzaC1hZGQuY10KICAgICBpZ25vcmUgZXJyb3JzIGZvciBub25leGlzdGluZyBkZWZhdWx0IGtleXMgaW4gc3NoLWFkZCwKICAgICBmaXhlcyBodHRwOi8vYnVnemlsbGEubWluZHJvdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OAogICAtIGpha29iQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIxIDE1OjE3OjI2CiAgICAgW2NsaWVudGxvb3AuYyBzc2guMV0KICAgICBhZGQgYnVpbHQtaW4gY29tbWFuZCBsaW5lIGZvciBhZGRpbmcgbmV3IHBvcnQgZm9yd2FyZGluZ3Mgb24gdGhlIGZseS4KICAgICBiYXNlZCBvbiBhIHBhdGNoIGZyb20gYnJpYW4gd2VsbGluZ3Rvbi4gb2sgbWFya3VzQC4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjEgMTY6Mzg6MDYKICAgICBbc2NhcmQuY10KICAgICBtYWtlIGNvbXBpbGUgdy8gb3BlbnNzbCAwLjkuNwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMSAxNjo1NDo1MwogICAgIFtzY2FyZC5jIHNjYXJkLmggc3NoLWtleWdlbi5jXQogICAgIG1vdmUga2V5IHVwbG9hZCB0byBzY2FyZC5bY2hdCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIxIDE2OjU3OjE1CiAgICAgW3NjYXJkLmNdCiAgICAgcmVtb3ZlIGNvbnN0CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIxIDE2OjU4OjEzCiAgICAgW2NsaWVudGxvb3AuY10KICAgICByZW1vdmUgdW51c2VkCiAgIC0gcmVlc0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMSAxODowODoxNQogICAgIFtzY2FyZC5jXQogICAgIEluIHNjX3B1dF9rZXkoKSwgc2NfcmVhZGVyX2lkIHNob3VsZCBiZSBpZC4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjEgMjA6NTE6MTIKICAgICBbc3NoZF9jb25maWddCiAgICAgYWRkIHByaXZzZXAgKG9mZikKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjEgMjE6MjM6MzQKICAgICBbc3NoZC5jXQogICAgIGFkZCBwcml2c2VwX3ByZWF1dGgoKSBhbmQgcmVtb3ZlIDEgZ290bzsgb2sgcHJvdm9zQAogICAtIHJlZXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjEgMjE6NTQ6MzQKICAgICBbc2NhcmQuYyBzY2FyZC5oIHNzaC1rZXlnZW4uY10KICAgICBBZGQgUElOLXByb3RlY3Rpb24gZm9yIHNlY3JldCBrZXkuCiAgIC0gcmVlc0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMSAyMjo0NDowNQogICAgIFthdXRoZmQuYyBhdXRoZmQuaCBzc2gtYWRkLmMgc3NoLWFnZW50LmMgc3NoLmNdCiAgICAgQWRkIFBJTi1wcm90ZWN0aW9uIGZvciBzZWNyZXQga2V5LgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMSAyMzowNzozNwogICAgIFtjbGllbnRsb29wLmNdCiAgICAgcmVtb3ZlIHVudXNlZCwgc3luYyB3LyBjbWRsaW5lIHBhdGNoIGluIG15IHRyZWUuCgoyMDAyMDMxNwogLSAodGltKSBbY29uZmlndXJlLmFjXSBBc3N1bWUgcGF0aCBnaXZlbiB3aXRoIC0td2l0aC1waWQtZGlyPVBBVEggaXMgCiAgIHdhbnRlZCwgd2FybiBpZiBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuIFB1dCBzeXN0ZW0gZGlyZWN0b3JpZXMgaW4gCiAgIGZyb250IG9mIFBBVEggZm9yIGZpbmRpbmcgZW50b3JweSBjb21tYW5kcy4KIC0gKHRpbSkgW2NvbnRyaWIvYWl4L2J1aWxkYmZmLnNoIGNvbnRyaWIvYWl4L2ludmVudG9yeS5zaF0gQUlYIHBhY2thZ2UKICAgYnVpbGQgZml4ZXMuICBQYXRjaCBieSBEYXJyZW4gVHVja2VyIDxkdHVja2VyQHppcC5jb20uYXU+CiAgIFtjb250cmliL3NvbGFyaXMvYnVpbGRwa2cuc2hdIGFkZCBtaXNzaW5nIGRpcnMgdG8gU1lTVEVNX0RJUi4gSGF2ZQogICBwb3N0aW5zdGFsbCBjaGVjayBmb3IgJHBpZGRpciBhbmQgYWRkIGlmIG5lY2Vzc2FyeS4KCjIwMDIwMzExCiAtICh0aW0pIFtjb250cmliL3NvbGFyaXMvYnVpbGRwa2cuc2gsIGNvbnRyaWIvc29sYXJpcy9SRUFETUVdIFVwZGF0ZWQgdG8KICAgYnVpbGQgb24gYWxsIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgU1ZSNCBzdHlsZSBwYWNrYWdlIHRvb2xzLiBOb3cgcnVucwogICBmcm9tIGJ1aWxkIGRpci4gUGFydHMgYXJlIGJhc2VkIG9uIHBhdGNoZXMgZnJvbSBBbnRvbmlvIE5hdmFycm8sIGFuZAogICBEYXJyZW4gVHVja2VyLgoKMjAwMjAzMDgKIC0gKGRqbSkgUmV2ZXJ0IGJpdHMgb2YgTWFya3VzJyBPcGVuU1NMIGNvbXBhdCBwYXRjaCB3aGljaCB3YXMgCiAgIGFjY2lkZW50YWxseSBjb21taXR0ZWQuCiAtIChkam0pIEFkZCBNYXJrdXMnIHBhdGNoIGZvciBjb21wYXQgd2loIE9wZW5TU0wgPCAwLjkuNi4gCiAgIEtub3duIGlzc3VlOiBCbG93ZmlzaCBmb3IgU1NIMSBkb2VzIG5vdCB3b3JrCiAtIChzdGV2ZXNrKSBlbnRyb3B5LmM6IHR5cG8gaW4gZGVidWcgbWVzc2FnZQogLSAoZGptKSBzc2gta2V5Z2VuIC1pIG5lZWRzIHNlZWRlZCBSTkc7IHJlcG9ydCBmcm9tIG1hcmt1c0AKCiRJZDogQ2hhbmdlTG9nLHYgMS4yMzg2IDIwMDIvMDcvMjEgMjM6NTk6NDAgc3RldmVzayBFeHAgJAo=