LyoKICogU3RhcnQgKER1dGNoIHJlc291cmNlcykKICoKICogQ29weXJpZ2h0IDIwMDMgSGFucyBMZWlkZWtrZXIKICogQ29weXJpZ2h0IDIwMDggRnJhbnMgS29vbAogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0RVVENILCBTVUJMQU5HX05FVVRSQUwKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfRFVUQ0gsIFNVQkxBTkdfTkVVVFJBTAp7ClNUUklOR19VU0FHRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydCBlZW4gcHJvZ3JhbW1hLCBvZiBvcGVuIGVlbiBkb2N1bWVudCBtZXQgaGV0IHByb2dyYW1tYSBkYXQgbm9ybWFhbCB2b29yIGJlc3RhbmRlbiBtZXQgZGllIGV4dGVuc2llIGdlYnJ1aWt0IHdvcmR0LlxuXApHZWJydWlrOlxuXApzdGFydCBbb3B0aW9uc10gcHJvZ3JhbW1hX25hYW0gWy4uLl1cblwKc3RhcnQgW29wdGlvbnNdIGRvY3VtZW50X25hYW1cblwKXG5cCk9wdGlvbnM6XG5cCi9NW2luaW1pemVkXSBTdGFydCBoZXQgcHJvZ3JhbW1hIGdlbWluaW1hbGlzZWVyZC5cblwKL01BWFtpbWl6ZWRdIFN0YXJ0IGhldCBwcm9ncmFtbWEgZ2VtYXhpbWFsaXNlZXJkLlxuXAovUltlc3RvcmVkXSAgU3RhcnQgaGV0IHByb2dyYW1tYSBub3JtYWFsIChub2NoIGdlbWluaW1hbGlzZWVyZCBub2NoIGdlbWF4aW1hbGlzZWVyZCkuXG5cCi9XW2FpdF0gICAgICBXYWNodCB0b3RkYXQgaGV0IGdlc3RhcnRlIHByb2dyYW1tYSBpcyBiZetpbmRpZ2QsIGVpbmRpZyBkYW4gbWV0IGRlIGV4aXQgY29kZSB2YW4gZGF0IHByb2dyYW1tYS5cblwKL1VuaXggICAgICAgIEdlYnJ1aWsgZWVuIFVuaXggYmVzdGFuZHNuYWFtIGVuIHN0YXJ0IGhldCBiZXN0YW5kIGFscyBkZSB3aW5kb3dzIHZlcmtlbm5lci5cblwKL0wgICAgICAgICAgIExhYXQgZGUgZ2VicnVpa2Vyc2xpY2VudGllIHppZW4uXG5cClxuXApzdGFydC5leGUgdmVyc2lvbiAwLjIgQ29weXJpZ2h0IChDKSAyMDAzLCBEYW4gS2VnZWxcblwKU3RhcnQgd29yZHQgdSBBQlNPTFVVVCBaT05ERVIgR0FSQU5USUUgYWFuZ2Vib2RlbjsgZHJhYWkgZGl0IHByb2dyYW1tYSBtZXQgZGUgL0wgb3B0aWUgdm9vciBkZXRhaWxzLlxuXApEaXQgaXMgdnJpamUgc29mdHdhcmUsIGVuIHUgd29yZHQgdWl0Z2Vub2RpZ2Qgb20gaGV0IHZlcmRlciB0ZSB2ZXJzcHJlaWRlblxuXApvbmRlciBiZXBhYWxkZSB2b29yd2FhcmRlbjsgZHJhYWkgJ3N0YXJ0IC9MJyB2b29yIGRldGFpbHMuXG5cCiIKClNUUklOR19MSUNFTlNFLCAic3RhcnQuZXhlIHZlcnNpb24gMC4yIENvcHlyaWdodCAoQykgMjAwMywgRGFuIEtlZ2VsXG5cClRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcblwKbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBQdWJsaWMgTGljZW5zZVxuXAphcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xXG5cCm9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXApcblwKVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG5cCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG5cCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcblwKR05VIExlc3NlciBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXApcblwKWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBQdWJsaWMgTGljZW5zZVxuXAphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuXApGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLlxuXApcblwKU2VlIHRoZSBDT1BZSU5HLkxJQiBmaWxlIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXAoiCgpTVFJJTkdfRVhFQ0ZBSUwgIlByb2dyYW1tYSBrYW4gbmlldCB3b3JkZW4gZ2VzdGFydCwgb2YgZXIgaXMgZ2VlbiBwcm9ncmFtbWEgdmVyYm9uZGVuIG1ldCBoZXQgb3BnZWdldmVuIGJlc3RhbmQuXG5TaGVsbEV4ZWN1dGVFeCBpcyBtaXNsdWt0IgoKU1RSSU5HX1VOSVhGQUlMICJLb24gZGUgb3BnZWdldmVuIFVuaXggYmVzdGFuZHNuYWFtIG5pZXQgb216ZXR0ZW4gbmFhciBlZW4gRE9TIGJlc3RhbmRzbmFhbS4iCn0K