aWJyb3dzZSBpcyBhIEhUVFAgY2xpZW50LiBUaGUgZm9sbG93aW5nIGFyZSBhIGxpc3Qgb2YgZmVhdHVyZXMuCiAgICAgICAgLSBSRkMyNjE2IGNvbXBsaWFudCAoQUZBSUspIAogICAgICAgIC0gc3VwcG9ydHMgR0VULCBQT1NULCBPUFRJT05TLCBIRUFELCBQVVQsIERFTEVURSwgVFJBQ0UsIAogICAgICAgICAgTUtDT0wsIFBST1BGSU5ELCBQUk9QUEFUQ0gsIExPQ0ssIFVOTE9DSywgTU9WRSBhbmQgQ09QWQogICAgICAgIC0gVW5kZXJzdGFuZHMgSFRUUC8wLjksIEhUVFAvMS4wIGFuZCBIVFRQLzEuMQogICAgICAgIC0gVW5kZXJzdGFuZHMgY2h1bmtlZCBlbmNvZGluZwogICAgICAgIC0gQ2FuIGdlbmVyYXRlIHJlcXVlc3RzIHVzaW5nIENodW5rZWQgVHJhbnNmZXItRW5jb2RpbmcKICAgICAgICAtIFBvb2xzIG9mIGNvbm5lY3Rpb25zIHRvIGVhY2ggd2Vic2VydmVyCiAgICAgICAgLSBQaXBlbGluaW5nIHN1cHBvcnQKICAgICAgICAtIERvd25sb2FkIHRvIGZpbGUKICAgICAgICAtIEFzeW5jaHJvbm91cyByZXF1ZXN0cy4gUmVzcG9uc2VzIGFyZSBzdHJlYW1lZCB0byBhIHByb2Nlc3MKICAgICAgICAtIEJhc2ljIGF1dGhlbnRpY2F0aW9uCiAgICAgICAgLSBTdXBwb3J0cyBwcm94eSBhdXRoZW50aWNhdGlvbgogICAgICAgIC0gQ2FuIHRhbGsgdG8gU2VjdXJlIHdlYnNlcnZlcnMgdXNpbmcgU1NMCiAgICAgICAgLSBhbnkgb3RoZXIgZmVhdHVyZXMgaW4gdGhlIGNvZGUgbm90IGxpc3RlZCBoZXJlIDopCgppYnJvd3NlIGlzIGF2YWlsYWJsZSB1bmRlciB0d28gZGlmZmVyZW50IGxpY2Vuc2VzLiBMR1BMIG9yIHRoZSBCU0QgbGljZW5zZS4KCkNvbW1lbnRzIHRvIDogQ2hhbmRyYXNoZWtoYXIuTXVsbGFwYXJ0aGlAZ21haWwuY29tCgpWZXJzaW9uIDogMi4xLjEKCkxhdGVzdCB2ZXJzaW9uIDogZ2l0Oi8vZ2l0aHViLmNvbS9jbXVsbGFwYXJ0aGkvaWJyb3dzZS5naXQKCkNPTlRSSUJVVE9SUwo9PT09PT09PT09PT0KVGhlIGZvbGxvd2luZyBwZW9wbGUgaGF2ZSBoZWxwZWQgbWFrZWQgaWJyb3dzZSBiZXR0ZXIgYnkgcmVwb3J0aW5nIGJ1Z3MsCnN1cHBseWluZyBwYXRjaGVzIGFuZCBhbHNvIGFza2luZyBmb3IgbmV3IGZlYXR1cmVzLiBQbGVhc2Ugd3JpdGUgdG8gbWUgaWYgeW91CmhhdmUgY29udHJpYnV0ZWQgYW5kIEkndmUgbWlzc2VkIHlvdSBvdXQuCgpJbiBhbHBoYWJldGljYWwgb3JkZXI6CgpBZGFtIEtvY29sb3NraQpBbmRyZXcgVHVubmVsbC1Kb25lcwpBbnRob255IE1vbGluYXJvCkJlbm9pdCBDaGVzbmVhdQpDaHJpcyBOZXdjb21iZQpEYW4gS2VsbGV5CkRlcmVrIFVwaGFtCkVyaWMgTWVycml0dApFcmlrIFJlaXRzbWEKRmlsaXBlIERhdmlkIE1hbmFuYQpHZW9mZiBDYW50Ckplcm9lbiBLb29wcwpKb+NvIExvcGVzCkthcm9sIFNrb2NpawpLb3N0aXMgU2Fnb25hcwpNYXR0aGV3IFJlaWxseQpPc2NhciBIZWxsc3Ry9m0KUGF1bCBKLiBEYXZpcwpQZXRlciBLcmlzdGVuc2VuClJhbSBLcmlzaG5hbgpSaWNoYXJkIENhbWVyb24KU2VhbiBIaW5kZQpTZXRoIEZhbGNvbgpTdGV2ZSBWaW5vc2tpClRob21hcyBMaW5kZ3JlbgpZb3Vu6HMgSGFmcmkKdGhvbHNjaHVoIChodHRwczovL2dpdGh1Yi5jb20vdGhvbHNjaHVoLykKCkNPTlRSSUJVVElPTlMgJiBDSEFOR0UgSElTVE9SWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMTAtMTItMjAxMCAtIHYyLjEuMQogICAgICAgICAgICAgKiBGaXggZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9jbXVsbGFwYXJ0aGkvaWJyb3dzZS9pc3N1ZXMvaXNzdWUvMjAgCiAgICAgICAgICAgICAgIGJ5IEZpbGlwZSBEYXZpZCBNYW5hbmEKCiAgICAgICAgICAgICAqIEZpeCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2NtdWxsYXBhcnRoaS9pYnJvd3NlL2lzc3Vlcy9pc3N1ZS8yMSAKICAgICAgICAgICAgICAgYnkgRmlsaXBlIERhdmlkIE1hbmFuYQoKICAgICAgICAgICAgICogRml4IGZvciBodHRwczovL2dpdGh1Yi5jb20vY211bGxhcGFydGhpL2licm93c2UvaXNzdWVzL2lzc3VlLzIzIAogICAgICAgICAgICAgICBieSBGaWxpcGUgRGF2aWQgTWFuYW5hCgogICAgICAgICAgICAgKiBGaXggZm9yIGJ1Z3Mgd2hlbiB1c2luZyBTU0wgYnkgSm/jbyBMb3BlcwoKMjUtMTAtMjAxMCAtIHYyLjEuMAogICAgICAgICAgICAgKiBGaXhlZCBidWlsZCBvbiBPcGVuU29sYXJpcy4gQnVnIHJlcG9ydCBhbmQgcGF0Y2ggZnJvbSAKICAgICAgICAgICAgICAgdGhvbHNjaHVoLgogICAgICAgICAgICAgICBodHRwOi8vZ2l0aHViLmNvbS9jbXVsbGFwYXJ0aGkvaWJyb3dzZS9pc3N1ZXMvaXNzdWUvMTAKCiAgICAgICAgICAgICAqIEZpeGVkIGJlaGF2aW91ciBvZiBpbmFjdGl2aXR5X3RpbWVvdXQgb3B0aW9uLiBSZXBvcnRlZCBieQogICAgICAgICAgICAgICBKb+NvIExvcGVzLgogICAgICAgICAgICAgICBodHRwOi8vZ2l0aHViLmNvbS9jbXVsbGFwYXJ0aGkvaWJyb3dzZS9pc3N1ZXMvaXNzdWUvMTEKCiAgICAgICAgICAgICAqIFByZXZlbnQgYXRvbSB0YWJsZSBwb2xsdXRpb24gd2hlbiBib2d1cyBVUkxzIGFyZSBpbnB1dCB0byAKICAgICAgICAgICAgICAgaWJyb3dzZS4gQnVnIHJlcG9ydCBieSBKb+NvIExvcGVzLgogICAgICAgICAgICAgICBodHRwOi8vZ2l0aHViLmNvbS9jbXVsbGFwYXJ0aGkvaWJyb3dzZS9pc3N1ZXMvaXNzdWUvMTMKCiAgICAgICAgICAgICAqIEF1dG9tYXRpY2FsbHkgZG8gQ2h1bmtlZC1UcmFuc2ZlciBlbmNvZGluZyBvZiByZXF1ZXN0IGJvZHkgCiAgICAgICAgICAgICAgIHdoZW4gdGhlIGJvZHkgaXMgZ2VuZXJhdGVkIGJ5IGEgZnVuLiBQYXRjaCBwcm92aWRlZCBieSAKICAgICAgICAgICAgICAgRmlsaXBlIERhdmlkIE1hbmFuYS4KICAgICAgICAgICAgICAgaHR0cDovL2dpdGh1Yi5jb20vY211bGxhcGFydGhpL2licm93c2UvaXNzdWVzL2lzc3VlLzE0CgogICAgICAgICAgICAgKiBEZXBlbmRpbmcgb24gaW5wdXQgb3B0aW9ucywgaWJyb3dzZSBzb21ldGltZXMgaW5jbHVkZWQgbXVsdGlwbGUKICAgICAgICAgICAgICAgQ29udGVudC1MZW5ndGggaGVhZGVycy4gQnVnIHJlcG9ydGVkIGJ5IFBhdWwgSi4gRGF2aXMKICAgICAgICAgICAgICAgaHR0cDovL2dpdGh1Yi5jb20vY211bGxhcGFydGhpL2licm93c2UvaXNzdWVzL2lzc3VlLzE1CgogICAgICAgICAgICAgKiBEZWFsIHdpdGggd2Vic2VydmVycyB3aGljaCBkbyBub3QgcHJvdmlkZSBhIFJlYXNvbi1QaHJhc2Ugb24gdGhlCiAgICAgICAgICAgICAgIHJlc3BvbnNlIFN0YXR1cy1MaW5lLiBQYXRjaCBwcm92aWRlZCBieSBKZXJvZW4gS29vcHMuCiAgICAgICAgICAgICAgIGh0dHA6Ly9naXRodWIuY29tL2NtdWxsYXBhcnRoaS9pYnJvd3NlL2lzc3Vlcy9pc3N1ZS8xNgoKICAgICAgICAgICAgICogRml4ZWQgaHR0cDovL2dpdGh1Yi5jb20vY211bGxhcGFydGhpL2licm93c2UvaXNzdWVzL2lzc3VlLzE3CiAgICAgICAgICAgICAgIFRoaXMgd2FzIHJlcG9ydGVkIGJ5IEZpbGlwZSBEYXZpZCBNYW5hbmEuCgogICAgICAgICAgICAgKiBGaXhlZCBodHRwOi8vZ2l0aHViLmNvbS9jbXVsbGFwYXJ0aGkvaWJyb3dzZS9pc3N1ZXMvaXNzdWUvMTkKICAgICAgICAgICAgICAgVGhpcyB3YXMgcmVwb3J0ZWQgYnkgRGFuIEtlbGxleSBhbmQgRmlsaXBlIERhdmlkIE1hbmFuYS4KCiAgICAgICAgICAgICAqIEFkZGVkIGlicm93c2U6c3RyZWFtX2Nsb3NlLzEgdG8gY2xvc2UgdGhlIGNvbm5lY3Rpb24gCiAgICAgICAgICAgICAgIGFzc29jaWF0ZWQgd2l0aCBhIGNlcnRhaW4gcmVzcG9uc2Ugc3RyZWFtLiBQYXRjaCBwcm92aWRlZCBieQogICAgICAgICAgICAgICBKb+NvIExvcGVzLiAKCiAgICAgICAgICAgICAqIFByZXZlbnQgcG9ydCBudW1iZXIgYmVpbmcgaW5jbHVkZWQgaW4gdGhlIEhvc3QgaGVhZGVyIHdoZW4gcG9ydAogICAgICAgICAgICAgICA0NDMgaXMgaW50ZW5kZWQuIEJ1ZyByZXBvcnRlZCBieSBBbmRyZXcgVHVubmVsbC1Kb25lcwoKMjQtMDktMjAxMCAtIHYyLjAuMQogICAgICAgICAgICAgKiBSZW1vdmVkIGEgc3B1cmlvdXMgaW86Zm9ybWF0IHN0YXRlbWVudAoKMjItMDktMjAxMCAtIHYyLjAuMC4KCiAgICAgICAgICAgKiBBZGRlZCBvcHRpb24gcHJlc2VydmVfY2h1bmtlZF9lbmNvZGluZy4gVGhpcyBhbGxvd3MgdGhlCiAgICAgICAgICAgICBjYWxsZXIgdG8gZ2V0IHRoZSByYXcgSFRUUCByZXNwb25zZSB3aGVuIHRoZQogICAgICAgICAgICAgVHJhbnNmZXItRW5jb2RpbmcgaXMgQ2h1bmtlZC4gVGhpcyBmZWF0dXJlIHdhcyByZXF1ZXN0ZWQKICAgICAgICAgICAgIGJ5IEJlbm9pdCBDaGVzbmVhdSB3aG8gd2FudGVkIHRvIHdyaXRlIGEgSFRUUCBwcm94eSB1c2luZwogICAgICAgICAgICAgaWJyb3dzZS4KCiAgICAgICAgICAgKiBGaXhlZCBidWcgd2l0aCB0aGUge3N0cmVhbV90bywge1BpZCwgb25jZX19IG9wdGlvbi4gQnVnCiAgICAgICAgICAgICByZXBvcnQgYW5kIGxvdCBvZiBoZWxwIGZyb20gRmlsaXBlIERhdmlkIE1hbmFuYS4gVGhhbmsKICAgICAgICAgICAgIHlvdSBGaWxpcGUuCgogICAgICAgICAgICogVGhlIHtlcnJvciwgY29ubl9mYWlsZWR9IGFuZCB7ZXJyb3IsIHNlbmRfZmFpbGVkfSByZXR1cm4KICAgICAgICAgICAgIHZhbHVlcyBhcmUgbm93IG9mIHRoZSBmb3JtIHtlcnJvciwge2Nvbm5fZmFpbGVkLCBFcnJ9fQogICAgICAgICAgICAgYW5kIHtlcnJvciwge3NlbmRfZmFpbGVkLCBFcnJ9fS4gVGhpcyBpcyBzbyB0aGF0IHRoZQogICAgICAgICAgICAgc3BlY2lmaWMgc29ja2V0IGVycm9yIGNhbiBiZSByZXR1cm5lZCB0byB0aGUgY2FsbGVyLiBJCiAgICAgICAgICAgICB0aGluayBpdCBsb29rcyBhIGJpdCB1Z2x5LCBidXQgdGhhdCBpcyB0aGUgYmVzdAogICAgICAgICAgICAgY29tcHJvbWlzZSBJIGNvdWxkIGNvbWUgdXAgd2l0aC4KCiAgICAgICAgICAgKiBBZGRlZCBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKICAgICAgICAgICAgIGRlZmF1bHRfbWF4X3Nlc3Npb25zIGFuZCBkZWZhdWx0X21heF9waXBlbGluZV9zaXplLiBUaGVzZQogICAgICAgICAgICAgd2VyZSBwcmV2aW91c2x5IGhhcmQgY29kZWQgdG8gMTAuCgogICAgICAgICAgICogVmVyc2lvbmluZyBvZiBpYnJvd3NlIG5vdyBmb2xsb3dzIHRoZSBTZW1hbnRpYyBWZXJzaW9uaW5nCiAgICAgICAgICAgICBwcmluY2lwbGVzLiAgU2VlIGh0dHA6Ly9zZW12ZXIub3JnLiBUaGFua3MgdG8gQW50aG9ueQogICAgICAgICAgICAgTW9saW5hcm8gZm9yIG51ZGdpbmcgbWUgaW4gdGhpcyBkaXJlY3Rpb24uCgogICAgICAgICAgICogVGhlIGNvbm5lY3RfdGltZW91dCBvcHRpb24gbm93IG9ubHkgYXBwbGllcyB0byB0aGUKICAgICAgICAgICAgIGNvbm5lY3Rpb24gc2V0dXAgcGhhc2UuIEluIHByZXZpb3VzIHZlcnNpb25zLCB0aGUgdGltZQogICAgICAgICAgICAgdGFrZW4gdG8gc2V0dXAgdGhlIGNvbm5lY3Rpb24gd2FzIGRlZHVjdGVkIGZyb20gdGhlCiAgICAgICAgICAgICBzcGVjaWZpZWQgdGltZW91dCB2YWx1ZSBmb3IgdGhlIHJlcXVlc3QuCgoxNy0wNy0yMDEwIC0gKiBNZXJnZWQgY2hhbmdlIG1hZGUgYnkgRmlsaXBlIERhdmlkIE1hbmFuYSB0byB1c2UgdGhlIGJhc2U2NAogICAgICAgICAgICAgICBtb2R1bGUgZm9yIGVuY29kaW5nL2RlY29kaW5nLiAKCjExLTA2LTIwMTAgLSAqIFJlbW92ZWQgdXNlIG9mIGRlcHJlY2F0ZWQgY29uY2F0X2JpbmFyeS4gUGF0Y2ggc3VwcGxpZWQgYnkKICAgICAgICAgICAgICAgU3RldmUgVmlub3NraQoKMTAtMDYtMjAxMCAtICogRml4ZWQgYnVnIGluIGh0dHBzIHJlcXVlc3RzIG5vdCBnb2luZyB2aWEgdGhlIHByb3h5CgoxMi0wNS0yMDEwIC0gKiBBZGRlZCBzdXBwb3J0IGZvciB0aGUgQ09OTkVDVCBtZXRob2QgdG8gdHVubmVsIEhUVFBTIHRocm91Z2gKICAgICAgICAgICAgICAgYSBwcm94eS4gV2hlbiBhIGh0dHBzIFVSTCBpcyByZXF1ZXN0ZWQgdGhyb3VnaCBhIHByb3h5LCAKICAgICAgICAgICAgICAgaWJyb3dzZSB3aWxsIGF1dG9tYXRpY2FsbHkgdXNlIHRoZSBDT05ORUNUIG1ldGhvZCB0byBmaXJzdAogICAgICAgICAgICAgICBzZXR1cCBhIHR1bm5lbCB0aHJvdWdoIHRoZSBwcm94eS4gT25jZSB0aGlzIHN1Y2NlZWRzLCB0aGUgCiAgICAgICAgICAgICAgIGFjdHVhbCByZXF1ZXN0IGlzIGRpc3BhdGNoZWQuIFN1Y2Nlc3NmdWxseSB0ZXN0ZWQgd2l0aCB0aGUgCiAgICAgICAgICAgICAgIG5ldyBTU0wgaW1wbGVtZW50YXRpb24gaW4gUjEzQi0wMwogICAgICAgICAgICAgKiBBZGRlZCBTU0wgc3VwcG9ydCBmb3IgZGlyZWN0IGNvbm5lY3Rpb25zLiAKICAgICAgICAgICAgICAgU2VlIGlicm93c2U6c3Bhd25fd29ya2VyX3Byb2Nlc3MvMSBhbmQgCiAgICAgICAgICAgICAgIGlicm93c2U6c3Bhd25fbGlua193b3JrZXJfcHJvY2Vzcy8xCiAgICAgICAgICAgICAqIEFkZGVkIG9wdGlvbiB0byByZXR1cm4gcmF3IHN0YXR1cyBsaW5lIGFuZCByYXcgdW5wYXJzZWQgaGVhZGVycwoKMjMtMDQtMjAxMCAtICogRml4ZXMgdG8gVVJMIHBhcnNpbmcgYnkgS2Fyb2wgU2tvY2lrCgowOC0xMS0yMDA5IC0gKiBBZGRlZCBvcHRpb24gaGVhZGVyc19hc19pcwoKMDQtMTAtMjAwOSAtICogUGF0Y2ggZnJvbSBLb3N0aXMgU2Fnb25hcyB0byBjbGVhbnVwIHNvbWUgY29kZSBhbmQgc3VwcHJlc3MKICAgICAgICAgICAgICAgZGlhbHl6ZXIgd2FybmluZ3MKCjI0LTA5LTIwMDkgLSAqIFdoZW4gYSBmaWxlbmFtZSB3YXMgc3VwcGxpZWQgd2l0aCB0aGUgJ3NhdmVfcmVzcG9uc2VfdG9fZmlsZScgCiAgICAgICAgICAgICAgIG9wdGlvbiwgdGhlIG9wdGlvbiB3YXMgYmVpbmcgaWdub3JlZC4gQnVnIHJlcG9ydCBmcm9tIAogICAgICAgICAgICAgICBBZGFtIEtvY29sb3NraQoKMDUtMDktMjAwOSAtICogSW50cm9kdWNlZCBvcHRpb24gdG8gYWxsb3cgY2FsbGVyIHRvIHNldCBzb2NrZXQgb3B0aW9ucy4KCjI5LTA3LTIwMDkgLSAqIFRoZSBFVFMgdGFibGUgY3JlYXRlZCBmb3IgbG9hZCBiYWxhbmNpbmcgb2YgcmVxdWVzdHMgd2FzIG5vdAogICAgICAgICAgICAgICBiZWluZyBkZWxldGVkIHdoaWNoIGxlZCB0byB0aGUgbm9kZSBub3QgYmVpbmcgYWJsZSB0byBjcmVhdGUKICAgICAgICAgICAgICAgYW55IG1vcmUgRVRTIHRhYmxlcyBpZiBxdWVyaWVzIHdlcmUgbWFkZSB0byBtYW55IG51bWJlciBvZiAKICAgICAgICAgICAgICAgd2Vic2VydmVycy4gaWJyb3dzZSBub3cgZGVsZXRlcyB0aGUgRVRTIHRhYmxlIGl0IGNyZWF0ZXMgb25jZSB0aGUKICAgICAgICAgICAgICAgbGFzdCBjb25uZWN0aW9uIHRvIGEgd2Vic2VydmVyIGlzIGRyb3BwZWQuIAogICAgICAgICAgICAgICBSZXBvcnRlZCBieSBTZXRoIEZhbGNvbi4KICAgICAgICAgICAgICogU3B1cmlvdXMgZGF0YSBiZWluZyByZXR1cm5lZCBhdCBlbmQgb2YgYm9keSBpbiBjZXJ0YWluIGNhc2VzIG9mCiAgICAgICAgICAgICAgIGNodW5rZWQgZW5jb2RlZCByZXNwb25zZXMgZnJvbSB0aGUgc2VydmVyLiAKICAgICAgICAgICAgICAgUmVwb3J0ZWQgYnkgQ2hyaXMgTmV3Y29tYmUuCgowMy0wNy0yMDA5IC0gQWRkZWQgb3B0aW9uIHtzdHJlYW1fdG8sIHtQaWQsIG9uY2V9fSB3aGljaCBhbGxvd3MgdGhlIGNhbGxlcgogICAgICAgICAgICAgdG8gY29udHJvbCB3aGVuIGl0IHdhbnRzIHRvIHJlY2VpdmUgbW9yZSBkYXRhLiBJZiB0aGlzIG9wdGlvbgogICAgICAgICAgICAgaXMgdXNlZCwgdGhlIGNhbGwgaWJyb3dzZTpzdHJlYW1fbmV4dChSZXFfaWQpIHNob3VsZCBiZSB1c2VkCiAgICAgICAgICAgICB0byBnZXQgbW9yZSBkYXRhLgogICAgICAgICAgIC0gUGF0Y2ggc3VibWl0dGVkIGJ5IFN0ZXZlIFZpbm9za2kgdG8gcmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmdzCiAgICAgICAgICAgICBhYm91dCB0aGUgdXNlIG9mIG9ic29sZXRlIGd1YXJkcwoKMjktMDYtMjAwOSAtICogRml4ZWQgZm9sbG93aW5nIGlzc3VlcyByZXBvcnRlZCBieSBPc2NhciBIZWxsc3Ry9m0KICAgICAgICAgICAgICAgLSBVc2Uge2FjdGl2ZSwgb25jZX0gaW5zdGVhZCBvZiB7YWN0aXZlLCB0cnVlfQogICAgICAgICAgICAgICAtIEZpeCAnZG9kZ3knIHRpbWVvdXQgaGFuZGxpbmcKICAgICAgICAgICAgICAgLSBVc2UgYmluYXJpZXMgaW50ZXJuYWxseSBpbnN0ZWFkIG9mIGxpc3RzIHRvIHJlZHVjZSBtZW1vcnkKICAgICAgICAgICAgICAgICBjb25zdW1wdGlvbiBvbiA2NCBiaXQgcGxhdGZvcm1zLiBUaGUgZGVmYXVsdCByZXNwb25zZSBmb3JtYXQKICAgICAgICAgICAgICAgICBpcyBzdGlsbCAnbGlzdCcgdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIFVzZSB0aGUKICAgICAgICAgICAgICAgICBvcHRpb24ge3Jlc3BvbnNlX2Zvcm1hdCwgYmluYXJ5fSB0byBnZXQgcmVzcG9uc2VzIGFzIGJpbmFyaWVzLgogICAgICAgICAgICAgKiBGaXhlZCBjaHVua2luZyBidWcgKHJlcG9ydGVkIGJ5IEFkYW0gS29jb2xvc2tpKQogICAgICAgICAgICAgKiBBZGRlZCBuZXcgb3B0aW9uIHtpbmFjdGl2aXR5X3RpbWVvdXQsIE1pbGxpc2Vjb25kc30gdG8gdGltZW91dAogICAgICAgICAgICAgICByZXF1ZXN0cyBpZiBubyBkYXRhIGlzIHJlY2VpdmVkIG9uIHRoZSBsaW5rIGZvciB0aGUgc3BlY2lmaWVkCiAgICAgICAgICAgICAgIGludGVydmFsLiBVc2VmdWwgd2hlbiByZXNwb25zZXMgYXJlIGxhcmdlIGFuZCBsaW5rcyBhcmUgZmxha3kuCiAgICAgICAgICAgICAqIEFkZGVkIGlicm93c2U6YWxsX3RyYWNlX29mZi8wIHRvIHR1cm4gb2ZmIGFsbCB0cmFjaW5nCiAgICAgICAgICAgICAqIENoYW5nZSB0byB0aGUgd2F5IHJlc3BvbnNlcyB0byBhc3luY2hyb25vdXMgcmVxdWVzdHMgYXJlCiAgICAgICAgICAgICAgIHJldHVybmVkLiBUaGUgZm9sbG93aW5nIG1lc3NhZ2VzIGhhdmUgYmVlbiByZW1vdmVkLgogICAgICAgICAgICAgICAgKiB7aWJyb3dzZV9hc3luY19yZXNwb25zZSwgUmVxX2lkLCB7Y2h1bmtfc3RhcnQsIENodW5rX3NpemV9fQogICAgICAgICAgICAgICAgICoge2licm93c2VfYXN5bmNfcmVzcG9uc2UsIFJlcV9pZCwgY2h1bmtfZW5kfQogICAgICAgICAgICAgKiBGaXhlZCBNYWtlZmlsZXMgYXMgcGFydCBvZiBEZWJpYW4gcGFja2FnaW5nIAogICAgICAgICAgICAgICAodGhhbmtzIHRvIFRob21hcyBMaW5kZ3JlbikKICAgICAgICAgICAgICogTW92ZWQgcmVwb3NpdG9yeSBmcm9tIFNvdXJjZWZvcmdlIHRvIEdpdGh1YgoKMTEtMDYtMjAwOSAtICogQWRkZWQgb3B0aW9uIHRvIGNvbnRyb2wgc2l6ZSBvZiBzdHJlYW1lZCBjaHVua3MuIEFsc28gYWRkZWQgCiAgICAgICAgICAgICAgIG9wdGlvbiBmb3IgdGhlIGNsaWVudCB0byByZWNlaXZlIHJlc3BvbnNlcyBpbiBiaW5hcnkgZm9ybWF0LgoKMjEtMDUtMjAwOCAtICogRml4ZWQgYnVnIGluIHJlYWRpbmcgc29tZSBvcHRpb25zIGZyb20gdGhlIGlicm93c2UuY29uZiBmaWxlLgogICAgICAgICAgICAgICBSZXBvcnRlZCBieSBFcmlrIFJlaXRzbWEgb24gdGhlIGVybHlhd3MgbWFpbGluZyBsaXN0CiAgICAgICAgICAgICAqIEZpeGVkIGJ1ZyB3aGVuIGNsZWFuaW5nIHVwIGNsb3NpbmcgY29ubmVjdGlvbnMKCjI3LTAzLTIwMDggLSAqIE1ham9yIHJld3JpdGUgb2YgdGhlIGxvYWQgYmFsYW5jaW5nIGZlYXR1cmUuIEFkZGl0aW9uYWwgbW9kdWxlLAogICAgICAgICAgICAgICBpYnJvd3NlX2xiLmVybCwgaW50cm9kdWNlZCB0byBhY2hpZXZlIHRoaXMuCiAgICAgICAgICAgICAqIENhbiBub3cgZ2V0IGEgaGFuZGxlIHRvIGEgY29ubmVjdGlvbiBwcm9jZXNzIHdoaWNoIGlzIG5vdCBwYXJ0IG9mCiAgICAgICAgICAgICAgIHRoZSBsb2FkIGJhbGFuY2luZyBwb29sLiBVc2VmdWwgd2hlbiBhbiBhcHBsaWNhdGlvbiBpcyBtYWtpbmcKICAgICAgICAgICAgICAgcmVxdWVzdHMgdG8gYSB3ZWJzZXJ2ZXIgd2hpY2ggYXJlIHRpbWUgY29uc3VtaW5nIChzdWNoIGFzIAogICAgICAgICAgICAgICB1cGxvYWRpbmcgYSBsYXJnZSBmaWxlKS4gU3VjaCByZXF1ZXN0cyBjYW4gYmUgcHV0IG9uIGEgc2VwYXJhdGUKICAgICAgICAgICAgICAgY29ubmVjdGlvbiwgYW5kIGFsbCBvdGhlciBzbWFsbGVyL3F1aWNrZXIgcmVxdWVzdHMgY2FuIHVzZSB0aGUKICAgICAgICAgICAgICAgbG9hZCBiYWxhbmNpbmcgcG9vbC4gU2VlIGlicm93c2U6c3Bhd25fd29ya2VyX3Byb2Nlc3MvMiBhbmQKICAgICAgICAgICAgICAgaWJyb3dzZTpzcGF3bl9saW5rX3dvcmtlcl9wcm9jZXNzLzIKICAgICAgICAgICAgICogUmFtIEtyaXNobmFuIHNlbnQgYSBwYXRjaCB0byBlbmFibGUgYSBjbGllbnQgdG8gc2VuZCBhIGxvdCBvZgogICAgICAgICAgICAgICBkYXRhIGluIGEgcmVxdWVzdCBieSBwcm92aWRpbmcgYSBmdW4gd2hpY2ggaXMgaW52b2tlZCBieSB0aGUKICAgICAgICAgICAgICAgY29ubmVjdGlvbiBoYW5kbGluZyBwcm9jZXNzLiBUaGlzIGZ1biBjYW4gZmV0Y2ggdGhlIGRhdGEgZnJvbSAKICAgICAgICAgICAgICAgYW55IHdoZXJlLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRyeWluZyB0byB1cGxvYWQgYSBsYXJnZSBmaWxlCiAgICAgICAgICAgICAgIHRvIGEgd2Vic2VydmVyLgogICAgICAgICAgICAgKiBVc2UgdGhlIFRDUF9OT0RFTEFZIG9wdGlvbiBvbiBldmVyeSBzb2NrZXQgYnkgZGVmYXVsdAogICAgICAgICAgICAgKiBSdWRpbWVudGFyeSBzdXBwb3J0IGZvciBsb2FkIHRlc3Rpbmcgb2YgaWJyb3dzZS4gVW5kb2N1bWVudGVkLCAKICAgICAgICAgICAgICAgYnV0IHNlZSBpYnJvd3NlX3Rlc3Q6bG9hZF90ZXN0LzMuIFVzZSB0aGUgc291cmNlLCBMdWtlIQogICAgICAgICAgICAgKiBOZXcgZnVuY3Rpb24gaWJyb3dzZTpzaG93X2Rlc3Rfc3RhdHVzLzIgdG8gdmlldyBzdGF0ZSBvZgogICAgICAgICAgICAgICBjb25uZWN0aW9ucy9waXBlbGluZXMgdG8gYSB3ZWIgc2VydmVyCgoyMC0wMi0yMDA4IC0gUmFtIEtyaXNobmFuIHNlbnQgYW5vdGhlciBwYXRjaCBmb3IgYW5vdGhlciBoaWRkZW4gYnVnIGluIHRoZQogICAgICAgICAgICAgc2F2ZV9yZXNwb25zZV90b19maWxlIGZlYXR1cmUuCgowNy0wMi0yMDA4IC0gUmFtIEtyaXNobmFuIChrcml5YXRpdmUgX2F0XyBnbWFpbCBkb3QgY29tKSBzZW50IGEgc2ltcGxlIHBhdGNoIHRvCiAgICAgICAgICAgICBlbmFibGUgc3BlY2lmeWluZyB0aGUgZmlsZW5hbWUgaW4gdGhlIHNhdmVfcmVzcG9uc2VfdG9fZmlsZSBvcHRpb24uCiAgICAgICAgICAgICBXaGVuIHRlc3RpbmcgdGhlIHBhdGNoLCBJIHJlYWxpc2VkIHRoYXQgbXkgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIG9mIHRoaXMgZmVhdHVyZSB3YXMgcXVpdGUgZmxha3kgYW5kIGEgbG90IG9mIGNvcm5lciBjYXNlcyB3ZXJlIAogICAgICAgICAgICAgbm90IGNvdmVyZWQuICBGaXhlZCBhbGwgb2YgdGhlbS4gVGhhbmtzIFJhbSEKCjE3LTEwLTIwMDcgLSBNYXR0aGV3IFJlaWxseSAobWF0dGhldyBkb3QgcmVpbGx5IF9hdF8gc2lwcGhvbmUgZG90IGNvbSkgCiAgICAgICAgICAgICBzZW50IGEgYnVnIHJlcG9ydCBhbmQgYSBmaXguIElmIHRoZSBjaHVuayB0cmFpbGVyIHNwYW5zIHR3byBUQ1AgCiAgICAgICAgICAgICBwYWNrZXRzLCB0aGVuIGlicm93c2UgZmFpbHMgdG8gcmVjb2duaXNlIHRoYXQgdGhlIGNodW5rZWQgdHJhbnNmZXIKICAgICAgICAgICAgIGhhcyBlbmRlZC4KCjI5LTA4LTIwMDcgLSBCdWcgcmVwb3J0IGJ5IFBldGVyIEtyaXN0ZW5zZW4ocHR4IF9hdF8gZGFpbWkgZG90IGF1IGRvdCBkaykuIAogICAgICAgICAgICAgaWJyb3dzZSBjcmFzaGVzIHdoZW4gdGhlIHdlYnNlcnZlciByZXR1cm5zIGp1c3QgdGhlIFN0YXR1cyBsaW5lIAogICAgICAgICAgICAgYW5kIG5vdGhpbmcgZWxzZS4KCjI4LTA2LTIwMDcgLSBBZGRlZCBob3N0X2hlYWRlciBvcHRpb24gdG8gZW5hYmxlIGNvbm5lY3Rpb24gdG8gc2VjdXJlIHNpdGVzCiAgICAgICAgICAgICB2aWEgc3R1bm5lbAoKMjAtMDQtMjAwNyAtIEdlb2ZmIENhbnQgc2VudCBhIHBhdGNoIHRvIHJlbW92ZSBVUkwgZW5jb2RpbmcgZm9yIGRpZ2l0cyBpbgogICAgICAgICAgICAgaWJyb3dzZV9saWI6dXJsX2VuY29kZS8xLgogICAgICAgICAgICAgaWJyb3dzZSBoYWQgYSBkZXBlbmRlbmN5IG9uIHRoZSBpbmV0cyBhcHBsaWNhdGlvbiBiZWNhdXNlIHRoZSAKICAgICAgICAgICAgIGlicm93c2VfaHR0cF9jbGllbnQuZXJsIGludm9rZWQgaHR0cGRfdXRpbDplbmNvZGVfYmFzZTY0LzEuIFRoaXMKICAgICAgICAgICAgIGRlcGVuZGVuY3kgaXMgbm93IHJlbW92ZWQgYW5kIHRoZSBlbmNvZGVfYmFzZTY0LzEgaGFzIGJlZW4gCiAgICAgICAgICAgICBpbXBsZW1lbnRlZCBpbiBpYnJvd3NlX2xpYi5lcmwKCjA2LTAzLTIwMDcgLSAgRXJpYyBNZXJyaXR0IHNlbnQgYSBwYXRjaCB0byBzdXBwb3J0IFdlYkRBViByZXF1ZXN0cy4KCjEyLTAxLTIwMDcgLSAgRGVyZWsgVXBoYW0gc2VudCBpbiBhIGJ1ZyBmaXguIFRoZSByZXNldF9zdGF0ZSBmdW5jdGlvbiB3YXMgbm90CiAgICAgICAgICAgICAgYmVoYXZpbmcgY29ycmVjdGx5IHdoZW4gdGhlIHRyYW5zZmVyIGVuY29kaW5nIHdhcyBub3QgY2h1bmtlZC4KCjEzLTExLTIwMDYgLSAgWW91bsKPcyBIYWZyaSByZXBvcnRlZCBhIGJ1ZyB3aGVyZSBpYnJvd3NlIHdhcyBub3QgcmV0dXJuaW5nIHRoZSAKICAgICAgICAgICAgICAgIHRlbXBvcmFyeSBmaWxlbmFtZSB3aGVuIHRoZSBzZXJ2ZXIgd2FzIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gCiAgICAgICAgICAgICAgICBhZnRlciBzZW5kaW5nIHRoZSBkYXRhIChhcyBpbiBIVFRQLzEuMCkuCiAgICAgICAgICAgICAgUmVsZWFzZWQgaWJyb3dzZSB1bmRlciB0aGUgQlNEIGxpY2Vuc2UKCjEyLTEwLTIwMDYgLSAgQ2hyaXMgTmV3Y29tYmUgcmVwb3J0ZWQgYnVnIGluIGRlYWxpbmcgd2l0aCByZXF1ZXN0cyB3aGVyZSBubyAKICAgICAgICAgICAgICBib2R5IGlzIGV4cGVjdGVkIGluIHRoZSByZXNwb25zZS4gVGhlIGZpcnN0IHJlcXVlc3Qgd291bGQgc3VjY2VlZAogICAgICAgICAgICAgIGFuZCB0aGUgbmV4dCByZXF1ZXN0IHdvdWxkIGhhbmcuCgoyNC1NYXktMjAwNiAtIFNlYW4gSGluZGUgcmVwb3J0ZWQgYSBidWcuIEFzeW5jIHJlc3BvbnNlcyB3aXRoIHBpcGVsaW5pbmcgd2FzIAogICAgICAgICAgICAgIHJldHVybmluZyB0aGUgd3JvbmcgcmVzdWx0LgoKMDgtRGVjLTIwMDUgLSBSaWNoYXJkIENhbWVyb24gKGNhbXN0ZXJAY2l0ZXVsaWtlLm9yZykuIFBhdGNoIHRvIGlicm93c2UgdG8KICAgICAgICAgICAgICBwcmV2ZW50IHBvcnQgbnVtYmVyIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBIb3N0IGhlYWRlciB3aGVuIHBvcnQKICAgICAgICAgICAgICA4MCBpcyBpbnRlbmRlZC4KCjIyLU5vdi0yMDA1IC0gQWRkZWQgYWJpbGl0eSB0byBnZW5lcmF0ZSByZXF1ZXN0cyB1c2luZyB0aGUgQ2h1bmtlZCAKICAgICAgICAgICAgICBUcmFuc2Zlci1FbmNvZGluZy4KCjA4LU1heS0yMDA1IC0gWW91bsKPcyBIYWZyaSBtYWRlIGEgQ1JVWCBMSU5VWCBwb3J0IG9mIGlicm93c2UuCiAgICAgICAgICAgICAgaHR0cDovL3loYWZyaS5jbHViLmZyL2NydXgvaW5kZXguaHRtbAoKSGVyZSBhcmUgc29tZSB1c2FnZSBleGFtcGxlcy4gRW5qb3khCgo1PiBpYnJvd3NlOnN0YXJ0KCkuCntvayw8MC45NC4wPn0KCiUlIEEgc2ltcGxlIEdFVAo2PiBpYnJvd3NlOnNlbmRfcmVxKCJodHRwOi8vaW50cmFuZXQvbWVzc2VuZ2VyLyIsIFtdLCBnZXQpLgp7b2ssIjIwMCIsCiAgICBbeyJTZXJ2ZXIiLCJNaWNyb3NvZnQtSUlTLzUuMCJ9LAogICAgIHsiQ29udGVudC1Mb2NhdGlvbiIsImh0dHA6Ly9pbnRyYW5ldC9tZXNzZW5nZXIvaW5kZXguaHRtbCJ9LAogICAgIHsiRGF0ZSIsIkZyaSwgMTcgRGVjIDIwMDQgMTU6MTY6MTkgR01UIn0sCiAgICAgeyJDb250ZW50LVR5cGUiLCJ0ZXh0L2h0bWwifSwKICAgICB7IkFjY2VwdC1SYW5nZXMiLCJieXRlcyJ9LAogICAgIHsiTGFzdC1Nb2RpZmllZCIsIkZyaSwgMTcgRGVjIDIwMDQgMDg6Mzg6MjEgR01UIn0sCiAgICAgeyJFdGFnIiwiXCJhYTdjOWRjMzEzZTRjNDE6ZDc3XCIifSwKICAgICB7IkNvbnRlbnQtTGVuZ3RoIiwiOTUzIn1dLAogICAgIjxodG1sPlxyXG5cclxuPGhlYWQ+XHJcbjx0aXRsZT5NZXNzZW5nZXI8L3RpdGxlPlxyXG48bWV0YSBuYW1lPVwiR0VORVJBVE9SXCIgY29udGVudD1cIk1pY3Jvc29mdCBGcm9udFBhZ2UgNS4wXCI+XHJcbjxtZXRhIG5hbWU9XCJQcm9nSWRcIiBjb250ZW50PVwiRnJvbnRQYWdlLkVkaXRvci5Eb2N1bWVudFwiPlxyXG48bWV0YSBuYW1lPVwiZGVzY3JpcHRpb25cIiBjb250ZW50PVwiTWVzc2VuZ2VyIEhvbWUgUGFnZVwiPlxyXG48L2hlYWQ+XHJcblxyXG48ZnJhbWVzZXQgYm9yZGVyPVwiMFwiIGZyYW1lYm9yZGVyPVwiMFwiIHJvd3M9XCI2MCwqXCI+XHJcbiAgPGZyYW1lIHNyYz1cIi9tZXNzZW5nZXIvaW1hZ2VzL3RvcG5hdi5odG1sXCIgbmFtZT1cIm1GcmFtZVRvcE5hdlwiIHNjcm9sbGluZz1cIk5PXCIgdGFyZ2V0PVwibUZyYW1lTWFpblwiPlxyXG4gIDxmcmFtZXNldCBjb2xzPVwiMTglLCpcIj5cclxuICAgIDxmcmFtZXNldCByb3dzPVwiKiwxMjBcIj5cclxuICAgICAgPGZyYW1lIHNyYz1cImluZGV4LXRvYy5odG1sXCIgbmFtZT1cIm1GcmFtZVRPQ1wiIHRhcmdldD1cIm1GcmFtZU1haW5cIiBzY3JvbGxpbmc9XCJhdXRvXCIgIG5vcmVzaXplPVwidHJ1ZVwiPlxyXG4gICAgICA8ZnJhbWUgc3JjPVwiL3NoYXJlZC9zZWFyY2gvbmFtZXNlYXJjaC5odG1sXCIgbmFtZT1cIm1GcmFtZU5hbWVTZWFyY2hcIiBzY3JvbGxpbmc9XCJOT1wiIHRhcmdldD1cIm1GcmFtZU1haW5cIj5cclxuICAgIDwvZnJhbWVzZXQ+XHJcbiAgICA8ZnJhbWUgc3JjPVwiaG9tZS8xNi0xMi0wNC14bWFzY2FyZHNtbXMuaHRtXCIgbmFtZT1cIm1GcmFtZU1haW5cIiBzY3JvbGxpbmc9XCJhdXRvXCIgdGFyZ2V0PVwibUZyYW1lTWFpblwiIGlkPVwibUZyYW1lTWFpblwiPlxyXG4gIDwvZnJhbWVzZXQ+XHJcbiAgPG5vZnJhbWVzPlxyXG4gIDxib2R5PlxyXG5cclxuICA8cD48aT5UaGlzIHNpdGUgcmVxdWlyZXMgYSBicm93c2VyIHRoYXQgY2FuIHZpZXcgZnJhbWVzLjwvaT48L3A+XHJcblxyXG4gIDwvYm9keT5cclxuICA8L25vZnJhbWVzPlxyXG48L2ZyYW1lc2V0PlxyXG5cclxuPC9odG1sPiJ9CgolJSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQolJSBBIEdFVCB1c2luZyBhIHByb3h5Cjc+IGlicm93c2U6c2VuZF9yZXEoImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iLCBbXSwgZ2V0LCBbXSwgCiAgICAgICAgICAgICAgICAgW3twcm94eV91c2VyLCAiWFhYWFgifSwKICAgICAgICAgICAgICAgICAge3Byb3h5X3Bhc3N3b3JkLCAiWFhYWFgifSwKICAgICAgICAgICAgICAgICAge3Byb3h5X2hvc3QsICJwcm94eSJ9LAogICAgICAgICAgICAgICAgICB7cHJveHlfcG9ydCwgODA4MH1dLCAxMDAwKS4Ke29rLCIzMDIiLAogICAgW3siRGF0ZSIsIkZyaSwgMTcgRGVjIDIwMDQgMTU6MjI6NTYgR01UIn0sCiAgICAgeyJDb250ZW50LUxlbmd0aCIsIjIxNyJ9LAogICAgIHsiQ29udGVudC1UeXBlIiwidGV4dC9odG1sIn0sCiAgICAgeyJTZXQtQ29va2llIiwKICAgICAgIlBSRUY9SUQ9ZjU4MTU1Yzc5N2Y5NjA5NjpDUj0xOlRNPTExMDMyOTY5OTk6TE09MTEwMzI5Njk5OTpTPUZpV2R0QXFRdmhRMFR2SHE7IGV4cGlyZXM9U3VuLCAxNy1KYW4tMjAzOCAxOToxNDowNyBHTVQ7IHBhdGg9LzsgZG9tYWluPS5nb29nbGUuY29tIn0sCiAgICAgeyJTZXJ2ZXIiLCJHV1MvMi4xIn0sCiAgICAgeyJMb2NhdGlvbiIsCiAgICAgICJodHRwOi8vd3d3Lmdvb2dsZS5jby51ay9jeGZlcj9jPVBSRUYlM0Q6VE0lM0QxMTAzMjk2OTk5OlMlM0RvOGJFWTJGSUh3ZHlHZW5TJnByZXY9LyJ9LAogICAgIHsiVmlhIiwiMS4xIG5ldGFwcDAxIChOZXRDYWNoZSBOZXRBcHAvNS41UjIpIn1dLAogICAgIjxIVE1MPjxIRUFEPjxUSVRMRT4zMDIgTW92ZWQ8L1RJVExFPjwvSEVBRD48Qk9EWT5cbjxIMT4zMDIgTW92ZWQ8L0gxPlxuVGhlIGRvY3VtZW50IGhhcyBtb3ZlZFxuPEEgSFJFRj1cImh0dHA6Ly93d3cuZ29vZ2xlLmNvLnVrL2N4ZmVyP2M9UFJFRiUzRDpUTSUzRDExMDMyOTY5OTk6UyUzRG84YkVZMkZJSHdkeUdlblMmYW1wO3ByZXY9L1wiPmhlcmU8L0E+LlxyXG48L0JPRFk+PC9IVE1MPlxyXG4ifQoKJSUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJSUgQSBHRVQgcmVzcG9uc2Ugc2F2ZWQgdG8gZmlsZS4gQSB0ZW1wb3JhcnkgZmlsZSBpcyBjcmVhdGVkIGFuZCB0aGUKJSUgZmlsZW5hbWUgcmV0dXJuZWQuIFRoZSByZXNwb25zZSB3aWxsIG9ubHkgYmUgc2F2ZWQgdG8gZmlsZSBpcyB0aGUKJSUgc3RhdHVzIGNvZGUgaXMgaW4gdGhlIDIwMCByYW5nZS4gVGhlIGRpcmVjdG9yeSB0byBkb3dubG9hZCB0byBjYW4KJSUgYmUgc2V0IHVzaW5nIHRoZSBhcHBsaWNhdGlvbiBlbnYgdmFyICdkb3dubG9hZF9kaXInIC0gdGhlIGRlZmF1bHQKJSUgaXMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCjg+IGlicm93c2U6c2VuZF9yZXEoImh0dHA6Ly93d3cuZXJsYW5nLnNlLyIsIFtdLCBnZXQsIFtdLAogICAgICAgICAgICAgICAgIFt7cHJveHlfdXNlciwgIlhYWFhYIn0sCiAgICAgICAgICAgICAgICAgIHtwcm94eV9wYXNzd29yZCwgIlhYWFhYIn0sCiAgICAgICAgICAgICAgICAgIHtwcm94eV9ob3N0LCAicHJveHkifSwKICAgICAgICAgICAgICAgICAge3Byb3h5X3BvcnQsIDgwODB9LAogICAgICAgICAgICAgICAgICB7c2F2ZV9yZXNwb25zZV90b19maWxlLCB0cnVlfV0sIDEwMDApLgp7ZXJyb3IscmVxX3RpbWVkb3V0fQoKJSUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KOT4gaWJyb3dzZTpzZW5kX3JlcSgiaHR0cDovL3d3dy5lcmxhbmcuc2UvIiwgW10sIGdldCwgW10sCiAgICAgICAgICAgICAgICAgW3twcm94eV91c2VyLCAiWFhYWFgifSwKICAgICAgICAgICAgICAgICAge3Byb3h5X3Bhc3N3b3JkLCAiWFhYWFgifSwKICAgICAgICAgICAgICAgICAge3Byb3h5X2hvc3QsICJwcm94eSJ9LAogICAgICAgICAgICAgICAgICB7cHJveHlfcG9ydCwgODA4MH0sCiAgICAgICAgICAgICAgICAgIHtzYXZlX3Jlc3BvbnNlX3RvX2ZpbGUsIHRydWV9XSwgNTAwMCkuCntvaywiMjAwIiwKICAgIFt7IlRyYW5zZmVyLUVuY29kaW5nIiwiY2h1bmtlZCJ9LAogICAgIHsiRGF0ZSIsIkZyaSwgMTcgRGVjIDIwMDQgMTU6MjQ6MzYgR01UIn0sCiAgICAgeyJDb250ZW50LVR5cGUiLCJ0ZXh0L2h0bWwifSwKICAgICB7IlNlcnZlciIsIkFwYWNoZS8xLjMuOSAoVW5peCkifSwKICAgICB7IlZpYSIsIjEuMSBuZXRhcHAwMSAoTmV0Q2FjaGUgTmV0QXBwLzUuNVIyKSJ9XSwKICAgIHtmaWxlLCIvVXNlcnMvY2hhbmRydS9jb2RlL2licm93c2Uvc3JjL2licm93c2VfdG1wX2ZpbGVfMTEwMzI5NzA0MTEyNTg1NCJ9fQoKJSUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJSUgU2V0dGluZyBzaXplIG9mIGNvbm5lY3Rpb24gcG9vbCBhbmQgcGlwZWxpbmUgc2l6ZS4gVGhpcyBzZXRzIHRoZQolJSBudW1iZXIgb2YgbWF4aW11bSBjb25uZWN0aW9ucyB0byB0aGlzIHNlcnZlciB0byAxMCBhbmQgdGhlIHBpcGVsaW5lCiUlIHNpemUgdG8gMS4gQ29ubmVjdGlvbnMgYXJlIHNldHVwIGEgcmVxdWlyZWQuCjExPiBpYnJvd3NlOnNldF9kZXN0KCJ3d3cuaG90bWFpbC5jb20iLCA4MCwgW3ttYXhfc2Vzc2lvbnMsIDEwfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge21heF9waXBlbGluZV9zaXplLCAxfV0pLgpvawoKJSUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJSUgRXhhbXBsZSB1c2luZyB0aGUgSEVBRCBtZXRob2QKNTY+IGlicm93c2U6c2VuZF9yZXEoImh0dHA6Ly93d3cuZXJsYW5nLm9yZyIsIFtdLCBoZWFkKS4Ke29rLCIyMDAiLAogICAgW3siRGF0ZSIsIk1vbiwgMjggRmViIDIwMDUgMDQ6NDA6NTMgR01UIn0sCiAgICAgeyJTZXJ2ZXIiLCJBcGFjaGUvMS4zLjkgKFVuaXgpIn0sCiAgICAgeyJMYXN0LU1vZGlmaWVkIiwiVGh1LCAxMCBGZWIgMjAwNSAwOTozMToyMyBHTVQifSwKICAgICB7IkV0YWciLCJcIjhkNzFkLTFlZmEtNDIwYjI5ZWJcIiJ9LAogICAgIHsiQWNjZXB0LXJhbmdlcyIsImJ5dGVzIn0sCiAgICAgeyJDb250ZW50LUxlbmd0aCIsIjc5MzAifSwKICAgICB7IkNvbnRlbnQtVHlwZSIsInRleHQvaHRtbCJ9XSwKICAgIFtdfQoKJSUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJSUgRXhhbXBsZSB1c2luZyB0aGUgT1BUSU9OUyBtZXRob2QKNjI+IGlicm93c2U6c2VuZF9yZXEoImh0dHA6Ly93d3cuc3VuLmNvbSIsIFtdLCBvcHRpb25zKS4gICAKe29rLCIyMDAiLAogICAgW3siU2VydmVyIiwiU3VuIEphdmEgU3lzdGVtIFdlYiBTZXJ2ZXIgNi4xIn0sCiAgICAgeyJEYXRlIiwiTW9uLCAyOCBGZWIgMjAwNSAwNDo0NDozOSBHTVQifSwKICAgICB7IkNvbnRlbnQtTGVuZ3RoIiwiMCJ9LAogICAgIHsiUDNwIiwKICAgICAgInBvbGljeXJlZj1cImh0dHA6Ly93d3cuc3VuLmNvbS9wM3AvU3VuX1AzUF9Qb2xpY3kueG1sXCIsIENQPVwiQ0FPIERTUCBDT1IgQ1VSIEFETWEgREVWYSBUQUlhIFBTQWEgUFNEYSBDT05pIFRFTGkgT1VSICBTQU1pIFBVQmkgSU5EIFBIWSBPTkwgUFVSIENPTSBOQVYgSU5UIERFTSBDTlQgU1RBIFBPTCBQUkUgR09WXCIifSwKICAgICB7IlNldC1Db29raWUiLAogICAgICAiU1VOX0lEPVguWC5YLlg6MTY5MTkxMTA5NTY1ODc5OyBFWFBJUkVTPVdlZG5lc2RheSwgMzEtRGVjLTIwMjUgMjM6NTk6NTkgR01UOyBET01BSU49LnN1bi5jb207IFBBVEg9LyJ9LAogICAgIHsiQWxsb3ciLAogICAgICAiSEVBRCwgR0VULCBQVVQsIFBPU1QsIERFTEVURSwgVFJBQ0UsIE9QVElPTlMsIE1PVkUsIElOREVYLCBNS0RJUiwgUk1ESVIifV0sCiAgICBbXX0KCiUlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiUlIEV4YW1wbGUgb2YgdXNpbmcgQXN5bmNocm9ub3VzIHJlcXVlc3RzCjE4PiBpYnJvd3NlOnNlbmRfcmVxKCJodHRwOi8vd3d3Lmdvb2dsZS5jb20iLCBbXSwgZ2V0LCBbXSwgCiAgICAgICAgICAgICAgICAgICAgIFt7cHJveHlfdXNlciwgIlhYWFhYIn0sIAogICAgICAgICAgICAgICAgICAgICAge3Byb3h5X3Bhc3N3b3JkLCAiWFhYWFgifSwgCiAgICAgICAgICAgICAgICAgICAgICB7cHJveHlfaG9zdCwgInByb3h5In0sIAogICAgICAgICAgICAgICAgICAgICAge3Byb3h5X3BvcnQsIDgwODB9LCAKICAgICAgICAgICAgICAgICAgICAgIHtzdHJlYW1fdG8sIHNlbGYoKX1dKS4Ke2licm93c2VfcmVxX2lkLHsxMTE1LDMyNzI1NiwzODk2MDh9fQoxOT4gZmx1c2goKS4KU2hlbGwgZ290IHtpYnJvd3NlX2FzeW5jX2hlYWRlcnMsezExMTUsMzI3MjU2LDM4OTYwOH0sCiAgICAgICAgICAgIjMwMiIsCiAgICAgICAgICAgW3siRGF0ZSIsIlRodSwgMDUgTWF5IDIwMDUgMjE6MDY6NDEgR01UIn0sCiAgICAgICAgICAgIHsiQ29udGVudC1MZW5ndGgiLCIyMTcifSwKICAgICAgICAgICAgeyJDb250ZW50LVR5cGUiLCJ0ZXh0L2h0bWwifSwKICAgICAgICAgICAgeyJTZXQtQ29va2llIiwKICAgICAgICAgICAgICJQUkVGPUlEPWI2MDFmMTZiZmEzMmYwNzE6Q1I9MTpUTT0xMTE1MzI3MjAxOkxNPTExMTUzMjcyMDE6Uz1PWDVoU0I1MjVBTWpVVXU3OyBleHBpcmVzPVN1biwgMTctSmFuLTIwMzggMTk6MTQ6MDcgR01UOyBwYXRoPS87IGRvbWFpbj0uZ29vZ2xlLmNvbSJ9LAogICAgICAgICAgICB7IlNlcnZlciIsIkdXUy8yLjEifSwKICAgICAgICAgICAgeyJMb2NhdGlvbiIsCiAgICAgICAgICAgICAiaHR0cDovL3d3dy5nb29nbGUuY28udWsvY3hmZXI/Yz1QUkVGJTNEOlRNJTNEMTExNTMyNzIwMTpTJTNERFM5cERKNElIY0F1Wl9BUyZwcmV2PS8ifSwKICAgICAgICAgICAgeyJWaWEiLAogICAgICAgICAgICAgIjEuMSBoYXRwcm94eTAxIChOZXRDYWNoZSBOZXRBcHAvNS42LjIpIn1dfQpTaGVsbCBnb3Qge2licm93c2VfYXN5bmNfcmVzcG9uc2UsezExMTUsMzI3MjU2LDM4OTYwOH0sCiAgICAgICAgICAgIjxIVE1MPjxIRUFEPjxUSVRMRT4zMDIgTW92ZWQ8L1RJVExFPjwvSEVBRD48Qk9EWT5cbjxIMT4zMDIgTW92ZWQ8L0gxPlxuVGhlIGRvY3VtZW50IGhhcyBtb3ZlZFxuPEEgSFJFRj1cImh0dHA6Ly93d3cuZ29vZ2xlLmNvLnVrL2N4ZmVyP2M9UFJFRiUzRDpUTSUzRDExMTUzMjcyMDE6UyUzRERTOXBESjRJSGNBdVpfQVMmYW1wO3ByZXY9L1wiPmhlcmU8L0E+LlxyXG48L0JPRFk+PC9IVE1MPlxyXG4ifQpTaGVsbCBnb3Qge2licm93c2VfYXN5bmNfcmVzcG9uc2VfZW5kLHsxMTE1LDMyNzI1NiwzODk2MDh9fQpvawoKJSUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJSUgQW5vdGhlciBleGFtcGxlIG9mIHVzaW5nIGFzeW5jIHJlcXVlc3RzCjI0PiBpYnJvd3NlOnNlbmRfcmVxKCJodHRwOi8veWF3cy5oeWJlci5vcmcvc2ltcGxlX2V4Mi55YXdzIiwgW10sIGdldCwgW10sIAogICAgICAgICAgICAgICAgICAgICBbe3Byb3h5X3VzZXIsICJYWFhYWCJ9LCAKICAgICAgICAgICAgICAgICAgICAgIHtwcm94eV9wYXNzd29yZCwgIlhYWFhYIn0sIAogICAgICAgICAgICAgICAgICAgICAge3Byb3h5X2hvc3QsICJwcm94eSJ9LCAKICAgICAgICAgICAgICAgICAgICAgIHtwcm94eV9wb3J0LCA4MDgwfSwgCiAgICAgICAgICAgICAgICAgICAgICB7c3RyZWFtX3RvLCBzZWxmKCl9XSkuCntpYnJvd3NlX3JlcV9pZCx7MTExNSwzMjc0MzAsNTEyMzE0fX0KMjU+IGZsdXNoKCkuClNoZWxsIGdvdCB7aWJyb3dzZV9hc3luY19oZWFkZXJzLHsxMTE1LDMyNzQzMCw1MTIzMTR9LAogICAgICAgICAgICIyMDAiLCAKICAgICAgICAgICBbeyJEYXRlIiwiVGh1LCAwNSBNYXkgMjAwNSAyMDo1ODowOCBHTVQifSwKICAgICAgICAgICAgeyJDb250ZW50LUxlbmd0aCIsIjY0In0sCiAgICAgICAgICAgIHsiQ29udGVudC1UeXBlIiwidGV4dC9odG1sO2NoYXJzZXQ9In0sCiAgICAgICAgICAgIHsiU2VydmVyIiwKICAgICAgICAgICAgICJZYXdzLzEuNTQgWWV0IEFub3RoZXIgV2ViIFNlcnZlciJ9LAogICAgICAgICAgICB7IlZpYSIsCiAgICAgICAgICAgICAiMS4xIGhhdHByb3h5MDEgKE5ldENhY2hlIE5ldEFwcC81LjYuMikifV19ClNoZWxsIGdvdCB7aWJyb3dzZV9hc3luY19yZXNwb25zZSx7MTExNSwzMjc0MzAsNTEyMzE0fSwKICAgICAgICAgICAiPGh0bWw+XG5cblxuPGgxPiBZZXNzc3Nzc3MgPC9oMT5cblxuPGgyPiBIZWxsbyBhZ2FpbiA8L2gyPlxuXG5cbjwvaHRtbD5cbiJ9ClNoZWxsIGdvdCB7aWJyb3dzZV9hc3luY19yZXNwb25zZV9lbmQsezExMTUsMzI3NDMwLDUxMjMxNH19CgolJSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQolJSBFeGFtcGxlIG9mIHJlcXVlc3Qgd2hpY2ggZmFpbHMgd2hlbiB1c2luZyB0aGUgYXN5bmMgb3B0aW9uLiBIZXJlCiUlIHRoZSB7aWJyb3dzZV9yZXFfaWQsIFJlcUlkfSBpcyBub3QgcmV0dXJuZWQuIEluc3RlYWQgdGhlIGVycm9yIGNvZGUgaXMKJSUgcmV0dXJuZWQuICAKNjg+IGlicm93c2U6c2VuZF9yZXEoImh0dHA6Ly93d3cuZWFybHlyaXNlci5vcmciLCBbXSwgZ2V0LCBbXSwgW3tzdHJlYW1fdG8sIHNlbGYoKX1dKS4Ke2Vycm9yLGNvbm5fZmFpbGVkfQoKJSUgRXhhbXBsZSBvZiByZXF1ZXN0IHVzaW5nIGJvdGggUHJveHktQXV0aG9yaXphdGlvbiBhbmQgYXV0aG9yaXphdGlvbiBieSB0aGUgZmluYWwgd2Vic2VydmVyLgoxNz4gaWJyb3dzZTpzZW5kX3JlcSgiaHR0cDovL3d3dy5lcmxhbmcuc2UvbGljX2FyZWEvcHJvdGVjdGVkL3BhdGNoZXMvZXJsXzc1Nl9vdHBfYmVhbS5SRUFETUUiLCAKICAgICAgICAgICAgICAgICAgICAgW10sIGdldCwgW10sIAogICAgICAgICAgICAgICAgICAgICBbe3Byb3h5X3VzZXIsICJYWFhYWCJ9LCAKICAgICAgICAgICAgICAgICAgICAgIHtwcm94eV9wYXNzd29yZCwgIlhYWFhYIn0sIAogICAgICAgICAgICAgICAgICAgICAge3Byb3h5X2hvc3QsICJwcm94eSJ9LCAKICAgICAgICAgICAgICAgICAgICAgIHtwcm94eV9wb3J0LCA4MDgwfSwgCiAgICAgICAgICAgICAgICAgICAgICB7YmFzaWNfYXV0aCwgeyJYWFhYWCIsICJYWFhYWFgifX1dKS4Ke29rLCIyMDAiLAogICAgW3siQWNjZXB0LVJhbmdlcyIsImJ5dGVzIn0sCiAgICAgeyJEYXRlIiwiVGh1LCAwNSBNYXkgMjAwNSAyMTowMjowOSBHTVQifSwKICAgICB7IkNvbnRlbnQtTGVuZ3RoIiwiMjA4OCJ9LAogICAgIHsiQ29udGVudC1UeXBlIiwidGV4dC9wbGFpbiJ9LAogICAgIHsiU2VydmVyIiwiQXBhY2hlLzEuMy45IChVbml4KSJ9LAogICAgIHsiTGFzdC1Nb2RpZmllZCIsIlR1ZSwgMDMgTWF5IDIwMDUgMTU6MDg6MTggR01UIn0sCiAgICAgeyJFVGFnIiwiXCIxMzg0YzgtODI4LTQyNzc5M2UyXCIifSwKICAgICB7IlZpYSIsIjEuMSBoYXRwcm94eTAxIChOZXRDYWNoZSBOZXRBcHAvNS42LjIpIn1dLAogICAgIlBhdGNoIElkOlx0XHRlcmxfNzU2X290cF9iZWFtXG5MYWJlbDpcdFx0XHRpbmV0cyBwYXRjaFxuRGF0ZTpcdFx0XHQyMDA1LTA1LTAzXG5Ucm91YmxlIFJlcG9ydCBJZDpcdE9UUC01NTEzLCBPVFAtNTUxNCwgT1RQLTU1MTYsIE9UUC01NTE3LCBPVFAtNTUyMSwgT1RQLTU1MzdcblNlcSBudW06XHRcdHNlcTk4MDZcblN5c3RlbTpcdFx0XHRvdHBcblJlbGVhc2U6XHRcdFIxMEJcbk9wZXJhdGluZyBTeXN0ZW06XHRhbGxcbkFyY2hpdGVjdHVyZTpcdFx0YWxsXG5FcmxhbmcgbWFjaGluZTpcdFx0QkVBTVxuQXBwbGljYXRpb246XHRcdGluZXRzLTQuNFxuRmlsZXM6XHRcdFx0YWxsXG5cbkRlc2NyaXB0aW9uOlxuXG4gICAgT1RQLTU1MTMgIFRoZSBzZXJ2ZXIgZGlkIG5vdCBoYW5kbGUgSFRUUC0wLjkgbWVzc2FnZXMgd2l0aCBhbiBpbXBsaWNpdFxuXHQgICAgICB2ZXJzaW9uLlxuXG4gICAgT1RQLTU1MTQgIEFuIGludGVybmFsIHNlcnZlciB0aW1lb3V0IGtpbGxlZCB0aGUgcmVxdWVzdCBoYW5kbGluZ1xuXHQgICAgICBwcm9jZXNzIHdpdGhvdXQgc2VuZGluZyBhIG1lc3NhZ2UgYmFjayB0byB0aGUgY2xpZW50LiBBcyB0aGlzXG5cdCAgICAgIHRpbWVvdXQgb25seSBhZmZlY3RzIGEgc2luZ2xlIHJlcXVlc3QgaXQgaGFzIGJlZW4gc2V0IHRvXG5cdCAgICAgIGluZmluaXR5IChpZiB0aGUgbWFpbiBzZXJ2ZXIgcHJvY2VzcyBkaWVzIHRoZSByZXF1ZXN0XG5cdCAgICAgIGhhbmRsaW5nIHByb2Nlc3Mgd2lsbCBhbHNvIGRpZSBhbmQgdGhlIGNsaWVudCB3aWxsIHJlY2VpdmUgYW5cblx0ICAgICAgZXJyb3IpLiBUaGlzIG1pZ2h0IG1ha2UgYSBjbGllbnQgdGhhdCBkb2VzIG5vdCB1c2UgYSB0aW1lb3V0XG5cdCAgICAgIGhhbmcgZm9yIGEgbG9uZ2VyIHBlcmlvZCBvZiB0aW1lLCBidXQgdGhhdCBpcyBhbiBleHBlY3RlZFxuXHQgICAgICBiZWhhdmlvciFcblxuICAgIE9UUC01NTE2ICBUaGF0IGEgdGhpcmQgcGFydHkgY2xvc2VzIHRoZSBodHRwIHNlcnZlcnMgYWNjZXB0IHNvY2tldCBpc1xuXHQgICAgICByZWNvdmVyYWJsZSBmb3IgaW5ldHMsIGhlbmNlIGludGVzIHdpbGwgb25seSBwcm9kdWNlIGFuIGluZm9cblx0ICAgICAgcmVwb3J0IGFzIHRoZXJlIHdhcyBubyBlcnJvciBpbiBpbmV0cyBidXQgbWVhc3VyZXMgd2hlcmVcblx0ICAgICAgdGFrZW4gdG8gYXZvaWQgZmFpbHVyZSBkdWUgdG8gZXJyb3JzIGVsc2V3aGVyZS5cblxuICAgIE9UUC01NTE3ICBUaGUgSFRUUCBjbGllbnQgcHJveHkgc2V0dGluZ3Mgd2hlcmUgaWdub3JlZC4gQnVnIGludHJvZHVjZWRcblx0ICAgICAgaW4gaW5ldHMtNC4zLlxuXG4gICAgT1RQLTU1MjEgIEluZXRzIG9ubHkgc2VudCB0aGUgXCJXV1ctQXV0aGVudGljYXRlXCIgaGVhZGVyIGF0IHRoZSBmaXJzdFxuXHQgICAgICBhdHRlbXB0IHRvIGdldCBhIHBhZ2UsIGlmIHRoZSB1c2VyIHN1cHBsaWVkIHRoZSB3cm9uZ1xuXHQgICAgICB1c2VyL3Bhc3N3b3JkIGNvbWJpbmF0aW9uIHRoZSBoZWFkZXIgd2FzIG5vdCBzZW50IGFnYWluLiBUaGlzXG5cdCAgICAgIGZvcmNlcyB0aGUgdXNlciB0byBraWxsIHRoZSBicm93c2VyIGVudGlyZWx5IGFmdGVyIGEgZmFpbGVkXG5cdCAgICAgIGxvZ2luIGF0dGVtcHQsIGJlZm9yZSB0aGUgdXNlciBtYXkgdHJ5IHRvIGxvZ2luIGFnYWluLiBJbmV0c1xuXHQgICAgICBub3cgYWx3YXlzIHNlbmQgdGhlIGF1dGhlbnRpY2F0aW9uIGhlYWRlci5cblxuICAgIE9UUC01NTM3ICBBIG1ham9yIHJld3JpdGUgb2YgYmlnIHBhcnRzIG9mIHRoZSBIVFRQIHNlcnZlciBjb2RlIHdhc1xuXHQgICAgICBwZXJmb3JtZWQuIFRoZXJlIHdoZXJlIG1hbnkgdGhpbmdzIHRoYXQgZGlkIG5vdCB3b3JrXG5cdCAgICAgIHNhdGlzZmFjdG9yeS4gQ2dpIHNjcmlwdCBoYW5kbGluZyBjYW4gbmV2ZXIgaGF2ZSB3b3JrZWRcblx0ICAgICAgcHJvcGVybHkgYW5kIHRoZSBjYXNlcyB3aGVuIGl0IGRpZCBzb3J0IG9mIHdvcmssIGEgYmlnXG5cdCAgICAgIHVubmVjZXNzYXJ5IGRlbGF5IHdhcyBlbmZvcmNlZC4gSGVhZGVycyB3aGVyZSBub3QgYWx3YXlzXG5cdCAgICAgIHRyZWF0ZWQgYXMgZXhwZWN0ZWQgYW5kIEhUVFAgdmVyc2lvbiBoYW5kbGluZyBkaWQgbm90IHdvcmssXG5cdCAgICAgIGFsbCByZXNwb25zZXMgd2hlcmUgc2VudCBhcyB2ZXJzaW9uIEhUVFAvMS4xIG5vIG1hdHRlciB3aGF0LlxuXG5cbiJ9CgolJSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQolJSBFeGFtcGxlIG9mIGEgVFJBQ0UgcmVxdWVzdC4gVmVyeSBpbnRlcmVzdGluZyEgeWF3cy5oeWJlci5vcmcgZGlkbid0CiUlIHN1cHBvcnQgdGhpcy4gTm9yIGRpZCB3d3cuZ29vZ2xlLmNvbS4gQnV0IGdvb2Qgb2xkIEJCQyBzdXBwb3J0cwolJSB0aGlzLgozNT4gMzc+IGlicm93c2U6c2VuZF9yZXEoImh0dHA6Ly93d3cuYmJjLmNvLnVrLyIsIFtdLCB0cmFjZSwgW10sIAogICAgICAgICAgICAgICAgICAgICAgICAgW3twcm94eV91c2VyLCAiWFhYWFgifSwKICAgICAgICAgICAgICAgICAgICAgICAgICB7cHJveHlfcGFzc3dvcmQsICJYWFhYWCJ9LAogICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm94eV9ob3N0LCAicHJveHkifSwKICAgICAgICAgICAgICAgICAgICAgICAgICB7cHJveHlfcG9ydCwgODA4MH1dKS4gICAgICAgICAKe29rLCIyMDAiLAogICAgW3siVHJhbnNmZXItRW5jb2RpbmciLCJjaHVua2VkIn0sCiAgICAgeyJEYXRlIiwiVGh1LCAwNSBNYXkgMjAwNSAyMTo0MDoyNyBHTVQifSwKICAgICB7IkNvbnRlbnQtVHlwZSIsIm1lc3NhZ2UvaHR0cCJ9LAogICAgIHsiU2VydmVyIiwiQXBhY2hlLzIuMC41MSAoVW5peCkifSwKICAgICB7IlNldC1Db29raWUiLAogICAgICAiQkJDLVVJRD03NDUyZTcyYTI5NDI0YzViMGIyMzJjNzEzMWM3ZDkzOTVkMjA5YjcxNzBlODYwNDA3MmUwZmNiMzYzMDQ2NzMwMDsgZXhwaXJlcz1Nb24sIDA0LU1heS0wOSAyMTo0MDoyNyBHTVQ7IHBhdGg9LzsgZG9tYWluPWJiYy5jby51azsifSwKICAgICB7IlNldC1Db29raWUiLAogICAgICAiQkJDLVVJRD03NDUyZTcyYTI5NDI0YzViMGIyMzJjNzEzMWM3ZDkzOTVkMjA5YjcxNzBlODYwNDA3MmUwZmNiMzYzMDQ2NzMwMDsgZXhwaXJlcz1Nb24sIDA0LU1heS0wOSAyMTo0MDoyNyBHTVQ7IHBhdGg9LzsgZG9tYWluPWJiYy5jby51azsifSwKICAgICB7IlZpYSIsIjEuMSBoYXRwcm94eTAxIChOZXRDYWNoZSBOZXRBcHAvNS42LjIpIn1dLAogICAgIlRSQUNFIC8gSFRUUC8xLjFcclxuSG9zdDogd3d3LmJiYy5jby51a1xyXG5Db25uZWN0aW9uOiBrZWVwLWFsaXZlXHJcblgtRm9yd2FyZGVkLUZvcjogMTcyLjI0LjI4LjI5XHJcblZpYTogMS4xIGhhdHByb3h5MDEgKE5ldENhY2hlIE5ldEFwcC81LjYuMilcclxuQ29va2llOiBCQkMtVUlEPTc0NTJlNzJhMjk0MjRjNWIwYjIzMmM3MTMxYzdkOTM5NWQyMDliNzE3MGU4NjA0MDcyZTBmY2IzNjMwNDY3MzAwXHJcblxyXG4ifQo=