fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ck1PVE9ST0xBIE1JQ1JPUFJPQ0VTU09SICYgTUVNT1JZIFRFQ0hOT0xPR1kgR1JPVVAKTTY4MDAwIEhpLVBlcmZvcm1hbmNlIE1pY3JvcHJvY2Vzc29yIERpdmlzaW9uCk02ODA2MCBTb2Z0d2FyZSBQYWNrYWdlClByb2R1Y3Rpb24gUmVsZWFzZSBQMS4wMCAtLSBPY3RvYmVyIDEwLCAxOTk0CgpNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgpUSEUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKTU9UT1JPTEEgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELApJTkNMVURJTkcgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQphbmQgYW55IHdhcnJhbnR5IGFnYWluc3QgaW5mcmluZ2VtZW50IHdpdGggcmVnYXJkIHRvIHRoZSBTT0ZUV0FSRQooSU5DTFVESU5HIEFOWSBNT0RJRklFRCBWRVJTSU9OUyBUSEVSRU9GKSBhbmQgYW55IGFjY29tcGFueWluZyB3cml0dGVuIG1hdGVyaWFscy4KClRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCklOIE5PIEVWRU5UIFNIQUxMIE1PVE9ST0xBIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgooSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUyBQUk9GSVRTLApCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIE9USEVSIFBFQ1VOSUFSWSBMT1NTKQpBUklTSU5HIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU09GVFdBUkUuCk1vdG9yb2xhIGFzc3VtZXMgbm8gcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBtYWludGVuYW5jZSBhbmQgc3VwcG9ydCBvZiB0aGUgU09GVFdBUkUuCgpZb3UgYXJlIGhlcmVieSBncmFudGVkIGEgY29weXJpZ2h0IGxpY2Vuc2UgdG8gdXNlLCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoZSBTT0ZUV0FSRQpzbyBsb25nIGFzIHRoaXMgZW50aXJlIG5vdGljZSBpcyByZXRhaW5lZCB3aXRob3V0IGFsdGVyYXRpb24gaW4gYW55IG1vZGlmaWVkIGFuZC9vcgpyZWRpc3RyaWJ1dGVkIHZlcnNpb25zLCBhbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KTm8gbGljZW5zZXMgYXJlIGdyYW50ZWQgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZSB1bmRlciBhbnkgcGF0ZW50cwpvciB0cmFkZW1hcmtzIG9mIE1vdG9yb2xhLCBJbmMuCn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgojIGxpdG9wLnM6CiMJVGhpcyBmaWxlIGlzIGFwcGVuZGVkIHRvIHRoZSB0b3Agb2YgdGhlIDA2MEZQTFNQIHBhY2thZ2UKIyBhbmQgY29udGFpbnMgdGhlIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBwYWNrYWdlLiBUaGUgdXNlciwgaW4KIyBlZmZlY3QsIGJyYW5jaGVzIHRvIG9uZSBvZiB0aGUgYnJhbmNoIHRhYmxlIGVudHJpZXMgbG9jYXRlZCBoZXJlLgojCgoJYnJhLmwJXzA2MExTUF9faWRpdnM2NF8KCXNob3J0CTB4MDAwMAoJYnJhLmwJXzA2MExTUF9faWRpdnU2NF8KCXNob3J0CTB4MDAwMAoKCWJyYS5sCV8wNjBMU1BfX2ltdWxzNjRfCglzaG9ydAkweDAwMDAKCWJyYS5sCV8wNjBMU1BfX2ltdWx1NjRfCglzaG9ydAkweDAwMDAKCglicmEubAlfMDYwTFNQX19jbXAyX0FiXwoJc2hvcnQJMHgwMDAwCglicmEubAlfMDYwTFNQX19jbXAyX0F3XwoJc2hvcnQJMHgwMDAwCglicmEubAlfMDYwTFNQX19jbXAyX0FsXwoJc2hvcnQJMHgwMDAwCglicmEubAlfMDYwTFNQX19jbXAyX0RiXwoJc2hvcnQJMHgwMDAwCglicmEubAlfMDYwTFNQX19jbXAyX0R3XwoJc2hvcnQJMHgwMDAwCglicmEubAlfMDYwTFNQX19jbXAyX0RsXwoJc2hvcnQJMHgwMDAwCgojIGxlYXZlIHJvb20gZm9yIGZ1dHVyZSBwb3NzaWJsZSBhZGl0aW9ucy4KCWFsaWduCTB4MjAwCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfMDYwTFNQX19pZGl2dTY0XygpOiBFbXVsYXRlIDY0LWJpdCB1bnNpZ25lZCBkaXYgaW5zdHJ1Y3Rpb24uCSMKIwlfMDYwTFNQX19pZGl2czY0XygpOiBFbXVsYXRlIDY0LWJpdCBzaWduZWQgZGl2IGluc3RydWN0aW9uLgkjCiMJCQkJCQkJCQkjCiMJVGhpcyBpcyB0aGUgbGlicmFyeSB2ZXJzaW9uIHdoaWNoIGlzIGFjY2Vzc2VkIGFzIGEgc3Vicm91dGluZQkjCiMJYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCB3b3JrIGV4YWN0bHkgbGlrZSB0aGUgNjgwWDAgZGl2e3MsdX0ubAkjCiMJNjQtYml0IGRpdmlkZSBpbnN0cnVjdGlvbi4JCQkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUuCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwkweDQoc3ApICA9IGRpdmlzb3IJCQkJCQkjCiMJMHg4KHNwKSAgPSBoaShkaXZpZGVuZCkJCQkJCQkjCiMJMHhjKHNwKSAgPSBsbyhkaXZpZGVuZCkJCQkJCQkjCiMJMHgxMChzcCkgPSBwb2ludGVyIHRvIGxvY2F0aW9uIHRvIHBsYWNlIHF1b3RpZW50L3JlbWFpbmRlcgkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwkweDEwKHNwKSA9IHBvaW50cyB0byBsb2NhdGlvbiBvZiByZW1haW5kZXIvcXVvdGllbnQuCQkjCiMJCSAgIHJlbWFpbmRlciBpcyBpbiBmaXJzdCBsb25nd29yZCwgcXVvdGllbnQgaXMgaW4gMm5kLgkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlJZiB0aGUgb3BlcmFuZHMgYXJlIHNpZ25lZCwgbWFrZSB0aGVtIHVuc2lnbmVkIGFuZCBzYXZlIHRoZQkjCiMgc2lnbiBpbmZvIGZvciBsYXRlci4gU2VwYXJhdGUgb3V0IHNwZWNpYWwgY2FzZXMgbGlrZSBkaXZpZGUtYnktemVybwkjCiMgb3IgMzItYml0IGRpdmlkZXMgaWYgcG9zc2libGUuIEVsc2UsIHVzZSBhIHNwZWNpYWwgbWF0aCBhbGdvcml0aG0JIwojIHRvIGNhbGN1bGF0ZSB0aGUgcmVzdWx0LgkJCQkJCSMKIwlSZXN0b3JlIHNpZ24gaW5mbyBpZiBzaWduZWQgaW5zdHJ1Y3Rpb24uIFNldCB0aGUgY29uZGl0aW9uCSMKIyBjb2RlcyBiZWZvcmUgcGVyZm9ybWluZyB0aGUgZmluYWwgInJ0cyIuIElmIHRoZSBkaXZpc29yIHdhcyBlcXVhbCB0bwkjCiMgemVybywgdGhlbiBwZXJmb3JtIGEgZGl2aWRlLWJ5LXplcm8gdXNpbmcgYSAxNi1iaXQgaW1wbGVtZW50ZWQJIwojIGRpdmlkZSBpbnN0cnVjdGlvbi4gVGhpcyB3YXksIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGNhbiByZWNvcmQgdGhhdAkjCiMgdGhlIGV2ZW50IG9jY3VycmVkIGV2ZW4gdGhvdWdoIGl0IG1heSBub3QgcG9pbnQgdG8gdGhlIGNvcnJlY3QgcGxhY2UuCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKc2V0CVBPU05FRywJCS0xCnNldAlORElWSVNPUiwJLTIKc2V0CU5ESVZJREVORCwJLTMKc2V0CUREU0VDT05ELAktNApzZXQJREROT1JNQUwsCS04CnNldAlERFFVT1RJRU5ULAktMTIKc2V0CURJVjY0X0NDLAktMTYKCiMjIyMjIyMjIyMKIyBkaXZzLmwgIwojIyMjIyMjIyMjCglnbG9iYWwJCV8wNjBMU1BfX2lkaXZzNjRfCl8wNjBMU1BfX2lkaXZzNjRfOgojIFBST0xPR1VFIEJFR0lOICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCglsaW5rLncJCSVhNiwmLTE2Cgltb3ZtLmwJCSYweDNmMDAsLSglc3ApCQkjIHNhdmUgZDItZDcKIwlmbW92bS5sCQkmMHgwLC0oJXNwKQkJIyBzYXZlIG5vIGZwcmVncwojIFBST0xPR1VFIEVORCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJbW92LncJCSVjYyxESVY2NF9DQyglYTYpCglzdAkJUE9TTkVHKCVhNikJCSMgc2lnbmVkIG9wZXJhdGlvbgoJYnJhLmIJCWxkaXY2NF9jb250CgojIyMjIyMjIyMjCiMgZGl2dS5sICMKIyMjIyMjIyMjIwoJZ2xvYmFsCQlfMDYwTFNQX19pZGl2dTY0XwpfMDYwTFNQX19pZGl2dTY0XzoKIyBQUk9MT0dVRSBCRUdJTiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJbGluay53CQklYTYsJi0xNgoJbW92bS5sCQkmMHgzZjAwLC0oJXNwKQkJIyBzYXZlIGQyLWQ3CiMJZm1vdm0ubAkJJjB4MCwtKCVzcCkJCSMgc2F2ZSBubyBmcHJlZ3MKIyBQUk9MT0dVRSBFTkQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCW1vdi53CQklY2MsRElWNjRfQ0MoJWE2KQoJc2YJCVBPU05FRyglYTYpCQkjIHVuc2lnbmVkIG9wZXJhdGlvbgoKbGRpdjY0X2NvbnQ6Cgltb3YubAkJMHg4KCVhNiksJWQ3CQkjIGZldGNoIGRpdmlzb3IKCgliZXEudwkJbGRpdjY0ZXEwCQkjIGRpdmlzb3IgaXMgPSAwISEhCgoJbW92LmwJCTB4YyglYTYpLCAlZDUJCSMgZ2V0IGRpdmlkZW5kIGhpCgltb3YubAkJMHgxMCglYTYpLCAlZDYJCSMgZ2V0IGRpdmlkZW5kIGxvCgojIHNlcGFyYXRlIHNpZ25lZCBhbmQgdW5zaWduZWQgZGl2aWRlCgl0c3QuYgkJUE9TTkVHKCVhNikJCSMgc2lnbmVkIG9yIHVuc2lnbmVkPwoJYmVxLmIJCWxkc3BlY2lhbGNhc2VzCQkjIHVzZSBwb3NpdGl2ZSBkaXZpZGUKCiMgc2F2ZSB0aGUgc2lnbiBvZiB0aGUgZGl2aXNvcgojIG1ha2UgZGl2aXNvciB1bnNpZ25lZCBpZiBpdCdzIG5lZ2F0aXZlCgl0c3QubAkJJWQ3CQkJIyBjaGsgc2lnbiBvZiBkaXZpc29yCglzbHQJCU5ESVZJU09SKCVhNikJCSMgc2F2ZSBzaWduIG9mIGRpdmlzb3IKCWJwbC5iCQlsZHNnbmRpdmlkZW5kCgluZWcubAkJJWQ3CQkJIyBjb21wbGVtZW50IG5lZ2F0aXZlIGRpdmlzb3IKCiMgc2F2ZSB0aGUgc2lnbiBvZiB0aGUgZGl2aWRlbmQKIyBtYWtlIGRpdmlkZW5kIHVuc2lnbmVkIGlmIGl0J3MgbmVnYXRpdmUKbGRzZ25kaXZpZGVuZDoKCXRzdC5sCQklZDUJCQkjIGNoayBzaWduIG9mIGhpKGRpdmlkZW5kKQoJc2x0CQlORElWSURFTkQoJWE2KQkJIyBzYXZlIHNpZ24gb2YgZGl2aWRlbmQKCWJwbC5iCQlsZHNwZWNpYWxjYXNlcwoKCW1vdi53CQkmMHgwLCAlY2MJCSMgY2xlYXIgJ1gnIGNjIGJpdAoJbmVneC5sCQklZDYJCQkjIGNvbXBsZW1lbnQgc2lnbmVkIGRpdmlkZW5kCgluZWd4LmwJCSVkNQoKIyBleHRyYWN0IHNvbWUgc3BlY2lhbCBjYXNlczoKIwktIGlzIChkaXZpZGVuZCA9PSAwKSA/CiMJLSBpcyAoaGkoZGl2aWRlbmQpID09IDAgJiYgKGRpdmlzb3IgPD0gbG8oZGl2aWRlbmQpKSkgPyAoMzItYml0IGRpdikKbGRzcGVjaWFsY2FzZXM6Cgl0c3QubAkJJWQ1CQkJIyBpcyAoaGkoZGl2aWRlbmQpID09IDApCglibmUuYgkJbGRub3JtYWxkaXZpZGUJCSMgbm8sIHNvIHRyeSBpdCB0aGUgbG9uZyB3YXkKCgl0c3QubAkJJWQ2CQkJIyBpcyAobG8oZGl2aWRlbmQpID09IDApLCB0b28KCWJlcS53CQlsZGRvbmUJCQkjIHllcywgc28gKGRpdmlkZW5kID09IDApCgoJY21wLmwJCSVkNywlZDYJCQkjIGlzIChkaXZpc29yIDw9IGxvKGRpdmlkZW5kKSkKCWJscy5iCQlsZDMyYml0ZGl2aWRlCQkjIHllcywgc28gdXNlIDMyIGJpdCBkaXZpZGUKCglleGcJCSVkNSwlZDYJCQkjIHEgPSAwLCByID0gZGl2aWRlbmQKCWJyYS53CQlsZGl2ZmluaXNoCQkjIGNhbid0IGRpdmlkZSwgd2UncmUgZG9uZS4KCmxkMzJiaXRkaXZpZGU6Cgl0ZGl2dS5sCQklZDcsICVkNTolZDYJCSMgaXQncyBvbmx5IGEgMzIvMzIgYml0IGRpdiEKCglicmEuYgkJbGRpdmZpbmlzaAoKbGRub3JtYWxkaXZpZGU6CiMgbGFzdCBzcGVjaWFsIGNhc2U6CiMJLSBpcyBoaShkaXZpZGVuZCkgPj0gZGl2aXNvciA/IGlmIHllcywgdGhlbiBvdmVyZmxvdwoJY21wLmwJCSVkNywlZDUKCWJscy5iCQlsZGRvdmYJCQkjIGFuc3dlciB3b24ndCBmaXQgaW4gMzIgYml0cwoKIyBwZXJmb3JtIHRoZSBkaXZpZGUgYWxnb3JpdGhtOgoJYnNyLmwJCWxkY2xhc3NpY2FsCQkjIGRvIGludCBkaXZpZGUKCiMgc2VwYXJhdGUgaW50byBzaWduZWQgYW5kIHVuc2lnbmVkIGZpbmlzaGVzLgpsZGl2ZmluaXNoOgoJdHN0LmIJCVBPU05FRyglYTYpCQkjIGRvIGRpdnMsIGRpdnUgc2VwYXJhdGVseQoJYmVxLmIJCWxkZG9uZQkJCSMgZGl2dSBoYXMgbm8gcHJvY2Vzc2luZyEhIQoKIyBpdCB3YXMgYSBkaXZzLmwsIHNvIGNjb2RlIHNldHRpbmcgaXMgYSBsaXR0bGUgbW9yZSBjb21wbGljYXRlZC4uLgoJdHN0LmIJCU5ESVZJREVORCglYTYpCQkjIHJlbWFpbmRlciBoYXMgc2FtZSBzaWduCgliZXEuYgkJbGRjYwkJCSMgYXMgZGl2aWRlbmQuCgluZWcubAkJJWQ1CQkJIyBzZ24ocmVtKSA9IHNnbihkaXZpZGVuZCkKbGRjYzoKCW1vdi5iCQlORElWSVNPUiglYTYpLCAlZDAKCWVvci5iCQklZDAsIE5ESVZJREVORCglYTYpCSMgY2hrIGlmIHF1b3RpZW50IGlzIG5lZ2F0aXZlCgliZXEuYgkJbGRxcG9zCQkJIyBicmFuY2ggdG8gcXVvdCBwb3NpdGl2ZQoKIyAweDgwMDAwMDAwIGlzIHRoZSBsYXJnZXN0IG51bWJlciByZXByZXNlbnRhYmxlIGFzIGEgMzItYml0IG5lZ2F0aXZlCiMgbnVtYmVyLiB0aGUgbmVnYXRpdmUgb2YgMHg4MDAwMDAwMCBpcyAweDgwMDAwMDAwLgoJY21waS5sCQklZDYsICYweDgwMDAwMDAwCSMgd2lsbCAoLXF1b3QpIGZpdCBpbiAzMiBiaXRzPwoJYmhpLmIJCWxkZG92ZgoKCW5lZy5sCQklZDYJCQkjIG1ha2UgKC1xdW90KSAyJ3MgY29tcAoKCWJyYS5iCQlsZGRvbmUKCmxkcXBvczoKCWJ0c3QJCSYweDFmLCAlZDYJCSMgd2lsbCAoK3F1b3QpIGZpdCBpbiAzMiBiaXRzPwoJYm5lLmIJCWxkZG92ZgoKbGRkb25lOgojIGlmIHRoZSByZWdpc3RlciBudW1iZXJzIGFyZSB0aGUgc2FtZSwgb25seSB0aGUgcXVvdGllbnQgZ2V0cyBzYXZlZC4KIyBzbywgaWYgd2UgYWx3YXlzIHNhdmUgdGhlIHF1b3RpZW50IHNlY29uZCwgd2Ugc2F2ZSBvdXJzZWx2ZXMgYSBjbXAmYmVxCglhbmRpLncJCSYweDEwLERJVjY0X0NDKCVhNikKCW1vdi53CQlESVY2NF9DQyglYTYpLCVjYwoJdHN0LmwJCSVkNgkJCSMgbWF5IHNldCAnTicgY2NvZGUgYml0CgojIGhlcmUsIHRoZSByZXN1bHQgaXMgaW4gZDEgYW5kIGQwLiB0aGUgY3VycmVudCBzdHJhdGVneSBpcyB0byBzYXZlCiMgdGhlIHZhbHVlcyBhdCB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieSBhMC4KIyB1c2UgbW92bSBoZXJlIHRvIG5vdCBkaXN0dXJiIHRoZSBjb25kaXRpb24gY29kZXMuCmxkZXhpdDoKCW1vdm0ubAkJJjB4MDA2MCwoWzB4MTQsJWE2XSkJIyBzYXZlIHJlc3VsdAoKIyBFUElMT0dVRSBCRUdJTiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCWZtb3ZtLmwJCSglc3ApKywmMHgwCQkjIHJlc3RvcmUgbm8gZnByZWdzCgltb3ZtLmwJCSglc3ApKywmMHgwMGZjCQkjIHJlc3RvcmUgZDItZDcKCXVubGsJCSVhNgojIEVQSUxPR1VFIEVORCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJcnRzCgojIHRoZSByZXN1bHQgc2hvdWxkIGJlIHRoZSB1bmNoYW5nZWQgZGl2aWRlbmQKbGRkb3ZmOgoJbW92LmwJCTB4YyglYTYpLCAlZDUJCSMgZ2V0IGRpdmlkZW5kIGhpCgltb3YubAkJMHgxMCglYTYpLCAlZDYJCSMgZ2V0IGRpdmlkZW5kIGxvCgoJYW5kaS53CQkmMHgxYyxESVY2NF9DQyglYTYpCglvcmkudwkJJjB4MDIsRElWNjRfQ0MoJWE2KQkjIHNldCAnVicgY2NvZGUgYml0Cgltb3YudwkJRElWNjRfQ0MoJWE2KSwlY2MKCglicmEuYgkJbGRleGl0CgpsZGl2NjRlcTA6Cgltb3YubAkJMHhjKCVhNiksKFsweDE0LCVhNl0pCgltb3YubAkJMHgxMCglYTYpLChbMHgxNCwlYTZdLDB4NCkKCgltb3YudwkJRElWNjRfQ0MoJWE2KSwlY2MKCiMgRVBJTE9HVUUgQkVHSU4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwlmbW92bS5sCQkoJXNwKSssJjB4MAkJIyByZXN0b3JlIG5vIGZwcmVncwoJbW92bS5sCQkoJXNwKSssJjB4MDBmYwkJIyByZXN0b3JlIGQyLWQ3Cgl1bmxrCQklYTYKIyBFUElMT0dVRSBFTkQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWRpdnUudwkJJjB4MCwlZDAJCSMgZm9yY2UgYSBkaXZieXplcm8gZXhjZXB0aW9uCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgVGhpcyByb3V0aW5lIHVzZXMgdGhlICdjbGFzc2ljYWwnIEFsZ29yaXRobSBEIGZyb20gRG9uYWxkIEtudXRoJ3MJIwojIEFydCBvZiBDb21wdXRlciBQcm9ncmFtbWluZywgdm9sIElJLCBTZW1pbnVtZXJpY2FsIEFsZ29yaXRobXMuCSMKIyBGb3IgdGhpcyBpbXBsZW1lbnRhdGlvbiBiPTIqKjE2LCBhbmQgdGhlIHRhcmdldCBpcyBVMVUyVTNVNC9WMVYyLAkjCiMgd2hlcmUgVSxWIGFyZSB3b3JkcyBvZiB0aGUgcXVhZHdvcmQgZGl2aWRlbmQgYW5kIGxvbmd3b3JkIGRpdmlzb3IsCSMKIyBhbmQgVTEsIFYxIGFyZSB0aGUgbW9zdCBzaWduaWZpY2FudCB3b3Jkcy4JCQkJIwojCQkJCQkJCQkJIwojIFRoZSBtb3N0IHNpZy4gbG9uZ3dvcmQgb2YgdGhlIDY0IGJpdCBkaXZpZGVuZCBtdXN0IGJlIGluICVkNSwgbGVhc3QJIwojIGluICVkNi4gVGhlIGRpdmlzb3IgbXVzdCBiZSBpbiB0aGUgdmFyaWFibGUgZGRpdmlzb3IsIGFuZCB0aGUJCSMKIyBzaWduZWQvdW5zaWduZWQgZmxhZyBkZHVzaWduIG11c3QgYmUgc2V0ICgwPXVuc2lnbmVkLDE9c2lnbmVkKS4JIwojIFRoZSBxdW90aWVudCBpcyByZXR1cm5lZCBpbiAlZDYsIHJlbWFpbmRlciBpbiAlZDUsIHVubGVzcyB0aGUJCSMKIyB2IChvdmVyZmxvdykgYml0IGlzIHNldCBpbiB0aGUgc2F2ZWQgJWNjci4gSWYgb3ZlcmZsb3csIHRoZSBkaXZpZGVuZAkjCiMgaXMgdW5jaGFuZ2VkLgkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmxkY2xhc3NpY2FsOgojIGlmIHRoZSBkaXZpc29yIG1zdyBpcyAwLCB1c2Ugc2ltcGxlciBhbGdvcml0aG0gdGhlbiB0aGUgZnVsbCBibG93bgojIG9uZSBhdCBkZGtudXRoOgoKCWNtcGkubAkJJWQ3LCAmMHhmZmZmCgliaGkuYgkJbGRka251dGgJCSMgZ28gdXNlIEQuIEtudXRoIGFsZ29yaXRobQoKIyBTaW5jZSB0aGUgZGl2aXNvciBpcyBvbmx5IGEgd29yZCAoYW5kIGxhcmdlciB0aGFuIHRoZSBtc2x3IG9mIHRoZSBkaXZpZGVuZCksCiMgYSBzaW1wbGVyIGFsZ29yaXRobSBtYXkgYmUgdXNlZCA6CiMgSW4gdGhlIGdlbmVyYWwgY2FzZSwgZm91ciBxdW90aWVudCB3b3JkcyB3b3VsZCBiZSBjcmVhdGVkIGJ5CiMgZGl2aWRpbmcgdGhlIGRpdmlzb3Igd29yZCBpbnRvIGVhY2ggZGl2aWRlbmQgd29yZC4gSW4gdGhpcyBjYXNlLAojIHRoZSBmaXJzdCB0d28gcXVvdGllbnQgd29yZHMgbXVzdCBiZSB6ZXJvLCBvciBvdmVyZmxvdyB3b3VsZCBvY2N1ci4KIyBTaW5jZSB3ZSBhbHJlYWR5IGNoZWNrZWQgdGhpcyBjYXNlIGFib3ZlLCB3ZSBjYW4gdHJlYXQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQKIyBsb25nd29yZCBvZiB0aGUgZGl2aWRlbmQgYXMgKDApIHJlbWFpbmRlciAoc2VlIEtudXRoKSBhbmQgbWVyZWx5IGNvbXBsZXRlCiMgdGhlIGxhc3QgdHdvIGRpdmlzaW9ucyB0byBnZXQgYSBxdW90aWVudCBsb25nd29yZCBhbmQgd29yZCByZW1haW5kZXI6CgoJY2xyLmwJCSVkMQoJc3dhcAkJJWQ1CQkJIyBzYW1lIGFzIHIqYiBpZiBwcmV2aW91cyBzdGVwIHJxZAoJc3dhcAkJJWQ2CQkJIyBnZXQgdTMgdG8gbHN3IHBvc2l0aW9uCgltb3YudwkJJWQ2LCAlZDUJCSMgcmIgKyB1MwoKCWRpdnUudwkJJWQ3LCAlZDUKCgltb3YudwkJJWQ1LCAlZDEJCSMgZmlyc3QgcXVvdGllbnQgd29yZAoJc3dhcAkJJWQ2CQkJIyBnZXQgdTQKCW1vdi53CQklZDYsICVkNQkJIyByYiArIHU0CgoJZGl2dS53CQklZDcsICVkNQoKCXN3YXAJCSVkMQoJbW92LncJCSVkNSwgJWQxCQkjIDJuZCBxdW90aWVudCAnZGlnaXQnCgljbHIudwkJJWQ1Cglzd2FwCQklZDUJCQkjIG5vdyByZW1haW5kZXIKCW1vdi5sCQklZDEsICVkNgkJIyBhbmQgcXVvdGllbnQKCglydHMKCmxkZGtudXRoOgojIEluIHRoaXMgYWxnb3JpdGhtLCB0aGUgZGl2aXNvciBpcyB0cmVhdGVkIGFzIGEgMiBkaWdpdCAod29yZCkgbnVtYmVyCiMgd2hpY2ggaXMgZGl2aWRlZCBpbnRvIGEgMyBkaWdpdCAod29yZCkgZGl2aWRlbmQgdG8gZ2V0IG9uZSBxdW90aWVudAojIGRpZ2l0ICh3b3JkKS4gQWZ0ZXIgc3VidHJhY3Rpb24sIHRoZSBkaXZpZGVuZCBpcyBzaGlmdGVkIGFuZCB0aGUKIyBwcm9jZXNzIHJlcGVhdGVkLiBCZWZvcmUgYmVnaW5uaW5nLCB0aGUgZGl2aXNvciBhbmQgcXVvdGllbnQgYXJlCiMgJ25vcm1hbGl6ZWQnIHNvIHRoYXQgdGhlIHByb2Nlc3Mgb2YgZXN0aW1hdGluZyB0aGUgcXVvdGllbnQgZGlnaXQKIyB3aWxsIHlpZWxkIHZlcmlmaWFibHkgY29ycmVjdCByZXN1bHRzLi4KCgljbHIubAkJREROT1JNQUwoJWE2KQkJIyBjb3VudCBvZiBzaGlmdHMgZm9yIG5vcm1hbGl6YXRpb24KCWNsci5iCQlERFNFQ09ORCglYTYpCQkjIGNsZWFyIGZsYWcgZm9yIHF1b3RpZW50IGRpZ2l0cwoJY2xyLmwJCSVkMQkJCSMgJWQxIHdpbGwgaG9sZCB0cmlhbCBxdW90aWVudApsZGRuY2hrOgoJYnRzdAkJJjMxLCAlZDcJCSMgbXVzdCB3ZSBub3JtYWxpemU/IGZpcnN0IHdvcmQgb2YKCWJuZS5iCQlsZGRub3JtYWxpemVkCQkjIGRpdmlzb3IgKFYxKSBtdXN0IGJlID49IDY1NTM2LzIKCWFkZHEubAkJJjB4MSwgREROT1JNQUwoJWE2KQkjIGNvdW50IG5vcm1hbGl6YXRpb24gc2hpZnRzCglsc2wubAkJJjB4MSwgJWQ3CQkjIHNoaWZ0IHRoZSBkaXZpc29yCglsc2wubAkJJjB4MSwgJWQ2CQkjIHNoaWZ0IHU0LHUzIHdpdGggb3ZlcmZsb3cgdG8gdTIKCXJveGwubAkJJjB4MSwgJWQ1CQkjIHNoaWZ0IHUxLHUyCglicmEudwkJbGRkbmNoawpsZGRub3JtYWxpemVkOgoKIyBOb3cgY2FsY3VsYXRlIGFuIGVzdGltYXRlIG9mIHRoZSBxdW90aWVudCB3b3JkcyAobXN3IGZpcnN0LCB0aGVuIGxzdykuCiMgVGhlIGNvbW1lbnRzIHVzZSBzdWJzY3JpcHRzIGZvciB0aGUgZmlyc3QgcXVvdGllbnQgZGlnaXQgZGV0ZXJtaW5hdGlvbi4KCW1vdi5sCQklZDcsICVkMwkJIyBkaXZpc29yCgltb3YubAkJJWQ1LCAlZDIJCSMgZGl2aWRlbmQgbXNsdwoJc3dhcAkJJWQyCglzd2FwCQklZDMKCWNtcC53CQklZDIsICVkMwkJIyBWMSA9IFUxID8KCWJuZS5iCQlsZGRxY2FsYzEKCW1vdi53CQkmMHhmZmZmLCAlZDEJCSMgdXNlIG1heCB0cmlhbCBxdW90aWVudCB3b3JkCglicmEuYgkJbGRkYWRqMApsZGRxY2FsYzE6Cgltb3YubAkJJWQ1LCAlZDEKCglkaXZ1LncJCSVkMywgJWQxCQkjIHVzZSBxdW90aWVudCBvZiBtc2x3L21zdwoKCWFuZGkubAkJJjB4MDAwMGZmZmYsICVkMQkjIHplcm8gYW55IHJlbWFpbmRlcgpsZGRhZGowOgoKIyBub3cgdGVzdCB0aGUgdHJpYWwgcXVvdGllbnQgYW5kIGFkanVzdC4gVGhpcyBzdGVwIHBsdXMgdGhlCiMgbm9ybWFsaXphdGlvbiBhc3N1cmVzIChhY2NvcmRpbmcgdG8gS251dGgpIHRoYXQgdGhlIHRyaWFsCiMgcXVvdGllbnQgd2lsbCBiZSBhdCB3b3JzdCAxIHRvbyBsYXJnZS4KCW1vdi5sCQklZDYsIC0oJXNwKQoJY2xyLncJCSVkNgkJCSMgd29yZCB1MyBsZWZ0Cglzd2FwCQklZDYJCQkjIGluIGxzdyBwb3NpdGlvbgpsZGRhZGoxOiBtb3YubAkJJWQ3LCAlZDMKCW1vdi5sCQklZDEsICVkMgoJbXVsdS53CQklZDcsICVkMgkJIyBWMnEKCXN3YXAJCSVkMwoJbXVsdS53CQklZDEsICVkMwkJIyBWMXEKCW1vdi5sCQklZDUsICVkNAkJIyBVMVUyCglzdWIubAkJJWQzLCAlZDQJCSMgVTFVMiAtIFYxcQoKCXN3YXAJCSVkNAoKCW1vdi53CQklZDQsJWQwCgltb3YudwkJJWQ2LCVkNAkJCSMgaW5zZXJ0IGxvd2VyIHdvcmQgKFUzKQoKCXRzdC53CQklZDAJCQkjIGlzIHVwcGVyIHdvcmQgc2V0PwoJYm5lLncJCWxkZGFkamQxCgojCWFkZC5sCQklZDYsICVkNAkJIyAoVTFVMiAtIFYxcSkgKyBVMwoKCWNtcC5sCQklZDIsICVkNAoJYmxzLmIJCWxkZGFkamQxCQkjIGlzIFYycSA+IChVMVUyLVYxcSkgKyBVMyA/CglzdWJxLmwJCSYweDEsICVkMQkJIyB5ZXMsIGRlY3JlbWVudCBhbmQgcmVjaGVjawoJYnJhLmIJCWxkZGFkajEKbGRkYWRqZDE6CiMgbm93IHRlc3QgdGhlIHdvcmQgYnkgbXVsdGlwbHlpbmcgaXQgYnkgdGhlIGRpdmlzb3IgKFYxVjIpIGFuZCBjb21wYXJpbmcKIyB0aGUgMyBkaWdpdCAod29yZCkgcmVzdWx0IHdpdGggdGhlIGN1cnJlbnQgZGl2aWRlbmQgd29yZHMKCW1vdi5sCQklZDUsIC0oJXNwKQkJIyBzYXZlICVkNSAoJWQ2IGFscmVhZHkgc2F2ZWQpCgltb3YubAkJJWQxLCAlZDYKCXN3YXAJCSVkNgkJCSMgc2hpZnQgYW5zd2VyIHRvIG1zIDMgd29yZHMKCW1vdi5sCQklZDcsICVkNQoJYnNyLmwJCWxkbW0yCgltb3YubAkJJWQ1LCAlZDIJCSMgbm93ICVkMiwlZDMgYXJlIHRyaWFsKmRpdmlzb3IKCW1vdi5sCQklZDYsICVkMwoJbW92LmwJCSglc3ApKywgJWQ1CQkjIHJlc3RvcmUgZGl2aWRlbmQKCW1vdi5sCQkoJXNwKSssICVkNgoJc3ViLmwJCSVkMywgJWQ2CglzdWJ4LmwJCSVkMiwgJWQ1CQkjIHN1YnRyYWN0IGRvdWJsZSBwcmVjaXNpb24KCWJjYwkJbGRkMm5kCQkJIyBubyBjYXJyeSwgZG8gbmV4dCBxdW90aWVudCBkaWdpdAoJc3VicS5sCQkmMHgxLCAlZDEJCSMgcSBpcyBvbmUgdG9vIGxhcmdlCiMgbmVlZCB0byBhZGQgYmFjayBkaXZpc29yIGxvbmd3b3JkIHRvIGN1cnJlbnQgbXMgMyBkaWdpdHMgb2YgZGl2aWRlbmQKIyAtIGFjY29yZGluZyB0byBLbnV0aCwgdGhpcyBpcyBkb25lIG9ubHkgMiBvdXQgb2YgNjU1MzYgdGltZXMgZm9yIHJhbmRvbQojIGRpdmlzb3IsIGRpdmlkZW5kIHNlbGVjdGlvbi4KCWNsci5sCQklZDIKCW1vdi5sCQklZDcsICVkMwoJc3dhcAkJJWQzCgljbHIudwkJJWQzCQkJIyAlZDMgbm93IGxzIHdvcmQgb2YgZGl2aXNvcgoJYWRkLmwJCSVkMywgJWQ2CQkjIGFsaWduZWQgd2l0aCAzcmQgd29yZCBvZiBkaXZpZGVuZAoJYWRkeC5sCQklZDIsICVkNQoJbW92LmwJCSVkNywgJWQzCgljbHIudwkJJWQzCQkJIyAlZDMgbm93IG1zIHdvcmQgb2YgZGl2aXNvcgoJc3dhcAkJJWQzCQkJIyBhbGlnbmVkIHdpdGggMm5kIHdvcmQgb2YgZGl2aWRlbmQKCWFkZC5sCQklZDMsICVkNQpsZGQybmQ6Cgl0c3QuYgkJRERTRUNPTkQoJWE2KQkjIGJvdGggcSB3b3JkcyBkb25lPwoJYm5lLmIJCWxkZHJlbWFpbgojIGZpcnN0IHF1b3RpZW50IGRpZ2l0IG5vdyBjb3JyZWN0LiBzdG9yZSBkaWdpdCBhbmQgc2hpZnQgdGhlCiMgKHN1YnRyYWN0ZWQpIGRpdmlkZW5kCgltb3YudwkJJWQxLCBERFFVT1RJRU5UKCVhNikKCWNsci5sCQklZDEKCXN3YXAJCSVkNQoJc3dhcAkJJWQ2Cgltb3YudwkJJWQ2LCAlZDUKCWNsci53CQklZDYKCXN0CQlERFNFQ09ORCglYTYpCQkjIHNlY29uZCBkaWdpdAoJYnJhLncJCWxkZG5vcm1hbGl6ZWQKbGRkcmVtYWluOgojIGFkZCAybmQgd29yZCB0byBxdW90aWVudCwgZ2V0IHRoZSByZW1haW5kZXIuCgltb3YudwkJJWQxLCBERFFVT1RJRU5UKzIoJWE2KQojIHNoaWZ0IGRvd24gb25lIHdvcmQvZGlnaXQgdG8gcmVub3JtYWxpemUgcmVtYWluZGVyLgoJbW92LncJCSVkNSwgJWQ2Cglzd2FwCQklZDYKCXN3YXAJCSVkNQoJbW92LmwJCURETk9STUFMKCVhNiksICVkNwkjIGdldCBub3JtIHNoaWZ0IGNvdW50CgliZXEuYgkJbGRkcm4KCXN1YnEubAkJJjB4MSwgJWQ3CQkjIHNldCBmb3IgbG9vcCBjb3VudApsZGRubHA6Cglsc3IubAkJJjB4MSwgJWQ1CQkjIHNoaWZ0IGludG8gJWQ2Cglyb3hyLmwJCSYweDEsICVkNgoJZGJmCQklZDcsIGxkZG5scApsZGRybjoKCW1vdi5sCQklZDYsICVkNQkJIyByZW1haW5kZXIKCW1vdi5sCQlERFFVT1RJRU5UKCVhNiksICVkNgkjIHF1b3RpZW50CgoJcnRzCmxkbW0yOgojIGZhY3RvcnMgZm9yIHRoZSAzMlgzMi0+NjQgbXVsdGlwbGljYXRpb24gYXJlIGluICVkNSBhbmQgJWQ2LgojIHJldHVybnMgNjQgYml0IHJlc3VsdCBpbiAlZDUgKGhpKSAlZDYobG8pLgojIGRlc3Ryb3lzICVkMiwlZDMsJWQ0LgoKIyBtdWx0aXBseSBoaSxsbyB3b3JkcyBvZiBlYWNoIGZhY3RvciB0byBnZXQgNCBpbnRlcm1lZGlhdGUgcHJvZHVjdHMKCW1vdi5sCQklZDYsICVkMgoJbW92LmwJCSVkNiwgJWQzCgltb3YubAkJJWQ1LCAlZDQKCXN3YXAJCSVkMwoJc3dhcAkJJWQ0CgltdWx1LncJCSVkNSwgJWQ2CQkjICVkNiA8LSBsc3cqbHN3CgltdWx1LncJCSVkMywgJWQ1CQkjICVkNSA8LSBtc3ctZGVzdCpsc3ctc291cmNlCgltdWx1LncJCSVkNCwgJWQyCQkjICVkMiA8LSBtc3ctc291cmNlKmxzdy1kZXN0CgltdWx1LncJCSVkNCwgJWQzCQkjICVkMyA8LSBtc3cqbXN3CiMgbm93IHVzZSBzd2FwIGFuZCBhZGR4IHRvIGNvbnNvbGlkYXRlIHRvIHR3byBsb25nd29yZHMKCWNsci5sCQklZDQKCXN3YXAJCSVkNgoJYWRkLncJCSVkNSwgJWQ2CQkjIGFkZCBtc3cgb2YgbCpsIHRvIGxzdyBvZiBtKmwgcHJvZHVjdAoJYWRkeC53CQklZDQsICVkMwkJIyBhZGQgYW55IGNhcnJ5IHRvIG0qbSBwcm9kdWN0CglhZGQudwkJJWQyLCAlZDYJCSMgYWRkIGluIGxzdyBvZiBvdGhlciBtKmwgcHJvZHVjdAoJYWRkeC53CQklZDQsICVkMwkJIyBhZGQgYW55IGNhcnJ5IHRvIG0qbSBwcm9kdWN0Cglzd2FwCQklZDYJCQkjICVkNiBpcyBsb3cgMzIgYml0cyBvZiBmaW5hbCBwcm9kdWN0CgljbHIudwkJJWQ1CgljbHIudwkJJWQyCQkJIyBsc3cgb2YgdHdvIG1peGVkIHByb2R1Y3RzIHVzZWQsCglzd2FwCQklZDUJCQkjIG5vdyB1c2UgbXN3cyBvZiBsb25nd29yZHMKCXN3YXAJCSVkMgoJYWRkLmwJCSVkMiwgJWQ1CglhZGQubAkJJWQzLCAlZDUJIyAlZDUgbm93IG1zIDMyIGJpdHMgb2YgZmluYWwgcHJvZHVjdAoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfMDYwTFNQX19pbXVsdTY0XygpOiBFbXVsYXRlIDY0LWJpdCB1bnNpZ25lZCBtdWwgaW5zdHJ1Y3Rpb24JIwojCV8wNjBMU1BfX2ltdWxzNjRfKCk6IEVtdWxhdGUgNjQtYml0IHNpZ25lZCBtdWwgaW5zdHJ1Y3Rpb24uCSMKIwkJCQkJCQkJCSMKIwlUaGlzIGlzIHRoZSBsaWJyYXJ5IHZlcnNpb24gd2hpY2ggaXMgYWNjZXNzZWQgYXMgYSBzdWJyb3V0aW5lCSMKIwlhbmQgdGhlcmVmb3JlIGRvZXMgbm90IHdvcmsgZXhhY3RseSBsaWtlIHRoZSA2ODBYMCBtdWx7cyx1fS5sCSMKIwk2NC1iaXQgbXVsdGlwbHkgaW5zdHJ1Y3Rpb24uCQkJCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlOb25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwkweDQoc3ApID0gbXVsdGlwbGllcgkJCQkJCSMKIwkweDgoc3ApID0gbXVsdGlwbGljYW5kCQkJCQkJIwojCTB4YyhzcCkgPSBwb2ludGVyIHRvIGxvY2F0aW9uIHRvIHBsYWNlIDY0LWJpdCByZXN1bHQJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCTB4YyhzcCkgPSBwb2ludHMgdG8gbG9jYXRpb24gb2YgNjQtYml0IHJlc3VsdAkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCVBlcmZvcm0gdGhlIG11bHRpcGx5IGluIHBpZWNlcyB1c2luZyAxNngxNi0+MzIgdW5zaWduZWQJCSMKIyBtdWx0aXBsaWVzIGFuZCAiYWRkIiBpbnN0cnVjdGlvbnMuCQkJCQkjCiMJU2V0IHRoZSBjb25kaXRpb24gY29kZXMgYXMgYXBwcm9wcmlhdGUgYmVmb3JlIHBlcmZvcm1pbmcgYW4JIwojICJydHMiLgkJCQkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpzZXQgTVVMNjRfQ0MsIC00CgoJZ2xvYmFsCQlfMDYwTFNQX19pbXVsdTY0XwpfMDYwTFNQX19pbXVsdTY0XzoKCiMgUFJPTE9HVUUgQkVHSU4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCWxpbmsudwkJJWE2LCYtNAoJbW92bS5sCQkmMHgzODAwLC0oJXNwKQkJIyBzYXZlIGQyLWQ0CiMJZm1vdm0ubAkJJjB4MCwtKCVzcCkJCSMgc2F2ZSBubyBmcHJlZ3MKIyBQUk9MT0dVRSBFTkQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCW1vdi53CQklY2MsTVVMNjRfQ0MoJWE2KQkjIHNhdmUgaW5jb21pbmcgY2NvZGVzCgoJbW92LmwJCTB4OCglYTYpLCVkMAkJIyBzdG9yZSBtdWx0aXBsaWVyIGluIGQwCgliZXEudwkJbXVsdTY0X3plcm8JCSMgaGFuZGxlIHplcm8gc2VwYXJhdGVseQoKCW1vdi5sCQkweGMoJWE2KSwlZDEJCSMgZ2V0IG11bHRpcGxpY2FuZCBpbiBkMQoJYmVxLncJCW11bHU2NF96ZXJvCQkjIGhhbmRsZSB6ZXJvIHNlcGFyYXRlbHkKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwk2MwkJCSAgIDMyCQkJCTAJIwojCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JCQkJCSMKIwl8IGhpKG1wbGllcikgKiBoaShtcGxpY2FuZCl8CQkJCQkjCiMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCQkJIwojCQkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkJIwojCQkgICAgIHwgaGkobXBsaWVyKSAqIGxvKG1wbGljYW5kKSB8CQkJIwojCQkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkJIwojCQkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkJIwojCQkgICAgIHwgbG8obXBsaWVyKSAqIGhpKG1wbGljYW5kKSB8CQkJIwojCQkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkJIwojCSAgfAkJCSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSMKIwktLXwtLQkJCSAgIHwgbG8obXBsaWVyKSAqIGxvKG1wbGljYW5kKSB8CSMKIwkgIHwJCQkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkjCiMJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0JIwojCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSMKIwl8CWhpKHJlc3VsdCkJICAgfAkgICAgbG8ocmVzdWx0KSAgICAgICAgIHwJIwojCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwptdWx1NjRfYWxnOgojIGxvYWQgdGVtcCByZWdpc3RlcnMgd2l0aCBvcGVyYW5kcwoJbW92LmwJCSVkMCwlZDIJCQkjIG1yIGluIGQyCgltb3YubAkJJWQwLCVkMwkJCSMgbXIgaW4gZDMKCW1vdi5sCQklZDEsJWQ0CQkJIyBtZCBpbiBkNAoJc3dhcAkJJWQzCQkJIyBoaShtcikgaW4gbG8gZDMKCXN3YXAJCSVkNAkJCSMgaGkobWQpIGluIGxvIGQ0CgojIGNvbXBsZXRlIG5lY2Vzc2FyeSBtdWx0aXBsaWVzOgoJbXVsdS53CQklZDEsJWQwCQkJIyBbMV0gbG8obXIpICogbG8obWQpCgltdWx1LncJCSVkMywlZDEJCQkjIFsyXSBoaShtcikgKiBsbyhtZCkKCW11bHUudwkJJWQ0LCVkMgkJCSMgWzNdIGxvKG1yKSAqIGhpKG1kKQoJbXVsdS53CQklZDQsJWQzCQkJIyBbNF0gaGkobXIpICogaGkobWQpCgojIGFkZCBsbyBwb3J0aW9ucyBvZiBbMl0sWzNdIHRvIGhpIHBvcnRpb24gb2YgWzFdLgojIGFkZCBjYXJyaWVzIHByb2R1Y2VkIGZyb20gdGhlc2UgYWRkcyB0byBbNF0uCiMgbG8oWzFdKSBpcyB0aGUgZmluYWwgbG8gMTYgYml0cyBvZiB0aGUgcmVzdWx0LgoJY2xyLmwJCSVkNAkJCSMgbG9hZCBkNCB3LyB6ZXJvIHZhbHVlCglzd2FwCQklZDAJCQkjIGhpKFsxXSkgPD09PiBsbyhbMV0pCglhZGQudwkJJWQxLCVkMAkJCSMgaGkoWzFdKSArIGxvKFsyXSkKCWFkZHgubAkJJWQ0LCVkMwkJCSMgICAgWzRdICArIGNhcnJ5CglhZGQudwkJJWQyLCVkMAkJCSMgaGkoWzFdKSArIGxvKFszXSkKCWFkZHgubAkJJWQ0LCVkMwkJCSMgICAgWzRdICArIGNhcnJ5Cglzd2FwCQklZDAJCQkjIGxvKFsxXSkgPD09PiBoaShbMV0pCgojIGxvIHBvcnRpb25zIG9mIFsyXSxbM10gaGF2ZSBiZWVuIGFkZGVkIGluIHRvIGZpbmFsIHJlc3VsdC4KIyBub3csIGNsZWFyIGxvLCBwdXQgaGkgaW4gbG8gcmVnLCBhbmQgYWRkIHRvIFs0XQoJY2xyLncJCSVkMQkJCSMgY2xlYXIgbG8oWzJdKQoJY2xyLncJCSVkMgkJCSMgY2xlYXIgaGkoWzNdKQoJc3dhcAkJJWQxCQkJIyBoaShbMl0pIGluIGxvIGQxCglzd2FwCQklZDIJCQkjIGhpKFszXSkgaW4gbG8gZDIKCWFkZC5sCQklZDIsJWQxCQkJIyAgICBbNF0gICsgaGkoWzJdKQoJYWRkLmwJCSVkMywlZDEJCQkjICAgIFs0XSAgKyBoaShbM10pCgojIG5vdywgZ3JhYiB0aGUgY29uZGl0aW9uIGNvZGVzLiBvbmx5IG9uZSB0aGF0IGNhbiBiZSBzZXQgaXMgJ04nLgojICdOJyBDQU4gYmUgc2V0IGlmIHRoZSBvcGVyYXRpb24gaXMgdW5zaWduZWQgaWYgYml0IDYzIGlzIHNldC4KCW1vdi53CQlNVUw2NF9DQyglYTYpLCVkNAoJYW5kaS5iCQkmMHgxMCwlZDQJCSMga2VlcCBvbGQgJ1gnIGJpdAoJdHN0LmwJCSVkMQkJCSMgbWF5IHNldCAnTicgYml0CglicGwuYgkJbXVsdTY0X2Rkb25lCglvcmkuYgkJJjB4OCwlZDQJCSMgc2V0ICdOJyBiaXQKbXVsdTY0X2Rkb25lOgoJbW92LncJCSVkNCwlY2MKCiMgaGVyZSwgdGhlIHJlc3VsdCBpcyBpbiBkMSBhbmQgZDAuIHRoZSBjdXJyZW50IHN0cmF0ZWd5IGlzIHRvIHNhdmUKIyB0aGUgdmFsdWVzIGF0IHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IGEwLgojIHVzZSBtb3ZtIGhlcmUgdG8gbm90IGRpc3R1cmIgdGhlIGNvbmRpdGlvbiBjb2Rlcy4KbXVsdTY0X2VuZDoKCWV4ZwkJJWQxLCVkMAoJbW92bS5sCQkmMHgwMDAzLChbMHgxMCwlYTZdKQkJIyBzYXZlIHJlc3VsdAoKIyBFUElMT0dVRSBCRUdJTiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCWZtb3ZtLmwJCSglc3ApKywmMHgwCQkjIHJlc3RvcmUgbm8gZnByZWdzCgltb3ZtLmwJCSglc3ApKywmMHgwMDFjCQkjIHJlc3RvcmUgZDItZDQKCXVubGsJCSVhNgojIEVQSUxPR1VFIEVORCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJcnRzCgojIG9uZSBvciBib3RoIG9mIHRoZSBvcGVyYW5kcyBpcyB6ZXJvIHNvIHRoZSByZXN1bHQgaXMgYWxzbyB6ZXJvLgojIHNhdmUgdGhlIHplcm8gcmVzdWx0IHRvIHRoZSByZWdpc3RlciBmaWxlIGFuZCBzZXQgdGhlICdaJyBjY29kZSBiaXQuCm11bHU2NF96ZXJvOgoJY2xyLmwJCSVkMAoJY2xyLmwJCSVkMQoKCW1vdi53CQlNVUw2NF9DQyglYTYpLCVkNAoJYW5kaS5iCQkmMHgxMCwlZDQKCW9yaS5iCQkmMHg0LCVkNAoJbW92LncJCSVkNCwlY2MJCQkjIHNldCAnWicgY2NvZGUgYml0CgoJYnJhLmIJCW11bHU2NF9lbmQKCiMjIyMjIyMjIyMKIyBtdWxzLmwgIwojIyMjIyMjIyMjCglnbG9iYWwJCV8wNjBMU1BfX2ltdWxzNjRfCl8wNjBMU1BfX2ltdWxzNjRfOgoKIyBQUk9MT0dVRSBCRUdJTiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJbGluay53CQklYTYsJi00Cgltb3ZtLmwJCSYweDNjMDAsLSglc3ApCQkjIHNhdmUgZDItZDUKIwlmbW92bS5sCQkmMHgwLC0oJXNwKQkJIyBzYXZlIG5vIGZwcmVncwojIFBST0xPR1VFIEVORCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJbW92LncJCSVjYyxNVUw2NF9DQyglYTYpCSMgc2F2ZSBpbmNvbWluZyBjY29kZXMKCgltb3YubAkJMHg4KCVhNiksJWQwCQkjIHN0b3JlIG11bHRpcGxpZXIgaW4gZDAKCWJlcS5iCQltdWx1NjRfemVybwkJIyBoYW5kbGUgemVybyBzZXBhcmF0ZWx5CgoJbW92LmwJCTB4YyglYTYpLCVkMQkJIyBnZXQgbXVsdGlwbGljYW5kIGluIGQxCgliZXEuYgkJbXVsdTY0X3plcm8JCSMgaGFuZGxlIHplcm8gc2VwYXJhdGVseQoKCWNsci5iCQklZDUJCQkjIGNsZWFyIHNpZ24gdGFnCgl0c3QubAkJJWQwCQkJIyBpcyBtdWx0aXBsaWVyIG5lZ2F0aXZlPwoJYmdlLmIJCW11bHM2NF9jaGtfbWRfc2duCSMgbm8KCW5lZy5sCQklZDAJCQkjIG1ha2UgbXVsdGlwbGllciBwb3NpdGl2ZQoKCW9yaS5iCQkmMHgxLCVkNQkJIyBzYXZlIG11bHRpcGxpZXIgc2duCgojIHRoZSByZXN1bHQgc2lnbiBpcyB0aGUgZXhjbHVzaXZlIG9yIG9mIHRoZSBvcGVyYW5kIHNpZ24gYml0cy4KbXVsczY0X2Noa19tZF9zZ246Cgl0c3QubAkJJWQxCQkJIyBpcyBtdWx0aXBsaWNhbmQgbmVnYXRpdmU/CgliZ2UuYgkJbXVsczY0X2FsZwkJIyBubwoJbmVnLmwJCSVkMQkJCSMgbWFrZSBtdWx0aXBsaWNhbmQgcG9zaXRpdmUKCgllb3JpLmIJCSYweDEsJWQ1CQkjIGNhbGN1bGF0ZSBjb3JyZWN0IHNpZ24KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwk2MwkJCSAgIDMyCQkJCTAJIwojCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JCQkJCSMKIwl8IGhpKG1wbGllcikgKiBoaShtcGxpY2FuZCl8CQkJCQkjCiMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCQkJIwojCQkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkJIwojCQkgICAgIHwgaGkobXBsaWVyKSAqIGxvKG1wbGljYW5kKSB8CQkJIwojCQkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkJIwojCQkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkJIwojCQkgICAgIHwgbG8obXBsaWVyKSAqIGhpKG1wbGljYW5kKSB8CQkJIwojCQkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkJIwojCSAgfAkJCSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSMKIwktLXwtLQkJCSAgIHwgbG8obXBsaWVyKSAqIGxvKG1wbGljYW5kKSB8CSMKIwkgIHwJCQkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkjCiMJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0JIwojCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSMKIwl8CWhpKHJlc3VsdCkJICAgfAkgICAgbG8ocmVzdWx0KSAgICAgICAgIHwJIwojCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwptdWxzNjRfYWxnOgojIGxvYWQgdGVtcCByZWdpc3RlcnMgd2l0aCBvcGVyYW5kcwoJbW92LmwJCSVkMCwlZDIJCQkjIG1yIGluIGQyCgltb3YubAkJJWQwLCVkMwkJCSMgbXIgaW4gZDMKCW1vdi5sCQklZDEsJWQ0CQkJIyBtZCBpbiBkNAoJc3dhcAkJJWQzCQkJIyBoaShtcikgaW4gbG8gZDMKCXN3YXAJCSVkNAkJCSMgaGkobWQpIGluIGxvIGQ0CgojIGNvbXBsZXRlIG5lY2Vzc2FyeSBtdWx0aXBsaWVzOgoJbXVsdS53CQklZDEsJWQwCQkJIyBbMV0gbG8obXIpICogbG8obWQpCgltdWx1LncJCSVkMywlZDEJCQkjIFsyXSBoaShtcikgKiBsbyhtZCkKCW11bHUudwkJJWQ0LCVkMgkJCSMgWzNdIGxvKG1yKSAqIGhpKG1kKQoJbXVsdS53CQklZDQsJWQzCQkJIyBbNF0gaGkobXIpICogaGkobWQpCgojIGFkZCBsbyBwb3J0aW9ucyBvZiBbMl0sWzNdIHRvIGhpIHBvcnRpb24gb2YgWzFdLgojIGFkZCBjYXJyaWVzIHByb2R1Y2VkIGZyb20gdGhlc2UgYWRkcyB0byBbNF0uCiMgbG8oWzFdKSBpcyB0aGUgZmluYWwgbG8gMTYgYml0cyBvZiB0aGUgcmVzdWx0LgoJY2xyLmwJCSVkNAkJCSMgbG9hZCBkNCB3LyB6ZXJvIHZhbHVlCglzd2FwCQklZDAJCQkjIGhpKFsxXSkgPD09PiBsbyhbMV0pCglhZGQudwkJJWQxLCVkMAkJCSMgaGkoWzFdKSArIGxvKFsyXSkKCWFkZHgubAkJJWQ0LCVkMwkJCSMgICAgWzRdICArIGNhcnJ5CglhZGQudwkJJWQyLCVkMAkJCSMgaGkoWzFdKSArIGxvKFszXSkKCWFkZHgubAkJJWQ0LCVkMwkJCSMgICAgWzRdICArIGNhcnJ5Cglzd2FwCQklZDAJCQkjIGxvKFsxXSkgPD09PiBoaShbMV0pCgojIGxvIHBvcnRpb25zIG9mIFsyXSxbM10gaGF2ZSBiZWVuIGFkZGVkIGluIHRvIGZpbmFsIHJlc3VsdC4KIyBub3csIGNsZWFyIGxvLCBwdXQgaGkgaW4gbG8gcmVnLCBhbmQgYWRkIHRvIFs0XQoJY2xyLncJCSVkMQkJCSMgY2xlYXIgbG8oWzJdKQoJY2xyLncJCSVkMgkJCSMgY2xlYXIgaGkoWzNdKQoJc3dhcAkJJWQxCQkJIyBoaShbMl0pIGluIGxvIGQxCglzd2FwCQklZDIJCQkjIGhpKFszXSkgaW4gbG8gZDIKCWFkZC5sCQklZDIsJWQxCQkJIyAgICBbNF0gICsgaGkoWzJdKQoJYWRkLmwJCSVkMywlZDEJCQkjICAgIFs0XSAgKyBoaShbM10pCgoJdHN0LmIJCSVkNQkJCSMgc2hvdWxkIHJlc3VsdCBiZSBzaWduZWQ/CgliZXEuYgkJbXVsczY0X2RvbmUJCSMgbm8KCiMgcmVzdWx0IHNob3VsZCBiZSBhIHNpZ25lZCBuZWdhdGl2ZSBudW1iZXIuCiMgY29tcHV0ZSAyJ3MgY29tcGxlbWVudCBvZiB0aGUgdW5zaWduZWQgbnVtYmVyOgojICAgLW5lZ2F0ZSBhbGwgYml0cyBhbmQgYWRkIDEKbXVsczY0X25lZzoKCW5vdC5sCQklZDAJCQkjIG5lZ2F0ZSBsbyhyZXN1bHQpIGJpdHMKCW5vdC5sCQklZDEJCQkjIG5lZ2F0ZSBoaShyZXN1bHQpIGJpdHMKCWFkZHEubAkJJjEsJWQwCQkJIyBhZGQgMSB0byBsbyhyZXN1bHQpCglhZGR4LmwJCSVkNCwlZDEJCQkjIGFkZCBjYXJyeSB0byBoaShyZXN1bHQpCgptdWxzNjRfZG9uZToKCW1vdi53CQlNVUw2NF9DQyglYTYpLCVkNAoJYW5kaS5iCQkmMHgxMCwlZDQJCSMga2VlcCBvbGQgJ1gnIGJpdAoJdHN0LmwJCSVkMQkJCSMgbWF5IHNldCAnTicgYml0CglicGwuYgkJbXVsczY0X2Rkb25lCglvcmkuYgkJJjB4OCwlZDQJCSMgc2V0ICdOJyBiaXQKbXVsczY0X2Rkb25lOgoJbW92LncJCSVkNCwlY2MKCiMgaGVyZSwgdGhlIHJlc3VsdCBpcyBpbiBkMSBhbmQgZDAuIHRoZSBjdXJyZW50IHN0cmF0ZWd5IGlzIHRvIHNhdmUKIyB0aGUgdmFsdWVzIGF0IHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IGEwLgojIHVzZSBtb3ZtIGhlcmUgdG8gbm90IGRpc3R1cmIgdGhlIGNvbmRpdGlvbiBjb2Rlcy4KbXVsczY0X2VuZDoKCWV4ZwkJJWQxLCVkMAoJbW92bS5sCQkmMHgwMDAzLChbMHgxMCwlYTZdKQkjIHNhdmUgcmVzdWx0IGF0IChhMCkKCiMgRVBJTE9HVUUgQkVHSU4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwlmbW92bS5sCQkoJXNwKSssJjB4MAkJIyByZXN0b3JlIG5vIGZwcmVncwoJbW92bS5sCQkoJXNwKSssJjB4MDAzYwkJIyByZXN0b3JlIGQyLWQ1Cgl1bmxrCQklYTYKIyBFUElMT0dVRSBFTkQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCXJ0cwoKIyBvbmUgb3IgYm90aCBvZiB0aGUgb3BlcmFuZHMgaXMgemVybyBzbyB0aGUgcmVzdWx0IGlzIGFsc28gemVyby4KIyBzYXZlIHRoZSB6ZXJvIHJlc3VsdCB0byB0aGUgcmVnaXN0ZXIgZmlsZSBhbmQgc2V0IHRoZSAnWicgY2NvZGUgYml0LgptdWxzNjRfemVybzoKCWNsci5sCQklZDAKCWNsci5sCQklZDEKCgltb3YudwkJTVVMNjRfQ0MoJWE2KSwlZDQKCWFuZGkuYgkJJjB4MTAsJWQ0CglvcmkuYgkJJjB4NCwlZDQKCW1vdi53CQklZDQsJWNjCQkJIyBzZXQgJ1onIGNjb2RlIGJpdAoKCWJyYS5iCQltdWxzNjRfZW5kCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfMDYwTFNQX19jbXAyX0FiXygpOiBFbXVsYXRlICJjbXAyLmIgQW4sPGVhPiIuCQkJIwojCV8wNjBMU1BfX2NtcDJfQXdfKCk6IEVtdWxhdGUgImNtcDIudyBBbiw8ZWE+Ii4JCQkjCiMJXzA2MExTUF9fY21wMl9BbF8oKTogRW11bGF0ZSAiY21wMi5sIEFuLDxlYT4iLgkJCSMKIwlfMDYwTFNQX19jbXAyX0RiXygpOiBFbXVsYXRlICJjbXAyLmIgRG4sPGVhPiIuCQkJIwojCV8wNjBMU1BfX2NtcDJfRHdfKCk6IEVtdWxhdGUgImNtcDIudyBEbiw8ZWE+Ii4JCQkjCiMJXzA2MExTUF9fY21wMl9EbF8oKTogRW11bGF0ZSAiY21wMi5sIERuLDxlYT4iLgkJCSMKIwkJCQkJCQkJCSMKIwlUaGlzIGlzIHRoZSBsaWJyYXJ5IHZlcnNpb24gd2hpY2ggaXMgYWNjZXNzZWQgYXMgYSBzdWJyb3V0aW5lCSMKIwlhbmQgdGhlcmVmb3JlIGRvZXMgbm90IHdvcmsgZXhhY3RseSBsaWtlIHRoZSA2ODBYMCAiY21wMiIJIwojCWluc3RydWN0aW9uLgkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlOb25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwkweDQoc3ApID0gUm4JCQkJCQkJIwojCTB4OChzcCkgPSBwb2ludGVyIHRvIGJvdW5kYXJ5IHBhaXIJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJY2MgPSBjb25kaXRpb24gY29kZXMgYXJlIHNldCBjb3JyZWN0bHkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJSW4gdGhlIGludGVyZXN0IG9mIHNpbXBsaWNpdHksIGFsbCBvcGVyYW5kcyBhcmUgY29udmVydGVkIHRvCSMKIyBsb25nd29yZCBzaXplIHdoZXRoZXIgdGhlIG9wZXJhdGlvbiBpcyBieXRlLCB3b3JkLCBvciBsb25nLiBUaGUJIwojIGJvdW5kcyBhcmUgc2lnbiBleHRlbmRlZCBhY2NvcmRpbmdseS4gSWYgUm4gaXMgYSBkYXRhIHJlZ3NpdGVyLCBSbiBpcyAjCiMgYWxzbyBzaWduIGV4dGVuZGVkLiBJZiBSbiBpcyBhbiBhZGRyZXNzIHJlZ2lzdGVyLCBpdCBuZWVkIG5vdCBiZSBzaWduICMKIyBleHRlbmRlZCBzaW5jZSB0aGUgZnVsbCByZWdpc3RlciBpcyBhbHdheXMgdXNlZC4JCQkjCiMJVGhlIGNvbmRpdGlvbiBjb2RlcyBhcmUgc2V0IGNvcnJlY3RseSBiZWZvcmUgdGhlIGZpbmFsICJydHMiLgkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnNldAlDTVAyX0NDLAktNAoKCWdsb2JhbAkJXzA2MExTUF9fY21wMl9BYl8KXzA2MExTUF9fY21wMl9BYl86CgojIFBST0xPR1VFIEJFR0lOICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCglsaW5rLncJCSVhNiwmLTQKCW1vdm0ubAkJJjB4MzgwMCwtKCVzcCkJCSMgc2F2ZSBkMi1kNAojCWZtb3ZtLmwJCSYweDAsLSglc3ApCQkjIHNhdmUgbm8gZnByZWdzCiMgUFJPTE9HVUUgRU5EICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCgltb3YudwkJJWNjLENNUDJfQ0MoJWE2KQoJbW92LmwJCTB4OCglYTYpLCAlZDIJCSMgZ2V0IHJlZ3ZhbAoKCW1vdi5iCQkoWzB4YywlYTZdLDB4MCksJWQwCgltb3YuYgkJKFsweGMsJWE2XSwweDEpLCVkMQoKCWV4dGIubAkJJWQwCQkJIyBzaWduIGV4dGVuZCBsbyBibmQKCWV4dGIubAkJJWQxCQkJIyBzaWduIGV4dGVuZCBoaSBibmQKCWJyYS53CQlsX2NtcDJfY21wCQkjIGdvIGRvIHRoZSBjb21wYXJlIGVtdWxhdGlvbgoKCWdsb2JhbAkJXzA2MExTUF9fY21wMl9Bd18KXzA2MExTUF9fY21wMl9Bd186CgojIFBST0xPR1VFIEJFR0lOICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCglsaW5rLncJCSVhNiwmLTQKCW1vdm0ubAkJJjB4MzgwMCwtKCVzcCkJCSMgc2F2ZSBkMi1kNAojCWZtb3ZtLmwJCSYweDAsLSglc3ApCQkjIHNhdmUgbm8gZnByZWdzCiMgUFJPTE9HVUUgRU5EICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCgltb3YudwkJJWNjLENNUDJfQ0MoJWE2KQoJbW92LmwJCTB4OCglYTYpLCAlZDIJCSMgZ2V0IHJlZ3ZhbAoKCW1vdi53CQkoWzB4YywlYTZdLDB4MCksJWQwCgltb3YudwkJKFsweGMsJWE2XSwweDIpLCVkMQoKCWV4dC5sCQklZDAJCQkjIHNpZ24gZXh0ZW5kIGxvIGJuZAoJZXh0LmwJCSVkMQkJCSMgc2lnbiBleHRlbmQgaGkgYm5kCglicmEudwkJbF9jbXAyX2NtcAkJIyBnbyBkbyB0aGUgY29tcGFyZSBlbXVsYXRpb24KCglnbG9iYWwJCV8wNjBMU1BfX2NtcDJfQWxfCl8wNjBMU1BfX2NtcDJfQWxfOgoKIyBQUk9MT0dVRSBCRUdJTiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJbGluay53CQklYTYsJi00Cgltb3ZtLmwJCSYweDM4MDAsLSglc3ApCQkjIHNhdmUgZDItZDQKIwlmbW92bS5sCQkmMHgwLC0oJXNwKQkJIyBzYXZlIG5vIGZwcmVncwojIFBST0xPR1VFIEVORCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJbW92LncJCSVjYyxDTVAyX0NDKCVhNikKCW1vdi5sCQkweDgoJWE2KSwgJWQyCQkjIGdldCByZWd2YWwKCgltb3YubAkJKFsweGMsJWE2XSwweDApLCVkMAoJbW92LmwJCShbMHhjLCVhNl0sMHg0KSwlZDEKCWJyYS53CQlsX2NtcDJfY21wCQkjIGdvIGRvIHRoZSBjb21wYXJlIGVtdWxhdGlvbgoKCWdsb2JhbAkJXzA2MExTUF9fY21wMl9EYl8KXzA2MExTUF9fY21wMl9EYl86CgojIFBST0xPR1VFIEJFR0lOICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCglsaW5rLncJCSVhNiwmLTQKCW1vdm0ubAkJJjB4MzgwMCwtKCVzcCkJCSMgc2F2ZSBkMi1kNAojCWZtb3ZtLmwJCSYweDAsLSglc3ApCQkjIHNhdmUgbm8gZnByZWdzCiMgUFJPTE9HVUUgRU5EICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCgltb3YudwkJJWNjLENNUDJfQ0MoJWE2KQoJbW92LmwJCTB4OCglYTYpLCAlZDIJCSMgZ2V0IHJlZ3ZhbAoKCW1vdi5iCQkoWzB4YywlYTZdLDB4MCksJWQwCgltb3YuYgkJKFsweGMsJWE2XSwweDEpLCVkMQoKCWV4dGIubAkJJWQwCQkJIyBzaWduIGV4dGVuZCBsbyBibmQKCWV4dGIubAkJJWQxCQkJIyBzaWduIGV4dGVuZCBoaSBibmQKCiMgb3BlcmF0aW9uIGlzIGEgZGF0YSByZWdpc3RlciBjb21wYXJlLgojIHNpZ24gZXh0ZW5kIGJ5dGUgdG8gbG9uZyBzbyB3ZSBjYW4gZG8gc2ltcGxlIGxvbmd3b3JkIGNvbXBhcmVzLgoJZXh0Yi5sCQklZDIJCQkjIHNpZ24gZXh0ZW5kIGRhdGEgYnl0ZQoJYnJhLncJCWxfY21wMl9jbXAJCSMgZ28gZG8gdGhlIGNvbXBhcmUgZW11bGF0aW9uCgoJZ2xvYmFsCQlfMDYwTFNQX19jbXAyX0R3XwpfMDYwTFNQX19jbXAyX0R3XzoKCiMgUFJPTE9HVUUgQkVHSU4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCWxpbmsudwkJJWE2LCYtNAoJbW92bS5sCQkmMHgzODAwLC0oJXNwKQkJIyBzYXZlIGQyLWQ0CiMJZm1vdm0ubAkJJjB4MCwtKCVzcCkJCSMgc2F2ZSBubyBmcHJlZ3MKIyBQUk9MT0dVRSBFTkQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCW1vdi53CQklY2MsQ01QMl9DQyglYTYpCgltb3YubAkJMHg4KCVhNiksICVkMgkJIyBnZXQgcmVndmFsCgoJbW92LncJCShbMHhjLCVhNl0sMHgwKSwlZDAKCW1vdi53CQkoWzB4YywlYTZdLDB4MiksJWQxCgoJZXh0LmwJCSVkMAkJCSMgc2lnbiBleHRlbmQgbG8gYm5kCglleHQubAkJJWQxCQkJIyBzaWduIGV4dGVuZCBoaSBibmQKCiMgb3BlcmF0aW9uIGlzIGEgZGF0YSByZWdpc3RlciBjb21wYXJlLgojIHNpZ24gZXh0ZW5kIHdvcmQgdG8gbG9uZyBzbyB3ZSBjYW4gZG8gc2ltcGxlIGxvbmd3b3JkIGNvbXBhcmVzLgoJZXh0LmwJCSVkMgkJCSMgc2lnbiBleHRlbmQgZGF0YSB3b3JkCglicmEudwkJbF9jbXAyX2NtcAkJIyBnbyBlbXVsYXRlIGNvbXBhcmUKCglnbG9iYWwJCV8wNjBMU1BfX2NtcDJfRGxfCl8wNjBMU1BfX2NtcDJfRGxfOgoKIyBQUk9MT0dVRSBCRUdJTiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJbGluay53CQklYTYsJi00Cgltb3ZtLmwJCSYweDM4MDAsLSglc3ApCQkjIHNhdmUgZDItZDQKIwlmbW92bS5sCQkmMHgwLC0oJXNwKQkJIyBzYXZlIG5vIGZwcmVncwojIFBST0xPR1VFIEVORCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJbW92LncJCSVjYyxDTVAyX0NDKCVhNikKCW1vdi5sCQkweDgoJWE2KSwgJWQyCQkjIGdldCByZWd2YWwKCgltb3YubAkJKFsweGMsJWE2XSwweDApLCVkMAoJbW92LmwJCShbMHhjLCVhNl0sMHg0KSwlZDEKCiMKIyBUbyBzZXQgdGhlIGNjb2RlcyBjb3JyZWN0bHk6CiMJKDEpIHNhdmUgJ1onIGJpdCBmcm9tIChSbiAtIGxvKQojCSgyKSBzYXZlICdaJyBhbmQgJ04nIGJpdHMgZnJvbSAoKGhpIC0gbG8pIC0gKFJuIC0gaGkpKQojCSgzKSBrZWVwICdYJywgJ04nLCBhbmQgJ1YnIGZyb20gYmVmb3JlIGluc3RydWN0aW9uCiMJKDQpIGNvbWJpbmUgY2NvZGVzCiMKbF9jbXAyX2NtcDoKCXN1Yi5sCQklZDAsICVkMgkJIyAoUm4gLSBsbykKCW1vdi53CQklY2MsICVkMwkJIyBmZXRjaCByZXN1bHRpbmcgY2NvZGVzCglhbmRpLmIJCSYweDQsICVkMwkJIyBrZWVwICdaJyBiaXQKCXN1Yi5sCQklZDAsICVkMQkJIyAoaGkgLSBsbykKCWNtcC5sCQklZDEsJWQyCQkJIyAoKGhpIC0gbG8pIC0gKFJuIC0gaGkpKQoKCW1vdi53CQklY2MsICVkNAkJIyBmZXRjaCByZXN1bHRpbmcgY2NvZGVzCglvci5iCQklZDQsICVkMwkJIyBjb21iaW5lIHcvIGVhcmxpZXIgY2NvZGVzCglhbmRpLmIJCSYweDUsICVkMwkJIyBrZWVwICdaJyBhbmQgJ04nCgoJbW92LncJCUNNUDJfQ0MoJWE2KSwgJWQ0CSMgZmV0Y2ggb2xkIGNjb2RlcwoJYW5kaS5iCQkmMHgxYSwgJWQ0CQkjIGtlZXAgJ1gnLCdOJywnVicgYml0cwoJb3IuYgkJJWQzLCAlZDQJCSMgaW5zZXJ0IG5ldyBjY29kZXMKCW1vdi53CQklZDQsJWNjCQkJIyBzYXZlIG5ldyBjY29kZXMKCiMgRVBJTE9HVUUgQkVHSU4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwlmbW92bS5sCQkoJXNwKSssJjB4MAkJIyByZXN0b3JlIG5vIGZwcmVncwoJbW92bS5sCQkoJXNwKSssJjB4MDAxYwkJIyByZXN0b3JlIGQyLWQ0Cgl1bmxrCQklYTYKIyBFUElMT0dVRSBFTkQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCXJ0cwo=