VGhlIERlY2xhcmF0aW9uIG9mIEluZGVwZW5kZW5jZSBvZiB0aGUgVGhpcnRlZW4gQ29sb25pZXMKSW4gQ09OR1JFU1MsIEp1bHkgNCwgMTc3NiAKClRoZSB1bmFuaW1vdXMgRGVjbGFyYXRpb24gb2YgdGhlIHRoaXJ0ZWVuIHVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgCgpXaGVuIGluIHRoZSBDb3Vyc2Ugb2YgaHVtYW4gZXZlbnRzLCBpdCBiZWNvbWVzIG5lY2Vzc2FyeSBmb3Igb25lIHBlb3BsZSB0byBkaXNzb2x2ZSB0aGUgcG9saXRpY2FsIGJhbmRzIHdoaWNoIGhhdmUgY29ubmVjdGVkIHRoZW0gd2l0aCBhbm90aGVyLCBhbmQgdG8gYXNzdW1lIGFtb25nIHRoZSBwb3dlcnMgb2YgdGhlIGVhcnRoLCB0aGUgc2VwYXJhdGUgYW5kIGVxdWFsIHN0YXRpb24gdG8gd2hpY2ggdGhlIExhd3Mgb2YgTmF0dXJlIGFuZCBvZiBOYXR1cmUncyBHb2QgZW50aXRsZSB0aGVtLCBhIGRlY2VudCByZXNwZWN0IHRvIHRoZSBvcGluaW9ucyBvZiBtYW5raW5kIHJlcXVpcmVzIHRoYXQgdGhleSBzaG91bGQgZGVjbGFyZSB0aGUgY2F1c2VzIHdoaWNoIGltcGVsIHRoZW0gdG8gdGhlIHNlcGFyYXRpb24uIAoKV2UgaG9sZCB0aGVzZSB0cnV0aHMgdG8gYmUgc2VsZi1ldmlkZW50LCB0aGF0IGFsbCBtZW4gYXJlIGNyZWF0ZWQgZXF1YWwsIHRoYXQgdGhleSBhcmUgZW5kb3dlZCBieSB0aGVpciBDcmVhdG9yIHdpdGggY2VydGFpbiB1bmFsaWVuYWJsZSBSaWdodHMsIHRoYXQgYW1vbmcgdGhlc2UgYXJlIExpZmUsIExpYmVydHkgYW5kIHRoZSBwdXJzdWl0IG9mIEhhcHBpbmVzcy4gLS1UaGF0IHRvIHNlY3VyZSB0aGVzZSByaWdodHMsIEdvdmVybm1lbnRzIGFyZSBpbnN0aXR1dGVkIGFtb25nIE1lbiwgZGVyaXZpbmcgdGhlaXIganVzdCBwb3dlcnMgZnJvbSB0aGUgY29uc2VudCBvZiB0aGUgZ292ZXJuZWQsIC0tVGhhdCB3aGVuZXZlciBhbnkgRm9ybSBvZiBHb3Zlcm5tZW50IGJlY29tZXMgZGVzdHJ1Y3RpdmUgb2YgdGhlc2UgZW5kcywgaXQgaXMgdGhlIFJpZ2h0IG9mIHRoZSBQZW9wbGUgdG8gYWx0ZXIgb3IgdG8gYWJvbGlzaCBpdCwgYW5kIHRvIGluc3RpdHV0ZSBuZXcgR292ZXJubWVudCwgbGF5aW5nIGl0cyBmb3VuZGF0aW9uIG9uIHN1Y2ggcHJpbmNpcGxlcyBhbmQgb3JnYW5pemluZyBpdHMgcG93ZXJzIGluIHN1Y2ggZm9ybSwgYXMgdG8gdGhlbSBzaGFsbCBzZWVtIG1vc3QgbGlrZWx5IHRvIGVmZmVjdCB0aGVpciBTYWZldHkgYW5kIEhhcHBpbmVzcy4gUHJ1ZGVuY2UsIGluZGVlZCwgd2lsbCBkaWN0YXRlIHRoYXQgR292ZXJubWVudHMgbG9uZyBlc3RhYmxpc2hlZCBzaG91bGQgbm90IGJlIGNoYW5nZWQgZm9yIGxpZ2h0IGFuZCB0cmFuc2llbnQgY2F1c2VzOyBhbmQgYWNjb3JkaW5nbHkgYWxsIGV4cGVyaWVuY2UgaGF0aCBzaGV3biwgdGhhdCBtYW5raW5kIGFyZSBtb3JlIGRpc3Bvc2VkIHRvIHN1ZmZlciwgd2hpbGUgZXZpbHMgYXJlIHN1ZmZlcmFibGUsIHRoYW4gdG8gcmlnaHQgdGhlbXNlbHZlcyBieSBhYm9saXNoaW5nIHRoZSBmb3JtcyB0byB3aGljaCB0aGV5IGFyZSBhY2N1c3RvbWVkLiBCdXQgd2hlbiBhIGxvbmcgdHJhaW4gb2YgYWJ1c2VzIGFuZCB1c3VycGF0aW9ucywgcHVyc3VpbmcgaW52YXJpYWJseSB0aGUgc2FtZSBPYmplY3QgZXZpbmNlcyBhIGRlc2lnbiB0byByZWR1Y2UgdGhlbSB1bmRlciBhYnNvbHV0ZSBEZXNwb3Rpc20sIGl0IGlzIHRoZWlyIHJpZ2h0LCBpdCBpcyB0aGVpciBkdXR5LCB0byB0aHJvdyBvZmYgc3VjaCBHb3Zlcm5tZW50LCBhbmQgdG8gcHJvdmlkZSBuZXcgR3VhcmRzIGZvciB0aGVpciBmdXR1cmUgc2VjdXJpdHkuIJdTdWNoIGhhcyBiZWVuIHRoZSBwYXRpZW50IHN1ZmZlcmFuY2Ugb2YgdGhlc2UgQ29sb25pZXM7IGFuZCBzdWNoIGlzIG5vdyB0aGUgbmVjZXNzaXR5IHdoaWNoIGNvbnN0cmFpbnMgdGhlbSB0byBhbHRlciB0aGVpciBmb3JtZXIgU3lzdGVtcyBvZiBHb3Zlcm5tZW50LiBUaGUgaGlzdG9yeSBvZiB0aGUgcHJlc2VudCBLaW5nIG9mIEdyZWF0IEJyaXRhaW4gW0dlb3JnZSBJSUldIGlzIGEgaGlzdG9yeSBvZiByZXBlYXRlZCBpbmp1cmllcyBhbmQgdXN1cnBhdGlvbnMsIGFsbCBoYXZpbmcgaW4gZGlyZWN0IG9iamVjdCB0aGUgZXN0YWJsaXNobWVudCBvZiBhbiBhYnNvbHV0ZSBUeXJhbm55IG92ZXIgdGhlc2UgU3RhdGVzLiBUbyBwcm92ZSB0aGlzLCBsZXQgRmFjdHMgYmUgc3VibWl0dGVkIHRvIGEgY2FuZGlkIHdvcmxkLiAKCkhlIGhhcyByZWZ1c2VkIGhpcyBBc3NlbnQgdG8gTGF3cywgdGhlIG1vc3Qgd2hvbGVzb21lIGFuZCBuZWNlc3NhcnkgZm9yIHRoZSBwdWJsaWMgZ29vZC4gCgpIZSBoYXMgZm9yYmlkZGVuIGhpcyBHb3Zlcm5vcnMgdG8gcGFzcyBMYXdzIG9mIGltbWVkaWF0ZSBhbmQgcHJlc3NpbmcgaW1wb3J0YW5jZSwgdW5sZXNzIHN1c3BlbmRlZCBpbiB0aGVpciBvcGVyYXRpb24gdGlsbCBoaXMgQXNzZW50IHNob3VsZCBiZSBvYnRhaW5lZDsgYW5kIHdoZW4gc28gc3VzcGVuZGVkLCBoZSBoYXMgdXR0ZXJseSBuZWdsZWN0ZWQgdG8gYXR0ZW5kIHRvIHRoZW0uIAoKSGUgaGFzIHJlZnVzZWQgdG8gcGFzcyBvdGhlciBMYXdzIGZvciB0aGUgYWNjb21tb2RhdGlvbiBvZiBsYXJnZSBkaXN0cmljdHMgb2YgcGVvcGxlLCB1bmxlc3MgdGhvc2UgcGVvcGxlIHdvdWxkIHJlbGlucXVpc2ggdGhlIHJpZ2h0IG9mIFJlcHJlc2VudGF0aW9uIGluIHRoZSBMZWdpc2xhdHVyZSwgYSByaWdodCBpbmVzdGltYWJsZSB0byB0aGVtIGFuZCBmb3JtaWRhYmxlIHRvIHR5cmFudHMgb25seS4gCgpIZSBoYXMgY2FsbGVkIHRvZ2V0aGVyIGxlZ2lzbGF0aXZlIGJvZGllcyBhdCBwbGFjZXMgdW51c3VhbCwgdW5jb21mb3J0YWJsZSwgYW5kIGRpc3RhbnQgZnJvbSB0aGUgZGVwb3NpdG9yeSBvZiB0aGVpciBwdWJsaWMgUmVjb3JkcywgZm9yIHRoZSBzb2xlIHB1cnBvc2Ugb2YgZmF0aWd1aW5nIHRoZW0gaW50byBjb21wbGlhbmNlIHdpdGggaGlzIG1lYXN1cmVzLiAKCkhlIGhhcyBkaXNzb2x2ZWQgUmVwcmVzZW50YXRpdmUgSG91c2VzIHJlcGVhdGVkbHksIGZvciBvcHBvc2luZyB3aXRoIG1hbmx5IGZpcm1uZXNzIGhpcyBpbnZhc2lvbnMgb24gdGhlIHJpZ2h0cyBvZiB0aGUgcGVvcGxlLiAKCkhlIGhhcyByZWZ1c2VkIGZvciBhIGxvbmcgdGltZSwgYWZ0ZXIgc3VjaCBkaXNzb2x1dGlvbnMsIHRvIGNhdXNlIG90aGVycyB0byBiZSBlbGVjdGVkOyB3aGVyZWJ5IHRoZSBMZWdpc2xhdGl2ZSBwb3dlcnMsIGluY2FwYWJsZSBvZiBBbm5paGlsYXRpb24sIGhhdmUgcmV0dXJuZWQgdG8gdGhlIFBlb3BsZSBhdCBsYXJnZSBmb3IgdGhlaXIgZXhlcmNpc2U7IHRoZSBTdGF0ZSByZW1haW5pbmcgaW4gdGhlIG1lYW4gdGltZSBleHBvc2VkIHRvIGFsbCB0aGUgZGFuZ2VycyBvZiBpbnZhc2lvbiBmcm9tIHdpdGhvdXQsIGFuZCBjb252dWxzaW9ucyB3aXRoaW4uIAoKSGUgaGFzIGVuZGVhdm91cmVkIHRvIHByZXZlbnQgdGhlIHBvcHVsYXRpb24gb2YgdGhlc2UgU3RhdGVzOyBmb3IgdGhhdCBwdXJwb3NlIG9ic3RydWN0aW5nIHRoZSBMYXdzIGZvciBOYXR1cmFsaXphdGlvbiBvZiBGb3JlaWduZXJzOyByZWZ1c2luZyB0byBwYXNzIG90aGVycyB0byBlbmNvdXJhZ2UgdGhlaXIgbWlncmF0aW9ucyBoaXRoZXIsIGFuZCByYWlzaW5nIHRoZSBjb25kaXRpb25zIG9mIG5ldyBBcHByb3ByaWF0aW9ucyBvZiBMYW5kcy4gCgpIZSBoYXMgb2JzdHJ1Y3RlZCB0aGUgQWRtaW5pc3RyYXRpb24gb2YgSnVzdGljZSwgYnkgcmVmdXNpbmcgaGlzIEFzc2VudCB0byBMYXdzIGZvciBlc3RhYmxpc2hpbmcgSnVkaWNpYXJ5IHBvd2Vycy4gCgpIZSBoYXMgbWFkZSBKdWRnZXMgZGVwZW5kZW50IG9uIGhpcyBXaWxsIGFsb25lLCBmb3IgdGhlIHRlbnVyZSBvZiB0aGVpciBvZmZpY2VzLCBhbmQgdGhlIGFtb3VudCBhbmQgcGF5bWVudCBvZiB0aGVpciBzYWxhcmllcy4gCgpIZSBoYXMgZXJlY3RlZCBhIG11bHRpdHVkZSBvZiBOZXcgT2ZmaWNlcywgYW5kIHNlbnQgaGl0aGVyIHN3YXJtcyBvZiBPZmZpY2VycyB0byBoYXJhc3Mgb3VyIHBlb3BsZSwgYW5kIGVhdCBvdXQgdGhlaXIgc3Vic3RhbmNlLiAKCkhlIGhhcyBrZXB0IGFtb25nIHVzLCBpbiB0aW1lcyBvZiBwZWFjZSwgU3RhbmRpbmcgQXJtaWVzIHdpdGhvdXQgdGhlIGNvbnNlbnQgb2Ygb3VyIGxlZ2lzbGF0dXJlcy4gCgpIZSBoYXMgYWZmZWN0ZWQgdG8gcmVuZGVyIHRoZSBNaWxpdGFyeSBpbmRlcGVuZGVudCBvZiBhbmQgc3VwZXJpb3IgdG8gdGhlIENpdmlsIHBvd2VyLiAKCkhlIGhhcyBjb21iaW5lZCB3aXRoIG90aGVycyB0byBzdWJqZWN0IHVzIHRvIGEganVyaXNkaWN0aW9uIGZvcmVpZ24gdG8gb3VyIGNvbnN0aXR1dGlvbiBhbmQgdW5hY2tub3dsZWRnZWQgYnkgb3VyIGxhd3M7IGdpdmluZyBoaXMgQXNzZW50IHRvIHRoZWlyIEFjdHMgb2YgcHJldGVuZGVkIExlZ2lzbGF0aW9uOiAKCkZvciBRdWFydGVyaW5nIGxhcmdlIGJvZGllcyBvZiBhcm1lZCB0cm9vcHMgYW1vbmcgdXM6IAoKRm9yIHByb3RlY3RpbmcgdGhlbSwgYnkgYSBtb2NrIFRyaWFsLCBmcm9tIHB1bmlzaG1lbnQgZm9yIGFueSBNdXJkZXJzIHdoaWNoIHRoZXkgc2hvdWxkIGNvbW1pdCBvbiB0aGUgSW5oYWJpdGFudHMgb2YgdGhlc2UgU3RhdGVzOiAKCkZvciBjdXR0aW5nIG9mZiBvdXIgVHJhZGUgd2l0aCBhbGwgcGFydHMgb2YgdGhlIHdvcmxkOiAKCkZvciBpbXBvc2luZyBUYXhlcyBvbiB1cyB3aXRob3V0IG91ciBDb25zZW50OiAKCkZvciBkZXByaXZpbmcgdXMsIGluIG1hbnkgY2FzZXMsIG9mIHRoZSBiZW5lZml0cyBvZiBUcmlhbCBieSBKdXJ5OiAKCkZvciB0cmFuc3BvcnRpbmcgdXMgYmV5b25kIFNlYXMgdG8gYmUgdHJpZWQgZm9yIHByZXRlbmRlZCBvZmZlbmNlczogCgpGb3IgYWJvbGlzaGluZyB0aGUgZnJlZSBTeXN0ZW0gb2YgRW5nbGlzaCBMYXdzIGluIGEgbmVpZ2hib3VyaW5nIFByb3ZpbmNlLCBlc3RhYmxpc2hpbmcgdGhlcmVpbiBhbiBBcmJpdHJhcnkgZ292ZXJubWVudCwgYW5kIGVubGFyZ2luZyBpdHMgQm91bmRhcmllcyBzbyBhcyB0byByZW5kZXIgaXQgYXQgb25jZSBhbiBleGFtcGxlIGFuZCBmaXQgaW5zdHJ1bWVudCBmb3IgaW50cm9kdWNpbmcgdGhlIHNhbWUgYWJzb2x1dGUgcnVsZSBpbnRvIHRoZXNlIENvbG9uaWVzOiAKCkZvciB0YWtpbmcgYXdheSBvdXIgQ2hhcnRlcnMsIGFib2xpc2hpbmcgb3VyIG1vc3QgdmFsdWFibGUgTGF3cywgYW5kIGFsdGVyaW5nIGZ1bmRhbWVudGFsbHkgdGhlIEZvcm1zIG9mIG91ciBHb3Zlcm5tZW50czogCgpGb3Igc3VzcGVuZGluZyBvdXIgb3duIExlZ2lzbGF0dXJlcywgYW5kIGRlY2xhcmluZyB0aGVtc2VsdmVzIGludmVzdGVkIHdpdGggcG93ZXIgdG8gbGVnaXNsYXRlIGZvciB1cyBpbiBhbGwgY2FzZXMgd2hhdHNvZXZlci4gCgpIZSBoYXMgYWJkaWNhdGVkIEdvdmVybm1lbnQgaGVyZSwgYnkgZGVjbGFyaW5nIHVzIG91dCBvZiBoaXMgUHJvdGVjdGlvbiBhbmQgd2FnaW5nIFdhciBhZ2FpbnN0IHVzLiAKCkhlIGhhcyBwbHVuZGVyZWQgb3VyIHNlYXMsIHJhdmFnZWQgb3VyIENvYXN0cywgYnVybnQgb3VyIHRvd25zLCBhbmQgZGVzdHJveWVkIHRoZSBsaXZlcyBvZiBvdXIgcGVvcGxlLiAKCkhlIGlzIGF0IHRoaXMgdGltZSB0cmFuc3BvcnRpbmcgbGFyZ2UgQXJtaWVzIG9mIGZvcmVpZ24gTWVyY2VuYXJpZXMgdG8gY29tcGxlYXQgdGhlIHdvcmtzIG9mIGRlYXRoLCBkZXNvbGF0aW9uIGFuZCB0eXJhbm55LCBhbHJlYWR5IGJlZ3VuIHdpdGggY2lyY3Vtc3RhbmNlcyBvZiBDcnVlbHR5IGFuZCBwZXJmaWR5IHNjYXJjZWx5IHBhcmFsbGVsZWQgaW4gdGhlIG1vc3QgYmFyYmFyb3VzIGFnZXMsIGFuZCB0b3RhbGx5IHVud29ydGh5IHRoZSBIZWFkIG9mIGEgY2l2aWxpemVkIG5hdGlvbi4gCgpIZSBoYXMgY29uc3RyYWluZWQgb3VyIGZlbGxvdyBDaXRpemVucyB0YWtlbiBDYXB0aXZlIG9uIHRoZSBoaWdoIFNlYXMgdG8gYmVhciBBcm1zIGFnYWluc3QgdGhlaXIgQ291bnRyeSwgdG8gYmVjb21lIHRoZSBleGVjdXRpb25lcnMgb2YgdGhlaXIgZnJpZW5kcyBhbmQgQnJldGhyZW4sIG9yIHRvIGZhbGwgdGhlbXNlbHZlcyBieSB0aGVpciBIYW5kcy4gCgpIZSBoYXMgZXhjaXRlZCBkb21lc3RpYyBpbnN1cnJlY3Rpb25zIGFtb25nc3QgdXMsIGFuZCBoYXMgZW5kZWF2b3VyZWQgdG8gYnJpbmcgb24gdGhlIGluaGFiaXRhbnRzIG9mIG91ciBmcm9udGllcnMsIHRoZSBtZXJjaWxlc3MgSW5kaWFuIFNhdmFnZXMsIHdob3NlIGtub3duIHJ1bGUgb2Ygd2FyZmFyZSwgaXMgYW4gdW5kaXN0aW5ndWlzaGVkIGRlc3RydWN0aW9uIG9mIGFsbCBhZ2VzLCBzZXhlcyBhbmQgY29uZGl0aW9ucy4gCgpJbiBldmVyeSBzdGFnZSBvZiB0aGVzZSBPcHByZXNzaW9ucyBXZSBoYXZlIFBldGl0aW9uZWQgZm9yIFJlZHJlc3MgaW4gdGhlIG1vc3QgaHVtYmxlIHRlcm1zOiBPdXIgcmVwZWF0ZWQgUGV0aXRpb25zIGhhdmUgYmVlbiBhbnN3ZXJlZCBvbmx5IGJ5IHJlcGVhdGVkIGluanVyeS4gQSBQcmluY2Ugd2hvc2UgY2hhcmFjdGVyIGlzIHRodXMgbWFya2VkIGJ5IGV2ZXJ5IGFjdCB3aGljaCBtYXkgZGVmaW5lIGEgVHlyYW50LCBpcyB1bmZpdCB0byBiZSB0aGUgcnVsZXIgb2YgYSBmcmVlIHBlb3BsZS4gCgpOb3IgaGF2ZSBXZSBiZWVuIHdhbnRpbmcgaW4gYXR0ZW50aW9ucyB0byBvdXIgQnJpdGlzaCBicmV0aHJlbi4gV2UgaGF2ZSB3YXJuZWQgdGhlbSBmcm9tIHRpbWUgdG8gdGltZSBvZiBhdHRlbXB0cyBieSB0aGVpciBsZWdpc2xhdHVyZSB0byBleHRlbmQgYW4gdW53YXJyYW50YWJsZSBqdXJpc2RpY3Rpb24gb3ZlciB1cy4gV2UgaGF2ZSByZW1pbmRlZCB0aGVtIG9mIHRoZSBjaXJjdW1zdGFuY2VzIG9mIG91ciBlbWlncmF0aW9uIGFuZCBzZXR0bGVtZW50IGhlcmUuIFdlIGhhdmUgYXBwZWFsZWQgdG8gdGhlaXIgbmF0aXZlIGp1c3RpY2UgYW5kIG1hZ25hbmltaXR5LCBhbmQgd2UgaGF2ZSBjb25qdXJlZCB0aGVtIGJ5IHRoZSB0aWVzIG9mIG91ciBjb21tb24ga2luZHJlZCB0byBkaXNhdm93IHRoZXNlIHVzdXJwYXRpb25zLCB3aGljaCwgd291bGQgaW5ldml0YWJseSBpbnRlcnJ1cHQgb3VyIGNvbm5lY3Rpb25zIGFuZCBjb3JyZXNwb25kZW5jZS4gVGhleSB0b28gaGF2ZSBiZWVuIGRlYWYgdG8gdGhlIHZvaWNlIG9mIGp1c3RpY2UgYW5kIG9mIGNvbnNhbmd1aW5pdHkuIFdlIG11c3QsIHRoZXJlZm9yZSwgYWNxdWllc2NlIGluIHRoZSBuZWNlc3NpdHksIHdoaWNoIGRlbm91bmNlcyBvdXIgU2VwYXJhdGlvbiwgYW5kIGhvbGQgdGhlbSwgYXMgd2UgaG9sZCB0aGUgcmVzdCBvZiBtYW5raW5kLCBFbmVtaWVzIGluIFdhciwgaW4gUGVhY2UgRnJpZW5kcy4gCgpXZSwgdGhlcmVmb3JlLCB0aGUgUmVwcmVzZW50YXRpdmVzIG9mIHRoZSB1bml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EsIGluIEdlbmVyYWwgQ29uZ3Jlc3MsIEFzc2VtYmxlZCwgYXBwZWFsaW5nIHRvIHRoZSBTdXByZW1lIEp1ZGdlIG9mIHRoZSB3b3JsZCBmb3IgdGhlIHJlY3RpdHVkZSBvZiBvdXIgaW50ZW50aW9ucywgZG8sIGluIHRoZSBOYW1lLCBhbmQgYnkgdGhlIEF1dGhvcml0eSBvZiB0aGUgZ29vZCBQZW9wbGUgb2YgdGhlc2UgQ29sb25pZXMsIHNvbGVtbmx5IHB1Ymxpc2ggYW5kIGRlY2xhcmUsIFRoYXQgdGhlc2UgVW5pdGVkIENvbG9uaWVzIGFyZSwgYW5kIG9mIFJpZ2h0IG91Z2h0IHRvIGJlIEZyZWUgYW5kIEluZGVwZW5kZW50IFN0YXRlczsgdGhhdCB0aGV5IGFyZSBBYnNvbHZlZCBmcm9tIGFsbCBBbGxlZ2lhbmNlIHRvIHRoZSBCcml0aXNoIENyb3duLCBhbmQgdGhhdCBhbGwgcG9saXRpY2FsIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVtIGFuZCB0aGUgU3RhdGUgb2YgR3JlYXQgQnJpdGFpbiwgaXMgYW5kIG91Z2h0IHRvIGJlIHRvdGFsbHkgZGlzc29sdmVkOyBhbmQgdGhhdCBhcyBGcmVlIGFuZCBJbmRlcGVuZGVudCBTdGF0ZXMsIHRoZXkgaGF2ZSBmdWxsIFBvd2VyIHRvIGxldnkgV2FyLCBjb25jbHVkZSBQZWFjZSwgY29udHJhY3QgQWxsaWFuY2VzLCBlc3RhYmxpc2ggQ29tbWVyY2UsIGFuZCB0byBkbyBhbGwgb3RoZXIgQWN0cyBhbmQgVGhpbmdzIHdoaWNoIEluZGVwZW5kZW50IFN0YXRlcyBtYXkgb2YgcmlnaHQgZG8uIEFuZCBmb3IgdGhlIHN1cHBvcnQgb2YgdGhpcyBEZWNsYXJhdGlvbiwgd2l0aCBhIGZpcm0gcmVsaWFuY2Ugb24gdGhlIHByb3RlY3Rpb24gb2YgZGl2aW5lIFByb3ZpZGVuY2UsIHdlIG11dHVhbGx5IHBsZWRnZSB0byBlYWNoIG90aGVyIG91ciBMaXZlcywgb3VyIEZvcnR1bmVzIGFuZCBvdXIgc2FjcmVkIEhvbm9yLiAKClRoZSBzaWduZXJzIG9mIHRoZSBEZWNsYXJhdGlvbiByZXByZXNlbnRlZCB0aGUgbmV3IHN0YXRlcyBhcyBmb2xsb3dzOiAKCk5ldyBIYW1wc2hpcmUKSm9zaWFoIEJhcnRsZXR0LCBXaWxsaWFtIFdoaXBwbGUsIE1hdHRoZXcgVGhvcm50b24gCgpNYXNzYWNodXNldHRzCkpvaG4gSGFuY29jaywgU2FtdWFsIEFkYW1zLCBKb2huIEFkYW1zLCBSb2JlcnQgVHJlYXQgUGFpbmUsIEVsYnJpZGdlIEdlcnJ5IAoKUmhvZGUgSXNsYW5kClN0ZXBoZW4gSG9wa2lucywgV2lsbGlhbSBFbGxlcnkgCgpDb25uZWN0aWN1dApSb2dlciBTaGVybWFuLCBTYW11ZWwgSHVudGluZ3RvbiwgV2lsbGlhbSBXaWxsaWFtcywgT2xpdmVyIFdvbGNvdHQgCgpOZXcgWW9yawpXaWxsaWFtIEZsb3lkLCBQaGlsaXAgTGl2aW5nc3RvbiwgRnJhbmNpcyBMZXdpcywgTGV3aXMgTW9ycmlzIAoKTmV3IEplcnNleQpSaWNoYXJkIFN0b2NrdG9uLCBKb2huIFdpdGhlcnNwb29uLCBGcmFuY2lzIEhvcGtpbnNvbiwgSm9obiBIYXJ0LCBBYnJhaGFtIENsYXJrIAoKUGVubnN5bHZhbmlhClJvYmVydCBNb3JyaXMsIEJlbmphbWluIFJ1c2gsIEJlbmphbWluIEZyYW5rbGluLCBKb2huIE1vcnRvbiwgR2VvcmdlIENseW1lciwgSmFtZXMgU21pdGgsIEdlb3JnZSBUYXlsb3IsIEphbWVzIFdpbHNvbiwgR2VvcmdlIFJvc3MgCgpEZWxhd2FyZQpDYWVzYXIgUm9kbmV5LCBHZW9yZ2UgUmVhZCwgVGhvbWFzIE1jS2VhbiAKCk1hcnlsYW5kClNhbXVlbCBDaGFzZSwgV2lsbGlhbSBQYWNhLCBUaG9tYXMgU3RvbmUsIENoYXJsZXMgQ2Fycm9sbCBvZiBDYXJyb2xsdG9uIAoKVmlyZ2luaWEKR2VvcmdlIFd5dGhlLCBSaWNoYXJkIEhlbnJ5IExlZSwgVGhvbWFzIEplZmZlcnNvbiwgQmVuamFtaW4gSGFycmlzb24sIFRob21hcyBOZWxzb24sIEpyLiwgRnJhbmNpcyBMaWdodGZvb3QgTGVlLCBDYXJ0ZXIgQnJheHRvbiAKCk5vcnRoIENhcm9saW5hCldpbGxpYW0gSG9vcGVyLCBKb3NlcGggSGV3ZXMsIEpvaG4gUGVubiAKClNvdXRoIENhcm9saW5hCkVkd2FyZCBSdXRsZWRnZSwgVGhvbWFzIEhleXdhcmQsIEpyLiwgVGhvbWFzIEx5bmNoLCBKci4sIEFydGh1ciBNaWRkbGV0b24gCgpHZW9yZ2lhCkJ1dHRvbiBHd2lubmV0dCwgTHltYW4gSGFsbCwgR2VvcmdlIFdhbHRvbiAK