V2VkIEp1biAgMiAxOTo0MDo1OCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogUmVsZWFzZSBvZiBsaWJ4bWwtMS4xLCBuZWFybHkgZXZlcnl0aGluZyBoYXMgYmVlbiB0b3VjaGVkIGZvcgoJICB0aGlzLgoJKiBBZGRlZCBtb3JlIHJlZ3Jlc3Npb24gdGVzdHMKCSogVXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbgoKU2F0IE1heSAyOSAxMzozNDo0MiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdOiB1bmlmaWVkIHRoZSBYTUxfTk9fQ09SQkEgZGVmaW5lcy4KCSogcGFyc2VyLmMgZW5jb2RpbmcuW2NoXTogc3RhcnRlZCBwbHVnZ2luZyBpbiBjaGFyIGVuY29kaW5nIGRldGVjdGlvbgoKRnJpIE1heSAyOCAyMjo1ODo0MiBFRFQgMTk5OSBNYW5pc2ggVmFjaGhhcmFqYW5pIDxtdmFjaGhhckB2Z2VyLnJ1dGdlcnMuZWR1PgoKCSogdHJlZS5jOiAoeG1sU2F2ZUZpbGUpIC0gcmVtb3ZlZCBkb3VibGUgY2FsbCBvZiB4bWxDb250ZW50RHVtcC4gIAoJICBBbHNvIGZyZWVkIGFsbG9jYXRlZCBidWZmZXIuCgpXZWQgQXByIDIxIDIyOjA3OjM1IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgkqIHBhcnNlci5bY2hdIHRyZWUuW2NoXSBlbnRpdGllcy5bY2hdIHZhbGlkLltjaF0gOiByZW1vdmVkIHRoZSBtYWluCgkgIHJlZW50cmFuY3kgcHJvYmxlbSBhdCBwcmludGluZy4gT25lIGlzIGxlZnQgaW4gZW50aXRpZXMuYywgdG8KCSAgcmVtb3ZlIEFTQVAKCSogdGVzdFNBWC5jIDogYWRkZWQgYSB0ZXN0IGV4YW1wbGUgc2hvd2luZyB0aGUgdXNlIG9mIHRoZSBTQVggCgkgIGludGVyZmFjZSBpZiBvbmUgZG9lc24ndCB3YW50IHRvIGJ1aWxkIHRoZSBET00gdHJlZS4KCSogaHRtbC9nbm9tZS14bWwtKi5odG1sIGh0bWwvaW5kZXguc2dtbDogcmVnZW5lcmF0ZWQgdGhlIGRvY3VtZW50YXRpb24KCk1vbiBBcHIgIDUgMTQ6MTQ6NDAgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5bY2hdIHRyZWUuW2NoXSBTQVguYywgcGFyc2VySW50ZXJuYWxzLmggdmFsaWQuW2NoXToKCSAgbGFyZ2UgcmV2YW1waW5nIG9mIHRoZSBwYXJzZXIgdG8gdXNlIFNBWCBjYWxsYmFja3MKCSAgaHR0cDovL3d3dy5tZWdnaW5zb24uY29tL1NBWC8gKG9yIGF0IGxlYXN0IGEgQyBsaWtlIGludGVyZmFjZQoJICBhIGxhIEV4cGF0KS4gSXQncyBub3cgcG9zc2libGUgdG8gc2V0IHVwIHlvdXIgb3duIGNhbGxiYWNrcwoJICBhbmQgdGhlIHBhcnNlciB3aWxsIG5vdCBidWlsZCBhIERPTSB0cmVlLgoJKiB0ZXN0LyogcmVzdWx0Lyo6IHVwZGF0ZWQgdGhlIHRlc3Qgc3VpdGUsIEkgZmluYWxseSByZW1vdmVkCgkgIHRoZSBvbGQgTmFtZXNwYWNlIGRyYWZ0IHN1cHBvcnQgKFBJIGJhc2VkKS4KCkZyaSBBcHIgIDIgMTc6NTc6MzIgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCB0ZXN0IHJlc3VsdCB0byBFWFRSQV9ESVNUIGZvciBtYWtlIHRlc3RzCgpXZWQgTWFyIDI0IDIxOjM3OjAyIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCBwYXJzZXJJbnRlcm5hbHMuaDogbW92ZWQgdGhlIGNoYXJzIG1hY3JvIGRlZmluaXRpb25zCgkgIHRvIHBhcnNlckludGVybmFscy5oCgkqIHBhcnNlci5jLCBlcnJvci5jOiBhcHBsaWVkIHBhdGNoZXMgZnJvbSAiS251dCDFa2Vzc29uIgoJICA8a2FAczIuY2hhbG1lcnMuc2U+IGZvciBjbGVhbiBjb21waWxhdGlvbiB1bmRlciBNU1ZDIDYgOi1vCgpUdWUgTWFyIDIzIDExOjEwOjE1IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbC1jb25maWcuaW4gOiBhcHBsaWVkIHBhdGNoIHRvIG1ha2UgLS12ZXJzaW9uIHdvcmsKCjE5OTktMDMtMDUgIFJhamEgUiBIYXJpbmF0aCAgPGhhcmluYXRoQGNzLnVtbi5lZHU+CgoJKiBNYWtlZmlsZS5hbSAoY2hlY2stbG9jYWwpOiBBbGlhcyBmb3IgYHRlc3RzJyB0YXJnZXQuICBUaGlzIHdpbGwKCWNhdXNlIGBtYWtlIGNoZWNrJyB0byBkbyB0aGUgcmlnaHQgdGhpbmcuCgkodGVzdHMpOiBEb24ndCBydW4gdGVzdHMgaW4gc3JjZGlyLiAgQWxzbywgcmVwbGFjZWQgY2FsbHMgdG8KCWJhc2VuYW1lIHdpdGggYSBgc2VkJyAiZXF1aXZhbGVudCIuCgpGcmkgTWFyICA1IDA3OjIzOjUzIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFJlbmFtZWQgZXJyb3IuaCB0byB4bWwtZXJyb3IuaCwgY29ycmVjdGVkIE1ha2VmaWxlLmFtIHRvIGxpc3QKCSAgaXQgaW4gdGhlIGhlYWRlciBhbmQgbm90IHRoZSBzb3VyY2VzLCB1cGRhdGVkIHRoZSBkb2MuCgkgIFRoYW5rcyB0byBUaW0gTW9vbmV5IDxtb29uZXlAZG9nYmVydC5jYy5uZHN1Lm5vZGFrLmVkdT4gZm9yCgkgIHBvaW50aW5nIHRoaXMgb3V0LgoKTW9uIE1hciAgMSAxMzoyNzoxNyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgcGFyc2VyLmgsIHBhcnNlckludGVybmFscy5oOiBtZW1vcnkgbGVhayBodW50aW5nLAoJICBleHBvcnRlZCB0aGUgaW5wdXRTdHJlYW0gcm91dGluZXMuCgkqIGRvYy9odG1sLyogOiB1cGRhdGVkIGFjY29yZGluZ2x5CgpTdW4gRmViIDI4IDIyOjUxOjMzIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCBwYXJzZXIuaCwgcGFyc2VySW50ZXJuYWxzLmg6IGFkZGVkIGEgZmV3IGV4dHJhCgkgIGludGVybmFsIGNhbGxzIHRvIGFsbG9jYXRlIGFuZCBmcmVlIHBhcnNlciBjb250ZXh0cyAuLi4KCSogZG9jL2h0bWwvKiA6IHVwZGF0ZWQgYWNjb3JkaW5nbHkKClRodSBGZWIgMjUgMTE6NTI6MjQgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluLCBNYWtlZmlsZS5hbSwgZG9jL21ha2VmaWxlLmFtIDogR2VuZXJhbCBjaGFuZ2VzIGZvcgoJICAxLjAuMCByZWxlYXNlIGFuZCBpbmNsdWRpbmcgdGhlIGdlbmVyYXRlZCBIVE1MIGRvY3VtZW50YXRpb24uCgpUaHUgRmViIDI1IDA5OjQ0OjUyIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG1ha2VmaWxlLmFtIDogYWRkZWQgcGFyc2VySW50ZXJuYWxzLmgsIG9vcHMuCgpNb24gRmViIDIyIDExOjI0OjU2IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlckludGVybmFscy5oOiBhZGRlZCB0aGlzIGhlYWRlciBnaXZpbmcgYWNjZXNzIHRvIHRoZSBwYXJzZXIKCSAgaW50ZXJuYWwgZnVuY3Rpb25zLgoJKiBkb2MvTWFrZWZpbGUuYW0gOiBhZGRlZCBhIHJlYnVpbGQgdGFyZ2V0IHdoaWNoIHJlYnVpbGRzIHRoZSBmdWxsCgkgIHNldCBvZiBkb2N1bWVudGF0aW9ucwoJKiBwYXJzZXIuW2NoXSB0cmVlLltjaF0gdmFsaWQuW2NoXTogc2VyaW91cyB1cGRhdGVzIHcuci50LiBwYXJzaW5nCgkgIHRoZSBpbnRlcm5hbCBzdWJzZXQuIAoJKiAqLmMgKi5oOiBtb2RpZmljYXRpb25zIG5lZWRlZCB0byBnZW5lcmF0ZSB0aGUgZG9jdW1lbnRhdGlvbiB1c2luZwoJICBndGstZG9jLCBjbGVhbnVwIG9mIGZ1bmN0aW9ucyBibG9ja3MsIHJlb3JnYW5pc2F0aW9uIG9mIHN0cnVjdAoJICBkZWNsYXJhdGlvbnMuCgpUdWUgRmViIDE2IDE3OjI3OjI5IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1ha2VmaWxlLmFtLCBzcGVjLCBkb2MvTWFrZWZpbGUuYW0gOiB1cGdyYWRpbmcgdG8gMC45OS44LCBmaXhpbmcKCSAgdGhlIHRhciBhbmQgc3BlYyBmaWxlIHRvIGluY2x1ZGUgdGhlIGJlZ2lubmluZyBvZiB0aGUgZG9jLgoKMTk5OS0wMi0xMyAgTnVubyBGZXJyZWlyYSAgPG5tcmZAcm5sLmlzdC51dGwucHQ+CgoJKiBkb2MvLmN2c2lnbm9yZTogQWRkZWQgdGhpcyBmaWxlLgoKTW9uIEZlYiAgOCAxOToyNzo1NiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbEdldFByb3AgdG8gcmV0dXJuICIiIHdoZW4gdGhlIGF0dHJpYnV0ZQoJICBleGlzdHMsIGV2ZW4gaWYgdGhlIG5vZGUtbGlzdCBpcyBOVUxMLgoKTW9uIEZlYiAgOCAxNjoxMDoxNSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IHBhdGNoZWQgYW4gZXJyb3Igb3V0cHV0dGluZyBlbXB0eSBhdHRyaWJ1dGUgdmFsdWVzLgoJKiBNYWtlZmlsZS5hbSBhbmQgZG9jL21ha2VmaWxlLmFtOiBoYXZlIGJlZW4gdXBkYXRlZCBkdXJpbmcgdGhlCgkgIHdlZWstZW5kLiBTb3JyeSBmb3IgYW4gZW1wdHkgQ1ZTIGxvZywgSSBnb3QgYSBzaGVsbCBwcm9ibGVtLgoKTW9uIEZlYiAgMSAxMjoxMDoxMyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmg6IGNsZWFuZWQgdXAgdXNpbmcgZW51bXMgaW5zdGVhZCBvZiBkZWZpbmVzCgkqIHBhcnNlci5jLCB2YWxpZC5bY2hdOiBtb3JlIHdvcmsgb24gcGFyc2luZy9vdXRwdXQgb2YgZWxlbWVudAoJICBkZWNsYXJhdGlvbnMKClN1biBKYW4gMzEgMjI6MDY6NDggQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdmFsaWQuW2NoXSwgdHJlZS5jLCBwYXJzZXIuYyA6IG1vcmUgd29yayB0b3dhcmQgZnVsbCBwYXJzaW5nCgkgIG9mIFhNTCBEVERzLgoJKiBSRUFETUU6IGFkZGVkIGluZm9ybWF0aW9ucyBhYm91dCBtYWlsaW5nLWxpc3QgYW5kIG9uLWxpbmUKCSAgZG9jdW1lbnRhdGlvbgoKMTk5OS0wMS0yNyAgUmFqYSBSIEhhcmluYXRoICA8aGFyaW5hdGhAY3MudW1uLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbiAoWE1MX0lOQ0xVREVESVIpOiBVc2UgLUkgbm90IC1MIGZvciBpbmNsdWRlcy4KClN1biBKYW4gMTcgMjA6MDY6MzYgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIHRyZWUuW2NoXSA6IG1vcmUgd29yayB0b3dhcmQgY29uZm9ybWFuY2UgdGVzdGluZywKCSAgYWRkZWQgYSBsYXN0IGVsZW1lbnQgdG8gYWNjZWxlcmF0ZSBwYXJzaW5nIG9mIHZlcnkgZmxhdCBzdHJ1Y3R1cmVzCgkgIHN0YXJ0ZWQgd29ya2luZyBvbiBpbnRlcm5hbCBzdWJzZXQgRWxlbWVudCBjb250ZW50IGRlY2xhcmF0aW9uLgoJKiB2YWxpZC5bY2hdIDogZmlyc3QgY3V0IGF0IGFkZGluZyBjb2RlIHRvd2FyZCB2YWxpZGF0aW9uLgoJKiBwcmV2aW91cyBjaGFuZ2VzIGhhZCBhbHNvIHNtYWxsIGltcGFjdCBvbiBtb3N0IGZpbGVzLCBlc3BlY2lhbGx5CgkgIHRoZSBjb25mb3JtYW5jZSB0ZXN0aW5nIHVzaW5nIEphbWVzIENsYXJrIHRlc3Qgc3VpdGUuCgpTdW4gSmFuIDE3IDE0OjQ1OjA2IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRlc3QvKiA6IHVwZGF0ZWQgdGhlIGV4YW1wbGVzLCBtb3N0IG9mIHRoZW0gd2VyZSBub3Qgd2VsbAoJICAgICAgICAgICBmb3JtZWQgKGh1bW0pLCBhbmQgYWRkZWQgcmRmMi4KCSogcmVzdWx0LyogOiByZXN1bHRpbmcgY2hhbmdlcyBpbiB0aGUgb3V0cHV0LgoKU3VuIERlYyAgNiAxMzowNjo1OCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IGNoYW5nZWQgdGhlIGJlaGF2aW91ciBvZiB4bWxHZXRQcm9wIG9uIE5VTEwgdmFsdWVzLgoKU2F0IERlYyAgNSAxMjoyNTowOSBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IHBhdGNoZWQgYSBidWcgaW4gdGhlIGdlbmVyYXRpb24gb2YgZW1wdHkgYXR0cmlidXRlcwoKRnJpIE5vdiAyNyAwMTozNjo1NCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbnRpdGllcy5bY2hdLCB0cmVlLltjaF0sIHRlc3Rlci5jOiBhZGRlZCBjb3B5IGludGVyZmFjZXMKCSAgZm9yIG5vZGUvdHJlZXMvZG9jdW1lbnRzLy4uLiBCaWdnZXN0IHByb2JsZW0gaXMgbmFtZXNwYWNlCgkgIHN1cHBvcnQgd2hlbiBjb3B5aW5nIHN1YnRyZWVzLgoKU3VuIE5vdiAxNSAxOTo1OTo0NyBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgZW50aXRpZXMuYzogaW1wcm92ZSBlbnRpdGllcyBhbmQgY2hhciByZWYgZW5jb2RpbmcsCgkgIGFuZCBjbGVhbnVwcyBvZiBlcnJvciBtZXNzYWdlcy4KCkZyaSBOb3YgMTMgMTM6MDM6MTAgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIGVudGl0aWVzLmM6IHNpbXBsZSBidWcgaHVudGluZyBkb25lIGR1cmluZyBycG0yaHRtbCBhbmQKCSAgcnBtZmluZCBpbnRlZ3JhdGlvbi4KClN1biBOb3YgIDggMTM6MTE6MDcgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLltjaF06IEFkZGVkIGludGVyZmFjZXMgYWxsb3dpbmcgdG8gc3BlY2lmeSBhIFNBWAoJICBoYW5kbGVyIGJlZm9yZSBwYXJzaW5nLgoKU3VuIE5vdiAgOCAwOTozOToxNyBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogcmVkaXJyZWN0IGFsbCBlcnJvcnMgcmVwb3J0aW5nIHRocm91Z2ggdGhlIFNBWAoJICBlcnJvciBmdW5jdGlvbgoKV2VkIE5vdiAgNCAxNDoyMTo1NCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbnRpdGllcy5jOiByYXRoZXIgdXNlIEhBVkVfU05QUklOVEYgYW5kIG5vdCBkZXBlbmQgb24gZ2xpYgoJKiBsaWJ0b29sLCB0bG1haW4gLi4uOiB1cGRhdGUgb2YgdGhlIGxpYnRvb2wgZmlsZXMKCjE5OTgtMTEtMDQgIE1pZ3VlbCBkZSBJY2F6YSAgPG1pZ3VlbEBudWNsZWN1LnVuYW0ubXg+CgoJKiBlbnRpdGllcy5jOiBVc2UgZ19zbnByaW50ZiBpbnN0ZWRhIG9mIHNucHJpbnRmLgoKU3VuIE5vdiAgMSAxNDozMTowNiBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbnRpdGllcy5jLCBwYXJzZXIuYzogZGVidWcgYW5kIGNsZWFudXAgb2YgQ2hhclJlZiBoYW5kbGluZy9zYXZpbmcuCgkgIGFkZGVkIGVudDUgdGVzdCBmb3IgdGhpcyBwdXJwb3NlLgoJKiBwYXJzZXIuYywgcGFyc2VyLmg6IGZvcm1hdHRpbmcsIGNvbW1lbnRzIGFuZCBVVEYtOCBwbGFubmluZy4KCkZyaSBPY3QgMzAgMDE6MzY6NTIgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IGZpeGVkPyBhIHN0cmFuZ2UgZXJyb3IgZHVlIHRvIGNvbXByZXNzaW9uIG9uIGEgR1dQCgkgIGRvY3VtZW50LgoKVGh1IE9jdCAyOSAwMDo0ODo0NSBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF06IGJ1ZyBmaXhpbmcKCSogZW50aXRpZXMuW2NoXTogZGVmaW5lZCBhIHNwZWNpZmljIHR5cGUgZm9yIHByZWRlZmluZWQgZW50aXRpZXMKCSogZG9jL3htbC5odG1sOiBtb3JlIGRvY3VtZW50YXRpb24gb24gdGhlIGxpYnJhcnksIGhvdyB0byB1c2UgaXQsCgkgIG92ZXJ2aWV3IG9mIHRoZSBpbnRlcmZhY2VzLgoKV2VkIE9jdCAyOCAxNzo1NjozNSBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF06IG1vcmUgY2xlYW51cCBvbiB0aGUgQVBJLCBtYWRlIHRoZSB0cmVlIG1vciBjb25mb3JtYW50LgoKVHVlIE9jdCAyNyAxNzo1NDowMCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IGNvcnJlY3RlZCBhIHNtYWxsIGJ1ZwoJKiBkb2MveG1sLmh0bWw6IGNvbnRpbnVpbmcgd3JpdGluZyBkb2N1bWVudGF0aW9uLgoKVHVlIE9jdCAyNyAxNzo1NDowMCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkZWJ1Z1hNTC5oIGRlYnVnWE1MLmM6IGFkZGVkIGRlYnVnZ2luZyB1dGlsaXRpZXMuCgkqIHRlc3Rlci5jOiBhZGRlZCAtLWRlYnVnIHN3aXRjaC4KCSogdHJlZS5jOiBwYXRjaGVkIGFuIGluY29ycmVjdCBub2RlLT50eXBlIGFzc2lnbm1lbnQuCgkqIHBhcnNlci5jOiBmb3JtYXR0aW5nLCBlbnN1cmUgdGhhdCBub2RlLT5kb2MgIT0gTlVMTCBpbiBhdHRyaWJ1dGVzCgpUdWUgT2N0IDI3IDAxOjE1OjM5IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCiAgICAgICAgKiBwYXJzZXIuW2NoXSBTQVguYyB0cmVlLltjaF06IGxhcmdlIGFtb3VudCBvZiBjaGFuZ2VzIHRvIGltcHJvdmUKICAgICAgICAgIGVudGl0eSBzdXBwb3J0IGFuZCBwcm92aWRlIGFuIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGNsb3NlIHRvCiAgICAgICAgICBET00gb25lIChlbnRpdHkgcmVmIG5vZGVzLCBhbmQgYXR0cmlidXRlIHZhbHVlIGFzIHRyZWUpLiBJIHRyaWVkCiAgICAgICAgICB0byBwcmVzZXJ2ZSB0aGUgaW50ZXJmYWNlIGJ1dCB0aGlzIHdpbGwgc3VyZWx5IGJyZWFrIHNvbWUgYXBwcwogICAgICAgICAgKEkgaGF2ZSB0byBjaGFuZ2UgcnBtMmh0bWwvcnBtZmluZCBmb3IgZXhhbXBsZSkuIEkgaGFkIHRvIGNoYW5nZQoJICB0d28gaW50ZXJmYWNlcywgYW5kIHRoZSBnZW5lcmF0ZWQgdHJlZSBpcyBzb21ld2hhdCBkaWZmZXJlbnQuCgkqIGRvYy8qIDogc3RhcnRlZCBkb2N1bWVudGluZyB0aGUgWE1MIGxpYnJhcnksIHRoZSB0cmVlIGFuZAoJICBET00vQ29yYmEuIFRoaXMgaXMgYSBmaXJzdCBzdGVwLgoKU2F0IE9jdCAyNCAxNDoyMzo1MSBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogU2V0IHVwIHRoZSBmb25jdGlvbnMgY29tbWVudCBibG9jaywgYm9yaW5nIGJ1dCB1c2VmdWwuCgkqIHBhcnNlci5oLCBTQVguYywgcGFyc2VyLmM6IG5vdyBhdHRyaWJ1dGVzIGFyZSBwcm9jZXNzZWQgdGhyb3VnaAoJICB0aGUgU0FYIGludGVyZmFjZS4gVGhlIHByb2JsZW0gaXMgdGhhdCBteSBTQVggaW50ZXJmYWNlIGRpdmVyZ2VkCgkgIHF1aXRlIGEgYml0IGZyb20gdGhlIG9yaWdpbmFsIG9uZSwgd2VsbCB0aGlzIGlzIG5vdCBhbiBvZmZpY2lhbAoJICBzcGVjLCBhbmQgdHJhbnNsYXRpbmcgaXQgZnJvbSBKYXZhIHRvIEMgaXMgaGFpcnkgYW55d2F5Li4uCgpUdWUgT2N0IDIwIDAyOjExOjIxIEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFNBWC5jLCBlbnRpdGllcy5jLCB0cmVlLmMsIGVuY29kaW5nLmMsIGVycm9yLmM6IFNldCB1cCB0aGUKCSAgZm9uY3Rpb25zIGNvbW1lbnQgYmxvY2ssIGJvcmluZyBidXQgdXNlZnVsLgoKU3VuIE9jdCAxOCAyMDo0MDo1OCBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbmNvZGluZy5bY2hdLCBNYWtlZmlsZS5hbTogQWRkZWQgdGhlIFVURi04LCBVVEYtMTYgYW5kIElTTyBMYXRpbiAxCgkgIGNvbnZlcnNpb24gcm91dGluZXMuIEhvd2V2ZXIgdGhleSBhcmUgbm90IHlldCB1c2VkIHRvIGNvbnZlcnQgdGhlCgkgIGlucHV0cy4gVGhlIGNvcmUgd2lsbCBydW4gd2l0aCBVVEYtOC4KClN1biBPY3QgMTggMTU6MDg6MTkgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jIDogbWFrZSBzdXJlIHRoYXQgdGhlIHR5cGUgaWQgaXMgcHJvcGVybHkgc2V0LXVwIHdoZW4KCSAgYSBuZXcgb2JqZWN0IGlzIGFsbG9jYXRlZCwgbmVlZGVkIGZvciBET00uCgpTYXQgT2N0IDE3IDAyOjQzOjIxIEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuaCwgdHJlZS5jOiBPaywgdGhlIG1haW4gb2JqZWN0cyBpbiB0aGUgdHJlZSB3aWxsIGJlIG5hdGl2ZQoJICBjb3JiYSBvYmplY3RzLCBpdCBjb3N0cyA4IGJ5dGVzIHBlciBOb2RlLCBBdHRyaWJ1dGUgYW5kIERvY3VtZW50CgkgIGJ1dCBpdCBzaW1wbGlmaWVzIHRoZSBDb3JiYSBpbnRlZ3JhdGlvbiBhIGxvdCAobm8gZXh0cmEgaW50ZXJmYWNlCgkgIG9iamVjdHMgdG8gYWxsb2NhdGUvZnJlZSkuCgpUdWUgT2N0IDEzIDIxOjQ2OjU3IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuaCwgdHJlZS5jLCBwYXJzZXIuYzogYWRkZWQgcHJldiBhbmQgZG9jIHBvaW50ZXJzIHRvIE5vZGUsCgkgIGFuZCBjaGFuZ2VkIE5PREVzIGNvbnRhbnRzIGZvciBjb25mb3JtaXR5IHdpdGggRE9NIExldmVsIDEKCldlZCBPY3QgIDcgMjM6NDI6NDYgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWRkZWQgaG9va3MgdG8ga2VlcCB0cmFjayBvZiBzZXJ2YW50cyB3aGVuIGNyZWF0aW5nIG9iamVjdHMKCSAgeG1sRG9jIGFuZCB4bWxOb2RlIChmb3IgQ29yYmEgZXhwb3J0KS4KClN1biBPY3QgIDQgMDM6MTg6MDkgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWRkZWQgeG1sLWNvbmZpZyBzY3JpcHQuCgpUaHUgT2N0ICAxIDE2OjIyOjM3IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCiAgICAgICAgKiBhdXRvZ2VuLnNoIDogYXBwbGllZCBwYXRjaCBmcm9tIEZyZWRlcmljIERldmVybmF5IDxkZXZlcm5heUBpc3Rhci5mcj4KCSAgdG8gYXV0b3VwZGF0ZSBsaWJ0b29sIGFuZCBhdXRvbWFrZSBjb25mIGZpbGVzLgoKMTk5OC0wOS0zMCAgTWlndWVsIGRlIEljYXphICA8bWlndWVsQG51Y2xlY3UudW5hbS5teD4KCgkqIE1ha2VmaWxlLmFtOiBVc2UgJz8nIHRvIHNlcGFyYXRlIHRoZSBzZWQKCWNvbW1hbmRzIGFzICcsJyBpcyB1c2VkIHdoZW4gcGVvcGxlIHBhc3MgLVdsLHNvbWV0aGluZy4KCgpUaHUgU2VwIDI0IDE1OjEzOjI5IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYywgdHJlZS5oOiBhZGRlZCBhIHBlci1kb2N1bWVudCBjb21wcmVzc2lvbiBpbnRlcmZhY2UuCgpUdWUgU2VwIDIyIDIwOjQ3OjM4IEVEVCAxOTk4CgoJKiB0cmVlLmMsIHRyZWUuaDogYWRkZWQgc2F2aW5nIHdpdGggY29tcHJlc3Npb24gYW5kIGFkZGVkIGludGVyZmFjZXMKCSAgdG8gY29udHJvbCB0aGUgY29tcHJlc3Npb24gbGV2ZWwgKHhtbEdldENvbXByZXNzTW9kZSwKCSAgeG1sU2V0Q29tcHJlc3NNb2RlKSBhbmQgYSBuZXcgc2F2ZSB0byBmaWxlbmFtZSBmdW5jdGlvbiAoeG1sU2F2ZUZpbGUpLgoKTW9uIFNlcCAyMSAyMDoxMToxMyBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogY29ycmVjdGVkIGEgbG9vcCBmb3IgZmlsZXMgb2Ygc2l6ZSAwCgoxOTk4LTA4LTIwICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogZXJyb3IuaDogTmV3IGZpbGUuICBDb250YWlucyBwcm90b3R5ZXMgZnJvbSBgZXJyb3IuYycuCgpUaHUgQXVnIDEzIDE5OjAyOjM0IDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmFtICh4bWxpbmNkaXIpOiBOZXcgbWFjcm8uCgkoeG1saW5jX0hFQURFUlMpOiBSZW5hbWVkIGZyb20gaW5jbHVkZV9IRUFERVJTLgoKVGh1IEF1ZyAxMyAwMDo0MDoxNCBFRFQgMTk5OCAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYXBwbGllZCBzbWFsbCBwYXRjaCBvbiBudW1lcmljIGVudGl0aWVzIGZyb20KCSAgQ2hyaXN0b3BoZXIgQmxpenphcmQgPGJsaXp6YXJkQGFwcGxpZWR0aGVvcnkuY29tPgoKV2VkIEF1ZyAxMiAyMzoxMjo1OCBFRFQgMTk5OCAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogTmV3IHJlbGVhc2UgMC4yLCByZW1vdmVkIHRoZSBvbGQgeG1sXyogZmlsZXMgc28gdGhhdCBpdCdzCgkgICAgY29oZXJlbnQgd2l0aCB0aGUgb3RoZXIgQ1ZTIGJhc2UgKFczQyksIGZhciBiZXR0ZXIgY29uZm9ybWFuY2UKCSAgICB0byBzdGFuZGFyZCwgbmV3IG5hbWVzcGFjZXMsIGRlY2VudCBlbnRpdGllcyBzdXBwb3J0LCBiZWdpbm5pbmcKCSAgICBvZiBhIFNBWC1saWtlIGludGVyZmFjZS4gTmVhcmx5IG5vdGhpbmcgbGVmdCBpbnRhY3QsIGV2ZW4gdGhlCgkgICAgdGVzdCBleGFtcGxlcyAuLi4KCjE5OTgtMDctMzAgIENocmlzdG9waGVyIEJsaXp6YXJkICA8YmxpenphcmRAYXBwbGllZHRoZW9yeS5jb20+CgoJKiAuY3ZzaWdub3JlOiBBZGQgLmRlcHMgZGlyCgpTdW4gSnVsIDI2IDE3OjI5OjUyIEVEVCAxOTk4ICBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxfdHJlZTogY2hhbmdlZCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc2NoZW1lIGZvciBuYW1lIGluIHhtbE5ld05vZGUKClN1biBKdWwgMjYgMDA6MTc6NTEgRURUIDE5OTggIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCiAgICAgICAgKiBjb25maWd1cmUuaW46IGFkZGVkIHRlc3QgZm9yIENQUAoJKiBBVVRIT1JTLCBDaGFuZ2Vsb2c6IHRoZSBvcmlnaW5hbCBvbmVzIGRpZG4ndCBnZXQgY29tbWl0ZWQgYnV0IHRoZQoJICAgIGdsaWIgb25lcyBpbnN0ZWFkLCBmaXhlZC4KCSogTWFrZWZpbGUuYW06IGNvcnJlY3RlZCBhbiBlcnJvciBpbiBsaWJyYXJ5IG5hbWluZwoKRnJpIEp1bCAyNCAxNjo0NzoxNCAxOTk4ICBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBpbnRlZ3JhdGVkIGNvZGUgZGV2ZWxvcHBlZCBhdCBXM0MKCSogY2hhbmdlZCB0aGUgb3JpZ2luYWwgQ29weXJpZ2h0CgkqIG1pZ3JhdGVkIHRvIGF1dG9tYWtlCgkqIHByZWZpeGVkIHRoZSBmaWxlbmFtZXMgYnkgeG1sXyB0byBhdm9pZCBmaWxlbmFtZSBjbGFzaGVzCgo=