QXBhY2hlIENvbW1vbnMgVGV4dApWZXJzaW9uIDEuMTAuMApSZWxlYXNlIE5vdGVzCgpJTlRST0RVQ1RJT046CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgMS4xMC4wIHZlcnNpb24gb2YgQXBhY2hlIENvbW1vbnMgVGV4dC4KQ29tbW9ucyBUZXh0IGlzIGEgc2V0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCByZXVzYWJsZSBjb21wb25lbnRzIGZvciB0aGUgcHVycG9zZSBvZiBwcm9jZXNzaW5nCmFuZCBtYW5pcHVsYXRpbmcgdGV4dCB0aGF0IHNob3VsZCBiZSBvZiB1c2UgaW4gYSBKYXZhIGVudmlyb25tZW50LgoKQXBhY2hlIENvbW1vbnMgVGV4dCBpcyBhIGxpYnJhcnkgZm9jdXNlZCBvbiBhbGdvcml0aG1zIHdvcmtpbmcgb24gc3RyaW5ncy4KClJlbGVhc2UgMS4xMC4wLiBSZXF1aXJlcyBKYXZhIDguCgpDaGFuZ2VzIGluIHRoaXMgdmVyc2lvbiBpbmNsdWRlOgoKTmV3IGZlYXR1cmVzOgpvIFRFWFQtMjA3OiAgQWRkIERvdWJsZUZvcm1hdCB1dGlsaXR5LgpvIFRFWFQtMTkwOiAgRG9jdW1lbnQgbmVnYXRpdmUgbGltaXQgZm9yIFdvcmRVdGlscyBhYmJyZXZpYXRlIG1ldGhvZCBUaGFua3MgdG8gQmVuamFtaW4gQmluZy4KbyBURVhULTE4ODogIFNwZWVkIHVwIExldmVuc2h0ZWluRGlzdGFuY2Ugd2l0aCB0aHJlc2hvbGQgYnkgZXhpdGluZyBlYXJseSBUaGFua3MgdG8gSmFrb2IgVmVzdGVyc3Ry+G0uCm8gVEVYVC0xODU6ICBSZWxlYXNlIE5vdGVzIHBhZ2UgaGFzbid0IGJlZW4gdXBkYXRlZCBmb3IgMS45IHJlbGVhc2UgeWV0LiBUaGFua3MgdG8gTGFycnkgV2VzdCwgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIFN0ckJ1aWxkZXIuaXNOb3RFbXB0eSgpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoKRml4ZWQgQnVnczoKbyBURVhULTE4OTogIEZpeCBDYXNlVXRpbHMgd2hlbiB0aGUgaW5wdXQgc3RyaW5nIGNvbnRhaW5zIG9ubHkgZGVsaW1pdGVycyBUaGFua3MgdG8gR29uZ3B1IFpodS4KbyBURVhULTE4NzogIEFkZCBHcmFhbFZNIHRlc3QgZGVwZW5kZW5jaWVzIHRvIGZpeCB0ZXN0IGZhaWx1cmVzIHdpdGggSmF2YSAxNS4KbyBURVhULTE1ODogIEluY29ycmVjdCB2YWx1ZXMgZm9yIEphY2NhcmQgc2ltaWxhcml0eSB3aXRoIGVtcHR5IHN0cmluZ3MuCm8gVEVYVC0xODY6ICBTdHJpbmdTdWJzdGl0dXRvciBtYXAgY29uc3RydWN0b3IgdGhyb3dzIE5QRSBvbiAxLjkgd2l0aCBudWxsIG1hcC4gVGhhbmtzIHRvIEdhdXRhbSBLb3JsYW0sIEdhcnkgR3JlZ29yeS4KbyBURVhULTE5MTogIEphcm9XaW5rbGVyRGlzdGFuY2UgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZXMgYXMgSmFyb1dpbmtsZXJTaW1pbGFyaXR5LiBUaGFua3MgdG8gQnJhZGxleSBEYXZpZCBSdW1iYWxsLgpvICAgICAgICAgICAgQ29ycmVjdCBKYXZhZG9jIGluIEZpbGVTdHJpbmdMb29rdXAuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBNaW5vciBJbXByb3ZlbWVudHMgIzE5MiwgIzE5Ni4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuCm8gVEVYVC0xOTQ6ICBVc2UgU3RyaW5nVXRpbHMuSU5ERVhfTk9UX0ZPVU5EIGNvbnN0YW50LiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4KbyBURVhULTE5OTogIFJlbW92ZSByZWR1bmRhbnQgbG9jYWwgdmFyaWFibGUuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvIFRFWFQtMTk4OiAgUmVwbGFjZSBsYW1iZGEgd2l0aCBtZXRob2QgcmVmZXJlbmNlLiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4KbyBURVhULTIwMDogIFNpbXBsaWZ5IHN0YXRlbWVudHMuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvIFRFWFQtMTk3OiAgUmVwbGFjZSBzdGF0ZW1lbnQgbGFtYmRhIHdpdGggZXhwcmVzc2lvbiBsYW1iZGEuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvIFRFWFQtMjA0OiAgVXNlIHN0YXRpYyBjbGFzcyBpbm5lciBjbGFzcyBpbiB0ZXN0cy4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuCm8gVEVYVC0yMDE6ICBTaW1wbGlmeSBhc3NlcnRpb24uIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvIFRFWFQtMjAyOiAgRXh0cmFjdCBkdXBsaWNhdGUgY29kZS4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuCm8gVEVYVC0yMDU6ICBTZXQgdm9pZCByZXR1cm4gbWV0aG9kLiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4KbyAgICAgICAgICAgIFJlbW92ZSB1bnVzZWQgZXhjZXB0aW9uIGZyb20gVGV4dFN0cmluZ0J1aWxkZXIucmVhZEZyb20oQ2hhckJ1ZmZlcikuIFRoaXMgcHJlc2VydmVzIGJpbmFyeSBjb21wYXRpYmlsaXR5IGJ1dCBub3Qgc291cmNlIGNvbXBhdGliaWxpdHkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBTdHJCdWlsZGVyLlN0ckJ1aWxkZXJSZWFkZXIuc2tpcChsb25nKTogVGhyb3cgYW4gZXhjZXB0aW9uIHdoZW4gYW4gaW1wbGljaXQgbmFycm93aW5nIGNvbnZlcnNpb24gaW4gYSBjb21wb3VuZCBhc3NpZ25tZW50IHdvdWxkIHJlc3VsdCBpbiBpbmZvcm1hdGlvbiBsb3NzIG9yIGEgbnVtZXJpYyBlcnJvciBzdWNoIGFzIGFuIG92ZXJmbG93cy4gVGhhbmtzIHRvIENvZGVRTCwgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgVGV4dFN0cmluZ0J1aWxkZXIuVGV4dFN0cmluZ0J1aWxkZXJSZWFkZXIuc2tpcChsb25nKTogVGhyb3cgYW4gZXhjZXB0aW9uIHdoZW4gYW4gaW1wbGljaXQgbmFycm93aW5nIGNvbnZlcnNpb24gaW4gYSBjb21wb3VuZCBhc3NpZ25tZW50IHdvdWxkIHJlc3VsdCBpbiBpbmZvcm1hdGlvbiBsb3NzIG9yIGEgbnVtZXJpYyBlcnJvciBzdWNoIGFzIGFuIG92ZXJmbG93cy4gVGhhbmtzIHRvIENvZGVRTCwgR2FyeSBHcmVnb3J5LgpvIFRFWFQtMjExOiAgVGV4dFN0cmluZ0J1aWxkZXIuZXF1YWxzIHdoYXRldmVyIHRoZSBjYXBhY2l0eSBpcyAjMjgxLiBUaGFua3MgdG8gc2VieDU5LgpvIFRFWFQ9MjEyOiAgQSBNb3JlIEVmZmljaWVudCBJbXBsZW1lbnRhdGlvbiBmb3IgQ2FsY3VsYXRpbmcgU2l6ZSBvZiBMb25nZXN0IENvbW1vbiBTdWJzZXF1ZW5jZS4gVGhhbmtzIHRvIEFsaSBHaGFuYmFyaS4KbyBURVhULTIwOTogIExvb2t1cFRyYW5zbGF0b3IgcmV0dXJucyBjb3VudCBvZiBjaGFycyBjb25zdW1lZCwgbm90IG9mIGNvZGVwb2ludHMgY29uc3VtZWQuIFRoYW5rcyB0byBmb3VyQWplZmYuCm8gVEVYVC0yMDk6ICBVc2UgTWF0aC5taW4oKSBjYWxsIGluc3RlYWQgb2YgZG9pbmcgaXQgbWFudWFsbHkuICMzMzUuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvICAgICAgICAgICAgVGV4dFN0cmluZ0J1aWxkZXI6IFRocm93IE91dE9mTWVtb3J5RXJyb3IgaW5zdGVhZCBvZiBOZWdhdGl2ZUFycmF5U2l6ZUV4Y2VwdGlvbi4gVGhhbmtzIHRvIFZhbGVudGlqbnZkQmVlaywgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgVGV4dFN0cmluZ0J1aWxkZXI6IENhbid0IGdyb3cgdG8gc2l6ZXMgdXAgdG8gSW50ZWdlci5NQVhfVkFMVUUuIFRoYW5rcyB0byBWYWxlbnRpam52ZEJlZWssIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIE1ha2UgZGVmYXVsdCBzdHJpbmcgbG9va3VwcyBjb25maWd1cmFibGUgdmlhIHN5c3RlbSBwcm9wZXJ0eS4gUmVtb3ZlIGRucywgdXJsLCBhbmQgc2NyaXB0IGxvb2t1cHMgZnJvbSBkZWZhdWx0cy4gSWYgdGhlc2UgbG9va3VwcyBhcmUgcmVxdWlyZWQgZm9yIHVzZSBpbiBTdHJpbmdTdWJzdGl0dXRvci5jcmVhdGVJbnRlcnBvbGF0b3IoKSwgdGhleSBtdXN0IGJlIGVuYWJsZWQgdmlhIHN5c3RlbSBwcm9wZXJ0eS4gU2VlIFN0cmluZ0xvb2t1cEZhY3RvcnkgZm9yIGRldGFpbHMuCgpDaGFuZ2VzOgpvICAgICAgICAgICAgQnVtcCBhY3Rpb25zL3NldHVwLWphdmEgZnJvbSB2MS40LjAgdG8gMyAjMTQ3LCAjMTU2LCAjMTU1LCAjMTcyLCAjMjE1LCAjMzE0LiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KbyAgICAgICAgICAgIEJ1bXAgZ2l0aHViL2NvZGVxbC1hY3Rpb24gZnJvbSAxIHRvIDIgIzMxOS4gVGhhbmtzIHRvIERlcGVuZGFib3QuCm8gICAgICAgICAgICBCdW1wIGNoZWNrc3R5bGUgZnJvbSA4LjM0IHRvIDkuMywgIzE0MSwgIzE2OCwgIzE4MiwgIzE4OCwgIzE5MywgIzIwMSwgIzIwOCwgIzIxMSwgIzIyOCwgIzIzNSwgIzI0NSwgIzI1MywgIzI1NSwgIzI2MiwgIzI3MCwgIzI4MCwgIzI4NywgIzI5OSwgIzMxNSwgIzMyMS4gVGhhbmtzIHRvIERlcGVuZGFib3QuCm8gICAgICAgICAgICBCdW1wIHNwb3RidWdzLW1hdmVuLXBsdWdpbiBmcm9tIDQuMC4wIHRvIDQuNy4yLjAsICMxNDQsICMxNTAsICMxNjcsICMxNzYsICMxOTQsICMyMTAsICMyMjMsICMyNTAsICMyNjgsICMyNzMsICMyNzcsICMyNzgsICMyODYsICMyOTMsICMzMDMsICMzMjAsICMzMjUsICMzMzgsICMzNDQsICMzNTQuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnksIERlcGVuZGFib3QuCm8gICAgICAgICAgICBCdW1wIHNwb3RidWdzIGZyb20gNC4xLjMgdG8gNC43LjIgIzE3NSwgMTg5LCAjMjA5LCAjMjE4LCAjMjQ3LCAjMjU2LCAjMjY0LCAjMjc1LCAjMjg0LCAjMjg5LCAjMjk2LCAjMzA2LCAjMzU1LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LCBEZXBlbmRhYm90LgpvICAgICAgICAgICAgQnVtcCBtb2NraXRvLWlubGluZSBmcm9tIDMuNC40IHRvIDQuOC4wLCAjMTQzLCAjMTQ4LCAjMTQ5LCAjMTUyLCAjMTUzLCAjMTU0LCAjMTU4LCAjMTU5LCAjMTY2LCAjMTc3LCAjMTgwLCAjMTg3LCAjMTk1LCAjMTk3LCAjMjA3LCAjMjE2LCAjMjMxLCAjMjM2LCAjMjM3LCAjMjQzLCAjMjU4LCAjMjU5LCAjMjYwLCAjMjYxLCAjMjcyLCAjMjg1LCAjMjkxLCAjMzA1LCAjMzE3LCAjMzMwLCAjMzMxLCAjMzQ3LCAjMzUyLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KbyAgICAgICAgICAgIEJ1bXAganVuaXQtanVwaXRlciBmcm9tIDUuNi4yIHRvIDUuOS4xICMxNjMsICMyMDQsICMyMzIsICMyNjUsICMyNjksICMyODgsICMzNDMsICMzNTcuIFRoYW5rcyB0byBEZXBlbmRhYm90LgpvICAgICAgICAgICAgQnVtcCBhc3NlcnRqLWNvcmUgZnJvbSAzLjE2LjEgdG8gMy4yMy4xICMxNTEsICMxNTcsICMxNjAsICMxNzgsICMxODQsICMxOTksICMyNDQsICMyNjcsICMyOTQuIFRoYW5rcyB0byBEZXBlbmRhYm90LCBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBCdW1wIGNvbW1vbnMtaW8gZnJvbSAyLjcgdG8gMi4xMS4wICMxNjEgIzI1MS4gVGhhbmtzIHRvIERlcGVuZGFib3QsIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEJ1bXAgY29tbW9ucy1wYXJlbnQgZnJvbSA1MSB0byA1NCAjMTQ1LCAjMzU4LiBUaGFua3MgdG8gRGVwZW5kYWJvdCwgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQnVtcCBtYXZlbi1wbWQtcGx1Z2luIGZyb20gMy4xMy4wIHRvIDMuMTkuMCAjMTg2LCAjMjYzLCAjMzAyLCAjMzM0LCAjMzQ5LCAjMzUzLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KbyAgICAgICAgICAgIEJ1bXAgcG1kIGZyb20gNi40Mi4wIHRvIDYuNDYuMC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEJ1bXAgZ3JhYWx2bS52ZXJzaW9uIGZyb20gMjAuMi4wIHRvIDIyLjAuMC4yICMxODUsICMxOTgsICMyMDYsICMyMjcsICMyNTIsICMyNzYsICMyOTUsICMzMDAuIFRoYW5rcyB0byBEZXBlbmRhYm90LgpvICAgICAgICAgICAgQnVtcCBjb21tb25zLmphcGljbXAudmVyc2lvbiBmcm9tIDAuMTQuMyB0byAwLjE2LjAuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBCdW1wIGNvbW1vbnMuamFjb2NvLnZlcnNpb24gMC44LjUgdG8gMC44Ljg7IGZpeGVzIEphdmEgMTUgYnVpbGQuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBCdW1wIG1hdmVuLWNoZWNrc3R5bGUtcGx1Z2luIGZyb20gMy4xLjEgdG8gMy4yLjAgIzIwMiwgIzM0OC4gVGhhbmtzIHRvIERlcGVuZGFib3QuCm8gICAgICAgICAgICBCdW1wIGNvbW1vbnMtbGFuZzMgMy4xMSAtPiAzLjEyLjAuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBCdW1wIGNvbW1vbnMuamF2YWRvYy52ZXJzaW9uIGZyb20gMy4yLjAgdG8gMy40LjEuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBCdW1wIGNvbW1vbnMucHJvamVjdC1pbmZvLnZlcnNpb24gZnJvbSAzLjEuMCB0byAzLjEuMi4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEJ1bXAgam1oLnZlcnNpb24gZnJvbSAxLjMyIHRvIDEuMzUgIzI1NCwgIzI5MiwgIzMxMy4gVGhhbmtzIHRvIERlcGVuZGFib3QuCm8gICAgICAgICAgICBCdW1wIGNvbW1vbnMtcm5nLXNpbXBsZSBmcm9tIDEuMyB0byAxLjQgIzI2Ni4gVGhhbmtzIHRvIERlcGVuZGFib3QuCm8gICAgICAgICAgICBCdW1wIHRhZ2xpc3QtbWF2ZW4tcGx1Z2luIGZyb20gMi40IHRvIDMuMC4wICMyOTcuIFRoYW5rcyB0byBEZXBlbmRhYm90LgpvICAgICAgICAgICAgQnVtcCBjb21tb25zLnBtZC1pbXBsLnZlcnNpb24gZnJvbSA2LjQ0LjAgdG8gNi40OS4wICMzMjMsICMzMzYsICMzNDUsICMzNTAuIFRoYW5rcyB0byBEZXBlbmRhYm90LgpvICAgICAgICAgICAgQnVtcCBleGVjLW1hdmVuLXBsdWdpbiBmcm9tIDMuMC4wIHRvIDMuMS4wICMzNDAuIFRoYW5rcyB0byBEZXBlbmRhYm90LgoKCkhpc3RvcmljYWwgbGlzdCBvZiBjaGFuZ2VzOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy10ZXh0L2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBUZXh0LCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQ29tbW9ucyBUZXh0IHdlYnNpdGU6CgpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy10ZXh0CgpEb3dubG9hZCBwYWdlOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy10ZXh0L2Rvd25sb2FkX3RleHQuY2dpCgpIYXZlIGZ1biEKLUFwYWNoZSBDb21tb25zIFRlYW0KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpBcGFjaGUgQ29tbW9ucyBUZXh0ClZlcnNpb24gMS45ClJlbGVhc2UgTm90ZXMKCgpJTlRST0RVQ1RJT046CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgMS45IHZlcnNpb24gb2YgQXBhY2hlIENvbW1vbnMgVGV4dC4KQ29tbW9ucyBUZXh0IGlzIGEgc2V0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCByZXVzYWJsZSBjb21wb25lbnRzIGZvciB0aGUgcHVycG9zZSBvZiBwcm9jZXNzaW5nCmFuZCBtYW5pcHVsYXRpbmcgdGV4dCB0aGF0IHNob3VsZCBiZSBvZiB1c2UgaW4gYSBKYXZhIGVudmlyb25tZW50LgoKCkFwYWNoZSBDb21tb25zIFRleHQgaXMgYSBsaWJyYXJ5IGZvY3VzZWQgb24gYWxnb3JpdGhtcyB3b3JraW5nIG9uIHN0cmluZ3MuCgpSZWxlYXNlIDEuOS4gUmVxdWlyZXMgSmF2YSA4LgoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCk5ldyBmZWF0dXJlczoKbyBBZGQgU3RyaW5nTWF0Y2hlci5zaXplKCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gUmVmYWN0b3IgVGV4dFN0cmluZ0J1aWxkZXIucmVhZEZyb20oUmVhZGFibGUpLCBleHRyYWN0aW5nIHJlYWRGcm9tKENoYXJCdWZmZXIpIGFuZCByZWFkRnJvbShSZWFkZXIpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIEFkZCBCaVN0cmluZ0xvb2t1cCBhbmQgaW1wbGVtZW50YXRpb24gQmlGdW5jdGlvblN0cmluZ0xvb2t1cC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBBZGQgb3JnLmFwYWNoZS5jb21tb25zLnRleHQuU3RyaW5nU3Vic3RpdHV0b3IuU3RyaW5nU3Vic3RpdHV0b3IoU3RyaW5nU3Vic3RpdHV0b3IpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5UZXh0U3RyaW5nQnVpbGRlci5UZXh0U3RyaW5nQnVpbGRlcihDaGFyU2VxdWVuY2UpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5UZXh0U3RyaW5nQnVpbGRlci5kcmFpbkNoYXIoaW50KS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBBZGQgb3JnLmFwYWNoZS5jb21tb25zLnRleHQuVGV4dFN0cmluZ0J1aWxkZXIuZHJhaW5DaGFycyhpbnQsIGludCwgY2hhcltdLiBpbnQpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5UZXh0U3RyaW5nQnVpbGRlci5pc05vdEVtcHR5KCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gQWRkIG9yZy5hcGFjaGUuY29tbW9ucy50ZXh0LlRleHRTdHJpbmdCdWlsZGVyLmlzUmVhbGxvY2F0ZWQoKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBBZGQgb3JnLmFwYWNoZS5jb21tb25zLnRleHQuVGV4dFN0cmluZ0J1aWxkZXIucmVhZEZyb20oUmVhZGVyLCBpbnQpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5UZXh0U3RyaW5nQnVpbGRlci5zZXQoU3RyaW5nKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBBZGQgb3JnLmFwYWNoZS5jb21tb25zLnRleHQuVGV4dFN0cmluZ0J1aWxkZXIud3JhcChjaGFyW10pLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5UZXh0U3RyaW5nQnVpbGRlci53cmFwKGNoYXJbXSwgaW50KS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBBZGQgb3JnLmFwYWNoZS5jb21tb25zLnRleHQuaW8uU3RyaW5nU3Vic3RpdHV0b3JSZWFkZXIuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gQWRkIG9yZy5hcGFjaGUuY29tbW9ucy50ZXh0Lmxvb2t1cC5TdHJpbmdMb29rdXBGYWN0b3J5LmZ1bmN0aW9uU3RyaW5nTG9va3VwKEZ1bmN0aW9uPFN0cmluZywgVj4pLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5tYXRjaGVyLlN0cmluZ01hdGNoZXIuaXNNYXRjaChDaGFyU2VxdWVuY2UsIGludCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gQWRkIG9yZy5hcGFjaGUuY29tbW9ucy50ZXh0Lm1hdGNoZXIuU3RyaW5nTWF0Y2hlci5pc01hdGNoKENoYXJTZXF1ZW5jZSwgaW50LCBpbnQsIGludCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gQWRkIG9yZy5hcGFjaGUuY29tbW9ucy50ZXh0Lm1hdGNoZXIuU3RyaW5nTWF0Y2hlckZhY3RvcnkuYW5kTWF0Y2hlcihTdHJpbmdNYXRjaGVyLi4uKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBBZGQgb3JnLmFwYWNoZS5jb21tb25zLnRleHQubWF0Y2hlci5TdHJpbmdNYXRjaGVyRmFjdG9yeS5zdHJpbmdNYXRjaGVyKGNoYXIuLi4pLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoKRml4ZWQgQnVnczoKbyBURVhULTE2NjogIFJlbW92ZWQgbm9uLWV4aXN0aW5nIHBhcmFtZXRlciBmcm9tIEphdmFkb2NzIGFuZCBzcGVsbGVkIG91dCBwYXJhbWV0ZXJzIGluIHRocm93cy4gVGhhbmtzIHRvIE1pa2tvIE1hdW51LgpvIFRFWFQtMTQ5OiAgU3RyaW5nRXNjYXBlVXRpbHMudW5lc2NhcGVDc3YgZG9lc24ndCByZW1vdmUgcXVvdGVzIGF0IGJlZ2luIGFuZCBlbmQgb2Ygc3RyaW5nLiBUaGFua3MgdG8gWXVqaSBLb25pc2hpLgpvIFRFWFQtMTc0OiAgU2NyaXB0U3RyaW5nTG9va3VwIGRvZXMgbm90IGFjY2VwdCAiOiIgIzEyNi4gVGhhbmtzIHRvIGZ1cmtpbGljLgpvIFRFWFQtMTc4OiAgU3RyaW5nU3Vic3RpdHV0b3IgaW5jb3JyZWN0bHkgcmVtb3ZlcyBzb21lIGVzY2FwZSBjaGFyYWN0ZXJzLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIFRFWFQtMTgxOiAgRml4IEphdmFkb2NzICMxMzUuIFRoYW5rcyB0byBYZW5vQW1lc3MuCm8gVEVYVC0xODI6ICBGaXggdHlwb3MgIzEzNy4gVGhhbmtzIHRvIFhlbm9BbWVzcy4KbyBURVhULTE4MzogIE1ha2UgQ29uc3RhbnRTdHJpbmdMb29rdXAuY29uc3RhbnRDYWNoZSBmaW5hbCAjMTM2LiBUaGFua3MgdG8gWGVub0FtZXNzLgpvIFRFWFQtMTg0OiAgU2ltcGxpZnkgaWYgaW4gQ2FzZVV0aWxzICMxMzQuIFRoYW5rcyB0byBYZW5vQW1lc3MuCgpDaGFuZ2VzOgpvIFtqYXZhZG9jXSBGaXggY29tcGlsZXIgd2FybmluZ3MgaW4gSmF2YSBjb2RlIGV4YW1wbGUgaW4gSmF2YWRvYyAjMTI0LiBUaGFua3MgdG8gSm9oYW4gSGFtbWFyLgpvIFRFWFQtMTc3OiAgVXBkYXRlIGZyb20gQXBhY2hlIENvbW1vbnMgTGFuZyAzLjkgdG8gMy4xMS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBbYnVpbGRdIFNraXAgY2xpcnIgc2luY2Ugd2UgdXNlIEpBcGlDbXAuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gW3Rlc3RdIGp1bml0LWp1cGl0ZXIgNS41LjEgLT4gNS41LjIuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gW3Rlc3RdIG9yZy5hc3NlcnRqOmFzc2VydGotY29yZSAzLjEzLjIgLT4gMy4xNi4xLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIFtidWlsZF0gY29tLnB1cHB5Y3Jhd2wudG9vbHM6Y2hlY2tzdHlsZSA4LjIzIC0+IDguMzQuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gW2J1aWxkXSBVcGRhdGUgSlVuaXQgZnJvbSA1LjUuMiB0byA1LjYuMi4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBbYnVpbGRdIGNvbW1vbnMuamFjb2NvLnZlcnNpb24gMC44LjQgLT4gMC44LjUuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gW2J1aWxkXSBjb21tb25zLmphdmFkb2MudmVyc2lvbiAzLjEuMSAtPiAzLjIuMC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBbYnVpbGRdIGNvbW1vbnMuamFwaWNtcC52ZXJzaW9uIDAuMTQuMSAtPiAwLjE0LjMuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gW2J1aWxkXSBjaGVja3N0eWxlLnBsdWdpbi52ZXJzaW9uIDMuMS4wIC0+IDMuMS4xLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIFtidWlsZF0gY2hlY2tzdHlsZS52ZXJzaW9uIDguMjcgLT4gOC4zMy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBbYnVpbGRdIG9yZy5hcGFjaGUuY29tbW9uczpjb21tb25zLXBhcmVudCA0OCAtPiA1MS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBbYnVpbGRdIG1hdmVuLXBtZC1wbHVnaW4gMy4xMi4wIC0+IDMuMTMuMC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBbYnVpbGRdIG9yZy5tb2NraXRvIDMuMy4zIC0+IDMuNC40LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoKCkhpc3RvcmljYWwgbGlzdCBvZiBjaGFuZ2VzOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy10ZXh0L2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBUZXh0LCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQ29tbW9ucyBUZXh0IHdlYnNpdGU6CgpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy10ZXh0CgpEb3dubG9hZCBwYWdlOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy10ZXh0L2Rvd25sb2FkX3RleHQuY2dpCgpIYXZlIGZ1biEKLUFwYWNoZSBDb21tb25zIFRlYW0KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpBcGFjaGUgQ29tbW9ucyBUZXh0ClZlcnNpb24gMS44ClJlbGVhc2UgTm90ZXMKCgpJTlRST0RVQ1RJT046CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgMS44IHZlcnNpb24gb2YgQXBhY2hlIENvbW1vbnMgVGV4dC4KQ29tbW9ucyBUZXh0IGlzIGEgc2V0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCByZXVzYWJsZSBjb21wb25lbnRzIGZvciB0aGUgcHVycG9zZSBvZiBwcm9jZXNzaW5nCmFuZCBtYW5pcHVsYXRpbmcgdGV4dCB0aGF0IHNob3VsZCBiZSBvZiB1c2UgaW4gYSBKYXZhIGVudmlyb25tZW50LgoKCkFwYWNoZSBDb21tb25zIFRleHQgaXMgYSBsaWJyYXJ5IGZvY3VzZWQgb24gYWxnb3JpdGhtcyB3b3JraW5nIG9uIHN0cmluZ3MuCgpSZWxlYXNlIDEuOAoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCi0gTmV3IEZlYXR1cmVzCiAgbyBURVhULTE2OTogQWRkIGhlbHBlciBmYWN0b3J5IG1ldGhvZCBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5TdHJpbmdTdWJzdGl0dXRvci5jcmVhdGVJbnRlcnBvbGF0b3IoKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KICBvIFRFWFQtMTcwOiBBZGQgU3RyaW5nIGxvb2t1cCBmb3IgaG9zdCBuYW1lcyBhbmQgSVAgYWRkcmVzc2VzIChEbnNTdHJpbmdMb29rdXApLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgogICAgCi0gRml4ZWQgQnVncwogIG8gVEVYVC0xNjc6IGNvbW1vbnMtdGV4dCB3ZWIgcGFnZSBtaXNzaW5nICJSRUxFQVNFLU5PVEVTLTEuNy50eHQiLiBUaGFua3MgdG8gTGFycnkgV2VzdC4KICBvIFRFWFQtMTY4OiAoZG9jKSBGaXhlZCB3cm9uZyB2YWx1ZSBmb3IgSmFyby1XaW5rbGVyIGV4YW1wbGUgIzExNy4gVGhhbmtzIHRvIGx1a3NhbjQ3LgogIG8gVEVYVC0xNzE6IFN0cmluZ0xvb2t1cEZhY3RvcnkuYWRkRGVmYXVsdFN0cmluZ0xvb2t1cHMoTWFwKSBkb2VzIG5vdCBjb252ZXJ0IGtleXMgdG8gbG93ZXIgY2FzZS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KICAgIAotIENoYW5nZXMKICBvIEV4cGFuZCBKYXZhZG9jIGZvciBTdHJpbmdTdWJzdGl0dXRvciBhbmQgZnJpZW5kcy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KICBvIFtzaXRlXSBjaGVja3N0eWxlLnZlcnNpb24gOC4yMSAtPiA4LjIzLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgogICAgCgpIaXN0b3JpY2FsIGxpc3Qgb2YgY2hhbmdlczogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtdGV4dGNoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBUZXh0LCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQ29tbW9ucyBUZXh0IHdlYnNpdGU6CgpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy10ZXh0CgpEb3dubG9hZCBpdCBmcm9tIGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLXRleHQvZG93bmxvYWRfdGV4dC5jZ2kKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpBcGFjaGUgQ29tbW9ucyBUZXh0ClZlcnNpb24gMS43ClJlbGVhc2UgTm90ZXMKCklOVFJPRFVDVElPTjoKClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSAxLjcgdmVyc2lvbiBvZiBBcGFjaGUgQ29tbW9ucyBUZXh0LgpDb21tb25zIFRleHQgaXMgYSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHJldXNhYmxlIGNvbXBvbmVudHMgZm9yIHRoZSBwdXJwb3NlIG9mIHByb2Nlc3NpbmcKYW5kIG1hbmlwdWxhdGluZyB0ZXh0IHRoYXQgc2hvdWxkIGJlIG9mIHVzZSBpbiBhIEphdmEgZW52aXJvbm1lbnQuCgpBcGFjaGUgQ29tbW9ucyBUZXh0IGlzIGEgbGlicmFyeSBmb2N1c2VkIG9uIGFsZ29yaXRobXMgd29ya2luZyBvbiBzdHJpbmdzLgoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCk5ldyBmZWF0dXJlczoKCm8gVEVYVC0xNDg6ICBBZGQgYW4gZW51bSB0byB0aGUgbG9va3VwIHBhY2thZ2UgdGhhdCBsaXN0cyBhbGwgU3RyaW5nTG9va3VwcwpvIFRFWFQtMTI3OiAgQWRkIGEgdG9nZ2xlIHRvIHRocm93IGFuIGV4Y2VwdGlvbiB3aGVuIGEgdmFyaWFibGUgaXMgdW5rbm93biBpbiBTdHJpbmdTdWJzdGl0dXRvciBUaGFua3MgdG8gSmVhbi1CYXB0aXN0ZSBSRUlDSCwgU2ViYiwgRG9uIEplYmEsIEdhcnkgR3JlZ29yeS4KbyBURVhULTEzODogIFRleHRTdHJpbmdCdWlsZGVyIGFwcGVuZCBzdWItc2VxdWVuY2Ugbm90IGNvbnNpc3RlbnQgd2l0aCBBcHBlbmRhYmxlLiBUaGFua3MgdG8gTmVhbCBKb2huc29uLCBEb24gSmViYS4KbyBURVhULTE1MjogIEZpeCBwb3NzaWJsZSBpbmZpbml0ZSBsb29wIGluIFdvcmRVdGlscy53cmFwIGZvciBhIHJlZ2V4IHBhdHRlcm4gdGhhdCB3b3VsZCB0cmlnZ2VyIG9uIGEgbWF0Y2ggb2YgMCBsZW5ndGggVGhhbmtzIHRvIEBDQVBTNTAuCm8gVEVYVC0xNTU6ICBBZGQgYSBnZW5lcmljIEludGVyc2VjdGlvblNpbWlsYXJpdHkgbWVhc3VyZQoKRml4ZWQgQnVnczoKCm8gVEVYVC0xMTE6ICBXb3JkVXRpbHMud3JhcCBtdXN0IGNhbGN1bGF0ZSBvZmZzZXQgaW5jcmVtZW50IGZyb20gd3JhcE9uIHBhdHRlcm4gbGVuZ3RoIFRoYW5rcyB0byBAQ0FQUzUwLgpvIFRFWFQtMTUxOiAgRml4IHRoZSBKYXJvV2lua2xlclNpbWlsYXJpdHkgdG8gdXNlIFN0cmluZ1V0aWxzLmVxdWFscyB0byB0ZXN0IGZvciBDaGFyU2VxdWVuY2UgZXF1YWxpdHkKbyBURVhULTE2NTogIFJlc291cmNlQnVuZGxlU3RyaW5nTG9va3VwLmxvb2t1cChTdHJpbmcpIHRocm93cyBNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gaW5zdGVhZCBvZiByZXR1cm5pbmcgbnVsbC4KCkNoYW5nZXM6CgpvIFRFWFQtMTA0OiAgSmFybyBXaW5rbGVyIERpc3RhbmNlIHJlZmVycyB0byBzaW1pbGFyaXR5IFRoYW5rcyB0byBTYXNjaGEgU3pvdHQuCm8gVEVYVC0xNTM6ICBNYWtlIHByZWZpeFNldCBpbiBMb29rdXBUcmFuc2xhdG9yIGEgQml0U2V0IFRoYW5rcyB0byBhbWlyaGFkYWRpLgpvIFRFWFQtMTU2OiAgRml4IHRoZSBSZWdleFRva2VuaXplciB0byB1c2UgYSBzdGF0aWMgUGF0dGVybgpvIFRFWFQtMTU3OiAgUmVtb3ZlIHJvdW5kaW5nIGZyb20gSmFjY2FyZERpc3RhbmNlIGFuZCBKYWNjYXJkU2ltaWxhcml0eQpvIFRFWFQtMTYyOiAgVXBkYXRlIEFwYWNoZSBDb21tb25zIExhbmcgZnJvbSAzLjguMSB0byAzLjkuCm8gVXBkYXRlIHRlc3RzIGZyb20gb3JnLmFzc2VydGo6YXNzZXJ0ai1jb3JlIDMuMTIuMSB0byAzLjEyLjIuCm8gVXBkYXRlIHNpdGUgZnJvbSBjb20ucHVwcHljcmF3bC50b29sczpjaGVja3N0eWxlIDguMTggdG8gOC4yMS4KCkhpc3RvcmljYWwgbGlzdCBvZiBjaGFuZ2VzOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy10ZXh0L2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBUZXh0LCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQ29tbW9ucyBUZXh0IHdlYnNpdGU6CgpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy10ZXh0CgpEb3dubG9hZCBpdCBmcm9tIGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLXRleHQvZG93bmxvYWRfdGV4dC5jZ2kKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBDb21tb25zIFRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAxLjYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgpJTlRST0RVQ1RJT04KPT09PT09PT09PT09CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgMS42IHZlcnNpb24gb2YgQXBhY2hlIENvbW1vbnMKVGV4dC4gQ29tbW9ucyBUZXh0IGlzIGEgc2V0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCByZXVzYWJsZSBjb21wb25lbnRzIGZvcgp0aGUgcHVycG9zZSBvZiBwcm9jZXNzaW5nIGFuZCBtYW5pcHVsYXRpbmcgdGV4dCB0aGF0IHNob3VsZCBiZSBvZiB1c2UgaW4gYSBKYXZhCmVudmlyb25tZW50LgoKVGhpcyBjb21wb25lbnQgcmVxdWlyZXMgSmF2YSA4LgoKQ0hBTkdFUwo9PT09PT09CgpvIFRFWFQtMTQ0OiAgQWRkIHRoZSByZXNvdXJjZSBzdHJpbmcgYnVuZGxlIHN0cmluZyBsb29rdXAgdG8gdGhlIGRlZmF1bHQgc2V0IG9mIGxvb2t1cHMKbyBURVhULTE0NTogIEFkZCBTdHJpbmdMb29rdXBGYWN0b3J5IG1ldGhvZHMgZm9yIHRoZSBVUkwgZW5jb2RlciBhbmQgZGVjb2RlciBzdHJpbmcgbG9va3VwcwpvIFRFWFQtMTQ2OiAgb3JnLmFwYWNoZS5jb21tb25zLnRleHQubG9va3VwLlN0cmluZ0xvb2t1cEZhY3RvcnkuaW50ZXJwb2xhdG9yU3RyaW5nTG9va3VwKCkgc2hvdWxkIHJldXNlIGEgc2luZ2xldG9uIGluc3RhbmNlCm8gVEVYVC0xNDc6ICBBZGQgYSBCYXNlNjQgZW5jb2RlciBzdHJpbmcgbG9va3VwLgoKSGlzdG9yaWNhbCBsaXN0IG9mIGNoYW5nZXM6IGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLXRleHQvY2hhbmdlcy1yZXBvcnQuaHRtbAoKRm9yIGNvbXBsZXRlIGluZm9ybWF0aW9uIG9uIEFwYWNoZSBDb21tb25zIFRleHQsIGluY2x1ZGluZyBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN1Ym1pdCBidWcgcmVwb3J0cywKcGF0Y2hlcywgb3Igc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50LCBzZWUgdGhlIEFwYWNoZSBDb21tb25zIFRleHQgd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLXRleHQKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBDb21tb25zIFRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAxLjUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgpJTlRST0RVQ1RJT04KPT09PT09PT09PT09CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgMS41IHZlcnNpb24gb2YgQXBhY2hlIENvbW1vbnMKVGV4dC4gQ29tbW9ucyBUZXh0IGlzIGEgc2V0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCByZXVzYWJsZSBjb21wb25lbnRzIGZvciAKdGhlIHB1cnBvc2Ugb2YgcHJvY2Vzc2luZyBhbmQgbWFuaXB1bGF0aW5nIHRleHQgdGhhdCBzaG91bGQgYmUgb2YgdXNlIGluIGEgSmF2YQplbnZpcm9ubWVudC4KClRoaXMgY29tcG9uZW50IHJlcXVpcmVzIEphdmEgOC4KCk5FVyBGRUFUVVJFUwo9PT09PT09PT09PT0KCm8gVEVYVC0xMzM6ICBBZGQgYSBYTUwgZmlsZSBYUGF0aCBzdHJpbmcgbG9va3VwLgpvIFRFWFQtMTM0OiAgQWRkIGEgUHJvcGVydGllcyBmaWxlIHN0cmluZyBsb29rdXAuCm8gVEVYVC0xMzU6ICBBZGQgYSBzY3JpcHQgc3RyaW5nIGxvb2t1cC4KbyBURVhULTEzNjogIEFkZCBhIGZpbGUgc3RyaW5nIGxvb2t1cC4KbyBURVhULTEzNzogIEFkZCBhIFVSTCBzdHJpbmcgbG9va3VwLgpvIFRFWFQtMTQwOiAgQWRkIGEgQmFzZTY0IHN0cmluZyBsb29rdXAuCm8gVEVYVC0xNDE6ICBBZGQgb3JnLmFwYWNoZS5jb21tb25zLnRleHQubG9va3VwLlN0cmluZ0xvb2t1cEZhY3RvcnkucmVzb3VyY2VCdW5kbGVTdHJpbmdMb29rdXAoU3RyaW5nKS4KbyBURVhULTE0MjogIEFkZCBVUkwgZW5jb2RlciBhbmQgZGVjb2RlciBzdHJpbmcgbG9va3Vwcy4KbyBURVhULTE0MzogIEFkZCBjb25zdGFudCBzdHJpbmcgbG9va3VwIGxpa2UgdGhlIG9uZSBpbiBBcGFjaGUgQ29tbW9ucyBDb25maWd1cmF0aW9uLgoKRklYRUQgQlVHUwo9PT09PT09PT09CgpvIFRFWFQtMTM5OiAgSW1wcm92ZSBKYWNjYXJkU2ltaWxhcml0eSBjb21wdXRhdGlvbmFsIGNvc3QgVGhhbmtzIHRvIE5pY2sgV29uZy4KbyBURVhULTExODogIEpTT04gZXNjYXBpbmcgaW5jb3JyZWN0IGZvciB0aGUgZGVsZXRlIGNvbnRyb2wgY2hhcmFjdGVyIFRoYW5rcyB0byBOYW5kb3IgS29sbGFyLgpvIFRFWFQtMTMwOiAgRml4ZXMgSmFyb1dpbmtsZXJEaXN0YW5jZTogV3JvbmcgcmVzdWx0cyBkdWUgdG8gcHJlY2lzaW9uIG9mIHRyYW5zcG9zaXRpb25zIFRoYW5rcyB0byBKYW4gTWFydGluIEtlaWwuCm8gVEVYVC0xMzE6ICBKYXJvV2lua2xlckRpc3RhbmNlOiBDYWxjdWxhdGlvbiBkZXZpYXRlcyBmcm9tIGRlZmluaXRpb24gVGhhbmtzIHRvIEphbiBNYXJ0aW4gS2VpbC4KCkNIQU5HRVMKPT09PT09PQoKbyBURVhULTEzMjogIFVwZGF0ZSBBcGFjaGUgQ29tbW9ucyBMYW5nIGZyb20gMy43IHRvIDMuOC4xCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgQ29tbW9ucyBUZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMS40CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcwoKSU5UUk9EVUNUSU9OCj09PT09PT09PT09PQoKVGhpcyBkb2N1bWVudCBjb250YWlucyB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhlIDEuNCB2ZXJzaW9uIG9mIEFwYWNoZSBDb21tb25zClRleHQuIENvbW1vbnMgVGV4dCBpcyBhIHNldCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBhbmQgcmV1c2FibGUgY29tcG9uZW50cyBmb3IgCnRoZSBwdXJwb3NlIG9mIHByb2Nlc3NpbmcgYW5kIG1hbmlwdWxhdGluZyB0ZXh0IHRoYXQgc2hvdWxkIGJlIG9mIHVzZSBpbiBhIEphdmEKZW52aXJvbm1lbnQuCgpUaGlzIGNvbXBvbmVudCByZXF1aXJlcyBKYXZhIDguCgoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKICAgIApGaXhlZCBCdWdzOgpvIFRFWFQtMTIwOiAgU3RyaW5nRXNjYXBlVXRpbHMjdW5lc2NhcGVKc29uIGRvZXMgbm90IHVuZXNjYXBlIGRvdWJsZSBxdW90ZXMgYW5kIGZvcndhcmQgc2xhc2guCm8gVEVYVC0xMTk6ICBSZW1vdmUgbWVudGlvbiBvZiBTUUwgZXNjYXBpbmcgZnJvbSB1c2VyIGd1aWRlLgpvIFRFWFQtMTIzOiAgV29yZFV0aWxzLndyYXAgdGhyb3dzIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gd2hlbiB3cmFwTGVuZ3RoIGlzIEludGVnZXIuTUFYX1ZBTFVFLiBUaGFua3MgdG8gVGFrYW5vYnUgQXNhbnVtYS4KICAgICAgICAgICAgICAgIApDaGFuZ2VzOgpvIFRFWFQtMTIxOiAgVXBkYXRlIEphdmEgcmVxdWlyZW1lbnQgZnJvbSB2ZXJzaW9uIDcgdG8gOC4gVGhhbmtzIHRvIHBzY2h1bWFjaGVyLgpvIFRFWFQtMTIyOiAgQWxsb3cgZnVsbCBjdXN0b21pemF0aW9uIHdpdGggbmV3IEFQSSBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5sb29rdXAuU3RyaW5nTG9va3VwRmFjdG9yeS5pbnRlcnBvbGF0b3JTdHJpbmdMb29rdXAoTWFwPFN0cmluZywgU3RyaW5nTG9va3VwPiwgU3RyaW5nTG9va3VwLCBib29sZWFuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBDb21tb25zIFRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAxLjMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgpJTlRST0RVQ1RJT04KPT09PT09PT09PT09CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgMS4zIHZlcnNpb24gb2YgQXBhY2hlIENvbW1vbnMKVGV4dC4gQ29tbW9ucyBUZXh0IGlzIGEgc2V0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCByZXVzYWJsZSBjb21wb25lbnRzIGZvciAKdGhlIHB1cnBvc2Ugb2YgcHJvY2Vzc2luZyBhbmQgbWFuaXB1bGF0aW5nIHRleHQgdGhhdCBzaG91bGQgYmUgb2YgdXNlIGluIGEgSmF2YQplbnZpcm9ubWVudC4KClRoaXMgY29tcG9uZW50IHJlcXVpcmVzIEphdmEgNy4KCk5FVyBGRUFUVVJFUwo9PT09PT09PT09PT09CgpvIEFkZCBBdXRvbWF0aWMtTW9kdWxlLU5hbWUgTUFOSUZFU1QgZW50cnkgZm9yIEphdmEgOSBjb21wYXRpYmlsaXR5ICBJc3N1ZTogVEVYVC0xMTAuIApvIEFkZCBhbiBpbnRlcnBvbGF0b3Igc3RyaW5nIGxvb2t1cDogU3RyaW5nTG9va3VwRmFjdG9yeSNpbnRlcnBvbGF0b3JTdHJpbmdMb29rdXAoKSAgSXNzdWU6IFRFWFQtMTEzLiAKbyBBZGQgYSBTdHJTdWJzdGl0dXRvciByZXBsYWNlbWVudCBiYXNlZCBvbiBpbnRlcmZhY2VzOiBTdHJpbmdTdWJzdGl0dXRvciAgSXNzdWU6IFRFWFQtMTE0LiAKbyBBZGQgYSBTdHJCdWlsZGVyIHJlcGxhY2VtZW50IGJhc2VkIG9uIHRoZSBTdHJpbmdNYXRjaGVyIGludGVyZmFjZTogVGV4dFN0cmluZ0J1aWxkZXIgIElzc3VlOiBURVhULTExNS4gCm8gQWRkIGEgU3RyVG9rZW5pemVyIHJlcGxhY2VtZW50IGJhc2VkIG9uIHRoZSBTdHJpbmdNYXRjaGVyIGludGVyZmFjZTogU3RyaW5nVG9rZW5pemVyICBJc3N1ZTogVEVYVC0xMTYuIApvIEFkZCBhIGxvY2FsIGhvc3Qgc3RyaW5nIGxvb2t1cDogTG9jYWxIb3N0U3RyaW5nTG9va3VwICBJc3N1ZTogVEVYVC0xMTcuIAoKRklYRUQgQlVHUwo9PT09PT09PT09CgpvIEJ1aWxkIGZhaWx1cmUgd2l0aCBqYXZhIDktZWErMTU5ICBJc3N1ZTogVEVYVC03MC4gCm8gU3RyTG9va3VwIEFQSSBjb25mdXNpbmcgIElzc3VlOiBURVhULTgwLiAKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBDb21tb25zIFRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAxLjIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgpJTlRST0RVQ1RJT04KPT09PT09PT09PT09CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgMS4yIHZlcnNpb24gb2YgQXBhY2hlIENvbW1vbnMKVGV4dC4gQ29tbW9ucyBUZXh0IGlzIGEgc2V0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCByZXVzYWJsZSBjb21wb25lbnRzIGZvciAKdGhlIHB1cnBvc2Ugb2YgcHJvY2Vzc2luZyBhbmQgbWFuaXB1bGF0aW5nIHRleHQgdGhhdCBzaG91bGQgYmUgb2YgdXNlIGluIGEgSmF2YQplbnZpcm9ubWVudC4KClRoaXMgY29tcG9uZW50IHJlcXVpcmVzIEphdmEgNy4KCkpBVkEgOSBTVVBQT1JUCj09PT09PT09PT09PT09CgpBdCBvdXIgdGltZSBvZiByZWxlYXNlIG9mIDEuMSwgb3VyIGJ1aWxkIHN1Y2NlZWRzIHdpdGggSmF2YSA5LWVhIGJ1aWxkIDE1OSwKYW5kIHdlIGJlbGlldmUgYWxsIG9mIG91ciBmZWF0dXJlcyB0byBiZSBKYXZhIDkgY29tcGF0aWJsZS4gSG93ZXZlciwgd2hlbiB3ZQpydW4gIm12biBjbGVhbiBzaXRlIiB3ZSBoYXZlIGZhaWx1cmVzLgoKTkVXIEZFQVRVUkVTCj09PT09PT09PT09PT0KCm8gVEVYVC03NDogICBTdHJTdWJzdGl0dXRvcjogQWJpbGl0eSB0byB0dXJuIG9mZiBzdWJzdGl0dXRpb24gaW4gdmFsdWVzLiBUaGFua3MgdG8gSW9hbm5pcyBTZXJtZXR6aWFkaXMuCm8gVEVYVC05NzogICBSYW5kb21TdHJpbmdHZW5lcmF0b3IgYWJsZSB0byBwYXNzIG11bHRpcGxlIHJhbmdlcyB0byAud2l0aGluUmFuZ2UoKS4gVGhhbmtzIHRvIEFtZXkgSmFkaXllLgpvIFRFWFQtODk6ICAgV29yZFV0aWxzLmluaXRpYWxzIHN1cHBvcnQgZm9yIFVURi0xNiBzdXJyb2dhdGUgcGFpcnMuIFRoYW5rcyB0byBBcnVuIFZpbnVkIFMgUy4KbyBURVhULTkwOiAgIEFkZCBDaGFyYWN0ZXJQcmVkaWNhdGVzIGZvciBBU0NJSSBsZXR0ZXJzICh1cHBlcmNhc2UvbG93ZXJjYXNlKSBhbmQgYXJhYmljIG51bWVyYWxzLgpvIFRFWFQtODU6ICAgQWRkZWQgQ2FzZVV0aWxzIGNsYXNzIHdpdGggY2FtZWwgY2FzZSBjb252ZXJzaW9uIHN1cHBvcnQuIFRoYW5rcyB0byBBcnVuIFZpbnVkIFMgUy4KbyBURVhULTkxOiAgIFJhbmRvbVN0cmluZ0dlbmVyYXRvciBzaG91bGQgYmUgYWJsZSB0byBnZW5lcmF0ZSBhIFN0cmluZyB3aXRoIGEgcmFuZG9tIGxlbmd0aC4KbyBURVhULTEwMjogIEFkZCBTdHJMb29rdXAucmVzb3VyY2VCdW5kbGVMb29rdXAoUmVzb3VyY2VCdW5kbGUpLgoKRklYRUQgQlVHUwo9PT09PT09PT09CgpvIFRFWFQtMTA2OiAgRXhjZXB0aW9uIHRocm93biBpbiBFeHRlbmRlZE1lc3NhZ2VGb3JtYXQgdXNpbmcgcXVvdGVzIHdpdGggY3VzdG9tIHJlZ2lzdHJ5LiBUaGFua3MgdG8gQmVub2l0IE1vcmVhdS4KbyBURVhULTEwMDogIFN0cmluZ0VzY2FwZVV0aWxzI1VuRXNjYXBlSnNvbiBkb2Vzbid0IHJlY29nbml6ZSBlc2NhcGUgc2lnbnMgY29ycmVjdGx5LiBUaGFua3MgdG8gRG9uIEplYmEuCm8gVEVYVC0xMDU6ICBUeXBvIGluIExvbmdlc3RDb21tb25TdWJzZXF1ZW5jZSNsb2dlc3RDb21tb25TdWJzZXF1ZW5jZS4gVGhhbmtzIHRvIEFicmFzaGEuCgpDSEFOR0VTCj09PT09PT0KCm8gVEVYVC0xMDc6ICBVcHZlcnNpb24gY29tbW9ucy1sYW5nIHRvIDMuNy4KbyBURVhULTk4OiAgIERlcHJlY2F0ZSBpc0RlbGltaXRlciBhbmQgdXNlIEhhc2hTZXRzIGZvciBkZWxpbWl0ZXIgY2hlY2tzLiBUaGFua3MgdG8gQXJ1biBWaW51ZCBTIFMuCm8gVEVYVC04ODogICBXb3JkVXRpbHMgc2hvdWxkIHRyZWF0IGFuIGVtcHR5IGRlbGltaXRlciBhcnJheSBhcyBubyBkZWxpbWl0ZXJzLiBUaGFua3MgdG8gQW1leSBKYWRpeWUuCm8gVEVYVC05MzogICBVcGRhdGUgUmFuZG9tU3RyaW5nR2VuZXJhdG9yIHRvIGFjY2VwdCBhIGxpc3Qgb2YgdmFsaWQgY2hhcmFjdGVycy4gVGhhbmtzIHRvIEFtZXkgSmFkaXllLgpvIFRFWFQtOTI6ICAgVXBkYXRlIGNvbW1vbnMtbGFuZyBkZXBlbmRlbmN5IHRvIHZlcnNpb24gMy42LgpvIFRFWFQtODM6ICAgRG9jdW1lbnQgdGhhdCBjb21tb25zLWNzdiBzaG91bGQgYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIENzdlRyYW5zbGF0b3JzLiBUaGFua3MgdG8gQW1leSBKYWRpeWUuCm8gVEVYVC02NzogICBOdW1lcmljRW50aXR5VW5lc2NhcGVyLm9wdGlvbnMgLSBmaXggVE9ETy4KbyBURVhULTg0OiAgIFJhbmRvbVN0cmluZ0dlbmVyYXRvciBjbGFpbXMgdG8gYmUgaW1tdXRhYmxlLCBidXQgaXNuJ3QuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAxLjEKCkpBVkEgOSBTVVBQT1JUCj09PT09PT09PT09PT09CgpBdCBvdXIgdGltZSBvZiByZWxlYXNlIG9mIDEuMSwgb3VyIGJ1aWxkIHN1Y2NlZWRzIHdpdGggSmF2YSA5LWVhIGJ1aWxkIDE1OSwKYW5kIHdlIGJlbGlldmUgYWxsIG9mIG91ciBmZWF0dXJlcyB0byBiZSBKYXZhIDkgY29tcGF0aWJsZS4gSG93ZXZlciwgd2hlbiB3ZSAKcnVuICJtdm4gY2xlYW4gc2l0ZSIgd2UgaGF2ZSBmYWlsdXJlcy4KCk5FVyBGRUFUVVJFUwo9PT09PT09PT09PT0KCm8gVEVYVC00MTogICBXb3JkVXRpbHMuYWJicmV2aWF0ZSBzdXBwb3J0IFRoYW5rcyB0byBBbWV5IEphZGl5ZS4KbyBURVhULTgyOiAgIFB1dHRpbmcgV29yZFV0aWxzIGJhY2sgaW4gdG8gdGhlIGNvZGViYXNlIFRoYW5rcyB0byBBbWV5IEphZGl5ZS4KbyBURVhULTgxOiAgIEFkZCBSYW5kb21TdHJpbmdHZW5lcmF0b3IgVGhhbmtzIHRvIGRqb25lcy4KbyBURVhULTM2OiAgIFJhbmRvbVN0cmluZ0dlbmVyYXRvcjogYWxsb3cgdXNlcnMgdG8gcHJvdmlkZSBzb3VyY2Ugb2YgcmFuZG9tbmVzcwogICAgICAgICAgICAgVGhhbmtzIHRvIFJheW1vbmQgRGVDYW1wby4KICAgICAgICAgICAgICAgIApGSVhFRCBCVUdTCj09PT09PT09PT0KCm8gVEVYVC03NjogICBDb3JyZWN0IHJvdW5kIGlzc3VlIGluIEphcm8gV2lua2xlciBpbXBsZW1lbnRhdGlvbgpvIFRFWFQtNzI6ICAgU2ltaWxhciB0byBMQU5HLTEwMjUsIGNsaXJyIGZhaWxzIHNpdGUgYnVpbGQuCiAgICAgICAgICAgICAgICAKQ0hBTkdFUwo9PT09PT09CgpvIFRFWFQtMzk6ICAgV29yZFV0aWxzIHNob3VsZCB1c2UgdG9YeHh4Q2FzZShpbnQpIHJhdGhlciB0aGFuIHRvWHh4eENhc2UoY2hhcikgCiAgICAgICAgICAgICBUaGFua3MgdG8gQW1leSBKYWRpeWUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAxLjAKCklOQ09NUEFUSUJMRSBDSEFOR0VTCj09PT09PT09PT09PT09PT09PT09CgpBbGwgcGFja2FnZSBuYW1lcyBjaGFuZ2VkIGZyb20gb3JnLmFwYWNoZS5jb21tb25zLnRleHQuYmV0YSBpbiAxLjAtYmV0YS0xIHRvCm9yZy5hcGFjaGUuY29tbW9ucy50ZXh0IGluIDEuMC4KCk1ldGhvZHMgU3RyaW5nRXNjYXBlVXRpbHMjZXNjYXBlSHRtbDNPbmNlIGFuZCBTdHJpbmdFc2NhcGVVdGlscyNlc2NhcGVIdG1sNE9uY2UKaGF2ZSBiZWVuIHJlbW92ZWQ7IHNlZSBURVhULTQwCgpKQVZBIDkgU1VQUE9SVAo9PT09PT09PT09PT09PQoKQXQgb3VyIHRpbWUgb2YgcmVsZWFzZSBvZiAxLjAsIG91ciBidWlsZCBzdWNjZWVkcyB3aXRoIEphdmEgOS1lYSBidWlsZCAxNTgsCmFuZCB3ZSBiZWxpZXZlIGFsbCBvZiBvdXIgZmVhdHVyZXMgdG8gYmUgSmF2YSA5IGNvbXBhdGlibGUuIEhvd2V2ZXIsIHdoZW4gd2UgcnVuCiJtdm4gY2xlYW4gc2l0ZSIgd2UgaGF2ZSBmYWlsdXJlcy4KCkZJWEVEIEJVR1MKPT09PT09PT09PQoKbyBURVhULTY0OiAgIEludmVzdGlnYXRlIGxvY2FsZSBpc3N1ZSBpbiBFeHRlbmRlZE1lc3NhZ2VGb3JtYXRUZXN0LiBUaGFua3MgdG8KICAgICAgICAgICAgIGNodG9tcGtpLgpvIFRFWFQtNjk6ICAgUmVzb2x2ZSBQTUQvQ01EIFZpb2xhdGlvbnMKbyBURVhULTY1OiAgIEZpeGluZyB0aGUgMjAwIGNoZWNrc3R5bGUgZXJyb3JzIHByZXNlbnQgaW4gMS4wLWJldGEtMS4KbyBURVhULTYzOiAgIE11dGFibGUgZmllbGRzIHNob3VsZCBiZSBwcml2YXRlLgoKUkVNT1ZFRAo9PT09PT09CgpvIFRFWFQtNDA6ICAgRXNjYXBlIEhUTUwgY2hhcmFjdGVycyBvbmx5IG9uY2U6IHJldmVydC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzIGZvciB2ZXJzaW9uIDEuMC1iZXRhLTEKCgpBIE5PVEUgT04gVEhFIEhJU1RPUlkgT0YgVEhFIENPREUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGUgY29kZWJhc2UgYmVnYW4gaW4gdGhlIGZhbGwgb2YgMjAxNCBhcyBhIGxvY2F0aW9uIGZvciBob3VzaW5nIGFsZ29yaXRobXMgZm9yCm9wZXJhdGluZyBvbiBTdHJpbmdzIHRoYXQgc2VlbWVkIHRvIGhhdmUgYSBtb3JlIGNvbXBsZXggbmF0dXJlIHRoYW4gdGhvc2Ugd2hpY2gKd291bGQgYmUgY29uc2lkZXJlZCBhIG5lZWRlZCBleHRlbnNpb24gdG8gamF2YS5sYW5nLiBUaHVzLCBhIG5ldyBjb21wb25lbnQsCmRpZmZlcmVudCBmcm9tIEFwYWNoZSBDb21tb25zIExhbmcgd2FzIHdhcnJhbnRlZC4gQXMgdGhlIHByb2plY3QgZXZvbHZlZCwgaXQgd2FzCm5vdGljZWQgdGhhdCBDb21tb25zIExhbmcgaGFkIGNvbnNpZGVyYWJsZSBtb3JlIHRleHQgbWFuaXB1bGF0aW9uIHRvb2xzIHRoYW4KdGhlIGF2ZXJhZ2UgSmF2YSBhcHBsaWNhdGlvbiBkZXZlbG9wZXIgd291bGQgbmVlZCBvciBldmVuIHdhbnQuIFNvLCB3ZSBoYXZlCmRlY2lkZWQgdG8gbW92ZSB0aGUgbW9yZSBlc290ZXJpYyBTdHJpbmcgcHJvY2Vzc2luZyBhbGdvcml0aG1zIG91dCBvZiBDb21tb25zCkxhbmcgaW50byBDb21tb25zIFRleHQuCgpKQVZBIDkgU1VQUE9SVAo9PT09PT09PT09PT09PQoKQXQgb3VyIHRpbWUgb2YgcmVsZWFzZSBvZiAxLjAtYmV0YS0xLCBvdXIgYnVpbGQgc3VjY2VlZHMgd2l0aCBKYXZhIDktZWEgYnVpbGQgMTUzLAphbmQgd2UgYmVsaWV2ZSBhbGwgb2Ygb3VyIGZlYXR1cmVzIHRvIGJlIEphdmEgOSBjb21wYXRpYmxlLgoKTkVXIEZFQVRVUkVTCj09PT09PT09PT09PQoKbyBURVhULTU2OiAgIE1vdmUgQ3ZzVHJhbnNsYXRvcnMgb3V0IG9mIFN0cmluZ0VzY2FwZVV0aWxzIGFuZCBtYWtlIHRoZW0gRFJZCiAgICAgICAgICAgICBUaGFua3MgdG8gSmFyZWsgU3RyemVsZWNrLgpvIFRFWFQtNDA6ICAgRXNjYXBlIEhUTUwgY2hhcmFjdGVycyBvbmx5IG9uY2UgVGhhbmtzIHRvIFNhbXBhbm5hIEthaHUuCm8gVEVYVC0zMjogICBBZGQgTENTIHNpbWlsYXJpdHkgYW5kIGRpc3RhbmNlCm8gVEVYVC0zNDogICBBZGQgY2xhc3MgdG8gZ2VuZXJhdGUgcmFuZG9tIHN0cmluZ3MKbyBURVhULTI5OiAgIEFkZCBhIGJ1aWxkZXIgdG8gU3RyaW5nRXNjYXBlVXRpbHMKbyBURVhULTI4OiAgIEFkZCBzaGVsbC9YU0kgZXNjYXBlL3VuZXNjYXBlIHN1cHBvcnQKbyBURVhULTI6ICAgIEFkZCBKYWNjYXJkIEluZGV4IGFuZCBKYWNjYXJkIERpc3RhbmNlIFRoYW5rcyB0byBEb24gSmViYS4KbyBURVhULTI3OiAgIE1vdmUgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN0cmluZ0VzY2FwZVV0aWxzLmphdmEgaW50byB0ZXh0Cm8gVEVYVC0yMzogICBNb3ZpbmcgZnJvbSBjb21tb25zLWxhbmcsIHRoZSBwYWNrYWdlIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy50ZXh0Cm8gVEVYVC0xMDogICBBIG1vcmUgY29tcGxleCBMZXZlbnNodGVpbiBkaXN0YW5jZSBUaGFua3MgdG8gRG9uIEplYmEuCm8gVEVYVC0yNDogICBBZGQgY292ZXJhbGxzIGFuZCBUcmF2aXMuY2kgaW50ZWdyYXRpb24KbyBURVhULTE5OiAgIEFkZCBhbHBoYWJldCBjb252ZXJ0ZXIgVGhhbmtzIHRvIEV5YWwgQWxsd2VpbC4KbyBURVhULTEzOiAgIENyZWF0ZSBDb21tb25zIFRleHQgbG9nbwpvIFRFWFQtNzogICAgV3JpdGUgdXNlciBndWlkZQpvIFRFWFQtMTU6ICAgSHVtYW4gbmFtZSBwYXJzZXIKbyBURVhULTM6ICAgIEFkZCBDb3NpbmUgU2ltaWxhcml0eSBhbmQgQ29zaW5lIERpc3RhbmNlCm8gVEVYVC00OiAgICBQb3J0IE15ZXJzIGFsZ29yaXRobSBmcm9tIFtjb2xsZWN0aW9uc10KbyBURVhULTE6ICAgIEFkZCBIYW1taW5nIGRpc3RhbmNlCm8gVEVYVC05OiAgICBJbmNvcnBvcmF0ZSBTdHJpbmcgYWxnb3JpdGhtcyBmcm9tIENvbW1vbnMgTGFuZyBUaGFua3MgdG8gYnJpdHRlci4KCkZJWEVEIEJVR1MKPT09PT09PT09PQoKTm90ZS4gV2UgcmVjb2duaXplIHRoZSBjdXJpb3NpdHkgb2YgYSBuZXcgY29tcG9uZW50IGhhdmluZyAiZml4ZWQgYnVncywiIGJ1dCBhCmNvbnNpZGVyYWJsZSBudW1iZXIgb2YgZmlsZXMgd2VyZSBtaWdyYXRlZCBvdmVyIGZyb20gQ29tbW9ucyBMYW5nLCBzb21lIG9mIHdoaWNoCm5lZWRlZCBmaXhlcy4KCm8gVEVYVC02MjogICBJbmNvcnBvcmF0ZSBzdWdnZXN0aW9ucyBmcm9tIFJDMiBpbnRvIDEuMCByZWxlYXNlLgpvIFRFWFQtNjA6ICAgVXBncmFkaW5nIEphY29jbyBmb3IgSmF2YSA5LWVhIGNvbXBhdGliaWxpdHkuIFRoYW5rcyB0byBMZWUgQWRjb2NrLgpvIFRFWFQtNTI6ICAgUG9zc2libGUgYXR0YWNrcyB0aHJvdWdoIFN0cmluZ0VzY2FwZVV0aWxzLmVzY2FwZUVjbWFTY3JpcCBiZXR0ZXIKICAgICAgICAgICAgIGphdmFkb2MKbyBURVhULTM3OiAgIEdsb2JhbCB2cyBsb2NhbCBzb3VyY2Ugb2YgcmFuZG9tbmVzcwpvIFRFWFQtMzg6ICAgRmx1ZW50IEFQSSBpbiAiUmFuZG9tU3RyaW5nQnVpbGRlciIKbyBURVhULTI2OiAgIEZpeCBKYXJvV2lua2xlckRpc3RhbmNlIGluIHRoZSBtYW5uZXIgb2YgTFVDRU5FLTEyOTcKbyBURVhULTM1OiAgIFVuZmluaXNoZWQgY2xhc3MgSmF2YWRvYyBmb3IgQ29zaW5lRGlzdGFuY2UKbyBURVhULTIyOiAgIExldmVuc2h0ZWluRGlzdGFuY2UgcmVkdWNlIG1lbW9yeSBjb25zdW1wdGlvbgpvIFRFWFQtNTogICAgSVAgY2xlYXJhbmNlIGZvciB0aGUgbmFtZXMgcGFja2FnZQpvIFRFWFQtMTE6ICAgV29yayBvbiB0aGUgc3RyaW5nIG1ldHJpYywgZGlzdGFuY2UsIGFuZCBzaW1pbGFyaXR5IGRlZmluaXRpb25zIGZvcgogICAgICAgICAgICAgdGhlIHByb2plY3QKbyBURVhULTEyOiAgIENyZWF0ZSBTdHJpbmdEaXN0YW5jZUZyb20gY2xhc3MgdGhhdCBjb250YWlucyBhIFN0cmluZ01ldHJpYyBhbmQKICAgICAgICAgICAgIHRoZSAibGVmdCIgc2lkZSBzdHJpbmcuIFRoaXMgd291bGQgaGF2ZSBhIG1ldGhvZCB0aGF0IGFjY2VwdHMgdGhlCiAgICAgICAgICAgICAicmlnaHQiIHNpZGUgc3RyaW5nIHRvIHRlc3QuIFRoYW5rcyB0byBKb25hdGhhbiBiYWtlci4KbyBURVhULTg6ICAgIENoYW5nZSAoUikgU3RyaW5nTWV0cmljLmNvbXBhcmUoQ1MgbGVmdCwgQ1MgcmlnaHQpIHRvICJhcHBseSIgc28KICAgICAgICAgICAgIHRoYXQgaXQgaXMgY29uc2lzdGVudCB3aXRoIEJpRnVuY3Rpb24uIFRoYW5rcyB0byBKb25hdGhhbiBCYWtlci4KbyBURVhULTY6ICAgIEFsbG93IGV4dHJhIGluZm9ybWF0aW9uIChlLmcuIExldmVuc2h0ZWluIHRocmVzaG9sZCkgdG8gYmUgc3RvcmVkCiAgICAgICAgICAgICBhcyAoZmluYWwpIGZpZWxkcyBpbiB0aGUgU3RyaW5nTWV0cmljIGluc3RhbmNlLiBUaGFua3MgdG8gSm9uYXRoYW4KICAgICAgICAgICAgIEJha2VyLgoKQ0hBTkdFUwo9PT09PT09CgpvIFRFWFQtNjE6ICAgTmFtaW5nIHBhY2thZ2VzIG9yZy5hcGFjaGUuY29tbW9ucy50ZXh0LmJldGEgVGhhbmtzIHRvIExlZSBBZGNvY2suCm8gVEVYVC01ODogICBSZWZhY3RvciBFbnRpdHlBcnJheXMgdG8gaGF2ZSB1bm1vZGlmaWFibGVNYXBzIGluIGxldSBvZiBTdHJpbmdbXVtdCm8gVEVYVC01MzogICBQcmVwYXJlIHNpdGUgZm9yIDEuMCByZWxlYXNlCm8gVEVYVC01MDogICBVcGdyYWRlIGZyb20gY29tbW9ucy1wYXJlbnQgdmVyc2lvbiA0MSB0byB2ZXJzaW9uIDQyCm8gVEVYVC0zMzogICBDb25zb2xpZGF0aW5nIHNpbmNlIHRhZ3MgYXQgMS4wLCByZW1vdmluZyBkZXByZWNhdGVkIG1ldGhvZHMKbyBURVhULTE2OiAgIEltcHJvdmUgSHVtYW5OYW1lUGFyc2VyCgpSRU1PVkVECj09PT09PT0KCm8gVEVYVC01NTogICBSZW1vdmUgV29yZFV0aWxzIHRvIGJlIGFkZGVkIGJhY2sgaW4gYW4gdXBjb21pbmcgMS5YIHJlbGVhc2UKbyBURVhULTUxOiAgIFJlbW92ZSBSYW5kb21TdHJpbmdHZW5lcmF0b3IgdG8gYmUgYWRkZWQgYmFjayBpbiB0aGUgMS4xIHJlbGVhc2UKbyBURVhULTMxOiAgIFJlbW92ZSBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5uYW1lcywgZm9yIGxhdGVyIHJlbGVhc2UgdGhhbiAxLjAKCgpIaXN0b3JpY2FsIGxpc3Qgb2YgY2hhbmdlczogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvdGV4dC9jaGFuZ2VzLXJlcG9ydC5odG1sCgpGb3IgY29tcGxldGUgaW5mb3JtYXRpb24gb24gQXBhY2hlIENvbW1vbnMgVGV4dCwgaW5jbHVkaW5nIGluc3RydWN0aW9ucyBvbiBob3cKdG8gc3VibWl0IGJ1ZyByZXBvcnRzLCBwYXRjaGVzLCBvciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQsIHNlZSB0aGUgQXBhY2hlCkFwYWNoZSBDb21tb25zIFRleHQgd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3RleHQvCgpIYXZlIGZ1biEKLUFwYWNoZSBDb21tb25zIFRleHQgdGVhbQ==