LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqKiCw5sioy/nT0CAoQykyMDE1LCDW0NDLzajRtrnJt93T0M/euavLvqGjDQoqKiANCioqIM7EvP7D+7PGOiAgICAgdm9pY2UuYw0KKiogzsS8/rHqyrY6ICAgICANCioqIMTayN3VqtKqOiAgICANCioqIMq508O3vbeoOiAgICAgDQoqKiANCioqINDeuMTI1cbaICAgICAgICCw5rG+usUgICAgICDQ3rjEseq8xyAgICAgICAg0N64xMjLICAgICAgICAgINDeuMTE2sjdDQoqKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKiogMjAxOS8wOS8yNSAgICAgVjEuMCAgICAgICAgQ3JlYXRlICAgICAgICAgIHh4cSAgICAgICAgtLS9qA0KKiogDQoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQoNCiNpbmNsdWRlIDxzdGRpbnQuaD4NCiNpbmNsdWRlIDxsaW51eC92b2x0ZV9kcnYuaD4NCiNpbmNsdWRlIDxzeXMvaW9jdGwuaD4NCiNpbmNsdWRlIDxmY250bC5oPg0KI2luY2x1ZGUgPHRpbnlhbHNhL2F1ZGlvX21peGVyX2N0cmwuaD4NCiNpbmNsdWRlICJ2b2ljZV9saWIuaCINCiNpbmNsdWRlICJ2b2ljZV9pcGMuaCINCg0KDQoNCiNkZWZpbmUgVk9JQ0VfREVWX05BTUUgIi9kZXYvdm9pY2VfZGV2aWNlIg0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3Qgew0KCWludCBmZDsNCgl1bnNpZ25lZCBpbnQgc3RhdGU7IC8vIDAgY2xvc2U7MSBvcGVuDQoJVF9Wb2ljZV9QYXJhIHZwYXJhOw0KfSBUX3ZvaWNlSW5mbzsNCg0KVF92b2ljZUluZm8gKnZvaWNlaW5mbyA9IE5VTEw7DQoNCnN0YXRpYyBpbnQgc2xpY19mbGFnID0gMDsNCnN0YXRpYyBpbnQgc2xpY19mbGFnX2FscmVhZHkgPSAwOy8vIDAgbm90IGdldCAsMSBhbHJlYWR5IGdldA0KDQpzdHJ1Y3QgcGNtICAqdm9sdGVfcGNtX3ZvaWNlX291dCA9IE5VTEw7DQpzdHJ1Y3QgcGNtICAqdm9sdGVfcGNtX3ZvaWNlX2luID0gTlVMTDsNCg0KI2lmIDANCg0KDQpUX1ZvaWNlX1BhcmEgZ3NtaHdwYXJhID0gew0KCTgwMDAsICAvLzgwMDA7MTYwMDANCgkwLCAvLy8vIDAgZ3NtOzEgdGQ7MiB3Y2RtYTszIGx0ZQ0KCTAvLzAgaGFyZHdhcmUgZHNwOzEgc29mdCBhbXIgbGliDQp9Ow0KDQpUX1ZvaWNlX1BhcmEgdGRuYmh3cGFyYSA9IHsNCgk4MDAwLCAgLy84MDAwOzE2MDAwDQoJMSwgLy8vLyAwIGdzbTsxIHRkOzIgd2NkbWE7MyBsdGUNCgkwLC8vMCBhbXItbmI7MSBhbXItd2INCgkwLy8wIGhhcmR3YXJlIGRzcDsxIHNvZnQgYW1yIGxpYg0KfTsNCg0KVF9Wb2ljZV9QYXJhIHRkbmJzZnBhcmEgPSB7DQoJODAwMCwgIC8vODAwMDsxNjAwMA0KCTEsIC8vLy8gMCBnc207MSB0ZDsyIHdjZG1hOzMgbHRlDQoJMCwvLzAgYW1yLW5iOzEgYW1yLXdiDQoJMS8vMCBoYXJkd2FyZSBkc3A7MSBzb2Z0IGFtciBsaWINCn07DQoNClRfVm9pY2VfUGFyYSB0ZHdic2ZwYXJhID0gew0KCTgwMDAsICAvLzgwMDA7MTYwMDANCgkxLCAvLy8vIDAgZ3NtOzEgdGQ7MiB3Y2RtYTszIGx0ZQ0KCTEsLy8wIGFtci1uYjsxIGFtci13Yg0KCTEvLzAgaGFyZHdhcmUgZHNwOzEgc29mdCBhbXIgbGliDQp9Ow0KDQoNCiNlbmRpZg0KLy9zdGF0aWMgdm9sYXRpbGUgaW50IHZvaWNlaW5mby5mZCA9IDA7DQoNCg0KaW50IHZvaWNlX29wZW4oVF9Wb2ljZV9QYXJhICpwYXJhKQ0Kew0KCWludCByZXQgPSAwOw0KCWlmICghcGFyYSkgew0KDQoJCXByaW50Zigidm9pY2U6IG9wZW4gcGFyYSBpcyBOVUxMLlxuIik7DQoNCgkJcmV0dXJuIC0xOw0KCX0NCg0KCXZvaWNlaW5mbyA9IGNhbGxvYygxLCBzaXplb2YoVF92b2ljZUluZm8pKTsNCglpZiAoIXZvaWNlaW5mbykgew0KDQoJCXByaW50Zigidm9pY2U6IG9wZW4gY2FsbG9jIGZhaWwhXG4iKTsNCgkJcmV0dXJuIC0xOw0KCX0NCg0KCXZvaWNlaW5mby0+dnBhcmEgPSAqcGFyYTsNCg0KCXZvaWNlaW5mby0+ZmQgPSBvcGVuKFZPSUNFX0RFVl9OQU1FLCBPX1JET05MWSk7DQoJaWYgKHZvaWNlaW5mby0+ZmQgPCAwKSB7DQoJCXByaW50Zigidm9pY2UgbGliOiBvcGVuIHZvaWNlIGRldmljZSBlcnJvci5cbiIpOw0KCQlmcmVlKHZvaWNlaW5mbyk7DQoJCXJldHVybiAtMTsNCg0KCX0NCg0KDQoJcmV0ID0gaW9jdGwodm9pY2VpbmZvLT5mZCwgVk9JQ0VfSU9DVExfU1RBUlQsIHBhcmEpOw0KCWlmIChyZXQpIHsNCgkJcHJpbnRmKCJ2b2ljZSBsaWI6IHZvaWNlIHN0YXJ0IGZkPSVkLHJldD0lZC5cbiIsIHZvaWNlaW5mby0+ZmQsIHJldCk7DQoJCWdvdG8gZXJyOw0KCX0NCglwcmludGYoInZvaWNlIG9wZW4gZW5kICFcbiIpOw0KDQoJcmV0dXJuIDA7DQoNCmVycjoNCgljbG9zZSh2b2ljZWluZm8tPmZkKTsNCglmcmVlKHZvaWNlaW5mbyk7DQoJcHJpbnRmKCJ2b2ljZSBvcGVuIGVyciBlbmQgIVxuIik7DQoJcmV0dXJuIC0xOw0KDQoNCn0NCg0KDQppbnQgdm9pY2VfY2xvc2UoVF9Wb2ljZV9QYXJhICpwYXJhKQ0Kew0KCWludCByZXQgPSAwOw0KDQoJaWYgKCF2b2ljZWluZm8pIHsNCg0KCQlwcmludGYoInZvaWNlOiBjbG9zZSB2b2ljZWluZm8gaXMgTlVsbCFcbiIpOw0KCQlyZXR1cm4gMDsNCgl9DQoNCglyZXQgPSBpb2N0bCh2b2ljZWluZm8tPmZkLCBWT0lDRV9JT0NUTF9TVE9QLCBwYXJhKTsNCg0KCWlmIChyZXQpIHsNCgkJcHJpbnRmKCJ2b2ljZSBsaWI6IHZvaWNlIHN0b3AgZmQ9JWQscmV0PSVkLlxuIiwgdm9pY2VpbmZvLT5mZCwgcmV0KTsNCgl9DQoNCglpZiAodm9pY2VpbmZvLT5mZCA+PSAwKSB7DQoJCWNsb3NlKHZvaWNlaW5mby0+ZmQpOw0KCX0NCgl2b2ljZWluZm8tPmZkID0gLTE7DQoNCglmcmVlKHZvaWNlaW5mbyk7DQoJdm9pY2VpbmZvID0gTlVMTDsNCg0KCXByaW50Zigidm9pY2UgY2xvc2UgZW5kICFcbiIpOw0KDQoJcmV0dXJuIDA7DQp9DQppbnQgdm9pY2VfVnBsb29wKGludCAqcGF0aCkNCnsNCglpbnQgcmV0ID0gMDsNCglpbnQgZmQgPSAtMTsNCglwcmludGYoInZvaWNlX1ZwbG9vcDogIHN0YXJ0IHBhdGg9JWQhXG4iLCpwYXRoKTsNCglmZCA9IG9wZW4oVk9JQ0VfREVWX05BTUUsIE9fUkRPTkxZKTsNCglpZiAoZmQgPCAwKSB7DQoJCXByaW50Zigidm9pY2VfVnBsb29wOiBvcGVuIHZvaWNlIGRldmljZSBlcnJvci5cbiIpOw0KCQlyZXR1cm4gIC0xOw0KCX0NCglyZXQgPSBpb2N0bChmZCwgVk9JQ0VfSU9DVExfVlBMT09QLCBwYXRoKTsNCglpZiAocmV0KSB7DQoJCXByaW50Zigidm9pY2VfVnBsb29wOiAgcmV0PSVkLHBhdGg9JXAuXG4iLCByZXQsIHBhdGgpOw0KCQljbG9zZShmZCk7DQoJCXJldHVybiAgLTE7DQoJfQ0KCWNsb3NlKGZkKTsNCglyZXR1cm4gMDsNCg0KfQ0KDQppbnQgdm9pY2VfR2V0U2xpY0ZsYWcodm9pZCkNCnsNCglpbnQgcmV0ID0gMDsNCglpbnQgZmQgPSAtMTsNCglpbnQgZmxhZyA9IDA7DQoJcHJpbnRmKCJ2b2ljZV9HZXRTbGljRmxhZzogIHN0YXJ0IVxuIik7DQoJZmQgPSBvcGVuKFZPSUNFX0RFVl9OQU1FLCBPX1JET05MWSk7DQoJaWYgKGZkIDwgMCkgew0KCQlwcmludGYoInZvaWNlX0dldFNsaWNGbGFnOiBvcGVuIHZvaWNlIGRldmljZSBlcnJvci5cbiIpOw0KCQlyZXR1cm4gIC0xOw0KCX0NCglyZXQgPSBpb2N0bChmZCwgVk9JQ0VfSU9DVExfR0VUX1NMSUNfVVNFX0ZMQUcsICZmbGFnKTsNCglpZiAocmV0KSB7DQoJCXByaW50Zigidm9pY2VfR2V0U2xpY0ZsYWc6ICByZXQ9JWQsZmxhZz0lZC5cbiIsIHJldCwgZmxhZyk7DQoJCWNsb3NlKGZkKTsNCgkJcmV0dXJuICAtMTsNCgl9DQoJY2xvc2UoZmQpOw0KCXNsaWNfZmxhZ19hbHJlYWR5ID0gMTsNCglyZXR1cm4gZmxhZzsNCg0KfQ0KDQpzdGF0aWMgVF9aRHJ2Vm9pY2VfQ2ZnIHNfY2ZnUGFyYW0gPSB7MH07DQpzdGF0aWMgaW50IGN1cl92bW9kZSA9IE1BWF9BVk9JQ0VfTU9ERTsNCg0KaW50IHpEcnZWb2x0ZV9QcmVPcGVuKFRfWkRydlZvbHRlX0NmZyAqY2ZnUGFyYW0pDQp7DQoNCglzdHJ1Y3QgbWl4ZXIgKnZvaWNlX21peGVyID0gTlVMTDsNCglzdHJ1Y3QgcGNtX2NvbmZpZyBjb25maWdfdm9pY2UgPSB7MH07DQoJaW50IHJldCA9IDA7DQoJcHJpbnRmKCIgdm9pY2UgbGliIHpEcnZWb2x0ZV9QcmVPcGVuIVxuIik7DQoNCglpZiAoc2xpY19mbGFnX2FscmVhZHkgPT0gMSkgew0KCQlwcmludGYoIiB2b2ljZSAgc2xpYyBmbGFnIGFscmVhZHkgZ2V0LCBzbGljX2ZsYWc9JWQhXG4iLCBzbGljX2ZsYWcpOw0KCQlpZiAoc2xpY19mbGFnID09IDEpIHsNCgkJCXJldHVybiAwOw0KCQl9DQoNCgl9IGVsc2Ugew0KCQlzbGljX2ZsYWcgPSB2b2ljZV9HZXRTbGljRmxhZygpOw0KCQlwcmludGYoIiB2b2ljZSAgc2xpYyBmbGFnICBnZXQsIHNsaWNfZmxhZz0lZCFcbiIsIHNsaWNfZmxhZyk7DQoJCWlmIChzbGljX2ZsYWcgPT0gMSkgew0KCQkJcmV0dXJuIDA7DQoJCX0NCgl9DQojaWYgZGVmaW5lZChfQUxTQV9DT0RFQ19JTl9DQVApICYmIGRlZmluZWQoX1VTRV9BTFNBX0FUX0lOVEYpDQoNCiAgIA0KCSAgIHByaW50ZigiJXM6IGkycyBhbmQgY29kZWMgbm90IG5lZWQgY29uZmlnLHJldHVybiFcbiIsX19mdW5jX18pOyANCgkgICByZXR1cm4gMDsNCg0KI2VsaWYgZGVmaW5lZChfQUxTQV9DT0RFQ19JTl9DQVApDQoNCg0KCSAgIGlmKGNmZ1BhcmFtLT5jbG9ja19yYXRlID09IDgwMDApew0KDQoJCSAgICByZXQgPSBjYXBfYWxzYV92b2ljZV9vcGVuKEFWT0lDRV80R19OQik7DQoJCQlwcmludGYoIiVzOmNhcF9hbHNhX3ZvaWNlX29wZW4gY2xvY2tfcmF0ZSglZCkgcmV0PSVkIVxuIixfX2Z1bmNfXyxjZmdQYXJhbS0+Y2xvY2tfcmF0ZSxyZXQpOyANCgkgICAgICAgIGN1cl92bW9kZSA9IEFWT0lDRV80R19OQjsNCg0KCSAgIH0NCgkgICBlbHNlIGlmKGNmZ1BhcmFtLT5jbG9ja19yYXRlID09IDE2MDAwKXsNCg0KCQkgICByZXQgPSBjYXBfYWxzYV92b2ljZV9vcGVuKEFWT0lDRV80R19XQik7DQoJCSAgIHByaW50ZigiJXM6Y2FwX2Fsc2Ffdm9pY2Vfb3BlbiBjbG9ja19yYXRlKCVkKSByZXQ9JWQhXG4iLF9fZnVuY19fLGNmZ1BhcmFtLT5jbG9ja19yYXRlLHJldCk7CQ0KCSAgICAgICAgY3VyX3Ztb2RlID0gQVZPSUNFXzRHX1dCOw0KCSAgIH0NCgkgICBlbHNlew0KDQoJCSAgIHByaW50ZigiJXM6Y2FwX2Fsc2Ffdm9pY2Vfb3BlbiBjbG9ja19yYXRlKCVkKSBub3Qgc3VwcG9ydCFcbiIsX19mdW5jX18sY2ZnUGFyYW0tPmNsb2NrX3JhdGUpOwkNCgkJICAgcmV0dXJuIC0yOw0KDQoJICAgfQ0KCSAgIHNfY2ZnUGFyYW0gPSAqY2ZnUGFyYW07DQoJICAgcmV0dXJuIHJldDsNCiAgICANCiNlbmRpZg0KDQoNCgkvL29wZW4gbWl4ZXIgZGV2IGZvciBjb2RlYyBjb250cm9sDQoJdm9pY2VfbWl4ZXIgPSBtaXhlcl9vcGVuKDApOw0KCWlmICghdm9pY2VfbWl4ZXIpIHsNCgkJcHJpbnRmKCJ2b2ljZV9taXhlciBvcGVuIGZhaWxlZCFcbiIpOw0KCQlyZXR1cm4gLTE7DQoJfQ0KDQoJLy9jb25maWcgbWl4ZXIgZGV2DQoJbWl4X3NldF92b2ljZV9wYXRoKHZvaWNlX21peGVyLCBUX09VVFBVVF9TUEVBS0VSKTsNCgltaXhfc2V0X3ZvaWNlX3ZvbCh2b2ljZV9taXhlciwgVF9WT0lDRV9WT0xfM19MRVZFTCk7DQoNCgkvL2Nsb3NlIG1peGVyDQoJbWl4ZXJfY2xvc2Uodm9pY2VfbWl4ZXIpOw0KCXZvaWNlX21peGVyID0gTlVMTDsNCg0KCS8vb3BlbiBwY20gZGV2IGZvciBkYXRhIHRyYW5mDQoJY29uZmlnX3ZvaWNlLmNoYW5uZWxzID0gY2ZnUGFyYW0tPmNoYW5uZWxfY291bnQ7DQoJY29uZmlnX3ZvaWNlLnJhdGUgPSBjZmdQYXJhbS0+Y2xvY2tfcmF0ZTsNCgkvL2J1ZmZlciBudW0NCgljb25maWdfdm9pY2UucGVyaW9kX2NvdW50ID0gMzsNCgkvL2J1ZmZlciBzaXplDQoJY29uZmlnX3ZvaWNlLnBlcmlvZF9zaXplID0gY2ZnUGFyYW0tPnNhbXBsZXNfcGVyX2ZyYW1lICogIGNmZ1BhcmFtLT5iaXRzX3Blcl9zYW1wbGUgLyA4Ow0KCS8vMTYtYml0IHNpZ25lZA0KCWNvbmZpZ192b2ljZS5mb3JtYXQgPSBQQ01fRk9STUFUX1MxNl9MRTsNCg0KCS8vY2FyZCAwIGRldiAxDQoJLy8yM0cgY2FyZCAwIGRldiAyDQoJdm9sdGVfcGNtX3ZvaWNlX291dCA9IHBjbV9vcGVuKDAsIDEsIFBDTV9PVVQsICZjb25maWdfdm9pY2UpOw0KCWlmICghcGNtX2lzX3JlYWR5KHZvbHRlX3BjbV92b2ljZV9vdXQpKSB7DQoJCXByaW50Zigidm9sdGVfcGNtX3ZvaWNlX291dCBvcGVuIGZhaWxlZCFcbiIpOw0KCQlnb3RvIGVycl9yZXQ7DQoJfQ0KDQoJdm9sdGVfcGNtX3ZvaWNlX2luID0gcGNtX29wZW4oMCwgMSwgUENNX0lOLCAmY29uZmlnX3ZvaWNlKTsNCglpZiAoIXBjbV9pc19yZWFkeSh2b2x0ZV9wY21fdm9pY2VfaW4pKSB7DQoJCXByaW50Zigidm9sdGVfcGNtX3ZvaWNlX2luIG9wZW4gZmFpbGVkIVxuIik7DQoJCWdvdG8gZXJyX3JldDsNCgl9DQoNCglpZiAoMCAhPSBwY21fcHJlcGFyZSh2b2x0ZV9wY21fdm9pY2Vfb3V0KSkgew0KCQlwcmludGYoInZvbHRlX3BjbV92b2ljZV9vdXQgcGNtX3ByZXBhcmUgZmFpbGVkIVxuIik7DQoJCWdvdG8gZXJyX3JldDsNCgl9DQoNCglpZiAoMCAhPSBwY21fcHJlcGFyZSh2b2x0ZV9wY21fdm9pY2VfaW4pKSB7DQoJCXByaW50Zigidm9sdGVfcGNtX3ZvaWNlX2luIHBjbV9wcmVwYXJlIGZhaWxlZCFcbiIpOw0KCQlnb3RvIGVycl9yZXQ7DQoJfQ0KCXJldHVybiAwOw0KZXJyX3JldDoNCg0KCXBjbV9jbG9zZSh2b2x0ZV9wY21fdm9pY2Vfb3V0KTsNCgl2b2x0ZV9wY21fdm9pY2Vfb3V0ID0gTlVMTDsNCg0KCWlmICh2b2x0ZV9wY21fdm9pY2VfaW4pIHsNCgkJcGNtX2Nsb3NlKHZvbHRlX3BjbV92b2ljZV9pbik7DQoJCXZvbHRlX3BjbV92b2ljZV9pbiA9IE5VTEw7DQoJfQ0KCXJldHVybiAtMTsNCg0KfQ0KDQp2b2lkIHpEcnZWb2x0ZV9QcmVDbG9zZSh2b2lkKQ0Kew0KCWludCByZXQgPSAwOw0KDQoJcHJpbnRmKCIgdm9pY2UgbGliIHpEcnZWb2x0ZV9QcmVDbG9zZSFcbiIpOw0KDQoJaWYgKHNsaWNfZmxhZ19hbHJlYWR5ID09IDEpIHsNCgkJcHJpbnRmKCIgdm9pY2UgIHNsaWMgZmxhZyBhbHJlYWR5IGdldCwgc2xpY19mbGFnPSVkIVxuIiwgc2xpY19mbGFnKTsNCgkJaWYgKHNsaWNfZmxhZyA9PSAxKSB7DQoJCQlyZXR1cm47DQoJCX0NCg0KCX0gZWxzZSB7DQoJCXNsaWNfZmxhZyA9IHZvaWNlX0dldFNsaWNGbGFnKCk7DQoJCXByaW50ZigiIHZvaWNlICBzbGljIGZsYWcgIGdldCwgc2xpY19mbGFnPSVkIVxuIiwgc2xpY19mbGFnKTsNCgkJaWYgKHNsaWNfZmxhZyA9PSAxKSB7DQoJCQlyZXR1cm47DQoJCX0NCgl9DQojaWYgZGVmaW5lZChfQUxTQV9DT0RFQ19JTl9DQVApICYmIGRlZmluZWQoX1VTRV9BTFNBX0FUX0lOVEYpDQoJDQoJCXByaW50ZigiJXM6IGkycyBhbmQgY29kZWMgbm90IG5lZWQgY29uZmlnLHJldHVybiFcbiIsX19mdW5jX18pOyANCgkJcmV0dXJuIDsNCiNlbGlmIGRlZmluZWQoX0FMU0FfQ09ERUNfSU5fQ0FQKQ0KCQlpZihzX2NmZ1BhcmFtLmNsb2NrX3JhdGUgPT0gODAwMCl7DQoJCQ0KCQkJIHJldCA9IGNhcF9hbHNhX3ZvaWNlX2Nsb3NlKEFWT0lDRV80R19OQik7DQoJCQkgcHJpbnRmKCIlczpjYXBfYWxzYV92b2ljZV9jbG9zZSBjbG9ja19yYXRlKCVkKSByZXQ9JWQhXG4iLF9fZnVuY19fLHNfY2ZnUGFyYW0uY2xvY2tfcmF0ZSxyZXQpOyANCgkJDQoJCX0NCgkJZWxzZSBpZihzX2NmZ1BhcmFtLmNsb2NrX3JhdGUgPT0gMTYwMDApew0KCQkNCgkJCXJldCA9IGNhcF9hbHNhX3ZvaWNlX2Nsb3NlKEFWT0lDRV80R19XQik7DQoJCQlwcmludGYoIiVzOmNhcF9hbHNhX3ZvaWNlX2Nsb3NlIGNsb2NrX3JhdGUoJWQpIHJldD0lZCFcbiIsX19mdW5jX18sc19jZmdQYXJhbS5jbG9ja19yYXRlLHJldCk7IA0KCQkNCgkJfQ0KCQllbHNlew0KCQkNCgkJCXByaW50ZigiJXM6Y2FwX2Fsc2Ffdm9pY2VfY2xvc2UgY2xvY2tfcmF0ZSglZCkgbm90IHN1cHBvcnQhXG4iLF9fZnVuY19fLHNfY2ZnUGFyYW0uY2xvY2tfcmF0ZSk7CSANCgkJDQoJCX0NCgkJcmV0dXJuOw0KDQoNCg0KI2VuZGlmDQoNCg0KCWlmICh2b2x0ZV9wY21fdm9pY2Vfb3V0KSB7DQoJCXBjbV9jbG9zZSh2b2x0ZV9wY21fdm9pY2Vfb3V0KTsNCgkJdm9sdGVfcGNtX3ZvaWNlX291dCA9IE5VTEw7DQoJfQ0KCWlmICh2b2x0ZV9wY21fdm9pY2VfaW4pIHsNCgkJcGNtX2Nsb3NlKHZvbHRlX3BjbV92b2ljZV9pbik7DQoJCXZvbHRlX3BjbV92b2ljZV9pbiA9IE5VTEw7DQoJfQ0KfQ0KDQoNCg0KDQoNCg==