LyoKICogU3RhcnQKICogRW5nbGlzaCBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDAzIERhbiBLZWdlbAogKiBDb3B5cmlnaHQgMjAwNCBIZW5uaW5nIEdlcmhhcmR0CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfR0VSTUFOLCBTVUJMQU5HX05FVVRSQUwKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfR0VSTUFOLCBTVUJMQU5HX05FVVRSQUwKewpTVFJJTkdfVVNBR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnRldCBlaW4gUHJvZ3JhbW0sIG9kZXIg9mZmbmV0IGVpbiBEb2t1bWVudCBpbiBkZW0gUHJvZ3JhbW0sIGRhc3Mgbm9ybWFsZXJ3ZWlzZSBm/HIgZGllIERhdGVpZW4gbWl0IGRpZXNlciBEYXRlaWVuZHVuZyBiZW51dHp0IHdpcmQuLlxuXApHZWJyYXVjaDpcblwKc3RhcnQgW09wdGlvbmVuXSBQcm9ncmFtbV9EYXRlaW5hbWUgWy4uLl1cblwKc3RhcnQgW09wdGlvbmVuXSBEb2t1bWVudF9EYXRlaW5hbWVcblwKXG5cCk9wdGlvbmVuOlxuXAovTVtpbmltaXplZF0gU3RhcnRlIGRhcyBQcm9ncmFtbSBtaW5pbWllcnQuXG5cCi9NQVhbaW1pemVkXSBTdGFydGUgZGFzIFByb2dyYW1tIG1heGltaWVydC5cblwKL1JbZXN0b3JlZF0gIFN0YXJ0ZSBkYXMgUHJvZ3JhbW0gbm9ybWFsICh3ZWRlciBtaW5pbWllcnQgbm9jaCBtYXhpbWllcnQpLlxuXAovV1thaXRdICAgICAgV2FydGV0IGJpcyBkYXMgZ2VzdGFydGV0ZSBQcm9ncmFtbSBzaWNoIGJlZW5kZXQsXG5cdCAgICAgZGFubiBiZWVuZGV0IHNpY2ggc3RhcnQgbWl0IGRlc3NlbiBFeGl0Y29kZSBkZXMgUHJvZ3JhbW1lcy5cblwKL0wgICAgICAgICAgIFplaWdlIGRpZSBFbmRiZW51dHplcmxpemVueiBhbi5cblwKXG5cCnN0YXJ0LmV4ZSBWZXJzaW9uIDAuMiBDb3B5cmlnaHQgKEMpIDIwMDMsIERhbiBLZWdlbFxuXApTdGFydCBrb21tdGUgQUJTT0xVVCBPSE5FIEdBUkFOVElFOyBm/HIgZGV0YWxpZXJ0ZSBJbmZvcm1hdGlvbmVuLCBzdGFydGUgZXMgbWl0IGRlciAvTCBPcHRpb24uXG5cCkRpZXMgaXN0IGZyZWllIFNvZnR3YXJlLCB1bmQgZHUgYmlzdCB3aWxsa29tbWVuLCBlcyB1bnRlciBiZXN0aW1tdGVuXG5cCkJlZGluZ3VuZ2VuIHdlaXRlciB6dSB2ZXJicmVpdGVuOyBm/GhyZSAnc3RhcnQgL0wnIGb8ciBtZWhyIERldGFpbHMgYXVzLlxuXAoiCgpTVFJJTkdfTElDRU5TRSwgInN0YXJ0LmV4ZSB2ZXJzaW9uIDAuMiBDb3B5cmlnaHQgKEMpIDIwMDMsIERhbiBLZWdlbFxuXApUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG5cCm1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgUHVibGljIExpY2Vuc2VcblwKYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMVxuXApvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblwKXG5cClRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuXApidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuXApNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG5cCkdOVSBMZXNzZXIgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblwKXG5cCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgUHVibGljIExpY2Vuc2VcblwKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcblwKRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS5cblwKXG5cClNjaGF1IGluIGRpZSBEYXRlaSBDT1BZSU5HLkxJQiBm/HIgTGl6ZW56aW5mb3JtYXRpb25lbi5cblwKIgoKU1RSSU5HX0VYRUNGQUlMICJFcyBrb25udGUga2VpbmUgQW53ZW5kdW5nIGdlc3RhcnRldCB3ZXJkZW4sIG9kZXIgZXMgaXN0IGtlaW5lIEFud2VuZHVuZyBtaXQgZGVyIGFuZ2VnZWJlbmVuIERhdGVpIHZlcmtu/HBmdC5cblNoZWxsRXhlY3V0ZUV4IGdlc2NoZWl0ZXJ0IgoKU1RSSU5HX1VOSVhGQUlMICJEZXIgYW5nZWdlYmVuZSBVbml4IERhdGVpbmFtZSBrb25udGUgbmljaHQgaW4gZWluZW4gRE9TIERhdGVpbmFtZW4gdW1nZXdhbmRlbHQgd2VyZGVuLiIKfQo=