Ckkgd2FudCB0byB0aGFuayBhbGwgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMgcHJvamVjdCBhbmQgZXNwZWNpYWxseSB0bzoKKGluIGFscGhhYmV0aWNhbCBvcmRlcikKClRob21hcyBCb2dlbmT2cmZlciAodHNib2dlbmRAYmlnYnVnLmZyYW5rZW4uZGUpCiAgVGVzdGVyLCBsb3RzIG9mIGJ1Z2ZpeGVzIGFuZCBoaW50cy4KCkFsYW4gQ294IChhbGFuQHJlZGhhdC5jb20pCiAgRm9yIGhlbHAgZ2V0dGluZyBpbnRvIHN0YW5kYXJkLWtlcm5lbC4KCkhlbm5lciBFaXNlbiAoZWlzQGJhdHkuaGFuc2UuZGUpCiAgRm9yIFguMjUgaW1wbGVtZW50YXRpb24uCgpWb2xrZXIgR/Z0eiAodm9sa2VyQG9vcHMuZnJhbmtlbi5kZSkKICBGb3IgY29udHJpYnV0aW9uIG9mIG1hbi1wYWdlcywgdGhlIGltb250dHktdG9vbCBhbmQgYSBwZXJmZWN0CiAgbWFpbnRhaW5pbmcgb2YgdGhlIG1haWxpbmctbGlzdCBhdCBodWItd3VlLgoKTWF0dGhpYXMgSGVzc2xlciAoaGVzc2xlckBpc2RuNGxpbnV4LmRlKQogIEZvciBjcmVhdGluZyBhbmQgbWFpbnRhaW5pbmcgdGhlIEZBUS4KCkJlcm5oYXJkIEhhaWxlciAoQmVybmhhcmQuSGFpbGVyQGxyei51bmktbXVlbmNoZW4uZGUpCiAgRm9yIGNyZWF0aW5nIHRoZSBGQVEsIGFuZCB0aGUgbGVhZnNpdGUgSE9XVE8uIAoKTWljaGFlbCAnR2hhbmRpJyBIZXJvbGQgKG1pY2hhZWxAYWJhZG9ubmEuZnJhbmtlbi5kZSkKICBGb3IgY29udHJpYnV0aW9uIG9mIHRoZSB2Ym94IGFuc3dlcmluZyBtYWNoaW5lLgoKTWljaGFlbCBIaXBwIChNaWNoYWVsLkhpcHBAc3R1ZGVudC51bmktdHVlYmluZ2VuLmRlKQogIEZvciBoaXMgU3luYy1QUFAtY29kZS4KCkthcnN0ZW4gS2VpbCAoa2VpbEBpc2RuNGxpbnV4LmRlKQogIEZvciBhZGRpbmcgMVRSNi1zdXBwb3J0IHRvIHRoZSBUZWxlcy1kcml2ZXIuCiAgRm9yIHRoZSBIaVNheC1kcml2ZXIuCgpNaWNoYWVsIEtuaWdnZSAoa25pY2tAY292ZS5oYW4uZGUpCiAgRm9yIGNvbnRyaWJ1dGluZyB0aGUgaW1vbi10b29sCgpBbmRyZWFzIEtvb2wgKGFrb29sQEtvb2wuZi5FVW5ldC5kZSkKICBGb3IgY29udHJpYnV0aW9uIG9mIHRoZSBpc2RubG9nL2lzZG5yZXAtdG9vbAoKUGVkcm8gUm9xdWUgTWFycXVlcyAocm9xdWVAZGkuZmMudWwucHQpCiAgRm9yIGxvdCBvZiBuZXcgaWRlYXMgYW5kIHRoZSBwY2JpdCBkcml2ZXIuCgpFYmVyaGFyZCBNb2Vua2ViZXJnIChlbW9lbmtlQGd3ZGcuZGUpCiAgRm9yIHRlc3RpbmcgYW5kIGhlbHAgdG8gZ2V0IGludG8ga2VybmVsLgoKVGhvbWFzIE5ldW1hbm4gKHRuQHJ1aHIuZGUpCiAgRm9yIGhlbHAgd2l0aCBDaXNjby1TTEFSUCBhbmQga2VlcGFsaXZlCgpKYW4gZGVuIE91ZGVuIChkZW5vdWRlbkBncm9vdmluLnhzNGFsbC5ubCkKICBGb3IgY29udHJpYnV0aW9uIG9mIHRoZSBvcmlnaW5hbCB0ZWxlcy1kcml2ZXIKCkNhcnN0ZW4gUGFldGggKGNhbGxlQGNhbGxlLmluLWJlcmxpbi5kZSkKICBGb3IgdGhlIEFWTS1CMS1DQVBJMi4wIGRyaXZlcgoKVGhvbWFzIFBmZWlmZmVyIChwZmVpZmZlckBwZHMuZGUpCiAgRm9yIFYuMTEwLCBleHRlbmRlZCBULjcwIGFuZCBIeWxhZmF4IGV4dGVuc2lvbnMgaW4gaXNkbl90dHkuYwoKTWF4IFJpZWdlbCAocmllZ2VsQG1heC5mcmFua2VuLmRlKQogIEZvciBtYWtpbmcgdGhlIElDTiBoYXJkd2FyZS1kb2N1bWVudGF0aW9uIGFuZCB0ZXN0LWVxdWlwbWVudCBhdmFpbGFibGUuCgpBcm1pbiBTY2hpbmRsZXIgKG1hY0BtZWx3YXJlLmRlKQogIEZvciB0aGUgZWljb24gYWN0aXZlIGNhcmQgZHJpdmVyLgoKR2VyaGFyZCAnRmlkbycgU2NobmVpZGVyIChmaWRvQHd1ZmYubWF5bi5kZSkKICBGb3IgaGVhdnktZHV0eS1iZXRhLXRlc3Rpbmcgd2l0aCBoaXMgQkJTIDspCgpUaG9tYXMgVWhsICh1aGxAdGhpbmsuZGUpCiAgRm9yIGRpc3RyaWJ1dGluZyB0aGUgY2FyZHMuCiAgRm9yIHB1c2hpbmcgbWUgdG8gd29yayA7LSkKCg==