LyoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioqCgoqKiAgRmlsZSAgICAgICAgOiBMaW5rZXJTY3JpcHQubGQKKioKKioKKiogIEFic3RyYWN0ICAgIDogTGlua2VyIHNjcmlwdCBmb3IgU1RNMzJINyBzZXJpZXMKKiogICAgICAgICAgICAgICAgMTAyNEtieXRlcyBGTEFTSCBhbmQgMTkyS2J5dGVzIFJBTQoqKgoqKiAgICAgICAgICAgICAgICBTZXQgaGVhcCBzaXplLCBzdGFjayBzaXplIGFuZCBzdGFjayBsb2NhdGlvbiBhY2NvcmRpbmcKKiogICAgICAgICAgICAgICAgdG8gYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLgoqKgoqKiAgICAgICAgICAgICAgICBTZXQgbWVtb3J5IGJhbmsgYXJlYSBhbmQgc2l6ZSBpZiBleHRlcm5hbCBtZW1vcnkgaXMgdXNlZC4KKioKKiogIFRhcmdldCAgICAgIDogU1RNaWNyb2VsZWN0cm9uaWNzIFNUTTMyCioqCioqICBEaXN0cmlidXRpb246IFRoZSBmaWxlIGlzIGRpc3RyaWJ1dGVkIJNhcyBpcyyUIHdpdGhvdXQgYW55IHdhcnJhbnR5CioqICAgICAgICAgICAgICAgIG9mIGFueSBraW5kLgoqKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqKiBAYXR0ZW50aW9uCioqCioqIENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCioqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCioqCioqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQoqKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCioqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgoqKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKi8KCi8qIEVudHJ5IFBvaW50ICovCkVOVFJZKFJlc2V0X0hhbmRsZXIpCgovKiBIaWdoZXN0IGFkZHJlc3Mgb2YgdGhlIHVzZXIgbW9kZSBzdGFjayAqLwpfZXN0YWNrID0gMHgyMDAyMDAwMDsgICAgLyogZW5kIG9mIFJBTSAqLwovKiBHZW5lcmF0ZSBhIGxpbmsgZXJyb3IgaWYgaGVhcCBhbmQgc3RhY2sgZG9uJ3QgZml0IGludG8gUkFNICovCl9NaW5fSGVhcF9TaXplID0gMHgyMDA7ICAgICAgLyogcmVxdWlyZWQgYW1vdW50IG9mIGhlYXAgICovCl9NaW5fU3RhY2tfU2l6ZSA9IDB4NDAwOyAvKiByZXF1aXJlZCBhbW91bnQgb2Ygc3RhY2sgKi8KCi8qIFNwZWNpZnkgdGhlIG1lbW9yeSBhcmVhcyAqLwpNRU1PUlkKewpGTEFTSCAocngpICAgICAgOiBPUklHSU4gPSAweDA4MDAwMDAwLCBMRU5HVEggPSAxMDI0SwpSQU0gKHhydykgICAgICA6IE9SSUdJTiA9IDB4MjAwMDAwMDAsIExFTkdUSCA9IDEyOEsKSVRDTVJBTSAoeHJ3KSAgICAgIDogT1JJR0lOID0gMHgwMDAwMDAwMCwgTEVOR1RIID0gNjRLCn0KCi8qIERlZmluZSBvdXRwdXQgc2VjdGlvbnMgKi8KU0VDVElPTlMKewogIC8qIFRoZSBzdGFydHVwIGNvZGUgZ29lcyBmaXJzdCBpbnRvIEZMQVNIICovCiAgLmlzcl92ZWN0b3IgOgogIHsKICAgIC4gPSBBTElHTig0KTsKICAgIEtFRVAoKiguaXNyX3ZlY3RvcikpIC8qIFN0YXJ0dXAgY29kZSAqLwogICAgLiA9IEFMSUdOKDQpOwogIH0gPkZMQVNICgogIC8qIFRoZSBwcm9ncmFtIGNvZGUgYW5kIG90aGVyIGRhdGEgZ29lcyBpbnRvIEZMQVNIICovCiAgLnRleHQgOgogIHsKICAgIC4gPSBBTElHTig0KTsKICAgICooLnRleHQpICAgICAgICAgICAvKiAudGV4dCBzZWN0aW9ucyAoY29kZSkgKi8KICAgICooLnRleHQqKSAgICAgICAgICAvKiAudGV4dCogc2VjdGlvbnMgKGNvZGUpICovCiAgICAqKC5nbHVlXzcpICAgICAgICAgLyogZ2x1ZSBhcm0gdG8gdGh1bWIgY29kZSAqLwogICAgKiguZ2x1ZV83dCkgICAgICAgIC8qIGdsdWUgdGh1bWIgdG8gYXJtIGNvZGUgKi8KICAgICooLmVoX2ZyYW1lKQoKICAgIEtFRVAgKCooLmluaXQpKQogICAgS0VFUCAoKiguZmluaSkpCgogICAgLiA9IEFMSUdOKDQpOwogICAgX2V0ZXh0ID0gLjsgICAgICAgIC8qIGRlZmluZSBhIGdsb2JhbCBzeW1ib2xzIGF0IGVuZCBvZiBjb2RlICovCiAgfSA+RkxBU0gKCiAgLyogQ29uc3RhbnQgZGF0YSBnb2VzIGludG8gRkxBU0ggKi8KICAucm9kYXRhIDoKICB7CiAgICAuID0gQUxJR04oNCk7CiAgICAqKC5yb2RhdGEpICAgICAgICAgLyogLnJvZGF0YSBzZWN0aW9ucyAoY29uc3RhbnRzLCBzdHJpbmdzLCBldGMuKSAqLwogICAgKigucm9kYXRhKikgICAgICAgIC8qIC5yb2RhdGEqIHNlY3Rpb25zIChjb25zdGFudHMsIHN0cmluZ3MsIGV0Yy4pICovCiAgICAuID0gQUxJR04oNCk7CiAgfSA+RkxBU0gKCiAgLkFSTS5leHRhYiAoUkVBRE9OTFkpIDogLyogVGhlIFJFQURPTkxZIGtleXdvcmQgaXMgb25seSBzdXBwb3J0ZWQgaW4gR0NDMTEgYW5kIGxhdGVyLCByZW1vdmUgaXQgaWYgdXNpbmcgR0NDMTAgb3IgZWFybGllci4gKi8KICB7CiAgICAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikKICB9ID5GTEFTSAogIC5BUk0gKFJFQURPTkxZKSA6IC8qIFRoZSBSRUFET05MWSBrZXl3b3JkIGlzIG9ubHkgc3VwcG9ydGVkIGluIEdDQzExIGFuZCBsYXRlciwgcmVtb3ZlIGl0IGlmIHVzaW5nIEdDQzEwIG9yIGVhcmxpZXIuICovCiAgewogICAgX19leGlkeF9zdGFydCA9IC47CiAgICAqKC5BUk0uZXhpZHgqKQogICAgX19leGlkeF9lbmQgPSAuOwogIH0gPkZMQVNICgogIC5wcmVpbml0X2FycmF5IChSRUFET05MWSkgOiAvKiBUaGUgUkVBRE9OTFkga2V5d29yZCBpcyBvbmx5IHN1cHBvcnRlZCBpbiBHQ0MxMSBhbmQgbGF0ZXIsIHJlbW92ZSBpdCBpZiB1c2luZyBHQ0MxMCBvciBlYXJsaWVyLiAqLwogIHsKICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfc3RhcnQgPSAuKTsKICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkqKSkKICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CiAgfSA+RkxBU0gKICAuaW5pdF9hcnJheSAoUkVBRE9OTFkpIDogLyogVGhlIFJFQURPTkxZIGtleXdvcmQgaXMgb25seSBzdXBwb3J0ZWQgaW4gR0NDMTEgYW5kIGxhdGVyLCByZW1vdmUgaXQgaWYgdXNpbmcgR0NDMTAgb3IgZWFybGllci4gKi8KICB7CiAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X3N0YXJ0ID0gLik7CiAgICBLRUVQICgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQogICAgS0VFUCAoKiguaW5pdF9hcnJheSopKQogICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9lbmQgPSAuKTsKICB9ID5GTEFTSAogIC5maW5pX2FycmF5IChSRUFET05MWSkgOiAvKiBUaGUgUkVBRE9OTFkga2V5d29yZCBpcyBvbmx5IHN1cHBvcnRlZCBpbiBHQ0MxMSBhbmQgbGF0ZXIsIHJlbW92ZSBpdCBpZiB1c2luZyBHQ0MxMCBvciBlYXJsaWVyLiAqLwogIHsKICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuKTsKICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCiAgICBLRUVQICgqKC5maW5pX2FycmF5KikpCiAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X2VuZCA9IC4pOwogIH0gPkZMQVNICgogIC8qIHVzZWQgYnkgdGhlIHN0YXJ0dXAgdG8gaW5pdGlhbGl6ZSBkYXRhICovCiAgX3NpZGF0YSA9IExPQURBRERSKC5kYXRhKTsKCiAgLyogSW5pdGlhbGl6ZWQgZGF0YSBzZWN0aW9ucyBnb2VzIGludG8gUkFNLCBsb2FkIExNQSBjb3B5IGFmdGVyIGNvZGUgKi8KICAuZGF0YSA6IAogIHsKICAgIC4gPSBBTElHTig0KTsKICAgIF9zZGF0YSA9IC47ICAgICAgICAvKiBjcmVhdGUgYSBnbG9iYWwgc3ltYm9sIGF0IGRhdGEgc3RhcnQgKi8KICAgICooLmRhdGEpICAgICAgICAgICAvKiAuZGF0YSBzZWN0aW9ucyAqLwogICAgKiguZGF0YSopICAgICAgICAgIC8qIC5kYXRhKiBzZWN0aW9ucyAqLwoKICAgIC4gPSBBTElHTig0KTsKICAgIF9lZGF0YSA9IC47ICAgICAgICAvKiBkZWZpbmUgYSBnbG9iYWwgc3ltYm9sIGF0IGRhdGEgZW5kICovCiAgfSA+UkFNIEFUPiBGTEFTSAoKICAKICAvKiBVbmluaXRpYWxpemVkIGRhdGEgc2VjdGlvbiAqLwogIC4gPSBBTElHTig0KTsKICAuYnNzIDoKICB7CiAgICAvKiBUaGlzIGlzIHVzZWQgYnkgdGhlIHN0YXJ0dXAgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgLmJzcyBzZWNpb24gKi8KICAgIF9zYnNzID0gLjsgICAgICAgICAvKiBkZWZpbmUgYSBnbG9iYWwgc3ltYm9sIGF0IGJzcyBzdGFydCAqLwogICAgX19ic3Nfc3RhcnRfXyA9IF9zYnNzOwogICAgKiguYnNzKQogICAgKiguYnNzKikKICAgICooQ09NTU9OKQoKICAgIC4gPSBBTElHTig0KTsKICAgIF9lYnNzID0gLjsgICAgICAgICAvKiBkZWZpbmUgYSBnbG9iYWwgc3ltYm9sIGF0IGJzcyBlbmQgKi8KICAgIF9fYnNzX2VuZF9fID0gX2Vic3M7CiAgfSA+UkFNCgogIC8qIFVzZXJfaGVhcF9zdGFjayBzZWN0aW9uLCB1c2VkIHRvIGNoZWNrIHRoYXQgdGhlcmUgaXMgZW5vdWdoIFJBTSBsZWZ0ICovCiAgLl91c2VyX2hlYXBfc3RhY2sgOgogIHsKICAgIC4gPSBBTElHTig4KTsKICAgIFBST1ZJREUgKCBlbmQgPSAuICk7CiAgICBQUk9WSURFICggX2VuZCA9IC4gKTsKICAgIC4gPSAuICsgX01pbl9IZWFwX1NpemU7CiAgICAuID0gLiArIF9NaW5fU3RhY2tfU2l6ZTsKICAgIC4gPSBBTElHTig4KTsKICB9ID5SQU0KCiAgCgogIC8qIFJlbW92ZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzdGFuZGFyZCBsaWJyYXJpZXMgKi8KICAvRElTQ0FSRC8gOgogIHsKICAgIGxpYmMuYSAoICogKQogICAgbGlibS5hICggKiApCiAgICBsaWJnY2MuYSAoICogKQogIH0KCiAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7ICooLkFSTS5hdHRyaWJ1dGVzKSB9Cn0KCgo=