LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgRmViIDI1IDE4OjExOjQwIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBtaXNjL21haW4uYzogQWxiZXJ0IGRlbiBIYWFuIDxhbGJlcnRkQGNvcmVsLmNhPgoJRm9yIHZhcmlvdXMgcmVhc29ucyBzb21lIG9mIG91ciBsaWJ3aW5lIGV4ZWN1dGFibGVzIG11c3QgaGF2ZSBhICIuIiBpbgoJdGhlaXIgZmlsZSBuYW1lcy4gVGhlICIuIiBjYXVzZXMgdHJvdWJsZSB3aGVuIHRoZSBmaWxlIG5hbWUgaXMgdXNlZCBhcwoJdGhlIGNsYXNzIG5hbWUgZm9yIGFuIFggcmVzb3VyY2UgYXMgd2luZSBkb2VzIGZvciBjb21tYW5kIGxpbmUgcGFyc2luZwoJdW5kZXIgWC4KCgkqIHdpbmRvd3Mvd2luLmM6CglNYWtlIEdldFdpbmRvd0xvbmcoR1dMX0hXTkRQQVJFTlQpIHJldHVybiB0aGUgc2FtZSB0aGluZyBhcwoJR2V0UGFyZW50MzI7IHN1Z2dlc3RlZCBieSBEYXZlIFBpY2tsZXMgPGRhdmVwQG51Z2F0ZS5kZW1vbi5jby51az4uCgoJKiBpbmNsdWRlL2dkaS5oLCBpbmNsdWRlL2hlYXAuaCwgaW5jbHVkZS93aW50eXBlcy5oOgoJRGF2aWQgTHV5ZXIgPGx1eWVyQHVjcy51d2EuZWR1LmF1PgoJQWRkZWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpIG9uIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGRlY2xhcmVkIGluCgloZWFkZXIgZmlsZXMuCgoJKiBkb2N1bWVudGF0aW9uL2J1Z3JlcG9ydHM6IEFkYW0gdGhlIEphenogR3V5IDxtYWdpY2JveEBiZXN0d2ViLm5ldD4KCUFkZGVkICJUaGUgRWFzeSBXYXkiIGFuZCAiVGhlIEhhcmQgV2F5IiwgbGFyZ2VseSBmYXZvcmluZyB0aGUgZWFzeSB3YXksCgl3aGljaCB1c2VzIG15IGJ1Z19yZXBvcnQucGwgc2NyaXB0LgoJQWRkZWQgaW5mbyBvbiBhIGNvbW1hbmQgdGhhdCBjYW4gYmUgcnVuIG9uIGFsbCBzaGVsbHMgdG8gcHJpbnQgZGVidWcKCW1zZ3MgdG8gYSBmaWxlIGFuZCBub3QgdG8geHRlcm0uCgoJKiBtc2Rvcy9kcG1pLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQHN0dWQuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglOZWVkcyB0aHJlYWQuaCBmb3Igbm9uLUxpbnV4LgoKCSogaW5jbHVkZS93aW4uaCwgd2luZG93cy93aW4uYzoKCUZyYW5jb2lzIEJvaXN2ZXJ0IDxmcmFuY29pc0BtYWNhZGFtaWFuLmNvbT4KCUFkZGluZyBvZiBuZXcgZnVuY3Rpb25zIHRvIG1ha2UgdGhlIHduZCBzdHJ1Y3QgdGhyZWFkIHNhZmUuIEFkZGluZyBvZgoJaXJlZkNvdW50IGluIHduZCBzdHJ1Y3QuCgoJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgY29uc29sZS9uY3Vyc2VzLmMsIGluY2x1ZGUvYWNjb25maWcuaCwgaW5jbHVkZS9jb25maWcuaC5pbjoKCU1pY2hhZWwgVmVrc2xlciA8bXZla3NsZXJAdGVjaHVuaXgudGVjaG5pb24uYWMuaWw+CglBZGRlZCBjb25maWd1cmUgY2hlY2sgZm9yIGdldGJrZ2QgYW5kIGRlZmluZSBIQVZFX0dFVEJLR0QuCgoJKiBpbmNsdWRlL29jaWRsLmgsIGluY2x1ZGUvb2xlMi5oLCBpbmNsdWRlL29sZWlkbC5oLCBpbmNsdWRlL3dpbmUvb2JqX2NhY2hlLmgsIGluY2x1ZGUvd2luZS9vYmpfY29ubmVjdGlvbi5oLCBpbmNsdWRlL3dpbmUvb2JqX2NvbnRyb2wuaCwgaW5jbHVkZS93aW5lL29ial9pbnBsYWNlLmgsIGluY2x1ZGUvd2ludHlwZXMuaCwgb2xlL29sZWZvbnQuYzoKCVBhdWwgUXVpbm4gPHBhdWxxQGNvcmVsLmNhPgoJTWFueSBpbnRlcmZhY2UgZGVjbGFyYXRpb25zIHRoYXQgb3JpZ2luYXRlZCBmcm9tIG9sZWlkbC5oLCBvYWlkbC5oIGFuZAoJb2NpZGwuaCBzZXBhcmF0ZWQgaW50byBzb21ld2hhdCByZWxldmFudCBvYmpfKiBmaWxlcy4KCgkqIGZpbGVzL2RyaXZlLmMsIG9sZS9jb21wb2JqLmMsIHJlc291cmNlcy9zeXNyZXMuYzoKCU1pY2hhZWwgVmVrc2xlciA8bXZla3NsZXJAdGVjaHVuaXgudGVjaG5pb24uYWMuaWw+CglGaXhlZCB3YXJuaW5nIGFuZCBjb21waWxhdGlvbiBlcnJvcnMuCgoJKiBpbmNsdWRlL3dpbmRvd3MuaDogTWljaGFlbCBWZWtzbGVyIDxtdmVrc2xlckB0ZWNodW5peC50ZWNobmlvbi5hYy5pbD4KCVJlbW92ZWQgaW5jbHVkZXMgb2Ygd2luZS8qIGhlYWRlcnMuCgoJKiBsb2FkZXIvcmVzb3VyY2UuYzogUGF2ZWwgUm9za2luIDxwYXZlbF9yb3NraW5AZ2VvY2l0aWVzLmNvbT4KCU1hZGUgbWVzc2FnZSAiUmVzb3VyY2Ugbm90IGZvdW5kIiBXQVJOLgoKCSogZGxscy9zaGVsbDMyL2NvbnRtZW51LmMsIGluY2x1ZGUvc2hsb2JqLmg6CglBZHJpYW4gVGh1cnN0b24gPGFkcmlhbnRAQ09SRUwuQ0E+CgktIFVzZSB0aGUgbmV3IENPTSBkZWZpbml0aW9uIG1hY3JvcyBpbiB0aGUgaGVhZGVyLgoJLSBQdXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gdGhlIGNvbnRtZW51LmMuCgktIE1ha2UgYXBwcm9wcmlhdGUgbmFtZSBjaGFuZ2VzIGluIGNvbnRtZW51LmMuCgoJKiBtaXNjL3JlZ2lzdHJ5LmMsIGluY2x1ZGUvd2lucmVnLmg6IFBhdWwgUXVpbm4gPHBhdWxxQGNvcmVsLmNhPgoJWnlnbyBCbGF4ZWxsIDx6eWdvYkBjb3JlbC5jYT4KCU1vZGlmaWVzIHBhcmFtZXRlciBsaXN0IG9mIGEgY291cGxlIG9mIGZ1bmN0aW9ucyB0byBjb21wbHkgd2l0aCBTREsuCgoJKiB3aW5kb3dzL3Njcm9sbC5jOiBQYXNjYWwgTGVzc2FyZCA8cGFzY2FsQG1hY2FkYW1pYW4uY29tPgoJU2Nyb2xsREMzMiBtb2RpZmllZCB0byByZXR1cm4gcmVjdCBpbiBsb2dpY2FsIGNvb3JkaW5hdGUuCgoJKiBpbmNsdWRlL3dpbmUvb2JqX29sZWF1dC5oOiBBZHJpYW4gVGh1cnN0b24gPGFkcmlhbnRAQ09SRUwuQ0E+CglBZGRzIEMrKyBuYW1lbGVzcyB1bmlvbiBzdXBwb3J0IHRvIHRhZ1ZBUklBTlQuCgoJKiBpbmNsdWRlL21tc3lzdGVtLmgsIGluY2x1ZGUvb2FpZGwuaCwgaW5jbHVkZS9vbGVhdXRvLmg6CglBZHJpYW4gVGh1cnN0b24gPGFkcmlhbnRAQ09SRUwuQ0E+CglNb3ZlZCBzb21lIGRlZmluaXRpb25zIG91dCBvZiBvbGVhdXRvLmggYW5kIGludG8gb2FpZGwuaCB0byBjb25mb3JtIHRvIHRoZSBTREsuCglSZW1vdmVkIGEgcmVkdW5kYW50IGluY2x1ZGUuCglBZGRlZCBzb21lIGMrKyBwcm90ZWN0aW9uLgoKV2VkIEZlYiAyNCAxNTo1ODo1MSAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZGxscy9zaGVsbDMyL2VudW1pZGxpc3QuYywgZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3BpZGwuaCwgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCBpbmNsdWRlL3NobG9iai5oOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglDaGFuZ2VkIHBpZGwgc3RydWN0dXJlIHRvIG1hdGNoIHRoZSBwaWRsJ3MgdXNlZCBpbiBsbmstZmlsZXMuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGxsaW5rLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUltcGxlbWVudGVkIHJlYWRpbmcgb2YgKi5sbmstZmlsZXMuCgoJKiBpbmNsdWRlL3dpbmUvb2JqX3NoZWxsbGluay5oOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CgluZXcgZmlsZSwgaW5jbHVkaW5nIHRoZSBJU2hlbGxMaW5rIGRlZmluaXRpb24uCgoJKiBpbmNsdWRlL21vZHVsZS5oLCBpbmNsdWRlL3BlX2ltYWdlLmgsIGxvYWRlci9lbGYuYywgbG9hZGVyL21haW4uYywgbG9hZGVyL21vZHVsZS5jLCBsb2FkZXIvcGVfaW1hZ2UuYywgbG9hZGVyL3BlX3Jlc291cmNlLmMsIGxvYWRlci9yZXNvdXJjZS5jLCBsb2FkZXIvdGFzay5jLCBzY2hlZHVsZXIvdGhyZWFkLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCU1vZGlmaWVkIHByb2Nlc3MgY3JlYXRpb24gc2VxdWVuY2U6IGNhbGwgUEVfQ3JlYXRlTW9kdWxlIGluIHRoZQoJY29udGV4dCBvZiB0aGUgbmV3IHByb2Nlc3MgKGluIFRBU0tfQ2FsbFRvU3RhcnQpLgoJQ2hhbmdlZCBhbGwgUEUvTW9kdWxlIHJvdXRpbmVzIHNvIGFzIHRvIGFsd2F5cyBvcGVyYXRlIG9uIHRoZSBjdXJyZW50Cglwcm9jZXNzOyBhZGFwdGVkIGFsbCBjYWxsZXJzLgoKCSogbXNkb3MvZG9zY29uZi5jLCBtc2Rvcy9kb3NtZW0uYywgbXNkb3MvZHBtaS5jLCBtc2Rvcy9pbnQxNi5jLCBtc2Rvcy9pbnQyMS5jLCBtc2Rvcy9pbnQyYS5jLCBtc2Rvcy9pbnRlcnJ1cHRzLmMsIG1zZG9zL2lvcG9ydHMuYywgbXNkb3MvdnhkLmMsIG1zZG9zL3htcy5jLCBvbGUvc3RvcmFnZS5jLCBvbGUvdHlwZWxpYi5jLCBwcm9ncmFtcy9hdml0b29scy9pY2luZm8uYywgcmVsYXkzMi9yZWxheTM4Ni5jLCB0b29scy9idWlsZC5jLCB3aW5kb3dzL2NsaXBib2FyZC5jLCB3aW5kb3dzL2lucHV0LmMsIGRsbHMvc2hlbGwzMi9jb250bWVudS5jLCBkbGxzL3NoZWxsMzIvZW51bWlkbGlzdC5jLCBkbGxzL3NoZWxsMzIvZm9sZGVycy5jLCBkbGxzL3NoZWxsMzIvc2hlbGxsaW5rLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9sZS5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jLCBncmFwaGljcy9kM2RkZXZpY2VzLmMsIGdyYXBoaWNzL2QzZGV4ZWN1dGVidWZmZXIuYywgZ3JhcGhpY3MvZDNkbGlnaHQuYywgZ3JhcGhpY3MvZDNkbWF0ZXJpYWwuYywgZ3JhcGhpY3MvZDNkdGV4dHVyZS5jLCBncmFwaGljcy9kM2R2aWV3cG9ydC5jLCBncmFwaGljcy9kZHJhdy5jLCBsb2FkZXIvbWFpbi5jLCBtZW1vcnkvYXRvbS5jLCBtaXNjL2xzdHIuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJT3B0aW1pemVkIGF3YXkgbW9yZSBpbmNsdWRlcywgcmVhZGRlZCBzb21lICNpbmNsdWRlcyBmb3IgbmVjZXNzYXJ5Cglwcm90b3R5cGVzLgoKCSogbXNkb3MvaW50MmYuYzogPHNtaWxAbWVjaGF0cm9uaWthLmh1PgoJQWRkZWQgbG93LWxldmVsIE5ldHdhcmUgaW5zdGFsbGF0aW9uIGNoZWNrLgoKCSogaW5jbHVkZS9jb25zb2xlLmgsIGNvbnNvbGUvaW50ZXJmYWNlLmMsIGNvbnNvbGUvbmN1cnNlcy5jOgoJSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglBZGRlZCBHZXRCYWNrZ3JvdW5kQ29sb3IgY2FsbCB0byB0aGUgY29uc29sZSBzdHJ1Y3QuIFdpbGwgYmUgdXNlZAoJbGF0ZXIuCgoJKiBtc2Rvcy9pbnQxMC5jOiBKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCUJ1Z2ZpeGVzIGZvciBJTlQgMTAvMEIgKFNldEJhY2tncm91bmRDb2xvcikgdG8gd29yayBwcm9wZXJseS4KCShJbnRlcnJ1cHQgbGlzdCBkaWQgbm90IGhhdmUgY29ycmVjdC4pCgoJKiB3aW5kb3dzL2RpbnB1dC5jOiBMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUFkZGVkIHN0dWJzIGZvciB0d28gbWlzc2luZyBtZXRob2RzIG9mIERJbnB1dC4KCgkqIG9sZS9zdGdfYmlnYmxvY2tmaWxlLmM6IFRodXkgTmd1eWVuIDx0aHV5QG1hY2FkYW1pYW4uY29tPgoJRml4ZWQgYSBidWcuCgoJKiBvbGUvc3RvcmFnZTMyLmMsIG9sZS9zdG9yYWdlMzIuaDogVGh1eSBOZ3V5ZW4gPHRodXlAbWFjYWRhbWlhbi5jb20+CglBZGRlZCBzdXBwb3J0IGZvciBsYXJnZXIgZmlsZXMuCgoJKiBvYmplY3RzL2RpYi5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeGVzIGJ1ZmZlciBvdmVycnVuIHByb2JsZW1zIHdpdGggR2V0RElCaXRzLgoKCSogd2luZG93cy9tZXNzYWdlLmM6IFN0ZXBoYW5lIEx1c3NpZXIgPHN0ZXBoYW5lQG1hY2FkYW1pYW4uY29tPgoJRml4ZWQgc29tZSBTZW5kTWVzc2FnZSBidWdzLgoKCSogb2xlL2NvbXBvYmouYzogU3lsdmFpbiBTdC5HZXJtYWluIDxzeWx2YWluQG1hY2FkYW1pYW4uY29tPgoJRml4IENPTV9FeHRlcm5hbExvY2tGcmVlTGlzdCB0byBkbyBub3QgZmFpbCB3aXRoIGFuIGVtcHR5IGxpc3QuCgpNb24gRmViIDIyIDEwOjIxOjU2IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBtaXNjL01ha2VmaWxlLmluLCBtaXNjL3N0cmluZy5jOgoJWnlnbyBCbGF4ZWxsIDx6YmxheGVsbEBmdXJyeXRlcnJvci5vcmc+CglJbXBsZW1lbnRlZCBzb21lIENSVERMTCBzdHJpbmcgZnVuY3Rpb25zLgoKCSogb2JqZWN0cy9lbmhtZXRhZmlsZS5jLCBvYmplY3RzL2xpbmVkZGEuYywgb2JqZWN0cy9tZXRhZmlsZS5jLCBvYmplY3RzL3RleHQuYywgd2luZG93cy9jYXJldC5jLCB3aW5kb3dzL2NsaXBib2FyZC5jLCB3aW5kb3dzL2RpYWxvZy5jLCB3aW5kb3dzL2RyaXZlci5jLCB3aW5kb3dzL2hvb2suYywgd2luZG93cy9pbnB1dC5jLCB3aW5kb3dzL2tleWJvYXJkLmMsIHdpbmRvd3MvbWRpLmMsIHdpbmRvd3MvbW91c2UuYywgd2luZG93cy9tdWx0aW1vbi5jLCB3aW5kb3dzL3JlY3QuYywgd2luZG93cy9zY3JvbGwuYywgd2luZG93cy90aW1lci5jLCB3aW5kb3dzL3VzZXIuYywgd2luZG93cy93aW5wcm9jLmMsIGluY2x1ZGUvbWVudS5oLCBpbmNsdWRlL21tc3lzdGVtLmgsIGluY2x1ZGUvc3lzbWV0cmljcy5oLCBpbmNsdWRlL3Zmdy5oLCBtdWx0aW1lZGlhL2F1ZGlvLmMsIG11bHRpbWVkaWEvZHBsYXkuYywgbXVsdGltZWRpYS9kc291bmQuYywgbXVsdGltZWRpYS9pbml0LmMsIG11bHRpbWVkaWEvam95c3RpY2suYywgbXVsdGltZWRpYS9tY2lhbmltLmMsIG11bHRpbWVkaWEvbWNpY2RhLmMsIG11bHRpbWVkaWEvbWNpbWlkaS5jLCBtdWx0aW1lZGlhL21jaXN0cmluZy5jLCBtdWx0aW1lZGlhL21jaXdhdmUuYywgbXVsdGltZWRpYS9taWRpLmMsIG11bHRpbWVkaWEvbWl4ZXIuYywgbXVsdGltZWRpYS9tbWF1eC5jLCBtdWx0aW1lZGlhL21taW8uYywgbXVsdGltZWRpYS9tbXN5c3RlbS5jLCBtdWx0aW1lZGlhL3RpbWUuYywgb2JqZWN0cy9jdXJzb3JpY29uLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNvbWUgbW9yZSByZWN1cnNpdmUgaW5jbHVkZSBmaXhlcy9vcHRpbWl6YXRpb25zLgoKCSogZGxscy9zaGVsbDMyL2NvbnRtZW51LmMsIGRsbHMvc2hlbGwzMi9lbnVtaWRsaXN0LmMsIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYywgZGxscy9zaGVsbDMyL3BpZGwuaCwgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CgktIGVsaW1pbmF0ZWQgb25lIGVsZW1lbnQgb2YgdGhlIHBpZGwgc3RydWN0IChkd1NGR0FPKQoJLSBjaGFuZ2VkIHNvbWUgc3VwZXJmbG91cyBGSVhNRQoKCSogZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCBpbmNsdWRlL3dpbmUvb2JqX2RyYWdkcm9wLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCS0gaGVhZGVyIHVzZXMgdGhlIGxhc3QgbWFjcm9zIG5vdwoJLSByZXdyb3RlIElEcm9wVGFyZ2V0IGFjY29yZGluZyB0byB0aGUgbmV3IENPTSBoZWFkZXJzCgkgICh3YXMgbG9jYWwgZGVjbGFyZWQgbm90IHVzaW5nIHRoZSBhbHJlYWR5IHdyaXR0ZW4gcHJvdG90eXBlcykKCS0gY29ycmVjdGVkIERyb3AgbWV0aG9kICh3cm9uZyBwYXJhbWV0ZXIgY291bnQpCgoJKiB3aW5kb3dzL2RpbnB1dC5jOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCVVwZGF0ZWQgdG8gdXNlIHRoZSBsYXRlc3QgQ09NIG1hY3JvcywgSUNPTV9WVEFCTEUgYW5kIElDT01fVEhJUy4KCUFkZGVkIHRoZSBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24gc3RydWN0dXJlcy4KCUkgcmVtZW1iZXJlZCBmcm9tIGFuIGVtYWlsIHRoYXQgZXZlbiB3aGVuIGFza2VkIGZvciBhCglJRGlyZWN0SW5wdXREZXZpY2VBIHdoYXQgd2FzIHJldHVybmVkIHdhcyBhbiBJRGlyZWN0SW5wdXREZXZpY2UyQSBzbyBJCgljb25zaWRlcmVkIHRoYXQgd2Ugd291bGQgb25seSBpbXBsZW1lbnQgdGhlIGxhdHRlci4gVGhlCglJRGlyZWN0SW5wdXREZXZpY2VBX3h4eCBtZXRob2RzIGhhdmUgYmVlbiByZW5hbWVkIHRvCglJRGlyZWN0SW5wdXREZXZpY2UyQV94eHgsIGFuZCB3ZSBhbHdheXMgcmV0dXJuIG91ciBJRGlyZWN0SW5wdXREZXZpY2UyQQoJaW1wbGVtZW50YXRpb24gYXMgYmVmb3JlLgoJUmVuYW1lZCB0aGUgaW1wbGVtZW50YXRpb24gc3RydWN0dXJlcyB0byBYeHhJbXBsLgoKCSogaW5jbHVkZS9kaW5wdXQuaDogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglVc2UgbGF0ZXN0IENPTSBtYWNyb3MKCURlZmluZWQgdGhlIElEaXJlY3RJbnB1dERldmljZUEgaW50ZXJmYWNlIGluZGVwZW5kZW50bHkgZnJvbQoJSURpcmVjdElucHV0RGV2aWNlMkEuCglSZW1vdmVkIHRoZSAzMiBzdWZmaXggb2YgdGhlIGludGVyZmFjZXMuIEhvcGVmdWxseSB0aGlzIHdpbGwgbm90CgljYXVzZSBhbnkgcHJvYmxlbSB3aXRoIHRoZSByZW5hbWluZy4KCU1vdmVkIHRoZSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBzdHVmZiB0byBkaW5wdXQuYyAod2VsbCwgdGhlCglpbnRlcmZhY2VzIGF0IGxlYXN0KS4KClN1biBGZWIgMjEgMTg6MzU6MjggMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHNjaGVkdWxlci9wcm9jZXNzLmMsIHNjaGVkdWxlci9zeXNkZXBzLmMsIGluY2x1ZGUvcHJvY2Vzcy5oLCBpbmNsdWRlL3RocmVhZC5oOgoJQ2hhbmdlZCBpbml0aWFsIHByb2Nlc3MgY3JlYXRpb24gdG8gYXZvaWQgbWVtb3J5IGFsbG9jYXRpb25zLgoJUmVtb3ZlZCBhIGZldyB1bnVzZWQgZmllbGRzIGluIFBEQiBhbmQgVEhEQi4KCgkqIHNjaGVkdWxlci9jbGllbnQuYywgc2NoZWR1bGVyL3RocmVhZC5jOgoJUmVtb3ZlZCB0aHJlYWQgcXVldWUgZnVuY3Rpb25zLgoJQ2hhbmdlZCBpbml0aWFsIHRocmVhZCBjcmVhdGlvbiB0byBhdm9pZCBtZW1vcnkgYWxsb2NhdGlvbnMuCglNb3ZlZCBzZXJ2ZXIgc3RhcnR1cCB0byBUSFJFQURfQ3JlYXRlSW5pdGlhbFRocmVhZC4KCgkqIHNjaGVkdWxlci9zeW5jaHJvLmM6CglSZW1vdmVkIHVzZSBvZiBwZXItdGhyZWFkIHdhaXRfc3RydWN0LCBjbGVhbmVkIHVwIGEgYml0LgoKCSogc2NoZWR1bGVyL2szMm9iai5jLCBtZW1vcnkvdmlydHVhbC5jOiBSZW1vdmVkIE1FTV9NQVBQRURfRklMRV9PcHMuCgoJKiBpbmNsdWRlL3dpbm50Lmg6IEFkZGVkIGEgZmV3IGV4Y2VwdGlvbiBjb2Rlcy4KCgkqIHdpbmRvd3Mvd2luLmMsIGluY2x1ZGUvbW1zeXN0ZW0uaCwgaW5jbHVkZS9wYXRoLmgsIGluY2x1ZGUvcHJvZ3Jlc3MuaCwgaW5jbHVkZS9xdWV1ZS5oLCBpbmNsdWRlL3Jlc291cmNlLmgsIGluY2x1ZGUvc3RydWN0MzIuaCwgaW5jbHVkZS91cGRvd24uaCwgaW5jbHVkZS93aW5kb3dzLmgsIGluY2x1ZGUvd2lucG9zLmgsIGxvYWRlci9tYWluLmMsIG1pc2MvY29tbWRsZy5jLCBtaXNjL3dpbnNvY2tfZG5zLmMsIG11bHRpbWVkaWEvbW1zeXN0ZW0uYywgaW5jbHVkZS9jdXJzb3JpY29uLmgsIGluY2x1ZGUvZGRlX2F0b20uaCwgaW5jbHVkZS9kZHJhdy5oLCBpbmNsdWRlL2Rpc3BkaWIuaCwgaW5jbHVkZS9kb3NleGUuaCwgaW5jbHVkZS9kc291bmQuaCwgY29udHJvbHMvbWVudS5jOgoJTWljaGFlbCBWZWtzbGVyIDxtdmVrc2xlckB0ZWNodW5peC50ZWNobmlvbi5hYy5pbD4KCS0gRml4IGhlYWRlcnMgdG8gaW5jbHVkZSBsZXNzIG9yIHNtYWxsZXIgaGVhZGVyIGZpbGVzLgoJLSBGaXggaGVhZGVyIGFuZCBzb3VyY2UgZmlsZXMgdG8gaW5jbHVkZSBtaXNzaW5nIGhlYWRlciBmaWxlcyB0byBhdm9pZAoJICB3YXJuaW5ncyBhbmQgZXJyb3JzLgoKCSogbG9hZGVyL3NpZ25hbC5jLCBtZW1vcnkvbGR0LmMsIG1pc2MvcG9ydC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDaGFuZ2UgImciIChnZW5lcmFsIHJlZ3MpIGludG8gInIiIChoYXJkcmVncykgaW4gY2xvbmUgLyBtb2RpZnlfbGR0IC8KCXdpbmVfc2lnYWN0aW9uIF9fUElDX18gY2FzZXMsIHNpbmNlICJnIiB3aWxsIG5vdCB3b3JrIHdpdGgKCS1mb21pdC1mcmFtZS1wb2ludGVyICgiZyIgaXMgcmVmZXJlbmNlZCB1c2luZyAlZXNwIHdoaWNoIHdhcwoJaW52YWxpZGF0ZWQgYmVmb3JlKS4gQnVnIGZvdW5kIGFuZCAob3RoZXIpIGZpeCBzdWdnZXN0ZWQgYnkKCTxkYW5pZWxAbWF0LnV0ZnNtLmNsPiBEYW5pZWwgU2VycGVsbC4KCgkqIG9sZS9vbGVmb250LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgbWlzc2luZyBXSU5BUElzLgoKCSogd2luZG93cy94MTFkcnYvZXZlbnQuYywgd2luZG93cy94MTFkcnYvaW5pdC5jLCBsb2FkZXIvdGFzay5jLCB3aW5kb3dzL2V2ZW50LmMsIHdpbmRvd3MvdHR5ZHJ2L2V2ZW50LmMsIHdpbmRvd3MvdHR5ZHJ2L2luaXQuYywgaW5jbHVkZS9tZXNzYWdlLmgsIGluY2x1ZGUvdHR5ZHJ2LmgsIGluY2x1ZGUveDExZHJ2Lmg6CglTdGVwaGFuZSBMdXNzaWVyIDxzdGVwaGFuZUBtYWNhZGFtaWFuLmNvbT4KCUZpeCBwcm9ibGVtIHdoZXJlIHlvdSBuZWVkIG1vdXNlIGFjdGl2aXR5IHRvIHVubG9jayBzb21lIDE2IGJpdHMKCXRocmVhZCB3aXRoIG11bHRpLXRocmVhZGVkIGFwcHMuCgpTYXQgRmViIDIwIDE2OjQ4OjU0IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiByZWxheTMyL29sZWF1dDMyLnNwZWMsIGluY2x1ZGUvQXR0aWMvaW50ZXJmYWNlcy5oLCBpbmNsdWRlL29haWRsLmgsIGluY2x1ZGUvb2NpZGwuaCwgaW5jbHVkZS9vbGUuaCwgaW5jbHVkZS9vbGVhdXRvLmgsIGluY2x1ZGUvb2xlY3RsLmgsIGluY2x1ZGUvd2luZS9vYmpfb2xlYXV0LmgsIGluY2x1ZGUvd2luZS9vYmpfb2xlZm9udC5oLCBpbmNsdWRlL3d0eXBlcy5oLCBvbGUvTWFrZWZpbGUuaW4sIG9sZS9ndWlkLmMsIG9sZS9vbGUyZGlzcC5jLCBvbGUvb2xlZm9udC5jLCBvbGUvdHlwZWxpYi5jOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50ZWQgdGhlIE9sZUNyZWF0ZUZvbnRJbmRpcmVjdCBtZXRob2QgYW5kIHRoZSBhc3NvY2lhdGVkIENPTQoJb2JqZWN0LiBUaGF0IG9iamVjdCBzdXBwb3J0cyB0aGUgSUZvbnQgYW5kIElEaXNwYXRjaCBpbnRlcmZhY2VzLgoKCSogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvY29uZmlnLmguaW4sIG1pc2MvcG9ydC5jLCBtaXNjL3dpbnNvY2suYywgbWlzYy93aW5zb2NrX2Rucy5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglQcm9ibGVtcyByZXBvcnRlZCBieSBEb25hbGQgUGFnZSwgUFIgMTA1LTEwNy4KCgkqIGNvbnNvbGUvbmN1cnNlcy5jOiBKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCU1vcmUgY29tbWVudGluZywgYmV0dGVyIGRlYnVnZ2luZyBvZiBjb2xvciBwcm9ibGVtcywgYW5kIHN1cHBvcnQgZm9yCgl0aGUgbmV3IFRlcm1pbmFsVHlwZSBvcHRpb24gaW4gd2luZS5pbmkuIFRoaXMgYWxsb3dzIHVzIHRvIHNlbGVjdAoJd2hpY2ggdGVybWluYWwgdHlwZSB3ZSBhcmUgcmVhbGx5IHVzaW5nIHNvIHRoYXQgd2UgY2FuLCBmb3IgZXhhbXBsZSwKCXVzZSBpdHMgY29sb3IgY2FwYWJpbGl0aWVzLgoKCSogY29uc29sZS9pbnRlcmZhY2UuYywgaW5jbHVkZS9jb25zb2xlLmg6CglKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCVN1cHBvcnQgZm9yIHRoZSBuZXcgSW5pdGlhbFJvd3MgYW5kZiBJbml0aWFsQ29sdW1ucyBvcHRpb25zIGluIHdpbmUuaW5pCgkoR2VuZXJpYyByZXBsYWNlbWVudCBmb3IgWHRlcm1SZXNvbHV0aW9uIG9wdGlvbi4uLikKCgkqIG1zZG9zL2ludDEwLmM6IEpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJRml4ICpEVUgqIHByb2JsZW0gY2F1c2luZyBsb3RzIGFuZCBsb3RzIG9mIHVubmVjZXNzYXJ5IEFsbG9jQ29sb3IgZXJyb3JzLgoKCSogY29uc29sZS94dGVybS5jOiBKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCVJlbW92YWwgb2Ygb2Jzb2xldGUgWHRlcm1SZXNvbHV0aW9uIG9wdGlvbi4KCgkqIGRvY3VtZW50YXRpb24vY29uc29sZSwgd2luZS5pbmk6CglKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCUFkZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbmV3IHdpbmUuY29uZiBvcHRpb25zLgoKCSogZGVidWdnZXIvc3RhY2suYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCBiYWNrdHJhY2sgaXNzdWUgb24gMTZiaXQgY29kZS4KCgkqIGRlYnVnZ2VyL21zYy5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUNoYW5nZWQgTG9jYXRlRGVidWdJbmZvRmlsZSB0byByZWR1Y2Ugc3RhY2sgY29uc3VtcHRpb24gKGZyb20gMTNrIHRvIDJrICEhKQoKCSogZGVidWdnZXIvaW5mby5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUZpeGVkIGNvbW1lbnQgZm9yIFdpbmUgZG9jdW1lbnRhdGlvbi4KCgkqIGluY2x1ZGUvc2VydmVyLmgsIGluY2x1ZGUvc2VydmVyL3JlcXVlc3QuaCwgc2VydmVyL3JlcXVlc3QuYywgc2VydmVyL3RyYWNlLmM6CglBZGRlZCBnZXQvc2V0X2hhbmRsZV9pbmZvIHJlcXVlc3QuCgoJKiBncmFwaGljcy94MTFkcnYvZGliLmM6CglGaXhlZCBlbmQtb2YtbGluZSBidWcgaW4gWDExRFJWX0RJQl9TZXRJbWFnZUJpdHNfUkxFNC4KCgkqIHRvb2xzL3dyYy9DSEFOR0VTLCB0b29scy93cmMvZ2VucmVzLmMsIHRvb2xzL3dyYy9uZXdzdHJ1Yy5jLCB0b29scy93cmMvcGFyc2VyLnksIHRvb2xzL3dyYy93cmMuaCwgdG9vbHMvd3JjL3dyY3R5cGVzLmgsIHRvb2xzL3dyYy93cml0ZXJlcy5jOgoJQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQHBhbnRlci5zb2NpLmFhdS5kaz4KCUZpeCBhIGNvdXBsZSBvZiA2NGJpdCBwbGF0Zm9ybSBwcm9ibGVtcyBhbmQgc3BlZWQgdXAgY29tcGlsYXRpb24uIFNlZQoJdG9vbHMvd3JjL0NIQU5HRVMgZm9yIGRldGFpbHMuCgoJKiBtdWx0aW1lZGlhL21taW8uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CgltbWlvRGVzY2VuZDogZGVidWdvdXRwdXQgZW5oYW5jZWQsIEZJTkRMSVNUL0ZJTkRSSUZGIHNob3VsZCBDaGVjayB0aGUKCWNvcnJlY3QgY2tpZCAoTElTVC9SSUZGKSB0b28uICh2ZXJpZmllZCBhZ2FpbnN0IG1jaWF2aTMyLmRsbCkKCgkqIE1ha2VmaWxlLmluOiBaeWdvIEJsYXhlbGwgPHpibGF4ZWxsQGZ1cnJ5dGVycm9yLm9yZz4KCUFkZGVkIGEgY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2Ygd2luZS5zeW0gYmVmb3JlIGluc3RhbGxpbmcgaXQuCgoJKiBpbmNsdWRlL29sZTIuaCwgb2xlL29sZTIuYywgcmVsYXkzMi9vbGUzMi5zcGVjOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJQWRkZWQgc29tZSBuZXcgc3R1YnMgZm9yIHRoZSBPTEUgbWVudSBkZXNjcmlwdG9yIG1ldGhvZHMuCgpGcmkgRmViIDE5IDE2OjUwOjI0IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB3aW5kb3dzL3F1ZXVlLmM6IE1hcnRpbiBXYWxrZXIgPG13YWxrZXJAY2FjaS5jby51az4KCUZpeGVkIG1lc3NhZ2UgZmlsdGVyaW5nIGNoZWNrLgoKCSogcmVsYXkzMi9hZHZhcGkzMi5zcGVjLCBkbGxzL2FkdmFwaTMyL3NlY3VyaXR5LmMsIGRsbHMvbnRkbGwvbnQuYywgZGxscy9udGRsbC9ydGwuYywgaW5jbHVkZS9udGRkay5oLCBpbmNsdWRlL250ZGVmLmgsIGluY2x1ZGUvbnRkbGwuaCwgaW5jbHVkZS9xdWV1ZS5oLCBpbmNsdWRlL3dpbmJhc2UuaCwgaW5jbHVkZS93aW5udC5oLCBpbmNsdWRlL3dpbnJlZy5oLCBvbGUvb2xlb2JqLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCS0gbWFkZSB0aGUgc2VjdXJpdHkgZnVuY3Rpb25zIGNvbnNpc3RlbnQuIGFkdmFwaSBjYWxscyBkb3duIHRvIG50ZGxsIG5vdwoJLSBuZXcgU2V0U2VjdXJpdHlEZXNjcmlwdG9yR3JvdXAsICBTZXRTZWN1cml0eURlc2NyaXB0b3JPd25lciwKCSAgU2V0U2VjdXJpdHlEZXNjcmlwdG9yU2FjbCwgR2V0U2VjdXJpdHlEZXNjcmlwdG9yRGFjbAoJLSBudC1oZWFkZXIgY2xlYW51cAoKCSogZGxscy9udGRsbC9ydGwuYywgaWYxNjMyL2J1aWx0aW4uYywgbWlzYy9jcHUuYywgd2luMzIva2VybmVsMzIuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJRml4ZWQgYSBmZXcgYnJva2VuIGluY2x1ZGVzLgoKCSogd2luZG93cy9ub25jbGllbnQuYzogUmV2ZXJ0ZWQgYnJva2VuIGNsb3NlIGJ1dHRvbiBjaGFuZ2UuCgoJKiBkbGxzL2NvbWN0bDMyL2hlYWRlci5jLCBkbGxzL2NvbWN0bDMyL3JlYmFyLmMsIGRsbHMvY29tY3RsMzIvdGFiLmMsIGRsbHMvY29tY3RsMzIvdG9vbGJhci5jLCBkbGxzL2NvbWN0bDMyL3Rvb2x0aXBzLmMsIGRsbHMvY29tY3RsMzIvdXBkb3duLmMsIGRsbHMvc2hlbGwzMi9jb250bWVudS5jLCBkbGxzL3NoZWxsMzIvZGF0YW9iamVjdC5jLCBncmFwaGljcy9wYXRoLmMsIGdyYXBoaWNzL3BzZHJ2L2luaXQuYywgdG9vbHMvd3JjL25ld3N0cnVjLmMsIGNvbnRyb2xzL2J1dHRvbi5jLCBjb250cm9scy9lZGl0LmMsIGNvbnRyb2xzL3dpZGdldHMuYywgZGxscy9hZHZhcGkzMi9hZHZhcGkuYywgZGxscy9hZHZhcGkzMi9zZWN1cml0eS5jOgoJSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPgoJQWRkZWQgbWlzc2luZyBzdHJpbmcuaCBpbmNsdWRlLgoKCSogbG9hZGVyL25lL21vZHVsZS5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJT25seSBhcHBlbmQgLmRsbCBpZiBubyBleHRlbnNpb24geWV0LgoKCSogd2luZG93cy9tZXNzYWdlLmM6IEZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCVRlbXBvcmFyeSBmaXggc3VnZ2VzdGVkIGJ5IFVscmljaCB0byBhbGxvdyB0aGUKCU1zZ1dhaXRGb3JNdWx0aXBsZU9iamVjdCBtZXRob2QgdG8gYmUgY2FsbGVkIGZyb20gMTYgYml0IHRocmVhZHMuCgoJKiB3aW5kb3dzL3dpbnByb2MuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglJbml0aWFsaXplZCByZXR1cm4gdmFsdWUgb2YgMTYtPjMyIGNvbnZlcnNpb24gb2YgV01fTURJR0VUQUNUSVZFIGluCgljYXNlIGl0J3Mgc2VudCB0byBhIHdpbmRvdyB0aGF0IGRvZXNuJ3QgaGFuZGxlIGl0IChpLmUuIG5vdCBNREkKCWNsaWVudCkuCgoJKiBpbmNsdWRlL2RjZS5oLCB3aW5kb3dzL2RjZS5jLCB3aW5kb3dzL3dpbnBvcy5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglBZGRlZCBleHRyYSBjaGlsZCBhcmd1bWVudHMgdG8gRENFX0dldFZpc1JnbigpIHRvIGJlIGFibGUgdG8gaGFuZGxlCglQQVJFTlREQyBjbGFzcyBzdHlsZSBjb21iaW5lZCB3aXRoIENMSVBDSElMRFJFTiB3aW5kb3cgc3R5bGUsIHRvCglwcmV2ZW50IG1pcy1yZWRyYXdzIGluIEZyZWUgQWdlbnQgMTYtYml0LgoKCSogZGxscy92ZXJzaW9uL2luZm8uYzogTGF3c29uIEEuIFdoaXRuZXkgPGxhd3Nvbl93aGl0bmV5QGp1bm8uY29tPgoJRG9uJ3QgaGFuZyBvbiB0aGUgbGFzdCBjaGlsZCBpZiBpdCdzIG5vdCB3YW50ZWQuCgoJKiB3aW4zMi9rZXJuZWwzMi5jLCByZWxheTMyL2tlcm5lbDMyLnNwZWM6IElhbiBTY2htaWR0IDxpcnNtYW5AaWFnLm5ldD4KCVBhcnRpYWwgc3R1YiBpbXBsZW1lbnRhdGlvbiBvZiB1bmRvY3VtZW50ZWQgS0VSTkVMIHJvdXRpbmUgUEsxNkZORiwKCW5lZWRlZCBieSBXaW45OCBFWFBMT1JFUi4gVGhhbmtzIHRvIFVscmljaCBXZWlnYW5kIGZvciBpbmZvcm1hdGlvbi4KCgkqIG1pc2MvY29tbWRsZy5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUZpeCByZWRyYXcgcHJvYmxlbXMgZm9yIENob29zZUNvbG9yIGRpYWxvZy4KCgkqICovKi5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVJlbW92ZWQgYSBsb3Qgb2Ygb2NjdXJlbmNlcyBvZiB3aW5kb3dzLmggKGFuZCBhZGRlZCBuZWNlc3Nhcnkgb3RoZXIKCWluY2x1ZGVzKS4KCgkqIGluY2x1ZGUvb2JqaWRsLmgsIGluY2x1ZGUvd2luZS9vYmpfbW9uaWtlci5oLCBvbGUvY29tcG9iai5jLCBkbGxzL3NoZWxsMzIvZGF0YW9iamVjdC5jLCBkbGxzL3NoZWxsMzIvZW51bWlkbGlzdC5jOgoJRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglTbWFsbCBmaXhlcy4KCgkqIGluY2x1ZGUvZHNvdW5kLmgsIG11bHRpbWVkaWEvZHNvdW5kLmM6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCUNoYW5nZWQgdGhlIGZpcnN0IHBhcmFtZXRlciBmcm9tIExQR1VJRCAoV2luZG93cyBoZWFkZXJzKSB0byBSRUZHVUlELgoJVGhpcyBtYWtlcyBpdCBhICdjb25zdCBHVUlEKicgd2hpY2ggbWVhbnMgRGlyZWN0U291bmRDcmVhdGUgbXVzdCBub3QKCWNoYW5nZSBpdC4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaDogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglSZW1vdmVkIHJlZHVuZGFudCBkZWZpbml0aW9ucyBvZiBJc0VxdWFsSUlEIGFuZCBJc0VxdWFsQ0xTSUQgKHNlZQoJaW5jbHVkZS93aW5lL29ial9iYXNlLmgpCgpUaHUgRmViIDE4IDE3OjM0OjEwIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiByZWxheTMyL3VzZXIzMi5zcGVjLCB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9xdWV1ZS5jLCB3aW5kb3dzL3VzZXIuYywgaW5jbHVkZS9xdWV1ZS5oOgoJU3RlcGhhbmUgTHVzc2llciA8c3RlcGhhbmVAbWFjYWRhbWlhbi5jb20+CgktIE5ldyBpbXBsZW1lbnRhdGlvbiBvZiBTZW5kTWVzc2FnZSwgUmVjZWl2ZU1lc3NhZ2UsIFJlcGx5TWVzc2FnZSBmdW5jdGlvbnMKCSAgdG8gc3VwcG9ydCB0aHJlYWQtc2FmZW5lc3MsIGFuZCBuZXN0ZWQgU2VuZE1lc3NhZ2UuCgktIEFkZGl0aW9uIG9mIFJlcGx5TWVzc2FnZTMyLgoKCSogd2luZG93cy94MTFkcnYvd25kLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogQ29wZSB3aXRoIE5VTEwgcERyaXZlckRhdGEgaW4gWDExRFJWX1dORF9HZXRYV2luZG93LgoKCSogbWlzYy9jb21tZGxnLmMsIHJlc291cmNlcy9zeXNyZXNfRW4ucmM6CglQYXNjYWwgTGVzc2FyZCA8cGFzY2FsQG1hY2FkYW1pYW4uY29tPgoJQXBwbGllZCB0aGUgY2hhbmdlcyBvZiB0aGUgcmVzdWx0aW5nIGNvbG9yIG9mIHRoZSBjaG9vc2UgY29sb3IgZGlhbG9nLgoJSW5pdGlhbGl6ZSB2YWx1ZXMgaW4gdGhlIGNob29zZSBjb2xvciBkaWFsb2cuCgoJKiBpbmNsdWRlL3dpbmUvb2JqX2Jhc2UuaCwgaW5jbHVkZS93aW5lL29ial9tYXJzaGFsLmg6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCVJlbW92ZWQgcmVmZXJlbmNlcyB0byBJQ09NX0lOSEVSSVRTLgoKCSogb2xlL3N0Z19iaWdibG9ja2ZpbGUuYywgb2xlL3N0b3JhZ2UzMi5jLCBvbGUvc3RvcmFnZTMyLmg6CglUaHV5IE5ndXllbiA8dGh1eUBtYWNhZGFtaWFuLmNvbT4KCUZpeGVkIGJ1ZyB3aXRoIHJlYWQtb25seSBmaWxlcy4KCgkqIG11bHRpbWVkaWEvbWNpYXZpLmMsIG11bHRpbWVkaWEvbWNpbWlkaS5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglSZW1vdmVkIHN1cGVyZmxvdXMgV0lOQVBJIChtaXNtYXRjaCB3aXRoIHByb3RvdHlwZSkgaW4gKl9Ecml2ZXJQcm9jMzIuCgoJKiBpbmNsdWRlL2Rvc2V4ZS5oOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCWRvc2V4ZS5oIGRlcGVuZHMgb24gd2luYmFzZS5oIChmb3IgTFBTVEFSVFVQSU5GTzMyQSkKCgkqIGRsbHMvc2hlbGwzMi9zaGVsbGxpbmsuYywgb2xlL2JpbmRjdHguYywgb2xlL2ZpbGVtb25pa2VyLmMsIG9sZS9pdGVtbW9uaWtlci5jLCBvbGUvc3RnX3N0cmVhbS5jLCBvbGUvc3RvcmFnZTMyLmMsIG9sZS9zdG9yYWdlMzIuaDoKCUZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJTW9kaWZpZWQgc28gdGhhdCB0aGV5IGRvIG5vdCB1c2UgdGhlIFZUQUJMRV9GVU5DIG1hY3JvcyB0aGF0IHBlcmZvcm1lZAoJY2FzdHMgb2YgYWxsIG1ldGhvZHMgcHV0IGluIHRoZSBqdW1wIHRhYmxlLiBJIGZpbmQgaXQgdG9vIHJpc2t5IHRvIHVzZQoJc3VjaCBtYWNyb3MgYmVjYXVzZSBub3RoaW5nIGd1YXJhbnRlZXMgdGhhdCB5b3UgYWN0dWFsbHkgcHV0IHRoZSByaWdodAoJbWV0aG9kIGF0IHRoZSByaWdodCBwbGFjZSBvciB0aGF0IHRoZSBwcm90b3R5cGUgaXMgcmlnaHQuCgoJKiBpbmNsdWRlL3dpbmUvb2JqX21vbmlrZXIuaCwgaW5jbHVkZS93aW5lL29ial9zdG9yYWdlLmgsIG9sZS9zdG9yYWdlLmM6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCVVwZGF0ZWQgdG8gdXNlIHRoZSBsYXRlc3QgQ09NIG1hY3Jvcy4gRGVmaW5lZCBtb3JlIGludGVyZmFjZXMgYW5kIEFQSQoJZnVuY3Rpb25zLgoKCSogY29udHJvbHMvbWVudS5jLCBncmFwaGljcy94MTFkcnYvb2VtYml0bWFwLmMsIGluY2x1ZGUvd2ludXNlci5oLCB3aW5kb3dzL25vbmNsaWVudC5jOgoJRnJhbmNvaXMgQm9pc3ZlcnQ8ZnJhbmNvaXNAbWFjYWRhbWlhbi5jb20+CglJbXBsZW1lbnRhdGlvbiBvZiB0aGUgcHVzaGVkIGNsb3NlIGJ1dHRvbi4KCldlZCBGZWIgMTcgMTc6NDU6NTQgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvbWFwaWRlZnMuaCwgaW5jbHVkZS9vYmpiYXNlLmgsIGluY2x1ZGUvb2xlLmgsIGluY2x1ZGUvb2xlYXV0by5oLCBpbmNsdWRlL3dpbmJhc2UuaCwgaW5jbHVkZS93aW5lL29ial9tb25pa2VyLmgsIGluY2x1ZGUvd2luZS9vYmpfcHJvcGVydHlzdG9yYWdlLmgsIGluY2x1ZGUvd2lubnQuaCwgaW5jbHVkZS93aW50eXBlcy5oLCBpbmNsdWRlL3d0eXBlcy5oLCBvbGUvY29tcG9iai5jOgoJRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglNb3ZlZCBzb21lIGRlZmluaXRpb25zIHRvIHRoZWlyIHByb3BlciBpbmNsdWRlIGZpbGUuCgoJKiBpbmNsdWRlL3dpbmUvb2JqX2NsaWVudHNlcnZlci5oLCBpbmNsdWRlL3dpbmUvb2JqX21pc2MuaDoKCUZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJRml4ZWQgc29tZSBJQ09NX0lOSEVSSVQgc3R1ZmYgYW5kIGFkZGVkIG5ldyByZWxhdGVkIEFQSSBmdW5jdGlvbnMuCgoJKiBpbmNsdWRlL3dpbmUvb2JqX2Jhc2UuaDogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglBZGRlZCBuZXcgQVBJLiBQYXJ0IG9mIGl0IHdhcyBpbiAnaW5jbHVkZS9vYmpiYXNlLmgnIGJlZm9yZSBhbmQgcGFydAoJb2YgaXQgaXMgbmV3LiBOb3cgaXQgYWxzbyBjb250YWlucyAnV0lORV9TdHJpbmdGcm9tQ0xTSUQnLiBJdCdzIG5vdAoJcGVyZmVjdCBidXQgaXQncyBiZXR0ZXIgdGhhbiBoYXZpbmcgaXQgaW4gJ2luY2x1ZGUvb2JqYmFzZS5oJy4KCgkqIGRsbHMvYWR2YXBpMzIvY3J5cHQuYywgZGxscy9udGRsbC9udC5jLCBncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuYywgc2NoZWR1bGVyL3N5bmNocm8uYywgY29udHJvbHMvc2Nyb2xsLmM6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCUZpeGVkIGEgbnVtYmVyIG9mIHdhcm5pbmdzIGNvbmNlcm5pbmcgdGhlIG1hdGNoaW5nIG9mIHRoZSBwcmludGYKCWZvcm1hdCBzdHJpbmcgYW5kIHRoZSBhc3NvY2lhdGVkIHBhcmFtZXRlcnMgKGFjdHVhbGx5IGl0J3MgbW9zdGx5CglUUkFDRSBhbmQgRklYTUVzKS4KCgkqIGluY2x1ZGUvbW1zeXN0ZW0uaCwgbXVsdGltZWRpYS9tbWlvLmMsIG11bHRpbWVkaWEvbW1zeXN0ZW0uYywgcmVsYXkzMi93aW5tbS5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CgltbWlvRGVzY2VuZDogZml4ZWQgRklORF94eHh4LCB2ZXJpZmllZCB3aXRoIG1jaWF2aTMyLmRsbC4KCW1jaUxvYWRDb21tYW5kUmVzb3VyY2UzMjogc2Vjb25kIGFyZyBpcyB3aWRlIHN0cmluZwoJbWNpR2V0RHJpdmVyRGF0YTogc3BlYyBoYXMganVzdCBvbmUgbG9uZyBhcmd1bWVudAoKCSogb2xlL2NvbXBvYmouYywgb2xlL2lmcy5jLCBvbGUvaWZzLmgsIG9sZS9zdG9yYWdlLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9sZS5jLCBpbmNsdWRlL3dpbmUvb2JqX2Jhc2UuaCwgaW5jbHVkZS93aW5lL29ial9kYXRhb2JqZWN0LmgsIG11bHRpbWVkaWEvZHNvdW5kLmMsIGRsbHMvc2hlbGwzMi9kYXRhb2JqZWN0LmMsIGRsbHMvc2hlbGwzMi9zaGVsbGxpbmsuYzoKCUZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJQ2hhbmdlZCBJQ09NX1RISVMgZGVmaW5pdGlvbi4KCgkqIGRsbHMvdmVyc2lvbi9pbmZvLmMsIGluY2x1ZGUvdmVyLmg6CglCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AcGFudGVyLnNvY2kuYWF1LmRrPgoJUmVuYW1lZCBWU19WRVJTSU9OX0lORk94eCBzdHJ1Y3R1cmUgdG8gVlNfVkVSU0lPTl9JTkZPX1NUUlVDVHh4LgoJVGhlIFZTX1ZFUlNJT05fSU5GTyBpcyBhIHNpbXBsZSBkZWZpbmUgYW5kIHdvdWxkIGNhdXNlIGNvbmZ1c2lvbi4KCUFsc28gY29ycmVjdGVkIHRoZSBWU194eF9JTkZPIGRlZmluZXMgbm90IHRvIHVzZSBNQUtFSU5UUkVTT1VSQ0UxNiBmb3Igd2luMzIuCgoJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjogU3RlZmZlbiBNb2VsbGVyIDxtb2VsbGVyQGViaS5hYy51az4KCSJDb25maWd1cmUgZmluaXNoZWQiIG1lc3NhZ2Ugc3VnZ2VzdHMgdG8gY2FsbCBtYWtlIHdoZW4gbWFrZSBkZXBlbmQKCXdhcyBzdWNjZXNzZnVsLgoKCSogKi8qOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU9wdGltaXplZCBpbmNsdWRlLyouaDogKHJlY3Vyc2l2ZWx5KSBpbmNsdWRlIGFsbCBoZWFkZXJzIG5lZWRlZCBieQoJdGhpcyAuaCBmaWxlLCBidXQgb25seSB0aG9zZS4gTmVjZXNzYXJ5IGZpeGVzIHRvIGEgbG90IG9mIC5jIGZpbGVzLAoJc3RhcnRlZCBvcHRpbWl6aW5nICJ3aW5kb3dzLmgiIGF3YXkgZnJvbSBzb21lIG9mIHRoZW0uIE1vdmVkCglHZXRDdXJyZW50VGFzayBwcm90b3R5cGUgdG8gd2luZS93aW5iYXNlMTYuaC4KCgkqIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS9saXN0dmlldy5oLCBkbGxzL2NvbWN0bDMyL2xpc3R2aWV3LmM6CglMdWMgVG91cmFuZ2VhdSA8bHVjQG1hY2FkYW1pYW4uY29tPgoJUHJlbGltaW5hcnkgbGlzdHZpZXcgY29udHJvbCBpbXBsZW1lbnRhdGlvbi4KCgkqIGNvbnRyb2xzL21lbnUuYzogRnJhbmNvaXMgQm9pc3ZlcnQgPGZyYW5jb2lzQG1hY2FkYW1pYW4uY29tPgoJR2l2ZSB0aGUgY29udGV4dCBtZW51IGl0cyBwcm9wZXIgYmVoYXZpb3VyIGFuZCBtb2RpZnkgVHJhY2tQb3B1cE1lbnUKCXRvIGNvbXBseSB3aXRoIHdpbmRvd3MgQVBJLgoKCSogd2luZG93cy9wYWludGluZy5jOiBEYXZlIFBpY2tsZXMgPGRhdmVwQG51Z2F0ZS5kZW1vbi5jby51az4KCUdldFVwZGF0ZVJlY3Qgc2hvdWxkIHJldHVybiBjbGllbnQgY29vcmRpbmF0ZXMgdW5sZXNzIHRoZSB3aW5kb3cgd2FzCgljcmVhdGVkIHdpdGggdGhlIENTX09XTkRDIHN0eWxlIGFuZCB0aGUgbWFwcGluZyBtb2RlIGlzIG5vdCBNTV9URVhULAoJaW4gd2hpY2ggY2FzZSB0aGUgcmVzdWx0IHNob3VsZCBiZSBpbiBsb2dpY2FsIGNvb3JkaW5hdGVzLgoKCSogaW5jbHVkZS93aW5lL29ial9jaGFubmVsLmg6IEZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJQWRkZWQgdGhlIGFjdHVhbCBkZWZpbml0aW9ucyBvZiB0aGUgaW50ZXJmYWNlcy4KCgkqIGluY2x1ZGUvc2VydnByb3YuaDogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglDb252ZXJ0ZWQgdG8gdGhlIG5ldyBDT00gZGVjbGFyYXRpb24gJ3N0YW5kYXJkJyBmb3IgYmV0dGVyCgljb21wYXRpYmlsaXR5IHdpdGggQyBjb2RlIGltcGxlbWVudGF0aW5nIHRoYXQgaW50ZXJmYWNlLgoKCSogbWlzYy93c3ByaW50Zi5jOiBGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglDaGFuZ2VkIFdQUklOVEZfRXh0cmFjdFZBUHRyIHRvIHRha2UgdGhlIGFkZHJlc3Mgb2YgdGhlIHZhX2xpc3QgdG8gYmUKCWFibGUgdG8gbW9kaWZ5IGl0LgoKCSogZGxscy9zaGVsbDMyL3NobGZvbGRlci5jOiBTeWx2YWluIFN0Lkdlcm1haW4gPHN5bHZhaW5AbWFjYWRhbWlhbi5jb20+CglEZWZpbmVkIElEcm9wVGFyZ2V0IGZvciBTaGVsbEZvbGRlci4gIEltcGxlbWVudGVkIHRoZSBDb25zdHJ1Y3RvciwKCURlc3RydWN0b3IsIEFkZFJlZiwgUmVsZWFzZSBhbmQgUXVlcnlJbnRlcmZhY2UgbWV0aG9kcy4KCgkqIG1lbW9yeS9zZWxlY3Rvci5jLCBpZjE2MzIva2VybmVsLnNwZWM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglDaGFuZ2UgdHlwZSBvZiBtb2RlIGFyZ3VtZW50IHRvIEdFVFZETVBPSU5URVIzMlcgZnJvbSBEV09SRCB0byBXb3JkCgpNb24gRmViIDE1IDE1OjI0OjIwIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL21zYWNtLmgsIGluY2x1ZGUvd2ludXNlci5oOgoJRG91Z2xhcyBSaWRnd2F5IDxyaWRnd2F5QHdpbmVocS5jb20+CgljMm1hbiBkb2Vzbid0IGxpa2UgZXh0cmEgc2VtaWNvbG9ucy4KCgkqIHdpbmRvd3Mvd2lucG9zLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJUmVzZXR0aW5nIFggZm9jdXMgc2hvdWxkIG5vdCBiZSBkb25lIHdpdGggU2V0Rm9jdXMzMi4gQ2FsbGVkCgl0aGUgd2luZG93aW5nIChYMTEpIGRyaXZlcidzIFNldEZvY3VzIHJvdXRpbmUgZGlyZWN0bHkgaW5zdGVhZC4KCVRoaXMgYXBwYXJlbnRseSBmaXhlcyBhIGJpZyBoZWFwIG9mIHVzZXIgaW50ZXJmYWNlIHByb2JsZW1zLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gRmViIDE0IDE0OjA5OjQyIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBncmFwaGljcy9wYWludGluZy5jLCBpbmNsdWRlL3dpbnVzZXIuaCwgb2JqZWN0cy9jdXJzb3JpY29uLmMsIHdpbmRvd3MvZGlhbG9nLmMsIHdpbmRvd3MvcGFpbnRpbmcuYywgd2luZG93cy9yZWN0LmMsIHdpbmRvd3Mvd2luLmMsIHdpbmRvd3Mvd2lucG9zLmM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUNoYW5nZWQgc29tZSBmdW5jdGlvbnMgcHJvdG90eXBlcyAod2VyZSByZXR1cm5pbmcgdm9pZCkuCgoJKiBtaXNjL21haW4uYywgaW5jbHVkZS93aW51c2VyLmg6IFBhdWwgUXVpbm4gPHBhdWxxQGNvcmVsLmNhPgoJRml4ZWQgc29tZSBXaW5lbGliIG5hbWVzLgoKCSogaW5jbHVkZS9jbGlwYm9hcmQuaCwgaW5jbHVkZS9jb25zb2xlLmgsIGluY2x1ZGUvZGVza3RvcC5oLCBpbmNsdWRlL2tleWJvYXJkLmgsIGluY2x1ZGUvdHR5ZHJ2LmgsIGluY2x1ZGUveDExZHJ2Lmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUNvcnJlY3RlZCBwcm90b3R5cGVzIGZ1bmMoKSAtPmZ1bmModm9pZCkuCgoJKiBtdWx0aW1lZGlhL2luaXQuYywgbXVsdGltZWRpYS9taWRpLmMsIGRlYnVnZ2VyL21lbW9yeS5jOgoJQnJpYW4gSm9zZXBoIEN6YXBpZ2EgPHJvb3RAZ2xhY2lkLmNvbT4KCUZpeGVkIGEgZmV3ICNpZmRlZnMuCgoJKiB3aW5kb3dzL3Njcm9sbC5jLCB3aW5kb3dzL3gxMWRydi93bmQuYzoKCUplcm9tZSBWb3VpbGxvbiA8dm91aWxsb25AY2xhcmFuZXQuZnI+CglNYWtlIGEgY29ycmVjdCB1c2Ugb2YgY2xpcHBpbmcgcmVjdGFuZ2xlcy4KCgkqIGluY2x1ZGUvYml0bWFwcy9vY3JfY3Jvc3M6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRlZCB3aGl0ZSBib3JkZXIuCgoJKiBkZWJ1Z2dlci9kYl9kaXNhc20uYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglJbXBsZW1lbnRlZCBiZXR0ZXIgb3V0cHV0IGZvciBpbmRpcmVjdCBjYWxscy4KCgkqIHJlbGF5MzIvd2lubW0uc3BlYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCB0eXBvIGluIHdpbm1tLnNwZWMuCgoJKiBpbmNsdWRlL3dpbnR5cGVzLmgsIGluY2x1ZGUvd3JjX3JzYy5oLCBtaXNjL2xzdHIuYywgbWlzYy93c3ByaW50Zi5jLCByZWxheTMyL2J1aWx0aW4zMi5jLCByZWxheTMyL3JlbGF5Mzg2LmMsIHJlbGF5MzIvc25vb3AuYzoKCUdhdnJpZWwgU3RhdGUgPGdhdnJpZWxzQENPUkVMLkNBPgoJQSBmZXcgbm9uLXg4NiBXaW5lbGliIGZpeGVzLgoKCSogbWlzY2VtdS9tYWluLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRG8gbm90IHByaW50ICd3aW5lOiBubyBleGVjdXRlYWJsZSBmb3VuZCcgaWYgd2UgZGlkIGV4ZWN1dGUgc29tZXRoaW5nLgoKCSogcHJvZ3JhbXMvbm90ZXBhZC8qOgoJTWFyY2VsIEJhdXIgPG1iYXVyQGcyNi5ldGh6LmNoPgoJLSBBZGRlZCBuZXcgSURTX05PVFNBVkVEIHJlc3NvdXJjZSAobmVlZHMgdHJhbnNsYXRpb24gaW4gKi5yYykKCS0gSW1wcm92ZWQgcHJpbnRpbmcgc3VwcG9ydCAobm90IHlldCBjb21wbGV0ZSkKCS0gSW1wcm92ZWQgZmlsZSBkcmFnIGFuZCBkcm9wIChzaG91bGQgbm93IHdvcmspCgktIEdlbmVyYWwgY29kZSBjbGVhbnVwCgoJKiBpbmNsdWRlL211bHRpbWVkaWEuaCwgbXVsdGltZWRpYS9tY2ltaWRpLmMsIG11bHRpbWVkaWEvbWNpd2F2ZS5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUZpeGVkIGJ1Z3Mgb24gTUNJIG5vdGlmaWNhdGlvbiAoY2FsbGJhY2sgaW5mbyBhcmUgY29waWVkIGJlZm9yZQoJYXN5bmNocm9ub3VzIHJldHVybikgLSBtYWtlIHVzZSBvZiBpdCBpbiBNQ0kgd2F2ZSBhbmQgbWlkaS4KCUltcGxlbWVudGVkIG1jaShTZXR8R2V0KURldmljZUlEKDE2fDMyKSBmdW5jdGlvbnMuCgoJKiB3aW5kb3dzL3gxMWRydi93bmQuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglTaW5jZSBTZXRQYXJlbnQgbm93IGhpZGVzL3Nob3dzLCBleHBsaWNpdGx5IGludmFsaWRhdGluZyBEQ3MgaW4gdGhlCglwYXJlbnQgY2hhbmdlIG9wZXJhdGlvbiBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lY2Vzc2FyeS4KCgkqIHdpbmRvd3MvZGlhbG9nLmM6IEdlcmFyZCBQYXRlbCA8Ry5QYXRlbEBXYW5hZG9vLmZyPgoJRml4IGlmIEVuZERpYWxvZyBjYWxsZWQgaW4gV01fSU5JVERJQUxPRyAoRElBTE9HX0RvRGlhbG9nQm94KS4KCgkqIG1zZG9zL2lvcG9ydHMuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCU1vdmVkIFZHQSBwb3J0IGFjY2VzcyBjaGVjayBhdCB0aGUgYmVnaW5uaW5nIGluIG9yZGVyIHRvIGltcHJvdmUKCXBlcmZvcm1hbmNlIGEgbGl0dGxlIGJpdC4KCgkqIHNlcnZlci9maWxlLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSW1wbGVtZW50ZWQgZmxhZyBGSUxFX0ZMQUdfREVMRVRFX09OX0NMT1NFLgoKCSogbXNkb3MvaW50MTAuYzogSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglBZGRlZCBjb21tZW50cy4gVGhpbmsgSSd2ZSBmaXhlZCBJTlQgMTAvMDggKEdldCBDaGFyYWN0ZXIgYW5kCglBdHRyaWJ1dGUgYXQgQ3Vyc29yKS4KCgkqIGNvbnNvbGUveHRlcm0uYzogSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglBZGRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgWHRlcm1Qcm9ncmFtIGFuZCBYdGVybVJlc29sdXRpb24uCglGaXhlZCBhIHdhcm5pbmcuCgoJKiBkb2N1bWVudGF0aW9uL2NvbnNvbGUsIHdpbmUuaW5pOgoJSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglOZXcgZXhhbXBsZXMvZG9jdW1lbnRhdGlvbiBmb3IgY29uc29sZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgoJKiBtaXNjL21haW4uYywgd2luZG93cy94MTFkcnYvbWFpbi5jLCBjb25zb2xlL2dlbmVyaWMuYywgY29uc29sZS9pbnRlcmZhY2UuYywgY29uc29sZS9uY3Vyc2VzLmMsIGNvbnNvbGUvdHR5LmMsIGluY2x1ZGUvY29uc29sZS5oLCBpbmNsdWRlL29wdGlvbnMuaCwgbG9hZGVyL21haW4uYzoKCUpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJTW92ZWQgaW5pdGlhbGl6YXRpb24gdW50aWwgbGF0ZXIuIEFsc28gbW92ZWQgYXJvdW5kIGNvZGUgYSBiaXQgdG8gYmUKCWNvbnNpc3RhbnQuCgoJKiBpbmNsdWRlL2RlYnVnZ2VyLmg6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgcG9zc2liaWxpdHkgdG8gbG9hZCAuc3RhYnMvLnN0YWJzdHIgc2VjdGlvbnMgZnJvbSBQRSBkbGxzLgoJVW5mb3J0dW5hdGVseSBteSBzYW1wbGVzIHVzZSBjdXJyZW50bHkgdHlwZWRlZnMgd2hpY2ggd2luZS1kYmcgZG9lcwoJbm90IHVuZGVyc3RhbmQsIHNvIG5vIGFjdHVhbCBwYXJzaW5nLgoKCSogZGxscy9tc2FjbS9tc2FjbV9tYWluLmMsIGRsbHMvbXNhY20zMi9mb3JtYXQuYywgZGxscy9tc2FjbTMyL3N0cmVhbS5jLCBpbmNsdWRlL21tcmVnLmgsIGluY2x1ZGUvbW1zeXN0ZW0uaCwgaW5jbHVkZS9tc2FjbS5oLCBpbmNsdWRlL21zYWNtZHJ2LmgsIGluY2x1ZGUvd2luYmFzZS5oOgoJQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQHBhbnRlci5zb2NpLmFhdS5kaz4KCUNoYW5nZSBhIGNvdXBsZSBvZiBuYW1lcyB0aGF0IHdvdWxkIGNvbmZsaWN0IGFmdGVyIGFsbCAzMltBV10gc3VmZml4ZXMKCWFyZSByZW1vdmVkLiBTdHJ1Y3R1cmVzIGRlZmluZWQgaW4gYm90aCBtbXJlZy5oIGFuZCBtbXN5c3RlbS5oIGFyZQoJcHJvdGVjdGVkIHdpdGggI2lmZGVmOnMgYXMgaW4gTVMnIGhlYWRlcnMuCgoJKiBtaXNjL2ltbS5jOiBQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCUZpeGVkIHdyb25nIHR5cGVjYXN0cy4KCgkqIHByb2dyYW1zL3Byb2dtYW4vZ3JwZmlsZS5jOiBTdGVmYW4gTGVpY2h0ZXIgPHNsZUBjYW1saW5lLmNvbT4KCUNvbXBpbGF0aW9uIGZpeC4KCgkqIGNvbmZpZ3VyZS5pbiwgY29uZmlndXJlOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUZpeCBmb3IgWDExIGluY2x1ZGVzIGRldGVjdGlvbi4KCgkqIGRlYnVnZ2VyL2hhc2guYywgZGVidWdnZXIvbXNjLmMsIGRlYnVnZ2VyL3N0YWJzLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIHBvc3NpYmlsaXR5IHRvIGxvYWQgLnN0YWJzLy5zdGFic3RyIHNlY3Rpb25zIGZyb20gUEUgZGxscy4KCVVuZm9ydHVuYXRlbHkgbXkgc2FtcGxlcyB1c2UgY3VycmVudGx5IHR5cGVkZWZzIHdoaWNoIHdpbmUtZGJnIGRvZXMKCW5vdCB1bmRlcnN0YW5kLCBzbyBubyBhY3R1YWwgcGFyc2luZy4KCgkqIG11bHRpbWVkaWEvZHBsYXkuYywgZG9jdW1lbnRhdGlvbi9zdGF0dXMvZGlyZWN0ZHJhdywgZ3JhcGhpY3MvZDNkdmlld3BvcnQuYywgZ3JhcGhpY3MvZGRyYXcuYywgaW5jbHVkZS9kM2QuaDoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU29tZSBkZHJhdy9kM2QgYnVnZml4ZXMsIHVwZGF0ZWQgRGlhYmxvL1dDNCBkZHJhdyBzdGF0dXMuCgoJKiBvbGUvb2xlMm5scy5jLCByZWxheTMyL2tlcm5lbDMyLnNwZWMsIGluY2x1ZGUvd2lubmxzLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUltcGxlbWVudGF0aW9uIG9mIENvbnZlcnREZWZhdWx0TG9jYWxlMzIuCgoJKiB3aW5kb3dzL21kaS5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVdJTjMxIExvb2sgc3RpbGwgbmVlZHMgYSBjbG9zZSBidXR0b24gb24gdGhlIGxlZnQgb2YgdGhlIG1lbnUgYmFyLgoKCSogd2luZG93cy93aW5wb3MuYzogRnJhbmNvaXMgQm9pc3ZlcnQgPGZyYW5jb2lzQG1hY2FkYW1pYW4uY29tPgoJQ2hhbmdlZCBTZXRXaW5kb3dQb3MzMiB0byBmb3JjZSB0aGUgdXBkYXRlIG9mIHRoZSBub24tY2xpZW50IGFyZWEuCgpTYXQgRmViIDEzIDE3OjU2OjI4IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGluY2x1ZGUvbW1zeXN0ZW0uaCwgaW5jbHVkZS9vbGUuaCwgaW5jbHVkZS93aW5nZGkuaCwgaW5jbHVkZS93aW5zb2NrLmg6CglCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AcGFudGVyLnNvY2kuYWF1LmRrPgoJRml4ZWQgYSBjb3VwbGUgb2YgZmF1bHR5IG5hbWVzIHVzZWQgaW4gd2luZSBhbmQgdHlwb3Mgc28gdGhhdCBpdCB3aWxsCgljb21waWxlIGFnYWluIGFmdGVyIGNvbnZlcnNpb24gZnJvbSAzMltBV10gbmFtaW5nIHRvIFtBV10gbmFtaW5nLgoKCSogaWYxNjMyL0F0dGljL3NpZ25hbC5jLCBpZjE2MzIvTWFrZWZpbGUuaW4sIGluY2x1ZGUvZGVidWdnZXIuaCwgaW5jbHVkZS9kb3NleGUuaCwgaW5jbHVkZS9taXNjZW11LmgsIGluY2x1ZGUvc2lnX2NvbnRleHQuaCwgbG9hZGVyL2Rvcy9kb3N2bS5jLCBsb2FkZXIvc2lnbmFsLmMsIG1pc2NlbXUvaW5zdHIuYywgbWlzY2VtdS9tYWluLmMsIGdyYXBoaWNzL2RkcmF3LmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU1vdmVkIHRoZSBpZjE2MzIvc2lnbmFsLmMgc3R1ZmYgaW50byBsb2FkZXIvc2lnbmFsLmMsIGFkYXB0ZWQgZnVuY3Rpb24KCXBvaW50ZXJzIGZvciB3aW5lX2RlYnVnIGFuZCBJTlNUUl9FbXVsYXRlSW5zdHJ1Y3Rpb24uCgoJKiBvbGUvY29tcG9iai5jOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCUFsbCBndWlkICdSRUZ4eHgnIHR5cGVzIGFscmVhZHkgaGF2ZSBhICdjb25zdCcgaW5zaWRlIHRoZW0uCgoJKiBkbGxzL2NvbWN0bDMyL2RyYWdsaXN0LmMsIGRsbHMvY29tY3RsMzIvdG9vbHRpcHMuYywgbWlzYy92ZXJzaW9uLmMsIHdpbmRvd3Mvd2lucG9zLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNvbWUgd2FybmluZ3MgZml4ZWQsIG9uZSB1c2VsZXNzIFZFUlNJT04gd2FybmluZyByZW1vdmVkICh3aW5lbGliKS4KCgkqIG1pc2MvcmVnaXN0cnkuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCVJlZ0ZsdXNoS2V5OiB3cm9uZyBlcnJvciBjb2RlLgoKCSogd2luMzIvZmlsZS5jOiBBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRzIGEgd2FybmluZyBtZXNzYWdlIGlmIHBlcm1pc3Npb25zIG5vdCBzdWZmaWNpZW50LgoKCSogbXVsdGltZWRpYS9taXhlci5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmMsIHJlbGF5MzIvd2lubW0uc3BlYywgaW5jbHVkZS9kZWJ1Zy5oLCBpbmNsdWRlL2RlYnVnZGVmcy5oLCBpbmNsdWRlL211bHRpbWVkaWEuaCwgbXVsdGltZWRpYS9NYWtlZmlsZS5pbiwgbXVsdGltZWRpYS9tY2lhbmltLmMsIG11bHRpbWVkaWEvbWNpYXZpLmMsIG11bHRpbWVkaWEvbWNpbWlkaS5jLCBtdWx0aW1lZGlhL21jaXdhdmUuYywgbXVsdGltZWRpYS9taWRpLmM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUFkZGVkIHN1cHBvcnQgZm9yIE1DSSBBVkkgZHJpdmVyCglBZGRlZCBzb21lIGZpeGVzIG1peGVyIGZ1bmN0aW9ucwoJRml4ZWQgTUNJIHN0cmluZyBjb21wYXJpc29uICh0aGFua3MgdG8gTGlvbmVsIFVMTUVSKQoJTm8gbG9uZ2VyIHVzaW5nIDE2IGJpdCBVU0VSIGZ1bmN0aW9ucyAodXNlIHRoZWlyIDMyIGJpdCBjb3VudGVyIHBhcnQpCglSZWluZGVudGluZy4KCUFkZGVkIGZ1bmN0aW9uIHNuZFBsYXlTb3VuZDMyVwoKCSogaW5jbHVkZS9vYmpiYXNlLmgsIGluY2x1ZGUvb2JqaWRsLmgsIGluY2x1ZGUvd2luZS9vYmpfbWFyc2hhbC5oOgoJRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglBZGRlZCB0aGUgYWN0dWFsIGludGVyZmFjZSBkZWZpbml0aW9ucyB0byB0aGUgb2JqX21hcnNoYWwuaCBza2VsZXRvbgoJZmlsZS4gQWxzbyBkZWZpbmVkIHRoZSBhc3NvY2lhdGVkIEMgQVBJLgoKCSogd2luZG93cy9xdWV1ZS5jOiBTdGVwaGFuZSBMdXNzaWVyIDxzdGVwaGFuZUBtYWNhZGFtaWFuLmNvbT4KCVVzZSBnbG9iYWwgc3luY2hyb25pemF0aW9uIG9iamVjdHMsIHRvIGJlIGFibGUgdG8gdXNlIGl0IGluIGRpZmZlcmVudAoJcHJvY2Vzc2VzIChub3Qgb25seSB0aGUgcHJvY2VzcyB3aGljaCBjcmVhdGUgdGhlIHN5bmNocm8gb2JqZWN0KS4KCgkqIHdpbmRvd3MvbWRpLmM6IE5vcm1hbiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCVNldCBod25kQWN0aXZlQ2hpbGQgd2hlbiBtYXhpbWl6aW5nIGEgbWRpIGNoaWxkIHdpbmRvdyBiZWNhdXNlIGl0IGlzCglub3Qgc2V0IHdoZW4gbWF4aW1pemluZyBhIHdpbmRvdyBvdGhlciB0aGFuIHRoZSBhY3RpdmUgY2hpbGQuCgoJKiBjb250cm9scy9tZW51LmM6IFBhc2NhbCBMZXNzYXJkIDxwYXNjYWxAbWFjYWRhbWlhbi5jb20+CglDaGFuZ2UgdGhlIEdldE1lbnVJdGVtUmVjdCB0byBjb21wbHkgd2l0aCB3aW5kb3dzIEFQSS4KCgkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS8uY3ZzaWdub3JlLCBpbmNsdWRlL01ha2VmaWxlLmluOgoJSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoJQ3JlYXRlZCBpbmNsdWRlL01ha2VmaWxlLmluIHRvIHNlcGFyYXRlIGhlYWRlciBmaWxlIGluc3RhbGxhdGlvbiBmcm9tCgl0aGUgdG9wLWxldmVsIE1ha2VmaWxlLgoKCSogb2xlL3N0Z19iaWdibG9ja2ZpbGUuYywgb2xlL3N0Z19zdHJlYW0uYywgb2xlL3N0b3JhZ2UzMi5jLCBvbGUvc3RvcmFnZTMyLmg6CglUaHV5IE5ndXllbiA8dGh1eUBtYWNhZGFtaWFuLmNvbT4KCS0gRml4ZWQgYSBzbWFsbCBibG9jayBkZXBvdCBidWcuCgktIEltcGxlbWVudGVkIGNvbnZlcnRpbmcgZnJvbSBzbWFsbCBibG9ja3MgdG8gYmlnIGJsb2Nrcy4KCS0gVmFsaWRhdGVkIGZpbGUgYXR0cmlidXRlcyBhbmQgZmxhZ3MuCgktIEZpeGVkIGEgYnVnIGZvciBsYXJnZXIgZmlsZXMuCgoJKiByZXNvdXJjZXMvLmN2c2lnbm9yZTogYWRkZWQgc3lzcmVzX05sCgoJKiBncmFwaGljcy94MTFkcnYvb2VtYml0bWFwLmMsIGluY2x1ZGUvb2xlMi5oLCBpbmNsdWRlL29sZWlkbC5oLCBpbmNsdWRlL3NobGd1aWQuaCwgaW5jbHVkZS9zaGxvYmouaCwgaW5jbHVkZS93aW5kZWYuaCwgaW5jbHVkZS93aW5lL29ial9kcmFnZHJvcC5oLCBpbmNsdWRlL3dpbmVycm9yLmgsIGluY2x1ZGUvd2ludHlwZXMuaCwgb2xlL29sZTIuYywgcmVsYXkzMi9vbGUzMi5zcGVjOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50ZWQgdGhlIE9MRSBEcmFnIGFuZCBEcm9wIHRhcmdldCByZWdpc3RyYXRpb24gbWVjaGFuaXNtIGFuZAoJdGhlIERvRHJhZ0Ryb3AgbG9vcCB0byBwZXJmb3JtIHRoZSBEbkQgb3BlcmF0aW9uLgoKCSogd2luZG93cy9tZGkuYywgY29udHJvbHMvbWVudS5jLCBpbmNsdWRlL21lbnUuaDoKCUZyYW5jb2lzIEJvaXN2ZXJ0IDxmcmFuY29pc0BtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGVkIHRoZSBXSU4zMSBMb29rIG1kaSBidXR0b25zIGFuZCBhbHNvIHNvbWUgZGVmaW5lcyBmb3IgdGhlCgltYWdpYyBtZW51IGl0ZW1zLgoKCSogZGxscy9hZHZhcGkzMi9NYWtlZmlsZS5pbiwgZGxscy9hZHZhcGkzMi9jcnlwdC5jLCBpbmNsdWRlL3dpbmNyeXB0LmgsIHJlbGF5MzIvYWR2YXBpMzIuc3BlYzoKCUlhbiBTY2htaWR0IDxpcnNtYW5AaWFnLm5ldD4KCUFkZGVkIGVudHJpZXMgZm9yIG1vc3QgQ3J5cHQqIGNhbGxzLgoJQWRkZWQgc3R1YiBmb3IgQ3J5cHRBY3F1aXJlQ29udGV4dEEuICBUaGlzIGFsbG93cyBXaW45OCBFWFBMT1JFUi5FWEUKCXRvIGdldCBmYXJ0aGVyLgoKCSogY29udHJvbHMvZWRpdC5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQW4gYXBwIGxlZnQganVuayBpbiB0aGUgdW5kbyBidWZmZXIgb2YgYW4gZWRpdCBjb250cm9sIHVwb24gY3JlYXRpb24uCgoJKiB3aW5kb3dzL3dpbi5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUNoYW5nZWQgU2V0UGFyZW50MzIgdG8gYWRoZXJlIHRvIFdpbmRvd3MgYmVoYXZpb3VyIChtb3N0bHkpLAoJd2hpY2ggc2hvdWxkIGFsc28ga2VlcCBpdCBmcm9tIGxlYXZpbmcgZ2FyYmFnZSBhcm91bmQuCgoJKiBvbGUvY29tcG9iai5jOiBTeWx2YWluIFN0Lkdlcm1haW4gPHN5bHZhaW5AbWFjYWRhbWlhbi5jb20+CglJbXBsZW1lbnRhdGlvbiBvZiBhIHNpbXBsZSBsaW5rZWQgbGlzdCAoc3RhdGljKSB0aGF0IHN0b3JlcyBhbmQgY291bnRzCglyZWZlcmVuY2VzIHRvIENPTSBvYmplY3RzLgoKCSogaW5jbHVkZS9vYmpiYXNlLmgsIGluY2x1ZGUvd3R5cGVzLmg6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCU1ha2UgdGhlIFJFRnh4eCB0eXBlcyBjb25zdCBldmVuIGluIEMuIEFsc28gYWRkIEZNVElELgoKCSogd2luZG93cy93aW5wb3MuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglEb24ndCBjYWxsIEVWRU5UX0R1bW15TW90aW9uTm90aWZ5IGZvciBoaWRkZW4gd2luZG93cy4KCgkqIHdpbmRvd3MvbWVzc2FnZS5jOiBTdGVwaGFuZSBMdXNzaWVyIDxzdGVwaGFuZUBtYWNhZGFtaWFuLmNvbT4KCUZpeCBzb21lIHRocmVhZC1zYWZlbmVzcyBwcm9ibGVtIHdoZW4gYWNjZXNzaW5nIHRoZSBzeXN0ZW0gbWVzc2FnZQoJcXVldWUuCgoJKiB3aW5kb3dzL2lucHV0LmMsIGluY2x1ZGUvd2ludXNlci5oLCByZWxheTMyL3VzZXIzMi5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglJbXBsZW1lbnRlZCBNYXBWaXJ0dWFsS2V5RXggKHRpY2tldCAyMSkuCglJZ25vcmUga2V5Ym9hcmQgbGF5b3V0IGZvciBub3cuCgoJKiBpbmNsdWRlL29iamlkbC5oLCBpbmNsdWRlL3dpbmUvb2JqX2NsaWVudHNlcnZlci5oOgoJRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglBZGRlZCB0aGUgYWN0dWFsIGludGVyZmFjZSBkZWZpbml0aW9ucyB0byB0aGUgb2JqX2NsaWVudHNlcnZlci5oCglza2VsZXRvbiBmaWxlLgoKCSogZGxscy9udGRsbC9NYWtlZmlsZS5pbiwgZGxscy9udGRsbC9udC5jLCBkbGxzL250ZGxsL3JlZy5jLCBkbGxzL250ZGxsL3J0bC5jLCByZWxheTMyL250ZGxsLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCS0gZG9jdW1lbnRlZCBtb3N0IG9mIHRoZSB1bmRvY3VtZW50ZWQgZnVuY3Rpb25zIGluIG50LmMKCS0gaW1wbGVtZW50ZWQgUnRsR2V0RGFjbFNlY3VyaXR5RGVzY3JpcHRvcgoJLSBzdHVicyBmb3IgTnRFbnVtZXJhdGVLZXksIE50T3BlblN5bWJvbGljTGlua09iamVjdCwgTnRRdWVyeUtleQoJLSBzdHVicyBmb3IgTnRSYWlzZUV4Y2VwdGlvbiwgUnRsUmFpc2VFeGNlcHRpb24gKHRoaXMgYm90aCB3aWxsIGNyYXNoKQoKRnJpIEZlYiAxMiAxNzo0NzowNyAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZGxscy9hZHZhcGkzMi9zZWN1cml0eS5jLCBkbGxzL2FkdmFwaTMyL3NlcnZpY2UuYywgZmlsZXMvZHJpdmUuYywgbWlzYy9yZWdpc3RyeS5jLCB3aW4zMi9uZXdmbnMuYywgd2luZG93cy91c2VyLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNtYWxsIGZpeGVzIHRvIGNvbXBpbGUgd2l0aCB0aGUgaGVhZGVycyAobW9zdGx5IG50LXNlY3VyaXR5KS4KCgkqIGluY2x1ZGUvbnRkZGsuaCwgaW5jbHVkZS9udGRlZi5oLCBpbmNsdWRlL250ZGxsLmgsIGluY2x1ZGUvd2luYmFzZS5oLCBpbmNsdWRlL3dpbmRlZi5oLCBpbmNsdWRlL3dpbm50LmgsIGluY2x1ZGUvd2lucmVnLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1hZGUgbnQtcmVsYXRlZCB0eXBlcyBjb21wYXRpYmxlLCB0aHJvdyBvdXQgd2luZS1zcGVjaWZpYyB0eXBlcy4KCgkqIHdpbmRvd3MvbW91c2UuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglVc2UgTU9OSVRPUl8uLi4gaW5zdGVhZCBvZiBERVNLVE9QXy4uLiByb3V0aW5lcyB0byBnZXQgc2NyZWVuCglkaW1lbnNpb25zOyB0aGVzZSB3b3JrIGFsc28gd2l0aCBuYXRpdmUgVVNFUi4KCgkqIHdpbmRvd3MvZGVmd25kLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJV01fQUNUSVZBVEUgZGVmYXVsdCBwcm9jZXNzaW5nIHNob3VsZCBzZXQgd2luZG93IGZvY3VzLgoJU2hvdWxkIGZpeCBmb2N1cyBwcm9ibGVtcyBpbiBub24tbWFuYWdlZCBtb2RlLgoKVGh1IEZlYiAxMSAxNjozMjoxNyAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogb2xlL25scy9ubGQubmxzLCByZXNvdXJjZXMvTWFrZWZpbGUuaW4sIHJlc291cmNlcy9UT0RPLCByZXNvdXJjZXMvc3lzcmVzLmMsIHJlc291cmNlcy9zeXNyZXNfTmwucmMsIEFVVEhPUlMsIGRvY3VtZW50YXRpb24vbGFuZ3VhZ2VzLCBpbmNsdWRlL2F1dGhvcnMuaCwgaW5jbHVkZS9vcHRpb25zLmgsIG1pc2MvbWFpbi5jLCBvbGUvb2xlMm5scy5jOgoJS2xhYXMgdmFuIEdlbmQgPGtsYWFzQHZhbmdlbmQuZGVtb24ubmw+CglBZGRlZCBzdXBwb3J0IGZvciB0aGUgRHV0Y2ggbGFuZ3VhZ2UuCgoJKiBkbGxzL2NvbWN0bDMyL3Byb3BzaGVldC5jLCBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvcHJzaHQuaCwgaW5jbHVkZS9zaGxvYmouaDoKCUFkcmlhbiBUaHVyc3RvbiA8YWRyaWFudEBjb3JlbC5jYT4KCVp5Z28gQmxheGVsbCA8emJsYXhlbGxAY29yZWwuY2E+CglNb3ZlIHByb3BlcnR5IHNoZWV0cyBmcm9tIGNvbW1jdHJsLmggaW50byBpbnRvIHByc2h0LmguCgoJKiBncmFwaGljcy9kM2RkZXZpY2VzLmMsIGdyYXBoaWNzL2QzZGV4ZWN1dGVidWZmZXIuYywgZ3JhcGhpY3MvZDNkbGlnaHQuYywgZ3JhcGhpY3MvZDNkbWF0ZXJpYWwuYywgZ3JhcGhpY3MvZDNkdGV4dHVyZS5jLCBncmFwaGljcy9kM2R2aWV3cG9ydC5jOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglBZGRlZCAnb2JqYmFzZS5oJyB0byBwcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmdzLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglCZXR0ZXIgZGV0ZWN0aW9uIG9mIFhTaG0gZXJyb3JzIChzaG91bGQgbm93IHJ1biBvbiByZW1vdGUgZGlzcGxheXMpLgoKCSogbXVsdGltZWRpYS9tbXN5c3RlbS5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJRml4ZXMgbWl4ZXJHZXRJRDE2LzMyIHByb2JsZW1zL2Vycm9ycy4KCgkqIG9sZS9vbGVvYmouYywgbXVsdGltZWRpYS9kcGxheS5jOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCUlzRXF1YWxHVUlEIGlzIGRlZmluZWQgaW4gJ2luY2x1ZGUvd2luZS9vYmpfYmFzZS5oJy4gQWxsIG90aGVyCglkZWNsYXJhdGlvbnMgbXVzdCBzdXJyZW5kZXIgb3IgcHJlcGFyZSB0byBiZSBtZXQgd2l0aCBkZWFkbHkgZm9yY2UgOi0pCgoJKiByZWxheTMyL29sZTMyLnNwZWM6IEZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJQWRkZWQgbmV3IGZ1bmN0aW9ucyAoZnJvbSBXaW45OCkKCUFkZGVkIGNvbW1lbnRzIHdpdGggdGhlIHBhcmFtZXRlciB0eXBlcyBmb3IgZnV0dXJlIHVzZSB3aXRoIGRsbGdsdWUKCgkqIGZpbGVzL2RyaXZlLmM6IFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCVNldCB0aGUgZmxhZ3MgZm9yIEdldFZvbHVtZUluZm9ybWF0aW9uMzJBLgoKCSogd2luZG93cy93aW4uYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaW5kV2luZG93IGZhaWxlZCBmb3IgMzIgYml0IHdpbmRvd3Mgd2l0aCBzdHlsZSAhPSBXU19DSElMRC4KCldlZCBGZWIgMTAgMDY6NTI6NTggMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvQXR0aWMvcHJpbnQuaCwgaW5jbHVkZS93aW5zcG9vbC5oLCBtaXNjL3ByaW50ZHJ2LmMsIGdyYXBoaWNzL3BzZHJ2L2RyaXZlci5jLCBncmFwaGljcy9wc2Rydi9lc2NhcGUuYywgZ3JhcGhpY3MvcHNkcnYvZm9udC5jLCBncmFwaGljcy9wc2Rydi9ncmFwaGljcy5jLCBncmFwaGljcy9wc2Rydi9pbml0LmMsIGdyYXBoaWNzL3BzZHJ2L3BwZC5jLCBncmFwaGljcy9wc2Rydi9wcy5jLCBncmFwaGljcy9wc2Rydi90ZXh0LmM6CglQYXVsIFF1aW5uIDxwYXVscUBjb3JlbC5jYT4KCUFsYmVydCBEZW4gSGFhbiA8YWxiZXJ0ZEBjb3JlbC5jYT4KCU1vdmVzIGZpbGVzIGZyb20gcHJpbnQuaCB0byB3aW5zcG9vbC5oIGZvciBiZXR0ZXIgU0RLIGhlYWRlciBjb21wbGlhbmNlCglmb3IgV2luZWxpYiBwcm9ncmFtcy4KCgkqIGluY2x1ZGUvaG9vay5oLCBpbmNsdWRlL29iamlkbC5oLCBpbmNsdWRlL29sZTIuaCwgaW5jbHVkZS90Y2hhci5oLCBpbmNsdWRlL3dpbmJhc2UuaCwgaW5jbHVkZS93aW5lL29ial9jbGllbnRzZXJ2ZXIuaCwgaW5jbHVkZS93aW5lL29ial9kYXRhb2JqZWN0LmgsIGluY2x1ZGUvd2luZS9vYmpfc3RvcmFnZS5oLCBpbmNsdWRlL3dpbmVycm9yLmgsIGluY2x1ZGUvd2ludXNlci5oLCBpbmNsdWRlL3d0eXBlcy5oOgoJQWxiZXJ0IERlbiBIYWFuIDxhbGJlcnRkQGNvcmVsLmNhPgoJQWRyaWFuIFRodXJzdG9uIDxhdGh1cnN0b0Bjb3JlbC5jYT4KCVBhdWwgUXVpbm4gPHBhdWxxQGNvcmVsLmNhPgoJWnlnbyBCbGF4ZWxsIDx6eWdvYkBjb3JlbC5jYT4KCU1pc2NlbGxhbmVvdXMgcGF0Y2hlcyB0byBoZWFkZXIgZmlsZXMuICBBbGwgb2YgdGhlc2UgYXJlIHN1cHBvc2VkbHkgdGhlcmUKCXRvIGhlbHAgYnVpbGQgV2luZWxpYiBhcHBsaWNhdGlvbnMuCgoJKiBpbmNsdWRlL3dpbnR5cGVzLmg6IEFsYmVydCBEZW4gSGFhbiA8YWxiZXJ0ZEBjb3JlbC5jYT4KCUFkcmlhbiBUaHVyc3RvbiA8YXRodXJzdG9AY29yZWwuY2E+CglQYXVsIFF1aW5uIDxwYXVscUBjb3JlbC5jYT4KCVp5Z28gQmxheGVsbCA8enlnb2JAY29yZWwuY2E+CglNb3JlIHR5cGVzIHdlIG5lZWQgZm9yIGNvbXBpbGluZyBXaW5lbGliL01GQyBhcHBsaWNhdGlvbnMuCgoJKiBpbmNsdWRlL2NvbW1jdHJsLmg6IFBhdWwgUXVpbm4gPHBhdWxxQGNvcmVsLmNhPgoJQWRyaWFuIFRodXJzdG9uIDxhZHJpYW50QGNvcmVsLmNhPgoJTW9yZSB0eXBlcyBmb3IgY29tbW9uIGNvbnRyb2xzLiAgTmVlZGVkIGZvciBXaW5lbGliLgoKCSogZGxscy9zaGVsbDMyL3NoZWxsbGluay5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvbGUuYywgaW5jbHVkZS93aW5lL29ial9iYXNlLmgsIG11bHRpbWVkaWEvZHNvdW5kLmMsIG9sZS9jb21wb2JqLmMsIG9sZS9pZnMuYzoKCUZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJQmV0dGVyIHNldCBvZiBtYWNyb3MgZm9yIGRlZmluaW5nIHRoZSBDT00gaW50ZXJmYWNlcy4KCgkqIGRsbHMvYWR2YXBpMzIvc2VjdXJpdHkuYywgcmVsYXkzMi9hZHZhcGkzMi5zcGVjOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJVHdvIEFEVkFQSTMyIHN0dWJzOiBJbXBlcnNvbmF0ZVNlbGYzMiBhbmQgQWNjZXNzQ2hlY2szMi4gU3BlbGxpbmcgZml4ZXMuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUZpeGVkIGRlYnVnIG91dHB1dCB0byBmb2xsb3cgJy1kZWJ1Z21zZycgZmxhZ3MuCgpUdWUgRmViICA5IDE1OjQ5OjM5IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBtc2Rvcy9pbnQyMC5jLCBvbGUvc2FmZWFycmF5LmMsIHJlbGF5MzIvYnVpbHRpbjMyLmMsIHNlcnZlci9kZXZpY2UuYywgc2VydmVyL2ZpbGUuYywgc2VydmVyL3BpcGUuYywgc2VydmVyL3RocmVhZC5jLCB3aW5kb3dzL3dpbmhlbHAuYzoKCU1pY2hhZWwgVmVrc2xlciA8bXZla3NsZXJAdGVjaHVuaXgudGVjaG5pb24uYWMuaWw+CglBZGRlZCBtaXNzaW5nIGluY2x1ZGVzIHRvIGF2b2lkIHdhcm5pbmdzL2Vycm9ycy4KCgkqIGluY2x1ZGUvZGlucHV0LmgsIGluY2x1ZGUvbHpleHBhbmQuaCwgaW5jbHVkZS9udGRsbC5oLCBpbmNsdWRlL29sZTIuaCwgaW5jbHVkZS9zaGVsbGFwaS5oLCBpbmNsdWRlL3ZnYS5oLCBpbmNsdWRlL3dpbmJhc2UuaCwgaW5jbHVkZS93aW5jb24uaCwgaW5jbHVkZS93aW5kZWYuaCwgaW5jbHVkZS93aW5kb3dzLmgsIGluY2x1ZGUvd2luZS9rZXlib2FyZDE2LmgsIGluY2x1ZGUvd2luZS9vYmpfc3RvcmFnZS5oLCBpbmNsdWRlL3dpbmUvc2hlbGwxNi5oLCBpbmNsdWRlL3dpbmUvdzMyc2tybmwuaCwgaW5jbHVkZS93aW5lL3dpbmJhc2UxNi5oLCBpbmNsdWRlL3dpbmUvd2luZXNvdW5kLmgsIGluY2x1ZGUvd2luZS93aW5lc3RyaW5nLmgsIGluY2x1ZGUvd2luZS93aW51c2VyMTYuaCwgaW5jbHVkZS93aW5uZXR3ay5oLCBpbmNsdWRlL3dpbm5scy5oLCBpbmNsdWRlL3dpbm50LmgsIGluY2x1ZGUvd2lucmVnLmgsIGluY2x1ZGUvd2ludHlwZXMuaCwgaW5jbHVkZS93aW51c2VyLmgsIGluY2x1ZGUvd2ludmVyLmg6CglNaWNoYWVsIFZla3NsZXIgPG12ZWtzbGVyQHRlY2h1bml4LnRlY2huaW9uLmFjLmlsPgoJTW92ZWQgZXZlcnl0aGluZyBvdXQgb2Ygd2luZG93cy5oLgoKCSogZ3JhcGhpY3Mvd2luZy5jLCBpZjE2MzIvZ2RpLnNwZWMsIGluY2x1ZGUvYml0bWFwLmgsIGluY2x1ZGUvcGFsZXR0ZS5oLCBpbmNsdWRlL3dpbmdkaS5oLCBvYmplY3RzL3BhbGV0dGUuYywgcmVsYXkzMi9nZGkzMi5zcGVjOgoJQnJhZCBQZXBlcnMgPGJyYWRAbGludXhjYW5hZGEuY29tPgoJV2luRyBmaXhlcy4KCgkqIGNvbnRyb2xzL21lbnUuYywgaW5jbHVkZS9tZXNzYWdlLmgsIGluY2x1ZGUvcXVldWUuaCwgd2luZG93cy9kaWFsb2cuYywgd2luZG93cy9tZXNzYWdlLmMsIHdpbmRvd3Mvbm9uY2xpZW50LmMsIHdpbmRvd3MvcXVldWUuYywgd2luZG93cy90aW1lci5jOgoJU3RlcGhhbmUgTHVzc2llciA8c3RlcGhhbmVAbWFjYWRhbWlhbi5jb20+CgktRml4ZWQgTUVTU0FHRSBmdW5jdGlvbnMgdGhhdCB3ZXJlIHRodW5raW5nIGRvd24gdG8gMTYgYml0cyBpbXBsZW1lbnRhdGlvbi4KCVNvIFBlZWtNZXNzYWdlMzIsIEdldE1lc3NhZ2UzMiwgUG9zdE1lc3NhZ2UzMiwgUG9zdFRocmVhZE1lc3NhZ2UgYXJlIGZpeGVkCgl3aXRoIHRoaXMgcGF0Y2guIFVuaWNvZGUgdmVyc2lvbiBvZiB0aG9zZSBmdW5jdGlvbnMgaXMgY3VycmVudGx5IG9ubHkKCWNhbGxpbmcgdGhlIEFTQ0lJIHZlcnNpb24uCgktRml4ZWQgcXVldWUgc2lnbmFsaW5nIHVzaW5nIGEgbmV3IEVWRU5UIG9iamVjdCBpbiB0aGUgcXVldWUgZm9yIDMyIGJpdHMKCXRocmVhZC4gTXNnV2FpdEZvck11bHRpcGxlT2JqZWN0IGhhcyBiZWVuIGZpeGVkIGFuZCBpcyBub3cgYmxvY2tpbmcgb24gdGhlCglyaWdodCBFVkVOVC4KCgkqIG9iamVjdHMvbWV0YWZpbGUuYzogSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglHZXRNZXRhRmlsZUJpdHNFeCBzaG91bGQgd29yayBpbiBieXRlcyBub3Qgd29yZHMuCgoJKiBpbmNsdWRlL3NobG9iai5oOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCURsbEdldENsYXNzT2JqZWN0IHNob3VsZCB0YWtlIGEgUkVGQ0xTSUQgbm90IGFuIExQQ0xTSUQuCgoJKiBvYmplY3RzL2RpYi5jLCBpbmNsdWRlL2dsb2JhbC5oLCBtZW1vcnkvdmlydHVhbC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglDaGFuZ2UgZmF1bHQgaGFuZGxlciAnYWRkcicgYXJndW1lbnQgdG8gTFBDVk9JRC4KCgkqIGZpbGVzL2ZpbGUuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglDYWxsIFZJUlRVQUxfSGFuZGxlRmF1bHQgaWYgcmVhZC93cml0ZSByZXR1cm5zIEVGQVVMVC4KCgkqIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYzoKCUJlcnRobyBTdHVsdGllbnMgPGJlcnRob0BwYW50ZXIuc29jaS5hYXUuZGs+CglGaXggdHlwbyB0byBtYXAgR2V0VGV4dEV4dGVudFBvaW50IHRvIHRoZSBjb3JyZWN0IDMyQSB2ZXJzaW9uLgoKCSogZG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmcsIGluY2x1ZGUvcGVleGUuaCwgaW5jbHVkZS93aW5jb24uaCwgcHJvZ3JhbXMvcmVndGVzdC9yZWd0ZXN0LmMsIHJlbGF5MzIvYWR2YXBpMzIuc3BlYywgd2luZG93cy94MTFkcnYvbWFpbi5jLCBkbGxzL2FkdmFwaTMyL3NlY3VyaXR5LmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNvbWUgc21hbGwgYnVnZml4ZXMsIGFkZGVkIG1vcmUgUEUgcmVsb2NhdGlvbiB0eXBlcyAoZm9yIFdpbkNFIG1vc3RseSksCglzb21lIGNvbnNvbGUgcHJvdG90eXBlcywgLWRsbCBpcyB1c2VmdWwgZm9yIHdpbmVsaWIgdG9vLCByZWd0ZXN0Cgljb21waWxlIGZpeGVkLgoKCSogaW5jbHVkZS93aW5lL3dpbnVzZXIxNi5oLCBpbmNsdWRlL3dpbnVzZXIuaCwgb2JqZWN0cy9jdXJzb3JpY29uLmM6CglQYXVsIFF1aW5uIDxwYXVscUBjb3JlbC5jYT4KCUdldEN1cnNvclBvcyBpcyBhY3R1YWxseSBhIEJPT0wuCgoJKiBpbmNsdWRlL21tc3lzdGVtLmg6IFBhdWwgUXVpbm4gPHBhdWxxQGNvcmVsLmNhPgoJQWRyaWFuIFRodXJzdG9uIDxhZHJpYW50QGNvcmVsLmNhPgoJTW9yZSB0eXBlcywgQysrIHByb3RlY3Rpb24sIGFuZCBhIHR5cG8gY29ycmVjdGlvbiBmb3IgbW1zeXN0ZW0uaC4KCgkqIGluY2x1ZGUvY29tbWN0cmwuaDogWnlnbyBCbGF4ZWxsIDx1ajIya2ZiY0B1bWFpbC5mdXJyeXRlcnJvci5vcmc+CglNb3ZlIHRoZSAjZGVmaW5lIG9mIERVTU1ZVU5JT05OQU1FKiB0byBiZWZvcmUgdGhleSBhcmUgdXNlZC4KCUFkZCBhIGRlZmluaXRpb24gZm9yIERVTU1ZVU5JT05OQU1FIChhcyBvcHBvc2VkIHRvIERVTjEsIERVTjIuLi4pLgoJVXNlIHRoZSBjb3JyZWN0IFdJTkVMSUJfTkFNRV9BVyBtYWNybyBmb3IgVFZJVEVNIGFuZCByZWxhdGVkIG5hbWVzLgoJRGVmaW5lICJUVl9JVEVNIiB0byBhZ3JlZSB3aXRoIHlvdS1rbm93LXdobydzIGRvY3VtZW50YXRpb24uCgoJKiBkbGxzL3ZlcnNpb24vaW5mby5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglOVUxMIGlzIGEgdmFsaWQgYXJndW1lbnQgYXMgaGFuZGxlIGZvciBHZXRGaWxlVmVyc2lvbkluZm9TaXplMzJBLgoKCSogaW5jbHVkZS9kaW5wdXQuaCwgd2luZG93cy9kaW5wdXQuYzoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQWRkZWQgYnVmZmVyZWQgZGV2aWNlIGFjY2VzcyBmb3IgRElucHV0J3MgbW91c2UgZHJpdmVyLgoKCSogZmlsZXMvZmlsZS5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVdyb25nIGFjY2VzcyBvbiBzZXJ2ZXIgaGFuZGxlIHdhcyBkZW1hbmRlZCAoR0VORVJJQ19SRUFEIGluc3RlYWQgb2YKCUdFTkVSSUNfV1JJVEUpLgoKCSogZGxscy9zaGVsbDMyL3NoZWxsb3JkLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUJldHRlciBpbXBsZW1lbnRhdGlvbiAodGFrZXMgc3RyaW5ncyBvciByZXMtaWQncyBub3cpLgoKCSogZGxscy92ZXJzaW9uL3Jlc291cmNlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogTlVMTCBwb2ludGVyIGNoZWNrIGZvciBvdXRwdXQgcGFyYW1ldGVycy4KCgkqIGRsbHMvc2hlbGwzMi9icnNmb2xkZXIuYzoKCVp5Z28gQmxheGVsbCA8dWoyMmtmYmNAdW1haWwuZnVycnl0ZXJyb3Iub3JnPgoJRml4ZWQgdHdvIHBvaW50ZXIvaW50ZWdlciBtaXNtYXRjaCB3YXJuaW5ncy4KCgkqIGRvY3VtZW50YXRpb24vY29uc29sZTogWnlnbyBCbGF4ZWxsIDx1ajIya2ZiY0B1bWFpbC5mdXJyeXRlcnJvci5vcmc+CglTcGVsbGluZyBmaXhlcy4KCgkqIGNvbnNvbGUveHRlcm0uYywgd2luMzIvY29uc29sZS5jOgoJWnlnbyBCbGF4ZWxsIDx1ajIya2ZiY0B1bWFpbC5mdXJyeXRlcnJvci5vcmc+Cgl3aW5lX29wZW5wdHkgaXMgbm90IHByb3Blcmx5IGRlY2xhcmVkIChlaXRoZXIgbWlzc2luZyBvciBtaXNtYXRjaGVkCglkZWNsYXJhdGlvbnMpIGluIGJvdGggcGxhY2VzIHdoZXJlIGl0IGlzIHVzZWQuCgoJKiBpbmNsdWRlL3dpbmdkaS5oLCBvYmplY3RzL2RpYi5jOgoJWnlnbyBCbGF4ZWxsIDx1ajIya2ZiY0B1bWFpbC5mdXJyeXRlcnJvci5vcmc+CglGaXggdHlwZXMgb2YgR2V0RElCaXRzIGZ1bmN0aW9ucyAoTFBTVFIgc2hvdWxkIGJlIExQVk9JRCkuCgoJKiBncmFwaGljcy94MTFkcnYvZGliLmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeGVzIHNldmVyYWwgcHJvYmxlbXMgd2l0aCBTZXRESUJpdHNUb0RldmljZSBpZiB4U3JjICE9IDAuCglUaGFua3MgdG8gSWFuIFNjaG1pZHQgZm9yIHRoZSBsb2dzLgoKCSogd2luZG93cy9tZGkuYzogRnJhbmNvaXMgQm9pc3ZlcnQgPGZyYW5jb2lzQG1hY2FkYW1pYW4uY29tPgoJVGhlIHN5c3RlbXMgYnV0dG9ucyAobWluaW1pemUvcmVzdG9yZS9jbG9zZSkgbm93IGFwcGVhciBvbiB0aGUgbWVudQoJYmFyIG9mIG1kaSBhcHBsaWNhdGlvbi4KCgkqIGNvbnRyb2xzL21lbnUuYzogRnJhbmNvaXMgQm9pc3ZlcnQgPGZyYW5jb2lzQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50ZWQgdGhlIG1hZ2ljIG1lbnUgaXRlbXMgaWQncyB1c2VkIGJ5IHdpbmRvd3Mgd2hlbiBpbnNlcnRpbmcKCXRoZSBtaW5pbWl6ZS9tYXhpbWl6ZS9jbG9zZSBidXR0b25zIGluIHRoZSBtZW51IGJhciBvZiBhbiBhcHBsaWNhdGlvbi4KCgkqIG9iamVjdHMvZW5obWV0YWZpbGUuYzogSmFzb24gTWNNdWxsYW4gPGptY2NAb250di5jb20+CglBZGRzIHN1cHBvcnQgZm9yIEVNUl9TVFJFVENIRElCSVRTIGluIEVNRnMuCgoJKiBwcm9ncmFtcy9hdml0b29scy9hdmlwbGF5LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4ZWQgaW1hZ2Ugc2l6ZSBhbmQgbGluZSBzaXplLCBhZGRlZCA4Yml0IGNvbG9yL3BhbGV0dGUgaGFuZGxpbmcuCgoJKiB0b29scy9idWdfcmVwb3J0LnBsOiBBZGFtIHRoZSBKYXp6IEd1eSA8bWFnaWNib3hAYmVzdHdlYi5uZXQ+CglGaXhlZCBmb3JtYXR0aW5nIG9mIGNvZGUKCU5vdyBjaGFuZ2VzIHRvIGRpcmVjdG9yeSBvZiBwcm9ncmFtIHRvIGJlIHJ1biBiZWZvcmUgc3RhcnRpbmcgd2luZQoKCSogd2luZG93cy9xdWV1ZS5jLCB3aW5kb3dzL3VzZXIuYywgaW5jbHVkZS91c2VyLmgsIHNjaGVkdWxlci90aHJlYWQuYzoKCVN0ZXBoYW5lIEx1c3NpZXIgPHN0ZXBoYW5lQG1hY2FkYW1pYW4uY29tPgoJLSBDbGVhbmVkIHVwIHRoZSBtZXNzYWdlIHF1ZXVlIHdoZW4gYSB0aHJlYWQgZXhpdCAoYnV0IG5vdCB0aGUgcHJvY2VzcykuCgktIE1vZGlmaWVkIFFVRVVFX0RlbGV0ZU1zZ1F1ZXVlIHRvIGV4aXQgZ3JhY2VmdWxseSAod2l0aG91dCBjcmFzaGluZyBXaW5lKSBpZgoJICBxdWV1ZSBsaW5rIGxpc3QgaXMgY29ycnVwdGVkLgoKCSogbXVsdGltZWRpYS9kc291bmQuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglTb3VuZHMgd2VyZSBjdXQgb2ZmIGR1ZSB0byBpbnRlZ2VyIG92ZXJmbG93LiBGaXhlZC4KCgkqIGluY2x1ZGUvd2luZG93c3guaDogUGF1bCBRdWlubiA8cGF1bHFAY29yZWwuY2E+CglBZGRlZCB3aW5kb3dzeC5oIGZvciBXaW5lbGliLgoKRnJpIEZlYiAgNSAxNzo0MDo0NyAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIHByb2dyYW1zL01ha2VmaWxlLmluLCBwcm9ncmFtcy9jbWRsZ3RzdC8uY3ZzaWdub3JlLCBwcm9ncmFtcy9jbWRsZ3RzdC9NYWtlZmlsZS5pbiwgcHJvZ3JhbXMvY21kbGd0c3QvY21kbGdyLmgsIHByb2dyYW1zL2NtZGxndHN0L2NtZGxnci5yYywgcHJvZ3JhbXMvY21kbGd0c3QvY21kbGd0c3QuYzoKCTxld2lsbEBuY2FsLnZlcmlvLmNvbT4KCUFkZGVkIGNvbW1vbiBkaWFsb2dzIHRlc3QgcHJvZ3JhbS4KCgkqIGluY2x1ZGUvbWVzc2FnZS5oLCBpbmNsdWRlL3F1ZXVlLmgsIGluY2x1ZGUvd2luLmgsIGluY2x1ZGUvd2lucG9zLmgsIHNjaGVkdWxlci90aHJlYWQuYywgd2luZG93cy9mb2N1cy5jLCB3aW5kb3dzL2lucHV0LmMsIHdpbmRvd3MvbWVzc2FnZS5jLCB3aW5kb3dzL3F1ZXVlLmMsIHdpbmRvd3Mvd2luLmMsIHdpbmRvd3Mvd2lucG9zLmM6CglOb2VsIEJvcnRod2ljayA8bm9lbEBtYWNhZGFtaWFuLmNvbT4KCUFkZGVkIG1hbmFnZW1lbnQgYW5kIGFsbG9jYXRpb24gb2YgdGhlIFBFUlFVRVVFREFUQSBzdHJ1Y3R1cmUuCgoJKiBncmFwaGljcy9kZHJhdy5jLCBncmFwaGljcy92Z2EuYywgaW5jbHVkZS9kZHJhdy5oOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CgktIGFkZGVkIGEgZHVtcCBvZiB0aGUgcGFsZXR0ZSBjcmVhdGlvbiBmbGFncwoJLSBjaGFuZ2VkIHBhbGV0dGUgY3JlYXRpb24gY29kZSBpbiB2Z2EuYyB0byBwcmV2ZW50IHVzZWxlc3MgZXJyb3IKCSAgbWVzc2FnZQoKCSogZG9jdW1lbnRhdGlvbi93aW5lLm1hbiwgZmlsZXMvZHJpdmUuYywgd2luZS5pbmk6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglVc2UgdmZhdC93aW45NSBhcyBkZWZhdWx0LgoKCSogaW5jbHVkZS92ZncuaCwgbXVsdGltZWRpYS9tc3ZpZGVvLmMsIHByb2dyYW1zL2F2aXRvb2xzLy5jdnNpZ25vcmUsIHByb2dyYW1zL2F2aXRvb2xzL01ha2VmaWxlLmluLCBwcm9ncmFtcy9hdml0b29scy9hdmlpbmZvLmMsIHByb2dyYW1zL2F2aXRvb2xzL2F2aXBsYXkuYywgcmVsYXkzMi9idWlsdGluMzIuYywgcmVsYXkzMi9tc3ZmdzMyLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVVwZGF0ZWQgbXN2aWRlbyAvIHZmdy5oLCB1c2UgYnVpbHRpbiBtc3ZmdzMyLmRsbCBieSBkZWZhdWx0LCBhZGRlZAoJYXZpaW5mbyBhbmQgYXZpcGxheSBwcm9ncmFtcy4KCgkqIHdpbjMyL2NvbnNvbGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDb250aW51ZWQgaGFjayB0byB3aW4zMi9jb25zb2xlLmMsIHNvIHRoYXQgdGhlIElEQSBQcm8gRGlzYXNzZW1ibGVyCgl3b3JrcyBhZ2Fpbi4gTmVlZHMgbXVjaCBtb3JlIHdvcmsgaG93ZXZlci4KCgkqIG9sZS9zdG9yYWdlMzIuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglJbmNsdWRlIG9iamJhc2UuaCBmb3IgQ29UYXNrTWVtKiBwcm90b3R5cGVzIChvciB3ZSBnZXQgV0lOQVBJCglwcm9ibGVtcykuCgoJKiBvbGUvc3RvcmFnZTMyLmg6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgbWlzc2luZyBVTE9ORyB0byBzdGF0aWMgY29uc3QgT0ZGU0VUX3h4LgoKVGh1IEZlYiAgNCAxNjo0NTo0MCAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZG9jdW1lbnRhdGlvbi93aW5lLm1hbjogSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoJVmFyaW91cyBtYW5wYWdlIHVwZGF0ZXMsIGluY2x1ZGluZyB0aGUgaW5jb3JyZWN0IHN0YXRlbWVudCBhYm91dCBnbGliYwoJYW5kIGNsb25lKCkuCgoJKiBkb2N1bWVudGF0aW9uL2RlYnVnZ2luZzogSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoJRml4IHBvaW50ZXIgdG8gdGhlIFdpbmRvd3MgRGlzYXNzZW1ibGVyIDMyLiAgVGhhbmtzIHRvIEhlcmJlcnQKCVJvc21hbml0aCA8aGVycEB3aWxkc2F1Lmlkdi51bmktbGluei5hYy5hdD4gZm9yIHN1Z2dlc3RpbmcgdGhpcy4KCgkqIGRsbHMvbXNhY20zMi9kcml2ZXIuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFub3RoZXIgdXNhZ2Ugb2Ygbm9uLXBvcnRhYmxlIGZ1bmN0aW9ucy4uLgoKCSogbXNkb3MvZG9zbWVtLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglTb21lIHZhbHVlcyBvZiBwQmlvc0RhdGEgYWRkZWQvZml4ZWQuCgoJKiBvYmplY3RzL3BhbGV0dGUuYywgd2luZG93cy9jbGlwYm9hcmQuYywgd2luZG93cy9kY2UuYywgd2luZG93cy9kaXNwbGF5LmMsIHdpbmRvd3MvZXZlbnQuYywgd2luZG93cy9rZXlib2FyZC5jLCB3aW5kb3dzL21vdXNlLmMsIHdpbmRvd3Mvc3lzbWV0cmljcy5jLCB3aW5kb3dzL3VzZXIuYywgd2luZG93cy93aW4uYywgd2luZG93cy93aW5wb3MuYywgY29udHJvbHMvZGVza3RvcC5jLCBjb250cm9scy93aWRnZXRzLmMsIGRlYnVnZ2VyL2RiZy55LCBncmFwaGljcy9kZHJhdy5jLCBncmFwaGljcy9wYWludGluZy5jLCBncmFwaGljcy93aW5nLmMsIGluY2x1ZGUvYml0bWFwLmgsIGluY2x1ZGUvY29sb3IuaCwgaW5jbHVkZS9kZHJhdy5oLCBpbmNsdWRlL2RlYnVnLmgsIGluY2x1ZGUvZGVidWdkZWZzLmgsIGluY2x1ZGUvZGVza3RvcC5oLCBpbmNsdWRlL2Rpc3BsYXkuaCwgaW5jbHVkZS9tYWluLmgsIGluY2x1ZGUvb3B0aW9ucy5oLCBpbmNsdWRlL3R0eWRydi5oLCBpbmNsdWRlL3dpbi5oLCBpbmNsdWRlL3gxMWRydi5oLCBtaXNjL21haW4uYywgb2JqZWN0cy9iaXRtYXAuYywgb2JqZWN0cy9jb2xvci5jLCBvYmplY3RzL2RjLmMsIG9iamVjdHMvZGliLmMsIG9iamVjdHMvZ2Rpb2JqLmM6CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCU1vdmVkIHNvbWUgbW9yZSBjb2RlIHRvIHRoZSBYMTEgZHJpdmVyLgoKCSogd2luZG93cy90dHlkcnYvTWFrZWZpbGUuaW4sIHdpbmRvd3MvdHR5ZHJ2L2NsaXBib2FyZC5jLCB3aW5kb3dzL3R0eWRydi9kZXNrdG9wLmMsIHdpbmRvd3MvdHR5ZHJ2L2V2ZW50LmMsIHdpbmRvd3MvdHR5ZHJ2L2luaXQuYywgd2luZG93cy90dHlkcnYva2V5Ym9hcmQuYywgd2luZG93cy90dHlkcnYvbWFpbi5jLCB3aW5kb3dzL3R0eWRydi9tb25pdG9yLmMsIHdpbmRvd3MvdHR5ZHJ2L21vdXNlLmMsIHdpbmRvd3MvdHR5ZHJ2L3duZC5jOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglUVFkgZHJpdmVyIGNoYW5nZXMuCgoJKiB3aW5kb3dzL3gxMWRydi9NYWtlZmlsZS5pbiwgd2luZG93cy94MTFkcnYvY2xpcGJvYXJkLmMsIHdpbmRvd3MveDExZHJ2L2Rlc2t0b3AuYywgd2luZG93cy94MTFkcnYvZXZlbnQuYywgd2luZG93cy94MTFkcnYvaW5pdC5jLCB3aW5kb3dzL3gxMWRydi9rZXlib2FyZC5jLCB3aW5kb3dzL3gxMWRydi9tYWluLmMsIHdpbmRvd3MveDExZHJ2L21vbml0b3IuYywgd2luZG93cy94MTFkcnYvbW91c2UuYywgd2luZG93cy94MTFkcnYvd25kLmMsIGdyYXBoaWNzL3gxMWRydi9iaXRibHQuYywgZ3JhcGhpY3MveDExZHJ2L2JpdG1hcC5jLCBncmFwaGljcy94MTFkcnYvYnJ1c2guYywgZ3JhcGhpY3MveDExZHJ2L2NsaXBwaW5nLmMsIGdyYXBoaWNzL3gxMWRydi9kaWIuYywgZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMsIGdyYXBoaWNzL3gxMWRydi9pbml0LmMsIGdyYXBoaWNzL3gxMWRydi9vYmplY3RzLmMsIGdyYXBoaWNzL3gxMWRydi9vZW1iaXRtYXAuYywgZ3JhcGhpY3MveDExZHJ2L3Blbi5jLCBncmFwaGljcy94MTFkcnYvdGV4dC5jLCBncmFwaGljcy94MTFkcnYveGZvbnQuYzoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJWDExIGRyaXZlciBjaGFuZ2VzLgoKCSogdHN4MTEvdHNfeGY4NmRnYS5jLCB0c3gxMS90c194Zjg2dm1vZGUuYywgdHN4MTEvdHNfeGxpYi5jLCB0c3gxMS90c194cG0uYywgdHN4MTEvdHNfeHJlc291cmNlLmMsIHRzeDExL3RzX3hzaG0uYywgdHN4MTEvdHNfeHV0aWwuYywgaW5jbHVkZS90c194Zjg2ZGdhLmgsIGluY2x1ZGUvdHNfeGY4NnZtb2RlLmgsIGluY2x1ZGUvdHNfeGxpYi5oLCBpbmNsdWRlL3RzX3hwbS5oLCBpbmNsdWRlL3RzX3hyZXNvdXJjZS5oLCBpbmNsdWRlL3RzX3hzaG0uaCwgaW5jbHVkZS90c194dXRpbC5oLCB0b29scy9tYWtlX1gxMXdyYXBwZXJzOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglOb24tWDExIGNvbXBpbGUgZml4IGZvciBnZW5lcmF0ZWQgY29kZS4KCgkqIGluY2x1ZGUvbW9uaXRvci5oLCB3aW5kb3dzL211bHRpbW9uLmM6CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCUltcGxlbWVudGF0aW9uIG9mIHRoZSBuZXcgbW9uaXRvciBhYnN0cmFjdGlvbi4KCgkqIGdyYXBoaWNzL3R0eWRydi8uY3ZzaWdub3JlLCBncmFwaGljcy90dHlkcnYvTWFrZWZpbGUuaW4sIGdyYXBoaWNzL3R0eWRydi9pbml0LmMsIE1ha2VmaWxlLmluOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglOZXcgVFRZIGRyaXZlciBmb3IgR0RJLgoKCSogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvYWNjb25maWcuaCwgaW5jbHVkZS9jb25maWcuaC5pbjoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJLSBBZGRlZCB0aGUgZ3JhcGhpY3MvdHR5ZHJ2IGRpcmVjdG9yeS4KCS0gRG9uJ3Qgc2VhcmNoIGZvciByZWVudHJhbnQgWCB3aGVuIFggZG9lc24ndCBleGlzdC4KCS0gQWRkZWQgY29uZmlnIG9wdGlvbnMgSEFWRV9MSUJYWFBNCgktIEFkZGVkIGNoZWNrcyBpZiB0aGUgaGVhZGVyIGZpbGVzIGFsc28gZXhpc3QgZm9yIHNvbWUgbGlicmFyaWVzCgpUdWUgRmViICAyIDE2OjE0OjIzIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBkbGxzL3NoZWxsMzIvYnJzZm9sZGVyLmMsIGdyYXBoaWNzL2QzZGNvbW1vbi5jLCBncmFwaGljcy9kM2RkZXZpY2VzLmMsIGdyYXBoaWNzL2QzZGV4ZWN1dGVidWZmZXIuYywgZ3JhcGhpY3MvZDNkbGlnaHQuYywgZ3JhcGhpY3MvZDNkbWF0ZXJpYWwuYywgZ3JhcGhpY3MvZDNkdGV4dHVyZS5jLCBncmFwaGljcy9kM2R2aWV3cG9ydC5jLCBpbmNsdWRlL2ludGVyZmFjZXMuaCwgb2xlL3NhZmVhcnJheS5jLCBvbGUvc3RnX2JpZ2Jsb2NrZmlsZS5jLCBvbGUvc3RnX3N0cmVhbS5jLCBvbGUvc3RvcmFnZTMyLmM6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCVJlcGxhY2VkIHJlZmVyZW5jZXMgdG8gaW50ZXJmYWNlcy5oIGJ5IHdpbmUvb2JqX3h4eC5oIGhlYWRlcnMgaW5zdGVhZAoJc2luY2UgdGhlc2UgaGVhZGVycyBhbHJlYWR5IHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBkZWZpbml0aW9ucy4KCgkqIGluY2x1ZGUvbXNkb3MuaCwgbXNkb3MvQXR0aWMvY2Ryb20uYywgbXNkb3MvTWFrZWZpbGUuaW4sIG1zZG9zL2ludDJmLmM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVJlbW92ZWQgcmVmZXJlbmNlcyB0byBvYnNvbGV0ZSBtc2Rvcy9jZHJvbS5jIGZpbGUuCglNYWtlIHVzZSBvZiBuZXcgV2luZSBpbnRlcm5hbCBDRCBST00gaW50ZXJmYWNlLgoKCSogbXVsdGltZWRpYS9tY2ljZGEuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCB0cmFja3MgaW5kZXhpbmcgaW4gbWNpY2RhLmMKCU1ha2UgdXNlIG9mIG5ldyBXaW5lIGludGVybmFsIENEIFJPTSBpbnRlcmZhY2UuCgoJKiBpbmNsdWRlL2Nkcm9tLmgsIG1pc2MvTWFrZWZpbGUuaW4sIG1pc2MvY2Ryb20uYzoKCUVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJTmV3IFdpbmUgaW50ZXJuYWwgaW50ZXJmYWNlIGZvciBoYW5kbGluZyBDRCBSb20gKGVzcGVjaWFsbHkgYXVkaW8gQ0QKCVJPTSkuCgoJKiBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvdHJlZXZpZXcuaCwgZGxscy9jb21jdGwzMi90cmVldmlldy5jOgoJWnlnbyBCbGF4ZWxsIDx1ajIya2ZiY0B1bWFpbC5mdXJyeXRlcnJvci5vcmc+CglDaGFuZ2UgYSBmZXcgdHlwZXMgdG8gbWF0Y2ggeW91LWtub3ctd2hvJ3MgZGVjbGFyYXRpb25zLgoJSFRSRUVJVEVNIGlzIGEgc3RydWN0IF9UUkVFSVRFTSBGQVIqCglHZXRESUJpdHMgcGFzc2VzIGEgTFBWT0lEIGZvciB0aGUgYml0bWFwIGRhdGEsIG5vdCBMUFNUUi4KCUFkanVzdG1lbnQgb2YgV2luZSBDIGNvZGUgdG8gbWF0Y2ggdGhlIG5ldyB0eXBlcyBpbmNsdWRlZC4KCgkqIG1pc2MvbHpleHBhbmQuYzogVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJRml4ZWQgR0VUX0xaX1NUQVRFIG1hY3JvLgoKCSogZ3JhcGhpY3MvZDNkX3ByaXZhdGUuaCwgZ3JhcGhpY3MvZDNkdGV4dHVyZS5jLCBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2QzZC5oLCBpbmNsdWRlL2RkcmF3Lmg6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUFkZGVkIHN0dWJzIGZvciBuZXcgRGlyZWN0RHJhdzQgYW5kIERpcmVjdERyYXdTdXJmYWNlNCBtZXRob2RzLgoKCSogdG9vbHMvd3JjL3dyYy5oLCB0b29scy93cmMvd3JjdHlwZXMuaCwgdG9vbHMvd3JjL0NIQU5HRVM6CglBbGJlcnQgZGVuIEhhYW4gPGFsYmVydGRAY29yZWwuY2E+CglGaXhlZCB3cm9uZyBvcmRlciBvZiByZXNfaWNvIGFuZCByZXNfYm1wIHdoaWNoIG11c3QgYmUgaW4gUlRfeHh4IG9yZGVyLgoKCSogZGxscy92ZXJzaW9uL3Jlc291cmNlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJcmVzbGVuIGNvdWxkIGJlIHVzZWQgdW5pbml0aWFsaXNlZCBpbiBHZXRGaWxlUmVzb3VyY2UzMiAoZml4ZXMgc29tZQoJc3RyYW5nZSBWZXJRdWVyeVZhbHVlIGNyYXNoZXMpLgoKCSogb2xlL25scy9zdmUubmxzOiBKYW4gRC4gPEphbi5EamFydkBtYm94MjAwLnN3aXBuZXQuc2U+CglBZGRlZCBkZWZpbml0aW9uIGZvciBMT0NBTEVfU0dST1VQSU5HLCBMT0NBTEVfU01PTkdST1VQSU5HIGFuZAoJTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUy4KCgkqIG1lbW9yeS9zZWxlY3Rvci5jLCByZWxheTMyL2tlcm5lbDMyLnNwZWM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogUHJlc2VydmUgRUFYIGluIFVuTWFwU0xGaXhBcnJheSgpLgoKCSogZGxscy9jb21jdGwzMi9jb21jdGwzMnVuZG9jLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlcyBsaXR0bGUgcG9pbnRlciBidWcgaW4gRFBBX0RlbGV0ZVB0cigpLgoKCSogaWYxNjMyL2tlcm5lbC5zcGVjLCBtZW1vcnkvc3RyaW5nLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGVkIEtFUk5FTC40MzQgKFVuaWNvZGVUb0Fuc2kpLgoKCSogZmlsZXMvZHJpdmUuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglHZXREaXNrRnJlZVNwYWNlRXgzMkEgY2FuIGdldCBudWxsIHBvaW50ZXJzIGFuZCBzdGlsbCBub3QgY3Jhc2guCgoJKiBncmFwaGljcy9wc2Rydi9kcml2ZXIuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJQ2xlYXIgdXAgYXJncyB0byBQU0RSVl9BZHZhbmNlZFNldHVwRGlhbG9nLgoKCSogZ3JhcGhpY3MveDExZHJ2L3hmb250LmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVJlZHVjZSBNQVhfRk9OVF9TSVpFIHRvIDEwMDAuCgpTdW4gSmFuIDMxIDE5OjA0OjMxIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB3aW4zMi9jb25zb2xlLmMsIGluY2x1ZGUvc2VydmVyLmgsIGluY2x1ZGUvc2VydmVyL29iamVjdC5oLCBpbmNsdWRlL3NlcnZlci9yZXF1ZXN0LmgsIGxvYWRlci9uZS9tb2R1bGUuYywgcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCBzZXJ2ZXIvY29uc29sZS5jLCBzZXJ2ZXIvcmVxdWVzdC5jLCBzZXJ2ZXIvdHJhY2UuYzoKCUFkZGVkIGlucHV0IHF1ZXVlIHRvIHNlcnZlci1zaWRlIGNvbnNvbGUgb2JqZWN0LAoJcmVhZC93cml0ZV9jb25zb2xlX2lucHV0IHJlcXVlc3RzLCBhbmQgdXNlIHRoZW0gZm9yCglSZWFkL1dyaXRlQ29uc29sZUlucHV0LgoKCSogc2NoZWR1bGVyL2NsaWVudC5jOiBHZW9mZiBDbGFyZSA8Z3djQHJvb3QuY28udWs+CglGaXggdG8gYWxsb3cgZm9yIHJlY3Ztc2coKSByZXR1cm5pbmcgbGVzcyBkYXRhIHRoYW4gaXMgbmVlZGVkLgoKCSogaW5jbHVkZS90b29saGVscC5oLCBpbmNsdWRlL3dpbmRvd3MuaDoKCUF0dGVtcHQgYXQgZml4aW5nIHRoZSBNQVhfUEFUSCBtdWx0aXBsZSBkZWZpbml0aW9uIHByb2JsZW0uCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBKYW4gMzEgMTA6MTM6NDQgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvbW9kdWxlLmgsIGxvYWRlci9uZS9yZXNvdXJjZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglNb2RpZnkgTkVfRmluZFR5cGVTZWN0aW9uIGFuZCBORV9GaW5kUmVzb3VyY2VGcm9tVHlwZSBzbyBhcyB0byBiZQoJdXNhYmxlIGJ5IHRoZSBWRVJTSU9OIGNvZGUuCgoJKiBpbmNsdWRlL3BlX2ltYWdlLmgsIGxvYWRlci9wZV9yZXNvdXJjZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGRlZCBHZXRSZXNEaXJFbnRyeUEgZm9yIHVzZSBieSB0aGUgVkVSU0lPTiBjb2RlLgoKCSogbWlzYy9BdHRpYy92ZXIuYywgbWlzYy9NYWtlZmlsZS5pbjoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJUmVtb3ZlZCBvbGQgVkVSLkRMTCBjb2RlLgoKCSogZGxscy92ZXJzaW9uLy5jdnNpZ25vcmUsIGRsbHMvdmVyc2lvbi9NYWtlZmlsZS5pbiwgZGxscy92ZXJzaW9uL2luZm8uYywgZGxscy92ZXJzaW9uL2luc3RhbGwuYywgZGxscy92ZXJzaW9uL3Jlc291cmNlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGF0aW9uIG9mIFZFUlNJT04uRExMLiBCYXNlZCBvbiBvbGQgbWlzYy92ZXIuYy4KCS0gQWNjZXNzaW5nIFBFIHZlcnNpb24gaW5mbyByZXNvdXJjZXMgc2hvdWxkIHdvcmsgY29ycmVjdGx5IG5vdy4KCS0gRml4ZWQgbWVtb3J5IGxlYWtzLgoJLSBDbGVhbiBzZXBhcmF0aW9uIG9mIDE2LSBhbmQgMzItYml0IHBhcnRzLgoJLSBNaW5vciBidWdmaXhlcy4KCgkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGxscy9NYWtlZmlsZS5pbjoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRkIG5ldyBzdWJkaXJlY3RvcmllcyBkbGxzL3ZlciBhbmQgZGxscy92ZXJzaW9uLgoKCSogaWYxNjMyL3Zlci5zcGVjLCBkbGxzL3Zlci8uY3ZzaWdub3JlLCBkbGxzL3Zlci9NYWtlZmlsZS5pbiwgZGxscy92ZXIvdmVyMTYuYywgaW5jbHVkZS92ZXIuaDoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50YXRpb24gb2YgVkVSLkRMTC4gVGh1bmtzIHVwIHRvIFZFUlNJT04uRExMLgoKCSogbWlzYy9sc3RyLmM6IFBhc2NhbCBDdW9xIDxjdW9xQHZpc2FuLmlucmlhLmZyPgoJSXNDaGFyQWxwaGEzMkE6IHVzZSBsb29rLXVwIHRhYmxlIGZyb20gb2xlMm5scy5jLgoKCSogb2xlL29sZTJubHMuYzogUGFzY2FsIEN1b3EgPGN1b3FAdmlzYW4uaW5yaWEuZnI+CglMQ01hcFN0cmluZzMyQTogSW1wbGVtZW50ZWQgZmxhZ3MgTk9STV9JR05PUkVOT05TUEFDRSBhbmQKCU5PUk1fSUdOT1JFU1lNQk9MUyBpbiBzdHJpbmcgbWFwcGluZyBtb2RlLgoKCSogd2luZG93cy94MTFkcnYvd25kLmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJQ3JlYXRlIFggd2luZG93IGZvciBjaGlsZCB3aW5kb3dzIHJlcGFyZW50ZWQgdG8gYmUgdG9wIGxldmVsIHdpbmRvd3MuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGxwYXRoLmMsIGluY2x1ZGUvc2hlbGwuaCwgcmVsYXkzMi9zaGVsbDMyLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVN0dWIgZm9yIFBhdGhRdWFsaWZ5MzJbQXxXXS4KCgkqIGdyYXBoaWNzL2QzZG1hdGVyaWFsLmMsIGdyYXBoaWNzL2RkcmF3LmM6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUJhYnJpYW4gVmlrdG9yIDx2QHVseXNzZXMuc2NoLmJtZS5odT4KCS0gYWRkZWQgc3VwcG9ydCBmb3IgQ29sb3JLZXlpbmcgZHVyaW5nIGJsaXRzCgktIG1pc2NlbGxhbmVvdXMgZml4ZXMKCgkqIGRsbHMvbnRkbGwvcnRsLmMsIGluY2x1ZGUvbnRkbGwuaCwgcmVsYXkzMi9udGRsbC5zcGVjOgoJQWxleCBLb3JvYmthIDxrb3JvYmthQGdhbGF4eS5hbXMuc3VueXNiLmVkdT4KCUFkZGVkIGFuIGltcGxlbWVudGF0aW9uIG9mIE1SU1cgbG9ja3MuCgoJKiBtc2Rvcy9pbnQyMS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUFkZGVkIG1pc3NpbmcgaW5jbHVkZXMgKHRoZSBQU1AgaGFuZGxpbmcgd2FzIGluY29ycmVjdCwgYXMgdGhlCglNWl9TVVBQT1JURUQgZGVmaW5pdGlvbiB3YXMgbWlzc2luZykuIEFkZGVkIGEgc2ltcGxlIGhhbmRsZXIgZm9yCglkaXJlY3QgY29uc29sZSBpbnB1dCwgd2hpY2ggbmVlZHMgdG8gYmUgaW1wcm92ZWQuCgoJKiBjb25zb2xlL3R0eS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCVNtYWxsIGZpeC4KCgkqIHNjaGVkdWxlci9zeW5jaHJvLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTGlzdCBoYW5kbGVzIFdhaXRGb3JNdWx0aXBsZU9iamVjdHMgaXMgd2FpdGluZyBmb3Igd2hlbiBydW5uaW5nIHdpdGgKCS1kZWJ1Z21zZyArd2luMzIuCgoJKiBkbGxzL2FkdmFwaTMyL3NlY3VyaXR5LmMsIHJlbGF5MzIvYWR2YXBpMzIuc3BlYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YiBmb3IgR2V0U2VjdXJpdHlEZXNjcmlwdG9yQ29udHJvbC4KCgkqIHJlbGF5MzIvdXNlcjMyLnNwZWMsIHdpbmRvd3MvdXNlci5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTdHViIGZvciBHZXRVc2VyT2JqZWN0U2VjdXJpdHkuCgoJKiBtaXNjL3JlZ2lzdHJ5LmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSW1wbGVtZW50ZWQgaGFuZGxpbmcgb2YgUkVHX01VTFRJX1NaIGFuZCBmaXhlZCBzbWFsbCBidWcgaW4KCVJlZ1NldFZhbHVlLgoKCSogd2luZG93cy93aW5wcm9jLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRXZlcnkgRU1fR0VUTElORSBzZW5kIGJldHdlZW4gYSAzMlcgdG8gYSAzMkEgd2luZG93IHJldHVybmVkCglpbmNvbXBsZXRlIHZhbHVlcyBiZWZvcmUgKHRoZSBmaXJzdCAyIGNoYXJzIHdoZXJlIGN1dCBhd2F5KS4KCgkqIHdpbmRvd3Mvd2lucG9zLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJRml4IHR5cG8gaW4gU2V0V2luZG93UG9zMzIuCgpTYXQgSmFuIDMwIDE1OjU1OjI4IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL2J1aWx0aW4zMi5oLCBtaXNjL21haW4uYywgcmVsYXkzMi9idWlsdGluMzIuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRW5hYmxlL2Rpc2FibGUgcmVsYXkzMiBkZWJ1Z2dpbmcgb24gdGhlIGZseS4gU3RhcnQgYXBwIHdpdGgKCS1kZWJ1Z21zZyArcmVsYXkgb3Igd2FybityZWxheS4gU3VnZ2VzdGVkIGJ5IEp1ZXJnZW4gU2NobWllZC4KCgkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBncmFwaGljcy9kM2RfcHJpdmF0ZS5oLCBpbmNsdWRlL2FjY29uZmlnLmgsIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvZDNkLmgsIGluY2x1ZGUvd2luZV9nbC5oOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglBZGRlZCBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIE1lc2EncyBoZWFkZXIgZmlsZXMuCgoJKiBtdWx0aW1lZGlhL2F1ZGlvLmMsIG11bHRpbWVkaWEvZHNvdW5kLmM6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglGaXhlZCBlcnJvciBtZXNzYWdlcy4KCgkqIG1pc2MvY29tbWRsZy5jOiBCZXJuZCBIZXJkIDxoZXJkQGhlcmRzb2Z0LmNvbT4KCVVzZSBwcm9wZXIgMTYtPjMyIG1lc3NhZ2UgY29udmVyc2lvbiBpbiBGSUxFRExHX0NhbGxXaW5kb3dQcm9jLgoKCSogd2luZG93cy94MTFkcnYvd25kLmM6IEJlcm5kIEhlcmQgPGhlcmRAaGVyZHNvZnQuY29tPgoJU2V0UGFyZW50IHNob3VsZCBsaW5rIHRoZSB3aW5kb3cgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaXN0LgoKCSogd2luZG93cy93aW5wb3MuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglJbiBXaW5kb3cgU2V0V2luZG93UG9zIHdpdGggU1dQX0hJREVXSU5ET1cgZG9lcyBub3QgcmVtb3ZlCgl0aGUgZm9jdXMgZnJvbSB0aGUgZm9jdXMgd2luZG93OyBTaG93V2luZG93IHdpdGggU1dfSElERSBkb2VzLgoJU28gbW92ZSB0aGUgY29kZSB0aGF0IGRvZXMgdGhpcyBmcm9tIFNldFdpbmRvd1BvcyB0byBTaG93V2luZG93LgoKCSogbWVtb3J5L3N0cmluZy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNoZWNrIGZvciBOVUxMIGluIGxzdHJjcHkqIChXaW5kb3dzIHVzZXMgcmVhbCBleGNlcHRpb24gaGFuZGxlcnMpLgoKCSogTWFrZWZpbGUuaW46IEphbWVzIEp1cmFuIDxqdXJhbkBjc2UucHN1LmVkdT4KCURvbid0IGluc3RhbGwgaW5jbHVkZSBmaWxlcyB3aGVuIC0tZGlzYWJsZS1saWIgaXMgdXNlZC4KCgkqIHJlbGF5MzIvd2lubW0uc3BlYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFkZGVkIFdJTk1NIGpveSogLnNwZWMgZW50cmllcy4KCgkqIG1zZG9zL3htcy5jOiBBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglYTVMgZml4LgoKCSogbXNkb3MvZG9zbWVtLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglTcGVsbGluZyBmaXguCgoJKiBSRUFETUU6IEFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCURvYyB1cGRhdGUuCgoJKiBpbmNsdWRlL21pc2NlbXUuaCwgbXNkb3MvaW50MTAuYywgbXNkb3MvaW50MjEuYywgbXNkb3MvaW50ZXJydXB0cy5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJU29tZSBpbnRlcnJ1cHQgZW5oYW5jZW1lbnRzLgoKCSogbXNkb3MvaW9wb3J0cy5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJaW1wbGVtZW50ZWQgdGltZXIgbGF0Y2hpbmcKCXRyYWNlIG1lc3NhZ2UgZml4Cgl0ZW1wb3JhcnkgImZpeCIgZm9yIExpbnV4J3MgY29hcnNlIHRpbWVyIHJlc29sdXRpb24KCgkqIGlmMTYzMi9jb21wb2JqLnNwZWMsIGluY2x1ZGUvb2JqYmFzZS5oLCBpbmNsdWRlL3dpbmVycm9yLmgsIG9sZS9jb21wb2JqLmMsIG9sZS9vbGUyLmMsIHJlbGF5MzIvb2xlMzIuc3BlYzoKCUZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGVkIHRoZSBzdGFydHVwLXNodXRkb3duIG1lY2hhbmlzbSBmb3IgdGhlIENPTSBzdWJzeXN0ZW0uCglJbXBsZW1lbnRlZCB0aGUgQ2xhc3Mgb2JqZWN0IHJlZ2lzdHJhdGlvbiBtZWNoYW5pc20uCgoJKiBwcm9ncmFtcy9jbG9jay8uY3ZzaWdub3JlLCBwcm9ncmFtcy9ub3RlcGFkLy5jdnNpZ25vcmU6IEFkZGVkIEZpLnMKCgkqIGluY2x1ZGUvd2luZS9vYmpfc3RvcmFnZS5oLCBvbGUvTWFrZWZpbGUuaW4sIG9sZS9zdGdfYmlnYmxvY2tmaWxlLmMsIG9sZS9zdGdfc3RyZWFtLmMsIG9sZS9zdG9yYWdlLmMsIG9sZS9zdG9yYWdlMzIuYywgb2xlL3N0b3JhZ2UzMi5oLCByZWxheTMyL29sZTMyLnNwZWM6CglGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglBZGRlZCBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgT0xFIHN0cnVjdHVyZWQgc3RvcmFnZS4gVGhlIG1haW4KCWZlYXR1cmVzIG9mIHRoaXMgaW1wbGVtZW50YXRpb24gYXJlOgoJLSBDYW4gb3BlbiBzdG9yYWdlcyBjcmVhdGVkIGluIFdpbmRvd3MuCgktIENhbiBjcmVhdGUgbmV3IHN0b3JhZ2VzIHRoYXQgdGhlIHdpbmRvd3MgbGlicmFyaWVzIGNhbgoJICByZWFkLgoJLSBQcm92aWRlcyBhbGwgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY3JlYXRlL29wZW4vcmVtb3ZlIGFuZAoJICByZW5hbWUgc3RyZWFtcyBhbmQgc3RvcmFnZXMgaW5zaWRlIHRoZSBtYWluIHN0b3JhZ2Ugb2JqZWN0LgoKCSogaW5jbHVkZS9taXNjZW11LmgsIG1pc2NlbXUvbWFpbi5jLCBncmFwaGljcy9kZHJhdy5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglEZWZpbmVkIFJFU1RPUkVfU0lHTkFMUyBieSBkZWZhdWx0IGFuZCBjYWxsIFNJR05BTF9FbXVsYXRvckluaXQKCXRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyIGluc3RlYWQuIEFkZGVkIGEgZmV3IHRyYWNlcy4gRml4ZWQgdGhlCgkiTWVtb3J5IGNvcnJ1cHRpb24gISIgbWVzc2FnZSBpbiBER0EgbW9kZS4gQ29tbWVudGVkIG91dCBhbgoJdW5uZWNlc3NhcnkgVFNYRjg2VmlkTW9kZVNldFZpZXdQb3J0IHRoYXQgY2F1c2VkIG15IFggc2VydmVyIHRvCglhY3QgdXAsIHJlbHlpbmcgb24gVFNYRjg2REdBU2V0Vmlld1BvcnQgaW5zdGVhZC4KCgkqIGdyYXBoaWNzL3BzZHJ2L3RleHQuYywgbXNkb3MvaW50MmYuYywgcHJvZ3JhbXMvd2luaGVscC9obHAyc2dtbC5jLCBkbGxzL2NvbWN0bDMyL2NvbWN0bDMydW5kb2MuYywgZmlsZXMvZmlsZS5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTb21lIG1vcmUgd2FybmluZ3MgYW5kIGJ1Z3MgZml4ZWQuCgoJKiBkbGxzL2NvbWN0bDMyL3RhYi5jLCBpbmNsdWRlL3RhYi5oOiBBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgoJU21hbGwgdXBkYXRlLgoKCSogaW5jbHVkZS9jb21tY3RybC5oLCBpbmNsdWRlL3RyZWV2aWV3LmgsIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYywgZGxscy9zaGVsbDMyL2Jyc2ZvbGRlci5jOgoJQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCS0gVGhlIHVzdWFsIGJ1Z2ZpeGVzLgoJLSBCZXR0ZXIgdW5pY29kZSBzdXBwb3J0IChvbmx5IGRlZmluZXMsIGN1cnJlbnRseSkKCS0gRHJhZyAmIGRyb3AgaW1wbGVtZW50ZWQuCgktIExQU1RSX1RFWFRDQUxMQkFDSyBzaG91bGQgd29yayBub3cuCgktIEZpcnN0IHN0YXJ0IGF0IGN1c3RvbSBkcmF3IGNvZGUuCgoJKiB3aW5kb3dzL3gxMWRydi9ldmVudC5jOiBGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglNYWtlIHN1cmUgdGhhdCB0aGUga2V5c3RhdGUgcmVjZWl2ZWQgYnkgdGhlIFdNX1hCVVRUT05VUCBhbmQKCVdNX1hCVVRUT05ET1dOIG1hdGNoZXMgdGhlIG1lc3NhZ2UuIEluIFgsIHRoZSBrZXlzdGF0ZSBpcyBjaGFuZ2VkCglhZnRlciB0aGUgbWVzc2FnZSBpcyBwcm9jZXNzZWQuICBJbiBXaW5kb3dzLCBpdCBpcyBjaGFuZ2VkIGJlZm9yZS4KCgkqIGRsbHMvYWR2YXBpMzIvc2VjdXJpdHkuYywgZGxscy9hZHZhcGkzMi9zZXJ2aWNlLmM6CglNYXR0aGV3IEJlY2tlciA8bWJlY2tlckBnbGFzc2NpdHkubmV0PgoJRG9jIHVwZGF0ZXMuCgoJKiB3aW4zMi9maWxlLmM6IEJlcmVuZCBSZWl0c21hIDxiZXJlbmQgYXQgYXNzZXQtY29udHJvbC5jb20+CglTZXRGaWxlQXR0cmlidXRlczMyQSBjaGFuZ2VkIHRvIG1ha2UgZmlsZSB3cml0ZWFibGUgd2hlbgoJRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkgaXMgbm90IHNldC4KCgkqIGNvbnNvbGUvaW50ZXJmYWNlLmMsIGNvbnNvbGUvbmN1cnNlcy5jLCBpbmNsdWRlL2NvbnNvbGUuaCwgbXNkb3MvaW50MTAuYzoKCUpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJUHJlbGltaW5hcnkgY29sb3IgY29uc29sZSBzdXBwb3J0LgoKCSogZG9jdW1lbnRhdGlvbi9sYW5ndWFnZXMsIHByb2dyYW1zL2Nsb2NrL0NoYW5nZUxvZywgcHJvZ3JhbXMvY2xvY2svRmkucmMsIHByb2dyYW1zL2Nsb2NrL01ha2VmaWxlLmluLCBwcm9ncmFtcy9jbG9jay9tYWluLmMsIHByb2dyYW1zL25vdGVwYWQvQ2hhbmdlTG9nLCBwcm9ncmFtcy9ub3RlcGFkL0ZpLnJjLCBwcm9ncmFtcy9ub3RlcGFkL01ha2VmaWxlLmluLCBwcm9ncmFtcy9ub3RlcGFkL21haW4uYywgcmVzb3VyY2VzL3N5c3Jlc19GaS5yYzoKCUp1a2thLVBla2thIElpdm9uZW4gPGppaXZvbmVuQHBvc2VpZG9uLmNzLmh1dC5maT4KCVVwZGF0ZWQgRmlubmlzaCBsYW5ndWFnZSBzdXBwb3J0LgoKRnJpIEphbiAyOSAxNToxMjoxMSAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS92ZncuaCwgaW5jbHVkZS93aW5lcnJvci5oLCBpbmNsdWRlL3dpbnR5cGVzLmgsIG11bHRpbWVkaWEvbXN2aWRlby5jLCBvbGUvZ3VpZC5jLCBwcm9ncmFtcy9NYWtlZmlsZS5pbiwgcHJvZ3JhbXMvYXZpdG9vbHMvLmN2c2lnbm9yZSwgcHJvZ3JhbXMvYXZpdG9vbHMvTWFrZWZpbGUuaW4sIHByb2dyYW1zL2F2aXRvb2xzL2ljaW5mby5jLCByZWxheTMyL21zdmZ3MzIuc3BlYywgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaCwgaW5jbHVkZS9vbGVhdXRvLmg6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVVwZGF0ZWQgbXN2aWRlby4gTmV3IHByb2dyYW0gJ2ljaW5mbyBbLWFib3V0XSBbLWNvbmZpZ3VyZV0nIHRvCglxdWVyeSBpbnN0YWxsZWQgKHdpbjMyKSBjb21wcmVzc29ycy4gU3RhcnRlZCBvbiBBVklGSUxFIHN1cHBvcnQuCgpUaHUgSmFuIDI4IDE3OjU2OjE0IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL3dpbmUvb2JqX21pc2MuaCwgaW5jbHVkZS93aW5lL29ial9tb25pa2VyLmgsIGluY2x1ZGUvd2luZS9vYmpfc3RvcmFnZS5oLCBvbGUvTWFrZWZpbGUuaW4sIG9sZS9iaW5kY3R4LmMsIG9sZS9maWxlbW9uaWtlci5jLCBvbGUvaXRlbW1vbmlrZXIuYywgb2xlL21vbmlrZXIuYywgb2xlL29sZTIuYzoKCU5vb21lbiBIYW16YSA8bm9vbWVuQG1hY2FkYW1pYW4uY29tPgoJQWRkZWQgYSBzdHViIGltcGxlbWVudGF0aW9uIGZvciBGaWxlTW9uaWtlciwgSXRlbU1vbmlrZXIgYW5kIEJpbmRDdHgKCWNsYXNzZXMuCgoJKiBkZWJ1Z2dlci9kYmcueSwgZGVidWdnZXIvZGVidWcubDoKCU5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJSW1wbGVtZW50ZWQgdGhlIHN5bWJvbGZpbGUgY29tbWFuZCAoYXMgbWVudGlvbmVkIGJ5IHRoZSBoZWxwCgljb21tYW5kKS4gVGhpcyByZWFkcyBhIHN5bWJvbCBmaWxlIGluIHRoZSBmb3JtYXQgZ2VuZXJhdGVkIGJ5IG5tLgoKCSogbXVsdGltZWRpYS9kcGxheS5jOiBQZXRlciBIdW5uaXNldHQgPGh1bm5pc2VAbm9ydGVsbmV0d29ya3MuY29tPgoJLSBTbWFsbCBidWcgZml4LgoJLSBBZGRlZCBkaXJlY3QgcGxheSBhc2NpaSBpbnRlcmZhY2VzLgoJLSBGaXhlZCB1cCB0aGUgUXVlcnlJbnRlcmZhY2UgZm9yIGRwbGF5IGFuZCBkcGxheWxvYmJ5IHRvIGhhbmRsZSBhbGwgY2FzZXMuCgoJKiBtZW1vcnkvdmlydHVhbC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUZpeGVkIEZJTEVfVklFVyBzdHJ1Y3QgaW5pdGlhbGlzYXRpb24uCgoJKiBpbmNsdWRlL2Rvc2V4ZS5oOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJRml4ZWQgbm9uLWkzODYgY29tcGlsZS4KCgkqIGdyYXBoaWNzL3ZnYS5jLCBtc2Rvcy9kcG1pLmMsIG11bHRpbWVkaWEvZHBsYXkuYywgbXVsdGltZWRpYS9tbWlvLmMsIGRsbHMvY29tY3RsMzIvYW5pbWF0ZS5jLCBkbGxzL2NvbWN0bDMyL2NvbWJvZXguYywgZGxscy9jb21jdGwzMi9jb21jdGwzMnVuZG9jLmMsIGRsbHMvY29tY3RsMzIvaG90a2V5LmMsIGRsbHMvY29tY3RsMzIvaXBhZGRyZXNzLmMsIGRsbHMvY29tY3RsMzIvbGlzdHZpZXcuYywgZGxscy9jb21jdGwzMi9wYWdlci5jLCBkbGxzL2NvbWN0bDMyL3Byb3BzaGVldC5jLCBkbGxzL2NvbWN0bDMyL3JlYmFyLmMsIGRsbHMvY29tY3RsMzIvdGFiLmMsIGRsbHMvY29tY3RsMzIvdG9vbGJhci5jLCBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmM6CglKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CglDb21tZW50ZWQgb3V0IHVudXNlZCB2YXJpYWJsZXMgdG8gcHJldmVudCBuZWVkbGVzcyBjb21waWxlciB3YXJuaW5ncy4KCgkqIGluY2x1ZGUvZGRlbWwuaCwgbWlzYy9kZGVtbC5jOgoJS2VpdGggTWF0dGhld3MgPGtlaXRoX21Ac3dlZW5leS5kZW1vbi5jby51az4KCTFzdCBjdXQgaW1wbGVtZW50YXRpb24gb2YgRGRlSW5pdGlhbGl6ZTMyVyBhbmQgc3VwcG9ydGluZyBjb2RlLgoKCSogZGxscy9hZHZhcGkzMi9hZHZhcGkuYywgZGxscy9hZHZhcGkzMi9ldmVudGxvZy5jLCBkbGxzL2FkdmFwaTMyL3NlY3VyaXR5LmMsIGRsbHMvYWR2YXBpMzIvc2VydmljZS5jOgoJTWF0dGhldyBCZWNrZXIgPG1iZWNrZXJAZ2xhc3NjaXR5Lm5ldD4KCURvY3VtZW50YXRpb24gc3RhbmRhcmRpemF0aW9ucy4KCgkqIGluY2x1ZGUvcXVldWUuaCwgd2luZG93cy9ob29rLmMsIHdpbmRvd3MvbWVzc2FnZS5jLCB3aW5kb3dzL3F1ZXVlLmMsIHdpbmRvd3Mvd2luLmMsIHdpbmRvd3Mvd2lucG9zLmM6CglTdGVwaGFuZSBMdXNzaWVyIDxzdGVwaGFuZUBtYWNhZGFtaWFuLmNvbT4KCS0gTWFkZSB0aGUgbWVzc2FnZSBxdWV1ZSBhY2Nlc3MgdG8gYmUgdGhyZWFkIHNhZmUuIChVc2luZyB0d28gbmV3CgkgIGZ1bmN0aW9ucyB0byBhY2Nlc3MgdGhlIG1lc3NhZ2UgcXVldWUsIFFVRVVFX0xvY2soKSwgUVVFVUVfVW5sb2NrKCkKCSAgaW5zdGVhZCBvZiBHbG9iYWxMb2NrMTYoKSkuCgktIEZpeGVkIFFVRVVFX0R1bXBRdWV1ZSAodXNlZCBieSAiaW5mbyBxdWV1ZSA8aGFuZGxlPiIgd2l0aCB0aGUKCSAgd2luZS1kZWJ1Z2dlcikuCgoJKiBtdWx0aW1lZGlhL2Rzb3VuZC5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmMsIG9iamVjdHMvdGV4dC5jLCB3aW5kb3dzL2RpYWxvZy5jLCB3aW5kb3dzL2RpbnB1dC5jLCB3aW5kb3dzL21kaS5jLCB3aW5kb3dzL21zZ2JveC5jLCB3aW5kb3dzL3dpbi5jLCB3aW5kb3dzL3dpbnByb2MuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGdyYXBoaWNzL2QzZG1hdGVyaWFsLmMsIGdyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuYywgaWYxNjMyL3JlbGF5LmMsIGluY2x1ZGUvd2luY29uLmgsIGxvYWRlci9yZXNvdXJjZS5jLCBtaXNjL2ltbS5jLCBtaXNjL2x6ZXhwYW5kLmMsIG1zZG9zL2ludDIxLmMsIGRsbHMvY29tY3RsMzIvcHJvcHNoZWV0LmMsIGRsbHMvbnRkbGwvcnRsLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUZpeGVkIGEgbG90IG9mIHdhcm5pbmdzIGZvciBwb3NzaWJsZSBwcm9ibGVtcy4KCgkqIG1pc2MvY29tbS5jOiBIZXJiZXJ0IFJvc21hbml0aCA8aGVycEB3aWxkc2F1Lmlkdi51bmktbGluei5hYy5hdD4KCUZpeGVkIHR5cG8uCgoJKiB0b29scy9idWdfcmVwb3J0LnBsOiBBZGFtIHRoZSBKYXp6IEd1eSA8bWFnaWNib3hAYmVzdHdlYi5uZXQ+CglGaXhlZCB2YXJpb3VzIGJ1Z3MuCglNYWRlIG5ld2JpZSBtb2RlIGVhc2llci4KCgkqIG9iamVjdHMvY3Vyc29yaWNvbi5jLCBkbGxzL2NvbWN0bDMyL2ltYWdlbGlzdC5jLCBpZjE2MzIvdXNlci5zcGVjLCBpbmNsdWRlL3dpbmUvd2ludXNlcjE2LmgsIGluY2x1ZGUvd2ludXNlci5oOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXhlZCBHZXRJY29uSW5mbzE2ICguc3BlYyxJQ09OSU5GTyBzdHJ1Y3QgaXMgZGlmZmVyZW50IGZvciBXaW4xNi9XaW4zMikuCgoJKiBjb25zb2xlL25jdXJzZXMuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTd2l0Y2ggbmN1cnNlcy5oL2N1cnNlcy5oIGluY2x1ZGUgKHdvcmtzIGJldHRlciBmb3IgRnJlZUJTRCkuCgoJKiB3aW5kb3dzL2RyaXZlci5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUZpeGVkIGxvYWRpbmcgb2Ygd2luMzIgZHJpdmVycy4KClR1ZSBKYW4gMjYgMTc6Mjk6NDkgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGZpbGVzL3Byb2ZpbGUuYzogRG9uJ3QgYWJvcnQgUFJPRklMRV9HZXRTZWN0aW9uIG9uIGVtcHR5IGtleXMuCgoJKiBkbGxzL21zYWNtMzIvaW50ZXJuYWwuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglUZW1wb3JhcnkgI2lmIDAnZWQgcGFydCBmb3IgYnVpbHRpbiBtb2R1bGVzIGluIE1TQUNNIHRvIG1ha2UgaXQKCWNvbXBpbGUgd2l0aCB0aGUgcGF0Y2ggZm9yIGxvYWRhYmxlIGRyaXZlcnMuCgoJKiBpbmNsdWRlL2RyaXZlci5oLCByZWxheTMyL3dpbm1tLnNwZWMsIHdpbmRvd3MvZHJpdmVyLmM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUFkZGVkIHN1cHBvcnQgZm9yIGxvYWRpbmcgZHJpdmVycyBpbiBXaW5lLgoKCSogdG9vbHMvYnVnX3JlcG9ydC5wbDogQWRhbSB0aGUgSmF6eiBHdXkgPG1hZ2ljYm94QGJlc3R3ZWIubmV0PgoJQSBwZXJsIHNjcmlwdCB0byBwcm9kdWNlIGEgYnVnIHJlcG9ydCB3aXRoIGxpdHRsZSBoYXNzbGUuCgoJKiBncmFwaGljcy9kaXNwZGliLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQWRkZWQgKGR1bW15KSBEZWF0aC9SZXN1cnJlY3Rpb24gY2FsbHMgdG8gRGlzcGxheURpYi4KCgkqIG1pc2MvbHpleHBhbmQuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBbGxvY2F0ZSBhIERPUyBoYW5kbGUgaWYgd2Ugb3BlbiBhIG5vcm1hbCBmaWxlIHdpdGggTFpPcGVuRmlsZTE2LgoKCSogZ3JhcGhpY3MvZGRyYXcuYywgaW5jbHVkZS9kZHJhdy5oOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CgktIGFkZGVkIGRlcHRoIGNvbnZlcnNpb24gcm91dGluZXMgKG9ubHkgOGJwcCAtPiAxNiBicHAgZm9yIG5vdykKCS0gYWRkZWQgc3VwcG9ydCBvZiBERVBUSF9GSUxMIGZvciBCbGl0cwoJLSBhZGRlZCBzb21lIGZsYWdzIGluIEdldENhcHMgdG8gZ2V0IHNvbWUgZ2FtZXMgd29ya2luZwoKCSogaWYxNjMyL3VzZXIuc3BlYywgaW5jbHVkZS93aW5lL3dpbnVzZXIxNi5oLCBpbmNsdWRlL3dpbnVzZXIuaCwgb2JqZWN0cy9jdXJzb3JpY29uLmMsIHJlbGF5MzIvdXNlcjMyLnNwZWMsIGRsbHMvY29tY3RsMzIvaW1hZ2VsaXN0LmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglJbXBsZW1lbnRlZCBHZXRJY29uSW5mbzE2IC0+IGNhbGwgdG8gR2V0SWNvbkluZm8zMi4KCgkqIHNjaGVkdWxlci9jbGllbnQuYzogQ29tbWVudGVkIG91dCBFWEVDX1NFUlZFUgoKCSogZGxscy9jb21jdGwzMi9kcmFnbGlzdC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCTMgbWlzc2luZyBXSU5BUEkgYWRkZWQuCgoJKiBkbGxzL3NoZWxsMzIvZW51bWlkbGlzdC5jLCBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCBkbGxzL3NoZWxsMzIvc2hyZXMucmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNtYWxsIGZpeGVzLgoKCSogZGxscy9jb21jdGwzMi90cmVldmlldy5jLCBpbmNsdWRlL2NvbW1jdHJsLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUNoYW5nZWQgc29tZSB0cmVldmlldyByZWxhdGVkIGRlZmluaXRpb25zLgoKCSogZGxscy9zaGVsbDMyL01ha2VmaWxlLmluLCBkbGxzL3NoZWxsMzIvYnJzZm9sZGVyLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUltcGxlbWVudGVkIFNIQnJvd3NlRm9yRm9sZGVyKCkgZGlhbG9nLgoKCSogZGVidWdnZXIvbXNjLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJRml4ZWQgdHlwbyBpbiB0eXBlIChyZW1vdmVkIHF1aXRlIGEgZmV3IHdhcm5pbmdzKS4KCgkqIGRsbHMvYWR2YXBpMzIvc2VjdXJpdHkuYywgcmVsYXkzMi9hZHZhcGkzMi5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBHZXRTZWN1cml0eURlc2NyaXB0b3JPd25lci9Hcm91cCwgUmV2ZXJ0VG9TZWxmIHN0dWJzLgoJUmV0dXJuIE5VTEwgZnJvbSBPcGVuVGhyZWFkVG9rZW4uCgoJKiB3aW4zMi9jb25zb2xlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRG8gbm90IGVuZGxlc3NseSBsb29wIGluIENPTlNPTEVfZ2V0X2lucHV0IGFmdGVyIEVPRi4KCUNyZWF0ZSB4dGVybSBldmVuIGlmIHN0ZGluIGlzIG5vdCBhIHRlcm1pbmFsaGFuZGxlLgoJU2V0Q29uc29sZUN1cnNvclBvc2l0aW9uOiBPbmx5IG1ha2UgY29tcGxleCBjb25zb2xlIG9uIHJvdyBjaGFuZ2UsCglpZ25vcmUgaW50ZXJsaW5lIHBvc2l0aW9uaW5nIChzbyB0aGUgY3lnd2luIGNtZGxpbmUgdG9vbHMgZG8gbm90CgljcmVhdGUgeHRlcm1zIHVubmVjZXNzYXJ5KQoKCSogbWlzYy9wcmludGRydi5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCU1ha2Ugc3VyZSBEcnZHZXRQcmludGVyRGF0YSByZXR1cm5zIHRoZSBjb3JyZWN0IGRhdGEgaWYgY2JEYXRhIDw9IDEKCgkqIGluY2x1ZGUvcXVldWUuaCwgd2luZG93cy9tZXNzYWdlLmMsIHdpbmRvd3MvcXVldWUuYywgd2luZG93cy93aW4uYzoKCVN0ZXBoYW5lIEx1c3NpZXIgPHN0ZXBoYW5lQG1hY2FkYW1pYW4uY29tPgoJLSBDaGFuZ2luZyBNRVNTQUdFUVVFVUUgc3RydWN0dXJlIGFjY29yZGluZyB0byBVbHJpY2ggcHJvcG9zaXRpb24uCgktIE9uZSBtZXNzYWdlIHF1ZXVlIGZvciBldmVyeSB0aHJlYWQgbmVlZGluZyBpdC4KCS0gTWVzc2FnZXMgaW4gdGhlIG1lc3NhZ2UgcXVldWUgYXJlIG5vdyBzdG9yZWQgaW4gYSBsaW5rZWQgbGlzdAoJLSBNZXNzYWdlcyBhcmUgYWxsb2NhdGVkIGluIHRoZSBzeXN0ZW0gaGVhcC4KCS0gTWVzc2FnZXMgaW4gdGhlIG1lc3NhZ2UgcXVldWUgYXJlIDMyIGJpdHMgKE1TRzMyKS4KCS0gQWxsIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyByZWdhcmRpbmcgbWVzc2FnZXMgaW4gdGhlIG1lc3NhZ2UgcXVldWUgYXJlCgkgIHRocmVhZCBzYWZlLgoKU3VuIEphbiAyNCAxOToxNDo1OCAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZGxscy9jb21jdGwzMi9jb21tY3RybC5jLCBkbGxzL2NvbWN0bDMyL2ZsYXRzYi5jLCBkbGxzL2NvbWN0bDMyL2ltYWdlbGlzdC5jLCBkbGxzL2NvbWN0bDMyL2xpc3R2aWV3LmMsIGRsbHMvY29tY3RsMzIvcHJvcHNoZWV0LmMsIGRsbHMvY29tY3RsMzIvc3RhdHVzLmMsIGluY2x1ZGUvZmxhdHNiLmg6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJRml4ZWQgc2V2ZXJhbCBidWdzIGFuZCB0eXBvcy4KCgkqIGRvY3VtZW50YXRpb24vY29tbW9uX2NvbnRyb2xzOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJVXBkYXRlcyBhbmQgZml4ZXMuCgoJKiBkbGxzL2NvbWN0bDMyL01ha2VmaWxlLmluLCBkbGxzL2NvbWN0bDMyL2RyYWdsaXN0LmMsIGluY2x1ZGUvY29tbWN0cmwuaCwgcmVsYXkzMi9jb21jdGwzMi5zcGVjOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCU5ldyBkcmFnIGxpc3QgY29udHJvbC4KCgkqIGRsbHMvY29tY3RsMzIvY29tY3RsMzJ1bmRvYy5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJRml4ZWQgcG9pbnRlciBidWdzIGluIERQQV9JbnNlcnRQdHIoKSBhbmQgRFBBX0RlbGV0ZVB0cigpLgoKCSogZGxscy9jb21jdGwzMi9wcm9ncmVzcy5jLCBpbmNsdWRlL3Byb2dyZXNzLmg6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgV01fW0cvU11FVEZPTlQgaGFuZGxpbmcuCgoJKiBkbGxzL2NvbWN0bDMyL3BhZ2VyLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBXTV9DT01NQU5EIGFuZCBXTV9OT1RJRlkgaGFuZGxpbmcuCgoJKiBkbGxzL2NvbWN0bDMyL3Rvb2x0aXBzLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCByZWRyYXcgYnVnIGZvciB0cmFja2luZyB0b29sdGlwcy4KCgkqIGRsbHMvY29tY3RsMzIvcmViYXIuYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIHNvbWUgbWVzc2FnZXMgdG8gdGhlIHJlYmFyIGNvbnRyb2wuCgoJKiBtdWx0aW1lZGlhL21jaWNkYS5jOiBHZW9mZiBDbGFyZSA8Z3djQHJvb3QuY28udWs+CglTZXZlcmFsIGludGVybmFsIGZ1bmN0aW9ucyB3b24ndCBjb21waWxlIHdoZW4gdGhlIGNvbmRpdGlvbmFsCgkjaWYgZGVmaW5lZChsaW51eCkgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKQoJY29tZXMgb3V0IGZhbHNlLiAgSSBtb3ZlZCB0aGUgY29uZGl0aW9uYWxzIGFyb3VuZCBzbyB0aGF0Cgl0aGUgZmlsZSB3b3VsZCBhdCBsZWFzdCBjb21waWxlLiAgTm90IHN1cmUgaWYgaXQgZG9lcyB0aGUKCXJpZ2h0IHRoaW5nIG9uIG5vbi1saW51eC9GcmVlQlNEL05ldEJTRCBzeXN0ZW1zLgoKCSogbWlzYy90b29saGVscC5jOiBHZW9mZiBDbGFyZSA8Z3djQHJvb3QuY28udWs+CglNb3ZlZCBwcm9jZXNzLmggaGlnaGVyIHVwIHRoZSBpbmNsdWRlIGxpc3QsIHRvIGF2b2lkIGEgcHJvYmxlbSB3aXRoCgkiRVJSIiBiZWluZyByZWRlZmluZWQgaW4gc3lzL3JlZ3NldC5oLgoKCSogbWlzYy9jb21tLmM6IEdlb2ZmIENsYXJlIDxnd2NAcm9vdC5jby51az4KCVRoZSBCNTc2MDAgYW5kIEIxMTUyMDAgc3ltYm9scyBhcmUgbm90IGRlZmluZWQgaW4gVW5peHdhcmUuCgoJKiBjb250cm9scy9saXN0Ym94LmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJQ2hhbmdlIFNXXz8/PyBvcHRpb25zIG9uIGxpc3QgYm94IHNjcm9sbGluZyBzbyB0aGF0IHRoZXkgbWF0Y2ggd2hhdAoJV2luZG93cyBkb2VzLgoKCSogbG9hZGVyL2Rvcy9kb3N2bS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCU1vdmVkIERPUyBoYW5kbGUgYWxsb2NhdGlvbiBzbGlnaHRseSwgdG8gZml4IHBvdGVudGlhbCBtZW1vcnkKCWxlYWtzIGFuZCBsb3N0IGhhbmRsZXMuIEFsc28gcmVtb3ZlZCBzb21lIHVzZWxlc3MgaW5pdCBjb2RlLgoKCSogZ3JhcGhpY3MvcHNkcnYvYWZtLmMsIGdyYXBoaWNzL3BzZHJ2L3RleHQuYywgaWYxNjMyL2R1bW15LmMsIGlmMTYzMi9nZGkuc3BlYywgbWlzYy9wcmludGRydi5jOgoJTmljayBIb2xsb3dheSA8Tmljay5Ib2xsb3dheUBhbGZpZS5kZW1vbi5jby51az4KCUludGVybmFsIFBvc3RTY3JpcHQgcHJpbnRlciBkcml2ZXIgaW1wcm92ZW1lbnRzLgoKCSogY29udHJvbHMvZWRpdC5jOiBHZXJhcmQgUGF0ZWwgPEcuUGF0ZWxAd2FuYWRvby5mcj4KCUNoYW5nZWQgRURJVF9FTV9DaGFyRnJvbVBvcyB0byByZXR1cm4gbGluZSBudW1iZXIuCgoJKiB3aW5kb3dzL3gxMWRydi93bmQuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGcmVlIHRoZSBwcml2YXRlIGRhdGEgcG9pbnRlciwgVEhFTiBzZXQgaXQgdG8gTlVMTC4KCgkqIHdpbmRvd3MvbWVzc2FnZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU1pc3NpbmcgV0lOQVBJLgoKCSogaW5jbHVkZS9vbGVhdXRvLmgsIGluY2x1ZGUvd2luZXJyb3IuaCwgb2xlL01ha2VmaWxlLmluLCBvbGUvc2FmZWFycmF5LmMsIHJlbGF5MzIvb2xlYXV0MzIuc3BlYzoKCVN5bHZhaW4gU3QuR2VybWFpbiA8c3lsdmFpbkBtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGF0aW9uIG9mIHRoZSBTYWZlQXJyYXkgZmFtaWx5IGZ1bmN0aW9ucy4KCgkqIGluY2x1ZGUvd2luZG93cy5oLCByZWxheTMyL2tlcm5lbDMyLnNwZWMsIHNjaGVkdWxlci90aHJlYWQuYzoKCUd1eSBBbGJlcnRlbGxpIDxnYWxiZXJ0ZUBuZW8ubHJ1bi5jb20+CglBZGRlZCBzdHViIGZvciBTZXRUaHJlYWRMb2NhbGUuCgoJKiBvYmplY3RzL3RleHQuYzogR3V5IEFsYmVydGVsbGkgPGdhbGJlcnRlQG5lby5scnVuLmNvbT4KCUZpbmlzaGVkIEdldFRleHRDaGFyc2V0SW5mbyByb3V0aW5lLgoKCSogb2xlL25scy9lbnUubmxzLCBvbGUvb2xlMm5scy5jOgoJR3V5IEFsYmVydGVsbGkgPGdhbGJlcnRlQG5lby5scnVuLmNvbT4KCUZpeGVkIEZJWE1FIGluIEVudW1UaW1lRm9ybWF0czMyVwoJQWRkZWQgc3VwcG9ydCBmb3IgRk9OVFNJR05BVFVSRSBpbiBHZXRMb2NhbGVJbmZvMzJBIGFuZCB1cGRhdGVkCglHZXRMb2NhbGVJbmZvMzJXLgoKCSogZG9jdW1lbnRhdGlvbi9pbnRlcm5hbC1kbGwsIGRvY3VtZW50YXRpb24vc2hlbGwzMiwgZG9jdW1lbnRhdGlvbi93aW5lLm1hbjoKCVBhc2NhbCBDdW9xIDxQYXNjYWwuQ3VvcUBpbnJpYS5mcj4KCUZpeGVkIHR5cG9zLgoKCSogZGVidWdnZXIvbXNjLmM6IFNlcmdleSBUdXJjaGFub3YgPHR1cmNoYW5vdkB1c2EubmV0PgoJRml4ZWQgc291cmNlIGxpbmUgbWF0Y2hpbmcgZm9yIGZ1bmN0aW9ucyBpbiBERUJVR19Qcm9jZXNzQ29mZkRlYnVnOwoJc2VhcmNoaW5nIGZvciBEQkcgYW5kIFBEQiBmaWxlcy4KCgkqIGRlYnVnZ2VyL2hhc2guYzogU2VyZ2V5IFR1cmNoYW5vdiA8dHVyY2hhbm92QHVzYS5uZXQ+CglGaXggZm9yIGZpbGVzIHdoaWNoIGRvIG5vdCBjb250YWluIGV4cG9ydHMgKGZnLCBFWEUpIHRvIGdldCBwcm9jZXNzZWQKCWZvciBkZWJ1ZyBpbmZvcm1hdGlvbi4KCgkqIGlmMTYzMi9rZXJuZWwuc3BlYywgaWYxNjMyL3JlbGF5LmMsIGlmMTYzMi90aHVuay5jLCB0b29scy9idWlsZC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCBLRVJORUwuNjIxIChDQkNsaWVudFRodW5rU0xFeCkuCgoJKiBkZWJ1Z2dlci9kYmcueSwgZGVidWdnZXIvZGVidWcubCwgZGVidWdnZXIvaW5mby5jLCBpbmNsdWRlL21haW4uaCwgbWlzYy9tYWluLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFsbG93IHN3aXRjaGluZyBvZmYvb24gb2YgZGVidWdtc2dzIGluIHRoZSBkZWJ1Z2dlci4KCgkqIGxvYWRlci9tYWluLmMsIG1pc2NlbXUvaW5zdHIuYywgbXNkb3MvZG9zbWVtLmMsIG1zZG9zL2ludDE1LmMsIGluY2x1ZGUvbWlzY2VtdS5oOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJSW1wbGVtZW50ZWQgSW50IDB4MTUvMHhjMDogQklPUyAtIEdFVCBDT05GSUcgYW5kIHNvbWUgb3RoZXIgQklPUwoJZGF0YS4KClNhdCBKYW4gMjMgMTQ6MTU6MTcgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGdyYXBoaWNzL3BhaW50aW5nLmMsIGlmMTYzMi91c2VyLnNwZWMsIGluY2x1ZGUvd2luZS93aW51c2VyMTYuaCwgbG9hZGVyL3BlX2ltYWdlLmMsIG1pc2MvbHN0ci5jLCB3aW5kb3dzL2hvb2suYywgd2luZG93cy9tZXNzYWdlLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglJbXBsZW1lbnRlZCBXSU4xNl9DYWxsTXNnRmlsdGVyMzIsIFdJTjE2X0Rpc3BhdGNoTWVzc2FnZTMyLAoJRHJhd0FuaW1hdGVkUmVjdHMxNiAoc3R1YiksIEZvcm1hdE1lc3NhZ2UxNiwgV0lOMTZfR2V0TWVzc2FnZTMyLAoJV0lOMTZfUGVla01lc3NhZ2UzMiBhbmQgV0lOMTZfVHJhbnNsYXRlTWVzc2FnZTMyLgoKCSogZGxscy9zaGVsbDMyL01ha2VmaWxlLmluLCBkbGxzL3NoZWxsMzIvY2xhc3Nlcy5jLCBkbGxzL3NoZWxsMzIvY29udG1lbnUuYywgZGxscy9zaGVsbDMyL2RhdGFvYmplY3QuYywgZGxscy9zaGVsbDMyL2VudW1pZGxpc3QuYywgZGxscy9zaGVsbDMyL2ZvbGRlcnMuYywgZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaCwgZGxscy9zaGVsbDMyL3NoZWxsZ3VpZC5jLCBkbGxzL3NoZWxsMzIvc2hlbGxsaW5rLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9sZS5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NoZWxscGF0aC5jLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIGluY2x1ZGUvaW50ZXJmYWNlcy5oLCBpbmNsdWRlL3NobGd1aWQuaCwgaW5jbHVkZS9zaGxvYmouaCwgaW5jbHVkZS93aW5kb3dzLmgsIG1pc2Mvc2hlbGwuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJLSBzb21lIGZpeGVzLCBjbGVhbmVkIHVwIGluY2x1ZGVzLCBmaXhlZCBsZWFrcwoJLSBjbGVhbiBEbGxSZWZlcmVuY2VDb3VudCwgYmV0dGVyIERsbE1haW4oKQoJLSBkeW5hbWljYWxseSBsaW5raW5nIExvb2t1cEljb25JZEZyb21EaXJlY3RvcnlFeDMyIGFuZAoJICBDcmVhdGVJY29uRnJvbVJlc291cmNlRXgzMiB0byBVU0VSMzIKCS0gbW92ZWQgZ3VpZCdzIGluc3RhbmNlcyB0byBuZXcgZmlsZSBzaGVsbGd1aWQuYwoJLSBpbXBsZW1lbnRlZCAgU2hlbGxFeGVjdXRlRXgzMlcKCgkqIG9sZS9NYWtlZmlsZS5pbiwgb2xlL2NvbXBvYmouYywgb2xlL2d1aWQuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTW92ZWQgdGhlIGluc3RhbmNlIGNyZWF0aW9uIG9mIEdVSUQncyB0byBhIG5ldyBmaWxlLgoJU2l6ZSBvZiBjb21wb2JqLm8gZ29lcyBkb3duIHRvIDEvMzsgc2hvdWxkIHByZXZlbnQgbW9yZSBzaWcxMSdzLgoKCSogaW5jbHVkZS9pbml0Z3VpZC5oOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBmaWxlIHRvIGluc3RhbnRpYXRlIEdVSUQncyBtcy1saWtlLgoKCSogd2luZG93cy94MTFkcnYvd25kLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU2V0IHByaXZhdGUgZGF0YSBzdHJ1Y3QgdG8gTlVMTCB0byBleHBvc2UgcHJvYmxlbXMgaW4gb3RoZXIgY29kZQoJYmV0dGVyLiBGaXhlcyB0aGUgWFVubWFwV2luZG93IHByb2JsZW1zIHJlcG9ydGVkIGJ5IHJlcGxhY2luZyB0aGVtCgl3aXRoIE5VTEwgcHRyIGRlcmVmZXJlbmNlcy4KCgkqIGRvY3VtZW50YXRpb24vZGVidWctbXNncywgZG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmcsIGRvY3VtZW50YXRpb24vaW50ZXJuYWwtZGxsLCBkb2N1bWVudGF0aW9uL2lvcG9ydC10cmFjZS1oaW50cywgZG9jdW1lbnRhdGlvbi93aW5lX29zMjoKCVp5Z28gQmxheGVsbCA8dWoyMmtmYmNAdW1haWwuZnVycnl0ZXJyb3Iub3JnPgoJRml4ZWQgdHlwb3MuCgoJKiBmaWxlcy9maWxlLmMsIGluY2x1ZGUvZmlsZS5oLCBsb2FkZXIvZG9zL2Rvc3ZtLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCURPUyBwcm9ncmFtcyB1c2UgaGFuZGxlcyAwLTQgd2l0aG91dCBvcGVuaW5nL2Nsb3NpbmcgYW55IG9mIHRob3NlCgloYW5kbGVzIGZpcnN0LiBTcGxpdCB1cCBJbml0IGZyb20gQWxsb2NEb3NIYW5kbGUgYW5kIGNhbGwgaXQgZnJvbQoJdGhlIERPU1ZNLgoKCSogTWFrZWZpbGUuaW46IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJUmVtb3ZlIGNvbmZpZ3VyZS5pbi0+Y29uZmlndXJlIHJ1bGUgKHdlIG1pZ2h0IG5vdCBoYXZlIGF1dG9jb25mKS4KCgkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUFkZGVkICJ1c2VyLWZyaWVuZGx5IiB3YXJuaW5nIGZvciBtaXNzaW5nIFguCgoJKiBpbmNsdWRlL29sZS5oOiBGaXhlZCBHZXRPYmplY3QgbWFjcm8gcHJvYmxlbS4KCgkqIGRvY3VtZW50YXRpb24vc3RhdHVzL2RpcmVjdDNEOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CgktIHVwZGF0ZWQgZG9jdW1lbnRhdGlvbiB0byBiZSBpbiBzeW5jIHdpdGggY3VycmVudCBjb2RlCgoJKiBncmFwaGljcy9kM2RtYXRlcmlhbC5jLCBncmFwaGljcy9kM2R2aWV3cG9ydC5jOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CgktIHZhcmlvdXMgd2FybmluZyBhbmQgYnVnIGZpeGVzCgoJKiBncmFwaGljcy9kM2RkZXZpY2VzLmMsIGdyYXBoaWNzL2QzZHRleHR1cmUuYzoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJLSBhZGRlZCBtb3JlIHRleHR1cmUgZm9ybWF0cyB1c2luZyBPcGVuR0wncyBwYWNrZWQgcGl4ZWwgZm9ybWF0cwoKCSogZ3JhcGhpY3MvZDNkZXhlY3V0ZWJ1ZmZlci5jLCBpbmNsdWRlL2QzZC5oOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CgktIGJldHRlciBzdXBwb3J0IGZvciBFeGVjdXRlQnVmZmVycwoKCSogZ3JhcGhpY3MvZGRyYXcuYzogTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CgktIGNvcnJlY3RlZCBidWcgaW4gWiBCdWZmZXIgYWxsb2NhdGlvbgoJLSBwdXQgVklERU9NRU1PUlkgZmxhZyBmb3IgYWxsIHByaW1hcnkgc3VyZmFjZXMKCS0gcHV0IHNvbWV0aGluZyBpbiBhIHN1cmZhY2UgYWZ0ZXIgYSBSZWxlYXNlREMKCgkqIG1pc2MvcHJpbnRkcnYuYzogTW9ydGVuIFdlbGluZGVyIDx0ZXJyYUBkaWt1LmRrPgoJTWlzc2luZyBXSU5BUEkuCgoJKiBjb250cm9scy9zdGF0aWMuYzogTmljbGFzIEthcmxzc29uIDxua2FybHNzb0ByYS5hYm8uZmk+CglSZW1vdmVkIERUX1NJTkdMRUxJTkUgYW5kIERUX05PQ0xJUCBzdHlsZXMgZm9yIFNTX0xFRlROT1dPUkRXUkFQLgoKCSogb2JqZWN0cy9lbmhtZXRhZmlsZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNoZWNrIG9wZW5lZCBlbmhtZXRhZmlsZSBmb3IgbWFnaWMgdmFsdWVzLgoKCSogaW5jbHVkZS9kc291bmQuaCwgbXVsdGltZWRpYS9kc291bmQuYzogUm9iIFJpZ2dzIDxycmlnZ3NAdGVzc2VyLmNvbT4KCUZpeGVkIGR1cGxpY2F0ZSBzb3VuZCBidWZmZXIgaGFuZGxpbmcuIFVwZGF0ZWQgc3RhdHVzLgoKCSogbWlzYy9yZWdpc3RyeS5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBmdW5jdGlvbnMgIGxtZW1jcHluQXRvVyBhbmQgIGxtZW1jcHluV3RvQSBmb3IgY29udmVydGluZwoJUkVHX01VTFRJX1NaIChpbmNsdWRpbmcgXDB4MDApCglCZXR0ZXIgZGVidWcgb3V0cHV0IGZvciBSRUdfQklOQVJZIGFuZCBSRUdfTVVMVElfU1oKCVJld3JpdHRlbiBSZWdRdWVyeVZhbHVlRXgzMltBfFddCgoJKiBvYmplY3RzL3BhbGV0dGUuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglJbXBsZW1lbnRlZCBDcmVhdGVIYWxmdG9uZVBhbGV0dGUuCglGaXhlZCAzIGNyYXNoZXMgKDEgcmVhbCwgMiBwb3RlbnRpYWwpLgoKCSogZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jLCBpZjE2MzIvc2hlbGwuc3BlYywgaW5jbHVkZS9zaGVsbC5oLCBtaXNjL3NoZWxsLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUltcGxlbWVudGVkIEV4dHJhY3RJY29uRXgxNiwgYWRkZWQgc29tZSBjb25zdHMgdG8gRXh0cmFjdEljb25FeCouCgoJKiBvbGUvb2xlMi5jLCBvbGUvb2xlY2xpLmMsIHJlbGF5MzIvb2xlMzIuc3BlYywgaW5jbHVkZS93aW5lcnJvci5oOgoJU3lsdmFpbiBTdC5HZXJtYWluIDxzeWx2YWluQG1hY2FkYW1pYW4uY29tPgoJRG9EcmFnRHJvcCBhbmQgT2xlSXNDdXJyZW50Q2xpcGJvYXJkIHN0dWIgaW1wbGVtZW50YXRpb24uCgoJKiBvbGUvdHlwZWxpYi5jOiBGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglNYWtlIExvYWRUeXBlTGliIHN0dWIgcmV0dXJuIGZhaWx1cmUgaW5zdGVhZCBvZiBzdWNjZXNzLgoKRnJpIEphbiAyMiAxNzowOTo0NiAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZG9jdW1lbnRhdGlvbi9hY2NlbGVyYXRvcnMsIGluY2x1ZGUvd2ludXNlci5oLCBsb2FkZXIvcmVzb3VyY2UuYywgd2luZG93cy9pbnB1dC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXhlZCBhY2NlbGVyYXRvciBoYW5kbGluZy4gQUNDRUwxNiB1c2VkIGludGVybmFsLCBBQ0NFTDMyIGZvciBXaW4zMgoJQVBJLCBQRV9BQ0NFTCBmb3IgUEUgQWNjZWxlcmF0b3JzLiBTZWUgZG9jdW1lbnRhdGlvbi9hY2NlbGVyYXRvcnMuCgpUaHUgSmFuIDIxIDE0OjA1OjExIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL2RkZW1sLmgsIG1pc2MvZGRlbWwuYywgcmVsYXkzMi91c2VyMzIuc3BlYzoKCUZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCVRoZXJlIHdlcmUgdHdvIGNvcGllcyBvZiB0aGUgRGRlQ21wU3RyaW5nSGFuZGxlcyAoQSBhbmQgVykgYW5kIHRoYXQKCUFQSSBkb2VzIG5vdCBoYXZlIDIgdmVyc2lvbnMuIFJlbW92ZWQgdGhlIGV4dHJhIHZlcnNpb24uCgpXZWQgSmFuIDIwIDE0OjU0OjAxIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBncmFwaGljcy94MTFkcnYveGZvbnQuYzogUGFibG8gU2FyYXR4YWdhIDxwYWJsby5zYXJhY2hhZ2FAcGluZy5iZT4KCVNtYWxsIHBhdGNoLgoKCSogd2luMzIvY29uc29sZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVdpbjMyIGNvbnNvbGUgbmVlZHMgU1lOQ0hST05JWkUgYWNjZXNzLgoKCSogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGNvbnNvbGUvbmN1cnNlcy5jLCBkZWJ1Z2dlci9zdGFicy5jLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBpbmNsdWRlL2NvbnNvbGUuaCwgbWlzYy9wb3J0LmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCWF1dG9jb25mOiBhZGRlZCBjaGVja3MgZm9yIGxpYmlvLmgsIGVsZi5oLCBjdXJzZXMuaCxuY3Vyc2VzLmggYW5kCglmaXhlZCBpbmNsdWRlcnMuCgoJKiBvbGUvb2xlMm5scy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUxDTWFwU3RyaW5nQTogaWYgZHN0bGVuIGlzIGluc3VmZmljaWVudCwgcmV0dXJuCglFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSICh2ZXJpZmllZCkuCgoJKiBvYmplY3RzL2VuaG1ldGFmaWxlLmMsIHJlbGF5MzIvZ2RpMzIuc3BlYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU29tZSBzbWFsbCBmaXhlcyB0byBlbmhtZXRhZmlsZXMuCgoJKiBjb250cm9scy9saXN0Ym94LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRG8gbm90IGNhbGwgb3duZXJkcmF3IGZvciBpbnZhbGlkIGl0ZW1zIChlbXB0eSBmb2N1c3JlY3RzKS4KCUZpeGVzIEV1ZG9yYSAxNmJpdCBlbXB0eSBJbmJveCBwcm9ibGVtLgoKCSogd2luZG93cy9ub25jbGllbnQuYzogTm9vbWVuIEhhbXphIDxub29tZW5AbWFjYWRhbWlhbi5jb20+CglGaXhlZCB0aGUgTkNfRHJhd01heEJ1dHRvbjk1IGFuZCBOQ19EcmF3TWluQnV0dG9uOTUgZnVuY3Rpb25zLiBSZXdyb3RlCgl0aGVzZSBmdW5jdGlvbnMgd2l0aCB0aGUgc2FtZSBsb2dpYyBhcyB0aGUgTkNfRHJhd0Nsb3NlQnV0dG9uIGZ1bmN0aW9uLgoKCSogd2luZG93cy93aW4uYzogTm9lbCBCb3J0aHdpY2sgPG5vZWxAbWFjYWRhbWlhbi5jb20+CglSZXBhcmVudGluZyBhIHdpbmRvdyB3aXRoIFNldFBhcmVudCBpbiBXaW5kb3dzIHNob3VsZCBjYXVzZSB0aGUgY2hpbGQKCXdpbmRvdyBiZWluZyByZS1wYXJlbnRlZCB0byBiZSBtb3ZlZCB1cCB0byB0aGUgdG9wbW9zdCBpbiB0aGUgei1vcmRlciwKCWFuZCBXTV9XSU5ET1dQT1NDSEFOR0lORyBhbmQgV01fV0lORE9XUE9TQ0hBTkdFRCBtZXNzYWdlcyB0byBiZSBzZW50LgoKCSogcmVsYXkzMi9idWlsdGluMzIuYzogUm9iZXJ0IFJpZ2dzIDxycmlnZ3NAdGVzc2VyLmNvbT4KCVVzZSBleHRlcm5hbCBEaXJlY3RQbGF5IERMTHMgYnkgZGVmYXVsdC4KCgkqIGxvYWRlci90YXNrLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWxsb3cgcGFzc2luZyB0YXNrIGhhbmRsZXMgdG8gR2V0VGhyZWFkUXVldWUoKSBhbmQgU2V0RmFzdFF1ZXVlKCkuCgoJKiB3aW5kb3dzL3VzZXIuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglIYW5kbGUgKGNvbnNvbGUpIGFwcGxpY2F0aW9ucyB0aGF0IG5ldmVyIGNyZWF0ZWQgYSBxdWV1ZSBjb3JyZWN0bHkKCWluIFVTRVJfQXBwRXhpdCgpOyBjYWxsIEluaXRUaHJlYWRJbnB1dCgpIGluIEluaXRBcHAoKS4KCgkqIHdpbmRvd3MvaG9vay5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCS0gRml4ZWQgY3JlYXRpb24gb2YgbWVzc2FnZSBxdWV1ZSBpbiBob29rIEFQSSByb3V0aW5lcy4KCS0gU29tZSBwcmVwYXJhdGlvbnMgZm9yIHRocmVhZC1sb2NhbCBtZXNzYWdlIHF1ZXVlcy4KCgkqIGxvYWRlci9uZS9tb2R1bGUuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQ2hlY2sgbW9kdWxlIG5hbWUgbGVuZ3RoIGluIE1vZHVsZU5leHQoKS4KCgkqIHdpbmRvd3MveDExZHJ2L2V2ZW50LmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVVzZSBDYWxsb3V0IHRvIGNhbGwgUmVkcmF3V2luZG93MzIuCgoJKiBtc2Rvcy9pbnQyMS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUNsZWFyIERPUyBleHRlbmRlZCBlcnJvciBvbmx5IGZvciBmdW5jcyA+PTB4MmYgKHRoYW5rcyB0byBEYXZlCglQaWNrbGVzKS4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJVW5pZmllZCBwYWxldHRlIGNyZWF0ZSwgZG8gYWxsb2NhdGUgY29sb3JjZWxscyBvbiBpbml0IGZvciBER0EuCgpUdWUgSmFuIDE5IDE3OjQ4OjI1IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBzY2hlZHVsZXIvc3luY2hyby5jLCBzY2hlZHVsZXIvdGhyZWFkLmMsIHNlcnZlci9jb25zb2xlLmMsIHNlcnZlci9maWxlLmMsIHNlcnZlci9wcm9jZXNzLmMsIHNlcnZlci9yZXF1ZXN0LmMsIHNlcnZlci90aHJlYWQuYywgc2VydmVyL3RyYWNlLmMsIHdpbjMyL2NvbnNvbGUuYywgd2luMzIvZGV2aWNlLmMsIHdpbjMyL3Byb2Nlc3MuYywgaW5jbHVkZS9maWxlLmgsIGluY2x1ZGUvcHJvY2Vzcy5oLCBpbmNsdWRlL3NlcnZlci5oLCBpbmNsdWRlL3NlcnZlci9vYmplY3QuaCwgaW5jbHVkZS9zZXJ2ZXIvcmVxdWVzdC5oLCBpbmNsdWRlL3NlcnZlci90aHJlYWQuaCwgaW5jbHVkZS90aHJlYWQuaCwgaW5jbHVkZS93aW5iYXNlLmgsIGluY2x1ZGUvd2luZG93cy5oLCBpbmNsdWRlL3dpbnR5cGVzLmgsIG1lbW9yeS92aXJ0dWFsLmMsIG1zZG9zL2ludDIxLmMsIG1zZG9zL3Z4ZC5jLCByZWxheTMyL2tlcm5lbDMyLnNwZWMsIHNjaGVkdWxlci9jbGllbnQuYywgc2NoZWR1bGVyL2hhbmRsZS5jLCBzY2hlZHVsZXIvazMyb2JqLmMsIHNjaGVkdWxlci9wcm9jZXNzLmMsIGZpbGVzL2NoYW5nZS5jLCBmaWxlcy9kb3NfZnMuYywgZmlsZXMvZmlsZS5jLCBpbmNsdWRlL2RldmljZS5oOgoJSGFja2VkIHNlcnZlci1zaWRlIGRldmljZSBzdXBwb3J0CglBZGRlZCB1c2VyIEFQQ3Mgc3VwcG9ydC4KCU1hbnkgY2hhbmdlcyB0byB0aGUgeHRlcm0gY29uc29sZSB0byBtYWtlIHVzZSBvZiB0aGUgc2VydmVyIChub3QKCWZpbmlzaGVkIHlldCkuCglNb3ZlZCBzb21lIG90aGVyIHNtYWxsIHN0dWZmIHRvIHRoZSBzZXJ2ZXIuCgoJKiB0b29scy9tYWtlX3JlcXVlc3RzOiBBZGRlZCBsb25nIHR5cGUgZm9ybWF0LgoKCSogc2VydmVyL01ha2VmaWxlLmluLCBzZXJ2ZXIvZGV2aWNlLmM6CglBZGRlZCBzZXJ2ZXItc2lkZSBkZXZpY2Ugc3VwcG9ydCAob25seSBhIGhhY2sgZm9yIG5vdykuCgpTdW4gSmFuIDE3IDE3OjQ4OjQ4IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBDaGFuZ2VMb2c6CglSZWNvdmVyZWQgbG9nIGVudHJpZXMgZnJvbSBDVlMgbWFpbGluZyBsaXN0LgoKCSogcmVsYXkzMi9udGRsbC5zcGVjLCBkbGxzL250ZGxsL3J0bC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglJbXBsZW1lbnRlZCBfYWxsb2NhX3Byb2JlIGFuZCBfY2hrc3RrIChtb3N0bHkgZG9uZSBieSBVbHJpY2ggV2VpZ2FuZCkuCgoJKiBmaWxlcy9maWxlLmMKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJSGFuZGxlIEVSUk9SX1dSSVRFX1BST1RFQ1QgdG9vIGluIHJlYWRvbmx5IGZhbGxiYWNrIG9wZW4uCgoJKiBkbGxzL2FkdmFwaTMyL3NlY3VyaXR5LmMsIHJlbGF5MzIvYWR2YXBpMzIuc3BlYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgR2V0U2VjdXJpdHlEZXNjcmlwdG9yTGVuZ3RoIHN0dWIgZm9yIHJlZ2VkdDMyLmV4ZS4KCgkqIGRlYnVnZ2VyL01ha2VmaWxlLmluLCBmaWxlcy9NYWtlZmlsZS5pbjoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkICIiIGFyb3VuZCAtRCBkZWZpbmVzIGZvciBwYXRocyB3aXRoIHNwYWNlcyBpbiB0aGVtLgoKCSogZ3JhcGhpY3MvZDNkdGV4dHVyZS5jLCBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2RkcmF3Lmg6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUNsZWFuZWQgdXAgQ29sb3JLZXkgaGFuZGxpbmcuCgoJKiBvYmplY3RzL21ldGFmaWxlLmM6CglQYXVsIFF1aW5uIDxwYXVscUBDT1JFTC5DQT4KCU1FVEFSRUNPUkQgbWVtYmVyIHJkUGFyYW0gc2hvdWxkIGJlIHJkUGFybSAoaW4gd2luMzIgc2RrKQoJbG90cyBvZiBjaGFuZ2VzIGluIHRoaXMgc291cmNlIGZpbGUgdG8gcmVmbGVjdCB0aGlzIGNoYW5nZS4KCgkqIGdyYXBoaWNzL2VzY2FwZS5jLCBncmFwaGljcy9wYWludGluZy5jLCBncmFwaGljcy9tZXRhZmlsZWRydi9pbml0LmMsIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS9jb21tZGxnLmgsIGluY2x1ZGUvZ2RpLmgsIGluY2x1ZGUvdGNoYXIuaCwgaW5jbHVkZS93aW5kb3dzLmgsIGluY2x1ZGUvd2luZ2RpLmgsIGluY2x1ZGUvd2ludHlwZXMuaCwgaW5jbHVkZS93aW51c2VyLmgsIG1pc2Mvc3Bvb2xlci5jLCBvYmplY3RzL2dkaW9iai5jLAoJcmVsYXkzMi9nZGkzMi5zcGVjOgoJUGF1bCBRdWlubiA8cGF1bHFAQ09SRUwuQ0E+CglGaXhlZCBiYWQgZGVmaW5lcywgYWRkZWQgYSBmZXcgdHlwZXMgJ24gZGVmaW5lcy4KCgkqIHdpbmRvd3MvZGlucHV0LmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCURpc2FibGUgYnJva2VuIGNhbGxiYWNrcyB3aGljaCBsZWFkIHRvIGNyYXNoZXMuCgoJKiBtdWx0aW1lZGlhL21jaXN0cmluZy5jOgoJRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCBJRCB1c2FnZSAoYW5kIHJlbHkgbGVzcyBoZWF2aWx5IG9uIG11bHRpbWVkaWEvbW1zeXN0ZW0uYwoJaW50ZXJuYWwgc3RydWN0dXJlcykuCgoJKiBtaXNjL3Rvb2xoZWxwLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCWRlYnVnLmggbmVlZHMgdG8gYmUgaW5jbHVkZWQgbGFzdCBzaW5jZSBpdCAjdW5kZWZzIEVSUiBmb3IgU29sYXJpcy4KCgkqIGRlYnVnZ2VyL2RlYnVnLmwsIGRlYnVnZ2VyL21lbW9yeS5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCAvdSBmb3JtYXQgdG8gZGVidWdnZXIgZGlzcGxheSBmb3IgVU5JQ09ERSBzdHJpbmdzLgoKCSogbG9hZGVyL3BlX2ltYWdlLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVJlbW92ZSBpcnJpdGF0aW5nIEZJWE1FIGxpbmUgbm8gbG9uZ2VyIG5lZWRlZC4KCgkqIG1zZG9zL2ludDJmLmM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUFkZGVkIG1pc3NpbmcgJ1xuJyBpbiBGSVhNRSBtZXNzYWdlLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzoKCVJvYmVydCBSaWdncyA8cnJpZ2dzQHRlc3Nlci5jb20+CglvYmpiYXNlLmggbmVlZGVkIGZvciBXSU5FX1N0cmluZ0Zyb21DTFNJRCgpLCBmaXggQyBmdW5jdGlvbgoJZGVjbGFyYXRpb25zLCBpbnN0YWxsIGEgY29sb3JtYXAgaWYgd2UgYXJlIG5vdCBtYW5hZ2VkLCByZWxlYXNlCgliYWNrYnVmZmVycyBpbiBER0EgbW9kZSwgZml4IHZpZGVvIG1vZGUgc3dpdGNoaW5nIGxvZ2ljIHRvIGF2b2lkCglwb3NzaWJsZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuCgoJKiBtc2Rvcy9kcG1pLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglTbWFsbCBmaXguCgoJKiBmaWxlcy9maWxlLmMsIGluY2x1ZGUvZmlsZS5oLCBpbmNsdWRlL3Byb2Nlc3MuaCwgbG9hZGVyL3Jlc291cmNlLmMsIGxvYWRlci9kb3MvbW9kdWxlLmMsIGxvYWRlci9uZS9zZWdtZW50LmMsIG1pc2MvbHpleHBhbmQuYywgbXNkb3MvaW50MjEuYyB2eGQuYywgbXVsdGltZWRpYS9tbWlvLmMsIHdpbjMyL2tlcm5lbDMyLmM6CglCZXR0ZXIgRE9TIGZpbGUgaGFuZGxlIG1hbmFnZW1lbnQuCgoJKiBkb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9sczoKCUZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCVRoaXMgc2hvdWxkIGhlbHAgcHJldmVudCBkdXBsaWNhdGUgd29yay4KCgkqIGlmMTYzMi9nZGkuc3BlYywgaW5jbHVkZS93aW5nZGkuaCwgb2JqZWN0cy9kYy5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJSW1wbGVtZW50ZWQgRGVhdGgoKSBhbmQgUmVzdXJyZWN0aW9uKCksIHR3byBmdW5jdGlvbnMgbmVlZGVkIGJ5IHNvbWUKCVRQV2luICg/KSBjb21tYW5kIGxpbmUgdG9vbC4KCgkqIHdpbmRvd3Mvd2lucHJvYy5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglBZGRlZCAzMi0+MTYgdHJhbnNsYXRpb24gZm9yIFdNX0FDVElWQVRFQVBQLgoKCSogZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGRsbHMvc2hlbGwzMi9zaGVsbHBhdGguYywgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCByZWxheTMyL3NoZWxsMzIuc3BlYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IHN0dWJzOiBTaGVsbE1lc3NhZ2VCb3hXLCBSdW5ETExfQ2FsbEVudHJ5MTYuCglJbXBsZW1lbnRhdGlvbiBmb3IgU0hHZXRTcGVjaWFsRm9sZGVyUGF0aDMyW0F8V10uCglNYW55IGJ1Z2ZpeGVzLgoKCSogY29uc29sZS94dGVybS5jLCBtaXNjL3BvcnQuYywgd2luMzIvY29uc29sZS5jOgoJSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglDaGFuZ2UgYWxsIFdpbmUgb3BlbnB0eSgpIGltcGxlbWVudGF0aW9ucyB0byBtYXRjaCB0aGUgInN0YW5kYXJkIiBhbmQKCXRoZW4gbWFrZSB0aGVtIGJvdGggY2FsbCB0aGUgc2FtZSBjb2RlIGxlYXZpbmcgdGhlIG9wdGlvbiB0byBjaGFuZ2UKCXRoYXQgY29kZSB0byBjYWxsIHRoZSAic3RhbmRhcmQiIG9wZW5wdHkoKSBhdCBhIGxhdGVyIGRhdGUuCgoJKiByZWxheTMyL2tlcm5lbDMyLnNwZWMsIHNjaGVkdWxlci9wcm9jZXNzLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIFNldFByb2Nlc3NBZmZpbml0eU1hc2sgc3R1Yi4KCgkqIGdyYXBoaWNzL2RkcmF3LmMsIGluY2x1ZGUvZGRyYXcuaDoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4ZWQgdGhlIG90aGVyIHVuaW9uIG1pc3VzZSB0b28gKG9uZSBsZXNzIG1lbSBjb3JydXB0aW9uKQoJUmUtYWRkZWQgWEluc3RhbGxDb2xvcm1hcCAob3Igbm9uIG1hbmFnZWQgZG9lcyBub3QgY2hhbmdlIHBhbGV0dGUpCgoJKiBpZjE2MzIva2VybmVsLnNwZWMsIHNjaGVkdWxlci9zeW5jaHJvLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkZGVkIGFuIGltcGxlbWVudGF0aW9uIGZvciBLRVJORUwuNDk1LgoKCSogZG9jdW1lbnRhdGlvbi9zdGF0dXMsIGRvY3VtZW50YXRpb24vZGlyZWN0M0QsIGdyYXBoaWNzL2QzZF9wcml2YXRlLmgsIGdyYXBoaWNzL2QzZGNvbW1vbi5jLCBncmFwaGljcy9kM2RkZXZpY2VzLmMsIGdyYXBoaWNzL2QzZGV4ZWN1dGVidWZmZXIuYywgZ3JhcGhpY3MvZDNkdGV4dHVyZS5jLCBncmFwaGljcy9kM2R2aWV3cG9ydC5jLCBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2QzZC5oLCBpbmNsdWRlL2RkcmF3Lmg6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCS0gYWRkZWQgYml0bWFzayB0byBzdG9yZSB3aGljaCBDb2xvcktleSBzdHJ1Y3R1cmVzIGFyZSB2YWxpZAoJLSBoYW5kbGUgbWFueSBuZXcgcmVuZGVyaW5nIHN0YXRlcywgc29tZSBvcHRpbWl6YXRpb25zIGluIHN0YXRlIGNoYW5nZXMKCS0gOGJpdCBwYWxldHRpemVkIHRleHR1cmVzIG5vdyBzdXBwb3J0IENvbG9yS2V5aW5nCgktIHNvbWUgbWlzY2VsbGFuZW91cyBidWcgZml4ZXMgYW5kIGNvZGUgcmV3cml0ZQoKCSogY29udHJvbHMvbWVudS5jOgoJTm9vbWVuIEhhbXphIDxub29tZW5AbWFjYWRhbWlhbi5jb20+CglGaXhlZCB0aGUgbG9vayBvZiB0aGUgbWVudSBzbyBpdCB3b3VsZCBiZSBjb21wbGlhbnQgd2l0aCBXaW45NTogbW9kaWZpZWQKCXRoZSBtb3VzZSB0cmFja2luZyBjb2RlIHNvIGl0IHdvdWxkIGNoYW5nZSB0aGUgc2VsZWN0aW9uIGV2ZXJ5IHRpbWUgdGhlCgltb3VzZSBtb3ZlZCBvdmVyIGEgbWVudSBpdGVtLgoKCSogZG9jdW1lbnRhdGlvbi9ob3ctdG8tcG9ydDoKCU1pa2UgQ2FzdGxlIDxkYWxnb2RhQHNoZWxsLnJ0NjYuY29tPgoJU21hbGwgZml4LgoKCSogZGxscy9jb21jdGwzMi91cGRvd24uYzoKCU5vZWwgQm9ydGh3aWNrIDxub2VsQG1hY2FkYW1pYW4uY29tPgoJRml4ZWQgYnVnczoKCS0gV2hlbiBhbiBlZGl0IGNvbnRyb2wgYnVkZHkgd2FzIHVzZWQgc2luZ2xlIGRpZ2l0IHZhbHVlcyB3ZXJlIG5vdAoJYmVpbmcgZGlzcGxheWVkLgoJLSBDb21tYSB2YWx1ZXMgd2VyZSBub3QgZGlzcGxheWVkIGNvcnJlY3RseSB3aGVuIHRob3VzYW5kcyBzZXBhcmF0aW9uCgl3YXMgcmVxdWVzdGVkLgoKCSogd2luMzIvbmV3Zm5zLmM6CglUb20gQmVjaCA8dG9tYkBpaS51aWIubm8+CglXaGlsZSB0aGUgZGVidWcgZXZlbnQgbWVzc2FnZXMgYXJlIG5vdCBpbXBsZW1lbnRlZCwgV2FpdEZvckRlYnVnRXZlbnQKCXNob3VsZCByZXR1cm4gRkFMU0UuCgoJKiBpZjE2MzIvdXNlci5zcGVjLCBvYmplY3RzL2JpdG1hcC5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJSW1wbGVtZW50ZWQgQ29weUltYWdlMTYuCgoJKiBkb2N1bWVudGF0aW9uL2J1Z3JlcG9ydHMgCglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglTbWFsbCBmaXguCgoJKiBjb25zb2xlL2dlbmVyaWMuYywgbXNkb3MvaW50MjEuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQ2hhbmdlZCAweDAxIHRvIHVzZSBnZW5lcmljIGNvbnNvbGUsIGZpeGVkIDB4MGIuCglGaXhlZCBDT05TT0xFX0dldENoYXJhY3RlciAodHdvIGFyZ3Mgc3dhcHBlZCkuCgoJKiBpbmNsdWRlL21vZHVsZS5oLCBsb2FkZXIvbWFpbi5jLCBsb2FkZXIvbW9kdWxlLmMsIGxvYWRlci9kb3MvbW9kdWxlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFsbG93IHNwZWNpZnlpbmcgbW9kdWxlIG5hbWUgZm9yIE5FIGR1bW15IG1vZHVsZS4KCgkqIGxvYWRlci9wZV9pbWFnZS5jIAoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglTZXQgbW9kdWxlIG5hbWUgb2YgZHVtbXkgbW9kdWxlIGVxdWFsIHRvIG1vZHVsZSBuYW1lIG9mIFBFIG1vZHVsZS4KCgkqIGNvbnRyb2xzL3Njcm9sbC5jLCBjb250cm9scy91aXRvb2xzLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU1pc3NpbmcgaW5jbHVkZSB3aW5lL3dpbnVzZXIxNi5oIGFkZGVkLgoKCSogZ3JhcGhpY3MvdmdhLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNyZWF0ZSBhbiBhY3R1YWwgcHJpbWFyeSBzdXJmYWNlIGZvciBzY3JlZW5idWZmZXIuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBKYW4gMTAgMTQ6NDA6MzQgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvbWlzY2VtdS5oLCBpbmNsdWRlL21zZG9zLmgsIGxvYWRlci9tYWluLmMsIG1zZG9zL01ha2VmaWxlLmluLCBtc2Rvcy9kb3Njb25mLmMsIG1zZG9zL2ludDIxLmM6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglBZGRlZCBjb25maWcuc3lzIHBhcnNlci4KCgkqIGNvbnRyb2xzL2xpc3Rib3guYzogUGFzY2FsIEN1b3EgPFBhc2NhbC5DdW9xQGlucmlhLmZyPgoJU21hbGwgY2hhbmdlIGluIExCX1NFVENVUlNFTDMyIGhhbmRsaW5nICh0aGUgY2FyZXQgc2hvdWxkIGJlIG1vdmVkIGFzCgl3ZWxsKS4KCgkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBmaWxlcy9hc3luYy5jLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBtaXNjL3dpbnNvY2tfZG5zLmMsIG1zZG9zL2ludDIxLmMsIG9sZS9jb21wb2JqLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVVzZSBhdXRvY29uZiBjaGVjayBmb3IgcHJlc2VuY2Ugb2Ygc3lzL2ZpbGUuaC4KCgkqIGRsbHMvbnRkbGwvcnRsLmMsIHJlbGF5MzIvbnRkbGwuc3BlYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJSW1wbGVtZW50ZWQgRGJnUHJpbnQsIGFkZGVkIHVsdG9hLgoKCSogd2luMzIvY29uc29sZS5jOiBQZXRlciBIdW5uaXNldHQgPGh1bm5pc2VAbm9ydGVsbmV0d29ya3MuY29tPgoJUGVla0NvbnNvbGVJbnB1dCAmIFJlYWRDb25zb2xlSW5wdXQgbmVlZCB0byByZXR1cm4gMCByZWNvcmRzIHJlYWQgaW4KCXRoZSBjYXNlIG9mIGFuIGludmFsaWQgaGFuZGxlLgoKCSogY29uc29sZS9uY3Vyc2VzLmMsIGxvYWRlci9tYWluLmM6CglKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCU1vcmUgdmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0LgoJUmVtb3ZlIGNvbXBpbGF0aW9uIHdhcm5pbmcuCgoJKiBtc2Rvcy9pbnQxMC5jOiBKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCUZpeCB1cCBzb21lIGludGVycnVwdCBjYWxscyB0byByZXR1cm4gYXQgdGhlIGRhdGEgdGhhdCB0aGV5IGFyZSBzdXBwb3NlZAoJdG8uIEFsc28gaW5jcmVhc2UgY29tbWVudCB2ZXJib3NpdHkgdG8gaGVscCBkZWJ1ZyB0aGluZ3MgbGF0ZXIuCgoJKiBpbmNsdWRlL29wdGlvbnMuaCwgbWlzYy9tYWluLmMsIG1pc2MvdmVyc2lvbi5jOgoJQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJQWRkZWQgc3dpdGNoIC1kb3N2ZXIuCglDbGVhbnVwIGZvciBPYUJ1aWxkVmVyc2lvbigpLgoKCSogbGlidGVzdC8uY3ZzaWdub3JlOiBBZGRlZCB2YXJ0ZXN0IGFuZCB2b2xpbmZvCgoJKiBkbGxzL3NoZWxsMzIvY29udG1lbnUuYywgZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3BpZGwuaCwgZGxscy9zaGVsbDMyL3NoZWxsbGluay5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jLCBpbmNsdWRlL3NoZWxsLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1hbnkgYnVnZml4ZXMsIGNvZGUgY2xlYW51cC4KCVJlbW92ZWQgYSBmZXcgZ2xpdGNoZXMgZnJvbSB0aGUgQ09NIHBhdGNoLgoKCSogd2luZG93cy9kaWFsb2cuYzogTGF3c29uIFdoaXRuZXkgPGxhd3Nvbl93aGl0bmV5QGp1bm8uY29tPgoJT25seSBkZXN0cm95IHdpbmRvdyBvbmNlLgoKCSogZ3JhcGhpY3MvZGRyYXcuYywgaW5jbHVkZS9kZHJhdy5oOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CgktIG1vdmVkIGRyYXdhYmxlIHRvIGNvbW1vbiBzaW5jZSBpdCBpcyB1c2VkIGJ5IGJvdGggREdBIGFuZCBYbGliLgoJICAoZml4ZXMgb25lIGJhZCBtZW1vcnkgY29ycnVwdGlvbiBidWcgaW4gREdBIChTdGFyQ3JhZnQgYW5kIERpYWJsbykKCS0gYWRkZWQgQmx0RmFzdCBzYW5pdHkgY2hlY2tzLgoKCSogd2luZG93cy9xdWV1ZS5jLCBsb2FkZXIvdGFzay5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbml0QXBwKCkgY2FsbCByZW1vdmVkIGZyb20gMzItYml0IGFwcGxpY2F0aW9uIHN0YXJ0dXA7CgljcmVhdGUgdGFzayBtZXNzYWdlIHF1ZXVlIGluIEluaXRUaHJlYWRJbnB1dCgpIGluc3RlYWQuCgoJKiBsb2FkZXIvbmUvY29udmVydC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGRlZCBhY2NlbGVyYXRvciB0YWJsZSBQRS0+TkUgcmVzb3VyY2UgY29udmVyc2lvbi4KCgkqIGRlYnVnZ2VyL2VkaXRsaW5lLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVJlc3RhcnQgcmVhZCgpIGluIGNhc2Ugb2YgRUlOVFIgaW4gVFRZZ2V0KCkuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGxvbGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglQdHIgcmVmIHdyb25nLgoKCSogdG9vbHMvd3JjL0NIQU5HRVMsIHRvb2xzL3dyYy9kdW1wcmVzLmMsIHRvb2xzL3dyYy9nZW5yZXMuYywgdG9vbHMvd3JjL25ld3N0cnVjLmMsIHRvb2xzL3dyYy9uZXdzdHJ1Yy5oLCB0b29scy93cmMvcGFyc2VyLmwsIHRvb2xzL3dyYy9wYXJzZXIueSwgdG9vbHMvd3JjL3JlYWRyZXMuYywgdG9vbHMvd3JjL3V0aWxzLmMsIHRvb2xzL3dyYy91dGlscy5oLCB0b29scy93cmMvd3JjLmgsIHRvb2xzL3dyYy93cmN0eXBlcy5oLCB0b29scy93cmMvd3JpdGVyZXMuYzoKCUJlcnRobyBTdHVsdGllbnMgPGJlcnRob0BwYW50ZXIuc29jaS5hYXUuZGs+CglXcmMgdmVyc2lvbiAxLjAuOC4gVG9vbGJhciByZXNvdXJjZXMgYXJlIG5vdyBzdXBwb3J0ZWQuIEEgY291cGxlIG9mCglvdGhlciBmaXhlcyBhcmUgYWxzbyBpbmNsdWRlZC4gU2VlIGZpbGUgdG9vbHMvd3JjL0NIQU5HRVMgZm9yIGRldGFpbHMuCgoJKiBvbGUvY29tcG9iai5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU1pc3NpbmcgV0lOQVBJLgoKCSogaW5jbHVkZS94MTFkcnYuaCwgbG9hZGVyL2Rvcy9tb2R1bGUuYywgb2JqZWN0cy9kYy5jLCByZWxheTMyL2J1aWx0aW4zMi5jLCByZWxheTMyL3JlbGF5Mzg2LmMsIHNjaGVkdWxlci9rMzJvYmouYywgZmlsZXMvYXN5bmMuYywgaWYxNjMyL3JlbGF5LmMsIGluY2x1ZGUvbWFpbi5oLCBpbmNsdWRlL211bHRpbWVkaWEuaCwgaW5jbHVkZS93aW5kb3dzLmg6CglKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CglBZGQgbWlzc2luZyAjaW5jbHVkZXMgYW5kIHByb3RvdHlwZXMgdG8gZWxpbWluYXRlIHNvbWUgaW1wbGljaXQKCWZ1bmN0aW9uIGRlY2xhcmF0aW9uIHdhcm5pbmdzIGFuZCAnZXh0ZXJuJ3MgaW4gLmMgZmlsZXMuCgoJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgY29uc29sZS9uY3Vyc2VzLmMsIGluY2x1ZGUvYWNjb25maWcuaCwgaW5jbHVkZS9jb25maWcuaC5pbjoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQ2hlY2sgZm9yIHJlc2l6ZXRlcm0gaW4gbmN1cnNlcy4KCgkqIGxpYnRlc3QvTWFrZWZpbGUuaW4sIGxpYnRlc3QvdmFydGVzdC1XaW4zMi5sb2csIGxpYnRlc3QvdmFydGVzdC5jLCBsaWJ0ZXN0L3ZhcnRlc3QucmVhZG1lOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJTmV3IHRlc3QgcHJvZ3JhbSBmb3IgVkFSSUFOVCBmdW5jdGlvbnMuCgoJKiBkZWJ1Z2dlci9tc2MuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglTb21lIGRlYnVnIGluZm9ybWF0aW9uIChQREIpIHdhcyBub3QgbWFwcGVkIHdoZW4gbG9hZGluZyBhIG1vZHVsZSwKCXdoaWNoIGNhdXNlZCBhIGNvcmUgaW4gdGhlIGRlYnVnZ2VyIHdoZW4gaXQgdHJpZWQgdG8gYWNjZXNzIGl0LgoKCSogTWFrZWZpbGUuaW46IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJTGlua3MgbGlid2luZS5zby4xLjAgdG8gbGlid2luZS5zbyBpbiBXaW5lJ3MgbWFpbiBkaXJlY3RvcnkuCglNYWtlcyBXaW5lIGNvbXBpbGUgd2l0aCAtLWVuYWJsZS1kbGwgYWdhaW4uCgpTYXQgSmFuICA5IDA5OjEyOjQwIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiByZWxheTMyL29sZTMyLnNwZWMsIHdpbmRvd3MvZGlucHV0LmMsIGluY2x1ZGUvc3RvcmFnZS5oLCBpbmNsdWRlL3Vua253bi5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaW5jbHVkZS93aW5lL29ial9iYXNlLmgsIGluY2x1ZGUvd2luZS9vYmpfY2hhbm5lbC5oLCBpbmNsdWRlL3dpbmUvb2JqX2NsaWVudHNlcnZlci5oLCBpbmNsdWRlL3dpbmUvb2JqX2RhdGFvYmplY3QuaCwgaW5jbHVkZS93aW5lL29ial9tYXJzaGFsLmgsIGluY2x1ZGUvd2luZS9vYmpfbWlzYy5oLCBpbmNsdWRlL3dpbmUvb2JqX21vbmlrZXIuaCwgaW5jbHVkZS93aW5lL29ial9wcm9wZXJ0eXN0b3JhZ2UuaCwgaW5jbHVkZS93aW5lL29ial9zdG9yYWdlLmgsIGluY2x1ZGUvd2luZXJyb3IuaCwgaW5jbHVkZS93dHlwZXMuaCwgbWlzYy9zaGVsbC5jLCBtdWx0aW1lZGlhL2RwbGF5LmMsIG11bHRpbWVkaWEvZHNvdW5kLmMsIG9iamVjdHMvZm9udC5jLCBvbGUvY29tcG9iai5jLCBvbGUvaWZzLmMsIG9sZS9tb25pa2VyLmMsIG9sZS9vbGUyLmMsIG9sZS9vbGUyZGlzcC5jLCBvbGUvb2xlZGxnLmMsIG9sZS9vbGVvYmouYywgb2xlL3N0b3JhZ2UuYywgb2xlL3R5cGVsaWIuYywgZGxscy9zaGVsbDMyL2RhdGFvYmplY3QuYywgZGxscy9zaGVsbDMyL2VudW1pZGxpc3QuYywgZGxscy9zaGVsbDMyL2ZvbGRlcnMuYywgZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBkbGxzL3NoZWxsMzIvc2hlbGxsaW5rLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9sZS5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jLCBncmFwaGljcy9kZHJhdy5jLCBncmFwaGljcy92Z2EuYywgaWYxNjMyL2NvbXBvYmouc3BlYywgaW5jbHVkZS9jb21wb2JqLmgsIGluY2x1ZGUvZGRyYXcuaCwgaW5jbHVkZS9kaW5wdXQuaCwgaW5jbHVkZS9kcGxheS5oLCBpbmNsdWRlL2Rzb3VuZC5oLCBpbmNsdWRlL2ludGVyZmFjZXMuaCwgaW5jbHVkZS9vYmpiYXNlLmgsIGluY2x1ZGUvb2JqaWRsLmgsIGluY2x1ZGUvb2xlLmgsIGluY2x1ZGUvb2xlMi5oLCBpbmNsdWRlL29sZW9iai5oLCBpbmNsdWRlL3NlcnZwcm92LmgsIGluY2x1ZGUvc2hlbGwuaCwgaW5jbHVkZS9zaGxndWlkLmgsIGluY2x1ZGUvc2hsb2JqLmgsIGRsbHMvY29tY3RsMzIvaW1hZ2VsaXN0LmMsIGRsbHMvc2hlbGwzMi9jb250bWVudS5jOgoJRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QG11bHRpbWFuaWEuY29tPgoJQWRkZWQgYSBsb3Qgb2YgQ09NIGludGVyZmFjZXMgZGVmaW5pdGlvbnMuCglSZXN0cnVjdHVyZWQgQ09NIGhlYWRlciBmaWxlcyBmb3IgYmV0dGVyIGNvbXBhdGliaWxpdHkgYW5kIGNsYXJpdHkuCgpGcmkgSmFuICA4IDE2OjM3OjAzIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBmaWxlcy9maWxlLmM6IFNldCBHRU5FUklDX1JFQUR8R0VORVJJQ19XUklURSBhY2Nlc3MgZm9yIE9GX0NSRUFURS4KCU1ha2UgR2V0RmlsZVR5cGUgd29yayBmb3IgYWxsIGhhbmRsZSB0eXBlcy4KCgkqIHdpbjMyL2RldmljZS5jOiBBdm9pZCBjcmFzaCBvbiBOVUxMIGRldi0+aW5mby4KCgkqIGluY2x1ZGUvZmxhdHNiLmgsIHJlbGF5MzIvY29tY3RsMzIuc3BlYywgZGxscy9jb21jdGwzMi9NYWtlZmlsZS5pbiwgZGxscy9jb21jdGwzMi9jb21tY3RybC5jLCBkbGxzL2NvbWN0bDMyL2ZsYXRzYi5jLCBpbmNsdWRlL2NvbW1jdHJsLmg6CglBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgoJQWRkZWQgc3R1YnMgYW5kIGRlZmluZXMgZm9yIHRoZSBmbGF0IHNjcm9sbGJhciBjb21tb24gY29udHJvbC4KCgkqIGluY2x1ZGUvY29tbWN0cmwuaCwgZGxscy9jb21jdGwzMi9kYXRldGltZS5jOgoJQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCUFkZGVkIHNvbWUgZGVmaW5lcyBuZWVkZWQgZm9yIGN1c3RvbSBkcmF3J2luZyBhbmQgZGF0ZXRpbWUgY29tbW9uCgljb250cm9scy4KCgkqIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYzogRWRkaWUgQ2FycGVudGVyIDxlY2FycGVudGVyQGl0ZXguY28uemE+CglGaXhlZCBhIHNtYWxsIGJ1ZyBpbiBmdW5jdGlvbiBFeHRyYWN0SWNvbkV4MzJBLgoKCSogd2luZG93cy93aW5wcm9jLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSFRBU0sxNiAtPiB0aHJlYWRJRCBtYXBwaW5nIG9mIFdNX0FDVElWQVRFQVBQLgoKCSogZmlsZXMvZmlsZS5jOiBCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AcGFudGVyLnNvY2kuYWF1LmRrPgoJTWFrZSBEZWxldGVGaWxlIGZhaWwgZm9yIGVtcHR5IHBhdGguCgoJKiBtc2Rvcy9pb3BvcnRzLmM6IEdlcmFsZCBQZmVpZmVyIDxwZmVpZmVyQGRiYWkudHV3aWVuLmFjLmF0PgoJRml4IGR1bW15X2N0ciBzdHVmZiB0byB3b3JrIGV2ZW4gd2l0aG91dCBESVJFQ1RfSU9fQUNDRVNTLgoKCSogbG9hZGVyL25lL3NlZ21lbnQuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXhlZCB3cm9uZyBidWZmZXIgd2hpY2ggY2F1c2VkIGZpeHVwcyB0byBmYWlsLgoKCSogZ3JhcGhpY3MvZDNkY29tbW9uLmMsIGdyYXBoaWNzL2QzZGRldmljZXMuYywgZ3JhcGhpY3MvZDNkdGV4dHVyZS5jLCBpbmNsdWRlL2QzZC5oOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CgktIGFkZGVkIGFsbCB0aGUgRGlyZWN0M0QgZXJyb3IgY29kZXMKCS0gYWRkZWQgOGJpdCBwYWxldHRpemVkIHRleHR1cmUgc3VwcG9ydAoKCSogbXNkb3MvY2Ryb20uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglpZmRlZnMgZm9yIGRlZmluZXMgbm90IGluIGxpbnV4IDIuMC4KCgkqIHJlbGF5MzIvd2luc3Bvb2wuc3BlYywgbWlzYy9wcmludGRydi5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQWRkZWQgdHdvIHN0dWJzIGZvciBBZGRQcmludGVyRHJpdmVyLgoKCSogaW5jbHVkZS9kb3NleGUuaCwgbG9hZGVyL2Rvcy9kb3Ntb2QuYywgbG9hZGVyL2Rvcy9kb3Ntb2QuaCwgbG9hZGVyL2Rvcy9kb3N2bS5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglRdWV1ZSBTSUdBTFJNIHRvIHJlZHVjZSB0aGUgInNpZ25hbCAxNCBsb3N0IiBjb21wbGFpbnRzLgoJQWRkZWQgc3VwcG9ydCBmb3IgcmVwcm9ncmFtbWluZyB0aGUgRE9TIHRpbWVyLCBhbmQgcmVhZGluZyBiYWNrIHRoZQoJY3VycmVudCB2YWx1ZS4KCgkqIG1pc2MvcmVnaXN0cnkuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglXaW5lIGhhbmdzIHdoZW4gcmVnaXN0cnkgKGNvcnJ1cHRlZCkgaGFzIGxvbmUgXCBhdCBlbmQgb2YgZmlsZS4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaCwgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jOgoJS29zdHlhIEl2YW5vdiA8a29zdHlhQHdhcm1jYXQuZXhjb20uc3BiLnN1PgoJU21hbGwgcGF0Y2ggdGhhdCBlbmFibGVzIENsYXJpb24gZm9yIFdpbmRvd3Mgbm90IHRvIHRyYXAgd2hpbGUKCWxvYWRpbmcuCgoJKiBvbGUvdmFyaWFudC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVJlcGxhY2UgdHJvdWJsZXNvbWUgYXNzaWdubWVudHMgYnkgbWVtc2V0IGZvciB3aG9sZSBzdHJ1Y3QuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUFkZGVkIGhhbmRsaW5nIG9mIHRoZSAncGFsZW50JyBmaWVsZCBvZiB0aGUgQ3JlYXRlUGFsZXR0ZSBwcm9jZWR1cmUuCgoJKiBkb2N1bWVudGF0aW9uL3dpbmUubWFuOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQWRkZWQgZGVzY3JpcHRpb24gYWJvdXQgaW5jbHVkaW5nL2V4Y2x1ZGluZyBmdW5jdGlvbnMgZnJvbSByZWxheQoJdHJhY2UuCgoJKiB3aW4zMi9jb25zb2xlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJUmVhZCBhdCBsZWFzdCAxIGlucHV0IHJlY29yZCBpbiBSZWFkQ29uc29sZUlucHV0QS4KCgkqIG1lbW9yeS92aXJ0dWFsLmM6CglGaXhlZCBDcmVhdGVNYXBwaW5nIHdoZW4gYSBtYXBwaW5nIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cy4KCldlZCBKYW4gIDYgMTA6Mzc6MjkgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHNlcnZlci9maWxlLmM6IEZpeGVkIGZpbGUgZGVzdHJ1Y3Rpb24gd2hlbiBmaWxlIGhhcyBubyBuYW1lLgoKVHVlIEphbiAgNSAxODozODo1OSAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbWlzYy9tYWluLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJV2FybnMgdXNlciBpZiBtdWx0aXBsZSAtZGxsIHN3aXRjaGVzIGFyZSB1c2VkIG9uIGNvbW1hbmQgbGluZS4KCgkqIGRsbHMvY29tY3RsMzIvdHJhY2tiYXIuYzogQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCUZpeGVkIGEgbGVmdG92ZXIgSGVhcEZyZWUgaW4gdGhlIHRyYWNrYmFyIGNvbW1vbiBjb250cm9sLgoKCSogaW5jbHVkZS9jb21tY3RybC5oLCBpbmNsdWRlL2RlYnVnLmgsIGluY2x1ZGUvZGVidWdkZWZzLmgsIGluY2x1ZGUvdGFiLmgsIGRsbHMvY29tY3RsMzIvdGFiLmM6CglBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgoJRml4ZWQgc29tZSBwcm9ibGVtcyB3aXRoIHRoZSB0YWIgY29tbW9uIGNvbnRyb2wgKHdpdGggdGhhbmtzIHRvIEFuZGVycwoJQ2FybHNzb24gPGFuZGVycy5jYXJsc3NvbkBsaW51eC5udT4pLgoKCSogZGxscy9jb21jdGwzMi9jb21tY3RybC5jLCBkbGxzL2NvbWN0bDMyL3Byb3BzaGVldC5jLCBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvcHJvcHNoZWV0LmgsIHJlbGF5MzIvY29tY3RsMzIuc3BlYzoKCUFsZXggUHJpZW0gPGFsZXhwQHNjaS5rdW4ubmw+CglBZGRlZCBhIG1pc3NpbmcgUHJvcGVydHlTaGVldDMyQVcgYW5kIENyZWF0ZVByb3BlcnR5U2hlZXRQYWdlIHN0dWIsCglhbmQgc29tZSBtaXNzaW5nIGRlZmluZXMuCgoJKiBtaXNjL21haW4uYywgc2NoZWR1bGVyL3N5c2xldmVsLmMsIGdyYXBoaWNzL3ZnYS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglVc2UgTWFrZUNyaXRpY2FsU2VjdGlvbkdsb2JhbCBvbiBhbGwgY3JpdGljYWwgc2VjdGlvbnMgdXNlZCBhY3Jvc3MKCXByb2Nlc3MgYm91bmRhcmllcy4KCgkqIGluY2x1ZGUvd2luYmFzZS5oLCBpbmNsdWRlL3dpbmRvd3MuaDoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRkZWQgcHJvdG90eXBlcyBmb3IgTWFrZUNyaXRpY2FsU2VjdGlvbkdsb2JhbCwgQ29udmVydFRvR2xvYmFsSGFuZGxlLgoKCSogZG9jdW1lbnRhdGlvbi93aW5lLm1hbjoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFkZGVkIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiB0aGUgbWFuIHBhZ2UuCgoJKiBsb2FkZXIvZG9zL21vZHVsZS5jOiBHZXJhbGQgUGZlaWZlciA8cGZlaWZlckBkYmFpLnR1d2llbi5hYy5hdD4KCUZpeGVkIGFyZ3Mgb2YgTVpfQ3JlYXRlUHJvY2Vzcy4KCgkqIHByb2dyYW1zL2Nsb2NrL2xhbmd1YWdlLmMsIHByb2dyYW1zL25vdGVwYWQvbGFuZ3VhZ2UuYywgcHJvZ3JhbXMvcHJvZ21hbi9tYWluLmM6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglGaXhlZCBzdHJpbmcgYnVnIGluIHByb2dyYW1zLy4KCgkqIG1zZG9zL2lvcG9ydHMuYzogQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJQWRkZWQgc3R1cGlkICJhY3Rpb24iIGVtdWxhdGlvbiBmb3IgaGFyZHdhcmUgdGltZXJzIGluIGlvcG9ydHMuYy4KCgkqIGRsbHMvd2luYXNwaS93aW5hc3BpMTYuYzogQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJQWdhaW4gYSBzbWFsbCBET1NBU1BJIHBhdGNoLgoKCSogZG9jdW1lbnRhdGlvbi9idWdyZXBvcnRzLCBkb2N1bWVudGF0aW9uL2ZvbnRzLCB3aW5kb3dzL3N5c21ldHJpY3MuYywgd2luZG93cy93aW4uYywgd2luZG93cy93aW5wb3MuYzoKCUFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCURvY3VtZW50YXRpb24gdXBkYXRlcy4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IExpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJLSBjaGVjayBpZiBwYWxldHRlIGlzIG5vdCBudWxsIHdoZW4gc2V0dGluZyBhIHBhbGV0dGUKCS0gY2hlY2sgaWYgd2luZG93IGhhbmRsZSBpcyB2YWxpZCBiZWZvcmUgZ2V0dGluZyBpdHMgJ2RyYXdhYmxlJwoKCSogZ3JhcGhpY3MveDExZHJ2L3hmb250LmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJUHJldmVudCBjb3JlIGR1bXAgd2l0aCBzb21lIFRURiAod2hlbiBYMTEgcnVucyB3aXRoIGEgdHJ1ZSB0eXBlCglzZXJ2ZXIpLgoKCSogc2VydmVyL2NvbnNvbGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglVc2Ugc3Rkb3V0IGZvciBkZWZhdWx0IGNvbnNvbGUgb3V0cHV0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gSmFuICAzIDE3OjAwOjIwIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBncmFwaGljcy9kM2RleGVjdXRlYnVmZmVyLmMsIGdyYXBoaWNzL2QzZGxpZ2h0LmMsIGdyYXBoaWNzL2QzZG1hdGVyaWFsLmMsIGdyYXBoaWNzL2QzZHRleHR1cmUuYywgZ3JhcGhpY3MvZDNkdmlld3BvcnQuYywgZ3JhcGhpY3MvZGRyYXcuYywgaW5jbHVkZS9hY2NvbmZpZy5oLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBpbmNsdWRlL2QzZC5oLCBpbmNsdWRlL3dpbmVfZ2wuaCwgbXVsdGltZWRpYS9kc291bmQuYywgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRvY3VtZW50YXRpb24vc3RhdHVzL2RpcmVjdDNELCBkb2N1bWVudGF0aW9uL3N0YXR1cy9kaXJlY3RkcmF3LCBncmFwaGljcy9NYWtlZmlsZS5pbiwgZ3JhcGhpY3MvZDNkX3ByaXZhdGUuaCwgZ3JhcGhpY3MvZDNkY29tbW9uLmMsIGdyYXBoaWNzL2QzZGRldmljZXMuYzoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJLSBiZWdpbm5pbmcgb2YgaW1wbGVtZW50YXRpb24gb2YgRGlyZWN0M0QyIChEWCA1LjApIGFuZCBhc3NvY2lhdGVkIGNsYXNzZXMKCS0gc29tZSBiYXNpYyBjb2RlIGZvciBEaXJlY3QzRCBhbmQgRGlyZWN0M0RFeGVjdXRlQnVmZmVyIChEWCAzLjApCgktIGFkZGVkIHN0cmV0Y2hpbmcgdG8gQmx0IGZ1bmN0aW9uCgoJKiBtaXNjL3ZlcnNpb24uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglUcnkgdG8gYXV0b2RldGVjdCBOVDQuCgoJKiB3aW4zMi9jb25zb2xlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJMCBtZWFucyBzdWNjZXNzLCBhbGwgZWxzZSBmYWlsdXJlIGZvciBXYWl0Rm9yU2luZ2xlT2JqZWN0LgoKCSogbXNkb3MvaW50MTAuYzogSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglEbyBub3QgYWR2YW5jZSB0aGUgY3Vyc29yIGluIGNlcnRhaW4gcm91dGluZXMuIFRoaXMgY2xlYW5lZCB1cCB0aGUKCWltcGxlbWVudGF0aW9uIHF1aXRlIGEgYml0LgoKCSogbG9hZGVyL21haW4uYzogSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglTZXQgY29uc29sZSB2aWRlbyBtb2RlIHdoZW4gbG9hZGluZyBET1MgYXBwLiAoRXZlbnR1YWxseSwgSSB3YW50IHRvCgltaW1pYyBXaW5kb3dzIDl4J3MgYmVoYXZpb3IgYnkgc2V0dGluZyB0aGUgdmlkZW8gbW9kZSBvbmx5IHdoZW4gbm9uCglJTlQgMjEgY2FsbHMgYXJlIHVzZWQgdG8gYWxsb3cgZm9yIGFyYml0cmFyeS1zaXplZCBjb25zb2xlcykuCgoJKiBjb25zb2xlL2ludGVyZmFjZS5jLCBjb25zb2xlL3h0ZXJtLmM6CglKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCVh0ZXJtIGRyaXZlciBjYW4gbm93IHJlc2l6ZSB0aGUgdGVybWluYWwgd2hlbiBhIG1vZGUgY2hhbmdlIGlzCglkZXRlY3RlZC4KCgkqIGNvbnNvbGUvZ2VuZXJpYy5jOiBKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCUxvbmcgc3RhbmRpbmcgc2Nyb2xsIGJ1ZyBmaXhlZCEKCgkqIGNvbnNvbGUvbmN1cnNlcy5jLCBpbmNsdWRlL2FjY29uZmlnLmgsIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvY29uc29sZS5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKCUpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJUmV3cml0ZSBvZiBjb25maWd1cmF0aW9uIHN5c3RlbSB0byBzdXBwb3J0ICJyZWd1bGFyIiBjdXJzZXMgYXMgd2VsbCBhcwoJZWxpbWluYXRpbmcgdGhlIC0td2l0aC1uY3Vyc2VzIG9wdGlvbi4gTm93LCBuY3Vyc2VzIHN1cHBvcnQgd2lsbCBiZQoJYnVpbHQgaW4gaWYgYSBjb21wYXRpYmxlIGxpYnJhcnkgaXMgZGV0ZWN0ZWQuCgoJKiBpbmNsdWRlL3dpbnR5cGVzLmgsIHdpbmRvd3MvZGVmZGxnLmM6CglORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCUZpeCB0aGUgcmV0dXJuIHR5cGUgb2YgRExHUFJPQyB0eXBlIGFuZCBtYXNrIG91dCB0aGUgdW5zZXQgaGlnaHdvcmQgb2YKCXRoZSByZXR1cm4gd2hlbiBhIDE2IGJpdCBkaWFsb2cgcHJvYyBpcyBjYWxsZWQuCgoJKiBpbmNsdWRlL2ludGVyZmFjZXMuaDogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUFkZCBpbnRlcmZhY2UgSUQncyBmb3IgdXBjb21pbmcgSVR5cGVMaWIgaW1wbGVtZW50YXRpb24uCgoJKiBmaWxlcy9kb3NfZnMuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglCdWdmaXggZm9yIHRyYWlsaW5nIHNsYXNoZXMsIHJlcGV0aXRpb24gb2YgJy8nIG9yICdcJyBhbmQKCVNldExhc3RFcnJvcigpIGluIEdldEZ1bGxQYXRobmFtZS4KCgkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGxscy9NYWtlZmlsZS5pbiwgZGxscy9hZHZhcGkzMi8uY3ZzaWdub3JlLCBkbGxzL2FkdmFwaTMyL01ha2VmaWxlLmluLCBkbGxzL2FkdmFwaTMyL2FkdmFwaS5jLCBkbGxzL2FkdmFwaTMyL2V2ZW50bG9nLmMsIGRsbHMvYWR2YXBpMzIvc2VjdXJpdHkuYywgZGxscy9hZHZhcGkzMi9zZXJ2aWNlLmMsIHJlbGF5MzIvYWR2YXBpMzIuc3BlYywgd2luMzIvQXR0aWMvYWR2YXBpLmMsIHdpbjMyL0F0dGljL3NlY3VyaXR5LmMsIHdpbjMyL01ha2VmaWxlLmluLCB3aW4zMi9pbml0LmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1vdmVkIEFEVkFQSTMyIGZpbGVzIHRvIGRsbHMvYWR2YXBpMzIuCglBZGRlZCBzdHVicyBmb3IgZXZlbnRsb2cgZnVuY3Rpb25zLgoKCSogcmVsYXkzMi9zaGVsbDMyLnNwZWMsIGRsbHMvc2hlbGwzMi9zaGVsbGxpbmsuYywgZGxscy9zaGVsbDMyL3NoZWxsb2xlLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBkbGxzL3NoZWxsMzIvc2hlbGxwYXRoLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIGluY2x1ZGUvc2hsb2JqLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBzdHVicyBOVFNIQ2hhbmdlTm90aWZ5UmVnaXN0ZXIsIE5UU0hDaGFuZ2VOb3RpZnlEZXJlZ2lzdGVyLgoJQ2xlYW51cCwgc29tZSBtb3JlIGZ1bmN0aW9ucyBVTklDT0RFIHJlYWR5LgoKCSogZGxscy9zaGVsbDMyL3BpZGwuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTSENsb25lU3BlY2lhbElETGlzdCBpbXBsZW1lbnRlZC4KCVNIR2V0RGF0YUZyb21JRExpc3RBIGNvcnJlY3RlZC4KCgkqIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU2hlbGxfR2V0Q2FjaGVkSW1hZ2VJbmRleDMyW0F8V10gaW1wbGVtZW50ZWQuCgoJKiBtc2Rvcy9pbnQyMS5jLCBtc2Rvcy9pbnQyNS5jLCBtc2Rvcy9pbnQyNi5jLCBmaWxlcy9kcml2ZS5jLCBpbmNsdWRlL2RyaXZlLmg6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglJbXBsZW1lbnRlZCByYXcgZGV2aWNlIGFjY2VzcyBjYWxscyBmb3IgaW9jdGxHZW5lcmljQmxrRGV2UmVxKCkKCWFuZCB0aGVyZWZvcmUgbW92ZWQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBvZiBpbnQyWzU2XS5jIGludG8gZmlsZXMvZHJpdmUuYy4KCgkqIG1zZG9zL2lvcG9ydHMuYzogQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJQWRkZWQgYXV0b21hdGljIENNT1MgUkFNIGNoZWNrc3VtIGNhbGN1bGF0aW9uLgoKCSogZGxscy93aW5hc3BpL3dpbmFzcGkxNi5jLCBkbGxzL3duYXNwaTMyL3dpbmFzcGkzMi5jLCBkb2N1bWVudGF0aW9uL2FzcGksIHJlbGF5MzIvd25hc3BpMzIuc3BlYzoKCUFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCVNlbmRBU1BJMzJDb21tYW5kMzIgaGFzIHRvIGJlIF9fY2RlY2wuCglVcGRhdGVkIGRvY3VtZW50YXRpb24vYXNwaSBhbmQgcmV2ZXJ0ZWQgYW4gRVJSIGJhY2sgdG8gV0FSTi4KCgkqIGRvY3VtZW50YXRpb24vYnVncmVwb3J0czogSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoJT2YgY291cnNlIHdlIHdhbnQgdGhlIGxhc3QgMTAwIGxpbmVzLCBub3QgdGhlIGZpcnN0IDEwMCBsaW5lcy4KCVVzZSAndGFpbCcgaW5zdGVhZCBvZiAnaGVhZCcuIEFsc28gZml4IHRleHQgYWxpZ25tZW50IGZyb20KCXByZXZpb3VzIHBhdGNoLgoKCSogbXVsdGltZWRpYS9qb3lzdGljay5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCVJlYWRpbmcgam95c3RpY2sgNSB3aGVuIHdlIG9ubHkgc3VwcG9ydCA0IHNob3VsZCBmYWlsIGluc3RlYWQgb2YKCWhhbmcuCgoJKiBtdWx0aW1lZGlhL21jaWNkYS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCVBsYXlpbmcgYSBub24tZXhpc3RlbnQgQ0Qgc2hvdWxkIGZhaWwgaW5zdGVhZCBvZiBjcmFzaC4KCgkqIE1ha2UucnVsZXMuaW4sIE1ha2VmaWxlLmluOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNoZWNrIGZvciBuZWNlc3NhcnkgY29uZmlndXJlIHJlcnVucyBmb3IgTWFrZWZpbGUgYW5kIE1ha2UucnVsZXMKCWdlbmVyYXRpb24uCgoJKiBtaXNjZW11L2luc3RyLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJRW11bGF0ZXMgaW5zL291dHMgY29ycmVjdGx5IGZvciBET1MgcHJvZ3JhbXMuCgoJKiBvbGUvc3RvcmFnZS5jLCBzY2hlZHVsZXIvcHJvY2Vzcy5jLCBzZXJ2ZXIvY2hhbmdlLmMsIHNlcnZlci9jb25zb2xlLmMsIHNlcnZlci9ldmVudC5jLCBzZXJ2ZXIvZmlsZS5jLCBzZXJ2ZXIvbWFwcGluZy5jLCBzZXJ2ZXIvbXV0ZXguYywgc2VydmVyL29iamVjdC5jLCBzZXJ2ZXIvcGlwZS5jLCBzZXJ2ZXIvcHJvY2Vzcy5jLCBzZXJ2ZXIvcmVxdWVzdC5jLCBzZXJ2ZXIvc2VtYXBob3JlLmMsIHNlcnZlci90aHJlYWQuYywgc2VydmVyL3RyYWNlLmMsIHdpbjMyL2RldmljZS5jLCB3aW4zMi9maWxlLmMsIGZpbGVzL2Rvc19mcy5jLCBmaWxlcy9maWxlLmMsIGluY2x1ZGUvZGV2aWNlLmgsIGluY2x1ZGUvZmlsZS5oLCBpbmNsdWRlL3NlcnZlci5oLCBpbmNsdWRlL3NlcnZlci9vYmplY3QuaCwgaW5jbHVkZS9zZXJ2ZXIvcmVxdWVzdC5oLCBsb2FkZXIvbmUvbW9kdWxlLmMsIGxvYWRlci9wZV9pbWFnZS5jLCBtaXNjL2NydGRsbC5jLCBtc2Rvcy9pbnQyMS5jLCBtc2Rvcy92eGQuYzoKCUltcGxlbWVudGVkIGZpbGUgc2hhcmluZyBjaGVja3MgaW4gdGhlIHNlcnZlci4KCUFkZGVkIHNldCBmaWxlIHRpbWUgc2VydmVyIHJlcXVlc3QuCglPdmVyYWxsIGNsZWFuIHVwIG9mIHRoZSBmaWxlIGhhbmRsaW5nIChET1MgZGV2aWNlIGhhbmRsaW5nIGlzIG5vdwoJYnJva2VuLCBzaG91bGQgYmUgcmVkb25lKS4KClNhdCBKYW4gIDIgMDg6MjI6MzQgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG1lbW9yeS92aXJ0dWFsLmM6CglGaXhlZCBidWcgaW4gQ3JlYXRlRmlsZU1hcHBpbmcgd2hlbiBuYW1lIGlzIG5vdCBOVUxMLgoKCSogc2VydmVyL3JlcXVlc3QuYzogRml4ZWQgQ0hFQ0tfU1RSSU5HIGRpc3BsYXkuCgpGcmkgSmFuICAxIDE5OjUxOjI1IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpZjE2MzIva2VybmVsLnNwZWMsIG1lbW9yeS9sb2NhbC5jOgoJUmljaGFyZCBBIExvdWdoIDxyYWxvdWdoLmNlZEBkbmV0LmNvLnVrPgoJUHV0IHJldHVybiB2YWx1ZSBvZiBMb2NhbEFsbG9jIGluIENYIHRvby4KCgkqIGluY2x1ZGUvcHNkcnYuaDogRGltaXRyaWUgTy4gUGF1biA8ZGltaUBjcy50b3JvbnRvLmVkdT4KCVByb3RlY3QgYWdhaW5zdCBtdWx0aXBsZSBpbmNsdWRlcy4KCgkqIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYzogVXNlIHByb3BlciBzeXN0ZW0gZGlyZWN0b3J5LgoKCSogc2NoZWR1bGVyL3Byb2Nlc3MuYzogR290IHJpZCBvZiBDTElFTlRfR2V0UHJvY2Vzc0luZm8uCgoJKiB3aW5kb3dzL2NsYXNzLmMsIHdpbmRvd3MvZGNlLmMsIHdpbmRvd3MvZGVmZGxnLmMsIHdpbmRvd3MvZGVmd25kLmMsIHdpbmRvd3MvZHJpdmVyLmMsIHdpbmRvd3MvbXNnYm94LmMsIHdpbmRvd3MvcGFpbnRpbmcuYywgd2luZG93cy91c2VyLmMsIHdpbmRvd3Mvd2luaGVscC5jLCBpbmNsdWRlL3dpbmUvd2ludXNlcjE2LmgsIGluY2x1ZGUvd2lucmVnLmgsIGluY2x1ZGUvd2ludXNlci5oLCBsb2FkZXIvbW9kdWxlLmMsIG1pc2MvY29tbS5jLCBtaXNjL3NoZWxsLmMsIG1pc2Mvc3Bvb2xlci5jLCBtaXNjL3NweS5jLCBtaXNjL3dpbnNvY2suYywgbXVsdGltZWRpYS9hdWRpby5jLCBtdWx0aW1lZGlhL21jaWFuaW0uYywgbXVsdGltZWRpYS9tY2ljZGEuYywgbXVsdGltZWRpYS9tY2ltaWRpLmMsIG11bHRpbWVkaWEvbWNpd2F2ZS5jLCBtdWx0aW1lZGlhL21pZGkuYywgbXVsdGltZWRpYS9tbXN5c3RlbS5jLCBvYmplY3RzL2NsaXBwaW5nLmMsIG9sZS9vbGVvYmouYywgY29udHJvbHMvYnV0dG9uLmMsIGNvbnRyb2xzL2Rlc2t0b3AuYywgY29udHJvbHMvaWNvbnRpdGxlLmMsIGNvbnRyb2xzL3N0YXRpYy5jLCBkZWJ1Z2dlci9kYmcueSwgZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGdyYXBoaWNzL3BzZHJ2L2VzY2FwZS5jLCBpZjE2MzIvdGh1bmsuYywgaW5jbHVkZS9jYWxsYmFjay5oLCBpbmNsdWRlL2Rpc3BsYXkuaCwgaW5jbHVkZS9pbWFnZWxpc3QuaCwgaW5jbHVkZS9vbGUuaCwgaW5jbHVkZS9xdWV1ZS5oLCBpbmNsdWRlL3NoZWxsLmgsIGluY2x1ZGUvc3RvcmFnZS5oLCBpbmNsdWRlL3N0cnVjdDMyLmgsIGluY2x1ZGUvd2luYmFzZS5oLCBpbmNsdWRlL3dpbmRvd3MuaDoKCU1pY2hhZWwgVmVrc2xlciA8bXZla3NsZXJAdGVjaHVuaXgudGVjaG5pb24uYWMuaWw+CglNb3ZlcyBtb3JlIHN0dWZmIGZyb20gd2luZG93cy5oLgoJLSBpbmNsdWRlL3dpbnVzZXIuaCAtIGludGVyZmFjZSByZWxldmFudCB0byB1c2VyMzIuc3BlYwoJLSBpbmNsdWRlL3dpbmUvd2ludXNlcjE2LmggLSB0aGUgb2xkIDE2IGJpdCBpbnRlcmZhY2UgKGludGVybmFsIHVzZSkKCS0gaW5jbHVkZS93aW5iYXNlLmggLSBzb21lIG1pbm9yIHVwZGF0ZXMgdG8ga2VlcCB0aGluZ3MgY29oZXJlbnQuCgktIExvdCBvZiBvdGhlciBmaWxlcyBtYWRlIHRvIGluY2x1ZGUgd2luZS93aW51c2VyMTYuaCwgd2hpY2ggaXMgbm8KCSAgbG9uZ2VyIGluY2x1ZGVkIGZyb20gd2luZG93cy5oCgoJKiBzY2hlZHVsZXIvaGFuZGxlLmM6IEZpeGVkIENsb3NlSGFuZGxlKCkgb24gZ2xvYmFsIGhhbmRsZXMuCgoJKiBSRUFETUUsIGRvY3VtZW50YXRpb24vYnVncmVwb3J0cywgZG9jdW1lbnRhdGlvbi93aW45NWxvb2ssIGRvY3VtZW50YXRpb24vd2luZS5tYW46CglKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CglBZGQgc29tZSBpbmZvcm1hdGlvbiB0byB0aGUgbWFuIHBhZ2UgYW5kIFJFQURNRSBmaWxlLgoJTWFrZSBkb2N1bWVudGF0aW9uL3dpbjk1bG9vayBzYXkgW1R3ZWFrLkxheW91dF0gaW5zdGVhZCBvZgoJW1R3ZWFrcy5MYXlvdXRdLgoJRml4IGluY29ycmVjdCBjb21tYW5kIGdpdmVuIGluIGRvY3VtZW50YXRpb24vYnVncmVwb3J0cy4KCVN0YW5kYXJkIGVycm9yIHdhcyBub3QgYmVpbmcgcmVkaXJlY3RlZCwgc28gbW9zdCBvZiB0aGUKCW91dHB1dCB3YXMgbG9zdC4KCgkqIG9iamVjdHMvYml0bWFwLmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJRGVscGhpIDIuMCBuZWVkcyB0byBhbGxvY2F0ZSBhIGJpdG1hcCBiaWdnZXIgdGhhbiA0MDk2IGJpdHMgd2lkZS4KCgkqIG1pc2MvcHJpbnRkcnYuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglJbml0aWFsaXplIGxwZHdOZWVkZWQuCgoJKiBpZjE2MzIvc25vb3AuYzoKCU1hcmN1cyBNZWlzc25lciA8TWFyY3VzLk1laXNzbmVyQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW5jbHVkZSBzdHVmZiBldmVuIGlmIG5vdCBvbiBfX2kzODZfXyBmb3IgZGVidWcgZGVmaW5lcy4KCgkqIG9sZS92YXJpYW50LmM6CglNYXJjdXMgTWVpc3NuZXIgPE1hcmN1cy5NZWlzc25lckBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFub3RoZXIgLy8gY29tbWVudCBmaXhlZC4KCgkqIHNlcnZlci9maWxlLmM6CglNYXJjdXMgTWVpc3NuZXIgPE1hcmN1cy5NZWlzc25lckBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCU5lZWQgPGVycm5vLmg+IGZvciBlcnJubyBkZWNsLiBvbiBTb2xhcmlzLgoKCSogaW5jbHVkZS93aW5nZGkuaCwgaW5jbHVkZS94MTFmb250LmgsIG9iamVjdHMvZm9udC5jOgoJRG91Z2xhcyBSaWRnd2F5IDxyaWRnd2F5QHdpbmVocS5jb20+CglJbXBsZW1lbnQgVHJhbnNsYXRlQ2hhcnNldEluZm8sIGNoYW5nZSBjaGFyc2V0IHR5cGUgdG8gQllURS4KCgkqIGNvbnRyb2xzL2NvbWJvLmMsIGNvbnRyb2xzL2xpc3Rib3guYywgaW5jbHVkZS9jb21iby5oOgoJQWxleCBLb3JvYmthIDxrb3JvYmthQGdhbGF4eS5hbXMuc3VueXNiLmVkdT4KCUJldHRlciBDQl9TRVRDVVJTRUwgbWVzc2FnZSBoYW5kbGluZy4KCgkqIGluY2x1ZGUvcXVldWUuaCwgaW5jbHVkZS90aHJlYWQuaCwgc2NoZWR1bGVyL3N5bmNocm8uYywgc2NoZWR1bGVyL3RocmVhZC5jLCB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9xdWV1ZS5jOgoJTW92ZWQgTXNnV2FpdEZvck11bHRpcGxlT2JqZWN0IGltcGxlbWVudGF0aW9uIHRvIFVTRVIgcm91dGluZXMsIHVzaW5nCglhIG5vcm1hbCBXaW4zMiBldmVudC4KCgkqIHRvb2xzL21ha2VfcmVxdWVzdHM6IFNlbmQgZGVidWdnaW5nIG91dHB1dCB0byBzdGRlcnIuCgoJKiBmaWxlcy9jaGFuZ2UuYywgZmlsZXMvZG9zX2ZzLmMsIGZpbGVzL2ZpbGUuYywgaW5jbHVkZS9maWxlLmgsIHNjaGVkdWxlci9jbGllbnQuYywgc2NoZWR1bGVyL2V2ZW50LmMsIHNjaGVkdWxlci9rMzJvYmouYywgc2NoZWR1bGVyL211dGV4LmMsIHNjaGVkdWxlci9waXBlLmMsIHNjaGVkdWxlci9zZW1hcGhvcmUuYywgd2luMzIvY29uc29sZS5jOgoJQ2xlYW5lZCB1cCBhbmQgcmVtb3ZlZCBzb21lIG5vIGxvbmdlciB1c2VkIGNvZGUuCgoJKiBtZW1vcnkvdmlydHVhbC5jOiBVc2Ugc2VydmVyIGZpbGUgbWFwcGluZyBvYmplY3RzLgoKCSogaW5jbHVkZS9zZXJ2ZXIvb2JqZWN0LmgsIGluY2x1ZGUvc2VydmVyL3JlcXVlc3QuaCwgaW5jbHVkZS9zZXJ2ZXIvdGhyZWFkLmgsIHNlcnZlci9NYWtlZmlsZS5pbiwgc2VydmVyL2NvbnNvbGUuYywgc2VydmVyL2ZpbGUuYywgc2VydmVyL21haW4uYywgc2VydmVyL21hcHBpbmcuYywgc2VydmVyL29iamVjdC5jLCBzZXJ2ZXIvcGlwZS5jLCBzZXJ2ZXIvcmVxdWVzdC5jLCBzZXJ2ZXIvdGhyZWFkLmMsIHNlcnZlci90cmFjZS5jLCBpbmNsdWRlL3NlcnZlci5oOgoJQWRkZWQgc2VydmVyLXNpZGUgZmlsZSBtYXBwaW5nIG9iamVjdCBzdXBwb3J0LgoKCSogbWlzYy9jcnRkbGwuYzoKCUhhY2tlZCBzdGRpbyBmdW5jdGlvbnMgdG8gdXNlIFdpbjMyIGZpbGUgaGFuZGxlcy4gU3RpbGwgbmVlZHMgYSBwcm9wZXIKCXN0ZGlvIGVtdWxhdGlvbi4KCgkqIGxvYWRlci9uZS9tb2R1bGUuYywgbG9hZGVyL25lL3Jlc291cmNlLmMsIGxvYWRlci9uZS9zZWdtZW50LmM6CglVc2UgV2luMzIgZmlsZSBoYW5kbGVzIGluc3RlYWQgb2YgVW5peCBvbmVzLgoKCSogaW5jbHVkZS9tb2R1bGUuaCwgaW5jbHVkZS9wZV9pbWFnZS5oLCBpbmNsdWRlL3Byb2Nlc3MuaCwgbG9hZGVyL2Rvcy9tb2R1bGUuYywgbG9hZGVyL21vZHVsZS5jLCBsb2FkZXIvcGVfaW1hZ2UuYywgc2NoZWR1bGVyL3Byb2Nlc3MuYywgaW5jbHVkZS9kb3NleGUuaDoKCVRha2UgaW50byBhY2NvdW50IGhhbmRsZSBpbmhlcml0YW5jZSBmbGFnLgoKVGh1IERlYyAzMSAxNTo1NToxOSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZGVidWdnZXIvZGJfZGlzYXNtLmM6CglDaGFuZ2VkIGRiX3Rhc2tfcHJpbnRzeW0gdG8gYWx3YXlzIHByaW50IGEgZnVsbCBhZGRyZXNzLCBubyBtYXR0ZXIKCXdoYXQgdGhlIG9wZXJhbmQgc2l6ZSBpcy4KCgkqIHNjaGVkdWxlci9jcml0c2VjdGlvbi5jOiBSZS1pbXBsZW1lbnRlZCB1c2luZyBhIHJlYWwgc2VtYXBob3JlLgoKCSogd2luZG93cy9xdWV1ZS5jLCBmaWxlcy9jaGFuZ2UuYywgZmlsZXMvZmlsZS5jLCBpbmNsdWRlL2szMm9iai5oLCBpbmNsdWRlL3Byb2Nlc3MuaCwgaW5jbHVkZS90aHJlYWQuaCwgbG9hZGVyL3NpZ25hbC5jLCBtZW1vcnkvdmlydHVhbC5jLCBtaXNjL3Rvb2xoZWxwLmMsIHNjaGVkdWxlci9jbGllbnQuYywgc2NoZWR1bGVyL2V2ZW50LmMsIHNjaGVkdWxlci9oYW5kbGUuYywgc2NoZWR1bGVyL2szMm9iai5jLCBzY2hlZHVsZXIvbXV0ZXguYywgc2NoZWR1bGVyL3BpcGUuYywgc2NoZWR1bGVyL3Byb2Nlc3MuYywgc2NoZWR1bGVyL3NlbWFwaG9yZS5jLCBzY2hlZHVsZXIvc3luY2hyby5jLCBzY2hlZHVsZXIvdGhyZWFkLmMsIHdpbjMyL2NvbnNvbGUuYywgd2luMzIvZGV2aWNlLmM6CglSZW1vdmVkIGNsaWVudC1zaWRlIHdhaXQgZnVuY3Rpb25zOyBhbGwgd2FpdGluZyBpcyBub3cgZG9uZSB0aHJvdWdoCgl0aGUgc2VydmVyLgoKCSogc2VydmVyL01ha2VmaWxlLmluLCBzZXJ2ZXIvY2hhbmdlLmMsIHNlcnZlci9wcm9jZXNzLmMsIHNlcnZlci9yZXF1ZXN0LmMsIHNlcnZlci90cmFjZS5jLCBpbmNsdWRlL3NlcnZlci5oLCBpbmNsdWRlL3NlcnZlci9vYmplY3QuaCwgaW5jbHVkZS9zZXJ2ZXIvcmVxdWVzdC5oOgoJQWRkZWQgY2hhbmdlIG5vdGlmaWNhdGlvbnMuCglBZGRlZCBnbG9iYWwgaGFuZGxlIHN1cHBvcnQuCgpXZWQgRGVjIDMwIDEyOjExOjUyIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL3RocmVhZC5oLCBzY2hlZHVsZXIvc3luY2hyby5jOgoJQ2hhbmdlZCBzZXJ2ZXIgd2FpdCBsb2dpYyBhIGJpdC4KCgkqIHdpbjMyL2NvbnNvbGUuYzoKCUhhY2tzIHRvIHN1cHBvcnQgc2VydmVyLXNpZGUgY29uc29sZS4gU2hvdWxkIGJlIHJlZG9uZSBwcm9wZXJseQoJc29tZSBkYXkuCgoJKiBmaWxlcy9kb3NfZnMuYywgZmlsZXMvZmlsZS5jLCBpbmNsdWRlL2ZpbGUuaCwgd2luMzIvZmlsZS5jLCB3aW4zMi9uZXdmbnMuYzoKCVJlaW1wbGVtZW50ZWQgUmVhZC9Xcml0ZUZpbGUgdG8gdXNlIHNlcnZlciBmaWxlIGRlc2NyaXB0b3JzLgoJUmVtb3ZlZCBmaWxlIHBvc2l0aW9uIGhhY2sgYXMgaXQgaXMgd3JvbmcgZm9yIFdpbjMyIChzaG91bGQgYmUgcmVkb25lCglmb3IgV2luMTYgb25seSkuCgoJKiBzY2hlZHVsZXIvTWFrZWZpbGUuaW4sIHNjaGVkdWxlci9rMzJvYmouYywgc2NoZWR1bGVyL3BpcGUuYzoKCUFkZGVkIGFub255bW91cyBwaXBlIHN1cHBvcnQKCgkqIGluY2x1ZGUvc2VydmVyLmgsIGluY2x1ZGUvc2VydmVyL29iamVjdC5oLCBpbmNsdWRlL3NlcnZlci9yZXF1ZXN0LmgsIHNlcnZlci9NYWtlZmlsZS5pbiwgc2VydmVyL2NvbnNvbGUuYywgc2VydmVyL2V2ZW50LmMsIHNlcnZlci9maWxlLmMsIHNlcnZlci9tdXRleC5jLCBzZXJ2ZXIvb2JqZWN0LmMsIHNlcnZlci9waXBlLmMsIHNlcnZlci9wcm9jZXNzLmMsIHNlcnZlci9yZXF1ZXN0LmMsIHNlcnZlci9zZW1hcGhvcmUuYywgc2VydmVyL3RocmVhZC5jLCBzZXJ2ZXIvdHJhY2UuYzoKCUFkZGVkIHNldmVyYWwgZmlsZSBzZXJ2ZXIgcmVxdWVzdHMKCUFkZGVkIHNlcnZlci1zaWRlIHBpcGVzIGFuZCBjb25zb2xlcwoKU3VuIERlYyAyNyAxNToyODo1NSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbWlzYy9jcnRkbGwuYywgbXNkb3MvaW50MjEuYywgc2NoZWR1bGVyL2NsaWVudC5jLCBzY2hlZHVsZXIvazMyb2JqLmMsIHNlcnZlci9NYWtlZmlsZS5pbiwgc2VydmVyL2V2ZW50LmMsIHNlcnZlci9maWxlLmMsIHNlcnZlci9tdXRleC5jLCBzZXJ2ZXIvcHJvY2Vzcy5jLCBzZXJ2ZXIvcmVxdWVzdC5jLCBzZXJ2ZXIvc2VtYXBob3JlLmMsIHNlcnZlci90cmFjZS5jLCB0b29scy9tYWtlX3JlcXVlc3RzLCBmaWxlcy9kb3NfZnMuYywgZmlsZXMvZmlsZS5jLCBpbmNsdWRlL2RlYnVnLmgsIGluY2x1ZGUvZGVidWdkZWZzLmgsIGluY2x1ZGUvZmlsZS5oLCBpbmNsdWRlL3NlcnZlci5oLCBpbmNsdWRlL3NlcnZlci9vYmplY3QuaCwgaW5jbHVkZS9zZXJ2ZXIvcmVxdWVzdC5oLCBsb2FkZXIvbWFpbi5jLCBtZW1vcnkvdmlydHVhbC5jOgoJQWRkZWQgYmVnaW5uaW5ncyBvZiBzZXJ2ZXItc2lkZSBmaWxlIGhhbmRsaW5nLgoJQWRkZWQgLWRlYnVnbXNnICtzZXJ2ZXIgc3VwcG9ydC4KCUJldHRlciBzZXJ2ZXIgcmVxdWVzdCBkdW1waW5nIGZvciB2YXJhcmdzIHJlcXVlc3RzLgoKCSogd2luZG93cy94MTFkcnYvd25kLmM6CglGaXhlZCBTZXRGb2N1cyB0aGF0IHdhcyBicm9rZW4gd2hlbiBtb3ZlZCB0byB4MTFkcnYuCgoJKiBpbmNsdWRlL3NlcnZlci9vYmplY3QuaCwgaW5jbHVkZS9zZXJ2ZXIvdGhyZWFkLmgsIHNjaGVkdWxlci9jbGllbnQuYywgc2VydmVyL01ha2VmaWxlLmluLCBzZXJ2ZXIvZXZlbnQuYywgc2VydmVyL21haW4uYywgc2VydmVyL211dGV4LmMsIHNlcnZlci9wcm9jZXNzLmMsIHNlcnZlci9zZWxlY3QuYywgc2VydmVyL3NlbWFwaG9yZS5jLCBzZXJ2ZXIvc29ja2V0LmMsIHNlcnZlci90aHJlYWQuYzoKCUFkZGVkIGFkZF9xdWV1ZS9yZW1vdmVfcXVldWUgdG8gc2VydmVyIG9iamVjdCBvcGVyYXRpb25zLgoJTW92ZWQgc2VsZWN0KCkgbG9vcCBmdW5jdGlvbnMgdG8gc2VsZWN0LmMuCgpTYXQgRGVjIDI2IDE5OjQ3OjAwIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBwcm9ncmFtcy9yZWd0ZXN0L3JlZ3Rlc3QuYzoKCVJlbmFtZWQgRVJSIG1hY3JvIHRvIGF2b2lkIGNvbmZ1c2luZyB0aGUgbWFrZV9kZWJ1ZyBzY3JpcHQuCgoJKiBvbGUvc3RvcmFnZS5jLCBvbGUvdHlwZWxpYi5jLCBpbmNsdWRlL2QzZC5oLCBpbmNsdWRlL21tc3lzdGVtLmgsIGluY2x1ZGUvb2xlYXV0by5oLCBpbmNsdWRlL3N0b3JhZ2UuaCwgaW5jbHVkZS93aW52ZXJzaW9uLmgsIG9sZS9jb21wb2JqLmMsIG9sZS9vbGUyLmMsIG9sZS9vbGUybmxzLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpeGVkIHRvbnMgb2YgaW5jb21wbGV0ZSBwcm90b3R5cGVzLCBhc3NpZ25tZW50J3Mgb2YgcG9pbnRlciB3aXRoCglkaWZmZXJlbnQgc2lnbmVkbmVzcywgc3VwZXJmbG91cyAnLCcgYW5kICc7JyBpbiBzdHJ1Y3R1cmVzLCB3cm9uZwoJcmV0dXJuLXR5cGVzLCBsb3NlIG9mIGRpZ2l0cyBhbmQgc29tZSBzbWFsbCBnbGl0Y2hlcy4KCgkqIGdyYXBoaWNzL3gxMWRydi94Zm9udC5jLCBpbmNsdWRlL3gxMWZvbnQuaDoKCUFsZXggS29yb2JrYSA8a29yb2JrYUBnYWxheHkuYW1zLnN1bnlzYi5lZHU+CglDbGVhbmVkIHVwIGZvbnQgZW5jb2RpbmcgaGFuZGxpbmcuIEFkZGVkICdJZ25vcmUjJyBvcHRpb24gdG8gdGhlCglbZm9udHNdIHNlY3Rpb24uIEFsc28sIGZpbGUgd2l0aCBjYWNoZWQgbWV0cmljcyBub3cgaGFzIHRoZSB2YWx1ZSBvZgoJJERJU1BMQVkgYXBwZW5kZWQgdG8gdGhlIGZpbGVuYW1lLgoKCSogcHJvZ3JhbXMvY2xvY2svbGFuZ3VhZ2UuYywgcHJvZ3JhbXMvY2xvY2svbWFpbi5jLCBwcm9ncmFtcy9ub3RlcGFkL2RpYWxvZy5jLCBwcm9ncmFtcy9ub3RlcGFkL2xhbmd1YWdlLmMsIHByb2dyYW1zL25vdGVwYWQvbWFpbi5jLCByYy9zeXN0ZXN0LmMsIHdpbmRvd3MvbXVsdGltb24uYywgd2luZG93cy9ub25jbGllbnQuYywgZGxscy9zaGVsbDMyL3NobHZpZXcuYywgZmlsZXMvcHJvZmlsZS5jLCBncmFwaGljcy9wYXRoLmMsIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS9kM2QuaCwgaW5jbHVkZS9kcGxheS5oLCBpbmNsdWRlL2Rzb3VuZC5oLCBpbmNsdWRlL29sZS5oLCBpbmNsdWRlL29sZW9iai5oLCBpbmNsdWRlL3NobG9iai5oLCBpbmNsdWRlL3Zmdy5oLCBpbmNsdWRlL3dpbmVycm9yLmgsIGluY2x1ZGUvd2luaW9jdGwuaCwgbWlzYy9tYWluLmMsIG11bHRpbWVkaWEvYXVkaW8uYywgbXVsdGltZWRpYS9kc291bmQuYywgb2xlL29sZTIuYywgZGVidWdnZXIvc3RhYnMuYywgZGxscy9jb21jdGwzMi9hbmltYXRlLmMsIGRsbHMvY29tY3RsMzIvaGVhZGVyLmMsIGRsbHMvY29tY3RsMzIvaG90a2V5LmMsIGRsbHMvY29tY3RsMzIvbGlzdHZpZXcuYywgZGxscy9jb21jdGwzMi9wYWdlci5jLCBkbGxzL2NvbWN0bDMyL3JlYmFyLmMsIGRsbHMvY29tY3RsMzIvdG9vbGJhci5jLCBkbGxzL2NvbWN0bDMyL3Rvb2x0aXBzLmMsIGRsbHMvY29tY3RsMzIvdHJhY2tiYXIuYywgZGxscy9jb21jdGwzMi90cmVldmlldy5jLCBkbGxzL3NoZWxsMzIvY29udG1lbnUuYywgZGxscy9zaGVsbDMyL2VudW1pZGxpc3QuYywgZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNoYW5nZWQgLy8gY29tbWVudHMgdG8gLyogKi8gc28gV0lORSBjb21waWxlcyB3aXRoIG5vbi1nY2MgY29tcGlsZXJzCglhZ2Fpbi4KCgkqIHdpbmRvd3MvdHR5ZHJ2L2NsaXBib2FyZC5jLCB3aW5kb3dzL3R0eWRydi9ldmVudC5jLCB3aW5kb3dzL3R0eWRydi9pbml0LmMsIHdpbmRvd3MveDExZHJ2L2NsaXBib2FyZC5jLCB3aW5kb3dzL3gxMWRydi9ldmVudC5jLCB3aW5kb3dzL3gxMWRydi9pbml0LmMsIHdpbmRvd3MveDExZHJ2L21vdXNlLmMsIHdpbmRvd3MveDExZHJ2L3duZC5jLCBkZWJ1Z2dlci9kYmcueSwgZ3JhcGhpY3MvZGRyYXcuYywgZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jLCBncmFwaGljcy94MTFkcnYvYnJ1c2guYywgZ3JhcGhpY3MveDExZHJ2L2NsaXBwaW5nLmMsIGdyYXBoaWNzL3gxMWRydi9pbml0LmMsIGluY2x1ZGUvY2xpcGJvYXJkLmgsIGluY2x1ZGUvZGRyYXcuaCwgaW5jbHVkZS9kaXNwbGF5LmgsIGluY2x1ZGUvdHR5ZHJ2LmgsIGluY2x1ZGUvd2luLmgsIGluY2x1ZGUveDExZHJ2LmgsIG9iamVjdHMvcGFsZXR0ZS5jLCB3aW5kb3dzL2RjZS5jLCB3aW5kb3dzL2RpbnB1dC5jLCB3aW5kb3dzL2Rpc3BsYXkuYywgd2luZG93cy9pbnB1dC5jLCB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9zY3JvbGwuYywgd2luZG93cy93aW4uYywgd2luZG93cy93aW5wb3MuYzoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJTW92ZWQgbW9yZSB0aGluZ3MgdG8gdGhlIFgxMSBkcml2ZXIuCgoJKiBpbmNsdWRlL3dpbmdkaS5oLCBvYmplY3RzL2JydXNoLmM6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAbXVsdGltYW5pYS5jb20+CglGaXhlZCB0aGUgcHJvdG90eXBlIG9mIENyZWF0ZURJQlBhdHRlcm5CcnVzaFB0CgoJKiBpbmNsdWRlL3dpbmRvd3MuaDogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QG11bHRpbWFuaWEuY29tPgoJUmVtb3ZlZCB0aGUgQ05feHh4IG1hY3JvcyBzaW5jZSB0aGV5IGFyZSBub3QgdXNlZCwgZG8gbm90IGNvcnJlc3BvbmQgdG8KCWFueSBXaW5kb3dzIGRlZmluZSBhbmQgY29uZmxpY3Qgd2l0aCBNRkMgZGVmaW5lcy4KCXdpbmRvd3MuaCBtdXN0IHByb3ZpZGUgYWxsIHRoZSBkZWZpbml0aW9ucyBjb250YWluZWQgaW4gd2luYmFzZS5oCglTb21lIFh4eDMyIGZ1bmN0aW9ucyBkaWQgbm90IGhhdmUgdGhlIGFzc29jaWF0ZWQgWHh4IG1hY3JvLgoKCSogaW5jbHVkZS93aW50eXBlcy5oOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAbXVsdGltYW5pYS5jb20+CglBZGRlZCBhIHR5cGVkZWYgZm9yIF9faW50NjQgd2hpY2ggaXMgYSBidWlsdGluIFZpc3VhbCBDKysgdHlwZQoJQWRkZWQgYSB0eXBlZGVmIGZvciBQVUlOVAoKCSogaW5jbHVkZS9vYmpiYXNlLmg6IEZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBtdWx0aW1hbmlhLmNvbT4KCVJFRklJRCB3YXMgbm90IGRlZmluZWQuCgoJKiBjb25maWd1cmUuaW4sIGluY2x1ZGUvYWNjb25maWcuaCwgaW5jbHVkZS9jb25maWcuaC5pbiwgaW5jbHVkZS93aW5zb2NrLmgsIG1pc2Mvd2luc29jay5jLCBjb25maWd1cmU6CglQYXZlbCBSb3NraW4gPHBhdmVsX3Jvc2tpbkBnZW9jaXRpZXMuY29tPgoJY29uZmlndXJlIGZpcnN0IGNoZWNrcyB3aGV0aGVyIGl0IGlzIHBvc3NpYmxlIHRvIGNvbXBpbGUgSVBYIGNvZGUgd2l0aAoJR2xpYmMgaGVhZGVycy4gSWYgaXQgZmFpbHMsIG5leHQgY2hlY2sgZGV0ZXJtaW5lcyB3aGV0aGVyIGRpcmVjdCBpbmNsdXNpb24KCW9mIDxsaW51eC9pcHguaD4gd29ya3MuCgoJKiBpbmNsdWRlL3RjaGFyLmg6IEZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBtdWx0aW1hbmlhLmNvbT4KCVByb3ZpZGVzIHRoZSBtYXBwaW5ncy4gTUJDUyBhbmQgVW5pY29kZSBmdW5jdGlvbnMgYXJlIG5vdCBpbXBsZW1lbnRlZC4KCVN0YW5kYXJkIChTQkNTKSBmdW5jdGlvbnMgbWF5IGV4aXN0IG9yIG5vdCwgd2l0aCB0aGUgc2FtZSBvciBhIGRpZmZlcmVudAoJc2VtYW50aWNzLgoKCSogZGxscy9jb21jdGwzMi9pcGFkZHJlc3MuYywgaW5jbHVkZS9jb21tY3RybC5oLCBpbmNsdWRlL2lwYWRkcmVzcy5oOgoJQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCUlQYWRkcmVzcyBjb21tb24gY29udHJvbCBpbXBsZW1lbnRhdGlvbi4gRmlyc3QgdHJ5OyBuZWVkcyBtb3JlIHdvcmsgdG8KCXJlbW92ZSBib3JpbmcgYnVncy4KCkZyaSBEZWMgMjUgMDg6NTU6MTUgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGRsbHMvc2hlbGwzMi9jb250bWVudS5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jLCBpbmNsdWRlL29sZW9iai5oLCBpbmNsdWRlL3NobG9iai5oOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCB0aGUgVEVYVCByZWRlZmluZWQgd2FybmluZ3MuCgoJKiBtc2Rvcy9pbnQxMC5jOiBKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCUhvb2sgaW50byB0aGUgKHN0dWJiZWQpIHJlc2l6ZSBjb2RlIGluIG1zZG9zIGludDEwLgoKCSogY29uc29sZS9pbnRlcmZhY2UuYywgaW5jbHVkZS9jb25zb2xlLmgsIGluY2x1ZGUvb3B0aW9ucy5oLCBsb2FkZXIvbWFpbi5jLCBtaXNjL21haW4uYzoKCUpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJQWRkIHN1cHBvcnQgZm9yIHNlbGVjdGlvbiBvZiBjb25zb2xlIG1vZGUgZHJpdmVycyB0byB1c2UgdXNpbmcgdGhlCgktY29uc29sZSBvcHRpb24uIEN1cnJlbnRseSAidHR5IiwgIm5jdXJzZXMiLCBhbmQgInh0ZXJtIiBhcmUKCXN1cHBvcnRlZC4KCUFkZCBzdHVicyBmb3IgcmVzaXppbmcgdGhlIHNjcmVlbiBvbiBtb2RlIGNoYW5nZXMuCgoJKiBpbmNsdWRlL2RkZW1sLmgsIG1pc2MvZGRlbWwuYywgcmVsYXkzMi91c2VyMzIuc3BlYzoKCUplYW4tQ2xhdWRlIENvdGUgPGplYW4tY2xhdWRlQG1hY2FkYW1pYW4uY29tPgoJUGFydGlhbCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGZvbGxvd2luZyBEREUgQVBJczoKCURkZUNtcFN0cmluZ0hhbmRsZXMsIERkZUNyZWF0ZVN0cmluZ0hhbmRsZSwgRGRlRnJlZVN0cmluZ0hhbmRsZSwKCURkZVF1ZXJ5U3RyaW5nLCBEZGVVbmluaXRpYWxpemUuCgpUaHUgRGVjIDI0IDE2OjU5OjE3IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBvbGUvTWFrZWZpbGUuaW4sIG9sZS9wYXJzZWR0LmMsIG9sZS9wYXJzZWR0LmgsIG9sZS92YXJpYW50LmM6CglKZWFuLUNsYXVkZSBDb3RlIDxqZWFuLWNsYXVkZUBtYWNhZGFtaWFuLmNvbT4KCUFkZGVkIFZhckRhdGVGcm9tU3RyIEFQSS4KCgkqIGRsbHMvY29tY3RsMzIvdHJhY2tiYXIuYywgaW5jbHVkZS90cmFja2Jhci5oOgoJQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCS0gVG9vbHRpcCBzdXBwb3J0CgktIFZlcnRpY2FsIHRyYWNrYmFycyBzdXBwb3J0ZWQgbm93CgktIFRCU19CT1RIIHN1cHBvcnQgKGdvZXMgYWxvbmcgd2l0aCBwYXJ0aWFsIGNsZWFudXAgb2YgZHJhd2luZyBjb2RlKQoJLSBVc2UgQ09NQ1RMMzIgaGVhcCBpbnN0ZWFkIG9mIHN5c3RlbSBoZWFwCgoJKiBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2RkcmF3Lmg6CglQZXRlciBIdW5uaXNldHQgPGh1bm5pc2VAbm9ydGVsbmV0d29ya3MuY29tPgoJQWRkZWQgYWxsIGNsaXBwZXImM2Qgc3R1YnMuCglTdGFydGluZyBDb2xvcktleSBzdXBwb3J0LgoJRml4ZWQgdHJhY2Ugc3RhdGVtZW50IGluIERpcmVjdERyYXdDcmVhdGUgYXMgZm9ybWF0dGluZyB3YXNuJ3QgY29ycmVjdC4KCUNoYW5nZWQgInJldHVybiAwOyIgdG8gInJldHVybiBERF9PSyIgb3IgInJldHVybiBTX09LIiBhcyBhcHByb3ByaWF0ZS4KCUFkZGVkIFN1cmZhY2VFbnVtIGR3RmxhZ3MuCgoJKiBpbmNsdWRlL2RwbGF5LmgsIG11bHRpbWVkaWEvZHBsYXkuYzoKCVBldGVyIEh1bm5pc2V0dCA8aHVubmlzZUBub3J0ZWxuZXR3b3Jrcy5jb20+CglBZGRlZCBtYWNyb3MgdG8gaGVhZGVyIGZpbGUgZm9yIGVhc2llciBmdW5jdGlvbiBjYWxsaW5nLgoJQ2hhbmdlZCBpbXBsZW1lbnRhdGlvbiBhIGxpdHRsZSBiaXQuCglBZGRlZCBzdHVicyBmb3IgZHBsYXkzLiBTdGlsbCBuZWVkIHRvIGJyZWFrIGludG8gQSBhbmQgVyB2ZXJzaW9ucy4KCgkqIHdpbjMyL2ZpbGUuYzogUGV0ZXIgSHVubmlzZXR0IDxodW5uaXNlQG5vcnRlbG5ldHdvcmtzLmNvbT4KCUNyZWF0ZUZpbGUzMkEgd2FzIG9ubHkgYWxsb3dpbmcgY29uc29sZSBvcGVucyBvbiBDT05JTiQvT1VUJC4gVGhpcwoJaGFzIGJlZW4gY2hhbmdlZCB0byBoYXZlIGEgY2FzZSBpbnNlbnNpdGl2ZSBjb21wYXJlLgoKCSogY29udHJvbHMvbGlzdGJveC5jOiBHZXJhcmQgUGF0ZWwgPGcucGF0ZWxAd2FuYWRvby5mcj4KCURvbid0IHNlbmQgT0RBX0VOVElSRSBmb3IgZW1wdHkgbGlzdGJveGVzIChMSVNUQk9YX1BhaW50KS4KCgkqIGluY2x1ZGUvd2luYmFzZS5oLCByZWxheTMyL2tlcm5lbDMyLnNwZWMsIHdpbjMyL2tlcm5lbDMyLmM6CglKZWFuLUNsYXVkZSBDb3RlIDxqZWFuLWNsYXVkZUBtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGVkIHRoZSBHZXRCaW5hcnlUeXBlIEFQSSBmdW5jdGlvbi4KCgkqIGxvYWRlci9kb3MvZG9zbW9kLmMsIGxvYWRlci9kb3MvZG9zbW9kLmgsIGxvYWRlci9kb3MvZG9zdm0uYywgbG9hZGVyL2Rvcy9tb2R1bGUuYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQWRkZWQgc29tZSBuZXcgZG9zbW9kIGNvbW11bmljYXRpb24gcG9zc2liaWxpdGllcywgaW5jbHVkaW5nCglhY3RpdmF0aW5nIGEgZG9zbW9kLXNwZWNpZmljIHNldGl0aW1lcigpLCBhbmQgdGhlIGNhcHR1cmUgb2Ygc29tZQoJY29tbW9uIHNpZ25hbHMsIHdoaWNoIGlzIHJldHVybmVkIHRvIFdpbmUgKHByZXZpb3VzbHkgYSBTSUdJTEwKCXdvdWxkIGp1c3QgY2F1c2UgYSAiZG9zbW9kIHN5bmMgbG9zdCIgd2l0aG91dCBleHBsYW5hdGlvbiwgbm93IGl0CglpbnZva2VzIHRoZSBXaW5lIGRlYnVnZ2VyKS4gSW52b2tlcyBpbnQgMDggdXBvbiByZWNlaXB0IG9mIGRvc21vZAoJU0lHQUxSTSwgdGh1cyBzaW11bGF0aW5nIHRoZSBET1MgdGltZXIuIE1hZGUgRE9TIGludGVycnVwdCBjYWxscwoJYmUgcmVwb3J0ZWQgYnkgLWRlYnVnbXNnICtyZWxheSBpbnN0ZWFkIG9mIC1kZWJ1Z21zZyAraW50LiBBbmQKCWZpeGVkIG5vbi1pMzg2IGNvbXBpbGF0aW9uIG9mIGRvc21vZC4gKEFueXRoaW5nIGVsc2U/ISkKCgkqIGxvYWRlci9tYWluLmMsIHdpbmRvd3Mvd2luLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCURlc2t0b3Agd2luZG93IHF1ZXVlIGhhbmRsaW5nIGFkYXB0ZWQuCgoJKiB3aW5kb3dzL2NsaXBib2FyZC5jLCB3aW5kb3dzL2hvb2suYywgd2luZG93cy90aW1lci5jLCB3aW5kb3dzL3dpbnBvcy5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglRdWV1ZSBoYW5kbGluZyBhZGFwdGVkIHRvIG5ldyBxdWV1ZSByb3V0aW5lcy4KCgkqIHdpbmRvd3MvbWVzc2FnZS5jLCB3aW5kb3dzL3F1ZXVlLmMsIGlmMTYzMi91c2VyLnNwZWMsIGluY2x1ZGUvcXVldWUuaCwgaW5jbHVkZS90YXNrLmg6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGVkIHN0dWIgZm9yIEluaXRUaHJlYWRJbnB1dC4KCVVzZSBHZXRUaHJlYWRRdWV1ZS9HZXRGYXN0UXVldWUgaW5zdGVhZCBvZiBHZXRUYXNrUXVldWUuCgoJKiBsb2FkZXIvdGFzay5jLCBtaXNjZW11L21haW4uYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJVXNlIENhbGxvdXQgdGFibGUgaW5zdGVhZCBvZiBkaXJlY3QgR2V0UHJvY0FkZHJlc3MuCglVc2VyWWllbGQgbW92ZWQgdG8gVVNFUi4KCgkqIGluY2x1ZGUvY2FsbGJhY2suaCwgbWlzYy9jYWxsYmFjay5jLCBpZjE2MzIvdGh1bmsuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQ2FsbG91dCB0YWJsZSAoZm9yIEtFUk5FTC0+VVNFUiBjYWxscykgYWRkZWQuCglDYWxsYmFja3MtPkNhbGxQb3N0QXBwTWVzc2FnZVByb2MgcmVtb3ZlZC4KCgkqIG1pc2MvY2FsbGJhY2suYywgd2luZG93cy94MTFkcnYvZXZlbnQuYywgaW5jbHVkZS9jYWxsYmFjay5oLCBpbmNsdWRlL3F1ZXVlLmgsIGluY2x1ZGUvdGFzay5oLCBsb2FkZXIvdGFzay5jLCBpZjE2MzIvdGh1bmsuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSGFuZGxlIG5vbi1oYXJkd2FyZSBYIGV2ZW50cyBjb3JyZWN0bHkgd2l0aCBuYXRpdmUgVVNFUgoJKHJlbW92ZWQgcmVmZXJlbmNlIHRvIE1FU1NBR0VRVUVVRSBmcm9tIEtFUk5FTCBjb2RlKS4KCUhhbmRsZSBFeHBvc2UgZXZlbnRzIHdpdGggbmF0aXZlIFVTRVIuCgoJKiBtaXNjL2NydGRsbC5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQmV0dGVyIF91bHRvYSgpLgoKCSogd2luMzIvdGltZS5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJRml4IHNtYWxsIHByb2JsZW0gaW4gR2V0VGltZVpvbmVJbmZvcm1hdGlvbigpLgoKCSogd2luZG93cy94MTFkcnYva2V5Ym9hcmQuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUxvd2VzdCBzY2FuIGNvZGUgc2VlbXMgdG8gYmUgMSwgbm90IHplcm8uCgoJKiBncmFwaGljcy9kZHJhdy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVN0dWJzIGZvciBJRGlyZWN0M0QoMik6OkNyZWF0ZUxpZ2h0IGFuZCBDcmVhdGVEZXZpY2UgdG8gYXZvaWQgY3Jhc2hlcy4KCgkqIGRsbHMvbnRkbGwvcnRsLmMsIHJlbGF5MzIvbnRkbGwuc3BlYywgZGxscy9udGRsbC9udC5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgc3R1YnMuCgoJKiBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpeGVzIGNyYXNoIHdoZW4gcnVubmluZyB3aXRob3V0IGV4dGVybmFsIHNoZWxsMzIuZGxsLgoKCSogd2luZG93cy93aW5wcm9jLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTW9yZSBtZXNzYWdlcyBbTEJfKixFTV8qXSB0cmFuc2xhdGVkIDMyQSBmcm9tL3RvIDMyVy4KCgkqIHJlbGF5MzIvdXNlcjMyLnNwZWM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRGVzdCBidWZmZXIgd2FzIHByaW50ZWQgb3V0IGFzIHN0ci4KCgkqIG1pc2MvdmVyLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJR2V0dGluZyBzdHJpbmdzIHdpdGggVmVyUXVlcnlWYWx1ZTMyVyB3YXMgYnJva2VuLiBDb21wbGV0ZQoJcmVjb25zdHJ1Y3Rpb24gb2YgdGhlIGZ1bmN0aW9uLgoKCSogbWlzYy90b29saGVscC5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeCBudW1iZXIgYW5kIHR5cGUgb2YgYXJncyBpbiBkZWJ1Z2dpbmcgc3RhdGVtZW50cy4KCgkqIG9sZS9zdG9yYWdlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQG11ZC5kZT4KCUlTdG9yYWdlMzIgdnRhYmxlIHdhcyBtaXNzaW5nIDMgc3R1YiBlbnRyaWVzLgoKRnJpIERlYyAxOCAxNzozODozOSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS93aW5nZGkuaCwgb2JqZWN0cy9mb250LmMsIHJlbGF5MzIvZ2RpMzIuc3BlYzoKCURvdWdsYXMgUmlkZ3dheSA8cmlkZ3dheUB3aW5laHEuY29tPgoJRG9jdW1lbnRhdGlvbiBmb3IgVHJhbnNsYXRlQ2hhcnNldEluZm8uCgoJKiBkbGxzL3duYXNwaTMyL3dpbmFzcGkzMi5jLCBpZjE2MzIvd3Byb2NzLnNwZWMsIGRsbHMvd2luYXNwaS93aW5hc3BpMTYuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCU1ha2UgdGhlIERPU0FTUEkgcGFydCB1c2UgdGhlIGV4Y2VsbGVudCBEUE1JIFJNQ0IgaW1wbGVtZW50YXRpb24gZG9uZQoJYnkgT3ZlIEthYXZlbiwgd2hpY2ggbWFrZXMgdGhlIGNvZGUgX211Y2hfIGNsZWFuZXIuCgoJKiBNYWtlLnJ1bGVzLmluLCBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW46CglUb2RkIFZpZXJsaW5nIDx0dkBwb2JveC5jb20+CglVc2UgLWx3aW5lIGZvciBsaW5raW5nLgoKCSogd2luZG93cy9tZXNzYWdlLmMsIHdpbmRvd3MvcXVldWUuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBhbHdheXMgY2xlYXIgUVNfLi4uIGZyb20gKmJvdGgqIGNoYW5nZUJpdHMgYW5kIHdhaXRCaXRzLgoJQnVnZml4OiBxdWV1ZS0+aFNlbmRpbmdUYXNrIGlzICpxdWV1ZSogaGFuZGxlLCBub3QgdGFzayBoYW5kbGUuCgoJKiBpZjE2MzIvc3RvcmFnZS5zcGVjLCBpbmNsdWRlL2ludGVyZmFjZXMuaCwgaW5jbHVkZS9vYmpiYXNlLmgsIGluY2x1ZGUvc3RvcmFnZS5oLCBvbGUvaWZzLmMsIG9sZS9zdG9yYWdlLmM6CglGcmFu529pcyBHb3VnZXQgPGdvdWdldEBtZXRhaW50ZWdyYXRpb24ubmV0PgoJRmlyc3Qgc3RlcCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIGNhbGwgQ09NIGludGVyZmFjZXMgZnJvbSBDKysgY29kZSBpbgoJV2luZWxpYi4KCgkqIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYywgaW5jbHVkZS90cmVldmlldy5oOgoJQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCVByZWxpbWluYXJ5IHRvb2x0aXAgc3VwcG9ydC4KCVdNX1NFVEZPTlQvR0VURk9OVCBhZGRlZC4KCVNvbWUgYnVnIGZpeGVzLgoJVXNlIENPTUNUTDMyIGhlYXAgaW5zdGVhZCBvZiBzeXN0ZW0gaGVhcC4KCgkqIGdyYXBoaWNzL3BhaW50aW5nLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJSW1wbGVtZW50ZWQgUG9seWxpbmVUby4KCgkqIHJlbGF5MzIvbnRkbGwuc3BlYzogQWRyaWFuIEhhcnZleSA8YWRyaWFuQHNlbGVjdC5jb20uYXU+CglUaGUgWncuLi4gRnVuY3Rpb25zIGluIG50ZGxsLmRsbCBhcmUganVzdCBhbHRlcm5hdGUgZW50cnkKCXBvaW50cyBmb3IgdGhlIHNhbWUgZnVuY3Rpb25zIGFzIHRoZSBOdC4uLiBmdW5jdGlvbiBvZiB0aGUKCXNhbWUgbmFtZXMuICBDaGFuZ2VkIG50ZGxsLnNwZWMgdG8gbWF0Y2ggdGhpcy4KCgkqIGluY2x1ZGUvbW9kdWxlLmgsIGluY2x1ZGUvcGVfaW1hZ2UuaCwgbG9hZGVyL21vZHVsZS5jLCBsb2FkZXIvcGVfaW1hZ2UuYywgcmVsYXkzMi9idWlsdGluMzIuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJUmVvcmdhbml6ZWQgUEUgbW9kdWxlIGxvYWRpbmcgdG8gcHJlcGFyZSBmb3IgZWxmLWRsbCBsb2FkZXIuCglXSU5FX01PRFJFRiBjcmVhdGlvbiBtb3ZlZCB0byBvbmUgY2VudHJhbCBsb2NhdGlvbi4KCUJ1Z2ZpeDogY29ycmVjdGx5IHNlbGVjdCBuYXRpdmUvYnVpbHQtaW4gdmVyc2lvbiBpZiAuRExMCglleHRlbnNpb24gaXMgbWlzc2luZyBpbiBMb2FkTGlicmFyeSBjYWxsLgoKCSogbXVsdGltZWRpYS9tbXN5c3RlbS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUNoYW5nZWQgZXJyb3IgdmFsdWVzIE1DSV9JTlRFUk5BTCB0byB0aGVpciBjb3JyZWN0IHZhbHVlcy4KCgkqIG11bHRpbWVkaWEvbWNpd2F2ZS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVJlbW92ZWQgd2FybmluZy4KCgkqIG11bHRpbWVkaWEvbWNpc3RyaW5nLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJTm8gbG9uZ2VyIHNlbmRpbmcgZGlyZWN0bHkgbWVzc2FnZXMgdG8gRHJpdmVyUHJvYyBidXQgcmF0aGVyIGdvIHRocm91Z2gKCU1DSSBsYXllciAocmVxdWlyZWQgZm9yIG9wZW4vY2xvc2UpLgoKCSogbXVsdGltZWRpYS9tY2ljZGEuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglSZW1vdmVkIGluY29ycmVjdCBwYXRjaCBmb3IgTUNJX09QRU4gYW5jIE1DSV9DTE9TRSBwYXJhbWV0ZXJzICh0aGFua3MgdG8gUm9iZXJ0IFJpZ2dzCglmb3IgcG9pbnRpbmcgb3V0IHRoZSBidWcsIHNlZSB0aGUgZml4IGluIG1jaXN0cmluZy5jKQoJRml4ZWQgTUNJIHNlZWtpbmcgb24gQ0QgYXVkaW8uCgoJKiBpbmNsdWRlL3dpbmVycm9yLmg6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YnMgZm9yIFdhaXROYW1lZFBpcGVbQXxXXS4KCgkqIGRsbHMvc2hlbGwzMi9jbGFzc2VzLmMsIGRsbHMvc2hlbGwzMi9kYXRhb2JqZWN0LmMsIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGluY2x1ZGUvc2hlbGwuaCwgcmVsYXkzMi9zaGVsbDMyLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNtYWxsIGZpeGVzLgoKCSogZGxscy9zaGVsbDMyL3NoZWxsb3JkLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVN0dWIgQ29udHJvbF9GaWxsQ2FjaGVfUnVuRExMLgoKCSogZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTSEdldEZpbGVJbmZvMzJBOiBnZXQgU0hHRklfU1lTSUNPTklOREVYIGltcGxlbWVudGVkLgoKCSogZGxscy9zaGVsbDMyL3BpZGwuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglJTEFwcGVuZCBzZWVtcyB0byB3b3JrIG5vdy4KCgkqIHJlbGF5MzIva2VybmVsMzIuc3BlYywgd2luMzIva2VybmVsMzIuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YnMgZm9yIFdhaXROYW1lZFBpcGVbQXxXXS4KClR1ZSBEZWMgMTUgMTg6MDQ6NTggMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGZpbGVzL2RpcmVjdG9yeS5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeCBHZXRUZW1wUGF0aDMyIGlmIGNvdW50PTAuCgoJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9jb25maWcuaC5pbiwgaW5jbHVkZS9tdWx0aW1lZGlhLmgsIG11bHRpbWVkaWEvYXVkaW8uYywgbXVsdGltZWRpYS9kc291bmQuYywgbXVsdGltZWRpYS9pbml0LmMsIG11bHRpbWVkaWEvbWNpY2RhLmMsIG11bHRpbWVkaWEvbWNpbWlkaS5jLCBtdWx0aW1lZGlhL21pZGkuYywgbXVsdGltZWRpYS9taXhlci5jLCBtdWx0aW1lZGlhL21tYXV4LmM6CglUb2RkIFZpZXJsaW5nIDx0dkBwb2JveC5jb20+CgktIGFkZCAtbG9zc2F1ZGlvIGlmIG5lZWRlZCwgYW5kIGEgY2hlY2sgZm9yIDxzb3VuZGNhcmQuaD4sIHRvIGNvbmZpZ3VyZS5pbgoJICAocnVuIGF1dG9jb25mIGFmdGVyIHRoaXMpLiAgTm90ZSB0aGF0IHRoZSBjaGVjayBoYXMgYmVlbiBhbHRlcmVkIHRvIGJyZWFrCgkgIG91dCBvZiB0aGUgQUNfQ0hFQ0tfSEVBREVSUyBhZnRlciB0aGUgZmlyc3QgbWF0Y2ggLSB0aGlzIGlzIHNvCgkgIDxzeXMvc291bmRjYXJkLmg+LCBpZiBmb3VuZCBvbiBOZXRCU0QgKGEgYHJlYWwnIE9TUyksIHdpbGwgbm90IGNvbmZsaWN0CgkgIHdpdGggdGhlIGVtdWxhdGVkIG9zc2F1ZGlvLgoJLSBjaGVjayBmb3IgPHNvdW5kY2FyZC5oPiBhbG9uZyB3aXRoIHRoZSBvdGhlciB0d28gaW4gYSBtdXR1YWxseS1leGNsdXNpdmUKCSAgbWFubmVyIGluIHRoZSB2YXJpb3VzICouYyBmaWxlcyB0aGF0IG5lZWQgaXQ7IGNoYW5nZSBpbmNsdWRlIG9mCgkgICJtbXN5c3RlbS5oIiB0byAibXVsdGltZWRpYS5oIiBzbyB0aGlzIGxvZ2ljIGlzIGFsbCBpbiBvbmUgcGxhY2UKCS0gY2hhbmdlIG1jaWNkYS5jIHRvIGFsbG93IGZvciBDRCBhdWRpbyBtYW5pcHVsYXRpb24gb24gTmV0QlNELiAgVGhpcwoJICBpbmNsdWRlczoKCSAgKiBjaGFuZ2luZyBpb2N0bCgpIGNhbGxzIHRvIGJlIE5PTi1TUExJVCB3aXRoIGV4YWN0bHkgMyBhcmdzOyBvbiBOZXRCU0QKCSAgICBvc3NhdWRpbywgaW9jdGwoKSBpcyAjZGVmaW5lZCB0byBiZSBfb3NzX2lvY3RsIGJ5IDxzb3VuZGNhcmQuaD4sIGFuZAoJICAgIG5laXRoZXIgc3BsaXR0aW5nIHdpdGggIy1kaXJlY3RpdmVzIG5vciBhIHR3by1hcmcgaW9jdGwgd29yazsKCSAgKiBjaGFuZ2luZyB0aGUgI2lmIGxvZ2ljIHRvIGFsbG93IGJvdGggRnJlZUJTRCBhbmQgTmV0QlNEIHRvIHNoYXJlIHRoZQoJICAgIGFwcHJvcHJpYXRlIGNvZGUgYmxvY2tzCgktIGJsb2NrIG91dCBNSURJIGNvZGUgZm9yIE5ldEJTRCAoaW5pdC5jKSBhbmQvb3IgbWlzc2luZyBTTkRDVExfTUlESV9JTkZPCgkgIChtaWRpLmMsIG1jaW1pZGkuYykuICBOZXRCU0QncyBPU1MgZW11bGF0aW9uIGRvZXMgbm90ICh5ZXQpIHN1cHBvcnQgTUlESS4KCVRoYW5rcyBnbyB0byBteWNyb2Z0QG5ldGJzZC5vcmcgZm9yIHRoZSA5OSUgYnVsayBvZiB0aGlzIHdvcmsuCgoJKiB0c3gxMS9YMTFfY2FsbHMsIHRzeDExL3RzX3h1dGlsLmMsIHdpbmRvd3MveDExZHJ2L3duZC5jLCBpbmNsdWRlL3RzX3h1dGlsLmg6CglEaXJrIFRoaWVyYmFjaCA8dGhpZXJiYWNoQG1hdGhlbWF0aWsudHUtZGFybXN0YWR0LmRlPgoJU2V0IHRoZSBjbGFzcyBoaW50cyBmb3IgbWFuYWdlZCB3aW5kb3dzLgoKCSogZmlsZXMvZG9zX2ZzLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQnVnZml4OiBHZXRGdWxsUGF0aE5hbWUgc2V0cyBscEZpbGVQYXJ0IG9ubHkgd2hlbiB0aGUgbGFzdCBlbGVtZW50Cglkb2VzIG5vdCBlbmQgd2l0aCAnXCcuCgoJKiB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy93aW4uYywgaW5jbHVkZS9jb21tY3RybC5oLCBpbmNsdWRlL2NvbW1kbGcuaCwgaW5jbHVkZS9kZGVtbC5oLCBpbmNsdWRlL21vdXNlLmgsIGluY2x1ZGUvc2hsb2JqLmgsIGluY2x1ZGUvd2luYmFzZS5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaW5jbHVkZS93aW5lcnJvci5oLCBpbmNsdWRlL3dpbmdkaS5oLCBpbmNsdWRlL3dpbnR5cGVzLmgsIG1pc2MvZGRlbWwuYywgb2JqZWN0cy9iaXRtYXAuYywgb2JqZWN0cy9icnVzaC5jLCBvYmplY3RzL2RjLmMsIG9iamVjdHMvZm9udC5jLCBvYmplY3RzL2dkaW9iai5jLCByZWxheTMyL2dkaTMyLnNwZWMsIHJlbGF5MzIvdXNlcjMyLnNwZWMsIGNvbnRyb2xzL21lbnUuYywgZGxscy9jb21jdGwzMi9jb21tY3RybC5jLCBncmFwaGljcy9iaXRibHQuYywgZ3JhcGhpY3MvZXNjYXBlLmMsIGdyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuYywgZ3JhcGhpY3MvcGFpbnRpbmcuYywgZ3JhcGhpY3MvcGF0aC5jLCBpZjE2MzIvdXNlci5zcGVjOgoJUGF1bCBRdWlubiA8cGF1bHFAQ09SRUwuQ0E+CglMb3RzIG9mIG5ldyBkZWZpbmVzIGFuZCBzdHVicy4KCgkqIE1ha2UucnVsZXMuaW4sIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKCVRvZGQgVmllcmxpbmcgPHR2QHBvYm94LmNvbT4KCVRoZXNlIHBhdGNoZXMgYWRkIHN1cHBvcnQgZm9yIC0tZW5hYmxlLWRsbCBvbiBOZXRCU0QsIGFuZCBtYXkgZXZlbiBkbyBzbyBmb3IKCUZyZWVCU0QgYS5vdXQuICBOb3csIE5ldEJTRCBjYW4gdXNlIGxpYndpbmUgYXMgYSBzaGFyZWQgb2JqZWN0LiAgVGhhbmtzIHRvCglteWNyb2Z0QG5ldGJzZC5vcmcgZm9yIGRvaW5nIHRoaXMgd29yayEKCgkqIHRvb2xzL3dyYy93cml0ZXJlcy5jOiBUb2RkIFZpZXJsaW5nIDx0dkBwb2JveC5jb20+CglHbG9iYWwgY29uc3RydWN0b3JzIHVzaW5nIGAuc2VjdGlvbiAuY3RvcnMnIGFyZSBib2d1cyBmb3IgTmV0QlNEJ3MKCWFzc2VtYmxlci4gVXNlIHRoZSBhcHByb3ByaWF0ZSBgLnN0YWJzJyB3aGVuIG9uIE5ldEJTRC4KCgkqIG9sZS92YXJpYW50LmM6IFRvZGQgVmllcmxpbmcgPHR2QHBvYm94LmNvbT4KCVVuZGVmaW5lZCBDSEFSX01BWCBhbmQgQ0hBUl9NSU4gKCNkZWZpbmVkIGJ5IE5ldEJTRCdzIHN5c3RlbSBoZWFkZXJzKS4KCUZpeGVkIHNvbWUgY29uc3RhbnRzIHRoYXQgYXJlIHRvbyBiaWcgZm9yIGEgcGxhaW4gYGludCcuCgoJKiBvbGUvdmFyaWFudC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNoZWNrIGZvciBNQVhGTE9BVCBpZiBGTFRfTUFYIGlzbid0IHRoZXJlLgoKCSogZ3JhcGhpY3MvcHNkcnYvTWFrZWZpbGUuaW46IFRvZGQgVmllcmxpbmcgPHR2QHBvYm94LmNvbT4KCWdyYXBoaWNzL3BzZHJ2IGZvcmdldHMgdG8gcHVsbCBpbiBARExMRkxBR1NALCBhbmQgc28gaXMgY29tcGlsZWQgbm9uLVBJQyBpZgoJdXNpbmcgLS1lbmFibGUtZGxsLgoKCSogaW5jbHVkZS93aW5nZGkuaCwgaW5jbHVkZS93aW50eXBlcy5oLCBpbmNsdWRlL3dpbnVzZXIuaCwgaW5jbHVkZS93aW5kb3dzLmg6CglWZWtzbGVyIE1pY2hhZWwgPG12ZWtzbGVyQHRlY2h1bml4LnRlY2huaW9uLmFjLmlsPgoJTW92ZSBkZWNsYXJhdGlvbnMgZnJvbSB3aW5kb3dzLmggdG8gd2luZ2RpLmggYW5kIHdpbnVzZXIuaC4KCk1vbiBEZWMgMTQgMTg6MTU6MTEgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbjMyL2NvbnNvbGUuYywgZmlsZXMvTWFrZWZpbGUuaW4sIGZpbGVzL2FzeW5jLmMsIGZpbGVzL2ZpbGUuYywgaW5jbHVkZS9hc3luYy5oLCBpbmNsdWRlL2ZpbGUuaCwgbG9hZGVyL3NpZ25hbC5jLCBtaXNjL3dpbnNvY2tfZG5zLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU1hZGUgYXN5bmMgSU8gKFNJR0lPKSBzdHVmZiBmcm9tIFdJTlNPQ0sgZ2VuZXJpYyB1c2VhYmxlLgoJQWRkZWQgYXN5bmMgSU8gc3VwcG9ydCB0byBGSUxFIGFuZCBDT05TT0xFIG9iamVjdHMuCgoJKiBtaXNjL3dpbnNvY2suYzogU3RlcGhlbiBMYW5nYXNlayA8dm9ybG9uQGRvZGRzLm5ldD4KCVByZXZlbnQgc2VnZmF1bHQgaW4gc2V0c29ja29wdCB3aGVuIG9wdG5hbWUgaXMgU09fTElOR0VSIGFuZCBvcHR2YWwgaXMKCW51bGwuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIHJlbGF5MzIvc2hlbGwzMi5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTb21lIGNsZWFudXAuCgoJKiBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNITWFwUElETFRvU3lzdGVtSW1hZ2VMaXN0SW5kZXggdHJ5J3MgdG8gZGV0ZXJtaW5lIGFuZCBsb2FkIHRoZSBleGFjdAoJaWNvbiBmb3IgZmlsZXMgKGJ5IHR5cGUpIG5vdy4KCgkqIGRsbHMvc2hlbGwzMi9jbGFzc2VzLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IEhDUl9HZXREZWZhdWx0SWNvbiAoaW50ZXJuYWwpLgoKCSogaW5jbHVkZS9kb3NleGUuaCwgbG9hZGVyL2Rvcy9kb3N2bS5jLCBsb2FkZXIvZG9zL21vZHVsZS5jLCBtc2Rvcy9kb3NtZW0uYywgbXNkb3MvZHBtaS5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglNb3ZlZCBEUE1JIHdyYXBwZXIgYWxsb2NhdGlvbiBjb2RlIHRvIGRvc21lbS5jIHRvIFJFQUxMWSBtYWtlIHRoZQoJUk1jYWxsIHNob3J0Y3V0cyBpbmRlcGVuZGVudCBvZiBkb3Ntb2QuIFNTIGhhZCBiZWVuIGxlZnQgb3V0IG9mCgl0aGUgUkVBTE1PREVDQUxMIGNvcHkgcm91dGluZXMgZm9yIHNvbWUgcmVhc29uLCBmaXhlZCBub3cuIEFsc28KCWNsZWFuZWQgdXAgYSBmZXcgY29tcGlsZXIgd2FybmluZ3MuCgoJKiBncmFwaGljcy94MTFkcnYveGZvbnQuYzogSWFuIFBpbGNoZXIgPHBpbGNoZXJAY29uY2VudHJpYy5uZXQ+CglBZGRlZCBhYmlsaXR5IHRvIHNwZWNpZnkgWCBmb250cyB1c2VkIGZvciBIZWx2IGFuZCBUbXMgUm1uIHR5cGVmYWNlcwoJd2l0aCBEZWZhdWx0U2VyaWYgYW5kIERlZmF1bHRTYW5zU2VyaWYgSU5JIGtleXMuCgoJKiB0b29scy93cmMvcGFyc2VyLnksIHRvb2xzL3dyYy93cmMuaCwgdG9vbHMvd3JjL3dyaXRlcmVzLmMsIHRvb2xzL3dyYy9DSEFOR0VTOgoJQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQHBhbnRlci5zb2NpLmFhdS5kaz4KCS0gQWRkZWQgYSBnbG9iYWwgbGFiZWwgZm9yIGVsZi1kbGwgbGlua2luZyBhbmQgYSBsb25nIHdpdGggdGhlIHJlc291cmNlCgkgIHNpemUgYW5kIGEgbG9uZyB3aXRoIHRoZSBkaXJlY3Rvcnkgc2l6ZS4KCS0gS2lsbGVkIGFuIGFubm95aW5nIHdhcm5pbmcgc2luY2UgdmVyc2lvbiAxLjAuMCBpbiBwYXJzZXIueSBhYm91dCBhCgkgIHZhciBiZWluZyB1c2VkIGJlZm9yZSBpbml0LgoKCSogaW5jbHVkZS9zaGxvYmouaCwgZGxscy9zaGVsbDMyL3NoZWxsbGluay5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvbGUuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQWRkcyB0aGUgSVBlcnNpc3RGaWxlIEludGVyZmFjZSB0byBJU2hlbGxMaW5rW1ddIGFuZCBnYXZlIGJvdGggb3duCglJQ2xhc3NGYWN0b3J5cy4KCgkqIHdpbjMyL2NvbnNvbGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CgkoUmVhZENvbnNvbGUzMkEpOiBzbWFsbCBhbmQgc3R1cGlkIGJ1ZyBmaXhlZAoJKFdyaXRlQ29uc29sZU91dHB1dCk6IGJ1ZyBmaXhlZCAoYXR0cmlidXRlcyBtYXkgY2hhbmdlIHdpdGhpbiBsaW5lcykKCWFuZCBlbmhhbmNlZCBzcGVlZHdpc2UgYnkgdXNpbmcgYnVmZmVyaW5nLgoJKENPTlNPTEVfc3RyaW5nXzJfSVIpOiBlbmhhbmNlZCwgbm93IGdldHMgc2NhbmNvZGVzIGFuZCB2aXJ0dWFsa2V5Y29kZXMKCgkqIG1pc2MvY3J0ZGxsLmMsIHJlbGF5MzIvY3J0ZGxsLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCV91bHRvYSBpbXBsZW1lbnRlZC4KCgkqIGNvbnRyb2xzL3N0YXRpYy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNtYWxsIGhhY2sgdG8gZ2V0IHJpZCBvZiBhbm5veWluZyBlcnI6cmVzb3VyY2U6IG1lc3NhZ2UgZm9yCglNZXNzYWdlQm94ZXMuCgoJKiByZWxheTMyL2Rzb3VuZC5zcGVjOiBJYW4gU2NobWlkdCA8aXJzbWFuQGlhZy5uZXQ+CglGaXggb2ZmLWJ5LTEgZXJyb3IgaW4gRGlyZWN0U291bmQgb3JkaW5hbHMuIFRoYW5rcyB0byBSb2JlcnQgUmlnZ3MgZm9yCgl0aGUgcG9pbnRlci4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IFN0ZXBoZW4gQ3Jvd2xleSA8Y3Jvd0BkZWJpYW4ub3JnPgoJU2F2ZSB0aGUgb3JpZ2luYWwgdmlkZW8gbW9kZSBiZWZvcmUgZ29pbmcgZnVsbHNjcmVlbiBhbmQgcmVzdG9yZSBpdAoJd2hlbiB0aGUgbGFzdCBEaXJlY3REcmF3X1JlbGVhc2UgaXMgY2FsbGVkLiBBbHNvIGZpeCBhIHByb2JsZW0gd2hlcmUKCXRoZSB2aWV3cG9ydCB3YXNuJ3Qgc2V0IHRvIDAsMC4KCgkqIGNvbnNvbGUveHRlcm0uYzogSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglNYWRlIG1vcmUgY3Jvc3MtcGxhdGZvcm0gYnkgY2hhbmdpbmcgLT5fZmlsZW5vIHRvIGZpbGVubygpLgoKCSogd2luZG93cy93aW4uYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglGaXggdGhlIFotb3JkZXIgb2YgbWF4aW1pemVkL21pbmltaXplZCBjaGlsZCB3aW5kb3dzLgoKCSogZ3JhcGhpY3MveDExZHJ2L3hmb250LmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVhMRkRzIHNob3VsZCBiZSB3ZWxsLWZvcm1lZCAoMTQgaHlwaGVucykgdG8gbWF0Y2ggc2NhbGFibGUgZm9udHMuCglTdG9wIHNsYW50IGZpZWxkIGJlY29taW5nIHdpbGRjYXJkZWQgdG9vIGVhcmx5LgoKCSogd2luZG93cy9mb2N1cy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCShGT0NVU19Td2l0Y2hGb2N1cykgY2hlY2sgZm9yIHBGb2N1c1RvID09IE5VTEwgaW5zdGVhZCBvZiBoRm9jdXNUbz09MC4KCgkqIG9sZS9vbGUybmxzLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJSGFjayBPTEVfR2V0Rm9ybWF0KiB0byByZXR1cm4gc29tZXRoaW5nIGlmIGRhdGVsZW4gPSAwLgoJUmVtb3ZlIHVubmVjZXNzYXJ5IFdJTkFQSSdzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGcmkgRGVjIDExIDE1OjA0OjExIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL3Byb2Nlc3MuaCwgaW5jbHVkZS90bGhlbHAzMi5oLCBpbmNsdWRlL3Rvb2xoZWxwLmgsIG1pc2MvdG9vbGhlbHAuYywgc2NoZWR1bGVyL2szMm9iai5jLCBzY2hlZHVsZXIvcHJvY2Vzcy5jOgoJUGF0cmljayBTcGlubGVyIDxzcGlubGVyLnBhdHJpY2tAbWF5by5lZHU+CglJbXBsZW1lbnRlZCBDcmVhdGVUb29saGVscDMyU25hcHNob3QsIGluY2x1ZGluZyB0d28gb2YgdGhlIHJvdXRpbmVzCgl1c2luZyBzbmFwc2hvdHMsIFByb2Nlc3MzMkZpcnN0IGFuZCBQcm9jZXNzMzJOZXh0LgoKCSogcmVsYXkzMi9vbGVhdXQzMi5zcGVjLCBpbmNsdWRlL21hcGlkZWZzLmgsIGluY2x1ZGUvb2xlYXV0by5oLCBpbmNsdWRlL3dpbjE2ZHJ2LmgsIGluY2x1ZGUvd2ludHlwZXMuaCwgb2xlL2NvbXBvYmouYywgb2xlL3ZhcmlhbnQuYzoKCUp1c3RpbiBCcmFkZm9yZCA8anVzdGluQHVrYW5zLmVkdT4KCU1vc3Qgb2YgdGhlIGN1cnJlbmN5IHZhcmlhbnQgY29udmVyc2lvbiBmdW5jdGlvbnMgaW1wbGVtZW50ZWQuCglNaW5vciBidWdmaXhlcyBhbmQgaGVhZGVyIHRpZHlpbmcuCgoJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRsbHMvcmFzYXBpMzIvTWFrZWZpbGUuaW4sIGRsbHMvcmFzYXBpMzIvcmFzYXBpLmMsIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaCwgaW5jbHVkZS9yYXMuaCwgaW5jbHVkZS93aW50eXBlcy5oLCByZWxheTMyL3Jhc2FwaTMyLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIFJhc0VudW1Db25uZWN0aW9ucyBzdHViLgoKCSogZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oLCBkbGxzL3NoZWxsMzIvc2hlbGxwYXRoLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUJ1Z2ZpeCBpbiBQYXRoQ29tYmluZTMyW0F8V10uCglWaWV3IG1lbnUgaW4gZXhwbG9yZXIgYW5kIG9uIHJpZ2h0IG1vdXNlIGJ1dHRvbiBpcyB3b3JraW5nIG5vdy4KCgkqIGRsbHMvc2hlbGwzMi9waWRsLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSW1wbGVtZW50ZWQgIElMR2V0RGlzcGxheU5hbWUuCgoJKiBkbGxzL3NoZWxsMzIvY2xhc3Nlcy5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3RhcnRlZCBpbXBsZW1lbnRhdGlvbiBvZiBTaGVsbEV4ZWN1dGVFeDMyQS4KCVNtYWxsIGNoYW5nZXMuCgoJKiBkbGxzL3NoZWxsMzIvLmN2c2lnbm9yZSwgZGxscy9zaGVsbDMyL01ha2VmaWxlLmluLCBkbGxzL3NoZWxsMzIvc2hyZXMucmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1vdmVkIG1lbnUgcmVzb3VyY2VzIHRvIHJjLWZpbGUuCgoJKiBpbmNsdWRlL3BlX2ltYWdlLmgsIG9sZS9vbGUybmxzLmMsIHdpbjMyL2ZpbGUuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJVHdvIGRlYnVnIG1lc3NhZ2VzIGNsYXJpZmllZCwgb25lIHVzZWxlc3MgcHJvdG90eXBlIHJlbW92ZWQuCgoJKiBpbmNsdWRlL29sZWF1dG8uaCwgb2xlL3ZhcmlhbnQuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJMjk0IG1pc3NpbmcgV0lOQVBJIGFkZGVkLgoKCSogdG9vbHMvdGVzdHJ1bjogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglLaWxsIHN3YXBwZWQgb3V0ICh3aW5lKSBwcm9jZXNzZXMgdG9vIGFuZCB0cnVuY2F0ZSBkaWZmIGFmdGVyIHNvbWUgeHh4CglsaW5lcy4KCgkqIG9sZS9vbGUybmxzLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRml4ZWQgU2V0TGFzdEVycm9yIHdpdGggd3JvbmcgdmFsdWUuCgoJKiBtaXNjL3ByaW50ZHJ2LmMsIG9iamVjdHMvZW5obWV0YWZpbGUuYywgZ3JhcGhpY3MvcGFpbnRpbmcuYywgaW5jbHVkZS93aW5kb3dzLmg6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUltcGxlbWVudCBBYm9ydERvYzE2LCBtb3ZlIEFib3J0RG9jMzIgYW5kIFN0YXJ0RG9jMzJXIHRvCgltaXNjL3ByaW50ZHJ2LmMgYW5kIGZpeCBhIGZldyBjb21waWxlIHdhcm5pbmdzLgoKCSogd2luMzIvb3JkaW5hbHMuYywgd2luZG93cy9kcml2ZXIuYywgd2luZG93cy9tc2dib3guYywgd2luZG93cy9tdWx0aW1vbi5jLCB3aW5kb3dzL3VzZXIuYywgZGxscy9jb21jdGwzMi9hbmltYXRlLmMsIGRsbHMvY29tY3RsMzIvY29tYm9leC5jLCBkbGxzL250ZGxsL250LmMsIGlmMTYzMi90eXBlbGliLnNwZWMsIGluY2x1ZGUvZmlsZS5oLCBsb2FkZXIvZG9zL21vZHVsZS5jLCBtc2Rvcy9pbnQyMS5jLCBvbGUvb2xlMm5scy5jLCBvbGUvdHlwZWxpYi5jOgoJQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJRml4ZWQgYSBidW5jaCBvZiBjb21waWxlciB3YXJuaW5ncy4KCgkqIGZpbGVzL2ZpbGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBXaW4zMiBzeW5jaHJvIHRvIEZJTEVzICh1c2VmdWwgb25seSBmb3IgdGVybWluYWwgaGFuZGxlcykuCgpUaHUgRGVjIDEwIDE2OjA0OjUxIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBvYmplY3RzL2JpdG1hcC5jLCBvYmplY3RzL2RjLmMsIG9iamVjdHMvZW5obWV0YWZpbGUuYywgb2JqZWN0cy9mb250LmMsIG9iamVjdHMvbWV0YWZpbGUuYywgcmVsYXkzMi9jb21jdGwzMi5zcGVjLCByZWxheTMyL2dkaTMyLnNwZWMsIHJlbGF5MzIva2VybmVsMzIuc3BlYywgcmVsYXkzMi9tcHIuc3BlYywgcmVsYXkzMi9zaGVsbDMyLnNwZWMsIHJlbGF5MzIvdGFwaTMyLnNwZWMsIHJlbGF5MzIvdXNlcjMyLnNwZWMsIHJlbGF5MzIvd2luc3Bvb2wuc3BlYywgd2luMzIvY29uc29sZS5jLCB3aW4zMi9rZXJuZWwzMi5jLCB3aW4zMi90aW1lLmMsIHdpbmRvd3MvaW5wdXQuYywgd2luZG93cy9tZXNzYWdlLmMsIGdyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuYywgaWYxNjMyL2RkZW1sLnNwZWMsIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS9kZGVtbC5oLCBpbmNsdWRlL3NobG9iai5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaW5jbHVkZS93aW50eXBlcy5oLCBtZW1vcnkvc3RyaW5nLmMsIG1pc2MvZGRlbWwuYywgbWlzYy9uZXR3b3JrLmMsIG1pc2MvcHJpbnRkcnYuYywgbWlzYy90YXBpMzIuYywgY29udHJvbHMvZWRpdC5jLCBkbGxzL2NvbWN0bDMyL01ha2VmaWxlLmluLCBkbGxzL2NvbWN0bDMyL2NvbWN0bDMydW5kb2MuYywgZGxscy9jb21jdGwzMi9wcm9wc2hlZXQuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBmaWxlcy9maWxlLmMsIGdyYXBoaWNzL3BhaW50aW5nLmM6CglGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglTeWx2YWluIFN0LUdlcm1haW4gPHN5bHZhaW5AbWFjYWRhbWlhbi5jb20+CglUaHV5IE5ndXllbiA8dGh1eUBtYWNhZGFtaWFuLmNvbT4KCUxvdHMgb2YgbmV3IHN0dWJzLgoKCSogbXNkb3MvdnhkLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJTGV0IHRoZSBTeXN0ZW1fVGltZV9TZWxlY3RvciBjbG9jayB0aWNrLgoKCSogbG9hZGVyL2Rvcy9tb2R1bGUuYywgbWlzY2VtdS9pbnN0ci5jLCBtc2Rvcy9kb3NtZW0uYywgZ3JhcGhpY3MvZGlzcGRpYi5jLCBncmFwaGljcy92Z2EuYywgaW5jbHVkZS9taXNjZW11LmgsIGluY2x1ZGUvdmdhLmg6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkYXB0ZWQgdG8gQ3JlYXRlU3lzdGVtVGltZXIgaW50ZXJmYWNlIGNoYW5nZS4KCgkqIGlmMTYzMi9zeXN0ZW0uc3BlYywgaWYxNjMyL3RodW5rLmMsIGluY2x1ZGUvY2FsbGJhY2suaCwgaW5jbHVkZS93aW5kb3dzLmgsIG1pc2MvY2FsbGJhY2suYywgbWlzYy9zeXN0ZW0uYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQ2xlYW5lZCB1cCBDcmVhdGVTeXN0ZW1UaW1lciBpbnRlcmZhY2UgZm9yIHVzZSB3aXRoIDMyLWJpdCBjYWxsYmFja3MuCgkoTk9URTogMTYtYml0IGNhbGxiYWNrcyBzdGlsbCBkb24ndCB3b3JrISkKCgkqIHdpbmRvd3MvbWRpLmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJLSBIYW5kbGUgV01fTURJUkVTVE9SRSBieSBjYWxsaW5nIFdNX1NZU0NPTU1BTkQgZm9yCgl0aGUgY2hpbGQgd2luZG93IHNvIHRoYXQgdGhlIHN5c3RlbSBtZW51IGlzIHNldCBjb3JyZWN0bHkuCgktIEluIE1ESUNhc2NhZGUgYW5kIE1ESVRpbGUgdXNlIFdNX01ESVJFU1RPUkUgbWVzc2FnZQoJdG8gcmVzdG9yZSBtYXhpbWl6ZWQgd2luZG93IHNvIHRoYXQgc3lzdGVtIG1lbnUgaXMKCWhhbmRsZWQgY29ycmVjdGx5LgoKCSogaW5jbHVkZS9vbGVhdXRvLmgsIGluY2x1ZGUvd2luZXJyb3IuaCwgb2xlL01ha2VmaWxlLmluLCBvbGUvdHlwZWxpYi5jLCBvbGUvdmFyaWFudC5jLCByZWxheTMyL29sZWF1dDMyLnNwZWM6CglKZWFuLUNsYXVkZSBDb3RlIDxqZWFuLWNsYXVkZUBtYWNhZGFtaWFuLmNvbT4KCUFkZGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBWQVJJQU5UIEFQSXMuCgoJKiBmaWxlcy9kcml2ZS5jOiBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGaXhlZCBEUklWRV9HZXRGcmVlU3BhY2UgdG8gaGFuZGxlIHNwYWNlID4gNCBHQnl0ZS4KCgkqIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYzogQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCWhhbmRsZSBUVklGX1RFWFQgYnkgVFJFRVZJRVdfU2V0SXRlbSBhY2NvcmRpbmcgdG8gTVMgZG9jdW1lbnRhdGlvbi4KCWJldHRlciBoYW5kbGluZyBvZiBMUFNUUl9URVhUQ0FMTEJBQ0szMkEKCVRSRUVWSUVXX0dldE5leHR8UHJldkxpc3RJdGVtIGRpZG4ndCBkZXNjZW5kIGludG8gdmlzaWJsZSBjaGlsZCBpdGVtcy4KCgkqIGxvYWRlci9wZV9pbWFnZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVdhcm4gaWYgdHdvIC5leGVzIGNvbmZsaWN0IHdpdGggZWFjaCBvdGhlciBhbmQgdGhlIHNlY29uZCBkb2VzIG5vdAoJaGF2ZSByZWxvY2F0aW9uIHJlY29yZHMuCgoJKiBtaXNjL2NvbW1kbGcuYzogVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJRml4ZWQgR2V0RmlsZVRpdGxlMzJBIG5vdCBmaWxsaW5nIHVwIGxwVGl0bGUgaWYgbHBGaWxlIGRpZG4ndAoJY29udGFpbiAnLycsJ1xcJyBvciAnOicuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBTdGVwaGVuIENyb3dsZXkgPGNyb3dAZGViaWFuLm9yZz4KCUZpeGVkIGEgcG90ZW50aWFsIGNyYXNoIGlmIGEgdXNhYmxlIHZpZGVvIG1vZGUgaXMgbm90IGRldGVjdGVkLgoKCSogdG9vbHMvbWFrZV9hdXRob3JzOiBTY3JpcHQgdG8gZ2VuZXJhdGUgYXV0aG9ycyBmaWxlcwoKCSogaW5jbHVkZS9kaW5wdXQuaCwgd2luZG93cy9kaW5wdXQuYzogUm9iZXJ0IFJpZ2dzIDxycmlnZ3NAdGVzc2VyLmNvbT4KCVN0dWJzIGZvciBJRGlyZWN0SW5wdXRFZmZlY3QgYW5kIElEaXJlY3RJbnB1dERldmljZTJBIG1ldGhvZHMsCglhcyB3ZWxsIGFzIEFkZFJlZigpLCBHZXRDYXBhYmlsaXRlcygpLCBFbnVtT2JqZWN0cygpLAoJR2V0UHJvcGVydHkoKSwgR2V0T2JqZWN0SW5mbygpLCBHZXREZXZpY2VJbmZvKCksIEluaXRpYWxpemUoKSwKCWFuZCBSdW5Db250cm9sUGFuZWwoKSBmb3IgSURpcmVjdElucHV0RGV2aWNlLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogUm9iZXJ0IFJpZ2dzIDxycmlnZ3NAdGVzc2VyLmNvbT4KCVNldCB3aW5kb3cgZm9jdXMgaW4gIF9jb21tb25fSURpcmVjdERyYXdfU2V0RGlzcGxheU1vZGUoKS4KCgkqIG11bHRpbWVkaWEvbWNpY2RhLmM6IFJvYmVydCBSaWdncyA8cnJpZ2dzQHRlc3Nlci5jb20+CglBY2NlcHQgTUNJX09QRU4gYW5kIE1DSV9DTE9TRSBtZXNzYWdlcyBpbiBNQ0lDREFVRElPX0RyaXZlclByb2MzMigpLgoKCSogaW5jbHVkZS93aW4uaCwgd2luZG93cy93aW4uYywgd2luZG93cy94MTFkcnYvZXZlbnQuYywgd2luZG93cy94MTFkcnYvd25kLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVJlbW92ZWQgZGVmZXJyZWQgRXhwb3NlIGV2ZW50cyBoYW5kbGluZy4KCgkqIHdpbmRvd3MvZGNlLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJRG9uJ3QgY2xpcCBWaXNSZ24gYWdhaW5zdCBYIGRlc2t0b3AuCgoJKiBsb2FkZXIvbW9kdWxlLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJTG9hZE1vZHVsZTMyL1dpbkV4ZWMzMiBzaG91bGQgcmV0dXJuIDE2LWJpdCBoSW5zdGFuY2UvaFRhc2suCgoJKiBncmFwaGljcy94MTFkcnYveGZvbnQuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJU2FuaXR5IGNoZWNrIG9uIGZvbnQgc2l6ZS4KCgkqIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglNaXNzaW5nIHBhcmVudGhlc2VzIGFkZGVkLgoKV2VkIERlYyAgOSAxNjozNzowNSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbG9hZGVyL3Rhc2suYywgcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCB3aW4zMi9jb25zb2xlLmMsIGluY2x1ZGUvd2luY29uLmg6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUVuaGFuY2VkIFdpbjMyIENvbnNvbGUgKFhURVJNKQoJLSBpbnB1dGhhbmRsaW5nIGVuaGFuY2VkIChrZXlzIGFuZCBtb3VzZWNsaWNrcykKCS0gd2luMzIgc3luY2hyb25pemF0aW9uIChwYXJ0aWFsKQoJLSBsb3RzIG9mIGVuaGFuY2VtZW50cyB0byBkcmF3aW5nIGZ1bmN0aW9ucwoJLSBzaW1wbGUvY29tcGxleCBjb25zb2xlIChzaW1wbGUtc3RkaW4vc3Rkb3V0IC0+IGNvbXBsZXgteHRlcm0pLgoKCSogY29uc29sZS9NYWtlZmlsZS5pbiwgY29uc29sZS9nZW5lcmljLmMsIGNvbnNvbGUvaW50ZXJmYWNlLmMsIGNvbnNvbGUvbmN1cnNlcy5jLCBjb25zb2xlL3R0eS5jLCBjb25zb2xlL3h0ZXJtLmMsIGluY2x1ZGUvY29uc29sZS5oOgoJSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglBZGQgYSBkcml2ZXIgdG8gb3BlbiB1cCBhIG5ldyB4dGVybSB3aW5kb3cgd2hlbmV2ZXIgY29uc29sZSBvdXRwdXQgaXMKCW5lZWRlZC4gRGVyaXZlZCBmcm9tIGNvbnNvbGUvd2luMzIuYyBidXQgd2UgYXJlIG5vdCB5ZXQgcmVhZHkgdG8gbWVyZ2UKCXRoZSBjb2RlIGNvbXBsZXRlbHkuCgoJKiBncmFwaGljcy94MTFkcnYveGZvbnQuYywgaW5jbHVkZS93aW5kb3dzLmgsIHRvb2xzL2ZudDJiZGYuYzoKCVBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoPgoJSW1wcm92ZWQgdGhlIGhhbmRsaW5nIG9mIGZvbnQgZW5jb2RpbmdzLgoKCSogbXNkb3MvZHBtaS5jLCBpbmNsdWRlL21pc2NlbXUuaDogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglJbXBsZW1lbnRlZCBEUE1JIFJNQ0JzIHVzaW5nIHRoZSBET1Mgc3Vic3lzdGVtLCBhbmQgYSBmZXcgb3RoZXIKCWltcHJvdmVtZW50cy4gQWxzbywgc29tZSBzcGVjaWFsLWNhc2VkIHNob3J0Y3V0IHBhdGhzIHdpbGwgYWxsb3cgc29tZQoJY29tbW9uIHJlYWwtbW9kZSBjYWxsL1JNQ0IgY29tYmluYXRpb25zIHRvIHdvcmsgZXZlbiB3aXRob3V0IGNhbGxpbmcgdGhlCglET1Mgc3Vic3lzdGVtLCB0aHVzIGxldHRpbmcgQVBJcyBsaWtlIERPU0FTUEkgd29yayB3aXRob3V0IGFueSBkaXJ0eSBoYWNrcwoJZXZlbiBvbiBwbGF0Zm9ybXMgdGhhdCBjYW5ub3QgdXNlIGRvc21vZC4KCgkqIG11bHRpbWVkaWEvdGltZS5jLCBvbGUvY29tcG9iai5jLCBmaWxlcy9jaGFuZ2UuYywgbG9hZGVyL21vZHVsZS5jLCBtaXNjL2x6ZXhwYW5kLmMsIG1pc2MvbWFpbi5jLCBjb250cm9scy9tZW51LmMsIGNvbnRyb2xzL3Njcm9sbC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTb21lIHVubmVjZXNzYXJ5ICNpbmNsdWRlIGFuZCBtZXNzYWdlcyByZW1vdmVkLgoKCSogb2xlL29sZTJubHMuYzogVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJU29tZSBzbWFsbCBjb3JyZWN0aW9ucyB0byBFbnVtU3lzdGVtTG9jYWxlczMyQVcKClR1ZSBEZWMgIDggMTU6MDY6MzkgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHRvb2xzL21ha2VfWDExd3JhcHBlcnMsIHRzeDExL3RzX3hmODZ2bW9kZS5jLCBncmFwaGljcy9kZHJhdy5jOgoJVHJpZWQgYW5vdGhlciBrbHVkZ2UgZm9yIHRoZSBYbWQuaCBwcm9ibGVtLgoKCSogdHN4MTEvTWFrZWZpbGUuaW4sIHRzeDExL1gxMV9jYWxscywgdHN4MTEvdHNfeGY4NnZtb2RlLmMsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2FjY29uZmlnLmgsIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvdHNfeGY4NnZtb2RlLmgsIHRvb2xzL21ha2VfWDExd3JhcHBlcnM6CglTdGVwaGVuIENyb3dsZXkgPGNyb3dAZGViaWFuLm9yZz4KCUFkZGVkIGZ1bGxzY3JlZW4gREdBIHN1cHBvcnQuCgoJKiBtaXNjL21haW4uYzogUGFibG8gU2FyYXR4YWdhIDxzcnR4Z0BjaGFuYWUuYWxwaGFuZXQuY2g+CglGaXhlZCBkdW1teSBlbnRyaWVzIGluIE1BSU5fUGFyc2VMYW5ndWFnZU9wdGlvbigpLgoKCSogaW5jbHVkZS9tbXN5c3RlbS5oLCBtdWx0aW1lZGlhL21jaWNkYS5jOgoJQnJpYW4gR2Vyc3QgPGJnZXJzdEBxdWFyay52cHBsdXMuY29tPgoJUHJvcGVybHkgaW1wbGVtZW50IE1DSV9DREFfU1RBVFVTX1RZUEVfVFJBQ0suCglGaXggYW4gb2ZmLWJ5LW9uZSBidWcgd2l0aCBNQ0lfU1RBVFVTX0xFTkdUSC4KCgkqIHdpbmRvd3MveDExZHJ2L2V2ZW50LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU3VwZXJmbG91cyBXSU5BUEkgcmVtb3ZlZC4KCgkqIGxvYWRlci9wZV9pbWFnZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVdhcm4gYWJvdXQgaW52YWxpZCBlbnRyeXBvaW50cyAoY3JlYXRlZCBieSB2aXJ1c2VzKSB3aGljaCByZXN1bHQgaW4KCVdpbmUgY3Jhc2hlcy4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQ3JlYXRlIFgxMSBwYWxldHRlIG9uIERpcmVjdERyYXdTdXJmYWNlOjpTZXRQYWxldHRlLCBub3QgYmVmb3JlICh3ZQoJbWlnaHQgbm90IGhhdmUgYW4gWDExIHdpbmRvdyB5ZXQpLgoKCSogbG9hZGVyL21haW4uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglNb3ZlIFRXRUFLX0luaXQgZnJvbSBVU0VSIHRvIEdESUluaXQuCgoJKiBncmFwaGljcy9wYWludGluZy5jLCBpZjE2MzIvZ2RpLnNwZWMsIGluY2x1ZGUvd2luZG93cy5oLCBtaXNjL3ByaW50ZHJ2LmMsIG1pc2Mvc3Bvb2xlci5jLCByZWxheTMyL2dkaTMyLnNwZWM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeCBmb3IgU2V0QWJvcnRQcm9jMTYsIHN0dWIgZm9yIFNldEFib3J0UHJvYzMyIGFuZCB0aWR5IHVwIHNvbWUgb3RoZXIKCXByaW50aW5nIGZ1bmN0aW9ucy4KCgkqIHdpbmRvd3MvZm9jdXMuYzogSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglGaXggaW5jbHVkZXMuCgoJKiBncmFwaGljcy94MTFkcnYvdGV4dC5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglGaXggWDExRFJWX0V4dFRleHRPdXQgZm9yIHJvdGF0ZWQgdGV4dCBpZiBlaXRoZXIgb2YgbHBEeCwgYnJlYWtFeHRyYQoJb3IgY2hhckV4dHJhIGFyZSBub24temVyby4KCgkqIGluY2x1ZGUvQXR0aWMvZ3JhcGhpY3MuaCwgbWlzYy9zaGVsbC5jLCB3aW5kb3dzL0F0dGljL2dyYXBoaWNzLmMsIHdpbmRvd3MvTWFrZWZpbGUuaW4sIHdpbmRvd3Mvbm9uY2xpZW50LmMsIHdpbmRvd3Mvc2Nyb2xsLmMsIGNvbnRyb2xzL2J1dHRvbi5jLCBjb250cm9scy9jb21iby5jLCBjb250cm9scy9kZXNrdG9wLmMsIGNvbnRyb2xzL2ljb250aXRsZS5jLCBjb250cm9scy9tZW51LmMsIGNvbnRyb2xzL3Njcm9sbC5jLCBkbGxzL2NvbWN0bDMyL3VwZG93bi5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBncmFwaGljcy9tZXRhZmlsZWRydi9ncmFwaGljcy5jLCBncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJUmVwbGFjZSBHUkFQSF8gZnVuY3Rpb25zIHdpdGggV2luIFNESyBlcXVpdmFsZW50cy4KCk1vbiBEZWMgIDcgMTY6MjM6NDIgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGZpbGVzL2Rvc19mcy5jOiBBbGV4YW5kZXIgTGFyc3NvbiA8YWxsYUBseXNhdG9yLmxpdS5zZT4KCVJldmVydGVkIHByZXZpb3VzIHBhdGNoLgoKCSogaW5jbHVkZS9kb3NleGUuaDogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglEb24ndCBkZWZpbmUgTVpfU1VQUE9SVEVEIG9uIG5vbi1pMzg2IHBsYXRmb3Jtcy4KCgkqIGxvYWRlci9kb3MvbW9kdWxlLmMsIG1zZG9zL2RwbWkuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglGaXhlZCBEUE1JX0NhbGxSTVByb2MgKEkgdGhpbmspLgoKCSogbWlzYy9uZXR3b3JrLmMsIHJlbGF5MzIvbXByLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVN0dWIgZm9yIE5QU0dldFByb3ZpZGVySGFuZGxlQS4KCgkqIHdpbmRvd3MveDExZHJ2L2tleWJvYXJkLmM6IEJyaWFuIEdlcnN0IDxiZ2Vyc3RAcXVhcmsudnBwbHVzLmNvbT4KCVRoZSBzY2FuY29kZSBXaW5kb3dzIHNlbmQgZm9yIGV4dGVuZGVkIGtleXMgaXMgdGhlIHNjYW5jb2RlIG9mIHRoZQoJdW5leHRlbmRlZCBlcXVpdmFsZW50IG9mIHRoZSBrZXksIHBsdXMgdGhlIGV4dGVuZGVkIGZsYWcuCgoJKiBkbGxzL3dpbmFzcGkvd2luYXNwaTE2LmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGaXhlZCBhIHJlYWwgbW9kZSBwcm9ibGVtLgoKCSogbG9hZGVyL25lL21vZHVsZS5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJTkVfTU9EVUxFLnN0YWNrX3NpemUgd2FzIHNldCB0byBhIHJpZGljdWxvdXNseSBzbWFsbCB2YWx1ZSBvZiA1LgoJV2luZG93cyBzZXRzIDB4MTQwMCBpbiBzdWNoIGNhc2VzIGZvciBwcm9ncmFtcy4KCgkqIGNvbnRyb2xzL3N0YXRpYy5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVdlIGRvbid0IHlldCB3YW50IHRoZSBzdGF0aWMgY29udHJvbCB0byBjYWxsIERlc3Ryb3lJY29uLgoKCSogd2luZG93cy9jbGFzcy5jOiBORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCUFkZGVkIGNhc2UgZm9yIEdDV19BVE9NIGludCBHZXRDbGFzc0xvbmczMkEuCgoJKiBtaXNjL25ldHdvcmsuYywgcmVsYXkzMi9tcHIuc3BlYzogR2FlbCBkZSBDaGFsZW5kYXIgPGdhZWxAbGltc2kuZnI+CglTdHViIGZvciBXTmV0T3BlbkVudW0zMlcuCgoJKiBtdWx0aW1lZGlhL2Rzb3VuZC5jLCByZWxheTMyL2Rzb3VuZC5zcGVjOgoJUm9iZXJ0IFJpZ2dzIDxycmlnZ3NAdGVzc2VyLmNvbT4KCU1vcmUgZ2VuZXJhbCBjb2RlIGNsZWFudXAgZm9yIHJlYWRhYmlsaXR5LgoJQSBmZXcgbW9yZSBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBjaGVja3MuCglSZXR1cm4gRFNfT0sgcmF0aGVyIHRoYW4gMCBpbiBhIG51bWJlciBvZiBmdW5jdGlvbnMuCglGaXhlZCBwcmltYXJ5IGJ1ZmZlciByZWYgY291bnQgYnVnIGluIENyZWF0ZVNvdW5kQnVmZmVyKCkuCglIYW5kbGUgMS0zIGJ5dGUgc291bmQgZnJhZ21lbnRzIHRoYXQgd291bGQgY2F1c2UgYnVmZmVyIG92ZXJydW5zLgoJQ2xlYXIgcHJpbWFyeSBidWZmZXIgd2l0aCBhIG5ldXRyYWwgdmFsdWUgaW5zdGVhZCBvZiBhbHdheXMgMAoJKGJlY2F1c2UgMTI4IGlzIG5ldXRyYWwgZm9yIDgtYml0IHNvdW5kKS4KCUZpeCBidWcgd2l0aCBtaXhpbmcgOC1iaXQgc291bmQgaW50byB0aGUgcHJpbWFyeSBidWZmZXIuCglCcm9rZSBvdXQgdGhlIG1haW4gYmxvY2sgaW4gRFNPVU5EX3RocmVhZCgpIHRvIGFub3RoZXIgZnVuY3Rpb24gZm9yCglyZWFkYWJpbGl0eS4KCUhhbmRsZSAibm8gYXVkaW8iIGFuZCAiYXVkaW8gYnVzeSIgY2FzZXMgcHJvcGVybHkgd2hlbiBpbml0aWFsaXppbmcKCWRzb3VuZC4gUmVuYW1lIERsbENhblVubG9hZE5vdygpIHRvIERTT1VORF9EbGxDYW5VbmxvYWROb3coKS4KCgkqIGRlYnVnZ2VyL2hhc2guYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglNYWRlIHZhcmlhYmxlcyBvcHRpbWl6ZWQgaW50byByZWdpc3RlcnMgYWNjZXNzaWJsZS4KCgkqIHJlbGF5MzIvdXNlcjMyLnNwZWM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglUaGUgc3BlYyBkZWZpbml0aW9uIGZvciBNb25pdG9yRnJvbVdpbmRvdyB3YXMgd3JvbmcuCgoJKiBtc2Rvcy9pbnQyMS5jOiBTdGVmYW4gTGVpY2h0ZXIgPHNsZUBjYW1saW5lLmNvbT4KCUZpbGUgaGFuZGxlIGJ1ZyBmaXguCgoJKiBkb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9sczogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIHBhcmFncmFwaCBhYm91dCBkaWZmZXJlbnQgZGxsIHZlcnNpb25zIGFuZCBzdHJ1Y3R1cmUgc2l6ZXMuCgoJKiBpbmNsdWRlL2NvbW1jdHJsLmg6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBtaXNzaW5nIFRPT0xJTkZPIHN0cnVjdHVyZS4KCgkqIG11bHRpbWVkaWEvbW1zeXN0ZW0uYzogQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJRml4ZWQgYSBoZWFwIGJ1Zy4KCgkqIGxvYWRlci90YXNrLmMsIG1lbW9yeS9sb2NhbC5jLCBtZW1vcnkvc2VsZWN0b3IuYywgbWlzYy9jYWxsYmFjay5jLCBtc2Rvcy9kcG1pLmMsIG1zZG9zL2ludDQxLmMsIG1zZG9zL3Z4ZC5jLCBpZjE2MzIva2VybmVsLnNwZWMsIGlmMTYzMi90aHVuay5jLCBpbmNsdWRlL2NhbGxiYWNrLmgsIGluY2x1ZGUvbGR0LmgsIGluY2x1ZGUvd2luZG93cy5oOgoJQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJLSBTZXZlcmFsIGtlcm5lbC5zcGVjIHJldHVybiB0eXBlIG1pc21hdGNoIGZpeGVzCgktIFtHU11ldFNlbGVjdG9yQmFzZSBXaW4zMnMgb2Zmc2V0IHN1cHBvcnQgYnkgVWxyaWNoIFdlaWdhbmQgKHRoYW5rcyB2Lm0uICEhKQoJLSBNb3ZlIEFwcFRvV2luZS9XaW5lVG9BcHAgbWFjcm9zIGFzIFczMlNfQVBQMldJTkUgZXRjLiB0byBsZHQuaAoJLSBMb2NhbE5vdGlmeSgpIGJhc2ljIHN1cHBvcnQKCS0gRml4ZXMgZm9yIGxvY2FsIGhlYXAgaGFuZGxpbmcgd2l0aCBoZWFwIGhhbmRsZXMgY3JlYXRlZCBieSBWaXJ0dWFsKigpCgoJKiBncmFwaGljcy94MTFkcnYveGZvbnQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiAtbWljcm9zb2Z0LXN5bWJvbCBlbmNvZGluZyB3YXMgbm90IHJlY29nbml6ZWQuCgoJKiB3aW5kb3dzL3dpbi5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogV0lOX1Jlc2V0UXVldWVXaW5kb3dzIHdvdWxkIHNraXAgc29tZSB3aW5kb3dzLgoKCSogdG9vbHMvYnVpbGQuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBbGxvdyByZWN1cnNpdmVseSByZWVudGVyaW5nIENBTEwzMl9MYXJnZVN0YWNrLgoKCSogaW5jbHVkZS90dHlkcnYuaCwgd2luZG93cy90dHlkcnYvLmN2c2lnbm9yZSwgd2luZG93cy90dHlkcnYvTWFrZWZpbGUuaW4sIHdpbmRvd3MvdHR5ZHJ2L2NsaXBib2FyZC5jLCB3aW5kb3dzL3R0eWRydi9ldmVudC5jLCB3aW5kb3dzL3R0eWRydi9pbml0LmMsIHdpbmRvd3MvdHR5ZHJ2L2tleWJvYXJkLmMsIHdpbmRvd3MvdHR5ZHJ2L21vdXNlLmMsIHdpbmRvd3MvdHR5ZHJ2L3duZC5jLCBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW46CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCUFkZGVkIHRoZSBuZXcgVFRZIGRyaXZlci4KCgkqIGluY2x1ZGUvY2xpcGJvYXJkLmgsIGluY2x1ZGUva2V5Ym9hcmQuaCwgaW5jbHVkZS9tZXNzYWdlLmgsIGluY2x1ZGUvd2luLmgsIGluY2x1ZGUveDExZHJ2LmgsIHdpbmRvd3MvY2xpcGJvYXJkLmMsIHdpbmRvd3MvZGVmd25kLmMsIHdpbmRvd3MvZGlucHV0LmMsIHdpbmRvd3MvZGlzcGxheS5jLCB3aW5kb3dzL2V2ZW50LmMsIHdpbmRvd3MvZm9jdXMuYywgd2luZG93cy9rZXlib2FyZC5jLCB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9ub25jbGllbnQuYywgd2luZG93cy93aW4uYywgd2luZG93cy93aW5wb3MuYywgd2luZG93cy94MTFkcnYvTWFrZWZpbGUuaW4sIHdpbmRvd3MveDExZHJ2L2NsaXBib2FyZC5jLCB3aW5kb3dzL3gxMWRydi9ldmVudC5jLCB3aW5kb3dzL3gxMWRydi9pbml0LmMsIHdpbmRvd3MveDExZHJ2L2tleWJvYXJkLmMsIHdpbmRvd3MveDExZHJ2L21vdXNlLmMsIHdpbmRvd3MveDExZHJ2L3duZC5jOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglNb3ZlZCBtb3JlIGNvZGUgdG8gdGhlIFgxMSBkcml2ZXIuCgpUaHUgRGVjICAzIDE2OjI5OjU2IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBtc2Rvcy9pbnQxMC5jLCBtc2Rvcy9pbnQxNi5jLCBtc2Rvcy9pbnQyMS5jLCBtc2Rvcy9pbnQyOS5jOgoJSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglDYWxsIHRoZSBuZXcgY29uc29sZSBkcml2ZXIgZm9yIHNvbWUgcm91dGluZXMuIFRoaXMgaXMgbm90IGNvbXBsZXRlbHkKCWRvbmUgeWV0IGFuZCBtb3JlIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgoKV2VkIERlYyAgMiAxOTo1ODowOSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogY29uZmlndXJlLmluLCBjb25zb2xlLy5jdnNpZ25vcmUsIGNvbnNvbGUvTWFrZWZpbGUuaW4sIGNvbnNvbGUvZ2VuZXJpYy5jLCBjb25zb2xlL2ludGVyZmFjZS5jLCBjb25zb2xlL25jdXJzZXMuYywgY29uc29sZS90dHkuYywgaW5jbHVkZS9hY2NvbmZpZy5oLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBpbmNsdWRlL2NvbnNvbGUuaCwgaW5jbHVkZS93aW5udC5oLCBsb2FkZXIvbWFpbi5jLCBtaXNjL21haW4uYywgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZToKCUpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJQWRkZWQgY29uc29sZSBzdXBwb3J0LgoKCSogZ3JhcGhpY3MveDExZHJ2L29lbWJpdG1hcC5jLCBpbmNsdWRlL2JpdG1hcC5oLCBpbmNsdWRlL2dkaS5oLCBpbmNsdWRlL3gxMWRydi5oLCBsb2FkZXIvbWFpbi5jLCBvYmplY3RzL0F0dGljL29lbWJpdG1hcC5jLCBvYmplY3RzL01ha2VmaWxlLmluLCBvYmplY3RzL2JpdG1hcC5jLCBvYmplY3RzL2N1cnNvcmljb24uYywgZ3JhcGhpY3MvbWV0YWZpbGVkcnYvaW5pdC5jLCBncmFwaGljcy9wc2Rydi9pbml0LmMsIGdyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuYywgZ3JhcGhpY3Mvd2luMTZkcnYvcGVuLmMsIGdyYXBoaWNzL3gxMWRydi9NYWtlZmlsZS5pbiwgZ3JhcGhpY3MveDExZHJ2L2luaXQuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJTW92ZSBPRU0gcmVzb3VyY2VzIHRvIHRoZSB4MTFkcnYuCgoJKiBmaWxlcy9kb3NfZnMuYzogQWxleGFuZGVyIExhcnNzb24gPGFsbGFAbHlzYXRvci5saXUuc2U+CglPcGVuaW5nIGEgZmlsZSBpbiBhIGRpcmVjdG9yeSB3aGljaCBkb2Vzbid0IGV4aXN0IHJldHVybnMKCUVSUk9SX0ZJTEVfTk9UX0ZPVU5EIGluc3RlYWQgb2YgRVJST1JfUEFUSF9OT1RfRk9VTkQuCgoJKiBtZW1vcnkvYXRvbS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUhhbmRsZSBhdG9tcyAiIyBub24gbnVtYmVyIiAob3JhY2xlIGNsaWVudCkuCgpUdWUgRGVjICAxIDE2OjIzOjE5IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpZjE2MzIva2VybmVsLnNwZWMsIG1pc2MvZXJyb3IuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJUmVuYW1lZCBLRVJORUwuMzI3IHRvIEhhbmRsZVBhcmFtRXJyb3IgKGFzIGluICdVbmRvYy4gV2luZG93cycpLgoJRml4ZWQgd3Jvbmcgb3JkaW5hbHMvcHJvdG90eXBlIGZvciBNYXBQcm9jZXNzSGFuZGxlL0dldE1vZHVsZUZpbGVOYW1lMzIuCglBZGRlZCBuYW1lcyBmb3Igc29tZSB1bmRvY3VtZW50ZWQgZXhwb3J0cy4KCgkqIG1lbW9yeS9nbG9iYWwuYywgaWYxNjMyL3RodW5rLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGVkIEdsb2JhbENoYW5nZUxvY2tDb3VudCAoS0VSTkVMLjM2NSkuCgoJKiBpZjE2MzIvdG9vbGhlbHAuc3BlYywgaW5jbHVkZS90b29saGVscC5oLCBtZW1vcnkvaGVhcC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCBMb2NhbDMySW5mbywgc3R1YnMgZm9yIExvY2FsMzJGaXJzdC9OZXh0IChLRVJORUwuNDQ0LTQ0NikuCgoJKiBpZjE2MzIvZ2RpLnNwZWMsIG9iamVjdHMvZ2Rpb2JqLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGVkIEdkaUZyZWVSZXNvdXJjZXMgKEdESS42MDkpLgoKCSogaW5jbHVkZS9kc291bmQuaCwgbXVsdGltZWRpYS9kc291bmQuYzoKCVJvYmVydCBSaWdncyA8cnJpZ2dzQHRlc3Nlci5jb20+CglGaXhlZCA4LWJpdCBXQVYgZm9ybWF0IGhhbmRsaW5nIChpdCBpcyB1bnNpZ25lZCBkYXRhKS4KCUZpeGVkIG9mZi1ieS1vbmUgY2hlY2tzIGZvciBidWZmZXIgd3JhcC4KCUluY3JlbWVudCByZWYgY291bnQgZm9yIHByaW1hcnkgYnVmZmVyIGluIENyZWF0ZVNvdW5kQnVmZmVyKCkuCglBZGRlZCBEU0JQTl9PRkZTRVRTVE9QIHN1cHBvcnQgdG8gcG9zaXRpb24gbm90aWZpY2F0aW9uIGNvZGUuCglMb3RzIG9mIG1pbm9yIHBhcmFtZXRlciB2YWxpZGF0aW9uIGNoZWNrcy4KCVN0dWJzIGZvcjogSURpcmVjdFNvdW5kX2luaXRpYWxpemUoKSwgSURpcmVjdFNvdW5kX0NvbXBhY3QoKSwKCWFuZCBJRGlyZWN0U291bmRfR2V0U3BlYWtlckNvbmZpZygpLgoJRml4ZWQgZnJlcSBzaGlmdGluZyB3aXRoIDE2LWJpdCBkYXRhIHByb2JsZW0sIGZpeGVkIDhiaXQ8LT4xNmJpdAoJY29udmVyc2lvbi4KCUxvdHMgb2YgdGhyZWFkIGxvY2tpbmcgZm9yIERpcmVjdFNvdW5kIGJ1ZmZlcnMuCglEZWFsbG9jIHByaW1hcnkgYnVmZmVyIHdoZW4gZHNvdW5kIGlzIGRlYWxsb2NhdGVkLgoKCSogaW5jbHVkZS93aW50eXBlcy5oOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQWRkZWQgdGhlIFRFWFQoKSBhbmQgTUFLRUxSRVNVTFQoKSBkZWZpbml0aW9ucy4KCgkqIHdpbmRvd3MvcXVldWUuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTbWFsbCBjaGFuZ2UuCgoJKiBNYWtlZmlsZS5pbjogSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoJUmV2ZXJ0IG1pc2d1aWRlZCBjaGFuZ2UgdG8gaW5zdGFsbF9saWIgdGhhdCBicm9rZSAtZGlzYWJsZS1saWIKCWNvbmZpZ3VyZSBvcHRpb24uCgoJKiBtaXNjL21haW4uYywgaW5jbHVkZS93aW5kb3dzLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBwYXJhbWV0ZXIgU1BJX0dFVERSQUdGVUxMV0lORE9XLgoJT25lIG1pc3NpbmcgYnJlYWsgaW4gU1BJX0dFVERSQUdGVUxMV0lORE9XLgoKCSogZGxscy9zaGVsbDMyL3BpZGwuYywgcmVsYXkzMi9zaGVsbDMyLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBmdW5jdGlvbnMgSUxHbG9iYWxDbG9uZS9JTEdsb2JhbEZyZWUuCgoJKiBkb2N1bWVudGF0aW9uL3ByaW50aW5nOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglBZGQgYSBub3RlIGFib3V0IFdpblByaW50ZXJzLgoKCSogcmVsYXkzMi9udGRsbC5zcGVjLCByZWxheTMyL29sZTMyLnNwZWMsIHJlbGF5MzIvdXNlcjMyLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIHNvbWUgc3R1YnMsIHNvbWUgcHRyLT5zdHIgY29udmVyc2lvbnMuCgoJKiBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2RkcmF3LmgsIHJlbGF5MzIvZGRyYXcuc3BlYzoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJLSBhZGRlZCBkZWZpbml0aW9uIG9mIERpcmVjdERyYXdDcmVhdGVDbGlwcGVyLgoJLSBtb3JlIHZlcnNhdGlsZSBzdXBwb3J0IG9mIHN1cmZhY2VzIC8gYmV0dGVyIHN1cmZhY2UgZGVzY3JpcHRpb24gc3VwcG9ydC4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NoZWxscGF0aC5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jLCBpbmNsdWRlL3NoZWxsLmgsIHJlbGF5MzIvc2hlbGwzMi5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCB3cm9uZyBwYXJhbWV0ZXIgY291bnQgZm9yIFNIQ2hhbmdlTm90aWZ5RGVyZWdpc3RlciwgIFNIRnJlZVVudXNlZExpYnJhcmllcy4KCU5ldyBmdW5jdGlvbnMgUGFyc2VGaWVsZCwgR2V0L1NldEluc3RhbmNlRXhwbG9yZXIoKSwgUGF0aElzVU5DLCBQYXRoSXNSZWxhdGl2ZS4KCVN0dWJzIFNIV2FpdEZvckZpbGVUb09wZW4sIFBhdGhGaW5kT25QYXRoLgoKCSogcmVsYXkzMi91c2VyMzIuc3BlYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTbWFsbCBjaGFuZ2VzIHRvIHByaW50IHRoZSBzdHJpbmdzIGluIHRoZSByZWxheS10cmFjZS4KCgkqIHdpbmRvd3MvY2xhc3MuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglUaGUgY2xhc3MgbmFtZSBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBnZXRwdHIuCgoJKiBtdWx0aW1lZGlhL21jaW1pZGkuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCBtZW1vcnkvc3RhdHVzIHJlY292ZXJ5IHdoZW4gZXJyb3Igb2NjdXJlZCBpbiBNSURJX21jaU9wZW4uCglGaXhlZCBzdXBwb3J0IGZvciBSTUlEIGZpbGVzIGluIE1JRElfbWNpT3Blbi4KCUZpeGVkIGJ1ZyBmb3IgcGxheWluZyBNSURJIGZpbGVzIHdpdGggdGVtcG8gY2hhbmdlcy4gU291bmQgb3V0cHV0IGlzCglub3cgY29ycmVjdCwgYnV0IGxlbmd0aCBvZiB0cmFja3MgKGFuZCB0aGVyZWZvcmUgb2Ygd2hvbGUgZmlsZSkgaXMgbm90Cgljb3JyZWN0LgoJQ2hhbmdlZCBlcnJvciB2YWx1ZXMgKElOVEVSTkFMID0+IElOVkFMSURfRklMRSkgd2hlbiBmaWxlIGNhbm5vdCBiZSByZWFkLgoKCSogbXVsdGltZWRpYS9tY2l3YXZlLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJRml4ZWQgbWVtb3J5L3N0YXR1cyByZWNvdmVyeSB3aGVuIGVycm9yIG9jY3VyZWQgaW4gV0FWRV9tY2lPcGVuLgoJQ2hhbmdlZCBlcnJvciB2YWx1ZXMgKElOVEVSTkFMID0+IElOVkFMSURfRklMRSkgd2hlbiBmaWxlIGNhbm5vdAoJYmUgcmVhZC4KCgkqIG11bHRpbWVkaWEvbXN2aWRlby5jLCByZWxheTMyL21zdmZ3MzIuc3BlYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YnMgZm9yIE1DSVduZENyZWF0ZVtBfFddLgoKCSogbWlzYy92ZXIuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglWZXJRdWVyeVZhbHVlLCBidWdmaXg6IHdlIGNhbnQgY29udmVydCBiaW5hcnkgZGF0YSB3aXRoCglIRUFQX3N0cmR1cFd0b0EgKFxWYXJGaWxlSW5mb1xUcmFuc2xhdGlvbikuCgpNb24gTm92IDMwIDE3OjQxOjE3IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiByZWxheTMyL2FkdmFwaTMyLnNwZWMsIHdpbjMyL2FkdmFwaS5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTdHVicyBmb3IgRW51bVNlcnZpY2VTdGF0dXMzMiwgc21hbGwgY2hhbmdlcy4KCgkqIG9iamVjdHMvY3Vyc29yaWNvbi5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUxvYWQgbm93IHRoZSBmaXJzdCBpY29uIGZyb20gdGhlICouYW5pIGZpbGUgaW5zdGVhZCBvZiBjcmFzaGluZy4KCgkqIG1pc2NlbXUvbWFpbi5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUZpeCB3YXJuaW5ncyBpbiBtaXNjZW11L21haW4uYy4KCgkqIGluY2x1ZGUvd2luZG93cy5oOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJLSBhZGRlZCBzb21lIGRlZmluZXMgYXJvdW5kIHRoZSBDb21tUG9ydCAoUFVSR0VfWFhYIGFuZCBNU19YWFhfT04pCgktIGFkZGVkIHRoZSBETEdURU1QTEFURSBhbmQgRExHSVRFTVRFTVBMQVRFIHN0cnVjdHVyZXMKCS0gYWRkZWQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZm9yIFN0YXJ0UGFnZSxFbmRQYWdlLEdldENvbW1NYXNrLAoJCUdldENvbW1Nb2RlbVN0YXR1cyBhbmQgUHVyZ0NvbW0sV2FpdENvbW1FdmVudC4KCgkqIHdpbmRvd3MvZGVmd25kLmM6IFBhdWwgUXVpbm4gPFBhdWxRQGNvcmVsLmNvbT4KCUZpeGVkIGFjdGl2YXRpb24vRm9jdXMgbWVzc2FnZSBvcmRlciBwcm9ibGVtIHdoZW4gY3JlYXRpbmcgYSBuZXcgSFdORC4KCgkqIHdpbmRvd3Mvd2lucG9zLmMsIGlmMTYzMi91c2VyLnNwZWMsIGluY2x1ZGUvd2luZG93cy5oLCByZWxheTMyL3VzZXIzMi5zcGVjOgoJUGF1bCBRdWlubiA8UGF1bFFAY29yZWwuY29tPgoJSW1wbGVtZW50YXRpb24gb2YgQ2hpbGRXaW5kb3dGcm9tUG9pbnRFeCBmdW5jdGlvbnMuCgoJKiBtaXNjL3JlZ2lzdHJ5LmM6IEdhdnJpZWwgU3RhdGUgPGdhdnJpZWxzQGNvcmVsLmNvbT4KCUZpeGVkIHJlZ2lzdHJ5IHF1ZXJ5IGVycm9yIHZhbHVlOiBub3cgcmV0dXJucyBFUlJPUl9GSUxFX05PVF9GT1VORC4KCgkqIG9iamVjdHMvYml0bWFwLmMsIG9iamVjdHMvY3Vyc29yaWNvbi5jLCBvYmplY3RzL2RpYi5jLCBvYmplY3RzL3BhbGV0dGUuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJR2V0U3lzdGVtUGFsZXR0ZUVudHJpZXMgcmV0dXJucyBwYWxldHRlIHNpemUgaWYgZW50cmllcz09TlVMTC4KCVVzZSB0aGlzIGluc3RlYWQgb2YgQ09MT1JfR2V0U3lzdGVtUGFsZXR0ZVNpemUuCgoJKiByZWxheTMyL2Rzb3VuZC5zcGVjLCBtdWx0aW1lZGlhL2Rzb3VuZC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglJbXBsZW1lbnRlZCBjbGFzcyBmYWN0b3J5IGZvciBkc291bmQuCgoJKiByZWxheTMyL2tlcm5lbDMyLnNwZWMsIG1pc2MvY29tbS5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJLSBmaXhlZCBhIG1pbmltYWwgZXJyb3IgaW4gR2V0Q29tbU1hc2sgZGVmaW5pdGlvbi4KCS0gYWRkcyBzdHVicyBmb3IgR2V0Q29tbU1vZGVtU3RhdHVzIGFuZCBXYWl0Q29tbUV2ZW50LgoKCSogaW5jbHVkZS94bWFsbG9jLmgsIGxpYnJhcnkvd2luZXN0dWIuYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUZpeGVzIGZvciBDKysgV2luZWxpYiBjb21waWxhdGlvbi4KCgkqIG9sZS9jb21wb2JqLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQnVnZml4OiBzZWNvbmQgUmVnT3BlbktleSBzaG91bGQgdXNlIENMU0lEa2V5IGluc3RlYWQgb2YgSEtFWV9DTEFTU0VTX1JPT1QuCgpGcmkgTm92IDI3IDE2OjA2OjA4IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBCVUdTLCBkb2N1bWVudGF0aW9uL2J1Z3JlcG9ydHMsIGRvY3VtZW50YXRpb24vZGVidWdnaW5nLCBkb2N1bWVudGF0aW9uL25vLXdpbmRvd3MsIGRvY3VtZW50YXRpb24vd2luZS5tYW46CglKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CglEb2N1bWVudGF0aW9uIHVwZGF0ZXMuCgoJKiBNYWtlZmlsZS5pbjogSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoJRml4ZWQgJ21ha2UgaW5zdGFsbCcgdG8gcmVhbGx5IGNoZWNrIGZvciBsaWJ3aW5lLmEgYmVmb3JlIGluc3RhbGxpbmcKCWl0LgoKCSogZ3JhcGhpY3MvZGRyYXcuYywgaW5jbHVkZS9vcHRpb25zLmgsIG1pc2MvbWFpbi5jOgoJU3RlcGhlbiBDcm93bGV5IDxjcm93QGRlYmlhbi5vcmc+CglBZGRlZCBhIG5ldyBjbWRsaW5lIHN3aXRjaCB0byBkaXNhYmxlIFhGODYgREdBIEV4dGVuc2lvbnMsIC1ub2RnYS4KCgkqIGZpbGVzL2RyaXZlLmM6IEFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCUltcHJvdmVkIEdldERpc2tGcmVlU3BhY2UzMkEoKS4KClRodSBOb3YgMjYgMTY6MzI6MDAgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbmRvd3Mvd2luLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJUmVtb3ZlIGluY2x1ZGVkIGNvbG9yLmguCgoJKiBsb2FkZXIvcGVfaW1hZ2UuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglSZW1vdmUgdW5uZWNlc3NhcnkgY2hlY2sgZm9yIGVudHJ5cG9pbnQgYWRkcmVzcyAodGVzdCBiaW5hcnkgd2FzCglpbmZlY3RlZCBieSBhIHZpcnVzIHdoaWNoIHVzZXMgaW52YWxpZCBQRSBsb2FkaW5nIHN0dWZmKS4KCgkqIGdyYXBoaWNzL3BhaW50aW5nLmMsIHJlbGF5MzIvZ2RpMzIuc3BlYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFkZGVkIHN0dWJzIGZvciBTdGFydHBhZ2UgYW5kIEVuZFBhZ2UuCgoJKiBpZjE2MzIvdGh1bmsuYywgb2JqZWN0cy9kYy5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglSZW1vdmVkIHNvbWUgdW5uZWNlc3NhcnkgRklYTUUgb3V0cHV0cy4KCgkqIGlmMTYzMi9rZXJuZWwuc3BlYywgbG9hZGVyL3Rhc2suYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgS0VSTkVMLjYwMiBhbmQgc3R1YiBmb3IgS0VSTkVMLjQ5MC4KCgkqIG9sZS9vbGUybmxzLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBEbyAqbm90KiB6ZXJvIG91dCBvdXRwdXQgYnVmZmVyIGluIEdldE51bWJlckZvcm1hdDMyW0FXXS4KCldlZCBOb3YgMjUgMTg6MTU6NTMgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG9sZS9ubHMvZ3JjLm5scywgb2xlL25scy9za3kubmxzLCBvbGUvbmxzL3RoYS5ubHMsIG9sZS9ubHMvdHJrLm5scywgb2xlL29sZTJubHMuYzoKCVBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoPgoJU21hbGwgZml4ZXMuCgoJKiBsb2FkZXIvbmUvcmVzb3VyY2UuYywgaW5jbHVkZS9tb2R1bGUuaCwgbG9hZGVyL3Jlc291cmNlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCU1vdmVkIC4uLlJlc291cmNlMTYgcm91dGluZXMgdG8gbG9hZGVyL3Jlc291cmNlLmMuCglJbXBsZW1lbnRlZCBhY2Nlc3NpbmcgUEUtZmlsZSByZXNvdXJjZXMgd2l0aCAxNi1iaXQgcmVzb3VyY2Ugcm91dGluZXMuCgoJKiBpZjE2MzIva2VybmVsLnNwZWMsIGxvYWRlci9uZS9NYWtlZmlsZS5pbiwgbG9hZGVyL25lL2NvbnZlcnQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50YXRpb24gb2YgUEUtPk5FIHJlc291cmNlIGNvbnZlcnNpb24gcm91dGluZXMgKEtFUk5FTC42MTUtNjE4KS4KCgkqIGluY2x1ZGUvb2xlYXV0by5oLCBvbGUvb2xlMmRpc3AuYywgcmVsYXkzMi9vbGVhdXQzMi5zcGVjOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50ZWQgMyBtZXRob2RzOiBTeXNBbGxvY1N0cmluZ0xlbigpLCBTeXNSZUFsbG9jU3RyaW5nTGVuKCkKCWFuZCBTeXNTdHJpbmdMZW4oKS4gRW5zdXJlIHRoYXQgdGhlIEJTVFIgb2JqZWN0cyB3ZXJlIGFsbG9jYXRlZAoJYWNjb3JkaW5nIHRvIHRoZSBXaW5kb3dzIGRvY3VtZW50YXRpb24uCgoJKiBkbGxzL3NoZWxsMzIvTWFrZWZpbGUuaW4sIGRsbHMvc2hlbGwzMi9waWRsLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGRsbHMvc2hlbGwzMi9zaGVsbHBhdGguYywgZGxscy9zaGVsbDMyL3NobHZpZXcuYywgaW5jbHVkZS9zaGVsbC5oLCByZWxheTMyL3NoZWxsMzIuc3BlYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTW92ZWQgZXhpc3RpbmcgcGF0aCAtIGZ1bmN0aW9ucyB0byBzaGVsbHBhdGNoLmMuCglOZXc6IFBhdGhSZW1vdmVCbGFua3MzMkF8VywgIFBhdGhNYXRjaFNwZWMzMkF8VywKCVBhdGhTZXREbGdJdGVtUGF0aDMyQXxXLgoKCSogZGxscy9zaGVsbDMyL2ZvbGRlcnMuYywgZGxscy9zaGVsbDMyL3NoZWxsbGluay5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvbGUuYywgaW5jbHVkZS9zaGxvYmouaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTW92ZWQgZXhpc3RpbmcgSVNoZWxsTGluayBjbGFzcy4gTmV3IHN0dWJzIGZvciBJU2hlbGxMaW5rVy4KCgkqIGluY2x1ZGUvYml0bWFwLmgsIGluY2x1ZGUvY29sb3IuaCwgaW5jbHVkZS9nZGkuaCwgaW5jbHVkZS94MTFkcnYuaCwgaW5jbHVkZS94MTFmb250LmgsIG1pc2MvbWFpbi5jLCBvYmplY3RzL2JpdG1hcC5jLCBvYmplY3RzL2NvbG9yLmMsIG9iamVjdHMvZGMuYywgb2JqZWN0cy9nZGlvYmouYywgd2luZG93cy9BdHRpYy9ncmFwaGljcy5jLCB3aW5kb3dzL2RjZS5jLCB3aW5kb3dzL2Rpc3BsYXkuYywgd2luZG93cy9ldmVudC5jLCB3aW5kb3dzL2lucHV0LmMsIHdpbmRvd3MvbW91c2UuYywgd2luZG93cy9zY3JvbGwuYywgd2luZG93cy9zeXNtZXRyaWNzLmMsIHdpbmRvd3MvdXNlci5jLCBncmFwaGljcy9kZHJhdy5jLCBncmFwaGljcy9wYWludGluZy5jLCBncmFwaGljcy93aW5nLmMsIGdyYXBoaWNzL3gxMWRydi9iaXRibHQuYywgZ3JhcGhpY3MveDExZHJ2L2JpdG1hcC5jLCBncmFwaGljcy94MTFkcnYvYnJ1c2guYywgZ3JhcGhpY3MveDExZHJ2L2NsaXBwaW5nLmMsIGdyYXBoaWNzL3gxMWRydi9kaWIuYywgZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMsIGdyYXBoaWNzL3gxMWRydi9pbml0LmMsIGdyYXBoaWNzL3gxMWRydi9wZW4uYywgZ3JhcGhpY3MveDExZHJ2L3RleHQuYywgZ3JhcGhpY3MveDExZHJ2L3hmb250LmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVJlbW92ZSBYX0RDX0lORk8gZnJvbSBEQyBhbmQgbWFrZSBpdCBiZWhhdmUgbGlrZSBhbnkgb3RoZXIgUERFVklDRS4KCgkqIGluY2x1ZGUvbWlzY2VtdS5oLCBtc2Rvcy9kcG1pLmMsIG1zZG9zL2ludDIxLmMsIG1zZG9zL2ludDI1LmMsIG1zZG9zL2ludDI2LmMsIG1zZG9zL2ludDJmLmMsIG1zZG9zL3htcy5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglDaGFuZ2VkIENUWF9TRUdfT0ZGX1RPX0xJTiB0byBhbGxvdyBsaW5lYXIgYWRkcmVzc2VzIGluIDMyLWJpdAoJcmVnaXN0ZXJzICh1c2VkIGJ5IERldmljZUlvQ29udHJvbCkuIEFkYXB0ZWQgYWxsIHVzZXJzLgoKCSogaW5jbHVkZS93aW5pb2N0bC5oLCB3aW4zMi9kZXZpY2UuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgKG1vc3QpIFZXaW4zMi5WeEQgRGV2aWNlSW9Db250cm9sIHJvdXRpbmVzLgoKVHVlIE5vdiAyNCAyMDo0NzoxNyAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS90aHJlYWQuaCwgc2NoZWR1bGVyL3RocmVhZC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IFNldCB0aGUgVEVCRl9XSU4zMiBmbGFnIGluIHRlYi5mbGFncyBmb3IgMzItYml0IHRocmVhZHMuCgoJKiBsb2FkZXIvdGFzay5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogQ2FsbCBJbml0VGhyZWFkSW5wdXQgaW4gR2V0RmFzdFF1ZXVlIHdpdGggY29ycmVjdCBwYXJhbWV0ZXIKCWZvciAzMi1iaXQgcXVldWVzLgoKCSogd2luMzIva2VybmVsMzIuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IFtRRl1UX1RodW5rIHNob3VsZCBjbGVhciBISVdPUkQoRUFYKSBvbiByZXR1cm4uCglCdWdmaXg6IGhhY2sgZm9yIHN0dXBpZCBVU0VSMzIgQ2FsbGJhY2tHbHVlTFMgcm91dGluZSBpbiBDb21tb24zMlRoa0xTLgoKCSogaWYxNjMyL3RodW5rLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBCYWQganVtcCBnZW5lcmF0ZWQgaW4gVEhVTktfQWxsb2NMU1RodW5rbGV0LgoJQnVnZml4OiBGb3Jnb3QgdG8gY29udmVydCBzZWdwdHIgaW4gQWxsb2NMU1RodW5rbGV0Q2FsbGJhY2tFeC4KCgkqIGdyYXBoaWNzL3gxMWRydi94Zm9udC5jOiBFcmljIFdhcm5rZSA8ZXJpY0Bzbm93bW9vbi5jb20+CglEb24ndCBtYXRjaCBhZ2FpbnN0IFN5bWJvbCBvciBOaWwgZm9udHMuCgoJKiBtZW1vcnkvZ2xvYmFsLmM6IFN0ZXBoZW4gQ3Jvd2xleSA8Y3Jvd0BkZWJpYW4ub3JnPgoJUmV0dXJuIHRoZSAiYnVmZmVycyIgYW5kICJjYWNoZWQiIG1lbW9yeSBhcyBmcmVlIHNpbmNlIGl0IGlzCglkZWFsbG9jYXRlZCB3aGVuIGEgcHJvZ3JhbSBuZWVkcyBpdCBhbnl3YXkuCgoJKiB3aW5kb3dzL2RpYWxvZy5jLCBpbmNsdWRlL3dpbmRvd3MuaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQnVnZml4OiBTZXREbGdJdGVtVGV4dDMyIHJldHVybnMgQk9PTCBub3Qgdm9pZC4KCgkqIHJlbGF5MzIvdXNlcjMyLnNwZWMsIHdpbmRvd3MvdXNlci5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgc3R1YnMgR2V0VXNlck9iamVjdEluZm9ybWF0aW9uQXxXLgoKCSogcmVsYXkzMi9yZWxheTM4Ni5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVJlbW92ZWQgbGVmdCBvdmVyICdzaG93JyBhbmQgdXNlbGVzcyBkZWFkYmVlZiBjaGVja2luZyB3aGljaCBkb2Vzbid0Cgl3b3JrLgoKCSogbG9hZGVyL3BlX2ltYWdlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRqdXN0IGJyb2tlbiBlbnRyeXBvaW50IGFkZHJlc3Nlcy4gKHdpbjk4IG5vdGVwYWQuZXhlKQoKCSogZG9jdW1lbnRhdGlvbi9zdGF0dXMvbXVsdGltZWRpYTogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglVcGRhdGVkIGFjY29yZGluZyB0byBkZXZlbG9wbWVudC4KCgkqIGlmMTYzMi9tbXN5c3RlbS5zcGVjLCByZWxheTMyL3dpbm1tLnNwZWM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVNvbWUgbmV3IHN0dWJzIChtaWRpU3RyZWFtWFhYIGZ1bmN0aW9ucywgc29tZSBtY2kgZnVuY3Rpb25zLCBhbmQKCXNvbWUgbW1pbyBmdW5jdGlvbnMpLgoKCSogbXVsdGltZWRpYS9taWRpLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJTW92ZWQgTUNJIHBhcnQgdG8gbWNpbWlkaS5jIDsgYWRkZWQgRHJpdmVyUHJvYy4KCgkqIG11bHRpbWVkaWEvYXVkaW8uYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglNb3ZlZCBNQ0kgcGFydCB0byBtY2l3YXZlLmMgOyBhZGRlZCBzb21lIGVycm9yIGNoZWNraW5nIDsgYWRkZWQKCURyaXZlclByb2MKCgkqIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaCwgbXVsdGltZWRpYS9NYWtlZmlsZS5pbjoKCUVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQWRkZWQgbWNpbWlkaSBhbmQgbWNpd2F2ZS4KCgkqIG11bHRpbWVkaWEvbWNpbWlkaS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUZpeGVkIGJ1ZyBpbiBNQ0lfSU5GTyBjb21tYW5kIDsgZml4ZWQgcGF1c2UvcmVzdW1lIGNvbW1hbmRzIDsgZml4ZWQKCXNlZWsgY29tbWFuZC4KCgkqIG11bHRpbWVkaWEvbWNpd2F2ZS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVN0YXJ0aW5nIHdyaXRpbmcgTUNJIHBhcnQgOyBmaXhlZCBidWcgaW4gTUNJX0lORk8gY29tbWFuZC4KCgkqIG11bHRpbWVkaWEvbW1pby5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUFkZGVkIHNvbWUgbWlzc2luZyBzdHVicyBpbiAzMiBiaXQgcGFydC4KCgkqIG11bHRpbWVkaWEvbWNpc3RyaW5nLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJTWFkZSB1c2Ugb2YgbmV3IDE2LzMyIE1DSSBtZXNzYWdlIGhhbmRsaW5nIGluIG1tc3lzdGVtLmMuCgoJKiBpbmNsdWRlL21tc3lzdGVtLmgsIGluY2x1ZGUvbXVsdGltZWRpYS5oOgoJRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglBZGRlZCBzb21lIG5ldyBmdW5jdGlvbnMvc3RydWN0dXJlcyBkZWZpbml0aW9ucy4oSSBjb3VsZG4ndCBnZXQgYWxsCgl0aGUgbWFuaWZlc3QgY29uc3RhbnRzIHZhbHVlcyB0aGF0IE1TIHdhcyByZWZlcnJpbmcgdG8gaW4gaXRzIHNwZWNzLi4uCglpZiBzb21lb25lIGhhcyB0aGVtLi4uKQoKCSogbXVsdGltZWRpYS9tY2lhbmltLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQWRkZWQgc29tZSBlcnJvciBjaGVja2luZyA7IG1hZGUgdXNlIG9mIG5ldyAxNi8zMiBNQ0kgbWVzc2FnZSBoYW5kbGluZwoJaW4gbW1zeXN0ZW0uYyA7IGZpeGVkIGJ1ZyBpbiBNQ0lfSU5GTyBjb21tYW5kLgoKCSogbXVsdGltZWRpYS9tY2ljZGEuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglBZGRlZCBzb21lIGVycm9yIGNoZWNraW5nIDsgbWFkZSB1c2Ugb2YgbmV3IDE2LzMyIE1DSSBtZXNzYWdlCgloYW5kbGluZyBpbiBtbXN5c3RlbS5jLgoJQWRkZWQgV2luOTUgY29tbWFuZCB0byBoYW5kbGUgY2Qtcm9tIHdpdGggYm90aCBkYXRhIGFuZCBhdWRpbyA7IGZpeGVkCglidWcgaW4gTUNJX0lORk8gY29tbWFuZCA7IHNoYWRvd2luZyBNQ0kgc3RhdHVzIGZvciBkZXZpY2VzIHRoYXQgY2FuJ3QKCWdldCBjdXJyZW50IHN0YXR1cyA7IGZpeGVkIHN0YXR1cyBub3QgYmVpbmcgdXBkYXRlZCBvbiBjZCBjaGFuZ2UuCgoJKiBtdWx0aW1lZGlhL21tc3lzdGVtLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJRmFjdG9yaXplZCAxNi8zMiBiaXQgTUNJIGZ1bmN0aW9uIGJ5IHVzaW5nICBtZXNzYWdlIG1hcHBpbmcgZnJvbSAxNgoJdG8gMzIgYml0cyA7IGFkZGVkIHNvbWUgbmV3IHByb3RvdHlwZXMgbWNpU2VuZENvbW1hbmQsIG1jaVNlbmRTdHJpbmcsCgltY2koU2V0L0dldClZaWVsZFByb2MgOyBzdGFydGVkIHdyaXRpbmcgbWlkaVN0cmVhbVhYWCBmdW5jdGlvbnMgLSBub3QKCXlldCB3b3JraW5nLiBGaXhlZCBzb21lIGlzc3VlcyByZWdhcmRpbmcgYXN5bmNocm9ub3VzIE1DSSBjb21tYW5kcyA7CglmaXhlZCBNQ0lfU1lTSU5GTyBjb21tYW5kLgoKCSogcmVzb3VyY2VzL3N5c3Jlc19Gci5yYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCBzb21lIHF1aXJrcy4KClN1biBOb3YgMjIgMTg6Mjk6NTAgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGRsbHMvc2hlbGwzMi9jb250bWVudS5jLCBkbGxzL3NoZWxsMzIvZGF0YW9iamVjdC5jLCBkbGxzL3NoZWxsMzIvZm9sZGVycy5jLCBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmMsIGRsbHMvc2hlbGwzMi9waWRsLmgsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaCwgZGxscy9zaGVsbDMyL3NobHZpZXcuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTWFueSBmaXhlcy4KCgkqIGRsbHMvc2hlbGwzMi9waWRsLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IGZ1bmN0aW9uOiBfSUxHZXRFeHRlbnNpb24uCgoJKiBkbGxzL3NoZWxsMzIvTWFrZWZpbGUuaW4sIGRsbHMvc2hlbGwzMi9jbGFzc2VzLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBmaWxlLiBIS0VZX0NMQVNTRVNfUk9PVCBoYW5kbGluZy4KCgkqIGRvY3VtZW50YXRpb24vY29tbW9uX2NvbnRyb2xzOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJVXBkYXRlZC4KCgkqIGRsbHMvY29tY3RsMzIvaGVhZGVyLmMsIGRsbHMvY29tY3RsMzIvc3RhdHVzLmMsIGRsbHMvY29tY3RsMzIvdG9vbGJhci5jLCBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvaGVhZGVyLmgsIGluY2x1ZGUvbGlzdHZpZXcuaCwgaW5jbHVkZS9vbGUyLmgsIGluY2x1ZGUvcmViYXIuaCwgaW5jbHVkZS9zdGF0dXMuaCwgaW5jbHVkZS90b29sYmFyLmgsIGluY2x1ZGUvdG9vbHRpcHMuaDoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBVbmljb2RlIHN1cHBvcnQgKGF0IGxlYXN0IHBhcnRpYWxseSkuCgoJKiBvbGUvTWFrZWZpbGUuaW4sIG9sZS9jb21wb2JqLmMsIG9sZS9vbGVvYmouYywgaW5jbHVkZS9vbGVvYmouaCwgaW5jbHVkZS9zaGxvYmouaDoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBJT2xlQWR2aXNlSG9sZXIgaW50ZXJmYWNlIChzdGlsbCBhIGR1bW15KSBhbmQgZml4ZWQKCUNyZWF0ZU9sZUFkdmlzZUhvbGRlcigpLgoKCSogZGxscy9jb21jdGwzMi9jb21tY3RybC5jLCBkbGxzL2NvbWN0bDMyL3Rvb2x0aXBzLmM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgZ2xvYmFsIHN1YmNsYXNzaW5nIGF0b20sIHVzZWQgYnkgdG9vbHRpcHMgYW5kIHVwZG93biAobm90IHlldCkuCgoJKiBkbGxzL2NvbWN0bDMyL3JlYmFyLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglJbXByb3ZlZCBsYXlvdXQgY29kZS4KCgkqIGRsbHMvY29tY3RsMzIvaW1hZ2VsaXN0LmMsIHJlbGF5MzIvY29tY3RsMzIuc3BlYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCBJbWFnZUxpc3RfTG9hZEltYWdlKCkuCgoJKiBkbGxzL2NvbWN0bDMyL2NvbWJvZXguYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIENNRU1fU0VUSVRFTTMyQSBhbmQgbWVzc2FnZSBmb3J3YXJkaW5nIHRvIGNvbWJvYm94LgoKCSogb2xlL21vbmlrZXIuYywgcmVsYXkzMi9vbGUzMi5zcGVjOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIHN0dWIgZm9yIENyZWF0ZUl0ZW1Nb25pa2VyKCkuCgoJKiBkbGxzL2NvbWN0bDMyL2NvbWN0bDMydW5kb2MuYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUZpeGVkIHNvbWUgdW5kb2N1bWVudGVkIGZ1bmN0aW9uIG5hbWVzIGFuZCBpbXBsZW1lbnRlZCBEUEFfTWVyZ2UKCXBhcnRpYWxseS4KCgkqIGNvbnRyb2xzL2J1dHRvbi5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJRW5hYmxlZCBkb3VibGUgY2xpY2sgZm9yIGJ1dHRvbnMuCgoJKiBpbmNsdWRlL3dpbmRvd3MuaDogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIGNvbW1hbmQgYW5kIHJldHVybiBjb25zdGFudHMgdXNlZCBieSBXTV9OT1RJRllGT1JNQVQuCgoJKiBvYmplY3RzL2JydXNoLmMsIG9iamVjdHMvZGMuYywgb2JqZWN0cy9nZGlvYmouYywgb2JqZWN0cy9wZW4uYywgd2luZG93cy9BdHRpYy9ncmFwaGljcy5jLCBncmFwaGljcy9wYWludGluZy5jLCBncmFwaGljcy94MTFkcnYvYml0Ymx0LmMsIGdyYXBoaWNzL3gxMWRydi9kaWIuYywgZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMsIGdyYXBoaWNzL3gxMWRydi90ZXh0LmMsIGluY2x1ZGUvZGMuaCwgaW5jbHVkZS94MTFkcnYuaDoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJTW92ZWQgRENfU2V0dXBHQyBmdW5jdGlvbnMgdG8gZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMuCgoJKiBpbmNsdWRlL29wdGlvbnMuaCwgbWlzYy9tYWluLmMsIG9sZS9vbGUybmxzLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNtYWxsIGZpeGVzIHRvIGdldCB0aGUgZGVmYXVsdCBsYW5ndWFnZSB0byBhIHNlbnNpYmxlIHZhbHVlLgoJVGhhbmtzIHRvIFBhYmxvLgoKCSogQU5OT1VOQ0UsIERFVkVMT1BFUlMtSElOVFMsIFJFQURNRSwgZG9jdW1lbnRhdGlvbi9SRUFETUUuZG9jdW1lbnRhdGlvbiwgZG9jdW1lbnRhdGlvbi9ob3ctdG8tcG9ydCwgZG9jdW1lbnRhdGlvbi93aW5lLm1hbiwgZG9jdW1lbnRhdGlvbi93aW5lLnRleGluZm86CglEb3VnbGFzIFJpZGd3YXkgPHJpZGd3YXlAd2luZWhxLmNvbT4KCU1pc2NlbGxhbmVvdXMgc21hbGwgZml4ZXMuCgoJKiBncmFwaGljcy93aW4xNmRydi9wcnRkcnYuYywgaWYxNjMyL2dkaS5zcGVjLCBpbmNsdWRlL3dpbmRvd3MuaCwgb2JqZWN0cy9tZXRhZmlsZS5jLCBvYmplY3RzL3JlZ2lvbi5jLCByZWxheTMyL2dkaTMyLnNwZWM6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglBZGRlZCBXaW4xNiBpbXBsZW1lbnRhdGlvbiBmb3IgR2V0UmVnaW9uRGF0YSgpLgoKCSogb2xlL3R5cGVsaWIuYzogQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJRW5oYW5jZWQgT0FCdWlsZFZlcnNpb24oKSB0byByZXR1cm4gZGlmZmVyZW50IHZlcnNpb24gdmFsdWVzIGZvcgoJZGlmZmVyZW50IHdpbnZlcnMuCgoJKiBtc2Rvcy9pbnQyMS5jOiBBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglBZGRlZCBJTlQyMV9QYXJzZUZpbGVOYW1lSW50b0ZDQigpIGFuZCBzb21lIG90aGVyIHRoaW5ncyB0byBnZXQKCUNPTU1BTkQuQ09NIHdvcmtpbmcuCgoJKiByZWxheTMyL2tlcm5lbDMyLnNwZWM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQWRkZWQgbWlzc2luZyBlbnRyeSBmb3IgR2V0TnVtYmVyRm9ybWF0Vy4KCgkqIG9iamVjdHMvcGFsZXR0ZS5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUNoZWNraW5nIGZvciBOVUxMLXBvaW50ZXIuCgoJKiBvbGUvbmxzL2ZyYS5ubHMsIG9sZS9ubHMvZnJiLm5scywgb2xlL25scy9mcmMubmxzLCBvbGUvbmxzL2ZybC5ubHM6CglSb2JlcnQgUG91bGlvdCA8a3J5bm9zQGNsaWMubmV0PgoJQmV0dGVyIE9MRSBzdXBwb3J0IGluIEZyZW5jaCBsYW5ndWFnZXMuCgoJKiBsb2FkZXIvbW9kdWxlLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSW1wbGVtZW50YXRpb24gb2YgQ3JlYXRlUHJvY2VzczMyVy4KCgkqIHdpbmRvd3MvZXZlbnQuYzogRGF2aWQgTHV5ZXIgPGx1eWVyQHVjcy51d2EuZWR1LmF1PgoJUXVldWluZyBvZiBkZWZlcnJlZCBFeHBvc2UgZXZlbnRzLgoKCSogY29udHJvbHMvbGlzdGJveC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUxCX0dFVFRFWFQ6IEhhbmRsZSBwYXNzZWQgTlVMTCBidWZmZXIuCgoJKiBjb250cm9scy9jb21iby5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNCX0dFVFRFWFQ6IFVzZSBscEJ1ZmZlciBpbnN0ZWFkIG9mIGxwVGV4dCBmb3IgTEJfR0VUVEVYVDMyLCBoYW5kbGUgMAoJYnl0ZSBOVUxMIGJ1ZmZlci4KCgkqIG9sZS9ubHMvZnJzLm5scywgb2xlL25scy9za3kubmxzLCBvbGUvb2xlMm5scy5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglUdXJuIG1lZ2EgZG91YmxlIHN3aXRjaCBpbnRvIHN0YXRpYyB0YWJsZSAocmVkdWNlcyBjb21waWxlIHRpbWUpLgoKCSogQVVUSE9SUywgaW5jbHVkZS9hdXRob3JzLmg6IEFkZGVkIFJvYmVydCBSaWdncy4KCgkqIGluY2x1ZGUvZDNkLmg6IFJvYmVydCBSaWdncyA8cnJpZ2dzQHRlc3Nlci5jb20+CglpbmNsdWRlIGRkcmF3LmgsIHF1ZXN0aW9uYWJsZSBmaXggZm9yIHF1ZXN0aW9uYWJsZSBzdHJ1Y3QvdW5pb24KCWNvbnN0cnVjdCBpbiBNUydzIEQzRFZFQ1RPUiBkZWZpbml0aW9uLgoKCSogaW5jbHVkZS9kc291bmQuaDogUm9iZXJ0IFJpZ2dzIDxycmlnZ3NAdGVzc2VyLmNvbT4KCU1vcmUgZmxhZ3MgKERpcmVjdFggNS4yKSwgRGlyZWN0U291bmQzRExpc3RlbmVyIGFuZAoJRGlyZWN0U291bmQzREJ1ZmZlciBzdHJ1Y3R1cmVzLCBpbmNsdWRlIHNvbWUgcmVxdWlyZWQgZmlsZXMKCSh3aW5kb3dzLmgsIGNvbXBvYmouaCwgYW5kIGQzZC5oKS4KCgkqIG11bHRpbWVkaWEvZHNvdW5kLmM6IFJvYmVydCBSaWdncyA8cnJpZ2dzQHRlc3Nlci5jb20+CglEaXJlY3RTb3VuZDNETGlzdGVuZXIgYW5kIERpcmVjdFNvdW5kM0RCdWZmZXIgc3R1YnMsIG5ldyBtaXhlciBjb2RlLAoJcHJpbWFyeSBidWZmZXIgaXMgaW1wbGVtZW50ZWQgY2xvc2VyIHRvIHdoYXQgdGhlIFNESyBkb2NzIHNwZWNpZnksCglvdGhlciBTREsgZG9jdW1lbnRlZCBiZWhhdmlvdXIgZW5mb3JjZWQuIENvbXBsZXRlZCB0aGUgZGV2Y2FwcyBsaXN0LgoKCSogbWlzYy9jcnRkbGwuYywgcmVsYXkzMi9jcnRkbGwuc3BlYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IHN0dWJzIHN0cmRhdGUsIHN0cnRpbWUuCgoJKiBtZW1vcnkvc2VsZWN0b3IuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiB0eXBvIGluIFNVbk1hcExTX0lQX0VCUF84IGxlYWQgdG8gc3RhY2sgY29ycnVwdGlvbi4KCgkqIG1pc2MvY29tbS5jOiBDbGlmZiBXcmlnaHQgPGNsaWZmQHNuaXBlNDQ0Lm9yZz4KCUZpeGVkIGEgbWFzayBzZXQsIGFuZCBvdGhlciBwYXJpdHkgc2V0dGluZyBidWdzIGZvciBzZXJpYWwgcG9ydHMuCgoJKiBpbmNsdWRlL3NpZ19jb250ZXh0Lmg6IFZhc3VkZXYgTXVsY2hhbmRhbmkgPHZhc3VAdGVpbC5zb2Z0Lm5ldD4KCUFkZGVkIEJTREkgc2lnY29udGV4dCBkZWZpbml0aW9ucy4KCgkqIHdpbmRvd3MvY2xhc3MuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUZpeGVkIHR5cG8uCgoJKiByZWxheTMyL3JlbGF5Mzg2LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJUmVtb3ZlIG5vdyB1c2VsZXNzIFJFTEFZX1Nob3dEZWJ1Z21zZ3NSZWxheSBjaGVjay4KCgkqIGxvYWRlci9wZV9pbWFnZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCURvIG5vdCByZWxvY2F0ZSB0aGUgcG9pbnRlcnMgaW4gdGhlIElNQUdFX1RIUkVBRF9MT0NBTF9TVE9SQUdFCglkaXJlY3RvcnksIGZvciB0aGV5IHNlZW0gdG8gYmUgcmVsb2NhdGVkIGJ5IHRoZSBzdGFuZGFyZCByZWxvY2F0aW5nCgltZWNoYW5pc20uIChFeHBsaWNpdGx5IGNoZWNrZWQgb25lIHByb2dyYW0gdXNpbmcgaXQpCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgaW5jbHVkZS9zaGVsbC5oOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglQYXRoQWRkQmFja3NobGFzaCwgUGF0aFJlbW92ZUJhY2tzbGFzaDogYXJndW1lbnQgaXMgbm90IGNvbnN0YW50LgoKCSogd2luZG93cy93aW4uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDaGVjayB3bmRQdHIgZm9yIE5VTEwuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUJsdEZhc3Q6IEhvbm9yIGxQaXRjaCwgTG9jay9VbmxvY2sgc3VyZmFjZXMgKHhsaWIgbmVlZHMgdW5sb2NrIHRvIGRyYXcpLgoKCSogbWlzYy9zcG9vbGVyLmMsIG1pc2MvTWFrZWZpbGUuaW4sIG1pc2NlbXUvbWFpbi5jLCBNYWtlZmlsZS5pbiwgZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jLCBsb2FkZXIvbWFpbi5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglUYWtlcyBwcmludCBzcG9vbGVyIGZ1bmN0aW9ucyBvdXQgb2Ygd2luMTZkcnYuCglBbGxvd3MgdGhlIFBvc3RTY3JpcHQgZHJpdmVyIHRvIGdvIGludG8gbGlid2luZS4KCgkqIGlmMTYzMi9nZGkuc3BlYywgb2JqZWN0cy9icnVzaC5jLCBvYmplY3RzL3BhbGV0dGUuYzoKCUlhbiBTY2htaWR0IDxpcnNtYW5AaWFnLm5ldD4KCUFkZGVkIHN0dWJzIGZvciB0d28gdW5kb2N1bWVudGVkIEdESSByb3V0aW5lcywgU2V0TWFnaWNDb2xvcnMgYW5kCglTZXRTb2xpZEJydXNoLiBUaGlzIGFsbG93cyBXaW45OCBuYXRpdmUgVVNFUiB0byBzdGFydCB1cC4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IFN0ZXBoZW4gQ3Jvd2xleSA8Y3Jvd0BkZWJpYW4ub3JnPgoJRml4ZWQgdGhlIERHQSBkZXRlY3Rpb24gY29kZSBpbiBkZHJhdy4gWW91IGRvbid0IG5lZWQgcm9vdCBhY2Nlc3MsCgloYXZpbmcgcit3IGFjY2VzcyB0byAvZGV2L21lbSBpcyBlbm91Z2guCgoJKiBkb2N1bWVudGF0aW9uL3N0YXR1cy9kaXJlY3RkcmF3LCBncmFwaGljcy9kZHJhdy5jLCBncmFwaGljcy93aW5nLmMsIGluY2x1ZGUvZGRyYXcuaDoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRGlyZWN0RHJhdyBzdGF0dXMgdXBkYXRlZC4KCVVzZSBjb29wZXJhdGl2ZSB3aW5kb3cgZm9yIGRyYXdpbmcgaW4geGxpYiBpbXBsZW1lbnRhdGlvbiBpZiBwb3NzaWJsZS4KCVNsaWdodGx5IHJlc3RydWN0dXJlZCBJRGlyZWN0RHJhd1N1cmZhY2U6OkJsdCBzbyBpdCBkb2Vzbid0IGNyYXNoLgoKCSogd2luZG93cy9rZXlib2FyZC5jOiBEYXZpZCBGYXVyZSA8RGF2aWQuRmF1cmVAaW5zYS1seW9uLmZyPgoJTWljcm8gcGF0Y2ggZm9yIEFsdEdyIGtleSBvbiBnZXJtYW4ga2V5Ym9hcmRzLgoKCSogZmlsZXMvZG9zX2ZzLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRml4ZXMgZXJyb3IgaGFuZGxpbmcgKFNldExhc3RFcnJvcigpIGFuZCByZXR1cm4gdmFsdWUpLgoKCSogb2JqZWN0cy90ZXh0LmMsIGluY2x1ZGUvd2luZG93cy5oOiBHYWVsIGRlIENoYWxlbmRhciA8Z2FlbEBsaW1zaS5mcj4KCVBhcnRpYWxseSBjb21wbGV0ZSBHZXRUZXh0Q2hhcnNldEluZm8gYW5kIGNvcnJlY3RzIHJldHVybiB2YWx1ZXMgZm9yCgl0aGlzIGZhbWlseSBvZiBmdW5jdGlvbnMuCgpTdW4gTm92IDE1IDE4OjEyOjEyIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBvbGUvY29tcG9iai5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUJ1ZyBmaXguCgoJKiBvYmplY3RzL2RpYi5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJRml4ZWQgcmV0cmlldmFsIG9mIGludmFsaWQgcGFsZXR0ZSBkYXRhIGluIEdldERJQml0cygpLgoKCSogd2luZG93cy93aW5wb3MuYzogSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEB6ZWFsYW5kLm12LmNvbT4KCUFsbG93IFNXUF9ISURFV0lORE9XIHRvIGJlIGNhbGxlZCBvbiB3aW5kb3dzIHRoYXQgYXJlIGFscmVhZHkgaGlkZGVuCgl3aXRob3V0IHVubWFwcGluZyB0aGVtIGFnYWluLgoKCSogd2luZG93cy9zY3JvbGwuYzogUGltIEJvbGxlbiA8cGltQGdpbWxpLmlhZWh2Lm5sPgoJRml4ZWQgc2Nyb2xsIGJ1ZyBpbiBTY3JvbGxXaW5kb3dFeDMyIHdoaWNoIGNhdXNlZCBnYXJiYWdlIG9uIHNjcmVlbgoJb3V0c2lkZSBkZXNrdG9wIHdpbmRvdyB3aXRoIGd0d2luLmV4ZSAoRHV0Y2ggYmFua2luZyBwcm9ncmFtKS4KCgkqIGxvYWRlci9tYWluLmMsIG1lbW9yeS9hdG9tLmMsIG1pc2MvZGRlbWwuYywgd2luZG93cy9jbGFzcy5jLCB3aW5kb3dzL21lc3NhZ2UuYywgaW5jbHVkZS9BdHRpYy9hdG9tLmgsIGluY2x1ZGUvZ2xvYmFsLmg6CglTbWFsbCBhdG9tIGZpeGVzLgoKCSogb2JqZWN0cy9kaWIuYzogRGlyayBUaGllcmJhY2ggPHRoaWVyYmFjaEBtYXRoZW1hdGlrLnR1LWRhcm1zdGFkdC5kZT4KCUZpeGVkIGJ1ZyBpbiBTdHJldGNoRElCaXRzMzIgKHdyb25nIG9yaWdpbikuCgoJKiB3aW5kb3dzL3dpbnByb2MuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTbWFsbCBmaXhlcy4KCgkqIGluY2x1ZGUvZGRyYXcuaCwgaW5jbHVkZS90c194c2htLmgsIHRvb2xzL21ha2VfWDExd3JhcHBlcnMsIHRzeDExL1gxMV9jYWxscywgdHN4MTEvdHNfeHNobS5jLCBncmFwaGljcy9kZHJhdy5jOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglTb21lIGNvcnJlY3Rpb25zIHRvIHRoZSBoYW5kbGluZyBvZiBvZmYtc2NyZWVuIGJ1ZmZlcnMuCglDb3JyZWN0aW9uIHRvIHRoZSBFbnVtRGlzcGxheU1vZGVzIGZ1bmN0aW9uLgoJQWRkZWQgWFNobSBzdXBwb3J0IHRvIFhsaWIgZHJpdmVyLgoJT3BlbiBhIERpcmVjdFggd2luZG93IGV2ZW4gd2hlbiB1c2luZyB0aGUgREdBIGRyaXZlci4KCgkqIGluY2x1ZGUvc2hlbGwuaCwgaW5jbHVkZS9zaGxvYmouaCwgbWlzYy9zaGVsbC5jLCByZWxheTMyL3NoZWxsMzIuc3BlYywgZGxscy9zaGVsbDMyL01ha2VmaWxlLmluLCBkbGxzL3NoZWxsMzIvY29udG1lbnUuYywgZGxscy9zaGVsbDMyL2RhdGFvYmplY3QuYywgZGxscy9zaGVsbDMyL2ZvbGRlcnMuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGRsbHMvc2hlbGwzMi9zaGVsbG9sZS5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglDbGVhbnVwLCBzbWFsbCBmaXhlcywgYSBmZXcgbmV3IHN0dWJzLgoKCSogZGxscy9zaGVsbDMyL3NobHZpZXcuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglIYW5kbGluZyBmb3IgbGlzdHZpZXdzdHlsZXMsIHZpZXcgbW9kZSBidXR0b25zIGluIGZpbGVkaWFsb2dzCgllbmFibGVkIGFuZCBoYW5kbGVkLgoJTmV3IGxpc3R2aWV3IGNvbHVtbnMgU2l6ZSwgVHlwZSwgTW9kaWZpZWQgZm9yIHJlcG9ydHZpZXcKCWNyZWF0ZWQgYW5kIGhhbmRsZWQuCgoJKiBkbGxzL3NoZWxsMzIvaWZfbWFjcm9zLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBmaWxlLCB3cmFwcGVyIGZvciBJU2hlbGxCcm93c2VyIGNsYXNzLgoKCSogZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgZmlsZSwgc29tZSBoZWxwZXIgZnVuY3Rpb25zIGZvciBpY29uIGNhY2hlLgoJSW1wbGVtZW50ZWQgRXh0cmFjdEljb25FeDsgbW92ZWQgU0hNYXBQSURMVG9TeXN0ZW1JbWFnZUxpc3RJbmRleCwKCVNoZWxsX0dldEltYWdlTGlzdCBpbiB0aGlzIGZpbGUuCgoJKiBkbGxzL3NoZWxsMzIvcGlkbC5jLCBkbGxzL3NoZWxsMzIvcGlkbC5oOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglJbXBsZW1lbnRlZDogSUxJc0VxYWwsIElMRmluZENoaWxkLCBfSUxHZXRGaWxlRGF0ZSwgX0lMR2V0RmlsZVNpemUuCgoJKiBsb2FkZXIvbW9kdWxlLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTG9hZExpYnJhcnlFeDogc2hvdyBhIHdhcm5pbmcgd2hlbiBjYWxsZWQgd2l0aCB1bmltcGxlbWVudGVkIHBhcm0uCgoJKiBtaXNjZW11L2luc3RyLmM6IENsZWFuZWQgdXAgYSBiaXQuCgoJKiBtZW1vcnkvc2VsZWN0b3IuYywgbWlzY2VtdS9pbnN0ci5jLCB0b29scy9idWlsZC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDbGVhbiBpbnZhbGlkIHNlbGVjdG9ycyBvbiB0aGUgcG9wICV4cyBmcm9tIHRoZSBTVEFDS0ZSQU1FIGl0c2VsZgoJaW5zdGVhZCBvZiB1c2luZyBsaW5rZWQgbGlzdCBoYWNrLgoKCSogTWFrZWZpbGUuaW46IFJlbW92ZWQgZ2V0cyBtZXNzYWdlLgoKCSogb2xlL25scy90aGEubmxzOiBEYXZpZCBMdXllciA8bHV5ZXJAdWNzLnV3YS5lZHUuYXU+CglBZGRlZCBUaGFpIG5scy1yZXNvdXJjZXMuCgoJKiBvbGUvbmxzL1JFQURNRSwgb2xlL25scy9jemUubmxzLCBvbGUvbmxzL2VzZS5ubHMsIG9sZS9ubHMvZXNnLm5scywgb2xlL25scy9lc3QubmxzLCBvbGUvbmxzL2V1cS5ubHMsIG9sZS9ubHMvZm9zLm5scywgb2xlL25scy9ocnYubmxzLCBvbGUvbmxzL2h1bi5ubHMsIG9sZS9ubHMvaXNsLm5scywgb2xlL25scy9ub3IubmxzLCBvbGUvbmxzL3Bsay5ubHMsIG9sZS9ubHMvcHRnLm5scywgb2xlL25scy9yb20ubmxzLCBvbGUvbmxzL3Nsdi5ubHMsIG9sZS9ubHMvc3ZlLm5scywgb2xlL29sZTJubHMuYywgaW5jbHVkZS93aW5ubHMuaDoKCVBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoPgoJRGlzcGxheSB0aGUgbGFuZ3VhZ2UgaWQgZm9yICJYWFggbm90IHN1cHBvcnRlZCBmb3IgeW91ciBsYW5ndWFnZSIKCW1lc3NhZ2VzLgoJQWRkZWQgYWxsIGxhbmd1YWdlcyBhbmQgc3VibGFuZ3VhZ2VzIGZvciBsYW5ndWFnZXMgc3VwcG9ydGVkIGluCglyZXNvdXJjZXMvc3lzcmVzX1h4LgoKCSogb2xlL29sZTIuYywgcmVsYXkzMi9vbGUzMi5zcGVjOiBHYXZyaWVsIFN0YXRlIDxnYXZyaWVsc0Bjb3JlbC5jb20+CglBZGQgc3R1YnMgZm9yIEdldFJ1bm5pbmdPYmplY3RUYWJsZTMyIGFuZCBPbGVSZWdHZXRVc2VyVHlwZS4KCgkqIG9sZS9tb25pa2VyLmM6IEdhdnJpZWwgU3RhdGUgPGdhdnJpZWxzQGNvcmVsLmNvbT4KCUVuc3VyZSB0aGF0IENyZWF0ZUZpbGVNb25pa2VyIGZ1bmN0aW9ucyBkb24ndCByZXR1cm4gYSBib2d1cyBtb25pa2VyCglvYmplY3Qgb24gZmFpbHVyZS4KCgkqIGluY2x1ZGUvY2xhc3MuaCwgd2luZG93cy9jbGFzcy5jOiBHYXZyaWVsIFN0YXRlIDxnYXZyaWVsc0Bjb3JlbC5jb20+CglBZGRlZCBjb2RlIHRvIG1hbmFnZSBBc2NpaSBhbmQgV2lkZUNoYXIgY2xhc3MgbmFtZXMsIGFuZCB0byByZXR1cm4gdGhlCgluYW1lcyBpbiB0aGUgR2V0Q2xhc3NJbmZvIGZ1bmN0aW9ucy4KCgkqIGluY2x1ZGUvd2luc29jay5oOiBDb25zdGFudGluZSBTYXB1bnR6YWtpcyA8Y3NhcHVudHpAc3RhbmZvcmQuZWR1PgoJRml4IHRvIExpbnV4IElQWCBzbyBjb21waWxlcyBvbiBub24tbGludXggcGxhdGZvcm1zLgoKCSogbWlzYy9tYWluLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJT3duIFgxMSBlcnJvcmhhbmRsZXIgdG8gbG9jYXRlIFgxMSBlcnJvcnMuIFVzZWZ1bCBvbmx5IHdpdGggLXN5bmMuCgpTYXQgTm92IDE0IDE4OjU5OjMwIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL2NvbG9yLmgsIGluY2x1ZGUvaW1hZ2VobHAuaCwgaW5jbHVkZS9wYWxldHRlLmgsIG1lbW9yeS9nbG9iYWwuYywgbWlzYy9yZWdpc3RyeS5jLCB3aW5kb3dzL2RlZnduZC5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCB3YXJuaW5ncywgc29tZSBvbmx5IHZpc2libGUgd2l0aCAtV3N0cmljdC1wcm90b3R5cGVzIG9yIC1wZWRhbnRpYy4KCgkqIGluY2x1ZGUvY3Vyc29yaWNvbi5oLCBpbmNsdWRlL2Rpc3BsYXkuaCwgaW5jbHVkZS9tZXNzYWdlLmgsIG9iamVjdHMvY3Vyc29yaWNvbi5jLCB3aW5kb3dzL2Rpc3BsYXkuYywgd2luZG93cy9tb3VzZS5jLCB3aW5kb3dzL3gxMWRydi9pbml0LmMsIGlmMTYzMi9kaXNwbGF5LnNwZWM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCU1vdmVkIFgxMSBtb3VzZSBjdXJzb3IgaGFuZGxpbmcgdG8gdGhlIERJU1BMQVkgZHJpdmVyLgoKCSogaWYxNjMyL3RodW5rLmMsIGluY2x1ZGUvY2FsbGJhY2suaCwgbG9hZGVyL21haW4uYywgbG9hZGVyL3Rhc2suYywgbWlzYy9jYWxsYmFjay5jLCBtaXNjZW11L21haW4uYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJU29tZSBmaXhlcyB0byBXaW5lIHN0YXJ0dXAvdGVybWluYXRpb24gc2VxdWVuY2Ugd2l0aCBuYXRpdmUgVVNFUi4KCURvIG5vdCBjYWxsIGJ1aWx0LWluIFVTRVIgc2lnbmFsIGhhbmRsZXIgd2hlbiB1c2luZyBuYXRpdmUgVVNFUi4KCgkqIGRlYnVnZ2VyL2JyZWFrLmMsIGluY2x1ZGUvZGVidWdnZXIuaCwgaW5jbHVkZS90YXNrLmg6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogLWRlYnVnIGRpZG4ndCB3b3JrIGFueW1vcmUgYWZ0ZXIgdGhlIGxhc3Qgc3RhcnR1cCBzZXF1ZW5jZSBwYXRjaC4KCgkqIG9sZS9jb21wb2JqLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCBsaXN0IGluc2VydGlvbiBidWcgaW4gQ29Mb2FkTGlicmFyeSgpLgoKCSogaWYxNjMyL3dwcm9jcy5zcGVjLCBtc2Rvcy9NYWtlZmlsZS5pbiwgbXNkb3MvaW50MmYuYywgbXNkb3MvaW50NDEuYywgbXNkb3MvdnhkLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkZGVkIHN0dWJzIGZvciBzZXZlcmFsIFZ4RHMgLyBpbnRlcnJ1cHRzLgoKCSogaWYxNjMyL3RodW5rLmMsIGluY2x1ZGUvY2FsbGJhY2suaCwgbWlzYy9jYWxsYmFjay5jLCBncmFwaGljcy93aW4xNmRydi9pbml0LmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVNob3VsZCBnZXQgd2luMTZkcnYgQWJvcnRQcm9jIHdvcmtpbmcuIEhvcGVmdWxseS4KCgkqIHdpbmRvd3MvaW5wdXQuYywgd2luZG93cy9rZXlib2FyZC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglNb3ZlZCBHZXRLZXlib2FyZExheW91dE5hbWUxNiB0byB3aW5kb3dzL2lucHV0LmMuCgoJKiBpbmNsdWRlL2ltYWdlaGxwLmgsIGluY2x1ZGUvd2lubnQuaCwgaW5jbHVkZS93aW50eXBlcy5oOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglNb3ZlZCBzb21lIGRlY2xhcmF0aW9ucyBmcm9tIGltYWdlaGxwLmggdG8gY29tbW9uIGluY2x1ZGUgZmlsZXMuCgoJKiByZWxheTMyL2tlcm5lbDMyLnNwZWMsIHdpbjMyL3RocmVhZC5jOgoJUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUFkZGVkIGltcGxlbWVudGF0aW9ucyBmb3IgSW50ZXJsb2NrZWRFeGNoYW5nZUFkZCgpIGFuZAoJSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoKS4KCgkqIHdpbjMyL2NvbnNvbGUuYywgb2JqZWN0cy9kaWIuYywgb2JqZWN0cy9lbmhtZXRhZmlsZS5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglGaXhlcyBhIGZldyBvZiB0aGUgbWFueSBjb21waWxlciB3YXJuaW5ncy4KCgkqIG1pc2NlbXUvaW5zdHIuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglFbXVsYXRlICJtb3YgY3I0LGVheCIgKHRvbWJyYWlkZXIgMyBkZW1vKS4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRG8gbm90IGVudW1lcmF0ZSBEM0QgZGV2aWNlcyB3ZSBjYW4ndCBoYW5kbGUgYW55d2F5LgoJUmV0dXJuIGJpdG1hc2tzIGZvciBoaS90cnVlY29sb3IgZGVwdGhzIGluIEVudW1EaXNwbGF5TW9kZXMuCgoJKiBpZjE2MzIvc25vb3AuYywgaW5jbHVkZS9zbm9vcC5oLCByZWxheTMyL2J1aWx0aW4zMi5jLCByZWxheTMyL3Nub29wLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNwZWVkIHVwIHJlbGF5MzIsIHNub29wMTYgYW5kIHNub29wMzIgaW5jbHVkZS9leGNsdWRlcyBieSBkb2luZyB0aGVtCglqdXN0IG9uY2UgYXQgY3JlYXRpb24gdGltZS4KCgkqIHJlbGF5MzIvb2xlMzIuc3BlYywgb2xlL2NvbXBvYmouYywgb2xlL29sZTIuYzoKCVBhdmVsIFJvc2tpbiA8cGF2ZWxfcm9za2luQGdlb2NpdGllcy5jb20+CglBZGRlZCBzdHVicyBmb3IgQ29SZXZva2VDbGFzc09iamVjdCBhbmQgT2xlU2V0Q2xpcGJvYXJkLgoKCSogd2luZG93cy93aW4uYzogUGVyIMVuZ3N0cvZtIDxwYW5nQG1pbmQubnU+CglFbnVtVGFza1dpbmRvd3MxNjogQmFzaW5nIHRoZSBzZWxlY3Rpb24gb24gYSB3aW5kb3cncyB0YXNrIGlzIG5vdCBvbmx5Cgltb3JlIHN0cmFpZ2h0Zm9yd2FyZCB0aGFuIGNvbXBhcmluZyBtZXNzYWdlIHF1ZXVlcywgaXQgYWxzbyB3b3JrcwoJYmV0dGVyIGZvciBXaW4zMiBhcHBsaWNhdGlvbnMuCgoJKiBtZW1vcnkvbG9jYWwuYzogSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglDaGFuZ2VkIHNvbWUgb2YgdGhlIG1lc3NhZ2UgY2xhc3Nlcy4KCgkqIHdpbmRvd3Mva2V5Ym9hcmQuYzogRGF2aWQgRmF1cmUgPERhdmlkLkZhdXJlQGluc2EtbHlvbi5mcj4KCVNwZWNpYWwgY2FzZSBoYW5kbGluZyBvZiA6IFNoaWZ0ICsgYXJyb3csIHNoaWZ0ICsgaG9tZSwgLi4uCglYIHJldHVybnMgYSBjaGFyIGZvciBpdCwgYnV0IFdpbmRvd3MgZG9lc24ndC4gSWdub3JlIFggY2hhci4KCUFsc28gYWRkZWQgc29tZSBkb2N1bWVudGF0aW9uLgoKCSogaW5jbHVkZS93aW5zb2NrLmgsIG1pc2Mvd2luc29jay5jOgoJU3RlcGhlbiBMYW5nYXNlayA8dm9ybG9uQGRvZGRzLm5ldD4KCUJ1Z2ZpeGVzIGZvciBJUFggY29kZSBhbmQgcHJlbGltaW5hcnkgZ3JvdW5kd29yayBmb3Igb3RoZXIgYWRkcmVzcwoJZmFtaWx5IHN1cHBvcnQuCgoJKiBvbGUvY29tcG9iai5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCShDb0dldENsYXNzT2JqZWN0KSBvbmUgbWlzc2luZyBDQUxMQkFDSywgZXh0cmVtZWx5IHNpbXBsaWZpZWQgY2xzaWQKCWxvb2t1cCAoUmVnaXN0cnkgaXMgY2FzZSBpbnNlbnNpdGl2ZSkuCgoJKiByZWxheTMyL250ZGxsLnNwZWMsIHdpbjMyL2FkdmFwaS5jLCBkbGxzL250ZGxsL3J0bC5jLCByZWxheTMyL2FkdmFwaTMyLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVN0dWJzOiBTZXRTZXJ2aWNlU3RhdHVzLCBSZWdpc3RlclNlcnZpY2VDdHJsSGFuZGxlckEvVywKCVN0YXJ0U2VydmljZUN0cmxEaXNwYXRjaGVyMzJBL1csIFJ0bFN5c3RlbVRpbWVUb0xvY2FsVGltZSwKCVJ0bFRpbWVUb1RpbWVGaWVsZHMuCgoJKiBpbmNsdWRlL3dpbmRvd3MuaCwgb2xlL29sZTJubHMuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YiBmb3IgR2V0TnVtYmVyRm9ybWF0MzJXLgoKCSogbWlzYy9jcnRkbGwuYzogRGF2aWQgQS4gQ3V0aGJlcnQgPGRhY3V0QGVjZS5jbXUuZWR1PgoJZ2V0cygpIGZpeGVzLgoKCSogb2xlL25scy9ydXMubmxzOiBBbGV4YW5kZXIgVi4gTHVreWFub3YgPGxhdkBsb25nLnlhci5ydT4KCUZpeCBTQ09VTlRSWSwgU05BVElWRUNUUllOQU1FLCBTQUJCUkVWREFZTkFNRTM7IGNoYW5nZSBzb21lIFNNT05USE5BTUUqCgl0byBiZSBpbiBub21pbmF0aXZlIGNhc2UuCgoJKiB3aW5kb3dzL3F1ZXVlLmM6IFBlciDFbmdzdHL2bSA8cGFuZ0BtaW5kLm51PgoJRml4ZWQgU2V0TWVzc2FnZVF1ZXVlMzIgdG8gcmV0dXJuIEZBTFNFLCBub3QgVFJVRSwgd2hlbiBjYWxsZWQgd2l0aAoJYW4gaW52YWxpZCBzaXplIHBhcmFtZXRlci4KCgkqIG11bHRpbWVkaWEvZHNvdW5kLmM6IExpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQWRkZWQgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBvZiBHZXRDYXBzLCBjaGFuZ2VkIFBsYXkgYW5kIFN0b3AgaGFuZGxpbmcKCW9mIHBvc2l0aW9ucyBpbmRleGVzLCBzdXBwcmVzc2VkIHdhcm5pbmdzLgoKCSogbWVtb3J5L2xvY2FsLmM6IExpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQ29ycmVjdGVkIGJ1ZyBpbiBUUkFDRSBmdW5jdGlvbi4KCgkqIEFVVEhPUlMsIGdyYXBoaWNzL2RkcmF3LmMsIGluY2x1ZGUvYXV0aG9ycy5oLCBpbmNsdWRlL2RkcmF3Lmg6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUNvcnJlY3RlZCBidWcgaW4gRGlyZWN0RHJhd1N1cmZhY2UgY3JlYXRpb24gYW5kIGhhbmRsaW5nIGZvciBkcml2ZXIKCWJhc2VkIHVwb24gWGxpbGIuCgoJKiB3aW5kb3dzL2RpbnB1dC5jOiBMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCVdpbmUga2V5Ym9hcmQgYW5kIG1vdXNlIGhhdmUgbm93IHRoZWlyIG93biBVSURzLgoKCSogb2JqZWN0cy9icnVzaC5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeCBhbGxvY2F0aW9uIHNpemUgaW4gQ3JlYXRlRElCUGF0dGVybkJydXNoKi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE5vdiAgOCAxNjo0NDo0MSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogd2luZG93cy9kaWFsb2cuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglGaXhlZCBrZXlzdHJva2UgYWNjZWxlcmF0b3JzIGluIGRpYWxvZ3Mgd2hpY2ggaGF2ZSBjb250cm9scyBjb250YWluaW5nCglvdGhlciBjb250cm9scyBhcyBjaGlsZCB3aW5kb3dzLgoKCSogaW5jbHVkZS93aW5wcm9jLmgsIG1pc2MvY29tbWRsZy5jLCB3aW5kb3dzL2hvb2suYywgd2luZG93cy93aW5wcm9jLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpeGVzOiBMQl8vQ0JfL0VNXyBtZXNzYWdlcyBmb3IgZ2V0dGluZy9zZXR0aW5nIHRleHQgYW5kIGEgYnVnIGluCgkxNi0+MzIgYml0IGNvbnZlcnNpb24uCgoJKiBvYmplY3RzL2RpYi5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVByZXZlbnQgQ3JlYXRlRElCU2VjdGlvbiBmcm9tIHNlZyBmYXVsdGluZyB3aGVuIG9uZSBkaW1lbnNpb24gb2YKCXNlY3Rpb24gaXMgMC4KCgkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBpbmNsdWRlL3dpbnNvY2suaCwgbWlzYy93aW5zb2NrLmM6CglTdGVwaGVuIExhbmdhc2VrIDx2b3Jsb25AZG9kZHMubmV0PgoJU3VwcG9ydCBmb3IgSVBYIG5ldHdvcmtpbmcgdmlhIHdpbnNvY2sgdW5kZXIgTGludXguCgoJKiByZWxheTMyL2dkaTMyLnNwZWMsIGdyYXBoaWNzL3BhaW50aW5nLmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRlZCBhIHN0dWIgZm9yIFN0YXJ0RG9jQSBhbmQgRW5kRG9jLgoKCSogcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCBzY2hlZHVsZXIvcHJvY2Vzcy5jLCB3aW4zMi9jb25zb2xlLmM6CglKYW1lcyBTdXRoZXJsYW5kIDxKYW1lc1N1dGhlcmxhbmRAZ214LmRlPgoJTW9yZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2V0Q3RybEhhbmRsZXIoKSBmdW5jdGlvbiAoYW5kIHRoZQoJcmVsYXRlZCBjb25zb2xlIGZ1bmN0aW9ucykuCgoJKiBvYmplY3RzL2JydXNoLmMsIHJlbGF5MzIvZ2RpMzIuc3BlYzogSmVmZiBKb2hhbm4gPGpqb2hhbm5Aa2l2YS5uZXQ+CglBZGRlZCBDcmVhdGVESUJQYXR0ZXJuQnJ1c2hQdCAoR0RJMzIuMzUpIHdpdGggbWlub3IgZG9jdW1lbnRhdGlvbgoJdXBkYXRlcy4KCgkqIGdyYXBoaWNzL3ZnYS5jLCBpbmNsdWRlL3ZnYS5oLCBtc2Rvcy9pb3BvcnRzLmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCVNpbXVsYXRlIHRoZSBWR0EgdmVydGljYWwgcmVmcmVzaC4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IExpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQWRkZWQgc3VwcG9ydCBvZiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHJlY3RhbmdsZXMgaW4gQmxpdCBmdW5jdGlvbi4KCgkqIGluY2x1ZGUvZGlucHV0LmgsIHdpbmRvd3MvZGlucHV0LmM6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUFkZGVkIGRldmljZSB0eXBlIGNvbnN0YW50cyBhbmQgdXNlZCB0aGVtIGluIGRldmljZSBlbnVtZXJhdGlvbgoJZnVuY3Rpb24uCgoJKiBtaXNjL3JlZ2lzdHJ5LmM6IFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFQSSBkb2N1bWVudGF0aW9uIHNheXMgdGhhdCBSZWdFbnVtS2V5RXgsIFJlZ0VudW1WYWx1ZSBhbmQKCVJlZ1F1ZXJ5SW5mb0tleSB0YWtlcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVycyBhcyBjaGFyYWN0ZXJzLgoKCSogb2xlL2NvbXBvYmouYzogQWRkZWQgbWlzc2luZyAjaW5jbHVkZSAiY29uZmlnLmgiCgoJKiBBVVRIT1JTLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9hdXRob3JzLmgsIGluY2x1ZGUvY29uZmlnLmguaW4sIG9sZS9jb21wb2JqLmM6CglKdXN0aW4gQnJhZGZvcmQgPGp1c3RpbkB1a2Fucy5lZHU+CglSZXBsYWNlcyBDb0NyZWF0ZUd1aWQgc3R1YiB3aXRoIGFuIGltcGxlbWVudGF0aW9uIG9mIERDRSdzIFVVSUQKCXNwZWNpZmljYXRpb24uIEFsc28gcmVtb3ZlcyBzb21lIHVubmVjZXNzYXJ5IGNvZGUgZnJvbSBTdHJpbmdGcm9tQ0xTSUQuCgoJKiBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvd2luYmFzZS5oLCBpbmNsdWRlL3dpbnR5cGVzLmg6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRlZCBhbiBleHRlcm4gIkMiIHNhZmVndWFyZC4KCgkqIGluY2x1ZGUvY29tbWRsZy5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgd2luZG93cy9pbnB1dC5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJLSBhZGRzIEdldEV4aXRDb2RlUHJvY2VzcwoJLSBjb3JyZWN0cyB0aGUgcmV0dXJuLXR5cGUgb2YgR2V0S2V5U3RhdGUKCS0gY29ycmVjdHMgdGhlIHdpbmVsaWIgZGVmaW5pdGlvbiBvZiBJc0RpYWxvZ01lc3NhZ2UKCS0gYWRkcyB3aW5lbGliIGRlZmluaXRpb25zIGZvciBQcmludERsZwoKCSogb2JqZWN0cy9jbGlwcGluZy5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJRXh0U2VsZWN0Q2xpcFJnbiBmaXg6IFJHTl9ESUZGIGRpZCBub3Qgd29yay4KCgkqIG9iamVjdHMvY3Vyc29yaWNvbi5jLCB3aW5kb3dzL2V2ZW50LmMsIHdpbmRvd3MvbWVzc2FnZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGFwdGVkIHRvIG5ldyBpbnB1dCBldmVudCBoYW5kbGluZy4KCgkqIGlmMTYzMi90aHVuay5jLCBpZjE2MzIvdXNlci5zcGVjLCBpbmNsdWRlL2lucHV0LmgsIGluY2x1ZGUvd2luZG93cy5oLCByZWxheTMyL3VzZXIzMi5zcGVjLCB3aW5kb3dzL01ha2VmaWxlLmluLCB3aW5kb3dzL2lucHV0LmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVVTRVItc2lkZSBwYXJ0IG9mIGlucHV0IGV2ZW50IGhhbmRsaW5nOiBjb250YWlucyBpbXBsZW1lbnRhdGlvbiBvZgoJa2V5YmRfZXZlbnQgYW5kIG1vdXNlX2V2ZW50LCBhbmQgVVNFUi1yZWxhdGVkIGNvZGUgcmVtb3ZlZCBmcm9tCgl3aW5kb3dzL2V2ZW50LmMgYW5kIHdpbmRvd3Mva2V5Ym9hcmQuYy4KCgkqIHdpbmRvd3MvZGlzcGxheS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglTdHVicyBmb3IgRElTUExBWS5EUlYgcmVtb3ZlZCBmcm9tIGtleWJvYXJkLmMuCgoJKiBpZjE2MzIvbW91c2Uuc3BlYywgaW5jbHVkZS9tb3VzZS5oLCB3aW5kb3dzL21vdXNlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGF0aW9uIG9mIE1PVVNFLkRSViAoY29udGFpbnMgc29tZSBjb2RlIHRha2VuIGZyb20KCXdpbmRvd3MvZXZlbnQuYykuCgoJKiBpZjE2MzIva2V5Ym9hcmQuc3BlYywgaW5jbHVkZS9rZXlib2FyZC5oLCB3aW5kb3dzL2tleWJvYXJkLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGF0aW9uIG9mIEtFWUJPQVJELkRSViAoY29kZSBtb3N0bHkgdGFrZW4gZnJvbSBwcmV2aW91cwoJd2luZG93cy9rZXlib2FyZC5jKS4KCgkqIGxvYWRlci9tYWluLmMsIGxvYWRlci90YXNrLmMsIG1pc2NlbXUvbWFpbi5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IHJlYWxseSAqZG8qIHN3aXRjaCB0byB0aGUgaW5pdGlhbCB0YXNrJ3Mgc3RhY2suCglDYWxsTGFyZ2VTdGFjayBtZWNoYW5pc20gcmUtZW5hYmxlZC4KCgkqIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaDoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglOZXcgRmlsZXMuIEFkZGVkICdkYXRlIGFuZCB0aW1lIHBpY2tlcicgYW5kICdtb250aCBjYWxlbmRhcicgY29udHJvbAoJZHVtbWllcy4gVGhleSBhcmUgdXNlZCBieSBPdXRsb29rIEV4cHJlc3MuCgoJKiBvbGUvb2xlMi5jLCByZWxheTMyL29sZTMyLnNwZWM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgc3R1YiBmb3IgQ3JlYXRlQmluZEN0eCgpIGFuZCBhZGRlZCBtaXNzaW5nIENvR2V0Q2xhc3NPYmplY3QoKQoJdG8gKi5zcGVjIGZpbGUuIE1ha2VzIEludGVybmV0IEV4cGxvcmVyIDQuMDEgaGFwcHkgOy0pCgoJKiBkbGxzL2NvbWN0bDMyL3BhZ2VyLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglMaXR0bGUgaW1wcm92ZW1lbnQuCgoJKiBkbGxzL2NvbWN0bDMyL2xpc3R2aWV3LmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBwcmVsaW1pbmFyeSBoaXQgdGVzdGluZy4gTWFrZXMgcmVnZWRpdC5leGUgaGFwcHkgOy0pCgoJKiBkb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9scywgZGxscy9jb21jdGwzMi9pbWFnZWxpc3QuYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglJbXByb3ZlZCBkb2N1bWVudGF0aW9uIGFuZCBmaXhlZCB0eXBvcy4KCgkqIGRsbHMvY29tY3RsMzIvY29tbWN0cmwuYywgcmVsYXkzMi9jb21jdGwzMi5zcGVjOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIERyYXdTdGF0dXNUZXh0MzJBVygpIGFuZCBDcmVhdGVTdGF0dXNXaW5kb3czMkFXKCkuCgoJKiBkbGxzL2NvbWN0bDMyL3JlYmFyLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglJbXByb3ZlZCBkaXNwbGF5IGFuZCBsYXlvdXQgY29kZS4KCgkqIGRsbHMvY29tY3RsMzIvTWFrZWZpbGUuaW4sIGRsbHMvY29tY3RsMzIvZGF0ZXRpbWUuYywgZGxscy9jb21jdGwzMi9tb250aGNhbC5jLCBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvZGF0ZXRpbWUuaCwgaW5jbHVkZS9tb250aGNhbC5oOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCU5ldyBGaWxlcy4gQWRkZWQgJ2RhdGUgYW5kIHRpbWUgcGlja2VyJyBhbmQgJ21vbnRoIGNhbGVuZGFyJyBjb250cm9sCglkdW1taWVzLiBUaGV5IGFyZSB1c2VkIGJ5IE91dGxvb2sgRXhwcmVzcy4KClNhdCBOb3YgIDcgMTI6NTY6MzIgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG9iamVjdHMvZW5obWV0YWZpbGUuYywgcmVsYXkzMi9nZGkzMi5zcGVjLCBpbmNsdWRlL3dpbmRvd3MuaDoKCUNoYXJsZXMgU3VwcmluIDxjc3VwcmluQGx5bnguZGFjLm5ldS5lZHU+CglBZGRlZCBzdHVicyBmb3IgU2V0V2luTWV0YUZpbGVCaXRzIGFuZCBHZXRFbmhNZXRhRmlsZVBhbGV0dGVFbnRyaWVzLgoKCSogZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVN0b3AgWDExRFJWX1JvdW5kUmVjdCBjYWxsaW5nIFhEcmF3QXJjIHdpdGggLXZlIHdpZHRoL2hlaWdodCBwYXJhbXMKCXdoaWNoIGl0IGRpZCBpZiBlaXRoZXIgZWxsaXBzZSBkaW1lbnNpb24gd2FzIHplcm8uCgoJKiBncmFwaGljcy9wYWludGluZy5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCU9wdGltaXplIFJvdW5kUmVjdDMyIHRvIGNhbGwgUmVjdGFuZ2xlMzIgaWYgZWl0aGVyIGVsbGlwc2UgZGltZW5zaW9uCglpcyB6ZXJvLgoKCSogcmVsYXkzMi9tcHIuc3BlYywgbWlzYy9uZXR3b3JrLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRlZCBzdHViIFdOZXRFbnVtQ2FjaGVkUGFzc3dvcmRzLgoKCSogbXNkb3MvaW50MjEuYywgbXNkb3MvaW50MjUuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCU1hZGUgdGhpcyBmaWxlIERPU01PRCBmcmllbmRseS4KCgkqIGxvYWRlci9uZS9zZWdtZW50LmMsIGxvYWRlci9wZV9pbWFnZS5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJVW5pZmllZCAiTm8gaW1wbGVtZW50YXRpb24gZm9yLi4uIiB3YXJuaW5ncy4KCgkqIHdpbjMyL2RldmljZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCW1vbm9kZWJnLnZ4ZCB1c2VkIGJ5IHNvbWUgT3JpZ2luIHByb2dyYW1zIGltcGxlbWVudGVkLgoKCSogb2JqZWN0cy9iaXRtYXAuYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUZhaWwgaWYgbGVzcyB0aGVuIG9uZSBlbnRpcmUgbGluZSByZXF1ZXN0ZWQgaW4gR2V0Qml0bWFwQml0czMyLgoKCSogd2luZG93cy93aW5wcm9jLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglBZGRlZCBXTV9HRVRETEdDT0RFIGhhbmRsaW5nIGluIChVbilNYXBNc2czMkF0bzE2LgoKCSogaWYxNjMyL2NvbXBvYmouc3BlYywgaW5jbHVkZS9vbGUuaCwgb2xlL2NvbXBvYmouYywgcmVsYXkzMi9vbGUzMi5zcGVjOgoJSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEB6ZWFsYW5kLm12LmNvbT4KCUltcGxlbWVudGF0aW9uIG9mIENvTG9hZExpYnJhcnksIENvRnJlZUFsbExpYnJhcmllcywKCUNvRnJlZVVudXNlZExpYnJhcmllcywgQ29GcmVlTGlicmFyeS4KCUZpeGVkIG1pc3NwZWxsaW5nIG9mIENvVW5pbml0aWFsaXplLgoKCSogcHJvZ3JhbXMvY2xvY2svQ2hhbmdlTG9nLCBwcm9ncmFtcy9jbG9jay9tYWluLmM6CglSb2JlcnQgUG91bGlvdCA8a3J5bm9zQGNsaWMubmV0PgoJRml4ZXMgZm9yIG90aGVyIGxhbmd1YWdlcy4KCkZyaSBOb3YgIDYgMTc6MzY6MTMgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG1pc2MvcmVnaXN0cnkuYzogSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEB6ZWFsYW5kLm12LmNvbT4KCUZpeCB3aWRlIGNoYXJhY3RlciBmdW5jdGlvbnMgdG8gcmV0dXJuIGNoYXJhY3RlciBjb3VudCBpbiBjaGFyYWN0ZXIKCXF1YW50aXRpZXMgbm90IGJ5dGUgcXVhbnRpdGllcy4gIE1ha2UgUmVnUXVlcnlJbmZvS2V5IGFuZAoJUmVnUXVlcnlJbmZvS2V5IGJlaGF2ZSBjb3JyZWN0bHkgaW4gd2luOTUgbW9kZS4KCgkqIGluY2x1ZGUvZGlucHV0LmgsIHdpbmRvd3MvZGlucHV0LmM6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUNoYW5nZWQgbW91c2UgYnV0dG9uIG1hcHBpbmcgYW5kIGNoZWNrIHNpemUgb2YgcmV0dXJuIGJ1ZmZlci4KCgkqIG9iamVjdHMvY2xpcHBpbmcuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUV4dFNlbGVjdENsaXBSZ24oKSB3aXRoIFJHTl9DT1BZIGNvcGllcyB0aGUgd3JvbmcgcmVnaW9uLgoKCSogZmlsZXMvZmlsZS5jOiBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGaXhlZCBhbiBlcnJvciBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgRklMRV9TaGFyZURlbnkuCgoJKiBzY2hlZHVsZXIvaGFuZGxlLmMsIGlmMTYzMi90aHVuay5jLCBpbmNsdWRlL2RlYnVndG9vbHMuaCwgaW5jbHVkZS9zaWdfY29udGV4dC5oLCBtdWx0aW1lZGlhL21tc3lzdGVtLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNvbGFyaXMgcmVkZWZpbmVzIEVSUiBhbmQgQ1MsIGZpeGVkIG9jY3VyYW5jZXMuCglTb2xhcmlzIGhhcyBUUkFQTk8gaW4gaXRzIHNpZ2NvbnRleHQsIGFkZGVkIHRvIHNpZ19jb250ZXh0LmgKCgkqIGluY2x1ZGUvbW1zeXN0ZW0uaCwgbXVsdGltZWRpYS9tbWlvLmMsIHJlbGF5MzIvd2lubW0uc3BlYywgaWYxNjMyL21tc3lzdGVtLnNwZWM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCU1hZGUgbW1pb1NldEJ1ZmZlciBjYWxsYWJsZSBmcm9tIDE2IGFuZCAzMiBiaXQgY29kZS4KCgkqIGNvbnRyb2xzL21lbnUuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCB3cm9uZyBhcmcgdHlwZS4KCgkqIG9iamVjdHMvZGliLmMsIG9iamVjdHMvZ2Rpb2JqLmMsIGdyYXBoaWNzL3gxMWRydi9NYWtlZmlsZS5pbiwgZ3JhcGhpY3MveDExZHJ2L2RpYi5jLCBncmFwaGljcy94MTFkcnYvaW5pdC5jLCBpbmNsdWRlL3gxMWRydi5oOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglNb3ZlZCBYMTEgRElCIHN0dWZmIHRvIHgxMWRydi4KCgkqIHdpbjMyL2NvZGVfcGFnZS5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJVGhlIEFQSSBmb3IgV2lkZUNoYXJUb011bHRpQnl0ZSBzYXlzIHRoYXQgdGhlIHNyYy1zdHJpbmcgaGFzIG9ubHkgdG8gYmUKCXRyZWF0ZWQgYXMgTlVMTC10ZXJtaW5hdGVkIGlmIHNyY2xlbiBpcyAtMS4KCgkqIGluY2x1ZGUvd2luLmgsIHdpbmRvd3MvZXZlbnQuYywgd2luZG93cy93aW4uYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJTWFkZSBzdXJlIENvbmZpZ3VyZU5vdGlmeSBpcyBwcm9jZXNzZWQgYmVmb3JlIEV4cG9zZSwgZGVmZXJyaW5nIHRoZQoJRXhwb3NlIGV2ZW50IGlmIG5lY2Vzc2FyeSwgdGh1cyB3b3JraW5nIGFyb3VuZCBhIFdNIGZsYXcgd2l0aCB2aXJ0dWFsCglkZXNrdG9wIHNjcm9sbGluZyBpbiAtbWFuYWdlZCBtb2RlLgoKCSogcmVzb3VyY2VzL3N5c3Jlc19Gci5yYzogRXJpYyBQb3VlY2ggPGVyaWMucG91ZWNoQGxlbWVsLmZyPgoJVHJhbnNsYXRlZCBpbiBGcmVuY2ggKG5vdCBzbyBnb29kIGFueWhvdykgbWVzc2FnZSBmb3IgdGhlIG1hcmsgb24KCXN5c3RlbSBtZW51LgoKCSogbWlzYy9tYWluLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQ2hhbmdlZCB0aGUgZGVmYXVsdCBmcm9tIDAgdG8gMHg0MDkgKGVuZy11cykuCgoJKiB3aW5kb3dzL21kaS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVR3byBtaXNzaW5nIFdJTkFQSXMuCgoJKiBpbmNsdWRlL2ludGVyZmFjZXMuaDogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCBvbmUgd3JvbmcgcGFyYW1ldGVyLgoKCSogY29uZmlndXJlLCBjb25maWd1cmUuaW46IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJRml4ZWQgLS1kaXNhYmxlLWxpYi4KClRodSBOb3YgIDUgMTA6MzM6MTggMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvY29tbWN0cmwuaDogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglDb25zdGFudHMgZm9yIGNvbnRyb2xzIGluIGNvbW1vbiBkaWFsb2dzLgoKV2VkIE5vdiAgNCAxODowODozMyAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbWlzYy9jcnRkbGwuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCBzb21lIGNvbXBpbGVyIHdhcm5pbmdzLgoKU3VuIE5vdiAgMSAxOToyNzoyNCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogd2luZG93cy9tZXNzYWdlLmMsIHdpbmRvd3Mvbm9uY2xpZW50LmMsIHdpbmRvd3MvcGFpbnRpbmcuYywgd2luZG93cy93aW5oZWxwLmMsIHdpbmRvd3Mvd2lucG9zLmMsIG1pc2MvY29tbWRsZy5jLCBtaXNjL3NoZWxsLmMsIG1pc2Mvd2luc29jay5jLCBtaXNjZW11L2luc3RyLmMsIG11bHRpbWVkaWEvYXVkaW8uYywgbXVsdGltZWRpYS9qb3lzdGljay5jLCBvYmplY3RzL2JpdG1hcC5jLCBvYmplY3RzL2NsaXBwaW5nLmMsIG9iamVjdHMvY29sb3IuYywgb2JqZWN0cy9jdXJzb3JpY29uLmMsIG9iamVjdHMvZGliLmMsIHRvb2xzL3dyYy9kdW1wcmVzLmMsIHRvb2xzL3dyYy9wYXJzZXIubCwgd2luZG93cy9jbGlwYm9hcmQuYywgd2luZG93cy9tZGkuYywgZmlsZXMvZmlsZS5jLCBncmFwaGljcy94MTFkcnYveGZvbnQuYywgbWVtb3J5L2hlYXAuYzoKCUplc3BlciBTa292IDxqc2tvdkBjeWdudXMuY28udWs+CgllZ2NzICdhbWJpZ3VvdXMgZWxzZScgd2FybmluZ3MgZml4ZXMuCgoJKiBpbmNsdWRlL3Rvb2xoZWxwLmgsIGluY2x1ZGUvd2luZG93cy5oLCBzY2hlZHVsZXIvcHJvY2Vzcy5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglHZXQgcmlkIG9mIHRoZSByZWRlZmluaXRpb24gb2YgTUFYX1BBVEggYW5kIG1vdmUgUFJPQ0VTU0VOVFJZMzIKCWRlZmluaXRpb24gdG8gdG9vbGhlbHAuaC4KCgkqIHdpbmRvd3Mvd2luLmMsIGluY2x1ZGUvcGVfaW1hZ2UuaCwgbGlicmFyeS93aW5lc3R1Yi5jLCBsb2FkZXIvZWxmLmMsIGxvYWRlci9tb2R1bGUuYywgbG9hZGVyL3Jlc291cmNlLmMsIG1pc2MvY2FsbGJhY2suYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJUnVuIFdpbmVsaWIgYXBwbGljYXRpb25zIGFzIDMyLWJpdCBwcm9jZXNzZXMgaW4gdGhlIGluaXRpYWwgdGFzay4KCVNpbXBsaWZpZWQvcmVtb3ZlZCBzZXZlcmFsIHNwZWNpYWwgJ2lmIChfX3dpbmVsaWIpJyBjYXNlcyBpbgoJV2luZSBtYWluIGNvZGUgb2Jzb2xldGVkIGJ5IHRoYXQgY2hhbmdlLgoKCSogd2luZG93cy9ldmVudC5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUNhbGwgbW91c2UgZHJpdmVyIGNhbGxiYWNrIGFsc28gaWYgd2luZG93cyBhcmUgbm90IHJlZ2lzdGVyZWQgd2l0aCBYCgkoaWYgdXNpbmcgbmF0aXZlIFVTRVIuRVhFKS4KCgkqIG1lbW9yeS9hdG9tLmMsIGluY2x1ZGUvYXRvbS5oOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGFwdGVkIHRvIHNlcGFyYXRpb24gYmV0d2VlbiBLRVJORUwgYW5kIFVTRVIuCgoJKiBpZjE2MzIvYnVpbHRpbi5jLCBpbmNsdWRlL21haW4uaCwgbG9hZGVyL21haW4uYywgbG9hZGVyL3Rhc2suYywgbWlzY2VtdS9tYWluLmMsIHJlbGF5MzIvZ2RpMzIuc3BlYywgcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCByZWxheTMyL3VzZXIzMi5zcGVjLCBzY2hlZHVsZXIvcHJvY2Vzcy5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCBuZXcgV2luZSBzdGFydHVwIHNlcXVlbmNlLCBzZXBhcmF0aW5nIHN0YXJ0dXAgaW50bwoJS0VSTkVML1VTRVIvR0RJIHJlbGF0ZWQgcGFydHMsIGFsbG93aW5nIG5hdGl2ZSByZXBsYWNlbWVudC4KCUltcGxlbWVudGVkIGluaXRpYWwgJ2tlcm5lbCcgdGFzay4KCgkqIGluY2x1ZGUvb2xlLmgsIGluY2x1ZGUvd2luZXJyb3IuaCwgb2xlL2NvbXBvYmouYzoKCUpvaG4gUmljaGFyZHNvbiA8anJpY2hhcmRAemVhbGFuZC5tdi5jb20+CglJbXBsZW1lbnRhdGlvbiBvZiBJbnByb2NTZXJ2ZXIzMiBDb0dldENsYXNzT2JqZWN0LgoKCSogaW5jbHVkZS9iaXRtYXAuaCwgb2JqZWN0cy9iaXRtYXAuYywgb2JqZWN0cy9jdXJzb3JpY29uLmMsIG9iamVjdHMvb2VtYml0bWFwLmMsIGdyYXBoaWNzL3gxMWRydi9iaXRtYXAuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJTW9yZSBiaXRtYXAgZml4ZXMuCgoJKiB3aW5kb3dzL3dpbnByb2MuYzogRml4ZWQgY3Jhc2hlcyB3aXRoIFdNX0dFVERMR0NPREUgdHJhbnNsYXRpb24uCgoJKiBwcm9ncmFtcy93aW5oZWxwL01ha2VmaWxlLmluLCBwcm9ncmFtcy93aW52ZXIvTWFrZWZpbGUuaW4sIHdpbmRvd3Mvd2luLmMsIHdpbmRvd3MveDExZHJ2Ly5jdnNpZ25vcmUsIHdpbmRvd3MveDExZHJ2L01ha2VmaWxlLmluLCB3aW5kb3dzL3gxMWRydi9pbml0LmMsIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvd2luLmgsIGxpYnRlc3QvTWFrZWZpbGUuaW4sIHByb2dyYW1zL2Nsb2NrL01ha2VmaWxlLmluLCBwcm9ncmFtcy9jb250cm9sL01ha2VmaWxlLmluLCBwcm9ncmFtcy9ub3RlcGFkL01ha2VmaWxlLmluLCBwcm9ncmFtcy9wcm9nbWFuL01ha2VmaWxlLmluLCBwcm9ncmFtcy9yZWd0ZXN0L01ha2VmaWxlLmluLCBwcm9ncmFtcy92aWV3L01ha2VmaWxlLmluLCBNYWtlLnJ1bGVzLmluLCBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvYWNjb25maWcuaDoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJU3RhcnRlZCBtb3Zpbmcgc29tZSBYMTEgd2luZG93IG1hbmFnZW1lbnQgY29kZSB0byB3aW5kb3dzL3gxMWRydi4KCgkqIGlmMTYzMi91c2VyLnNwZWMsIHdpbmRvd3MvZGlhbG9nLmMsIHdpbmRvd3Mvd2lucHJvYy5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglGaXhlZCBJc0RpYWxvZ01lc3NhZ2UxNi4KCgkqIE1ha2VmaWxlLmluOiBEb3VnbGFzIFJpZGd3YXkgPHJpZGd3YXlAd2luZWhxLmNvbT4KCVRlbGwgcGVvcGxlIHRvIGlnbm9yZSB0aGUgJ2dldHMnIHdhcm5pbmcuIFNvbWUgd2lsbCBsaXN0ZW4uCgoJKiBncmFwaGljcy94MTFkcnYvYml0bWFwLmMsIHdpbmRvd3MvZ3JhcGhpY3MuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJQSBjb3VwbGUgb2Ygc21hbGwgZml4ZXMgdG8gbXkgYml0bWFwIHBhdGNoLgoKCSogcmVzb3VyY2VzL1RPRE8sIHJlc291cmNlcy9zeXNyZXNfRGUucmMsIHJlc291cmNlcy9zeXNyZXNfRW4ucmMsIHdpbmRvd3Mvbm9uY2xpZW50LmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBbGxvdyB0aGUgdXNlciB0byBwdXQgYSBtYXJrIGluIHRoZSBkZWJ1ZyBsb2cgYnkgYWRkaW5nIGEgaXRlbSBpbiB0aGUKCVNZU01FTlUuIFRoZSBtZXNzYWdlcyBuZWVkcyBpbXBsZW1lbnRhdGlvbiBpbiBhbGwgb3RoZXIgbGFuZ3VhZ2VzIHRoYW4KCUVuZ2xpc2ggYW5kIEdlcm1hbi4KCgkqIGZpbGVzL2ZpbGUuYzogVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJR2l2ZSB0ZW1wZmlsZSBhIGRpZmZlcmVudCBuYW1lIGV2ZW4gaWYgdGhleSBhcmUgY3JlYXRlZCBpbiB0aGUgc2FtZQoJc2Vjb25kLiBSZW1vdmVkIHNvbWUgZml4bWVzIGZyb20gdGhlIFNoYXJlRGVueSBzdHVmZi4KCgkqIGluY2x1ZGUvbWRpLmgsIGluY2x1ZGUvd2luZG93cy5oLCByZWxheTMyL3VzZXIzMi5zcGVjLCB3aW5kb3dzL21kaS5jLCB3aW5kb3dzL3dpbi5jOgoJUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUNyZWF0ZVdpbmRvd0V4MzJbQVddIG5vdyBjcmVhdGVzIGFuIE1ESSBjaGlscyB3aGVuIHRoZSBXTV9FWF9NRElDSElMRAoJZXh0ZW5kZWQgc3R5bGUgaXMgc3BlY2lmaWVkLiBBbHNvIGltcGxlbWVudGVkIENyZWF0ZU1ESVdpbmRvdzMyQSgpCgljYWxsIC0gc2luZ2xlIHRocmVhZCBvbmx5IC0uCgoJKiBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRXJyZWQgaW4gdGhlIGJpdCBtYWNyb3MgaW4gdHJlZXZpZXcuYy4gU2hpZnRjb3VudHMgd2VyZSB3cm9uZy4KCgkqIGxvYWRlci9wZV9pbWFnZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCURldGVjdGlvbiBvZiB0aGUgZW5kIG9mIGltcG9ydHMgd2l0aCBDaGFyYWN0ZXJpc3RpY3MgMCBmYWlsIGZvciBCb3JsYW5kCglwcm9ncmFtcyAod2hpY2ggc2VlbSB0byBoYXZlIGFsd2F5cyBjaGFyYWN0ZXJpc3RpY3MgMCkuIENoYW5nZWQgdG8gYWxnb3JpdGhtCgl0byBzb21ldGhpbmcgYSBiaXQgbW9yZSBpbnRlbGxpZ2VudC4KCgkqIG9sZS9jb21wb2JqLmMsIHJlbGF5MzIvb2xlMzIuc3BlYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglBZGRlZCBDb0ZyZWVMaWJyYXJ5IHN0dWIuCgoJKiBSRUFETUU6IFVwZGF0ZWQgRkFRIGxvY2F0aW9uLgoKCSogZ3JhcGhpY3MvZXNjYXBlLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJSW1wbGVtZW50IFNFR1BUUiBjb252ZXJzaW9uIGZvciBTVEFSVERPQyBpbiBFc2NhcGUzMigpLgoKCSogb2JqZWN0cy9kYy5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogU2V0RENTdGF0ZSBkaWQgbm90IHJlc2V0IGNsaXBwaW5nIHJlZ2lvbiB0byBlbXB0eS4KCgkqIHdpbjMyL2luaXQuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXhlZCBzbWFsbCBvZmYgYnkgb25lIGVycm9yIGluIEdldENvbXB1dGVyTmFtZTMyVywgYWx3YXlzIGtpbGxlZCB0aGUKCWxhc3QgY2hhcmFjdGVyIG9mIGEgaG9zdG5hbWUuCgoJKiBvYmplY3RzL2RpYi5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCURvbid0IEhlYXBGcmVlKCkgY29sb3JtYXAgaWYgd2UgZGlkbid0IGFsbG9jYXRlIG9uZS4KCgkqIHdpbjMyL2FkdmFwaS5jLCB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy91c2VyLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBpbmNsdWRlL3dpbnR5cGVzLmgsIG1pc2MvY3J0ZGxsLmMsIG1pc2MvcHJpbnRkcnYuYywgcmVsYXkzMi9hZHZhcGkzMi5zcGVjLCByZWxheTMyL2NydGRsbC5zcGVjLCByZWxheTMyL21wci5zcGVjLCByZWxheTMyL3NoZWxsMzIuc3BlYywgcmVsYXkzMi91c2VyMzIuc3BlYywgcmVsYXkzMi93aW5zcG9vbC5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBzdHVicyBmb3IgdXNlcjMyLGFkdmFwaTMyIGZ1bmN0aW9ucy4KCgkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGxscy9NYWtlZmlsZS5pbiwgZGxscy9udGRsbC8qLCBpbmNsdWRlL250ZGxsLmgsIG1pc2MvQXR0aWMvbnRkbGwuYywgbWlzYy9NYWtlZmlsZS5pbiwgcmVsYXkzMi9udGRsbC5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglNb3JlIE50KiBhbmQgUnRsKiBmdW5jdGlvbiBzdHVicywgbW92ZWQgbnRkbGwuYyB0byBkbGxzL250ZGxsLy4KCgkqIG1lbW9yeS9sb2NhbC5jLCBtZW1vcnkvaGVhcC5jOiBBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglDaGFuZ2VkIG1hbnkgV0FSTigpcyByZWxhdGVkIHRvIGludGVybmFsIFdpbmUgbWVtb3J5IGZhaWx1cmVzIHRvCglFUlIoKXMuCgoJKiBpZjE2MzIva2VybmVsLnNwZWMsIHNjaGVkdWxlci9wcm9jZXNzLmM6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglBZGRlZCAuc3BlYyBlbnRyeSBmb3IgS0VSTkVMLlJlZ2lzdGVyU2VydmljZVByb2Nlc3MuCgoJKiBpZjE2MzIvZGlzcGxheS5zcGVjLCB3aW5kb3dzL2tleWJvYXJkLmM6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglBZGRlZCBzdHViIGZvciBDaGVja0N1cnNvcigpLgoKCSogaW5jbHVkZS9kaWFsb2cuaCwgd2luZG93cy9kZWZkbGcuYzogVGltIE5ld3NvbWUgPG51aXNhbmNlQGNtdS5lZHU+CglGaXggZm9yIG5vbi1tb2RhbCBkaWFsb2cgY2xvc2luZy4KCgkqIHdpbmRvd3MvZGlucHV0LmM6IERhdmlkIEZhdXJlICA8ZmF1cmVAa2RlLm9yZz4KCVJld3JvdGUgdGhlIHR3byByb3V0aW5lcyB1c2luZyB0aGUgdmtleS0+c2NhbmNvZGUgYXJyYXkgdG8gdXNlCglrZXljMnZrZXkgZm9yIGVhY2gga2V5Y29kZSwgaW5zdGVhZC4gTm90IHRlc3RlZC4KCVJlbW92ZWQgdW51c2VkIElEaXJlY3RJbnB1dERldmljZUFfR2V0RGV2aWNlU3RhdGUuCglGaXhlZCB3YXJuaW5nIGluIFRSQUNFKCkgY2FsbC4KCgkqIHdpbmRvd3Mva2V5Ym9hcmQuYzogRGF2aWQgRmF1cmUgPGZhdXJlQGtkZS5vcmc+CglEZWxldGVkIHRoZSB2a2V5LT5zYW5jb2RlIGFycmF5LCBiZWNhdXNlIFFXRVJUWSBzcGVjaWZpYy4KCUJhY2sgdG8gdXNpbmcgdGhlIFgga2V5Y29kZSBpbnN0ZWFkIGFzIHRoZSBzY2FuY29kZS4gVGVzdGVkLgoKCSogZ3JhcGhpY3MvcHNkcnYvaW5pdC5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglQcmludCBhIG1lc3NhZ2UgaWYgdGhlIFBvc3RTY3JpcHQgZHJpdmVyIGNhbid0IGZpbmQgYSBQUEQgZmlsZS4KCgkqIG1zZG9zL2ludDEwLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQWRkZWQgVkdBIDI1Ni1jb2xvciBtb2RlIDB4MTMgdXNpbmcgdGhlIERpc3BsYXlEaWIgVkdBIGVtdWxhdGlvbi4KCShET1MgYXBwcy9nYW1lcyB1c2luZyB0aGlzIG1vZGUgY29tZXMgdXAgbm93LCBhbHRob3VnaCB5b3UgY2FuJ3QKCXJlYWxseSBkbyBhbnl0aGluZyB3aXRoIHRoZW0gKHlldD8pLikKCgkqIG1zZG9zL2RwbWkuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglVc2UgbWFjcm8gVjg2X0ZMQUcuCgoJKiBtc2Rvcy9kb3NtZW0uYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglTZXQgZGVmYXVsdCB2aWRlbyBtb2RlIHRvIDMgKDgweDI1IGNvbG9yKS4KCgkqIGxvYWRlci9kb3MvZG9zbW9kLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJSWdub3JlcyBhIGNvdXBsZSBvZiBzaWduYWxzLgoKCSogZ3JhcGhpY3MvTWFrZWZpbGUuaW4sIGdyYXBoaWNzL2Rpc3BkaWIuYywgZ3JhcGhpY3MvdmdhLmMsIGluY2x1ZGUvdmdhLmgsIG1zZG9zL2lvcG9ydHMuYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJTW92ZWQgVkdBLWVtdWxhdGluZyBEaXJlY3RYIGNvZGUgZnJvbSBkaXNwZGliLmMgdG8gYSBzZXBhcmF0ZQoJZmlsZS4gTWFkZSBpdCB1c2UgYSBzeXN0ZW0gdGltZXIgYW5kIHRyYXAgSS9PIGFjY2Vzc2VzIHRvIHRoZSBWR0EKCURBQyByZWdpc3RlcnMgdG8gYWNjb21tb2RhdGUgRGlzcGxheURpYi11c2luZyBwcm9ncmFtcyB0aGF0IHRyeSB0bwoJYWNjZXNzIHRoZSBWR0EgaGFyZHdhcmUgZGlyZWN0bHkuCgoJKiBtaXNjZW11L2luc3RyLmMsIGlmMTYzMi9zaWduYWwuYywgaW5jbHVkZS9kb3NleGUuaCwgbG9hZGVyL2Rvcy9kb3N2bS5jLCBsb2FkZXIvZG9zL21vZHVsZS5jLCBtaXNjL3N5c3RlbS5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglJbmRpcmVjdGlvbiBmb3IgSU5TVFJfRW11bGF0ZUluc3RydWN0aW9uIGZvciB1c2UgYnkgRE9TIGNvZGUuCglBZGRlZCBzdXBwb3J0IGZvciBhIDU1SHogc3lzdGVtIHRpbWVyLCBsZXR0aW5nIERPUyBhcHBzIGNhbGlicmF0ZQoJdGhlaXIgZGVsYXkgbG9vcHMgYW5kIHN1Y2guIENhbGxzIElOU1RSX0VtdWxhdGVJbnN0cnVjdGlvbiBmb3IKCWluc3RydWN0aW9uIGVtdWxhdGlvbiAocHJpbmNpcGFsbHkgSS9PIHBvcnQgYWNjZXNzKS4gQWRkZWQgbWFjcm8KCVY4Nl9GTEFHLgoKU2F0IE9jdCAzMSAxMjoyMDo1NiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogd2luZG93cy9kaW5wdXQuYywgbXVsdGltZWRpYS9kc291bmQuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU21hbGwgZml4ZXMuCgoJKiBtZW1vcnkvdmlydHVhbC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVJlbW92ZWQgdGhlIEZJWE1FKCkgYW5kIG1vdmVkIFNldExhc3RFcnJvcigwKSB0byB0aGUgZW5kIChzbyB0aGF0CglHZXRUZW1wRmlsZU5hbWUgZXQuYWwuIGNhbid0IG92ZXJ3cml0ZSBpdCkuCgoJKiBtaXNjL0F0dGljL250ZGxsLmMsIHJlbGF5MzIvbnRkbGwuc3BlYywgcmVsYXkzMi9yZWxheTM4Ni5jLCByZWxheTMyL3VzZXIzMi5zcGVjLCB3aW5kb3dzL3VzZXIuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJTG90cyBvZiBzdHVicyB0byBnZXQgd2lubG9nb24uZXhlIGZyb20gbnQzLjUxIGFuZCBvdGhlciBOVDMuNTEgYXBwbGV0cwoJYSBiaXQgZnVydGhlci4KCgkqIHdpbmRvd3MvbWRpLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglNREljaGlsZCBjcmVhdGVkIHdoZW4gdGhlIE1ESSBjbGllbnQgaGFzIHRoZSBNRElTX0FMTENISUxEU1RZTEVTCglzdHlsZSwgc2hvdWxkIG5vdCBiZSBzaG93biBhdCBjcmVhdGlvbiBub3IgYWN0aXZhdGVkIHVubGVzcyB0aGUKCVdTX1ZJU0lCTEUgZmxhZyBpcyBzZXQuCgoJKiBsb2FkZXIvcGVfaW1hZ2UuYzogU3RlcGhlbiBMYW5nYXNlayA8dm9ybG9uQGRvZGRzLm5ldD4KCUJ1Z2ZpeCBmb3IgZml4dXBfaW1wb3J0czogRW5hYmxlIGNoZWNraW5nIGZvciB0ZXJtaW5hdGluZyBpbXBvcnQKCXN0cnVjdCB3aXRoIENoYXJhY3RlcmlzdGljcyBiaXRmaWVsZCBzZXQgdG8gMC4KCgkqIHdpbmRvd3Mvd2luLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglEZWxheSBsaW5raW5nIG5ld2x5IGNyZWF0ZWQgd2luZG93IGluIGxpbmtlZCBsaXN0IHVudGlsIGFmdGVyIHRoZQoJV01fTkNDUkVBVEUgbWVzc2FnZS4KCgkqIGZpbGVzL2ZpbGUuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCVNtYWxsIGJ1ZyBpbiBGSUxFX0luVXNlIGRvZXMgbm90IGRvIGEgcmVsZWFzZSBvbiBldmVyeSBhY3F1aXJlZCBmaWxlCglwb2ludGVyLgoKCSogY29udHJvbHMvc3RhdGljLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJbHBzek5hbWUgb2YgTlVMTCBpcyBoYW5kbGVkIChyZW1vdmVzIHNvbWUgd2FybmluZ3MpLgoKCSogdG9vbHMvdGVzdHJ1bjogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglOb3cgYWxsb3dzIHNwZWNpZmljYXRpb24gb2YgYSBzdGFydCBkaXJlY3Rvcnkgb24gdGhlIGNtZGxpbmUuCgoJKiBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJR2V0cyByaWQgb2YgdGhlIGFyY2gtZGVwZW5kZW50IGJpdCBvcGVyYXRpb25zICh0ZXN0ZWQgb24gTGludXggYW5kCglTb2xhcmlzL3g4NikuCgpXZWQgT2N0IDI4IDE0OjU4OjAyIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB3aW5kb3dzL3dpbi5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUEgZGVzdCBidWZmZXIgd2FzIHByaW50ZWQgb3V0IGFzIHN0cmluZy4KCgkqIGluY2x1ZGUvc2hsb2JqLmg6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQ29ycmVjdGVkIDIgd3JvbmcgZGVmaW5pdGlvbnMuCgoJKiBpbmNsdWRlL3dpbmRvd3MuaCwgcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCBzY2hlZHVsZXIvcHJvY2Vzcy5jOgoJUGF0cmljayBTcGlubGVyIDxzcGlubGVyLnBhdHJpY2tAbWF5by5lZHU+CglBZGRlZCBzdHVicyBmb3IgUHJvY2VzczMyRmlyc3QvUHJvY2VzczMyTmV4dC4KCgkqIGluY2x1ZGUveDExZHJ2LmgsIG9iamVjdHMvY2xpcHBpbmcuYywgb2JqZWN0cy9kYy5jLCBvYmplY3RzL2RjdmFsdWVzLmMsIG9iamVjdHMvcGFsZXR0ZS5jLCBvYmplY3RzL3JlZ2lvbi5jLCBncmFwaGljcy9lc2NhcGUuYywgZ3JhcGhpY3MvbWV0YWZpbGVkcnYvZ3JhcGhpY3MuYywgZ3JhcGhpY3MvcGFpbnRpbmcuYywgZ3JhcGhpY3MvcGF0aC5jLCBncmFwaGljcy9wc2Rydi9ncmFwaGljcy5jLCBncmFwaGljcy93aW4xNmRydi9ncmFwaGljcy5jLCBncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuYywgaW5jbHVkZS9kZWJ1Z2dlci5oLCBpbmNsdWRlL2dkaS5oLCBpbmNsdWRlL21ldGFmaWxlZHJ2LmgsIGluY2x1ZGUvcHNkcnYuaCwgaW5jbHVkZS93aW4xNmRydi5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaW5jbHVkZS93aW50eXBlcy5oLCBkZWJ1Z2dlci9kYmcueSwgZGVidWdnZXIvbXNjLmMsIGRlYnVnZ2VyL3N0YWJzLmMsIGRlYnVnZ2VyL3R5cGVzLmM6CglGcmFu529pcyBHb3VnZXQgPGdvdWdldEBtZXRhaW50ZWdyYXRpb24ubmV0PgoJRml4ZWQgc29tZSBMUFBPSU5UL0xQU0laRSBtaXNtYXRjaGVzIGFuZCBzb21lIG1pc3NpbmcgImNvbnN0IiBpbiB0aGUKCWhlYWRlcnMgcHJvdG90eXBlcy4KCgkqIGdyYXBoaWNzL3BzZHJ2L2luaXQuYywgZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jLCBncmFwaGljcy94MTFkcnYvYml0bWFwLmMsIGdyYXBoaWNzL3gxMWRydi9icnVzaC5jLCBncmFwaGljcy94MTFkcnYvaW5pdC5jLCBncmFwaGljcy94MTFkcnYvb2JqZWN0cy5jLCBpbmNsdWRlL2JpdG1hcC5oLCBpbmNsdWRlL2dkaS5oLCBpbmNsdWRlL3gxMWRydi5oLCBvYmplY3RzL2JpdG1hcC5jLCBvYmplY3RzL2JydXNoLmMsIG9iamVjdHMvZGliLmMsIG9iamVjdHMvb2VtYml0bWFwLmMsIHdpbmRvd3MvZ3JhcGhpY3MuYywgZ3JhcGhpY3MvbWV0YWZpbGVkcnYvaW5pdC5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglBZGRlZCBwQml0bWFwQml0cyBhbmQgcENyZWF0ZUJpdG1hcCB0byB0aGUgR0RJIGZ1bmN0aW9uIHRhYmxlIGFuZAoJbW92ZWQgdGhlIFgxMSBkZXBlbmRlbnQgc3R1ZmYgb3V0IG9mIG9iamVjdHMvYml0bWFwLmMgaW50byB4MTFkcnYuCgoJKiByZWxheTMyL3NoZWxsMzIuc3BlYywgZGxscy9zaGVsbDMyL3NoZWxsb2xlLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBpbmNsdWRlL3NoZWxsLmgsIGRsbHMvc2hlbGwzMi9waWRsLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBTSEdldFNpbXBsZUlETGlzdEZyb21QYXRoMzJBVy4KCVVuaWNvZGUtc2FmZTogUGF0aEZpbmRGaWxlbmFtZTMyQVcuCgoJKiBpbmNsdWRlL3NobG9iai5oOiBKdXN0aW4gQnJhZGZvcmQgPGp1c3RpbkBidXNib3kuc3BlZC51a2Fucy5lZHU+CglJRXh0cmFjdEljb24gaGFkIGFuIGV4dHJhIGMgaW4gYSBzdHJ1Y3QgZGVmaW5pdGlvbi4KCgkqIHJlbGF5MzIvZHBsYXkuc3BlYzoKCUpvaG4gUmljaGFyZHNvbiA8anJpY2hhcmRAemVhbGFuZC5tdi5zcGFtbGVzcy5jb20+CglBZGRlZCBlbnRyeSBmb3IgRGlyZWN0UGxheUVudW1lcmF0ZS4KCgkqIG9sZS9ubHMvc2t5Lm5scywgb2xlL29sZTJubHMuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQWRkZWQgU2xvdmFrIG5scy1yZXNvdXJjZXMuCgoJKiBvYmplY3RzL3JlZ2lvbi5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeGVkIGRpZmZlcmVuY2VzIGJldHdlZW4gU2V0UmVjdFJnbjE2IGFuZCBTZXRSZWN0UmduMzIuIEFsc28gYSBidWcgZml4IGZvcgoJQ3JlYXRlUm91bmRSZWN0UmduLgoKVHVlIE9jdCAyNyAxNTo0MTo1NCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogd2luZG93cy91c2VyLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRW51bURpc3BsYXlNb2RlcyogcmV0dXJucyBhIHN0YXRpYyBsaXN0IG9mIG1vZGVzIHdpdGggYWxsIGRlcHRocwoJKGhlbHBzIGhleGVuMmRlbW8pLCBDaGFuZ2VEaXNwbGF5U2V0dGluZ3MgcmV0dXJucyB0cnVlIGFsbCB0aGUgdGltZS4KCgkqIGluY2x1ZGUvd2ludHlwZXMuaCwgbXVsdGltZWRpYS9tbXN5c3RlbS5jLCByZWxheTMyL3dpbm1tLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVN0dWIgZm9yIG1pZGlPcGVuU3RyZWFtIChoZWxwcyBoZXhlbjJkZW1vKS4KCgkqIG9sZS9ubHMvZW5jLm5scywgb2xlL25scy9mcmMubmxzLCByZXNvdXJjZXMvc3lzcmVzX0ZyLnJjOgoJUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KCVNtYWxsIHBhdGNoIGZvciBiZXR0ZXIgRnJlbmNoIHN1cHBvcnQuCgoJKiBsb2FkZXIvZWxmLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBtZW1vcnkgb3ZlcndyaXRlIGJ1Zy4KCk1vbiBPY3QgMjYgMTE6MDQ6MTMgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGNvbnRyb2xzL2VkaXQuYywgd2luZG93cy9jbGlwYm9hcmQuYzogUGFzY2FsIEN1b3EgPHBjdW9xQGVucy1seW9uLmZyPgoJMzItYml0IGNsaXBib2FyZCBzdXBwb3J0LgoKCSogd2luZG93cy9xdWV1ZS5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeCBmb3IgUVVFVUVfU2lnbmFsOiBBbHdheXMgdXNlIFBvc3RFdmVudCBpZiBubyB0aHJlYWQgaXMgd2FpdGluZwoJb24gdGhlIHF1ZXVlLgoKCSogd2luZG93cy9tZGkuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglGaXhlZCBhIG1pbm9yIHByb2JsZW0gd2l0aCB0aGUgbWVudXMgZm9yIG1kaSBjaGlsZCB3aW5kb3dzLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglSZW1vdmVkIG5vIGxvbmdlciBuZWNlc3NhcnkgY29tbWVudGVkIG91dCBjb2RlLCBkZXN0cm95IG9sZCB3aW5kb3cKCXdoZW4gU2V0RGlzcGxheU1vZGUgaXMgY2FsbGVkIGFnYWluLCBFbnVtRGlzcGxheU1vZGVzIG5vdyByZXR1cm5zCglhbGwgcG9zc2libGUgbW9kZXMgKHVzaW5nIGEgc3RhdGljIGxpc3QpLgoKCSogbWVtb3J5L3ZpcnR1YWwuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBbm9uIHNoYXJlZCBtYXBwaW5nIGZpeGVkIGZvciBmaWxlIHNoYXJpbmcuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBPY3QgMjUgMTA6MzI6MjMgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG9sZS9vbGUybmxzLmMsIGluY2x1ZGUvd2lubmxzLmg6IEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoJRml4ZXMgZm9yIExBTkdfTkVVVFJBTC4KCgkqIGluY2x1ZGUvdGFzay5oOgoJQWRkZWQgc29tZSBwYWRkaW5nIHRvIHRoZSBQREIgZm9yIGlsbC1iZWhhdmluZyBhcHBzIChwcm9ibGVtIHJlcG9ydGVkCglieSBBbmRyZWFzIE1vaHIpLgoKCSogZG9jdW1lbnRhdGlvbi9pb3BvcnQtdHJhY2UtaGludHMsIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaCwgbWlzY2VtdS9pbnN0ci5jOgoJSm9uYXRoYW4gQnV6emFyZCA8amFiQGhleC5wcmVzdGVsLmNvLnVrPgoJQWRkZWQgYSBuZXcgZGVidWdnaW5nIGNoYW5uZWwgaW8gdG8gYWxsb3cgcmVhZC93cml0ZXMgb24gYSBwb3J0IHRvIGJlCglsb2dnZWQgdG8gYSBmaWxlLgoKCSogd2luZG93cy9rZXlib2FyZC5jOiBEYXZpZCBGYXVyZSA8RGF2aWQuRmF1cmVAaW5zYS1seW9uLmZyPgoJUmVwbGFjZWQgMHgwMCB3aXRoIDB4MDEgaW4gdGhlIHZrZXktPnNhbmNvZGUgYXJyYXksIHNvIHRoYXQgbm8ga2V5IGlzCglpZ25vcmVkLiAweDAwIGlzIHVzZWQgZm9yIGdlbmVyYXRlZCBrZXkgZXZlbnRzIG9ubHkuCgoJKiB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9xdWV1ZS5jOgoJRG91Z2xhcyBSaWRnd2F5IDxyaWRnd2F5QHdpbmVocS5jb20+CglBUEkgRG9jdW1lbnRhdGlvbiBmb3IgU2VuZE1lc3NhZ2UsIEdldFRpY2tDb3VudCwgUG9zdFF1aXRNZXNzYWdlLAoJR2V0TWVzc2FnZVBvcywgR2V0TWVzc2FnZVRpbWUuCgoJKiBtZW1vcnkvdmlydHVhbC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCURlbGV0ZSB0aGUgZmlsZW5hbWUgZm9yIHRoZSBtYXBwaW5nIGluc3RhbnRseS4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCByZWxheTMyL3NoZWxsMzIuc3BlYzoKCU1pY2hhZWwgUG9vbGUgPHBvb2xlQGdyYXZpdG9uLnJlcy5jbXUuZWR1PgoJU3R1YiBmb3IgU0hTaW1wbGVJRExpc3RGcm9tUGF0aC4KCgkqIGxvYWRlci90YXNrLmM6IEZpeGVkIGJ1ZyBpbiBTd2l0Y2hTdGFja1RvLgoKU2F0IE9jdCAyNCAxMzowNjoxNiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogY29udHJvbHMvc2Nyb2xsLmM6IFBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJQ2hlY2sgaWYgc2Nyb2xsYmFyIGFuZCBwYXJlbnQgYXJlIHZpc2libGUgYmVmb3JlIHJlZHJhdy4KCgkqIGlmMTYzMi9zaGVsbC5zcGVjLCBpbmNsdWRlL3NoZWxsLmgsIG1pc2Mvc2hlbGwuYywgcHJvZ3JhbXMvbm90ZXBhZC9tYWluLmMsIHJlbGF5MzIvc2hlbGwzMi5zcGVjOgoJS2FpIE1vcmljaCA8a2FpLm1vcmljaEBkYXJtc3RhZHQubmV0c3VyZi5kZT4KCUFkZGVkIERyYWcqMzIgZnVuY3Rpb25zLgoKCSogd2luZG93cy9ldmVudC5jOiBLYWkgTW9yaWNoIDxrYWkubW9yaWNoQGRhcm1zdGFkdC5uZXRzdXJmLmRlPgoJQWRkZWQgRHJhZyZEcm9wIGZyb20gS0RFIGFwcCB0byAxNi8zMiBiaXQgV2luZG96ZSBhcHAuCgoJKiB3aW5kb3dzL21lc3NhZ2UuYzogS2FpIE1vcmljaCA8a2FpLm1vcmljaEBkYXJtc3RhZHQubmV0c3VyZi5kZT4KCUFkZGVkIEZJWE1FIG1lc3NhZ2UgaW4gUG9zdE1lc3NhZ2UzMnggaWYgcGFyYW1ldGVycyBhcmUgdHJ1bmNhdGVkCgl3aGVuIGNhbGxpbmcgUG9zdE1lc3NhZ2UxNi4KCgkqIGluY2x1ZGUvcHJvY2Vzcy5oLCBzY2hlZHVsZXIvZXZlbnQuYywgc2NoZWR1bGVyL2hhbmRsZS5jLCBzY2hlZHVsZXIvcHJvY2Vzcy5jLCBzY2hlZHVsZXIvdGhyZWFkLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkZGVkIHN1cHBvcnQgZm9yIGdsb2JhbCBoYW5kbGVzLCBpbXBsZW1lbnRlZCBDb252ZXJ0VG9HbG9iYWxIYW5kbGUuCglBbGxvY2F0ZSBzdGFydHVwIGRhdGEgYW5kIDE2LWJpdCBzdGFjayBmb3IgaW5pdGlhbCBwcm9jZXNzLgoKCSogZG9jdW1lbnRhdGlvbi93aW5lLnRleGluZm86IExlaWdoIFdlZGRpbmcgPGx3ZWRkaW5nQGNvcnBsaW5rLmNvbS5hdT4KCVNtYWxsIGZpeC4KCgkqIHByb2dyYW1zL3Byb2dtYW4vLmN2c2lnbm9yZSwgcHJvZ3JhbXMvcHJvZ21hbi9Fcy5yYywgcHJvZ3JhbXMvcHJvZ21hbi9NYWtlZmlsZS5pbiwgcHJvZ3JhbXMvd2luaGVscC8uY3ZzaWdub3JlLCBwcm9ncmFtcy93aW5oZWxwL0VzLnJjLCBwcm9ncmFtcy93aW5oZWxwL01ha2VmaWxlLmluLCBwcm9ncmFtcy9jbG9jay8uY3ZzaWdub3JlLCBwcm9ncmFtcy9jbG9jay9Fcy5yYywgcHJvZ3JhbXMvY2xvY2svTWFrZWZpbGUuaW4sIHByb2dyYW1zL25vdGVwYWQvLmN2c2lnbm9yZSwgcHJvZ3JhbXMvbm90ZXBhZC9Fcy5yYywgcHJvZ3JhbXMvbm90ZXBhZC9NYWtlZmlsZS5pbjoKCVBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoPgoJQWRkZWQgU3BhbmlzaCByZXNvdXJjZXMuCgoJKiBvbGUvbmxzL2V1cS5ubHMsIHJlc291cmNlcy9zeXNyZXNfRXMucmM6CglQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaD4KCVNtYWxsIGNvcnJlY3Rpb25zLgoKCSogcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCBzY2hlZHVsZXIvcHJvY2Vzcy5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglMb2FkTGlicmFyeUV4VyBzcGVjIGFkZGVkIChmdW5jdGlvbiB3YXMgdGhlcmUpLgoJU2V0UHJvY2Vzc1ByaW9yaXR5Qm9vc3Qgc3R1YiBhZGRlZC4KCgkqIG1zZG9zL2RwbWkuYzogUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglDb21waWxlIGZpeCBmb3IgU29sYXJpcy4KCgkqIGlmMTYzMi8uY3ZzaWdub3JlLCBpZjE2MzIvTWFrZWZpbGUuaW4sIGlmMTYzMi9idWlsdGluLmMsIGlmMTYzMi9kaXNwZGliLnNwZWMsIGluY2x1ZGUvZGlzcGRpYi5oLCBncmFwaGljcy9NYWtlZmlsZS5pbiwgZ3JhcGhpY3MvZGlzcGRpYi5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglJbXBsZW1lbnRlZCBEaXNwbGF5RGliLgoKCSogY29udHJvbHMvc3RhdGljLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJSGFjayB0byBzdXBwb3J0IGludGVnZXIgaWRzIGluIGFsbCBzdGF0aWMgY29udHJvbHMuCgoJKiBpbmNsdWRlL2RpbnB1dC5oLCB3aW5kb3dzL2RpbnB1dC5jOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglCZWdpbm5pbmcgb2YgbW91c2Ugc3VwcG9ydCBpbiBEaXJlY3RJbnB1dCAob25seSAic3RhbmRhcmQiIG1vdXNlCgljb25maWd1cmF0aW9uIHN1cHBvcnRlZCBmb3Igbm93KS4KCgkqIGluY2x1ZGUvKi5oLCBkbGxzL2NvbWN0bDMyLyouYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCB4eHhfVW5yZWdpc3RlcigpIGZ1bmN0aW9ucyB0byBhbGwgY29tbW9uIGNvbnRyb2xzLgoKCSogZGxscy9jb21jdGwzMi9jb21jdGwzMnVuZG9jLmMsIGRsbHMvY29tY3RsMzIvcGFnZXIuYywgZGxscy9jb21jdGwzMi90b29sYmFyLmMsIGRvY3VtZW50YXRpb24vY29tbW9uX2NvbnRyb2xzLCByZWxheTMyL2NvbWN0bDMyLnNwZWM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJU29tZSBtaW5vciBpbXByb3ZlbWVudHMgYW5kIGZpeGVzLgoKCSogZGxscy9jb21jdGwzMi9yZWJhci5jLCBpbmNsdWRlL3JlYmFyLmg6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJSW1wcm92ZWQgdGhlIHJlYmFyIGNvbnRyb2wuCgoJKiBkbGxzL2NvbWN0bDMyL3Rvb2x0aXBzLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBzdXBwb3J0IGZvciB0cmFuc3BhcmVudCBhbmQgdHJhY2tpbmcgdG9vbHRpcHMuCgoJKiBjb250cm9scy9tZW51LmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCBhIHBvcHVwIG1lbnUgc2VsZWN0aW9uIGJ1Zy4KCgkqIHdpbmRvd3Mvbm9uY2xpZW50LmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCBEcmF3Q2FwdGlvbjE2KCkgYW5kIERyYXdDYXB0aW9uVGVtcDE2KCkuCgoJKiB3aW5kb3dzL2tleWJvYXJkLmM6IERhdmlkIEZhdXJlIDxEYXZpZC5GYXVyZUBpbnNhLWx5b24uZnI+CglGaXhlZCB3YXJuaW5nLgoKCSogZ3JhcGhpY3MvcHNkcnYvTWFrZWZpbGUuaW4sIGdyYXBoaWNzL3BzZHJ2L2JpdG1hcC5jLCBncmFwaGljcy9wc2Rydi9icnVzaC5jLCBncmFwaGljcy9wc2Rydi9mb250LmMsIGdyYXBoaWNzL3BzZHJ2L2dyYXBoaWNzLmMsIGdyYXBoaWNzL3BzZHJ2L2luaXQuYywgZ3JhcGhpY3MvcHNkcnYvcHMuYywgaW5jbHVkZS9nZGkuaCwgaW5jbHVkZS9wc2Rydi5oLCBvYmplY3RzL2RpYi5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglBZGRzIEFyYywgQ2hvcmQsIEdldENoYXJXaWR0aCwgUGllLCBQb2x5UG9seWdvbiwgUG9seVBvbHlsaW5lLCBSb3VuZFJlY3QsCglTZXRQaXhlbCwgaGF0Y2hlZCBicnVzaGVzIGFuZCBhIHN0dWIgZm9yIFN0cmV0Y2hESUJpdHMgdG8gdGhlIFBvc3RTY3JpcHQKCWRyaXZlci4KCgkqIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaCwgaW5jbHVkZS9taXNjZW11LmgsIG1zZG9zL01ha2VmaWxlLmluLCBtc2Rvcy9pbnRlcnJ1cHRzLmM6CglKb3NlcGggUHJhbmV2aWNoIDxrbmlnaHRAYmFsdGltb3JlLnd3YXZlcy5jb20+CglBZGRlZCBzdXBwb3J0IGZvciBpbnQxNyBhbmQgaW50MTkuCgoJKiBtc2Rvcy9pbnQxOS5jOiBDYXJsIHZhbiBTY2hhaWsgPGNhcmxAZHJlYW1jb2F0LmNoZS51Y3QuYWMuemE+CglTdHVicyBmb3IgZG9zIG1vZGUgcmVib290IGludGVycnVwdC4KCgkqIG1zZG9zL2ludDE3LmM6IENhcmwgdmFuIFNjaGFpayA8Y2FybEBkcmVhbWNvYXQuY2hlLnVjdC5hYy56YT4KCVNvbWUgcHJpbnRlciBzdHVicyBmb3IgRE9TIGFkZGVkLgoKCSogbXNkb3MvaW50MTMuYzogSm9zZXBoIFByYW5ldmljaCA8a25pZ2h0QGJhbHRpbW9yZS53d2F2ZXMuY29tPgoJTW9yZSBzdHVicyBhZGRlZC4gVGhlc2UgY2hhbmdlcyBhcmUgb25seSBwYXJ0aWFsbHkgbWluZSwgSSBqdXN0IG1hZGUKCXRoZW0gY29tcGlsZS4KCgkqIG1zZG9zL2ludDEwLmM6IEpvc2VwaCBQcmFuZXZpY2ggPGtuaWdodEBiYWx0aW1vcmUud3dhdmVzLmNvbT4KCUFkZGVkIHNvbWUgdHJhY2VzIGFuZCBjbGVhbmVkIHVwIGEgY291cGxlIG9mIHRoaW5ncy4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaCwgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGRsbHMvc2hlbGwzMi9zaGxmb2xkZXIuYywgZGxscy9zaGVsbDMyL3NobHZpZXcuYywgaW5jbHVkZS9zaGVsbC5oLCBpbmNsdWRlL3NobG9iai5oLCBtZW1vcnkvc3RyaW5nLmMsIG9sZS9vbGUybmxzLmMsIHJlbGF5MzIvc2hlbGwzMi5zcGVjLCBkbGxzL3NoZWxsMzIvZGF0YW9iamVjdC5jLCBkbGxzL3NoZWxsMzIvZW51bWlkbGlzdC5jLCBkbGxzL3NoZWxsMzIvcGlkbC5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUNoYW5nZWQgc29tZSBzdHJpbmctc2hlbGwzMiBmdW5jdGlvbnMgdG8gMzJBVywgcGFyYW1ldGVyIGFyZQoJb3MgZGVwZW5kaW5nIDMyQSBvciAzMlcgKC13aW52ZXIgbnQzNTEgb3IgbnQ0MCksIHNvbWUgbmV3IGZ1bmN0aW9ucy4KCVNvbWUgZml4ZXMgaW4gb2xlMm5scy4KCU5ldyBPTEUyTkxTX0NoZWNrTG9jYWxlKCkgdG8gaGFuZGxlIExvY2FsZV9Vc2VyX0RlZmF1bHQgYW5kCglMb2NhbGVfU3lzdGVtX0RlZmF1bHQuCglTaGVsbDMyIG5vdyBkeW5hbWljbHkgbGlua3MgdG8gRFBBXyooKSwgY29tZGxnMzIgd29ya3MgYWdhaW4KCShjb21jdGwzMiBoZWFwIGFsbG9jIHBhdGNoIGJyb2tlIGl0KS4KCgkqIGluY2x1ZGUvd2ludmVyc2lvbi5oLCBtaXNjL3ZlcnNpb24uYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQWRkZWQgVkVSU0lPTl9Jc09zVW5pY29kZSgpLgoKCSogc2NoZWR1bGVyL2hhbmRsZS5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJTW9yZSBvZmYtYnktb25lIGVycm9ycyBmaXhlZC4KCgkqIGluY2x1ZGUvZmlsZS5oLCBtaXNjL2NydGRsbC5jLCBtc2Rvcy92eGQuYywgd2luMzIvZmlsZS5jLCBmaWxlcy9maWxlLmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGaWxlIHNoYXJpbmcgZml4ZXMuCgpGcmkgT2N0IDIzIDE3OjI2OjQ0IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBtaXNjL2NvbW1kbGcuYzogTmljayBIb2xsb3dheSA8YWxmaWVAYWxmaWUuZGVtb24uY28udWs+CglCdWcgZml4LgoKCSogbG9hZGVyL2Rvcy9tb2R1bGUuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglGaXhlZCBET1MgZW52aXJvbm1lbnQgcGFzc2luZy4KCgkqIG1pc2MvbWFpbi5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVN5c21ldHJpY3MzMlcgZm9yIFNQSV9HRVRJQ09OVElUTEVMT0dGT05UIHJldHVybnMgY29ycmVjdCBmb250bmFtZS4KCgkqIGluY2x1ZGUvZm9udC5oLCBvYmplY3RzL2ZvbnQuYywgb2JqZWN0cy9nZGlvYmouYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IEZPTlRfR2V0T2JqZWN0MzJXKCksIEdldE9iamVjdDMyVygpLgoKCSogcmVsYXkzMi91c2VyMzIuc3BlYywgd2luMzIvb3JkaW5hbHMuYywgd2luZG93cy91c2VyLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBzdHViIFJlZ2lzdGVyVGFza0xpc3QuCglOZXcgZnVuY3Rpb24gRW51bURpc3BsYXlTZXR0aW5nczMyVygpLgoKCSogbWlzYy9udGRsbC5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1vcmUgcGFyYW1ldGVyIGNoZWNraW5nIGluIFJsdENvcHlTaWQuCgoJKiB3aW5kb3dzL3dpbnByb2MuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglNb3JlIG1lc3NhZ2UgbWFwcGluZyAzMkE8LS0+MzJXIGZvciBFTV8sIENCXywgTEJfIGZvciBVbmljb2RlLgoKCSogcmVsYXkzMi8uY3ZzaWdub3JlLCByZWxheTMyL01ha2VmaWxlLmluLCByZWxheTMyL2F2aWZpbDMyLnNwZWMsIHJlbGF5MzIvYnVpbHRpbjMyLmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUFkZGVkIG5ldyBkbGwgYXZpZmlsMzIuZGxsLgoKCSogbG9hZGVyL2Rvcy9kb3N2bS5jLCBsb2FkZXIvZG9zL21vZHVsZS5jLCBtc2Rvcy9kcG1pLmMsIGluY2x1ZGUvZG9zZXhlLmg6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUZpcnN0IHNob3QgYXQgRFBNSSByZWFsbW9kZSBjYWxscy4KCgkqIGxvYWRlci9tb2R1bGUuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJRml4ZWQgc2V2ZXJhbCBidWdzIHdpdGggRExMIGluaXRpYWxpemF0aW9uLgoKVGh1IE9jdCAyMiAxNzowMjoyNSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogc2NoZWR1bGVyL3N5c2xldmVsLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgb3JkaW5hbCBmb3IgdHdvIHN5c2xldmVsIGZ1bmN0aW9ucy4KCgkqIG11bHRpbWVkaWEvbWlkaS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFub3RoZXIgbWlzc2luZyBXSU5BUEkuCgoJKiBpbmNsdWRlL21tc3lzdGVtLmg6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU21hbGwgY29ycmVjdGlvbnMgaW4gbW1pbyBkZWNsYXJhdGlvbnMuCgoJKiBsb2FkZXIvcGVfaW1hZ2UuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglUYWtlIHZpcnR1YWwgc2l6ZXMgaW4gYWNjb3VudCBmb3IgdGhlIHRvdGFsIHZtYSBzaXplLgoKCSogb2xlL25scy9yb20ubmxzOiBEaW1pdHJpZSBPLiBQYXVuIDxkaW1pQGNzLnRvcm9udG8uZWR1PgoJQWRkIHNvbWUgbW9yZSBOTFMgZGVmaW5pdGlvbnMgZm9yIHRoZSBSb21hbmlhbiBsYW5ndWFnZS4KCgkqIG11bHRpbWVkaWEvZHNvdW5kLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU29tZSBwcm9ncmFtcyAocXVha2UyIGV0IGFsKSBkbyBjaGVjayBmb3IgRFNDQVBTX0VNVUxEUklWRVIgYW5kIHN0b3AKCXRvIHdvcmsuICdBZGp1c3QnIGNhcHMgZmxhZ3MgYWNjb3JkaW5nbHkuCgoJKiBvbGUvY29tcG9iai5jLCByZWxheTMyL29sZTMyLnNwZWM6CglQZXRlIFJhdHpsYWZmIDxwcmF0emxhZmZAY2ZhLmhhcnZhcmQuZWR1PgoJU3R1YiBmb3IgQ29DcmVhdGVHdWlkKCkuCgoJKiBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmMsIG11bHRpbWVkaWEvbWNpY2RhLmM6CglCcmlhbiBMaXR6aW5nZXIgPGJyaWFuQGxpdHppbmdlci5jb20+CglGaXhlcyBmb3IgRnJlZUJTRC4KCgkqIGxpYnRlc3QvLmN2c2lnbm9yZSwgbGlidGVzdC9NYWtlZmlsZS5pbjoKCVBldHRlciBSZWluaG9sZHRzZW4gPHBlcmVAbWluZXJ2YS5jYy51aXQubm8+CglNYWtlIHN1cmUgaGVsbG8zcmVzLmggaXMgZ2VuZXJhdGVkIGV2ZW4gaWYgJ21ha2UgZGVwZW5kJyBuZXZlciBoYXMKCWJlZW4gcnVuLgoKCSogd2luZG93cy9ub25jbGllbnQuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglGaXhlZCBtb3ZpbmcgYW5kIHNpemluZyBvZiBjaGlsZCB3aW5kb3dzLgoKCSogaW5jbHVkZS90c194bGliLmgsIHRvb2xzL21ha2VfWDExd3JhcHBlcnMsIHRzeDExL1gxMV9jYWxscywgdHN4MTEvdHNfeGxpYi5jLCB3aW5kb3dzL2tleWJvYXJkLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVhRdWVyeUtleW1hcCAtPiBUU1hRdWVyeUtleW1hcCAoZml4ZXMgdGhlIFhJTyBlcnJvcnMgcmVwb3J0ZWQpLgoKV2VkIE9jdCAyMSAxNzoyMDo0OCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS9kb3NleGUuaCwgbG9hZGVyL2Rvcy9kb3N2bS5jLCBtaXNjZW11L21haW4uYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQWRkZWQgaW5kaXJlY3Rpb24gZm9yIGN0eF9kZWJ1ZyB0byB0aGUgRE9TIGxvYWRlciwgc28gV2luZWxpYiB3b3JrcwoJYWdhaW4uCgoJKiBtZW1vcnkvdmlydHVhbC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVN1cHBvcnQgYW5vbiBzaGFyZWQgbWFwcGluZ3MgdXNpbmcgdGVtcG9yYXJ5IGZpbGVzICh3b250IGJlIGRlbGV0ZWQKCXlldCkuCgoJKiBtaXNjL21haW4uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglXYXMgZnJlZWluZyB0aGUgaW5jb3JyZWN0IHBvaW50ZXJzIC0+IGNyYXNoIGluIG1hbGxvY3MvZnJlZXMuCgoJKiBmaWxlcy9kb3NfZnMuYywgcmVsYXkzMi9rZXJuZWwzMi5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglEZWZpbmVEb3NEZXZpY2Ugc3R1YiBhZGRlZC4KCgkqIG1pc2NlbXUvbWFpbi5jLCB3aW5lLmluaTogQ2hhZCBQb3dlbGwgKHB4cHhAdXNhLm5ldCkKCUFkZGVkIGEgZGVmYXVsdCBwcm9ncmFtIG9wdGlvbiBpbiB3aW5lLmNvbmYgaW4gc2VjdGlvbiBbcHJvZ3JhbXNdIGtleQoJRGVmYXVsdC4KCgkqIGluY2x1ZGUvd2ludHlwZXMuaDogRGF2aWQgQ3V0aGJlcnQgPGRhY3V0QGVjZS5jbXUuZWR1PgoJQmV0dGVyIGZpeCBmb3IgdGhpc19pc19hX3N5bnRheF9lcnJvci4KCgkqIG9sZS9ubHMvKi5ubHM6CglQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaD4KCUFkZGVkIHRoZSBlbnRyaWVzIGZvciBMT0NBTEVfU0lTTzYzOUxBTkdOQU1FIGFuZAoJTE9DQUxFX1NJU08zMTY2Q1RSWU5BTUUuCgoJKiBkb2N1bWVudGF0aW9uL3dpbmUubWFuOiBKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CglVcGRhdGVkIG1hbnBhZ2UuCgoJKiByZWxheTMyL21zYWNtMzIuc3BlYzogUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglGaXhlZCB3cm9uZyBvcmRpbmFscy4KCgkqIG9iamVjdHMvcmVnaW9uLmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJRml4ZWQgYSBidWcgaW4gUmVjdEluUmVnaW9uLgoKVHVlIE9jdCAyMCAxNToyNjoyNiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbXNkb3MvaW50ZXJydXB0cy5jOiBORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCVJlbW92ZWQgYW4gaW5jb3JyZWN0IGVycm9yIG1lc3NhZ2UuCgoJKiBmaWxlcy9kcml2ZS5jOiBQZXR0ZXIgUmVpbmhvbGR0c2VuIDxwZXJlQG1pbmVydmEuY2MudWl0Lm5vPgoJTWFrZSBzdXJlIHRoZSBhY2Nlc3MgZnVuY3Rpb25zIGFyZSBhbHdheXMgdXNlZCB0byBnZXQgbGFiZWwgYW5kIHNlcmlhbAoJbnVtYmVyLgoKTW9uIE9jdCAxOSAwODo0ODoyNCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogb2xlL29sZTJubHMuYzogRXJpYyBQb3VlY2ggPGVyaWMucG91ZWNoQGhvbC5mcj4KCUZpeGVkIGJ1ZyBvbiBwbGF0Zm9ybXMgd2VyZSBidWZmZXJzIHJldHVybmVkIGJ5IGdldGVudigpIHNoYWxsIG5vdCBiZQoJZnJlZSgpJ2VkLiBBZGRlZCBGcmVuY2ggKGRlZmF1bHQpIGluIGxvY2FsZSBoYW5kbGluZy4KCgkqIGluY2x1ZGUvd2ludHlwZXMuaDogRGF2ZSBDdXRoYmVydCA8ZGFjdXRAZWNlLmNtdS5lZHU+CglDaGFuZ2VkICJ0aGlzIGlzIGEgc3ludGF4IGVycm9yIiB0byAidGhpc19pc19hX3N5bnRheF9lcnJvciIgdG8gbWFrZSBhCgljb21waWxlLXRpbWUgZXJyb3IgbWVzc2FnZSBtYWtlIG1vcmUgc2Vuc2UuCgoJKiBzY2hlZHVsZXIvaGFuZGxlLmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGaXhlZCBvZmYgYnkgb25lIGVycm9yIGluIEhBTkRMRV9HZXRPYmpQdHIuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBPY3QgMTggMTQ6NDg6MzEgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGZpbGVzL2ZpbGUuYzogVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJVHJ5IHRvIGltcGxlbWVudCB0aGUgT0ZfU0hBUkVfWFhYIG9wdGlvbnMuCglNb3ZlIHRoZSBtb2RlIHRyYW5zbGF0aW9ucyB0byBmdW5jdGlvbnMuCgoJKiBpbmNsdWRlL21haW4uaCwgb2xlL2NvbXBvYmouYywgb2xlL2lmcy5jLCBvbGUvb2xlMmRpc3AuYywgb2xlL29sZTJubHMuYywgb2xlL29sZXN2ci5jLCBvbGUvc3RvcmFnZS5jOgoJTWF0dGhldyBCZWNrZXIgPG1iZWNrZXJAZ2xhc3NjaXR5Lm5ldD4KCURvY3VtZW50YXRpb24gdXBkYXRlcy4KCgkqIG9sZS9jb21wb2JqLmMsIHJlbGF5MzIvb2xlMzIuc3BlYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFkZGVkIHN0dWIgZm9yIENvU2V0U3RhdGUzMi4KCgkqIG1pc2NlbXUvbWFpbi5jOiBDaGFkIFBvd2VsbCA8cHhweEB1c2EubmV0PgoJQWRkZWQgYWJpbGl0eSB0byByZWFkIGEgc3RhcnR1cCBwcm9ncmFtIGZyb20gd2luZS5pbmkgZmlsZS4KCVB1dCBpdCBpbiBzZWN0aW9uIFtwcm9ncmFtc10ga2V5IFN0YXJ0dXAuCgoJKiBpbmNsdWRlL3RyYWNrYmFyLmgsIGluY2x1ZGUvdHJlZXZpZXcuaCwgZGxscy9jb21jdGwzMi90cmFja2Jhci5jLCBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmM6CglBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgoJRnVydGhlciBpbXByb3ZlbWVudHMuCgoJKiBpbmNsdWRlL2N1cnNvcmljb24uaCwgb2JqZWN0cy9jdXJzb3JpY29uLmM6CglUdXJjaGFub3YgU2VyZ2V5IDx0dXJjaGFub3ZAdXNhLm5ldD4KCUltcGxlbWVudGVkIExvYWRDdXJzb3JGcm9tRmlsZSwgZml4ZWQgRHJhd0ljb25FeCB0byBzdXBwb3J0IG9mZnNjcmVlbgoJZHJhd2luZywgZml4ZWQgQ1VSU09SSUNPTl9DcmVhdGVGcm9tUmVzb3VyY2UgdG8gc3VwcG9ydCBMUl8gc2VtYW50aWNzLgoKCSogaW5jbHVkZS9iaXRtYXAuaCwgb2JqZWN0cy9iaXRtYXAuYzoKCVR1cmNoYW5vdiBTZXJnZXkgPHR1cmNoYW5vdkB1c2EubmV0PgoJRml4ZWQgTG9hZEltYWdlIHRvIHN1cHBvcnQgYWxtb3N0IGFsbCBMUl8gZmxhZ3MuCgoJKiBvYmplY3RzL2RpYi5jOiBUdXJjaGFub3YgU2VyZ2V5IDx0dXJjaGFub3ZAdXNhLm5ldD4KCUZpeGVkIGJ1ZyBpbiBESUJfU2V0SW1hZ2VCaXRzX1JMRTggKGJlY2F1c2UgJ2NvbG9yJyB2YXIgd2FzIFdPUkQsIGFsbAoJQ09MT1JFRnMgaGFkIHJlZCBwYXJ0IHplcm9lZCkgdGhhdCBtYWRlIHBsZW50eSBvZiBjeWFuIGNvbG9ycywgbWlub3IKCWJ1ZyBmaXhlcywgY2hhbmdlcyB0byBzdXBwb3J0IExSXyBmbGFncy4KCgkqIGluY2x1ZGUvZ2xvYmFsLmgsIG1lbW9yeS92aXJ0dWFsLmM6CglUdXJjaGFub3YgU2VyZ2V5IDx0dXJjaGFub3ZAdXNhLm5ldD4KCUFkZGVkIFZJUlRVQUxfTWFwRmlsZVcgdG8gbWFwIGZpbGUgdG8gbWVtb3J5IGluIG9uZSBmdW5jdGlvbiBjYWxsLgoKCSogaW5jbHVkZS9kZHJhdy5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaW5jbHVkZS93aW50eXBlcy5oLCB3aW5kb3dzL211bHRpbW9uLmM6CglUdXJjaGFub3YgU2VyZ2V5IDx0dXJjaGFub3ZAdXNhLm5ldD4KCU1vdmVkIE11bHRpbW9uaXRvciBBUEkgZGVjbGFyYXRpb25zIHRvIHdpbmRvd3MuaC4KCgkqIGlmMTYzMi91c2VyLnNwZWMsIGluY2x1ZGUvZHJpdmVyLmgsIG11bHRpbWVkaWEvYXVkaW8uYywgbXVsdGltZWRpYS9tY2lhbmltLmMsIG11bHRpbWVkaWEvbWNpY2RhLmMsIG11bHRpbWVkaWEvbWlkaS5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmMsIHJlbGF5MzIvd2lubW0uc3BlYywgd2luZG93cy9kcml2ZXIuYzoKCVR1cmNoYW5vdiBTZXJnZXkgPHR1cmNoYW5vdkB1c2EubmV0PgoJSW1wbGVtZW50ZWQgRGVmRHJpdmVyUHJvYzMyIGZyb20gd2lubW0uZGxsLgoKCSogY29udHJvbHMvc2Nyb2xsLmMsIGluY2x1ZGUvc2Nyb2xsLmgsIHdpbmRvd3MvbWRpLmMsIHdpbmRvd3Mvbm9uY2xpZW50LmM6CglBbGV4IEtvcm9ia2EgPGtvcm9ia2FAYW1zLnN1bnlzYi5lZHU+CglHb3QgcmlkIG9mIGZsaWNrZXJpbmcgc2Nyb2xsYmFyIGFycm93cy4gTURJIHNjcm9sbGluZyBzcGVlZGVkIHVwIGEKCWJpdC4KCgkqIGluY2x1ZGUvd2lubmxzLmgsIG9sZS9ubHMvZGV1Lm5scywgb2xlL29sZTJubHMuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJR2V0TG9jYWxlSW5mbzMyQSBjYW4gaGFuZGxlIGxlbj0wIG5vdywgc2V0cyBMYXN0RXJyb3IgYW5kIHRvdWNoZXMKCWJ1ZmZlciBvbmx5IHdoZW4gbmVjZXNzYXJ5LgoJVXBkYXRlZCBkZXUubmxzIGFuZCBzb21lIExDVFlQRVMgaW4gd2lubmxzLmguCgoJKiBpZjE2MzIvcmVsYXkuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUNhbGxQcm9jW0V4XTMyVyBjYWxsZWQgd2l0aCBscFByb2NBZGRyZXNzPT1OVUxMIHNob3VsZCByZXR1cm4gemVybyBhbmQKCW5vdCBjcmFzaC4KClNhdCBPY3QgMTcgMTM6MDc6NDggMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGRsbHMvY29tY3RsMzIvY29tbWN0cmwuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglSZWR1Y2VkIGh1Z2UgKDFHQikgaGVhcCBjcmVhdGlvbiB0aGF0IGNhdXNlZCBTdGFyY3JhZnQgdG8gZmFpbC4KCgkqIGluY2x1ZGUvZG9zZXhlLmgsIGluY2x1ZGUvbW9kdWxlLmgsIGxvYWRlci9kb3MvZG9zdm0uYywgbXVsdGltZWRpYS9kcGxheS5jLCB3aW5kb3dzL2RpYWxvZy5jOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglDb21waWxlIGZpeCBmb3IgU29sYXJpcy4KCgkqIG11bHRpbWVkaWEvbWlkaS5jOiBQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCUNvbXBpbGUgZml4IGZvciBub24gT1NTIHN5c3RlbXMuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCUNvbXBpbGUgZml4IGZvciBub24gWEY4Ni1ER0Egc3lzdGVtcy4KCgkqIGxpYnRlc3QvTWFrZWZpbGUuaW4sIGxpYnRlc3Qvdm9saW5mby5jOgoJUGV0dGVyIFJlaW5ob2xkdHNlbiA8cGVyZUB0ZC5vcmcudWl0Lm5vPgoJTmV3IGZpbGUgdG8gdGVzdCBEUklWRV9HZXRMYWJlbC4KCgkqIG11bHRpbWVkaWEvbWNpY2RhLmM6IFBldGVyIEh1bm5pc2V0dCA8aHVubmlzZUBub3J0ZWwuY2E+CglTbWFsbCwgc3Vib3B0aW1hbCwgZml4IGZvciAzMiBiaXQgY2RhdWRpbyBvcGVuIHJvdXRpbmVzLiBOZWVkcyBwcm9wZXIKCTMyYml0IGNkYXVkaW8gYml0IHN1cHBvcnQgYmVmb3JlIGl0IGNhbiBiZSByZW1vdmVkLi4uCgoJKiBncmFwaGljcy9kZHJhdy5jOiBQZXRlciBIdW5uaXNldHQgPGh1bm5pc2VAbm9ydGVsLmNhPgoJQWRkZWQgYSBidW5jaCBvZiBzdHVicyBmb3IgZGRyYXcgc3VmYWNlIHJvdXRpbmVzLiBBbGwgc3R1YnMgZm9yCglzdXJmYWNlIHByZXNlbnQgbm93LgoJQ29tbWVudGVkIG91dCBtZXNzYWdlIHB1bXAgY2FsbHMuIEkgZG9uJ3Qgc2VlIGEgcmVhc29uIGZvciB0aGVtIGJlaW5nCgl0aGVyZS4gRXZlcnl0aGluZyB3b3JrcyBmaW5lIHdpdGggLWRlc2t0b3AgYW5kIC1tYW5hZ2VkIHN0aWxsIGhhcwoJcHJvYmxlbXMuIERpc2FncmVlbWVudHM/CgoJKiBvbGUvb2xlMm5scy5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpeGVkIEdldExvY2FsZUluZm8zMkEgZm9yIG90aGVyIGxhbmd1YWdlcyB0aGFuIGVuX3VrLgoJTWFkZSBpdCByZWNvZ25pc2UgTE9DQUxFX1NZU1RFTV9ERUZBVUxULCBMT0NBTEVfU1lTVEVNX0RFRkFVTFQgYW5kCglsYXN0IGJ1dCBub3QgbGVhc3QgdGhlIGZpcnN0IGFyZ3VtZW50IGxjaWQgd2hlcmUgaXMgYWxsIGFib3V0Li4uCgoJKiBpbmNsdWRlL3N5c2xldmVsLmgsIG1pc2MvcmVnaXN0cnkuYywgbXVsdGltZWRpYS9kcGxheS5jLCBtdWx0aW1lZGlhL2Rzb3VuZC5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmMsIG11bHRpbWVkaWEvdGltZS5jLCB3aW5kb3dzL2NhcmV0LmMsIGRsbHMvbXNhY20zMi9idWlsdGluLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUZpeGVkIHNvbWUgbW9yZSBtaXNzaW5nIFdJTkFQSXMgKGhvcGVmdWxseSBjb3JyZWN0KS4KCgkqIG9sZS9vbGUybmxzLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4ZWQgdGhlID0gLT4gPT0gYnVnLgoKCSogbXNkb3MvaW50MmYuYzogSm9zZXBoIFByYW5ldmljaCA8a25pZ2h0QGJhbHRpbW9yZS53d2F2ZXMuY29tPgoJU2hlbGwgcGFyYW1ldGVycyAoY29uZmlnLnN5cykgYW5kIEFOU0kgc3VwcG9ydCBzdHVicy4KCgkqIG1zZG9zL01ha2VmaWxlLmluOiBKb3NlcGggUHJhbmV2aWNoIDxrbmlnaHRAYmFsdGltb3JlLnd3YXZlcy5jb20+CglBZGRlZCBpbnQxNi5jIGFuZCBpbnQyOS5jLgoKCSogaW5jbHVkZS9taXNjZW11LmgsIG1zZG9zL2ludGVycnVwdHMuYzoKCUpvc2VwaCBQcmFuZXZpY2ggPGtuaWdodEBiYWx0aW1vcmUud3dhdmVzLmNvbT4KCU1vcmUgaW50ZXJydXB0cyB0aGF0IGNhbiBiZSBkb25lIGZyb20gRE9TIG1vZGUuCgoJKiBtc2Rvcy9pbnQyOS5jOiBKb3NlcGggUHJhbmV2aWNoIDxrbmlnaHRAYmFsdGltb3JlLnd3YXZlcy5jb20+CglBZGRlZCBpbnQyOSAoRmFzdCBXcml0ZSB0byBTY3JlZW4pIHN1cHBvcnQuCgoJKiBtc2Rvcy9pbnQxNi5jLCBpbmNsdWRlL2RlYnVnLmgsIGluY2x1ZGUvZGVidWdkZWZzLmg6CglKb3NlcGggUHJhbmV2aWNoIDxrbmlnaHRAYmFsdGltb3JlLnd3YXZlcy5jb20+CglBZGRlZCBpbnQxNiAoS2V5Ym9hcmQpIHN1cHBvcnQsIG1vc3RseSBzdHVicy4KCkZyaSBPY3QgMTYgMTU6NDA6MjEgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHJlbGF5MzIvc2hlbGwzMi5zcGVjLCBkbGxzL3NoZWxsMzIvcGlkbC5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIGluY2x1ZGUvc2hsb2JqLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1hbnkgYnVnZml4ZXMsIG5ldyBzdHVicyBTSEdldFJlYWxJREwsIFNIUmVnUXVlcnlWYWx1ZTMyVywKCVNIUmVnUXVlcnlWYWx1ZUV4MzJXLCBTdHJSZXRUb1N0ck4sIFN0ckNoclcsIFNIQWxsb2NTaGFyZWQsCglTSExvY2tTaGFyZWQsIFNIVW5sb2NrU2hhcmVkLCBTSEZyZWVTaGFyZWQsIFNldEFwcFN0YXJ0aW5nQ3Vyc29yMzIsCglTSExvYWRPTEUzMiwgU2hlbGxfTWVyZ2VNZW51czMyLCBQYXRoR2V0RHJpdmVOdW1iZXIzMiwgRHJpdmVUeXBlMzIsCglTSEFib3J0SW52b2tlQ29tbWFuZCwgU0hPdXRPZk1lbW9yeU1lc3NhZ2VCb3gsIFNIRmx1c2hDbGlwYm9hcmQuCgoJKiBtaXNjL250ZGxsLmMsIHJlbGF5MzIvbnRkbGwuc3BlYzoKCURpZXRtYXIgS2xpbmcgPGRpZXRtYXIua2xpbmdAdXNhLm5ldD4KCUFkZGVkIHVuZG9jdW1lbnRlZCBmdW5jdGlvbiBSdGxPcGVuQ3VycmVudFVzZXIuCgoJKiBvYmplY3RzL2N1cnNvcmljb24uYywgbWlzYy9zaGVsbC5jLCBtaXNjL3Zlci5jLCBtaXNjL3ZlcnNpb24uYywgbG9hZGVyL2VsZi5jLCBsb2FkZXIvbW9kdWxlLmMsIGxvYWRlci9wZV9pbWFnZS5jLCBsb2FkZXIvcGVfcmVzb3VyY2UuYywgaW5jbHVkZS9uZWV4ZS5oLCBpbmNsdWRlL3BlX2ltYWdlLmgsIGluY2x1ZGUvcGVleGUuaCwgZGVidWdnZXIvZGJnbWFpbi5jLCBkZWJ1Z2dlci9tc2MuYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCVJlbmFtZWQgYWxsIExQSU1BR0VfKiB0eXBlcyB0byBQSU1BR0VfKi4KClRodSBPY3QgMTUgMTM6MDM6MTAgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbmRvd3Mvd2lucG9zLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglGaXhlZCBhbiBlcnJvciB3aGVuIGFuIG93bmVkIHdpbmRvdyBhY3RpdmF0ZXMgaXRzIG93bmVyIGR1cmluZwoJY3JlYXRpb24uCgoJKiB3aW5kb3dzL2RlZmRsZy5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJQ2xvc2luZyBhIGRpYWxvZyB1c2luZyB0aGUgbWVudSBiYXIgKCJ4IiBvciAiLSIgYnV0dG9uIG9yIHdpbmRvd3MKCW1lbnUpIG11c3QgZ2VuZXJhdGUgYSBXTV9DT01NQU5EK0lEQ0FOQ0VMIG1lc3NhZ2UsIHVubGlrZSBjbG9zaW5nCglub3JtYWwgd2luZG93cyB3aGVuIERlc3Ryb3lXaW5kb3coKSBpcyBjYWxsZWQuCgoJKiBkbGxzL3NoZWxsMzIvcGlkbC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGRlZCBtaXNzaW5nIFdJTkFQSXMuCgoJKiB3aW5kb3dzL3dpbnBvcy5jLCB3aW4zMi9vcmRpbmFscy5jLCByZWxheTMyL3VzZXIzMi5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgc3R1YnMgUHJpdmF0ZUV4dHJhY3RJY29uRXhbQVddLCBQcml2YXRlRXh0cmFjdEljb25zVywKCVJlZ2lzdGVyU2hlbGxIb29rV2luZG93LCBEZXJlZ2lzdGVyU2hlbGxIb29rV2luZG93LCBHZXRQcm9nbWFuV2luZG93LAoJR2V0VGFza21hbldpbmRvdywgU2V0UHJvZ21hbldpbmRvdywgU2V0U2hlbGxXaW5kb3dFeCwKCVNldFRhc2ttYW5XaW5kb3cuCgoJKiByZWxheTMyL250ZGxsLnNwZWMsIG1pc2MvbnRkbGwuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IHN0dWJzIE50UXVlcnlJbmZvcm1hdGlvblRocmVhZCwgTnRRdWVyeUluZm9ybWF0aW9uVG9rZW4sCglSdGxBbGxvY2F0ZUFuZEluaXRpYWxpemVTaWQsIFJ0bEVxdWFsU2lkLCBSdGxGcmVlU2lkLgoKCSogbXVsdGltZWRpYS9tbXN5c3RlbS5jOiBUdXJjaGFub3YgU2VyZ2V5IDx0dXJjaGFub3ZAdXNhLm5ldD4KCUZpeGVkIFBsYXlTb3VuZCB0byBzdGFydCBpdHMgdGhyZWFkIHRoZSByaWdodCB3YXkuCgpXZWQgT2N0IDE0IDE4OjQwOjM1IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBjb250cm9scy9jb21iby5jLCBjb250cm9scy9saXN0Ym94LmM6CglBbGV4IEtvcm9ia2EgPGtvcm9ia2FAYW1zLnN1bnlzYi5lZHU+CglDQl9TRVRDVVJTRUwgYW5kIHNvbWUgb3RoZXIgZml4ZXMuCgoJKiB3aW5kb3dzL3F1ZXVlLmM6IEFsZXggS29yb2JrYSA8a29yb2JrYUBhbXMuc3VueXNiLmVkdT4KCUJldHRlciBRVUVVRV9GbHVzaE1lc3NhZ2VzKCkuCgoJKiByZWxheTMyL2dkaTMyLnNwZWMsIG9iamVjdHMvZm9udC5jLCBpbmNsdWRlL3dpbmRvd3MuaCwgaWYxNjMyL2dkaS5zcGVjOgoJTW9zaGUgVmFpbmVyIDxtb3NoZXZAZWFzeWJhc2UuY29tPgoJUGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBHZXRPdXRsaW5lVGV4dE1ldHJpY3MzMkEuCglBZGRlZCBzdHJ1Y3R1cmVzIGZvciBPVVRMSU5FVEVYVE1FVFJJQ1MuCgoJKiBvYmplY3RzL2RjLmMsIGluY2x1ZGUvZ2RpLmgsIGdyYXBoaWNzL3gxMWRydi9iaXRibHQuYywgZ3JhcGhpY3MveDExZHJ2L2JpdG1hcC5jLCBncmFwaGljcy94MTFkcnYvaW5pdC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglEbyBub3QgY2xpcCBzb3VyY2UgcmVjdGFuZ2xlIGV2ZW4gYnkgdmlzaWJsZSByZWdpb24gZm9yIGJpdGJsdHMuCglBZGRlZCBmaWVsZCAndG90YWxFeHRlbnQnIHRvIFdJTl9EQ19JTkZPLgoKCSogbXNkb3MvdnhkLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRkZWQgc3R1YiBmb3IgVk1NIFBNIEFQSSBBSD0wMjZbZGVdIChuZXZlciBzYXkgJ3NhZmUgbW9kZScpLgoKCSogbWVtb3J5L2hlYXAuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IExvY2FsMzJGcmVlIGNhdXNlZCBmcmVlIGhhbmRsZXMgbGlzdCBjb3JydXB0aW9uLgoKCSogaW5jbHVkZS9kZWJ1Z3Rvb2xzLmg6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4ZWQgLS1kaXNhYmxlLWRlYnVnIGNvbmZpZyBvcHRpb24uCgpUdWUgT2N0IDEzIDEyOjUwOjA0IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiByZWxheTMyL3NoZWxsMzIuc3BlYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmM6CglQZXR0ZXIgUmVpbmhvbGR0c2VuIDxwZXJlQHRkLm9yZy51aXQubm8+CglBZGRlZCBzdHVicyBTSFJlZ0Nsb3NlS2V5KCksIFNIUmVnT3BlbktleVtBV10oKSwgU0hSZWdRdWVyeVZhbHVlRXhBKCkKCWFuZCBGaWxlSWNvbkluaXQoKSBuZWVkZWQgYnkgV2luOTUgZXhwbG9yZXIuCgpNb24gT2N0IDEyIDA3OjI1OjU0IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB3aW5kb3dzL2RpYWxvZy5jLCBjb250cm9scy9idXR0b24uYywgY29udHJvbHMvbWVudS5jOgoJTm9ybWFuIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJSW1wcm92aW5nIGtleWJvYXJkIGhhbmRsaW5nLCBpbmNsdWRpbmcgYWNjZWxlcmF0b3Iga2V5cyBpbiBkaWFsb2cKCWJveGVzLiBBbHNvIGZpeGVzIGVudGVyIGtleSBpbiBBZ2VudDMyIGVkaXQgYm94LgoKU3VuIE9jdCAxMSAxOTozNzoyMyAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbWlzYy9jb21tZGxnLmM6IEVyaWMgUG91ZWNoICA8ZXJpYy5wb3VlY2hAbGVtZWwuZnI+CglBZGRlZCBzdXBwb3J0IGluIGZpbGUgZGlhbG9nIGJveGVzIGhhbmRsaW5nIGZvciBmaWx0ZXJzIGxpa2UKCSIqLnR4dDsqLmJhdCIuCgoJKiB3aW4zMi9rZXJuZWwzMi5jLCBzY2hlZHVsZXIvdGhyZWFkLmMsIGxvYWRlci9tb2R1bGUuYywgbG9hZGVyL3BlX2ltYWdlLmMsIGxvYWRlci90YXNrLmMsIGluY2x1ZGUvbW9kdWxlLmgsIGluY2x1ZGUvcGVfaW1hZ2UuaDoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgbmV3IFBFIERMTCBpbml0YWxpemF0aW9uIGNvZGUsIHRyeWluZyB0byBjYWxsIHRoZQoJRGxsRW50cnlQb2ludCByb3V0aW5lcyBhbHdheXMgaW4gY29ycmVjdCBvcmRlciA6LSkKCUJ5cGFzcyBzbm9vcGluZyB3aGVuIGdldHRpbmcgZGF0YSBidWZmZXIgYWRkcmVzc2VzICh0aHVuayBidWZmZXJzLAoJX19HUCBoYW5kbGVycykgYW5kIGZvciAzMi1iaXQgcm91dGluZXMgZGlyZWN0bHkgY2FsbGVkIGZyb20gMTYtYml0CgkoZHVlIHRvIHN0YWNrIGFkZHJlc3Mgc2l6ZSBwcm9ibGVtcykuCgoJKiB3aW4zMi9vcmRpbmFscy5jLCByZWxheTMyL2tlcm5lbDMyLnNwZWMsIGxvYWRlci9uZS9tb2R1bGUuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgQ29tbW9uVW5pbXBTdHViLCBNYXBISW5zdChMU3xTTClfUE4sIFczMlNfQmFja1RvMzIuCglTdHViIGZvciBIb3VzZUNsZWFuTG9naWNhbGx5RGVhZEhhbmRsZXMsIGZpeGVkIGszMnd2c3ByaW50ZkEuCgoJKiB0b29scy9idWlsZC5jLCBpZjE2MzIva2VybmVsLnNwZWMsIGlmMTYzMi9yZWxheS5jLCBpZjE2MzIvdGh1bmsuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgKHBhcnRpYWxseSkgdGhlIEtFUk5FTCBUaHVua2xldCBBUEkgYW5kIENhbGxiYWNrIENsaWVudAoJQVBJIChLRVJORUwuNTYwLTU2OCw2MDQtNjEyLDYxOS02MjIpLgoJQWRkZWQgc3R1YnMgZm9yIEsyMjgsIEsyMzcsIEtFUk5FTC4zNjUsIEtFUk5FTC40NDcuCgoJKiBvYmplY3RzL2JpdG1hcC5jLCBpZjE2MzIvZ2RpLnNwZWM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVN0dWJzIGZvciBDcmVhdGVVc2VyKERpc2NhcmRhYmxlKUJpdG1hcDE2LgoKCSogbWVtb3J5L2hlYXAuYywgaW5jbHVkZS93aW5udC5oOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCBIRUFQX1dJTkVfQ09ERTE2U0VHIFNFR1BUUiBoZWFwcyB3aXRoIDE2LWJpdCBjb2RlIHNlZ21lbnRzLgoKCSogbWVtb3J5L2dsb2JhbC5jLCBpbmNsdWRlL3dpbmRvd3MuaDoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJR2xvYmFsRml4MTYgaXMgc3VwcG9zZWQgdG8gcmV0dXJuIHNlbGVjdG9yIHRvIHRoZSBtZW1vcnkgYXJlYS4KCgkqIG1zZG9zL3Z4ZC5jLCBpZjE2MzIvTWFrZWZpbGUuaW4sIGlmMTYzMi9idWlsdGluLmMsIGlmMTYzMi9jb21tLnNwZWMsIGlmMTYzMi93cHJvY3Muc3BlYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJU3R1YnMgZm9yIENPTU0uRFJWLCBSRUJPT1QuVlhELCBWREQuVlhELgoKCSogc2NoZWR1bGVyL3Byb2Nlc3MuYywgc2NoZWR1bGVyL3N5c2xldmVsLmMsIGluY2x1ZGUvc2lnX2NvbnRleHQuaCwgaW5jbHVkZS9zeXNsZXZlbC5oOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglVc2UgZW1lcmdlbmN5IFRFQiBzZWxlY3RvciB0byBhdm9pZCBkZWJ1Z2dlciBjcmFzaGVzIHdoZW4gc3RlcHBpbmcKCXRocm91Z2ggcmVsYXkgc3R1YnMgKG9yIHdoZW4gRlMgaXMgaW52YWxpZCBvdGhlcndpc2UpLgoKCSogd2luZG93cy9ldmVudC5jLCB3aW5kb3dzL2tleWJvYXJkLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCU1PVVNFLkRSViByb3V0aW5lcyBtb3ZlZCB0byBldmVudC5jLiBDYWxsIG1vdXNlIGV2ZW50IHByb2NlZHVyZS4KCgkqIHdpbmRvd3MvZGNlLmMsIHdpbmRvd3MvcGFpbnRpbmcuYywgd2luZG93cy9zY3JvbGwuYywgb2JqZWN0cy9jbGlwcGluZy5jLCBvYmplY3RzL2RjLmMsIG9iamVjdHMvZGN2YWx1ZXMuYywgaW5jbHVkZS9kYy5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaWYxNjMyL2dkaS5zcGVjLCBncmFwaGljcy94MTFkcnYvYml0Ymx0LmMsIGdyYXBoaWNzL3gxMWRydi9jbGlwcGluZy5jLCBncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuYywgZ3JhcGhpY3MveDExZHJ2L3RleHQuYywgZ3JhcGhpY3MvcGF0aC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglDaGFuZ2VkIERDIG1lbWJlcnMgdy5oVmlzUmduLCB3LmhDbGlwUmduLCBhbWQgdy5oR0NDbGlwUmduIHRvCgljb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgZGV2aWNlLCBub3QgdGhlIERDIG9yaWdpbi4gVGhpcyBpcwoJbmVjZXNzYXJ5IHRvIGNvcnJlY3RseSBpbXBsZW1lbnQgR2V0Q2xpcFJnbjE2IGFuZCBJbnF1aXJlVmlzUmduLgoJU2VsZWN0VmlzUmduIGFsc28gZXhwZWN0cyByZWdpb24gaW4gZGV2aWNlLXJlbGF0aXZlIGNvb3JkaW5hdGVzLgoJQWRhcHRlZCB0aGUgcmVzdCBvZiBXaW5lIHRvIHRoaXMgY29vcmRpbmF0ZSBjaGFuZ2UuCglJbXBsZW1lbnRlZCBFeHRTZWxlY3RDbGlwUmduLgoKCSogdG9vbHMvd2luYXBpLWNoZWNrLCBzY2hlZHVsZXIvc3lzbGV2ZWwuYywgZmlsZXMvZG9zX2ZzLmM6CglBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCVNtYWxsIGZpeC4KCgkqIGxvYWRlci9uZS9zZWdtZW50LmMsIGluY2x1ZGUvbW9kdWxlLmgsIGluY2x1ZGUvbmVleGUuaCwgaWYxNjMyL2tlcm5lbC5zcGVjOgoJQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CglZZXQgYW5vdGhlciBzbWFsbCBzZWxmLWxvYWRlciBmaXguCgoJKiBmaWxlcy9kcml2ZS5jOiBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCUZpeGVkIHNldmVyZSBidWc6IFNldEN1cnJlbnREaXJlY3RvcnkzMkEgZGlkbid0IHNldCBwVGFzay0+Y3VyZGlyCgljb3JyZWN0bHkgZHVlIHRvIGN1cnJlbnQgZHJpdmUgYmVpbmcgc2V0IHRvbyBsYXRlLgoKCSogTWFrZS5ydWxlcy5pbjogUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglVc2UgJChBUykgaW5zdGVhZCBvZiAkKENDKSB0byBjb21waWxlIC5zIGZpbGVzLgoKCSogcmVsYXkzMi8uY3ZzaWdub3JlLCByZWxheTMyL01ha2VmaWxlLmluLCByZWxheTMyL2J1aWx0aW4zMi5jLCBpbmNsdWRlL2RlYnVnLmgsIGluY2x1ZGUvZGVidWdkZWZzLmgsIGluY2x1ZGUvbW1yZWcuaCwgaWYxNjMyLy5jdnNpZ25vcmUsIGlmMTYzMi9NYWtlZmlsZS5pbiwgaWYxNjMyL2J1aWx0aW4uYywgZGxscy9NYWtlZmlsZS5pbiwgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglTdGFydGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBNU0FDTS5ETEwsIE1TQUNNMzIuRExMIGFuZCBJTUFHRUhMUC5ETEwuCgoJKiBpbmNsdWRlL2ltYWdlaGxwLmgsIHJlbGF5MzIvaW1hZ2VobHAuc3BlYywgZGxscy9pbWFnZWhscC8uY3ZzaWdub3JlLCBkbGxzL2ltYWdlaGxwL01ha2VmaWxlLmluLCBkbGxzL2ltYWdlaGxwL2FjY2Vzcy5jLCBkbGxzL2ltYWdlaGxwL2RlYnVnLmMsIGRsbHMvaW1hZ2VobHAvaW1hZ2VobHBfbWFpbi5jLCBkbGxzL2ltYWdlaGxwL2ludGVncml0eS5jLCBkbGxzL2ltYWdlaGxwL2ludGVybmFsLmMsIGRsbHMvaW1hZ2VobHAvbW9kaWZ5LmMsIGRsbHMvaW1hZ2VobHAvc3ltYm9sLmM6CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCVN0YXJ0ZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIElNQUdFSExQLkRMTC4KCgkqIGluY2x1ZGUvbXNhY20uaCwgaW5jbHVkZS9tc2FjbWRydi5oLCByZWxheTMyL21zYWNtMzIuc3BlYywgaWYxNjMyL21zYWNtLnNwZWMsIGRsbHMvbXNhY20zMi8uY3ZzaWdub3JlLCBkbGxzL21zYWNtMzIvTWFrZWZpbGUuaW4sIGRsbHMvbXNhY20zMi9idWlsdGluLmMsIGRsbHMvbXNhY20zMi9kcml2ZXIuYywgZGxscy9tc2FjbTMyL2ZpbHRlci5jLCBkbGxzL21zYWNtMzIvZm9ybWF0LmMsIGRsbHMvbXNhY20zMi9pbnRlcm5hbC5jLCBkbGxzL21zYWNtMzIvbXNhY20zMl9tYWluLmMsIGRsbHMvbXNhY20zMi9zdHJlYW0uYywgZGxscy9tc2FjbS8uY3ZzaWdub3JlLCBkbGxzL21zYWNtL01ha2VmaWxlLmluLCBkbGxzL21zYWNtL21zYWNtX21haW4uYzoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJU3RhcnRlZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgTVNBQ00uRExMIGFuZCBNU0FDTTMyLkRMTC4KCgkqIHdpbjMyL2RldmljZS5jOiBQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCVJlbW92ZWQgdGhpbmdzIHRoYXQgd2VyZSBlYXJsaWVyIGFkZGVkIGJ5IG1pc3Rha2UuCgoJKiByZWxheTMyL3dpbm1tLnNwZWM6IFBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJVGhlIGltcGxlbWVudGF0aW9uIG9mIG1taW9Xcml0ZSBpcyBub3cgY2FsbGVkIGluc3RlYWQgb2YgdGhlIHN0dWIuCgoJKiBpbmNsdWRlL3NoZWxsLmgsIGRsbHMvc2hlbGwzMi9zaGVsbG9sZS5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglCdWdmaXhlcywgc2hlbGx2aWV3IHVzZXMgRFBBJ3Mgbm93LCBJU2hlbGxWaWV3X0dldEl0ZW1PYmplY3QgaW1wbGVtZW50ZWQuCgoJKiByZWxheTMyL3NoZWxsMzIuc3BlYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgc3R1YnM6IFNIR2V0RmlsZUluZm8zMlcsIFJlYWRDYWJpbmV0U3RhdGUsIFdyaXRlQ2FiaW5ldFN0YXRlLCBJc1VzZXJBZG1pbi4KCUltcGxlbWVudGVkOiBTSEdldFBhdGhGcm9tSURMaXN0MzJXLgoJQ2hhbmdlZCBQYXRoQ29tYmluZS4KCgkqIGluY2x1ZGUvc2hsb2JqLmg6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IHN0cnVjdHVyZXMgRFZBU1BFQ1QsIFRZTUVELCBJRExMaXN0LgoJU2hlbGwgc3BlY2lmaWMgY2xpcGJvYXJkIGZvcm1hdHMuCgoJKiByZWxheTMyL3dpbnNwb29sLnNwZWMsIG1pc2MvcHJpbnRkcnYuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YiBFbnVtUHJpbnRlcnNXLgoKCSogZGxscy9zaGVsbDMyL2RhdGFvYmplY3QuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSW1wbGVtZW50ZWQgZmlyc3QgZnVuY3Rpb25zLgoKCSogZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3BpZGwuaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IGNsYXNzIElETExpc3QgIkl0ZW0gSUQgTGlzdCBMaXN0IiAoaW50ZXJuYWwpLgoKCSogbWlzYy92ZXIuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTbWFsbCBjaGFuZ2VzICh1c2VzIEhJV09SRC9MT1dPUkQpLgoKCSogd2luZG93cy9kaWFsb2cuYywgcmVsYXkzMi91c2VyMzIuc3BlYzoKCVNhdCBPY3QgMTAgMTI6MDA6MDAgMTk5OCAgSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTdHViIENyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW1Bb3JXLgoKCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0PgoJRG9uJ3QgaW5zdGFsbCBvYmplY3QgZmlsZXMgd2hlbiAtLWRpc2FibGUtbGliIGlzIHNlbGVjdGVkLgoKCSogZGVidWdnZXIvaGFzaC5jLCBkZWJ1Z2dlci9tc2MuYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdD4KCURvbid0IHByaW50IG5hbWUgZm9yIDMyIGJpdCBsaWIgbXVsdGlwbGUgdGltZXMuCglDbGVhbiB1cCBwcmludGluZyBpbiBERUJVR19Qcm9jZXNzRGVmZXJyZWREZWJ1Zy4KCgkqIG1lbW9yeS9oZWFwLmMsIGRsbHMvY29tY3RsMzIvdGFiLmMsIGNvbnRyb2xzL2NvbWJvLmM6CglEYXZpZCBMdXllciA8bHV5ZXJAdWNzLnV3YS5lZHUuYXU+CglTbWFsbCBmaXhlcy4KCgkqIGZpbGVzL2RyaXZlLmM6IFBldHRlciBSZWluaG9sZHRzZW4gPHBlcmVAdGQub3JnLnVpdC5ubz4KCUJ1Z2ZpeDogQ2hhbmdlZCBHZXREcml2ZVR5cGUzMkEoTlVMTCkgdG8gdXNlIGN3ZCdzIHJvb3QuCgoJKiBvbGUvdHlwZWxpYi5jLCBvbGUvY29tcG9iai5jLCBvbGUvaWZzLmMsIG9sZS9tb25pa2VyLmMsIG9sZS9vbGUyLmMsIG9sZS9vbGUyZGlzcC5jLCBvbGUvb2xlMm5scy5jLCBvbGUvb2xlY2xpLmMsIG9sZS9vbGVzdnIuYywgb2xlL3N0b3JhZ2UuYywgbWlzYy9udGRsbC5jLCBtaXNjL3JlZ2lzdHJ5LmM6CglNYXR0aGV3IEJlY2tlciA8bWJlY2tlckBnbGFzc2NpdHkubmV0PgoJRG9jdW1lbnRhdGlvbiBjb3JyZWN0aW9ucy9zdGFuZGFyZGl6YXRpb25zLgoKCSogbXVsdGltZWRpYS9hdWRpby5jLCBtdWx0aW1lZGlhL2luaXQuYywgbXVsdGltZWRpYS9tY2lhbmltLmMsIG11bHRpbWVkaWEvbWNpY2RhLmMsIG11bHRpbWVkaWEvbWNpc3RyaW5nLmMsIG11bHRpbWVkaWEvbWlkaS5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmMsIGluY2x1ZGUvbW1zeXN0ZW0uaCwgaW5jbHVkZS9tdWx0aW1lZGlhLmg6CglFcmljIFBvdWVjaCAgPGVyaWMucG91ZWNoQGxlbWVsLmZyPgoJU3RhcnRlZCBjb2RpbmcgMzIgYml0IE1DSSBoYW5kbGluZy4KCUFkZGVkIE9wZW4vQ2xvc2UgdG8gbG93LWxldmVsIE1DSSBkcml2ZXJzIChhdWRpbywgbWlkaSwgYW5pbSwgY2RhKS4KCVdyb3RlIE1DSSBNSURJIHN1cHBvcnQuCgoJKiBncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCVlldCBhbm90aGVyIGltcHJvdmVtZW50IHRvIHRoZSBiZXppZXIgY29kZS4KCgkqIHdpbmRvd3MvbWVzc2FnZS5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJR2V0VGlja0NvdW50cygpIGhhcyBhIGdyYW51bGFyaXR5IGluIHdpbmRvd3Mgb2YgMjUgbXNlYydzLgoJR2lyb3RlbCdzIHNlcmlhbCBjb21tdW5pY2F0aW9uIGFwcGVhcnMgdG8gZGVwZW5kIG9uIGl0LCBzbyBJIGd1ZXNzCglpdCdzIGEgZmVhdHVyZS4uLgoKCSogbWlzYy9jb21tLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglVcGRhdGUgdGhlIG1vZGVtbiBzdGF0dXMgYml0IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIFJMU0QgbGluZSBpcwoJYWN0aXZlIGluIGV2ZXJ5IGNhbGwgdG8gR2V0Q29tbUVycm9yKCkuIFRoaXMgaXMgbm90IHRoZSBwcm9wZXIgcGxhY2UsCglidXQgc2luY2Ugd2luZSBkb2Vzbid0IGRvIGFueSBldmVudC1zdHVmZi4uLgoJRml4ZWQgc29tZSBUUkFDRSBjYWxsJ3MgZmFjZWQgd2l0aCBub24gemVybyB0ZXJtaW5hdGVkIHN0cmluZ3MuCglSZXN0b3JlIHRoZSB0ZXJtaW5hbCBzdGF0ZSBhdCBDbG9zZUNvbW10IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYXQKCU9wZW5Db21tKCksIHNvIHRoZSBtb2RlbSB3aWxsIGdvIG9mZi1ob29rLgoKCSogbG9hZGVyL21vZHVsZS5jOiBBbGV4YW5kZXIgTGFyc3NvbiAgPGFsbGFAbHlzYXRvci5saXUuc2U+CglHZXRNb2R1bGVGaWxlTmFtZTMyQSgpIHJldHVybnMgbG9uZyBmaWxlbmFtZSBpZiBhcHAgc2V0cyBvc3ZlcnNpb24gPj0KCTQuMC4gQWxzbyBtb3ZlZCB0aGUgbG9uZyBmaWxlbmFtZSBoYWNrZXJ5IHRvIEdldExvbmdQYXRoTmFtZTMyQSgpIHNvCglpdCBjYW4gYmUgdXNlZCBieSB3aW4zMiBwcm9ncmFtcy4KCgkqIGZpbGVzL2Rvc19mcy5jOiBBbGV4YW5kZXIgTGFyc3NvbiA8YWxsYUBseXNhdG9yLmxpdS5zZT4KCUdldExvbmdQYXRoTmFtZTMyQSgpIHJldHVybnMgZG9zIGZvcm1hdCBsb25nIGZpbGVuYW1lIGluc3RlYWQgb2YgdW5peAoJZm9ybWF0LgoKCSogZGxscy9jb21jdGwzMi9saXN0dmlldy5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJU21hbGwgZml4ZXMuCgoJKiByZWxheTMyL3NoZWxsMzIuc3BlYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgU0hGbHVzaENsaXBib2FyZC4KCgkqIHJlbGF5MzIvY29tY3RsMzIuc3BlYywgaW5jbHVkZS9jb21tY3RybC5oLCBkbGxzL2NvbWN0bDMyL2NvbWN0bDMydW5kb2MuYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCBzb21lIHVuZG9jdW1lbnRlZCBmdW5jdGlvbnMuCglDaGFuZ2VkIGFsZ29yaXRobSBpbiBEUEFfUXVpY2tTb3J0KCkuCglGaXhlZCBoZWFwIGNyZWF0aW9uL2Rlc3RydWN0aW9uIGFuZCBjb250cm9sIFt1bl1yZWdpc3RyYXRpb24gaW4KCUNvbUN0bDMyTGliTWFpbigpLgoKCSogZGxscy9jb21jdGwzMi9oZWFkZXIuYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUZpeGVkIGEgYnVnLgoKCSogaW5jbHVkZS90b29sdGlwcy5oLCBkbGxzL2NvbWN0bDMyL3Rvb2x0aXBzLmM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgdHJhY2tpbmcgc3VwcG9ydCBhbmQgZml4ZWQgbG9hZGluZyBvZiByZXNvdXJjZSBzdHJpbmdzLgoJQWRkZWQgdW5yZWdpc3RlciBjb2RlLgoKCSogaW5jbHVkZS9kZWJ1Zy5oLCBpbmNsdWRlL2RlYnVnZGVmcy5oLCBpbmNsdWRlL2lwYWRkcmVzcy5oLCBpbmNsdWRlL25hdGl2ZWZvbnQuaCwgZGxscy9jb21jdGwzMi9NYWtlZmlsZS5pbiwgZGxscy9jb21jdGwzMi9jb21tY3RybC5jLCBkbGxzL2NvbWN0bDMyL2lwYWRkcmVzcy5jLCBkbGxzL2NvbWN0bDMyL25hdGl2ZWZvbnQuYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBJUEFkZHJlc3MgYW5kIE5hdGl2ZUZvbnQgY29udHJvbHMuCgoJKiBpbmNsdWRlL2ltYWdlbGlzdC5oLCBkbGxzL2NvbWN0bDMyL2ltYWdlbGlzdC5jOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCVNvbWUgbWlub3IgaW1wcm92ZW1lbnRzLgoKCSogaW5jbHVkZS90b29sYmFyLmgsIGRsbHMvY29tY3RsMzIvdG9vbGJhci5jOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUltcHJvdmVkIGRyYXdpbmcgYW5kIHBsYWNlbWVudCBjb2RlLiBFeHBsb3JlciBzdHlsZSBjb21tb24gZGlhbG9ncyBhcmUKCWxvb2tpbmcgZ29vZCBub3cuCgoJKiBvYmplY3RzL2N1cnNvcmljb24uYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUZpeGVkIGJ1ZyBpbiBEcmF3SWNvbkV4MzIoKS4KCgkqIG1pc2MvbWFpbi5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJSW1wcm92ZWQgR2V0U3lzdGVtSW5mb3JtYXRpb24zMltBL1ddLgoKCSogd2luZG93cy9ub25jbGllbnQuYywgcmVsYXkzMi91c2VyMzIuc3BlYywgaW5jbHVkZS93aW5kb3dzLmgsIGlmMTYzMi91c2VyLnNwZWM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgRHJhd0NhcHRpb25bMTYvMzJdIGFuZCBEcmF3Q2FwdGlvblRlbXBbMTYvMzJBLzMyV10uCglGaXhlZCBoYW5kbGluZyBvZiBXU19FWF9UT09MV0lORE9XLgoKCSogZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglVcGRhdGVkLgoKCSogd2luZG93cy9ldmVudC5jLCB3aW5kb3dzL2tleWJvYXJkLmMsIGluY2x1ZGUva2V5Ym9hcmQuaDoKCURhdmlkIEZhdXJlIDxmYXVyZUBrZGUub3JnPgoJQWRkZWQgS0VZQk9BUkRfVXBkYXRlU3RhdGUsIHRvIHJlYWQgdGhlIG1vZGlmaWVycyB3aGVuIHRoZSB3aW5lIGFwcCBpcwoJYWN0aXZhdGVkLiBVc2VzIHRoZSBuZXcgS0VZQk9BUkRfVXBkYXRlT25lU3RhdGUuCglGaXhlZCBhIHByb2JsZW0gd2l0aCBtZW51IGFjY2VsZXJhdG9ycyAoQWx0LWxldHRlciBnZW5lcmF0ZXMgYSBkb3duCglhcnJvdyBldmVudCB3aGljaCBiZWVwcyBpZiBub3QgZmlsdGVyZWQpLgoJU3BlZWRlZCB1cCBUb0FzY2lpMTYvMzIoKSBhIGxpdHRsZSBiaXQuCgoJKiBkZWJ1Z2dlci9icmVhay5jLCBkZWJ1Z2dlci9kYl9kaXNhc20uYywgZGVidWdnZXIvZGJnLnksIGRlYnVnZ2VyL2V4cHIuYywgZGVidWdnZXIvc291cmNlLmMsIGRlYnVnZ2VyL3R5cGVzLmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCU1hZGUgV2luZSdzIGRlYnVnZ2VyIHdvcmsgc2F0aXNmYWN0b3JpbHkgd2l0aCBET1MgYXBwcy4KCVBlcmhhcHMgZGVyZWZlcmVuY2luZyB3b3JrIGJldHRlciBmb3IgV2luMTYgYXBwcyB0b28gbm93LCBidXQKCWl0IGFwcGVhcnMgdGhlIGRlYnVnZ2VyIGNvcmUgd2Fzbid0IGRlc2lnbmVkIGZvciBzZWdtZW50YXRpb24uCgoJKiBtc2Rvcy9kcG1pLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJU2ltdWxhdGVzIERQTUkgbWVtb3J5IG1hcCBieSBjb252ZXJ0aW5nIGxvd2VyLU1CIHNlZ21lbnQgYmFzZQoJYWRkcmVzc2VzIGFzIG5lY2Vzc2FyeS4gSW1wbGVtZW50ZWQgYWxsb2NhdGluZy9mcmVlaW5nIERPUyBtZW1vcnkKCWJsb2Nrcy4gQWRkZWQgWE1TIGhvb2suIChEUE1JIHJlbWFpbnMgZGlzYWJsZWQgYnkgZGVmYXVsdCB1bnRpbAoJc29tZW9uZSBpbXBsZW1lbnRzIHRoZSByYXcgbW9kZSBzd2l0Y2ggZW50cnkgcG9pbnRzIHBrdW56aXAgbmVlZHMuKQoKCSogbXNkb3MvaW50MjEuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglJIHRoaW5rIGl0J3MgdGltZSB0byByZXRoaW5rIHRoZSBIRklMRTE2X1RPX0hGSUxFMzIgc3RyYXRlZ3ksCgljYW4ndCBrZWVwIHdvcmtpbmcgYXJvdW5kIGZsYXdzIGluIGl0IGxpa2UgdGhpcyAobm93IHN0ZGlvCgl3YXMgZ2V0dGluZyBjbG9zZWQgd2hlbiBwcm9ncmFtcyBjbG9zZSBoYW5kbGVzID49NSkKCgkqIG1zZG9zL3htcy5jLCBtc2Rvcy9NYWtlZmlsZS5pbiwgbXNkb3MvaW50MmYuYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJSW1wbGVtZW50ZWQgYmFzaWMgWE1TIGZ1bmN0aW9ucy4gd2NiLmV4ZSAoV2luMTYgZGlzYXNzZW1ibGVyKSBub3cKCXNlZW1zIHRvIHdvcmsgZmluZSB1bmRlciBXaW5lLgoKCSogbG9hZGVyL2Rvcy9kb3N2bS5jLCBsb2FkZXIvZG9zL21vZHVsZS5jLCBpbmNsdWRlL2Rvc2V4ZS5oLCBpbmNsdWRlL21pc2NlbXUuaDoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJTW92ZWQgc29tZSBzeXN0ZW0gZGVwZW5kZW5jaWVzIHRvIGxvYWRlci9kb3MvZG9zdm0uYy4gSW1wbGVtZW50ZWQKCWVudmlyb25tZW50YWwgYXJndlswXSBwYXNzaW5nIHRvIERPUyBhcHBzLiBBZGRlZCBYTVMgaG9va3MuCgoJKiBkZWJ1Z2dlci9zdGFicy5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUFkZGVkIGEgbWVtc2V0KCkgdG8gcHJldmVudCBhIGRlYnVnZ2VyIHNlZ2ZhdWx0IGNhdXNlZCBieQoJdW5pbml0aWFsaXplZCBwb2ludGVycyBpbiB0aGUgc3RhYnMgbG9va3VwIHRhYmxlcy4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQSBmZXcgZml4ZXMuCgoJKiByZWxheTMyL250ZGxsLnNwZWM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgUnRsQWxsb2NhdGVBbmRJbml0aWFsaXplU2lkIGVudHJ5LgoKCSogbG9hZGVyL01ha2VmaWxlLmluLCBsb2FkZXIvZWxmLmMsIGxvYWRlci9tb2R1bGUuYywgbG9hZGVyL3BlX2ltYWdlLmMsIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvbW9kdWxlLmgsIGluY2x1ZGUvcGVfaW1hZ2UuaCwgaW5jbHVkZS9wZWV4ZS5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJR2VuZXJpYyBkeW5hbWljIGRsbCBsb2FkZXIgdXNpbmcgZGwqKCkgQVBJLgoJSW5jbHVkZXM6IHN0ZGNhbGwtPmNkZWNsIG1hcHBpbmcgYWJpbGl0eSwgc25vb3BpbmcuCgkoVGVzdGVkIG9ubHkgd2l0aCBnbGlkZTJ4LmRsbCAtPiBsaWJnbGlkZTJ4LnNvKQoKCSogbXVsdGltZWRpYS9pbml0LmMsIG11bHRpbWVkaWEvdGltZS5jLCBpbmNsdWRlL21tc3lzdGVtLmgsIGluY2x1ZGUvbXVsdGltZWRpYS5oOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCB3aW4zMiBlbmhhbmNlZCBmdW5jdGlvbmFsaXR5IHRvIHRpbWVyIGNhbGxiYWNrcy4KCgkqIHdpbjMyL2NvbnNvbGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBiYWQgaGFja3Mgc28gV3JpdGVDb25zb2xlT3V0cHV0IHdvcmtzIG9uIHZ0MTAwIGFuZCBQZWVrTWVzc2FnZQoJZG9lcyBhdCBsZWFzdCBhIGJpdCBvZiBrZXlib2FyZCBpbnB1dC4KCgkqIHJlbGF5MzIvc25vb3AuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTaG91bGQgZGlzcGxheSBhZ2Fpbi4KClNhdCBPY3QgMTAgMTU6NTI6NDYgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbmRvd3MvZGlhbG9nLmM6IERhdmUgUGlja2xlcyA8ZGF2ZXBAbnVnYXRlLmRlbW9uLmNvLnVrPgoJSW1wbGVtZW50ZWQgRFNfQ0VOVEVSIGRpYWxvZyBzdHlsZS4KCgkqIG1pc2MvbWFpbi5jOiBQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaD4KCUFkZGVkIGZ1bmN0aW9uIHRvIGJ1aWxkIHRoZSBXaW5kb3dzIG51bWVyaWMgbGFuZ3VhZ2UgSUQgZnJvbSBsYW5ndWFnZSwKCWNvZGUsIGNoYXJzZXQgYW5kIGRpYWxlY3Qgc3RyaW5ncywgbGlrZSB1c2VkIGJ5IFVuaXggTEFORyB2YXJpYWJsZS4KCgkqIG9sZS9vbGUybmxzLmMsIG9sZS9ubHMvUkVBRE1FLCBpbmNsdWRlL3dpbm5scy5oLCBvbGUvbmxzLyoubmxzOgoJUGFibG8gU2FyYXR4YWdhIDxzcnR4Z0BjaGFuYWUuYWxwaGFuZXQuY2g+CglNb3JlIE5MUyBkYXRhLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogUGV0ZXIgU2NobGFpbGUgPHVkYnpAcnoudW5pLWthcmxzcnVoZS5kZT4KCUZpeGVkIGEgbG90IG9mIGJ1Z3MgaW4gZGRyYXcuYyB0byBtYWtlIHhsaWIgc3VwcG9ydCB3b3JrLgoJUnVucyBzdWNjZXNzZnVsbHkgVFIyRGVtbyBhbmQgSmF6eiBKYWNrcmFiYml0IElJIERlbW8hCgoJKiBvYmplY3RzL2dkaW9iai5jOiBDbGlmZiBXcmlnaHQgPGNsaWZmQHNuaXBlNDQ0Lm9yZz4KCUFkZGVkIERDIG9iamVjdCB0eXBlIHRvIHRoZSBsaXN0IG9mIHZhbGlkIG9iamVjdHMgdGhhdCBjYW4gYmUgZGVsZXRlZAoJYnkgRGVsZXRlT2JqZWN0MzIuCgpTdW4gT2N0ICA0IDE4OjIwOjI5IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBDaGFuZ2VMb2c6CglTdGFydGluZyBuZXcgZm9ybWF0IGNoYW5nZWxvZyAob2xkZXIgY2hhbmdlcyBtb3ZlZCB0bwoJZG9jdW1lbnRhdGlvbi9DaGFuZ2VMb2cuT0xEKS4K