LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKrDmsb7L+dPQIChDKTIwMTDW0NDLzajRtrnJt93T0M/euavLvg0KICogIMSjv+nD+yAgo7pQUw0KICogIM7EvP7D+yAgo7p0ZHBzcGh5aW50LmgNCiAqICDOxLz+serKtqO6DQogKiAgz+C52M7EvP6jug0KICogIMq1z9a5psTco7pQU7rNVEQgUEhZtcS907/atqjS5Q0KICogINf31d8gICAgo7oNCiAqICCw5rG+ICAgIKO6DQogKiAgzeqzycjVxtqjug0KICogIMbky/zLtcP3o7oNCiAqDQogKiAg0N64xLzHwrwxo7oNCiAqICAgIMjVICDG2qO6MjAxMC4wNS4xOA0KICogICAg0N64xMjLo7ogWkhVTyBCaWJvDQogKiAgICDQ3rjExNrI3aO6DQogKiAgICAgMSkgus+yonRkbWFjcGh5aW50Lmi6zXRkcnJjcGh5aW50LmjBvbfdzbfOxLz+tcTE2sjdDQogKiogINDeuMS8x8K8MqO6DQogKiAgICDI1SAgxtqjujIwMTEuMDkuMDINCiAqICAgINDeuMTIy6O6IHN1biBjaGFuZyBqaWFuZw0KICogICAg0N64xMTayN2jug0KICogICAgIDEpIFRfelREX1BfSXJhdEdhcENvbmZpZ19SZXHW0LLOyv13U2hvcnRHYXBGbGe4/MP7zqp3SWRsZU9yQ29ubmVjdEZsZ6OssqLQ3rjE16LKzaO7DQogICAgICAgIDIpVF96VERfUF9oc2RwYV9jb25maWdfcmVx1tDU9rzTss7K/XdNYWNIZFR5cA0KICAgICAgICAzKVRfelREX1BfQ1BoeV9JbnRlck1lYXNfUmVx1tC1xLrqTVVMVElfSVJBVF8yOTYzyKW19KGjDQogKiogINDeuMS8x8K8M6O6DQogKiAgICDI1SAgxtqjujIwMTEuMDkuMjgNCiAqICAgINDeuMTIy6O6IHN1biBjaGFuZyBqaWFuZw0KICogICAg0N64xMTayN2jug0KICogICAgIDEpIFRfelREX1BfaHN1cGFfY29uZmlnX3JlcdbQtbG/qlI5uurKsdT2vNOyzsr9dFVwbGlua190aW1pbmdfYWR2YW5jZV9jb250cm9soaMNCiAqKiAg0N64xLzHwrw0o7oNCiAqICAgIMjVICDG2qO6MjAxMS4xMS4xMQ0KICogICAg0N64xMjLo7ogc3VuIGNoYW5nIGppYW5nDQogKiAgICDQ3rjExNrI3aO6DQogKiAgICAgMSkgyKW19FI3X1NVUFBPUlShow0KICAgICAqICDQ3rjEvMfCvDWjug0KICogICAgyNUgIMbao7oyMDEyLjAzLjEyDQogKiAgICDQ3rjEyMujus6k0/HV5A0KICogICAg0N64xMTayN2juiAgICANCiAqICAgICAgMSnU9rzTz/vPor3hublUX3pURF9QX0RldGVjdENlbGxJbmZvDQogICAgICAgICAyKdT2vNO66rao0uVaX1REX1BfTUFYX0RFVEVDVF9DRUxMX05VTQ0KDQogICAgICogINDeuMS8x8K8NqO6DQogKiAgICDI1SAgxtqjujIwMTIuMDUuMTANCiAqICAgINDeuMTIy6O6y++zpL2tDQogKiAgICDQ3rjExNrI3aO6ICAgIA0KICogICAgICAxKVRfelREX1BfVWxEcGNoX3NldHVwX21vZF9yZXHW0LXEss7K/XdTcGVjX2J1cnN0X2dlbmVyYXRpb25fcGVyaW9k1Pa809eiys0NCiAgICAgICAgIDKjqdT2vNPP+8+iveG5uVRfelREX1BfVWxfcGh5X2NoX2N0cmxfcmVxDQogICAgICogINDeuMS8x8K8N6O6DQogKiAgICDI1SAgxtqjujIwMTIuMDUuMTANCiAqICAgINDeuMTIy6O6y++zpL2tDQogKiAgICDQ3rjExNrI3aO6ICAgIA0KICAgICAgICAxo6lUX3pURF9QX2hzZHNjaF9zcHNfaW5mb9bQ1Pa803dJbml0U3BzSW5mb0Zn08PT2rHtyr50SW5pdFNwc0luZm/Kx7fx09DQp6OszazKsciltfSyzsr9d1BhZGRpbmejrLGjs9bLxNfWvdq21Mbro7sNCiAgICAgICAgMqOpVF96VERfUF9lZGNoX3Nwc19pbmZv1tDU9rzTd0luaXRTcHNJbmZvRmfTw9Pase3KvnRJbml0U3BzSW5mb8rHt/HT0NCno6zNrMqx1Pa807LOyv13UGFkZGluZ6OssaOz1svE19a92rbUxuujuw0KICAgICAqICDQ3rjEvMfCvDijug0KICogICAgyNUgIMbao7oyMDEyLjUuMTYNCiAqICAgINDeuMTIy6O61cXF9LPMDQogKiAgICDQ3rjExNrI3aO6DQogICAgICAgMaOpICBaX1REX1BfTUFYX0lOVEVSX0ZSRVFfTlVNINPJObjEs8kxNg0KICAgICAgIDKjqSBaX1REX1BfTUFYX0JMSU5EX0lOVEVSX0ZSRVEg08k5uMSzyTE2DQoqICDQ3rjEvMfCvDmjug0KICogICAgyNUgIMbao7oyMDEyLjA2LjE0DQogKiAgICDQ3rjEyMujusvvs6S9rQ0KICogICAg0N64xMTayN2juiAgICANCiAqICAgICAgMSlaX1REX1BfTUFYX1VMX1RTuMTOqjQNCiAgICAgICAgIDKjqVpfVERfUF9NQVhfTk9fT0ZfVUxfQllURVO4xM6qMTE2OA0KICAgICAgICAyo6lUX3pURF9QX0NQaHlfVWVJbnRNZWFzX0luZM6qwcvLxNfWvdq21Mbro6zU9rzTd1BhZGRpbmc7DQoqICDQ3rjEvMfCvDEwo7oNCiAqICAgIMjVICDG2qO6MjAxMi4wNy4xMA0KICogICAg0N64xMjLo7rL77Okva0NCiAqICAgINDeuMTE2sjdo7ogICAg0bC69M/C0sa5psTc0N64xA0KICogICAgICAxKVRfelREX1BfcGFnaW5nX3JlcdbQ1Pa801RfelREX1BfVWVJZA0KICAgICAgICAgMqOp0MLU9tfTveG5uVRfelREX1BfVWVJZKGiVF96VERfUF9VUm50aaGiVF96VERfUF9JbXNpR3NtDQogKiAg0N64xLzHwrwxMaO6DQogKiAgICDI1SAgxtqjujIwMTMuMDQuMTgNCiAqICAgINDeuMTIy6O61cXF9LPMDQogKiAgICDQ3rjExNrI3aO6ICAgIEdBUMfrx/PJz7Go1Pa8087VytbX1rbODQogKiAgICAgIDEpVF96VERfUF91bXRzX2lkbGVfUGVyaW9kUmVwX3JlcdbQ1Pa802R3R2FwSWQNCiAgICAgICAgMilUX3pURF9QX3VtdHNfaW5hY3RfdGltZV9pbmTW0NT2vNNkd0dhcElkDQoqLyANCg0KI2lmbmRlZiBaX1REUFNfUEhZX0lOVEVSRkFDRV9IDQojZGVmaW5lIFpfVERQU19QSFlfSU5URVJGQUNFX0gNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqICAgICAgICAgICAgICAgICAgICAgICAgzbfOxLz+sPy6rCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiAgICAgICAgICAgICAgICAgICAgICAgICCzo8G/tqjS5SAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiAgICAgICAgICAgICAgICAgICAgICAgICDIq77Wuuq2qNLlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2RlZmluZSBaX1REX1BfTUFYX05PX09GX1VMX0JZVEVTICAgICAgICAgICAgICAgICAoV09SRCkxMTY4ICAgICAgICAgICAvKrC0yc/Q0DM4NGu8xiovDQojZGVmaW5lIFpfVERfUF9NQVhfTk9fT0ZfRExfQllURVMgICAgICAgICAgICAgICAgIChXT1JEKTExNjggICAgICAgICAgICAvKrC0z8LQ0DM4NGu8xiovDQoNCiNpZm5kZWYgX1VTRV9IU1BBUExVUw0KI2RlZmluZSBaX1REX1BfTUFYX05PX09GX0hTRFBBX0JZVEVTICAgICAgICAgICAgICAoV09SRCkxNzU2ICAgICAgICAgIC8qsLQyLjhNo6zO78DtsuPDvzVtc822td28xigxNDA0M2JpdCkpKi8NCiNkZWZpbmUgWl9URF9QX0hTRFBBX0RBVEFfTEVOICAgICAgICAgICAgICAgICAgICAgKFdPUkQpMTc1NiAgICAgICAgICAvKtK7v+lIU0RQQcr9vt2zpLbIKi8NCiNlbHNlDQojZGVmaW5lIFpfVERfUF9NQVhfTk9fT0ZfSFNEUEFfQllURVMgICAgICAgICAgICAgIChXT1JEKTI2MzQgICAgICAgICAgLyqwtDIuOE2jrM7vwO2y48O/NW1zzba13bzGKDE0MDQzYml0KSkqLw0KI2RlZmluZSBaX1REX1BfSFNEUEFfREFUQV9MRU4gICAgICAgICAgICAgICAgICAgICAoV09SRCkyNjM0ICAgICAgICAgIC8q0ru/6UhTRFBByv2+3bOktsgqLw0KI2VuZGlmDQoNCiNkZWZpbmUgWl9URF9QX01BWF9OT19PRl9IU1VQQV9CWVRFUyAgICAgICAgICAgICAgKFdPUkQpMTQwMCAgICAgICAgICAvKrC0yc/Q0DEuMU28xiovDQoNCg0KDQoNCi8q0KHH+MvRy/fP4LnYuuq2qNLlKi8NCiNkZWZpbmUgWl9URF9QX01BWF9GUkVRU0NBTl9GUkVRX05VTSAgICAgICAgICAgICAgKFdPUkQpMzINCiNkZWZpbmUgWl9URF9QX01BWF9SU1NJX1JFU1VMVFNfTlVNICAgICAgICAgICAgICAgKFdPUkQpMzINCiNkZWZpbmUgWl9URF9QX01BWF9TUkhfUkVTVUxUU19OVU0gICAgICAgICAgICAgICAgKFdPUkQpOA0KI2RlZmluZSBaX1REX1BfTUFYX05VTV9PRl9CQ0hfRFdPUkRTICAgICAgICAgICAgICAoV09SRCk4DQoNCiNkZWZpbmUgWl9URF9QX0NFTExTUkhUWVBFX1NUUk9OR0VTVCAgICAgICAgICAgICAgKFdPUkQpMA0KI2RlZmluZSBaX1REX1BfQ0VMTFNFQVJDSFRZUEVfQkxJTkQgICAgICAgICAgICAgICAoV09SRCkxDQojZGVmaW5lIFpfVERfUF9DRUxMU0VBUkNIVFlQRV9TUEVDICAgICAgICAgICAgICAgIChXT1JEKTINCg0KLyqy4sG/z+C52LrqtqjS5SovDQojZGVmaW5lIFpfVERfUF9NQVhfSU5URVJfRlJFUV9OVU0gICAgICAgICAgICAgICAgIChXT1JEKTE2ICAgICAvKtfutuDWp7PWtcTS7Ma1suLBv9TYxrXK/SovDQojZGVmaW5lIFpfVERfUF9NQVhfSU5UUkFfQ0VMTF9OVU0gICAgICAgICAgICAgICAgIChXT1JEKTMyICAgIC8q1+624L/JzazKsbLiwb/NrMa10KHH+Mr9Ki8NCiNkZWZpbmUgWl9URF9QX01BWF9JTlRFUl9DRUxMX05VTSAgICAgICAgICAgICAgICAgKFdPUkQpMzIgICAgLyrX7rbgv8nNrMqxsuLBv9LsxrXQocf4yv0qLw0KI2RlZmluZSBaX1REX1BfTUFYX0JMSU5EX0lOVEVSX0ZSRVEgICAgICAgICAgICAgICAoV09SRCkoMHgxMCkNCiNkZWZpbmUgWl9URF9QX01BWF9CTElORF9JTlRFUl9DRUxMICAgICAgICAgICAgICAgKFdPUkQpKDB4MDMpDQojZGVmaW5lIFpfVERfUF9JTlRFUl9JTlZBTElEX0NFTExJRCAgICAgICAgICAgICAgIChXT1JEKSgweEZGRkUpDQojZGVmaW5lIFpfVERfUF9NQVhfREVURUNUX0NFTExfTlVNICAgICAgICAgICAgICAgIChXT1JEKTQNCg0KLyrO3s/f18rUtMXk1sPP4LnYuuq2qNLlKi8NCiNkZWZpbmUgWl9URF9QX01BWF9QUkFDSF9GUEFDSCAgICAgICAgICAgICAgICAgICAgKFdPUkQpKDB4MDgpDQojZGVmaW5lIFpfVERfUF9NQVhfVUxfVFJDSF9OVU0gICAgICAgICAgICAgICAgICAgIChXT1JEKTggDQojZGVmaW5lIFpfVERfUF9NQVhfRExfVFJDSF9OVU0gICAgICAgICAgICAgICAgICAgIChXT1JEKTgNCiNkZWZpbmUgWl9URF9QX01BWF9ETF9UUyAgICAgICAgICAgICAgICAgICAgICAgICAgKFdPUkQpNA0KI2RlZmluZSBaX1REX1BfTUFYX1VMX1RTICAgICAgICAgICAgICAgICAgICAgICAgICAoV09SRCk0ICANCg0KI2RlZmluZSBaX1REX1BfTUFYX0RMX0NDVFJDSF9OVU0gICAgICAgICAgICAgICAgICAoV09SRCkxDQojZGVmaW5lIFpfVERfUF9NQVhfVUxfQ0NUUkNIX05VTSAgICAgICAgICAgICAgICAgIChXT1JEKTENCiNkZWZpbmUgWl9URF9QX01BWF9ETF9URl9OVU0gICAgICAgICAgICAgICAgICAgICAgKFdPUkQpNjQNCiNkZWZpbmUgWl9URF9QX01BWF9ETF9URkNTX05VTSAgICAgICAgICAgICAgICAgICAgKFdPUkQpMTI4DQojZGVmaW5lIFpfVERfUF9NQVhfVUxfVEZfTlVNICAgICAgICAgICAgICAgICAgICAgIChXT1JEKTMyDQojZGVmaW5lIFpfVERfUF9NQVhfVUxfVEZDU19OVU0gICAgICAgICAgICAgICAgICAgIChXT1JEKTY0DQoNCi8qY29kaW5nIHR5cGUgbWFjcm8gZGVmaW5hdGlvbiovDQojZGVmaW5lICAgIFpfVERfUF9OT19DT0RJTkdfVFlQRSAgICAgICAgICAgICAgICAgIChXT1JEKSgweDAwKQ0KI2RlZmluZSAgICBaX1REX1BfQ0MxMl9UWVBFICAgICAgICAgICAgICAgICAgICAgICAoV09SRCkoMHgwMSkNCiNkZWZpbmUgICAgWl9URF9QX0NDMTNfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgKFdPUkQpKDB4MDIpDQojZGVmaW5lICAgIFpfVERfUF9UVVJCT19DT0RJTkdfVFlQRSAgICAgICAgICAgICAgIChXT1JEKSgweDAzKQ0KDQovKmNyYyBsZW5ndGggbWFjcm8gZGVmaW5hdGlvbiovDQojZGVmaW5lICAgIFpfVERfUF9DUkNfTEVOR1RIXzAgICAgICAgICAgICAgICAgICAgIChXT1JEKSgweDAwKQ0KI2RlZmluZSAgICBaX1REX1BfQ1JDX0xFTkdUSF8xICAgICAgICAgICAgICAgICAgICAoV09SRCkoMHgwMSkNCiNkZWZpbmUgICAgWl9URF9QX0NSQ19MRU5HVEhfMiAgICAgICAgICAgICAgICAgICAgKFdPUkQpKDB4MDIpDQojZGVmaW5lICAgIFpfVERfUF9DUkNfTEVOR1RIXzMgICAgICAgICAgICAgICAgICAgIChXT1JEKSgweDAzKQ0KI2RlZmluZSAgICBaX1REX1BfQ1JDX0xFTkdUSF80ICAgICAgICAgICAgICAgICAgICAoV09SRCkoMHgwNCkNCg0KI2RlZmluZSAgICBaX1REX1BfTUFYX1BSQUNIX0ZQQUNIX0NPREUgICAgICAgICAgICAoV09SRCk0DQoNCiNkZWZpbmUgICAgWl9URF9QX01BWF9IX1BST0NFU1MgICAgICAgICAgICAgICAgICAgKFdPUkQpMHgwOA0KDQovKk1BQy1kz+C52LrqtqjS5SovDQojZGVmaW5lICAgIFpfVERfUF9NQVhfUVVFVUVfSUQgICAgICAgICAgICAgICAgICAgIChXT1JEKTgNCiNkZWZpbmUgICAgWl9URF9QX01BWF9NQUNfRF9QRFVfU0laRSAgICAgICAgICAgICAgKFdPUkQpOA0KDQojZGVmaW5lICAgIFpfVERfUF9NQVhfSFNfU0NDSCAgICAgICAgICAgICAgICAgICAgIChXT1JEKTQNCg0KDQojZGVmaW5lICAgIFpfVERfUF9DSF9DT0RFX05VTSAgICAgICAgICAgICAgICAgICAgIChXT1JEKTE2DQoNCi8qy6vEo9bQR0FQuPbK/brqtqjS5SovDQojZGVmaW5lICAgIFpfVERfUF9NQVhfR0FQX05VTSAgICAgICAgICAgICAgICAgICAgIChXT1JEKTgNCg0KLypVUEHP4LnYuuq2qNLlKi8NCiNkZWZpbmUgICAgIFpfVERfUF9NQVhfRVBVQ0hfVFNfTlVNICAgICAgICAgICAgICAgKFdPUkQpNQ0KI2RlZmluZSAgICAgWl9URF9QX01BWF9FQUdDSF9OVU0gICAgICAgICAgICAgICAgICAoV09SRCk0DQojZGVmaW5lICAgICBaX1REX1BfTUFYX1NDSF9FSElDSF9OVU0gICAgICAgICAgICAgIChXT1JEKTQNCg0KLyq0q8rk0MW1wMDg0M0svfbTw9Paus3O78DtsuO1xL3Tv9rW0CovDQojZGVmaW5lICAgICBaX1REX1BfUENIICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXT1JEKTB4MA0KI2RlZmluZSAgICAgWl9URF9QX0ZBQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAoV09SRCkweDENCiNkZWZpbmUgICAgIFpfVERfUF9ETF9EQ0ggICAgICAgICAgICAgICAgICAgICAgICAgKFdPUkQpMHgyDQojZGVmaW5lICAgICBaX1REX1BfUkFDSCAgICAgICAgICAgICAgICAgICAgICAgICAgIChXT1JEKTB4Mw0KI2RlZmluZSAgICAgWl9URF9QX1VMX0RDSCAgICAgICAgICAgICAgICAgICAgICAgICAoV09SRCkweDQNCg0KLyrJ6NbDVETO78DtsuPKx7fx1vfEo8q9Ki8NCiNkZWZpbmUgICAgIFpfVERfUF9JUkFUX01PREVfU0xBVkUgICAgICAgICAgICAgICAgKFdPUkQpMCAgICAvKsno1sPOqrioxKPKvSovDQojZGVmaW5lICAgICBaX1REX1BfSVJBVF9NT0RFX01BU1RFUiAgICAgICAgICAgICAgIChXT1JEKTEgICAgLyrJ6NbDzqrW98Sjyr0qLw0KDQojaWZkZWYgUjlfU1VQUE9SVA0KI2RlZmluZSAgICBaX1REX1BfTUFYX0NBUlJJRVIgICAgICAgICAgICAgICAgIChXT1JEKTMNCg0KI2RlZmluZSBaX1REX1BfTUFYX0hTRFNDSF9SWF9QQVRURVJOX05VTSAgICAgIChXT1JEKTQNCiNkZWZpbmUgWl9URF9QX01BWF9IU0RTQ0hfVEJTX05VTSAgICAgICAgICAgICAoV09SRCk0DQojZGVmaW5lIFpfVERfUF9NQVhfRURDSF9UWF9QQVRURVJOX05VTSAgICAgICAgKFdPUkQpNA0KI2VuZGlmDQoNCi8qVEQgUFMgLT4gVEQgUEhZICC000xURSAgUFNfRVBIWS5o0sa5/cC0tcQqLw0KI2RlZmluZSBaUFNfVERTX1BfU0xFRVBfVElNRV9JTlRfSUNQX0NGICAgKFVJTlQzMikoMHgwMDAwMDAwMSkgLy/UytDtWlNQvfjLr8Pf1tC2z6OsNjMwMMq508OjrMbky/vP7sS/o6g3NTAyo6w3NTEwo6w3NTUwKbK708OjrLGjwfQNCiNkZWZpbmUgWlBTX1REU19QX1dBS0VVUF9JTlRfSUNQX0NGICAgICAgIChVSU5UMzIpKDB4MDAwMDAwMDIpIC8v0uyzo7u90NHW0LbPo6y498/uxL+2vMq508MNCiNkZWZpbmUgWlBTX1REU19QX1VQQV9JTlRfSUNQX0NGICAgICAgICAgIChVSU5UMzIpKDB4MDAwMDAwMDQpIC8vVVBByKHK/b7d1tC2z6OsuPfP7sS/trzKudPDDQojZGVmaW5lIFpQU19URFNfUF9XQUlUMjBNU19JTlRfSUNQX0NGICAgICAoVUlOVDMyKSgweDAwMDAwMDA4KSAvL82o1qpURM7vwO2y47u90NG68zIwbXPE2rK71MrQ7b34y6/D36OsNzUwMsq508OjrMbky/vP7sS/srvKudPDo6yxo8H0DQovKlREX1BIWS0+VERfUFMqLw0KI2RlZmluZSAgICBaUFNfVERTX1BfSU5UX0lDUF9DRiAgICAgICAgICAgKFVJTlQzMikoMHgwMDAwMDAwMSkgIC8vVETO78DtsuNJQ1DW0LbPuPhQU6OsualURCBQSFm7vdDRUFPKudPDo7ujqNfT1qHW0LbP0tS689PJTFBNzOG5qaOpDQojZGVmaW5lICAgIFpQU19URF9SRVFfSU5UX01BU0sgICAgICAgICAgICAgICAgICAoVUlOVDMyKSgweDAwMDAwMEZGKSAvKiovDQojZGVmaW5lICAgIFpQU19URF9JTkRfSU5UX01BU0sgICAgICAgICAgICAgICAgICAoVUlOVDMyKSgweDAwMDAwMEZGKSAvKiovDQovKlRE1vfEo8GsvdPMrChGQUNIIKGiRENIKc7vwO2y48nPsahHQVDQ6NKqv9uz/bXEyeTGtbGju6S85Lj0taXOu0NISVAsIDc1MTCw5rG+zbfOsrfWsfC/27P9MTAgMjYwLiA3NTAysOaxvs23zrK/27P9NjQgMzIwKi8NCg0KI2lmZGVmIF9DSElQX1pYMjk3NTAyDQojZGVmaW5lIFpfVERfUF9NRUFTX0RDSEdBUF9TVEFSVF9PRkYgICAgICAgICAgICAgICAgIChXT1JEKTY0DQojZGVmaW5lIFpfVERfUF9NRUFTX0RDSEdBUF9UQUlMX09GRiAgICAgICAgICAgICAgICAgIChXT1JEKTMyMA0KI2Vsc2UNCiNkZWZpbmUgWl9URF9QX01FQVNfRENIR0FQX1NUQVJUX09GRiAgICAgICAgICAgICAgICAgKFdPUkQpMTANCiNkZWZpbmUgWl9URF9QX01FQVNfRENIR0FQX1RBSUxfT0ZGICAgICAgICAgICAgICAgICAgKFdPUkQpMjYwDQojZW5kaWYNCg0KI2RlZmluZSBaX1pUUENHX1ZBTEZHX05VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV09SRCk4DQojZGVmaW5lIFpfWlRQQ0dfUEFSQU1fTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXT1JEKTI1DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiAgICAgICAgICAgICAgICAgICAgICAgICDIq77Wyv2+3cDg0M22qNLlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnR5cGVkZWYgc3RydWN0IHsNCiAgICBEV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR3VHJjaF9idWZmX29mZnNldDsgIA0KDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VGJfbnVtYmVyX2FuZF90cmNoX2lkOyAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1RiX3NpemU7DQp9VF96VERfUF91bF90cmNoX2hlYWRlcjsNCg0KdHlwZWRlZiBzdHJ1Y3Qgew0KICAgIERXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHdUcmNoX2J1ZmZfb2Zmc2V0OyAgICAgLyq4w1RyY2jK/b7d0+tEUFJBTdbQ1ri2qEJ1ZmZlcrXExvDKvMar0sbBv6Os0tRXT1JEzqq1pc67Ki8gICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUcmNoX2lkOyAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VHJjaF90eXBlOyANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDZm5fYW5kX3RiX251bWJlcjsgICAgIC8quN84Yml0zqpUYk51baOstc04Yml0zqpDRk6jqLTTv9W/2r3TytW1vcr9vt21xMbwyrxDRk6jqSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3U2ZuOyAgICAgICAgICAgICAgICAgICAvKrTTv9W/2r3TytW1vcr9vt21xMbwyrxTRk4qLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1RiX3NpemU7ICAgICAgICAgICAgICAgLyrT0NCntcRUQr/ps6S2yKOs0tRiaXTOqrWlzrujrLXNzrvM7rPkMCovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGFkZGluZzsgICANCiAgICBEV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR3Q3JjX2NoZWNrOyAgICAgICAgICAgICAvKrC0VEK/6bao0uW1xGJpdG1hcCwgaW52YWxpZCBmb3IgSFMtRFNDSCBiZWNhdXNlIEwxIHNlbmQgSFMtZGF0YSB0byBNQUMgb25seSB3aGVuIGNyYyBpcyBvayovDQp9VF96VERfUF9kbF90cmNoX2hlYWRlcjsNCg0KdHlwZWRlZiBzdHJ1Y3Qgew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1RvdGFsX2xlbmd0aDsgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdOcl90cmNoOyAgICANCg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1RmY2k7ICAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdVbF9jY3RyY2hfaWQ7ICAgICAgICAgICAgICAgICAgLyplcXVpdmFsZW50IHRvIHRmY3MgaWQsIHZhbHVlOjF+OCovDQoNCiAgICBUX3pURF9QX3VsX3RyY2hfaGVhZGVyICAgICAgICAgICAgICAgICAgIGF0VWxfdHJjaF9oZWFkZXJbWl9URF9QX01BWF9VTF9UUkNIX05VTV07DQoNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3VWxfZGF0YV9hcmVhW1pfVERfUF9NQVhfTk9fT0ZfVUxfQllURVMvMl07DQp9VF96VERfUF9tYWNfdWxfYnVmZmVyOw0KDQovKk1BQ9Przu/A7bLjvOTPwtDQRENIL0ZBQ0gvUENIyv2+3b27u6W907/atqjS5SovDQp0eXBlZGVmIHN0cnVjdCB7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VG90YWxfbGVuZ3RoOyAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdOcl90cmNoOyAgIA0KICAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUZmNpOyANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdEbF9jY3RyY2hfaWQ7ICAgICAgICAgICAgICAgICAvKmVxdWl2YWxlbnQgdG8gdGZjcyBpZCwgdmFsdWU6MX44Ki8NCg0KICAgIFRfelREX1BfZGxfdHJjaF9oZWFkZXIgICAgICAgICAgICAgICAgICAgYXREbF90cmNoX2hlYWRlcltaX1REX1BfTUFYX0RMX1RSQ0hfTlVNXTsgICANCg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0RsX2RhdGFbWl9URF9QX01BWF9OT19PRl9ETF9CWVRFUy8yXTsNCn1UX3pURF9QX21hY19kbF9idWZmZXI7DQoNCi8qTUFD0+vO78DtsuO85EhTRFBByv2+3b27u6W907/atqjS5SovDQp0eXBlZGVmIHN0cnVjdCB7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VGJTaXplOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7DQoNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3SHNkcGFEYXRhW1pfVERfUF9NQVhfTk9fT0ZfSFNEUEFfQllURVMvMl07DQp9VF96VERfUF9tYWNfSHNkcGFfQnVmOw0KDQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KINSt0++julpfUF9URkNfUE9XRVJfSU5EX0V2KCBQSFktPlVNQUMgKQ0KIMu1w/c6IA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8NCnR5cGVkZWYgc3RydWN0IHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dfaWQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGFkZGluZzsNCg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1RmY2k7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RXhjZXNzX3Bvd2VyX2ZsYWc7ICAgICAgICAgICAgICAvKiAiMCIgaXMgU3VwcG9ydGVkIHN0YXRlLT5FeGNlc3MtUG93ZXIgc3RhdGU7IjEiIGlzIEV4Y2Vzcy1Qb3dlciBzdGF0ZS0+U3VwcG9ydGVkIHN0YXRlKi8NCn1UX3pURF9QX1RGQ19QT1dFUl9JTkQ7DQoNCg0KLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiDUrdPvo7paX1BfUkFDSF9QUk9DRURVUkVfSU5EX0V2KCBQSFktPlVNQUMgKSxaX1BfRVJVQ0NIX1BST0NFRFVSRV9JTkRfRXYoIFBIWS0+VU1BQyApDQogy7XD9zogDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KdHlwZWRlZiBzdHJ1Y3Qgew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ19pZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdSZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qICIxIiBpcyBzdWNjZXNzOyAiMCIgaXMgZmFpbHVyZSovDQp9VF96VERfUF9SQUNIX1BST0NFRFVSRV9JTkQ7DQoNCg0KLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiDUrdPvo7paX1BfUkFDSF9QUk9DRURVUkVfQ05GX0V2KFBIWSAtPiBVTUFDKSxaX1BfRVJVQ0NIX1BST0NFRFVSRV9DTkZfRXYoUEhZIC0+IFVNQUMpDQogy7XD9zogDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KdHlwZWRlZiAgICBzdHJ1Y3R7DQoJV09SRAkJCQkJCQkJICAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGFkZGluZzsNCn0gVF96VERfUF9SQUNIX1BST0NFRFVSRV9DTkY7DQoNCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQog1K3T76O6Wl9QX0FCT1JUX1JBQ0hfUFJPQ0VEVVJFX1JFUV9FdiggVU1BQy0+UEhZICksWl9QX0FCT1JUX0VSVUNDSF9QUk9DRURVUkVfUkVRX0V2KCBVTUFDLT5QSFkgKQ0KIMu1w/c6IA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8NCnR5cGVkZWYgc3RydWN0IHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dfaWQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGFkZGluZzsgDQp9VF96VERfUF9BQk9SVF9SQUNIX1BST0NfUkVROw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqICAgICAgICAgICAgICAgICAgICAgICAgIEhTVVBBxeTWwyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnR5cGVkZWYgc3RydWN0IHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdIYXJxSWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdTdGF0dXM7ICAgICAgLyq4w734s8xBQ0svTkFDS73hufvQxc+ioaMwo7pBQ0ujuzGjuk5BQ0sqLw0KfVRfelREX1BfSEFSUV9QUk9DRVNTX1NUQVRVUzsNCg0KDQp0eXBlZGVmIHN0cnVjdCB7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3QWJzb2x1dGU7ICAgLyq++LbUytrIqNa1Ki8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdTZjsgICAgICAgICAgIC8qwKnGtcLro6y1zWJ5dGUstNPX87W909Kx7cq+wKnGtcLrKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUUlJJOyAgICAgICAvKrXNsMvOu7XNNbj2Yml0se3Kvsqxz7bXytS00MXPorXEzrvNvCovIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0VuaTsgICAgICAgIC8qRS1VQ0NIyv3Ev9a4yr4qLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0NvZGU7ICAgICAgICAvKsLrtcDQxc+io6zQrdLp1buxvsntsrvX9s/gudi0psDto6zWu8rHus3K/b7dz8K3orXEyrG68tTZtPi72Lj4zu/A7bLjKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdSZGlGbGFnOyAgICAvKrPW0PjW3Mba1rjKvqOsse3KvrTLytrIqMrHx7C0zsrayKi1xLPW0PijrLP1tM6z9s/WUkRJ1sMwo6y689D4s/bP1sqxo6xSREnWwzGjrLKi0K+0+MrayKgqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0VpOyAgICAgICAgIC8qz8LSu7j21tzG2sTaRS1ISUNI0MW1wLXEyv3Ev6Os0K3S6dW7sb7J7bK71/e0psDto6y72LT4uPjO78DtsuMqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1JkaUVuZEZsYWc7ICAgIA0KfVRfelREX1BfSFNVUEFfR1JBTlRfSU5GTzsNCg0KDQp0eXBlZGVmIHN0cnVjdCB7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Tm9uU2NoRmxhZzsgICAgLyrJz7Lj0K3S6dW7yse38b/J0tTXvLG4t8e197bIyv2+3bXEserKtqOsMKO6sru/ydLU17yxuKO7MaO6v8nS1Ne8sbi3x7X3tsjK/b7dKi8gDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UmVmQmV0YUU7ICAgIC8qzu/A7bLj19S8urzGy+O1xLLOv7xCZXRh1rWjrNCt0unVu9PDytrIqKOotfe2yC9TUFMvt8e197bIo6nT68bksci9z6OsyKG9z9Ch1rXX986qv8nTw7eiyeS5psLKKi8NCiNpZmRlZiBSOV9TVVBQT1JUDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3U3BzRmxhZzsgICAgLypTUFO197bIserWvqOsMKO6sru/ydLU17yxuFNQU8r9vt20q8rko6wxLS2/ydLU17yxuFNQU8r9vt20q8rkKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdEcnhBY3RpdmVGbGFnOy8qRFJYyrnE3LHq1r6jrDAtLbnYsdWjrDEtLbTyv6oqLwkNCiNlbmRpZg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BoeUNoQ29yRXhzaXN0RmxhZzsvKkUtUFVDSNPrxuTL+8Dg0M3O78Dt0MW1wLKitObT2s2s0rvX09ahzazSu8qxz7a1xLHq1r6jrNTad0VhZ2NoRmxhZ7vy1d93Tm9uU2NoRmxhZ7vy1d93U3BzRmxhZ86qMcqx09DQp6OsMC0tsruyorTmo6wxLS2yorTmKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdFYWdjaEZsYWc7ICAgIC8qtfe2yMrayKjQxc+iyse38dPQ0Ke1xLHqyrahozCjus7e0KejuzGjutPQ0KcqLw0KICAgIFRfelREX1BfSFNVUEFfR1JBTlRfSU5GTyAgICAgICAgICAgICAgICAgdEdyYW50OyAgICAgICAgLyrK2sio0MXPoqOs1rvT0NTad0VhZ2NoRmxhZ7vyd1Nwc0ZsYWfWuMq+09DQp8qxssW/ydLUtsHIoSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3SGFycUZsYWc7ICAgIC8qSEFSUdDFz6LKx7fx09DQp7XEserKtiovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3U3ViRnJhbWU7ICAgIC8q08PT2s7vwO2y48XQsfDQrdLp1bu0psDtyse38bOsyrG1xNfT1qG6xSovDQogICAgVF96VERfUF9IQVJRX1BST0NFU1NfU1RBVFVTICAgICAgICAgICAgICB0SGFycTsgICAgICAgIC8qSEFSUbWlvfizzLXEQUNLL05BQ0u94bn70MXPoiovDQp9VF96VERfUF9VUEFfR1JBTlRfSEFSUV9JTkZPOw0KDQp0eXBlZGVmIHN0cnVjdCB7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VGNoVHlwZTsgICAgICAgIC8q0MW1wMDg0M2jrLfWzqpFLVJVQ0NIus1FLURDSCovIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0hhcnFJZDsgICAgICAgIC8q08PT2rG+tM7K/b7dt6LLzbXESEFSUSC9+LPMSUSjrDB+NyovIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1JlZkJldGFFOyAgICAvKs7vwO2y47eiy83K/b7dtcTU9tLm0vLX0yovICAgICAgICAgICAgICAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdFdGZjaTsgICAgICAgICAgICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VGJTaXplOyAgICAgICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TW9kdWxlVHlwZTsgICAgLyqxvrTOt6LLzbXEtffWxre9yr0gMDpRUFNLOyAxOjE2cWFtKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdSc247ICAgICAgICAgICAgLyrI39PgsOaxvrrFo6xSU04gtcjT2jCx7cq+0MLK/b7do6xSU06089PaMLHtyr7W2LSrKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdTdWJGcmFtZTsgICAgLyrWuMq+uMO0q8rkv+m1xLeiy83X09ahusUqLyANCiNpZmRlZiBSOV9TVVBQT1JUDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3U3BzRmxhZzsgICAgLypTUFPK/b7dserWviovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGFkZGluZzsgDQojZW5kaWYNCiAgICBUX3pURF9QX0hTVVBBX0dSQU5UX0lORk8gICAgICAgICAgICAgICAgIHRHcmFudDsgLyq72LT4uPjO78DtsuO1xMrayKjQxc+ioaPKx7fx0OjSqrbByKG4w9Sqy9jE2rK/tcS++LbUytrIqNa1o6zO78DtsuPQ6NKquPm+3UhBUlG9+LPMSUS9+NDQxdC2z6Os1rvU2rX3tsjK/b7dyrHT0NCnKi8NCn0gVF96VERfUEhTVVBBX0JVRl9IRUFERVI7DQoNCnR5cGVkZWYgc3RydWN0IHsNCiAgICBUX3pURF9QSFNVUEFfQlVGX0hFQURFUiAgICAgICAgICAgICAgICAgIHRCdWZIZWFkZXI7ICAgIC8qIEhTVVBByv2+3bu6s+XH+M230MXPoiovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd0RhdGFbWl9URF9QX01BWF9OT19PRl9IU1VQQV9CWVRFUy8yXTsgIA0KfVRfelREX1BfSFNVUEFfVUxfQlVGRkVSOw0KDQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KINSt0++julRfelREX1BfbWFjX1NldF9BZ2NoX1JlcV9FdiggVU1BQy0+UEhZICkNCiDLtcP3OiDJz7Lj0K3S6dW71rjKvs7vwO2y47+qyrwvzaPWubzgzP1FLUFHQ0jQxbXAtcTD/MHuDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KdHlwZWRlZiBzdHJ1Y3Qgew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ19pZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdSZXN1bHQ7ICAgICAgIC8qINa4yr7O78DtsuPKx7fxzaPWubzgzP1FLUFHQ0jQxbXAoaMwo7q8zND4vODM/aO7MaO6zaPWubzgzP0qLw0KfVRfelREX1BfbWFjX1NldF9BZ2NoX1JlcV9FdjsNCiNpZmRlZiBSOV9TVVBQT1JUDQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KINSt0++julBfU1lOQ19DTURfUkVTUF9FViggUEhZLT5VTUFDICkNCiDLtcP3OiDU2tT2x79DZWxsLVBDSMysz8KjrM7vwO2y48rVtb1IUy1TQ0NIyc+1xM2ssr3D/MHuuvOjrLeiuMPP+8+izajWqk1BQ9f2yc/Q0M2ssr0NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovDQp0eXBlZGVmIHN0cnVjdCB7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnX2lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7IA0KfVRfelREX1BfU3luY19DbWRfUmVzcDsNCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQog1K3T76O6UF9DRUxMX1JFU0VMX1JFUV9FViggVU1BQy0+UEhZICkNCiDLtcP3OiDU2tT2x79DZWxsLUZBQ0jMrM/Co6xNQUPNqNaqzu/A7bLjo6zQocf41tjRocfrx/MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovDQp0eXBlZGVmIHN0cnVjdCB7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnX2lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7IA0KfVRfelREX1BfQ2VsbF9SZXNlbF9SZXE7DQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KINSt0++julBfQ0VMTF9SRVNFTF9DTkZfRVYoIFBIWS0+VU1BQyApDQogy7XD9zog1NrU9se/Q2VsbC1GQUNIzKzPwqOszu/A7bLju9i4tE1BQ6Os0KHH+NbY0aHIt8jPDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KdHlwZWRlZiBzdHJ1Y3Qgew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ19pZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOyANCn1UX3pURF9QX0NlbGxfUmVzZWxfQ25mOw0KI2VuZGlmDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKiAgICAgICAgICAgICAgICAgICAgICAgICBSQkPIq77WwODQzbao0uUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qMTAuMy42LjQxIE1pZGFtYmxlIFNoaWZ0IGFuZCBidXJzdCB0eXBlKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIC8qd01pZGFtYmxlX2FsbG9jYXRpb25fbW9kZTowOmRlZmF1bHQgbWlkYW1ibGUsMTpDb21tb24gbWlkYW1ibGUsMjpVRSBzcGVjaWZpYyBtaWRhbWJsZSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TWlkYW1ibGVfYWxsb2NhdGlvbl9tb2RlOw0KICAgIC8qd01pZGFtYmxlX2NvbmZpZ3VyYXRpb246SW50ZWdlcigyLDQsNiw4LDEwLDEyLDE0LDE2KSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TWlkYW1ibGVfY29uZmlndXJhdGlvbjsNCiAgICANCiAgICAvKnRoaXMgSUUgaXMgbWFuZGF0b3J5IHByZXNlbnQsd2hlbiB3TWlkYW1ibGVfYWxsb2NhdGlvbl9tb2RlIGlzIDI6VUUgc3BlY2lmaWMgbWlkYW1ibGUqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01pZGFtYmxlX3NoaWZ0Ow0KfVRfelREX1BfbWlkX3NoaWZ0X2J1cl90eXBlOw0KDQovKjEwLjMuNi41MWEgUHJhY2ggY2hhbm5lbGlzYXRpb24gY29kZSAxLjI4IE1jcHMgVEREKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIC8qDQogICAgICAgIEVudW1lcmF0ZWQoNC8xKQ0KICAgICAgICAgICAgd1NwcmVhZF9mYWN0b3IgPSA0DQogICAgICAgICAgICB3Q2hhbm5lbGlzYXRpb25fY29kZSA9IDENCiAgICAgICAgRW51bWVyYXRlZCgxNi8xKQ0KICAgICAgICAgICAgd1NwcmVhZF9mYWN0b3IgPSAxNg0KICAgICAgICAgICAgd0NoYW5uZWxpc2F0aW9uX2NvZGUgPSAxDQogICAgKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdTcHJlYWRfZmFjdG9yOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0NoYW5uZWxpc2F0aW9uX2NvZGU7DQp9VF96VERfUF9DSEFOTkVMSVNBVElPTl9DT0RFOw0KDQovKjEwLjMuNi41MWEgICAgUFJBQ0ggQ2hhbm5lbGlzYXRpb24gQ29kZSovDQp0eXBlZGVmIHN0cnVjdHsNCiAgICAvKndDaGFubmVsaXNhdGlvbl9jb2RlX251bWJlcjoxIHRvIDQqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0NoYW5uZWxpc2F0aW9uX2NvZGVfbnVtYmVyOw0KDQogICAgLypjaGFubmVsaXNhdGlvbiBsaXN0Ki8NCiAgICBUX3pURF9QX0NIQU5ORUxJU0FUSU9OX0NPREUgICAgICAgICAgICAgIGF0Q2hhbm5lbGlzYXRpb25fY29kZVtaX1REX1BfTUFYX1BSQUNIX0ZQQUNIX0NPREVdOw0KfVRfelREX1BfUHJhY2hfQ2hfY29kZTsgLyo5V29yZCovDQoNCi8qMTAuMy42LjM1YSAgRlBBQ0ggaW5mbyovDQp0eXBlZGVmIHN0cnVjdHsNCiAgICAvKndUaW1lc2xvdF9udW1iZXI6ICgwLi42KSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VGltZXNsb3RfbnVtYmVyOw0KICAgIC8qSW50ZWdlcigxLi40KSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3V3Q7DQogICAgDQogICAgLypjaGFubmVsaXNhdGlvbiBjb2RlOiAoMTYvMS4uMTYvMTYpKi8NCiAgICBUX3pURF9QX0NIQU5ORUxJU0FUSU9OX0NPREUgICAgICAgICAgICAgIHRDaGFubmVsaXNhdGlvbl9jb2RlOw0KICAgIA0KICAgIC8qMTAuMy42LjQxOlRfem1pZGFtYmxlX3NoaWZ0X2J1cnN0X3R5cGUqLw0KICAgIFRfelREX1BfbWlkX3NoaWZ0X2J1cl90eXBlICAgICAgICB0TWlkYW1ibGVfc2hpZnRfYnVyc3RfdHlwZTsNCn1UX3pURF9QX2ZwYWNoX2luZm87IC8qN1dvcmQqLw0KDQovKlBSQUNILUZQQUNIKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIC8qMTAuMy42Ljg0IFRpbWVzbG90cyBudW1iZXI6SW50ZWdlcigwLi42KSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VGltZV9zbG90X251bWJlcjsNCiAgICANCiAgICAvKjEwLjMuNi41MWEgUFJBQ0ggY2hhbm5lbGlzYXRpb24gb24gY29kZSAxLjI4IE1jcHMgVEREKi8NCiAgICBUX3pURF9QX1ByYWNoX0NoX2NvZGUgICAgICAgIHRQcmFjaF9jaGFubmVsaXNhdGlvbl9jb2RlOw0KICAgIA0KICAgIC8qMTAuMy42LjQxIE1pZGFtYmxlIHNoaWZ0IGFuZCBidXJzdCB0eXBlKi8NCiAgICBUX3pURF9QX21pZF9zaGlmdF9idXJfdHlwZSAgICAgICAgdE1pZGFtYmxlX3NoaWZ0X2J1cnN0X3R5cGU7ICAgIA0KICAgIA0KICAgIC8qMTAuMy42LjM1YSBGUEFDSCAgICBpbmZvKi8NCiAgICBUX3pURF9QX2ZwYWNoX2luZm8gICAgICAgICAgICAgICAgICAgICAgIHRGcGFjaF9pbmZvOw0KfVRfelREX1BfcHJhY2hfZnBhY2hfaW5mbzsgLyoyMFdvcmQqLw0KDQovKjEwLjMuNi45MSBVcGxpbmsgRFBDSCBwb3dlciBjb250cm9sIGluZm8qLw0KdHlwZWRlZiBzdHJ1Y3Qgew0KICAgIC8qd1VsX3RhcmdldF9zaXIgICAwOm5vdCBleGlzdCAxOmV4aXN0Ki8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdVbF90YXJnZXRfc2lyX2ZsZzoxOyAgICAgICAgDQogICAgLyp3UHJpbWFyeV9jY3BjaF90eF9wb3dlcl9mbGcgICAwOm5vdCBleGlzdCAxOmV4aXN0Ki8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQcmltYXJ5X2NjcGNoX3R4X3Bvd2VyX2ZsZzoxOyAgICAgICAgDQogICAgDQogICAgLyoNCiAgICAgICAgUmVhbCgtMTEuLjIwIGJ5IHN0ZXAgb2YgMC41ZEIpO0ZvciAxLjI4IE1jcHMgVEREIHRoaXMgcGFyYW1ldGVyDQogICAgICAgIHJlcHJlc2VudHMgUFJYZHBjaGRlcyB3aXRoIHJhbmdlIEludGVnZXIoLTEyMC4uLTU4KSBieSBzdGVwIDENCiAgICAgICAgd1VsX3RhcmdldF9zaXIgID0gKHgtKC0xMjApLzAuNSApDQogICAgICAgIA0KICAgICovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VWxfdGFyZ2V0X3NpcjsNCiAgICAvKiBJbnRlZ2VyKDEsMiwzKSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VHBjX3N0ZXBfc2l6ZTsgICANCiAgICAgICANCiAgICAvKiBJbnRlZ3IoNi4uLjUwKSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UHJpbWFyeV9jY3BjaF90eF9wb3dlcjsgICANCiAgICAvKjE6ucC8xmJlYWNvbsK3y/AgMDqyu7nAvMYqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0JlYWNvbl9wbF9lc3Q7DQoJV09SRAkJCQkJCQkJCQl3UGFkZGluZzsNCn1UX3pURF9QX3VsX2RwY2hfcG93ZXJfY3RybDsNCg0KLyoxMC4zLjYuOTYgIFVwbGluayBUaW1pbmcgQWR2YW5jZSBDb250cm9sKi8NCnR5cGVkZWYgc3RydWN0IHsNCiAgICAvKkludGVnZXIoMS4uOCkqLw0KICAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1VsX1N5bmNfU3RlcF9TaXplOw0KICAgIC8qSW50ZWdlcigxLi44KSovDQogICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VWxfU3luY19GcmVxOw0KICAgIA0KICAgIC8qMDogU3luIHBhcmFtZXRlciBub3QgZXhpc3Q7IDE6U3luIHBhcmFtZXRlciBleGlzdCovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3U3luY19QYXJhbV9GbGc7DQogICAgLypTWU5DX1VMIGNvZGVzIGJpdG1hcDogQml0c3RyaW5nKDgpKi8gICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3U3lubF91cF9jb2RlczsNCiAgICANCiAgICAvKkZQQUNIIGluZm8gMTAuMy42LjM1YSovDQogICAgVF96VERfUF9mcGFjaF9pbmZvICAgICAgICAgICAgICAgICAgICAgICB0RnBhY2hfaW5mbzsgICAgDQogICAgDQogICAgLypQUlh1cFBDSGRlczogSW50ZWdlcigtMTIwLi4tNTggYnkgc3RlcCAxKQ0KICAgICAgICB3UHJ4X3VwX3BjaF9kZXMgICAgPSAgICAoeC0oLTEyMCkpDQogICAgKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQcnhfdXBfcGNoX2RlczsNCiAgICAvKk1heCBTWU5DX1VMIFRyYW5zbWlzc2lvbnMsSW50ZWdlcigxLDIsNCw4KSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TWF4X3N5bmNfdWxfdHJhbnNtaXNzaW9uczsNCiAgICANCiAgICAvKkludGVnZXIoMCwxLDIsMykqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1Bvd2VyX3JhbXBfc3RlcDsNCiAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdVYXJGY25fZmxnOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1VwcGNoX2NoaXBfc2hpZnRfZmxnOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1VhckZjbjsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdVcHBjaF9jaGlwX3NoaWZ0Ow0KfVRfelREX1BfdWxfdGltaW5nX2FkdmFuY2U7DQoNCi8qMTAuMy42LjEwIENvbW1vbiB0aW1lc2xvdCBpbmZvKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIC8qRW51bWVyYXRlZChGcmFtZSxUaW1lc2xvdCkgICAgIDA6RnJhbWUgMTpUaW1lc2xvdCovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3U2Vjb25kX2ludGVybGVhdmluZ19tb2RlOw0KICAgIC8qVEZDSSBjb2RpbmcgICAgSW50ZWdlcig0LDgsMTYsMzIpKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDZmNpX2NvZGluZzsNCiAgICANCiAgICAvKlJlYWwoMC40MC4uMS4wICBieSBzdGVwIG9mIDAuMDQpDQogICAgICAgIHdQdW5jdHVyaW5nX2xpbWl0ICAgID0gKHgtMC40MCkvMC4wNA0KICAgICovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UHVuY3R1cmluZ19saW1pdDsNCiAgICAvKlJlcGV0aXRpb24gcGVyaW9kICAgICAgICBJbnRlZ2VyKDEsMiw0LDgsMTYsMzIsNjQpKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdSZXBldGl0aW9uX3BlcmlvZDsNCiAgICANCiAgICAvKkludGVnZXIoMS4uYlJlcGV0aXRpb25fcGVyaW9kLTEpKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdSZXBldGl0aW9uX2xlbmd0aDsNCn1UX3pURF9QX2NvbW1vbl90c19pbmZvOw0KDQoNCi8qMTAuMy42LjM3IEluZGl2aWR1YWwgdGltZXNsb3QgaW5mbyovDQp0eXBlZGVmIHN0cnVjdHsNCiAgICAvKjEwLjMuNi44NCA6SW50ZWdlcigwLi42KSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VGltZXNsb3RfbnVtYmVyOw0KICAgIC8qVEZDSSBleGlzdGVuY2UgICAwOmZhbHNlIDE6dHJ1ZSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VGZjaV9leGlzdGVuY2U7DQogICAgDQogICAgLyoxMC4zLjYuNDEgTWlkYW1ibGUgc2hpZnQgYW5kIGJ1cnN0IHR5cGUqLw0KICAgIFRfelREX1BfbWlkX3NoaWZ0X2J1cl90eXBlICAgICAgICB0TWlkYW1ibGVfc2hpZnRfYnVyc3RfdHlwZTsNCiAgICANCiAgICAvKkVudW1lcmF0ZWQoUVBTSyw4UFNLKSAwOlFQU0sgMTo4UFNLKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNb2R1bGF0aW9uOw0KICAgIC8qRW51bWVyYXRlZCgwLDEsMTYvU0YpKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdTc190cGNfc3ltYm9sczsNCiAgICANCiAgICAvKkludGVnZXIoMS4uMTUpKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdBZGRpdGlvbmFsX3RwY19zc19zeW1ib2xzX2ZsZzsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdBZGRpdGlvbmFsX3RwY19zc19zeW1ib2xzOw0KfVRfelREX1BfaW5kaXZpZHVhbF90c19pbmZvOw0KDQovKjEwLjMuNi4xNyBEb3dubGluayBjaGFubmVsaXNhdGlvbiBjb2RlcyovICAgIA0KLypDb25zZWN1dGl2ZSBjb2RlczogRmlyc3QgSW5kaXZpZHVhbCB0aW1lc2xvdCBpbmZvIGFuZCBmaXJzdCB0aW1lc2xvdCBjaGFubmVsaXNhdGlvbiBjb2RlcyovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQp0eXBlZGVmIHN0cnVjdHsNCiAgICAvKmNoYW5uZWxpc2F0aW9uIGNvZGUgOjE2L3gqLw0KICAgIFRfelREX1BfQ0hBTk5FTElTQVRJT05fQ09ERSAgICAgICAgICAgICAgdEZpcnN0X2NoYW5uZWxpc2F0aW9uX2NvZGU7DQoNCiAgICAvKmNoYW5uZWxpc2F0aW9uIGNvZGUgOjE2L3gqLw0KICAgIFRfelREX1BfQ0hBTk5FTElTQVRJT05fQ09ERSAgICAgICAgICAgICAgdExhc3RfY2hhbm5lbGlzYXRpb25fY29kZTsNCn1UX3pURF9QX2NvbnNlY3V0aXZlX2NvZGVzOw0KDQovKjEwLjMuNi4xNyovDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUeXBlOw0KICAgIHVuaW9uew0KICAgICAgICAvKkNvbnNlY3V0aXZlIGNvZGVzKi8NCiAgICAgICAgVF96VERfUF9jb25zZWN1dGl2ZV9jb2RlcyAgICAgICAgICAgIHRkb3duX2NoYW5uZWxpc2F0aW9uX2NvZGU7DQogICAgICAgICAgICANCiAgICAgICAgLypFYWNoIGJpdCBpbmRpY2F0ZXMgdGhlIGF2YWlsYWJpbGl0eSBvZiBhIGNoYW5uZWxpc2F0aW9uIGNvZGUgZm9yIFNGMTYqLw0KICAgICAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0NoYW5uZWxpc2F0aW9uX2NvZGVfYml0bWFwOw0KICAgIH10Q2hhbm5lbGlzYXRpb25fY29kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQp9VF96VERfUF9kbF9jaF9jb2RlczsNCg0KLyoNCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1NmOyAgICAgICAgICAgIC8vwKnGtdLy19OjrMih1rUxu/LV3zE2Ly8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDaENvZGVOdW07ICAgICAvL9DFtcC7r8LruPbK/aOsyKHWtToxIHRvIDE2Ly8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3Q2hDb2RlWzE2XTsgICAgLy/QxbXAu6/C66OsyKHWtTG1vVNGLy8gICAgICAgICAgICAgICAgICAgICAgICANCn1UX3pURF9QX2RsX2NoX2NvZGVzOw0KKi8NCg0KLyoxMC4zLjYuMzIgRG93bmxpbmsgVGltZXNsb3RzIGFuZCBDb2RlcyovDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBUX3pURF9QX2RsX2NoX2NvZGVzICAgICAgICAgICAgICAgICAgICAgIHREb3duX2NoYW5uZWxpc2F0aW9uX2NvZGU7DQogICAgVF96VERfUF9pbmRpdmlkdWFsX3RzX2luZm8gICAgICAgICAgICAgICB0SW5kaXZpZHVhbF90aW1lc2xvdF9pbmZvOw0KfVRfelREX1BfZGxfdHNfY29kZXNfZWxlbWVudDsNCg0KLyoxMC4zLjYuMzIqLw0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VHNfYW5kX2NoX251bWJlcjsNCiAgICBUX3pURF9QX2RsX3RzX2NvZGVzX2VsZW1lbnQgICAgICAgICAgICAgIGF0RG93bmxpbmtfdGltZXNsb3RzX2NvZGVbWl9URF9QX01BWF9ETF9UU107DQp9VF96VERfUF9kbF90c19jb2RlczsNCg0KDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUZmNzX2lkOw0KICAgIC8qdGltZSBpbmZvKi8gICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3QWN0aXZlX3RpbWU7DQoNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdEdXJhdGlvbjsNCg0KICAgIC8qMTAuMy42LjEwIENvbW1vbiB0aW1lc2xvdCBpbmZvKi8NCiAgICBUX3pURF9QX2NvbW1vbl90c19pbmZvICAgICAgICAgICAgICAgICAgIHRDb21tb25fdGltZXNsb3RfaW5mbzsNCg0KICAgIC8qMTAuMy42LjMyIERvd25saW5rICBEUENIIHRpbWVzbG90cyBhbmQgY29kZXMqLw0KICAgIFRfelREX1BfZGxfdHNfY29kZXMgICAgICAgICAgICAgICAgICAgICAgdERvd25saW5rX2RwY2hfdGltZXNsb3RfY29kZXM7DQp9VF96VERfUF9kbF9jY3RyY2hfbGlzdDsNCg0KDQovKjEwLjMuNi45NCB1cGxpbmsgY2hhbm5lbGlzYXRpb24gY29kZXMqLyAgICANCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd051bTsNCiAgICBUX3pURF9QX0NIQU5ORUxJU0FUSU9OX0NPREUgICAgICAgICAgICAgIGF0VXBsaW5rX2NoYW5uZWxpc2F0aW9uWzJdOyAgICAgICAgICAgICAgICAgICAgICAgIA0KfVRfelREX1BfdWxfY2hfY29kZXM7DQoNCi8qMTAuMy42LjMyIHVwbGluayBUaW1lc2xvdHMgYW5kIENvZGVzKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIFRfelREX1BfdWxfY2hfY29kZXMgICAgICAgICAgICAgICAgICAgICAgdFVwbGlua19jaGFubmVsaXNhdGlvbl9jb2RlOw0KICAgIFRfelREX1BfaW5kaXZpZHVhbF90c19pbmZvICAgICAgICAgICAgICAgdEluZGl2aWR1YWxfdGltZXNsb3RfaW5mbzsNCn1UX3pURF9QX3VsX3RzX2NvZGVzX2VsZW1lbnQ7DQoNCg0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VHNfYW5kX2NoYW5uZWxpc2F0aW9uX251bWJlcjsNCiAgICBUX3pURF9QX3VsX3RzX2NvZGVzX2VsZW1lbnQgICAgICAgICAgICAgIGF0VXBsaW5rX3RpbWVzbG90c19jb2RlW1pfVERfUF9NQVhfVUxfVFNdOw0KfVRfelREX1BfdWxfdGltZXNsb3RzX2NvZGVzOw0KDQoNCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1RmY3NfaWQ7DQogICAgLyp0aW1lIGluZm8qLyAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdBY3RpdmVfdGltZTsNCg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0R1cmF0aW9uOw0KICAgIA0KICAgIC8qMTAuMy42LjEwIENvbW1vbiB0aW1lc2xvdCBpbmZvKi8NCiAgICBUX3pURF9QX2NvbW1vbl90c19pbmZvICAgICAgICAgICAgICAgICAgIHRDb21tb25fdGltZXNsb3RfaW5mbzsNCg0KICAgIC8qMTAuMy42LjMyIERvd25saW5rICBEUENIIHRpbWVzbG90cyBhbmQgY29kZXMqLw0KICAgIFRfelREX1BfdWxfdGltZXNsb3RzX2NvZGVzICAgICAgICAgICAgICAgdFVwbGlua19kcGNoX3RpbWVzbG90X2NvZGVzOw0KfVRfelREX1BfdWxfY2N0cmNoX2xpc3Q7DQoNCg0KDQp0eXBlZGVmIHN0cnVjdHsNCiAgICAvKkludGVnZXIoMC4uNikqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1RpbWVzbG90X251bWJlcjsNCg0KICAgIC8qRW51bWVyYXRlZCgoMTYvMSkuLigxNi8xNikpKi8NCiAgICBUX3pURF9QX0NIQU5ORUxJU0FUSU9OX0NPREUgICAgICAgICAgICAgIHRDaGFubmVsaXNhdGlvbl9jb2RlOw0KDQogICAgLypNaWRhbWJsZSBhbGxvY2F0aW9uIG1vZGUNCiAgICAgICAgRW51bWVyYXRlZChEZWZhdWx0IE1pZGFtYmxlLENvbW1vbiBNaWRhbWJsZSxVRSBzcGVjaWZpYyBNaWRhbWJsZSkNCiAgICAgICAgd01pZGFtbGVfYWxsb2NhdGlvbl9tb2RlPTAsMSwyIA0KICAgICovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TWlkYW1ibGVfYWxsb2NhdGlvbl9tb2RlOw0KDQogICAgLypNaWRhbWJsZSBjb25maWd1cmF0aW9uDQogICAgICAgIEludGVnZXIoMiw0LDYsOCwxMCwxMiwxNCwxNikNCiAgICAqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01pZGFtYmxlX2NvbmZpZ3VyYXRpb247DQogICAgLypJbnRlZ2VyKDAuLjE1KSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TWlkYW1ibGVfc2hpZnQ7DQoNCiAgICAvKg0KICAgIEludGVnZXIoLTcuLjgpDQogICAgd0Fja19uYWNrX3Bvd2VyX29mZnNldCA9IHgtKC03KQ0KICAgIHg9d0Fja19uYWNrX3Bvd2VyX29mZnNldCAtIDcNCiAgICAqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0Fja19uYWNrX3Bvd2VyX29mZnNldDsNCiAgICAvKg0KICAgICAgICBJbnRlZ2VyKC0xMjAuLi01OCkNCiAgICAgICAgd1BSWGhzX3NpY2ggICAgPSAgIHgtKC0xMjApOw0KICAgICAgICB4ID0gd1BSWGhzX3NpY2ggLSAxMjA7ICAgICAgICANCiAgICAqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BSWGhzX3NpY2g7DQogICAgDQogICAgLyoNCiAgICAgICAgSW50ZWdlcigxLDIsMykNCiAgICAqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1RwY19zdGVwX3NpemU7DQp9VF96VERfUF9oc19zaWNoOw0KDQp0eXBlZGVmIHN0cnVjdHsNCi8qDQogICAgLy9zY2NotcS908rVxrXCyg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdTY2NoX3J4X2ZyZXE7ICAgICAgDQoqLw0KICAgIC8qSW50ZWdlcigwLi42KSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VGltZVNsb3RfbnVtYmVyOw0KDQogICAgLypmaXJzdCBDaGFubmVsaXNhdGlvbiBjb2RlKi8NCiAgICBUX3pURF9QX0NIQU5ORUxJU0FUSU9OX0NPREUgICAgICAgICAgICAgIHRGaXJzdF9jaGFubmVsaXNhdGlvbl9jb2RlOw0KICAgIA0KICAgIC8qc2Vjb25kIGNoYW5uZWxpc2F0aW9uIGNvZGUqLw0KICAgIFRfelREX1BfQ0hBTk5FTElTQVRJT05fQ09ERSAgICAgICAgICAgICAgdFNlY29uZF9jaGFubmVsaXNhdGlvbl9jb2RlOw0KDQogICAgLypNaWRhbWJsZSBhbGxvY2F0aW9uIG1vZGUNCiAgICAgICAgRW51bWVyYXRlZChEZWZhdWx0IE1pZGFtYmxlLENvbW1vbiBNaWRhbWJsZSxVRSBzcGVjaWZpYyBNaWRhbWJsZSkNCiAgICAgICAgd01pZGFtbGVfYWxsb2NhdGlvbl9tb2RlPTAsMSwyIA0KICAgICovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TWlkYW1ibGVfYWxsb2NhdGlvbl9tb2RlOw0KDQogICAgLyoNCiAgICAgICAgVGhpcyBJRSBpcyBtYW5kYXRvcnkgcHJlc2VudCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUgSUUgIk1pZGFtYmxlIEFsbG9jYXRpb24gTW9kZSINCiAgICAgICAgaXMgIlVFIHNwZWNpZmljIE1pZGFtYmxlIiBhbmQgbm90IG5lZWRlZCBvdGhlcndpc2UuDQogICAgICAgIEludGVnZXIoMC4uMTUpDQogICAgKi8gICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TWlkYW1ibGVfc2hpZnQ7DQogICAgLyoNCiAgICAgICAgSW50ZWdlcigyLDQsNiw4LDEwLDEyLDE0LDE2KQ0KICAgICovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TWlkYW1ibGVfY29uZmlndXJhdGlvbjsNCg0KICAgIC8qDQogICAgICAgICAgIHdCbGVyX3RhcmdldLXEt7bOp86qMNbBNjOju87vwO2y48rVtb2689KqKqOoLTAuMDWjqbXDtb3KtbzK1rUgDQogICAgKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdCbGVyX3RhcmdldDsNCg0KICAgIC8qc2ljaCBpbmZvKi8NCiAgICBUX3pURF9QX2hzX3NpY2ggICAgICAgICAgICAgICAgICAgICAgICAgIHRIc19zaWNoOw0KDQp9VF96VERfUF9oc19zY2NoOw0KDQp0eXBlZGVmIHN0cnVjdHsNCiAgICAvKk1pZGFtYmxlIGFsbG9jYXRpb24gbW9kZQ0KICAgICAgICBFbnVtZXJhdGVkKERlZmF1bHQgTWlkYW1ibGUsQ29tbW9uIE1pZGFtYmxlLFVFIHNwZWNpZmljIE1pZGFtYmxlKQ0KICAgICAgICB3TWlkYW1sZV9hbGxvY2F0aW9uX21vZGU9MCwxLDIgDQogICAgKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNaWRhbWJsZV9hbGxvY2F0aW9uX21vZGU7DQogICAgLypNaWRhbWJsZSBjb25maWd1cmF0aW9uDQogICAgICAgIEludGVnZXIoMiw0LDYsOCwxMCwxMiwxNCwxNikNCiAgICAqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01pZGFtYmxlX2NvbmZpZ3VyYXRpb247DQoNCiAgICAvKkludGVnZXIoMC4uMTUpKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNaWRhbWJsZV9zaGlmdDsNCn1UX3pURF9QX2hzX2Rwc2NoX21pZGFtYmxlOw0KDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdOdW1iZXJfcHJvY2VzczsNCiAgICAvKm1lbW9yeSBwYXJ0aXRpb25pbmcgMDppbXBsaWNpdCAxOmV4cGxpY2l0Ki8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNZW1vcnlfcGFydGl0aW9uaW5nOw0KDQogICAgRFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkd1Byb2Nlc3NfbWVtb3J5X3NpemVbWl9URF9QX01BWF9IX1BST0NFU1NdOw0KfVRfelREX1BfaHNfaGFycV9pbmZvOw0KDQoNCnR5cGVkZWYgc3RydWN0IHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUaW1lX3Nsb3RfbnVtYmVyOw0KICAgIFRfelREX1BfbWlkX3NoaWZ0X2J1cl90eXBlICAgICAgICAgICAgICAgdE1pZGFtYmxlX3NoaWZ0X2J1cnN0X3R5cGU7ICAgICAgICAvKkUtUFVDSLXEbWlkYW1ibGUgbW9kZda7xNzIoTC78jIqLyAgICANCn1UX3pURF9QX2VwdWNoX21pZGFtOw0KDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdTbnBsX3R5cGU7ICAgICAgICAgICAgLyowOs34suDOtNa4tqijrL/J1rG908zuU05QTD05OyAxo7p0eXBlMTsgMqO6dHlwZTIqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1ByeF9iYXNlX2RlczsgICAgICAgIC8qUmVmZXJlbmNlIGRlc2lyZWQgcG93ZXIgbGV2ZWwgZm9yIEUtUFVDSCzKtbzK1rU9eC0xMTKjrMih1rW3ts6nMC02Mi4qLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0JlYWNvbl9wbF9lc3Q7ICAgICAgICAvKjEtwrfL8LnAvMbKsb+8wsdiZWFjb26juzAtsru/vMLHKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUcGNfc3RlcF9zaXplOyAgICAgICAgLypQZS1iYXNl1tC1xHN0ZXCyzsr9oaPK/b7dt7bOp6O6MS4uMyovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UG93X2N0cmxfZ2FwOyAgICAgICAgLyrX09ahuPbK/aOsVFBDyrG85M2jttnDxc/eo6wwLi4yNTUqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1N5bmNfc3RlcF9zaXplOyAgICAvKrX31fvJz9DQtKvK5LaoyrG1xLK9s6QsMS4uOCovICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1N5bmNfZnJlcTsgICAgICAgICAgICAvKrX31fvJz9DQtKvK5LaoyrG1xMa1wsosMS4uOCovDQoJV09SRAkJCQkJCQkJCQl3UGFkZGluZzsNCn1UX3pURF9QX2VwdWNoX3B3cl9pbmZvOw0KDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUaW1lX3Nsb3RfbnVtYmVyOw0KICAgIFRfelREX1BfbWlkX3NoaWZ0X2J1cl90eXBlICAgICAgICAgICAgICAgdE1pZGFtYmxlX3NoaWZ0X2J1cnN0X3R5cGU7ICAgICAgICAgICAgICAgIA0KICAgIFRfelREX1BfQ0hBTk5FTElTQVRJT05fQ09ERSAgICAgICAgICAgICAgdEZpcnN0X2NoYW5uZWxpc2F0aW9uX2NvZGU7ICAgIA0KICAgIFRfelREX1BfQ0hBTk5FTElTQVRJT05fQ09ERSAgICAgICAgICAgICAgdFNlY29uZF9jaGFubmVsaXNhdGlvbl9jb2RlOyAgICANCn1UX3pURF9QX2hzX2VhZ2NoOw0KDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUaW1lX3Nsb3RfbnVtYmVyOw0KICAgIFRfelREX1BfbWlkX3NoaWZ0X2J1cl90eXBlICAgICAgICAgICAgICAgdE1pZGFtYmxlX3NoaWZ0X2J1cnN0X3R5cGU7ICAgICAgICAvKkUtSElDSLXEbWlkYW1ibGUgbW9kZda7xNzIoTC78jIqLw0KICAgIFRfelREX1BfQ0hBTk5FTElTQVRJT05fQ09ERSAgICAgICAgICAgICAgdENoYW5uZWxpc2F0aW9uX2NvZGU7ICAgIA0KfVRfelREX1BfaHNfZWhpY2g7DQoNCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1JkaV9pbmQ7ICAgICAgICAgICAgICAgIC8qMDpSREmyu7Tm1NogMTpSREm05tTaKi8NCg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0VhZ2NoX251bTsgICAgICAgICAgICAgICAgLypFLUFHQ0jQxbXA0MXPosHQse0qLw0KICAgIFRfelREX1BfaHNfZWFnY2ggICAgICAgICAgICAgICAgICAgICAgICAgYXRFYWdjaF9jb25maWdbWl9URF9QX01BWF9FQUdDSF9OVU1dOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1RwY19zdGVwX3NpemU7ICAgICAgICAgICAgLypFLUFHQ0i1xLmmv9iyvbOkLDEuLjMqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0VhZ2NoX2JsZXJfdGFyZ2V0OyAgICAgICAgLyrKtbzK1rU9KHgtNjMpKjAuMDWjrMih1rW3ts6nMH42MyovDQoNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdFaGljaF9udW07ICAgICAgICAgICAgICAgIC8qRS1ISUNI0MW1wNDFz6LB0LHtKi8NCiAgICBUX3pURF9QX2hzX2VoaWNoICAgICAgICAgICAgICAgICAgICAgICAgIGF0RWhpY2hfY29uZmlnW1pfVERfUF9NQVhfU0NIX0VISUNIX05VTV07DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd0VpW1pfVERfUF9NQVhfU0NIX0VISUNIX05VTV07ICAgIC8qw7+49kUtSElDSLXEserKtizIoda1t7bOpzB+MyovDQoNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdFcHVjaF9udW07ICAgICAgICAgICAgICAgIC8qRS1QVUNI0MW1wNDFz6LB0LHtKi8NCiAgICBUX3pURF9QX2VwdWNoX21pZGFtICAgICAgICAgICAgICAgICAgICAgIGF0RXB1Y2hfbWlkYW1fbGlzdFtaX1REX1BfTUFYX0VQVUNIX1RTX05VTV07DQp9VF96VERfUF9oc19zY2hfdHI7DQoNCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0V1Y2NoX251bTsgICAgICAgICAgICAgICAgICAgIC8qZS11Y2NouPbK/aOsMX44Ki8NCg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0VwdWNoX2FjdF90aW1lOyAgICAgICAgICAgICAgIC8qRS1QVUNIxvDQp9ahusWjrDB+MjU1Ki8gICAgICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0VwdWNoX3N1Yl9mcmFtZTsgICAgICAgICAgICAgIC8qRS1QVUNIxvDQp9fT1qG6xaOsMH4xKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdFcHVjaF9yZXBfcHJkOyAgICAgICAgICAgICAgICAvKkUtUFVDSNbYuLTW3Mbao6wxLzIvNC84LzE2LzMyuPZUVEkqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0VwdWNoX3JlcF9sZW47ICAgICAgICAgICAgICAgIC8qRS1QVUNI18rUtLOktsijrMih1rUxLi53RXB1Y2hfcmVwX3ByZC0xLHdFcHVjaF9yZXBfcHJkPTHKscih1rXOqjEqLw0KCVdPUkQJCQkJCQkJCQkJd0VwdWNoX3Bycmk7ICAgICAgICAgICAgICAgICAgIC8qRS1QVUNI1+6087mmwsrXytS0o6wxfjMyKi8NCg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0VwdWNoX251bTsgICAgICAgICAgICAgICAgICAgIC8qRS1QVUNI0MW1wNDFz6LB0LHtKi8gICAgDQogICAgVF96VERfUF9lcHVjaF9taWRhbSAgICAgICAgICAgICAgICAgICAgICBhdEVwdWNoX21pZGFtX2xpc3RbWl9URF9QX01BWF9FUFVDSF9UU19OVU1dOy8qRS1QVUNIyrHPtrrNTWlkwuvQxc+iKi8NCiAgICBUX3pURF9QX0NIQU5ORUxJU0FUSU9OX0NPREUgICAgICAgICAgICAgIHRDaGFubmVsaXNhdGlvbl9jb2RlOyAgICAgICAgICAvKkUtUFVDSNDFtcC7r8LrKi8NCg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0VoaWNoX3NpZ19ncm91cF9pZHg7ICAgICAgICAgIC8qRS1ISUNI0MW1wMv5yrnTw7XEU2lnbmF0dXJlU2VxSW5kZXijrDB+MTkuMjUyMjEgNUEuMy4xNyovDQogICAgVF96VERfUF9oc19laGljaCAgICAgICAgICAgICAgICAgICAgICAgICB0RWhpY2hfY29uZmlnOyAgICAgICAgICAgICAgICAgLypFLUhJQ0jQxbXAxeTWwyovDQp9VF96VERfUF9oc19ub25fc2NoX3RyOw0KDQp0eXBlZGVmIHN0cnVjdHsgIC8qTDHKudPDyc/Q0ERQQ0jKsc+2us3QxbXAu6/C68C0vajBosnP0NBEUENIus1QTENDSLXE07PJ5LnYz7UqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1VsX2RwY2hfdHM7ICAgICAgICAgICAgICAgICAgLypQTENDSMv5ttTTpsnP0NBEUENIyrHPtiovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGxjY2hfc2VxX251bTsgICAgICAgICAgICAgICAvKjEuLjE0o6y6rNLltP2y6SovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGxjY2hfdHM7ICAgICAgICAgICAgICAgICAgICAvKjAuLjYqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1RwY190YXJnZXRfcmF0ZTsgICAgICAgICAgICAgLyowLi4xMCovDQogICAgVF96VERfUF9DSEFOTkVMSVNBVElPTl9DT0RFICAgICAgICAgICAgICB0VWxfZHBjaF9jaGFubmVsc2F0aW9uX2NvZGU7ICAvKlBMQ0NIy/m21NOmyc/Q0ERQQ0jC6yovDQogICAgVF96VERfUF9DSEFOTkVMSVNBVElPTl9DT0RFICAgICAgICAgICAgICB0UGxjY2hfY2hhbm5lbGlzYXRpb25fY29kZTsNCn1UX3pURF9QX3BsY2NoX2luZm87DQojaWZkZWYgUjlfU1VQUE9SVA0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdIc19zY2NoX3JlY3ZfZnJlcTsvKkhTLVNDQ0gvSFMtU0lDSLbU06a1xMa1teMqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGFkZGluZzsNCiAgICBUX3pURF9QX2hzX3NjY2ggICAgICAgICAgICAgICAgICAgICAgICAgdEhzX3NjY2hfY29uZmlndXJhdGlvbjsNCn1UX3pURF9QX21jX2hzX3NjY2g7DQoNCi8qUnggb3IgVHggUGF0dGVybiovDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UmVwZXRpdGlvbl9wZXJpb2Q7LyrW2Li01tzG2qOsyKHWtbe2zqcxLDIsNCw4LDE2LDMyKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UmVwZXRpdGlvbl9sZW5ndGg7IC8q1ti4tLOktsijrMih1rW3ts6nMS4uYlJlcGV0aXRpb25fcGVyaW9kLTGjrLWxd1JlcGV0aXRpb25fcGVyaW9kPTHKsbjD1rXO3tCnKi8NCn1UX3pURF9QX3BhdHRlcm47DQovKkhzZHNjaCBzcHOy2df3ttTTprXESGFycdDFz6IqLw0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgIHdOdW1iZXJfcHJvY2VzczsvKkhzLXNjY2ggc3BzstnX98v5xNzKudPDtcRIQVJRvfizzLj2yv2jrMih1rW3ts6nMX44Ki8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7DQogICAgRFdPUkQgICAgICAgICAgICAgICAgICAgICAgIGR3UHJvY2Vzc19tZW1vcnlfc2l6ZTsvKkhzLXNjY2ggc3BzstnX98v5xNzKudPDtcTX3LXE0OnE4klSIGJ1ZmZlcrXEtPPQoaOsyKHWtbe2zqejujgwMH4xNjAwMCBieSBzdGVwIG9mIDgwMKOsDQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc2MDB+MzIwMDAgYnkgc3RlcCBvZiAxNjAwo6wzNjAwMH44MDAwMCBieSBzdGVwIG9mIDQwMDCjrDg4MDAwfjE2MDAwMCBieSBzdGVwIG9mIDgwMDCjrCAxNzYwMDB+MzA0MDAwIGJ5IHN0ZXAgb2YgMTYwMDAqLw0KfVRfelREX1BfaHNkc2NoX3Nwc19oYXJxX2luZm87DQovKtPD09pzcHOy2df3tcRIcy1kc2NowuvXytS00MXPojq1sXdTdGFydENvZGVJbmZvttTTps6qMTYvMTajrHdTdG9wQ29kZUluZm+21NOmzqoxLzE2yrGjrLHtyr5TRs6qMSovDQoNCnR5cGVkZWYgc3RydWN0DQp7CQ0KICAgIFdPUkQJICAgICAgICAgICAgICAgIHdTdGFydENvZGVJbmZvOwkvKsbwyrzQxbXAu6/C69DFz6I7yKHWtc6qMKGtLjE1O7fWsfC21NOmtcTQxbXAu6/C686qMS8xNqGtLi4xNi8xNiovDQogICAgV09SRAkgICAgICAgICAgICAgICAgd1N0b3BDb2RlSW5mbzsvKr3hyvi1xNDFtcC7r8Lr0MXPojvIoda1zqowoa0uMTU7t9ax8LbU06a1xNDFtcC7r8LrzqoxLzE2oa0uLjE2LzE2Ki8NCn1UX3pURF9QX2NvZGVfcmVzb3VyY2VfaW5mbzsNCg0KLypIcy1kc2NottTTprXEs/XKvHNwc9DFz6IqLw0KdHlwZWRlZiBzdHJ1Y3QNCnsNCiAgICBXT1JECQkJCQkJICAgICAgICAgICAgICAgIHdUc0luZm87Lyq31sXktcTTw9Pac3BztcRIcy1wZHNjaLbU06a1xMqxz7bQxc+io6y1zc7lzrvT0NCno6zWuLaozrvWw867se3Kvs/g06bKsc+208PT2nNwc7LZ1/ehoyovCQkJDQogICAgV09SRAkJCQkJCSAgICAgICAgICAgICAgICB3QWN0VGltZTsvKryku+7Ksbzko6zIoda1t7bOpzB+MjU1Ki8NCiAgICBXT1JECQkJCQkJICAgICAgICAgICAgICAgIHdTdWJGcmFtZU51bTsgLyrX09ahusWjrMih1rUwo6wxKi8NCiAgICBXT1JECQkJCQkJICAgICAgICAgICAgICAgIHdJbml0VGJzSWR4Oy8qs/XKvFRic8v30v26xaOsyKHWtbe2zqcwfjMqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0luaXRSeFBhdHRlcm5JZHg7IC8qs/XKvFJ4UGF0dGVybsv30v26xaOsyKHWtbe2zqcwfjMqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0hzc2ljaElkeDsgICAvKmhzc2ljaMv30v26xaOsyKHWtbe2zqcwfjMqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01vZDsgIC8qyKHWtTCx7cq+bW9kUVBTS6OsMbHtyr4gbW9kMTZRQU0qLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7IA0KICAgIFRfelREX1BfY29kZV9yZXNvdXJjZV9pbmZvCSAgICAgICAgICAgICAgICB0Q29kZVJlc291cmNlSW5mbzsJLypIUy1QRFNDSNDFtcC7r8Lr0MXPoqO7tbFTdGFydM6qMTajrHN0b3DOqjHKsaOsse3KvnNmzqoxKi8NCn1UX3pURF9QX2luaXRfaHNkc2NoX3Nwc19pbmZvOw0KLypFZGNottTTprXEs/XKvHNwc9DFz6IqLw0KdHlwZWRlZiBzdHJ1Y3QNCnsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0V1Y2NoX251bTsvKmUtdWNjaLj2yv2jrDF+OCovDQogICAgV09SRAkJCQkJCSAgICAgICAgIHdUc0luZm87Lyq31sXktcTTw9Pac3BztcRFLURDSLbU06a1xMqxz7bQxc+io6y1zc7lzrvT0NCno6zWuLaozrvWw867se3Kvs/g06bKsc+208PT2nNwc7LZ1/cqLw0KICAgIFdPUkQJCQkJCQkgICAgICAgICB3RXB1Y2hfcHJyaTsvKkUtUFVDSNfutPO5psLK18rUtKOsMX4zMiovDQogICAgV09SRAkJCQkJCSAgICAgICAgIHdBY3RUaW1lOy8qvKS77sqxvOSjrMih1rW3ts6nMH4yNTUqLw0KICAgIFdPUkQJCQkJCQkgICAgICAgICB3U3ViRnJhbWVOdW07LyrX09ahusWjrMih1rUwo6wxKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0luaXRUeFBhdHRlcm5JZHg7IC8qs/XKvFR4UGF0dGVybsv30v26xaOsyKHWtbe2zqcwfjMqLw0KICAgIFRfelREX1BfQ0hBTk5FTElTQVRJT05fQ09ERQkgICAgICAgICB0Q29kZVJlc291cmNlSW5mbzsJLypFZGNo0MW1wLuvwuvQxc+iKi8NCn1UX3pURF9QX2luaXRfZWRjaF9zcHNfaW5mbzsNCg0KLypIU0RTQ0i1xFNQU9DFz6IqLw0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICB3SHNzaWNoTnVtOyAvKmhzLXNpY2jQxbXAuPbK/SovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGF0dGVybk51bTsvKlJ4IFBhdHRlcm649sr9o6zIoda1t7bOpzF+NCovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VGJzTnVtOyAvKlRiIHNpemW49sr9o6zIoda1t7bOpzF+NCovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICB3SW5pdFNwc0luZm9GZzsvKjA6dEluaXRTcHNJbmZvzt7Qp6O7MTp0SW5pdFNwc0luZm/T0NCnKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3VGJzW1pfVERfUF9NQVhfSFNEU0NIX1RCU19OVU1dOy8qw7+49lRiU2l6ZbXEy/fS/aOsyKHWtbe2zqcxfjYzKi8NCgkNCiAgICBUX3pURF9QX3BhdHRlcm4gICAgICAgICAgICAgICAgIGF0UnhQYXR0ZXJuIFtaX1REX1BfTUFYX0hTRFNDSF9SWF9QQVRURVJOX05VTV07DQogICAgVF96VERfUF9oc2RzY2hfc3BzX2hhcnFfaW5mbyAgICB0SGFycUluZm87IA0KICAgIFRfelREX1BfaHNfc2ljaCAgICAgICAgICAgICAgICAgYXRIc3NpY2ggW1pfVERfUF9NQVhfSFNfU0NDSF07DQogICAgVF96VERfUF9pbml0X2hzZHNjaF9zcHNfaW5mbyAgICB0SW5pdFNwc0luZm87DQp9VF96VERfUF9oc2RzY2hfc3BzX2luZm87DQovKkVEQ0i1xFNQU9DFz6IqLw0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RWhpY2hfc2lnX2dyb3VwX2lkeDsgLypFLUhJQ0jQxbXAy/nKudPDtcRTaWduYXR1cmVTZXFJbmRleKOsMH4xOS4yNTIyMSA1QS4zLjE3Ki8gDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3SW5pdFNwc0luZm9GZzsvKjA6dEluaXRTcHNJbmZvzt7Qp6O7MTp0SW5pdFNwc0luZm/T0NCnKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhdHRlcm5OdW07IC8qVHhQYXR0ZXJuuPbK/SovDQogICAgVF96VERfUF9wYXR0ZXJuICAgICAgICAgICAgICAgICAgICAgICBhdFR4UGF0dGVybiBbWl9URF9QX01BWF9FRENIX1RYX1BBVFRFUk5fTlVNXTsgIA0KICAgIFRfelREX1BfaHNfZWhpY2ggICAgICAgICAgICAgICAgICAgICAgdEVoaWNoX2NvbmZpZzsgIA0KICAgIFRfelREX1BfaW5pdF9lZGNoX3Nwc19pbmZvICAgICAgICAgICAgdEluaXRTcHNJbmZvOw0KfVRfelREX1BfZWRjaF9zcHNfaW5mbzsNCi8qv9jWxtDFtcBIU1NDQ0ggRFJYstnX99DFz6IqLw0KdHlwZWRlZiBzdHJ1Y3QgeyANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdJbmFjdGl2aXR5X3RocmVzaG9sZF9mbGc7CS8qMS2x7cq+d0luYWN0aXZpdHlfdGhyZXNob2xk09DQp6O7MC2x7cq+d0luYWN0aXZpdHlfdGhyZXNob2xkzt7QpyovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RW5hYmxpbmdfZGVsYXk7CS8qxvDQp9HTs9mjrLWlzrujus7ez9/WoaOsyKHWtbe2zqcwo6wxo6wyo6w0o6w4o6wxNqOsMzKjrDY0o6wxMjijrGluZmluaXR5o6gweGZmZmajqSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RHJ4X2N5Y2xlOy8qRFJY1tzG2qOstaXOu9fT1qGjrMih1rW3ts6nMaOsMqOsNKOsOKOsMTajrDMyo6w2NKOsMTI4Ki8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdJbmFjdGl2aXR5X3RocmVzaG9sZDsvKkRSWNbcxtq1xMilvKS77sPFz96jrLWlzrujutfT1qGjrMih1rW3ts6nMaOsMqOsNKOsOKOsMTajrDMyo6w2NKOsMTI4o6wyNTajrDUxMqOsaW5maW5pdHmjrL32tbF3SW5hY3Rpdml0eV90aHJlc2hvbGRfZmxnzqoxyrHT0NCnKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdEcnhfb2Zmc2V0OyAvKkRSWMar0sajrLWlzrvX09aho6zIoda1t7bOpzChrTYzKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KfVRfelREX1BfaHNzY2NoX2N0cmxfY2hfZHJ4Ow0KLyq/2NbG0MW1wEVBR0NIIERSWLLZ1/fQxc+iKi8NCnR5cGVkZWYgc3RydWN0IHsgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RHJ4X2N5Y2xlOy8qRFJY1tzG2qOstaXOu9fT1qGjrMih1rW3ts6nMaOsMqOsNKOsOKOsMTajrDMyo6w2NKOsMTI4Ki8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdEcnhfb2Zmc2V0Oy8qRFJYxqvSxqOstaXOu9fT1qGjrMih1rW3ts6nMKGtNjMqLw0KfVRfelREX1BfZWFnY2hfY3RybF9jaF9kcng7DQovKrmyz+3QxbXAtcTNrLK9z6IqLw0KdHlwZWRlZiBzdHJ1Y3QgeyANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd091dF9vZl9zeW5jX3dpbjsgLyrKp7K9tLCjrDQwLDgwLDE2MCwzMjAsNjQwLLWlzrttcyovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdIc3NjY2hfdHBjX3N0ZXBfc2l6ZTsvKrWxz8LQ0ERQQ0ihokVBR0NItrzDu9PQxeTWw8qxuMPWtdPQ0Keju8ih1rXOqjGjrDKjrDMqLw0KICAgIC8qTjMxMixOMzEzLE4zMTUqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TjMxMjsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd04zMTM7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdOMzE1OyANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7DQp9VF96VERfUF9zaGFyZV9jaF9zeW5jX3BhcmE7DQovKlBDSCDMrM/CRFBB07PJ5LW9RENDSC9EVENIyrGjrLbU06a1xMXk1sPQxc+iKi8NCnR5cGVkZWYgc3RydWN0DQp7CQ0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmVjX3dpbl9zaXplOy8qRENDSC9EVENIttTTprXEvdPK1bSwtPPQoaOsMX4xNqOstaXOu6O619PWoSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgIHdIX3JudGk7Lyq908rVz8LQ0EhTLVNDQ0jKsdPDtb21xFVFILHqyrYqLw0KICAgIFdPUkQJICAgICAgICAgICAgICAgICAgICAgICB3QmNjaEhybnRpOyAvKtTaz8LQ0LXa0rvM9UhTLVNDQ0jJz73TytVCQ0NIyc+1xM/7z6LKsdPDtb21xNeo08NVRbHqyrYqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICB3SFNfc2NjaF9udW07LypIUy1TQ0NIuPbK/SovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KICAgIFRfelREX1BfaHNfZHBzY2hfbWlkYW1ibGUgICAgICB0SHNfcGRzY2hfbWlkYW1ibGVfY2ZnOw0KICAgIFRfelREX1BfaHNfc2NjaCAgICAgICAgICAgICAgICBhdEhzX3NjY2hfY29uZmlndXJhdGlvbltaX1REX1BfTUFYX0hTX1NDQ0hdOyAvKkhTLVNDQ0jF5NbD0MXPoqOs08PT2kJDQ0i6zURDQ0gvRFRDSL3TytWjrL3TytVCQ0NIyrHWu7zgzP212tK7zPVIcy1TY2No0MW1wCovDQogICAgVF96VERfUF9oc19oYXJxX2luZm8gICAgICAgICAgIHRIc19oYXJxX2luZm87DQp9VF96VERfUF9EY2NoX2R0Y2hfcmVjX3BhcmE7DQovKkRQQdOzyeS1vVBDQ0jKsaOsttTTprXExeTWw9DFz6IqLw0KdHlwZWRlZiBzdHJ1Y3QNCnsJDQogICAgVF96VERfUF9oc19kcHNjaF9taWRhbWJsZSAgICAgICAgICB0SHNfcGRzY2hfbWlkYW1ibGVfY2ZnOw0KICAgIFRfelREX1BfY29kZV9yZXNvdXJjZV9pbmZvICAgICAgICAgdENvZGVfcmVzX2luZm87DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3U3ViQ2hTaXplOy8q0bC69NfT0MW1wLTz0KGjrLWlzrujutaho7sxfjMqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1Ric051bTsvKlRCUyBsaXN0ttTTprXEuPbK/SovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd1Ric0xpc3RbMl07DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VHJyaTsgLyq/ydPD09pIU1BEU0NItcTKsc+218rUtNDFz6KjrGJpdDDWw867serKtlRTML/J08OjrGJpdDHWw867serKtlRTMr/J08OjrC4uLmJpdDXWw867serKtlRTNr/J08OjrLXNNs6709DQp6O7VFMxsrvTwyovDQp9VF96VERfUF9wY2NoX3JlbGF0ZV9pbmZvOw0KLyq1sUNlbGwtRkFDSMys1qez1khTRFNDSLXERFJYstnX98qxo6y21NOmtcREUljQxc+iKi8NCnR5cGVkZWYgc3RydWN0DQp7CQ0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICB3VDMyMTsvKrzgzP22qMqxxvejrMih1rW3ts6no7oxMDCjrDIwMKOsNDAwo6w4MDBtcyovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgIHdEcng7LyrIoda1t7bOp6O7NKOsOKOsMTajrDMy1qEqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICB3UnhfYnVyc3Q7IC8qyKHWtbe2zqejuzGjrDKjrDSjrDijrDE21qEqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICB3UGFkZGluZzsNCn1UX3pURF9QX2ZhY2hfZHBhX2RyeF9pbmZvOw0KLyrF5NbDuPhMMbXEuau5skVSTlRJwdCx7SovDQp0eXBlZGVmIHN0cnVjdCB7DQogICAgV09SRAkJCQkgICAgIHdTdGFydEVybnRpOy8qMTZiaXS1xMbwyrxFLVJOVEnQxc+iKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgd0dyb3VwTnVtOyAvKre2zqcxLi4uMzIqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICB3RXJudGlOdW1QZXJHcm91cDsgIC8qyKHWtTEuLi4yKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7ICANCn1UX3pURF9QX0NvbW1vbkVybnRpSW5mbzsNCg0KLyrF5NbDRkFDSLvySURMRcysz8K1xERQQdDFz6IqLw0KdHlwZWRlZiBzdHJ1Y3QNCnsJDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgIHdQb3dlcl9jdHJsX2dhcDsgLypIUy1TSUNItcS0q8rkvOS49MPFz96jrNfT1qG49sr9o6wwfjI1NSovICAgICAgICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICB3UGxfY29tcGVuc2F0aW9uX3N3aXRjaDsgLyoxOkhTLVNJQ0jKtbzKtKvK5LzkuPTQodPaw8XP3sqx0OjX98K3y/CyubOlIDA6srvX98K3y/CyubOlKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgd0hfcm50aV90eXBlOyAvKkhSTlRJtcTA4NDNo7swLbmrubJIUk5USaO7MS3XqNPDSFJOVEkqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICB3SF9ybnRpOy8qvdPK1c/C0NBIUy1TQ0NIyrHTw7W9tcRVRSCx6sq2Ki8NCiAgICBXT1JECSAgICAgICAgICAgICAgICAgICAgd0JjY2hIcm50aTsgLyrU2s/C0NC12tK7zPVIUy1TQ0NIyc+908rVQkNDSMnPtcTP+8+iyrHTw7W9tcTXqNPDVUWx6sq2Ki8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgd1RzMEluZDsvKjGjurHtyr7N+LLg1MrQ7b2rz8LQ0EhTUERTQ0jTw9PaVHMwo6wwo7qx7cq+srvUytDtKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgd0hTX3NjY2hfbnVtOy8qSFMtU0NDSLj2yv0qLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICB3SHNkcGFfZHJ4X2ZnOy8qMaO6tbHHsEhzZHBh1qez1kRSWLLZ1/ejuzCjurK71qez1kRyeLLZ1/eju3dIX3JudGlfdHlwZT09Mcqx09DQpyovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KDQogICAgVF96VERfUF9oc19zY2NoICAgICAgICAgICAgIGF0SHNfc2NjaF9jb25maWd1cmF0aW9uW1pfVERfUF9NQVhfSFNfU0NDSF07DQogICAgVF96VERfUF9oc19kcHNjaF9taWRhbWJsZSAgIHRIc19wZHNjaF9taWRhbWJsZV9jZmc7DQogICAgVF96VERfUF9oc19oYXJxX2luZm8gICAgICAgIHRIc19oYXJxX2luZm87CQ0KICAgIFRfelREX1BfZmFjaF9kcGFfZHJ4X2luZm8gICB0SHNkcGFfZHJ4X2luZm87CQ0KfVRfelREX1BfZmFjaF9kcGFfaW5mbzsNCi8qRkFDSLvySURMRcysz8K1xNT2x79VcGHF5NbDKi8NCnR5cGVkZWYgc3RydWN0DQp7CQ0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgIHdFX3JudGlfdHlwZTsvKrWxx7DKudPDRS1STlRJwODQzaOso7sxLdeo08NFUk5USaO7MC25q7myRVJOVEkqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgIHdFX3JudGk7IC8q16jTw7XERVJOVEmjrL32tbF3RV9ybnRpX3R5cGU9Mcqx09DQpyAqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgIHdSZXNldF9mbGc7IC8qMDpub3QgcmVzZXQgMTpyZXNldCovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgd0hhcnFfaW5mbzsgLyoqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgIHdOX2VoaWNoOyAvKkUtUFVDSLrNRS1ISUNIz+C49LXEyrHPtsr9LDR+MTUqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgIHdQcmltYXJ5X2NjcGNoX3R4X3Bvd2VyOy8qIEludGVnZXIoNi4uNDMpZEJtICAgICovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgd01heF9hbGxvd2VkX3VsX3R4X3Bvd2VyOy8qSW50ZWdlcigtNTAuLjMzKSAgICAgICAgYk1heF9hbGxvd2VkX3VsX3R4X3Bvd2VyID0gKHggLSgtNTApKSAgICAgKi8NCglXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICB3VXBwY2hfY2hpcF9zaGlmdF9mbGc7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgd1VwcGNoX2NoaXBfc2hpZnQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7DQogICAgVF96VERfUF9Db21tb25Fcm50aUluZm8gICAgICAgdENvbW1vbkVybnRpOw0KICAgIFRfelREX1BfZXB1Y2hfcHdyX2luZm8gICAgICAgIHRFcHVjaF9wd3JfaW5mbzsgDQogICAgVF96VERfUF9oc19zY2hfdHIgICAgICAgICAgICAgdEhzX3NjaF90cl9pbmZvOyANCn1UX3pURF9QX2ZhY2hfdXBhX2luZm87DQovKsXk1sNQQ0jMrM/CtcREUEHQxc+iKi8NCnR5cGVkZWYgc3RydWN0DQp7CQ0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUczBJbmQ7Lyoxo7qx7cq+zfiy4NTK0O29q8/C0NBIU1BEU0NI08PT2lRzMKOsMKO6se3KvrK71MrQ7SovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0RjY2hfZHRjaF9yZWNfZmc7Lyq1scewyse38dans9a908rVRFRDSLrNRENDSKO7MKO6srvWp7PWo7sxo7rWp7PWKi8NCgkNCiAgICBUX3pURF9QX0RjY2hfZHRjaF9yZWNfcGFyYSAgICAgICB0RGNjaF9kdGNoX3JlY19wYXJhOyAvKkRjY2gvRHRjaMnPtcS908rVxeTWw9DFz6KjrL32tbF3RGNjaF9kdGNoX3JlY19mZz0xyrHT0NCnKi8NCiAgICBUX3pURF9QX3BjY2hfcmVsYXRlX2luZm8gICAgICAgICB0UGNjaF9pbmZvOyAvKlBjY2jJz7XEvdPK1cXk1sPQxc+io6y99rWxd0RjY2hfZHRjaF9yZWNfZmc9MMqx09DQpyovDQp9VF96VERfUF9wY2hfZHBhX2luZm87DQoNCiNlbmRpZg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqICAgICAgICAgICAgICAgICAgICAgICAgIENTUsirvtbK/b7dwODQzbao0uUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp0eXBlZGVmIHN0cnVjdHsgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdGcmVxX3N0YXJ0X3JhbmdlOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0ZyZXFfZW5kX3JhbmdlOyAgICAgICAgICAgICAgICAgICAgICAgICANCn1UX3pURF9QX2ZyZXF1ZW5jeV9yYW5nZTsNCiAgICAgICAgICANCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0ZyZXF1ZW5jeTsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdSc3NpOw0KfVRfelREX1Bfc2Nhbl9yZXN1bHQ7DQoNCnR5cGVkZWYgc3RydWN0eyAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDZWxsX3BhcmFtZXRlcl9pZDsgICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGNjcGNoX3JzY3A7ICANCn1UX3pURF9QX2NlbGxfcGFyYW1zOw0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICBSUkMtPlBIWQ0KICAgILmmxNw6DQogICAgICAgIL/JxNyz9s/WtcTU2rP1yrzXtMyso6xJRExFzKyjrENFTExfUENIzKyjrENFTExfVVJBzKyjrENFTExfRkFDSMyso7sNCiAgICAgICAg09C3/s7x0KHH+Mqxo6zTxc/IvdPK1XBhZ2WhonNjY3BjaLrN1K3AtLXEsuLBv8jOzvGjrNTayqPT4LXEv9XP0MqxvOTE2qOsDQogICAgICAgIL6hv+y9+NDQZnJlcSBzY2FutcS5pNf3oaMNCiAgICC94bm5Og0KICAgICAgICAgICAgICAgICAgIFRfelBfVERfZnJlcXVlbmN5X3NjYW5fcmVxDQoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnR5cGVkZWYgc3RydWN0DQp7ICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOyAgICAvL2RlbHQxMTIzDQogICAgLyrJqMPotcTGtbbOt7bOpzoxfjMyKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdOdW1GcmVxUmFuZ2U7ICAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdTZXFOdW07IC8qtqjS5bWxx7C1xMmoxrXP+8+i0PK6xSy3ts6nMC02NTUzNSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGFkZGluZzsNCiAgICAvKg0KICAgICB3RnJlcVN0YXJ0UmFuZ2U6xvDKvMa1teO1xFVBUkZDTiy3ts6nOTI1NH4xMDEyMQ0KICAgICB3RnJlcUVuZFJhbmdlOr3hyvjGtbXjtcRVQVJGQ04st7bOpzo5MjU0fjEtMTIxDQogICAgKi8NCiAgICBUX3pURF9QX2ZyZXF1ZW5jeV9yYW5nZSAgICAgICAgICAgICAgICAgIGF0RnJlcXVlbmN5UmFuZ2VbWl9URF9QX01BWF9GUkVRU0NBTl9GUkVRX05VTV07ICANCn1UX3pURF9QX2ZyZXF1ZW5jeV9zY2FuX3JlcTsNCg0KDQp0eXBlZGVmICAgc3RydWN0ew0KCVdPUkQJCQkJCQkJCSAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7DQp9VF96VERfUF9hYm9ydF9mcmVxX3NjYW5fY25mOw0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICBSUkMtPlBIWQ0KICAgILmmxNw6DQogICAgICAgICAgICAgICAgzaPWuUwxxrXCysmow+gNCiAgICC94bm5Og0KICAgICAgICAgICAgICAgIFRfelBfVERfYWJvcnRfZnJlcV9zY2FuX3JlcSy/1b3hubkNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7DQp9VF96VERfUF9hYm9ydF9mcmVxX3NjYW5fcmVxOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgUlJDLT5QSFkNCiAgICC5psTcOg0KICAgICAgICAgICAgICAgICAgICBMMc3qs8nJqMa1uvOjrM2ouf3P+8+iUF9GUkVRVUVOQ1lfU0NBTl9JTkQNCiAgICAgICAgICAgICAgICAgICDJz7GosuLBv73hufujrMnPsai1xFJTU0m1xNa1ysfSu7j2UzE2wODQzaOsuMPWtQ0KICAgICAgICAgICAgICAgICAgIM6qyrW8yrLiwb+1xFJTU0mjqGRibaOpo6sxMDCjuw0KICAgIL3hubk6DQogICAgICAgICAgICAgICAgICAgIFRfelBfVERfZnJlcXVlbmN5X3NjYW5faW5kDQoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnR5cGVkZWYgc3RydWN0DQp7ICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd05vT2ZSc3NpTWVhczsgICAgIC8qt7W72LXEUlNTSbLiwb+94bn7tcTK/cS/LLe2zqc6MX4zMiAqLyAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1NlcU51bTsgLyq3tbvYtcTJqMa1z/vPotDyusUst7bOpzAtNjU1MzUqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7ICAgDQogICAgLyoNCiAgICAgICAgVF9zY2FuX3Jlc3VsdDoNCiAgICAgICAgICAgICB3RnJlcXVlbmN5Osa1teO6xSy3ts6nzqo5MjU0fjEwMTIxDQogICAgICAgICAgICAgc3dSc3Npw7+49sa1teO1xFJTU0nWtSzWtbXEyrW8yre2zqfKx8q1vMrIoda1tcRSU1NJKzEwMCzQrdLpyKHWtS0xMDB+LTI1LA0KICAgICAgICAgICAgILTL19a2zsih1rXOqjB+NzUNCiAgICAqLw0KICAgIFRfelREX1Bfc2Nhbl9yZXN1bHQgICAgICAgICAgICAgICAgICAgICAgYXRSc3NpUmVzdWx0W1pfVERfUF9NQVhfUlNTSV9SRVNVTFRTX05VTV07ICAgIC8vMzIgZGVsZXRlMTEyMw0KfVRfelREX1BfZnJlcXVlbmN5X3NjYW5faW5kOw0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICBQSFktPlJSQw0KICAgILmmxNw6DQogICAgICAgINa4tqjGtbXjyc+y6dXS1ri2qMr9xL/Qocf4LMjnufu1scew0tHT0Lf+zvHQocf4LEwx0OjSqs2syrGxo7PWt/4NCiAgICDO8dChx/jNrLK9LNLUvLC908rV0bC69KGiU0NDUENIz8LQ0Mr9vt21yC7I57n7ytW1vdGwuvS1yMfpv/bQ6A0KICAgINKq1tC2z0wx0KHH+MvRy/cs1tC2z7rzTDGyu9TZz/LQrdLp1bvJz7Go0tG3os/W0KHH+NDFz6IuDQogICAgICAgIMjnufsgICAgbnVtX29mX2NlbGxfaWTIoTAsx+vH80wx1NrWuLaoxrW148nPw6TL0dChx/jC+tfjbWluX3JzY3BfDQogICAgdGhyZXNob2xkICAgIMPFz961xG51bV9vZl9yZXN1bHS49tChx/jJz7GoLg0KICAgICAgICDI57n7bnVtX29mX2NlbGxfaWTIobfHMNa1o6zH68fzTDHU2ta4tqhjZWxsX3BhcmFtZXRlcl9pZLXE0KHH+MHQDQogICAgse3W0MvRy/fC+tfjd01pblJzY3DDxc/etcTQocf4yc+xqC4NCiAgICC94bm5OlRfelBfVERfY2VsbF9zZWFyY2hfcmVxDQogICAgICAgIA0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KdHlwZWRlZiBzdHJ1Y3QNCnsgICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3U2VxTnVtOyAgICAgLyq2qNLltbHHsLXEY2VsbCBzZWFyY2jP+8+i0PK6xaGjyv2+3be2zqejujB+NjU1MzUgKi8gICAgIA0KDQogICAgLyrGtbXjusU5MjU0fjEwMTIxKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdGcmVxdWVuY3k7ICAgIA0KICAgIC8qy9HL98Dg0M0NCiAgICAgICAgMDq3tbvY1ri2qMa1teO1xNfux7/Qocf4DQogICAgICAgIDE6t7W72Na4tqjGtbXjtcTQocf4wdCx7Q0KICAgICAgICAyOre1u9jWuLaoY2VsbF9wYXJhbWV0ZXJfaWQgtcTQocf4DQogICAgKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdTZWFyY2hUeXBlOyAgIA0KDQogICAgLyrWuLaoxrW149Do0qrL0cv3tcTQocf4yv3EvyovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TnVtT2ZSZXN1bHQ7DQogICAgLyrL0cv30KHH+NDo0qrC+tfjtcTX7rXNUlNDUMPFz97WtSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TWluUnNjcFRocmVzaG9sZDsNCg0KICAgIC8q1ri2qLT9y9HL99Chx/i1xMr9xL8wOrHtyr7WuLaoxrW148Oky9HQocf4O7fHMLHtyr7U2ta4tqhjZWxsX3BhcmFtZXRlcl9pZLXE0KHH+A0KICAgIMHQse3W0MvRy/fNrMa10KHH+CovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TnVtT2ZDZWxsSWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgDQogICAgLyq0/cvRy/fQocf4tcRjZWxsX3BhcmFtZXRlcl9pZCovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd0NlbGxQYXJhbWV0ZXJJZFtaX1REX1BfTUFYX1NSSF9SRVNVTFRTX05VTV07ICAgICANCiAgICANCiAgICAvKta4yr7Qocf4U0ZOLVNGTsqxvOSy7ta1yse38bTm1Nq1xLHq1r4sw7+49tChx/jSu7j2LLbU06ZjZWxsX3BhcmFtZXRlcl9pZMHQse3W0LXE0KHH+A0KICAgICAgICAwOrK7tObU2g0KICAgICAgICAxOrTm1NoNCiAgICAqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdUaW1lRGlmZkJpdE1hcDsNCg0KICAgIC8qZGNoOrbU06ZTRk4tQ0ZOIG9ic2VydmVkIHRpbWUgZGlmZmVyZW5jZQ0KICAgICAgxuTL/Ne0zKy21NOmc2ZuLXNmbiBvYnNlcnZlZCB0aW1lIGRpZmZlcmVuY2UNCiAgICAqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdPZmZbWl9URF9QX01BWF9TUkhfUkVTVUxUU19OVU1dOyAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd1RtW1pfVERfUF9NQVhfU1JIX1JFU1VMVFNfTlVNXTsNCn1UX3pURF9QX2NlbGxfc2VhcmNoX3JlcTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIFJSQy0+UEhZDQogICAguabE3DoNCiAgICAgICAgzaPWuc7vwO2y47XE0KHH+MvRy/cNCiAgICC94bm5OlRfYWJvcnRfY2VsbF9zcmhfcmVxDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KfVRfelREX1BfYWJvcnRfY2VsbF9zcmhfcmVxOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgUEhZLT5SUkMNCiAgICC5psTcOg0KICAgICAgICDNo9a5zu/A7bLjtcTQocf4y9HL987vwO2y49OmtPANCiAgICC94bm5OlRfYWJvcnRfY2VsbF9zcmhfY25mDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nMDsNCn1UX3pURF9QX2Fib3J0X2NlbGxfc3JoX2NuZjsNCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgUEhZLT5SUkMNCiAgICC5psTcOg0KICAgICAgICDJz7Go1ri2qMa1tePJz8L61+PX7rXNUlNDUMPFz97WtbXE0KHH+LXEsuLBv73hufsNCiAgICC94bm5OlRfelBfVERfY2VsbF9zZWFyY2hfaW5kDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp0eXBlZGVmIHN0cnVjdA0Kew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1NlcU51bTsgLyq3tbvYtbHHsLXEY2VsbCBzZWFyY2jP+8+i0PK6xaGjyv2+3be2zqejujB+NjU1MzUqLw0KICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0ZyZXF1ZW5jeTsgICAgICAgICAgLyrNrLK90KHH+Mv51NrGtbXjKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdOb09mRm91bmRDZWxsczsgICAvKsvRy/e1vbXEwvrX49futc1SU0NQw8XP3rXE0KHH+Mr9xL8sMLHtyr64w8a1tePOtNXStb3Qocf4Ki8gDQoNCiAgICAvKg0KICAgICAgICBUX2NlbGxfcGFyYW1zOg0KICAgICAgICAgICAgd0NlbGxwYXJhbWV0ZXJJZDrS0b6ty9HL97W9tcTQocf4TDGx6sq2OzB+MTI3DQogICAgICAgICAgICB3UGNjcGNoUnNjcDrS0cvRy/fQocf4tcRwY2NwY2jQxbXAUlNDUDswfjkxDQogICAgICAgICAgICBzd0RlbHRhUnNjcDq1sXBjY3BjaNDFtcC1xHJzY3DWtdCh09owyrEsuMPWtbHY0aEuDQogICAgKi8NCiAgICBUX3pURF9QX2NlbGxfcGFyYW1zICAgICAgICAgICAgICAgICAgICAgIGF0Q2VsbFtaX1REX1BfTUFYX1NSSF9SRVNVTFRTX05VTV07ICAgICAgICAgICAgICAgICAgIA0KfVRfelREX1BfY2VsbF9zZWFyY2hfaW5kOw0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICBSUkMtPlBIWQ0KICAgILmmxNw6DQogICAgICAgILjDz/vPor/JxNzU2sjOus7XtMysz8K3osn6o6zTw9PayLfIz8SzuPbWuA0KICAgICAgICAgICAgICAgICAgILaotcTQocf4tcRTRk6/ydLU1f2zo73iwuuhow0KICAgIL3hubk6DQogICAgICAgICAgICAgICAgICAgVF96UF9URF9iY2hfcmVhZF9yZXENCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgIA0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KdHlwZWRlZiBzdHJ1Y3QNCnsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdCY2hQcmlvcml0eTsgLyowOrHtyr5CQ0i2wcih08XPyLy2tc3T2klETEXEo8q90bC69L3TytUo0uzGtcfpv/YpOyAgMTqx7cq+QkNItsHIodPFz8i8trjf09pJRExFxKPKvdGwuvS908rVKNLsxrXH6b/2KSovDQogICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RnJlcXVlbmN5OyAgICAgICAgICAgLyrQ6NKqveLC69Chx/jL+dTaxrW141VBUkZDTiovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Q2VsbFBhcmFtZXRlcklkOyAgICAvKtDo0qq94sLr0KHH+LXETDGx6sq2Ki8NCn1UX3pURF9QX2JjaF9yZWFkX3JlcTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIFBIWS0+UlJDDQogICAguabE3DoNCiAgICAgICAg08PT2re0wKFDUGh5X1NmbkRlY29kZV9SZXGjrLHtyr64w9Chx/i/ydLU1f3It7bByKFCQ0ihow0KICAgICAgICAgICAgICAgICAgIMHtzeLU2kRDSMG0wre9qMGio6zM7bzTuf2zzNbQo6xGV9fUtq+21LjDwbTCt7XEU0ZOvfjQ0L3iwusNCiAgICAgICAgICAgICAgICAgICCjrLKit7TAobj4TDFVo6y007b4yLfIz7jD0KHH+MrHv8nS1Mq508O1xKGjDQogICAgveG5uToNCiAgICAgICAgICAgICAgICAgIFRfelBfVERfc2ZuX2RlY29kZV9pbmQNCiAgICAgICAgICAgICAgICAgICANCiAgICDU3bK7v7zCxyAgICAgICAgDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKg0KdHlwZWRlZiBzdHJ1Y3QNCnsgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdSZXN1bHQ7ICAvLzA6c3VjY2VzcyCx7cq+0tG+rbXDtb1TRk47IDE6ZmFpbHVyZbHtyr5TRk7OtNaqOw0KfVRfelREX1Bfc2ZuX2RlY29kZV9pbmQ7DQoqLw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgUEhZLT5SUkMNCiAgICC5psTcOg0KICAgICAgICC4w8/7z6K/ycTc1NrIzrrO17TMrM/Ct6LJ+qOstPK/qkJDSLbBz7XNs9DFz6KjrA0KICAgICAgICAgICAgICAgICAgILD8wKi3/s7x0KHH+LrNz+DB2tChx/ijrM7ez+zTps/7z6Khow0KICAgIL3hubk6DQogICAgICAgIFRfelBfVERfYmNoX29wZW5fcmVxDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp0eXBlZGVmIHN0cnVjdCB7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnSWQ7ICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1R5cGU7ICAgICAgLyogtsHIocDg0M2jrDCjuta4tqi2wcihICAgMaO6wazQ+LbBz7XNs9DFz6KxqLj40K3S6dW7o6yyu8f4t9ZNaWK6zVNpYiovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RnJlcXVlbmN5OyAgICAvKtDo0qq2wcihQkNItcTQocf4y/nU2rXExrW14yovDQogICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Q2VsbFBhcmFtZXRlcklkOyAgICAvKtDo0qq2wcihQkNItcTQocf4TDGx6sq2Ki8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUaW1lRGlmZkluZDsgICAgICAgLypkY2g6ttTTplNGTi1DRk4gb2JzZXJ2ZWQgdGltZSBkaWZmZXJlbmNlOyAgxuTL/Ne0zKy21NOmc2ZuLXNmbiBvYnNlcnZlZCB0aW1lIGRpZmZlcmVuY2UgKi8NCg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd09mZjsgICAgICAgICAgICAgICAgICAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUbTsNCiAgICAvKrWxd1R5cGU9MMqxz8LD5jO49tSqy9jT0NCnLLWxTDHS1GdhcMSjyr29+NDQ1ri2qLbByKHKsaOs1rvSqtPQ0KdnYXC089Pa0ru49mJjaCBUVEmjrLy0yrlnYXCzpLbI0KHT2tbYuLSzpLbIo6zSstDo0qrIpbbByKGjrNCt0unVu8/Uyr61xL340NBCQ0hfUkVBTEVBU0UqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0JjaF9vY2Nhc2lvbjsgIC8q1ri2qLbByKG1xNbcxtq1xMbwyrzOu9bDo6y1pc67zt7P39aho6zK/b7dt7bOp6O6MH7W2Li01tzG2i0yKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdSZXBfcGVyaW9kOyAgICAvKta4tqi2wcihtcTW2Li01tzG2qOstaXOu87ez9/WoaOsyv2+3be2zqejujF+NDA5NiovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UmVwX2xlbjsgICAgICAgLyrWuLaotsHIobXE1ti4tLOktsijrLWlzrvO3s/f1qGjrMr9vt23ts6no7oyftbYuLTW3MbaLTIqLw0KfVRfelREX1BfYmNoX29wZW5fcmVxOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgUEhZLT5SUkMNCiAgICC5psTcOg0KICAgICAgICC08r+qQkNIuvNMMdbwv+nJz7Goz7XNs9DFz6LWuMq+o6zQrdLp1bvK1bW9tMvWuMq+uvMNCiAgICAgICAgICAgICAgICAgICDIpbnMtqhCdWZmZXK2wc+1zbPQxc+iyv2+3Q0KICAgIL3hubk6DQogICAgy7XD9zq4w73hubm21NOmyv2+3bTmt8XU2kRQUkFNtcTK/b7dx/jT8tbQo6y5yrC0MTZiaXS21MbroaMgICAgDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp0eXBlZGVmIHN0cnVjdCB7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3U2ZuOyAgLyq94sLrQkNIyv2+3bXEytfWobXEz7XNs9ahusUwfjQwOTUqLyANCiAgICAvKg0KICAgICAgICAwOrHtyr60q8rkv+m94sLr1f3Itw0KICAgICAgICAxOrHtyr5DUkO94sLrtO3O8zsNCiAgICAgICAgMjqx7cq+tfe2yLPlzbssQkNIw7vT0LbByKEsyv2+3c7e0KcNCiAgICAqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0NyY0NoZWNrOyAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RnJlcXVlbmN5Ow0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0NlbGxQYXJhbWV0ZXJJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOyANCiAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3RGF0YUFyZWFbWl9URF9QX01BWF9OVU1fT0ZfQkNIX0RXT1JEUyoyXTsgICANCn1UX3pURF9QX0JjaF9CdWZmZXI7DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICBQSFktPlJSQw0KICAgILmmxNw6DQogICAgICAgIMjnuftMMbbBQkNIyqew3KOs08NQX0JDSF9SRUFEX1JFSs/7z6LNqNaq0K3S6dW7DQogICAgveG5uToNCiAgICAgICAgVF96UF9URF9iY2hfb3Blbl9yZWoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnR5cGVkZWYgc3RydWN0DQp7ICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0NhdXNlOyAgIC8qMDq2wcihQkNI0+vUrVNDQ1BDSLPlzbss1MrQ7cm+s/1TQ0NQQ0jW2LbBOyAgIDE60vLQxbrFvc+y7izO3reotsHIoUJDSDsgICovICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdGcmVxdWVuY3k7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Q2VsbFBhcmFtZXRlcklkOw0KfVRfelREX1BfYmNoX29wZW5fcmVqOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgUlJDLT5QSFkNCiAgICC5psTcOg0KICAgICAgICDQrdLp1bvH68fzTDHNo9a5vdPK1c+1zbPQxc+iLMrNt8VCQ0gNCiAgICC94bm5Og0KICAgICAgICAgICAgVF96UF9URF9iY2hfcmVsZWFzZV9yZXENCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7DQp9VF96VERfUF9iY2hfcmVsZWFzZV9yZXE7DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIFBIWS0+UlJDDQogICAguabE3DoNCiAgICAgICAgTDHIt8jP0K3S6dW7zaPWub3TytXPtc2z0MXPog0KICAgIL3hubk6DQogICAgICAgICAgICBUX3pURF9QX2JjaF9yZWxlYXNlX2NuZg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGFkZGluZzA7DQp9VF96VERfUF9iY2hfcmVsZWFzZV9jbmY7DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIFJSQy0+UEhZDQogICAguabE3DoNCiAgICAgICAgUlJD1NrPtc2z0MXPorbByKHN6rPJuvOjrMjPzqrQocf4v8kNCiAgICAgICAgICAgICAgICAgICDXpMH0o6y3osvNtMvP+8+izajWqs7vwO2y47TL0KHH+M6qt/4NCiAgICAgICAgICAgICAgICAgICDO8dChx/ihow0KICAgIL3hubk6DQogICAgICAgIFRfelBfVERfY2FtcF9vbl9hX2NlbGxfcmVxDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp0eXBlZGVmIHN0cnVjdA0Kew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOyAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0ZyZXF1ZW5jeTsgIC8qt/7O8dChx/jL+dTaxrW14yovICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDZWxsUGFyYW1ldGVySWQ7IC8qt/7O8dChx/hMMbHqyrYqLw0KfVRfelREX1BfY2FtcF9vbl9hX2NlbGxfcmVxOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgUEhZLT5SUkMNCiAgICC5psTcOg0KICAgICAgICC117LjyLfIz9ekwfTQocf4oaMNCiAgICC94bm5Og0KICAgICAgICBUX3pURF9QX2NhbXBfb25fYV9jZWxsX2NuZg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KdHlwZWRlZiBzdHJ1Y3QNCnsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsgICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGFkZGluZzsNCn1UX3pURF9QX2NhbXBfb25fYV9jZWxsX2NuZjsgDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICBSUkMtPlBIWQ0KICAgILmmxNw6DQogICAgICAgICAgICDQrdLp1bvNqNaqzu/A7bLjys23xcv509DXytS0DQogICAgveG5uToNCiAgICAgICAgICAgIFRfelREX1BfUmVzZXRfcmVxDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdSZlN0YXQ7ICAgIC8qyeTGtbP1yry7r7rz17TMrKOsMaGqoarJ5Ma1v8nTw6OsMKGqoarJ5Ma1sru/ydPDKi8NCn1UX3pURF9QX1Jlc2V0X3JlcTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIFBIWS0+UlJDDQogICAguabE3DoNCiAgICAgICAgICAgIM7vwO2y482o1qrQrdLp1bvKzbfFy/nT0NfK1LS94cr4DQogICAgveG5uToNCiAgICAgICAgICAgIFRfelREX1BfcmVzZXRfY25mDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KfVRfelREX1BfcmVzZXRfY25mOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgUlJDLT5QSFkNCiAgICC5psTcOg0KICAgICAgICAgICAg0K3S6dW7zajWqs7vwO2y48Sjyr3A4NDNo6zKx0dTTSBtb2Rlu/LV31VNVFMgbW9kZaOsDQogICAgICAgICAgICC1sdCt0unVu8jPzqpURCBMMdDo0qrTw2dhcMqxvOS5pNf3yrGjrNTyyejWw86qR1NNIG1vZGWjuw0KICAgICAgICAgICAgt/HU8s6qVU1UUyBtb2Rlo7sNCiAgICAgICAgICAgIFREIEwxuPm+3cSjyr3A4NDNo6zAtMXQts+689D4uaTX99DosrvQ6NKqtci0/WdhcMqxvOTAtL340NANCiAgICC94bm5Og0KICAgICAgICAgICAgVF9zZXRfaXJhdF9tb2RlX1JlcQ0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TW9kZVR5cGVzOyAvKjAtR3NtIG1vZGWjrDEtVW10cyBtb2RlKi8gICAgICAgDQp9VF96VERfUF9zZXRfaXJhdF9tb2RlX1JlcTsNCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgUlJDLT5QSFkNCiAgICC5psTcOg0KICAgICAgICDQrdLp1bvD/MHuTDG9+Mjry6/D39e0zKws1rG1vdCt0unVuw0KICAgICAgICAgICAgICAgICAgIM2ouf1BUk20psDtxve7vdDRRFNQtKbA7cb3DQogICAgveG5uToNCiAgICAgICAgVF96UF9URF90ZF9zbGVlcF9yZXENCiAgICC0/baoDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKg0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RW5hYmxlOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7DQp9VF96VERfUF9zbGVlcF9yZXE7DQoqLw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqICAgICAgICAgICAgICAgICAgICAgICAgILLiwb/Iq77Wyv2+3cDg0M22qNLlU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDZWxsSUQ7ICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0NlbGxQYXJhOyAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDaGlwQWNjdXJhY3k7ICAvKsih1rXOqjCjrDQwo6wyNTajrDI1NjDG5NbQyKHWtc6qMMqxse3Kvs7ewuvGrL6rtsjQxc+ioaMqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1JlZlRpbWVEaWZmOyAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdSZWZQd3I7ICAgICAgICAvKlBDQ1BDSLLOv7y3osnkuabCyqOsyKHWtTYuLjQzKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdTbnBsSW5kOyAgICAgICAgLyrWuMq+yse38bLO0+tTTlBMvMbL46OsMTqyztPrIDA6sruyztPrKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUc051bTsgICAgICAgICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdUc0xpc3RbWl9URF9QX01BWF9ETF9UU107DQp9VF96VERfUF9DZWxsSW5mbzsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgICAgIFJSQzwtPlBIWQ0KICAgICAgICC5psTcOg0KICAgICAgICAgICAgICAgIFJSQ7rNUEhZsuO85LXEzazGtbLiwb/F5NbDvdO/2g0KICAgICAgICC94bm5OiAgICAgICAgDQogICAgICAgICAgICAgICAgzazGtbLiwb/F5NbDz/vPolBfSU5UUkFfRlJFUV9NRUFTX1JFUQ0KICAgICAgICAgICAgICAgIM2sxrWy4sG/veG5+8/7z6JQX0lOVFJBX0ZSRVFfTUVBU19JTkQgDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0RldGVjdGVkU2V0UXVhbnRpdHk7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TnVtYmVyT2ZDZWxsTWVhczsgICAgICAgICAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1JlZlRpbWVEaWZmSW5kOy8qtqjS5XdSZWZUaW1lRGlmZiCyzsr9uPiz9rXExquy7srHU0ZOLVNGTiB0aW1pbmcgZGlmZmVyZW5jZbvyysdTRk4tQ0ZOIHRpbWluZyBkaWZmZXJlbmNl0tS8sM/g06bKsbzksu61xMDg0M2how0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMKO6dGltaW5nIGRpZmZlcmVuY2UuMKO9U0ZOLVNGTiB0aW1pbmcgZGlmZmVyZW5jZaOsMaO9U0ZOLUNGTiB0aW1pbmcgZGlmZmVyZW5jZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMaO6dHlwZUluZC4wPVRZUEUxLDE9VFlQRTIqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd05vdE1lYXNDZWxsTnVtOy8qsrvQ6NKqsuLBv7XE0KHH+Mr9Ki8NCg0KICAgIFRfelREX1BfQ2VsbEluZm8gICAgICAgICAgICAgICAgICAgICAgICAgYXRDZWxsSW5mb1taX1REX1BfTUFYX0lOVFJBX0NFTExfTlVNXTsgIA0KICAgICAgICAgICAgICAgDQogICAgRFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkd01lYXNJZDsgICANCiAgICAgICAgICAgICAgICAgICAgIA0KICAgIERXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHdSc2NwTmVlZDsgIA0KICAgICAgICAgICAgICAgICAgIA0KICAgIERXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHdJc2NwTmVlZDsgDQoNCiAgICBEV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR3Q2VsbFN5bkluZm9yTmVlZDsgDQogICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Tm90TWVhc0NlbGxQYXJhW1pfVERfUF9NQVhfSU5UUkFfQ0VMTF9OVU1dOyAvKrK70OjSqrLiwb+1xNChx/h3Q2VsbFBhcmEgKi8NCn1UX3pURF9QX0NQaHlfSW50cmFNZWFzX1JlcTsgICAgICAgICAgICAgICAgIC8qMjczQiovDQoNCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0NlbGxJRDsgICAgICAgICAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDZWxsUGFyYTsgICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UnNjcEZsYWc6MTsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdTZm5GbGFnOjE7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MTQ7ICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdSc2NwOyAgICAgICAgICAgICANCiAgICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VHNOdW07ICAgICAgICAgICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3U2ZuOyAgICAgICAgICAgICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd09mZjsgICAgICAgICAgICAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUbTsgICAgLypEQ0jMrM/CVE3Wtc7e0KcqLyAgICAgICAgICAgIA0KDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd1RzTGlzdFtaX1REX1BfTUFYX0RMX1RTXTsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3SXNjcFtaX1REX1BfTUFYX0RMX1RTXTsgICAgDQp9VF96VERfUF9DZWxsTWVhc1JsdDsgDQoNCnR5cGVkZWYgc3RydWN0ew0KICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7DQogICANCiAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDZWxsTnVtOyAgICAgICAgICANCiAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdGYWlsQ2VsbE51bTsgICAgIA0KDQogICBUX3pURF9QX0NlbGxNZWFzUmx0ICAgICAgICAgICAgICAgICAgICAgICBhdE1lYXNSbHRMaXN0W1pfVERfUF9NQVhfSU5UUkFfQ0VMTF9OVU1dOyAvKsr91+nQocf40+vQocf4SUS21NOmKi8NCg0KICAgRFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHdNZWFzSWQ7ICAgICAgICAgICAgDQoNCiAgIERXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR3RmFpbENlbGxCaXRNYXA7IA0KfVRfelREX1BfQ1BoeV9JbnRyYU1lYXNfSW5kOyAgICAgICAvKjQyNEIqLyAgICAvKsjnufvIodfutPMzMrj20KHH+Dg0MEIqLyAgICAgICAgICAgICAgICAgICAgICANCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAgICAgUlJDPC0+UEhZDQogICAgICAgILmmxNw6DQogICAgICAgICAgICAgICAgUlJDus3O78DtsuO85LXE0uzGtbLiwb/F5NbDvdO/2g0KICAgICAgICC94bm5Og0KICAgICAgICAgICAgICAgIMa1vOSy4sG/xeTWw8/7z6IgICAgICAgICAgICAgICAgICAgUF9JTlRFUl9GUkVRX01FQVNfUkVRDQogICAgICAgICAgICAgICAgxrW85LLiwb+94bn7z/vPoiAgICAgICAgICAgICAgICAgICBQX0lOVEVSX0ZSRVFfTUVBU19JTkQNCgkJCQnDpMa1teOy4sG/s/a1xNChx/iy4sG/veG5+8nPsaggICAgIFBfSU5URVJfRlJFUV9CTElORF9NRUFTX0lORA0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyogxrW149DFz6IgKi8NCnR5cGVkZWYgc3RydWN0ICANCnsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdGcmVxOyAgICAgICAgICAgIC8qxrW14yovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3U3RhcnRQb3M6OCA7ICAgICAvKrjDxrW149Chx/jU2tChx/jQxc+ise3W0LXExvDKvM671sMqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0NlbGxOdW06ODsgICAgICAgIC8quMPGtbXjyc+1xNChx/jK/SovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3SGlnaFByaW87ICAgICAgICAgLyog1sMxse3KvrjDxrW148/gttTT2rf+zvHGtbXjzqq439PFz8i8tiAqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7DQp9VF96VERfUF9GcmVxTWVhc0luZm87DQoNCnR5cGVkZWYgc3RydWN0IHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiNpZmRlZiBSOV9TVVBQT1JUDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3QmxpbmRSZXBGbGc7LyrKx7fxysfDpMa1tePJz7Got73KvSAgIDGx7cq+w6TGtbXjyc+xqCAgMLHtyr7S7Ma1yc+xqLe9yr0qLw0KICAgIERXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR3VG1lYXNJbmlhbDsgLyqz9cq8suLBv8nPsajW3Mbao6y1pc67TVMuzu/A7bLj1NrN6rPJy/nT0Ma1teOy4sG/uvPW3MbazrSzrMqx0rK/ydLUzOHHsMnPsaiy4sG/veG5+6GjDQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDW3MbaxNqy4sG/veG5+8nPsajX7rPZsrvE3LOsuf1kd1RtZWFzSW5pYWzJz7Go1tzG2qGjZHdUbWVhc0luaWFss6zKsbrzxvS2r3dUbWVhc6Oszu/A7bLj1tzG2sTasuLBv73hufu1xMzhx7DJz7GosrvTsM/s1tzG2rXExvS2r7XjoaMqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1RtZWFzOy8q1f2zo8nPsajW3Mbao6y1pc67TVOho87vwO2y49bcxtrE2rLiwb+94bn7tcTM4cewyc+xqLK707DP7Nbcxtq1xMb0tq+146Gj1tzG2sTasuLBv73hufvJz7Go1+6z2bK7xNyzrLn9d1RtZWFzyc+xqNbcxtoqLw0KI2VuZGlmDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Q2VsbE51bTsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdGcmVxTnVtOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1JlZlRpbWVEaWZmSW5kOw0KICAgIA0KICAgIFRfelREX1BfRnJlcU1lYXNJbmZvICAgICAgICAgICAgICAgICAgICAgYXRGcmVxSW5mb1taX1REX1BfTUFYX0lOVEVSX0ZSRVFfTlVNXTsNCiAgICBUX3pURF9QX0NlbGxJbmZvICAgICAgICAgICAgICAgICAgICAgICAgIGF0Q2VsbEluZm9bWl9URF9QX01BWF9JTlRFUl9DRUxMX05VTV07DQogICAgDQogICAgRFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkd01lYXNJZDsNCiAgICBEV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR3UnNzaU5lZWQ7DQogICAgRFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkd1JzY3BOZWVkOw0KICAgIERXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHdJc2NwTmVlZDsNCiAgICBEV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR3Q2VsbFN5bkluZm9yTmVlZDsNCn1UX3pURF9QX0NQaHlfSW50ZXJNZWFzX1JlcTsNCg0KDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDZWxsSUQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UnNjcEZsYWc6MTsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdTZm5GbGFnOjE7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UnNzaUZsYWc6MTsgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjEzOyAgDQoNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdSc2NwOyAgICAgICAgICAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUc051bTsgDQogICAgICAgICAgICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdUc0xpc3RbWl9URF9QX01BWF9ETF9UU107DQoNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd0lzY3BbWl9URF9QX01BWF9ETF9UU107IA0KICAgICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3U2ZuOyAgICAgICAgICAgICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd09mZjsNCiAgICAgICAgICAgICAgICAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUbTsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdSc3NpOyAgICAgICAgICAgICAgICAgICAgDQp9VF96VERfUF9VYXJmY25NZWFzUmx0OyANCg0KDQp0eXBlZGVmIHN0cnVjdCB7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnSWQ7ICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UnB0RmxnOyAvKjA61tzG2snPsaggMTrM4cewyc+xqCovDQoNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdGYWlsQ2VsbE51bTsgICAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDZWxsTnVtOyANCg0KICAgIERXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHdNZWFzSWQ7ICAgICAgICAgICANCg0KICAgIERXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHdGYWlsQ2VsbEJpdE1hcDsgDQoNCiAgICBUX3pURF9QX1VhcmZjbk1lYXNSbHQgICAgICAgICAgICAgICAgICAgIGF0Q2VsbE1lYXNSbHRMaXN0W1pfVERfUF9NQVhfSU5URVJfQ0VMTF9OVU1dOw0KfVRfelREX1BfQ1BoeV9JbnRlck1lYXNfSW5kOyAgICAgICAgICAgLyoqNDU2QiovLyrI57n7yKHX7rTzMzK49tChx/g5MDRCKi8NCg0KDQp0eXBlZGVmIHN0cnVjdA0KeyANCglXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDZWxsUGFyYW07ICAvKiDQocf4TWlkIElEKi8NCglXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdSc2NwOw0KfVRfelREX1BfQmxpbmRDZWxsUmx0Ow0KDQoNCnR5cGVkZWYgc3RydWN0DQp7DQogICAgV09SRCAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0FyZmNuOw0KICAgIFdPUkQJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1Jzc2k7DQoJDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Q2VsbE51bTsgICAvKiC4w8a1tePPwsOksuLBv7XE0KHH+Lj2yv0gKi8NCiAgICBUX3pURF9QX0JsaW5kQ2VsbFJsdCAgIAkJCQkJYXRCbGluZENlbGxSbHRbWl9URF9QX01BWF9CTElORF9JTlRFUl9DRUxMXTsNCn1UX3pURF9QX0JsaW5kVWFyZmNuUmx0Ow0KDQoNCnR5cGVkZWYgc3RydWN0IHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0ZyZXFOdW07DQogICAgVF96VERfUF9CbGluZFVhcmZjblJsdCAgICAgICAgICAgICAgICAgICAgICBhdEZyZXFSbHRbWl9URF9QX01BWF9CTElORF9JTlRFUl9GUkVRXTsNCiAgICBEV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR3TWVhc0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1JwdEZsZzsgLyowOtbcxtrJz7GoIDE6zOHHsMnPsagqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7DQp9VF96VERfUF9JbnRlckJsaW5kTWVhc19JbmQ7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgICBSUkM8LT5QSFkNCiAgICAgICAguabE3DogICBSUkO6zc7vwO2y47zktcS87LLi0KHH+MnPsai907/aDQogICAgICAgIL3hubk6ICAgDQogICAgICAgICAgICAgICAgzu/A7bLjsai45rzssuLQocf4z/vPolBfREVURUNUX0NFTExfSU5GT19JTkRfRVYNCiAgICAgICAgICAgICANCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnR5cGVkZWYgc3RydWN0IA0KeyAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICB3VWFyZmNuOyAvKrzssuLQocf4tcTGtbXjKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICB3UGFyYUlkOy8qvOyy4tChx/i147XEss7K/UlEKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICB3UnNjcDsgIC8qvOyy4tChx/iy4sG/1rUqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KfVRfelREX1BfRGV0ZWN0Q2VsbEluZm9SbHQ7DQoNCnR5cGVkZWYgc3RydWN0IA0KeyAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICB3RGV0ZWN0Q2VsbE51bTsgICAgICAvKiDQocf4yv3Ev6Osw7vT0Me/0KHH+Mqxyc+xqLzssuLQocf4yv3Ev8rHMCAqLw0KICAgIFRfelREX1BfRGV0ZWN0Q2VsbEluZm9SbHQgICAgICBhdERldGVjdENlbGxJbmZvW1pfVERfUF9NQVhfREVURUNUX0NFTExfTlVNXTsgIC8qzu/A7bLjyc+xqLWxx7DX7se/tcQ0x7/Qocf4o6zTyce/tb3I9czus+QqLw0KfVRfelREX1BfRGV0ZWN0Q2VsbEluZm87DQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiqhog0KICAgICAgICBSUkM8LT5QSFkNCiAgICAgICAguabE3DoNCiAgICAgICAgICAgICAgICBSUkO6zc7vwO2y47zktcTWysG/suLBv8Xk1sO907/aDQogICAgICAgIL3hubk6DQogICAgICAgICAgICAgICAg1srBv7Liwb/F5NbDz/vPolBfUVVBTElUWV9NRUFTX1JFUQ0KICAgICAgICAgICAgICAgINbKwb+y4sG/veG5+8/7z6JQX1FVQUxJVFlfTUVBU19JTkQgDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KDQogICAgRFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkd01lYXNJZDsNCiAgICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYlRmY3NJZFtaX1REX1BfTUFYX0RMX0NDVFJDSF9OVU1dOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0NDVHJjaE51bTsNCn1UX3pURF9QX1F1YWxNZWFzX1JlcTsgDQoNCg0KdHlwZWRlZiBzdHJ1Y3Qgew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1RmY3NJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3U2lyW1pfVERfUF9NQVhfRExfVFNdOyAgICAgICAgDQp9VF96VERfUF9DQ1RyY2hTaXJNZWFzUmx0OyAvKjVXb3JkKi8NCg0KdHlwZWRlZiBzdHJ1Y3Qgew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7DQogICAgDQogICAgRFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkd01lYXNJZDsgICANCg0KICAgIFRfelREX1BfQ0NUcmNoU2lyTWVhc1JsdCAgICAgICAgICAgICAgICAgYXRDY3RyY2hNZWFzTGlzdFtaX1REX1BfTUFYX0RMX0NDVFJDSF9OVU1dOyANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDY3RyY2hOdW07ICAgICAgICANCn1UX3pURF9QX0NQaHlfUXVhbE1lYXNfSW5kOyANCiAgICAgICAgICAgICAgICAgICAgIA0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAgICAgUlJDPC0+UEhZDQogICAgICAgILmmxNw6DQogICAgICAgICAgICAgICAgUlJDus3O78DtsuO8+7XExNqyv7Liwb/F5NbDvdO/2g0KICAgICAgICAgveG5uToNCiAgICAgICAgICAgICAgICBVRcTasr+y4sG/xeTWw8/7z6JQX1VFX0lOVEVSTkFMX01FQVNfUkVRDQogICAgICAgICAgICAgICAgVUXE2rK/suLBv73hufvP+8+iUF9VRV9JTlRFUk5BTF9NRUFTX0lORCANCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnR5cGVkZWYgc3RydWN0IHsgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGFkZGluZzsNCg0KICAgIERXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHdNZWFzSWQ7ICAgICAgICAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdSZXBJbnRlcnZhbDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUeFBvd2VyTmVlZDoxOyAgICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1RhZHZOZWVkOjE7ICAgICAgICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UnNzaU5lZWQ6MTsgICAgICAgICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MTM7DQp9VF96VERfUF9DUGh5X1VlSW50TWVhc19SZXE7IA0KDQoNCnR5cGVkZWYgc3RydWN0IHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUeFBvd2VyRmxhZzoxOyAgICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1RhZHZGbGFnOjE7ICAgICAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdSc3NpRmxhZzoxOyAgICAgICAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxMzsNCiAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3VHhQb3dlcltaX1REX1BfTUFYX1VMX1RTXTsgIA0KIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1Jzc2k7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGFkZGluZzsNCg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1RhZHY7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3U2ZuOw0KIA0KICAgIERXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHdNZWFzSWQ7ICANCn1UX3pURF9QX0NQaHlfVWVJbnRNZWFzX0luZDsgDQoNCg0KIA0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgICAgIFJSQzwtPlBIWQ0KICAgICAgICC5psTcOg0KICAgICAgICAgICAgICAgIFJSQ8/yUEhZt6LLzUZNT8Xk1sMNCiAgICAgICAgveG5uToNCiAgICAgICAgICAgICAgICBGYWNoTWVhc3VyZU9jY2FzaW9uxeTWw8/7z6JQX0ZNT19JTkZPX1JFUQ0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KdHlwZWRlZiBzdHJ1Y3Qgew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0ZNT05lZWQ7ICAgICAgICAgICAvKta4yr7Kx7fxyrnTw0ZNT6GjMLHtyr7Ioc/7Rk1Po6y3xzDWtbHtyr7F5NbDRk1PKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUdGlQZXJpb2Q7ICAgICAgICAgLyo9TV9SRVAsIG1lYXN1cmVtZW50IG9jY2FzaW9uIGN5Y2xlIGxlbmd0aCAqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1R0aU9mZnNldDsgICAgICAgICAvKj1DX1JOVEkgbW9kIE1fUkVQKi8NCn1UX3pURF9QX0NQaHlfRk1PSW5mb19SZXE7DQoNCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAgICAgIFBIWS0+UlJDDQogICAgICAgICC5psTcOg0KICAgICAgICAgICAgICAgICAgUEhZz/JSUkO3osvNtcS3/s7x0KHH+LLiwb+94bn7yc+xqCAgDQogICAgICAgICAgveG5uToNCiAgICAgICAgICAgICAgICAgsuLBv8rNt8XP+8+iUF9TRVJWQ0VMTF9NRUFTX0lORA0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDZWxsSUQ7ICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDZWxsUGFyYTsgDQogICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UnNjcEZsYWc6MTsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoxNTsNCg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1JzY3A7ICANCiAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUc051bTsgICAgICAgICAgICANCg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdUc0xpc3RbWl9URF9QX01BWF9ETF9UU107DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd0lzY3BbWl9URF9QX01BWF9ETF9UU107DQogICAgRFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkd01lYXNJZDsNCn0gVF96VERfUF9DUGh5X1NlckNlbGxNZWFzX0luZDsgLyoyNEIqLw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAgICAgIFJSQy0+UEhZDQogICAgICAgICC5psTcOg0KICAgICAgICAgICAgICAgICAgUlJDz/JQSFm3osvNtcSy4sG/yb6z/da4yr4gIA0KICAgICAgICAgIL3hubk6DQogICAgICAgICAgICAgICAgILLiwb/KzbfFz/vPolBfTUVBU19SRUxfUkVRDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKm1lYXNUeXBlc7Hgwuujus/g06ZiaXTOu9bDMbHtyr7KzbfFtMvA4NDNsuLBv6O7t/HU8rK7ys23xQ0KICAgIGIwOlNlcnZDZWxsTWVhcw0KICAgIGIxOkludHJhRnJlcQ0KICAgIGIyOkludGVyRnJlcQ0KICAgIGIzOkludGVyUkFUDQogICAgYjQgOlRyYWZmaWNNZWFzDQogICAgYjU6UXVhbnRpdHkNCiAgICBiNjpVRUludGVyYWwNCiAgICBiNzpQb3NpdGlvbg0KICovDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNZWFzVHlwZXM7ICAgICAgICAgDQp9VF96VERfUF9DcGh5TWVhc1JlbF9SZXE7ICANCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiAgICAgICAgICAgICAgICAgICAgICAgICCy4sG/yKu+1sr9vt3A4NDNtqjS5UVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KLyogICAgUlJDLT5QSFkNCiAgICC94bm5OlRfelBfVERfZGxfc2V0dXBfbW9kaWZ5X3JlcQ0KICAgINPDzb46UlJDx+vH887vwO2y472owaLXqNPDzu/A7dDFtcANCiovDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1ByaW1hcnlfZnJlcTsgICAgICAvKnByaW1hcnkgICBmcmVxdWVuY3kqLyAgIA0KDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3V29ya2luZ19mcmVxOyAgICAgIC8qc2Vjb25kYXJ5IGZyZXF1ZW5jeSovDQogICAgLypTRk4tU0ZOILLu1rUqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd09mZl9mbGc7ICAgICAgICAgICAvKmJPZmZfZmxnOiAwOs7e0KcgMTrT0NCnKi8NCg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd09mZjsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdTcGVjaWFsX2J1cnN0X3NjaGVkdWxlX3BhcmE7ICAgLyrM2Mrizbu3orX3tsiyzsr9Ki8NCg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0FjdGl2ZV90aW1lOyAgICAgICAvKkNGTjowfjI1NSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VGltaW5nX2luZGljYXRpb247IC8qRW51bWVyYXRlZChJbml0aWFsaXNlLE1haW50YWluKSAwOkluaXRpYWxpc2UsMTpNYWludGFpbiovDQoNCiAgICAvKg0KICAgICAgICBDRk4tdGFyZ2V0U0ZOIGZyYW1lIG9mZnNldCBJbnRlZ2VyKDAuLjI1NSkNCiAgICAgICAgVGhpcyBJRSBpcyBvcHRpb25hbCBpZiB0aGUgSUUgIlRpbWluZyBpbmRpY2F0b3IiIGlzIHNldCB0byAiSW5pdGlhbGlzZSIgLk90aGVyd2lzZSBpdCBpcyBub3QgbmVlZGVkDQogICAgKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDZm5fdGFyZ2V0X3Nmbl9mcmFtZV9vZmZzZXQ7DQogICAgLyp3VHBjX3N0ZXBfc2l6ZV9mbGcgDQogICAgICAgICAwOndUcGNfc3RlcF9zaXplIG5vdCAgZXhpc3QNCiAgICAgICAgIDE6d1RwY19zdGVwX3NpemUgZXhpc3RzIA0KICAgICovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VHBjX3N0ZXBfc2l6ZV9mbGc7DQoNCiAgICAvKkludGVnZXIoMSwyLDMpKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUcGNfc3RlcF9zaXplOyAgICANCiAgICAvKjEwLjMuNi4xNiBEZWZhdWx0ICBEUENIIE9mZnNldCBWYWx1ZSA6SW50ZWdlcigwLi43KSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RGVmYXVsdF9kcGNoX29mZnNldF92YWx1ZTsNCg0KICAgIC8qMTAuMy42Ljk6Q2VsbCBwYXJhbWV0ZXJzIGlkOkludGVnZXIoMC4uMTI3KSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Q2VsbF9wYXJhbWV0ZXJzX2lkOw0KICAgIC8qTjMxMixOMzEzLE4zMTUqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd04zMTI7DQoNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdOMzEzOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd04zMTU7DQoNCiAgICBUX3pURF9QX2RsX2NjdHJjaF9saXN0ICAgICAgICAgICAgICAgICAgIHREbF9jY3RyY2hfbGlzdDsNCn1UX3pURF9QX2RsX3NldHVwX21vZGlmeV9yZXE7DQoNCi8qICAgIA0KICAgIFBIWS0+UlJDDQogICAgveG5uTpUX3pURF9QX0RsX1JsX3NldHVwX21vZF9jbmYNCiAgICDTw82+Os7vwO2y482o1qpSUkPF5NbDvKS77sqxvOS1vSzO78DtsuPS0Q0KICAgIL6txvTTw9DCtcTF5NbDLLTLyrFSUkPG9LavVDMxMraoyrHG9w0KKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1JsdDsgICAgLyowOryku+6zybmmo6wxOryku+7Kp7DcKi8NCn1UX3pURF9QX2RsX3JsX3NldHVwX21vZF9jbmY7DQoNCi8qICAgIA0KICAgIFJSQy0+UEhZDQogICAgzu/A7bLjzajWqlJSQ8Xk1sO8pLvuyrG85LW9LM7vwO2y49LRDQogICAgvq3G9NPD0MK1xMXk1sMstMvKsVJSQ8b0tq9UMzEytqjKscb3DQoqLw0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3QWN0aXZlX3RpbWU7ICAgICAgIC8qQ0ZOOjB+MjU1o6wyNTax7cq+waK8tLyku+4qLw0KfVRfelREX1BfZGxfZHBjaF9yZWxfcmVxOw0KDQoNCi8qICAgIA0KICAgIFBIWS0+UlJDDQogICAgtdey48i3yM9EUENI0MW1wMrNt8XN6rHPDQoqLw0KdHlwZWRlZiBzdHJ1Y3R7DQoJV09SRAkJCQkJCQkJICAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGFkZGluZzsNCn1UX3pURF9QX2RwY2hfcmVsX2NuZjsNCg0KDQovKg0KICAgIFBIWS0+UlJDDQogICAgveG5uTpUX3pQX1REX2luX3N5bmNfaW5kDQogICAg08PNvjrO78DtsuPU2r2owaLXqNPDzu/A7dDFtcDKsSzNqNaqUlJDzayyvbPJuaYgICAgDQoqLw0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGFkZGluZzsNCn1UX3pURF9QX2luX3N5bmNfaW5kOw0KDQovKg0KICAgIFBIWS0+UlJDDQogICAgveG5uTpUX3pQX1REX291dF9zeW5jX2luZA0KICAgINPDzb46zu/A7bLjzajWqlJSQ8qnsr0NCiovDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KfVRfelREX1Bfb3V0X3N5bmNfaW5kOw0KDQovKg0KICAgIFJSQy0+UEhZDQogICAgveG5uTpUX3pQX1REX3VsX2RwY2hfc2V0dXBfbW9kaWZ5X3JlcQ0KICAgINPDzb46UlJDvajBosnP0NDXqNPDzu/A7dDFtcANCiovDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VHhBZHY7ICAgICAgIC8qZGNoyc/Q0Mr9vt23osvNtcTM4cewwb+jrNLU1qHOqrWlzrsqLw0KDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3QWN0aXZlX3RpbWU7IC8qMH4yNTU7IDI1NjrO3tCnKi8gDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UHJpbWFyeV9mcmVxOyAgLyrGtbXj0MXPoiovDQoNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdXb3JraW5nX2ZyZXE7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Q2VsbF9wYXJhbWV0ZXJzX2lkOw0KDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RHluYW1pY19zZjsgICAgLyq2r8yswKnGtdLy19MqLw0KICAgIC8qzNjK4s27t6LJ+rPJyrHG2iovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3U3BlY19idXJzdF9nZW5lcmF0aW9uX3BlcmlvZDsvKijIoda1MCwyLDQsOCwxNiwzMiw2NCwxMjgsMjU2LLWlzrtmcmFtZTswse3KvrK7xvS2r1VMIERQQ0ggRFRYLMbk0+DWtbT6se3G9LavVUwgRFBDSCBEVFgpKi8NCiAgICAvKm1heGltdW0gYWxsb3dlZCB1bCB0eCBwb3dlcg0KICAgICAgICBJbnRlZ2VyKC01MC4uMzMpDQogICAgICAgIGJNYXhfYWxsb3dlZF91bF90eF9wb3dlciA9ICh4IC0oLTUwKSkNCiAgICAgICAgDQogICAgKi8NCg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01heF9hbGxvd2VkX3VsX3R4X3Bvd2VyOw0KICAgIA0KICAgIC8qMTAuMy42LjkxICAgIFVwbGluayBkcGNoIHBvd2VyIGNvbnRyb2wgaW5mbyovDQogICAgVF96VERfUF91bF9kcGNoX3Bvd2VyX2N0cmwgICAgICAgICAgICAgICB0VWxfZHBjaF9wb3dlcl9jdHJsX2luZm87DQogICAgDQogICAgLyoxMC4zLjYuOTYgICAgVXBsaW5rIFRpbWluZyBBZHZhbmNlIENvbnRyb2wqLw0KICAgIFRfelREX1BfdWxfdGltaW5nX2FkdmFuY2UgICAgICAgICAgICAgICAgdFVwbGlua190aW1pbmdfYWR2YW5jZV9jb250cm9sOw0KICAgIA0KICAgIC8qdWwgdGZjcyBsaXN0Ki8NCiAgICBUX3pURF9QX3VsX2NjdHJjaF9saXN0ICAgICAgICAgICAgICAgICAgIHRVbF9jY3RyY2hfbGlzdDsNCn1UX3pURF9QX1VsRHBjaF9zZXR1cF9tb2RfcmVxOw0KDQovKiAgICBSUkMtPlBIWQ0KICAgINPDzb4gICAgUlJD08PT2srNt8XJz9DQ16jTw87vwO3QxbXADQoqLw0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3QWN0aXZlX3RpbWU7ICAgICAgIC8qQ0ZOOjB+MjU1o6wyNTax7cq+waK8tLyku+4qLw0KfVRfelREX1BfdWxfZHBjaF9yZWxfcmVxOw0KDQovKiAgICBQSFktPlJSQw0KICAgIL3hubk6VF96UF9URF91bF9lc3RhYmxpc2hfaW5kDQogICAg08PNvjrO78DtsuO3tMChyc/Q0MG0wre9qMGis8m5piANCiovDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KfVRfelREX1BfdWxfZXN0YWJsaXNoX2luZDsNCg0KLyogICAgUlJDLT5QSFkNCiAgICC94bm5OlRfelBfVERfZGxfdHJjaF9yZWNvbmZpZ19yZXENCiAgICDTw82+OlJSQ8Xk1sPPwtDQtKvK5Ljxyr26zbSryuS48cq91+m6z9DFz6INCiovDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUcmNoSWQ7DQogICAgLypFbnVtZXJhdGVkKE5vIGNvZGluZyxDb252b2x1dGlvbmFsLFR1cmJvKQ0KICAgICAgICAwOk5vIGNvZGluZw0KICAgICAgICAxOkNvbnZvbHV0aW9uYWwNCiAgICAgICAgMjpUdXJibw0KICAgICovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VHJjaF90eXBlOw0KDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Q29kaW5nX3R5cGVfb2ZfY2hhbm5lbDsNCiAgICAvKkludGVnZXIoNSwxMCwyMCw0MCw4MCxkeW5hbWljKQ0KICAgICAgICAwOmR5bmFtaWMNCiAgICAqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1RyYW5zbWlzc2lvbl90aW1lX2ludGVydmFsOw0KICAgIA0KICAgIC8qICAgIEludGVnZXIoMCw4LDEyLDE2LDI0KSAgKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDcmNfbGVuZ3RoOw0KICAgIC8qSW50ZWdlcigxLi5oaVJNKSBoaVJNID0yNTYqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1JtX2F0dHJpYnV0ZTsNCiAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdOb19vZl9keW5hbWljX3RmczsNCn1UX3pURF9QX3N0YXRpY190ZnM7DQoNCnR5cGVkZWYgc3RydWN0ew0KICAgIC8qVW5pdCBpcyBiaXRzO3JyYyBzaG91bGQgY29tcHV0ZSB0aGUgIFRCIHNpemUgYnkgdGhlIHJsYyBzaXplKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUcmFuc3BvcnRfYmxvY2tfc2l6ZTsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdOdW1iZXJfb2ZfdHJhbnNwb3J0X2Jsb2NrczsNCiAgICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUZmk7DQp9VF96VERfUF9keW5hbWljX3RmczsNCg0KdHlwZWRlZiBzdHJ1Y3R7ICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0N0ZmNIOyAgICAgICAgLypDVEZDuN8xNmJpdCovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Q3RmY0w7ICAgICAgICAvKkNURkO1zTE2Yml0Ki8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUZmNpOw0KfVRfelREX1BfZGxfY3RmY190ZmM7DQoNCg0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnSWQ7DQoNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDY3RyY2hUeXBlOy8qICAwOkNjdHJjaERjaA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOkNjdHJjaEZhY2ggDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI6Q2N0cmNoUGNoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM6Q2N0cmNoQ2JzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyIHZhbHVlOnJlc2VydmVkICovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3QWN0aXZlX3RpbWU7IC8qMH4yNTU7IDI1NjrO3tCnKi8NCg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd051bVRyQ0g7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Tm9PZlRmY3M7DQoNCiAgICAvKiC009PStb3X80JJVM67ttTTprXEtKvK5NDFtcDLs9Dy0+thdFN0YXRpY1RGU8/gzayju2JpdNa1MLHtyr6yu9Do0qq94s72o6wxse3KvtDo0qq94s72ICovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RW5hYmxlX2RlY29kZV9iaXRtYXA7DQoNCiAgICAvKiC4w8r91+nU2ndDY3RyY2hUeXBlPT0wyrHT0NCno6zK/dfp1KrL2LbU06a1xLSryuTQxbXAy7PQ8tPrYXRTdGF0aWNURlPP4M2so7sNCiAgICAgICAgICAgICAgVGFyZ2V0X0JMRVLOqr/J0aGyzsr9o6zWtbXEt7bOp86qMNbBNjOjrDB4ZmZmZrHtyr6yzsr9sru05tTao7vO78DtsuPK1bW9uvPSqiqjqC0wLjGjqbXDtb3KtbzK1rUgICAqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdUYXJnZXRfQkxFUltaX1REX1BfTUFYX0RMX1RSQ0hfTlVNXTsNCiAgICBUX3pURF9QX3N0YXRpY190ZnMgICAgICAgICAgICAgICAgICAgICAgIGF0U3RhdGljVEZTW1pfVERfUF9NQVhfRExfVFJDSF9OVU1dOyANCg0KICAgIFRfelREX1BfZHluYW1pY190ZnMgICAgICAgICAgICAgICAgICAgICAgYXREeW5hbWljVEZTW1pfVERfUF9NQVhfRExfVEZfTlVNXTsNCg0KICAgIFRfelREX1BfZGxfY3RmY190ZmMgICAgICAgICAgICAgICAgICAgICAgYXRDdGZjW1pfVERfUF9NQVhfRExfVEZDU19OVU1dOw0KfVRfelREX1BfZGxfdHJjaF9yZWNmZ19yZXE7DQoNCnR5cGVkZWYgc3RydWN0ew0KICAgICBEV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHdDdGZjOw0KDQogICAgIC8qxL/HsNans9a1xNfutPNURkO49sr9zqoxMji49iovDQogICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VGZjaTsNCiAgICAgLyoNCiAgICAgICAgIDA6z9TKvs2o1qosz8LD5rXEd0JldGFfZLj4s/YNCiAgICAgICAgICAgMTqyzr+8t73KvSzPwsPmtcR3UmVmZXJlbmNlX3RmY19pZLj4s/YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgINeiys2jug0KICAgIMXk1sO0q8rk0MW1wLXEVEZT0MXPoizTw9PavMbL47WxxLO49lRGQ7XEUG93ZXINCiAgICAgT2Zmc2V0IEluZm9ybWF0aW9u1tC1xEJldGFEzqq8xsvjt73KvcqxKLLOv7zG5Mv8VEZDKc7vwO2y48q508Ohow0KICAgICAqLw0KICAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0JldGFfZF90eWU6MTsgICAgDQogICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3QmV0YV9kOjU7ICAgICAgICAgICAgICAvKjB+MTUqLw0KICAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1JlZmVyZW5jZV90ZmNfaWQ6MjsgICAgLyp0ZmNpo6wwfjMqLw0KICAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjg7DQp9VF96VERfUF91bF9jdGZjX3RmYzsNCg0KDQovKiAgICBSUkMtPlBIWQ0KICAgINPDzb46UlJDxeTWw8nP0NC0q8rkuPHKvbrNtKvK5Ljxyr3X6brP0MXPog0KICAgIL3hubk6VF96VERfUF9VbERwY2hfdGNoX3JlY2ZnX3JlcQ0KKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0FjdGl2ZV90aW1lOyAgICAgIC8qMH4yNTU7IDI1NjrO3tCnKi8NCg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd051bVRyQ0g7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VGZjc051bTsNCg0KICAgIFRfelREX1Bfc3RhdGljX3RmcyAgICAgICAgICAgICAgICAgICAgICAgYXRTdGF0aWNURlNbWl9URF9QX01BWF9VTF9UUkNIX05VTV07DQoNCiAgICBUX3pURF9QX2R5bmFtaWNfdGZzICAgICAgICAgICAgICAgICAgICAgIGF0RHluYW1pY1RGU1taX1REX1BfTUFYX1VMX1RGX05VTV07DQoNCiAgICBUX3pURF9QX3VsX2N0ZmNfdGZjICAgICAgICAgICAgICAgICAgICAgIGF0Q3RmY1taX1REX1BfTUFYX1VMX1RGQ1NfTlVNXTsNCn1UX3pURF9QX1VsRHBjaF90Y2hfcmVjZmdfcmVxOw0KDQoNCi8qDQogICAgUlJDLT5QSFkNCiAgICDTw82+OlJSQyDTw9PaxeTWw7iouau5ss7vwO3QxbXADQogICAgveG5uTpUX3pQX1REX2FkZF9tb2Rfc2NjcGNoX3JlcQ0KKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7DQoNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdPZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDaGFubmVsaXNhdGlvbl9Db2RlX251bTsgICANCiAgICANCiAgICAvKjEwLjMuNi4xMCAgQ29tbW9uIHRpbWVzbG90IGluZm8qLw0KICAgIFRfelREX1BfY29tbW9uX3RzX2luZm8gICAgICAgICAgICAgICAgICAgdENvbW1vbl90aW1lc2xvdF9pbmZvOw0KICAgIC8qMTAuMy42LjM3ICBJbmRpdmlkdWFsIHRpbWVzbG90IGluZm8qLw0KICAgIFRfelREX1BfaW5kaXZpZHVhbF90c19pbmZvICAgICAgICAgICAgICAgdEluZGl2aWR1YWxfdGltZXNsb3RfaW5mbzsgICANCg0KICAgIFRfelREX1BfQ0hBTk5FTElTQVRJT05fQ09ERSAgICAgICAgICAgICAgYXRDaGFubmVsaXNhdGlvbl9Db2RlW1pfVERfUF9DSF9DT0RFX05VTV07DQp9VF96VERfUF9hZGRfbW9kX3NjY3BjaF9yZXE7DQoNCi8qDQogICAgUlJDLT5QSFkNCiAgICDTw82+OlJSQyDTw9Pays23xbmrubLQxbXAxeTWww0KICAgIL3hubk6VF96VERfUF9yZWxfc2NjcGNoX3JlcQ0KKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0FjdFRpbWU7DQp9VF96VERfUF9yZWxfc2NjcGNoX3JlcTsNCg0KLyoNCiAgICBSUkMtPlBIWQ0KICAgINPDzb46tdey48i3yM9TQ0NQQ0jQxbXAys23xc3qsc8NCiAgICC94bm5OlRfelREX1BfcmVsX3NjY3BjaF9jbmYNCiovDQp0eXBlZGVmICAgIHN0cnVjdHsNCglXT1JECQkJCQkJCQkgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KfVRfelREX1BfcmVsX3NjY3BjaF9jbmY7DQoNCg0KDQp0eXBlZGVmIHN0cnVjdHsNCiAgICAvKnBpY2ggaW5mbyovDQogICAgLypUaW1lc2xvdCBudW1iZXIgSW50ZWdlcigwLi42KSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VGltZXNsb3RfbnVtYmVyOw0KICAgIC8qMjUuMzMxIDEwLjMuNi40MSBNaWRhbWJsZSBzaGlmdCBhbmQgYnVyc3QgdHlwZSovDQogICAgVF96VERfUF9taWRfc2hpZnRfYnVyX3R5cGUgICAgICAgICAgICAgICB0TWlkYW1ibGVfc2hpZnRfYnVyc3RfdHlwZTsNCiAgICANCiAgICAvKndDaGFubmVsaXNhdGlvbl9jb2RlX251bWJlcjrQxbXAu6/C67XEyv3EvyovDQogICAgVF96VERfUF9DSEFOTkVMSVNBVElPTl9DT0RFICAgICAgICAgICAgICBhdENoYW5uZWxpc2F0aW9uX2NvZGVbMl07DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Q2hhbm5lbGlzYXRpb25fY29kZV9udW1iZXI7DQogICAgLyoNCiAgICBFbnVtZXJhdGVkKCg0LzIpLCg4LzIpLCg4LzQpLCgxNi8yKSwoMTYvNCksKDMyLzIpLCgzMi80KSwoNjQvMiksKDY0LzQpKQ0KICAgIA0KICAgICg0LzIpOndSZXBldGl0aW9uX3BlcmlvZF9sZW5ndGggPTAsDQogICAgKDgvMik6d1JlcGV0aXRpb25fcGVyaW9kX2xlbmd0aCA9MSwNCiAgICAuLi5hbmQgc28gb24uLi4NCiAgICAqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1JlcGV0aXRpb25fcGVyaW9kX2xlbmd0aDsNCiAgICAgICAgIA0KICAgIC8q1qHGq9LGKi8gICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3T2Zmc2V0OyAgICAgICAgIA0KICAgICAgICAgLypJbmRpY2F0ZXMgdGhlIGxlbmd0aCBvZiBvbmUgcGFnaW5nIGluZGljYXRvciBpbiBiaXRzLiBEZWZhdWx0IHZhbHVlIGlzIDQuDQogICAgICAgICAgICAgICAgIEludGVnZXIoNCw4LDE2KQ0KICAgICAgICAgKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWdpbmdfaW5kaWNhdG9yX2xlbmd0aDsNCiAgICANCiAgICAvKrK7wazQ+L3TytXW3MbaKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdEcnhfY3ljbGVfbGVuZ3RoOw0KICAgIC8q0bC69Mqxv8wqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZ2luZ19vY2Nhc2lvbjsNCg0KICAgIC8q0bDV0ta4yr7S8tfTKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQaTsNCiAgICAvKtGwuvTP+8+ivdPK1cqxv8wqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZ2luZ19tc2dfcmN2X29jY2FzaW9uOw0KfVRfelREX1BfcGljaF9pbmZvOw0KLypJbXNpKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdOdW07DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdMaXN0WzIxXTsgDQp9VF96VERfUF9JbXNpR3NtOw0KDQovKlVSbnRpKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdTcm5jSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7DQogICAgRFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHdTUm50aTsNCn1UX3pURF9QX1VSbnRpOw0KDQovKnVlIGlkKi8NCnR5cGVkZWYgc3RydWN0IHsNCglXT1JEICAgICAgICAgICAgICAgICAgICAgICAgd1VlSWRWYWxpZEJpdG1hcDsvKmJpdDAuLmJpdDPT0NCno6zSwLTOt9ax8Na4yr7QxdSqVG1zaUdzbaGiUFRtc2lHc22hokltc2lHc22holVSbnRpyse38bTm1Nqho2JpdM67zqoxse3KvrbU06bQxdSqtObU2qOst/HU8rK7tObU2iovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgIGF3VG1zaUdzbVs0XTsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgYXdQVG1zaUdzbVs0XTsNCglXT1JEICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7DQogICAgVF96VERfUF9JbXNpR3NtICAgICAgICAgICAgIHRJbXNpR3NtOw0KICAgIFRfelREX1BfVVJudGkgICAgICAgICAgICAgICB0VVJudGk7DQp9VF96VERfUF9VZUlkOw0KDQovKiAgICBSUkMtPlBIWQ0KICAgIL3hubk6VF96UF9URF9wYWdpbmdfcmVxDQogICAg08PNvjpSUkMg08PT2sXk1sPRsLr00MW1wA0KKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7DQoNCiAgICBUX3pURF9QX2FkZF9tb2Rfc2NjcGNoX3JlcSAgICAgICAgICAgICAgIHRBZGRfbW9kaWZ5X3NjY3BjaF9yZXE7DQogICAgVF96VERfUF9waWNoX2luZm8gICAgICAgICAgICAgICAgICAgICB0UGljaEluZm87DQoJVF96VERfUF9VZUlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0VWVJZEluZm87DQp9VF96VERfUF9wYWdpbmdfcmVxOw0KDQovKg0KICAgIFJSQy0+UEhZDQogICAgveG5uTpUX3N0b3BfcGFnaW5nX3JlcQ0KICAgINPDzb46UlJDINPD09rNo9a50bC69LXEvdPK1Q0KKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7DQp9VF96VERfUF9zdG9wX3BhZ2luZ19yZXE7DQoNCg0KLyoNCiAgICBQSFktPlJSQw0KICAgIL3hubk6VF96VERfUF9zdG9wX3BhZ2luZ19jbmYNCiAgICDTw82+OrXXsuPIt8jPys23xdGwuvTQxbXAzeqxzw0KKi8NCnR5cGVkZWYgICAgc3RydWN0ew0KCVdPUkQJCQkJCQkJCSAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGFkZGluZzsNCn1UX3pURF9QX3N0b3BfcGFnaW5nX2NuZjsNCg0KLyogICAgUlJDLT5QSFkNCiAgICC94bm5OlRfelREX1BfYWRkX21vZGlmeV9jYnNfcmVxDQogICAg08PNvjpSUkMg08PT2sXk1sOz0NTYQ0JTtcRTQ0NQQ0jQxbXADQogICAg1K3T7zpaX1BfQUREX01PRElGWV9DQlNfUkVRX0V2DQoqLw0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQcmRfb2ZfY3RjaF9hbGxvOyAgICAvKiBOLDF+MjU2O290aGVyIGludmFsaWQgKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgd0Nic19mcmFtZV9vZmY7ICAgIC8qIEssMH4yNTU7b3RoZXIgaW52YWxpZCAqLw0KfVRfelREX1BfY2JzX2RyeF9sZXYxOw0KDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgd051bTsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdDdGNoX2JzX2xpc3RbMjU1XTsgICAgLyog0qq908rVtcRCU8v51NpTRk4gKi8NCn1UX3pURF9QX2Nic19kcnhfbGV2MjsNCg0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICB3U2FtZV9hc19wY2g7ICAgLyogMDpub3Qgc2FtZTsgMTpzYW1lICovDQogICAgLyogaWYgc2FtZSBhcyBwY2gsIG1lYW5zIHBjaCBhbmQgZmFjaCBtdXggb24gdGhlIHNhbWUgc2NjcGNoICovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgIHdOZXdfZGVjb2RlX2JpdG1hcDsgICAgLypvbmx5IHZhbGlkIHdoZW4gd1NhbWVfYXNfcGNoID0gMSovDQogICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgIHdEcnhfdHlwZTsgICAgICAvKjA6sLRMZXZlbDEgRFJYvdPK1TsgMTqwtExldmVsMiBEUli908rVKi8NCiAgICB1bmlvbnsNCiAgICAgICAgVF96VERfUF9jYnNfZHJ4X2xldjEgICAgICAgdExldjE7DQogICAgICAgIFRfelREX1BfY2JzX2RyeF9sZXYyICAgICAgIHRMZXYyOw0KICAgIH10RHJ4Ow0KICAgIA0KICAgIFRfelREX1BfYWRkX21vZF9zY2NwY2hfcmVxICAgICAgICB0QWRkX21vZGlmeV9zY2NwY2hfcmVxOyAgIC8qzt7C23dTYW1lX2FzX3BjaCDIobrO1rW2vNPQ0KcqLyANCiAgICBUX3pURF9QX2RsX3RyY2hfcmVjZmdfcmVxICAgICAgICAgdERsX3RyY2hfcmVjb25maWdfcmVxOyAgICAvKs7ewtt3U2FtZV9hc19wY2ggyKG6zta1trzT0NCnKi8gICAgICAgIA0KfVRfelREX1BfYWRkX21vZGlmeV9jYnNfcmVxOw0KDQoNCi8qDQogICAgUlJDLT5QSFkNCiAgICC94bm5OlRfelREX1Bfc3RvcF9jYnNfcmVxDQogICAg08PNvjpSUkMg08PT2s2j1rlDQlO1xL3TytWjrMjnuftmYWNo0+twY2iyu7my08PSu8z1c2NjcGNoo6yw/MCoyb6z/c7vwO3XytS0DQogICAg1K3T7zpaX1BfU1RPUF9DQlNfUkVRX0V2DQoqLw0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGFkZGluZzsNCn1UX3pURF9QX3N0b3BfY2JzX3JlcTsNCg0KLyoNCiAgICBSUkMtPlBIWQ0KICAgIL3hubk6VF96VERfUF9zdG9wX2Nic19jbmYNCiAgICDTw82+OrXXsuPIt8jPys23xUNCU9DFtcDN6rHPDQogICAg1K3T7zpaX1BfU1RPUF9DQlNfQ05GX0V2DQoqLw0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGFkZGluZzsNCn1UX3pURF9QX3N0b3BfY2JzX2NuZjsNCg0KI2lmZGVmIFI5X1NVUFBPUlQNCi8qDQogICAgUlJDLT5QSFkNCiAgICC94bm5OlRfaHNkcGFfY29uZmlnX3JlcQ0KICAgINPDzb4608PT2sXk1sPO78DtsuNoc2RwYQ0KKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0NhcnJpZXJfRnJlcTsgICAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdIU19zY2NoX251bTsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KICAgIFRfelREX1BfbWNfaHNfc2NjaCAgICAgICAgICAgICAgICAgICAgICAgICAgYXRNY19oc19zY2NoX2NvbmZpZ3VyYXRpb25bWl9URF9QX01BWF9IU19TQ0NIXTsNCiAgICBUX3pURF9QX2hzX2Rwc2NoX21pZGFtYmxlICAgICAgICAgICAgICAgICAgIHRIc19wZHNjaF9taWRhbWJsZV9jb25maWd1cmF0aW9uOw0KICAgIFRfelREX1BfaHNfaGFycV9pbmZvICAgICAgICAgICAgICAgICAgICAgICAgdEhzX2hhcnFfaW5mbzsNCn1UX3pURF9QX2hzZHBhX2luZm9fbGlzdDsNCiNlbmRpZg0KDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdBY3RpdmVfdGltZTsgICAgICAgICAgICAgICAgICAgLyowfjI1NTsgMjU2OsGivLTG8NCnKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQcmltYXJ5X2ZyZXE7ICAgICAgLypwcmltYXJ5ICAgZnJlcXVlbmN5Ki8gICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdXb3JraW5nX2ZyZXE7ICAgICAgLypzZWNvbmRhcnkgZnJlcXVlbmN5Ki8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDZWxsX3BhcmFtZXRlcnNfaWQ7ICAvKkludGVnZXIoMC4uMTI3KSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3SF9ybnRpOw0KDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UG93ZXJfY3RybF9nYXA7ICAgICAgICAgICAgICAgIC8qSFMtU0lDSLXEtKvK5LzkuPTDxc/eo6zX09ahuPbK/aOsMH4yNTUqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BsX2NvbXBlbnNhdGlvbl9zd2l0Y2g7ICAgICAgICAvKjE6SFMtU0lDSMq1vMq0q8rkvOS49NCh09rDxc/eyrHQ6Nf3wrfL8LK5s6UgMDqyu9f3wrfL8LK5s6UqLw0KI2lmZGVmIFI5X1NVUFBPUlQNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdUczBJbmQ7Lyoxo7qx7cq+zfiy4NTK0O29q8/C0NBIU1BEU0NI08PT2lRzMKOsMKO6se3KvrK71MrQ7SovIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1N5bmNfcGFyYV9mZzsvKrHqyra1scewyse38df2ubLP7dDFtcC1xM2ssr0qLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0hzc2NjaF9kcnhfZmc7CS8qserKtrWxx7BIU1NDQ0jKx7fx1qez1kRSWL3TytWjuyovCQ0KCVdPUkQJCQkJCQkgICAgICAgICAgICAgICAgd0hzZHNjaF9zcHNfZmc7Lyqx6sq2tbHHsEhTU0NDSMrHt/HWp7PWU1BTstnX9yovICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0RlZmF1bHRfZHBjaF9vZmZzZXRfdmFsdWU7LyoxMC4zLjYuMTYgRGVmYXVsdCAgRFBDSCBPZmZzZXQgVmFsdWUgOkludGVnZXIoMC4uNyksvfa1sXdTeW5jX3BhcmFfZmc9PTHKsdPQ0KcqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01hY0hkVHlwOy8qSFNEU0NIttTTpk1hYy1kIGZsb3e1xE1BQ823wODQzaO7MKO6se3Kvk1hYy1oc6OsMaO6se3Kvk1BYy1laHMqLw0KICAgIFRfelREX1BfaHNzY2NoX2N0cmxfY2hfZHJ4CSAgICAgICAgICAgICAgICB0SHNzY2NoX2RyeF9pbmZvOwkNCiAgICBUX3pURF9QX2hzZHNjaF9zcHNfaW5mbyAgICAgICAgICAgICAgICAgICAgIHRIc2RzY2hfc3BzX2luZm87DQogICAgVF96VERfUF9zaGFyZV9jaF9zeW5jX3BhcmEgICAgICAgICAgICAgICAgICB0U3luY19wYXJhOw0KI2VuZGlmDQoNCiNpZmRlZiBSOV9TVVBQT1JUDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TWNOdW07ICAgICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0hzZHBhX2luZm9fbGlzdF9udW07ICAgDQogICAgVF96VERfUF9oc2RwYV9pbmZvX2xpc3QgICAgICAgICAgICAgICAgICAgICBhdEhzZHBhX2luZm9fbGlzdFtaX1REX1BfTUFYX0NBUlJJRVJdOw0KI2Vsc2UNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0hTX3NjY2hfbnVtOw0KDQogICAgVF96VERfUF9oc19zY2NoICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0SHNfc2NjaF9jb25maWd1cmF0aW9uW1pfVERfUF9NQVhfSFNfU0NDSF07DQogICAgVF96VERfUF9oc19kcHNjaF9taWRhbWJsZSAgICAgICAgICAgICAgICAgIHRIc19wZHNjaF9taWRhbWJsZV9jZmc7DQogICAgVF96VERfUF9oc19oYXJxX2luZm8gICAgICAgICAgICAgICAgICAgICAgIHRIc19oYXJxX2luZm87DQojZW5kaWYNCn1UX3pURF9QX2hzZHBhX2NvbmZpZ19yZXE7DQoNCg0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3QWN0VGltZTsgDQp9VF96VERfUF9oc2RwYV9yZWxfcmVxOw0KDQp0eXBlZGVmICAgIHN0cnVjdHsNCglXT1JECQkJCQkJCQkgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KfVRfelREX1BfaHNkcGFfcmVsX2NuZjsNCg0KDQovKg0KICAgIFJSQy0+UEhZDQogICAgveG5uTpUX2hzdXBhX2NvbmZpZ19yZXENCiAgICDTw82+OtPD09rF5NbDzu/A7bLjaHN1cGENCiovDQp0eXBlZGVmIHN0cnVjdHsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0FjdF90aW1lOyAgICAgICAgICAgICAgICAvKkNGTjowfjI1NSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UHJpbWFyeV9mcmVxOyAgICAgIC8qcHJpbWFyeSAgIGZyZXF1ZW5jeSovICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3V29ya2luZ19mcmVxOyAgICAgIC8qc2Vjb25kYXJ5IGZyZXF1ZW5jeSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Q2VsbF9wYXJhbWV0ZXJzX2lkOyAvKkludGVnZXIoMC4uMTI3KSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RV9ybnRpOyAgICAgICAgICAgICAgICAvKkUtUk5USSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3U2NoX3RyX2ZsZzsgICAgICAgICAgICAvKjA6tfe2yM7e0KcgMTq197bI09DQpyovICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd05vbl9zY2hfdHJfZmxnOyAgICAgICAgLyowOrfHtfe2yM7e0KcgMTq3x7X3tsjT0NCnKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdSZXNldF9mbGc7ICAgICAgICAgICAgICAgIC8qMDpub3QgcmVzZXQgMTpyZXNldCovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3SGFycV9pbmZvOyAgICAgICAgICAgICAgICAvKjA6ucy2qMq508NSVjAgMTpSVr/JseQqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd05fZWhpY2g7ICAgICAgICAgICAgICAgIC8qRS1QVUNIus1FLUhJQ0jP4Lj0tcTKsc+2yv0sNH4xNSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TWF4X2FsbG93ZWRfdWxfdHhfcG93ZXI7LypJbnRlZ2VyKC01MC4uMzMpICAgICAgICBiTWF4X2FsbG93ZWRfdWxfdHhfcG93ZXIgPSAoeCAtKC01MCkpICAgICAqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1ByaW1hcnlfY2NwY2hfdHhfcG93ZXI7ICAgLyogICAgIEludGVnZXIoNi4uNDMpZEJtICAgICovDQojaWZuZGVmIFI5X1NVUFBPUlQNCglXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdVcHBjaF9jaGlwX3NoaWZ0X2ZsZzsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdVcHBjaF9jaGlwX3NoaWZ0Ow0KI2Vsc2UNCiAgICBXT1JECQkJCQkJCQkJCXdFYWdjaF9kcnhfZmc7CS8qMS3Wp7PWRUFHQ0i1xERyeL3TytWjuzAtsrvWp7PWRUFHQ0i1xERSWL3TytUqLwkNCiAgICBXT1JECQkJCQkJCQkJCXdFZGNoX3Nwc19mZzsgIC8qMS3Wp7PWRURDSLXEU1BTstnX96O7MC2yu9ans9ZFRENItcRTUFOy2df3Ki8NCiAgICBUX3pURF9QX2VhZ2NoX2N0cmxfY2hfZHJ4ICAgICAgIAkJIHRFYWdjaF9kcnhfaW5mbzsgDQogICAgVF96VERfUF9lZGNoX3Nwc19pbmZvCQkJICAgICAgICAgdEVkY2hfc3BzX2luZm87CQ0KCVRfelREX1BfdWxfdGltaW5nX2FkdmFuY2UgICAgICAgICAgICAgICAgdFVwbGlua190aW1pbmdfYWR2YW5jZV9jb250cm9sOw0KI2VuZGlmDQogICAgVF96VERfUF9lcHVjaF9wd3JfaW5mbyAgICAgICAgICAgICAgICAgICB0RXB1Y2hfcHdyX2luZm87ICAgICAgICAvKkUtUFVDSLmmv9jQxc+io6zNrMqxysrTw9Patfe2yLrNt8e197bIKi8NCg0KICAgIFRfelREX1BfaHNfc2NoX3RyICAgICAgICAgICAgICAgICAgICAgICAgdEhzX3NjaF90cl9pbmZvOyAgICAgICAgLyq99rWxd1NjaF90cl9mbGc9Mcqx09DQpyovICAgICAgICANCiAgICBUX3pURF9QX2hzX25vbl9zY2hfdHIgICAgICAgICAgICAgICAgICAgIHRIc19ub25fc2NoX3RyX2luZm87ICAgIC8qvfa1sXdOb25fc2NoX3RyX2ZsZz0xyrHT0NCnKi8NCn1UX3pURF9QX2hzdXBhX2NvbmZpZ19yZXE7DQoNCi8qDQogICAgUlJDLT5QSFkNCiAgICC94bm5OlRfelREX1BfaHN1cGFfcmVsX3JlcQ0KICAgINPDzb4608PT2sm+s/3O78DtsuNoc3VwYQ0KKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0FjdGl2ZV90aW1lOyAgICAgICAgICAgICAgICAvKjB+MjU1LCAyNTax7cq+waK8tMm+s/0qLw0KfVRfelREX1BfaHN1cGFfcmVsX3JlcTsNCg0KDQovKg0KICAgIFBIWS0+UlJDDQogICAgveG5uTpUX3pURF9QX2hzdXBhX3JlbF9jbmYNCiAgICDTw82+OrXXsuPIt8jPys23xUhTVVBB0MW1wM3qsc8NCiovDQp0eXBlZGVmICAgIHN0cnVjdHsNCglXT1JECQkJCQkJCQkgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KfVRfelREX1BfaHN1cGFfcmVsX2NuZjsNCg0KDQovKsO709C31sXkz8LQ0ERQQ0jKsaOs08O0y9St0+8qLw0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3QWN0aXZlX3RpbWU7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGxjY2hfbnVtOw0KCVdPUkQJCQkJCQkJCQkJd1BhZGRpbmc7DQogICAgVF96VERfUF9wbGNjaF9pbmZvICAgICAgICAgICAgICAgICAgICAgICBhdFBsY2NoX2luZm9bWl9URF9QX01BWF9VTF9UUyoyXTsgICAgDQp9VF96VERfUF9hZGRfbW9kaWZ5X3BsY2NoOw0KI2lmZGVmIFI5X1NVUFBPUlQNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgUlJDo6hMMVSjqS0+UEhZDQogICAguabE3DoNCiAgICAgICAgICAgICAgICAgxeTWw0wxIEZBQ0i6zUlETEXMrM/CtcTP4LnY1PbHv8Xk1sM6ICAgICBQIF9IU1BBX1BMVVNfRkFDSF9SRVFfRVYNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RnJlcXVlbmN5X2luZm87DQogICAgVF96VERfUF9mYWNoX2RwYV9pbmZvICAgICAgIAkJdEZhY2hfZHBhX2luZm87DQogICAgVF96VERfUF9mYWNoX3VwYV9pbmZvCQkgICAgdEZhY2hfdXBhX2luZm87DQp9IFRfelREX1BfaHNwYV9wbHVzX2ZhY2hfcmVxOw0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICBSUkOjqEwxVKOpLT5QSFkNCiAgICC5psTcOg0KICAgICAgICAgICAgICAgICDF5NbDTDEgUENIzKzPwrXEz+C52NT2x7/F5NbDOiAgICAgUCBfSFNQQV9QTFVTX1BDSF9SRVFfRVYNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgd0ZyZXF1ZW5jeV9pbmZvOyANCiAgICBUX3pURF9QX3BjaF9kcGFfaW5mbyAgICAgIHRQY2hfZHBhX2luZm87IA0KICAgIFRfelREX1BfcGljaF9pbmZvICAgICAgICAgdFBpY2hfaW5mbzsJDQp9IFRfelREX1BfaHNwYV9wbHVzX3BjaF9yZXE7DQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogIFJSQ6OoTDFUo6ktPlBIWQ0KICAgILmmxNw6DQogICAgICAgICAgICAgICAgIMm+s/1MMSBGQUNIus1JRExFzKzPwrXEz+C52NT2x7/F5NbDOiAgICAgUCBfSFNQQV9QTFVTX0ZBQ0hfUkVMX1JFUV9FVg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgd0FjdGl2ZV90aW1lOyAgICAgICAgICAvKjB+MjU1OyAyNTY6waK8tMbw0KcqLw0KfSBUX3pURF9QX2hzcGFfcGx1c19mYWNoX3JlbF9yZXE7DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgUlJDo6hMMVSjqS0+UEhZDQogICAguabE3DoNCiAgICAgICAgICAgICAgICAgyb6z/UwxIFBDSMysz8K1xM/gudjU9se/xeTWwzogICAgIFAgX0hTUEFfUExVU19QQ0hfUkVMX1JFUV9FVg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7ICAgICANCn0gVF96VERfUF9oc3BhX3BsdXNfcGNoX3JlbF9yZXE7DQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogIFBIWS0+TDFUDQogICAguabE3Dq117LjyLfIz8m+s/3U9se/RkFDSNDFtcDN6rHPDQogICAgICAgOiAgICAgUCBfSFNQQV9QTFVTX0ZBQ0hfUkVMX0NORl9FVg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7ICAgICAgDQp9IFRfelREX1BfaHNwYV9wbHVzX2ZhY2hfcmVsX2NuZjsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICBQSFktPkwxVA0KICAgILmmxNw6OrXXsuPIt8jPyb6z/dT2x79QQ0jQxbXAzeqxzw0KICAgICAgICAgICAgICAgICAgICAgIFAgX0hTUEFfUExVU19QQ0hfUkVMX0NORl9FVg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7ICAgICANCn0gVF96VERfUF9oc3BhX3BsdXNfcGNoX3JlbF9jbmY7DQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogIFJSQ6OoTDFUo6ktPlBIWQ0KICAgILmmxNw6DQogICAgICAgICAgICAgICAgINTa1PbHv0ZBQ0jMrM/Co6y4w8/7z6K3osvNuPjO78DtsuPTw9PauPzQwteo08O1xEhSTlRJu/JFUk5USTpQX0VGQUNIX1VQREFURV9STlRJX1JFUV9FVg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KdHlwZWRlZiBzdHJ1Y3R7ICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICB3QWN0aXZlX3RpbWU7LyowfjI1NTsgMjU2OsGivLTG8NCnKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgd1VwZGF0ZV90eXBlOy8qMaO61ru4/NDCSC1STlRJo7syo7rWu7j80MJFLVJOVEmjuzOjurj80MJILVJOVEm6zUUtUk5USTsqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICB3SF9ybnRpOy8q16jTw0hSTlRJLLWxd1VwZGF0ZV90eXBlzqoxu/IzyrHT0NCnKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgd0Vfcm50aTsgLyrXqNPDRVJOVEkstbF3VXBkYXRlX3R5cGXOqjK78jPKsdPQ0KcqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICB3UGFkZGluZzsNCn1UX3pURF9QX2VmYWNoX3VwZGF0ZV9ybnRpX3JlcTsNCiNlbmRpZg0KDQovKg0KICC94bm5tqjS5cu1w/cstMu94bm5ss7K/c/IxeTWw7j4bWFjLM/gudiyzsr9zai5/VRfekNVTWFjX1JhY2hfUGFyYV9SZXG907/axeTWw7j4bWFjOw0KICBtYWPNqLn9VF9QX1JBQ0hfUFJPQ0VEVVJFX1JFUb3Tv9q9q8/gudiyzsr9t6K4+M7vwO2y4w0KKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgIC8qPlBSQUNIIGluZm8qLw0KICAgIC8qtPK/18/e1sYsMH4xMDAqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1B1bmN0dXJpbmdfbGltaXQ7ICAgIA0KICAgIC8qMTAuMy42Ljc4YT4+U05DX1VMIGluZm8qLw0KICAgIA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7ICAgICAgICANCiAgICAvKg0KICAgICAgICBJbnRlZ2VyKC0xMjAuLi01OCkgYnkgc3RlcCBvZiAxDQogICAgICAgIHdQcnhfdXBfcGNoX2RlcyAgICA9ICB4LSgtMTIwKQ0KICAgICovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UHJ4X3VwX3BjaF9kZXM7DQogICAgDQogICAgLypJbnRlZ2VyKDAsMSwyLDMpKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQb3dlcl9yYW1wX3N0ZXA7DQogICAgLypJbnRlZ2VyKDEsMiw0LDgpOiBNYXhpdW0gbnVtYmVycyBvZiBTWU5DX1VMIFRyYW5zbWlzc2lvbnMgaW4gYSBwb3dlcg0KICAgICAgIHJhbXBpbmcgc2VxdWVuY2UNCiAgICAqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01heF9zeW5jX3VsX3RyYW5zbWlzc2lvbnM7DQogICAgICAgIA0KICAgIC8qPj5QUkFDSC1GUEFDSCovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UHJhY2hfZnBhY2hfbnVtOw0KICAgIFRfelREX1BfcHJhY2hfZnBhY2hfaW5mbyAgICAgICAgICAgICAgICAgdFByYWNoX2ZwYWNoX2luZm9bWl9URF9QX01BWF9QUkFDSF9GUEFDSF07ICAgIA0KDQogICAgLypSQUNIIFRGUyovDQogICAgLypJbnRlZ2VyKDEwLDIwLDQwLDgwKSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VHRpOw0KICAgIC8qDQogICAgICAgIEVudW1lcmF0ZWQoTm8gY29kaW5nLENvbnZvbHV0aW9uYWwsVHVyYm8pDQogICAgICAgIDA6Tm8gY29kaW5nLDE6Q29udm9sdXRpb25hbCwyOlR1cmJvDQogICAgKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDaGFubmVsX2NvZGluZ190eXBlOw0KICAgIA0KICAgIC8qDQogICAgSW50ZWdlcigxLi5oaVJNKQ0KICAgICovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UmF0ZV9tYXRjaGluZ19hdHRyaWJ1dGU7DQogICAgLypJbnRlZ2VyKDAsOCwxMiwxNiwyNCkqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0NyY19zaXplOw0KICAgIA0KICAgIC8qMTAuMy42LjU5IFByaW1hcnkgY2NwY2ggdHggcG93ZXINCiAgICAgICAgSW50ZWdlcig2Li40MylkQm0NCiAgICAqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYlByaW1hcnlfY2NwY2hfdHhfcG93ZXI7DQogICAgLyptYXhpbXVtIGFsbG93ZWQgdWwgdHggcG93ZXINCiAgICAgICAgSW50ZWdlcigtNTAuLjMzKQ0KICAgICAgICBiTWF4X2FsbG93ZWRfdWxfdHhfcG93ZXIgPSAoeCAtKC01MCkpDQogICAgICAgIA0KICAgICovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TWF4X2FsbG93ZWRfdWxfdHhfcG93ZXI7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VXBwY2hfY2hpcF9zaGlmdDsNCn1UX3pURF9QX2FkZF9wcmFjaF9yZXE7DQoNCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQog1K3T76O6Wl9QX1JBQ0hfUFJPQ0VEVVJFX1JFUV9FdiggVU1BQy0+UEhZICksIFpfUF9FUlVDQ0hfUFJPQ0VEVVJFX1JFUV9FdiggVU1BQy0+UEhZICkNCiDLtcP3OiANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovDQp0eXBlZGVmIHN0cnVjdCB7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnX2lkOw0KDQogICAgLypCaXQgc3RyaW5nKDgpLCB0aGUgdmFsdWUgMSBvZiBhIGJpdCBpbmRpY2F0ZXMgdGhlIFNZTkNfVUwgY29kZSBpbmRleCBpcyBhdmFpbGFibGUqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0F2YWlsYWJsZV9zeW5jX3VsX2NvZGVzX2luZGljZXM7DQogICAgLypTdWJjaGFubmVsX3NpemVfdHlwZTogyKHWtTEsMiw0LDgNCiAgICAxOnNpemUxLCAgaW5kaWNhdGVzIHRoYXQgYWxsIHN1YmNoYW5uZWxzIGFyZSBhdmFpbGFibGUNCiAgICAyOnNpemUyLA0KICAgIDQ6c2l6ZTQsDQogICAgODpzaXplOCovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3U3ViY2hhbm5lbF9zaXplX3R5cGU7DQogICAgLypjb3JyZXNwb25kaW5nIHRoZSBzaXplMixzaXplNCxzaXplOCovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3QXZhaWxhYmxlX3N1YmNoYW5uZWxfc2l6ZTsNCg0KICAgIC8qd0xhc3RGbGFn1rjKvlVNQUO1xFJBQ0i908jruf2zzNbQtMu0zsrHt/HS0c6qtdpNbWF4tM6jrLy01+6689K7tM6how0KICAgICAgMDogsrvKx9fuuvPSu7TOoaO0y8qxzu/A7bLj06a8zND4u7q05rXa0ru0zsv50K+0+LXEUkFDSMr9vt2juw0KICAgICAgMTog1+6689K7tM6jrE1BQ7Lj0tG+rbTvtb3X7rTz1ti0q7TOyv2ho7TLyrHO78DtsuPQ6Mm+s/27urTmtcRSQUNIyv2+3aGjKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdMYXN0RmxhZzsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KDQogICAgVF96VERfUF9hZGRfcHJhY2hfcmVxICAgICAgICAgICAgICAgICAgICB0UHJhY2hQYXJhOw0KfVRfelREX1BfUkFDSF9QUk9DRURVUkVfUkVROw0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiAgICAgICAgICAgICAgICAgICAgICAgICDO3s/f18rUtMXk1sPP4LnYvdO/2rao0uVFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogICAgICAgICAgICAgICAgICAgICAgICAgy6vEo0dBUM/gudi907/aICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiNpZmRlZiBNVUxUSV9JUkFUXzI5NjMNCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICBVUlJDQS0+VEQgUEhZICAgIFpfUF9HU01fSU5BQ1RfVElNRV9SRVFfRXYNCiAgICC5psTcOiAgICAgICAgICAyR9b3xKPKvcqxo6xHU03NqNaqVEREIEwxU7XEZ2FwyrG85NDFz6Kjuw0KICAgIL3hubk6ICAgICAgICAgIFRfelBfZ3NtX2luYWN0aXZlX3RpbWVfcmVxDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovDQp0eXBlZGVmIHN0cnVjdA0KeyAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdTdG9yZUZsZzsgICAgDQogICAgICAgICAgIA0KICAgIERXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHdHc21JbmFjdGl2ZVRpbWU7DQoNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdOdW1SZW1haW5pbmdHYXBzOyANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdTZWFyY2hQcmlvTW9kZTsgICANCg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0NsdXN0ZXJUeXBlOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0lkbGVGcmFtZU9mZnNldDsgICANCg0KICAgIFNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0dzbVRpbWluZ0NvcnJlY3Rpb247DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGFkZGluZzsNCn0gVF96UFNfVERfUF9pbmFjdGl2ZV90aW1lX3JlcSxUX3pURF9QX2luYWN0aXZlX3RpbWVfcmVxOw0KDQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICAgUEhZLT5VUlJBICAgICBaX1BfVU1UU19USU1FUl9TTkFQU0hPVF9JTkRfRXYNCiAgICC5psTcOiAgICAgICAgICBMMVPJz7GotcS/7NXVyrG85KO7DQogICAgveG5uTogICAgICAgICAgVF96UF91bXRzX3NuYXBzaG90X2luZA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KdHlwZWRlZiBzdHJ1Y3QNCnsgICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3U3ViU2ZuOyAgLypVTVRTIMv4tOa1xHNmbtfT1qG6xSovDQoNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDaGlwT2Zmc2V0OyAgLypVTVRTy/i05sqx1NqxvtfT1qHE2rXEY2hpcMar0sYqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmdzOw0KfSBUX3pURF9QX3VtdHNfc25hcHNob3RfaW5kOw0KI2VuZGlmDQoNCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICBVUlJDQS9VUlJDLT5QSFkgICAgIEwxR19VTVRTX0lETEVfUEVSSU9EX1JFUE1PREVfUkVRX0VWDQogICAguabE3DogICAgICAgICAgM0fW98Sjyr3KsaOsUFPF5NbDTDFTtcRnYXDEo8q9o7sNCiAgICC94bm5OiAgICAgICAgICBUX3pURF9QX3VtdHNfaWRsZV9QZXJpb2RSZXBfcmVxDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovDQp0eXBlZGVmIHN0cnVjdA0KeyAgICANCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsgICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UmVwb3J0aW5nTW9kZTsgICAgLyowOiBub3QgcmVwcm90IGdhcCwgMTpyZXBvcnQgZ2FwKi8NCiAgICBEV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR3R2FwSWQ7ICAvKs7VytbQ8sHQusUqLw0KfSBUX3pURF9QX3VtdHNfaWRsZV9QZXJpb2RSZXBfcmVxOw0KDQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICAgUEhZLT5VUlJDQSAgICAgWl9QX1VNVFNfSU5BQ1RJVkVfVElNRV9JTkRfRXYNCiAgICC5psTcOiAgICAgICAgICBMMVPJz7GotcRnYXDKsbzko7sNCiAgICC94bm5OiAgICAgICAgICBUX3pQX3VtdHNfaW5hY3RfdGltZV9pbmQNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8NCnR5cGVkZWYgc3RydWN0DQp7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3U3RhcnRDaGlwOyAgICAvKrG+Z2FwxvDKvLXjvuDA67G+19PWocbwyry147XExqvSxqOsvLRnYXDU2rG+19PWodbQtcTOu9bDo6y1pc67o7pDSElQKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdMZW5ndGhDaGlwOyAgIC8qsb5nYXC1xLOktsijrLWlzrujukNISVAqLw0KfSBUX3pURF9QX2dhcF9pbmZvX2luX3N1YmZyYW1lOw0KDQoNCnR5cGVkZWYgc3RydWN0DQp7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3U3RhclN1YnRTZm47ICAgICAgICAgICAvKsbwyry1xHNmbtfT1qG6xaOst7bOp6O6MC04MTkxKi8NCg0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd051bU9mSW5hY3RpdmVTdWJmcmFtZTsgLyqz1tD4tcTX09ahs6S2yCovICAgDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TnVtT2ZHYXBJblN1YkZyYW1lOyAgICAvKtTa0ru49tfT1qHW0GdhcLXEuPbK/SovDQoNCiAgICBUX3pURF9QX2dhcF9pbmZvX2luX3N1YmZyYW1lICAgICAgICAgICAgIGF0R2FwSW5mb0luU3ViRnJhbWVbWl9URF9QX01BWF9HQVBfTlVNXTsgLyrU2tK7uPbX09ah1tC492dhcLXEzrvWwyovDQogICAgRFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkd0dhcElkOyAgLyrO1crW0PLB0LrFKi8NCn0gVF96VERfUF91bXRzX2luYWN0X3RpbWVfaW5kOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgICAgIFJSQy0+UEhZDQogICAgICAgILmmxNw6DQogICAgICAgICAgICAgICAg0K3S6dW7zajWqs7vwO2y48rNt8XXytS0DQogICAgICAgIL3hubk6DQogICAgICAgICAgICAgICAgVF96VERfUF9SZWxfcmVxDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UGFkZGluZzsNCn1UX3pURF9QX1JlbF9yZXE7IA0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgICAgIFBIWS0+UlJDDQogICAgICAgILmmxNw6DQogICAgICAgICAgICAgICAgzu/A7bLjzajWqtCt0unVu8rNt8XXytS0yLfIzw0KICAgICAgICC94bm5Og0KICAgICAgICAgICAgICAgIFRfelREX1BfUmVsX2NuZg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnR5cGVkZWYgc3RydWN0ew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7DQp9VF96VERfUF9SZWxfY25mOyANCg0KI2lmZGVmIFI5X1NVUFBPUlQNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgICBMMVQ8LT5QSFkNCiAgICAgICAguabE3DoNCiAgICAgICAgICAgICAgIDEuVEREINb3xKPKvc/CRENIzKy9q834suDF5NbDtcRHQVDQxc+itPi4+M7vwO2y46Os0ru3vcPmveLO9rP20uzGtbXER0FQoaMNCiAgICAgICAgICAgICAgIMHt0ru3vcPmsdy/qs34suC4+Mbky/vWxsq9uaTX97XEyrG85FBfVERfRENIX0dBUF9DT05GSUdfUkVRX0VWICAgICAobWFjKSgptaXOu6OpDQogICAgICAgIL3hubk6ICBUX3pURF9QX01lYXNHYXBDb25maWdfUmVxDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp0eXBlZGVmIHN0cnVjdA0Kew0KICAgIFdPUkQgICAgICAgICAgICAgICAgd1BhdHRlcm5JZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgIHdBY3RpdmVGbGc7ICAvKjE9YkFjdGl2ZUZsZyCx7cq+vKS77qGjMLHtyr7IpbvuKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgIHdQZXJpb2Q7LypHQVDEo9DNtcTW2Li01tzG2qOstaXOu8rHzt7P3taho6gxMG1zo6kqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgd01lYXNQdXJwb3NlOy8qMT3S7Ma1IKOsMj1SQVQqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgd09mZnNldDsvKkdBUMSj0M3W2Li01tzG2sTao6xHQVDG8Mq8teMutaXOu8rHo6gxMG1zo6kqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgd0xlbmd0aDsvKiBHQVDEo9DNs9bQ+MqxvOQstaXOu8rHzt7P3taho6htc6OpKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgIHdUc0JpdG1hcDsvKiBHQVDEo9DNxNq1xMO/uPbX09ahyrHPttW808PH6b/2o6yxyMzYzrvWwzGx7cq+R0FQ1bzTw6OstNO1zbW9uN+12jCxyMzYse3Kvsqxz7YwKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgIHdQYWRkaW5nOw0KfVRfelREX1BfdW10c19HYXBQYXR0ZXJuOw0KDQp0eXBlZGVmIHN0cnVjdA0Kew0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICB3R2FwUGF0dGVybk51bTsNCiAgICBUX3pURF9QX3VtdHNfR2FwUGF0dGVybiAgICAgICBhdEdhcFBhdHRlcm5MaXN0WzZdOw0KfVRfelREX1BfTWVhc0dhcENvbmZpZ19SZXE7DQojZW5kaWYgLyogUjlfU1VQUE9SVCAqLw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAgICBMMVQ8LT5QSFkNCiAgICAgICAguabE3DoNCiAgICAgICAgICAgICAgICAgMi4gIFRERM6quKjEo8q9z8KjrMrVtb21xEdBUMXk1sNQX0lSQVRfR0FQX0NPTkZJR19SRVFfRVYNCiAgICAgICAgveG5uTogICBUX3pURF9QX0lyYXRHYXBDb25maWdfUmVxDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCg0KI2lmIChkZWZpbmVkICAoX0NISVBfWlgyOTc1MDIpKQ0KDQp0eXBlZGVmIHN0cnVjdA0Kew0KICAgIFdPUkQgICAgICAgICAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgIHdJZGxlT3JDb25uZWN0RmxnOy8qVETOqrio1sbKvcqx1vfWxsq9tcTXtMyso6zIoda1zqowse3Kvr/Vz9DMrMih1rXOqjGx7cq+way908ysKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgd09mZjsvKkdBUMbwyry148ar0sYutaXOu8rHo6g1bXOjqSovDQogICAgV09SRCAgICAgICAgICAgICAgIHdPZmZDaGlwOy8qR0FQxvDKvLXjLkNISVDGq9LGo6hjaGlwc6OpLNXm1f21xEdBUMbwyry148rHd09mZnNldCt3T2ZmQ2hpcCovDQogICAgRFdPUkQgICAgICAgICAgICAgIGR3TGVuZ3RoOy8qIEdBUMSj0M2z1tD4yrG85Cy1pc67ysejqGNoaXBzo6kqLw0KfVRfelREX1BfSXJhdEdhcENvbmZpZ19SZXE7DQoNCiNlbHNlDQp0eXBlZGVmIHN0cnVjdA0Kew0KICAgIFdPUkQgICAgICAgICAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICAgICAgICAgIHdJZGxlT3JDb25uZWN0RmxnOy8qVETOqrio1sbKvcqx1vfWxsq9tcTXtMyso6zIoda1zqowse3Kvr/Vz9DMrMih1rXOqjGx7cq+way908ysKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgd1N0YXJ0U3ViU2ZuOy8qR0FQxvDKvLXj1qG6xSovDQogICAgV09SRCAgICAgICAgICAgICAgIHdTdGFydE9mZkNoaXA7LypHQVDG8Mq8teMuQ0hJUMar0sajqGNoaXBzo6ks1ebV/bXER0FQxvDKvLXjysd3U3RhcnRTdWJTZm4rd1N0YXJ0T2ZmQ2hpcCovDQogICAgRFdPUkQgICAgICAgICAgICAgIGR3TGVuZ3RoOy8qIEdBUMSj0M2z1tD4yrG85Cy1pc67ysejqGNoaXBzo6kqLw0KfVRfelREX1BfSXJhdEdhcENvbmZpZ19SZXE7DQojZW5kaWYNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICBMMVQtPlBIWQ0KICAgILmmxNw6DQogICAgICAgICAgICAgICAgx+vH8yDO78DtsuPNo9a5yrnTw0dBUA0KICAgIM/7z6K8sL3hubk6ICAgICB6UFNfVERfUF9BQk9SVF9JUkFUX0dBUF9SRVFfRXYNCiAgICAgICAgICAgICAgICAgICBUX3pURF9QX0FCT1JUX0lSQVRfR0FQX1JFUQ0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KdHlwZWRlZiBzdHJ1Y3QgDQp7IA0KICAgIFdPUkQgICAgICAgICAgICAgd01zZ0lkOw0KICAgIFdPUkQgICAgICAgICAgICAgd1BhZGRpbmc7DQp9VF96VERfUF9BQk9SVF9JUkFUX0dBUF9SRVE7DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgUEhZLT5MMVQNCiAgICC5psTcOg0KICAgICAgICAgICAgICAgICDO78DtsuPK1bW9xuTL+9bGyr3K1bvYR0FQtcTP+8+iuvOjrLK71NrKudPDR0FQtcTIt8jPDQogICAgz/vPorywveG5uTogICAgIHpQU19URF9QX0FCT1JUX0lSQVRfR0FQX0NORl9Fdg0KICAgICAgICAgICAgICAgICAgIFpfUF9BQk9SVF9JUkFUX0dBUF9DTkYNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnR5cGVkZWYgc3RydWN0IA0KeyANCiAgICBXT1JEICAgICAgICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgICAgICAgIHdQYWRkaW5nOw0KfVRfelREX1BfQUJPUlRfSVJBVF9HQVBfQ05GOw0KLyoNCiAgICBSUkMtPlBIWQ0KICAgIL3hubk6VF96VERfUF9VbF9waHlfY2hfY3RybF9yZXENCiAgICDTw82+OtDeuMTJz9DQzu/A7dDFtcC1xL/Y1sbQxc+iDQoqLw0KdHlwZWRlZiBzdHJ1Y3R7DQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3TXNnSWQ7IA0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhZGRpbmc7DQogICAgLyrM2Mrizbu3osn6s8nKscbaKi8NCiAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdTcGVjX2J1cnN0X2dlbmVyYXRpb25fcGVyaW9kOy8qKMih1rUwLDIsNCw4LDE2LDMyLDY0LDEyOCwyNTYstaXOu2ZyYW1lOzCx7cq+srvG9LavVUwgRFBDSCBEVFgsxuTT4Na1tPqx7cb0tq9VTCBEUENIIERUWCkqLw0KICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1VsX1N5bmNfU3RlcF9TaXplOy8qSW50ZWdlcigxLi44KSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VWxfU3luY19GcmVxOy8qSW50ZWdlcigxLi44KSovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3UFJYaHNfc2ljaDsvKr32xeTWw0hTRFBByrHT0NCnLEludGVnZXIoLTEyMC4uLTU4KTt3UFJYaHNfc2ljaCAgICA9ICAgeC0oLTEyMCk7eCA9IHdQUlhoc19zaWNoIC0gMTIwOyovDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VHBjX3N0ZXBfc2l6ZTsvKr32xeTWw0hTRFBByrHT0NCnLEludGVnZXIoMSwyLDMpKi8gDQogICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VWxfZHBjaF9wb3dlcl9jdHJsX2luZm9fZmxnOy8qyc/Pwrmmv9jQxc+itcSx6ta+zrssMbT6se3T0Lmmv9jQxc+iLDC0+rHtzt65pr/Y0MXPoiovDQogICAgLypVcGxpbmsgZHBjaCBwb3dlciBjb250cm9sIGluZm8qLw0KICAgIFRfelREX1BfdWxfZHBjaF9wb3dlcl9jdHJsICAgICAgICAgICAgICAgICAgdFVsX2RwY2hfcG93ZXJfY3RybF9pbmZvOw0KfVRfelREX1BfVWxfcGh5X2NoX2N0cmxfcmVxOw0KDQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgIEwxVC9MMVctPlBIWQ0KICAgIMrCvP6julBfVERfWlRQQ0dfUkVRX0VWDQogICAguabE3DoNCiAgICAgICAg0N64xC+y6dGvVETO78DtsuPF5NbDss7K/aGjDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KdHlwZWRlZiBzdHJ1Y3QgDQp7DQogICAgV09SRCAgICAgICB3TXNnSWQ7DQogICAgV09SRCAgICAgICB3Q21kOyAgICAgIC8qIMP8we66xaOsttTTprK7zay1xM7vwO2y47mmxNwgKi8NCiAgICBXT1JEICAgICAgIGF3VmFsRmdbWl9aVFBDR19WQUxGR19OVU1dOyAgIC8qILHtyr5hZHdWYWzKx7fxtObU2qOsMLHtyr6yu7Tm1NqjrDGx7cq+tObU2iAqLw0KICAgIERXT1JEICAgICAgYWR3VmFsW1pfWlRQQ0dfVkFMRkdfTlVNXTsgICAgLyogss7K/cHQse2jrNDeuMQvtsHIobXEzu/A7bLjss7K/aOsss7K/cq1vMq6rNLl08nO78DtsuO4+LP2ICovDQp9VF96VERfUF9adHBjZ19SZXE7DQoNCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICAgUEhZLT5MMVQNCiAgICDKwrz+o7pQX1REX1pUUENHX0NORl9FVg0KICAgILmmxNw6DQogICAgICAgINDeuMQvsunRr1REzu/A7bLjxeTWw7LOyv21xM/s06bP+8+ioaMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovDQp0eXBlZGVmIHN0cnVjdCANCnsNCiAgICBXT1JEICAgICAgIHdNc2dJZDsNCiAgICBXT1JEICAgICAgIHdDbWQ7ICAgICAgLyogw/zB7rrFo6y21NOmsrvNrLXEzu/A7bLjuabE3KOsYk1vZGU9MC8xtrzT0NCnICovDQogICAgV09SRCAgICAgICB3UnNsdDsgICAgIC8qILHtyr7J6NbDveG5+6OsWl9UUlVFyejWw7PJuaajrFpfRkFMU0XJ6NbDyqew3CAgd0NtZM6qyejWw8P8we7KsdPQ0KcgKi8NCiAgICBXT1JEICAgICAgIGF3VmFsRmdbWl9aVFBDR19QQVJBTV9OVU1dOyAvKrC01dXPwrHqus1kd1ZhbNbQ1rXSu9K7ttTTpqOsYlZhbDFGZ1swXbHtyr5kd1ZhbFswXcrHt/G05tTaLNLAtM7A4M3Go6wwse3KvrK7tObU2qOsMbHtyr605tTaKi8NCiAgICBMT05HICAgICAgIGFsVmFsW1pfWlRQQ0dfUEFSQU1fTlVNXTsgICAvKrLOyv0xL7LOyv0yoa2jrNDeuMQvtsHIobXEzu/A7bLjss7K/aOsss7K/cq1vMq6rNLl08nO78DtsuO4+LP2Ki8NCn1UX3pURF9QX1p0cGNnX0NuZjsNCg0KI2VuZGlmICAgICAgICAvLyAvIFpQU19URFBTX1BIWV9JTlRFUkZBQ0VfSA0KDQoNCg0K