LyoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKioKKiogIEZpbGUgICAgICAgIDogeG1jNDUwMF9mbGFzaC5sZAoqKgoqKiAgQWJzdHJhY3QgICAgOiBMaW5rZXIgc2NyaXB0IGZvciBYTUM0NTAwLUUxNDR4MTAyNCBEZXZpY2Ugd2l0aAoqKiAgICAgICAgICAgICAgICAxMDI0S0J5dGUgRkxBU0gsIDY0S0J5dGUgUkFNCioqCioqICAgICAgICAgICAgICAgIFNldCBoZWFwIHNpemUsIHN0YWNrIHNpemUgYW5kIHN0YWNrIGxvY2F0aW9uIGFjY29yZGluZwoqKiAgICAgICAgICAgICAgICB0byBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuCioqCioqICAgICAgICAgICAgICAgIFNldCBtZW1vcnkgYmFuayBhcmVhIGFuZCBzaXplIGlmIGV4dGVybmFsIG1lbW9yeSBpcyB1c2VkLgoqKgoqKiAgVGFyZ2V0ICAgICAgOiBJbmZpbmVvbiBYTUM0NTAwCioqCioqICBFbnZpcm9ubWVudCA6IEF0b2xsaWMgVHJ1ZVNUVURJTyhSKQoqKgoqKiAgRGlzdHJpYnV0aW9uOiBUaGUgZmlsZSBpcyBkaXN0cmlidXRlZCCTYXMgaXMslCB3aXRob3V0IGFueSB3YXJyYW50eQoqKiAgICAgICAgICAgICAgICBvZiBhbnkga2luZC4KKioKKiogIChjKUNvcHlyaWdodCBBdG9sbGljIEFCLgoqKiAgVGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhbmQgdXNlZCB3aXRoIHRoZSBGcmVlUlRPUyBleGFtcGxlIHByb2plY3QKKiogIGZvciBBdG9sbGljIFRydWVTVFVESU8gb25seS4KKioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKi8KCi8qIEVudHJ5IFBvaW50ICovCkVOVFJZKFJlc2V0X0hhbmRsZXIpCgovKiBIaWdoZXN0IGFkZHJlc3Mgb2YgdGhlIHVzZXIgbW9kZSBzdGFjayAqLwpfZXN0YWNrID0gMHgxMDAxMDAwMDsgICAgLyogZW5kIG9mIDY0SyBSQU0gKi8KCi8qIEdlbmVyYXRlIGEgbGluayBlcnJvciBpZiBoZWFwIGFuZCBzdGFjayBkb24ndCBmaXQgaW50byBSQU0gKi8KX01pbl9IZWFwX1NpemUgPSAwOyAgICAgIC8qIHJlcXVpcmVkIGFtb3VudCBvZiBoZWFwICAqLwpfTWluX1N0YWNrX1NpemUgPSAweDIwMDsgLyogcmVxdWlyZWQgYW1vdW50IG9mIHN0YWNrICovCgovKiBTcGVjaWZ5IHRoZSBtZW1vcnkgYXJlYXMgKi8KTUVNT1JZCnsKICBGTEFTSDFfY2FjaGVkIChyeCkgICA6IE9SSUdJTiA9IDB4MDgwMDAwMDAsIExFTkdUSCA9IDEwMjRLCiAgRkxBU0gxX3VuY2FjaGVkIChyeCkgOiBPUklHSU4gPSAweDBDMDAwMDAwLCBMRU5HVEggPSAxMDI0SwogIFBTUkFNMSAoeHJ3KSAgICAgICAgIDogT1JJR0lOID0gMHgxMDAwMDAwMCwgTEVOR1RIID0gNjRLCiAgRFNSQU0xX3N5c3RlbSAoeHJ3KSAgOiBPUklHSU4gPSAweDIwMDAwMDAwLCBMRU5HVEggPSA2NEsKICBEU1JBTTJfY29tbSAoeHJ3KSAgICA6IE9SSUdJTiA9IDB4MzAwMDAwMDAsIExFTkdUSCA9IDMySwogIE1FTU9SWV9CMSAocngpICAgICAgIDogT1JJR0lOID0gMHg2MDAwMDAwMCwgTEVOR1RIID0gMEsKfQoKLyogRGVmaW5lIG91dHB1dCBzZWN0aW9ucyAqLwpTRUNUSU9OUwp7CiAgLyogVGhlIHN0YXJ0dXAgY29kZSBnb2VzIGZpcnN0IGludG8gRkxBU0ggKi8KICAuaXNyX3ZlY3RvciA6CiAgewogICAgLiA9IEFMSUdOKDQpOwogICAgX2lzcl92ZWN0b3IgPSAuOyAgICAgLyogZGVmaW5lIGlzcl92ZWN0b3Igc3RhcnQgYWRkcmVzcyAqLwogICAgS0VFUCgqKC5pc3JfdmVjdG9yKSkgLyogU3RhcnR1cCBjb2RlICovCiAgICAuID0gQUxJR04oNCk7CiAgfSA+RkxBU0gxX3VuY2FjaGVkCgogIC8qIFRoZSBwcm9ncmFtIGNvZGUgYW5kIG90aGVyIGRhdGEgZ29lcyBpbnRvIEZMQVNIICovCiAgLnRleHQgOgogIHsKICAgIC4gPSBBTElHTig0KTsKICAgICooLnRleHQpICAgICAgICAgICAvKiAudGV4dCBzZWN0aW9ucyAoY29kZSkgKi8KICAgICooLnRleHQqKSAgICAgICAgICAvKiAudGV4dCogc2VjdGlvbnMgKGNvZGUpICovCiAgICAqKC5yb2RhdGEpICAgICAgICAgLyogLnJvZGF0YSBzZWN0aW9ucyAoY29uc3RhbnRzLCBzdHJpbmdzLCBldGMuKSAqLwogICAgKigucm9kYXRhKikgICAgICAgIC8qIC5yb2RhdGEqIHNlY3Rpb25zIChjb25zdGFudHMsIHN0cmluZ3MsIGV0Yy4pICovCiAgICAqKC5nbHVlXzcpICAgICAgICAgLyogZ2x1ZSBhcm0gdG8gdGh1bWIgY29kZSAqLwogICAgKiguZ2x1ZV83dCkgICAgICAgIC8qIGdsdWUgdGh1bWIgdG8gYXJtIGNvZGUgKi8KICAgICooLmVoX2ZyYW1lKQoKICAgIEtFRVAgKCooLmluaXQpKQogICAgS0VFUCAoKiguZmluaSkpCgogICAgLiA9IEFMSUdOKDQpOwogICAgX2V0ZXh0ID0gLjsgICAgICAgIC8qIGRlZmluZSBhIGdsb2JhbCBzeW1ib2xzIGF0IGVuZCBvZiBjb2RlICovCiAgfSA+RkxBU0gxX3VuY2FjaGVkCgoKICAgLkFSTS5leHRhYiAgIDogeyAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikgfSA+RkxBU0gxX3VuY2FjaGVkCiAgICAuQVJNIDogewogICAgX19leGlkeF9zdGFydCA9IC47CiAgICAgICooLkFSTS5leGlkeCopCiAgICAgIF9fZXhpZHhfZW5kID0gLjsKICAgIH0gPkZMQVNIMV91bmNhY2hlZAoKICAucHJlaW5pdF9hcnJheSAgICAgOgogIHsKICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfc3RhcnQgPSAuKTsKICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkqKSkKICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CiAgfSA+RkxBU0gxX3VuY2FjaGVkCiAgLmluaXRfYXJyYXkgOgogIHsKICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfc3RhcnQgPSAuKTsKICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCiAgICBLRUVQICgqKC5pbml0X2FycmF5KikpCiAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X2VuZCA9IC4pOwogIH0gPkZMQVNIMV91bmNhY2hlZAogIC5maW5pX2FycmF5IDoKICB7CiAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X3N0YXJ0ID0gLik7CiAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQogICAgS0VFUCAoKiguZmluaV9hcnJheSopKQogICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9lbmQgPSAuKTsKICB9ID5GTEFTSDFfdW5jYWNoZWQKCiAgLyogdXNlZCBieSB0aGUgc3RhcnR1cCB0byBpbml0aWFsaXplIGRhdGEgKi8KICBfc2lkYXRhID0gTE9BREFERFIoLmRhdGEpOwoKICAvKiBJbml0aWFsaXplZCBkYXRhIHNlY3Rpb25zIGdvZXMgaW50byBSQU0sIGxvYWQgTE1BIGNvcHkgYWZ0ZXIgY29kZSAqLwogIC5kYXRhIDogCiAgewogICAgLiA9IEFMSUdOKDQpOwogICAgX3NkYXRhID0gLjsgICAgICAgIC8qIGNyZWF0ZSBhIGdsb2JhbCBzeW1ib2wgYXQgZGF0YSBzdGFydCAqLwogICAgKiguZGF0YSkgICAgICAgICAgIC8qIC5kYXRhIHNlY3Rpb25zICovCiAgICAqKC5kYXRhKikgICAgICAgICAgLyogLmRhdGEqIHNlY3Rpb25zICovCgogICAgLiA9IEFMSUdOKDQpOwogICAgX2VkYXRhID0gLjsgICAgICAgIC8qIGRlZmluZSBhIGdsb2JhbCBzeW1ib2wgYXQgZGF0YSBlbmQgKi8KICB9ID5EU1JBTTFfc3lzdGVtIEFUPiBGTEFTSDFfdW5jYWNoZWQKCiAgLyogVW5pbml0aWFsaXplZCBkYXRhIHNlY3Rpb24gKi8KICAuID0gQUxJR04oNCk7CiAgLmJzcyA6CiAgewogICAgLyogVGhpcyBpcyB1c2VkIGJ5IHRoZSBzdGFydHVwIGluIG9yZGVyIHRvIGluaXRpYWxpemUgdGhlIC5ic3Mgc2VjaW9uICovCiAgICBfc2JzcyA9IC47ICAgICAgICAgLyogZGVmaW5lIGEgZ2xvYmFsIHN5bWJvbCBhdCBic3Mgc3RhcnQgKi8KICAgIF9fYnNzX3N0YXJ0X18gPSBfc2JzczsKICAgICooLmJzcykKICAgICooLmJzcyopCiAgICAqKENPTU1PTikKCiAgICAuID0gQUxJR04oNCk7CiAgICBfZWJzcyA9IC47ICAgICAgICAgLyogZGVmaW5lIGEgZ2xvYmFsIHN5bWJvbCBhdCBic3MgZW5kICovCiAgICBfX2Jzc19lbmRfXyA9IF9lYnNzOwogIH0gPkRTUkFNMV9zeXN0ZW0KCiAgLyogVXNlcl9oZWFwX3N0YWNrIHNlY3Rpb24sIHVzZWQgdG8gY2hlY2sgdGhhdCB0aGVyZSBpcyBlbm91Z2ggUkFNIGxlZnQgKi8KICAuX3VzZXJfaGVhcF9zdGFjayA6CiAgewogICAgLiA9IEFMSUdOKDQpOwogICAgUFJPVklERSAoIGVuZCA9IC4gKTsKICAgIFBST1ZJREUgKCBfZW5kID0gLiApOwogICAgLiA9IC4gKyBfTWluX0hlYXBfU2l6ZTsKICAgIC4gPSAuICsgX01pbl9TdGFja19TaXplOwogICAgLiA9IEFMSUdOKDQpOwogIH0gPkRTUkFNMV9zeXN0ZW0KCiAgLyogTUVNT1JZX2JhbmsxIHNlY3Rpb24sIGNvZGUgbXVzdCBiZSBsb2NhdGVkIGhlcmUgZXhwbGljaXRseSAgICAgICAgICAgICovCiAgLyogRXhhbXBsZTogZXh0ZXJuIGludCBmb28odm9pZCkgX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIubWIxdGV4dCIpKSk7ICovCiAgLm1lbW9yeV9iMV90ZXh0IDoKICB7CiAgICAqKC5tYjF0ZXh0KSAgICAgICAgLyogLm1iMXRleHQgc2VjdGlvbnMgKGNvZGUpICovCiAgICAqKC5tYjF0ZXh0KikgICAgICAgLyogLm1iMXRleHQqIHNlY3Rpb25zIChjb2RlKSAgKi8KICAgICooLm1iMXJvZGF0YSkgICAgICAvKiByZWFkLW9ubHkgZGF0YSAoY29uc3RhbnRzKSAqLwogICAgKigubWIxcm9kYXRhKikKICB9ID5NRU1PUllfQjEKCiAgLyogUmVtb3ZlIGluZm9ybWF0aW9uIGZyb20gdGhlIHN0YW5kYXJkIGxpYnJhcmllcyAqLwogIC9ESVNDQVJELyA6CiAgewogICAgbGliYy5hICggKiApCiAgICBsaWJtLmEgKCAqICkKICAgIGxpYmdjYy5hICggKiApCiAgfQoKICAuQVJNLmF0dHJpYnV0ZXMgMCA6IHsgKiguQVJNLmF0dHJpYnV0ZXMpIH0KfQo=