ZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvZG9jcy9zZHJhbV9jb250cm9sbGVyX3NwZWNzLnBkZiBiL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvZG9jcy9zZHJhbV9jb250cm9sbGVyX3NwZWNzLnBkZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZTU0ZWFlZC4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL2RvY3Mvc2RyYW1fY29udHJvbGxlcl9zcGVjcy5wZGYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9jb3JlL3NkcmNfYmFua19jdGwudiBiL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2NvcmUvc2RyY19iYW5rX2N0bC52CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhNzhhZTlkLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2NvcmUvc2RyY19iYW5rX2N0bC52CisrKyAvZGV2L251bGwKQEAgLTEsNTkwICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+Ci0vLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgU0RSQU0gQ29udHJvbGxlciBCYW5rIENvbnRyb2xsZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBzZHJhbSBjb250cm9sbGVyIHByb2plY3QgICAgICAgICAgIAotICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0Ci0gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAKLSAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3Nkcl9jdHJsLyAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBEZXNjcmlwdGlvbjogCi0gICAgVGhpcyBtb2R1bGUgdGFrZXMgcmVxdWVzdHMgZnJvbSBzZHJjX3JlcV9nZW4sIGNoZWNrcyBmb3IgcGFnZSBoaXQvbWlzcyBhbmQKLSAgICBpc3N1ZXMgcHJlY2hhcmdlL2FjdGl2YXRlIGNvbW1hbmRzIGFuZCB0aGVuIHBhc3NlcyB0aGUgcmVxdWVzdCB0byBzZHJjX3hmcl9jdGwuIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIAotICBWZXJzaW9uICA6ICAxLjAgIC0gOHRoIEphbiAyMDEyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIAotIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAKLSByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgCi0gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgCi0gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIAotIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAKLSBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgCi1sYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAKLSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgCi0gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIAotIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAKLSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAKLSBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgCi0gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotYGluY2x1ZGUgInNkcmNfZGVmaW5lLnYiCi0KLW1vZHVsZSBzZHJjX2JhbmtfY3RsIChjbGssCi0JCSAgICAgcmVzZXRfbiwKLQkJICAgICBhMmJfcmVxX2RlcHRoLCAgLy8gTnVtYmVyIG9mIHJlcXVlc3RzIHdlIGNhbiBidWZmZXIKLQotCQkgICAgIC8qIFJlcSBmcm9tIHJlcV9nZW4gKi8KLQkJICAgICByMmJfcmVxLAkgICAvLyByZXF1ZXN0Ci0JCSAgICAgcjJiX3JlcV9pZCwgICAvLyBJRAotCQkgICAgIHIyYl9zdGFydCwJICAgLy8gRmlyc3QgY2h1bmsgb2YgYnVyc3QKLQkJICAgICByMmJfbGFzdCwJICAgLy8gTGFzdCBjaHVuayBvZiBidXJzdAotCQkgICAgIHIyYl93cmFwLAotCQkgICAgIHIyYl9iYSwJICAgLy8gYmFuayBhZGRyZXNzCi0JCSAgICAgcjJiX3JhZGRyLAkgICAvLyByb3cgYWRkcmVzcwotCQkgICAgIHIyYl9jYWRkciwJICAgLy8gY29sIGFkZHJlc3MKLQkJICAgICByMmJfbGVuLAkgICAvLyBsZW5ndGgKLQkJICAgICByMmJfd3JpdGUsCSAgIC8vIHdyaXRlIHJlcXVlc3QKLQkJICAgICBiMnJfYXJiX29rLCAgIC8vIE9LIHRvIGFyYml0cmF0ZSBmb3IgbmV4dCB4ZnIKLQkJICAgICBiMnJfYWNrLAotCi0JCSAgICAgLyogVHJhbnNmZXIgcmVxdWVzdCB0byB4ZnJfY3RsICovCi0JCSAgICAgYjJ4X2lkbGUsCSAgIC8vIEFsbCBiYW5rcyBhcmUgaWRsZQotCQkgICAgIGIyeF9yZXEsCSAgIC8vIFJlcXVlc3QgdG8geGZyX2N0bAotCQkgICAgIGIyeF9zdGFydCwJICAgLy8gZmlyc3QgY2h1bmsgb2YgdHJhbnNmZXIKLQkJICAgICBiMnhfbGFzdCwJICAgLy8gbGFzdCBjaHVuayBvZiB0cmFuc2ZlcgotCQkgICAgIGIyeF93cmFwLAotCQkgICAgIGIyeF9pZCwJICAgLy8gVHJhbnNmZXIgSUQKLQkJICAgICBiMnhfYmEsCSAgIC8vIGJhbmsgYWRkcmVzcwotCQkgICAgIGIyeF9hZGRyLAkgICAvLyByb3cvY29sIGFkZHJlc3MKLQkJICAgICBiMnhfbGVuLAkgICAvLyB0cmFuc2ZlciBsZW5ndGgKLQkJICAgICBiMnhfY21kLAkgICAvLyB0cmFuc2ZlciBjb21tYW5kCi0JCSAgICAgeDJiX2FjaywJICAgLy8gY29tbWFuZCBhY2NlcHRlZAotCQkgICAgIAotCQkgICAgIC8qIFN0YXR1cyB0by9mcm9tIHhmcl9jdGwgKi8KLQkJICAgICBiMnhfdHJhc19vaywgIC8vIFRSQVMgT0sgZm9yIGFsbCBiYW5rcwotCQkgICAgIHgyYl9yZWZyZXNoLCAgLy8gV2UgZGlkIGEgcmVmcmVzaAotCQkgICAgIHgyYl9wcmVfb2ssICAgLy8gT0sgdG8gZG8gYSBwcmVjaGFyZ2UgKHBlciBiYW5rKQotCQkgICAgIHgyYl9hY3Rfb2ssICAgLy8gT0sgdG8gZG8gYW4gYWN0aXZhdGUKLQkJICAgICB4MmJfcmRvaywJICAgLy8gT0sgdG8gZG8gYSByZWFkCi0JCSAgICAgeDJiX3dyb2ssCSAgIC8vIE9LIHRvIGRvIGEgd3JpdGUKLQotCQkgICAgIC8qIHhmciBtc2IgYWRkcmVzcyAqLwotCQkgICAgIHhmcl9iYW5rX3NlbCwKLSAgICAgICAgICAgICAgICAgICAgIHNkcl9yZXFfbm9ybV9kbWFfbGFzdCwKLQotCQkgICAgIC8qIFNEUkFNIFRpbWluZyAqLwotCQkgICAgIHRyYXNfZGVsYXksICAgLy8gQWN0aXZlIHRvIHByZWNoYXJnZSBkZWxheQotCQkgICAgIHRycF9kZWxheSwJICAgLy8gUHJlY2hhcmdlIHRvIGFjdGl2ZSBkZWxheQotCQkgICAgIHRyY2RfZGVsYXkpOyAgLy8gQWN0aXZlIHRvIFIvVyBkZWxheQotICAgCi1wYXJhbWV0ZXIgIFNEUl9EVyAgID0gMTY7ICAvLyBTRFIgRGF0YSBXaWR0aCAKLXBhcmFtZXRlciAgU0RSX0JXICAgPSAyOyAgIC8vIFNEUiBCeXRlIFdpZHRoCi0gICBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgIGNsaywgcmVzZXRfbjsKLQotICAgaW5wdXQgWzE6MF0gCQkJYTJiX3JlcV9kZXB0aDsKLSAgIAotICAgLyogUmVxIGZyb20gYmFua19jdGwgKi8KLSAgIGlucHV0IAkJCXIyYl9yZXEsIHIyYl9zdGFydCwgcjJiX2xhc3QsCi0JCQkJcjJiX3dyaXRlLCByMmJfd3JhcDsKLSAgIGlucHV0IFtgU0RSX1JFUV9JRF9XLTE6MF0gCXIyYl9yZXFfaWQ7Ci0gICBpbnB1dCBbMTowXSAJCQlyMmJfYmE7Ci0gICBpbnB1dCBbMTI6MF0gCQlyMmJfcmFkZHI7Ci0gICBpbnB1dCBbMTI6MF0gCQlyMmJfY2FkZHI7Ci0gICBpbnB1dCBbYFJFUV9CVy0xOjBdIAkgICAgICAgIHIyYl9sZW47Ci0gICBvdXRwdXQgCQkJYjJyX2FyYl9vaywgYjJyX2FjazsKLSAgIGlucHV0ICAgICAgICAgICAgICAgICAgICAgICAgc2RyX3JlcV9ub3JtX2RtYV9sYXN0OwotCi0gICAvKiBSZXEgdG8geGZyX2N0bCAqLwotICAgb3V0cHV0IAkJCWIyeF9pZGxlLCBiMnhfcmVxLCBiMnhfc3RhcnQsIGIyeF9sYXN0LAotCQkJCWIyeF90cmFzX29rLCBiMnhfd3JhcDsKLSAgIG91dHB1dCBbYFNEUl9SRVFfSURfVy0xOjBdIAliMnhfaWQ7Ci0gICBvdXRwdXQgWzE6MF0gCQliMnhfYmE7Ci0gICBvdXRwdXQgWzEyOjBdIAkJYjJ4X2FkZHI7Ci0gICBvdXRwdXQgW2BSRVFfQlctMTowXSAJYjJ4X2xlbjsKLSAgIG91dHB1dCBbMTowXSAJCWIyeF9jbWQ7Ci0gICBpbnB1dCAJCQl4MmJfYWNrOwotCi0gICAvKiBTdGF0dXMgZnJvbSB4ZnJfY3RsICovCi0gICBpbnB1dCBbMzowXSAJCQl4MmJfcHJlX29rOwotICAgaW5wdXQgCQkJeDJiX3JlZnJlc2gsIHgyYl9hY3Rfb2ssIHgyYl9yZG9rLAotCQkJCXgyYl93cm9rOwotICAgCi0gICBpbnB1dCBbMzowXSAJCQl0cmFzX2RlbGF5LCB0cnBfZGVsYXksIHRyY2RfZGVsYXk7Ci0KLSAgIGlucHV0IFsxOjBdIHhmcl9iYW5rX3NlbDsKLQotICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAvLyBJbnRlcm5hbCBOZXRzCi0KLSAgIHdpcmUgWzM6MF0gCQkJcjJpX3JlcSwgaTJyX2FjaywgaTJ4X3JlcSwgCi0JCQkJaTJ4X3N0YXJ0LCBpMnhfbGFzdCwgaTJ4X3dyYXAsIHRyYXNfb2s7Ci0gICB3aXJlIFsxMjowXSAJCQlpMnhfYWRkcjAsIGkyeF9hZGRyMSwgaTJ4X2FkZHIyLCBpMnhfYWRkcjM7Ci0gICB3aXJlIFtgUkVRX0JXLTE6MF0gCWkyeF9sZW4wLCBpMnhfbGVuMSwgaTJ4X2xlbjIsIGkyeF9sZW4zOwotICAgd2lyZSBbMTowXSAJCQlpMnhfY21kMCwgaTJ4X2NtZDEsIGkyeF9jbWQyLCBpMnhfY21kMzsKLSAgIHdpcmUgW2BTRFJfUkVRX0lEX1ctMTowXSAJaTJ4X2lkMCwgaTJ4X2lkMSwgaTJ4X2lkMiwgaTJ4X2lkMzsKLQotICAgcmVnIAkJCQliMnhfcmVxOwotICAgd2lyZSAJCQliMnhfaWRsZSwgYjJ4X3N0YXJ0LCBiMnhfbGFzdCwgYjJ4X3dyYXA7Ci0gICB3aXJlIFtgU0RSX1JFUV9JRF9XLTE6MF0gCWIyeF9pZDsKLSAgIHdpcmUgWzEyOjBdIAkJCWIyeF9hZGRyOwotICAgd2lyZSBbYFJFUV9CVy0xOjBdIAliMnhfbGVuOwotICAgd2lyZSBbMTowXSAJCQliMnhfY21kOwotICAgd2lyZSBbMzowXSAJCQl4MmlfYWNrOwotICAgcmVnIFsxOjBdIAkJCWIyeF9iYTsKLSAgIAotICAgcmVnIFtgU0RSX1JFUV9JRF9XLTE6MF0gCWN1cnJfaWQ7Ci0KLSAgIHdpcmUgWzE6MF0gCQkJeGZyX2JhOwotICAgd2lyZSAgCQkJeGZyX2JhX2xhc3Q7Ci0gICB3aXJlIFszOjBdIAkJCXhmcl9vazsKLQotICAgLy8gVGhpcyA4IGJpdCByZWdpc3RlciBzdG9yZXMgdGhlIGJhbmsgYWRkcmVzc2VzIGZvciB1cHRvIDQgcmVxdWVzdHMuCi0gICByZWcgWzc6MF0gCQkJcmFua19iYTsKLSAgIHJlZyBbMzowXSAJCQlyYW5rX2JhX2xhc3Q7Ci0gICAvLyBUaGlzIDMgYml0IGNvdW50ZXIgY291bnRzIHRoZSBudW1iZXIgb2YgcmVxdWVzdHMgd2UgaGF2ZQotICAgLy8gYnVmZmVyZWQgc28gZmFyLCBsZWdhbCB2YWx1ZXMgYXJlIDAsIDEsIDIsIDMsIG9yIDQuCi0gICByZWcgWzI6MF0gCQkJcmFua19jbnQ7Ci0gICB3aXJlIFszOjBdIAkJCXJhbmtfcmVxLCByYW5rX3dyX3NlbDsKLSAgIHdpcmUgCQkJcmFua19maWZvX3dyLCByYW5rX2ZpZm9fcmQ7Ci0gICB3aXJlIAkJCXJhbmtfZmlmb19mdWxsLCByYW5rX2ZpZm9fbXQ7Ci0gICAKLSAgIHdpcmUgWzEyOjBdIGJhbmswX3JvdywgYmFuazFfcm93LCBiYW5rMl9yb3csIGJhbmszX3JvdzsKLQotICAgYXNzaWduICBiMnhfdHJhc19vayAgICAgICAgPSAmdHJhc19vazsKLQotCi0gICAvLyBEaXN0cmlidXRlIHRoZSByZXF1ZXN0IGZyb20gcmVxX2dlbgotCi0gICBhc3NpZ24gcjJpX3JlcVswXSA9IChyMmJfYmEgPT0gMidiMDApID8gcjJiX3JlcSAmIH5yYW5rX2ZpZm9fZnVsbCA6IDEnYjA7Ci0gICBhc3NpZ24gcjJpX3JlcVsxXSA9IChyMmJfYmEgPT0gMidiMDEpID8gcjJiX3JlcSAmIH5yYW5rX2ZpZm9fZnVsbCA6IDEnYjA7Ci0gICBhc3NpZ24gcjJpX3JlcVsyXSA9IChyMmJfYmEgPT0gMidiMTApID8gcjJiX3JlcSAmIH5yYW5rX2ZpZm9fZnVsbCA6IDEnYjA7Ci0gICBhc3NpZ24gcjJpX3JlcVszXSA9IChyMmJfYmEgPT0gMidiMTEpID8gcjJiX3JlcSAmIH5yYW5rX2ZpZm9fZnVsbCA6IDEnYjA7Ci0KLSAgIC8qKioqKioqKioqKioqKioqKioKLSAgIE1vZGlmaWVkIHRoZSBCZXR0ZXIgRlBHQSBUaW1pbmcgUHVycG9zZQotICAgYXNzaWduIGIycl9hY2sgPSAocjJiX2JhID09IDInYjAwKSA/IGkycl9hY2tbMF0gOgotCQkgICAgKHIyYl9iYSA9PSAyJ2IwMSkgPyBpMnJfYWNrWzFdIDoKLQkJICAgIChyMmJfYmEgPT0gMidiMTApID8gaTJyX2Fja1syXSA6Ci0JCSAgICAocjJiX2JhID09IDInYjExKSA/IGkycl9hY2tbM10gOiAxJ2IwOwotICAgKioqKioqKioqKioqKioqKioqKiovCi0gICAvLyBBc3N1bXB0aW9uOiBPbmx5IG9uZSBBY2sgV2lsbCBiZSBhc3NlcnRlZCBhdCBhIHRpbWUuCi0gICBhc3NpZ24gYjJyX2FjayAgPXxpMnJfYWNrOyAKLQotICAgYXNzaWduIGIycl9hcmJfb2sgPSB+cmFua19maWZvX2Z1bGw7Ci0gICAKLSAgIC8vIFB1dCB0aGUgcmVxdWVzdHMgZnJvbSB0aGUgNCBiYW5rX2ZzbXMgaW50byBhIDQgZGVlcCBzaGlmdAotICAgLy8gcmVnaXN0ZXIgZmlsZS4gVGhlIGVhcmxpZXN0IHJlcXVlc3QgaXMgcHJpb3JpdGl6ZWQgb3ZlciB0aGUKLSAgIC8vIGxhdGVyIHJlcXVlc3RzLiBBbHNvIHRoZSBudW1iZXIgb2YgcmVxdWVzdHMgd2UgYXJlIGFsbG93ZWQgdG8KLSAgIC8vIGJ1ZmZlciBpcyBsaW1pdGVkIGJ5IGEgMiBiaXQgZXh0ZXJuYWwgaW5wdXQKLSAgIAotICAgLy8gTXV4IHRoZSByZXEvY21kIHRvIHhmcl9jdGwuIEFsbG93IFJEL1dSIGNvbW1hbmRzIGZyb20gdGhlIHJlcXVlc3QgaW4KLSAgIC8vIHJhbmswLCBhbGxvdyBvbmx5IFBSL0FDVCBjb21tYW5kcyBmcm9tIHRoZSByZXF1ZXN0cyBpbiBvdGhlciByYW5rcwotICAgLy8gSWYgdGhlIHJhbmtfZmlmbyBpcyBlbXB0eSwgc2VuZCB0aGUgcmVxdWVzdCBmcm9tIHRoZSBiYW5rIGFkZHJlc3NlZCBieQotICAgLy8gcjJiX2JhIAotCi0gICAvLyBJbiBGUEdBIE1vZGUsIHRvIGltcHJvdmUgdGhlIHRpbWluZywgYWxzbyBzZW5kIHRoZSByYW5rX2JhCi0gICBhc3NpZ24geGZyX2JhID0gKGBUQVJHRVRfREVTSUdOID09IGBGUEdBKSA/IHJhbmtfYmFbMTowXToKLQkgICAgICAgICAgICgocmFua19maWZvX210KSA/IHIyYl9iYSA6IHJhbmtfYmFbMTowXSk7Ci0gICBhc3NpZ24geGZyX2JhX2xhc3QgPSAoYFRBUkdFVF9ERVNJR04gPT0gYEZQR0EpID8gcmFua19iYV9sYXN0WzBdOgotCSAgICAgICAgICAgICAgICAoKHJhbmtfZmlmb19tdCkgPyBzZHJfcmVxX25vcm1fZG1hX2xhc3QgOiByYW5rX2JhX2xhc3RbMF0pOwotICAgCi0gICBhc3NpZ24gcmFua19yZXFbMF0gPSBpMnhfcmVxW3hmcl9iYV07ICAgICAvLyBlYWNoIHJhbmsgZ2VuZXJhdGVzIHJlcXVlc3RzCi0JCQkKLSAgIGFzc2lnbiByYW5rX3JlcVsxXSA9IChyYW5rX2NudCA8IDMnaDIpID8gMSdiMCA6Ci0JCQkocmFua19iYVszOjJdID09IDInYjAwKSA/IGkyeF9yZXFbMF0gJiB+aTJ4X2NtZDBbMV0gOgotCQkJKHJhbmtfYmFbMzoyXSA9PSAyJ2IwMSkgPyBpMnhfcmVxWzFdICYgfmkyeF9jbWQxWzFdIDoKLQkJCShyYW5rX2JhWzM6Ml0gPT0gMidiMTApID8gaTJ4X3JlcVsyXSAmIH5pMnhfY21kMlsxXSA6IAotCQkJaTJ4X3JlcVszXSAmIH5pMnhfY21kM1sxXTsKLQkJCQotICAgYXNzaWduIHJhbmtfcmVxWzJdID0gKHJhbmtfY250IDwgMydoMykgPyAxJ2IwIDoKLQkJCShyYW5rX2JhWzU6NF0gPT0gMidiMDApID8gaTJ4X3JlcVswXSAmIH5pMnhfY21kMFsxXSA6Ci0JCQkocmFua19iYVs1OjRdID09IDInYjAxKSA/IGkyeF9yZXFbMV0gJiB+aTJ4X2NtZDFbMV0gOgotCQkJKHJhbmtfYmFbNTo0XSA9PSAyJ2IxMCkgPyBpMnhfcmVxWzJdICYgfmkyeF9jbWQyWzFdIDogCi0JCQlpMnhfcmVxWzNdICYgfmkyeF9jbWQzWzFdOwotCQkJCi0gICBhc3NpZ24gcmFua19yZXFbM10gPSAocmFua19jbnQgPCAzJ2g0KSA/IDEnYjAgOgotCQkJKHJhbmtfYmFbNzo2XSA9PSAyJ2IwMCkgPyBpMnhfcmVxWzBdICYgfmkyeF9jbWQwWzFdIDoKLQkJCShyYW5rX2JhWzc6Nl0gPT0gMidiMDEpID8gaTJ4X3JlcVsxXSAmIH5pMnhfY21kMVsxXSA6Ci0JCQkocmFua19iYVs3OjZdID09IDInYjEwKSA/IGkyeF9yZXFbMl0gJiB+aTJ4X2NtZDJbMV0gOiAKLQkJCWkyeF9yZXFbM10gJiB+aTJ4X2NtZDNbMV07Ci0JCQkKLSAgIGFsd2F5cyBAICgqKSBiZWdpbgotICAgICAgYjJ4X3JlcSA9IDEnYjA7Ci0gICAgICBiMnhfYmEgPSAgIHhmcl9iYTsKLQotICAgICAgaWYoYFRBUkdFVF9ERVNJR04gPT0gYEFTSUMpIGJlZ2luIC8vIFN1cHBvcnQgTXVsdGlwbGUgUmFuayByZXF1ZXN0IG9ubHkgb24gQVNJQwotICAgICAgICAgaWYgKHJhbmtfcmVxWzBdKSBiZWdpbiAKLQkgICAgYjJ4X3JlcSA9IDEnYjE7Ci0JICAgIGIyeF9iYSA9IHhmcl9iYTsKLSAgICAgICAgIGVuZCAvLyBpZiAocmFua19yZXFbMF0pCi0JIGVsc2UgaWYgKHJhbmtfcmVxWzFdKSBiZWdpbiAKLQkgICBiMnhfcmVxID0gMSdiMTsKLQkgICBiMnhfYmEgPSByYW5rX2JhWzM6Ml07Ci0gICAgICAgIGVuZCAvLyBpZiAocmFua19yZXFbMV0pCi0gICAgICAgIGVsc2UgaWYgKHJhbmtfcmVxWzJdKSBiZWdpbiAKLQkgIGIyeF9yZXEgPSAxJ2IxOwotCSAgYjJ4X2JhID0gcmFua19iYVs1OjRdOwotICAgICAgICBlbmQgLy8gaWYgKHJhbmtfcmVxWzJdKQotICAgICAgICBlbHNlIGlmIChyYW5rX3JlcVszXSkgYmVnaW4gCi0JICBiMnhfcmVxID0gMSdiMTsKLQkgIGIyeF9iYSA9IHJhbmtfYmFbNzo2XTsKLSAgICAgICAgZW5kIC8vIGlmIChyYW5rX3JlcVszXSkKLSAgICAgIGVuZCBlbHNlIGJlZ2luIC8vIElmIEZQR0EKLSAgICAgICAgIGlmIChyYW5rX3JlcVswXSkgYmVnaW4gCi0JICAgIGIyeF9yZXEgPSAxJ2IxOwotCSBlbmQKLSAgICAgIGVuZAotICBlbmQgLy8gYWx3YXlzIEAgKHJhbmtfcmVxIG9yIHJhbmtfZmlmb19tdCBvciByMmJfYmEgb3IgcmFua19iYSkKLQotICAgYXNzaWduIGIyeF9pZGxlID0gcmFua19maWZvX210OwotICAgYXNzaWduIGIyeF9zdGFydCA9IGkyeF9zdGFydFtiMnhfYmFdOwotICAgYXNzaWduIGIyeF9sYXN0ID0gaTJ4X2xhc3RbYjJ4X2JhXTsKLSAgIGFzc2lnbiBiMnhfd3JhcCA9IGkyeF93cmFwW2IyeF9iYV07Ci0KLSAgIGFzc2lnbiBiMnhfYWRkciA9IChiMnhfYmEgPT0gMidiMTEpID8gaTJ4X2FkZHIzIDoKLQkJICAgICAoYjJ4X2JhID09IDInYjEwKSA/IGkyeF9hZGRyMiA6Ci0JCSAgICAgKGIyeF9iYSA9PSAyJ2IwMSkgPyBpMnhfYWRkcjEgOiBpMnhfYWRkcjA7Ci0gICAKLSAgIGFzc2lnbiBiMnhfbGVuID0gKGIyeF9iYSA9PSAyJ2IxMSkgPyBpMnhfbGVuMyA6Ci0JCSAgICAoYjJ4X2JhID09IDInYjEwKSA/IGkyeF9sZW4yIDoKLQkJICAgIChiMnhfYmEgPT0gMidiMDEpID8gaTJ4X2xlbjEgOiBpMnhfbGVuMDsKLSAgIAotICAgYXNzaWduIGIyeF9jbWQgPSAoYjJ4X2JhID09IDInYjExKSA/IGkyeF9jbWQzIDoKLQkJICAgIChiMnhfYmEgPT0gMidiMTApID8gaTJ4X2NtZDIgOgotCQkgICAgKGIyeF9iYSA9PSAyJ2IwMSkgPyBpMnhfY21kMSA6IGkyeF9jbWQwOwotICAgCi0gICBhc3NpZ24gYjJ4X2lkID0gKGIyeF9iYSA9PSAyJ2IxMSkgPyBpMnhfaWQzIDoKLQkJICAgKGIyeF9iYSA9PSAyJ2IxMCkgPyBpMnhfaWQyIDoKLQkJICAgKGIyeF9iYSA9PSAyJ2IwMSkgPyBpMnhfaWQxIDogaTJ4X2lkMDsKLSAgIAotICAgYXNzaWduIHgyaV9hY2tbMF0gPSAoYjJ4X2JhID09IDInYjAwKSA/IHgyYl9hY2sgOiAxJ2IwOwotICAgYXNzaWduIHgyaV9hY2tbMV0gPSAoYjJ4X2JhID09IDInYjAxKSA/IHgyYl9hY2sgOiAxJ2IwOwotICAgYXNzaWduIHgyaV9hY2tbMl0gPSAoYjJ4X2JhID09IDInYjEwKSA/IHgyYl9hY2sgOiAxJ2IwOwotICAgYXNzaWduIHgyaV9hY2tbM10gPSAoYjJ4X2JhID09IDInYjExKSA/IHgyYl9hY2sgOiAxJ2IwOwotCi0gICAvLyBSYW5rIEZpZm8KLSAgIC8vIE9uIGEgd3JpdGUgd3JpdGUgdG8gc2VsZWN0ZWQgcmFuayBhbmQgaW5jcmVtZW50IHJhbmtfY250Ci0gICAvLyBPbiBhIHJlYWQgc2hpZnQgcmFua19iYSByaWdodCAyIGJpdHMgYW5kIGRlY3JlbWVudCByYW5rX2NudAotCi0gICBhc3NpZ24gcmFua19maWZvX3dyID0gYjJyX2FjazsKLQotICAgYXNzaWduIHJhbmtfZmlmb19yZCA9IGIyeF9yZXEgJiBiMnhfY21kWzFdICYgeDJiX2FjazsKLSAgIAotICAgYXNzaWduIHJhbmtfd3Jfc2VsWzBdID0gKHJhbmtfY250ID09IDMnaDApID8gcmFua19maWZvX3dyIDogCi0JCQkgICAocmFua19jbnQgPT0gMydoMSkgPyByYW5rX2ZpZm9fd3IgJiByYW5rX2ZpZm9fcmQgOiAKLQkJCSAgIDEnYjA7Ci0KLSAgIGFzc2lnbiByYW5rX3dyX3NlbFsxXSA9IChyYW5rX2NudCA9PSAzJ2gxKSA/IHJhbmtfZmlmb193ciAmIH5yYW5rX2ZpZm9fcmQgOgotCQkJICAgKHJhbmtfY250ID09IDMnaDIpID8gcmFua19maWZvX3dyICYgcmFua19maWZvX3JkIDoKLQkJCSAgIDEnYjA7IAotCi0gICBhc3NpZ24gcmFua193cl9zZWxbMl0gPSAocmFua19jbnQgPT0gMydoMikgPyByYW5rX2ZpZm9fd3IgJiB+cmFua19maWZvX3JkIDoKLQkJCSAgIChyYW5rX2NudCA9PSAzJ2gzKSA/IHJhbmtfZmlmb193ciAmIHJhbmtfZmlmb19yZCA6Ci0JCQkgICAxJ2IwOyAKLQotICAgYXNzaWduIHJhbmtfd3Jfc2VsWzNdID0gKHJhbmtfY250ID09IDMnaDMpID8gcmFua19maWZvX3dyICYgfnJhbmtfZmlmb19yZCA6Ci0JCQkgICAocmFua19jbnQgPT0gMydoNCkgPyByYW5rX2ZpZm9fd3IgJiByYW5rX2ZpZm9fcmQgOgotCQkJICAgMSdiMDsgCi0KLSAgIGFzc2lnbiByYW5rX2ZpZm9fbXQgPSAocmFua19jbnQgPT0gMydiMCkgPyAxJ2IxIDogMSdiMDsKLQotICAgYXNzaWduIHJhbmtfZmlmb19mdWxsID0gKHJhbmtfY250WzJdKSA/IDEnYjEgOiAKLQkJCSAgIChyYW5rX2NudFsxOjBdID09IGEyYl9yZXFfZGVwdGgpID8gMSdiMSA6IDEnYjA7IAotCi0gICAvLyBGSUZPIENoZWNrCi0KLSAgIC8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKLQotICAgYWx3YXlzIEAgKHBvc2VkZ2UgY2xrKSBiZWdpbgotCi0gICAgICBpZiAofnJhbmtfZmlmb193ciAmIHJhbmtfZmlmb19yZCAmJiByYW5rX2NudCA9PSAzJ2gwKSBiZWdpbgotCSAkZGlzcGxheSAoIiV0OiAlbTogRVJST1IhISEgUmVhZCBmcm9tIGVtcHR5IEZpZm8iLCAkdGltZSk7Ci0JICRzdG9wOwotICAgICAgZW5kIC8vIGlmIChyYW5rX2ZpZm9fcmQgJiYgcmFua19jbnQgPT0gMydoMCkKLQotICAgICAgaWYgKHJhbmtfZmlmb193ciAmJiB+cmFua19maWZvX3JkICYmIHJhbmtfY250ID09IDMnaDQpIGJlZ2luCi0JICRkaXNwbGF5ICgiJXQ6ICVtOiBFUlJPUiEhISBXcml0ZSB0byBmdWxsIEZpZm8iLCAkdGltZSk7Ci0JICRzdG9wOwotICAgICAgZW5kIC8vIGlmIChyYW5rX2ZpZm9fd3IgJiYgfnJhbmtfZmlmb19yZCAmJiByYW5rX2NudCA9PSAzJ2g0KQotICAgICAgCi0gICBlbmQgLy8gYWx3YXlzIEAgKHBvc2VkZ2UgY2xrKQotICAgCi0gICAvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KLSAgICAgIAotICAgYWx3YXlzIEAgKHBvc2VkZ2UgY2xrKQotICAgICAgaWYgKH5yZXNldF9uKSBiZWdpbgotCSByYW5rX2NudCA8PSAzJ2IwOwotCSByYW5rX2JhIDw9IDgnYjA7Ci0JIHJhbmtfYmFfbGFzdCA8PSA0J2IwOwotCi0gICAgICBlbmQgLy8gaWYgKH5yZXNldF9uKQotICAgICAgZWxzZSBiZWdpbgotCi0JIHJhbmtfY250IDw9IChyYW5rX2ZpZm9fd3IgJiB+cmFua19maWZvX3JkKSA/IHJhbmtfY250ICsgMydiMSA6Ci0JCSAgICAgKH5yYW5rX2ZpZm9fd3IgJiByYW5rX2ZpZm9fcmQpID8gcmFua19jbnQgLSAzJ2IxIDoKLQkJICAgICByYW5rX2NudDsKLQotCSByYW5rX2JhWzE6MF0gPD0gKHJhbmtfd3Jfc2VsWzBdKSA/IHIyYl9iYSA6Ci0JCQkgKHJhbmtfZmlmb19yZCkgPyByYW5rX2JhWzM6Ml0gOiByYW5rX2JhWzE6MF07Ci0JIAotCSByYW5rX2JhWzM6Ml0gPD0gKHJhbmtfd3Jfc2VsWzFdKSA/IHIyYl9iYSA6Ci0JCQkgKHJhbmtfZmlmb19yZCkgPyByYW5rX2JhWzU6NF0gOiByYW5rX2JhWzM6Ml07Ci0JIAotCSByYW5rX2JhWzU6NF0gPD0gKHJhbmtfd3Jfc2VsWzJdKSA/IHIyYl9iYSA6Ci0JCQkgKHJhbmtfZmlmb19yZCkgPyByYW5rX2JhWzc6Nl0gOiByYW5rX2JhWzU6NF07Ci0JIAotCSByYW5rX2JhWzc6Nl0gPD0gKHJhbmtfd3Jfc2VsWzNdKSA/IHIyYl9iYSA6Ci0JCQkgKHJhbmtfZmlmb19yZCkgPyAyJ2IwMCA6IHJhbmtfYmFbNzo2XTsKLQotCSBpZihgVEFSR0VUX0RFU0lHTiA9PSBgQVNJQykgYmVnaW4gLy8gVGhpcyBMb2dpYyBpcyBpbXBsZW1lbnRlZCBmb3IgQVNJQyBPbmx5Ci0JICAgIC8vIE5vdGU6IEN1cnJlbmx5IHRvcC1sZXZlbCBkb2VzIG5vdCBnZW5lcmF0ZSB0aGUKLQkgICAgLy8gc2RyX3JlcV9ub3JtX2RtYV9sYXN0IHNpZ25hbCBhbmQgY2FuIGJlIHRpZWQgemVybyBhdCB0b3AtbGV2ZWwKLSAgICAgICAgICAgIHJhbmtfYmFfbGFzdFswXSA8PSAocmFua193cl9zZWxbMF0pID8gc2RyX3JlcV9ub3JtX2RtYV9sYXN0IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmFua19maWZvX3JkKSA/ICByYW5rX2JhX2xhc3RbMV0gOiByYW5rX2JhX2xhc3RbMF07Ci0KLSAgICAgICAgICAgIHJhbmtfYmFfbGFzdFsxXSA8PSAocmFua193cl9zZWxbMV0pID8gc2RyX3JlcV9ub3JtX2RtYV9sYXN0IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmFua19maWZvX3JkKSA/ICByYW5rX2JhX2xhc3RbMl0gOiByYW5rX2JhX2xhc3RbMV07Ci0KLSAgICAgICAgICAgIHJhbmtfYmFfbGFzdFsyXSA8PSAocmFua193cl9zZWxbMl0pID8gc2RyX3JlcV9ub3JtX2RtYV9sYXN0IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmFua19maWZvX3JkKSA/ICByYW5rX2JhX2xhc3RbM10gOiByYW5rX2JhX2xhc3RbMl07Ci0KLSAgICAgICAgICAgIHJhbmtfYmFfbGFzdFszXSA8PSAocmFua193cl9zZWxbM10pID8gc2RyX3JlcV9ub3JtX2RtYV9sYXN0IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmFua19maWZvX3JkKSA/ICAxJ2IwIDogcmFua19iYV9sYXN0WzNdOwotICAgICAgICAgZW5kCi0KLSAgICAgIGVuZCAvLyBlbHNlOiAhaWYofnJlc2V0X24pCi0gICAKLSAgIGFzc2lnbiB4ZnJfb2tbMF0gPSAoeGZyX2JhID09IDInYjAwKSA/IDEnYjEgOiAxJ2IwOwotICAgYXNzaWduIHhmcl9va1sxXSA9ICh4ZnJfYmEgPT0gMidiMDEpID8gMSdiMSA6IDEnYjA7Ci0gICBhc3NpZ24geGZyX29rWzJdID0gKHhmcl9iYSA9PSAyJ2IxMCkgPyAxJ2IxIDogMSdiMDsKLSAgIGFzc2lnbiB4ZnJfb2tbM10gPSAoeGZyX2JhID09IDInYjExKSA/IDEnYjEgOiAxJ2IwOwotICAgCi0gICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgIC8vIEluc3RhbnRpYXRlIEJhbmsgQ3RsIEZTTSAwCi0KLSAgIHNkcmNfYmFua19mc20gYmFuazBfZnNtICguY2xrIChjbGspLAotCQkJICAgLnJlc2V0X24gKHJlc2V0X24pLAotCi0JCQkgICAvKiBSZXEgZnJvbSByZXFfZ2VuICovCi0JCQkgICAucjJiX3JlcSAocjJpX3JlcVswXSksCi0JCQkgICAucjJiX3JlcV9pZCAocjJiX3JlcV9pZCksCi0JCQkgICAucjJiX3N0YXJ0IChyMmJfc3RhcnQpLAotCQkJICAgLnIyYl9sYXN0IChyMmJfbGFzdCksCi0JCQkgICAucjJiX3dyYXAgKHIyYl93cmFwKSwKLQkJCSAgIC5yMmJfcmFkZHIgKHIyYl9yYWRkciksCi0JCQkgICAucjJiX2NhZGRyIChyMmJfY2FkZHIpLAotCQkJICAgLnIyYl9sZW4gKHIyYl9sZW4pLAotCQkJICAgLnIyYl93cml0ZSAocjJiX3dyaXRlKSwKLQkJCSAgIC5iMnJfYWNrIChpMnJfYWNrWzBdKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZHJfZG1hX2xhc3QocmFua19iYV9sYXN0WzBdKSwKLQotCQkJICAgLyogVHJhbnNmZXIgcmVxdWVzdCB0byB4ZnJfY3RsICovCi0JCQkgICAuYjJ4X3JlcSAoaTJ4X3JlcVswXSksCi0JCQkgICAuYjJ4X3N0YXJ0IChpMnhfc3RhcnRbMF0pLAotCQkJICAgLmIyeF9sYXN0IChpMnhfbGFzdFswXSksCi0JCQkgICAuYjJ4X3dyYXAgKGkyeF93cmFwWzBdKSwKLQkJCSAgIC5iMnhfaWQgKGkyeF9pZDApLAotCQkJICAgLmIyeF9hZGRyIChpMnhfYWRkcjApLAotCQkJICAgLmIyeF9sZW4gKGkyeF9sZW4wKSwKLQkJCSAgIC5iMnhfY21kIChpMnhfY21kMCksCi0JCQkgICAueDJiX2FjayAoeDJpX2Fja1swXSksCi0JCSAgICAgCi0JCQkgICAvKiBTdGF0dXMgdG8vZnJvbSB4ZnJfY3RsICovCi0JCQkgICAudHJhc19vayAodHJhc19va1swXSksCi0JCQkgICAueGZyX29rICh4ZnJfb2tbMF0pLAotCQkJICAgLngyYl9yZWZyZXNoICh4MmJfcmVmcmVzaCksCi0JCQkgICAueDJiX3ByZV9vayAoeDJiX3ByZV9va1swXSksCi0JCQkgICAueDJiX2FjdF9vayAoeDJiX2FjdF9vayksCi0JCQkgICAueDJiX3Jkb2sgKHgyYl9yZG9rKSwKLQkJCSAgIC54MmJfd3JvayAoeDJiX3dyb2spLAotCi0JCQkgICAuYmFua19yb3coYmFuazBfcm93KSwKLQotCQkJICAgLyogU0RSQU0gVGltaW5nICovCi0JCQkgICAudHJhc19kZWxheSAodHJhc19kZWxheSksCi0JCQkgICAudHJwX2RlbGF5ICh0cnBfZGVsYXkpLAotCQkJICAgLnRyY2RfZGVsYXkgKHRyY2RfZGVsYXkpKTsKLSAgIAotICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAvLyBJbnN0YW50aWF0ZSBCYW5rIEN0bCBGU00gMQotCi0gICBzZHJjX2JhbmtfZnNtIGJhbmsxX2ZzbSAoLmNsayAoY2xrKSwKLQkJCSAgIC5yZXNldF9uIChyZXNldF9uKSwKLQotCQkJICAgLyogUmVxIGZyb20gcmVxX2dlbiAqLwotCQkJICAgLnIyYl9yZXEgKHIyaV9yZXFbMV0pLAotCQkJICAgLnIyYl9yZXFfaWQgKHIyYl9yZXFfaWQpLAotCQkJICAgLnIyYl9zdGFydCAocjJiX3N0YXJ0KSwKLQkJCSAgIC5yMmJfbGFzdCAocjJiX2xhc3QpLAotCQkJICAgLnIyYl93cmFwIChyMmJfd3JhcCksCi0JCQkgICAucjJiX3JhZGRyIChyMmJfcmFkZHIpLAotCQkJICAgLnIyYl9jYWRkciAocjJiX2NhZGRyKSwKLQkJCSAgIC5yMmJfbGVuIChyMmJfbGVuKSwKLQkJCSAgIC5yMmJfd3JpdGUgKHIyYl93cml0ZSksCi0JCQkgICAuYjJyX2FjayAoaTJyX2Fja1sxXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAuc2RyX2RtYV9sYXN0KHJhbmtfYmFfbGFzdFsxXSksCi0KLQkJCSAgIC8qIFRyYW5zZmVyIHJlcXVlc3QgdG8geGZyX2N0bCAqLwotCQkJICAgLmIyeF9yZXEgKGkyeF9yZXFbMV0pLAotCQkJICAgLmIyeF9zdGFydCAoaTJ4X3N0YXJ0WzFdKSwKLQkJCSAgIC5iMnhfbGFzdCAoaTJ4X2xhc3RbMV0pLAotCQkJICAgLmIyeF93cmFwIChpMnhfd3JhcFsxXSksCi0JCQkgICAuYjJ4X2lkIChpMnhfaWQxKSwKLQkJCSAgIC5iMnhfYWRkciAoaTJ4X2FkZHIxKSwKLQkJCSAgIC5iMnhfbGVuIChpMnhfbGVuMSksCi0JCQkgICAuYjJ4X2NtZCAoaTJ4X2NtZDEpLAotCQkJICAgLngyYl9hY2sgKHgyaV9hY2tbMV0pLAotCQkgICAgIAotCQkJICAgLyogU3RhdHVzIHRvL2Zyb20geGZyX2N0bCAqLwotCQkJICAgLnRyYXNfb2sgKHRyYXNfb2tbMV0pLCAgICAgICAgICAgCi0JCQkgICAueGZyX29rICh4ZnJfb2tbMV0pLAotCQkJICAgLngyYl9yZWZyZXNoICh4MmJfcmVmcmVzaCksCi0JCQkgICAueDJiX3ByZV9vayAoeDJiX3ByZV9va1sxXSksCi0JCQkgICAueDJiX2FjdF9vayAoeDJiX2FjdF9vayksCi0JCQkgICAueDJiX3Jkb2sgKHgyYl9yZG9rKSwKLQkJCSAgIC54MmJfd3JvayAoeDJiX3dyb2spLAotCi0JCQkgICAuYmFua19yb3coYmFuazFfcm93KSwKLQotCQkJICAgLyogU0RSQU0gVGltaW5nICovCi0JCQkgICAudHJhc19kZWxheSAodHJhc19kZWxheSksCi0JCQkgICAudHJwX2RlbGF5ICh0cnBfZGVsYXkpLAotCQkJICAgLnRyY2RfZGVsYXkgKHRyY2RfZGVsYXkpKTsKLSAgIAotICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAvLyBJbnN0YW50aWF0ZSBCYW5rIEN0bCBGU00gMgotCi0gICBzZHJjX2JhbmtfZnNtIGJhbmsyX2ZzbSAoLmNsayAoY2xrKSwKLQkJCSAgIC5yZXNldF9uIChyZXNldF9uKSwKLQotCQkJICAgLyogUmVxIGZyb20gcmVxX2dlbiAqLwotCQkJICAgLnIyYl9yZXEgKHIyaV9yZXFbMl0pLAotCQkJICAgLnIyYl9yZXFfaWQgKHIyYl9yZXFfaWQpLAotCQkJICAgLnIyYl9zdGFydCAocjJiX3N0YXJ0KSwKLQkJCSAgIC5yMmJfbGFzdCAocjJiX2xhc3QpLAotCQkJICAgLnIyYl93cmFwIChyMmJfd3JhcCksCi0JCQkgICAucjJiX3JhZGRyIChyMmJfcmFkZHIpLAotCQkJICAgLnIyYl9jYWRkciAocjJiX2NhZGRyKSwKLQkJCSAgIC5yMmJfbGVuIChyMmJfbGVuKSwKLQkJCSAgIC5yMmJfd3JpdGUgKHIyYl93cml0ZSksCi0JCQkgICAuYjJyX2FjayAoaTJyX2Fja1syXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAuc2RyX2RtYV9sYXN0KHJhbmtfYmFfbGFzdFsyXSksCi0KLQkJCSAgIC8qIFRyYW5zZmVyIHJlcXVlc3QgdG8geGZyX2N0bCAqLwotCQkJICAgLmIyeF9yZXEgKGkyeF9yZXFbMl0pLAotCQkJICAgLmIyeF9zdGFydCAoaTJ4X3N0YXJ0WzJdKSwKLQkJCSAgIC5iMnhfbGFzdCAoaTJ4X2xhc3RbMl0pLAotCQkJICAgLmIyeF93cmFwIChpMnhfd3JhcFsyXSksCi0JCQkgICAuYjJ4X2lkIChpMnhfaWQyKSwKLQkJCSAgIC5iMnhfYWRkciAoaTJ4X2FkZHIyKSwKLQkJCSAgIC5iMnhfbGVuIChpMnhfbGVuMiksCi0JCQkgICAuYjJ4X2NtZCAoaTJ4X2NtZDIpLAotCQkJICAgLngyYl9hY2sgKHgyaV9hY2tbMl0pLAotCQkgICAgIAotCQkJICAgLyogU3RhdHVzIHRvL2Zyb20geGZyX2N0bCAqLwotCQkJICAgLnRyYXNfb2sgKHRyYXNfb2tbMl0pLCAgICAgICAgICAgCi0JCQkgICAueGZyX29rICh4ZnJfb2tbMl0pLAotCQkJICAgLngyYl9yZWZyZXNoICh4MmJfcmVmcmVzaCksCi0JCQkgICAueDJiX3ByZV9vayAoeDJiX3ByZV9va1syXSksCi0JCQkgICAueDJiX2FjdF9vayAoeDJiX2FjdF9vayksCi0JCQkgICAueDJiX3Jkb2sgKHgyYl9yZG9rKSwKLQkJCSAgIC54MmJfd3JvayAoeDJiX3dyb2spLAotCi0JCQkgICAuYmFua19yb3coYmFuazJfcm93KSwKLQotCQkJICAgLyogU0RSQU0gVGltaW5nICovCi0JCQkgICAudHJhc19kZWxheSAodHJhc19kZWxheSksCi0JCQkgICAudHJwX2RlbGF5ICh0cnBfZGVsYXkpLAotCQkJICAgLnRyY2RfZGVsYXkgKHRyY2RfZGVsYXkpKTsKLSAgIAotICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAvLyBJbnN0YW50aWF0ZSBCYW5rIEN0bCBGU00gMwotCi0gICBzZHJjX2JhbmtfZnNtIGJhbmszX2ZzbSAoLmNsayAoY2xrKSwKLQkJCSAgIC5yZXNldF9uIChyZXNldF9uKSwKLQotCQkJICAgLyogUmVxIGZyb20gcmVxX2dlbiAqLwotCQkJICAgLnIyYl9yZXEgKHIyaV9yZXFbM10pLAotCQkJICAgLnIyYl9yZXFfaWQgKHIyYl9yZXFfaWQpLAotCQkJICAgLnIyYl9zdGFydCAocjJiX3N0YXJ0KSwKLQkJCSAgIC5yMmJfbGFzdCAocjJiX2xhc3QpLAotCQkJICAgLnIyYl93cmFwIChyMmJfd3JhcCksCi0JCQkgICAucjJiX3JhZGRyIChyMmJfcmFkZHIpLAotCQkJICAgLnIyYl9jYWRkciAocjJiX2NhZGRyKSwKLQkJCSAgIC5yMmJfbGVuIChyMmJfbGVuKSwKLQkJCSAgIC5yMmJfd3JpdGUgKHIyYl93cml0ZSksCi0JCQkgICAuYjJyX2FjayAoaTJyX2Fja1szXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAuc2RyX2RtYV9sYXN0KHJhbmtfYmFfbGFzdFszXSksCi0KLQkJCSAgIC8qIFRyYW5zZmVyIHJlcXVlc3QgdG8geGZyX2N0bCAqLwotCQkJICAgLmIyeF9yZXEgKGkyeF9yZXFbM10pLAotCQkJICAgLmIyeF9zdGFydCAoaTJ4X3N0YXJ0WzNdKSwKLQkJCSAgIC5iMnhfbGFzdCAoaTJ4X2xhc3RbM10pLAotCQkJICAgLmIyeF93cmFwIChpMnhfd3JhcFszXSksCi0JCQkgICAuYjJ4X2lkIChpMnhfaWQzKSwKLQkJCSAgIC5iMnhfYWRkciAoaTJ4X2FkZHIzKSwKLQkJCSAgIC5iMnhfbGVuIChpMnhfbGVuMyksCi0JCQkgICAuYjJ4X2NtZCAoaTJ4X2NtZDMpLAotCQkJICAgLngyYl9hY2sgKHgyaV9hY2tbM10pLAotCQkgICAgIAotCQkJICAgLyogU3RhdHVzIHRvL2Zyb20geGZyX2N0bCAqLwotCQkJICAgLnRyYXNfb2sgKHRyYXNfb2tbM10pLCAgICAgICAgICAgCi0JCQkgICAueGZyX29rICh4ZnJfb2tbM10pLAotCQkJICAgLngyYl9yZWZyZXNoICh4MmJfcmVmcmVzaCksCi0JCQkgICAueDJiX3ByZV9vayAoeDJiX3ByZV9va1szXSksCi0JCQkgICAueDJiX2FjdF9vayAoeDJiX2FjdF9vayksCi0JCQkgICAueDJiX3Jkb2sgKHgyYl9yZG9rKSwKLQkJCSAgIC54MmJfd3JvayAoeDJiX3dyb2spLAotCi0JCQkgICAuYmFua19yb3coYmFuazNfcm93KSwKLQotCQkJICAgLyogU0RSQU0gVGltaW5nICovCi0JCQkgICAudHJhc19kZWxheSAodHJhc19kZWxheSksCi0JCQkgICAudHJwX2RlbGF5ICh0cnBfZGVsYXkpLAotCQkJICAgLnRyY2RfZGVsYXkgKHRyY2RfZGVsYXkpKTsKLSAgIAotCi0vKiBhZGRyZXNzIGZvciBjdXJyZW50IHhmciwgZGVidWcgb25seSAqLwotd2lyZSBbMTI6MF0gY3VyX3JvdyA9ICh4ZnJfYmFua19zZWw9PTMpID8gYmFuazNfcm93OgotCQkJKHhmcl9iYW5rX3NlbD09MikgPyBiYW5rMl9yb3c6IAotCQkJKHhmcl9iYW5rX3NlbD09MSkgPyBiYW5rMV9yb3c6IGJhbmswX3JvdzsgCi0KLSAKLQotZW5kbW9kdWxlIC8vIHNkcl9iYW5rX2N0bApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvY29yZS9zZHJjX2JhbmtfZnNtLnYgYi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9jb3JlL3NkcmNfYmFua19mc20udgpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMmNlNjBkMy4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9jb3JlL3NkcmNfYmFua19mc20udgorKysgL2Rldi9udWxsCkBAIC0xLDM5NSArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgotLy8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIFNEUkFNIENvbnRyb2xsZXIgQmFuayBDb250cm9sbGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgc2RyYW0gY29udHJvbGxlciBwcm9qZWN0ICAgICAgICAgICAKLSAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdAotICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgCi0gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy9zZHJfY3RybC8gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgRGVzY3JpcHRpb246IAotICAgIFRoaXMgbW9kdWxlIHRha2VzIHJlcXVlc3RzIGZyb20gc2RyY19yZXFfZ2VuLCBjaGVja3MgZm9yIHBhZ2UgaGl0L21pc3MgYW5kCi0gICAgaXNzdWVzIHByZWNoYXJnZS9hY3RpdmF0ZSBjb21tYW5kcyBhbmQgdGhlbiBwYXNzZXMgdGhlIHJlcXVlc3QgdG8gc2RyY194ZnJfY3RsLiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAKLSAgVmVyc2lvbiAgOiAgMS4wICAtIDh0aCBKYW4gMjAxMgotICBWZXJzaW9uICA6ICAxLjEgIC0gMjd0aCBBdWcgMjAyMQotICAgICAgIERpc2FibGluZyB0aGUgYFRBUkdFVF9ERVNJR04gd2l0aCBGUEdBLCBCcmVha2luZyB0aW1pbmcgcGF0aCBjcmVhdGluZyBmdW5jdGlvbmFsIGlzc3VlCi0gICAgICAgUmVjb21tbmVuZGVkIHRvIHVzZSBvbmx0IGluIEFTSUMgTW9kZS4gSW4gRlBHQSBtb2RlLCB0UkFTIHZpb2xhdGlvbiBhcmUgbm90aWNlZCBhbmQgZGVzaWduCi0gICAgICAgaGFzIGNvcm5lciBjYXNlIGJldHdlZW4gQWN0aXZlIHRvIFByZS1jaGFyZ2UKLSAgICAgICBFUlJPUjogdFJBUyB2aW9sYXRpb24gZHVyaW5nIFByZWNoYXJnZSBhbGwgYmFuawotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAKLSByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgCi0gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIAotIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIAotIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAKLSBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgCi0gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIAotbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgCi0gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIAotIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAKLSBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgCi0gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgCi0gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIAotIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLWBpbmNsdWRlICJzZHJjX2RlZmluZS52IgotCi1tb2R1bGUgc2RyY19iYW5rX2ZzbSAoY2xrLAotCQkgICAgIHJlc2V0X24sCi0KLQkJICAgICAvKiBSZXEgZnJvbSByZXFfZ2VuICovCi0JCSAgICAgcjJiX3JlcSwJICAgLy8gcmVxdWVzdAotCQkgICAgIHIyYl9yZXFfaWQsICAgLy8gSUQKLQkJICAgICByMmJfc3RhcnQsCSAgIC8vIEZpcnN0IGNodW5rIG9mIGJ1cnN0Ci0JCSAgICAgcjJiX2xhc3QsCSAgIC8vIExhc3QgY2h1bmsgb2YgYnVyc3QKLQkJICAgICByMmJfd3JhcCwKLQkJICAgICByMmJfcmFkZHIsCSAgIC8vIHJvdyBhZGRyZXNzCi0JCSAgICAgcjJiX2NhZGRyLAkgICAvLyBjb2wgYWRkcmVzcwotCQkgICAgIHIyYl9sZW4sCSAgIC8vIGxlbmd0aAotCQkgICAgIHIyYl93cml0ZSwJICAgLy8gd3JpdGUgcmVxdWVzdAotCQkgICAgIGIycl9hY2ssCi0gICAgICAgICAgICAgICAgICAgICBzZHJfZG1hX2xhc3QsCi0KLQkJICAgICAvKiBUcmFuc2ZlciByZXF1ZXN0IHRvIHhmcl9jdGwgKi8KLQkJICAgICBiMnhfcmVxLAkgICAvLyBSZXF1ZXN0IHRvIHhmcl9jdGwKLQkJICAgICBiMnhfc3RhcnQsCSAgIC8vIGZpcnN0IGNodW5rIG9mIHRyYW5zZmVyCi0JCSAgICAgYjJ4X2xhc3QsCSAgIC8vIGxhc3QgY2h1bmsgb2YgdHJhbnNmZXIKLQkJICAgICBiMnhfd3JhcCwKLQkJICAgICBiMnhfaWQsCSAgIC8vIFRyYW5zZmVyIElECi0JCSAgICAgYjJ4X2FkZHIsCSAgIC8vIHJvdy9jb2wgYWRkcmVzcwotCQkgICAgIGIyeF9sZW4sCSAgIC8vIHRyYW5zZmVyIGxlbmd0aAotCQkgICAgIGIyeF9jbWQsCSAgIC8vIHRyYW5zZmVyIGNvbW1hbmQKLQkJICAgICB4MmJfYWNrLAkgICAvLyBjb21tYW5kIGFjY2VwdGVkCi0JCSAgICAgCi0JCSAgICAgLyogU3RhdHVzIHRvL2Zyb20geGZyX2N0bCAqLwotCQkgICAgIHRyYXNfb2ssICAgICAgLy8gVFJBUyBPSyBmb3IgdGhpcyBiYW5rCi0JCSAgICAgeGZyX29rLAotCQkgICAgIHgyYl9yZWZyZXNoLCAgLy8gV2UgZGlkIGEgcmVmcmVzaAotCQkgICAgIHgyYl9wcmVfb2ssICAgLy8gT0sgdG8gZG8gYSBwcmVjaGFyZ2UgKHBlciBiYW5rKQotCQkgICAgIHgyYl9hY3Rfb2ssICAgLy8gT0sgdG8gZG8gYW4gYWN0aXZhdGUKLQkJICAgICB4MmJfcmRvaywJICAgLy8gT0sgdG8gZG8gYSByZWFkCi0JCSAgICAgeDJiX3dyb2ssCSAgIC8vIE9LIHRvIGRvIGEgd3JpdGUKLQotCQkgICAgIC8qIGN1cnJlbnQgeGZyIHJvdyBhZGRyZXNzIG9mIHRoZSBiYW5rICovCi0JCSAgICAgYmFua19yb3csCi0KLQkJICAgICAvKiBTRFJBTSBUaW1pbmcgKi8KLQkJICAgICB0cmFzX2RlbGF5LCAgIC8vIEFjdGl2ZSB0byBwcmVjaGFyZ2UgZGVsYXkKLQkJICAgICB0cnBfZGVsYXksCSAgIC8vIFByZWNoYXJnZSB0byBhY3RpdmUgZGVsYXkKLQkJICAgICB0cmNkX2RlbGF5KTsgIC8vIEFjdGl2ZSB0byBSL1cgZGVsYXkKLSAgIAotCi1wYXJhbWV0ZXIgIFNEUl9EVyAgID0gMTY7ICAvLyBTRFIgRGF0YSBXaWR0aCAKLXBhcmFtZXRlciAgU0RSX0JXICAgPSAyOyAgIC8vIFNEUiBCeXRlIFdpZHRoCi0KLSAgIGlucHV0ICAgICAgICAgICAgICAgICAgICAgICAgY2xrLCByZXNldF9uOwotCi0gICAvKiBSZXEgZnJvbSBiYW5rX2N0bCAqLwotICAgaW5wdXQgCQkJcjJiX3JlcSwgcjJiX3N0YXJ0LCByMmJfbGFzdCwKLQkJCQlyMmJfd3JpdGUsIHIyYl93cmFwOwotICAgaW5wdXQgW2BTRFJfUkVRX0lEX1ctMTowXSAJcjJiX3JlcV9pZDsKLSAgIGlucHV0IFsxMjowXSAJCXIyYl9yYWRkcjsKLSAgIGlucHV0IFsxMjowXSAJCXIyYl9jYWRkcjsKLSAgIGlucHV0IFtgUkVRX0JXLTE6MF0gCXIyYl9sZW47Ci0gICBvdXRwdXQgCQkJYjJyX2FjazsKLSAgIGlucHV0ICAgICAgICAgICAgICAgICAgICAgICAgc2RyX2RtYV9sYXN0OwotCi0gICAvKiBSZXEgdG8geGZyX2N0bCAqLwotICAgb3V0cHV0IAkJCWIyeF9yZXEsIGIyeF9zdGFydCwgYjJ4X2xhc3QsCi0JCQkJdHJhc19vaywgYjJ4X3dyYXA7Ci0gICBvdXRwdXQgW2BTRFJfUkVRX0lEX1ctMTowXSAJYjJ4X2lkOwotICAgb3V0cHV0IFsxMjowXSAJCWIyeF9hZGRyOwotICAgb3V0cHV0IFtgUkVRX0JXLTE6MF0gCWIyeF9sZW47Ci0gICBvdXRwdXQgWzE6MF0gCQliMnhfY21kOwotICAgaW5wdXQgCQkJeDJiX2FjazsKLQotICAgLyogU3RhdHVzIGZyb20geGZyX2N0bCAqLwotICAgaW5wdXQgCQkJeDJiX3JlZnJlc2gsIHgyYl9hY3Rfb2ssIHgyYl9yZG9rLAotCQkJCXgyYl93cm9rLCB4MmJfcHJlX29rLCB4ZnJfb2s7Ci0gICAKLSAgIGlucHV0IFszOjBdIAkJCXRyYXNfZGVsYXksIHRycF9kZWxheSwgdHJjZF9kZWxheTsKLQotICAgb3V0cHV0IFsxMjowXSAJCQliYW5rX3JvdzsKLQotICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAvLyBJbnRlcm5hbCBOZXRzCi0KLSAgIGBkZWZpbmUgQkFOS19JRExFICAgICAgICAgMydiMDAwCi0gICBgZGVmaW5lIEJBTktfUFJFICAgICAgICAgIDMnYjAwMQotICAgYGRlZmluZSBCQU5LX0FDVCAgICAgICAgICAzJ2IwMTAKLSAgIGBkZWZpbmUgQkFOS19YRlIgICAgICAgICAgMydiMDExCi0gICBgZGVmaW5lIEJBTktfRE1BX0xBU1RfUFJFIDMnYjEwMAotCi0gICByZWcgWzI6MF0gCQkJYmFua19zdCwgbmV4dF9iYW5rX3N0OwotICAgd2lyZSAJCQliMnhfc3RhcnQsIGIyeF9sYXN0OwotICAgcmVnIAkJCQlsX3N0YXJ0LCBsX2xhc3Q7Ci0gICByZWcgCQkJCWIyeF9yZXEsIGIycl9hY2s7Ci0gICB3aXJlIFtgU0RSX1JFUV9JRF9XLTE6MF0gCWIyeF9pZDsKLSAgIHJlZyBbYFNEUl9SRVFfSURfVy0xOjBdIAlsX2lkOwotICAgcmVnIFsxMjowXSAJCQliMnhfYWRkcjsKLSAgIHJlZyBbYFJFUV9CVy0xOjBdIAlsX2xlbjsKLSAgIHdpcmUgW2BSRVFfQlctMTowXSAJYjJ4X2xlbjsKLSAgIHJlZyBbMTowXSAJCQliMnhfY21kX3Q7Ci0gICByZWcgIAkJCWJhbmtfdmFsaWQ7Ci0gICByZWcgWzEyOjBdIAkJCWJhbmtfcm93OwotICAgcmVnIFszOjBdIAkJCXRyYXNfY250ciwgdGltZXIwOwotICAgcmVnIAkJCQlsX3dyYXAsIGxfd3JpdGU7Ci0gICB3aXJlIAkJCWIyeF93cmFwOwotICAgcmVnIFsxMjowXSAJCQlsX3JhZGRyOwotICAgcmVnIFsxMjowXSAJCQlsX2NhZGRyOwotICAgcmVnICAgICAgICAgICAgICAgICAgICAgICAgICBsX3Nkcl9kbWFfbGFzdDsKLSAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgYmFua19wcmVjaF9wYWdlX2Nsb3NlZDsKLSAgIAotICAgd2lyZSAgCQkJdHJhc19va19pbnRlcm5hbCwgdHJhc19vaywgYWN0aXZhdGVfYmFuazsKLSAgIAotICAgd2lyZSAJCQlwYWdlX2hpdCwgdGltZXIwX3RjX3QsIGxkX3RycCwgbGRfdHJjZDsKLQotICAgLyoqKiBUaW1pbmcgQnJlYWsgTG9naWMgQWRkZWQgZm9yIEZQR0EgLSBTdGFydCAqKioqLwotICAgcmVnCXgyYl93cm9rX3IsIHhmcl9va19yICwgeDJiX3Jkb2tfcjsKLSAgIHJlZyBbMTowXSBiMnhfY21kX3IsdGltZXIwX3RjX3IsdHJhc19va19yLHgyYl9wcmVfb2tfcix4MmJfYWN0X29rX3I7Ci0gICBhbHdheXMgQCAocG9zZWRnZSBjbGspCi0gICAgICBpZiAofnJlc2V0X24pIGJlZ2luCi0JIHgyYl93cm9rX3IgPD0gMSdiMDsKLQkgeGZyX29rX3IgICA8PSAxJ2IwOwotCSB4MmJfcmRva19yIDw9IDEnYjA7Ci0JIGIyeF9jbWRfciAgPD0gMidiMDsKLQkgdGltZXIwX3RjX3IgIDw9IDEnYjA7Ci0JIHRyYXNfb2tfciAgICA8PSAxJ2IwOwotCSB4MmJfcHJlX29rX3IgPD0gMSdiMDsKLQkgeDJiX2FjdF9va19yIDw9IDEnYjA7Ci0gICAgICBlbmQKLSAgICAgIGVsc2UgYmVnaW4KLQkgeDJiX3dyb2tfciA8PSB4MmJfd3JvazsKLQkgeGZyX29rX3IgICA8PSB4ZnJfb2s7Ci0JIHgyYl9yZG9rX3IgPD0geDJiX3Jkb2s7Ci0JIGIyeF9jbWRfciAgPD0gYjJ4X2NtZF90OwotCSB0aW1lcjBfdGNfciA8PSAobGRfdHJwIHwgbGRfdHJjZCkgPyAxJ2IwIDogdGltZXIwX3RjX3Q7Ci0JIHRyYXNfb2tfciAgIDw9IHRyYXNfb2tfaW50ZXJuYWw7Ci0JIHgyYl9wcmVfb2tfciAgPD0geDJiX3ByZV9vazsKLQkgeDJiX2FjdF9va19yICA8PSB4MmJfYWN0X29rOwotICAgICAgZW5kCi0KLSB3aXJlICB4MmJfd3Jva190ICAgICA9IChgVEFSR0VUX0RFU0lHTiA9PSBgRlBHQSkgPyB4MmJfd3Jva19yIDogeDJiX3dyb2s7Ci0gd2lyZSAgeGZyX29rX3QgICAgICAgPSAoYFRBUkdFVF9ERVNJR04gPT0gYEZQR0EpID8geGZyX29rX3IgOiB4ZnJfb2s7Ci0gd2lyZSAgeDJiX3Jkb2tfdCAgICAgPSAoYFRBUkdFVF9ERVNJR04gPT0gYEZQR0EpID8geDJiX3Jkb2tfciA6IHgyYl9yZG9rOwotIHdpcmUgWzE6MF0gYjJ4X2NtZCAgID0gKGBUQVJHRVRfREVTSUdOID09IGBGUEdBKSA/IGIyeF9jbWRfciA6IGIyeF9jbWRfdDsKLSB3aXJlICB0aW1lcjBfdGMgICAgICA9IChgVEFSR0VUX0RFU0lHTiA9PSBgRlBHQSkgPyB0aW1lcjBfdGNfciA6IHRpbWVyMF90Y190OwotIGFzc2lnbiAgdHJhc19vayAgICAgID0gKGBUQVJHRVRfREVTSUdOID09IGBGUEdBKSA/IHRyYXNfb2tfciA6IHRyYXNfb2tfaW50ZXJuYWw7Ci0gd2lyZSAgeDJiX3ByZV9va190ICAgPSAoYFRBUkdFVF9ERVNJR04gPT0gYEZQR0EpID8geDJiX3ByZV9va19yIDogeDJiX3ByZV9vazsKLSB3aXJlICB4MmJfYWN0X29rX3QgICA9IChgVEFSR0VUX0RFU0lHTiA9PSBgRlBHQSkgPyB4MmJfYWN0X29rX3IgOiB4MmJfYWN0X29rOwotCi0gICAvKioqIFRpbWluZyBCcmVhayBMb2dpYyBBZGRlZCBmb3IgRlBHQSAtIEVuZCoqKiovCi0KLQotICAgYWx3YXlzIEAgKHBvc2VkZ2UgY2xrKQotICAgICAgaWYgKH5yZXNldF9uKSBiZWdpbgotCSBiYW5rX3ZhbGlkIDw9IDEnYjA7Ci0JIHRyYXNfY250ciA8PSA0J2IwOwotCSB0aW1lcjAgPD0gNCdiMDsKLQkgYmFua19zdCA8PSBgQkFOS19JRExFOwotICAgICAgZW5kIC8vIGlmICh+cmVzZXRfbikKLQotICAgICAgZWxzZSBiZWdpbgotCi0JIGJhbmtfdmFsaWQgPD0gKHgyYl9yZWZyZXNoIHx8IGJhbmtfcHJlY2hfcGFnZV9jbG9zZWQpID8gMSdiMCA6ICAvLyBmb3JjZSB0aGUgYmFuayBzdGF0dXMgdG8gYmUgaW52YWxpZAotCQkgICAgICAgKGFjdGl2YXRlX2JhbmspID8gMSdiMSA6IGJhbmtfdmFsaWQ7Ci0KLQkgdHJhc19jbnRyIDw9IChhY3RpdmF0ZV9iYW5rKSA/IHRyYXNfZGVsYXkgOgotCQkgICAgICAofnRyYXNfb2tfaW50ZXJuYWwpID8gdHJhc19jbnRyIC0gNCdiMSA6IDQnYjA7Ci0JIAotCSB0aW1lcjAgPD0gKGxkX3RycCkgPyB0cnBfZGVsYXkgOgotCQkgICAobGRfdHJjZCkgPyB0cmNkX2RlbGF5IDoKLQkJICAgKHRpbWVyMCAhPSAnaDApID8gdGltZXIwIC0gNCdiMSA6IHRpbWVyMDsKLQkgCi0JIGJhbmtfc3QgPD0gbmV4dF9iYW5rX3N0OwotCi0gICAgICBlbmQgLy8gZWxzZTogIWlmKH5yZXNldF9uKQotCi0gICBhbHdheXMgQCAocG9zZWRnZSBjbGspIGJlZ2luIAotCi0gICAgICBiYW5rX3JvdyA8PSAoYmFua19zdCA9PSBgQkFOS19BQ1QpID8gYjJ4X2FkZHIgOiBiYW5rX3JvdzsKLQotICAgICAgaWYgKH5yZXNldF9uKSBiZWdpbgotCSBsX3N0YXJ0IDw9IDEnYjA7Ci0JIGxfbGFzdCA8PSAxJ2IwOwotCSBsX2lkIDw9IDEnYjA7Ci0JIGxfbGVuIDw9IDEnYjA7Ci0JIGxfd3JhcCA8PSAxJ2IwOwotCSBsX3dyaXRlIDw9IDEnYjA7Ci0JIGxfcmFkZHIgPD0gMSdiMDsKLQkgbF9jYWRkciA8PSAxJ2IwOwotICAgICAgICAgbF9zZHJfZG1hX2xhc3QgPD0gMSdiMDsKLSAgICAgIGVuZAotICAgICAgZWxzZSBiZWdpbgotICAgICAgICBpZiAoYjJyX2FjaykgYmVnaW4KLSAgCSAgIGxfc3RhcnQgPD0gcjJiX3N0YXJ0OwotICAJICAgbF9sYXN0IDw9IHIyYl9sYXN0OwotICAJICAgbF9pZCA8PSByMmJfcmVxX2lkOwotICAJICAgbF9sZW4gPD0gcjJiX2xlbjsKLSAgCSAgIGxfd3JhcCA8PSByMmJfd3JhcDsKLSAgCSAgIGxfd3JpdGUgPD0gcjJiX3dyaXRlOwotICAJICAgbF9yYWRkciA8PSByMmJfcmFkZHI7Ci0gIAkgICBsX2NhZGRyIDw9IHIyYl9jYWRkcjsKLSAgICAgICAgICAgbF9zZHJfZG1hX2xhc3QgPD0gc2RyX2RtYV9sYXN0OwotICAgICAgICBlbmQgLy8gaWYgKGIycl9hY2spCi0gICAgICBlbmQKLQotICAgZW5kIC8vIGFsd2F5cyBAIChwb3NlZGdlIGNsaykKLSAgIAotICAgYXNzaWduIHRyYXNfb2tfaW50ZXJuYWwgPSB+fHRyYXNfY250cjsKLQotICAgYXNzaWduIGFjdGl2YXRlX2JhbmsgPSAoYjJ4X2NtZCA9PSBgT1BfQUNUKSAmIHgyYl9hY2s7Ci0KLSAgIGFzc2lnbiBwYWdlX2hpdCA9IChyMmJfcmFkZHIgPT0gYmFua19yb3cpID8gYmFua192YWxpZCA6IDEnYjA7ICAgIC8vIGl0cyBhIGhpdCBvbmx5IGlmIGJhbmsgaXMgdmFsaWQKLQotICAgYXNzaWduIHRpbWVyMF90Y190ID0gfnx0aW1lcjA7Ci0KLSAgIGFzc2lnbiBsZF90cnAgPSAoYjJ4X2NtZCA9PSBgT1BfUFJFKSA/IHgyYl9hY2sgOiAxJ2IwOwotCi0gICBhc3NpZ24gbGRfdHJjZCA9IChiMnhfY21kID09IGBPUF9BQ1QpID8geDJiX2FjayA6IDEnYjA7Ci0gICAKLQotCi0gICBhbHdheXMgQCAoKikgYmVnaW4KLQotICAgICAgIGJhbmtfcHJlY2hfcGFnZV9jbG9zZWQgPSAxJ2IwOwotICAgICAgIGIyeF9yZXEgPSAxJ2IwOwotICAgICAgIGIyeF9jbWRfdCA9IDInYng7Ci0gICAgICAgYjJyX2FjayA9IDEnYjA7Ci0gICAgICAgYjJ4X2FkZHIgPSAxMydieDsKLSAgICAgICBuZXh0X2Jhbmtfc3QgPSBiYW5rX3N0OwotCi0gICAgICBjYXNlIChiYW5rX3N0KQotCi0JYEJBTktfSURMRSA6IGJlZ2luCi0JCWlmKGBUQVJHRVRfREVTSUdOID09IGBGUEdBKSBiZWdpbiAvLyBUbyBicmVhayB0aGUgdGltaW5nLCBiMnggcmVxdWVzdCBhcmUgZ2VuZXJhdGVkIGRlbGF5ZWQKLQkgICAgICAgICAgICAgaWYgKH5yMmJfcmVxKSBiZWdpbgotCSAgICAgICAgICAgICAgICBuZXh0X2Jhbmtfc3QgPSBgQkFOS19JRExFOwotCSAgICAgICAgICAgICBlbmQgLy8gaWYgKH5yMmJfcmVxKQotCSAgICAgICAgICAgICBlbHNlIGlmIChwYWdlX2hpdCkgYmVnaW4gCi0JICAgICAgICAgICAgICAgIGIycl9hY2sgPSAxJ2IxOwotCSAgICAgICAgICAgICAgICBiMnhfY21kX3QgPSAocjJiX3dyaXRlKSA/IGBPUF9XUiA6IGBPUF9SRDsKLQkgICAgICAgICAgICAgICAgbmV4dF9iYW5rX3N0ID0gYEJBTktfWEZSOyAgCi0JICAgICAgICAgICAgIGVuZCAvLyBpZiAocGFnZV9oaXQpCi0JICAgICAgICAgICAgIGVsc2UgYmVnaW4gIC8vIHBhZ2VfbWlzcwotCSAgICAgICAgICAgICAgICBiMnJfYWNrID0gMSdiMTsKLQkgICAgICAgICAgICAgICAgYjJ4X2NtZF90ID0gYE9QX1BSRTsKLQkgICAgICAgICAgICAgICAgbmV4dF9iYW5rX3N0ID0gYEJBTktfUFJFOyAgLy8gYmFuayB3YXMgcHJlY2hhcmdlZCBvbiBsX3Nkcl9kbWFfbGFzdAotCSAgICAgICAgICAgICBlbmQgLy8gZWxzZTogIWlmKHBhZ2VfaGl0KQotCQllbmQgZWxzZSBiZWdpbiAvLyBBU0lDCi0JICAgICAgICAgICAgIGlmICh+cjJiX3JlcSkgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGJhbmtfcHJlY2hfcGFnZV9jbG9zZWQgPSAxJ2IwOwotCSAgICAgICAgICAgICAgICBiMnhfcmVxID0gMSdiMDsKLQkgICAgICAgICAgICAgICAgYjJ4X2NtZF90ID0gMidieDsKLQkgICAgICAgICAgICAgICAgYjJyX2FjayA9IDEnYjA7Ci0JICAgICAgICAgICAgICAgIGIyeF9hZGRyID0gMTMnYng7Ci0JICAgICAgICAgICAgICAgIG5leHRfYmFua19zdCA9IGBCQU5LX0lETEU7Ci0JICAgICAgICAgICAgIGVuZCAvLyBpZiAofnIyYl9yZXEpCi0JICAgICAgICAgICAgIGVsc2UgaWYgKHBhZ2VfaGl0KSBiZWdpbiAKLQkgICAgICAgICAgICAgICAgYjJ4X3JlcSA9IChyMmJfd3JpdGUpID8geDJiX3dyb2tfdCAmIHhmcl9va190IDogCi0JCQkgICAgICAgICAgICAgICAgICAgICAgIHgyYl9yZG9rX3QgJiB4ZnJfb2tfdDsKLQkgICAgICAgICAgICAgICAgYjJ4X2NtZF90ID0gKHIyYl93cml0ZSkgPyBgT1BfV1IgOiBgT1BfUkQ7Ci0JICAgICAgICAgICAgICAgIGIycl9hY2sgPSAxJ2IxOwotCSAgICAgICAgICAgICAgICBiMnhfYWRkciA9IHIyYl9jYWRkcjsKLQkgICAgICAgICAgICAgICAgbmV4dF9iYW5rX3N0ID0gKHgyYl9hY2spID8gYEJBTktfSURMRSA6IGBCQU5LX1hGUjsgIC8vIGluIGNhc2Ugb2YgaGl0LCBzdGF5IGhlcmUgdGlsbCB4ZnIgc20gYWNrcwotCSAgICAgICAgICAgICBlbmQgLy8gaWYgKHBhZ2VfaGl0KQotCSAgICAgICAgICAgICBlbHNlIGJlZ2luICAvLyBwYWdlX21pc3MKLQkgICAgICAgICAgICAgICAgYjJ4X3JlcSA9IHRyYXNfb2sgJiB4MmJfcHJlX29rX3Q7Ci0JICAgICAgICAgICAgICAgIGIyeF9jbWRfdCA9IGBPUF9QUkU7Ci0JICAgICAgICAgICAgICAgIGIycl9hY2sgPSAxJ2IxOwotCSAgICAgICAgICAgICAgICBiMnhfYWRkciA9IHIyYl9yYWRkciAmIDEzJ2hCRkY7CSAgIC8vIERvbnQgd2FudCB0byBwcmUgYWxsIGJhbmtzIQotCSAgICAgICAgICAgICAgICBuZXh0X2Jhbmtfc3QgPSAobF9zZHJfZG1hX2xhc3QpID8gYEJBTktfUFJFIDogKHgyYl9hY2spID8gYEJBTktfQUNUIDogYEJBTktfUFJFOyAgLy8gYmFuayB3YXMgcHJlY2hhcmdlZCBvbiBsX3Nkcl9kbWFfbGFzdAotCSAgICAgICAgICAgICBlbmQgLy8gZWxzZTogIWlmKHBhZ2VfaGl0KQotCSAgICAgICAgZW5kCi0JZW5kIC8vIGNhc2U6IGBCQU5LX0lETEUKLQotCWBCQU5LX1BSRSA6IGJlZ2luCi0JICAgYjJ4X3JlcSA9IHRyYXNfb2sgJiB4MmJfcHJlX29rX3Q7Ci0JICAgYjJ4X2NtZF90ID0gYE9QX1BSRTsKLQkgICBiMnJfYWNrID0gMSdiMDsKLQkgICBiMnhfYWRkciA9IGxfcmFkZHIgJiAxMydoQkZGOwkgICAvLyBEb250IHdhbnQgdG8gcHJlIGFsbCBiYW5rcyEKLSAgICAgICAgICAgYmFua19wcmVjaF9wYWdlX2Nsb3NlZCA9IDEnYjA7Ci0JICAgbmV4dF9iYW5rX3N0ID0gKHgyYl9hY2spID8gYEJBTktfQUNUIDogYEJBTktfUFJFOwotCWVuZCAvLyBjYXNlOiBgQkFOS19QUkUKLQotCWBCQU5LX0FDVCA6IGJlZ2luCi0JICAgYjJ4X3JlcSA9IHRpbWVyMF90YyAmIHgyYl9hY3Rfb2tfdDsKLQkgICBiMnhfY21kX3QgPSBgT1BfQUNUOwotCSAgIGIycl9hY2sgPSAxJ2IwOwotCSAgIGIyeF9hZGRyID0gbF9yYWRkcjsKLSAgICAgICAgICAgYmFua19wcmVjaF9wYWdlX2Nsb3NlZCA9IDEnYjA7Ci0JICAgbmV4dF9iYW5rX3N0ID0gKHgyYl9hY2spID8gYEJBTktfWEZSIDogYEJBTktfQUNUOwotCWVuZCAvLyBjYXNlOiBgQkFOS19BQ1QKLQkKLQlgQkFOS19YRlIgOiBiZWdpbgotCSAgIGIyeF9yZXEgPSAobF93cml0ZSkgPyB0aW1lcjBfdGMgJiB4MmJfd3Jva190ICYgeGZyX29rX3QgOgotCQkgICAgIHRpbWVyMF90YyAmIHgyYl9yZG9rX3QgJiB4ZnJfb2tfdDsgCi0JICAgYjJ4X2NtZF90ID0gKGxfd3JpdGUpID8gYE9QX1dSIDogYE9QX1JEOwotCSAgIGIycl9hY2sgPSAxJ2IwOwotCSAgIGIyeF9hZGRyID0gbF9jYWRkcjsKLSAgICAgICAgICAgYmFua19wcmVjaF9wYWdlX2Nsb3NlZCA9IDEnYjA7Ci0JICAgbmV4dF9iYW5rX3N0ID0gKHgyYl9yZWZyZXNoKSA/IGBCQU5LX0FDVCA6IAotICAgICAgICAgICAgICAgICAgICAgICAgICAoeDJiX2FjayAmIGxfc2RyX2RtYV9sYXN0KSA/IGBCQU5LX0RNQV9MQVNUX1BSRSA6Ci0JCQkgICh4MmJfYWNrKSA/IGBCQU5LX0lETEUgOiBgQkFOS19YRlI7Ci0JZW5kIC8vIGNhc2U6IGBCQU5LX1hGUgotCi0gICAgICAgIGBCQU5LX0RNQV9MQVNUX1BSRSA6IGJlZ2luCi0JICAgYjJ4X3JlcSA9IHRyYXNfb2sgJiB4MmJfcHJlX29rX3Q7Ci0JICAgYjJ4X2NtZF90ID0gYE9QX1BSRTsKLQkgICBiMnJfYWNrID0gMSdiMDsKLQkgICBiMnhfYWRkciA9IGxfcmFkZHIgJiAxMydoQkZGOwkgICAvLyBEb250IHdhbnQgdG8gcHJlIGFsbCBiYW5rcyEKLSAgICAgICAgICAgYmFua19wcmVjaF9wYWdlX2Nsb3NlZCA9IDEnYjE7Ci0JICAgbmV4dF9iYW5rX3N0ID0gKHgyYl9hY2spID8gYEJBTktfSURMRSA6IGBCQU5LX0RNQV9MQVNUX1BSRTsKLQllbmQgLy8gY2FzZTogYEJBTktfRE1BX0xBU1RfUFJFCi0gICAgICAgICAgCi0gICAgICBlbmRjYXNlIC8vIGNhc2UoYmFua19zdCkKLQotICAgZW5kIC8vIGFsd2F5cyBAIChiYW5rX3N0IG9yIC4uLikKLQotICAgYXNzaWduIGIyeF9zdGFydCA9IChiYW5rX3N0ID09IGBCQU5LX0lETEUpID8gcjJiX3N0YXJ0IDogbF9zdGFydDsKLQotICAgYXNzaWduIGIyeF9sYXN0ID0gKGJhbmtfc3QgPT0gYEJBTktfSURMRSkgPyByMmJfbGFzdCA6IGxfbGFzdDsKLQotICAgYXNzaWduIGIyeF9pZCA9IChiYW5rX3N0ID09IGBCQU5LX0lETEUpID8gcjJiX3JlcV9pZCA6IGxfaWQ7Ci0KLSAgIGFzc2lnbiBiMnhfbGVuID0gKGJhbmtfc3QgPT0gYEJBTktfSURMRSkgPyByMmJfbGVuIDogbF9sZW47Ci0KLSAgIGFzc2lnbiBiMnhfd3JhcCA9IChiYW5rX3N0ID09IGBCQU5LX0lETEUpID8gcjJiX3dyYXAgOiBsX3dyYXA7Ci0gICAKLWVuZG1vZHVsZSAvLyBzZHJfYmFua19mc20KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2NvcmUvc2RyY19ic19jb252ZXJ0LnYgYi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9jb3JlL3NkcmNfYnNfY29udmVydC52CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBkZTk2Zjk1Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2NvcmUvc2RyY19ic19jb252ZXJ0LnYKKysrIC9kZXYvbnVsbApAQCAtMSwyNDcgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAotLy8gCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KLS8vCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBTRFJBTSBDb250cm9sbGVyIGJ1c3dpZHRoIGNvbnZlcnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBzZHJhbSBjb250cm9sbGVyIHByb2plY3QgICAgICAgICAgIAotICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0Ci0gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAKLSAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3Nkcl9jdHJsLyAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBEZXNjcmlwdGlvbjogU0RSQU0gQ29udHJvbGxlciBCdXN3aWR0aCBjb252ZXJ0ZXIKLQotICBUaGlzIG1vZHVsZSBkb2VzIHdyaXRlL3JlYWQgZGF0YSB0cmFuc2FsYXRpb24gYmV0d2VlbgotICAgICBhcHBsaWNhdGlvbiBkYXRhIHRvIFNEUkFNIGJ1cyB3aWR0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIAotICBWZXJzaW9uICA6ICAwLjAgIC0gOHRoIEphbiAyMDEyIC0gSW5pdGlhbCBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICAgMC4yIC0gMm5kIEZlYiAyMDEyCi0JICAgICAgICAgSW1wcm92ZWQgdGhlIGNvbW1hbmQgcGlwZSBzdHJ1Y3R1cmUgdG8gYWNjZXB0IHVwLXRvIDQgY29tbWFuZCBvZiBkaWZmZXJlbnQgYmFuay4KLQkgICAgICAwLjMgLSA2dGggRmViIDIwMTIKLQkgICAgICAgICBCdWcgZml4IG9uIHJlYWQgdmFsaWQgZ2VuZXJhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAKLSByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgCi0gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIAotIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIAotIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAKLSBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgCi0gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIAotbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgCi0gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIAotIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAKLSBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgCi0gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgCi0gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIAotIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1gaW5jbHVkZSAic2RyY19kZWZpbmUudiIKLW1vZHVsZSBzZHJjX2JzX2NvbnZlcnQgKAotICAgICAgICAgICAgICAgICAgICBjbGsgICAgICAgICAgICAgICAgICwKLSAgICAgICAgICAgICAgICAgICAgcmVzZXRfbiAgICAgICAgICAgICAsCi0gICAgICAgICAgICAgICAgICAgIHNkcl93aWR0aCAgICAgICAgICAgLAotCi0gICAgICAgIC8qIENvbnRyb2wgU2lnbmFsIGZyb20geGZyIGN0cmwgKi8KLSAgICAgICAgICAgICAgICAgICAgeDJhX3Jkc3RhcnQgICAgICAgICAsCi0gICAgICAgICAgICAgICAgICAgIHgyYV93cnN0YXJ0ICAgICAgICAgLAotICAgICAgICAgICAgICAgICAgICB4MmFfcmRsYXN0ICAgICAgICAgICwKLSAgICAgICAgICAgICAgICAgICAgeDJhX3dybGFzdCAgICAgICAgICAsCi0gICAgICAgICAgICAgICAgICAgIHgyYV9yZGR0ICAgICAgICAgICAgLAotICAgICAgICAgICAgICAgICAgICB4MmFfcmRvayAgICAgICAgICAgICwKLSAgICAgICAgICAgICAgICAgICAgYTJ4X3dyZHQgICAgICAgICAgICAsCi0gICAgICAgICAgICAgICAgICAgIGEyeF93cmVuX24gICAgICAgICAgLAotICAgICAgICAgICAgICAgICAgICB4MmFfd3JuZXh0ICAgICAgICAgICwKLQotICAgLyogIENvbnRyb2wgU2lnbmFsIGZyb20vdG8gdG8gYXBwbGljYXRpb24gaS9mICAqLwotICAgICAgICAgICAgICAgICAgICBhcHBfd3JfZGF0YSAgICAgICAgICwKLSAgICAgICAgICAgICAgICAgICAgYXBwX3dyX2VuX24gICAgICAgICAsCi0gICAgICAgICAgICAgICAgICAgIGFwcF93cl9uZXh0ICAgICAgICAgLAotICAgICAgICAgICAgICAgICAgICBhcHBfbGFzdF93ciAgICAgICAgICwKLSAgICAgICAgICAgICAgICAgICAgYXBwX3JkX2RhdGEgICAgICAgICAsCi0gICAgICAgICAgICAgICAgICAgIGFwcF9yZF92YWxpZCAgICAgICAgLAotCQkgICAgYXBwX2xhc3RfcmQKLQkJKTsKLQotCi1wYXJhbWV0ZXIgIEFQUF9BVyAgID0gMzA7ICAvLyBBcHBsaWNhdGlvbiBBZGRyZXNzIFdpZHRoCi1wYXJhbWV0ZXIgIEFQUF9EVyAgID0gMzI7ICAvLyBBcHBsaWNhdGlvbiBEYXRhIFdpZHRoIAotcGFyYW1ldGVyICBBUFBfQlcgICA9IDQ7ICAgLy8gQXBwbGljYXRpb24gQnl0ZSBXaWR0aAotCi1wYXJhbWV0ZXIgIFNEUl9EVyAgID0gMTY7ICAvLyBTRFIgRGF0YSBXaWR0aCAKLXBhcmFtZXRlciAgU0RSX0JXICAgPSAyOyAgIC8vIFNEUiBCeXRlIFdpZHRoCi0gICAKLWlucHV0ICAgICAgICAgICAgICAgICAgICBjbGsgICAgICAgICAgICAgIDsKLWlucHV0ICAgICAgICAgICAgICAgICAgICByZXNldF9uICAgICAgICAgIDsKLWlucHV0IFsxOjBdICAgICAgICAgICAgICBzZHJfd2lkdGggICAgICAgIDsgLy8gMidiMDAgLSAzMiBCaXQgU0RSLCAyJ2IwMSAtIDE2IEJpdCBTRFIsIDInYjF4IC0gOCBCaXQKLQotLyogQ29udHJvbCBTaWduYWwgZnJvbSB4ZnIgY3RybCBSZWFkIFRyYW5zYWN0aW9uKi8KLWlucHV0ICAgICAgICAgICAgICAgICAgICB4MmFfcmRzdGFydCAgICAgIDsgLy8gcmVhZCBzdGFydCBpbmRpY2F0aW9uCi1pbnB1dCAgICAgICAgICAgICAgICAgICAgeDJhX3JkbGFzdCAgICAgICA7IC8vICByZWFkIGxhc3QgYnVyc3QgYWNjZXNzCi1pbnB1dCBbU0RSX0RXLTE6MF0gICAgICAgeDJhX3JkZHQgICAgICAgICA7Ci1pbnB1dCAgICAgICAgICAgICAgICAgICAgeDJhX3Jkb2sgICAgICAgICA7Ci0KLS8qIENvbnRyb2wgU2lnbmFsIGZyb20geGZyIGN0cmwgV3JpdGUgVHJhbnNhY3Rpb24qLwotaW5wdXQgICAgICAgICAgICAgICAgICAgIHgyYV93cnN0YXJ0ICAgICAgOyAvLyB3cml0IHN0YXJ0IGluZGljYXRpb24KLWlucHV0ICAgICAgICAgICAgICAgICAgICB4MmFfd3JsYXN0ICAgICAgIDsgLy8gd3JpdGUgbGFzdCB0cmFuc2ZlcgotaW5wdXQgICAgICAgICAgICAgICAgICAgIHgyYV93cm5leHQgICAgICAgOwotb3V0cHV0IFtTRFJfRFctMTowXSAgICAgIGEyeF93cmR0ICAgICAgICAgOwotb3V0cHV0IFtTRFJfQlctMTowXSAgICAgIGEyeF93cmVuX24gICAgICAgOwotCi0vLyBBcHBsaWNhdGlvbiBXcml0ZSBUcmFuc2FjdGlvbgotaW5wdXQgIFtBUFBfRFctMTowXSAgICAgIGFwcF93cl9kYXRhICAgICAgOwotaW5wdXQgIFtBUFBfQlctMTowXSAgICAgIGFwcF93cl9lbl9uICAgICAgOwotb3V0cHV0ICAgICAgICAgICAgICAgICAgIGFwcF93cl9uZXh0ICAgICAgOwotb3V0cHV0ICAgICAgICAgICAgICAgICAgIGFwcF9sYXN0X3dyICAgICAgOyAvLyBJbmRpY2F0ZSBsYXN0IFdyaXRlIFRyYW5zZmVyIGZvciBhIGdpdmVuIGJ1cnN0IHNpemUKLQotLy8gQXBwbGljYXRpb24gUmVhZCBUcmFuc2FjdGlvbgotb3V0cHV0IFtBUFBfRFctMTowXSAgICAgIGFwcF9yZF9kYXRhICAgICAgOwotb3V0cHV0ICAgICAgICAgICAgICAgICAgIGFwcF9yZF92YWxpZCAgICAgOwotb3V0cHV0ICAgICAgICAgICAgICAgICAgIGFwcF9sYXN0X3JkICAgICAgOyAvLyBJbmRpY2F0ZSBsYXN0IFJlYWQgVHJhbnNmZXIgZm9yIGEgZ2l2ZW4gYnVyc3Qgc2l6ZQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvY2FsIERlY2xlcmF0aW9uCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXJlZyBbQVBQX0RXLTE6MF0gICAgICAgICBhcHBfcmRfZGF0YSAgICAgIDsKLXJlZyAgICAgICAgICAgICAgICAgICAgICBhcHBfcmRfdmFsaWQgICAgIDsKLXJlZyBbU0RSX0RXLTE6MF0gICAgICAgICBhMnhfd3JkdCAgICAgICAgIDsKLXJlZyBbU0RSX0JXLTE6MF0gICAgICAgICBhMnhfd3Jlbl9uICAgICAgIDsKLXJlZyAgICAgICAgICAgICAgICAgICAgICBhcHBfd3JfbmV4dCAgICAgIDsKLQotcmVnIFsyMzowXSAgICAgICAgICAgICAgIHNhdmVkX3JkX2RhdGEgICAgOwotcmVnIFsxOjBdICAgICAgICAgICAgICAgIHJkX3hmcl9jb3VudCAgICAgOwotcmVnIFsxOjBdICAgICAgICAgICAgICAgIHdyX3hmcl9jb3VudCAgICAgOwotCi0KLWFzc2lnbiAgYXBwX2xhc3Rfd3IgPSB4MmFfd3JsYXN0OwotYXNzaWduICBhcHBfbGFzdF9yZCA9IHgyYV9yZGxhc3Q7Ci0KLWFsd2F5cyBAKCopIGJlZ2luCi0gICAgICAgIGlmKHNkcl93aWR0aCA9PSAyJ2IwMCkgLy8gMzIgQml0IFNEUiBNb2RlCi0gICAgICAgICAgYmVnaW4KLSAgICAgICAgICAgIGEyeF93cmR0ICAgICAgICAgICAgID0gYXBwX3dyX2RhdGE7Ci0gICAgICAgICAgICBhMnhfd3Jlbl9uICAgICAgICAgICA9IGFwcF93cl9lbl9uOwotICAgICAgICAgICAgYXBwX3dyX25leHQgICAgICAgICAgPSB4MmFfd3JuZXh0OwotICAgICAgICAgICAgYXBwX3JkX2RhdGEgICAgICAgICAgPSB4MmFfcmRkdDsKLSAgICAgICAgICAgIGFwcF9yZF92YWxpZCAgICAgICAgID0geDJhX3Jkb2s7Ci0gICAgICAgICAgZW5kCi0gICAgICAgIGVsc2UgaWYoc2RyX3dpZHRoID09IDInYjAxKSAvLyAxNiBCaXQgU0RSIE1vZGUKLSAgICAgICAgYmVnaW4KLSAgICAgICAgICAgLy8gQ2hhbmdlZCB0aGUgYWRkcmVzcyBhbmQgbGVuZ3RoIHRvIG1hdGNoIHRoZSAxNiBiaXQgU0RSIE1vZGUKLSAgICAgICAgICAgIGFwcF93cl9uZXh0ICAgICAgICAgID0gKHgyYV93cm5leHQgJiB3cl94ZnJfY291bnRbMF0pOwotICAgICAgICAgICAgYXBwX3JkX3ZhbGlkICAgICAgICAgPSAoeDJhX3Jkb2sgJiByZF94ZnJfY291bnRbMF0pOwotICAgICAgICAgICAgaWYod3JfeGZyX2NvdW50WzBdID09IDEnYjEpCi0gICAgICAgICAgICAgIGJlZ2luCi0gICAgICAgICAgICAgICAgYTJ4X3dyZW5fbiAgICAgID0gYXBwX3dyX2VuX25bMzoyXTsKLSAgICAgICAgICAgICAgICBhMnhfd3JkdCAgICAgICAgPSBhcHBfd3JfZGF0YVszMToxNl07Ci0gICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBiZWdpbgotICAgICAgICAgICAgICAgIGEyeF93cmVuX24gICAgICA9IGFwcF93cl9lbl9uWzE6MF07Ci0gICAgICAgICAgICAgICAgYTJ4X3dyZHQgICAgICAgID0gYXBwX3dyX2RhdGFbMTU6MF07Ci0gICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgCi0gICAgICAgICAgICBhcHBfcmRfZGF0YSA9IHt4MmFfcmRkdCxzYXZlZF9yZF9kYXRhWzE1OjBdfTsKLSAgICAgICAgZW5kIGVsc2UgIC8vIDggQml0IFNEUiBNb2RlCi0gICAgICAgIGJlZ2luCi0gICAgICAgICAgIC8vIENoYW5nZWQgdGhlIGFkZHJlc3MgYW5kIGxlbmd0aCB0byBtYXRjaCB0aGUgMTYgYml0IFNEUiBNb2RlCi0gICAgICAgICAgICBhcHBfd3JfbmV4dCAgICAgICAgID0gKHgyYV93cm5leHQgJiAod3JfeGZyX2NvdW50WzE6MF09PSAyJ2IxMSkpOwotICAgICAgICAgICAgYXBwX3JkX3ZhbGlkICAgICAgICA9ICh4MmFfcmRvayAmICAgKHJkX3hmcl9jb3VudFsxOjBdPT0gMidiMTEpKTsKLSAgICAgICAgICAgIGlmKHdyX3hmcl9jb3VudFsxOjBdID09IDInYjExKQotICAgICAgICAgICAgYmVnaW4KLSAgICAgICAgICAgICAgICBhMnhfd3Jlbl9uICAgICAgPSBhcHBfd3JfZW5fblszXTsKLSAgICAgICAgICAgICAgICBhMnhfd3JkdCAgICAgICAgPSBhcHBfd3JfZGF0YVszMToyNF07Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVsc2UgaWYod3JfeGZyX2NvdW50WzE6MF0gPT0gMidiMTApCi0gICAgICAgICAgICBiZWdpbgotICAgICAgICAgICAgICAgIGEyeF93cmVuX24gICAgICA9IGFwcF93cl9lbl9uWzJdOwotICAgICAgICAgICAgICAgIGEyeF93cmR0ICAgICAgICA9IGFwcF93cl9kYXRhWzIzOjE2XTsKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZWxzZSBpZih3cl94ZnJfY291bnRbMTowXSA9PSAyJ2IwMSkKLSAgICAgICAgICAgIGJlZ2luCi0gICAgICAgICAgICAgICAgYTJ4X3dyZW5fbiAgICAgID0gYXBwX3dyX2VuX25bMV07Ci0gICAgICAgICAgICAgICAgYTJ4X3dyZHQgICAgICAgID0gYXBwX3dyX2RhdGFbMTU6OF07Ci0gICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVsc2UgYmVnaW4KLSAgICAgICAgICAgICAgICBhMnhfd3Jlbl9uICAgICAgPSBhcHBfd3JfZW5fblswXTsKLSAgICAgICAgICAgICAgICBhMnhfd3JkdCAgICAgICAgPSBhcHBfd3JfZGF0YVs3OjBdOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGFwcF9yZF9kYXRhICAgICAgICAgPSB7eDJhX3JkZHQsc2F2ZWRfcmRfZGF0YVsyMzowXX07Ci0gICAgICAgICAgZW5kCi0gICAgIGVuZAotCi0KLQotYWx3YXlzIEAocG9zZWRnZSBjbGspCi0gIGJlZ2luCi0gICAgaWYoIXJlc2V0X24pCi0gICAgICBiZWdpbgotICAgICAgICByZF94ZnJfY291bnQgICAgPD0gOCdiMDsKLSAgICAgICAgd3JfeGZyX2NvdW50ICAgIDw9IDgnYjA7Ci0Jc2F2ZWRfcmRfZGF0YSAgIDw9IDI0J2gwOwotICAgICAgZW5kCi0gICAgZWxzZSBiZWdpbgotCi0JLy8gRHVyaW5nIFdyaXRlIFBoYXNlCi0gICAgICAgIGlmKHgyYV93cmxhc3QpIGJlZ2luCi0gICAgICAgICAgIHdyX3hmcl9jb3VudCAgICA8PSAwOwotICAgICAgICBlbmQKLSAgICAgICAgZWxzZSBpZih4MmFfd3JuZXh0KSBiZWdpbgotICAgICAgICAgICB3cl94ZnJfY291bnQgPD0gd3JfeGZyX2NvdW50ICsgMSdiMTsKLSAgICAgICAgZW5kCi0KLQkvLyBEdXJpbmcgUmVhZCBQaGFzZQotICAgICAgICBpZih4MmFfcmRsYXN0KSBiZWdpbgotICAgICAgICAgICByZF94ZnJfY291bnQgICAgPD0gMDsKLSAgICAgICAgZW5kCi0gICAgICAgIGVsc2UgaWYoeDJhX3Jkb2spIGJlZ2luCi0gICAgICAgICAgIHJkX3hmcl9jb3VudCAgIDw9IHJkX3hmcl9jb3VudCArIDEnYjE7Ci0JZW5kCi0KLQkvLyBTYXZlIFByZXZpb3VzIERhdGEKLSAgICAgICAgaWYoeDJhX3Jkb2spIGJlZ2luCi0JICAgaWYoc2RyX3dpZHRoID09IDInYjAxKSAvLyAxNiBCaXQgU0RSIE1vZGUKLQkgICAgICBzYXZlZF9yZF9kYXRhWzE1OjBdICA8PSB4MmFfcmRkdDsKLSAgICAgICAgICAgIGVsc2UgYmVnaW4vLyA4IGJpdCBTRFIgTW9kZSAtIAotCSAgICAgICBpZihyZF94ZnJfY291bnRbMTowXSA9PSAyJ2IwMCkgICAgICBzYXZlZF9yZF9kYXRhWzc6MF0gICA8PSB4MmFfcmRkdFs3OjBdOwotCSAgICAgICBlbHNlIGlmKHJkX3hmcl9jb3VudFsxOjBdID09IDInYjAxKSBzYXZlZF9yZF9kYXRhWzE1OjhdICA8PSB4MmFfcmRkdFs3OjBdOwotCSAgICAgICBlbHNlIGlmKHJkX3hmcl9jb3VudFsxOjBdID09IDInYjEwKSBzYXZlZF9yZF9kYXRhWzIzOjE2XSA8PSB4MmFfcmRkdFs3OjBdOwotCSAgICBlbmQKLSAgICAgICAgZW5kCi0gICAgZW5kCi1lbmQKLQotZW5kbW9kdWxlIC8vIHNkcl9ic19jb252ZXJ0CmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9jb3JlL3NkcmNfY29yZS52IGIvdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvY29yZS9zZHJjX2NvcmUudgpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNmMwNjYxNS4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9jb3JlL3NkcmNfY29yZS52CisrKyAvZGV2L251bGwKQEAgLTEsNTI3ICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+Ci0vLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgU0RSQU0gQ29udHJvbGxlciBDb3JlIEZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgc2RyYW0gY29udHJvbGxlciBwcm9qZWN0ICAgICAgICAgICAKLSAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdAotICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgCi0gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy9zZHJfY3RybC8gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgRGVzY3JpcHRpb246IFNEUkFNIENvbnRyb2xsZXIgQ29yZSBNb2R1bGUKLSAgICAyIHR5cGVzIG9mIFNEUkFNcyBhcmUgc3VwcG9ydGVkLCAxTXgxNiAyIGJhbmssIG9yIDRNeDE2IDQgYmFuay4KLSAgICBUaGlzIGJsb2NrIGludGVncmF0ZSBmb2xsb3dpbmcgc3ViIG1vZHVsZXMKLQotICAgIHNkcmNfYnNfY29udmVydCAgIAotICAgICAgICBjb252ZXJ0IHRoZSBzeXN0ZW0gc2lkZSAzMiBiaXQgaW50byBlcXV2YWlsZW50IDgvMTYvMzIgU0RSIGZvcm1hdAotICAgIHNkcmNfcmVxX2dlbiAgICAKLSAgICAgICAgVGhpcyBtb2R1bGUgdGFrZXMgcmVxdWVzdHMgZnJvbSB0aGUgYXBwLCBjaG9wcyB0aGVtIHRvIGJ1cnN0IGJvb3VuZGFyaWVzCi0gICAgICAgIGlmIHdyYXA9MCwgZGVjb2RlcyB0aGUgYmFuayBhbmQgcGFzc2UgdGhlIHJlcXVlc3QgdG8gYmFua19jdGwKLSAgIHNkcmNfeGZyX2N0bAotICAgICAgVGhpcyBtb2R1bGUgdGFrZXMgcmVxdWVzdHMgZnJvbSBzZHJfYmFua19jdGwsIHJ1bnMgdGhlIHRyYW5zZmVyIGFuZAotICAgICAgY29udHJvbHMgZGF0YSBmbG93IHRvL2Zyb20gdGhlIGFwcC4gQXQgdGhlIGVuZCBvZiB0aGUgdHJhbnNmZXIgaXQgaXNzdWVzIGEKLSAgICAgIGJ1cnN0IHRlcm1pbmF0ZSBpZiBub3QgYXQgdGhlIGVuZCBvZiBhIGJ1cnN0IGFuZCBhbm90aGVyIGNvbW1hbmQgdG8gdGhpcwotICAgICAgYmFuayBpcyBub3QgYXZhaWxhYmxlLgotCi0gICBzZHJjX2JhbmtfY3RsCi0gICAgICBUaGlzIG1vZHVsZSB0YWtlcyByZXF1ZXN0cyBmcm9tIHNkcl9yZXFfZ2VuLCBjaGVja3MgZm9yIHBhZ2UgaGl0L21pc3MgYW5kCi0gICAgICBpc3N1ZXMgcHJlY2hhcmdlL2FjdGl2YXRlIGNvbW1hbmRzIGFuZCB0aGVuIHBhc3NlcyB0aGUgcmVxdWVzdCB0bwotICAgICAgc2RyX3hmcl9jdGwuIAotCi0KLSAgQXNzdW1wdGlvbjogU0RSQU0gUGFkcyBzaG91bGQgYmUgcGxhY2VkIG5lYXIgdG8gdGhpcyBtb2R1bGUuIGVsc2UKLSAgdXNlciBzaG91bGQgYWRkIGEgRkYgbmVhciB0aGUgcGFkcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIAotICBWZXJzaW9uICA6IDAuMCAtIDh0aCBKYW4gMjAxMgotICAgICAgICAgICAgICAgIEluaXRpYWwgdmVyc2lvbiB3aXRoIDE2LzMyIEJpdCBTRFJBTSBTdXBwb3J0Ci0gICAgICAgICAgIDogMC4xIC0gMjR0aCBKYW4gMjAxMgotCSAgICAgICAgIDggQml0IFNEUkFNIFN1cHBvcnQgaXMgYWRkZWQKLSAgICAgICAgICAgICAwLjIgLSAybmQgRmViIDIwMTIKLQkgICAgICAgICAgIEltcHJvdmVkIHRoZSBjb21tYW5kIHBpcGUgc3RydWN0dXJlIHRvIGFjY2VwdCB1cC10byAKLQkJICAgNCBjb21tYW5kIG9mIGRpZmZlcmVudCBiYW5rLgotCSAgICAgMC4zIC0gN3RoIEZlYiAyMDEyCi0JICAgICAgICAgICBCdWcgZml4IGZvciBwYXJhbWV0ZXIgZGVmaW5hdGlvbiBmb3IgcmVxdWVzdCBsZW5ndGggaGFzIGNoYW5nZWQgZnJvbSA5IHRvIDEyCi0gICAgICAgICAgICAgMC40IC0gMjZ0aCBBcHJpbCAyMDEzCi0gICAgICAgICAgICAgICAgICAgU0RSQU0gQWRkcmVzcyBCaXQgaXMgRXh0ZW5kZWQgYnkgMTIgYml0IHRvIDEzIGJpdCB0byBzdXBwb3J0IGhpZ2hlciBTRFJBTQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIAotIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAKLSByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgCi0gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgCi0gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIAotIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAKLSBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgCi1sYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAKLSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgCi0gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIAotIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAKLSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAKLSBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgCi0gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotYGluY2x1ZGUgInNkcmNfZGVmaW5lLnYiCi1tb2R1bGUgc2RyY19jb3JlIAotICAgICAgICAgICAoCi0JCWNsaywKLSAgICAgICAgICAgICAgICBwYWRfY2xrLAotCQlyZXNldF9uLAotICAgICAgICAgICAgICAgIHNkcl93aWR0aCwKLQkJY2ZnX2NvbGJpdHMsCi0gICAgICAgICAgICAgICAgZGVidWcsCi0KLQkJLyogUmVxdWVzdCBmcm9tIGFwcCAqLwotCQlhcHBfcmVxLAkgICAgICAgIC8vIFRyYW5zZmVyIFJlcXVlc3QKLQkJYXBwX3JlcV9hZGRyLAkgICAgICAgIC8vIFNEUkFNIEFkZHJlc3MKLQkJYXBwX3JlcV9sZW4sCSAgICAgICAgLy8gQnVyc3QgTGVuZ3RoIChpbiAxNiBiaXQgd29yZHMpCi0JCWFwcF9yZXFfd3JhcCwJICAgICAgICAvLyBXcmFwIG1vZGUgcmVxdWVzdCAoeGZyX2xlbiA9IDQpCi0JCWFwcF9yZXFfd3JfbiwJICAgICAgICAvLyAwID0+IFdyaXRlIHJlcXVlc3QsIDEgPT4gcmVhZCByZXEKLQkJYXBwX3JlcV9hY2ssCSAgICAgICAgLy8gUmVxdWVzdCBoYXMgYmVlbiBhY2NlcHRlZAotCQljZmdfcmVxX2RlcHRoLAkgICAgICAgIC8vaG93IG1hbnkgcmVxLiBidWZmZXIgc2hvdWxkIGhvbGQKLQkJCi0JCWFwcF93cl9kYXRhLAotICAgICAgICAgICAgICAgIGFwcF93cl9lbl9uLAotCQlhcHBfbGFzdF93ciwKLQotCQlhcHBfcmRfZGF0YSwKLQkJYXBwX3JkX3ZhbGlkLAotCQlhcHBfbGFzdF9yZCwKLQkJYXBwX3dyX25leHRfcmVxLAotCQlzZHJfaW5pdF9kb25lLAotCQlhcHBfcmVxX2RtYV9sYXN0LAotCi0JCS8qIEludGVyZmFjZSB0byBTRFJBTXMgKi8KLQkJc2RyX2NzX24sCi0JCXNkcl9ja2UsCi0JCXNkcl9yYXNfbiwKLQkJc2RyX2Nhc19uLAotCQlzZHJfd2VfbiwKLQkJc2RyX2RxbSwKLQkJc2RyX2JhLAotCQlzZHJfYWRkciwgCi0JCXBhZF9zZHJfZGluLAotCQlzZHJfZG91dCwKLQkJc2RyX2Rlbl9uLAotCi0JCS8qIFBhcmFtZXRlcnMgKi8KLQkJY2ZnX3Nkcl9lbiwKLQkJY2ZnX3Nkcl9tb2RlX3JlZywKLQkJY2ZnX3Nkcl90cmFzX2QsCi0JCWNmZ19zZHJfdHJwX2QsCi0JCWNmZ19zZHJfdHJjZF9kLAotCQljZmdfc2RyX2NhcywKLQkJY2ZnX3Nkcl90cmNhcl9kLAotCQljZmdfc2RyX3R3cl9kLAotCQljZmdfc2RyX3Jmc2gsCi0JCWNmZ19zZHJfcmZtYXgpOwotICAKLXBhcmFtZXRlciAgQVBQX0FXICAgPSAyNjsgIC8vIEFwcGxpY2F0aW9uIEFkZHJlc3MgV2lkdGgKLXBhcmFtZXRlciAgQVBQX0RXICAgPSAzMjsgIC8vIEFwcGxpY2F0aW9uIERhdGEgV2lkdGggCi1wYXJhbWV0ZXIgIEFQUF9CVyAgID0gNDsgICAvLyBBcHBsaWNhdGlvbiBCeXRlIFdpZHRoCi1wYXJhbWV0ZXIgIEFQUF9SVyAgID0gOTsgICAvLyBBcHBsaWNhdGlvbiBSZXF1ZXN0IFdpZHRoCi0KLXBhcmFtZXRlciAgU0RSX0RXICAgPSAxNjsgIC8vIFNEUiBEYXRhIFdpZHRoIAotcGFyYW1ldGVyICBTRFJfQlcgICA9IDI7ICAgLy8gU0RSIEJ5dGUgV2lkdGgKLSAgICAgICAgICAgICAKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gR2xvYmFsIFZhcmlhYmxlCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1pbnB1dCAgICAgICAgICAgICAgICAgICBjbGsgICAgICAgICAgICAgICAgIDsgLy8gU0RSQU0gQ2xvY2sgCi1pbnB1dCAgICAgICAgICAgICAgICAgICBwYWRfY2xrICAgICAgICAgICAgIDsgLy8gU0RSQU0gQ2xvY2sgZnJvbSBQYWQsIHVzZWQgZm9yIHJlZ2lzdGVyaW5nIFJlYWQgRGF0YQotaW5wdXQgICAgICAgICAgICAgICAgICAgcmVzZXRfbiAgICAgICAgICAgICA7IC8vIFJlc2V0IFNpZ25hbAotaW5wdXQgWzE6MF0gICAgICAgICAgICAgc2RyX3dpZHRoICAgICAgICAgICA7IC8vIDInYjAwIC0gMzIgQml0IFNEUiwgMidiMDEgLSAxNiBCaXQgU0RSLCAyJ2IxeCAtIDggQml0Ci1pbnB1dCBbMTowXSAgICAgICAgICAgICBjZmdfY29sYml0cyAgICAgICAgIDsgLy8gMidiMDAgLSA4IEJpdCBjb2x1bW4gYWRkcmVzcywgMidiMDEgLSA5IEJpdCwgMTAgLSAxMCBiaXQsIDExIC0gMTFCaXRzCi1vdXRwdXQgWzIxOjBdICAgICAgICAgICBkZWJ1ZyAgICAgICAgICAgICAgIDsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJlcXVlc3QgZnJvbSBhcHAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1pbnB1dCAJCQlhcHBfcmVxICAgICAgICAgICAgIDsgLy8gQXBwbGljYXRpb24gUmVxdWVzdAotaW5wdXQgW0FQUF9BVy0xOjBdIAlhcHBfcmVxX2FkZHIgICAgICAgIDsgLy8gQWRkcmVzcyAKLWlucHV0IAkJCWFwcF9yZXFfd3JfbiAgICAgICAgOyAvLyAwIC0gV3JpdGUsIDEgLSBSZWFkCi1pbnB1dCAgICAgICAgICAgICAgICAgICBhcHBfcmVxX3dyYXAgICAgICAgIDsgLy8gQWRkcmVzcyBXcmFwCi1vdXRwdXQgICAgICAgICAgICAgICAgICBhcHBfcmVxX2FjayAgICAgICAgIDsgLy8gQXBwbGljYXRpb24gUmVxdWVzdCBBY2sKLQkJCi1pbnB1dCBbQVBQX0RXLTE6MF0gCWFwcF93cl9kYXRhICAgICAgICAgOyAvLyBXcml0ZSBEYXRhCi1vdXRwdXQgCQkgICAgICAgIGFwcF93cl9uZXh0X3JlcSAgICAgOyAvLyBOZXh0IFdyaXRlIERhdGEgUmVxdWVzdAotaW5wdXQgW0FQUF9CVy0xOjBdIAlhcHBfd3JfZW5fbiAgICAgICAgIDsgLy8gQnl0ZSB3aXNlIFdyaXRlIEVuYWJsZQotb3V0cHV0ICAgICAgICAgICAgICAgICAgYXBwX2xhc3Rfd3IgICAgICAgICA7IC8vIExhc3QgV3JpdGUgdHJhbm5zZmVyIG9mIGEgZ2l2ZW4gQnVyc3QKLW91dHB1dCBbQVBQX0RXLTE6MF0gCWFwcF9yZF9kYXRhICAgICAgICAgOyAvLyBSZWFkIERhdGEKLW91dHB1dCAgICAgICAgICAgICAgICAgIGFwcF9yZF92YWxpZCAgICAgICAgOyAvLyBSZWFkIFZhbGlkCi1vdXRwdXQgICAgICAgICAgICAgICAgICBhcHBfbGFzdF9yZCAgICAgICAgIDsgLy8gTGFzdCBSZWFkIFRyYW5zZmVyIG9mIGEgZ2l2ZW4gQnVyc3QKLQkJCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSW50ZXJmYWNlIHRvIFNEUkFNcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW91dHB1dCAgICAgICAgICAgICAgICAgIHNkcl9ja2UgICAgICAgICAgICAgOyAvLyBTRFJBTSBDS0UKLW91dHB1dCAJCQlzZHJfY3NfbiAgICAgICAgICAgIDsgLy8gU0RSQU0gQ2hpcCBTZWxlY3QKLW91dHB1dCAgICAgICAgICAgICAgICAgIHNkcl9yYXNfbiAgICAgICAgICAgOyAvLyBTRFJBTSByYXMKLW91dHB1dCAgICAgICAgICAgICAgICAgIHNkcl9jYXNfbiAgICAgICAgICAgOyAvLyBTRFJBTSBjYXMKLW91dHB1dAkJCXNkcl93ZV9uICAgICAgICAgICAgOyAvLyBTRFJBTSB3cml0ZSBlbmFibGUKLW91dHB1dCBbU0RSX0JXLTE6MF0gCXNkcl9kcW0gICAgICAgICAgICAgOyAvLyBTRFJBTSBEYXRhIE1hc2sKLW91dHB1dCBbMTowXSAJCXNkcl9iYSAgICAgICAgICAgICAgOyAvLyBTRFJBTSBCYW5rIEVuYWJsZQotb3V0cHV0IFsxMjowXSAJCXNkcl9hZGRyICAgICAgICAgICAgOyAvLyBTRFJBTSBBZGRyZXNzCi1pbnB1dCBbU0RSX0RXLTE6MF0gCXBhZF9zZHJfZGluICAgICAgICAgOyAvLyBTRFJBIERhdGEgSW5wdXQKLW91dHB1dCBbU0RSX0RXLTE6MF0gCXNkcl9kb3V0ICAgICAgICAgICAgOyAvLyBTRFJBTSBEYXRhIE91dHB1dAotb3V0cHV0IFtTRFJfQlctMTowXSAJc2RyX2Rlbl9uICAgICAgICAgICA7IC8vIFNEUkFNIERhdGEgT3V0cHV0IGVuYWJsZQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29uZmlndXJhdGlvbiBQYXJhbWV0ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1vdXRwdXQgICAgICAgICAgICAgICAgICBzZHJfaW5pdF9kb25lICAgICAgIDsgLy8gSW5kaWNhdGUgU0RSQU0gSW5pdGlhbGlzYXRpb24gRG9uZQotaW5wdXQgWzM6MF0gCQljZmdfc2RyX3RyYXNfZCAgICAgIDsgLy8gQWN0aXZlIHRvIHByZWNoYXJnZSBkZWxheQotaW5wdXQgWzM6MF0gICAgICAgICAgICAgY2ZnX3Nkcl90cnBfZCAgICAgICA7IC8vIFByZWNoYXJnZSB0byBhY3RpdmUgZGVsYXkKLWlucHV0IFszOjBdICAgICAgICAgICAgIGNmZ19zZHJfdHJjZF9kICAgICAgOyAvLyBBY3RpdmUgdG8gUi9XIGRlbGF5Ci1pbnB1dCAJCQljZmdfc2RyX2VuICAgICAgICAgIDsgLy8gRW5hYmxlIFNEUkFNIGNvbnRyb2xsZXIKLWlucHV0IFsxOjBdIAkJY2ZnX3JlcV9kZXB0aCAgICAgICA7IC8vIE1heGltdW0gUmVxdWVzdCBhY2NlcHRlZCBieSBTRFJBTSBjb250cm9sbGVyCi1pbnB1dCBbQVBQX1JXLTE6MF0JYXBwX3JlcV9sZW4gICAgICAgICA7IC8vIEFwcGxpY2F0aW9uIEJ1cnN0IFJlcXVlc3QgbGVuZ3RoIGluIDMyIGJpdCAKLWlucHV0IFsxMjowXSAJCWNmZ19zZHJfbW9kZV9yZWcgICAgOwotaW5wdXQgWzI6MF0gCQljZmdfc2RyX2NhcyAgICAgICAgIDsgLy8gU0RSQU0gQ0FTIExhdGVuY3kKLWlucHV0IFszOjBdIAkJY2ZnX3Nkcl90cmNhcl9kICAgICA7IC8vIEF1dG8tcmVmcmVzaCBwZXJpb2QKLWlucHV0IFszOjBdICAgICAgICAgICAgIGNmZ19zZHJfdHdyX2QgICAgICAgOyAvLyBXcml0ZSByZWNvdmVyeSBkZWxheQotaW5wdXQgW2BTRFJfUkZTSF9USU1FUl9XLTEgOiAwXSBjZmdfc2RyX3Jmc2g7Ci1pbnB1dCBbYFNEUl9SRlNIX1JPV19DTlRfVyAtMSA6IDBdIGNmZ19zZHJfcmZtYXg7Ci1pbnB1dCAgICAgICAgICAgICAgICAgICBhcHBfcmVxX2RtYV9sYXN0OyAgICAvLyB0aGlzIHNpZ25hbCBzaG91bGQgY2xvc2UgdGhlIGJhbmsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLyBJbnRlcm5hbCBOZXRzCi0gICAKLS8vIFNEUl9SRVFfR0VOCi13aXJlICAgICAgICAgICAgICAgICAgICB4MmFfcmRzdGFydDsKLXdpcmUgICAgICAgICAgICAgICAgICAgIHgyYV93cnN0YXJ0Owotd2lyZSAgICAgICAgICAgICAgICAgICAgeDJhX3JkbGFzdDsKLXdpcmUgICAgICAgICAgICAgICAgICAgIHgyYV93cmxhc3Q7Ci13aXJlICAgICAgICAgICAgICAgICAgICB4MmFfcmRvazsKLXdpcmUgICAgICAgICAgICAgICAgICAgIHgyYV93cm5leHQ7Ci13aXJlICAgICAgICAgICAgICAgICAgICB4MmJfYWNrOwotd2lyZSAgICAgICAgICAgICAgICAgICAgeDJiX3JlZnJlc2g7Ci13aXJlICAgICAgICAgICAgICAgICAgICB4MmJfYWN0X29rOwotd2lyZSAgICAgICAgICAgICAgICAgICAgeDJiX3Jkb2s7Ci13aXJlICAgICAgICAgICAgICAgICAgICB4MmJfd3JvazsKLXdpcmUgICAgICAgICAgICAgICAgICAgIGIyeF9pZGxlOwotd2lyZSAgICAgICAgICAgICAgICAgICAgYjJ4X3JlcTsKLXdpcmUgICAgICAgICAgICAgICAgICAgIGIyeF9zdGFydDsKLXdpcmUgICAgICAgICAgICAgICAgICAgIGIyeF9sYXN0Owotd2lyZSAgICAgICAgICAgICAgICAgICAgYjJ4X3dyYXA7Ci13aXJlICAgICAgICAgICAgICAgICAgICBiMnhfdHJhc19vazsKLXdpcmUgICAgICAgICAgICAgICAgICAgIGIycl9hY2s7Ci13aXJlICAgICAgICAgICAgICAgICAgICBiMnJfYXJiX29rOwotd2lyZSAgICAgICAgICAgICAgICAgICAgcjJiX3JlcTsKLXdpcmUgICAgICAgICAgICAgICAgICAgIHIyYl9zdGFydDsKLXdpcmUgICAgICAgICAgICAgICAgICAgIHIyYl9sYXN0Owotd2lyZSAgICAgICAgICAgICAgICAgICAgcjJiX3dyYXA7Ci13aXJlICAgICAgICAgICAgICAgICAgICByMmJfd3JpdGU7Ci13aXJlIFtgU0RSX1JFUV9JRF9XLTE6MF1yMmJfcmVxX2lkOwotd2lyZSBbMTowXSAJCXIyYl9iYTsKLXdpcmUgWzEyOjBdIAkJcjJiX3JhZGRyOwotd2lyZSBbMTI6MF0gCQlyMmJfY2FkZHI7Ci13aXJlIFtgUkVRX0JXLTE6MF0gCXIyYl9sZW47Ci0KLS8vIFNEUiBCQU5LIENUTAotd2lyZSBbYFNEUl9SRVFfSURfVy0xOjBdYjJ4X2lkOwotd2lyZSBbMTowXSAJCWIyeF9iYTsKLXdpcmUgWzEyOjBdIAkJYjJ4X2FkZHI7Ci13aXJlIFtgUkVRX0JXLTE6MF0gCWIyeF9sZW47Ci13aXJlIFsxOjBdIAkJYjJ4X2NtZDsKLQotLy8gU0RSX1hGUl9DVEwKLXdpcmUgWzM6MF0gCQl4MmJfcHJlX29rOwotd2lyZSBbYFNEUl9SRVFfSURfVy0xOjBdeGZyX2lkOwotd2lyZSBbQVBQX0RXLTE6MF0gCWFwcF9yZF9kYXRhOwotd2lyZSAJCQlzZHJfY3Nfbiwgc2RyX2NrZSwgc2RyX3Jhc19uLCBzZHJfY2FzX24sIHNkcl93ZV9uOyAKLXdpcmUgW1NEUl9CVy0xOjBdIAlzZHJfZHFtOwotd2lyZSBbMTowXSAJCXNkcl9iYTsKLXdpcmUgWzEyOjBdIAkJc2RyX2FkZHI7Ci13aXJlIFtTRFJfRFctMTowXSAJc2RyX2RvdXQ7Ci13aXJlIFtTRFJfRFctMTowXSAJc2RyX2RvdXRfaW50Owotd2lyZSBbU0RSX0JXLTE6MF0gCXNkcl9kZW5fbjsKLXdpcmUgW1NEUl9CVy0xOjBdIAlzZHJfZGVuX25faW50OwotCi13aXJlIFsxOjBdIAkJeGZyX2Jhbmtfc2VsOwotCi13aXJlIFtBUFBfQVctMTowXSAgICAgICAgYXBwX3JlcV9hZGRyOwotd2lyZSBbQVBQX1JXLTE6MF0gICAgICAgIGFwcF9yZXFfbGVuOwotCi13aXJlIFtBUFBfRFctMTowXSAgICAgICAgYXBwX3dyX2RhdGE7Ci13aXJlIFtTRFJfRFctMTowXSAgICAgICAgYTJ4X3dyZHQgICAgICAgOwotd2lyZSBbQVBQX0JXLTE6MF0gICAgICAgIGFwcF93cl9lbl9uOwotd2lyZSBbU0RSX0JXLTE6MF0gICAgICAgIGEyeF93cmVuX247Ci0KLXdpcmUgICAgICAgICAgICAgICAgICAgICByMnhfaWRsZTsKLQotLy93aXJlIFszMTowXSBhcHBfcmRfZGF0YTsKLXdpcmUgW1NEUl9EVy0xOjBdICAgICAgICB4MmFfcmRkdDsKLQotCi0vLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmIAotICAgd2lyZSBbMzowXSAgICAgICAgICAgc2RyX2NtZDsKLSAgIGFzc2lnbiBzZHJfY21kID0ge3Nkcl9jc19uLCBzZHJfcmFzX24sIHNkcl9jYXNfbiwgc2RyX3dlX259OyAKLS8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbiAKLQotYXNzaWduIHNkcl9kZW5fbiA9IHNkcl9kZW5fbl9pbnQgOyAKLWFzc2lnbiBzZHJfZG91dCAgPSBzZHJfZG91dF9pbnQgOwotCi0KLWFzc2lnbiBkZWJ1ZyAgPSB7cjJ4X2lkbGUscjJiX3JlcSxyMmJfc3RhcnQscjJiX2xhc3QsYjJyX2FjayxiMnJfYXJiX29rLHIyYl93cml0ZSwKLSAgICAgICAgICAgICAgICAgYjJ4X2lkbGUsYjJ4X3JlcSxiMnhfc3RhcnQsYjJ4X3dyYXAseDJiX2FjayxiMnhfdHJhc19vayx4MmJfcmVmcmVzaCx4MmJfcHJlX29rLHgyYl9hY3Rfb2ssCi0JICAgICAgICAgeDJiX3Jkb2sseDJiX3dyb2sseDJhX3Jkc3RhcnQseDJhX3dyc3RhcnQseDJhX3JkbGFzdCx4MmFfd3JsYXN0fTsKLQotLy8gVG8gbWVldCB0aGUgdGltaW5nIGF0IHJlYWQgcGF0aCwgcmVhZCBkYXRhIGlzIHJlZ2lzdGVyZWQgdy5yLnQgcGFkX3NkcmFtX2Nsb2NrIGFuZCByZWdpc3RlciBiYWNrIHRvIHNkcmFtX2NsawotLy8gYXNzdW1wdGlvbiwgcGFkX3NkcmFtX2NsayBpcyBzeW5ocm9ub3VzIGFuZCBkZWxheWVkIGNsb2NrIG9mIHNkcmFtX2Nsay4KLS8vIHJlZ2lzdGVyIHcuci50IHBhZCBzZHJhbSBjbGsKLXJlZyBbU0RSX0RXLTE6MF0gcGFkX3Nkcl9kaW4xOwotcmVnIFtTRFJfRFctMTowXSBwYWRfc2RyX2RpbjI7Ci1hbHdheXNAKHBvc2VkZ2UgcGFkX2NsaykgYmVnaW4KLSAgIHBhZF9zZHJfZGluMSA8PSBwYWRfc2RyX2RpbjsKLWVuZAotCi1hbHdheXNAKHBvc2VkZ2UgY2xrKSBiZWdpbgotICAgcGFkX3Nkcl9kaW4yIDw9IHBhZF9zZHJfZGluMTsKLWVuZAotCi0KLSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgLy8gSW5zdGFudGlhdGUgc2RyX3JlcV9nZW4KLSAgIC8vIFRoaXMgbW9kdWxlIHRha2VzIHJlcXVlc3RzIGZyb20gdGhlIGFwcCwgY2hvcHMgdGhlbSB0byBidXJzdCBib291bmRhcmllcwotICAgLy8gaWYgd3JhcD0wLCBkZWNvZGVzIHRoZSBiYW5rIGFuZCBwYXNzZSB0aGUgcmVxdWVzdCB0byBiYW5rX2N0bAotCi1zZHJjX3JlcV9nZW4gIyguU0RSX0RXKFNEUl9EVykgLCAuU0RSX0JXKFNEUl9CVyksLkFQUF9BVyhBUFBfQVcpKSB1X3JlcV9nZW4gKAotICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICApLAotICAgICAgICAgIC5yZXNldF9uICAgICAgICAgICAgKHJlc2V0X24gICAgICAgICAgICApLAotCSAgLmNmZ19jb2xiaXRzICAgICAgICAoY2ZnX2NvbGJpdHMgICAgICAgICksCi0gICAgICAgICAgLnNkcl93aWR0aCAgICAgICAgICAoc2RyX3dpZHRoICAgICAgICAgICksCi0KLQkvKiBSZXEgdG8geGZyX2N0bCAqLwotICAgICAgICAgIC5yMnhfaWRsZSAgICAgICAgICAgKHIyeF9pZGxlICAgICAgICAgICApLAotCi0JLyogUmVxdWVzdCBmcm9tIGFwcCAqLwotICAgICAgICAgIC5yZXEgICAgICAgICAgICAgICAgKGFwcF9yZXEgICAgICAgICAgICApLAotICAgICAgICAgIC5yZXFfaWQgICAgICAgICAgICAgKDQnYjAgICAgICAgICAgICAgICApLAotICAgICAgICAgIC5yZXFfYWRkciAgICAgICAgICAgKGFwcF9yZXFfYWRkciAgICAgICApLAotICAgICAgICAgIC5yZXFfbGVuICAgICAgICAgICAgKGFwcF9yZXFfbGVuICAgICAgICApLAotICAgICAgICAgIC5yZXFfd3JhcCAgICAgICAgICAgKGFwcF9yZXFfd3JhcCAgICAgICApLAotICAgICAgICAgIC5yZXFfd3JfbiAgICAgICAgICAgKGFwcF9yZXFfd3JfbiAgICAgICApLAotICAgICAgICAgIC5yZXFfYWNrICAgICAgICAgICAgKGFwcF9yZXFfYWNrICAgICAgICApLAotCQkKLSAgICAgICAvKiBSZXEgdG8gYmFua19jdGwgKi8KLSAgICAgICAgICAucjJiX3JlcSAgICAgICAgICAgIChyMmJfcmVxICAgICAgICAgICAgKSwKLSAgICAgICAgICAucjJiX3JlcV9pZCAgICAgICAgIChyMmJfcmVxX2lkICAgICAgICAgKSwKLSAgICAgICAgICAucjJiX3N0YXJ0ICAgICAgICAgIChyMmJfc3RhcnQgICAgICAgICAgKSwKLSAgICAgICAgICAucjJiX2xhc3QgICAgICAgICAgIChyMmJfbGFzdCAgICAgICAgICAgKSwKLSAgICAgICAgICAucjJiX3dyYXAgICAgICAgICAgIChyMmJfd3JhcCAgICAgICAgICAgKSwKLSAgICAgICAgICAucjJiX2JhICAgICAgICAgICAgIChyMmJfYmEgICAgICAgICAgICAgKSwKLSAgICAgICAgICAucjJiX3JhZGRyICAgICAgICAgIChyMmJfcmFkZHIgICAgICAgICAgKSwKLSAgICAgICAgICAucjJiX2NhZGRyICAgICAgICAgIChyMmJfY2FkZHIgICAgICAgICAgKSwKLSAgICAgICAgICAucjJiX2xlbiAgICAgICAgICAgIChyMmJfbGVuICAgICAgICAgICAgKSwKLSAgICAgICAgICAucjJiX3dyaXRlICAgICAgICAgIChyMmJfd3JpdGUgICAgICAgICAgKSwKLSAgICAgICAgICAuYjJyX2FjayAgICAgICAgICAgIChiMnJfYWNrICAgICAgICAgICAgKSwKLSAgICAgICAgICAuYjJyX2FyYl9vayAgICAgICAgIChiMnJfYXJiX29rICAgICAgICAgKQotICAgICApOwotCi0gICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgIC8vIEluc3RhbnRpYXRlIHNkcl9iYW5rX2N0bAotICAgLy8gVGhpcyBtb2R1bGUgdGFrZXMgcmVxdWVzdHMgZnJvbSBzZHJfcmVxX2dlbiwgY2hlY2tzIGZvciBwYWdlIGhpdC9taXNzIGFuZAotICAgLy8gaXNzdWVzIHByZWNoYXJnZS9hY3RpdmF0ZSBjb21tYW5kcyBhbmQgdGhlbiBwYXNzZXMgdGhlIHJlcXVlc3QgdG8KLSAgIC8vIHNkcl94ZnJfY3RsLiAKLQotc2RyY19iYW5rX2N0bCAjKC5TRFJfRFcoU0RSX0RXKSAsICAuU0RSX0JXKFNEUl9CVykpIHVfYmFua19jdGwgKAotICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICApLAotICAgICAgICAgIC5yZXNldF9uICAgICAgICAgICAgKHJlc2V0X24gICAgICAgICAgICApLAotICAgICAgICAgIC5hMmJfcmVxX2RlcHRoICAgICAgKGNmZ19yZXFfZGVwdGggICAgICApLAotCQkJICAgICAgCi0gICAgICAvKiBSZXEgZnJvbSByZXFfZ2VuICovCi0gICAgICAgICAgLnIyYl9yZXEgICAgICAgICAgICAocjJiX3JlcSAgICAgICAgICAgICksCi0gICAgICAgICAgLnIyYl9yZXFfaWQgICAgICAgICAocjJiX3JlcV9pZCAgICAgICAgICksCi0gICAgICAgICAgLnIyYl9zdGFydCAgICAgICAgICAocjJiX3N0YXJ0ICAgICAgICAgICksCi0gICAgICAgICAgLnIyYl9sYXN0ICAgICAgICAgICAocjJiX2xhc3QgICAgICAgICAgICksCi0gICAgICAgICAgLnIyYl93cmFwICAgICAgICAgICAocjJiX3dyYXAgICAgICAgICAgICksCi0gICAgICAgICAgLnIyYl9iYSAgICAgICAgICAgICAocjJiX2JhICAgICAgICAgICAgICksCi0gICAgICAgICAgLnIyYl9yYWRkciAgICAgICAgICAocjJiX3JhZGRyICAgICAgICAgICksCi0gICAgICAgICAgLnIyYl9jYWRkciAgICAgICAgICAocjJiX2NhZGRyICAgICAgICAgICksCi0gICAgICAgICAgLnIyYl9sZW4gICAgICAgICAgICAocjJiX2xlbiAgICAgICAgICAgICksCi0gICAgICAgICAgLnIyYl93cml0ZSAgICAgICAgICAocjJiX3dyaXRlICAgICAgICAgICksCi0gICAgICAgICAgLmIycl9hcmJfb2sgICAgICAgICAoYjJyX2FyYl9vayAgICAgICAgICksCi0gICAgICAgICAgLmIycl9hY2sgICAgICAgICAgICAoYjJyX2FjayAgICAgICAgICAgICksCi0JCQkgICAgICAKLSAgICAgIC8qIFRyYW5zZmVyIHJlcXVlc3QgdG8geGZyX2N0bCAqLwotICAgICAgICAgIC5iMnhfaWRsZSAgICAgICAgICAgKGIyeF9pZGxlICAgICAgICAgICApLAotICAgICAgICAgIC5iMnhfcmVxICAgICAgICAgICAgKGIyeF9yZXEgICAgICAgICAgICApLAotICAgICAgICAgIC5iMnhfc3RhcnQgICAgICAgICAgKGIyeF9zdGFydCAgICAgICAgICApLAotICAgICAgICAgIC5iMnhfbGFzdCAgICAgICAgICAgKGIyeF9sYXN0ICAgICAgICAgICApLAotICAgICAgICAgIC5iMnhfd3JhcCAgICAgICAgICAgKGIyeF93cmFwICAgICAgICAgICApLAotICAgICAgICAgIC5iMnhfaWQgICAgICAgICAgICAgKGIyeF9pZCAgICAgICAgICAgICApLAotICAgICAgICAgIC5iMnhfYmEgICAgICAgICAgICAgKGIyeF9iYSAgICAgICAgICAgICApLAotICAgICAgICAgIC5iMnhfYWRkciAgICAgICAgICAgKGIyeF9hZGRyICAgICAgICAgICApLAotICAgICAgICAgIC5iMnhfbGVuICAgICAgICAgICAgKGIyeF9sZW4gICAgICAgICAgICApLAotICAgICAgICAgIC5iMnhfY21kICAgICAgICAgICAgKGIyeF9jbWQgICAgICAgICAgICApLAotICAgICAgICAgIC54MmJfYWNrICAgICAgICAgICAgKHgyYl9hY2sgICAgICAgICAgICApLAotCQkgICAgIAotICAgICAgLyogU3RhdHVzIGZyb20geGZyX2N0bCAqLwotICAgICAgICAgIC5iMnhfdHJhc19vayAgICAgICAgKGIyeF90cmFzX29rICAgICAgICApLAotICAgICAgICAgIC54MmJfcmVmcmVzaCAgICAgICAgKHgyYl9yZWZyZXNoICAgICAgICApLAotICAgICAgICAgIC54MmJfcHJlX29rICAgICAgICAgKHgyYl9wcmVfb2sgICAgICAgICApLAotICAgICAgICAgIC54MmJfYWN0X29rICAgICAgICAgKHgyYl9hY3Rfb2sgICAgICAgICApLAotICAgICAgICAgIC54MmJfcmRvayAgICAgICAgICAgKHgyYl9yZG9rICAgICAgICAgICApLAotICAgICAgICAgIC54MmJfd3JvayAgICAgICAgICAgKHgyYl93cm9rICAgICAgICAgICApLAotCi0gICAgICAvKiBmb3IgZ2VuZXJhdGUgY3V1cmVudCB4ZnIgYWRkcmVzcyBtc2IgKi8KLSAgICAgICAgICAuc2RyX3JlcV9ub3JtX2RtYV9sYXN0KGFwcF9yZXFfZG1hX2xhc3QpLAotICAgICAgICAgIC54ZnJfYmFua19zZWwgICAgICAgKHhmcl9iYW5rX3NlbCAgICAgICApLAotCi0gICAgICAgLyogU0RSQU0gVGltaW5nICovCi0gICAgICAgICAgLnRyYXNfZGVsYXkgICAgICAgICAoY2ZnX3Nkcl90cmFzX2QgICAgICksCi0gICAgICAgICAgLnRycF9kZWxheSAgICAgICAgICAoY2ZnX3Nkcl90cnBfZCAgICAgICksCi0gICAgICAgICAgLnRyY2RfZGVsYXkgICAgICAgICAoY2ZnX3Nkcl90cmNkX2QgICAgICkKLSAgICAgICk7Ci0gICAKLSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgLy8gSW5zdGFudGlhdGUgc2RyX3hmcl9jdGwKLSAgIC8vIFRoaXMgbW9kdWxlIHRha2VzIHJlcXVlc3RzIGZyb20gc2RyX2JhbmtfY3RsLCBydW5zIHRoZSB0cmFuc2ZlciBhbmQKLSAgIC8vIGNvbnRyb2xzIGRhdGEgZmxvdyB0by9mcm9tIHRoZSBhcHAuIEF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zZmVyIGl0IGlzc3VlcyBhCi0gICAvLyBidXJzdCB0ZXJtaW5hdGUgaWYgbm90IGF0IHRoZSBlbmQgb2YgYSBidXJzdCBhbmQgYW5vdGhlciBjb21tYW5kIHRvIHRoaXMKLSAgIC8vIGJhbmsgaXMgbm90IGF2YWlsYWJsZS4KLQotc2RyY194ZnJfY3RsICMoLlNEUl9EVyhTRFJfRFcpICwgIC5TRFJfQlcoU0RSX0JXKSkgdV94ZnJfY3RsICgKLSAgICAgICAgICAuY2xrICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgKSwKLSAgICAgICAgICAucmVzZXRfbiAgICAgICAgICAgIChyZXNldF9uICAgICAgICAgICAgKSwKLQkJCSAgICAKLSAgICAgIC8qIFRyYW5zZmVyIHJlcXVlc3QgZnJvbSBiYW5rX2N0bCAqLwotICAgICAgICAgIC5yMnhfaWRsZSAgICAgICAgICAgKHIyeF9pZGxlICAgICAgICAgICApLAotICAgICAgICAgIC5iMnhfaWRsZSAgICAgICAgICAgKGIyeF9pZGxlICAgICAgICAgICApLAotICAgICAgICAgIC5iMnhfcmVxICAgICAgICAgICAgKGIyeF9yZXEgICAgICAgICAgICApLAotICAgICAgICAgIC5iMnhfc3RhcnQgICAgICAgICAgKGIyeF9zdGFydCAgICAgICAgICApLAotICAgICAgICAgIC5iMnhfbGFzdCAgICAgICAgICAgKGIyeF9sYXN0ICAgICAgICAgICApLAotICAgICAgICAgIC5iMnhfd3JhcCAgICAgICAgICAgKGIyeF93cmFwICAgICAgICAgICApLAotICAgICAgICAgIC5iMnhfaWQgICAgICAgICAgICAgKGIyeF9pZCAgICAgICAgICAgICApLAotICAgICAgICAgIC5iMnhfYmEgICAgICAgICAgICAgKGIyeF9iYSAgICAgICAgICAgICApLAotICAgICAgICAgIC5iMnhfYWRkciAgICAgICAgICAgKGIyeF9hZGRyICAgICAgICAgICApLAotICAgICAgICAgIC5iMnhfbGVuICAgICAgICAgICAgKGIyeF9sZW4gICAgICAgICAgICApLAotICAgICAgICAgIC5iMnhfY21kICAgICAgICAgICAgKGIyeF9jbWQgICAgICAgICAgICApLAotICAgICAgICAgIC54MmJfYWNrICAgICAgICAgICAgKHgyYl9hY2sgICAgICAgICAgICApLAotCQkgICAgIAotICAgICAgIC8qIFN0YXR1cyB0byBiYW5rX2N0bCwgcmVxX2dlbiAqLwotICAgICAgICAgIC5iMnhfdHJhc19vayAgICAgICAgKGIyeF90cmFzX29rICAgICAgICApLAotICAgICAgICAgIC54MmJfcmVmcmVzaCAgICAgICAgKHgyYl9yZWZyZXNoICAgICAgICApLAotICAgICAgICAgIC54MmJfcHJlX29rICAgICAgICAgKHgyYl9wcmVfb2sgICAgICAgICApLAotICAgICAgICAgIC54MmJfYWN0X29rICAgICAgICAgKHgyYl9hY3Rfb2sgICAgICAgICApLAotICAgICAgICAgIC54MmJfcmRvayAgICAgICAgICAgKHgyYl9yZG9rICAgICAgICAgICApLAotICAgICAgICAgIC54MmJfd3JvayAgICAgICAgICAgKHgyYl93cm9rICAgICAgICAgICApLAotCQkgICAgCi0gICAgICAgLyogU0RSQU0gSS9PICovCi0gICAgICAgICAgLnNkcl9jc19uICAgICAgICAgICAoc2RyX2NzX24gICAgICAgICAgICksCi0gICAgICAgICAgLnNkcl9ja2UgICAgICAgICAgICAoc2RyX2NrZSAgICAgICAgICAgICksCi0gICAgICAgICAgLnNkcl9yYXNfbiAgICAgICAgICAoc2RyX3Jhc19uICAgICAgICAgICksCi0gICAgICAgICAgLnNkcl9jYXNfbiAgICAgICAgICAoc2RyX2Nhc19uICAgICAgICAgICksCi0gICAgICAgICAgLnNkcl93ZV9uICAgICAgICAgICAoc2RyX3dlX24gICAgICAgICAgICksCi0gICAgICAgICAgLnNkcl9kcW0gICAgICAgICAgICAoc2RyX2RxbSAgICAgICAgICAgICksCi0gICAgICAgICAgLnNkcl9iYSAgICAgICAgICAgICAoc2RyX2JhICAgICAgICAgICAgICksCi0gICAgICAgICAgLnNkcl9hZGRyICAgICAgICAgICAoc2RyX2FkZHIgICAgICAgICAgICksCi0gICAgICAgICAgLnNkcl9kaW4gICAgICAgICAgICAocGFkX3Nkcl9kaW4yICAgICAgICksCi0gICAgICAgICAgLnNkcl9kb3V0ICAgICAgICAgICAoc2RyX2RvdXRfaW50ICAgICAgICksCi0gICAgICAgICAgLnNkcl9kZW5fbiAgICAgICAgICAoc2RyX2Rlbl9uX2ludCAgICAgICksCi0gICAgICAvKiBEYXRhIEZsb3cgdG8gdGhlIGFwcCAqLwotICAgICAgICAgIC54MmFfcmRzdGFydCAgICAgICAgKHgyYV9yZHN0YXJ0ICAgICAgICApLAotICAgICAgICAgIC54MmFfd3JzdGFydCAgICAgICAgKHgyYV93cnN0YXJ0ICAgICAgICApLAotICAgICAgICAgIC54MmFfaWQgICAgICAgICAgICAgKHhmcl9pZCAgICAgICAgICAgICApLAotICAgICAgICAgIC54MmFfcmRsYXN0ICAgICAgICAgKHgyYV9yZGxhc3QgICAgICAgICApLAotICAgICAgICAgIC54MmFfd3JsYXN0ICAgICAgICAgKHgyYV93cmxhc3QgICAgICAgICApLAotICAgICAgICAgIC5hMnhfd3JkdCAgICAgICAgICAgKGEyeF93cmR0ICAgICAgICAgICApLAotICAgICAgICAgIC5hMnhfd3Jlbl9uICAgICAgICAgKGEyeF93cmVuX24gICAgICAgICApLAotICAgICAgICAgIC54MmFfd3JuZXh0ICAgICAgICAgKHgyYV93cm5leHQgICAgICAgICApLAotICAgICAgICAgIC54MmFfcmRkdCAgICAgICAgICAgKHgyYV9yZGR0ICAgICAgICAgICApLAotICAgICAgICAgIC54MmFfcmRvayAgICAgICAgICAgKHgyYV9yZG9rICAgICAgICAgICApLAotICAgICAgICAgIC5zZHJfaW5pdF9kb25lICAgICAgKHNkcl9pbml0X2RvbmUgICAgICApLAotCQkJICAgIAotICAgICAgLyogU0RSQU0gUGFyYW1ldGVycyAqLwotICAgICAgICAgIC5zZHJhbV9lbmFibGUgICAgICAgKGNmZ19zZHJfZW4gICAgICAgICApLAotICAgICAgICAgIC5zZHJhbV9tb2RlX3JlZyAgICAgKGNmZ19zZHJfbW9kZV9yZWcgICApLAotCQkgICAgCi0gICAgICAvKiBjdXJyZW50IHhmciBiYW5rICovCi0gICAgICAgICAgLnhmcl9iYW5rX3NlbCAgICAgICAoeGZyX2Jhbmtfc2VsICAgICAgICksCi0KLSAgICAgIC8qIFNEUkFNIFRpbWluZyAqLwotICAgICAgICAgIC5jYXNfbGF0ZW5jeSAgICAgICAgKGNmZ19zZHJfY2FzICAgICAgICApLAotICAgICAgICAgIC50cnBfZGVsYXkgICAgICAgICAgKGNmZ19zZHJfdHJwX2QgICAgICApLAotICAgICAgICAgIC50cmNhcl9kZWxheSAgICAgICAgKGNmZ19zZHJfdHJjYXJfZCAgICApLAotICAgICAgICAgIC50d3JfZGVsYXkgICAgICAgICAgKGNmZ19zZHJfdHdyX2QgICAgICApLAotICAgICAgICAgIC5yZnNoX3RpbWUgICAgICAgICAgKGNmZ19zZHJfcmZzaCAgICAgICApLAotICAgICAgICAgIC5yZnNoX3JtYXggICAgICAgICAgKGNmZ19zZHJfcmZtYXggICAgICApCi0gICAgKTsKLSAgIAotICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAvLyBJbnN0YW50aWF0ZSBzZHJfYnNfY29udmVydAotICAgLy8gICAgVGhpcyBtb2RlbCBoYW5kbGUgdGhlIGJ1cyB3aXRoIHRyYW5zYWx0aW9uIGZyb20gYXBwbGljYXRpb24gbGF5ZXIgdG8KLSAgIC8vICAgICAgIDgvMTYvMzIgU0RSQU0gTWVtb3J5IGZvcm1hdAotICAgLy8gICAgIER1cmluZyBXcml0ZSBQaGFzZSwgdGhpcyBibG9jayBzcGxpdCB0aGUgZGF0YSBhcyBwZXIgU0RSQU0gV2lkdGgKLSAgIC8vICAgICBEdXJpbmcgUmVhZCBQaGFzZSwgVGhpcyBibG9jayBkb2VzIHRoZSByZS1wYWNraW5nIGJhc2VkIG9uIFNEUkFNCi0gICAvLyAgICAgV2lkdGgKLSAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zZHJjX2JzX2NvbnZlcnQgIyguU0RSX0RXKFNEUl9EVykgLCAgLlNEUl9CVyhTRFJfQlcpKSB1X2JzX2NvbnZlcnQgKAotICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICApLAotICAgICAgICAgIC5yZXNldF9uICAgICAgICAgICAgKHJlc2V0X24gICAgICAgICAgICApLAotICAgICAgICAgIC5zZHJfd2lkdGggICAgICAgICAgKHNkcl93aWR0aCAgICAgICAgICApLAotCi0gICAvKiBDb250cm9sIFNpZ25hbCBmcm9tIHhmciBjdHJsICovCi0gICAgICAgICAgLy8gUmVhZCBJbnRlcmZhY2UgSW5wdXRzCi0gICAgICAgICAgLngyYV9yZHN0YXJ0ICAgICAgICAoeDJhX3Jkc3RhcnQgICAgICAgICksCi0gICAgICAgICAgLngyYV9yZGxhc3QgICAgICAgICAoeDJhX3JkbGFzdCAgICAgICAgICksCi0gICAgICAgICAgLngyYV9yZG9rICAgICAgICAgICAoeDJhX3Jkb2sgICAgICAgICAgICksCi0JICAvLyBSZWFkIEludGVyZmFjZSBvdXRwdXRzCi0gICAgICAgICAgLngyYV9yZGR0ICAgICAgICAgICAoeDJhX3JkZHQgICAgICAgICAgICksCi0KLSAgICAgICAgICAvLyBXcml0ZSBJbnRlcmZhY2UsIElucHV0cwotICAgICAgICAgIC54MmFfd3JzdGFydCAgICAgICAgKHgyYV93cnN0YXJ0ICAgICAgICApLAotICAgICAgICAgIC54MmFfd3JsYXN0ICAgICAgICAgKHgyYV93cmxhc3QgICAgICAgICApLAotICAgICAgICAgIC54MmFfd3JuZXh0ICAgICAgICAgKHgyYV93cm5leHQgICAgICAgICApLAotCi0gICAgICAgICAgLy8gV3JpdGUgSW50ZXJmYWNlLCBPdXRwdXRzCi0gICAgICAgICAgLmEyeF93cmR0ICAgICAgICAgICAoYTJ4X3dyZHQgICAgICAgICAgICksCi0gICAgICAgICAgLmEyeF93cmVuX24gICAgICAgICAoYTJ4X3dyZW5fbiAgICAgICAgICksCi0KLSAgIC8qIENvbnRyb2wgU2lnbmFsIGZyb20gc2RyY19iYW5rX2N0bCAgKi8KLQotICAgLyogIENvbnRyb2wgU2lnbmFsIGZyb20vdG8gdG8gYXBwbGljYXRpb24gaS9mICAqLwotICAgICAgICAgIC5hcHBfd3JfZGF0YSAgICAgICAgKGFwcF93cl9kYXRhICAgICAgICApLAotICAgICAgICAgIC5hcHBfd3JfZW5fbiAgICAgICAgKGFwcF93cl9lbl9uICAgICAgICApLAotICAgICAgICAgIC5hcHBfd3JfbmV4dCAgICAgICAgKGFwcF93cl9uZXh0X3JlcSAgICApLAotCSAgLmFwcF9sYXN0X3dyICAgICAgICAoYXBwX2xhc3Rfd3IgICAgICAgICksCi0gICAgICAgICAgLmFwcF9yZF9kYXRhICAgICAgICAoYXBwX3JkX2RhdGEgICAgICAgICksCi0gICAgICAgICAgLmFwcF9yZF92YWxpZCAgICAgICAoYXBwX3JkX3ZhbGlkICAgICAgICksCi0JICAuYXBwX2xhc3RfcmQgICAgICAgIChhcHBfbGFzdF9yZCAgICAgICAgKQotCi0gICAgICAgKTsgICAKLSAgIAotZW5kbW9kdWxlIC8vIHNkcmNfY29yZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvY29yZS9zZHJjX3JlcV9nZW4udiBiL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2NvcmUvc2RyY19yZXFfZ2VuLnYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDhlYTAxNDguLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvY29yZS9zZHJjX3JlcV9nZW4udgorKysgL2Rldi9udWxsCkBAIC0xLDM2MCArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgotLy8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIFNEUkFNIENvbnRyb2xsZXIgUmVxdWVzdCBHZW5lcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHNkcmFtIGNvbnRyb2xsZXIgcHJvamVjdCAgICAgICAgICAgCi0gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQKLSAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgIAotICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvc2RyX2N0cmwvICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIERlc2NyaXB0aW9uOiBTRFJBTSBDb250cm9sbGVyIFJlZ3Vlc3QgR2VuZXJhdGlvbgotCi0gIEFkZHJlc3MgR2VuZXJhdGlvbiBCYXNlZCBvbiBjZmdfY29sYml0cwotICAgICBjZmdfY29sYml0cz0gMidiMDAKLSAgICAgICAgICAgIEFkZHJlc3NbNzowXSAgICAtIENvbHVtbiBBZGRyZXNzCi0gICAgICAgICAgICBBZGRyZXNzWzk6OF0gICAgLSBCYW5rIEFkZHJlc3MKLSAgICAgICAgICAgIEFkZHJlc3NbMjI6MTBdICAtIFJvdyBBZGRyZXNzCi0gICAgIGNmZ19jb2xiaXRzPSAyJ2IwMQotICAgICAgICAgICAgQWRkcmVzc1s4OjBdICAgIC0gQ29sdW1uIEFkZHJlc3MKLSAgICAgICAgICAgIEFkZHJlc3NbMTA6OV0gICAtIEJhbmsgQWRkcmVzcwotICAgICAgICAgICAgQWRkcmVzc1syMzoxMV0gIC0gUm93IEFkZHJlc3MKLSAgICAgY2ZnX2NvbGJpdHM9IDInYjEwCi0gICAgICAgICAgICBBZGRyZXNzWzk6MF0gICAgLSBDb2x1bW4gQWRkcmVzcwotICAgICAgICAgICAgQWRkcmVzc1sxMToxMF0gICAtIEJhbmsgQWRkcmVzcwotICAgICAgICAgICAgQWRkcmVzc1syNDoxMl0gIC0gUm93IEFkZHJlc3MKLSAgICAgY2ZnX2NvbGJpdHM9IDInYjExCi0gICAgICAgICAgICBBZGRyZXNzWzEwOjBdICAgIC0gQ29sdW1uIEFkZHJlc3MKLSAgICAgICAgICAgIEFkZHJlc3NbMTI6MTFdICAgLSBCYW5rIEFkZHJlc3MKLSAgICAgICAgICAgIEFkZHJlc3NbMjU6MTNdICAtIFJvdyBBZGRyZXNzCi0KLSAgVGhlIFNEUkFNcyBhcmUgb3BlcmF0ZWQgaW4gNCBiZWF0IGJ1cnN0IG1vZGUuCi0KLSAgSWYgV3JhcCA9IDA7IAotICAgICAgSWYgdGhlIGN1cnJlbnQgYnVyc3QgY3Jvc3MgdGhlIHBhZ2UgYm91bmRhcnksIHRoZW4gdGhpcyBibG9jayBzcGxpdCB0aGUgcmVxdWVzdCAKLSAgICAgIGludG8gdHdvIGNvcmVzc3BvbmRpbmcgY2hhbmdlIGluIGFkZHJlc3MgYW5kIHJlcXVlc3QgbGVuZ3RoCi0KLSAgaWYgdGhlIGN1cnJlbnQgYnVyc3QgY3Jvc3MgdGhlIHBhZ2UgYm91bmRhci4KLSAgVGhpcyBtb2R1bGUgdGFrZXMgcmVxdWVzdHMgZnJvbSB0aGUgbWVtb3J5IGNvbnRyb2xsZXIsIAotICBjaG9wcyB0aGVtIHRvIHBhZ2UgYm91bmRhcmllcyBpZiB3cmFwPTAsIAotICBhbmQgcGFzc2VzIHRoZSByZXF1ZXN0IHRvIGJhbmtfY3RsCi0KLSAgTm90ZTogV2l0aCBXcmFwID0gMCwgZWFjaCByZXF1ZXN0IGZyb20gQXBwbGljYXRpb24gbGF5ZXIgd2lsbCBiZSBzcGxpdGVkIGludG8gdHdvIHJlcXVlc3QsIAotCWlmIHRoZSBjdXJyZW50IGJ1cnN0IGNyb3NzIHRoZSBwYWdlIGJvdW5kYXJ5LiAKLQotICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgCi0gIFZlcnNpb24gIDogMC4wIC0gOHRoIEphbiAyMDEyCi0gICAgICAgICAgICAgMC4xIC0gNXRoIEZlYiAyMDEyLCBjb2x1bW4vcm93L2JhbmsgYWRkcmVzcyBhcmUgcmVnaXN0ZXIgdG8gaW1wcm92ZSB0aGUgdGltaW5nIGlzc3VlIGluIEZQR0Egc3ludGhlc2lzCi0JICAgICAwLjIgLSAxOXRoIEF1ZyAyMDIxLCBBZGRyZXNzIE1hcHBpbmcgZml4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIAotIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAKLSByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgCi0gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgCi0gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIAotIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAKLSBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgCi1sYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAKLSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgCi0gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIAotIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAKLSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAKLSBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgCi0gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWBpbmNsdWRlICJzZHJjX2RlZmluZS52IgotCi1tb2R1bGUgc2RyY19yZXFfZ2VuIChjbGssCi0JCSAgICByZXNldF9uLAotCQkgICAgY2ZnX2NvbGJpdHMsCi0JCSAgICBzZHJfd2lkdGgsCi0KLQkJICAgIC8qIFJlcXVlc3QgZnJvbSBhcHAgKi8KLQkJICAgIHJlcSwJICAgICAgICAvLyBUcmFuc2ZlciBSZXF1ZXN0Ci0JCSAgICByZXFfaWQsCSAgICAgICAgLy8gSUQgZm9yIHRoaXMgdHJhbnNmZXIKLQkJICAgIHJlcV9hZGRyLAkgICAgICAgIC8vIFNEUkFNIEFkZHJlc3MKLQkJICAgIHJlcV9sZW4sCSAgICAgICAgLy8gQnVyc3QgTGVuZ3RoIChpbiAzMiBiaXQgd29yZHMpCi0JCSAgICByZXFfd3JhcCwJICAgICAgICAvLyBXcmFwIG1vZGUgcmVxdWVzdCAoeGZyX2xlbiA9IDQpCi0JCSAgICByZXFfd3JfbiwJICAgICAgICAvLyAwID0+IFdyaXRlIHJlcXVlc3QsIDEgPT4gcmVhZCByZXEKLQkJICAgIHJlcV9hY2ssCSAgICAgICAgLy8gUmVxdWVzdCBoYXMgYmVlbiBhY2NlcHRlZAotCQkgICAgCi0JCSAgICAvKiBSZXEgdG8geGZyX2N0bCAqLwotCQkgICAgcjJ4X2lkbGUsCi0KLQkJICAgIC8qIFJlcSB0byBiYW5rX2N0bCAqLwotCQkgICAgcjJiX3JlcSwJICAgICAgICAvLyByZXF1ZXN0Ci0JCSAgICByMmJfcmVxX2lkLAkgICAgICAgIC8vIElECi0JCSAgICByMmJfc3RhcnQsCSAgICAgICAgLy8gRmlyc3QgY2h1bmsgb2YgYnVyc3QKLQkJICAgIHIyYl9sYXN0LAkgICAgICAgIC8vIExhc3QgY2h1bmsgb2YgYnVyc3QKLQkJICAgIHIyYl93cmFwLAkgICAgICAgIC8vIFdyYXAgTW9kZQotCQkgICAgcjJiX2JhLAkgICAgICAgIC8vIGJhbmsgYWRkcmVzcwotCQkgICAgcjJiX3JhZGRyLAkgICAgICAgIC8vIHJvdyBhZGRyZXNzCi0JCSAgICByMmJfY2FkZHIsCSAgICAgICAgLy8gY29sIGFkZHJlc3MKLQkJICAgIHIyYl9sZW4sCSAgICAgICAgLy8gbGVuZ3RoCi0JCSAgICByMmJfd3JpdGUsCSAgICAgICAgLy8gd3JpdGUgcmVxdWVzdAotCQkgICAgYjJyX2FjaywKLQkJICAgIGIycl9hcmJfb2sKLQkJICAgICk7Ci0KLXBhcmFtZXRlciAgQVBQX0FXICAgPSAyNjsgIC8vIEFwcGxpY2F0aW9uIEFkZHJlc3MgV2lkdGgKLXBhcmFtZXRlciAgQVBQX0RXICAgPSAzMjsgIC8vIEFwcGxpY2F0aW9uIERhdGEgV2lkdGggCi1wYXJhbWV0ZXIgIEFQUF9CVyAgID0gNDsgICAvLyBBcHBsaWNhdGlvbiBCeXRlIFdpZHRoCi1wYXJhbWV0ZXIgIEFQUF9SVyAgID0gOTsgICAvLyBBcHBsaWNhdGlvbiBSZXF1ZXN0IFdpZHRoCi0KLXBhcmFtZXRlciAgU0RSX0RXICAgPSAxNjsgIC8vIFNEUiBEYXRhIFdpZHRoIAotcGFyYW1ldGVyICBTRFJfQlcgICA9IDI7ICAgLy8gU0RSIEJ5dGUgV2lkdGgKLQotCi1pbnB1dCAgICAgICAgICAgICAgICAgICBjbGsgICAgICAgICAgIDsKLWlucHV0ICAgICAgICAgICAgICAgICAgIHJlc2V0X24gICAgICAgOwotaW5wdXQgWzE6MF0gICAgICAgICAgICAgY2ZnX2NvbGJpdHMgICA7IC8vIDInYjAwIC0gOCBCaXQgY29sdW1uIGFkZHJlc3MsIDInYjAxIC0gOSBCaXQsIDEwIC0gMTAgYml0LCAxMSAtIDExQml0cwotCi0vKiBSZXF1ZXN0IGZyb20gYXBwICovCi1pbnB1dCAJCQlyZXEgICAgICAgICAgIDsgLy8gUmVxdWVzdCAKLWlucHV0IFtgU0RSX1JFUV9JRF9XLTE6MF0gcmVxX2lkICAgICAgOyAvLyBSZXF1ZXN0IElECi1pbnB1dCBbQVBQX0FXLTE6MF0gCXJlcV9hZGRyICAgICAgOyAvLyBSZXF1ZXN0IEFkZHJlc3MKLWlucHV0IFtBUFBfUlctMTowXSAJcmVxX2xlbiAgICAgICA7IC8vIFJlcXVlc3QgbGVuZ3RoCi1pbnB1dCAJCQlyZXFfd3JfbiAgICAgIDsgLy8gMCAtV3JpdGUsIDEgLSBSZWFkCi1pbnB1dCAgICAgICAgICAgICAgICAgICByZXFfd3JhcCAgICAgIDsgLy8gMSAtIFdyYXAgdGhlIEFkZHJlc3Mgb24gcGFnZSBib3VuZGFyeQotb3V0cHV0IAkJCXJlcV9hY2sgICAgICAgOyAvLyBSZXF1ZXN0IEFjawotCQkKLS8qIFJlcSB0byBiYW5rX2N0bCAqLwotb3V0cHV0IAkJCXIyeF9pZGxlICAgICAgOyAKLW91dHB1dCAgICAgICAgICAgICAgICAgIHIyYl9yZXEgICAgICAgOyAvLyBSZXF1ZXN0Ci1vdXRwdXQgICAgICAgICAgICAgICAgICByMmJfc3RhcnQgICAgIDsgLy8gRmlyc3QgSnVuayBvZiB0aGUgQnVyc3QgQWNjZXNzCi1vdXRwdXQgICAgICAgICAgICAgICAgICByMmJfbGFzdCAgICAgIDsgLy8gTGFzdCBKdW5rIG9mIHRoZSBCdXJzdCBBY2Nlc3MKLW91dHB1dCAgICAgICAgICAgICAgICAgIHIyYl93cml0ZSAgICAgOyAvLyAxIC0gV3JpdGUsIDAgLSBSZWFkCi1vdXRwdXQgICAgICAgICAgICAgICAgICByMmJfd3JhcCAgICAgIDsgLy8gMSAtIFdyYXAgdGhlIEFkZHJlc3MgYXQgdGhlIHBhZ2UgYm91bmRhcnkuCi1vdXRwdXQgW2BTRFJfUkVRX0lEX1ctMTowXSAJcjJiX3JlcV9pZDsKLW91dHB1dCBbMTowXSAJCXIyYl9iYSAgICAgICAgOyAvLyBCYW5rIEFkZHJlc3MKLW91dHB1dCBbMTI6MF0gCQlyMmJfcmFkZHIgICAgIDsgLy8gUm93IEFkZHJlc3MKLW91dHB1dCBbMTI6MF0gCQlyMmJfY2FkZHIgICAgIDsgLy8gQ29sdW1uIEFkZHJlc3MKLW91dHB1dCBbYFJFUV9CVy0xOjBdIAlyMmJfbGVuICAgICAgIDsgLy8gQnVyc3QgTGVuZ3RoCi1pbnB1dCAJCQliMnJfYWNrICAgICAgIDsgLy8gUmVxdWVzdCBBY2sKLWlucHV0ICAgICAgICAgICAgICAgICAgIGIycl9hcmJfb2sgICAgOyAvLyBCYW5rIGNvbnRyb2xsZXIgZmlmbyBpcyBub3QgZnVsbCBhbmQgcmVhZHkgdG8gYWNjZXB0IHRoZSBjb21tYW5kCi0vLwotaW5wdXQgWzE6MF0gCSAgICAgICAgc2RyX3dpZHRoOyAvLyAyJ2IwMCAtIDMyIEJpdCwgMidiMDEgLSAxNiBCaXQsIDInYjF4IC0gOEJpdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAvLyBJbnRlcm5hbCBOZXRzCi0KLSAgIGBkZWZpbmUgUkVRX0lETEUgICAgICAgIDInYjAwCi0gICBgZGVmaW5lIFJFUV9BQ1RJVkUgICAgICAyJ2IwMQotICAgYGRlZmluZSBSRVFfUEFHRV9XUkFQICAgMidiMTAKLQotICAgcmVnICBbMTowXQkJcmVxX3N0LCBuZXh0X3JlcV9zdDsKLSAgIHJlZyAJCQlyMnhfaWRsZSwgcmVxX2FjaywgcjJiX3JlcSwgcjJiX3N0YXJ0LCAKLQkJCXIyYl93cml0ZSwgcmVxX2lkbGUsIHJlcV9sZCwgbGNsX3dyYXA7Ci0gICByZWcgW2BTRFJfUkVRX0lEX1ctMTowXSAJcjJiX3JlcV9pZDsKLSAgIHJlZyBbYFJFUV9CVy0xOjBdIAlsY2xfcmVxX2xlbjsKLQotICAgd2lyZSAJCXIyYl9sYXN0LCBwYWdlX292Zmx3OwotICAgcmVnIHBhZ2Vfb3ZmbHdfcjsKLSAgIHdpcmUgW2BSRVFfQlctMTowXSAJcjJiX2xlbiwgbmV4dF9yZXFfbGVuOwotICAgd2lyZSBbMTI6MF0gCSAgICAgICAgbWF4X3IyYl9sZW47Ci0gICByZWcgIFsxMjowXSAJICAgICAgICBtYXhfcjJiX2xlbl9yOwotCi0gICByZWcgWzE6MF0gCQlyMmJfYmE7Ci0gICByZWcgWzEyOjBdIAkJcjJiX3JhZGRyOwotICAgcmVnIFsxMjowXSAJCXIyYl9jYWRkcjsKLQotICAgcmVnIFtBUFBfQVctMTowXSAJY3Vycl9zZHJfYWRkciA7Ci0gICB3aXJlIFtBUFBfQVctMTowXSAJbmV4dF9zZHJfYWRkciA7Ci0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gR2VuZXJhdGUgdGhlIGludGVybmFsIEFkcmVzcyBhbmQgQnVyc3QgbGVuZ3RoIEJhc2VkIG9uIHNkcmFtIHdpZHRoCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1yZWcgW0FQUF9BVzowXSAgICAgICAgICAgcmVxX2FkZHJfaW50OwotcmVnIFtBUFBfUlctMTowXSAgICAgICAgIHJlcV9sZW5faW50OwotCi1hbHdheXMgQCgqKSBiZWdpbgotICAgaWYoc2RyX3dpZHRoID09IDInYjAwKSBiZWdpbiAvLyAzMiBCaXQgU0RSIE1vZGUKLSAgICAgIHJlcV9hZGRyX2ludCAgICAgPSB7MSdiMCxyZXFfYWRkcn07Ci0gICAgICByZXFfbGVuX2ludCAgICAgID0gcmVxX2xlbjsKLSAgIGVuZCBlbHNlIGlmKHNkcl93aWR0aCA9PSAyJ2IwMSkgYmVnaW4gLy8gMTYgQml0IFNEUiBNb2RlCi0gICAgICAvLyBDaGFuZ2VkIHRoZSBhZGRyZXNzIGFuZCBsZW5ndGggdG8gbWF0Y2ggdGhlIDE2IGJpdCBTRFIgTW9kZQotICAgICAgcmVxX2FkZHJfaW50ICAgICA9IHsxJ2IwLHJlcV9hZGRyfTsKLSAgICAgIHJlcV9sZW5faW50ICAgICAgPSB7cmVxX2xlbiwxJ2IwfTsKLSAgIGVuZCBlbHNlICBiZWdpbiAvLyA4IEJpdCBTRFIgTW9kZQotICAgICAgLy8gQ2hhbmdlZCB0aGUgYWRkcmVzcyBhbmQgbGVuZ3RoIHRvIG1hdGNoIHRoZSAxNiBiaXQgU0RSIE1vZGUKLSAgICAgIHJlcV9hZGRyX2ludCAgICAgPSB7MSdiMCxyZXFfYWRkcn07Ci0gICAgICByZXFfbGVuX2ludCAgICAgPSB7cmVxX2xlbiwyJ2IwfTsKLSAgIGVuZAotZW5kCi0KLSAgIC8vCi0gICAvLyBJZGVudGlmeSB0aGUgcGFnZSBvdmVyIGZsb3cuCi0gICAvLyBGaW5kIHRoZSBNYXhpbXVtIEJ1cnN0IGxlbmd0aCBhbGxvd2VkIGZyb20gdGhlIHNlbGVjdGVkIGNvbHVtbgotICAgLy8gYWRkcmVzcywgSWYgdGhlIHJlcXVlc3RlZCBidXJzdCBsZW5ndGggaXMgbW9yZSB0aGFuIHRoZSBhbGxvd2VkIE1heGltdW0KLSAgIC8vIGJ1cnN0IGxlbmd0aCwgdGhlbiB3ZSBuZWVkIHRvIGhhbmRsZSB0aGUgYmFuayBjcm9zcyBvdmVyIGNhc2UgYW5kIHdlCi0gICAvLyBuZWVkIHRvIHNwbGl0IHRoZSByZXVlc3QuCi0gICAvLwotICAgYXNzaWduIG1heF9yMmJfbGVuID0gKGNmZ19jb2xiaXRzID09IDInYjAwKSA/ICgxMidoMTAwIC0gezQnYjAsIHJlcV9hZGRyX2ludFs3OjBdfSkgOgotCSAgICAgICAgICAgICAgICAoY2ZnX2NvbGJpdHMgPT0gMidiMDEpID8gKDEyJ2gyMDAgLSB7MydiMCwgcmVxX2FkZHJfaW50Wzg6MF19KSA6Ci0JCQkoY2ZnX2NvbGJpdHMgPT0gMidiMTApID8gKDEyJ2g0MDAgLSB7MidiMCwgcmVxX2FkZHJfaW50Wzk6MF19KSA6ICgxMidoODAwIC0gezEnYjAsIHJlcV9hZGRyX2ludFsxMDowXX0pOwotCi0KLSAgICAgLy8gSWYgdGhlIHdyYXAgPSAwIGFuZCBjdXJyZW50IGFwcGxpY2F0aW9uIGJ1cnN0IGxlbmd0aCBpcyBjcm9zc2luZyB0aGUgcGFnZSBib3VuZGFyeSwgCi0gICAgIC8vIHRoZW4gcmVxdWVzdCB3aWxsIGJlIHNwbGl0IGludG8gdHdvIHdpdGggY29ycmVzcG9uZGluZyBjaGFuZ2UgaW4gcmVxdWVzdCBhZGRyZXNzIGFuZCByZXF1ZXN0IGxlbmd0aC4KLSAgICAgLy8KLSAgICAgLy8gSWYgdGhlIHdyYXAgPSAwIGFuZCBjdXJyZW50IGJ1cnN0IGxlbmd0aCBpcyBub3QgY3Jvc3NpbmcgdGhlIHBhZ2UgYm91bmRhcnksIAotICAgICAvLyB0aGVuIHJlcXVlc3QgZnJvbSBhcHBsaWNhdGlvbiBsYXllciB3aWxsIGJlIHRyYW5zcGFyZW50bHkgcGFzc2VkIG9uIHRoZSBiYW5rIGNvbnRyb2wgYmxvY2suCi0KLSAgICAgLy8KLSAgICAgLy8gaWYgdGhlIHdyYXAgPSAxLCB0aGVuIHRoaXMgYmxvY2sgd2lsbCBub3QgbW9kaWZ5IHRoZSByZXF1ZXN0IGFkZHJlc3MgYW5kIGxlbmd0aC4gCi0gICAgIC8vIFRoZSB3cmFwcGluZyBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgaGFuZGxlIGJ5IHRoZSBiYW5rIGNvbnRyb2wgbW9kdWxlIGFuZCAKLSAgICAgLy8gY29sdW1uIGFkZHJlc3Mgd2lsbCByZXdpbmQgYmFjayBhcyBmb2xsb3dzIFhYIC0+IEZGID8gMDAgPyAxCi0gICAgIC8vCi0gICAgIC8vIE5vdGU6IFdpdGggV3JhcCA9IDAsIGVhY2ggcmVxdWVzdCBmcm9tIEFwcGxpY2F0aW9uIGxheWVyIHdpbGwgYmUgc3BpbGl0ZWQgaW50byB0d28gcmVxdWVzdCwgCi0gICAgIC8vCWlmIHRoZSBjdXJyZW50IGJ1cnN0IGNyb3NzIHRoZSBwYWdlIGJvdW5kYXJ5LiAKLSAgIGFzc2lnbiBwYWdlX292Zmx3ID0gKHsxJ2IwLCByZXFfbGVuX2ludH0gPiBtYXhfcjJiX2xlbikgPyB+cjJiX3dyYXAgOiAxJ2IwOwotCi0gICBhc3NpZ24gcjJiX2xlbiA9IHIyYl9zdGFydCA/ICgocGFnZV9vdmZsd19yKSA/IG1heF9yMmJfbGVuX3IgOiBsY2xfcmVxX2xlbikgOgotICAgICAgICAgICAgICAgICAgICAgIGxjbF9yZXFfbGVuOwotCi0gICBhc3NpZ24gbmV4dF9yZXFfbGVuID0gbGNsX3JlcV9sZW4gLSByMmJfbGVuOwotCi0gICBhc3NpZ24gbmV4dF9zZHJfYWRkciA9IGN1cnJfc2RyX2FkZHIgKyByMmJfbGVuOwotCi0KLSAgIGFzc2lnbiByMmJfd3JhcCA9IGxjbF93cmFwOwotCi0gICBhc3NpZ24gcjJiX2xhc3QgPSAocjJiX3N0YXJ0ICYgIXBhZ2Vfb3ZmbHdfcikgfCAocmVxX3N0ID09IGBSRVFfUEFHRV9XUkFQKTsKLS8vCi0vLwotLy8KLSAgIGFsd2F5cyBAIChwb3NlZGdlIGNsaykgYmVnaW4KLQotICAgICAgcGFnZV9vdmZsd19yICAgPD0gKHJlcV9hY2spID8gcGFnZV9vdmZsdzogJ2gwOwotCi0gICAgICBtYXhfcjJiX2xlbl9yICA8PSAocmVxX2FjaykgPyBtYXhfcjJiX2xlbjogJ2gwOwotICAgICAgcjJiX3N0YXJ0ICAgICAgPD0gKHJlcV9hY2spID8gMSdiMSA6Ci0JCSAgICAgICAgKGIycl9hY2spID8gMSdiMCA6IHIyYl9zdGFydDsKLQotICAgICAgcjJiX3dyaXRlICAgICAgPD0gKHJlcV9hY2spID8gfnJlcV93cl9uIDogcjJiX3dyaXRlOwotCi0gICAgICByMmJfcmVxX2lkICAgICA8PSAocmVxX2FjaykgPyByZXFfaWQgOiByMmJfcmVxX2lkOwotCi0gICAgICBsY2xfd3JhcCAgICAgICA8PSAocmVxX2FjaykgPyByZXFfd3JhcCA6IGxjbF93cmFwOwotCSAgICAgCi0gICAgICBsY2xfcmVxX2xlbiAgICA8PSAocmVxX2FjaykgPyByZXFfbGVuX2ludCAgOgotCQkgICAgICAgIChyZXFfbGQpID8gbmV4dF9yZXFfbGVuIDogbGNsX3JlcV9sZW47Ci0KLSAgICAgIGN1cnJfc2RyX2FkZHIgIDw9IChyZXFfYWNrKSA/IHJlcV9hZGRyX2ludCA6Ci0JCSAgICAgICAgKHJlcV9sZCkgPyBuZXh0X3Nkcl9hZGRyIDogY3Vycl9zZHJfYWRkcjsKLQotICAgZW5kIC8vIGFsd2F5cyBAIChwb3NlZGdlIGNsaykKLSAgIAotICAgYWx3YXlzIEAgKCopIGJlZ2luCi0gICAgICByMnhfaWRsZSAgICA9IDEnYjA7Ci0gICAgICByZXFfaWRsZSAgICA9IDEnYjA7Ci0gICAgICByZXFfYWNrICAgICA9IDEnYjA7Ci0gICAgICByZXFfbGQgICAgICA9IDEnYjA7Ci0gICAgICByMmJfcmVxICAgICA9IDEnYjA7Ci0gICAgICBuZXh0X3JlcV9zdCA9IGBSRVFfSURMRTsKLQotICAgICAgY2FzZSAocmVxX3N0KSAgICAgIAotCi0JYFJFUV9JRExFIDogYmVnaW4KLQkgICByMnhfaWRsZSA9IH5yZXE7Ci0JICAgcmVxX2lkbGUgPSAxJ2IxOwotCSAgIHJlcV9hY2sgPSByZXEgJiBiMnJfYXJiX29rOwotCSAgIHJlcV9sZCA9IDEnYjA7Ci0JICAgcjJiX3JlcSA9IDEnYjA7Ci0JICAgbmV4dF9yZXFfc3QgPSAocmVxICYgYjJyX2FyYl9vaykgPyBgUkVRX0FDVElWRSA6IGBSRVFfSURMRTsKLQllbmQgLy8gY2FzZTogYFJFUV9JRExFCi0KLQlgUkVRX0FDVElWRSA6IGJlZ2luCi0JICAgcjJ4X2lkbGUgPSAxJ2IwOwotCSAgIHJlcV9pZGxlID0gMSdiMDsKLQkgICByZXFfYWNrID0gMSdiMDsKLQkgICByZXFfbGQgPSBiMnJfYWNrOwotCSAgIHIyYl9yZXEgPSAxJ2IxOyAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVxX2dlbiB0byBiYW5rX3JlcQotCSAgIG5leHRfcmVxX3N0ID0gKGIycl9hY2sgKSA/ICgocGFnZV9vdmZsd19yKSA/IGBSRVFfUEFHRV9XUkFQIDpgUkVRX0lETEUpIDogYFJFUV9BQ1RJVkU7Ci0JZW5kIC8vIGNhc2U6IGBSRVFfQUNUSVZFCi0JYFJFUV9QQUdFX1dSQVAgOiBiZWdpbgotCSAgIHIyeF9pZGxlID0gMSdiMDsKLQkgICByZXFfaWRsZSA9IDEnYjA7Ci0JICAgcmVxX2FjayAgPSAxJ2IwOwotCSAgIHJlcV9sZCA9IGIycl9hY2s7Ci0JICAgcjJiX3JlcSA9IDEnYjE7ICAgICAgICAgICAgICAgICAgICAgICAvLyByZXFfZ2VuIHRvIGJhbmtfcmVxCi0JICAgbmV4dF9yZXFfc3QgPSAoYjJyX2FjaykgPyBgUkVRX0lETEUgOiBgUkVRX1BBR0VfV1JBUDsKLQllbmQgLy8gY2FzZTogYFJFUV9BQ1RJVkUKLQotICAgICAgZW5kY2FzZSAvLyBjYXNlKHJlcV9zdCkKLQotICAgZW5kIC8vIGFsd2F5cyBAIChyZXFfc3Qgb3IgLi4uLikKLQotICAgYWx3YXlzIEAgKHBvc2VkZ2UgY2xrKQotICAgICAgaWYgKH5yZXNldF9uKSBiZWdpbgotCSByZXFfc3QgPD0gYFJFUV9JRExFOwotICAgICAgZW5kIC8vIGlmICh+cmVzZXRfbikKLSAgICAgIGVsc2UgYmVnaW4KLQkgcmVxX3N0IDw9IG5leHRfcmVxX3N0OwotICAgICAgZW5kIC8vIGVsc2U6ICFpZih+cmVzZXRfbikKLS8vCi0vLyBhZGRycyBiaXRzIGZvciB0aGUgYmFuaywgcm93IGFuZCBjb2x1bW4KLS8vCi0vLyBSZWdpc3RlciByb3cvY29sdW1uL2JhbmsgdG8gaW1wcm92ZSBmcGdhIHRpbWluZyBpc3N1ZQotd2lyZSBbQVBQX0FXLTE6MF0gCW1hcF9hZGRyZXNzIDsKLQotYXNzaWduICAgICAgbWFwX2FkZHJlc3MgID0gKHJlcV9hY2spID8gcmVxX2FkZHJfaW50IDoKLQkJICAgICAgICAgICAocmVxX2xkKSAgPyBuZXh0X3Nkcl9hZGRyIDogY3Vycl9zZHJfYWRkcjsKLQotYWx3YXlzIEAgKHBvc2VkZ2UgY2xrKSBiZWdpbgotLy8gQmFuayBCaXRzIGFyZSBhbHdheXMgLSAyIEJpdHMKLSAgICByMmJfYmEgPD0gKGNmZ19jb2xiaXRzID09IDInYjAwKSA/IHttYXBfYWRkcmVzc1s5OjhdfSAgIDoKLQkgICAgICAoY2ZnX2NvbGJpdHMgPT0gMidiMDEpID8ge21hcF9hZGRyZXNzWzEwOjldfSAgOgotCSAgICAgIChjZmdfY29sYml0cyA9PSAyJ2IxMCkgPyB7bWFwX2FkZHJlc3NbMTE6MTBdfSA6IG1hcF9hZGRyZXNzWzEyOjExXTsKLQotLyoqKioqKioqKioqKioqKioqKioqCi0qICBDb2xiaXRzIE1hcHBpbmc6Ci0qICAgICAgICAgICAyJ2IwMCAtIDggQml0Ci0qICAgICAgICAgICAyJ2IwMSAtIDE2IEJpdAotKiAgICAgICAgICAgMidiMTAgLSAxMCBCaXQKLSogICAgICAgICAgIDInYjExIC0gMTEgQml0cwotKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIHIyYl9jYWRkciA8PSAoY2ZnX2NvbGJpdHMgPT0gMidiMDApID8gezUnYjAsIG1hcF9hZGRyZXNzWzc6MF19IDoKLQkgICAgICAgICAoY2ZnX2NvbGJpdHMgPT0gMidiMDEpID8gezQnYjAsIG1hcF9hZGRyZXNzWzg6MF19IDoKLQkgICAgICAgICAoY2ZnX2NvbGJpdHMgPT0gMidiMTApID8gezMnYjAsIG1hcF9hZGRyZXNzWzk6MF19IDogezInYjAsIG1hcF9hZGRyZXNzWzEwOjBdfTsKLQotICAgIHIyYl9yYWRkciA8PSAoY2ZnX2NvbGJpdHMgPT0gMidiMDApICA/IG1hcF9hZGRyZXNzWzIyOjEwXSA6Ci0JICAgICAgICAgKGNmZ19jb2xiaXRzID09IDInYjAxKSAgPyBtYXBfYWRkcmVzc1syMzoxMV0gOgotCSAgICAgICAgIChjZmdfY29sYml0cyA9PSAyJ2IxMCkgID8gbWFwX2FkZHJlc3NbMjQ6MTJdIDogbWFwX2FkZHJlc3NbMjU6MTNdOwotZW5kCSAgIAotICAgCi1lbmRtb2R1bGUgLy8gc2RyX3JlcV9nZW4KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2NvcmUvc2RyY194ZnJfY3RsLnYgYi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9jb3JlL3NkcmNfeGZyX2N0bC52CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2ZWM3YWQyLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2NvcmUvc2RyY194ZnJfY3RsLnYKKysrIC9kZXYvbnVsbApAQCAtMSw3OTEgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAotLy8gCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KLS8vCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBTRFJBTSBDb250cm9sbGVyIFRyYW5zZmVyIGNvbnRyb2wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBzZHJhbSBjb250cm9sbGVyIHByb2plY3QgICAgICAgICAgIAotICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0Ci0gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAKLSAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3Nkcl9jdHJsLyAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBEZXNjcmlwdGlvbjogU0RSQU0gQ29udHJvbGxlciBUcmFuc2ZlciBjb250cm9sCi0KLSAgVGhpcyBtb2R1bGUgdGFrZXMgcmVxdWVzdHMgZnJvbSBzZHJjX2JhbmtfY3RsIGFuZCBydW5zIHRoZQotICB0cmFuc2Zlci4gVGhlIGlucHV0IHJlcXVlc3QgaXMgZ3VhcmFudGVlZCB0byBiZSBpbiBhIGJhbmsgdGhhdCBpcwotICBwcmVjaGFyZ2VkIGFuZCBhY3RpdmF0ZWQuIFRoaXMgYmxvY2sgcnVucyB0aGUgdHJhbnNmZXIgdW50aWwgYQotICBidXJzdCBib3VuZGFyeSBpcyByZWFjaGVkLCB0aGVuIGlzc3VlcyBhbm90aGVyIHJlYWQvd3JpdGUgY29tbWFuZAotICB0byBzZXF1ZW50aWFsbHkgc3RlcCB0aHJ1IG1lbW9yeSBpZiB3cmFwPTAsIHVudGlsIHRoZSB0cmFuc2ZlciBpcwotICBjb21wbGV0ZWQuCi0gICAKLSAgaWYgYSByZWFkIHRyYW5zZmVyIGZpbmlzaGVzIGFuZCB0aGUgY2FkZHIgaXMgbm90IGF0IGEgYnVyc3QgYm91bmRhcnkgCi0gIGEgYnVyc3QgdGVybWluYXRlIGNvbW1hbmQgaXMgaXNzdWVkIHVubGVzcyBhbm90aGVyIHJlYWQvd3JpdGUgb3IKLSAgcHJlY2hhcmdlIHRvIHRoZSBzYW1lIGJhbmsgaXMgcGVuZGluZy4KLSAgCi0gIGlmIGEgd3JpdGUgdHJhbnNmZXIgZmluaXNoZXMgYW5kIHRoZSBjYWRkciBpcyBub3QgYXQgYSBidXJzdCBib3VuZGFyeSAKLSAgYSBidXJzdCB0ZXJtaW5hdGUgY29tbWFuZCBpcyBpc3N1ZWQgdW5sZXNzIGEgcmVhZC93cml0ZSBpcyBwZW5kaW5nLgotICAKLSAgIElmIGEgcmVmcmVzaCByZXF1ZXN0IGlzIG1hZGUsIHRoZSBiYW5rX2N0bCB3aWxsIGJlIGhlbGQgb2ZmIHVudGlsCi0gICB0aGUgbnVtYmVyIG9mIHJlZnJlc2hlcyByZXF1ZXN0ZWQgYXJlIGNvbXBsZXRlZC4KLQotICAgVGhpcyBibG9jayBhbHNvIGhhbmRsZXMgU0RSQU0gaW5pdGlhbGl6YXRpb24uCi0gIAotCi0gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAKLSAgVmVyc2lvbiAgOiAxLjAgLSA4dGggSmFuIDIwMTIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgCi0gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIAotIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAKLSB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAKLSBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgCi0gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IAotIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAKLWxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIAotIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAKLSB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgCi0gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIAotIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIAotIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAKLSBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotYGluY2x1ZGUgInNkcmNfZGVmaW5lLnYiCi0KLW1vZHVsZSBzZHJjX3hmcl9jdGwgKGNsaywKLQkJICAgIHJlc2V0X24sCi0JCSAgICAKLQkJICAgIC8qIFRyYW5zZmVyIHJlcXVlc3QgZnJvbSBiYW5rX2N0bCAqLwotCQkgICAgcjJ4X2lkbGUsCSAgIC8vIFJlcSBpcyBpZGxlCi0JCSAgICBiMnhfaWRsZSwgICAgICAvLyBBbGwgYmFua3MgYXJlIGlkbGUKLQkJICAgIGIyeF9yZXEsCSAgIC8vIFJlcSBmcm9tIGJhbmtfY3RsCi0JCSAgICBiMnhfc3RhcnQsCSAgIC8vIGZpcnN0IGNodW5rIG9mIHRyYW5zZmVyCi0JCSAgICBiMnhfbGFzdCwJICAgLy8gbGFzdCBjaHVuayBvZiB0cmFuc2ZlcgotCQkgICAgYjJ4X2lkLAkgICAvLyBUcmFuc2ZlciBJRAotCQkgICAgYjJ4X2JhLAkgICAvLyBiYW5rIGFkZHJlc3MKLQkJICAgIGIyeF9hZGRyLAkgICAvLyByb3cvY29sIGFkZHJlc3MKLQkJICAgIGIyeF9sZW4sCSAgIC8vIHRyYW5zZmVyIGxlbmd0aAotCQkgICAgYjJ4X2NtZCwJICAgLy8gdHJhbnNmZXIgY29tbWFuZAotCQkgICAgYjJ4X3dyYXAsCSAgIC8vIFdyYXAgbW9kZSB0cmFuc2ZlcgotCQkgICAgeDJiX2FjaywJICAgLy8gY29tbWFuZCBhY2NlcHRlZAotCQkgICAgIAotCQkgICAgLyogU3RhdHVzIHRvIGJhbmtfY3RsLCByZXFfZ2VuICovCi0JCSAgICBiMnhfdHJhc19vaywgICAvLyBUcmFzIGZvciBhbGwgYmFua3MgZXhwaXJlZAotCQkgICAgeDJiX3JlZnJlc2gsICAgLy8gV2UgZGlkIGEgcmVmcmVzaAotCQkgICAgeDJiX3ByZV9vaywJICAgLy8gT0sgdG8gZG8gYSBwcmVjaGFyZ2UgKHBlciBiYW5rKQotCQkgICAgeDJiX2FjdF9vaywJICAgLy8gT0sgdG8gZG8gYW4gYWN0aXZhdGUKLQkJICAgIHgyYl9yZG9rLAkgICAvLyBPSyB0byBkbyBhIHJlYWQKLQkJICAgIHgyYl93cm9rLAkgICAvLyBPSyB0byBkbyBhIHdyaXRlCi0JCSAgICAKLQkJICAgIC8qIFNEUkFNIEkvTyAqLwotCQkgICAgc2RyX2NzX24sCi0JCSAgICBzZHJfY2tlLAotCQkgICAgc2RyX3Jhc19uLAotCQkgICAgc2RyX2Nhc19uLAotCQkgICAgc2RyX3dlX24sCi0JCSAgICBzZHJfZHFtLAotCQkgICAgc2RyX2JhLAotCQkgICAgc2RyX2FkZHIsIAotCQkgICAgc2RyX2RpbiwKLQkJICAgIHNkcl9kb3V0LAotCQkgICAgc2RyX2Rlbl9uLAotCQkgICAgCi0JCSAgICAvKiBEYXRhIEZsb3cgdG8gdGhlIGFwcCAqLwotCQkgICAgeDJhX3Jkc3RhcnQsCi0JCSAgICB4MmFfd3JzdGFydCwKLQkJICAgIHgyYV9yZGxhc3QsCi0JCSAgICB4MmFfd3JsYXN0LAotCQkgICAgeDJhX2lkLAotCQkgICAgYTJ4X3dyZHQsCi0JCSAgICBhMnhfd3Jlbl9uLAotCQkgICAgeDJhX3dybmV4dCwKLQkJICAgIHgyYV9yZGR0LAotCQkgICAgeDJhX3Jkb2ssCi0JCSAgICBzZHJfaW5pdF9kb25lLAotCQkgICAgCi0JCSAgICAvKiBTRFJBTSBQYXJhbWV0ZXJzICovCi0JCSAgICBzZHJhbV9lbmFibGUsCi0JCSAgICBzZHJhbV9tb2RlX3JlZywKLQkJICAgIAotCQkgICAgLyogb3V0cHV0IGZvciBnZW5lcmF0ZSByb3cgYWRkcmVzcyBvZiB0aGUgdHJhbnNmZXIgKi8KLQkJICAgIHhmcl9iYW5rX3NlbCwKLQotCQkgICAgLyogU0RSQU0gVGltaW5nICovCi0JCSAgICBjYXNfbGF0ZW5jeSwKLQkJICAgIHRycF9kZWxheSwJICAgLy8gUHJlY2hhcmdlIHRvIHJlZnJlc2ggZGVsYXkKLQkJICAgIHRyY2FyX2RlbGF5LCAgIC8vIEF1dG8tcmVmcmVzaCBwZXJpb2QKLQkJICAgIHR3cl9kZWxheSwJICAgLy8gV3JpdGUgcmVjb3ZlcnkgZGVsYXkKLQkJICAgIHJmc2hfdGltZSwJICAgLy8gdGltZSBwZXIgcm93ICgzMS4yNSBvciAxNS42MTI1IHVTKQotCQkgICAgcmZzaF9ybWF4KTsJICAgLy8gTnVtYmVyIG9mIHJvd3MgdG8gcmZzaCBhdCBhIHRpbWUgKDwxMjB1UykKLSAgIAotcGFyYW1ldGVyICBTRFJfRFcgICA9IDE2OyAgLy8gU0RSIERhdGEgV2lkdGggCi1wYXJhbWV0ZXIgIFNEUl9CVyAgID0gMjsgICAvLyBTRFIgQnl0ZSBXaWR0aAotCi0KLWlucHV0ICAgICAgICAgICAgY2xrLCByZXNldF9uOyAKLQotICAgLyogUmVxIGZyb20gYmFua19jdGwgKi8KLWlucHV0IAkJCWIyeF9yZXEsIGIyeF9zdGFydCwgYjJ4X2xhc3QsIGIyeF90cmFzX29rLAotCQkJCWIyeF93cmFwLCByMnhfaWRsZSwgYjJ4X2lkbGU7IAotaW5wdXQgW2BTRFJfUkVRX0lEX1ctMTowXSAJYjJ4X2lkOwotaW5wdXQgWzE6MF0gCQkJYjJ4X2JhOwotaW5wdXQgWzEyOjBdIAkJYjJ4X2FkZHI7Ci1pbnB1dCBbYFJFUV9CVy0xOjBdIAliMnhfbGVuOwotaW5wdXQgWzE6MF0gCQkJYjJ4X2NtZDsKLW91dHB1dCAJCQl4MmJfYWNrOwotCi0vKiBTdGF0dXMgdG8gYmFua19jdGwgKi8KLW91dHB1dCBbMzowXSAJCXgyYl9wcmVfb2s7Ci1vdXRwdXQgCQkJeDJiX3JlZnJlc2gsIHgyYl9hY3Rfb2ssIHgyYl9yZG9rLAotCQkJCXgyYl93cm9rOwotLyogRGF0YSBGbG93IHRvIHRoZSBhcHAgKi8KLW91dHB1dCAJCQl4MmFfcmRzdGFydCwgeDJhX3dyc3RhcnQsIHgyYV9yZGxhc3QsIHgyYV93cmxhc3Q7Ci1vdXRwdXQgW2BTRFJfUkVRX0lEX1ctMTowXSAJeDJhX2lkOwotCi1pbnB1dCBbU0RSX0RXLTE6MF0gCWEyeF93cmR0OwotaW5wdXQgW1NEUl9CVy0xOjBdIAlhMnhfd3Jlbl9uOwotb3V0cHV0IFtTRFJfRFctMTowXSAJeDJhX3JkZHQ7Ci1vdXRwdXQgCQkJeDJhX3dybmV4dCwgeDJhX3Jkb2ssIHNkcl9pbml0X2RvbmU7Ci0JCQotLyogSW50ZXJmYWNlIHRvIFNEUkFNcyAqLwotb3V0cHV0IAkJCXNkcl9jc19uLCBzZHJfY2tlLCBzZHJfcmFzX24sIHNkcl9jYXNfbiwKLQkJCQlzZHJfd2VfbjsgCi1vdXRwdXQgW1NEUl9CVy0xOjBdIAlzZHJfZHFtOwotb3V0cHV0IFsxOjBdIAkJc2RyX2JhOwotb3V0cHV0IFsxMjowXSAJCXNkcl9hZGRyOwotaW5wdXQgW1NEUl9EVy0xOjBdIAlzZHJfZGluOwotb3V0cHV0IFtTRFJfRFctMTowXSAJc2RyX2RvdXQ7Ci1vdXRwdXQgW1NEUl9CVy0xOjBdIAlzZHJfZGVuX247Ci0KLSAgIG91dHB1dCBbMTowXQkJCXhmcl9iYW5rX3NlbDsKLQotICAgaW5wdXQgCQkJc2RyYW1fZW5hYmxlOwotICAgaW5wdXQgWzEyOjBdIAkJc2RyYW1fbW9kZV9yZWc7Ci0gICBpbnB1dCBbMjowXSAJCQljYXNfbGF0ZW5jeTsKLSAgIGlucHV0IFszOjBdIAkJCXRycF9kZWxheSwgdHJjYXJfZGVsYXksIHR3cl9kZWxheTsKLSAgIGlucHV0IFtgU0RSX1JGU0hfVElNRVJfVy0xIDogMF0gcmZzaF90aW1lOwotICAgaW5wdXQgW2BTRFJfUkZTSF9ST1dfQ05UX1ctMTowXSByZnNoX3JtYXg7Ci0gICAKLQotICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgIC8vIEludGVybmFsIE5ldHMKLQotICAgYGRlZmluZSBYRlJfSURMRSAgICAgICAgMidiMDAKLSAgIGBkZWZpbmUgWEZSX1dSSVRFICAgICAgIDInYjAxCi0gICBgZGVmaW5lIFhGUl9SRUFEICAgICAgICAyJ2IxMAotICAgYGRlZmluZSBYRlJfUkRXVCAgICAgICAgMidiMTEKLQotICAgcmVnIFsxOjBdIAkJCXhmcl9zdCwgbmV4dF94ZnJfc3Q7Ci0gICByZWcgWzEyOjBdIAkJCXhmcl9jYWRkcjsKLSAgIHdpcmUgCQkJbGFzdF9idXJzdDsKLSAgIHdpcmUgCQkJeDJhX3Jkc3RhcnQsIHgyYV93cnN0YXJ0LCB4MmFfcmRsYXN0LCB4MmFfd3JsYXN0OwotICAgcmVnIAkJCQlsX3N0YXJ0LCBsX2xhc3QsIGxfd3JhcDsKLSAgIHdpcmUgW2BTRFJfUkVRX0lEX1ctMTowXSAJeDJhX2lkOwotICAgcmVnIFtgU0RSX1JFUV9JRF9XLTE6MF0gCWxfaWQ7Ci0gICB3aXJlIFsxOjBdIAkJCXhmcl9iYTsKLSAgIHJlZyBbMTowXSAJCQlsX2JhOwotICAgd2lyZSBbMTI6MF0gCQkJeGZyX2FkZHI7Ci0gICB3aXJlIFtgUkVRX0JXLTE6MF0gCXhmcl9sZW4sIG5leHRfeGZyX2xlbjsKLSAgIHJlZyBbYFJFUV9CVy0xOjBdIAlsX2xlbjsKLQotICAgcmVnIAkJCQltZ210X2lkbGUsIG1nbXRfcmVxOwotICAgcmVnIFszOjBdIAkJCW1nbXRfY21kOwotICAgcmVnIFsxMjowXSAJCQltZ210X2FkZHI7Ci0gICByZWcgWzE6MF0gCQkJbWdtdF9iYTsKLQotICAgcmVnIAkJCQlzZWxfbWdtdCwgc2VsX2IyeDsKLSAgIHJlZyAJCQkJY2JfcHJlX29rLCByZG9rLCB3cm9rLCB3cl9uZXh0LAotCQkJCXJkX25leHQsIHNkcl9pbml0X2RvbmUsIGFjdF9jbWQsIGRfYWN0X2NtZDsKLSAgIHdpcmUgWzM6MF0gCQkJYjJ4X3Nkcl9jbWQsIHhmcl9jbWQ7Ci0gICByZWcgWzM6MF0gCQkJaV94ZnJfY21kOwotICAgd2lyZSAJCQltZ210X2FjaywgeDJiX2FjaywgYjJ4X3JlYWQsIGIyeF93cml0ZSwgCi0JCQkJYjJ4X3ByZWNoZywgZF9yZF9uZXh0LCBkdF9uZXh0LCB4ZnJfZW5kLAotCQkJCXJkX3BpcGVfbXQsIGxkX3hmciwgcmRfbGFzdCwgZF9yZF9sYXN0LCAKLQkJCQl3cl9sYXN0LCBsX3hmcl9lbmQsIHJkX3N0YXJ0LCBkX3JkX3N0YXJ0LAotCQkJCXdyX3N0YXJ0LCBwYWdlX2hpdCwgYnVyc3RfYmRyeSwgeGZyX3dyYXAsCi0JCQkJYjJ4X3ByZWNoZ19oaXQ7Ci0gICByZWcgWzY6MF0gCQkJbF9yZF9uZXh0LCBsX3JkX3N0YXJ0LCBsX3JkX2xhc3Q7Ci0gICAKLSAgIGFzc2lnbiBiMnhfcmVhZCA9IChiMnhfY21kID09IGBPUF9SRCkgPyAxJ2IxIDogMSdiMDsKLQotICAgYXNzaWduIGIyeF93cml0ZSA9IChiMnhfY21kID09IGBPUF9XUikgPyAxJ2IxIDogMSdiMDsKLQotICAgYXNzaWduIGIyeF9wcmVjaGcgPSAoYjJ4X2NtZCA9PSBgT1BfUFJFKSA/IDEnYjEgOiAxJ2IwOwotICAgCi0gICBhc3NpZ24gYjJ4X3Nkcl9jbWQgPSAoYjJ4X2NtZCA9PSBgT1BfUFJFKSA/IGBTRFJfUFJFQ0hBUkdFIDoKLQkJCShiMnhfY21kID09IGBPUF9BQ1QpID8gYFNEUl9BQ1RJVkFURSA6Ci0JCQkoYjJ4X2NtZCA9PSBgT1BfUkQpID8gYFNEUl9SRUFEIDoKLQkJCShiMnhfY21kID09IGBPUF9XUikgPyBgU0RSX1dSSVRFIDogYFNEUl9ERVNFTDsKLQotICAgYXNzaWduIHBhZ2VfaGl0ID0gKGIyeF9iYSA9PSBsX2JhKSA/IDEnYjEgOiAxJ2IwOwotCi0gICBhc3NpZ24gYjJ4X3ByZWNoZ19oaXQgPSBiMnhfcHJlY2hnICYgcGFnZV9oaXQ7Ci0gICAKLSAgIGFzc2lnbiB4ZnJfY21kID0gKHNlbF9tZ210KSA/IG1nbXRfY21kIDoKLQkJICAgIChzZWxfYjJ4KSA/IGIyeF9zZHJfY21kIDogaV94ZnJfY21kOwotCi0gICBhc3NpZ24geGZyX2FkZHIgPSAoc2VsX21nbXQpID8gbWdtdF9hZGRyIDogCi0JCSAgICAgKHNlbF9iMngpID8gYjJ4X2FkZHIgOiB4ZnJfY2FkZHIrMTsKLQotICAgYXNzaWduIG1nbXRfYWNrID0gc2VsX21nbXQ7Ci0KLSAgIGFzc2lnbiB4MmJfYWNrID0gc2VsX2IyeDsKLQotICAgYXNzaWduIGxkX3hmciA9IHNlbF9iMnggJiAoYjJ4X3JlYWQgfCBiMnhfd3JpdGUpOwotICAgCi0gICBhc3NpZ24geGZyX2xlbiA9IChsZF94ZnIpID8gYjJ4X2xlbiA6IGxfbGVuOwotCi0gICAvL2Fzc2lnbiBuZXh0X3hmcl9sZW4gPSAobF94ZnJfZW5kICYmICFsZF94ZnIpID8gbF9sZW4gOiB4ZnJfbGVuIC0gMTsKLSAgIGFzc2lnbiBuZXh0X3hmcl9sZW4gPSAobGRfeGZyKSA/IGIyeF9sZW4gOiAKLQkgICAgICAgICAgICAgICAgIChsX3hmcl9lbmQpID8gbF9sZW46ICBsX2xlbiAtIDE7Ci0KLSAgIGFzc2lnbiBkX3JkX25leHQgPSAoY2FzX2xhdGVuY3kgPT0gMydiMDAxKSA/IGxfcmRfbmV4dFsyXSA6Ci0JCSAgICAgIChjYXNfbGF0ZW5jeSA9PSAzJ2IwMTApID8gbF9yZF9uZXh0WzNdIDoKLQkJICAgICAgKGNhc19sYXRlbmN5ID09IDMnYjAxMSkgPyBsX3JkX25leHRbNF0gOgotCQkgICAgICAoY2FzX2xhdGVuY3kgPT0gMydiMTAwKSA/IGxfcmRfbmV4dFs1XSA6Ci0JCSAgICAgIGxfcmRfbmV4dFs2XTsKLQotICAgYXNzaWduIGRfcmRfbGFzdCA9IChjYXNfbGF0ZW5jeSA9PSAzJ2IwMDEpID8gbF9yZF9sYXN0WzJdIDoKLQkJICAgICAgKGNhc19sYXRlbmN5ID09IDMnYjAxMCkgPyBsX3JkX2xhc3RbM10gOgotCQkgICAgICAoY2FzX2xhdGVuY3kgPT0gMydiMDExKSA/IGxfcmRfbGFzdFs0XSA6Ci0JCSAgICAgIChjYXNfbGF0ZW5jeSA9PSAzJ2IxMDApID8gbF9yZF9sYXN0WzVdIDoKLQkJICAgICAgbF9yZF9sYXN0WzZdOwotCi0gICBhc3NpZ24gZF9yZF9zdGFydCA9IChjYXNfbGF0ZW5jeSA9PSAzJ2IwMDEpID8gbF9yZF9zdGFydFsyXSA6Ci0JCSAgICAgICAoY2FzX2xhdGVuY3kgPT0gMydiMDEwKSA/IGxfcmRfc3RhcnRbM10gOgotCQkgICAgICAgKGNhc19sYXRlbmN5ID09IDMnYjAxMSkgPyBsX3JkX3N0YXJ0WzRdIDoKLQkJICAgICAgIChjYXNfbGF0ZW5jeSA9PSAzJ2IxMDApID8gbF9yZF9zdGFydFs1XSA6Ci0JCSAgICAgICBsX3JkX3N0YXJ0WzZdOwotCi0gICBhc3NpZ24gcmRfcGlwZV9tdCA9IChjYXNfbGF0ZW5jeSA9PSAzJ2IwMDEpID8gfnxsX3JkX25leHRbMTowXSA6Ci0JCSAgICAgICAoY2FzX2xhdGVuY3kgPT0gMydiMDEwKSA/IH58bF9yZF9uZXh0WzI6MF0gOgotCQkgICAgICAgKGNhc19sYXRlbmN5ID09IDMnYjAxMSkgPyB+fGxfcmRfbmV4dFszOjBdIDoKLQkJICAgICAgIChjYXNfbGF0ZW5jeSA9PSAzJ2IxMDApID8gfnxsX3JkX25leHRbNDowXSA6Ci0JCSAgICAgICB+fGxfcmRfbmV4dFs1OjBdOwotCi0gICBhc3NpZ24gZHRfbmV4dCA9IHdyX25leHQgfCBkX3JkX25leHQ7Ci0KLSAgIGFzc2lnbiB4ZnJfZW5kID0gfnx4ZnJfbGVuOwotCi0gICBhc3NpZ24gbF94ZnJfZW5kID0gfnwobF9sZW4tMSk7Ci0KLSAgIGFzc2lnbiByZF9zdGFydCA9IGxkX3hmciAmIGIyeF9yZWFkICYgYjJ4X3N0YXJ0OwotCi0gICBhc3NpZ24gd3Jfc3RhcnQgPSBsZF94ZnIgJiBiMnhfd3JpdGUgJiBiMnhfc3RhcnQ7Ci0gICAKLSAgIGFzc2lnbiByZF9sYXN0ID0gcmRfbmV4dCAmIGxhc3RfYnVyc3QgJiB+fHhmcl9sZW5bYFJFUV9CVy0xOjFdOwotCi0gICAvL2Fzc2lnbiB3cl9sYXN0ID0gd3JfbmV4dCAmIGxhc3RfYnVyc3QgJiB+fHhmcl9sZW5bQVBQX1JXLTE6MV07Ci0KLSAgIGFzc2lnbiB3cl9sYXN0ID0gbGFzdF9idXJzdCAmIH58eGZyX2xlbltgUkVRX0JXLTE6MV07Ci0gICAKLSAgIC8vYXNzaWduIHhmcl9iYSA9IChsZF94ZnIpID8gYjJ4X2JhIDogbF9iYTsKLSAgIGFzc2lnbiB4ZnJfYmEgPSAoc2VsX21nbXQpID8gbWdtdF9iYSA6IAotCQkgICAoc2VsX2IyeCkgPyBiMnhfYmEgOiBsX2JhOwotCi0gICBhc3NpZ24geGZyX3dyYXAgPSAobGRfeGZyKSA/IGIyeF93cmFwIDogbF93cmFwOwotICAgCi0vLyAgIGFzc2lnbiBidXJzdF9iZHJ5ID0gfnx4ZnJfY2FkZHJbMjowXTsKLSAgIHdpcmUgWzE6MF0geGZyX2NhZGRyX2xzYiA9ICh4ZnJfY2FkZHJbMTowXSsxKTsKLSAgIGFzc2lnbiBidXJzdF9iZHJ5ID0gfnwoeGZyX2NhZGRyX2xzYlsxOjBdKTsKLSAgCi0gICBhbHdheXMgQCAocG9zZWRnZSBjbGspIGJlZ2luCi0gICAgICBpZiAofnJlc2V0X24pIGJlZ2luCi0JIHhmcl9jYWRkciA8PSAxMydiMDsKLQkgbF9zdGFydCA8PSAxJ2IwOwotCSBsX2xhc3QgPD0gMSdiMDsKLQkgbF93cmFwIDw9IDEnYjA7Ci0JIGxfaWQgPD0gMDsKLQkgbF9iYSA8PSAwOwotCSBsX2xlbiA8PSAwOwotCSBsX3JkX25leHQgPD0gNydiMDsKLQkgbF9yZF9zdGFydCA8PSA3J2IwOwotCSBsX3JkX2xhc3QgPD0gNydiMDsKLQkgYWN0X2NtZCA8PSAxJ2IwOwotCSBkX2FjdF9jbWQgPD0gMSdiMDsKLQkgeGZyX3N0IDw9IGBYRlJfSURMRTsKLSAgICAgIGVuZCAvLyBpZiAofnJlc2V0X24pCi0KLSAgICAgIGVsc2UgYmVnaW4KLQkgeGZyX2NhZGRyIDw9IChsZF94ZnIpID8gYjJ4X2FkZHIgOgotCQkgICAgICAocmRfbmV4dCB8IHdyX25leHQpID8geGZyX2NhZGRyICsgMSA6IHhmcl9jYWRkcjsgCi0JIGxfc3RhcnQgPD0gKGR0X25leHQpID8gMSdiMCA6IAotCQkgICAobGRfeGZyKSA/IGIyeF9zdGFydCA6IGxfc3RhcnQ7Ci0JIGxfbGFzdCA8PSAobGRfeGZyKSA/IGIyeF9sYXN0IDogbF9sYXN0OwotCSBsX3dyYXAgPD0gKGxkX3hmcikgPyBiMnhfd3JhcCA6IGxfd3JhcDsKLQkgbF9pZCA8PSAobGRfeGZyKSA/IGIyeF9pZCA6IGxfaWQ7Ci0JIGxfYmEgPD0gKGxkX3hmcikgPyBiMnhfYmEgOiBsX2JhOwotCSBsX2xlbiA8PSBuZXh0X3hmcl9sZW47Ci0JIGxfcmRfbmV4dCA8PSB7bF9yZF9uZXh0WzU6MF0sIHJkX25leHR9OwotCSBsX3JkX3N0YXJ0IDw9IHtsX3JkX3N0YXJ0WzU6MF0sIHJkX3N0YXJ0fTsKLQkgbF9yZF9sYXN0IDw9IHtsX3JkX2xhc3RbNTowXSwgcmRfbGFzdH07Ci0JIGFjdF9jbWQgPD0gKHhmcl9jbWQgPT0gYFNEUl9BQ1RJVkFURSkgPyAxJ2IxIDogMSdiMDsKLQkgZF9hY3RfY21kIDw9IGFjdF9jbWQ7Ci0JIHhmcl9zdCA8PSBuZXh0X3hmcl9zdDsKLSAgICAgIGVuZCAvLyBlbHNlOiAhaWYofnJlc2V0X24pCi0gICAgICAKLSAgIGVuZCAvLyBhbHdheXMgQCAocG9zZWRnZSBjbGspCi0gICAKLQotICAgYWx3YXlzIEAgKCopIGJlZ2luIAotICAgICAgY2FzZSAoeGZyX3N0KQotCi0JYFhGUl9JRExFIDogYmVnaW4KLQotCSAgIHNlbF9tZ210ID0gbWdtdF9yZXE7Ci0JICAgc2VsX2IyeCA9IH5tZ210X3JlcSAmIHNkcl9pbml0X2RvbmUgJiBiMnhfcmVxOwotCSAgIGlfeGZyX2NtZCA9IGBTRFJfREVTRUw7Ci0JICAgcmRfbmV4dCA9IH5tZ210X3JlcSAmIHNkcl9pbml0X2RvbmUgJiBiMnhfcmVxICYgYjJ4X3JlYWQ7Ci0JICAgd3JfbmV4dCA9IH5tZ210X3JlcSAmIHNkcl9pbml0X2RvbmUgJiBiMnhfcmVxICYgYjJ4X3dyaXRlOwotCSAgIHJkb2sgPSB+bWdtdF9yZXE7Ci0JICAgY2JfcHJlX29rID0gMSdiMTsKLQkgICB3cm9rID0gfm1nbXRfcmVxOwotCSAgIG5leHRfeGZyX3N0ID0gKG1nbXRfcmVxIHwgfnNkcl9pbml0X2RvbmUpID8gYFhGUl9JRExFIDoKLQkJCSAofmIyeF9yZXEpID8gYFhGUl9JRExFIDoKLQkJCSAoYjJ4X3JlYWQpID8gYFhGUl9SRUFEIDoKLQkJCSAoYjJ4X3dyaXRlKSA/IGBYRlJfV1JJVEUgOiBgWEZSX0lETEU7Ci0KLQllbmQgLy8gY2FzZTogYFhGUl9JRExFCi0JICAgCi0JYFhGUl9SRUFEIDogYmVnaW4KLQkgICByZF9uZXh0ID0gfmxfeGZyX2VuZCB8Ci0JCSAgICAgbF94ZnJfZW5kICYgfm1nbXRfcmVxICYgYjJ4X3JlcSAmIGIyeF9yZWFkOwotCSAgIHdyX25leHQgPSAxJ2IwOwotCSAgIHJkb2sgPSBsX3hmcl9lbmQgJiB+bWdtdF9yZXE7Ci0JICAgLy8gQnJlYWsgdGhlIHRpbWluZyBwYXRoIGZvciBGUEdBIEJhc2VkIERlc2lnbgotCSAgIGNiX3ByZV9vayA9IChgVEFSR0VUX0RFU0lHTiA9PSBgRlBHQSkgPyAxJ2IwIDogbF94ZnJfZW5kOwotCSAgIHdyb2sgPSAxJ2IwOwotCSAgIHNlbF9tZ210ID0gMSdiMDsKLQotCSAgIGlmIChsX3hmcl9lbmQpIGJlZ2luCQkgIC8vIGVuZCBvZiB0cmFuc2ZlcgotCi0JICAgICAgaWYgKH5sX3dyYXApIGJlZ2luCi0JCSAvLyBDdXJyZW50IHRyYW5zZmVyIHdhcyBub3Qgd3JhcCBtb2RlLCBtYXkgbmVlZCBCVAotCQkgLy8gSWYgbmV4dCBjbWQgaXMgYSBSIG9yIFcgb3IgUFJFIHRvIHNhbWUgYmFuayBhbGxvdwotCQkgLy8gaXQgZWxzZSBpc3N1ZSBCVCAKLQkJIC8vIFRoaXMgaXMgYSBsaXR0bGUgcGVzc2ltaXN0aWMgc2luY2UgQlQgaXMgaXNzdWVkCi0JCSAvLyBmb3Igbm9uLXdyYXAgbW9kZSB0cmFuc2ZlcnMgZXZlbiBpZiB0aGUgdHJhbnNmZXIKLQkJIC8vIGVuZHMgb24gYSBidXJzdCBib3VuZGFyeSwgYnV0IGlzIGZlbHQgdG8gYmUgb2YKLQkJIC8vIG1pbmltYWwgcGVyZm9ybWFuY2UgaW1wYWN0LgotCi0JCSBpX3hmcl9jbWQgPSBgU0RSX0JUOwotCQkgc2VsX2IyeCA9IGIyeF9yZXEgJiB+bWdtdF9yZXEgJiAoYjJ4X3JlYWQgfCBiMnhfcHJlY2hnX2hpdCk7Ci0KLQkgICAgICBlbmQgLy8gaWYgKH5sX3dyYXApCi0JICAgICAgCi0JICAgICAgZWxzZSBiZWdpbgotCQkgLy8gV3JhcCBtb2RlIHRyYW5zZmVyLCBieSBkZWZpbml0aW9uIGlzIGVuZCBvZiBidXJzdAotCQkgLy8gYm91bmRhcnkgCi0KLQkJIGlfeGZyX2NtZCA9IGBTRFJfREVTRUw7Ci0JCSBzZWxfYjJ4ID0gYjJ4X3JlcSAmIH5tZ210X3JlcSAmIH5iMnhfd3JpdGU7Ci0KLQkgICAgICBlbmQgLy8gZWxzZTogIWlmKH5sX3dyYXApCi0JCSAKLQkgICAgICBuZXh0X3hmcl9zdCA9IChzZHJfaW5pdF9kb25lKSA/ICgoYjJ4X3JlcSAmIH5tZ210X3JlcSAmIGIyeF9yZWFkKSA/IGBYRlJfUkVBRCA6IGBYRlJfUkRXVCkgOiBgWEZSX0lETEU7Ci0KLQkgICBlbmQgLy8gaWYgKGxfeGZyX2VuZCkKLQotCSAgIGVsc2UgYmVnaW4KLQkgICAgICAvLyBOb3QgZW5kIG9mIHRyYW5zZmVyCi0JICAgICAgLy8gSWYgY3VycmVudCB0cmFuc2ZlciB3YXMgbm90IHdyYXAgbW9kZSBhbmQgd2UgYXJlIGF0Ci0JICAgICAgLy8gdGhlIHN0YXJ0IG9mIGEgYnVyc3QgYm91bmRhcnkgaXNzdWUgYW5vdGhlciBSIGNtZCB0bwotCSAgICAgIC8vIHN0ZXAgc2VxdWVtdGlhbGx5IHRocnUgbWVtb3J5LCBFTFNFLAotCSAgICAgIC8vIGlzc3VlIHByZWNoYXJnZS9hY3RpdmF0ZSBjb21tYW5kcyBmcm9tIHRoZSBiYW5rIGNvbnRyb2wKLQotCSAgICAgIGlfeGZyX2NtZCA9IChidXJzdF9iZHJ5ICYgfmxfd3JhcCkgPyBgU0RSX1JFQUQgOiBgU0RSX0RFU0VMOwotCSAgICAgIHNlbF9iMnggPSB+KGJ1cnN0X2JkcnkgJiB+bF93cmFwKSAmIGIyeF9yZXE7Ci0JICAgICAgbmV4dF94ZnJfc3QgPSBgWEZSX1JFQUQ7Ci0KLQkgICBlbmQgLy8gZWxzZTogIWlmKGxfeGZyX2VuZCkKLQkgICAKLQllbmQgLy8gY2FzZTogYFhGUl9SRUFECi0JCi0JYFhGUl9SRFdUIDogYmVnaW4gCi0JICAgcmRfbmV4dCA9IH5tZ210X3JlcSAmIGIyeF9yZXEgJiBiMnhfcmVhZDsKLQkgICB3cl9uZXh0ID0gcmRfcGlwZV9tdCAmIH5tZ210X3JlcSAmIGIyeF9yZXEgJiBiMnhfd3JpdGU7Ci0JICAgcmRvayA9IH5tZ210X3JlcTsKLQkgICBjYl9wcmVfb2sgPSAxJ2IxOwotCSAgIHdyb2sgPSByZF9waXBlX210ICYgfm1nbXRfcmVxOwotCi0JICAgc2VsX21nbXQgPSBtZ210X3JlcTsKLQkgICAKLQkgICBzZWxfYjJ4ID0gfm1nbXRfcmVxICYgYjJ4X3JlcTsKLQotCSAgIGlfeGZyX2NtZCA9IGBTRFJfREVTRUw7Ci0KLQkgICBuZXh0X3hmcl9zdCA9ICh+bWdtdF9yZXEgJiBiMnhfcmVxICYgYjJ4X3JlYWQpID8gYFhGUl9SRUFEIDogCi0JCQkgKH5yZF9waXBlX210KSA/IGBYRlJfUkRXVCA6Ci0JCQkgKH5tZ210X3JlcSAmIGIyeF9yZXEgJiBiMnhfd3JpdGUpID8gYFhGUl9XUklURSA6IAotCQkJIGBYRlJfSURMRTsKLQotCWVuZCAvLyBjYXNlOiBgWEZSX1JEV1QKLQkKLQlgWEZSX1dSSVRFIDogYmVnaW4KLQkgICByZF9uZXh0ID0gbF94ZnJfZW5kICYgfm1nbXRfcmVxICYgYjJ4X3JlcSAmIGIyeF9yZWFkOwotCSAgIHdyX25leHQgPSB+bF94ZnJfZW5kIHwKLQkJICAgICBsX3hmcl9lbmQgJiB+bWdtdF9yZXEgJiBiMnhfcmVxICYgYjJ4X3dyaXRlOwotCSAgIHJkb2sgPSBsX3hmcl9lbmQgJiB+bWdtdF9yZXE7Ci0JICAgY2JfcHJlX29rID0gMSdiMDsKLQkgICB3cm9rID0gbF94ZnJfZW5kICYgfm1nbXRfcmVxOwotCSAgIHNlbF9tZ210ID0gMSdiMDsKLQotCSAgIGlmIChsX3hmcl9lbmQpIGJlZ2luCQkgIC8vIEVuZCBvZiB0cmFuc2ZlcgotCi0JICAgICAgaWYgKH5sX3dyYXApIGJlZ2luCi0JCSAvLyBDdXJyZW50IHRyYW5zZmVyIHdhcyBub3Qgd3JhcCBtb2RlLCBtYXkgbmVlZCBCVAotCQkgLy8gSWYgbmV4dCBjbWQgaXMgYSBSIG9yIFcgYWxsb3cgaXQgZWxzZSBpc3N1ZSBCVCAKLQkJIC8vIFRoaXMgaXMgYSBsaXR0bGUgcGVzc2ltaXN0aWMgc2luY2UgQlQgaXMgaXNzdWVkCi0JCSAvLyBmb3Igbm9uLXdyYXAgbW9kZSB0cmFuc2ZlcnMgZXZlbiBpZiB0aGUgdHJhbnNmZXIKLQkJIC8vIGVuZHMgb24gYSBidXJzdCBib3VuZGFyeSwgYnV0IGlzIGZlbHQgdG8gYmUgb2YKLQkJIC8vIG1pbmltYWwgcGVyZm9ybWFuY2UgaW1wYWN0LgotCi0KLQkJIHNlbF9iMnggPSBiMnhfcmVxICYgfm1nbXRfcmVxICYgKGIyeF9yZWFkIHwgYjJ4X3dyaXRlKTsKLQkJIGlfeGZyX2NtZCA9IGBTRFJfQlQ7Ci0JICAgICAgZW5kIC8vIGlmICh+bF93cmFwKQotCi0JICAgICAgZWxzZSBiZWdpbgotCQkgLy8gV3JhcCBtb2RlIHRyYW5zZmVyLCBieSBkZWZpbml0aW9uIGlzIGVuZCBvZiBidXJzdAotCQkgLy8gYm91bmRhcnkgCi0KLQkJIHNlbF9iMnggPSBiMnhfcmVxICYgfm1nbXRfcmVxICYgfmIyeF9wcmVjaGdfaGl0OwotCQkgaV94ZnJfY21kID0gYFNEUl9ERVNFTDsKLQkgICAgICBlbmQgLy8gZWxzZTogIWlmKH5sX3dyYXApCi0JICAgICAgCi0JICAgICAgbmV4dF94ZnJfc3QgPSAofm1nbXRfcmVxICYgYjJ4X3JlcSAmIGIyeF9yZWFkKSA/IGBYRlJfUkVBRCA6IAotCQkJICAgICh+bWdtdF9yZXEgJiBiMnhfcmVxICYgYjJ4X3dyaXRlKSA/IGBYRlJfV1JJVEUgOiAKLQkJCSAgICBgWEZSX0lETEU7Ci0KLQkgICBlbmQgLy8gaWYgKGxfeGZyX2VuZCkKLQotCSAgIGVsc2UgYmVnaW4KLQkgICAgICAvLyBOb3QgZW5kIG9mIHRyYW5zZmVyCi0JICAgICAgLy8gSWYgY3VycmVudCB0cmFuc2ZlciB3YXMgbm90IHdyYXAgbW9kZSBhbmQgd2UgYXJlIGF0Ci0JICAgICAgLy8gdGhlIHN0YXJ0IG9mIGEgYnVyc3QgYm91bmRhcnkgaXNzdWUgYW5vdGhlciBSIGNtZCB0bwotCSAgICAgIC8vIHN0ZXAgc2VxdWVtdGlhbGx5IHRocnUgbWVtb3J5LCBFTFNFLAotCSAgICAgIC8vIGlzc3VlIHByZWNoYXJnZS9hY3RpdmF0ZSBjb21tYW5kcyBmcm9tIHRoZSBiYW5rIGNvbnRyb2wKLQotCSAgICAgIGlmIChidXJzdF9iZHJ5ICYgfmxfd3JhcCkgYmVnaW4KLQkJIHNlbF9iMnggPSAxJ2IwOwotCQkgaV94ZnJfY21kID0gYFNEUl9XUklURTsKLQkgICAgICBlbmQgLy8gaWYgKGJ1cnN0X2JkcnkgJiB+bF93cmFwKQotCSAgICAgIAotCSAgICAgIGVsc2UgYmVnaW4KLQkJIHNlbF9iMnggPSBiMnhfcmVxICYgfm1nbXRfcmVxOwotCQkgaV94ZnJfY21kID0gYFNEUl9ERVNFTDsKLQkgICAgICBlbmQgLy8gZWxzZTogIWlmKGJ1cnN0X2JkcnkgJiB+bF93cmFwKQotCi0JICAgICAgbmV4dF94ZnJfc3QgPSBgWEZSX1dSSVRFOwotCSAgIGVuZCAvLyBlbHNlOiAhaWYobF94ZnJfZW5kKQotCi0JZW5kIC8vIGNhc2U6IGBYRlJfV1JJVEUKLQotICAgICAgZW5kY2FzZSAvLyBjYXNlKHhmcl9zdCkKLQotICAgZW5kIC8vIGFsd2F5cyBAICh4ZnJfc3Qgb3IgLi4uKQotCi0gICAvLyBzaWduYWxzIHRvIGJhbmtfY3RsICh4MmJfcmVmcmVzaCwgeDJiX2FjdF9vaywgeDJiX3Jkb2ssIHgyYl93cm9rLAotICAgLy8geDJiX3ByZV9va1szOjBdIAotCi0gICBhc3NpZ24geDJiX3JlZnJlc2ggPSAoeGZyX2NtZCA9PSBgU0RSX1JFRlJFU0gpID8gMSdiMSA6IDEnYjA7Ci0KLSAgIGFzc2lnbiB4MmJfYWN0X29rID0gfmFjdF9jbWQgJiB+ZF9hY3RfY21kOwotCi0gICBhc3NpZ24geDJiX3Jkb2sgPSByZG9rOwotCi0gICBhc3NpZ24geDJiX3dyb2sgPSB3cm9rOwotCi0gICAvL2Fzc2lnbiB4MmJfcHJlX29rWzBdID0gKGxfYmEgPT0gMidiMDApID8gY2JfcHJlX29rIDogMSdiMTsKLSAgIC8vYXNzaWduIHgyYl9wcmVfb2tbMV0gPSAobF9iYSA9PSAyJ2IwMSkgPyBjYl9wcmVfb2sgOiAxJ2IxOwotICAgLy9hc3NpZ24geDJiX3ByZV9va1syXSA9IChsX2JhID09IDInYjEwKSA/IGNiX3ByZV9vayA6IDEnYjE7Ci0gICAvL2Fzc2lnbiB4MmJfcHJlX29rWzNdID0gKGxfYmEgPT0gMidiMTEpID8gY2JfcHJlX29rIDogMSdiMTsKLSAgIAotICAgYXNzaWduIHgyYl9wcmVfb2tbMF0gPSBjYl9wcmVfb2s7Ci0gICBhc3NpZ24geDJiX3ByZV9va1sxXSA9IGNiX3ByZV9vazsKLSAgIGFzc2lnbiB4MmJfcHJlX29rWzJdID0gY2JfcHJlX29rOwotICAgYXNzaWduIHgyYl9wcmVfb2tbM10gPSBjYl9wcmVfb2s7Ci0gICBhc3NpZ24gbGFzdF9idXJzdCA9IChsZF94ZnIpID8gYjJ4X2xhc3QgOiBsX2xhc3Q7Ci0gICAKLSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAvLyBBUFAgRGF0YSBJL0YKLQotICAgd2lyZSBbU0RSX0RXLTE6MF0gCXgyYV9yZGR0OwotCi0gICAvL2Fzc2lnbiB4MmFfc3RhcnQgPSAobGRfeGZyKSA/IGIyeF9zdGFydCA6IGxfc3RhcnQ7Ci0gICBhc3NpZ24geDJhX3Jkc3RhcnQgPSBkX3JkX3N0YXJ0OwotICAgYXNzaWduIHgyYV93cnN0YXJ0ID0gd3Jfc3RhcnQ7Ci0gICAKLSAgIGFzc2lnbiB4MmFfcmRsYXN0ID0gZF9yZF9sYXN0OwotICAgYXNzaWduIHgyYV93cmxhc3QgPSB3cl9sYXN0OwotCi0gICBhc3NpZ24geDJhX2lkID0gKGxkX3hmcikgPyBiMnhfaWQgOiBsX2lkOwotCi0gICBhc3NpZ24geDJhX3JkZHQgPSBzZHJfZGluOwotCi0gICBhc3NpZ24geDJhX3dybmV4dCA9IHdyX25leHQ7Ci0KLSAgIGFzc2lnbiB4MmFfcmRvayA9IGRfcmRfbmV4dDsKLSAgIAotICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgIC8vIFNEUkFNIEkvRgotCi0gICByZWcgCQkJCXNkcl9jc19uLCBzZHJfY2tlLCBzZHJfcmFzX24sIHNkcl9jYXNfbiwKLQkJCQlzZHJfd2VfbjsgCi0gICByZWcgW1NEUl9CVy0xOjBdIAlzZHJfZHFtOwotICAgcmVnIFsxOjBdIAkJCXNkcl9iYTsKLSAgIHJlZyBbMTI6MF0gCQkJc2RyX2FkZHI7Ci0gICByZWcgW1NEUl9EVy0xOjBdIAlzZHJfZG91dDsKLSAgIHJlZyBbU0RSX0JXLTE6MF0gCXNkcl9kZW5fbjsKLQotICAgYWx3YXlzIEAgKHBvc2VkZ2UgY2xrKQotICAgICAgaWYgKH5yZXNldF9uKSBiZWdpbgotCSBzZHJfY3NfbiA8PSAxJ2IxOwotCSBzZHJfY2tlIDw9IDEnYjE7Ci0JIHNkcl9yYXNfbiA8PSAxJ2IxOwotCSBzZHJfY2FzX24gPD0gMSdiMTsKLQkgc2RyX3dlX24gPD0gMSdiMTsKLQkgc2RyX2RxbSAgIDw9IHtTRFJfQld7MSdiMX19OwotCSBzZHJfZGVuX24gPD0ge1NEUl9CV3sxJ2IxfX07Ci0gICAgICBlbmQgLy8gaWYgKH5yZXNldF9uKQotICAgICAgZWxzZSBiZWdpbgotCSBzZHJfY3NfbiA8PSB4ZnJfY21kWzNdOwotCSBzZHJfcmFzX24gPD0geGZyX2NtZFsyXTsKLQkgc2RyX2Nhc19uIDw9IHhmcl9jbWRbMV07Ci0JIHNkcl93ZV9uIDw9IHhmcl9jbWRbMF07Ci0JIHNkcl9ja2UgPD0gKHhmcl9zdCAhPSBgWEZSX0lETEUpID8gMSdiMSA6IAotCQkgICAgfihtZ210X2lkbGUgJiBiMnhfaWRsZSAmIHIyeF9pZGxlKTsKLQkgc2RyX2RxbSA8PSAod3JfbmV4dCkgPyBhMnhfd3Jlbl9uIDoge1NEUl9CV3sxJ2IwfX07Ci0gICAgICAgICBzZHJfZGVuX24gPD0gKHdyX25leHQpID8ge1NEUl9CV3sxJ2IwfX0gOiB7U0RSX0JXezEnYjF9fTsKLSAgICAgIGVuZCAvLyBlbHNlOiAhaWYofnJlc2V0X24pCi0KLSAgIGFsd2F5cyBAIChwb3NlZGdlIGNsaykgYmVnaW4gCi0KLSAgICAgIGlmICh+eGZyX2NtZFszXSkgYmVnaW4gCi0JIHNkcl9hZGRyIDw9IHhmcl9hZGRyOwotCSBzZHJfYmEgPD0geGZyX2JhOwotICAgICAgZW5kIC8vIGlmICh+eGZyX2NtZFszXSkKLSAgICAgIAotICAgICAgc2RyX2RvdXQgPD0gKHdyX25leHQpID8gYTJ4X3dyZHQgOiBzZHJfZG91dDsKLQotICAgZW5kIC8vIGFsd2F5cyBAIChwb3NlZGdlIGNsaykKLSAgIAotICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgIC8vIFJlZnJlc2ggYW5kIEluaXRpYWxpemF0aW9uCi0KLSAgIGBkZWZpbmUgTUdNX1BPV0VSVVAgICAgICAgICAzJ2IwMDAKLSAgIGBkZWZpbmUgTUdNX1BSRUNIQVJHRSAgICAzJ2IwMDEKLSAgIGBkZWZpbmUgTUdNX1BDSFdUICAgICAgICAzJ2IwMTAKLSAgIGBkZWZpbmUgTUdNX1JFRlJFU0ggICAgICAzJ2IwMTEKLSAgIGBkZWZpbmUgTUdNX1JFRldUICAgICAgICAzJ2IxMDAKLSAgIGBkZWZpbmUgTUdNX01PREVfUkVHICAgICAzJ2IxMDEKLSAgIGBkZWZpbmUgTUdNX01PREVfV1QgICAgICAzJ2IxMTAKLSAgIGBkZWZpbmUgTUdNX0FDVElWRSAgICAgICAzJ2IxMTEKLSAgIAotICAgcmVnIFsyOjBdICAgICAgIG1nbXRfc3QsIG5leHRfbWdtdF9zdDsKLSAgIHJlZyBbMzowXSAJICAgdG1yMCwgdG1yMF9kOwotICAgcmVnIFszOjBdIAkgICBjbnRyMSwgY250cjFfZDsKLSAgIHdpcmUgCSAgIHRtcjBfdGMsIGNudHIxX3RjLCByZnNoX3RpbWVyX3RjLCByZWZfcmVxLCBwcmVjaGFyZ2Vfb2s7Ci0gICByZWcgCQkgICBsZF90bXIwLCBsZF9jbnRyMSwgZGVjX2NudHIxLCBzZXRfc2RyX2luaXRfZG9uZTsKLSAgIHJlZyBbYFNEUl9SRlNIX1RJTUVSX1ctMSA6IDBdICByZnNoX3RpbWVyOwotICAgcmVnIFtgU0RSX1JGU0hfUk9XX0NOVF9XLTE6MF0gIHJmc2hfcm93X2NudDsKLSAgIAotICAgYWx3YXlzIEAgKHBvc2VkZ2UgY2xrKSAKLSAgICAgIGlmICh+cmVzZXRfbikgYmVnaW4KLQkgbWdtdF9zdCA8PSBgTUdNX1BPV0VSVVA7Ci0JIHRtcjAgPD0gNCdiMDsKLQkgY250cjEgPD0gNCdoNzsKLQkgcmZzaF90aW1lciA8PSAwOwotCSByZnNoX3Jvd19jbnQgPD0gMDsKLQkgc2RyX2luaXRfZG9uZSA8PSAxJ2IwOwotICAgICAgZW5kIC8vIGlmICh+cmVzZXRfbikKLSAgICAgIGVsc2UgYmVnaW4KLQkgbWdtdF9zdCA8PSBuZXh0X21nbXRfc3Q7Ci0JIHRtcjAgPD0gKGxkX3RtcjApID8gdG1yMF9kIDoKLQkJICAofnRtcjBfdGMpID8gdG1yMCAtIDEgOiB0bXIwOwotCSBjbnRyMSA8PSAobGRfY250cjEpID8gY250cjFfZCA6Ci0JCSAgKGRlY19jbnRyMSkgPyBjbnRyMSAtIDEgOiBjbnRyMTsKLQkgc2RyX2luaXRfZG9uZSA8PSAoc2V0X3Nkcl9pbml0X2RvbmUgfCBzZHJfaW5pdF9kb25lKSAmIHNkcmFtX2VuYWJsZTsKLQkgcmZzaF90aW1lciA8PSAocmZzaF90aW1lcl90YykgPyAwIDogcmZzaF90aW1lciArIDE7Ci0JIHJmc2hfcm93X2NudCA8PSAofnNldF9zZHJfaW5pdF9kb25lKSA/IDAgOgotCQkJIChyZnNoX3RpbWVyX3RjKSA/IHJmc2hfcm93X2NudCArIDEgOiByZnNoX3Jvd19jbnQ7Ci0gICAgICBlbmQgLy8gZWxzZTogIWlmKH5yZXNldF9uKQotCi0gICBhc3NpZ24gdG1yMF90YyA9IH58dG1yMDsKLQotICAgYXNzaWduIGNudHIxX3RjID0gfnxjbnRyMTsKLQotICAgYXNzaWduIHJmc2hfdGltZXJfdGMgPSAocmZzaF90aW1lciA9PSByZnNoX3RpbWUpID8gMSdiMSA6IDEnYjA7Ci0KLSAgIGFzc2lnbiByZWZfcmVxID0gKHJmc2hfcm93X2NudCA+PSByZnNoX3JtYXgpID8gMSdiMSA6IDEnYjA7Ci0KLSAgIGFzc2lnbiBwcmVjaGFyZ2Vfb2sgPSBjYl9wcmVfb2sgJiBiMnhfdHJhc19vazsKLQotICAgYXNzaWduIHhmcl9iYW5rX3NlbCA9IGxfYmE7Ci0gICAKLSAgIGFsd2F5cyBAIChtZ210X3N0IG9yIHNkcmFtX2VuYWJsZSBvciBtZ210X2FjayBvciB0cnBfZGVsYXkgb3IgdG1yMF90YyBvcgotCSAgICAgY250cjFfdGMgb3IgdHJjYXJfZGVsYXkgb3IgcmZzaF9yb3dfY250IG9yIHJlZl9yZXEgb3Igc2RyX2luaXRfZG9uZQotCSAgICAgb3IgcHJlY2hhcmdlX29rIG9yIHNkcmFtX21vZGVfcmVnKSBiZWdpbiAKLQotICAgICAgY2FzZSAobWdtdF9zdCkgICAgICAgICAKLQotCWBNR01fUE9XRVJVUCA6IGJlZ2luCi0JICAgbWdtdF9pZGxlID0gMSdiMDsKLQkgICBtZ210X3JlcSA9IDEnYjA7Ci0JICAgbWdtdF9jbWQgPSBgU0RSX0RFU0VMOwotCSAgIG1nbXRfYmEgPSAyJ2IwOwotCSAgIG1nbXRfYWRkciA9IDEzJ2g0MDA7ICAgIC8vIEExMCA9IDEgPT4gYWxsIGJhbmtzCi0JICAgbGRfdG1yMCA9IDEnYjA7Ci0JICAgdG1yMF9kID0gNCdiMDsKLQkgICBkZWNfY250cjEgPSAxJ2IwOwotCSAgIGxkX2NudHIxID0gMSdiMTsKLQkgICBjbnRyMV9kID0gNCdoZjsgLy8gY2hhbmdlZCBmb3Igc2RyYW1zIHdpdGggaGlnaGVyIHJlZnJlc2ggY3ljbGVzIGR1cmluZyBpbml0aWFsaXphdGlvbgotCSAgIHNldF9zZHJfaW5pdF9kb25lID0gMSdiMDsKLQkgICBuZXh0X21nbXRfc3QgPSAoc2RyYW1fZW5hYmxlKSA/IGBNR01fUFJFQ0hBUkdFIDogYE1HTV9QT1dFUlVQOyAKLQllbmQgLy8gY2FzZTogYE1HTV9QT1dFUlVQCi0KLQlgTUdNX1BSRUNIQVJHRSA6IGJlZ2luCSAgIC8vIFByZWNoYXJnZSBhbGwgYmFua3MKLQkgICBtZ210X2lkbGUgPSAxJ2IwOwotCSAgIG1nbXRfcmVxID0gMSdiMTsKLQkgICBtZ210X2NtZCA9IChwcmVjaGFyZ2Vfb2spID8gYFNEUl9QUkVDSEFSR0UgOiBgU0RSX0RFU0VMOwotCSAgIG1nbXRfYmEgPSAyJ2IwOwotCSAgIG1nbXRfYWRkciA9IDEzJ2g0MDA7CSAgIC8vIEExMCA9IDEgPT4gYWxsIGJhbmtzCi0JICAgbGRfdG1yMCA9IG1nbXRfYWNrOwotCSAgIHRtcjBfZCA9IHRycF9kZWxheTsKLQkgICBsZF9jbnRyMSA9IDEnYjA7Ci0JICAgY250cjFfZCA9IDQnaDc7Ci0JICAgZGVjX2NudHIxID0gMSdiMDsKLQkgICBzZXRfc2RyX2luaXRfZG9uZSA9IDEnYjA7Ci0JICAgbmV4dF9tZ210X3N0ID0gKHByZWNoYXJnZV9vayAmIG1nbXRfYWNrKSA/IGBNR01fUENIV1QgOiBgTUdNX1BSRUNIQVJHRTsKLQllbmQgLy8gY2FzZTogYE1HTV9QUkVDSEFSR0UKLQkKLQlgTUdNX1BDSFdUIDogYmVnaW4JICAgLy8gV2FpdCBmb3IgVHJwCi0JICAgbWdtdF9pZGxlID0gMSdiMDsKLQkgICBtZ210X3JlcSA9IDEnYjE7Ci0JICAgbWdtdF9jbWQgPSBgU0RSX0RFU0VMOwotCSAgIG1nbXRfYmEgPSAyJ2IwOwotCSAgIG1nbXRfYWRkciA9IDEzJ2g0MDA7CSAgIC8vIEExMCA9IDEgPT4gYWxsIGJhbmtzCi0JICAgbGRfdG1yMCA9IDEnYjA7Ci0JICAgdG1yMF9kID0gdHJwX2RlbGF5OwotCSAgIGxkX2NudHIxID0gMSdiMDsKLQkgICBjbnRyMV9kID0gNCdiMDsKLQkgICBkZWNfY250cjEgPSAxJ2IwOwotCSAgIHNldF9zZHJfaW5pdF9kb25lID0gMSdiMDsKLQkgICBuZXh0X21nbXRfc3QgPSAodG1yMF90YykgPyBgTUdNX1JFRlJFU0ggOiBgTUdNX1BDSFdUOwotCWVuZCAvLyBjYXNlOiBgTUdNX1BSRUNIQVJHRQotCQotCWBNR01fUkVGUkVTSCA6IGJlZ2luCSAgIC8vIFJlZnJlc2gKLQkgICBtZ210X2lkbGUgPSAxJ2IwOwotCSAgIG1nbXRfcmVxID0gMSdiMTsKLQkgICBtZ210X2NtZCA9IGBTRFJfUkVGUkVTSDsKLQkgICBtZ210X2JhID0gMidiMDsKLQkgICBtZ210X2FkZHIgPSAxMydoNDAwOwkgICAvLyBBMTAgPSAxID0+IGFsbCBiYW5rcwotCSAgIGxkX3RtcjAgPSBtZ210X2FjazsKLQkgICB0bXIwX2QgPSB0cmNhcl9kZWxheTsKLQkgICBkZWNfY250cjEgPSBtZ210X2FjazsKLQkgICBsZF9jbnRyMSA9IDEnYjA7Ci0JICAgY250cjFfZCA9IDQnaDc7Ci0JICAgc2V0X3Nkcl9pbml0X2RvbmUgPSAxJ2IwOwotCSAgIG5leHRfbWdtdF9zdCA9IChtZ210X2FjaykgPyBgTUdNX1JFRldUIDogYE1HTV9SRUZSRVNIOwotCWVuZCAvLyBjYXNlOiBgTUdNX1JFRlJFU0gKLQkKLQlgTUdNX1JFRldUIDogYmVnaW4JICAgLy8gV2FpdCBmb3IgdHJjYXIKLQkgICBtZ210X2lkbGUgPSAxJ2IwOwotCSAgIG1nbXRfcmVxID0gMSdiMTsKLQkgICBtZ210X2NtZCA9IGBTRFJfREVTRUw7Ci0JICAgbWdtdF9iYSA9IDInYjA7Ci0JICAgbWdtdF9hZGRyID0gMTMnaDQwMDsJICAgLy8gQTEwID0gMSA9PiBhbGwgYmFua3MKLQkgICBsZF90bXIwID0gMSdiMDsKLQkgICB0bXIwX2QgPSB0cmNhcl9kZWxheTsKLQkgICBkZWNfY250cjEgPSAxJ2IwOwotCSAgIGxkX2NudHIxID0gMSdiMDsKLQkgICBjbnRyMV9kID0gNCdoNzsKLQkgICBzZXRfc2RyX2luaXRfZG9uZSA9IDEnYjA7Ci0JICAgbmV4dF9tZ210X3N0ID0gKH50bXIwX3RjKSA/IGBNR01fUkVGV1QgOiAKLQkJCSAgKH5jbnRyMV90YykgPyBgTUdNX1JFRlJFU0ggOgotCQkJICAoc2RyX2luaXRfZG9uZSkgPyBgTUdNX0FDVElWRSA6IGBNR01fTU9ERV9SRUc7Ci0JZW5kIC8vIGNhc2U6IGBNR01fUkVGV1QKLQkKLQlgTUdNX01PREVfUkVHIDogYmVnaW4JICAgLy8gUHJvZ3JhbSBtb2RlIFJlZ2lzdGVyICYgd2FpdCBmb3IgCi0JICAgbWdtdF9pZGxlID0gMSdiMDsKLQkgICBtZ210X3JlcSA9IDEnYjE7Ci0JICAgbWdtdF9jbWQgPSBgU0RSX01PREU7Ci0JICAgbWdtdF9iYSA9IHsxJ2IwLCBzZHJhbV9tb2RlX3JlZ1sxMV19OwotCSAgIG1nbXRfYWRkciA9IHNkcmFtX21vZGVfcmVnOwotCSAgIGxkX3RtcjAgPSBtZ210X2FjazsKLQkgICB0bXIwX2QgPSA0J2g3OwotCSAgIGRlY19jbnRyMSA9IDEnYjA7Ci0JICAgbGRfY250cjEgPSAxJ2IwOwotCSAgIGNudHIxX2QgPSA0J2g3OwotCSAgIHNldF9zZHJfaW5pdF9kb25lID0gMSdiMDsKLQkgICBuZXh0X21nbXRfc3QgPSAobWdtdF9hY2spID8gYE1HTV9NT0RFX1dUIDogYE1HTV9NT0RFX1JFRzsKLQllbmQgLy8gY2FzZTogYE1HTV9NT0RFX1JFRwotCQotCWBNR01fTU9ERV9XVCA6IGJlZ2luCSAgIC8vIFdhaXQgZm9yIHRNUkQKLQkgICBtZ210X2lkbGUgPSAxJ2IwOwotCSAgIG1nbXRfcmVxID0gMSdiMTsKLQkgICBtZ210X2NtZCA9IGBTRFJfREVTRUw7Ci0JICAgbWdtdF9iYSA9IDInYng7Ci0JICAgbWdtdF9hZGRyID0gMTMnYng7Ci0JICAgbGRfdG1yMCA9IDEnYjA7Ci0JICAgdG1yMF9kID0gNCdoNzsKLQkgICBkZWNfY250cjEgPSAxJ2IwOwotCSAgIGxkX2NudHIxID0gMSdiMDsKLQkgICBjbnRyMV9kID0gNCdoNzsKLQkgICBzZXRfc2RyX2luaXRfZG9uZSA9IDEnYjA7Ci0JICAgbmV4dF9tZ210X3N0ID0gKH50bXIwX3RjKSA/IGBNR01fTU9ERV9XVCA6IGBNR01fQUNUSVZFOwotCWVuZCAvLyBjYXNlOiBgTUdNX01PREVfV1QKLQkKLQlgTUdNX0FDVElWRSA6IGJlZ2luCSAgIC8vIFdhaXQgZm9yIHJlZl9yZXEKLQkgICBtZ210X2lkbGUgPSB+cmVmX3JlcTsKLQkgICBtZ210X3JlcSA9IDEnYjA7Ci0JICAgbWdtdF9jbWQgPSBgU0RSX0RFU0VMOwotCSAgIG1nbXRfYmEgPSAyJ2J4OwotCSAgIG1nbXRfYWRkciA9IDEzJ2J4OwotCSAgIGxkX3RtcjAgPSAxJ2IwOwotCSAgIHRtcjBfZCA9IDQnaDc7Ci0JICAgZGVjX2NudHIxID0gMSdiMDsKLQkgICBsZF9jbnRyMSA9IHJlZl9yZXE7Ci0JICAgY250cjFfZCA9IHJmc2hfcm93X2NudDsKLQkgICBzZXRfc2RyX2luaXRfZG9uZSA9IDEnYjE7Ci0JICAgbmV4dF9tZ210X3N0ID0gICh+c2RyYW1fZW5hYmxlKSA/IGBNR01fUE9XRVJVUCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAocmVmX3JlcSkgPyBgTUdNX1BSRUNIQVJHRSA6IGBNR01fQUNUSVZFOwotCWVuZCAvLyBjYXNlOiBgTUdNX01PREVfV1QKLQkKLSAgICAgIGVuZGNhc2UgLy8gY2FzZShtZ210X3N0KQotCi0gICBlbmQgLy8gYWx3YXlzIEAgKG1nbXRfc3Qgb3IgLi4uLikKLSAgIAotCSAgIAotCi1lbmRtb2R1bGUgLy8gc2RyX3hmcl9jdGwKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2RlZnMvc2RyY19kZWZpbmUudiBiL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2RlZnMvc2RyY19kZWZpbmUudgpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDE4YzY4My4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzL3NkcmNfZGVmaW5lLnYKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLWBkZWZpbmUgU0RSX1JFUV9JRF9XICAgICAgIDQKLQotYGRlZmluZSBTRFJfUkZTSF9USU1FUl9XICAgIDEyCi1gZGVmaW5lIFNEUl9SRlNIX1JPV19DTlRfVyAgIDMKLQotLy8gQjJYIENvbW1hbmQKLQotYGRlZmluZSBPUF9QUkUgICAgICAgICAgIDInYjAwCi1gZGVmaW5lIE9QX0FDVCAgICAgICAgICAgMidiMDEKLWBkZWZpbmUgT1BfUkQgICAgICAgICAgICAyJ2IxMAotYGRlZmluZSBPUF9XUiAgICAgICAgICAgIDInYjExCi0KLS8vIFNEUkFNIENvbW1hbmRzIChDU19OLCBSQVNfTiwgQ0FTX04sIFdFX04pCi0KLWBkZWZpbmUgU0RSX0RFU0VMICAgICAgICA0J2IxMTExCi1gZGVmaW5lIFNEUl9OT09QICAgICAgICAgNCdiMDExMQotYGRlZmluZSBTRFJfQUNUSVZBVEUgICAgIDQnYjAwMTEKLWBkZWZpbmUgU0RSX1JFQUQgICAgICAgICA0J2IwMTAxCi1gZGVmaW5lIFNEUl9XUklURSAgICAgICAgNCdiMDEwMAotYGRlZmluZSBTRFJfQlQgICAgICAgICAgIDQnYjAxMTAKLWBkZWZpbmUgU0RSX1BSRUNIQVJHRSAgICA0J2IwMDEwCi1gZGVmaW5lIFNEUl9SRUZSRVNIICAgICAgNCdiMDAwMQotYGRlZmluZSBTRFJfTU9ERSAgICAgICAgIDQnYjAwMDAKLQotYGRlZmluZSAgQVNJQyAgICAgICAgICAgIDEnYjEKLWBkZWZpbmUgIEZQR0EgICAgICAgICAgICAxJ2IwIAotLy8gRG9uJ3QgRW5hYmxlIEZQR0EgbW9kZSwgdGhlcmUgaXMgZnVuY3Rpb25hbCBidWcgIGluIGhhbmRsaW5nIEFjdGl2ZSB0bwotLy8gUHJlY2hhcmdlIHRpbWluZwotYGRlZmluZSAgVEFSR0VUX0RFU0lHTiAgIGBBU0lDCi0vLyAxMiBiaXQgc3VidHJhY3RvciBpcyBub3QgZmVhc2liaWxlIGZvciBGUEdBLCBzbyBjaGFuZ2VkIHRvIDYgYml0cwotYGRlZmluZSAgUkVRX0JXICAgIChgVEFSR0VUX0RFU0lHTiA9PSBgRlBHQSkgPyA2IDogMTIgICAvLyAgUmVxdWVzdCBXaWR0aAotCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9maWxlbGlzdF9ydGwuZiBiL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2ZpbGVsaXN0X3J0bC5mCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5ZTBiMzVjLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2ZpbGVsaXN0X3J0bC5mCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQotLy8gCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+Ci0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLi90b3Avc2RyY190b3AudiAKLS4vd2Iyc2RyYy93YjJzZHJjLnYgCi0uLi8uLi9saWIvYXN5bmNfZmlmby5zdiAgCi0uL2NvcmUvc2RyY19jb3JlLnYgCi0uL2NvcmUvc2RyY19iYW5rX2N0bC52IAotLi9jb3JlL3NkcmNfYmFua19mc20udiAKLS4vY29yZS9zZHJjX2JzX2NvbnZlcnQudiAKLS4vY29yZS9zZHJjX3JlcV9nZW4udiAKLS4vY29yZS9zZHJjX3hmcl9jdGwudiAKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL3J1bl9tb2RlbHNpbSBiL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL3J1bl9tb2RlbHNpbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggM2EwNWM5OC4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9ydW5fbW9kZWxzaW0KKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotIyAvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQotIyAvLyAKLSMgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jIC8vCi0jIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jIC8vCi0jIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0jIC8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgotIyAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi12bGliIHdvcmsKLXZsb2cgLWYgZmlsZWxpc3RfcnRsLmYgK2luY2RpcisuL2RlZnMKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL3RvcC9zZHJjX3RvcC52IGIvdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvdG9wL3NkcmNfdG9wLnYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGNmZjVlNzYuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvdG9wL3NkcmNfdG9wLnYKKysrIC9kZXYvbnVsbApAQCAtMSw0MDQgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAotLy8gCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KLS8vCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBTRFJBTSBDb250cm9sbGVyIHRvcCBGaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHNkcmFtIGNvbnRyb2xsZXIgcHJvamVjdCAgICAgICAgICAgCi0gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQKLSAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgIAotICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvc2RyX2N0cmwvICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIERlc2NyaXB0aW9uOiBTRFJBTSBDb250cm9sbGVyIFRvcCBNb2R1bGUuCi0gICAgU3VwcG9ydCA4MS82LzMyIEJpdCBTRFJBTS4KLSAgICBDb2x1bW4gQWRkcmVzcyBpcyBQcm9ncmFtbWFibGUKLSAgICBCYW5rIEJpdCBhcmUgMiBCaXQKLSAgICBSb3cgQml0cyBhcmUgMTIgQml0cwotCi0gICAgVGhpcyBibG9jayBpbnRlZ3JhdGUgZm9sbG93aW5nIHN1YiBtb2R1bGVzCi0KLSAgICBzZHJjX2NvcmUgICAKLSAgICAgICAgU0RSQU0gQ29udHJvbGxlciBmaWxlCi0gICAgd2Iyc2RyYyAgICAKLSAgICAgICAgVGhpcyBtb2R1bGUgdHJhbnNhbGF0ZSB0aGUgYnVzIHByb3RvY2wgZnJvbSB3aXNoYm9uZSB0byBjdXN0b21lCi0Jc2RyYW0gY29udHJvbGxlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgQXV0aG9yKHMpOiBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAKLSAgVmVyc2lvbiAgOiAwLjAgLSA4dGggSmFuIDIwMTIKLSAgICAgICAgICAgICAgICBJbml0aWFsIHZlcnNpb24gd2l0aCAxNi8zMiBCaXQgU0RSQU0gU3VwcG9ydAotICAgICAgICAgICA6IDAuMSAtIDI0dGggSmFuIDIwMTIKLQkgICAgICAgICA4IEJpdCBTRFJBTSBTdXBwb3J0IGlzIGFkZGVkCi0JICAgICAwLjIgLSAzMXN0IEphbiAyMDEyCi0JICAgICAgICAgc2RyYW1fZHEgYW5kIHNkcmFtX3BhZF9jbGsgYXJlIGludGVybmFsbHkgZ2VuZXJhdGVkCi0JICAgICAwLjMgLSAyNnRoIEFwcmlsIDIwMTMKLSAgICAgICAgICAgICAgICAgIFNkcmFtIEFkZHJlc3Mgd2l0ZGggaXMgaW5jcmVhc2VkIGZyb20gMTIgdG8gMTNiaXRzCi0JICAgICAwLjMgLSAyNXRoIEp1bmUgMjAyMQotICAgICAgICAgICAgICAgICAgTW92ZSB0aGUgUGFkIGxvZ2ljIGluc2lkZSB0aGUgc2RyYW0gdG8gYXZvaWQgY29tYm8gbG9naWMKLQkJICBhdCBkaWdpdGFsIGNvcmUgbGV2ZWwKLSAgICAgICAgICAgICAwLjQgLSAyN3RoIEp1bmUgMjAyMQotCSAgICAgICAgICBVbnVzZWQgcG9ydCB3Yl9jdGlfaSByZW1vdmVkCi0gICAgICAgICAgICAgMC41IC0gMjl0aCBKdW5lIDIwMjEKLQkgICAgICAgICAgV2lzaGJvbmUgU3RhZ2dpbmcgRkYgYWRkZWQgdG8gYnJlYWsgdGltaW5nIHBhdGgKLSAgICAgICAgICAgICAwLjYgLSA2dGggSnVseSAyMDIxLCBEaW5lc2ggQQotCSAgICAgICAgICAzMiBiaXQgZGVidWcgcG9ydCBhZGRlZAotCSAgICAgMC43IC0gMjd0aCBBdWcgMjAyMSwgRGluZXNoIEEKLQkJICBEaXNhYmxpbmcgdGhlIGBUQVJHRVRfREVTSUdOIHdpdGggRlBHQSBkZWZpbmUgLCBCcmVha2luZyB0aW1pbmcgcGF0aCBjcmVhdGluZyBmdW5jdGlvbmFsIGlzc3VlCi0gICAgICAgICAgICAgICAgICBSZWNvbW1uZW5kZWQgdG8gdXNlIG9ubHQgaW4gQVNJQyBNb2RlLiBJbiBGUEdBIG1vZGUsIHRSQVMgdmlvbGF0aW9uIGFyZSBub3RpY2VkIGFuZCBkZXNpZ24KLSAgICAgICAgICAgICAgICAgIGhhcyBjb3JuZXIgY2FzZSBiZXR3ZWVuIEFjdGl2ZSB0byBQcmUtY2hhcmdlCi0gICAgICAgICAgICAgICAgICBFUlJPUjogdFJBUyB2aW9sYXRpb24gZHVyaW5nIFByZWNoYXJnZSBhbGwgYmFuawotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAKLSByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgCi0gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIAotIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIAotIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAKLSBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgCi0gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIAotbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgCi0gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIAotIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAKLSBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgCi0gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgCi0gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIAotIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLWBpbmNsdWRlICJzZHJjX2RlZmluZS52IgotbW9kdWxlIHNkcmNfdG9wIAotICAgICAgICAgICAoCi0gICAgICAgICAgICAgICAgICAgIGNmZ19zZHJfd2lkdGggICAgICAgLAotICAgICAgICAgICAgICAgICAgICBjZmdfY29sYml0cyAgICAgICAgICwKLQotCQkgICAgc2RyYW1fZGVidWcgICAgICAgICAsCi0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIFdCIGJ1cwotICAgICAgICAgICAgICAgICAgICB3Yl9yc3RfbiAgICAgICAgICAgICwKLSAgICAgICAgICAgICAgICAgICAgd2JfY2xrX2kgICAgICAgICAgICAsCi0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICB3Yl9zdGJfaSAgICAgICAgICAgICwKLSAgICAgICAgICAgICAgICAgICAgd2JfYWNrX28gICAgICAgICAgICAsCi0gICAgICAgICAgICAgICAgICAgIHdiX2FkZHJfaSAgICAgICAgICAgLAotICAgICAgICAgICAgICAgICAgICB3Yl93ZV9pICAgICAgICAgICAgICwKLSAgICAgICAgICAgICAgICAgICAgd2JfZGF0X2kgICAgICAgICAgICAsCi0gICAgICAgICAgICAgICAgICAgIHdiX3NlbF9pICAgICAgICAgICAgLAotICAgICAgICAgICAgICAgICAgICB3Yl9kYXRfbyAgICAgICAgICAgICwKLSAgICAgICAgICAgICAgICAgICAgd2JfY3ljX2kgICAgICAgICAgICAsCi0KLQkJCi0JCS8qIEludGVyZmFjZSB0byBTRFJBTXMgKi8KLSAgICAgICAgICAgICAgICAgICAgc2RyYW1fY2xrICAgICAgICAgICAsCi0gICAgICAgICAgICAgICAgICAgIHNkcmFtX3Jlc2V0biAgICAgICAgLAotCi0gICAgICAgICAgICAgICAgICAgIAotCQkvKiogUGFkIEludGVyZmFjZSAgICAgICAqKi8KLQkJICAgICBpb19pbiAgICAgICAgICAgICAgLAotCQkgICAgIGlvX29lYiAgICAgICAgICAgICAsCi0JICAgICAgICAgICAgIGlvX291dCAgICAgICAgICAgICAsCi0KLQkJLyogUGFyYW1ldGVycyAqLwotICAgICAgICAgICAgICAgICAgICBzZHJfaW5pdF9kb25lICAgICAgICwKLSAgICAgICAgICAgICAgICAgICAgY2ZnX3JlcV9kZXB0aCAgICAgICAsCSAgICAgICAgLy9ob3cgbWFueSByZXEuIGJ1ZmZlciBzaG91bGQgaG9sZAotICAgICAgICAgICAgICAgICAgICBjZmdfc2RyX2VuICAgICAgICAgICwKLSAgICAgICAgICAgICAgICAgICAgY2ZnX3Nkcl9tb2RlX3JlZyAgICAsCi0gICAgICAgICAgICAgICAgICAgIGNmZ19zZHJfdHJhc19kICAgICAgLAotICAgICAgICAgICAgICAgICAgICBjZmdfc2RyX3RycF9kICAgICAgICwKLSAgICAgICAgICAgICAgICAgICAgY2ZnX3Nkcl90cmNkX2QgICAgICAsCi0gICAgICAgICAgICAgICAgICAgIGNmZ19zZHJfY2FzICAgICAgICAgLAotICAgICAgICAgICAgICAgICAgICBjZmdfc2RyX3RyY2FyX2QgICAgICwKLSAgICAgICAgICAgICAgICAgICAgY2ZnX3Nkcl90d3JfZCAgICAgICAsCi0gICAgICAgICAgICAgICAgICAgIGNmZ19zZHJfcmZzaCAgICAgICAgLAotCSAgICAgICAgICAgIGNmZ19zZHJfcmZtYXgKLQkgICAgKTsKLSAgCi1wYXJhbWV0ZXIgICAgICBBUFBfQVcgICA9IDMyOyAgLy8gQXBwbGljYXRpb24gQWRkcmVzcyBXaWR0aAotcGFyYW1ldGVyICAgICAgQVBQX0RXICAgPSAzMjsgIC8vIEFwcGxpY2F0aW9uIERhdGEgV2lkdGggCi1wYXJhbWV0ZXIgICAgICBBUFBfQlcgICA9IDQ7ICAgLy8gQXBwbGljYXRpb24gQnl0ZSBXaWR0aAotcGFyYW1ldGVyICAgICAgQVBQX1JXICAgPSA5OyAgIC8vIEFwcGxpY2F0aW9uIFJlcXVlc3QgV2lkdGgKLQotcGFyYW1ldGVyICAgICAgU0RSX0RXICAgPSA4OyAgLy8gU0RSIERhdGEgV2lkdGggCi1wYXJhbWV0ZXIgICAgICBTRFJfQlcgICA9IDE7ICAgLy8gU0RSIEJ5dGUgV2lkdGgKLSAgICAgICAgICAgICAKLXBhcmFtZXRlciAgICAgIHR3ICAgICAgID0gODsgICAvLyB0YWcgaWQgd2lkdGgKLXBhcmFtZXRlciAgICAgIGJsICAgICAgID0gOTsgICAvLyBidXJzdF9sZW5naHRfd2lkdGggCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEdsb2JhbCBWYXJpYWJsZQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotaW5wdXQgICAgICAgICAgICAgICAgICAgc2RyYW1fY2xrICAgICAgICAgIDsgLy8gU0RSQU0gQ2xvY2sgCi1pbnB1dCAgICAgICAgICAgICAgICAgICBzZHJhbV9yZXNldG4gICAgICAgOyAvLyBSZXNldCBTaWduYWwKLWlucHV0IFsxOjBdICAgICAgICAgICAgIGNmZ19zZHJfd2lkdGggICAgICA7IC8vIDInYjAwIC0gMzIgQml0IFNEUiwgMidiMDEgLSAxNiBCaXQgU0RSLCAyJ2IxeCAtIDggQml0Ci1pbnB1dCBbMTowXSAgICAgICAgICAgICBjZmdfY29sYml0cyAgICAgICAgOyAvLyAyJ2IwMCAtIDggQml0IGNvbHVtbiBhZGRyZXNzLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDInYjAxIC0gOSBCaXQsIDEwIC0gMTAgYml0LCAxMSAtIDExQml0cwotb3V0cHV0IFszMTowXSAgICAgICAgICAgc2RyYW1fZGVidWcgICAgICAgIDsgLy8gU0RSQU0gZGVidWcgc2lnbmFscwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBXaXNoIEJvbmUgSW50ZXJmYWNlCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgCi1pbnB1dCAgICAgICAgICAgICAgICAgICB3Yl9yc3RfbiAgICAgICAgICAgOwotaW5wdXQgICAgICAgICAgICAgICAgICAgd2JfY2xrX2kgICAgICAgICAgIDsKLQotaW5wdXQgICAgICAgICAgICAgICAgICAgd2Jfc3RiX2kgICAgICAgICAgIDsKLW91dHB1dCAgICAgICAgICAgICAgICAgIHdiX2Fja19vICAgICAgICAgICA7Ci1pbnB1dCBbQVBQX0FXLTE6MF0gICAgICB3Yl9hZGRyX2kgICAgICAgICAgOwotaW5wdXQgICAgICAgICAgICAgICAgICAgd2Jfd2VfaSAgICAgICAgICAgIDsgLy8gMSAtIFdyaXRlLCAwIC0gUmVhZAotaW5wdXQgW0FQUF9EVy0xOjBdICAgICAgd2JfZGF0X2kgICAgICAgICAgIDsKLWlucHV0IFtBUFBfRFcvOC0xOjBdICAgIHdiX3NlbF9pICAgICAgICAgICA7IC8vIEJ5dGUgZW5hYmxlCi1vdXRwdXQgW0FQUF9EVy0xOjBdICAgICB3Yl9kYXRfbyAgICAgICAgICAgOwotaW5wdXQgICAgICAgICAgICAgICAgICAgd2JfY3ljX2kgICAgICAgICAgIDsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUGFkIEludGVyZmFjZQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgIAotaW5wdXQgWzI5OjBdCSAgICAgICAgaW9faW4gICAgICAgICAgICAgIDsKLW91dHB1dCBbMjk6MF0JCWlvX29lYiAgICAgICAgICAgICA7Ci1vdXRwdXQgWzI5OjBdCQlpb19vdXQgICAgICAgICAgICAgOwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEludGVyZmFjZSB0byBTRFJBTXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi13aXJlICAgICAgICAgICAgICAgICAgc2RyYW1fcGFkX2NsayAgICAgICA7IC8vIFNkcmFtIGNsb2NrIGxvb3AgYmFjayBmcm9tIHBhZAotd2lyZSAgICAgICAgICAgICAgICAgIHNkcl9ja2UgICAgICAgICAgICAgOyAvLyBTRFJBTSBDS0UKLXdpcmUgCQkgICAgICBzZHJfY3NfbiAgICAgICAgICAgIDsgLy8gU0RSQU0gQ2hpcCBTZWxlY3QKLXdpcmUgICAgICAgICAgICAgICAgICBzZHJfcmFzX24gICAgICAgICAgIDsgLy8gU0RSQU0gcmFzCi13aXJlICAgICAgICAgICAgICAgICAgc2RyX2Nhc19uICAgICAgICAgICA7IC8vIFNEUkFNIGNhcwotd2lyZQkJICAgICAgc2RyX3dlX24gICAgICAgICAgICA7IC8vIFNEUkFNIHdyaXRlIGVuYWJsZQotd2lyZSBbU0RSX0JXLTE6MF0gICAgIHNkcl9kcW0gICAgICAgICAgICAgOyAvLyBTRFJBTSBEYXRhIE1hc2sKLXdpcmUgWzE6MF0gCSAgICAgIHNkcl9iYSAgICAgICAgICAgICAgOyAvLyBTRFJBTSBCYW5rIEVuYWJsZQotd2lyZSBbMTI6MF0gCSAgICAgIHNkcl9hZGRyICAgICAgICAgICAgOyAvLyBTRFJBTSBBZGRyZXNzCi13aXJlIFtTRFJfRFctMTowXSAgICAgcGFkX3Nkcl9kaW4gICAgICAgICA7IC8vIFNEUkEgRGF0YSBJbnB1dAotd2lyZSAgW1NEUl9EVy0xOjBdICAgIHNkcl9kb3V0ICAgICAgICAgICAgOyAvLyBTRFJBTSBEYXRhIE91dHB1dAotd2lyZSAgW1NEUl9CVy0xOjBdICAgIHNkcl9kZW5fbiAgICAgICAgICAgOyAvLyBTRFJBTSBEYXRhIE91dHB1dCBlbmFibGUKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENvbmZpZ3VyYXRpb24gUGFyYW1ldGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotb3V0cHV0ICAgICAgICAgICAgICAgICAgc2RyX2luaXRfZG9uZSAgICAgICA7IC8vIEluZGljYXRlIFNEUkFNIEluaXRpYWxpc2F0aW9uIERvbmUKLWlucHV0IFszOjBdIAkJY2ZnX3Nkcl90cmFzX2QgICAgICA7IC8vIEFjdGl2ZSB0byBwcmVjaGFyZ2UgZGVsYXkKLWlucHV0IFszOjBdICAgICAgICAgICAgIGNmZ19zZHJfdHJwX2QgICAgICAgOyAvLyBQcmVjaGFyZ2UgdG8gYWN0aXZlIGRlbGF5Ci1pbnB1dCBbMzowXSAgICAgICAgICAgICBjZmdfc2RyX3RyY2RfZCAgICAgIDsgLy8gQWN0aXZlIHRvIFIvVyBkZWxheQotaW5wdXQgCQkJY2ZnX3Nkcl9lbiAgICAgICAgICA7IC8vIEVuYWJsZSBTRFJBTSBjb250cm9sbGVyCi1pbnB1dCBbMTowXSAJCWNmZ19yZXFfZGVwdGggICAgICAgOyAvLyBNYXhpbXVtIFJlcXVlc3QgYWNjZXB0ZWQgYnkgU0RSQU0gY29udHJvbGxlcgotaW5wdXQgWzEyOjBdIAkJY2ZnX3Nkcl9tb2RlX3JlZyAgICA7Ci1pbnB1dCBbMjowXSAJCWNmZ19zZHJfY2FzICAgICAgICAgOyAvLyBTRFJBTSBDQVMgTGF0ZW5jeQotaW5wdXQgWzM6MF0gCQljZmdfc2RyX3RyY2FyX2QgICAgIDsgLy8gQXV0by1yZWZyZXNoIHBlcmlvZAotaW5wdXQgWzM6MF0gICAgICAgICAgICAgY2ZnX3Nkcl90d3JfZCAgICAgICA7IC8vIFdyaXRlIHJlY292ZXJ5IGRlbGF5Ci1pbnB1dCBbYFNEUl9SRlNIX1RJTUVSX1ctMSA6IDBdIGNmZ19zZHJfcmZzaDsKLWlucHV0IFtgU0RSX1JGU0hfUk9XX0NOVF9XIC0xIDogMF0gY2ZnX3Nkcl9yZm1heDsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU0RSQU0gY29udHJvbGxlciBJbnRlcmZhY2UgCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi13aXJlICAgICAgICAgICAgICAgICAgYXBwX3JlcSAgICAgICAgICAgIDsgLy8gU0RSQU0gcmVxdWVzdAotd2lyZSBbQVBQX0FXLTE6MF0gICAgIGFwcF9yZXFfYWRkciAgICAgICA7IC8vIFNEUkFNIFJlcXVlc3QgQWRkcmVzcwotd2lyZSBbYmwtMTowXSAgICAgICAgIGFwcF9yZXFfbGVuICAgICAgICA7Ci13aXJlICAgICAgICAgICAgICAgICAgYXBwX3JlcV93cl9uICAgICAgIDsgLy8gMCAtIFdyaXRlLCAxIC0+IFJlYWQKLXdpcmUgICAgICAgICAgICAgICAgICBhcHBfcmVxX2FjayAgICAgICAgOyAvLyBTRFJBTSByZXF1ZXN0IEFjY2VwdGVkCi13aXJlICAgICAgICAgICAgICAgICAgYXBwX2J1c3lfbiAgICAgICAgIDsgLy8gMCAtPiBzZHIgYnVzeQotd2lyZSBbQVBQX0RXLzgtMTowXSAgIGFwcF93cl9lbl9uICAgICAgICA7IC8vIEFjdGl2ZSBsb3cgc2RyIGJ5dGUtd2lzZSB3cml0ZSBkYXRhIHZhbGlkCi13aXJlICAgICAgICAgICAgICAgICAgYXBwX3dyX25leHRfcmVxICAgIDsgLy8gUmVhZHkgdG8gYWNjZXB0IHRoZSBuZXh0IHdyaXRlCi13aXJlICAgICAgICAgICAgICAgICAgYXBwX3JkX3ZhbGlkICAgICAgIDsgLy8gc2RyIHJlYWQgdmFsaWQKLXdpcmUgICAgICAgICAgICAgICAgICBhcHBfbGFzdF9yZCAgICAgICAgOyAvLyBJbmRpY2F0ZSBsYXN0IFJlYWQgb2YgQnVyc3QgVHJhbnNmZXIKLXdpcmUgICAgICAgICAgICAgICAgICBhcHBfbGFzdF93ciAgICAgICAgOyAvLyBJbmRpY2F0ZSBsYXN0IFdyaXRlIG9mIEJ1cnN0IFRyYW5zZmVyCi13aXJlIFtBUFBfRFctMTowXSAgICAgYXBwX3dyX2RhdGEgICAgICAgIDsgLy8gc2RyIHdyaXRlIGRhdGEKLXdpcmUgIFtBUFBfRFctMTowXSAgICBhcHBfcmRfZGF0YSAgICAgICAgOyAvLyBzZHIgcmVhZCBkYXRhCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBXaXNoQm9uZSBTdGFnZ2luZyBGRgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotd2lyZSAgICAgICAgICAgICAgICAgICB3Yl9zdGFnX3N0Yl9pICAgICA7Ci13aXJlICAgICAgICAgICAgICAgICAgIHdiX3N0YWdfYWNrX28gICAgIDsKLXdpcmUgW0FQUF9BVy0xOjBdICAgICAgd2Jfc3RhZ19hZGRyX2kgICAgOwotd2lyZSAgICAgICAgICAgICAgICAgICB3Yl9zdGFnX3dlX2kgICAgICA7IC8vIDEgLSBXcml0ZSwgMCAtIFJlYWQKLXdpcmUgW0FQUF9EVy0xOjBdICAgICAgd2Jfc3RhZ19kYXRfaSAgICAgOwotd2lyZSBbQVBQX0RXLzgtMTowXSAgICB3Yl9zdGFnX3NlbF9pICAgICA7IC8vIEJ5dGUgZW5hYmxlCi13aXJlICBbQVBQX0RXLTE6MF0gICAgIHdiX3N0YWdfZGF0X28gICAgIDsKLXdpcmUgICAgICAgICAgICAgICAgICAgd2Jfc3RhZ19jeWNfaSAgICAgOwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVG8gYXZvaWQgdGhlIGxvZ2ljIGF0IGRpZ2l0YWwgY29yZSwgcGFkIGNvbnRyb2wgYXJlIGJyb3VnaHQgaW5zaWRlIHRoZQotLy8gYmxvY2sgdG8gc3VwcG9ydCBlZmFibGVzcy9jYXJ2ZWwgc29jIGVudmlvcm5tZW50YWwgc3VwcG9ydAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFzc2lnbiBwYWRfc2RyX2Rpbls3OjBdICAgICAgPSAgICAgIGlvX2luWzc6MF0gICAgICAgICA7Ci1hc3NpZ24gaW9fb3V0ICAgICBbNzowXSAgICAgID0gICAgICBzZHJfZG91dFs3OjBdICAgICAgOwotYXNzaWduIGlvX291dCAgICAgWzIwOjhdICAgICA9ICAgICAgc2RyX2FkZHJbMTI6MF0gICAgIDsKLWFzc2lnbiBpb19vdXQgICAgIFsyMjoyMV0gICAgPSAgICAgIHNkcl9iYVsxOjBdICAgICAgICA7Ci1hc3NpZ24gaW9fb3V0ICAgICBbMjNdICAgICAgID0gICAgICBzZHJfZHFtWzBdICAgICAgICAgOwotYXNzaWduIGlvX291dCAgICAgWzI0XSAgICAgICA9ICAgICAgc2RyX3dlX24gICAgICAgICAgIDsKLWFzc2lnbiBpb19vdXQgICAgIFsyNV0gICAgICAgPSAgICAgIHNkcl9jYXNfbiAgICAgICAgICA7Ci1hc3NpZ24gaW9fb3V0ICAgICBbMjZdICAgICAgID0gICAgICBzZHJfcmFzX24gICAgICAgICAgOwotYXNzaWduIGlvX291dCAgICAgWzI3XSAgICAgICA9ICAgICAgc2RyX2NzX24gICAgICAgICAgIDsKLWFzc2lnbiBpb19vdXQgICAgIFsyOF0gICAgICAgPSAgICAgIHNkcl9ja2UgICAgICAgICAgICA7Ci1hc3NpZ24gaW9fb3V0ICAgICBbMjldICAgICAgID0gICAgICBzZHJhbV9jbGsgICAgICAgICAgOwotYXNzaWduIHNkcmFtX3BhZF9jbGsgICAgICAgICA9ICAgICAgaW9faW5bMjldICAgICAgICAgIDsKLQotYXNzaWduIGlvX29lYiAgICAgWzc6MF0gICAgICA9ICAgICAgc2RyX2Rlbl9uICAgICAgICAgOwotYXNzaWduIGlvX29lYiAgICAgWzIwOjhdICAgICA9ICAgICAgeygxMykgezEnYjB9fSAgICAgIDsKLWFzc2lnbiBpb19vZWIgICAgIFsyMjoyMV0gICAgPSAgICAgIHsoMikgezEnYjB9fSAgICAgICA7Ci1hc3NpZ24gaW9fb2ViICAgICBbMjNdICAgICAgID0gICAgICAxJ2IwICAgICAgICAgICAgICAgOwotYXNzaWduIGlvX29lYiAgICAgWzI0XSAgICAgICA9ICAgICAgMSdiMCAgICAgICAgICAgICAgIDsKLWFzc2lnbiBpb19vZWIgICAgIFsyNV0gICAgICAgPSAgICAgIDEnYjAgICAgICAgICAgICAgICA7Ci1hc3NpZ24gaW9fb2ViICAgICBbMjZdICAgICAgID0gICAgICAxJ2IwICAgICAgICAgICAgICAgOwotYXNzaWduIGlvX29lYiAgICAgWzI3XSAgICAgICA9ICAgICAgMSdiMCAgICAgICAgICAgICAgIDsKLWFzc2lnbiBpb19vZWIgICAgIFsyOF0gICAgICAgPSAgICAgIDEnYjAgICAgICAgICAgICAgICA7Ci1hc3NpZ24gaW9fb2ViICAgICBbMjldICAgICAgID0gICAgICAxJ2IwICAgICAgICAgICAgICAgOwotCi0vL2Fzc2lnbiAgIHNkcl9kcSA9ICgmc2RyX2Rlbl9uID09IDEnYjApID8gc2RyX2RvdXQgOiAge1NEUl9EV3sxJ2J6fX07IAotLy9hc3NpZ24gICBwYWRfc2RyX2RpbiA9IHNkcl9kcTsKLQotLy8gc2RyYW0gcGFkIGNsb2NrIGlzIHJvdXRlZCBiYWNrIHRocm91Z2ggcGFkCi0vLyBTRFJBTSBDbG9jayBmcm9tIFBhZCwgdXNlZCBmb3IgcmVnaXN0ZXJpbmcgUmVhZCBEYXRhCi0vL3dpcmUgIygxLjApIHNkcmFtX3BhZF9jbGsgPSBzZHJhbV9jbGs7Ci0vLwotd2lyZSBbMjE6MF0gY29yZV9kZWJ1ZzsKLWFzc2lnbiBzZHJhbV9kZWJ1ZyA9IHtzZHJfaW5pdF9kb25lLHdiX3N0YWdfc3RiX2ksd2Jfc3RhZ193ZV9pLHdiX3N0YWdfYWNrX28sIAotICAgICAgICAgICAgICAgICAgICAgIGFwcF9yZXEsYXBwX3JlcV93cl9uLGFwcF9yZXFfYWNrLGFwcF9idXN5X24sYXBwX3dyX25leHRfcmVxLCBhcHBfcmRfdmFsaWQsCSAgICAgIAotCQkgICAgICBjb3JlX2RlYnVnWzIxOjBdfTsKLQotLyoqKioqKioqKioqKioqIEVuZHMgSGVyZSAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLy8gQWRkaW5nIFdpc2hib25lIHN0YWdnaW5nIEZGIHRvIGJyZWFrIHRpbWluZyBwYXRoCi0vLwotd2Jfc3RhZ2dpbmcgdV93Yl9zdGFnZSAoCi0gICAgICAgICAuY2xrX2kgICAgICAgICAgICAgICAgICh3Yl9jbGtfaSAgICAgICAgICksIAotICAgICAgICAgLnJzdF9uICAgICAgICAgICAgICAgICAod2JfcnN0X24gICAgICAgICApLAotICAgICAgICAgLy8gV2lzaEJvbmUgSW5wdXQgbWFzdGVyIEkvUAotICAgICAgICAgLm1fd2JkX2RhdF9pICAgICAgICAgICAod2JfZGF0X2kgICAgICAgICApLAotICAgICAgICAgLm1fd2JkX2Fkcl9pICAgICAgICAgICAod2JfYWRkcl9pICAgICAgICApLAotICAgICAgICAgLm1fd2JkX3NlbF9pICAgICAgICAgICAod2Jfc2VsX2kgICAgICAgICApLAotICAgICAgICAgLm1fd2JkX3dlX2kgICAgICAgICAgICAod2Jfd2VfaSAgICAgICAgICApLAotICAgICAgICAgLm1fd2JkX2N5Y19pICAgICAgICAgICAod2JfY3ljX2kgICAgICAgICApLAotICAgICAgICAgLm1fd2JkX3N0Yl9pICAgICAgICAgICAod2Jfc3RiX2kgICAgICAgICApLAotICAgICAgICAgLm1fd2JkX3RpZF9pICAgICAgICAgICAoJ2gwICAgICAgICAgICAgICApLAotICAgICAgICAgLm1fd2JkX2RhdF9vICAgICAgICAgICAod2JfZGF0X28gICAgICAgICApLAotICAgICAgICAgLm1fd2JkX2Fja19vICAgICAgICAgICAod2JfYWNrX28gICAgICAgICApLAotICAgICAgICAgLm1fd2JkX2Vycl9vICAgICAgICAgICAoICAgICAgICAgICAgICAgICApLAotCi0gICAgICAgICAvLyBTbGF2ZSBJbnRlcmZhY2UKLSAgICAgICAgIC5zX3diZF9kYXRfaSAgICAgICAgICAod2Jfc3RhZ19kYXRfbyAgICAgKSwKLSAgICAgICAgIC5zX3diZF9hY2tfaSAgICAgICAgICAod2Jfc3RhZ19hY2tfbyAgICAgKSwKLSAgICAgICAgIC5zX3diZF9lcnJfaSAgICAgICAgICAoMSdiMCAgICAgICAgICAgICAgKSwKLSAgICAgICAgIC5zX3diZF9kYXRfbyAgICAgICAgICAod2Jfc3RhZ19kYXRfaSAgICAgKSwKLSAgICAgICAgIC5zX3diZF9hZHJfbyAgICAgICAgICAod2Jfc3RhZ19hZGRyX2kgICAgKSwKLSAgICAgICAgIC5zX3diZF9zZWxfbyAgICAgICAgICAod2Jfc3RhZ19zZWxfaSAgICAgKSwKLSAgICAgICAgIC5zX3diZF93ZV9vICAgICAgICAgICAod2Jfc3RhZ193ZV9pICAgICAgKSwKLSAgICAgICAgIC5zX3diZF9jeWNfbyAgICAgICAgICAod2Jfc3RhZ19jeWNfaSAgICAgKSwKLSAgICAgICAgIC5zX3diZF9zdGJfbyAgICAgICAgICAod2Jfc3RhZ19zdGJfaSAgICAgKSwKLSAgICAgICAgIC5zX3diZF90aWRfbyAgICAgICAgICAoICAgICAgICAgICAgICAgICAgKQotCi0pOwotCi0KLXdiMnNkcmMgIyguZHcoQVBQX0RXKSwudHcodHcpLC5ibChibCksLkFQUF9BVyhBUFBfQVcpKSB1X3diMnNkcmMgKAotICAgICAgLy8gV0IgYnVzCi0gICAgICAgICAgLndiX3JzdF9uICAgICAgICAgICAod2JfcnN0X24gICAgICAgICAgICkgLAotICAgICAgICAgIC53Yl9jbGtfaSAgICAgICAgICAgKHdiX2Nsa19pICAgICAgICAgICApICwKLQotICAgICAgICAgIC53Yl9zdGJfaSAgICAgICAgICAgKHdiX3N0YWdfc3RiX2kgICAgICApICwKLSAgICAgICAgICAud2JfYWNrX28gICAgICAgICAgICh3Yl9zdGFnX2Fja19vICAgICAgKSAsCi0gICAgICAgICAgLndiX2FkZHJfaSAgICAgICAgICAod2Jfc3RhZ19hZGRyX2kgICAgICkgLAotICAgICAgICAgIC53Yl93ZV9pICAgICAgICAgICAgKHdiX3N0YWdfd2VfaSAgICAgICApICwKLSAgICAgICAgICAud2JfZGF0X2kgICAgICAgICAgICh3Yl9zdGFnX2RhdF9pICAgICAgKSAsCi0gICAgICAgICAgLndiX3NlbF9pICAgICAgICAgICAod2Jfc3RhZ19zZWxfaSAgICAgICkgLAotICAgICAgICAgIC53Yl9kYXRfbyAgICAgICAgICAgKHdiX3N0YWdfZGF0X28gICAgICApICwKLSAgICAgICAgICAud2JfY3ljX2kgICAgICAgICAgICh3Yl9zdGFnX2N5Y19pICAgICAgKSAsCi0KLQotICAgICAgLy9TRFJBTSBDb250cm9sbGVyIEhhbmQtU2hha2UgU2lnbmFsIAotICAgICAgICAgIC5zZHJhbV9jbGsgICAgICAgICAgKHNkcmFtX2NsayAgICAgICAgICApICwKLSAgICAgICAgICAuc2RyYW1fcmVzZXRuICAgICAgIChzZHJhbV9yZXNldG4gICAgICAgKSAsCi0gICAgICAgICAgLnNkcl9yZXEgICAgICAgICAgICAoYXBwX3JlcSAgICAgICAgICAgICkgLAotICAgICAgICAgIC5zZHJfcmVxX2FkZHIgICAgICAgKGFwcF9yZXFfYWRkciAgICAgICApICwKLSAgICAgICAgICAuc2RyX3JlcV9sZW4gICAgICAgIChhcHBfcmVxX2xlbiAgICAgICAgKSAsCi0gICAgICAgICAgLnNkcl9yZXFfd3JfbiAgICAgICAoYXBwX3JlcV93cl9uICAgICAgICkgLAotICAgICAgICAgIC5zZHJfcmVxX2FjayAgICAgICAgKGFwcF9yZXFfYWNrICAgICAgICApICwKLSAgICAgICAgICAuc2RyX2J1c3lfbiAgICAgICAgIChhcHBfYnVzeV9uICAgICAgICAgKSAsCi0gICAgICAgICAgLnNkcl93cl9lbl9uICAgICAgICAoYXBwX3dyX2VuX24gICAgICAgICkgLAotICAgICAgICAgIC5zZHJfd3JfbmV4dCAgICAgICAgKGFwcF93cl9uZXh0X3JlcSAgICApICwKLSAgICAgICAgICAuc2RyX3JkX3ZhbGlkICAgICAgIChhcHBfcmRfdmFsaWQgICAgICAgKSAsCi0gICAgICAgICAgLnNkcl9sYXN0X3JkICAgICAgICAoYXBwX2xhc3RfcmQgICAgICAgICkgLAotICAgICAgICAgIC5zZHJfd3JfZGF0YSAgICAgICAgKGFwcF93cl9kYXRhICAgICAgICApICwKLSAgICAgICAgICAuc2RyX3JkX2RhdGEgICAgICAgIChhcHBfcmRfZGF0YSAgICAgICAgKSAKLQotICAgICAgKTsgCi0KLQotc2RyY19jb3JlICMoLlNEUl9EVyhTRFJfRFcpICwgLlNEUl9CVyhTRFJfQlcpLC5BUFBfQVcoQVBQX0FXKSkgdV9zZHJjX2NvcmUgKAotICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKHNkcmFtX2NsayAgICAgICAgICApICwKLSAgICAgICAgICAucGFkX2NsayAgICAgICAgICAgIChzZHJhbV9wYWRfY2xrICAgICAgKSAsCi0gICAgICAgICAgLnJlc2V0X24gICAgICAgICAgICAoc2RyYW1fcmVzZXRuICAgICAgICkgLAotICAgICAgICAgIC5zZHJfd2lkdGggICAgICAgICAgKGNmZ19zZHJfd2lkdGggICAgICApICwKLSAgICAgICAgICAuY2ZnX2NvbGJpdHMgICAgICAgIChjZmdfY29sYml0cyAgICAgICAgKSAsCi0JICAuZGVidWcgICAgICAgICAgICAgIChjb3JlX2RlYnVnICAgICAgICAgKSAsCi0KLSAJCS8qIFJlcXVlc3QgZnJvbSBhcHAgKi8KLSAgICAgICAgICAuYXBwX3JlcSAgICAgICAgICAgIChhcHBfcmVxICAgICAgICAgICAgKSAsLy8gVHJhbnNmZXIgUmVxdWVzdAotICAgICAgICAgIC5hcHBfcmVxX2FkZHIgICAgICAgKGFwcF9yZXFfYWRkciAgICAgICApICwvLyBTRFJBTSBBZGRyZXNzCi0gICAgICAgICAgLmFwcF9yZXFfbGVuICAgICAgICAoYXBwX3JlcV9sZW4gICAgICAgICkgLC8vIEJ1cnN0IExlbmd0aCAoaW4gMTYgYml0IHdvcmRzKQotICAgICAgICAgIC5hcHBfcmVxX3dyYXAgICAgICAgKDEnYjAgICAgICAgICAgICAgICApICwvLyBXcmFwIG1vZGUgcmVxdWVzdCAKLSAgICAgICAgICAuYXBwX3JlcV93cl9uICAgICAgIChhcHBfcmVxX3dyX24gICAgICAgKSAsLy8gMCA9PiBXcml0ZSByZXF1ZXN0LCAxID0+IHJlYWQgcmVxCi0gICAgICAgICAgLmFwcF9yZXFfYWNrICAgICAgICAoYXBwX3JlcV9hY2sgICAgICAgICkgLC8vIFJlcXVlc3QgaGFzIGJlZW4gYWNjZXB0ZWQKLSAgICAgICAgICAuY2ZnX3JlcV9kZXB0aCAgICAgIChjZmdfcmVxX2RlcHRoICAgICAgKSAsLy9ob3cgbWFueSByZXEuIGJ1ZmZlciBzaG91bGQgaG9sZAotIAkJCi0gICAgICAgICAgLmFwcF93cl9kYXRhICAgICAgICAoYXBwX3dyX2RhdGEgICAgICAgICkgLAotICAgICAgICAgIC5hcHBfd3JfZW5fbiAgICAgICAgKGFwcF93cl9lbl9uICAgICAgICApICwKLSAgICAgICAgICAuYXBwX3JkX2RhdGEgICAgICAgIChhcHBfcmRfZGF0YSAgICAgICAgKSAsCi0gICAgICAgICAgLmFwcF9yZF92YWxpZCAgICAgICAoYXBwX3JkX3ZhbGlkICAgICAgICkgLAotCSAgLmFwcF9sYXN0X3JkICAgICAgICAoYXBwX2xhc3RfcmQgICAgICAgICkgLAotICAgICAgICAgIC5hcHBfbGFzdF93ciAgICAgICAgKGFwcF9sYXN0X3dyICAgICAgICApICwKLSAgICAgICAgICAuYXBwX3dyX25leHRfcmVxICAgIChhcHBfd3JfbmV4dF9yZXEgICAgKSAsCi0gICAgICAgICAgLnNkcl9pbml0X2RvbmUgICAgICAoc2RyX2luaXRfZG9uZSAgICAgICkgLAotICAgICAgICAgIC5hcHBfcmVxX2RtYV9sYXN0ICAgKGFwcF9yZXEgICAgICAgICAgICApICwKLSAKLSAJCS8qIEludGVyZmFjZSB0byBTRFJBTXMgKi8KLSAgICAgICAgICAuc2RyX2NzX24gICAgICAgICAgIChzZHJfY3NfbiAgICAgICAgICAgKSAsCi0gICAgICAgICAgLnNkcl9ja2UgICAgICAgICAgICAoc2RyX2NrZSAgICAgICAgICAgICkgLAotICAgICAgICAgIC5zZHJfcmFzX24gICAgICAgICAgKHNkcl9yYXNfbiAgICAgICAgICApICwKLSAgICAgICAgICAuc2RyX2Nhc19uICAgICAgICAgIChzZHJfY2FzX24gICAgICAgICAgKSAsCi0gICAgICAgICAgLnNkcl93ZV9uICAgICAgICAgICAoc2RyX3dlX24gICAgICAgICAgICkgLAotICAgICAgICAgIC5zZHJfZHFtICAgICAgICAgICAgKHNkcl9kcW0gICAgICAgICAgICApICwKLSAgICAgICAgICAuc2RyX2JhICAgICAgICAgICAgIChzZHJfYmEgICAgICAgICAgICAgKSAsCi0gICAgICAgICAgLnNkcl9hZGRyICAgICAgICAgICAoc2RyX2FkZHIgICAgICAgICAgICkgLCAKLSAgICAgICAgICAucGFkX3Nkcl9kaW4gICAgICAgIChwYWRfc2RyX2RpbiAgICAgICAgKSAsCi0gICAgICAgICAgLnNkcl9kb3V0ICAgICAgICAgICAoc2RyX2RvdXQgICAgICAgICAgICkgLAotICAgICAgICAgIC5zZHJfZGVuX24gICAgICAgICAgKHNkcl9kZW5fbiAgICAgICAgICApICwKLSAKLSAJCS8qIFBhcmFtZXRlcnMgKi8KLSAgICAgICAgICAuY2ZnX3Nkcl9lbiAgICAgICAgIChjZmdfc2RyX2VuICAgICAgICAgKSAsCi0gICAgICAgICAgLmNmZ19zZHJfbW9kZV9yZWcgICAoY2ZnX3Nkcl9tb2RlX3JlZyAgICkgLAotICAgICAgICAgIC5jZmdfc2RyX3RyYXNfZCAgICAgKGNmZ19zZHJfdHJhc19kICAgICApICwKLSAgICAgICAgICAuY2ZnX3Nkcl90cnBfZCAgICAgIChjZmdfc2RyX3RycF9kICAgICAgKSAsCi0gICAgICAgICAgLmNmZ19zZHJfdHJjZF9kICAgICAoY2ZnX3Nkcl90cmNkX2QgICAgICkgLAotICAgICAgICAgIC5jZmdfc2RyX2NhcyAgICAgICAgKGNmZ19zZHJfY2FzICAgICAgICApICwKLSAgICAgICAgICAuY2ZnX3Nkcl90cmNhcl9kICAgIChjZmdfc2RyX3RyY2FyX2QgICAgKSAsCi0gICAgICAgICAgLmNmZ19zZHJfdHdyX2QgICAgICAoY2ZnX3Nkcl90d3JfZCAgICAgICkgLAotICAgICAgICAgIC5jZmdfc2RyX3Jmc2ggICAgICAgKGNmZ19zZHJfcmZzaCAgICAgICApICwKLSAgICAgICAgICAuY2ZnX3Nkcl9yZm1heCAgICAgIChjZmdfc2RyX3JmbWF4ICAgICAgKSAKLQkgICAgICAgKTsKLSAgIAotZW5kbW9kdWxlIC8vIHNkcmNfY29yZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvd2Iyc2RyYy93YjJzZHJjLnYgYi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy93YjJzZHJjL3diMnNkcmMudgpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZjZlYWRjMS4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy93YjJzZHJjL3diMnNkcmMudgorKysgL2Rldi9udWxsCkBAIC0xLDM4OSArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgotLy8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBzZHJhbSBjb250cm9sbGVyIHByb2plY3QgICAgICAgICAgIAotICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0Ci0gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAKLSAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3Nkcl9jdHJsLyAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBEZXNjcmlwdGlvbjogV0lTSEJPTkUgdG8gU0RSQU0gQ29udHJvbGxlciBCdXMgVHJhbnNhbGF0b3IKLSAgICAgMS4gVGhpcyBtb2R1bGUgdHJhbnNsYXRlIHRoZSBXSVNIQk9ORSBwcm90b2NvbCB0byBjdXN0b20gc2RyYW0gY29udHJvbGxlciBpL2YgCi0gICAgIDIuIEFsc28gSGFuZGxlIHRoZSBjbG9jayBkb21haW4gY2hhbmdlIGZyb20gQXBwbGljYXRpb24gbGF5ZXIgdG8gU2RyYW0gbGF5ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIEF1dGhvcihzKTogIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIAotICBWZXJzaW9uICA6IDAuMCAtIEluaXRpYWwgUmVsZWFzZQotICAgICAgICAgICAgIDAuMSAtIDJuZCBGZWIgMjAxMgotCSAgICAgICAgICAgQXN5bmMgRmlmbyB0b3dhcmRzIHRoZSBhcHBsaWNhdGlvbiBsYXllciBpcyBzZWxlY3RlZCAKLQkJICAgd2l0aCBSZWdpc3RlcmVkIEZ1bGwgR2VuZXJhdGlvbgotICAgICAgICAgICAgIDAuMiAtIDJuZCBGZWIgMjAxMgotCSAgICAgICAgICAgUGVuZGluZyBSZWFkIGdlbmVyYXRpb24gYnVnIGZpeCBkb25lIHRvIGhhbmRsZSBiYWNrdG8gYmFjayB3cml0ZSAKLQkJICAgZm9sbG93ZWQgYnkgcmVhZCByZXF1ZXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgCi0gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIAotIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAKLSB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAKLSBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgCi0gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IAotIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAKLWxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIAotIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAKLSB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgCi0gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIAotIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIAotIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAKLSBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi1tb2R1bGUgd2Iyc2RyYyAoCi0gICAgICAvLyBXQiBidXMKLSAgICAgICAgICAgICAgICAgICAgd2JfcnN0X24gICAgICAgICAgICAsCi0gICAgICAgICAgICAgICAgICAgIHdiX2Nsa19pICAgICAgICAgICAgLAotCi0gICAgICAgICAgICAgICAgICAgIHdiX3N0Yl9pICAgICAgICAgICAgLAotICAgICAgICAgICAgICAgICAgICB3Yl9hY2tfbyAgICAgICAgICAgICwKLSAgICAgICAgICAgICAgICAgICAgd2JfYWRkcl9pICAgICAgICAgICAsCi0gICAgICAgICAgICAgICAgICAgIHdiX3dlX2kgICAgICAgICAgICAgLAotICAgICAgICAgICAgICAgICAgICB3Yl9kYXRfaSAgICAgICAgICAgICwKLSAgICAgICAgICAgICAgICAgICAgd2Jfc2VsX2kgICAgICAgICAgICAsCi0gICAgICAgICAgICAgICAgICAgIHdiX2RhdF9vICAgICAgICAgICAgLAotICAgICAgICAgICAgICAgICAgICB3Yl9jeWNfaSAgICAgICAgICAgICwKLQotCi0gICAgICAvL1NEUkFNIENvbnRyb2xsZXIgSGFuZC1TaGFrZSBTaWduYWwgCi0gICAgICAgICAgICAgICAgICAgIHNkcmFtX2NsayAgICAgICAgICAgLAotICAgICAgICAgICAgICAgICAgICBzZHJhbV9yZXNldG4gICAgICAgICwKLSAgICAgICAgICAgICAgICAgICAgc2RyX3JlcSAgICAgICAgICAgICAsCi0gICAgICAgICAgICAgICAgICAgIHNkcl9yZXFfYWRkciAgICAgICAgLAotICAgICAgICAgICAgICAgICAgICBzZHJfcmVxX2xlbiAgICAgICAgICwKLSAgICAgICAgICAgICAgICAgICAgc2RyX3JlcV93cl9uICAgICAgICAsCi0gICAgICAgICAgICAgICAgICAgIHNkcl9yZXFfYWNrICAgICAgICAgLAotICAgICAgICAgICAgICAgICAgICBzZHJfYnVzeV9uICAgICAgICAgICwKLSAgICAgICAgICAgICAgICAgICAgc2RyX3dyX2VuX24gICAgICAgICAsCi0gICAgICAgICAgICAgICAgICAgIHNkcl93cl9uZXh0ICAgICAgICAgLAotICAgICAgICAgICAgICAgICAgICBzZHJfcmRfdmFsaWQgICAgICAgICwKLSAgICAgICAgICAgICAgICAgICAgc2RyX2xhc3RfcmQgICAgICAgICAsCi0gICAgICAgICAgICAgICAgICAgIHNkcl93cl9kYXRhICAgICAgICAgLAotICAgICAgICAgICAgICAgICAgICBzZHJfcmRfZGF0YSAgICAgICAgCi0KLSAgICAgICk7IAotCi1wYXJhbWV0ZXIgICAgICBkdyAgICAgICAgICAgICAgPSAzMjsgIC8vIGRhdGEgd2lkdGgKLXBhcmFtZXRlciAgICAgIHR3ICAgICAgICAgICAgICA9IDg7ICAgLy8gdGFnIGlkIHdpZHRoCi1wYXJhbWV0ZXIgICAgICBibCAgICAgICAgICAgICAgPSA5OyAgIC8vIGJ1cnN0X2xlbmdodF93aWR0aCAKLXBhcmFtZXRlciAgICAgIEFQUF9BVyAgICAgICAgICA9IDI2OyAgLy8gQXBwbGljYXRpb24gQWRkcmVzcyBXaWR0aAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gV2lzaCBCb25lIEludGVyZmFjZQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgIAotaW5wdXQgICAgICAgICAgICAgICAgICAgd2JfcnN0X24gICAgICAgICAgIDsKLWlucHV0ICAgICAgICAgICAgICAgICAgIHdiX2Nsa19pICAgICAgICAgICA7Ci0KLWlucHV0ICAgICAgICAgICAgICAgICAgIHdiX3N0Yl9pICAgICAgICAgICA7Ci1vdXRwdXQgICAgICAgICAgICAgICAgICB3Yl9hY2tfbyAgICAgICAgICAgOwotaW5wdXQgW0FQUF9BVy0xOjBdICAgICAgd2JfYWRkcl9pICAgICAgICAgIDsKLWlucHV0ICAgICAgICAgICAgICAgICAgIHdiX3dlX2kgICAgICAgICAgICA7IC8vIDEgLSBXcml0ZSAsIDAgLSBSZWFkCi1pbnB1dCBbZHctMTowXSAgICAgICAgICB3Yl9kYXRfaSAgICAgICAgICAgOwotaW5wdXQgW2R3LzgtMTowXSAgICAgICAgd2Jfc2VsX2kgICAgICAgICAgIDsgLy8gQnl0ZSBlbmFibGUKLW91dHB1dCBbZHctMTowXSAgICAgICAgIHdiX2RhdF9vICAgICAgICAgICA7Ci1pbnB1dCAgICAgICAgICAgICAgICAgICB3Yl9jeWNfaSAgICAgICAgICAgOwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotVGhlIEN5Y2xlIFR5cGUgSWRlbmZpZXIgW0NUSV9JTygpXSBBZGRyZXNzIFRhZyBwcm92aWRlcyAKLWFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgY3ljbGUuIAotVGhlIE1BU1RFUiBzZW5kcyB0aGlzIGluZm9ybWF0aW9uIHRvIHRoZSBTTEFWRS4gVGhlIFNMQVZFIGNhbiB1c2UgdGhpcwotaW5mb3JtYXRpb24gdG8gcHJlcGFyZSB0aGUgcmVzcG9uc2UgZm9yIHRoZSBuZXh0IGN5Y2xlLgotVGFibGUgNC0yIEN5Y2xlIFR5cGUgSWRlbnRpZmllcnMKLUNUSV9PKDI6MCkgRGVzY3JpcHRpb24KLZEwMDCSIENsYXNzaWMgY3ljbGUuCi2RMDAxkiBDb25zdGFudCBhZGRyZXNzIGJ1cnN0IGN5Y2xlCi2RMDEwkiBJbmNyZW1lbnRpbmcgYnVyc3QgY3ljbGUKLZEwMTGSIFJlc2VydmVkCi2RMTAwkiBSZXNlcnZlZAotkTEwMSBSZXNlcnZlZAotkTExMJIgUmVzZXJ2ZWQKLZExMTGSIEVuZC1vZi1CdXJzdAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFNEUkFNIGNvbnRyb2xsZXIgSW50ZXJmYWNlIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotaW5wdXQgICAgICAgICAgICAgICAgICAgc2RyYW1fY2xrICAgICAgICAgIDsgLy8gc2RyYW0gY2xvY2sKLWlucHV0ICAgICAgICAgICAgICAgICAgIHNkcmFtX3Jlc2V0biAgICAgICA7IC8vIHNkcmFtIHJlc2V0Ci1vdXRwdXQgICAgICAgICAgICAgICAgICBzZHJfcmVxICAgICAgICAgICAgOyAvLyBTRFJBTSByZXF1ZXN0Ci1vdXRwdXQgW0FQUF9BVy0xOjBdICAgICBzZHJfcmVxX2FkZHIgICAgICAgOyAvLyBTRFJBTSBSZXF1ZXN0IEFkZHJlc3MKLW91dHB1dCBbYmwtMTowXSAgICAgICAgIHNkcl9yZXFfbGVuICAgICAgICA7Ci1vdXRwdXQgICAgICAgICAgICAgICAgICBzZHJfcmVxX3dyX24gICAgICAgOyAvLyAwIC0gV3JpdGUsIDEgLT4gUmVhZAotaW5wdXQgICAgICAgICAgICAgICAgICAgc2RyX3JlcV9hY2sgICAgICAgIDsgLy8gU0RSQU0gcmVxdWVzdCBBY2NlcHRlZAotaW5wdXQgICAgICAgICAgICAgICAgICAgc2RyX2J1c3lfbiAgICAgICAgIDsgLy8gMCAtPiBzZHIgYnVzeQotb3V0cHV0IFtkdy84LTE6MF0gICAgICAgc2RyX3dyX2VuX24gICAgICAgIDsgLy8gQWN0aXZlIGxvdyBzZHIgYnl0ZS13aXNlIHdyaXRlIGRhdGEgdmFsaWQKLWlucHV0ICAgICAgICAgICAgICAgICAgIHNkcl93cl9uZXh0ICAgICAgICA7IC8vIFJlYWR5IHRvIGFjY2VwdCB0aGUgbmV4dCB3cml0ZQotaW5wdXQgICAgICAgICAgICAgICAgICAgc2RyX3JkX3ZhbGlkICAgICAgIDsgLy8gc2RyIHJlYWQgdmFsaWQKLWlucHV0ICAgICAgICAgICAgICAgICAgIHNkcl9sYXN0X3JkICAgICAgICA7IC8vIEluZGljYXRlIGxhc3QgUmVhZCBvZiBCdXJzdCBUcmFuc2Zlcgotb3V0cHV0IFtkdy0xOjBdICAgICAgICAgc2RyX3dyX2RhdGEgICAgICAgIDsgLy8gc2RyIHdyaXRlIGRhdGEKLWlucHV0ICBbZHctMTowXSAgICAgICAgIHNkcl9yZF9kYXRhICAgICAgICA7IC8vIHNkciByZWFkIGRhdGEKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBXaXJlIERlY2xlcmF0aW9uCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXdpcmUgICAgICAgICAgICAgICAgICAgIGNtZGZpZm9fZnVsbCAgICAgICA7Ci13aXJlICAgICAgICAgICAgICAgICAgICBjbWRmaWZvX2VtcHR5ICAgICAgOwotd2lyZSAgICAgICAgICAgICAgICAgICAgd3JkYXRhZmlmb19mdWxsICAgIDsKLXdpcmUgICAgICAgICAgICAgICAgICAgIHdyZGF0YWZpZm9fZW1wdHkgICA7Ci13aXJlICAgICAgICAgICAgICAgICAgICB0YWdmaWZvX2Z1bGwgICAgICAgOwotd2lyZSAgICAgICAgICAgICAgICAgICAgdGFnZmlmb19lbXB0eSAgICAgIDsKLXdpcmUgICAgICAgICAgICAgICAgICAgIHJkZGF0YWZpZm9fZW1wdHkgICA7Ci13aXJlICAgICAgICAgICAgICAgICAgICByZGRhdGFmaWZvX2Z1bGwgICAgOwotCi1yZWcgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nX3JlYWQgICAgICAgOwotCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFjayBHZW5lcmFsdGlvbiBMb2dpYwotLy8gIElmIFdyaXRlIFJlcXVlc3QgLSBBY2tub3dsZWRnZSBpZiB0aGUgY29tbWFuZCBhbmQgd3JpdGUgRklGTyBhcmUgbm90IGZ1bGwKLS8vICBJZiBSZWFkIFJlcXVlc3QgIC0gR2VuZXJhdGUgdGhlIEFja25vd2xlZGdtZW50IG9uY2UgcmVhZCBmaWZvIGhhcyBkYXRhCi0vLyAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1hc3NpZ24gd2JfYWNrX28gPSAod2Jfc3RiX2kgJiYgd2JfY3ljX2kgJiYgd2Jfd2VfaSkgPyAgLy8gV3JpdGUgUGhhc2UKLQkgICAgICAgICAgICAgICAgICAoKCFjbWRmaWZvX2Z1bGwpICYmICghd3JkYXRhZmlmb19mdWxsKSkgOgotCQkgICh3Yl9zdGJfaSAmJiB3Yl9jeWNfaSAmJiAhd2Jfd2VfaSkgPyAvLyBSZWFkIFBoYXNlIAotCQkgICAgICAgICAgICFyZGRhdGFmaWZvX2VtcHR5IDogMSdiMDsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENvbW1hbmQgRklGTyBXcml0ZSBHZW5lcmF0aW9uCi0vLyAgICBJZiBXcml0ZSBSZXF1ZXN0IC0gR2VuZXJhdGUgd3JpdGUsIHdoZW4gV3JpdGUgZmlmbyBhbmQgY29tbWFuZCBmaWZvIGlzCi0vLyAgICAgICAgICAgICAgICAgICAgICAgbm90IGZ1bGwKLS8vICAgIElmIFJlYWQgUmVxdWVzdCAtIEdlbmVyYXRlIHdyaXRlLCB3aGVuIGNvbW1hbmQgZmlmbyBub3QgZnVsbCBhbmQgdGhlcmUKLS8vICAgICAgICAgICAgICAgICAgICAgIGlzIG5vIHBlbmRpbmcgcmVhZCByZXF1ZXN0LgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXdpcmUgICAgICAgICAgIGNtZGZpZm9fd3IgICA9ICh3Yl9zdGJfaSAmJiB3Yl9jeWNfaSAmJiB3Yl93ZV9pICYmICghY21kZmlmb19mdWxsKSApID8gd2JfYWNrX28gOgotCSAgICAgICAgICAgICAgICAgICAgICAod2Jfc3RiX2kgJiYgd2JfY3ljX2kgJiYgIXdiX3dlX2kgJiYgKCFjbWRmaWZvX2Z1bGwpKSA/ICFwZW5kaW5nX3JlYWQ6IDEnYjAgOyAKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZmlmbyByZWFkIGdlbmVyYXRpb24KLS8vICAgIENvbW1hbmQgRklGbyByZWFkIHdpbGwgYmUgZ2VuZXJhdGVkLCB3aGVuZXZlciBTRFJBTSBDb250cm9sbGVyCi0vLyAgICBBY2tub3dsZGdlIHRoZSBSZXF1ZXN0Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotd2lyZSAgICAgICAgICAgY21kZmlmb19yZCAgID0gc2RyX3JlcV9hY2s7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBBcHBsaWNhdGlvbiBsYXllciByZXF1ZXN0IGlzIGdlbmVyYXRlZCB0b3dhcmRzIHRoZSBjb250cm9sbGVyLCB3aGVuZXZlcgotLy8gQ29tbWFuZCBGSUZPIGlzIG5vdCBmdWxsCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYXNzaWduICAgICAgICAgc2RyX3JlcSAgICAgID0gIWNtZGZpZm9fZW1wdHk7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU2luY2UgQnVyc3QgbGVuZ3RoIGlzIG5vdCBrbm93biBhdCB0aGUgc3RhcnQgb2YgdGhlIEJ1cnN0LCBJdCdzIGFzc3VtZWQgYXMKLS8vIFNpbmdsZSBDeWNsZSBCdXJzdC4gV2UgbmVlZCB0byBpbXByb3Zpc2UgdGhpcyAuLi4KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi13aXJlIFtibC0xOjBdICBidXJzdF9sZW5ndGggID0gMTsgIC8vIDAgTWVhbiAxIFRyYW5zZmVyCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEluIFdpc2ggQm9uZSBTcGVjLCBGb3IgUmVhZCBSZXF1ZXN0IGhhcyB0byBiZSBhY2tlZCBhbG9uZyB3aXRoIGRhdGEuCi0vLyBXZSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBwZW5kaW5nIHJlYWQgcmVxdWVzdC4KLS8vIE9uY2Ugd2UgYWNjZXB0IHRoZSByZWFkIHJlcXVlc3QsIHdlIHNob3VsZCBub3QgYWNjZXB0IG9uZSBtb3JlIHJlYWQKLS8vIHJlcXVlc3QsIHVudGlsbCB3ZSBoYXZlIHRyYW5zbWl0dGVkIHRoZSByZWFkIGRhdGEuCi0vLyAgUGVuZGluZyBSZWFkIHdpbGwgCi0vLyAgICAgc2V0IC0gd2l0aCBSZWFkIFJlcXVlc3QgCi0vLyAgICAgcmVzZXQgLSB3aXRoIFJlYWQgUmVxdWVzdCArIEFjawotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYWx3YXlzIEAobmVnZWRnZSB3Yl9yc3RfbiBvciBwb3NlZGdlIHdiX2Nsa19pKSBiZWdpbgotICAgaWYoIXdiX3JzdF9uKSBiZWdpbgotICAgICAgIHBlbmRpbmdfcmVhZCA8PSAxJ2IwOwotICAgZW5kIGVsc2UgYmVnaW4KLSAgICAgIC8vcGVuZGluZ19yZWFkIDw9ICB3Yl9zdGJfaSAmIHdiX2N5Y19pICYgIXdiX3dlX2kgJiAhd2JfYWNrX287Ci0gICAgICBwZW5kaW5nX3JlYWQgPD0gICAoY21kZmlmb193ciAmJiAhd2Jfd2VfaSkgPyAxJ2IxOgotCSAgICAgICAgICAgICAgICAod2Jfc3RiX2kgJiB3Yl9jeWNfaSAmICF3Yl93ZV9pICYgd2JfYWNrX28pID8gMSdiMDogcGVuZGluZ19yZWFkOwotICAgZW5kCi1lbmQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFzeW5jIENvbW1hbmQgRklGTy4gVGhpcyBibG9jayBoYW5kbGUgdGhlIGNsb2NrIGRvbWFpbiBjaGFuZ2UgZnJvbQotLy8gQXBwbGljYXRpb24gbGF5ZXIgdG8gU0RSQU0gQ29udHJvbGxlcgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAvLyBBZGRyZXNzICsgQnVyc3QgTGVuZ3RoICsgVy9SIFJlcXVlc3QgCi0gICAgYXN5bmNfZmlmbyAjKC5XKEFQUF9BVytibCsxKSwuRFAoNCksLldSX0ZBU1QoMSdiMCksIC5SRF9GQVNUKDEnYjApKSB1X2NtZGZpZm8gKAotICAgICAvLyBXcml0ZSBQYXRoIFN5cyBDTG9jayBEb21haW4KLSAgICAgICAgICAud3JfY2xrICAgICAgICAgICAgICh3Yl9jbGtfaSAgICAgICAgICAgKSwKLSAgICAgICAgICAud3JfcmVzZXRfbiAgICAgICAgICh3Yl9yc3RfbiAgICAgICAgICAgKSwKLSAgICAgICAgICAud3JfZW4gICAgICAgICAgICAgIChjbWRmaWZvX3dyICAgICAgICAgKSwKLSAgICAgICAgICAud3JfZGF0YSAgICAgICAgICAgICh7YnVyc3RfbGVuZ3RoLCAKLQkgICAgICAgICAgICAgICAgICAgICAgICAhd2Jfd2VfaSwgCi0JCQkJd2JfYWRkcl9pfSAgICAgICAgKSwKLSAgICAgICAgICAuYWZ1bGwgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAuZnVsbCAgICAgICAgICAgICAgIChjbWRmaWZvX2Z1bGwgICAgICAgKSwKLQotICAgICAvLyBSZWFkIFBhdGgsIFNEUkFNIGNsb2NrIGRvbWFpbgotICAgICAgICAgIC5yZF9jbGsgICAgICAgICAgICAgKHNkcmFtX2NsayAgICAgICAgICApLAotICAgICAgICAgIC5yZF9yZXNldF9uICAgICAgICAgKHNkcmFtX3Jlc2V0biAgICAgICApLAotICAgICAgICAgIC5hZW1wdHkgICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICApLAotICAgICAgICAgIC5lbXB0eSAgICAgICAgICAgICAgKGNtZGZpZm9fZW1wdHkgICAgICApLAotICAgICAgICAgIC5yZF9lbiAgICAgICAgICAgICAgKGNtZGZpZm9fcmQgICAgICAgICApLAotICAgICAgICAgIC5yZF9kYXRhICAgICAgICAgICAgKHtzZHJfcmVxX2xlbiwKLQkgICAgICAgICAgICAgICAgICAgICAgICBzZHJfcmVxX3dyX24sCi0JCSAgICAgICAgICAgICAgICBzZHJfcmVxX2FkZHJ9ICAgICApCi0gICAgICk7Ci0KLS8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKLWFsd2F5cyBAKHBvc2VkZ2Ugd2JfY2xrX2kpIGJlZ2luCi0gIGlmIChjbWRmaWZvX2Z1bGwgPT0gMSdiMSAmJiBjbWRmaWZvX3dyID09IDEnYjEpICBiZWdpbgotICAgICAkZGlzcGxheSgiRVJST1I6JW0gQ09NTUFORCBGSUZPIFdSSVRFIE9WRVJGTE9XIik7Ci0gIGVuZCAKLWVuZCAKLS8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgotLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZgotYWx3YXlzIEAocG9zZWRnZSBzZHJhbV9jbGspIGJlZ2luCi0gICBpZiAoY21kZmlmb19lbXB0eSA9PSAxJ2IxICYmIGNtZGZpZm9fcmQgPT0gMSdiMSkgYmVnaW4KLSAgICAgICRkaXNwbGF5KCJFUlJPUjolbSBDT01NQU5EIEZJRk8gUkVBRCBPVkVSRkxPVyIpOwotICAgZW5kCi1lbmQgCi0vLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFdyaXRlIERhdGEgRklGTyBXcml0ZSBHZW5lcmF0aW9uLCB3aGVuIGV2ZXIgQWNrZWQgKyBXcml0ZSBSZXF1ZXN0Ci0vLyAgIE5vdGU6IEFjayBzaWduYWwgZ2VuZXJhdGlvbiBhbHJlYWR5IHRha2luZyBhY2NvdW50IG9mIEZJRk8gZnVsbCBjb25kaXRpb24KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi13aXJlICB3cmRhdGFmaWZvX3dyICA9IHdiX2Fja19vICYgd2Jfd2VfaSA7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBXcml0ZSBEYXRhIEZJRk8gUmVhZCBHZW5lcmF0aW9uLCBXaGVuIGV2ZXIgTmV4dCBXcml0ZSByZXF1ZXN0IGdlbmVyYXRlZAotLy8gZnJvbSBTRFJBTSBDb250cm9sbGVyCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXdpcmUgIHdyZGF0YWZpZm9fcmQgID0gc2RyX3dyX25leHQ7Ci0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFzeW5jIFdyaXRlIERhdGEgRklGTwotLy8gICAgVGhpcyBibG9jayBoYW5kbGUgdGhlIGNsb2NrIGRvbWFpbiBjaGFuZ2Ugb3ZlciArIFdyaXRlIERhdGEgKyBCeXRlIG1hc2sgCi0vLyAgICBGcm9tIEFwcGxpY2F0aW9uIGxheWVyIHRvIFNEUkFNIGNvbnRyb2xsZXIgbGF5ZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgIC8vIFdyaXRlIERBVEEgKyBEYXRhIE1hc2sgRklGTwotICAgIGFzeW5jX2ZpZm8gIyguVyhkdysoZHcvOCkpLCAuRFAoOCksIC5XUl9GQVNUKDEnYjApLCAuUkRfRkFTVCgxJ2IxKSkgdV93cmRhdGFmaWZvICgKLSAgICAgICAvLyBXcml0ZSBQYXRoICwgU3lzdGVtIGNsb2NrIGRvbWFpbgotICAgICAgICAgIC53cl9jbGsgICAgICAgICAgICAgKHdiX2Nsa19pICAgICAgICAgICApLAotICAgICAgICAgIC53cl9yZXNldF9uICAgICAgICAgKHdiX3JzdF9uICAgICAgICAgICApLAotICAgICAgICAgIC53cl9lbiAgICAgICAgICAgICAgKHdyZGF0YWZpZm9fd3IgICAgICApLAotICAgICAgICAgIC53cl9kYXRhICAgICAgICAgICAgKHt+d2Jfc2VsX2ksIAotCSAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9kYXRfaX0gICAgICAgICksCi0gICAgICAgICAgLmFmdWxsICAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgLmZ1bGwgICAgICAgICAgICAgICAod3JkYXRhZmlmb19mdWxsICAgICksCi0KLQotICAgICAgIC8vIFJlYWQgUGF0aCAsIFNEUkFNIGNsb2NrIGRvbWFpbgotICAgICAgICAgIC5yZF9jbGsgICAgICAgICAgICAgKHNkcmFtX2NsayAgICAgICAgICApLAotICAgICAgICAgIC5yZF9yZXNldF9uICAgICAgICAgKHNkcmFtX3Jlc2V0biAgICAgICApLAotICAgICAgICAgIC5hZW1wdHkgICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICApLAotICAgICAgICAgIC5lbXB0eSAgICAgICAgICAgICAgKHdyZGF0YWZpZm9fZW1wdHkgICApLAotICAgICAgICAgIC5yZF9lbiAgICAgICAgICAgICAgKHdyZGF0YWZpZm9fcmQgICAgICApLAotICAgICAgICAgIC5yZF9kYXRhICAgICAgICAgICAgKHtzZHJfd3JfZW5fbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2RyX3dyX2RhdGF9ICAgICAgKQotICAgICApOwotLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZgotYWx3YXlzIEAocG9zZWRnZSB3Yl9jbGtfaSkgYmVnaW4KLSAgaWYgKHdyZGF0YWZpZm9fZnVsbCA9PSAxJ2IxICYmIHdyZGF0YWZpZm9fd3IgPT0gMSdiMSkgIGJlZ2luCi0gICAgICRkaXNwbGF5KCJFUlJPUjolbSBXUklURSBEQVRBIEZJRk8gV1JJVEUgT1ZFUkZMT1ciKTsKLSAgZW5kIAotZW5kIAotCi1hbHdheXMgQChwb3NlZGdlIHNkcmFtX2NsaykgYmVnaW4KLSAgIGlmICh3cmRhdGFmaWZvX2VtcHR5ID09IDEnYjEgJiYgd3JkYXRhZmlmb19yZCA9PSAxJ2IxKSBiZWdpbgotICAgICAgJGRpc3BsYXkoIkVSUk9SOiVtIFdSSVRFIERBVEEgRklGTyBSRUFEIE9WRVJGTE9XIik7Ci0gICBlbmQKLWVuZCAKLS8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgUkVBRCBEQVRBIEZJRk8KLS8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXdpcmUgICAgcmRfZW9wOyAvLyBsYXN0IHJlYWQgaW5kaWNhdGlvbgotCi0vLyBSZWFkIEZJRk8gd3JpdGUgZ2VuZXJhdGlvbiwgd2hlbiBldmVyIFNEUkFNIGNvbnRyb2xsZXIgaXNzdWVzIHRoZSByZWFkCi0vLyB2YWxpZCBzaWduYWwKLXdpcmUgICAgcmRkYXRhZmlmb193ciA9IHNkcl9yZF92YWxpZDsKLQotLy8gUmVhZCBGSUZPIHJlYWQgZ2VuZXJhdGlvbiwgd2hlbiBldmVyIGFjayBpcyBnZW5lcmF0ZWQgYWxvbmcgd2l0aCByZWFkCi0vLyByZXF1ZXN0LgotLy8gTm90ZTogQWNrIGdlbmVyYXRpb24gaXMgYWxyZWFkeSBhY2NvdW50ZWQgdGhlIHdyaXRlIEZJRk8gTm90IEVtcHR5Ci0vLyAgICAgICBjb25kaXRpb24KLXdpcmUgICAgcmRkYXRhZmlmb19yZCA9IHdiX2Fja19vICYgIXdiX3dlX2k7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQXN5bmMgUmVhZCBGSUZPCi0vLyBUaGlzIGJsb2NrIGhhbmRsZXMgdGhlIGNsb2NrIGRvbWFpbiBjaGFuZ2Ugb3ZlciArIFJlYWQgZGF0YSBmcm9tIFNEUkFNCi0vLyBjb250cm9sbGVyIHRvIEFwcGxpY2F0aW9uIGxheWVyLgotLy8gIE5vdGU6IAotLy8gICAgMS4gUkVBRCBEQVRBIEZJRk8gZGVwdGggaXMga2VwdCBzbWFsbCwgYXNzdW1pbmcgdGhhdCBTeXMtQ0xvY2sgPiBTRFJBTSBDbG9jawotLy8gICAgICAgUkVBRCBEQVRBICsgRU9QCi0vLyAgICAyLiBFT1AgaW5kaWNhdGUsIGxhc3QgdHJhbnNmZXIgb2YgQnVyc3QgUmVhZCBBY2Nlc3MuIHVzZS1mdWxsIGZvciBmdXR1cmUKLS8vICAgICAgIFRhZyBoYW5kbGluZyBwZXIgYnVyc3QKLS8vCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBhc3luY19maWZvICMoLlcoZHcrMSksIC5EUCg0KSwgLldSX0ZBU1QoMSdiMCksIC5SRF9GQVNUKDEnYjEpICkgdV9yZGRhdGFmaWZvICgKLSAgICAgICAvLyBXcml0ZSBQYXRoICwgU0RSQU0gY2xvY2sgZG9tYWluCi0gICAgICAgICAgLndyX2NsayAgICAgICAgICAgICAoc2RyYW1fY2xrICAgICAgICAgICksCi0gICAgICAgICAgLndyX3Jlc2V0X24gICAgICAgICAoc2RyYW1fcmVzZXRuICAgICAgICksCi0gICAgICAgICAgLndyX2VuICAgICAgICAgICAgICAocmRkYXRhZmlmb193ciAgICAgICksCi0gICAgICAgICAgLndyX2RhdGEgICAgICAgICAgICAoe3Nkcl9sYXN0X3JkLAotCSAgICAgICAgICAgICAgICAgICAgICAgIHNkcl9yZF9kYXRhfSAgICAgICksCi0gICAgICAgICAgLmFmdWxsICAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgLmZ1bGwgICAgICAgICAgICAgICAocmRkYXRhZmlmb19mdWxsICAgICksCi0KLQotICAgICAgIC8vIFJlYWQgUGF0aCAsIFNZUyBjbG9jayBkb21haW4KLSAgICAgICAgICAucmRfY2xrICAgICAgICAgICAgICh3Yl9jbGtfaSAgICAgICAgICAgKSwKLSAgICAgICAgICAucmRfcmVzZXRfbiAgICAgICAgICh3Yl9yc3RfbiAgICAgICAgICAgKSwKLSAgICAgICAgICAuZW1wdHkgICAgICAgICAgICAgIChyZGRhdGFmaWZvX2VtcHR5ICAgKSwKLSAgICAgICAgICAuYWVtcHR5ICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAucmRfZW4gICAgICAgICAgICAgIChyZGRhdGFmaWZvX3JkICAgICAgKSwKLSAgICAgICAgICAucmRfZGF0YSAgICAgICAgICAgICh7cmRfZW9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9kYXRfb30gICAgICAgICApCi0gICAgICk7Ci0KLS8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKLWFsd2F5cyBAKHBvc2VkZ2Ugc2RyYW1fY2xrKSBiZWdpbgotICBpZiAocmRkYXRhZmlmb19mdWxsID09IDEnYjEgJiYgcmRkYXRhZmlmb193ciA9PSAxJ2IxKSAgYmVnaW4KLSAgICAgJGRpc3BsYXkoIkVSUk9SOiVtIFJFQUQgREFUQSBGSUZPIFdSSVRFIE9WRVJGTE9XIik7Ci0gIGVuZCAKLWVuZCAKLQotYWx3YXlzIEAocG9zZWRnZSB3Yl9jbGtfaSkgYmVnaW4KLSAgIGlmIChyZGRhdGFmaWZvX2VtcHR5ID09IDEnYjEgJiYgcmRkYXRhZmlmb19yZCA9PSAxJ2IxKSBiZWdpbgotICAgICAgJGRpc3BsYXkoIkVSUk9SOiVtIFJFQUQgREFUQSBGSUZPIFJFQUQgT1ZFUkZMT1ciKTsKLSAgIGVuZAotZW5kIAotLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uCi0KLSAKLWVuZG1vZHVsZQotCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvYmVuY2htYXJrcy9jb3JlbWFyay9NYWtlZmlsZSBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9iZW5jaG1hcmtzL2NvcmVtYXJrL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTAzY2Q5Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9iZW5jaG1hcmtzL2NvcmVtYXJrL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotc3JjX2RpciA6PSAkKGRpciAkKGxhc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKQotZGVwZW5kX2RpciA6PSAkKHNyY19kaXIpLy4uLy4uLy4uLy4uL2RlcGVuZGVuY2llcy9jb3JlbWFyawotCi1pZmVxICgiJChJVEVSQVRJT05TKSIsIiIpCi1JVEVSQVRJT05TPTEKLWVuZGlmCi0KLUFERF9DRkxBR1MgICs9IC1ESVRFUkFUSU9OUz0kKElURVJBVElPTlMpCi1BRERfVlBBVEggICA6PSAkKGRlcGVuZF9kaXIpCi1BRERfaW5jcyAgICA6PSAtSSQoc3JjX2Rpcikvc3JjIC1JJChkZXBlbmRfZGlyKQotCi1jX3NyYyA6PSBjb3JlX3BvcnRtZS5jIHNjX3ByaW50LmMgCi1jb3JlbWFya19zcmMgOj0gLi9zcmMvY29yZV9saXN0X2pvaW4uYyAuL3NyYy9jb3JlX21hdHJpeC5jIC4vc3JjL2NvcmVfbWFpbi5jIC4vc3JjL2NvcmVfdXRpbC5jIC4vc3JjL2NvcmVfc3RhdGUuYwotY19zcmMgKz0gY29yZV9saXN0X2pvaW4uYyBjb3JlX21hdHJpeC5jIGNvcmVfbWFpbi5jIGNvcmVfdXRpbC5jIGNvcmVfc3RhdGUuYwotCi1pbmNsdWRlICQoaW5jX2RpcikvY29tbW9uLm1rCi0KLQotZGVmYXVsdDogbG9nX3JlcXVlc3RlZF90Z3QgICQoYmxkX2RpcikvY29yZW1hcmsuZWxmICQoYmxkX2RpcikvY29yZW1hcmsuaGV4ICQoYmxkX2RpcikvY29yZW1hcmsuZHVtcCAKLQotbG9nX3JlcXVlc3RlZF90Z3Q6Ci0JZWNobyBjb3JlbWFyay5oZXg+PiAkKGJsZF9kaXIpL3Rlc3RfaW5mbwotCWVjaG8gJChpbmNfZGlyKS9jb21tb24ubWsKLQotY2xlYW46Ci0JJChSTSkgJChjX29ianMpICQoYXNtX29ianMpICQoYmxkX2RpcikvY29yZW1hcmsuaGV4ICQoYmxkX2RpcikvY29yZW1hcmsuZHVtcCAKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9iZW5jaG1hcmtzL2NvcmVtYXJrL2NvcmVfcG9ydG1lLmMgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvYmVuY2htYXJrcy9jb3JlbWFyay9jb3JlX3BvcnRtZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzgwMWY3Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9iZW5jaG1hcmtzL2NvcmVtYXJrL2NvcmVfcG9ydG1lLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLyoKLQlGaWxlIDogY29yZV9wb3J0bWUuYwotKi8KLS8qCi0JQXV0aG9yIDogU2hheSBHYWwtT24sIEVFTUJDCi0JTGVnYWwgOiBUT0RPIQotKi8KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgImNvcmVtYXJrLmgiCi0jaW5jbHVkZSAiY29yZV9wb3J0bWUuaCIKLSNpbmNsdWRlICJyaXNjdl9jc3JfZW5jb2RpbmcuaCIKLSNpbmNsdWRlICJzY190ZXN0LmgiCi0KLSNpZiBWQUxJREFUSU9OX1JVTgotCXZvbGF0aWxlIGVlX3MzMiBzZWVkMV92b2xhdGlsZT0weDM0MTU7Ci0Jdm9sYXRpbGUgZWVfczMyIHNlZWQyX3ZvbGF0aWxlPTB4MzQxNTsKLQl2b2xhdGlsZSBlZV9zMzIgc2VlZDNfdm9sYXRpbGU9MHg2NjsKLSNlbmRpZgotI2lmIFBFUkZPUk1BTkNFX1JVTgotCXZvbGF0aWxlIGVlX3MzMiBzZWVkMV92b2xhdGlsZT0weDA7Ci0Jdm9sYXRpbGUgZWVfczMyIHNlZWQyX3ZvbGF0aWxlPTB4MDsKLQl2b2xhdGlsZSBlZV9zMzIgc2VlZDNfdm9sYXRpbGU9MHg2NjsKLSNlbmRpZgotI2lmIFBST0ZJTEVfUlVOCi0Jdm9sYXRpbGUgZWVfczMyIHNlZWQxX3ZvbGF0aWxlPTB4ODsKLQl2b2xhdGlsZSBlZV9zMzIgc2VlZDJfdm9sYXRpbGU9MHg4OwotCXZvbGF0aWxlIGVlX3MzMiBzZWVkM192b2xhdGlsZT0weDg7Ci0jZW5kaWYKLQl2b2xhdGlsZSBlZV9zMzIgc2VlZDRfdm9sYXRpbGU9SVRFUkFUSU9OUzsKLQl2b2xhdGlsZSBlZV9zMzIgc2VlZDVfdm9sYXRpbGU9MDsKLQotLyogUG9ydGluZyA6IFRpbWluZyBmdW5jdGlvbnMKLQlIb3cgdG8gY2FwdHVyZSB0aW1lIGFuZCBjb252ZXJ0IHRvIHNlY29uZHMgbXVzdCBiZSBwb3J0ZWQgdG8gd2hhdGV2ZXIgaXMgc3VwcG9ydGVkIGJ5IHRoZSBwbGF0Zm9ybS4KLQllLmcuIFJlYWQgdmFsdWUgZnJvbSBvbiBib2FyZCBSVEMsIHJlYWQgdmFsdWUgZnJvbSBjcHUgY2xvY2sgY3ljbGVzIHBlcmZvcm1hbmNlIGNvdW50ZXIgZXRjLgotCVNhbXBsZSBpbXBsZW1lbnRhdGlvbiBmb3Igc3RhbmRhcmQgdGltZS5oIGFuZCB3aW5kb3dzLmggZGVmaW5pdGlvbnMgaW5jbHVkZWQuCi0qLwotI2lmIDEKLUNPUkVUSU1FVFlQRSBiYXJlYm9uZXNfY2xvY2soKSB7Ci0JdW5zaWduZWQgbG9uZyBuOwotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJInJkdGltZSAlMCIKLQkJOiAiPXIiIChuKSk7Ci0JcmV0dXJuIG47Ci19Ci0jZGVmaW5lIENMT0NLU19QRVJfU0VDCTEwMDAwMDAwCi0KLS8qIERlZmluZSA6IFRJTUVSX1JFU19ESVZJREVSCi0JRGl2aWRlciB0byB0cmFkZSBvZmYgdGltZXIgcmVzb2x1dGlvbiBhbmQgdG90YWwgdGltZSB0aGF0IGNhbiBiZSBtZWFzdXJlZC4KLQotCVVzZSBsb3dlciB2YWx1ZXMgdG8gaW5jcmVhc2UgcmVzb2x1dGlvbiwgYnV0IG1ha2Ugc3VyZSB0aGF0IG92ZXJmbG93IGRvZXMgbm90IG9jY3VyLgotCUlmIHRoZXJlIGFyZSBpc3N1ZXMgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG92ZXJmbG93aW5nLCBpbmNyZWFzZSB0aGlzIHZhbHVlLgotCSovCi0vKiAjZGVmaW5lIE5TRUNTX1BFUl9TRUMgQ0xPQ0tTX1BFUl9TRUMgKi8KLS8qICNkZWZpbmUgQ09SRVRJTUVUWVBFIGNsb2NrX3QgKi8KLSNkZWZpbmUgR0VUTVlUSU1FKF90KSAoKl90PWJhcmVib25lc19jbG9jaygpKQotI2RlZmluZSBNWVRJTUVESUZGKGZpbixpbmkpICgoZmluKS0oaW5pKSkKLSNkZWZpbmUgVElNRVJfUkVTX0RJVklERVIgMQotI2RlZmluZSBTQU1QTEVfVElNRV9JTVBMRU1FTlRBVElPTiAxCi0jZGVmaW5lIEVFX1RJQ0tTX1BFUl9TRUMgKENMT0NLU19QRVJfU0VDIC8gVElNRVJfUkVTX0RJVklERVIpCi0jZWxzZQotCi0jZW5kaWYKLQotLyoqIERlZmluZSBIb3N0IHNwZWNpZmljIChQT1NJWCksIG9yIHRhcmdldCBzcGVjaWZpYyBnbG9iYWwgdGltZSB2YXJpYWJsZXMuICovCi1zdGF0aWMgQ09SRVRJTUVUWVBFIHN0YXJ0X3RpbWVfdmFsLCBzdG9wX3RpbWVfdmFsOwotCi0vKiBGdW5jdGlvbiA6IHN0YXJ0X3RpbWUKLQlUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHJpZ2h0IGJlZm9yZSBzdGFydGluZyB0aGUgdGltZWQgcG9ydGlvbiBvZiB0aGUgYmVuY2htYXJrLgotCi0JSW1wbGVtZW50YXRpb24gbWF5IGJlIGNhcHR1cmluZyBhIHN5c3RlbSB0aW1lciAoYXMgaW1wbGVtZW50ZWQgaW4gdGhlIGV4YW1wbGUgY29kZSkKLQlvciB6ZXJvaW5nIHNvbWUgc3lzdGVtIHBhcmFtZXRlcnMgLSBlLmcuIHNldHRpbmcgdGhlIGNwdSBjbG9ja3MgY3ljbGVzIHRvIDAuCi0qLwotdm9pZCBzdGFydF90aW1lKHZvaWQpIHsKLQlHRVRNWVRJTUUoJnN0YXJ0X3RpbWVfdmFsICk7Ci19Ci0vKiBGdW5jdGlvbiA6IHN0b3BfdGltZQotCVRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgcmlnaHQgYWZ0ZXIgZW5kaW5nIHRoZSB0aW1lZCBwb3J0aW9uIG9mIHRoZSBiZW5jaG1hcmsuCi0KLQlJbXBsZW1lbnRhdGlvbiBtYXkgYmUgY2FwdHVyaW5nIGEgc3lzdGVtIHRpbWVyIChhcyBpbXBsZW1lbnRlZCBpbiB0aGUgZXhhbXBsZSBjb2RlKQotCW9yIG90aGVyIHN5c3RlbSBwYXJhbWV0ZXJzIC0gZS5nLiByZWFkaW5nIHRoZSBjdXJyZW50IHZhbHVlIG9mIGNwdSBjeWNsZXMgY291bnRlci4KLSovCi12b2lkIHN0b3BfdGltZSh2b2lkKSB7Ci0JR0VUTVlUSU1FKCZzdG9wX3RpbWVfdmFsICk7Ci19Ci0vKiBGdW5jdGlvbiA6IGdldF90aW1lCi0JUmV0dXJuIGFuIGFic3RyYWN0ICJ0aWNrcyIgbnVtYmVyIHRoYXQgc2lnbmlmaWVzIHRpbWUgb24gdGhlIHN5c3RlbS4KLQotCUFjdHVhbCB2YWx1ZSByZXR1cm5lZCBtYXkgYmUgY3B1IGN5Y2xlcywgbWlsbGlzZWNvbmRzIG9yIGFueSBvdGhlciB2YWx1ZSwKLQlhcyBsb25nIGFzIGl0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gc2Vjb25kcyBieSA8dGltZV9pbl9zZWNzPi4KLQlUaGlzIG1ldGhvZG9sb2d5IGlzIHRha2VuIHRvIGFjY29tb2RhdGUgYW55IGhhcmR3YXJlIG9yIHNpbXVsYXRlZCBwbGF0Zm9ybS4KLQlUaGUgc2FtcGxlIGltcGxlbWVudGF0aW9uIHJldHVybnMgbWlsbGlzZWNzIGJ5IGRlZmF1bHQsCi0JYW5kIHRoZSByZXNvbHV0aW9uIGlzIGNvbnRyb2xsZWQgYnkgPFRJTUVSX1JFU19ESVZJREVSPgotKi8KLUNPUkVfVElDS1MgZ2V0X3RpbWUodm9pZCkgewotCUNPUkVfVElDS1MgZWxhcHNlZD0oQ09SRV9USUNLUykoTVlUSU1FRElGRihzdG9wX3RpbWVfdmFsLCBzdGFydF90aW1lX3ZhbCkpOwotCXJldHVybiBlbGFwc2VkOwotfQotLyogRnVuY3Rpb24gOiB0aW1lX2luX3NlY3MKLQlDb252ZXJ0IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBnZXRfdGltZSB0byBzZWNvbmRzLgotCi0JVGhlIDxzZWNzX3JldD4gdHlwZSBpcyB1c2VkIHRvIGFjY29tb2RhdGUgc3lzdGVtcyB3aXRoIG5vIHN1cHBvcnQgZm9yIGZsb2F0aW5nIHBvaW50LgotCURlZmF1bHQgaW1wbGVtZW50YXRpb24gaW1wbGVtZW50ZWQgYnkgdGhlIEVFX1RJQ0tTX1BFUl9TRUMgbWFjcm8gYWJvdmUuCi0qLwotc2Vjc19yZXQgdGltZV9pbl9zZWNzKENPUkVfVElDS1MgdGlja3MpIHsKLQlzZWNzX3JldCByZXR2YWw9KChzZWNzX3JldCl0aWNrcykgLyAoc2Vjc19yZXQpRUVfVElDS1NfUEVSX1NFQzsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1lZV91MzIgZGVmYXVsdF9udW1fY29udGV4dHM9MTsKLQotLyogRnVuY3Rpb24gOiBwb3J0YWJsZV9pbml0Ci0JVGFyZ2V0IHNwZWNpZmljIGluaXRpYWxpemF0aW9uIGNvZGUKLQlUZXN0IGZvciBzb21lIGNvbW1vbiBtaXN0YWtlcy4KLSovCi12b2lkIHBvcnRhYmxlX2luaXQoY29yZV9wb3J0YWJsZSAqcCwgaW50ICphcmdjLCBjaGFyICphcmd2W10pCi17Ci0gICAgZWVfcHJpbnRmKCJDb3JlTWFyayAxLjBcbiIpOwotCWlmIChzaXplb2YoZWVfcHRyX2ludCkgIT0gc2l6ZW9mKGVlX3U4ICopKSB7Ci0JCWVlX3ByaW50ZigiRVJST1IhIFBsZWFzZSBkZWZpbmUgZWVfcHRyX2ludCB0byBhIHR5cGUgdGhhdCBob2xkcyBhIHBvaW50ZXIhICgldSAhPSAldSlcbiIsIHNpemVvZihlZV9wdHJfaW50KSwgc2l6ZW9mKGVlX3U4ICopKTsKLQl9Ci0JaWYgKHNpemVvZihlZV91MzIpICE9IDQpIHsKLQkJZWVfcHJpbnRmKCJFUlJPUiEgUGxlYXNlIGRlZmluZSBlZV91MzIgdG8gYSAzMmIgdW5zaWduZWQgdHlwZSEgKCV1KVxuIiwgc2l6ZW9mKGVlX3UzMikpOwotCX0KLQlwLT5wb3J0YWJsZV9pZD0xOwotfQotLyogRnVuY3Rpb24gOiBwb3J0YWJsZV9maW5pCi0JVGFyZ2V0IHNwZWNpZmljIGZpbmFsIGNvZGUKLSovCi12b2lkIHBvcnRhYmxlX2ZpbmkoY29yZV9wb3J0YWJsZSAqcCkKLXsKLQlwLT5wb3J0YWJsZV9pZD0wOwotCi0gICAgcmVwb3J0X3Jlc3VsdHMoMCwgMCwgMCwgMCwgMCk7Ci0KLSAgICAvKiByZXN1bHRzWzBdLml0ZXJhdGlvbnMgKiAxMDAwMDAwMC8odG90YWxfdGltZSkgKi8KLQotICAgIC8qIGV4dGVybiB2b2lkIHRvaG9zdF9leGl0KGxvbmcgY29kZSk7ICovCi0KLSAgICAvKiB0b2hvc3RfZXhpdCgwKTsgKi8KLX0KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9iZW5jaG1hcmtzL2NvcmVtYXJrL2NvcmVfcG9ydG1lLmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvYmVuY2htYXJrcy9jb3JlbWFyay9jb3JlX3BvcnRtZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTc5MzBmLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9iZW5jaG1hcmtzL2NvcmVtYXJrL2NvcmVfcG9ydG1lLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMTAgKzAsMCBAQAotLyogRmlsZSA6IGNvcmVfcG9ydG1lLmggKi8KLQotLyoKLQlBdXRob3IgOiBTaGF5IEdhbC1PbiwgRUVNQkMKLQlMZWdhbCA6IFRPRE8hCi0qLwotLyogVG9waWMgOiBEZXNjcmlwdGlvbgotCVRoaXMgZmlsZSBjb250YWlucyBjb25maWd1cmF0aW9uIGNvbnN0YW50cyByZXF1aXJlZCB0byBleGVjdXRlIG9uIGRpZmZlcmVudCBwbGF0Zm9ybXMKLSovCi0jaWZuZGVmIENPUkVfUE9SVE1FX0gKLSNkZWZpbmUgQ09SRV9QT1JUTUVfSAotLyoqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIERhdGEgdHlwZXMgYW5kIHNldHRpbmdzICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogQ29uZmlndXJhdGlvbiA6IEhBU19GTE9BVAotCURlZmluZSB0byAxIGlmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBmbG9hdGluZyBwb2ludC4KLSovCi0jaWZuZGVmIEhBU19GTE9BVAotI2RlZmluZSBIQVNfRkxPQVQgMAotI2VuZGlmCi0vKiBDb25maWd1cmF0aW9uIDogSEFTX1RJTUVfSAotCURlZmluZSB0byAxIGlmIHBsYXRmb3JtIGhhcyB0aGUgdGltZS5oIGhlYWRlciBmaWxlLAotCWFuZCBpbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgdGhlcmVvZi4KLSovCi0jaWZuZGVmIEhBU19USU1FX0gKLSNkZWZpbmUgSEFTX1RJTUVfSCAwCi0jZW5kaWYKLS8qIENvbmZpZ3VyYXRpb24gOiBVU0VfQ0xPQ0sKLQlEZWZpbmUgdG8gMSBpZiBwbGF0Zm9ybSBoYXMgdGhlIHRpbWUuaCBoZWFkZXIgZmlsZSwKLQlhbmQgaW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIHRoZXJlb2YuCi0qLwotI2lmbmRlZiBVU0VfQ0xPQ0sKLSNkZWZpbmUgVVNFX0NMT0NLIDAKLSNlbmRpZgotLyogQ29uZmlndXJhdGlvbiA6IEhBU19TVERJTwotCURlZmluZSB0byAxIGlmIHRoZSBwbGF0Zm9ybSBoYXMgc3RkaW8uaC4KLSovCi0jaWZuZGVmIEhBU19TVERJTwotI2RlZmluZSBIQVNfU1RESU8gMQotI2VuZGlmCi0vKiBDb25maWd1cmF0aW9uIDogSEFTX1BSSU5URgotCURlZmluZSB0byAxIGlmIHRoZSBwbGF0Zm9ybSBoYXMgc3RkaW8uaCBhbmQgaW1wbGVtZW50cyB0aGUgcHJpbnRmIGZ1bmN0aW9uLgotKi8KLSNpZm5kZWYgSEFTX1BSSU5URgotI2RlZmluZSBIQVNfUFJJTlRGIDAKLSNlbmRpZgotCi0jaW5jbHVkZSAic2NfcHJpbnQuaCIKLSNkZWZpbmUgZWVfcHJpbnRmIHNjX3ByaW50ZgotCi0vKiBzdGF0aWMgaW5saW5lIGludCBlZV9wcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pIHt9ICovCi0KLS8qIENvbmZpZ3VyYXRpb24gOiBDT1JFX1RJQ0tTCi0JRGVmaW5lIHR5cGUgb2YgcmV0dXJuIGZyb20gdGhlIHRpbWluZyBmdW5jdGlvbnMuCi0gKi8KLS8qICNpbmNsdWRlIDx0aW1lLmg+ICovCi0vKiB0eXBlZGVmIGNsb2NrX3QgQ09SRV9USUNLUzsgKi8KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNkZWZpbmUgQ09SRVRJTUVUWVBFIHVpbnQzMl90Ci10eXBlZGVmIHVpbnQzMl90IENPUkVfVElDS1M7Ci0KLS8qIERlZmluaXRpb25zIDogQ09NUElMRVJfVkVSU0lPTiwgQ09NUElMRVJfRkxBR1MsIE1FTV9MT0NBVElPTgotCUluaXRpYWxpemUgdGhlc2Ugc3RyaW5ncyBwZXIgcGxhdGZvcm0KLSovCi0jaWZuZGVmIENPTVBJTEVSX1ZFUlNJT04KLSAjaWZkZWYgX19HTlVDX18KLSAjZGVmaW5lIENPTVBJTEVSX1ZFUlNJT04gIkdDQyJfX1ZFUlNJT05fXwotICNlbHNlCi0gI2RlZmluZSBDT01QSUxFUl9WRVJTSU9OICJQbGVhc2UgcHV0IGNvbXBpbGVyIHZlcnNpb24gaGVyZSAoZS5nLiBnY2MgNC4xKSIKLSAjZW5kaWYKLSNlbmRpZgotI2lmbmRlZiBDT01QSUxFUl9GTEFHUwotICNkZWZpbmUgQ09NUElMRVJfRkxBR1MgRkxBR1NfU1RSIC8qICJQbGVhc2UgcHV0IGNvbXBpbGVyIGZsYWdzIGhlcmUgKGUuZy4gLW8zKSIgKi8KLSNlbmRpZgotI2lmbmRlZiBNRU1fTE9DQVRJT04KLSAvKiAjZGVmaW5lIE1FTV9MT0NBVElPTiAiU1RBQ0siICovCi0gI2RlZmluZSBNRU1fTE9DQVRJT04gIlNUQVRJQyIKLSNlbmRpZgotCi0vKiBEYXRhIFR5cGVzIDoKLQlUbyBhdm9pZCBjb21waWxlciBpc3N1ZXMsIGRlZmluZSB0aGUgZGF0YSB0eXBlcyB0aGF0IG5lZWQgb3QgYmUgdXNlZCBmb3IgOGIsIDE2YiBhbmQgMzJiIGluIDxjb3JlX3BvcnRtZS5oPi4KLQotCSpJbXBydGFudCogOgotCWVlX3B0cl9pbnQgbmVlZHMgdG8gYmUgdGhlIGRhdGEgdHlwZSB1c2VkIHRvIGhvbGQgcG9pbnRlcnMsIG90aGVyd2lzZSBjb3JlbWFyayBtYXkgZmFpbCEhIQotKi8KLXR5cGVkZWYgaW50MTZfdCBlZV9zMTY7Ci10eXBlZGVmIHVpbnQxNl90IGVlX3UxNjsKLXR5cGVkZWYgaW50MzJfdCBlZV9zMzI7Ci10eXBlZGVmIGZsb2F0IGVlX2YzMjsKLXR5cGVkZWYgdWludDhfdCBlZV91ODsKLXR5cGVkZWYgdWludDMyX3QgZWVfdTMyOwotdHlwZWRlZiB1aW50cHRyX3QgZWVfcHRyX2ludDsKLXR5cGVkZWYgc2l6ZV90IGVlX3NpemVfdDsKLS8qIGFsaWduX21lbSA6Ci0JVGhpcyBtYWNybyBpcyB1c2VkIHRvIGFsaWduIGFuIG9mZnNldCB0byBwb2ludCB0byBhIDMyYiB2YWx1ZS4gSXQgaXMgdXNlZCBpbiB0aGUgTWF0cml4IGFsZ29yaXRobSB0byBpbml0aWFsaXplIHRoZSBpbnB1dCBtZW1vcnkgYmxvY2tzLgotKi8KLSNkZWZpbmUgYWxpZ25fbWVtKHgpICh2b2lkICopKDQgKyAoKChlZV9wdHJfaW50KSh4KSAtIDEpICYgfjMpKQotCi0vKiBDb25maWd1cmF0aW9uIDogU0VFRF9NRVRIT0QKLQlEZWZpbmVzIG1ldGhvZCB0byBnZXQgc2VlZCB2YWx1ZXMgdGhhdCBjYW5ub3QgYmUgY29tcHV0ZWQgYXQgY29tcGlsZSB0aW1lLgotCi0JVmFsaWQgdmFsdWVzIDoKLQlTRUVEX0FSRyAtIGZyb20gY29tbWFuZCBsaW5lLgotCVNFRURfRlVOQyAtIGZyb20gYSBzeXN0ZW0gZnVuY3Rpb24uCi0JU0VFRF9WT0xBVElMRSAtIGZyb20gdm9sYXRpbGUgdmFyaWFibGVzLgotKi8KLSNpZm5kZWYgU0VFRF9NRVRIT0QKLSNkZWZpbmUgU0VFRF9NRVRIT0QgU0VFRF9WT0xBVElMRQotI2VuZGlmCi0KLS8qIENvbmZpZ3VyYXRpb24gOiBNRU1fTUVUSE9ECi0JRGVmaW5lcyBtZXRob2QgdG8gZ2V0IGEgYmxvY2sgb2YgbWVtcnkuCi0KLQlWYWxpZCB2YWx1ZXMgOgotCU1FTV9NQUxMT0MgLSBmb3IgcGxhdGZvcm1zIHRoYXQgaW1wbGVtZW50IG1hbGxvYyBhbmQgaGF2ZSBtYWxsb2MuaC4KLQlNRU1fU1RBVElDIC0gdG8gdXNlIGEgc3RhdGljIG1lbW9yeSBhcnJheS4KLQlNRU1fU1RBQ0sgLSB0byBhbGxvY2F0ZSB0aGUgZGF0YSBibG9jayBvbiB0aGUgc3RhY2sgKE5ZSSkuCi0qLwotI2lmbmRlZiBNRU1fTUVUSE9ECi0vKiAjZGVmaW5lIE1FTV9NRVRIT0QgTUVNX1NUQUNLICovCi0jZGVmaW5lIE1FTV9NRVRIT0QgTUVNX1NUQVRJQwotI2VuZGlmCi0KLS8qIENvbmZpZ3VyYXRpb24gOiBNVUxUSVRIUkVBRAotCURlZmluZSBmb3IgcGFyYWxsZWwgZXhlY3V0aW9uCi0KLQlWYWxpZCB2YWx1ZXMgOgotCTEgLSBvbmx5IG9uZSBjb250ZXh0IChkZWZhdWx0KS4KLQlOPjEgLSB3aWxsIGV4ZWN1dGUgTiBjb3BpZXMgaW4gcGFyYWxsZWwuCi0KLQlOb3RlIDoKLQlJZiB0aGlzIGZsYWcgaXMgZGVmaW5lZCB0byBtb3JlIHRoZW4gMSwgYW4gaW1wbGVtZW50YXRpb24gZm9yIGxhdW5jaGluZyBwYXJhbGxlbCBjb250ZXh0cyBtdXN0IGJlIGRlZmluZWQuCi0KLQlUd28gc2FtcGxlIGltcGxlbWVudGF0aW9ucyBhcmUgcHJvdmlkZWQuIFVzZSA8VVNFX1BUSFJFQUQ+IG9yIDxVU0VfRk9SSz4gdG8gZW5hYmxlIHRoZW0uCi0KLQlJdCBpcyB2YWxpZCB0byBoYXZlIGEgZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIG9mIDxjb3JlX3N0YXJ0X3BhcmFsbGVsPiBhbmQgPGNvcmVfZW5kX3BhcmFsbGVsPiBpbiA8Y29yZV9wb3J0bWUuYz4sCi0JdG8gZml0IGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmUuCi0qLwotI2lmbmRlZiBNVUxUSVRIUkVBRAotI2RlZmluZSBNVUxUSVRIUkVBRCAxCi0jZGVmaW5lIFVTRV9QVEhSRUFEIDAKLSNkZWZpbmUgVVNFX0ZPUksgMAotI2RlZmluZSBVU0VfU09DS0VUIDAKLSNlbmRpZgotCi0vKiBDb25maWd1cmF0aW9uIDogTUFJTl9IQVNfTk9BUkdDCi0JTmVlZGVkIGlmIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgZ2V0dGluZyBhcmd1bWVudHMgdG8gbWFpbi4KLQotCVZhbGlkIHZhbHVlcyA6Ci0JMCAtIGFyZ2MvYXJndiB0byBtYWluIGlzIHN1cHBvcnRlZAotCTEgLSBhcmdjL2FyZ3YgdG8gbWFpbiBpcyBub3Qgc3VwcG9ydGVkCi0KLQlOb3RlIDoKLQlUaGlzIGZsYWcgb25seSBtYXR0ZXJzIGlmIE1VTFRJVEhSRUFEIGhhcyBiZWVuIGRlZmluZWQgdG8gYSB2YWx1ZSBncmVhdGVyIHRoZW4gMS4KLSovCi0jaWZuZGVmIE1BSU5fSEFTX05PQVJHQwotI2RlZmluZSBNQUlOX0hBU19OT0FSR0MgMQotI2VuZGlmCi0KLS8qIENvbmZpZ3VyYXRpb24gOiBNQUlOX0hBU19OT1JFVFVSTgotCU5lZWRlZCBpZiBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IHJldHVybmluZyBhIHZhbHVlIGZyb20gbWFpbi4KLQotCVZhbGlkIHZhbHVlcyA6Ci0JMCAtIG1haW4gcmV0dXJucyBhbiBpbnQsIGFuZCByZXR1cm4gdmFsdWUgd2lsbCBiZSAwLgotCTEgLSBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IHJldHVybmluZyBhIHZhbHVlIGZyb20gbWFpbgotKi8KLSNpZm5kZWYgTUFJTl9IQVNfTk9SRVRVUk4KLSNkZWZpbmUgTUFJTl9IQVNfTk9SRVRVUk4gMAotI2VuZGlmCi0KLS8qIFZhcmlhYmxlIDogZGVmYXVsdF9udW1fY29udGV4dHMKLQlOb3QgdXNlZCBmb3IgdGhpcyBzaW1wbGUgcG9ydCwgbXVzdCBjaW50YWluIHRoZSB2YWx1ZSAxLgotKi8KLWV4dGVybiBlZV91MzIgZGVmYXVsdF9udW1fY29udGV4dHM7Ci0KLXR5cGVkZWYgc3RydWN0IENPUkVfUE9SVEFCTEVfUyB7Ci0JZWVfdTgJcG9ydGFibGVfaWQ7Ci19IGNvcmVfcG9ydGFibGU7Ci0KLS8qIHRhcmdldCBzcGVjaWZpYyBpbml0L2ZpbmkgKi8KLXZvaWQgcG9ydGFibGVfaW5pdChjb3JlX3BvcnRhYmxlICpwLCBpbnQgKmFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci12b2lkIHBvcnRhYmxlX2ZpbmkoY29yZV9wb3J0YWJsZSAqcCk7Ci0KLSNpZiAhZGVmaW5lZChQUk9GSUxFX1JVTikgJiYgIWRlZmluZWQoUEVSRk9STUFOQ0VfUlVOKSAmJiAhZGVmaW5lZChWQUxJREFUSU9OX1JVTikKLSNpZiAoVE9UQUxfREFUQV9TSVpFPT0xMjAwKQotI2RlZmluZSBQUk9GSUxFX1JVTiAxCi0jZWxpZiAoVE9UQUxfREFUQV9TSVpFPT0yMDAwKQotI2RlZmluZSBQRVJGT1JNQU5DRV9SVU4gMQotI2Vsc2UKLSNkZWZpbmUgVkFMSURBVElPTl9SVU4gMQotI2VuZGlmCi0jZW5kaWYKLQotdHlwZWRlZiBlZV9zMTYgTUFUREFUOwotdHlwZWRlZiBlZV9zMzIgTUFUUkVTOwotCi0KLWVlX3UxNiBjcmN1OChlZV91OCBkYXRhLCBlZV91MTYgY3JjICkgX19hdHRyaWJ1dGVfXyAoKGhvdCkpOwotZWVfdTE2IGNyY3UxNihlZV91MTYgbmV3dmFsLCBlZV91MTYgY3JjKSBfX2F0dHJpYnV0ZV9fICgoaG90KSk7Ci1lZV91MTYgY3JjdTMyKGVlX3UzMiBuZXd2YWwsIGVlX3UxNiBjcmMpIF9fYXR0cmlidXRlX18gKChob3QpKTsKLWVlX3UxNiBjcmMxNihlZV9zMTYgbmV3dmFsLCBlZV91MTYgY3JjKSBfX2F0dHJpYnV0ZV9fICgoaG90KSk7Ci1lZV9zMTYgbWF0cml4X3N1bShlZV91MzIgTiwgTUFUUkVTICpDLCBNQVREQVQgY2xpcHZhbCkgX19hdHRyaWJ1dGVfXyAoKGhvdCkpOwotdm9pZCBtYXRyaXhfbXVsX2NvbnN0KGVlX3UzMiBOLCBNQVRSRVMgKkMsIE1BVERBVCAqQSwgTUFUREFUIHZhbCkgX19hdHRyaWJ1dGVfXyAoKGhvdCkpOwotdm9pZCBtYXRyaXhfbXVsX3ZlY3QoZWVfdTMyIE4sIE1BVFJFUyAqQywgTUFUREFUICpBLCBNQVREQVQgKkIpIF9fYXR0cmlidXRlX18gKChob3QpKTsKLXZvaWQgbWF0cml4X211bF9tYXRyaXgoZWVfdTMyIE4sIE1BVFJFUyAqQywgTUFUREFUICpBLCBNQVREQVQgKkIpIF9fYXR0cmlidXRlX18gKChob3QpKTsKLXZvaWQgbWF0cml4X211bF9tYXRyaXhfYml0ZXh0cmFjdChlZV91MzIgTiwgTUFUUkVTICpDLCBNQVREQVQgKkEsIE1BVERBVCAqQikgX19hdHRyaWJ1dGVfXyAoKGhvdCkpOwotdm9pZCBtYXRyaXhfYWRkX2NvbnN0KGVlX3UzMiBOLCBNQVREQVQgKkEsIE1BVERBVCB2YWwpIF9fYXR0cmlidXRlX18gKChob3QpKTsKLQotI2VuZGlmIC8qIENPUkVfUE9SVE1FX0ggKi8KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL01ha2VmaWxlIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2JlbmNobWFya3MvZGhyeXN0b25lMjEvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwNTY0ODkuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2JlbmNobWFya3MvZGhyeXN0b25lMjEvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1zcmNfZGlyIDo9ICQoZGlyICQobGFzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpCi0KLUFERF9GTEFHUyAgIDo9IC1mbHRvCi1BRERfQ0ZMQUdTICA6PSAtRFNFTEZfVElNRUQ9MSAtRFRJTUU9MQotCi1jX3NyYyA6PSBzY19wcmludC5jIGRocnlfMS5jIGRocnlfMi5jCi0KLWluY2x1ZGUgJChpbmNfZGlyKS9jb21tb24ubWsKLQotZGVmYXVsdDogbG9nX3JlcXVlc3RlZF90Z3QgJChibGRfZGlyKS9kaHJ5c3RvbmUyMS5lbGYgJChibGRfZGlyKS9kaHJ5c3RvbmUyMS5oZXggJChibGRfZGlyKS9kaHJ5c3RvbmUyMS5kdW1wCi0KLWxvZ19yZXF1ZXN0ZWRfdGd0OgotCUBlY2hvIGRocnlzdG9uZTIxLmhleD4+ICQoYmxkX2RpcikvdGVzdF9pbmZvCi0KLWNsZWFuOgotCSQoUk0pICQoY19vYmpzKSAkKGFzbV9vYmpzKSAkKGJsZF9kaXIpL2RocnlzdG9uZTIxLmVsZiAkKGJsZF9kaXIpL2RocnlzdG9uZTIxLmhleCAkKGJsZF9kaXIpL2RocnlzdG9uZTIxLmR1bXAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9kaHJ5LmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9kaHJ5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYTAwNTkuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2JlbmNobWFya3MvZGhyeXN0b25lMjEvZGhyeS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIFRoZSBCWVRFIFVOSVggQmVuY2htYXJrcyAtIFJlbGVhc2UgMwotICogICAgICAgICAgTW9kdWxlOiBkaHJ5LmggICBTSUQ6IDMuNCA1LzE1LzkxIDE5OjMwOjIxCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBCdWcgcmVwb3J0cywgcGF0Y2hlcywgY29tbWVudHMsIHN1Z2dlc3Rpb25zIHNob3VsZCBiZSBzZW50IHRvOgotICoKLSAqCUJlbiBTbWl0aCwgUmljayBHcmVoYW4gb3IgVG9tIFlhZ2VyCi0gKgliZW5AYnl0ZXBiLmJ5dGUuY29tICAgcmlja19nQGJ5dGVwYi5ieXRlLmNvbSAgIHR5YWdlckBieXRlcGIuYnl0ZS5jb20KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBNb2RpZmljYXRpb24gTG9nOgotICogIGFkZGFwdGVkIGZyb206Ci0gKgotICoKLSAqICAgICAgICAgICAgICAgICAgICJESFJZU1RPTkUiIEJlbmNobWFyayBQcm9ncmFtCi0gKiAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqICBWZXJzaW9uOiAgICBDLCBWZXJzaW9uIDIuMQotICoKLSAqICBGaWxlOiAgICAgICBkaHJ5LmggKHBhcnQgMSBvZiAzKQotICoKLSAqICBEYXRlOiAgICAgICBNYXkgMjUsIDE5ODgKLSAqCi0gKiAgQXV0aG9yOiAgICAgUmVpbmhvbGQgUC4gV2VpY2tlcgotICogICAgICAgICAgICAgICAgICAgICAgU2llbWVucyBBRywgQVVUIEUgNTEKLSAqICAgICAgICAgICAgICAgICAgICAgIFBvc3RmYWNoIDMyMjAKLSAqICAgICAgICAgICAgICAgICAgICAgIDg1MjAgRXJsYW5nZW4KLSAqICAgICAgICAgICAgICAgICAgICAgIEdlcm1hbnkgKFdlc3QpCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBob25lOiAgWys0OV0tOTEzMS03LTIwMzMwCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDgtMTcgQ2VudHJhbCBFdXJvcGVhbiBUaW1lKQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VuZXQ6IC4uIW1jdmF4IXVuaWRvIWVzdGV2YXghd2VpY2tlcgotICoKLSAqICAgICAgICAgICAgICBPcmlnaW5hbCBWZXJzaW9uIChpbiBBZGEpIHB1Ymxpc2hlZCBpbgotICogICAgICAgICAgICAgICJDb21tdW5pY2F0aW9ucyBvZiB0aGUgQUNNIiB2b2wuIDI3Liwgbm8uIDEwIChPY3QuIDE5ODQpLAotICogICAgICAgICAgICAgIHBwLiAxMDEzIC0gMTAzMCwgdG9nZXRoZXIgd2l0aCB0aGUgc3RhdGlzdGljcwotICogICAgICAgICAgICAgIG9uIHdoaWNoIHRoZSBkaXN0cmlidXRpb24gb2Ygc3RhdGVtZW50cyBldGMuIGlzIGJhc2VkLgotICoKLSAqICAgICAgICAgICAgICBJbiB0aGlzIEMgdmVyc2lvbiwgdGhlIGZvbGxvd2luZyBDIGxpYnJhcnkgZnVuY3Rpb25zIGFyZSB1c2VkOgotICogICAgICAgICAgICAgIC0gc3RyY3B5LCBzdHJjbXAgKGluc2lkZSB0aGUgbWVhc3VyZW1lbnQgbG9vcCkKLSAqICAgICAgICAgICAgICAtIHByaW50Ziwgc2NhbmYgKG91dHNpZGUgdGhlIG1lYXN1cmVtZW50IGxvb3ApCi0gKiAgICAgICAgICAgICAgSW4gYWRkaXRpb24sIEJlcmtlbGV5IFVOSVggc3lzdGVtIGNhbGxzICJ0aW1lcyAoKSIgb3IgInRpbWUgKCkiCi0gKiAgICAgICAgICAgICAgYXJlIHVzZWQgZm9yIGV4ZWN1dGlvbiB0aW1lIG1lYXN1cmVtZW50LiBGb3IgbWVhc3VyZW1lbnRzCi0gKiAgICAgICAgICAgICAgb24gb3RoZXIgc3lzdGVtcywgdGhlc2UgY2FsbHMgaGF2ZSB0byBiZSBjaGFuZ2VkLgotICoKLSAqICBDb2xsZWN0aW9uIG9mIFJlc3VsdHM6Ci0gKiAgICAgICAgICAgICAgUmVpbmhvbGQgV2VpY2tlciAoYWRkcmVzcyBzZWUgYWJvdmUpIGFuZAotICoKLSAqICAgICAgICAgICAgICBSaWNrIFJpY2hhcmRzb24KLSAqICAgICAgICAgICAgICBQQyBSZXNlYXJjaC4gSW5jLgotICogICAgICAgICAgICAgIDk0IEFwcGxlIE9yY2hhcmQgRHJpdmUKLSAqICAgICAgICAgICAgICBUaW50b24gRmFsbHMsIE5KIDA3NzI0Ci0gKiAgICAgICAgICAgICAgICAgICAgICBQaG9uZTogICgyMDEpIDgzNC0xMzc4ICg5LTE3IEVTVCkKLSAqICAgICAgICAgICAgICAgICAgICAgIFVzZW5ldDogLi4uIXNlaXNtbyF1dW5ldCFwY3JhdCFyaWNrCi0gKgotICogICAgICBQbGVhc2Ugc2VuZCByZXN1bHRzIHRvIFJpY2sgUmljaGFyZHNvbiBhbmQvb3IgUmVpbmhvbGQgV2VpY2tlci4KLSAqICAgICAgQ29tcGxldGUgaW5mb3JtYXRpb24gc2hvdWxkIGJlIGdpdmVuIG9uIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSB1c2VkLgotICogICAgICBIYXJkd2FyZSBpbmZvcm1hdGlvbiBpbmNsdWRlczogTWFjaGluZSB0eXBlLCBDUFUsIHR5cGUgYW5kIHNpemUKLSAqICAgICAgb2YgY2FjaGVzOyBmb3IgbWljcm9wcm9jZXNzb3JzOiBjbG9jayBmcmVxdWVuY3ksIG1lbW9yeSBzcGVlZAotICogICAgICAobnVtYmVyIG9mIHdhaXQgc3RhdGVzKS4KLSAqICAgICAgU29mdHdhcmUgaW5mb3JtYXRpb24gaW5jbHVkZXM6IENvbXBpbGVyIChhbmQgcnVudGltZSBsaWJyYXJ5KQotICogICAgICBtYW51ZmFjdHVyZXIgYW5kIHZlcnNpb24sIGNvbXBpbGF0aW9uIHN3aXRjaGVzLCBPUyB2ZXJzaW9uLgotICogICAgICBUaGUgT3BlcmF0aW5nIFN5c3RlbSB2ZXJzaW9uIG1heSBnaXZlIGFuIGluZGljYXRpb24gYWJvdXQgdGhlCi0gKiAgICAgIGNvbXBpbGVyOyBEaHJ5c3RvbmUgaXRzZWxmIHBlcmZvcm1zIG5vIE9TIGNhbGxzIGluIHRoZSBtZWFzdXJlbWVudCBsb29wLgotICoKLSAqICAgICAgVGhlIGNvbXBsZXRlIG91dHB1dCBnZW5lcmF0ZWQgYnkgdGhlIHByb2dyYW0gc2hvdWxkIGJlIG1haWxlZAotICogICAgICBzdWNoIHRoYXQgYXQgbGVhc3Qgc29tZSBjaGVja3MgZm9yIGNvcnJlY3RuZXNzIGNhbiBiZSBtYWRlLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAgSGlzdG9yeTogICAgVGhpcyB2ZXJzaW9uIEMvMi4xIGhhcyBiZWVuIG1hZGUgZm9yIHR3byByZWFzb25zOgotICoKLSAqICAgICAgICAgICAgICAxKSBUaGVyZSBpcyBhbiBvYnZpb3VzIG5lZWQgZm9yIGEgY29tbW9uIEMgdmVyc2lvbiBvZgotICogICAgICAgICAgICAgIERocnlzdG9uZSwgc2luY2UgQyBpcyBhdCBwcmVzZW50IHRoZSBtb3N0IHBvcHVsYXIgc3lzdGVtCi0gKiAgICAgICAgICAgICAgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgZm9yIHRoZSBjbGFzcyBvZiBwcm9jZXNzb3JzCi0gKiAgICAgICAgICAgICAgKG1pY3JvY29tcHV0ZXJzLCBtaW5pY29tcHV0ZXJzKSB3aGVyZSBEaHJ5c3RvbmUgaXMgdXNlZCBtb3N0LgotICogICAgICAgICAgICAgIFRoZXJlIHNob3VsZCBiZSwgYXMgZmFyIGFzIHBvc3NpYmxlLCBvbmx5IG9uZSBDIHZlcnNpb24gb2YKLSAqICAgICAgICAgICAgICBEaHJ5c3RvbmUgc3VjaCB0aGF0IHJlc3VsdHMgY2FuIGJlIGNvbXBhcmVkIHdpdGhvdXQKLSAqICAgICAgICAgICAgICByZXN0cmljdGlvbnMuIEluIHRoZSBwYXN0LCB0aGUgQyB2ZXJzaW9ucyBkaXN0cmlidXRlZAotICogICAgICAgICAgICAgIGJ5IFJpY2sgUmljaGFyZHNvbiAoVmVyc2lvbiAxLjEpIGFuZCBieSBSZWluaG9sZCBXZWlja2VyCi0gKiAgICAgICAgICAgICAgaGFkIHNtYWxsICh0aG91Z2ggbm90IHNpZ25pZmljYW50KSBkaWZmZXJlbmNlcy4KLSAqCi0gKiAgICAgICAgICAgICAgMikgQXMgZmFyIGFzIGl0IGlzIHBvc3NpYmxlIHdpdGhvdXQgY2hhbmdlcyB0byB0aGUgRGhyeXN0b25lCi0gKiAgICAgICAgICAgICAgc3RhdGlzdGljcywgb3B0aW1pemluZyBjb21waWxlcnMgc2hvdWxkIGJlIHByZXZlbnRlZCBmcm9tCi0gKiAgICAgICAgICAgICAgcmVtb3Zpbmcgc2lnbmlmaWNhbnQgc3RhdGVtZW50cy4KLSAqCi0gKiAgICAgICAgICAgICAgVGhpcyBDIHZlcnNpb24gaGFzIGJlZW4gZGV2ZWxvcGVkIGluIGNvb3BlcmF0aW9uIHdpdGgKLSAqICAgICAgICAgICAgICBSaWNrIFJpY2hhcmRzb24gKFRpbnRvbiBGYWxscywgTkopLCBpdCBpbmNvcnBvcmF0ZXMgbWFueQotICogICAgICAgICAgICAgIGlkZWFzIGZyb20gdGhlICJWZXJzaW9uIDEuMSIgZGlzdHJpYnV0ZWQgcHJldmlvdXNseSBieQotICogICAgICAgICAgICAgIGhpbSBvdmVyIHRoZSBVTklYIG5ldHdvcmsgVXNlbmV0LgotICogICAgICAgICAgICAgIEkgYWxzbyB0aGFuayBDaGFpbSBCZW5lZGVsYWMgKE5hdGlvbmFsIFNlbWljb25kdWN0b3IpLAotICogICAgICAgICAgICAgIERhdmlkIERpdHplbCAoU1VOKSwgRWFybCBLaWxsaWFuIGFuZCBKb2huIE1hc2hleSAoTUlQUyksCi0gKiAgICAgICAgICAgICAgQWxhbiBTbWl0aCBhbmQgUmFmYWVsIFNhYXZlZHJhLUJhcnJlcmEgKFVDIGF0IEJlcmtlbGV5KQotICogICAgICAgICAgICAgIGZvciB0aGVpciBoZWxwIHdpdGggY29tbWVudHMgb24gZWFybGllciB2ZXJzaW9ucyBvZiB0aGUKLSAqICAgICAgICAgICAgICBiZW5jaG1hcmsuCi0gKgotICogIENoYW5nZXM6ICAgIEluIHRoZSBpbml0aWFsaXphdGlvbiBwYXJ0LCB0aGlzIHZlcnNpb24gZm9sbG93cyBtb3N0bHkKLSAqICAgICAgICAgICAgICBSaWNrIFJpY2hhcmRzb24ncyB2ZXJzaW9uIGRpc3RyaWJ1dGVkIHZpYSBVc2VuZXQsIG5vdCB0aGUKLSAqICAgICAgICAgICAgICB2ZXJzaW9uIGRpc3RyaWJ1dGVkIGVhcmxpZXIgdmlhIGZsb3BweSBkaXNrIGJ5IFJlaW5ob2xkIFdlaWNrZXIuCi0gKiAgICAgICAgICAgICAgQXMgYSBjb25jZXNzaW9uIHRvIG9sZGVyIGNvbXBpbGVycywgbmFtZXMgaGF2ZSBiZWVuIG1hZGUKLSAqICAgICAgICAgICAgICB1bmlxdWUgd2l0aGluIHRoZSBmaXJzdCA4IGNoYXJhY3RlcnMuCi0gKiAgICAgICAgICAgICAgSW5zaWRlIHRoZSBtZWFzdXJlbWVudCBsb29wLCB0aGlzIHZlcnNpb24gZm9sbG93cyB0aGUKLSAqICAgICAgICAgICAgICB2ZXJzaW9uIHByZXZpb3VzbHkgZGlzdHJpYnV0ZWQgYnkgUmVpbmhvbGQgV2VpY2tlci4KLSAqCi0gKiAgICAgICAgICAgICAgQXQgc2V2ZXJhbCBwbGFjZXMgaW4gdGhlIGJlbmNobWFyaywgY29kZSBoYXMgYmVlbiBhZGRlZCwKLSAqICAgICAgICAgICAgICBidXQgd2l0aGluIHRoZSBtZWFzdXJlbWVudCBsb29wIG9ubHkgaW4gYnJhbmNoZXMgdGhhdAotICogICAgICAgICAgICAgIGFyZSBub3QgZXhlY3V0ZWQuIFRoZSBpbnRlbnRpb24gaXMgdGhhdCBvcHRpbWl6aW5nIGNvbXBpbGVycwotICogICAgICAgICAgICAgIHNob3VsZCBiZSBwcmV2ZW50ZWQgZnJvbSBtb3ZpbmcgY29kZSBvdXQgb2YgdGhlIG1lYXN1cmVtZW50Ci0gKiAgICAgICAgICAgICAgbG9vcCwgb3IgZnJvbSByZW1vdmluZyBjb2RlIGFsdG9nZXRoZXIuIFNpbmNlIHRoZSBzdGF0ZW1lbnRzCi0gKiAgICAgICAgICAgICAgdGhhdCBhcmUgZXhlY3V0ZWQgd2l0aGluIHRoZSBtZWFzdXJlbWVudCBsb29wIGhhdmUgTk9UIGJlZW4KLSAqICAgICAgICAgICAgICBjaGFuZ2VkLCB0aGUgbnVtYmVycyBkZWZpbmluZyB0aGUgIkRocnlzdG9uZSBkaXN0cmlidXRpb24iCi0gKiAgICAgICAgICAgICAgKGRpc3RyaWJ1dGlvbiBvZiBzdGF0ZW1lbnRzLCBvcGVyYW5kIHR5cGVzIGFuZCBsb2NhbGl0eSkKLSAqICAgICAgICAgICAgICBzdGlsbCBob2xkLiBFeGNlcHQgZm9yIHNvcGhpc3RpY2F0ZWQgb3B0aW1pemluZyBjb21waWxlcnMsCi0gKiAgICAgICAgICAgICAgZXhlY3V0aW9uIHRpbWVzIGZvciB0aGlzIHZlcnNpb24gc2hvdWxkIGJlIHRoZSBzYW1lIGFzCi0gKiAgICAgICAgICAgICAgZm9yIHByZXZpb3VzIHZlcnNpb25zLgotICoKLSAqICAgICAgICAgICAgICBTaW5jZSBpdCBoYXMgcHJvdmVuIGRpZmZpY3VsdCB0byBzdWJ0cmFjdCB0aGUgdGltZSBmb3IgdGhlCi0gKiAgICAgICAgICAgICAgbWVhc3VyZW1lbnQgbG9vcCBvdmVyaGVhZCBpbiBhIGNvcnJlY3Qgd2F5LCB0aGUgbG9vcCBjaGVjawotICogICAgICAgICAgICAgIGhhcyBiZWVuIG1hZGUgYSBwYXJ0IG9mIHRoZSBiZW5jaG1hcmsuIFRoaXMgZG9lcyBoYXZlCi0gKiAgICAgICAgICAgICAgYW4gaW1wYWN0IC0gdGhvdWdoIGEgdmVyeSBtaW5vciBvbmUgLSBvbiB0aGUgZGlzdHJpYnV0aW9uCi0gKiAgICAgICAgICAgICAgc3RhdGlzdGljcyB3aGljaCBoYXZlIGJlZW4gdXBkYXRlZCBmb3IgdGhpcyB2ZXJzaW9uLgotICoKLSAqICAgICAgICAgICAgICBBbGwgY2hhbmdlcyB3aXRoaW4gdGhlIG1lYXN1cmVtZW50IGxvb3AgYXJlIGRlc2NyaWJlZAotICogICAgICAgICAgICAgIGFuZCBkaXNjdXNzZWQgaW4gdGhlIGNvbXBhbmlvbiBwYXBlciAiUmF0aW9uYWxlIGZvcgotICogICAgICAgICAgICAgIERocnlzdG9uZSB2ZXJzaW9uIDIiLgotICoKLSAqICAgICAgICAgICAgICBCZWNhdXNlIG9mIHRoZSBzZWxmLWltcG9zZWQgbGltaXRhdGlvbiB0aGF0IHRoZSBvcmRlciBhbmQKLSAqICAgICAgICAgICAgICBkaXN0cmlidXRpb24gb2YgdGhlIGV4ZWN1dGVkIHN0YXRlbWVudHMgc2hvdWxkIG5vdCBiZQotICogICAgICAgICAgICAgIGNoYW5nZWQsIHRoZXJlIGFyZSBzdGlsbCBjYXNlcyB3aGVyZSBvcHRpbWl6aW5nIGNvbXBpbGVycwotICogICAgICAgICAgICAgIG1heSBub3QgZ2VuZXJhdGUgY29kZSBmb3Igc29tZSBzdGF0ZW1lbnRzLiBUbyBhIGNlcnRhaW4KLSAqICAgICAgICAgICAgICBkZWdyZWUsIHRoaXMgaXMgdW5hdm9pZGFibGUgZm9yIHNtYWxsIHN5bnRoZXRpYyBiZW5jaG1hcmtzLgotICogICAgICAgICAgICAgIFVzZXJzIG9mIHRoZSBiZW5jaG1hcmsgYXJlIGFkdmlzZWQgdG8gY2hlY2sgY29kZSBsaXN0aW5ncwotICogICAgICAgICAgICAgIHdoZXRoZXIgY29kZSBpcyBnZW5lcmF0ZWQgZm9yIGFsbCBzdGF0ZW1lbnRzIG9mIERocnlzdG9uZS4KLSAqCi0gKiAgICAgICAgICAgICAgVmVyc2lvbiAyLjEgaXMgaWRlbnRpY2FsIHRvIHZlcnNpb24gMi4wIGRpc3RyaWJ1dGVkIHZpYQotICogICAgICAgICAgICAgIHRoZSBVTklYIG5ldHdvcmsgVXNlbmV0IGluIE1hcmNoIDE5ODggZXhjZXB0IHRoYXQgaXQgY29ycmVjdHMKLSAqICAgICAgICAgICAgICBzb21lIG1pbm9yIGRlZmljaWVuY2llcyB0aGF0IHdlcmUgZm91bmQgYnkgdXNlcnMgb2YgdmVyc2lvbiAyLjAuCi0gKiAgICAgICAgICAgICAgVGhlIG9ubHkgY2hhbmdlIHdpdGhpbiB0aGUgbWVhc3VyZW1lbnQgbG9vcCBpcyB0aGF0IGEKLSAqICAgICAgICAgICAgICBub24tZXhlY3V0ZWQgImVsc2UiIHBhcnQgd2FzIGFkZGVkIHRvIHRoZSAiaWYiIHN0YXRlbWVudCBpbgotICogICAgICAgICAgICAgIEZ1bmNfMywgYW5kIGEgbm9uLWV4ZWN1dGVkICJlbHNlIiBwYXJ0IHJlbW92ZWQgZnJvbSBQcm9jXzMuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIERlZmluZXM6ICAgICBUaGUgZm9sbG93aW5nICJEZWZpbmVzIiBhcmUgcG9zc2libGU6Ci0gKiAgICAgICAgICAgICAgLURSRUc9cmVnaXN0ZXIgICAgICAgICAgKGRlZmF1bHQ6IE5vdCBkZWZpbmVkKQotICogICAgICAgICAgICAgICAgICAgICAgQXMgYW4gYXBwcm94aW1hdGlvbiB0byB3aGF0IGFuIGF2ZXJhZ2UgQyBwcm9ncmFtbWVyCi0gKiAgICAgICAgICAgICAgICAgICAgICBtaWdodCBkbywgdGhlICJyZWdpc3RlciIgc3RvcmFnZSBjbGFzcyBpcyBhcHBsaWVkCi0gKiAgICAgICAgICAgICAgICAgICAgICAoaWYgZW5hYmxlZCBieSAtRFJFRz1yZWdpc3RlcikKLSAqICAgICAgICAgICAgICAgICAgICAgIC0gZm9yIGxvY2FsIHZhcmlhYmxlcywgaWYgdGhleSBhcmUgdXNlZCAoZHluYW1pY2FsbHkpCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIGZpdmUgb3IgbW9yZSB0aW1lcwotICogICAgICAgICAgICAgICAgICAgICAgLSBmb3IgcGFyYW1ldGVycyBpZiB0aGV5IGFyZSB1c2VkIChkeW5hbWljYWxseSkKLSAqICAgICAgICAgICAgICAgICAgICAgICAgc2l4IG9yIG1vcmUgdGltZXMKLSAqICAgICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBhbiBvcHRpbWFsICJyZWdpc3RlciIgc3RyYXRlZ3kgaXMKLSAqICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVyLWRlcGVuZGVudCwgYW5kIHRoYXQgInJlZ2lzdGVyIiBkZWNsYXJhdGlvbnMKLSAqICAgICAgICAgICAgICAgICAgICAgIGRvIG5vdCBuZWNlc3NhcmlseSBsZWFkIHRvIGZhc3RlciBleGVjdXRpb24uCi0gKiAgICAgICAgICAgICAgLUROT1NUUlVDVEFTU0lHTiAgICAgICAgKGRlZmF1bHQ6IE5vdCBkZWZpbmVkKQotICogICAgICAgICAgICAgICAgICAgICAgRGVmaW5lIGlmIHRoZSBDIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQKLSAqICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnQgb2Ygc3RydWN0dXJlcy4KLSAqICAgICAgICAgICAgICAtRE5PRU5VTVMgICAgICAgICAgICAgICAoZGVmYXVsdDogTm90IGRlZmluZWQpCi0gKiAgICAgICAgICAgICAgICAgICAgICBEZWZpbmUgaWYgdGhlIEMgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydAotICogICAgICAgICAgICAgICAgICAgICAgZW51bWVyYXRpb24gdHlwZXMuCi0gKiAgICAgICAgICAgICAgLURUSU1FUyAgICAgICAgICAgICAgICAgKGRlZmF1bHQpCi0gKiAgICAgICAgICAgICAgLURUSU1FCi0gKiAgICAgICAgICAgICAgICAgICAgICBUaGUgInRpbWVzIiBmdW5jdGlvbiBvZiBVTklYIChyZXR1cm5pbmcgcHJvY2VzcyB0aW1lcykKLSAqICAgICAgICAgICAgICAgICAgICAgIG9yIHRoZSAidGltZSIgZnVuY3Rpb24gKHJldHVybmluZyB3YWxsY2xvY2sgdGltZSkKLSAqICAgICAgICAgICAgICAgICAgICAgIGlzIHVzZWQgZm9yIG1lYXN1cmVtZW50LgotICogICAgICAgICAgICAgICAgICAgICAgRm9yIHNpbmdsZSB1c2VyIG1hY2hpbmVzLCAidGltZSAoKSIgaXMgYWRlcXVhdGUuIEZvcgotICogICAgICAgICAgICAgICAgICAgICAgbXVsdGktdXNlciBtYWNoaW5lcyB3aGVyZSB5b3UgY2Fubm90IGdldCBzaW5nbGUtdXNlcgotICogICAgICAgICAgICAgICAgICAgICAgYWNjZXNzLCB1c2UgdGhlICJ0aW1lcyAoKSIgZnVuY3Rpb24uIElmIHlvdSBoYXZlCi0gKiAgICAgICAgICAgICAgICAgICAgICBuZWl0aGVyLCB1c2UgYSBzdG9wd2F0Y2ggaW4gdGhlIGRlYWQgb2YgbmlnaHQuCi0gKiAgICAgICAgICAgICAgICAgICAgICAicHJpbnRmInMgYXJlIHByb3ZpZGVkIG1hcmtpbmcgdGhlIHBvaW50cyAiU3RhcnQgVGltZXIiCi0gKiAgICAgICAgICAgICAgICAgICAgICBhbmQgIlN0b3AgVGltZXIiLiBETyBOT1QgdXNlIHRoZSBVTklYICJ0aW1lKDEpIgotICogICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCwgYXMgdGhpcyB3aWxsIG1lYXN1cmUgdGhlIHRvdGFsIHRpbWUgdG8KLSAqICAgICAgICAgICAgICAgICAgICAgIHJ1biB0aGlzIHByb2dyYW0sIHdoaWNoIHdpbGwgKGVycm9uZW91c2x5KSBpbmNsdWRlCi0gKiAgICAgICAgICAgICAgICAgICAgICB0aGUgdGltZSB0byBhbGxvY2F0ZSBzdG9yYWdlIChtYWxsb2MpIGFuZCB0byBwZXJmb3JtCi0gKiAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5pdGlhbGl6YXRpb24uCi0gKiAgICAgICAgICAgICAgLURIWj1ubm4KLSAqICAgICAgICAgICAgICAgICAgICAgIEluIEJlcmtlbGV5IFVOSVgsIHRoZSBmdW5jdGlvbiAidGltZXMiIHJldHVybnMgcHJvY2VzcwotICogICAgICAgICAgICAgICAgICAgICAgdGltZSBpbiAxL0haIHNlY29uZHMsIHdpdGggSFogPSA2MCBmb3IgbW9zdCBzeXN0ZW1zLgotICogICAgICAgICAgICAgICAgICAgICAgQ0hFQ0sgWU9VUiBTWVNURU0gREVTQ1JJUFRJT04gQkVGT1JFIFlPVSBKVVNUIEFQUExZCi0gKiAgICAgICAgICAgICAgICAgICAgICBBIFZBTFVFLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAgQ29tcGlsYXRpb24gbW9kZWwgYW5kIG1lYXN1cmVtZW50IChJTVBPUlRBTlQpOgotICoKLSAqICBUaGlzIEMgdmVyc2lvbiBvZiBEaHJ5c3RvbmUgY29uc2lzdHMgb2YgdGhyZWUgZmlsZXM6Ci0gKiAgLSBkaHJ5LmggKHRoaXMgZmlsZSwgY29udGFpbmluZyBnbG9iYWwgZGVmaW5pdGlvbnMgYW5kIGNvbW1lbnRzKQotICogIC0gZGhyeV8xLmMgKGNvbnRhaW5pbmcgdGhlIGNvZGUgY29ycmVzcG9uZGluZyB0byBBZGEgcGFja2FnZSBQYWNrXzEpCi0gKiAgLSBkaHJ5XzIuYyAoY29udGFpbmluZyB0aGUgY29kZSBjb3JyZXNwb25kaW5nIHRvIEFkYSBwYWNrYWdlIFBhY2tfMikKLSAqCi0gKiAgVGhlIGZvbGxvd2luZyAiZ3JvdW5kIHJ1bGVzIiBhcHBseSBmb3IgbWVhc3VyZW1lbnRzOgotICogIC0gU2VwYXJhdGUgY29tcGlsYXRpb24KLSAqICAtIE5vIHByb2NlZHVyZSBtZXJnaW5nCi0gKiAgLSBPdGhlcndpc2UsIGNvbXBpbGVyIG9wdGltaXphdGlvbnMgYXJlIGFsbG93ZWQgYnV0IHNob3VsZCBiZSBpbmRpY2F0ZWQKLSAqICAtIERlZmF1bHQgcmVzdWx0cyBhcmUgdGhvc2Ugd2l0aG91dCByZWdpc3RlciBkZWNsYXJhdGlvbnMKLSAqICBTZWUgdGhlIGNvbXBhbmlvbiBwYXBlciAiUmF0aW9uYWxlIGZvciBEaHJ5c3RvbmUgVmVyc2lvbiAyIiBmb3IgYSBtb3JlCi0gKiAgZGV0YWlsZWQgZGlzY3Vzc2lvbiBvZiB0aGVzZSBncm91bmQgcnVsZXMuCi0gKgotICogIEZvciAxNi1CaXQgcHJvY2Vzc29ycyAoZS5nLiA4MDE4NiwgODAyODYpLCB0aW1lcyBmb3IgYWxsIGNvbXBpbGF0aW9uCi0gKiAgbW9kZWxzICgic21hbGwiLCAibWVkaXVtIiwgImxhcmdlIiBldGMuKSBzaG91bGQgYmUgZ2l2ZW4gaWYgcG9zc2libGUsCi0gKiAgdG9nZXRoZXIgd2l0aCBhIGRlZmluaXRpb24gb2YgdGhlc2UgbW9kZWxzIGZvciB0aGUgY29tcGlsZXIgc3lzdGVtIHVzZWQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogIERocnlzdG9uZSAoQyB2ZXJzaW9uKSBzdGF0aXN0aWNzOgotICoKLSAqICBbQ29tbWVudCBmcm9tIHRoZSBmaXJzdCBkaXN0cmlidXRpb24sIHVwZGF0ZWQgZm9yIHZlcnNpb24gMi4KLSAqICAgTm90ZSB0aGF0IGJlY2F1c2Ugb2YgbGFuZ3VhZ2UgZGlmZmVyZW5jZXMsIHRoZSBudW1iZXJzIGFyZSBzbGlnaHRseQotICogICBkaWZmZXJlbnQgZnJvbSB0aGUgQWRhIHZlcnNpb24uXQotICoKLSAqICBUaGUgZm9sbG93aW5nIHByb2dyYW0gY29udGFpbnMgc3RhdGVtZW50cyBvZiBhIGhpZ2ggbGV2ZWwgcHJvZ3JhbW1pbmcKLSAqICBsYW5ndWFnZSAoaGVyZTogQykgaW4gYSBkaXN0cmlidXRpb24gY29uc2lkZXJlZCByZXByZXNlbnRhdGl2ZToKLSAqCi0gKiAgICBhc3NpZ25tZW50cyAgICAgICAgICAgICAgICAgIDUyICg1MS4wICUpCi0gKiAgICBjb250cm9sIHN0YXRlbWVudHMgICAgICAgICAgIDMzICgzMi40ICUpCi0gKiAgICBwcm9jZWR1cmUsIGZ1bmN0aW9uIGNhbGxzICAgIDE3ICgxNi43ICUpCi0gKgotICogIDEwMyBzdGF0ZW1lbnRzIGFyZSBkeW5hbWljYWxseSBleGVjdXRlZC4gVGhlIHByb2dyYW0gaXMgYmFsYW5jZWQgd2l0aAotICogIHJlc3BlY3QgdG8gdGhlIHRocmVlIGFzcGVjdHM6Ci0gKgotICogICAgLSBzdGF0ZW1lbnQgdHlwZQotICogICAgLSBvcGVyYW5kIHR5cGUKLSAqICAgIC0gb3BlcmFuZCBsb2NhbGl0eQotICogICAgICAgICBvcGVyYW5kIGdsb2JhbCwgbG9jYWwsIHBhcmFtZXRlciwgb3IgY29uc3RhbnQuCi0gKgotICogIFRoZSBjb21iaW5hdGlvbiBvZiB0aGVzZSB0aHJlZSBhc3BlY3RzIGlzIGJhbGFuY2VkIG9ubHkgYXBwcm94aW1hdGVseS4KLSAqCi0gKiAgMS4gU3RhdGVtZW50IFR5cGU6Ci0gKiAgLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgbnVtYmVyCi0gKgotICogICAgIFYxID0gVjIgICAgICAgICAgICAgICAgICAgICA5Ci0gKiAgICAgICAoaW5jbC4gVjEgPSBGKC4uKQotICogICAgIFYgPSBDb25zdGFudCAgICAgICAgICAgICAgIDEyCi0gKiAgICAgQXNzaWdubWVudCwgICAgICAgICAgICAgICAgIDcKLSAqICAgICAgIHdpdGggYXJyYXkgZWxlbWVudAotICogICAgIEFzc2lnbm1lbnQsICAgICAgICAgICAgICAgICA2Ci0gKiAgICAgICB3aXRoIHJlY29yZCBjb21wb25lbnQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0ICAgICAgIDM0Ci0gKgotICogICAgIFggPSBZICt8LXwiJiYifCJ8IiBaICAgICAgICA1Ci0gKiAgICAgWCA9IFkgK3wtfCI9PSIgQ29uc3RhbnQgICAgIDYKLSAqICAgICBYID0gWCArfC0gMSAgICAgICAgICAgICAgICAgMwotICogICAgIFggPSBZICp8LyBaICAgICAgICAgICAgICAgICAyCi0gKiAgICAgWCA9IEV4cHJlc3Npb24sICAgICAgICAgICAgIDEKLSAqICAgICAgICAgICB0d28gb3BlcmF0b3JzCi0gKiAgICAgWCA9IEV4cHJlc3Npb24sICAgICAgICAgICAgIDEKLSAqICAgICAgICAgICB0aHJlZSBvcGVyYXRvcnMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4ICAgICAgIDE4Ci0gKgotICogICAgIGlmIC4uLi4gICAgICAgICAgICAgICAgICAgIDE0Ci0gKiAgICAgICB3aXRoICJlbHNlIiAgICAgIDcKLSAqICAgICAgIHdpdGhvdXQgImVsc2UiICAgNwotICogICAgICAgICAgIGV4ZWN1dGVkICAgICAgICAzCi0gKiAgICAgICAgICAgbm90IGV4ZWN1dGVkICAgIDQKLSAqICAgICBmb3IgLi4uICAgICAgICAgICAgICAgICAgICAgNyAgfCAgY291bnRlZCBldmVyeSB0aW1lCi0gKiAgICAgd2hpbGUgLi4uICAgICAgICAgICAgICAgICAgIDQgIHwgIHRoZSBsb29wIGNvbmRpdGlvbgotICogICAgIGRvIC4uLiB3aGlsZSAgICAgICAgICAgICAgICAxICB8ICBpcyBldmFsdWF0ZWQKLSAqICAgICBzd2l0Y2ggLi4uICAgICAgICAgICAgICAgICAgMQotICogICAgIGJyZWFrICAgICAgICAgICAgICAgICAgICAgICAxCi0gKiAgICAgZGVjbGFyYXRpb24gd2l0aCAgICAgICAgICAgIDEKLSAqICAgICAgIGluaXRpYWxpemF0aW9uCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNCAgICAgICAzNAotICoKLSAqICAgICBQICguLi4pICBwcm9jZWR1cmUgY2FsbCAgICAxMQotICogICAgICAgdXNlciBwcm9jZWR1cmUgICAgICAxMAotICogICAgICAgbGlicmFyeSBwcm9jZWR1cmUgICAgMQotICogICAgIFggPSBGICguLi4pCi0gKiAgICAgICAgICAgICBmdW5jdGlvbiAgY2FsbCAgICAgIDYKLSAqICAgICAgIHVzZXIgZnVuY3Rpb24gICAgICAgIDUKLSAqICAgICAgIGxpYnJhcnkgZnVuY3Rpb24gICAgIDEKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3ICAgICAgIDE3Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMwotICoKLSAqICAgIFRoZSBhdmVyYWdlIG51bWJlciBvZiBwYXJhbWV0ZXJzIGluIHByb2NlZHVyZSBvciBmdW5jdGlvbiBjYWxscwotICogICAgaXMgMS44MiAobm90IGNvdW50aW5nIHRoZSBmdW5jdGlvbiB2YWx1ZXMgYXMgaW1wbGljaXQgcGFyYW1ldGVycykuCi0gKgotICoKLSAqICAyLiBPcGVyYXRvcnMKLSAqICAtLS0tLS0tLS0tLS0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgICAgYXBwcm94aW1hdGUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZQotICoKLSAqICAgIEFyaXRobWV0aWMgICAgICAgICAgICAgMzIgICAgICAgICAgNTAuOAotICoKLSAqICAgICAgICsgICAgICAgICAgICAgICAgICAgICAyMSAgICAgICAgICAzMy4zCi0gKiAgICAgICAtICAgICAgICAgICAgICAgICAgICAgIDcgICAgICAgICAgMTEuMQotICogICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAzICAgICAgICAgICA0LjgKLSAqICAgICAgIC8gKGludCBkaXYpICAgICAgICAgICAgMSAgICAgICAgICAgMS42Ci0gKgotICogICAgQ29tcGFyaXNvbiAgICAgICAgICAgICAyNyAgICAgICAgICAgNDIuOAotICoKLSAqICAgICAgID09ICAgICAgICAgICAgICAgICAgICAgOSAgICAgICAgICAgMTQuMwotICogICAgICAgLz0gICAgICAgICAgICAgICAgICAgICA0ICAgICAgICAgICAgNi4zCi0gKiAgICAgICA+ICAgICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAxLjYKLSAqICAgICAgIDwgICAgICAgICAgICAgICAgICAgICAgMyAgICAgICAgICAgIDQuOAotICogICAgICAgPj0gICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgMS42Ci0gKiAgICAgICA8PSAgICAgICAgICAgICAgICAgICAgIDkgICAgICAgICAgIDE0LjMKLSAqCi0gKiAgICBMb2dpYyAgICAgICAgICAgICAgICAgICA0ICAgICAgICAgICAgNi4zCi0gKgotICogICAgICAgJiYgKEFORC1USEVOKSAgICAgICAgICAxICAgICAgICAgICAgMS42Ci0gKiAgICAgICB8ICAoT1IpICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAxLjYKLSAqICAgICAgICEgIChOT1QpICAgICAgICAgICAgICAgMiAgICAgICAgICAgIDMuMgotICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gICAgICAgICAgLS0tLS0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgNjMgICAgICAgICAgMTAwLjEKLSAqCi0gKgotICogIDMuIE9wZXJhbmQgVHlwZSAoY291bnRlZCBvbmNlIHBlciBvcGVyYW5kIHJlZmVyZW5jZSk6Ci0gKiAgLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyICAgIGFwcHJveGltYXRlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2UKLSAqCi0gKiAgICAgSW50ZWdlciAgICAgICAgICAgICAgIDE3NSAgICAgICAgNzIuMyAlCi0gKiAgICAgQ2hhcmFjdGVyICAgICAgICAgICAgICA0NSAgICAgICAgMTguNiAlCi0gKiAgICAgUG9pbnRlciAgICAgICAgICAgICAgICAxMiAgICAgICAgIDUuMCAlCi0gKiAgICAgU3RyaW5nMzAgICAgICAgICAgICAgICAgNiAgICAgICAgIDIuNSAlCi0gKiAgICAgQXJyYXkgICAgICAgICAgICAgICAgICAgMiAgICAgICAgIDAuOCAlCi0gKiAgICAgUmVjb3JkICAgICAgICAgICAgICAgICAgMiAgICAgICAgIDAuOCAlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLSAgICAgICAtLS0tLS0tCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0MiAgICAgICAxMDAuMCAlCi0gKgotICogIFdoZW4gdGhlcmUgaXMgYW4gYWNjZXNzIHBhdGggbGVhZGluZyB0byB0aGUgZmluYWwgb3BlcmFuZCAoZS5nLiBhIHJlY29yZAotICogIGNvbXBvbmVudCksIG9ubHkgdGhlIGZpbmFsIGRhdGEgdHlwZSBvbiB0aGUgYWNjZXNzIHBhdGggaXMgY291bnRlZC4KLSAqCi0gKgotICogIDQuIE9wZXJhbmQgTG9jYWxpdHk6Ci0gKiAgLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciAgICBhcHByb3hpbWF0ZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlCi0gKgotICogICAgIGxvY2FsIHZhcmlhYmxlICAgICAgICAgICAgICAxMTQgICAgICAgIDQ3LjEgJQotICogICAgIGdsb2JhbCB2YXJpYWJsZSAgICAgICAgICAgICAgMjIgICAgICAgICA5LjEgJQotICogICAgIHBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgNDUgICAgICAgIDE4LjYgJQotICogICAgICAgIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgMjMgICAgICAgICA5LjUgJQotICogICAgICAgIHJlZmVyZW5jZSAgICAgICAgICAgICAgICAgICAgMjIgICAgICAgICA5LjEgJQotICogICAgIGZ1bmN0aW9uIHJlc3VsdCAgICAgICAgICAgICAgIDYgICAgICAgICAyLjUgJQotICogICAgIGNvbnN0YW50ICAgICAgICAgICAgICAgICAgICAgNTUgICAgICAgIDIyLjcgJQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0gICAgICAgLS0tLS0tLQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDIgICAgICAgMTAwLjAgJQotICoKLSAqCi0gKiAgVGhlIHByb2dyYW0gZG9lcyBub3QgY29tcHV0ZSBhbnl0aGluZyBtZWFuaW5nZnVsLCBidXQgaXQgaXMgc3ludGFjdGljYWxseQotICogIGFuZCBzZW1hbnRpY2FsbHkgY29ycmVjdC4gQWxsIHZhcmlhYmxlcyBoYXZlIGEgdmFsdWUgYXNzaWduZWQgdG8gdGhlbQotICogIGJlZm9yZSB0aGV5IGFyZSB1c2VkIGFzIGEgc291cmNlIG9wZXJhbmQuCi0gKgotICogIFRoZXJlIGhhcyBiZWVuIG5vIGV4cGxpY2l0IGVmZm9ydCB0byBhY2NvdW50IGZvciB0aGUgZWZmZWN0cyBvZiBhCi0gKiAgY2FjaGUsIG9yIHRvIGJhbGFuY2UgdGhlIHVzZSBvZiBsb25nIG9yIHNob3J0IGRpc3BsYWNlbWVudHMgZm9yIGNvZGUgb3IKLSAqICBkYXRhLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotCi0KLS8qIENvbXBpbGVyIGFuZCBzeXN0ZW0gZGVwZW5kZW50IGRlZmluaXRpb25zOiAqLwotCi0jaWZuZGVmIFRJTUUKLSNkZWZpbmUgVElNRVMKLSNlbmRpZgotICAgICAgICAgICAgICAgIC8qIFVzZSB0aW1lcygyKSB0aW1lIGZ1bmN0aW9uIHVubGVzcyAgICAqLwotICAgICAgICAgICAgICAgIC8qIGV4cGxpY2l0bHkgZGVmaW5lZCBvdGhlcndpc2UgICAgICAgICAqLwotCi0jaWZkZWYgVElNRVMKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvdGltZXMuaD4KLSAgICAgICAgICAgICAgICAvKiBmb3IgInRpbWVzIiAqLwotI2VuZGlmCi0KLSNkZWZpbmUgTWljX3NlY3NfUGVyX1NlY29uZCAgICAgMTAwMDAwMAotICAgICAgICAgICAgICAgIC8qIEJlcmtlbGV5IFVOSVggQyByZXR1cm5zIHByb2Nlc3MgdGltZXMgaW4gc2Vjb25kcy9IWiAqLwotCi0jaWZkZWYgIE5PU1RSVUNUQVNTSUdOCi0jZGVmaW5lIHN0cnVjdGFzc2lnbihkLCBzKSAgICAgIG1lbWNweSgmKGQpLCAmKHMpLCBzaXplb2YoZCkpCi0jZWxzZQotI2RlZmluZSBzdHJ1Y3Rhc3NpZ24oZCwgcykgICAgICBkID0gcwotI2VuZGlmCi0KLSNpZmRlZiAgTk9FTlVNCi0jZGVmaW5lIElkZW50XzEgMAotI2RlZmluZSBJZGVudF8yIDEKLSNkZWZpbmUgSWRlbnRfMyAyCi0jZGVmaW5lIElkZW50XzQgMwotI2RlZmluZSBJZGVudF81IDQKLSAgdHlwZWRlZiBpbnQgICBFbnVtZXJhdGlvbjsKLSNlbHNlCi0gIHR5cGVkZWYgICAgICAgZW51bSAgICB7SWRlbnRfMSwgSWRlbnRfMiwgSWRlbnRfMywgSWRlbnRfNCwgSWRlbnRfNX0KLSAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbjsKLSNlbmRpZgotICAgICAgICAvKiBmb3IgYm9vbGVhbiBhbmQgZW51bWVyYXRpb24gdHlwZXMgaW4gQWRhLCBQYXNjYWwgKi8KLQotLyogR2VuZXJhbCBkZWZpbml0aW9uczogKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0gICAgICAgICAgICAgICAgLyogZm9yIHN0cmNweSwgc3RyY21wICovCi0KLSNkZWZpbmUgTnVsbCAwCi0gICAgICAgICAgICAgICAgLyogVmFsdWUgb2YgYSBOdWxsIHBvaW50ZXIgKi8KLSNkZWZpbmUgdHJ1ZSAgMQotI2RlZmluZSBmYWxzZSAwCi0KLXR5cGVkZWYgaW50ICAgICBPbmVfVGhpcnR5OwotdHlwZWRlZiBpbnQgICAgIE9uZV9GaWZ0eTsKLXR5cGVkZWYgY2hhciAgICBDYXBpdGFsX0xldHRlcjsKLXR5cGVkZWYgaW50ICAgICBCb29sZWFuOwotdHlwZWRlZiBjaGFyICAgIFN0cl8zMCBbMzFdOwotdHlwZWRlZiBpbnQgICAgIEFycl8xX0RpbSBbNTBdOwotdHlwZWRlZiBpbnQgICAgIEFycl8yX0RpbSBbNTBdIFs1MF07Ci0KLXR5cGVkZWYgc3RydWN0IHJlY29yZAotICAgIHsKLSAgICBzdHJ1Y3QgcmVjb3JkICpQdHJfQ29tcDsKLSAgICBFbnVtZXJhdGlvbiAgICBEaXNjcjsKLSAgICB1bmlvbiB7Ci0gICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uIEVudW1fQ29tcDsKLSAgICAgICAgICAgICAgICAgIGludCAgICAgICAgIEludF9Db21wOwotICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgU3RyX0NvbXAgWzMxXTsKLSAgICAgICAgICAgICAgICAgIH0gdmFyXzE7Ci0gICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uIEVfQ29tcF8yOwotICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgU3RyXzJfQ29tcCBbMzFdOwotICAgICAgICAgICAgICAgICAgfSB2YXJfMjsKLSAgICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgQ2hfMV9Db21wOwotICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgQ2hfMl9Db21wOwotICAgICAgICAgICAgICAgICAgfSB2YXJfMzsKLSAgICAgICAgICB9IHZhcmlhbnQ7Ci0gICAgICB9IFJlY19UeXBlLCAqUmVjX1BvaW50ZXI7Ci0KLSNpbmNsdWRlICJzY19wcmludC5oIgotI2luY2x1ZGUgImNzci5oIgotCi0jIGRlZmluZSBwcmludGYgc2NfcHJpbnRmCi0KLSNkZWZpbmUgSFogMTAwMDAwMAotc3RhdGljIGxvbmcgdGltZShsb25nICp4KQotewotICAgIHJldHVybiByZGN5Y2xlKCk7Ci19CmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9kaHJ5XzEuYyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL2RocnlfMS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTJhY2JiLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL2RocnlfMS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIFRoZSBCWVRFIFVOSVggQmVuY2htYXJrcyAtIFJlbGVhc2UgMwotICogICAgICAgICAgTW9kdWxlOiBkaHJ5XzEuYyAgIFNJRDogMy40IDUvMTUvOTEgMTk6MzA6MjEKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEJ1ZyByZXBvcnRzLCBwYXRjaGVzLCBjb21tZW50cywgc3VnZ2VzdGlvbnMgc2hvdWxkIGJlIHNlbnQgdG86Ci0gKgotICoJQmVuIFNtaXRoLCBSaWNrIEdyZWhhbiBvciBUb20gWWFnZXIKLSAqCWJlbkBieXRlcGIuYnl0ZS5jb20gICByaWNrX2dAYnl0ZXBiLmJ5dGUuY29tICAgdHlhZ2VyQGJ5dGVwYi5ieXRlLmNvbQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqICoqKiBXQVJOSU5HICoqKiogIFdpdGggQllURSdzIG1vZGlmaWNhdGlvbnMgYXBwbGllZCwgcmVzdWx0cyBvYnRhaW5lZCB3aXRoCi0gKiAgICAgKioqKioqKiAgICAgICB0aGlzIHZlcnNpb24gb2YgdGhlIERocnlzdG9uZSBwcm9ncmFtIG1heSBub3QgYmUgYXBwbGljYWJsZQotICogICAgICAgICAgICAgICAgICAgdG8gb3RoZXIgdmVyc2lvbnMuCi0gKgotICogIE1vZGlmaWNhdGlvbiBMb2c6Ci0gKiAgMTAvMjIvOTcgLSBjb2RlIGNsZWFudXAgdG8gcmVtb3ZlIEFOU0kgQyBjb21waWxlciB3YXJuaW5ncwotICogICAgICAgICAgICAgQW5keSBLYWhuIDxrYWhuQHprMy5kZWMuY29tPgotICoKLSAqICBBZGFwdGVkIGZyb206Ci0gKgotICogICAgICAgICAgICAgICAgICAgIkRIUllTVE9ORSIgQmVuY2htYXJrIFByb2dyYW0KLSAqICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogIFZlcnNpb246ICAgIEMsIFZlcnNpb24gMi4xCi0gKgotICogIEZpbGU6ICAgICAgIGRocnlfMS5jIChwYXJ0IDIgb2YgMykKLSAqCi0gKiAgRGF0ZTogICAgICAgTWF5IDI1LCAxOTg4Ci0gKgotICogIEF1dGhvcjogICAgIFJlaW5ob2xkIFAuIFdlaWNrZXIKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotY2hhciBTQ0NTaWRbXSA9ICJAKCMpIEAoIylkaHJ5XzEuYzozLjQgLS0gNS8xNS85MSAxOTozMDoyMSI7Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgImRocnkuaCIKLS8vI2luY2x1ZGUgInRpbWVpdC5jIgotCi11bnNpZ25lZCBsb25nIFJ1bl9JbmRleDsKLS8qCi12b2lkIHJlcG9ydCgpCi17Ci0JZnByaW50ZihzdGRlcnIsIkNPVU5UfCVsZHwxfGxwc1xuIiwgUnVuX0luZGV4KTsKLQlleGl0KDApOwotfQotKi8KLS8qIEdsb2JhbCBWYXJpYWJsZXM6ICovCi0KLVJlY19Qb2ludGVyICAgICBQdHJfR2xvYiwKLSAgICAgICAgICAgICAgICBOZXh0X1B0cl9HbG9iOwotaW50ICAgICAgICAgICAgIEludF9HbG9iOwotQm9vbGVhbiAgICAgICAgIEJvb2xfR2xvYjsKLWNoYXIgICAgICAgICAgICBDaF8xX0dsb2IsCi0gICAgICAgICAgICAgICAgQ2hfMl9HbG9iOwotaW50ICAgICAgICAgICAgIEFycl8xX0dsb2IgWzUwXTsKLWludCAgICAgICAgICAgICBBcnJfMl9HbG9iIFs1MF0gWzUwXTsKLQotRW51bWVyYXRpb24gICAgIEZ1bmNfMSAoKTsKLSAgLyogZm9yd2FyZCBkZWNsYXJhdGlvbiBuZWNlc3Nhcnkgc2luY2UgRW51bWVyYXRpb24gbWF5IG5vdCBzaW1wbHkgYmUgaW50ICovCi0KLSNpZm5kZWYgUkVHCi0gICAgICAgIEJvb2xlYW4gUmVnID0gZmFsc2U7Ci0jZGVmaW5lIFJFRwotICAgICAgICAvKiBSRUcgYmVjb21lcyBkZWZpbmVkIGFzIGVtcHR5ICovCi0gICAgICAgIC8qIGkuZS4gbm8gcmVnaXN0ZXIgdmFyaWFibGVzICAgKi8KLSNlbHNlCi0gICAgICAgIEJvb2xlYW4gUmVnID0gdHJ1ZTsKLSNlbmRpZgotCi0vKiB2YXJpYWJsZXMgZm9yIHRpbWUgbWVhc3VyZW1lbnQ6ICovCi0KLSNpZmRlZiBUSU1FUwotc3RydWN0IHRtcyAgICAgIHRpbWVfaW5mbzsKLS8qIGV4dGVybiAgaW50ICAgICB0aW1lcyAoKTsgKi8KLSAgICAgICAgICAgICAgICAvKiBzZWUgbGlicmFyeSBmdW5jdGlvbiAidGltZXMiICovCi0jZGVmaW5lIFRvb19TbWFsbF9UaW1lIDEyMAotICAgICAgICAgICAgICAgIC8qIE1lYXN1cmVtZW50cyBzaG91bGQgbGFzdCBhdCBsZWFzdCBhYm91dCAyIHNlY29uZHMgKi8KLSNlbmRpZgotI2lmZGVmIFRJTUUKLWV4dGVybiBsb25nICAgICB0aW1lKCk7Ci0gICAgICAgICAgICAgICAgLyogc2VlIGxpYnJhcnkgZnVuY3Rpb24gInRpbWUiICAqLwotI2RlZmluZSBUb29fU21hbGxfVGltZSAyCi0gICAgICAgICAgICAgICAgLyogTWVhc3VyZW1lbnRzIHNob3VsZCBsYXN0IGF0IGxlYXN0IDIgc2Vjb25kcyAqLwotI2VuZGlmCi0KLWxvbmcgICAgICAgICAgICBCZWdpbl9UaW1lLAotICAgICAgICAgICAgICAgIEVuZF9UaW1lLAotICAgICAgICAgICAgICAgIFVzZXJfVGltZTsKLSNpZiAwCi1mbG9hdCAgICAgICAgICAgTWljcm9zZWNvbmRzLAotICAgICAgICAgICAgICAgIERocnlzdG9uZXNfUGVyX1NlY29uZDsKLSNlbHNlCi1sb25nICAgICAgICAgICAgTWljcm9zZWNvbmRzLAotICAgICAgICAgICAgICAgIERocnlzdG9uZXNfUGVyX1NlY29uZDsKLSNlbmRpZgotCi0vKiBlbmQgb2YgdmFyaWFibGVzIGZvciB0aW1lIG1lYXN1cmVtZW50ICovCi0KLXZvaWQgUHJvY18xIChSRUcgUmVjX1BvaW50ZXIgUHRyX1ZhbF9QYXIpOwotdm9pZCBQcm9jXzIgKE9uZV9GaWZ0eSAgICpJbnRfUGFyX1JlZik7Ci12b2lkIFByb2NfMyAoUmVjX1BvaW50ZXIgKlB0cl9SZWZfUGFyKTsKLXZvaWQgUHJvY180ICh2b2lkKTsKLXZvaWQgUHJvY181ICh2b2lkKTsKLQotCi1leHRlcm4gQm9vbGVhbiBGdW5jXzIoU3RyXzMwLCBTdHJfMzApOwotZXh0ZXJuIHZvaWQgUHJvY182KEVudW1lcmF0aW9uLCBFbnVtZXJhdGlvbiAqKTsKLWV4dGVybiB2b2lkIFByb2NfNyhPbmVfRmlmdHksIE9uZV9GaWZ0eSwgT25lX0ZpZnR5ICopOwotZXh0ZXJuIHZvaWQgUHJvY184KEFycl8xX0RpbSwgQXJyXzJfRGltLCBpbnQsIGludCk7Ci0KLWludCBtYWluIChhcmdjLCBhcmd2KQotaW50CWFyZ2M7Ci1jaGFyCSphcmd2W107Ci0gIC8qIG1haW4gcHJvZ3JhbSwgY29ycmVzcG9uZHMgdG8gcHJvY2VkdXJlcyAgICAgICAgKi8KLSAgLyogTWFpbiBhbmQgUHJvY18wIGluIHRoZSBBZGEgdmVyc2lvbiAgICAgICAgICAgICAqLwotewotI2lmZGVmIFNFTEZfVElNRUQKLSAgICAgICAgaW50ICAgICAgICAgICAgIE51bWJlcl9PZl9SdW5zOwotI2Vsc2UgLyogU0VMRl9USU1FRCAqLwotICAgICAgICBpbnQgICAgICAgICAgICAgZHVyYXRpb247Ci0jZW5kaWYgLyogU0VMRl9USU1FRCAqLwotICAgICAgICBPbmVfRmlmdHkgICAgICAgSW50XzFfTG9jOwotICBSRUcgICBPbmVfRmlmdHkgICAgICAgSW50XzJfTG9jOwotICAgICAgICBPbmVfRmlmdHkgICAgICAgSW50XzNfTG9jOwotICBSRUcgICBjaGFyICAgICAgICAgICAgQ2hfSW5kZXg7Ci0gICAgICAgIEVudW1lcmF0aW9uICAgICBFbnVtX0xvYzsKLSAgICAgICAgU3RyXzMwICAgICAgICAgIFN0cl8xX0xvYzsKLSAgICAgICAgU3RyXzMwICAgICAgICAgIFN0cl8yX0xvYzsKLQotICAvKiBJbml0aWFsaXphdGlvbnMgKi8KLSNpZiAwCi0gIE5leHRfUHRyX0dsb2IgPSAoUmVjX1BvaW50ZXIpIG1hbGxvYyAoc2l6ZW9mIChSZWNfVHlwZSkpOwotICBQdHJfR2xvYiA9IChSZWNfUG9pbnRlcikgbWFsbG9jIChzaXplb2YgKFJlY19UeXBlKSk7Ci0jZWxzZQotICBzdGF0aWMgUmVjX1R5cGUgZ2xvYjEsIGdsb2IyOwotICBOZXh0X1B0cl9HbG9iID0gJmdsb2IxOwotICBQdHJfR2xvYiA9ICZnbG9iMjsKLSNlbmRpZgotCi0gIFB0cl9HbG9iLT5QdHJfQ29tcCAgICAgICAgICAgICAgICAgICAgPSBOZXh0X1B0cl9HbG9iOwotICBQdHJfR2xvYi0+RGlzY3IgICAgICAgICAgICAgICAgICAgICAgID0gSWRlbnRfMTsKLSAgUHRyX0dsb2ItPnZhcmlhbnQudmFyXzEuRW51bV9Db21wICAgICA9IElkZW50XzM7Ci0gIFB0cl9HbG9iLT52YXJpYW50LnZhcl8xLkludF9Db21wICAgICAgPSA0MDsKLSAgc3RyY3B5IChQdHJfR2xvYi0+dmFyaWFudC52YXJfMS5TdHJfQ29tcCwKLSAgICAgICAgICAiREhSWVNUT05FIFBST0dSQU0sIFNPTUUgU1RSSU5HIik7Ci0gIHN0cmNweSAoU3RyXzFfTG9jLCAiREhSWVNUT05FIFBST0dSQU0sIDEnU1QgU1RSSU5HIik7Ci0KLSAgQXJyXzJfR2xvYiBbOF1bN10gPSAxMDsKLSAgICAgICAgLyogV2FzIG1pc3NpbmcgaW4gcHVibGlzaGVkIHByb2dyYW0uIFdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQsICAgICovCi0gICAgICAgIC8qIEFycl8yX0dsb2IgWzhdWzddIHdvdWxkIGhhdmUgYW4gdW5kZWZpbmVkIHZhbHVlLiAgICAgICAgICAgICAqLwotICAgICAgICAvKiBXYXJuaW5nOiBXaXRoIDE2LUJpdCBwcm9jZXNzb3JzIGFuZCBOdW1iZXJfT2ZfUnVucyA+IDMyMDAwLCAgKi8KLSAgICAgICAgLyogb3ZlcmZsb3cgbWF5IG9jY3VyIGZvciB0aGlzIGFycmF5IGVsZW1lbnQuICAgICAgICAgICAgICAgICAgICovCi0KLSNpZmRlZiBTRUxGX1RJTUVECi0gIE51bWJlcl9PZl9SdW5zID0gNTAwOy8vNTAwMDAwOwotICBpZiAoYXJnYyA+PSAyKSB7Ci0gICAgTnVtYmVyX09mX1J1bnMgPSBhdG9pKGFyZ3ZbMV0pOwotICAgIH0KLSAgcHJpbnRmICgiXG4iKTsKLSAgcHJpbnRmICgiRGhyeXN0b25lIEJlbmNobWFyaywgVmVyc2lvbiAyLjEgKExhbmd1YWdlOiBDKVxuIik7Ci0gIHByaW50ZiAoIlxuIik7Ci0gIGlmIChSZWcpCi0gIHsKLSAgICBwcmludGYgKCJQcm9ncmFtIGNvbXBpbGVkIHdpdGggJ3JlZ2lzdGVyJyBhdHRyaWJ1dGVcbiIpOwotICAgIHByaW50ZiAoIlxuIik7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgcHJpbnRmICgiUHJvZ3JhbSBjb21waWxlZCB3aXRob3V0ICdyZWdpc3RlcicgYXR0cmlidXRlXG4iKTsKLSAgICBwcmludGYgKCJcbiIpOwotICB9Ci0jaWZkZWYgUFJBVFRMRQotICBwcmludGYgKCJQbGVhc2UgZ2l2ZSB0aGUgbnVtYmVyIG9mIHJ1bnMgdGhyb3VnaCB0aGUgYmVuY2htYXJrOiAiKTsKLSAgewotICAgIGludCBuOwotICAgIHNjYW5mICgiJWQiLCAmbik7Ci0gICAgTnVtYmVyX09mX1J1bnMgPSBuOwotICB9Ci0gIHByaW50ZiAoIlxuIik7Ci0jZW5kaWYgLyogUFJBVFRMRSAqLwotCi0gIHByaW50ZiAoIkV4ZWN1dGlvbiBzdGFydHMsICVkIHJ1bnMgdGhyb3VnaCBEaHJ5c3RvbmVcbiIsIE51bWJlcl9PZl9SdW5zKTsKLQotICBSdW5fSW5kZXggPSAwOwotI2Vsc2UgLyogU0VMRl9USU1FRCAqLwotICBpZiAoYXJnYyAhPSAyKSB7Ci0gICAgZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgZHVyYXRpb25cbiIsIGFyZ3ZbMF0pOwotICAgIGV4aXQoMSk7Ci0gICAgfQotCi0gIGR1cmF0aW9uID0gYXRvaShhcmd2WzFdKTsKLSAgUnVuX0luZGV4ID0gMDsKLSAgd2FrZV9tZShkdXJhdGlvbiwgcmVwb3J0KTsKLSNlbmRpZiAvKiBTRUxGX1RJTUVEICovCi0KLSAgLyoqKioqKioqKioqKioqKi8KLSAgLyogU3RhcnQgdGltZXIgKi8KLSAgLyoqKioqKioqKioqKioqKi8KLQotI2lmZGVmIFNFTEZfVElNRUQKLSNpZmRlZiBUSU1FUwotICB0aW1lcyAoJnRpbWVfaW5mbyk7Ci0gIEJlZ2luX1RpbWUgPSAobG9uZykgdGltZV9pbmZvLnRtc191dGltZTsKLSNlbmRpZgotI2lmZGVmIFRJTUUKLSAgQmVnaW5fVGltZSA9IHRpbWUgKCAobG9uZyAqKSAwKTsKLSNlbmRpZgotI2VuZGlmIC8qIFNFTEZfVElNRUQgKi8KLQotI2lmZGVmIFNFTEZfVElNRUQKLSAgZm9yIChSdW5fSW5kZXggPSAxOyBSdW5fSW5kZXggPD0gTnVtYmVyX09mX1J1bnMgOyArK1J1bl9JbmRleCkKLSNlbHNlIC8qIFNFTEZfVElNRUQgKi8KLSAgZm9yIChSdW5fSW5kZXggPSAxOyA7ICsrUnVuX0luZGV4KQotI2VuZGlmIC8qIFNFTEZfVElNRUQgKi8KLSAgewotCi0gICAgUHJvY181KCk7Ci0gICAgUHJvY180KCk7Ci0gICAgICAvKiBDaF8xX0dsb2IgPT0gJ0EnLCBDaF8yX0dsb2IgPT0gJ0InLCBCb29sX0dsb2IgPT0gdHJ1ZSAqLwotICAgIEludF8xX0xvYyA9IDI7Ci0gICAgSW50XzJfTG9jID0gMzsKLSAgICBzdHJjcHkgKFN0cl8yX0xvYywgIkRIUllTVE9ORSBQUk9HUkFNLCAyJ05EIFNUUklORyIpOwotICAgIEVudW1fTG9jID0gSWRlbnRfMjsKLSAgICBCb29sX0dsb2IgPSAhIEZ1bmNfMiAoU3RyXzFfTG9jLCBTdHJfMl9Mb2MpOwotICAgICAgLyogQm9vbF9HbG9iID09IDEgKi8KLSAgICB3aGlsZSAoSW50XzFfTG9jIDwgSW50XzJfTG9jKSAgLyogbG9vcCBib2R5IGV4ZWN1dGVkIG9uY2UgKi8KLSAgICB7Ci0gICAgICBJbnRfM19Mb2MgPSA1ICogSW50XzFfTG9jIC0gSW50XzJfTG9jOwotICAgICAgICAvKiBJbnRfM19Mb2MgPT0gNyAqLwotICAgICAgUHJvY183IChJbnRfMV9Mb2MsIEludF8yX0xvYywgJkludF8zX0xvYyk7Ci0gICAgICAgIC8qIEludF8zX0xvYyA9PSA3ICovCi0gICAgICBJbnRfMV9Mb2MgKz0gMTsKLSAgICB9IC8qIHdoaWxlICovCi0gICAgICAvKiBJbnRfMV9Mb2MgPT0gMywgSW50XzJfTG9jID09IDMsIEludF8zX0xvYyA9PSA3ICovCi0gICAgUHJvY184IChBcnJfMV9HbG9iLCBBcnJfMl9HbG9iLCBJbnRfMV9Mb2MsIEludF8zX0xvYyk7Ci0gICAgICAvKiBJbnRfR2xvYiA9PSA1ICovCi0gICAgUHJvY18xIChQdHJfR2xvYik7Ci0gICAgZm9yIChDaF9JbmRleCA9ICdBJzsgQ2hfSW5kZXggPD0gQ2hfMl9HbG9iOyArK0NoX0luZGV4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb29wIGJvZHkgZXhlY3V0ZWQgdHdpY2UgKi8KLSAgICB7Ci0gICAgICBpZiAoRW51bV9Mb2MgPT0gRnVuY18xIChDaF9JbmRleCwgJ0MnKSkKLSAgICAgICAgICAvKiB0aGVuLCBub3QgZXhlY3V0ZWQgKi8KLSAgICAgICAgewotICAgICAgICBQcm9jXzYgKElkZW50XzEsICZFbnVtX0xvYyk7Ci0gICAgICAgIHN0cmNweSAoU3RyXzJfTG9jLCAiREhSWVNUT05FIFBST0dSQU0sIDMnUkQgU1RSSU5HIik7Ci0gICAgICAgIEludF8yX0xvYyA9IFJ1bl9JbmRleDsKLSAgICAgICAgSW50X0dsb2IgPSBSdW5fSW5kZXg7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgICAvKiBJbnRfMV9Mb2MgPT0gMywgSW50XzJfTG9jID09IDMsIEludF8zX0xvYyA9PSA3ICovCi0gICAgSW50XzJfTG9jID0gSW50XzJfTG9jICogSW50XzFfTG9jOwotICAgIEludF8xX0xvYyA9IEludF8yX0xvYyAvIEludF8zX0xvYzsKLSAgICBJbnRfMl9Mb2MgPSA3ICogKEludF8yX0xvYyAtIEludF8zX0xvYykgLSBJbnRfMV9Mb2M7Ci0gICAgICAvKiBJbnRfMV9Mb2MgPT0gMSwgSW50XzJfTG9jID09IDEzLCBJbnRfM19Mb2MgPT0gNyAqLwotICAgIFByb2NfMiAoJkludF8xX0xvYyk7Ci0gICAgICAvKiBJbnRfMV9Mb2MgPT0gNSAqLwotCi0gIH0gLyogbG9vcCAiZm9yIFJ1bl9JbmRleCIgKi8KLQotICAvKioqKioqKioqKioqKiovCi0gIC8qIFN0b3AgdGltZXIgKi8KLSAgLyoqKioqKioqKioqKioqLwotI2lmZGVmIFNFTEZfVElNRUQKLSNpZmRlZiBUSU1FUwotICB0aW1lcyAoJnRpbWVfaW5mbyk7Ci0gIEVuZF9UaW1lID0gKGxvbmcpIHRpbWVfaW5mby50bXNfdXRpbWU7Ci0jZW5kaWYKLSNpZmRlZiBUSU1FCi0gIEVuZF9UaW1lID0gdGltZSAoIChsb25nICopIDApOwotI2VuZGlmCi0jZW5kaWYgLyogU0VMRl9USU1FRCAqLwotCi0gIC8qIEJZVEUgdmVyc2lvbiBuZXZlciBleGVjdXRlcyB0aGlzIHN0dWZmICovCi0jaWZkZWYgU0VMRl9USU1FRAotICBwcmludGYgKCJFeGVjdXRpb24gZW5kc1xuIik7Ci0gIHByaW50ZiAoIlxuIik7Ci0gIHByaW50ZiAoIkZpbmFsIHZhbHVlcyBvZiB0aGUgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGJlbmNobWFyazpcbiIpOwotICBwcmludGYgKCJcbiIpOwotICBwcmludGYgKCJJbnRfR2xvYjogICAgICAgICAgICAlZFxuIiwgSW50X0dsb2IpOwotICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlZFxuIiwgNSk7Ci0gIHByaW50ZiAoIkJvb2xfR2xvYjogICAgICAgICAgICVkXG4iLCBCb29sX0dsb2IpOwotICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlZFxuIiwgMSk7Ci0gIHByaW50ZiAoIkNoXzFfR2xvYjogICAgICAgICAgICVjXG4iLCBDaF8xX0dsb2IpOwotICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlY1xuIiwgJ0EnKTsKLSAgcHJpbnRmICgiQ2hfMl9HbG9iOiAgICAgICAgICAgJWNcbiIsIENoXzJfR2xvYik7Ci0gIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVjXG4iLCAnQicpOwotICBwcmludGYgKCJBcnJfMV9HbG9iWzhdOiAgICAgICAlZFxuIiwgQXJyXzFfR2xvYls4XSk7Ci0gIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVkXG4iLCA3KTsKLSAgcHJpbnRmICgiQXJyXzJfR2xvYls4XVs3XTogICAgJWRcbiIsIEFycl8yX0dsb2JbOF1bN10pOwotICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICBOdW1iZXJfT2ZfUnVucyArIDEwXG4iKTsKLSAgcHJpbnRmICgiUHRyX0dsb2ItPlxuIik7Ci0gIHByaW50ZiAoIiAgUHRyX0NvbXA6ICAgICAgICAgICVkXG4iLCAoaW50KSBQdHJfR2xvYi0+UHRyX0NvbXApOwotICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAoaW1wbGVtZW50YXRpb24tZGVwZW5kZW50KVxuIik7Ci0gIHByaW50ZiAoIiAgRGlzY3I6ICAgICAgICAgICAgICVkXG4iLCBQdHJfR2xvYi0+RGlzY3IpOwotICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlZFxuIiwgMCk7Ci0gIHByaW50ZiAoIiAgRW51bV9Db21wOiAgICAgICAgICVkXG4iLCBQdHJfR2xvYi0+dmFyaWFudC52YXJfMS5FbnVtX0NvbXApOwotICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlZFxuIiwgMik7Ci0gIHByaW50ZiAoIiAgSW50X0NvbXA6ICAgICAgICAgICVkXG4iLCBQdHJfR2xvYi0+dmFyaWFudC52YXJfMS5JbnRfQ29tcCk7Ci0gIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVkXG4iLCAxNyk7Ci0gIHByaW50ZiAoIiAgU3RyX0NvbXA6ICAgICAgICAgICVzXG4iLCBQdHJfR2xvYi0+dmFyaWFudC52YXJfMS5TdHJfQ29tcCk7Ci0gIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgIERIUllTVE9ORSBQUk9HUkFNLCBTT01FIFNUUklOR1xuIik7Ci0gIHByaW50ZiAoIk5leHRfUHRyX0dsb2ItPlxuIik7Ci0gIHByaW50ZiAoIiAgUHRyX0NvbXA6ICAgICAgICAgICVkXG4iLCAoaW50KSBOZXh0X1B0cl9HbG9iLT5QdHJfQ29tcCk7Ci0gIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgIChpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQpLCBzYW1lIGFzIGFib3ZlXG4iKTsKLSAgcHJpbnRmICgiICBEaXNjcjogICAgICAgICAgICAgJWRcbiIsIE5leHRfUHRyX0dsb2ItPkRpc2NyKTsKLSAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDApOwotICBwcmludGYgKCIgIEVudW1fQ29tcDogICAgICAgICAlZFxuIiwgTmV4dF9QdHJfR2xvYi0+dmFyaWFudC52YXJfMS5FbnVtX0NvbXApOwotICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlZFxuIiwgMSk7Ci0gIHByaW50ZiAoIiAgSW50X0NvbXA6ICAgICAgICAgICVkXG4iLCBOZXh0X1B0cl9HbG9iLT52YXJpYW50LnZhcl8xLkludF9Db21wKTsKLSAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDE4KTsKLSAgcHJpbnRmICgiICBTdHJfQ29tcDogICAgICAgICAgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5leHRfUHRyX0dsb2ItPnZhcmlhbnQudmFyXzEuU3RyX0NvbXApOwotICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICBESFJZU1RPTkUgUFJPR1JBTSwgU09NRSBTVFJJTkdcbiIpOwotICBwcmludGYgKCJJbnRfMV9Mb2M6ICAgICAgICAgICAlZFxuIiwgSW50XzFfTG9jKTsKLSAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDUpOwotICBwcmludGYgKCJJbnRfMl9Mb2M6ICAgICAgICAgICAlZFxuIiwgSW50XzJfTG9jKTsKLSAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDEzKTsKLSAgcHJpbnRmICgiSW50XzNfTG9jOiAgICAgICAgICAgJWRcbiIsIEludF8zX0xvYyk7Ci0gIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVkXG4iLCA3KTsKLSAgcHJpbnRmICgiRW51bV9Mb2M6ICAgICAgICAgICAgJWRcbiIsIEVudW1fTG9jKTsKLSAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDEpOwotICBwcmludGYgKCJTdHJfMV9Mb2M6ICAgICAgICAgICAlc1xuIiwgU3RyXzFfTG9jKTsKLSAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgREhSWVNUT05FIFBST0dSQU0sIDEnU1QgU1RSSU5HXG4iKTsKLSAgcHJpbnRmICgiU3RyXzJfTG9jOiAgICAgICAgICAgJXNcbiIsIFN0cl8yX0xvYyk7Ci0gIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgIERIUllTVE9ORSBQUk9HUkFNLCAyJ05EIFNUUklOR1xuIik7Ci0gIHByaW50ZiAoIlxuIik7Ci0KLSAgVXNlcl9UaW1lID0gRW5kX1RpbWUgLSBCZWdpbl9UaW1lOwotCi0gIGlmIChVc2VyX1RpbWUgPCBUb29fU21hbGxfVGltZSkKLSAgewotICAgIHByaW50ZiAoIk1lYXN1cmVkIHRpbWUgdG9vIHNtYWxsIHRvIG9idGFpbiBtZWFuaW5nZnVsIHJlc3VsdHNcbiIpOwotICAgIHByaW50ZiAoIlBsZWFzZSBpbmNyZWFzZSBudW1iZXIgb2YgcnVuc1xuIik7Ci0gICAgcHJpbnRmICgiXG4iKTsKLSAgfQotICBlbHNlCi0gIHsKLSNpZiAwCi0jaWZkZWYgVElNRQotICAgIE1pY3Jvc2Vjb25kcyA9IChmbG9hdCkgVXNlcl9UaW1lICogTWljX3NlY3NfUGVyX1NlY29uZAotICAgICAgICAgICAgICAgICAgICAgICAgLyAoZmxvYXQpIE51bWJlcl9PZl9SdW5zOwotICAgIERocnlzdG9uZXNfUGVyX1NlY29uZCA9IChmbG9hdCkgTnVtYmVyX09mX1J1bnMgLyAoZmxvYXQpIFVzZXJfVGltZTsKLSNlbHNlCi0gICAgTWljcm9zZWNvbmRzID0gKGZsb2F0KSBVc2VyX1RpbWUgKiBNaWNfc2Vjc19QZXJfU2Vjb25kCi0gICAgICAgICAgICAgICAgICAgICAgICAvICgoZmxvYXQpIEhaICogKChmbG9hdCkgTnVtYmVyX09mX1J1bnMpKTsKLSAgICBEaHJ5c3RvbmVzX1Blcl9TZWNvbmQgPSAoKGZsb2F0KSBIWiAqIChmbG9hdCkgTnVtYmVyX09mX1J1bnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAvIChmbG9hdCkgVXNlcl9UaW1lOwotI2VuZGlmCi0jZWxzZQotICBNaWNyb3NlY29uZHMgPSAoKFVzZXJfVGltZSAvIE51bWJlcl9PZl9SdW5zKSAqIE1pY19zZWNzX1Blcl9TZWNvbmQpIC8gSFo7Ci0gIERocnlzdG9uZXNfUGVyX1NlY29uZCA9IChIWiAqIE51bWJlcl9PZl9SdW5zKSAvIFVzZXJfVGltZTsKLQotICBzY19wcmludGYoIk51bWJlcl9PZl9SdW5zPSAlbGQsIEhaPSAlbGRcbiIsIE51bWJlcl9PZl9SdW5zLCBIWik7Ci0gIHNjX3ByaW50ZigiVGltZTogYmVnaW49ICVsZCwgZW5kPSAlbGQsIGRpZmY9ICVsZFxuIiwgQmVnaW5fVGltZSwgRW5kX1RpbWUsIFVzZXJfVGltZSk7Ci0gIHNjX3ByaW50ZigiTWljcm9zZWNvbmRzIGZvciBvbmUgcnVuIHRocm91Z2ggRGhyeXN0b25lOiAlbGRcbiIsIE1pY3Jvc2Vjb25kcyk7Ci0gIHNjX3ByaW50ZigiRGhyeXN0b25lcyBwZXIgU2Vjb25kOiAgICAgICAgICAgICAgICAgICAgICAlbGRcbiIsIERocnlzdG9uZXNfUGVyX1NlY29uZCk7Ci0KLSNlbmRpZgotICB9Ci0jZW5kaWYgLyogU0VMRl9USU1FRCAqLwotfQotCi0KLXZvaWQgUHJvY18xIChSRUcgUmVjX1BvaW50ZXIgUHRyX1ZhbF9QYXIpCi0gICAgLyogZXhlY3V0ZWQgb25jZSAqLwotewotICBSRUcgUmVjX1BvaW50ZXIgTmV4dF9SZWNvcmQgPSBQdHJfVmFsX1Bhci0+UHRyX0NvbXA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogPT0gUHRyX0dsb2JfTmV4dCAqLwotICAvKiBMb2NhbCB2YXJpYWJsZSwgaW5pdGlhbGl6ZWQgd2l0aCBQdHJfVmFsX1Bhci0+UHRyX0NvbXAsICAgICovCi0gIC8qIGNvcnJlc3BvbmRzIHRvICJyZW5hbWUiIGluIEFkYSwgIndpdGgiIGluIFBhc2NhbCAgICAgICAgICAgKi8KLQotICBzdHJ1Y3Rhc3NpZ24gKCpQdHJfVmFsX1Bhci0+UHRyX0NvbXAsICpQdHJfR2xvYik7Ci0gIFB0cl9WYWxfUGFyLT52YXJpYW50LnZhcl8xLkludF9Db21wID0gNTsKLSAgTmV4dF9SZWNvcmQtPnZhcmlhbnQudmFyXzEuSW50X0NvbXAKLSAgICAgICAgPSBQdHJfVmFsX1Bhci0+dmFyaWFudC52YXJfMS5JbnRfQ29tcDsKLSAgTmV4dF9SZWNvcmQtPlB0cl9Db21wID0gUHRyX1ZhbF9QYXItPlB0cl9Db21wOwotICBQcm9jXzMgKCZOZXh0X1JlY29yZC0+UHRyX0NvbXApOwotICAgIC8qIFB0cl9WYWxfUGFyLT5QdHJfQ29tcC0+UHRyX0NvbXAKLSAgICAgICAgICAgICAgICAgICAgICAgID09IFB0cl9HbG9iLT5QdHJfQ29tcCAqLwotICBpZiAoTmV4dF9SZWNvcmQtPkRpc2NyID09IElkZW50XzEpCi0gICAgLyogdGhlbiwgZXhlY3V0ZWQgKi8KLSAgewotICAgIE5leHRfUmVjb3JkLT52YXJpYW50LnZhcl8xLkludF9Db21wID0gNjsKLSAgICBQcm9jXzYgKFB0cl9WYWxfUGFyLT52YXJpYW50LnZhcl8xLkVudW1fQ29tcCwKLSAgICAgICAgICAgJk5leHRfUmVjb3JkLT52YXJpYW50LnZhcl8xLkVudW1fQ29tcCk7Ci0gICAgTmV4dF9SZWNvcmQtPlB0cl9Db21wID0gUHRyX0dsb2ItPlB0cl9Db21wOwotICAgIFByb2NfNyAoTmV4dF9SZWNvcmQtPnZhcmlhbnQudmFyXzEuSW50X0NvbXAsIDEwLAotICAgICAgICAgICAmTmV4dF9SZWNvcmQtPnZhcmlhbnQudmFyXzEuSW50X0NvbXApOwotICB9Ci0gIGVsc2UgLyogbm90IGV4ZWN1dGVkICovCi0gICAgc3RydWN0YXNzaWduICgqUHRyX1ZhbF9QYXIsICpQdHJfVmFsX1Bhci0+UHRyX0NvbXApOwotfSAvKiBQcm9jXzEgKi8KLQotCi12b2lkIFByb2NfMiAoT25lX0ZpZnR5ICAgKkludF9QYXJfUmVmKQotICAgIC8qIGV4ZWN1dGVkIG9uY2UgKi8KLSAgICAvKiAqSW50X1Bhcl9SZWYgPT0gMSwgYmVjb21lcyA0ICovCi17Ci0gIE9uZV9GaWZ0eSAgSW50X0xvYzsKLSAgRW51bWVyYXRpb24gICBFbnVtX0xvYzsKLQotICBFbnVtX0xvYyA9IDA7Ci0KLSAgSW50X0xvYyA9ICpJbnRfUGFyX1JlZiArIDEwOwotICBkbyAvKiBleGVjdXRlZCBvbmNlICovCi0gICAgaWYgKENoXzFfR2xvYiA9PSAnQScpCi0gICAgICAvKiB0aGVuLCBleGVjdXRlZCAqLwotICAgIHsKLSAgICAgIEludF9Mb2MgLT0gMTsKLSAgICAgICpJbnRfUGFyX1JlZiA9IEludF9Mb2MgLSBJbnRfR2xvYjsKLSAgICAgIEVudW1fTG9jID0gSWRlbnRfMTsKLSAgICB9IC8qIGlmICovCi0gIHdoaWxlIChFbnVtX0xvYyAhPSBJZGVudF8xKTsgLyogdHJ1ZSAqLwotfSAvKiBQcm9jXzIgKi8KLQotCi12b2lkIFByb2NfMyAoUmVjX1BvaW50ZXIgKlB0cl9SZWZfUGFyKQotICAgIC8qIGV4ZWN1dGVkIG9uY2UgKi8KLSAgICAvKiBQdHJfUmVmX1BhciBiZWNvbWVzIFB0cl9HbG9iICovCi17Ci0gIGlmIChQdHJfR2xvYiAhPSBOdWxsKQotICAgIC8qIHRoZW4sIGV4ZWN1dGVkICovCi0gICAgKlB0cl9SZWZfUGFyID0gUHRyX0dsb2ItPlB0cl9Db21wOwotICBQcm9jXzcgKDEwLCBJbnRfR2xvYiwgJlB0cl9HbG9iLT52YXJpYW50LnZhcl8xLkludF9Db21wKTsKLX0gLyogUHJvY18zICovCi0KLQotdm9pZCBQcm9jXzQgKHZvaWQpIC8qIHdpdGhvdXQgcGFyYW1ldGVycyAqLwotICAgIC8qIGV4ZWN1dGVkIG9uY2UgKi8KLXsKLSAgQm9vbGVhbiBCb29sX0xvYzsKLQotICBCb29sX0xvYyA9IENoXzFfR2xvYiA9PSAnQSc7Ci0gIEJvb2xfR2xvYiA9IEJvb2xfTG9jIHwgQm9vbF9HbG9iOwotICBDaF8yX0dsb2IgPSAnQic7Ci19IC8qIFByb2NfNCAqLwotCi12b2lkIFByb2NfNSAodm9pZCkgLyogd2l0aG91dCBwYXJhbWV0ZXJzICovCi0vKioqKioqKi8KLSAgICAvKiBleGVjdXRlZCBvbmNlICovCi17Ci0gIENoXzFfR2xvYiA9ICdBJzsKLSAgQm9vbF9HbG9iID0gZmFsc2U7Ci19IC8qIFByb2NfNSAqLwotCi0KLSAgICAgICAgLyogUHJvY2VkdXJlIGZvciB0aGUgYXNzaWdubWVudCBvZiBzdHJ1Y3R1cmVzLCAgICAgICAgICAqLwotICAgICAgICAvKiBpZiB0aGUgQyBjb21waWxlciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBmZWF0dXJlICAgICAgICovCi0jaWZkZWYgIE5PU1RSVUNUQVNTSUdOCi1tZW1jcHkgKGQsIHMsIGwpCi1yZWdpc3RlciBjaGFyICAgKmQ7Ci1yZWdpc3RlciBjaGFyICAgKnM7Ci1yZWdpc3RlciBpbnQgICAgbDsKLXsKLSAgICAgICAgd2hpbGUgKGwtLSkgKmQrKyA9ICpzKys7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL2RocnlfMi5jIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2JlbmNobWFya3MvZGhyeXN0b25lMjEvZGhyeV8yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MDE2MWYuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2JlbmNobWFya3MvZGhyeXN0b25lMjEvZGhyeV8yLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgVGhlIEJZVEUgVU5JWCBCZW5jaG1hcmtzIC0gUmVsZWFzZSAzCi0gKiAgICAgICAgICBNb2R1bGU6IGRocnlfMi5jICAgU0lEOiAzLjQgNS8xNS85MSAxOTozMDoyMgotICogICAgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEJ1ZyByZXBvcnRzLCBwYXRjaGVzLCBjb21tZW50cywgc3VnZ2VzdGlvbnMgc2hvdWxkIGJlIHNlbnQgdG86Ci0gKgotICoJQmVuIFNtaXRoLCBSaWNrIEdyZWhhbiBvciBUb20gWWFnZXIKLSAqCWJlbkBieXRlcGIuYnl0ZS5jb20gICByaWNrX2dAYnl0ZXBiLmJ5dGUuY29tICAgdHlhZ2VyQGJ5dGVwYi5ieXRlLmNvbQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIE1vZGlmaWNhdGlvbiBMb2c6Ci0gKiAgMTAvMjIvOTcgLSBjb2RlIGNsZWFudXAgdG8gcmVtb3ZlIEFOU0kgQyBjb21waWxlciB3YXJuaW5ncwotICogICAgICAgICAgICAgQW5keSBLYWhuIDxrYWhuQHprMy5kZWMuY29tPgotICoKLSAqICBBZGFwdGVkIGZyb206Ci0gKgotICogICAgICAgICAgICAgICAgICAgIkRIUllTVE9ORSIgQmVuY2htYXJrIFByb2dyYW0KLSAqICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogKioqKiBXQVJOSU5HICoqKiogU2VlIHdhcm5pbmcgaW4gbi5kaHJ5XzEuYwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgVmVyc2lvbjogICAgQywgVmVyc2lvbiAyLjEKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogIEZpbGU6ICAgICAgIGRocnlfMi5jIChwYXJ0IDMgb2YgMykKLSAqCi0gKiAgRGF0ZTogICAgICAgTWF5IDI1LCAxOTg4Ci0gKgotICogIEF1dGhvcjogICAgIFJlaW5ob2xkIFAuIFdlaWNrZXIKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFNDQ1NpZCBpcyBkZWZpbmVkIGluIGRocnlfMS5jICovCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJkaHJ5LmgiCi0KLSNpZm5kZWYgUkVHCi0jZGVmaW5lIFJFRwotICAgICAgICAvKiBSRUcgYmVjb21lcyBkZWZpbmVkIGFzIGVtcHR5ICovCi0gICAgICAgIC8qIGkuZS4gbm8gcmVnaXN0ZXIgdmFyaWFibGVzICAgKi8KLSNlbmRpZgotCi1leHRlcm4gIGludCAgICAgSW50X0dsb2I7Ci1leHRlcm4gIGNoYXIgICAgQ2hfMV9HbG9iOwotCi12b2lkIFByb2NfNihFbnVtZXJhdGlvbiwgRW51bWVyYXRpb24gKik7Ci12b2lkIFByb2NfNyhPbmVfRmlmdHksIE9uZV9GaWZ0eSwgT25lX0ZpZnR5ICopOwotdm9pZCBQcm9jXzgoQXJyXzFfRGltLCBBcnJfMl9EaW0sIGludCwgaW50KTsKLUVudW1lcmF0aW9uIEZ1bmNfMShDYXBpdGFsX0xldHRlciwgQ2FwaXRhbF9MZXR0ZXIpOwotQm9vbGVhbiBGdW5jXzIoU3RyXzMwLCBTdHJfMzApOwotQm9vbGVhbiBGdW5jXzMoRW51bWVyYXRpb24pOwotCi12b2lkIFByb2NfNiAoRW51bWVyYXRpb24gRW51bV9WYWxfUGFyLCBFbnVtZXJhdGlvbiAqRW51bV9SZWZfUGFyKQotICAgIC8qIGV4ZWN1dGVkIG9uY2UgKi8KLSAgICAvKiBFbnVtX1ZhbF9QYXIgPT0gSWRlbnRfMywgRW51bV9SZWZfUGFyIGJlY29tZXMgSWRlbnRfMiAqLwotewotICAqRW51bV9SZWZfUGFyID0gRW51bV9WYWxfUGFyOwotICBpZiAoISBGdW5jXzMgKEVudW1fVmFsX1BhcikpCi0gICAgLyogdGhlbiwgbm90IGV4ZWN1dGVkICovCi0gICAgKkVudW1fUmVmX1BhciA9IElkZW50XzQ7Ci0gIHN3aXRjaCAoRW51bV9WYWxfUGFyKQotICB7Ci0gICAgY2FzZSBJZGVudF8xOiAKLSAgICAgICpFbnVtX1JlZl9QYXIgPSBJZGVudF8xOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJZGVudF8yOiAKLSAgICAgIGlmIChJbnRfR2xvYiA+IDEwMCkKLSAgICAgICAgLyogdGhlbiAqLwotICAgICAgKkVudW1fUmVmX1BhciA9IElkZW50XzE7Ci0gICAgICBlbHNlICpFbnVtX1JlZl9QYXIgPSBJZGVudF80OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJZGVudF8zOiAvKiBleGVjdXRlZCAqLwotICAgICAgKkVudW1fUmVmX1BhciA9IElkZW50XzI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIElkZW50XzQ6IGJyZWFrOwotICAgIGNhc2UgSWRlbnRfNTogCi0gICAgICAqRW51bV9SZWZfUGFyID0gSWRlbnRfMzsKLSAgICAgIGJyZWFrOwotICB9IC8qIHN3aXRjaCAqLwotfSAvKiBQcm9jXzYgKi8KLQotdm9pZCBQcm9jXzcgKEludF8xX1Bhcl9WYWwsIEludF8yX1Bhcl9WYWwsIEludF9QYXJfUmVmKQotT25lX0ZpZnR5ICAgICAgIEludF8xX1Bhcl9WYWw7Ci1PbmVfRmlmdHkgICAgICAgSW50XzJfUGFyX1ZhbDsKLU9uZV9GaWZ0eSAgICAgICpJbnRfUGFyX1JlZjsKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIC8qIGV4ZWN1dGVkIHRocmVlIHRpbWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKLSAgICAvKiBmaXJzdCBjYWxsOiAgICAgIEludF8xX1Bhcl9WYWwgPT0gMiwgSW50XzJfUGFyX1ZhbCA9PSAzLCAgKi8KLSAgICAvKiAgICAgICAgICAgICAgICAgIEludF9QYXJfUmVmIGJlY29tZXMgNyAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiBzZWNvbmQgY2FsbDogICAgIEludF8xX1Bhcl9WYWwgPT0gMTAsIEludF8yX1Bhcl9WYWwgPT0gNSwgKi8KLSAgICAvKiAgICAgICAgICAgICAgICAgIEludF9QYXJfUmVmIGJlY29tZXMgMTcgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiB0aGlyZCBjYWxsOiAgICAgIEludF8xX1Bhcl9WYWwgPT0gNiwgSW50XzJfUGFyX1ZhbCA9PSAxMCwgKi8KLSAgICAvKiAgICAgICAgICAgICAgICAgIEludF9QYXJfUmVmIGJlY29tZXMgMTggICAgICAgICAgICAgICAgICAgKi8KLXsKLSAgT25lX0ZpZnR5IEludF9Mb2M7Ci0KLSAgSW50X0xvYyA9IEludF8xX1Bhcl9WYWwgKyAyOwotICAqSW50X1Bhcl9SZWYgPSBJbnRfMl9QYXJfVmFsICsgSW50X0xvYzsKLX0gLyogUHJvY183ICovCi0KLQotdm9pZCBQcm9jXzggKEFycl8xX1Bhcl9SZWYsIEFycl8yX1Bhcl9SZWYsIEludF8xX1Bhcl9WYWwsIEludF8yX1Bhcl9WYWwpCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIC8qIGV4ZWN1dGVkIG9uY2UgICAgICAqLwotICAgIC8qIEludF9QYXJfVmFsXzEgPT0gMyAqLwotICAgIC8qIEludF9QYXJfVmFsXzIgPT0gNyAqLwotQXJyXzFfRGltICAgICAgIEFycl8xX1Bhcl9SZWY7Ci1BcnJfMl9EaW0gICAgICAgQXJyXzJfUGFyX1JlZjsKLWludCAgICAgICAgICAgICBJbnRfMV9QYXJfVmFsOwotaW50ICAgICAgICAgICAgIEludF8yX1Bhcl9WYWw7Ci17Ci0gIFJFRyBPbmVfRmlmdHkgSW50X0luZGV4OwotICBSRUcgT25lX0ZpZnR5IEludF9Mb2M7Ci0KLSAgSW50X0xvYyA9IEludF8xX1Bhcl9WYWwgKyA1OwotICBBcnJfMV9QYXJfUmVmIFtJbnRfTG9jXSA9IEludF8yX1Bhcl9WYWw7Ci0gIEFycl8xX1Bhcl9SZWYgW0ludF9Mb2MrMV0gPSBBcnJfMV9QYXJfUmVmIFtJbnRfTG9jXTsKLSAgQXJyXzFfUGFyX1JlZiBbSW50X0xvYyszMF0gPSBJbnRfTG9jOwotICBmb3IgKEludF9JbmRleCA9IEludF9Mb2M7IEludF9JbmRleCA8PSBJbnRfTG9jKzE7ICsrSW50X0luZGV4KQotICAgIEFycl8yX1Bhcl9SZWYgW0ludF9Mb2NdIFtJbnRfSW5kZXhdID0gSW50X0xvYzsKLSAgQXJyXzJfUGFyX1JlZiBbSW50X0xvY10gW0ludF9Mb2MtMV0gKz0gMTsKLSAgQXJyXzJfUGFyX1JlZiBbSW50X0xvYysyMF0gW0ludF9Mb2NdID0gQXJyXzFfUGFyX1JlZiBbSW50X0xvY107Ci0gIEludF9HbG9iID0gNTsKLX0gLyogUHJvY184ICovCi0KLQotRW51bWVyYXRpb24gRnVuY18xIChDYXBpdGFsX0xldHRlciBDaF8xX1Bhcl9WYWwsIENhcGl0YWxfTGV0dGVyIENoXzJfUGFyX1ZhbCkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIC8qIGV4ZWN1dGVkIHRocmVlIHRpbWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qIGZpcnN0IGNhbGw6ICAgICAgQ2hfMV9QYXJfVmFsID09ICdIJywgQ2hfMl9QYXJfVmFsID09ICdSJyAgICAqLwotICAgIC8qIHNlY29uZCBjYWxsOiAgICAgQ2hfMV9QYXJfVmFsID09ICdBJywgQ2hfMl9QYXJfVmFsID09ICdDJyAgICAqLwotICAgIC8qIHRoaXJkIGNhbGw6ICAgICAgQ2hfMV9QYXJfVmFsID09ICdCJywgQ2hfMl9QYXJfVmFsID09ICdDJyAgICAqLwotewotICBDYXBpdGFsX0xldHRlciAgICAgICAgQ2hfMV9Mb2M7Ci0gIENhcGl0YWxfTGV0dGVyICAgICAgICBDaF8yX0xvYzsKLQotICBDaF8xX0xvYyA9IENoXzFfUGFyX1ZhbDsKLSAgQ2hfMl9Mb2MgPSBDaF8xX0xvYzsKLSAgaWYgKENoXzJfTG9jICE9IENoXzJfUGFyX1ZhbCkKLSAgICAvKiB0aGVuLCBleGVjdXRlZCAqLwotICAgIHJldHVybiAoSWRlbnRfMSk7Ci0gIGVsc2UgIC8qIG5vdCBleGVjdXRlZCAqLwotICB7Ci0gICAgQ2hfMV9HbG9iID0gQ2hfMV9Mb2M7Ci0gICAgcmV0dXJuIChJZGVudF8yKTsKLSAgIH0KLX0gLyogRnVuY18xICovCi0KLQotCi1Cb29sZWFuIEZ1bmNfMiAoU3RyXzFfUGFyX1JlZiwgU3RyXzJfUGFyX1JlZikKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIC8qIGV4ZWN1dGVkIG9uY2UgKi8KLSAgICAvKiBTdHJfMV9QYXJfUmVmID09ICJESFJZU1RPTkUgUFJPR1JBTSwgMSdTVCBTVFJJTkciICovCi0gICAgLyogU3RyXzJfUGFyX1JlZiA9PSAiREhSWVNUT05FIFBST0dSQU0sIDInTkQgU1RSSU5HIiAqLwotCi1TdHJfMzAgIFN0cl8xX1Bhcl9SZWY7Ci1TdHJfMzAgIFN0cl8yX1Bhcl9SZWY7Ci17Ci0gIFJFRyBPbmVfVGhpcnR5ICAgICAgICBJbnRfTG9jOwotICAgICAgQ2FwaXRhbF9MZXR0ZXIgICAgQ2hfTG9jOwotCi0gIENoX0xvYyA9ICdBJzsKLSAgSW50X0xvYyA9IDI7Ci0gIHdoaWxlIChJbnRfTG9jIDw9IDIpIC8qIGxvb3AgYm9keSBleGVjdXRlZCBvbmNlICovCi0gICAgaWYgKEZ1bmNfMSAoU3RyXzFfUGFyX1JlZltJbnRfTG9jXSwKLSAgICAgICAgICAgICAgICBTdHJfMl9QYXJfUmVmW0ludF9Mb2MrMV0pID09IElkZW50XzEpCi0gICAgICAvKiB0aGVuLCBleGVjdXRlZCAqLwotICAgIHsKLSAgICAgIENoX0xvYyA9ICdBJzsKLSAgICAgIEludF9Mb2MgKz0gMTsKLSAgICB9IC8qIGlmLCB3aGlsZSAqLwotICBpZiAoQ2hfTG9jID49ICdXJyAmJiBDaF9Mb2MgPCAnWicpCi0gICAgLyogdGhlbiwgbm90IGV4ZWN1dGVkICovCi0gICAgSW50X0xvYyA9IDc7Ci0gIGlmIChDaF9Mb2MgPT0gJ1InKQotICAgIC8qIHRoZW4sIG5vdCBleGVjdXRlZCAqLwotICAgIHJldHVybiAodHJ1ZSk7Ci0gIGVsc2UgLyogZXhlY3V0ZWQgKi8KLSAgewotICAgIGlmIChzdHJjbXAgKFN0cl8xX1Bhcl9SZWYsIFN0cl8yX1Bhcl9SZWYpID4gMCkKLSAgICAgIC8qIHRoZW4sIG5vdCBleGVjdXRlZCAqLwotICAgIHsKLSAgICAgIEludF9Mb2MgKz0gNzsKLSAgICAgIEludF9HbG9iID0gSW50X0xvYzsKLSAgICAgIHJldHVybiAodHJ1ZSk7Ci0gICAgfQotICAgIGVsc2UgLyogZXhlY3V0ZWQgKi8KLSAgICAgIHJldHVybiAoZmFsc2UpOwotICB9IC8qIGlmIENoX0xvYyAqLwotfSAvKiBGdW5jXzIgKi8KLQotCi1Cb29sZWFuIEZ1bmNfMyAoRW51bV9QYXJfVmFsKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAvKiBleGVjdXRlZCBvbmNlICAgICAgICAqLwotICAgIC8qIEVudW1fUGFyX1ZhbCA9PSBJZGVudF8zICovCi1FbnVtZXJhdGlvbiBFbnVtX1Bhcl9WYWw7Ci17Ci0gIEVudW1lcmF0aW9uIEVudW1fTG9jOwotCi0gIEVudW1fTG9jID0gRW51bV9QYXJfVmFsOwotICBpZiAoRW51bV9Mb2MgPT0gSWRlbnRfMykKLSAgICAvKiB0aGVuLCBleGVjdXRlZCAqLwotICAgIHJldHVybiAodHJ1ZSk7Ci0gIGVsc2UgLyogbm90IGV4ZWN1dGVkICovCi0gICAgcmV0dXJuIChmYWxzZSk7Ci19IC8qIEZ1bmNfMyAqLwotCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uL0xJQ0VOU0UgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uL0xJQ0VOU0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ZmU1MjIuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9MSUNFTlNFCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotQ29weXJpZ2h0IChjKSAyMDEyLTIwMTUsIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgKFJlZ2VudHMpLgotQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0yLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLTMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFJlZ2VudHMgbm9yIHRoZQotICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKLSAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBSRUdFTlRTIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SIERJUkVDVCwgSU5ESVJFQ1QsCi1TUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIElOQ0xVRElORyBMT1NUIFBST0ZJVFMsIEFSSVNJTkcKLU9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OLCBFVkVOIElGIFJFR0VOVFMgSEFTCi1CRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1SRUdFTlRTIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotUFVSUE9TRS4gVEhFIFNPRlRXQVJFIEFORCBBQ0NPTVBBTllJTkcgRE9DVU1FTlRBVElPTiwgSUYgQU5ZLCBQUk9WSURFRAotSEVSRVVOREVSIElTIFBST1ZJREVEICJBUyBJUyIuIFJFR0VOVFMgSEFTIE5PIE9CTElHQVRJT04gVE8gUFJPVklERQotTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vY29tbW9uLm1rIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9jb21tb24ubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNzVmNzMuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9jb21tb24ubWsKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0jIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotIyAvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQotIyAvLyAKLSMgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jIC8vCi0jIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jIC8vCi0jIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0jIC8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgotIyAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi1BRERfQVNNX01BQ1JPID89IC1EX19BU1NFTUJMWV9fPTEKLQotRkxBR1MgPSAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICQoQUREX0ZMQUdTKQotRkxBR1NfU1RSID0gIiQoRkxBR1MpIgotCi1DRkxBR1NfQ09NTU9OID0gLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009JChUQ00pCi1DRkxBR1NfQVJDSCA9IC1XYSwtbWFyY2g9cnYzMiQoQVJDSCkgLW1hcmNoPXJ2MzIkKEFSQ0gpIC1tYWJpPSQoQUJJKQotCi1DRkxBR1MgOj0gJChGTEFHUykgJChFWFRfQ0ZMQUdTKSBcCi0kKENGTEFHU19DT01NT04pIFwKLSQoQ0ZMQUdTX0FSQ0gpIFwKLS1ERkxBR1NfU1RSPVwiJChGTEFHU19TVFIpXCIgXAotJChBRERfQ0ZMQUdTKQotCi1MREZMQUdTICAgPz0gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyJChBUkNIKSAtbWFiaT0kKEFCSSkKLQotaWZlcSAoLCQoZmluZHN0cmluZyAwLCQoVENNKSkpCi1sZF9zY3JpcHQgPz0gJChpbmNfZGlyKS9saW5rX3RjbS5sZAotYXNtX3NyYyAgID89IGNydF90Y20uUwotZWxzZQotbGRfc2NyaXB0ID89ICQoaW5jX2RpcikvbGluay5sZAotYXNtX3NyYyAgID89IGNydC5TCi1lbmRpZgotCi1WUEFUSCArPSAkKHNyY19kaXIpICQoaW5jX2RpcikgJChBRERfVlBBVEgpCi1pbmNzICArPSAtSSQoc3JjX2RpcikgLUkkKGluY19kaXIpICQoQUREX2luY3MpCi0KLWNfb2JqcyAgIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQocGF0c3Vic3QgJS5jLCAlLm8sICQoY19zcmMpKSkKLWFzbV9vYmpzIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQocGF0c3Vic3QgJS5TLCAlLm8sICQoYXNtX3NyYykpKQotCi0kKGJsZF9kaXIpLyUubzogJS5TCi0JJChSSVNDVl9HQ0MpICQoQ0ZMQUdTKSAkKEFERF9BU01fTUFDUk8pIC1jICQoaW5jcykgJDwgLW8gJEAKLQotJChibGRfZGlyKS8lLm86ICUuYwotCSQoUklTQ1ZfR0NDKSAkKENGTEFHUykgLWMgJChpbmNzKSAkPCAtbyAkQAotCi0kKGJsZF9kaXIpLyUuZWxmOiAkKGxkX3NjcmlwdCkgJChjX29ianMpICQoYXNtX29ianMpCi0JJChSSVNDVl9HQ0MpIC1vICRAIC1UICReICQoTERGTEFHUykKLQotJChibGRfZGlyKS8lLmhleDogJChibGRfZGlyKS8lLmVsZgotCSQoUklTQ1ZfUk9NX09CSkNPUFkpICReICRACi0JJChSSVNDVl9SQU1fT0JKQ09QWSkgJF4gJEAucmFtCi0JI2Fzc2lnbiAweDAwNDhfMHh4eCAgdG8gMHgwMDAwXzB4eHggdG8gbWFwIHRvIFRDTSBNZW1vcnkKLQlzZWQgLWkgJ3MvQDAwNDgwL0AwMDAwMC9nJyAkQC5yYW0KLQotCi0kKGJsZF9kaXIpLyUuZHVtcDogJChibGRfZGlyKS8lLmVsZgotCSQoUklTQ1ZfT0JKRFVNUCkgJF4gPiAkQApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9jcnQuUyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vY3J0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMThjNzYuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9jcnQuUworKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBAZmlsZSAgICAgICA8Y3J0LlM+Ci0vLy8KLQotI2luY2x1ZGUgInJpc2N2X2Nzcl9lbmNvZGluZy5oIgotI2luY2x1ZGUgInNjX3Rlc3QuaCIKLQotIyBkZWZpbmUgTFJFRyBsdwotIyBkZWZpbmUgU1JFRyBzdwotIyBkZWZpbmUgUkVHQllURVMgNAotCi0gICAgLmdsb2JsIF9zdGFydAotICAgIC5nbG9ibCBtYWluCi0gICAgLmdsb2JsIHRyYXBfZW50cnkKLSAgICAuZ2xvYmwgaGFuZGxlX3RyYXAKLSAgICAuZ2xvYmwgc2NfZXhpdAotICAgIC53ZWFrIHRyYXBfZW50cnksIGhhbmRsZV90cmFwCi0KLSAgICAudGV4dAotICAgIC5vcmcgKDY0KjMpCi0gICAgLmJhbGlnbiA2NAotbWFjaGluZV90cmFwX2VudHJ5OgotICAgIGogdHJhcF9lbnRyeQotCi0gICAgLmJhbGlnbiA2NAotCi1fc3RhcnQ6Ci0jaWZuZGVmIF9fUlZFX0VYVAotICAgIHplcm9faW50X3JlZ3MgMSwgMzEKLSNlbHNlCi0gICAgemVyb19pbnRfcmVncyAxLCAxNQotI2VuZGlmCi0gICAgIyBHbG9iYWwgcG9pbnRlciBpbml0Ci0gICAgLm9wdGlvbiBwdXNoCi0gICAgLm9wdGlvbiBub3JlbGF4Ci0gICAgbGEgICAgZ3AsIF9fZ2xvYmFsX3BvaW50ZXIkCi0gICAgLm9wdGlvbiBwb3AKLSAgICAjIGNsZWFyIGJzcwotICAgIGxhICAgICAgYTEsIF9fQlNTX1NUQVJUX18KLSAgICBsYSAgICAgIGEyLCBfX0JTU19FTkRfXwotICAgIGogICAgICAgNGYKLTM6ICBzdyAgICAgIHplcm8sIDAoYTEpCi0gICAgYWRkICAgICBhMSwgYTEsIDQKLTQ6ICBibmUgICAgIGExLCBhMiwgM2IKLSAgICBsYSAgICAgIHNwLCBfX0NfU1RBQ0tfVE9QX18KLQotICAgIC8vIFRpbWVyIGluaXQKLSAgICBsaSAgICAgIHQwLCBtdGltZV9jdHJsCi0gICAgbGkgICAgICB0MSwgKDEgPDwgU0NSMV9NVElNRV9DVFJMX0VOKSAgIC8vIGVuYWJsZSwgdXNlIGludGVybmFsIGNsb2NrCi0gICAgc3cgICAgICB0MSwgKHQwKQotICAgIGxpICAgICAgdDAsIG10aW1lX2RpdgotICAgIGxpICAgICAgdDEsICgxMDAtMSkgICAgICAgICAgICAgICAgICAgICAvLyBkaXZpZGUgYnkgMTAwCi0gICAgc3cgICAgICB0MSwgKHQwKQotICAgIGxpICAgICAgdDAsIG10aW1lY21wCi0gICAgbGkgICAgICB0MSwgLTEKLSAgICBzdyAgICAgIHQxLCAodDApICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4IHZhbHVlIGZvciBtdGltZWNtcAotICAgIHN3ICAgICAgdDEsIDQodDApCi0KLSAgICBsaSAgICAgIGEwLCAwCi0gICAgbGkgICAgICBhMSwgMAotICAgIGphbCAgICAgbWFpbgotICAgIGogICAgICAgc2NfZXhpdAotCi10cmFwX2VudHJ5OgotICAgIGFkZGkgc3AsIHNwLCAtMjcyCi0KLSAgICBTUkVHIHgxLCAxKlJFR0JZVEVTKHNwKQotICAgIFNSRUcgeDIsIDIqUkVHQllURVMoc3ApCi0gICAgU1JFRyB4MywgMypSRUdCWVRFUyhzcCkKLSAgICBTUkVHIHg0LCA0KlJFR0JZVEVTKHNwKQotICAgIFNSRUcgeDUsIDUqUkVHQllURVMoc3ApCi0gICAgU1JFRyB4NiwgNipSRUdCWVRFUyhzcCkKLSAgICBTUkVHIHg3LCA3KlJFR0JZVEVTKHNwKQotICAgIFNSRUcgeDgsIDgqUkVHQllURVMoc3ApCi0gICAgU1JFRyB4OSwgOSpSRUdCWVRFUyhzcCkKLSAgICBTUkVHIHgxMCwgMTAqUkVHQllURVMoc3ApCi0gICAgU1JFRyB4MTEsIDExKlJFR0JZVEVTKHNwKQotICAgIFNSRUcgeDEyLCAxMipSRUdCWVRFUyhzcCkKLSAgICBTUkVHIHgxMywgMTMqUkVHQllURVMoc3ApCi0gICAgU1JFRyB4MTQsIDE0KlJFR0JZVEVTKHNwKQotICAgIFNSRUcgeDE1LCAxNSpSRUdCWVRFUyhzcCkKLSNpZm5kZWYgX19SVkVfRVhUCi0gICAgU1JFRyB4MTYsIDE2KlJFR0JZVEVTKHNwKQotICAgIFNSRUcgeDE3LCAxNypSRUdCWVRFUyhzcCkKLSAgICBTUkVHIHgxOCwgMTgqUkVHQllURVMoc3ApCi0gICAgU1JFRyB4MTksIDE5KlJFR0JZVEVTKHNwKQotICAgIFNSRUcgeDIwLCAyMCpSRUdCWVRFUyhzcCkKLSAgICBTUkVHIHgyMSwgMjEqUkVHQllURVMoc3ApCi0gICAgU1JFRyB4MjIsIDIyKlJFR0JZVEVTKHNwKQotICAgIFNSRUcgeDIzLCAyMypSRUdCWVRFUyhzcCkKLSAgICBTUkVHIHgyNCwgMjQqUkVHQllURVMoc3ApCi0gICAgU1JFRyB4MjUsIDI1KlJFR0JZVEVTKHNwKQotICAgIFNSRUcgeDI2LCAyNipSRUdCWVRFUyhzcCkKLSAgICBTUkVHIHgyNywgMjcqUkVHQllURVMoc3ApCi0gICAgU1JFRyB4MjgsIDI4KlJFR0JZVEVTKHNwKQotICAgIFNSRUcgeDI5LCAyOSpSRUdCWVRFUyhzcCkKLSAgICBTUkVHIHgzMCwgMzAqUkVHQllURVMoc3ApCi0gICAgU1JFRyB4MzEsIDMxKlJFR0JZVEVTKHNwKQotI2VuZGlmIC8vIF9fUlZFX0VYVAotCi0gICAgY3NyciBhMCwgbWNhdXNlCi0gICAgY3NyciBhMSwgbWVwYwotICAgIG12IGEyLCBzcAotICAgIGphbCBoYW5kbGVfdHJhcAotCi0gICAgTFJFRyB4MSwgMSpSRUdCWVRFUyhzcCkKLSAgICBMUkVHIHgyLCAyKlJFR0JZVEVTKHNwKQotICAgIExSRUcgeDMsIDMqUkVHQllURVMoc3ApCi0gICAgTFJFRyB4NCwgNCpSRUdCWVRFUyhzcCkKLSAgICBMUkVHIHg1LCA1KlJFR0JZVEVTKHNwKQotICAgIExSRUcgeDYsIDYqUkVHQllURVMoc3ApCi0gICAgTFJFRyB4NywgNypSRUdCWVRFUyhzcCkKLSAgICBMUkVHIHg4LCA4KlJFR0JZVEVTKHNwKQotICAgIExSRUcgeDksIDkqUkVHQllURVMoc3ApCi0gICAgTFJFRyB4MTAsIDEwKlJFR0JZVEVTKHNwKQotICAgIExSRUcgeDExLCAxMSpSRUdCWVRFUyhzcCkKLSAgICBMUkVHIHgxMiwgMTIqUkVHQllURVMoc3ApCi0gICAgTFJFRyB4MTMsIDEzKlJFR0JZVEVTKHNwKQotICAgIExSRUcgeDE0LCAxNCpSRUdCWVRFUyhzcCkKLSAgICBMUkVHIHgxNSwgMTUqUkVHQllURVMoc3ApCi0jaWZuZGVmIF9fUlZFX0VYVAotICAgIExSRUcgeDE2LCAxNipSRUdCWVRFUyhzcCkKLSAgICBMUkVHIHgxNywgMTcqUkVHQllURVMoc3ApCi0gICAgTFJFRyB4MTgsIDE4KlJFR0JZVEVTKHNwKQotICAgIExSRUcgeDE5LCAxOSpSRUdCWVRFUyhzcCkKLSAgICBMUkVHIHgyMCwgMjAqUkVHQllURVMoc3ApCi0gICAgTFJFRyB4MjEsIDIxKlJFR0JZVEVTKHNwKQotICAgIExSRUcgeDIyLCAyMipSRUdCWVRFUyhzcCkKLSAgICBMUkVHIHgyMywgMjMqUkVHQllURVMoc3ApCi0gICAgTFJFRyB4MjQsIDI0KlJFR0JZVEVTKHNwKQotICAgIExSRUcgeDI1LCAyNSpSRUdCWVRFUyhzcCkKLSAgICBMUkVHIHgyNiwgMjYqUkVHQllURVMoc3ApCi0gICAgTFJFRyB4MjcsIDI3KlJFR0JZVEVTKHNwKQotICAgIExSRUcgeDI4LCAyOCpSRUdCWVRFUyhzcCkKLSAgICBMUkVHIHgyOSwgMjkqUkVHQllURVMoc3ApCi0gICAgTFJFRyB4MzAsIDMwKlJFR0JZVEVTKHNwKQotICAgIExSRUcgeDMxLCAzMSpSRUdCWVRFUyhzcCkKLSNlbmRpZiAvLyBfX1JWRV9FWFQKLQotICAgIGFkZGkgc3AsIHNwLCAyNzIKLSAgICBtcmV0Ci0KLWhhbmRsZV90cmFwOgotICAgIGogU0lNX0VYSVQKLQotLy8gZW5kIG9mIGNydC5TCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uL2NydF90Y20uUyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vY3J0X3RjbS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjJlYmE0Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vY3J0X3RjbS5TCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjEKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBTeW50YWNvcmUgTExDCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vIEBmaWxlICAgICAgIDxjcnRfdGNtLlM+Ci0vLy8KLQotI2luY2x1ZGUgInJpc2N2X2Nzcl9lbmNvZGluZy5oIgotI2luY2x1ZGUgInJlbG9jLmgiCi0jaW5jbHVkZSAic2NfdGVzdC5oIgotCi0jIGRlZmluZSBMUkVHIGx3Ci0jIGRlZmluZSBTUkVHIHN3Ci0jIGRlZmluZSBSRUdCWVRFUyA0Ci0KLSAgICAuZ2xvYmwgX3N0YXJ0Ci0gICAgLmdsb2JsIG1haW4KLSAgICAuZ2xvYmwgdHJhcF9lbnRyeQotICAgIC5nbG9ibCBoYW5kbGVfdHJhcAotICAgIC5nbG9ibCBzY19leGl0Ci0gICAgLndlYWsgdHJhcF9lbnRyeSwgaGFuZGxlX3RyYXAKLQotICAgIC5zZWN0aW9uIC50ZXh0LmluaXQKLSAgICAub3JnICg2NCozKQotICAgIC5hbGlnbiA2OwotbWFjaGluZV90cmFwX2VudHJ5OgotICAgIGogdHJhcF9lbnRyeQotCi0gICAgLmFsaWduIDYKLV9zdGFydDoKLSNpZm5kZWYgX19SVkVfRVhUCi0gICAgemVyb19pbnRfcmVncyAxLCAzMQotI2Vsc2UKLSAgICB6ZXJvX2ludF9yZWdzIDEsIDE1Ci0jZW5kaWYKLSAgICAjIEdsb2JhbCBwb2ludGVyIGluaXQKLSAgICAub3B0aW9uIHB1c2gKLSAgICAub3B0aW9uIG5vcmVsYXgKLSAgICBsYSAgICBncCwgX19nbG9iYWxfcG9pbnRlciQKLSAgICAub3B0aW9uIHBvcAotCi0gICAgUkVMT0NfUFJPQzsKLQotICAgIC8vIGluaXQgdGRhdGEKLSAgICBtdiAgICBhMSwgdHAKLSAgICBsYSAgICBhMiwgX3RkYXRhX2VuZAotICAgIGogICAgIDZmCi01OiAgbHcgICAgYTMsIDAoYTApCi0gICAgc3cgICAgYTMsIDAoYTEpCi0gICAgYWRkICAgYTAsIGEwLCA0Ci0gICAgYWRkICAgYTEsIGExLCA0Ci02OiAgYm5lICAgYTAsIGEyLCA1YgotICAgIC8vIGNsZWFyIHRic3MKLSAgICBqICAgICA4ZgotNzogIHN3ICAgIHplcm8sIDAoYTEpCi0gICAgYWRkICAgYTEsIGExLCA0Ci04OiAgYm5lICAgYTEsIGE0LCA3YgotCi0gICAgLy8gVGltZXIgaW5pdAotICAgIGxpICAgIHQwLCBtdGltZV9jdHJsCi0gICAgbGkgICAgdDEsICgxIDw8IFNDUjFfTVRJTUVfQ1RSTF9FTikgICAvLyBlbmFibGUsIHVzZSBpbnRlcm5hbCBjbG9jawotICAgIHN3ICAgIHQxLCAodDApCi0gICAgbGkgICAgdDAsIG10aW1lX2RpdgotICAgIGxpICAgIHQxLCAoMTAwLTEpICAgICAgICAgICAgICAgICAgICAgLy8gZGl2aWRlIGJ5IDEwMAotICAgIHN3ICAgIHQxLCAodDApCi0gICAgbGkgICAgdDAsIG10aW1lY21wCi0gICAgbGkgICAgdDEsIC0xCi0gICAgc3cgICAgdDEsICh0MCkgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXggdmFsdWUgZm9yIG10aW1lY21wCi0gICAgc3cgICAgdDEsIDQodDApCi0KLSAgICBsaSAgICBhMCwgMAotICAgIGxpICAgIGExLCAwCi05OiAgYXVpcGMgdDAsICVwY3JlbF9oaShtYWluKQotICAgIGphbHIgIHQwLCAlcGNyZWxfbG8oOWIpCi0gICAgbGEgICAgdDAsIHNjX2V4aXQKLSAgICAvL2ogICAgIHNjX2V4aXQKLQotdHJhcF9lbnRyeToKLSAgICBhZGRpIHNwLCBzcCwgLTI3MgotCi0gICAgU1JFRyB4MSwgMSpSRUdCWVRFUyhzcCkKLSAgICBTUkVHIHgyLCAyKlJFR0JZVEVTKHNwKQotICAgIFNSRUcgeDMsIDMqUkVHQllURVMoc3ApCi0gICAgU1JFRyB4NCwgNCpSRUdCWVRFUyhzcCkKLSAgICBTUkVHIHg1LCA1KlJFR0JZVEVTKHNwKQotICAgIFNSRUcgeDYsIDYqUkVHQllURVMoc3ApCi0gICAgU1JFRyB4NywgNypSRUdCWVRFUyhzcCkKLSAgICBTUkVHIHg4LCA4KlJFR0JZVEVTKHNwKQotICAgIFNSRUcgeDksIDkqUkVHQllURVMoc3ApCi0gICAgU1JFRyB4MTAsIDEwKlJFR0JZVEVTKHNwKQotICAgIFNSRUcgeDExLCAxMSpSRUdCWVRFUyhzcCkKLSAgICBTUkVHIHgxMiwgMTIqUkVHQllURVMoc3ApCi0gICAgU1JFRyB4MTMsIDEzKlJFR0JZVEVTKHNwKQotICAgIFNSRUcgeDE0LCAxNCpSRUdCWVRFUyhzcCkKLSAgICBTUkVHIHgxNSwgMTUqUkVHQllURVMoc3ApCi0jaWZuZGVmIF9fUlZFX0VYVAotICAgIFNSRUcgeDE2LCAxNipSRUdCWVRFUyhzcCkKLSAgICBTUkVHIHgxNywgMTcqUkVHQllURVMoc3ApCi0gICAgU1JFRyB4MTgsIDE4KlJFR0JZVEVTKHNwKQotICAgIFNSRUcgeDE5LCAxOSpSRUdCWVRFUyhzcCkKLSAgICBTUkVHIHgyMCwgMjAqUkVHQllURVMoc3ApCi0gICAgU1JFRyB4MjEsIDIxKlJFR0JZVEVTKHNwKQotICAgIFNSRUcgeDIyLCAyMipSRUdCWVRFUyhzcCkKLSAgICBTUkVHIHgyMywgMjMqUkVHQllURVMoc3ApCi0gICAgU1JFRyB4MjQsIDI0KlJFR0JZVEVTKHNwKQotICAgIFNSRUcgeDI1LCAyNSpSRUdCWVRFUyhzcCkKLSAgICBTUkVHIHgyNiwgMjYqUkVHQllURVMoc3ApCi0gICAgU1JFRyB4MjcsIDI3KlJFR0JZVEVTKHNwKQotICAgIFNSRUcgeDI4LCAyOCpSRUdCWVRFUyhzcCkKLSAgICBTUkVHIHgyOSwgMjkqUkVHQllURVMoc3ApCi0gICAgU1JFRyB4MzAsIDMwKlJFR0JZVEVTKHNwKQotICAgIFNSRUcgeDMxLCAzMSpSRUdCWVRFUyhzcCkKLSNlbmRpZiAvLyBfX1JWRV9FWFQKLQotICAgIGNzcnIgYTAsIG1jYXVzZQotICAgIGNzcnIgYTEsIG1lcGMKLSAgICBtdiBhMiwgc3AKLSAgICBqYWwgaGFuZGxlX3RyYXAKLQotICAgIExSRUcgeDEsIDEqUkVHQllURVMoc3ApCi0gICAgTFJFRyB4MiwgMipSRUdCWVRFUyhzcCkKLSAgICBMUkVHIHgzLCAzKlJFR0JZVEVTKHNwKQotICAgIExSRUcgeDQsIDQqUkVHQllURVMoc3ApCi0gICAgTFJFRyB4NSwgNSpSRUdCWVRFUyhzcCkKLSAgICBMUkVHIHg2LCA2KlJFR0JZVEVTKHNwKQotICAgIExSRUcgeDcsIDcqUkVHQllURVMoc3ApCi0gICAgTFJFRyB4OCwgOCpSRUdCWVRFUyhzcCkKLSAgICBMUkVHIHg5LCA5KlJFR0JZVEVTKHNwKQotICAgIExSRUcgeDEwLCAxMCpSRUdCWVRFUyhzcCkKLSAgICBMUkVHIHgxMSwgMTEqUkVHQllURVMoc3ApCi0gICAgTFJFRyB4MTIsIDEyKlJFR0JZVEVTKHNwKQotICAgIExSRUcgeDEzLCAxMypSRUdCWVRFUyhzcCkKLSAgICBMUkVHIHgxNCwgMTQqUkVHQllURVMoc3ApCi0gICAgTFJFRyB4MTUsIDE1KlJFR0JZVEVTKHNwKQotI2lmbmRlZiBfX1JWRV9FWFQKLSAgICBMUkVHIHgxNiwgMTYqUkVHQllURVMoc3ApCi0gICAgTFJFRyB4MTcsIDE3KlJFR0JZVEVTKHNwKQotICAgIExSRUcgeDE4LCAxOCpSRUdCWVRFUyhzcCkKLSAgICBMUkVHIHgxOSwgMTkqUkVHQllURVMoc3ApCi0gICAgTFJFRyB4MjAsIDIwKlJFR0JZVEVTKHNwKQotICAgIExSRUcgeDIxLCAyMSpSRUdCWVRFUyhzcCkKLSAgICBMUkVHIHgyMiwgMjIqUkVHQllURVMoc3ApCi0gICAgTFJFRyB4MjMsIDIzKlJFR0JZVEVTKHNwKQotICAgIExSRUcgeDI0LCAyNCpSRUdCWVRFUyhzcCkKLSAgICBMUkVHIHgyNSwgMjUqUkVHQllURVMoc3ApCi0gICAgTFJFRyB4MjYsIDI2KlJFR0JZVEVTKHNwKQotICAgIExSRUcgeDI3LCAyNypSRUdCWVRFUyhzcCkKLSAgICBMUkVHIHgyOCwgMjgqUkVHQllURVMoc3ApCi0gICAgTFJFRyB4MjksIDI5KlJFR0JZVEVTKHNwKQotICAgIExSRUcgeDMwLCAzMCpSRUdCWVRFUyhzcCkKLSAgICBMUkVHIHgzMSwgMzEqUkVHQllURVMoc3ApCi0jZW5kaWYgLy8gX19SVkVfRVhUCi0KLSAgICBhZGRpIHNwLCBzcCwgMjcyCi0gICAgbXJldAotCi1oYW5kbGVfdHJhcDoKLSAgICBqIFNJTV9FWElUCi0KLS8vIGVuZCBvZiBjcnQuUwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9jc3IuaCBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vY3NyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2OWRhYzUuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9jc3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBAZmlsZSAgICAgICA8Y3NyLmg+Ci0vLy8gQXJjaGl0ZWN0dXJlIHNwZWNpZmljIENTUidzIGRlZnMgYW5kIGlubGluZXMKLQotI2lmbmRlZiBTQ1JfQ1NSX0gKLSNkZWZpbmUgU0NSX0NTUl9ICi0KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0KLSNkZWZpbmUgX194c3RyaW5naWZ5KHMpIF9fc3RyaW5naWZ5KHMpCi0jZGVmaW5lIF9fc3RyaW5naWZ5KHMpICNzCi0KLSNpZmRlZiByZWFkX2NzcgotI3VuZGVmIHJlYWRfY3NyCi0jZW5kaWYKLQotI2lmZGVmIHdyaXRlX2NzcgotI3VuZGVmIHdyaXRlX2NzcgotI2VuZGlmCi0KLSNpZmRlZiBzd2FwX2NzcgotI3VuZGVmIHN3YXBfY3NyCi0jZW5kaWYKLQotI2lmZGVmIHNldF9jc3IKLSN1bmRlZiBzZXRfY3NyCi0jZW5kaWYKLQotI2lmZGVmIGNsZWFyX2NzcgotI3VuZGVmIGNsZWFyX2NzcgotI2VuZGlmCi0KLSNpZmRlZiByZHRpbWUKLSN1bmRlZiByZHRpbWUKLSNlbmRpZgotCi0jaWZkZWYgcmRjeWNsZQotI3VuZGVmIHJkY3ljbGUKLSNlbmRpZgotCi0jaWZkZWYgcmRpbnN0cmV0Ci0jdW5kZWYgcmRpbnN0cmV0Ci0jZW5kaWYKLQotI2RlZmluZSByZWFkX2NzcihyZWcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgdW5zaWduZWQgbG9uZyBfX3RtcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBhc20gdm9sYXRpbGUgKCJjc3JyICUwLCAiIF9feHN0cmluZ2lmeShyZWcpIDogIj1yIihfX3RtcCkpOyBcCi0gICAgICAgIF9fdG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9KQotCi0jZGVmaW5lIHdyaXRlX2NzcihyZWcsIHZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCh2YWwpICYmICh2YWwpID09IDApICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJjc3J3ICIgX194c3RyaW5naWZ5KHJlZykgIiwgemVybyIgOjopOyAgICAgICBcCi0gICAgICAgIGVsc2UgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHZhbCkgJiYgKHVuc2lnbmVkIGxvbmcpKHZhbCkgPCAzMikgXAotICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NydyAiIF9feHN0cmluZ2lmeShyZWcpICIsICUwIiA6OiAiaSIodmFsKSk7IFwKLSAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoImNzcncgIiBfX3hzdHJpbmdpZnkocmVnKSAiLCAlMCIgOjogInIiKHZhbCkpOyBcCi0gICAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBzd2FwX2NzcihyZWcsIHZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB1bnNpZ25lZCBsb25nIF9fdG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AodmFsKSAmJiAodmFsKSA9PSAwKSAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NycncgJTAsICIgX194c3RyaW5naWZ5KHJlZykgIiwgemVybyIgOiAgIj1yIihfX3RtcCkgOik7IFwKLSAgICAgICAgZWxzZSBpZiAoX19idWlsdGluX2NvbnN0YW50X3AodmFsKSAmJiAodW5zaWduZWQgbG9uZykodmFsKSA8IDMyKSBcCi0gICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJjc3JydyAlMCwgIiBfX3hzdHJpbmdpZnkocmVnKSAiLCAlMSIgOiAiPXIiKF9fdG1wKSA6ICJpIih2YWwpKTsgXAotICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NycncgJTAsICIgX194c3RyaW5naWZ5KHJlZykgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAiciIodmFsKSk7IFwKLSAgICAgICAgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9KQotCi0jZGVmaW5lIHNldF9jc3IocmVnLCBiaXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChiaXQpICYmIChiaXQpIDwgMzIpICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJjc3JycyAlMCwgIiBfX3hzdHJpbmdpZnkocmVnKSAiLCAlMSIgOiAiPXIiKF9fdG1wKSA6ICJpIihiaXQpKTsgXAotICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NycnMgJTAsICIgX194c3RyaW5naWZ5KHJlZykgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAiciIoYml0KSk7IFwKLSAgICAgICAgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9KQotCi0jZGVmaW5lIGNsZWFyX2NzcihyZWcsIGJpdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChiaXQpICYmIChiaXQpIDwgMzIpICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJjc3JyYyAlMCwgIiBfX3hzdHJpbmdpZnkocmVnKSAiLCAlMSIgOiAiPXIiKF9fdG1wKSA6ICJpIihiaXQpKTsgXAotICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NycmMgJTAsICIgX194c3RyaW5naWZ5KHJlZykgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAiciIoYml0KSk7IFwKLSAgICAgICAgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9KQotCi0jZGVmaW5lIHJkdGltZSgpIHJlYWRfY3NyKHRpbWUpCi0jZGVmaW5lIHJkY3ljbGUoKSByZWFkX2NzcihjeWNsZSkKLSNkZWZpbmUgcmRpbnN0cmV0KCkgcmVhZF9jc3IoaW5zdHJldCkKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fYXR0cmlidXRlX18oKGNvbnN0KSkgY3B1aWQoKQotewotICB1bnNpZ25lZCBsb25nIHJlczsKLSAgYXNtICgiY3NyciAlMCwgbWNwdWlkIiA6ICI9ciIocmVzKSk7Ci0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKChjb25zdCkpIGltcGlkKCkKLXsKLSAgdW5zaWduZWQgbG9uZyByZXM7Ci0gIGFzbSAoImNzcnIgJTAsIG1pbXBpZCIgOiAiPXIiKHJlcykpOwotICByZXR1cm4gcmVzOwotfQotCi0jZW5kaWYgLy8gU0NSX0NTUl9ICmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uL2xpbmsubGQgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uL2xpbmsubGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZjM4OTMuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9saW5rLmxkCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSoqLwotLyoKLSogQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNiwgMjAxNy4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMKLSogQGZpbGUgICAgICAgPGxpbmsubGQ+Ci0qIEBicmllZiAgICAgIGJhcmUgbWV0YWwgdGVzdHMnIGxpbmtlciBzY3JpcHQKLSovCi0KLU9VVFBVVF9BUkNIKCAicmlzY3YiICkKLUVOVFJZKF9zdGFydCkKLQotTUVNT1JZIHsKLSAgUk9NIChyeHgpIDogT1JJR0lOID0gMHgwLCBMRU5HVEggPSA2NEsKLSAgVENNIChyd3gpIDogT1JJR0lOID0gMHgwMDQ4MDAwMCwgTEVOR1RIID0gNEsKLSAgUkFNIChyd3gpIDogT1JJR0lOID0gMHgxMDAzMDAwMCwgTEVOR1RIID0gOEsKLX0KLQotU1RBQ0tfU0laRSA9IDEwMjQ7Ci0KLUNMX1NJWkUgPSAzMjsKLQotU0VDVElPTlMgewotCi0gIC8qIGNvZGUgc2VnbWVudCAqLwotICAudGV4dC5pbml0IDAgOiB7IAotICAgIEZJTEwoMCk7Ci0gICAgLiA9IDB4MTAwIC0gMTI7Ci0gICAgU0lNX0VYSVQgPSAuOwotICAgIExPTkcoMHgxMyk7Ci0gICAgU0lNX1NUT1AgPSAuOwotICAgIExPTkcoMHg2Rik7Ci0gICAgTE9ORygtMSk7Ci0gICAgLiA9IDB4MTAwOwotICAgIFBST1ZJREUoX19URVhUX1NUQVJUX18gPSAuKTsKLSAgICAqKC50ZXh0LmluaXQpIAotICB9ID5ST00KLQotICAudGV4dCAgOiB7Ci0gICAgKmNydC5vKC50ZXh0IC50ZXh0LiopCi0gICAgKigudGV4dCAudGV4dC4qKQotICAgICooc2NfdGVzdF9zZWN0aW9uKQotICAgIC4gPSBBTElHTihDTF9TSVpFKTsKLSAgICAgUFJPVklERShfX1RFWFRfRU5EX18gPSAuKTsKLSAgfSA+Uk9NIAotCi0gIC8qIGRhdGEgc2VnbWVudCAqLwotICAuZGF0YSA6IHsKLSAgICAqKC5kYXRhIC5kYXRhLiopCi0gICAgLiA9IEFMSUdOKENMX1NJWkUpOwotICB9ID5UQ00KLQotICAuc2RhdGEgOiB7Ci0gICAgX19nbG9iYWxfcG9pbnRlciQgPSAuICsgMHg4MDA7Ci0gICAgKiguc3JvZGF0YS5jc3QxNikgKiguc3JvZGF0YS5jc3Q4KSAqKC5zcm9kYXRhLmNzdDQpICooLnNyb2RhdGEuY3N0MikgKiguc3JvZGF0YSopCi0gICAgKiguc2RhdGEgLnNkYXRhLiogLmdudS5saW5rb25jZS5zLiopCi0gICAgLiA9IEFMSUdOKENMX1NJWkUpOwotICB9ID5UQ00KLQotICAvKiB0aHJlYWQtbG9jYWwgZGF0YSBzZWdtZW50ICovCi0gIC50ZGF0YSA6IHsKLSAgICBQUk9WSURFKF90bHNfZGF0YSA9IC4pOwotICAgIFBST1ZJREUoX3RkYXRhX2JlZ2luID0gLik7Ci0gICAgKigudGRhdGEgLnRkYXRhLiopCi0gICAgUFJPVklERShfdGRhdGFfZW5kID0gLik7Ci0gICAgLiA9IEFMSUdOKENMX1NJWkUpOwotICB9ID5UQ00KLQotICAudGJzcyA6IHsKLSAgICBQUk9WSURFKF9fQlNTX1NUQVJUX18gPSAuKTsKLSAgICAqKC50YnNzIC50YnNzLiopCi0gICAgLiA9IEFMSUdOKENMX1NJWkUpOwotICAgIFBST1ZJREUoX3Ric3NfZW5kID0gLik7Ci0gIH0gPlRDTQotCi0gIC8qIGJzcyBzZWdtZW50ICovCi0gIC5zYnNzIDogewotICAgICooLnNic3MgLnNic3MuKiAuZ251LmxpbmtvbmNlLnNiLiopCi0gICAgKiguc2NvbW1vbikKLSAgfSA+UkFNCi0KLSAgLmJzcyA6IHsKLSAgICAqKC5ic3MgLmJzcy4qKQotICAgIC4gPSBBTElHTihDTF9TSVpFKTsKLSAgICBQUk9WSURFKF9fQlNTX0VORF9fID0gLik7Ci0gIH0gPlJBTQotCi0gIF9lbmQgPSAuOwotICBQUk9WSURFKF9fZW5kID0gLik7Ci0KLSAgLyogRW5kIG9mIHVuaW5pdGFsaXplZCBkYXRhIHNlZ2VtZW50ICovCi0KLSAgLnN0YWNrIE9SSUdJTihUQ00pICsgTEVOR1RIKFRDTSkgLSBTVEFDS19TSVpFIDogewotICAgIEZJTEwoMCk7Ci0gICAgUFJPVklERShfX1NUQUNLX1NUQVJUX18gPSAuKTsKLSAgICAuICs9IFNUQUNLX1NJWkU7Ci0gICAgUFJPVklERShfX0NfU1RBQ0tfVE9QX18gPSAuKTsKLSAgICBQUk9WSURFKF9fU1RBQ0tfRU5EX18gPSAuKTsKLSAgfSA+VENNCi0KLSAgL0RJU0NBUkQvIDogewotICAgICooLmVoX2ZyYW1lIC5laF9mcmFtZS4qKQotICB9Ci19CmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uL2xpbmtfdGNtLmxkIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9saW5rX3RjbS5sZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg0MGVjMy4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uL2xpbmtfdGNtLmxkCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSovCi0vKgotKiBAZmlsZSAgICAgICA8bGluay5sZD4KLSogQGJyaWVmICAgICAgYmFyZSBtZXRhbCB0ZXN0cycgbGlua2VyIHNjcmlwdAotKi8KLQotT1VUUFVUX0FSQ0goICJyaXNjdiIgKQotRU5UUlkoX3N0YXJ0KQotCi1NRU1PUlkgewotICBST00gKHJ4eCkgOiBPUklHSU4gPSAweDAsIExFTkdUSCA9IDY0SwotICBUQ00gKHJ3eCkgOiBPUklHSU4gPSAweDAwNDgwMDAwLCBMRU5HVEggPSA0SwotfQotCi1TVEFDS19TSVpFID0gMjU2OwotCi1DTF9TSVpFID0gMzI7Ci0KLVNFQ1RJT05TIHsKLQotICAvKiBjb2RlIHNlZ21lbnQgKi8KLSAgLnRleHQuaW5pdCBPUklHSU4oUk9NKSA6IHsgCi0gICAgRklMTCgwKTsKLSAgICAuID0gMHgxMDAgLSAxMjsKLSAgICBTSU1fRVhJVCA9IC47Ci0gICAgTE9ORygweDEzKTsKLSAgICBTSU1fU1RPUCA9IC47Ci0gICAgTE9ORygweDZGKTsKLSAgICBMT05HKC0xKTsKLSAgICAuID0gMHgxMDA7Ci0gICAgKmNydF90Y20ubygudGV4dCAudGV4dC4qKQotICAgICooLnRleHQuaW5pdCkKLSAgICAuID0gQUxJR04oQ0xfU0laRSk7Ci0gIH0gPlJPTQotCi0gIF9fcmVsb2Nfc3RhcnQgPSAuOwotCi0gIC50ZXh0IDogewotICAgIFBST1ZJREUoX19URVhUX1NUQVJUX18gPSAuKTsKLSAgICAqKC50ZXh0IC50ZXh0LiopCi0gICAgKihzY190ZXN0X3NlY3Rpb24pCi0gICAgLiA9IEFMSUdOKENMX1NJWkUpOwotICAgICBQUk9WSURFKF9fVEVYVF9FTkRfXyA9IC4pOwotICB9ID5UQ00gQVQ+Uk9NCi0KLQotICAucm9kYXRhIEFMSUdOKENMX1NJWkUpIDogewotICAgIF9fZ2xvYmFsX3BvaW50ZXIkID0gLiArIDB4ODAwOwotICAgICooLnJvZGF0YSkgKigucm9kYXRhLiopICooLmdudS5saW5rb25jZS5yLiopCi0gICAgLiA9IEFMSUdOKENMX1NJWkUpOwotICAgIExPTkcoMHgxMyk7Ci0gICAgLiA9IEFMSUdOKENMX1NJWkUpOwotICB9ID5UQ00gQVQ+Uk9NCi0KLQotICAvKiBkYXRhIHNlZ21lbnQgKi8KLSAgLmRhdGEgQUxJR04oQ0xfU0laRSkgOiB7Ci0gICAgUFJPVklERShfX0RBVEFfU1RBUlRfXyA9IC4pOwotICAgICooLmRhdGEgLmRhdGEuKikKLSAgICAuID0gQUxJR04oQ0xfU0laRSk7Ci0gIH0gPlRDTSAKLSAgCi0gIC5zZGF0YSBBTElHTihDTF9TSVpFKSA6IHsKLSAgICAqKC5zZGF0YSAuc2RhdGEuKiAuZ251LmxpbmtvbmNlLnMuKikKLSAgICAuID0gQUxJR04oQ0xfU0laRSk7Ci0gICAgUFJPVklERShfX0RBVEFfRU5EX18gPSAuKTsKLSAgfSA+VENNCi0KLSAgLyogdGhyZWFkLWxvY2FsIGRhdGEgc2VnbWVudCAqLwotICAudGRhdGEgQUxJR04oQ0xfU0laRSkgOiB7Ci0gICAgUFJPVklERShfdGxzX2RhdGEgPSAuKTsKLSAgICBQUk9WSURFKF90ZGF0YV9iZWdpbiA9IC4pOwotICAgICooLnRkYXRhIC50ZGF0YS4qKQotICAgIFBST1ZJREUoX3RkYXRhX2VuZCA9IC4pOwotICAgIC4gPSBBTElHTihDTF9TSVpFKTsKLSAgfSA+VENNCi0KLSAgLnRic3MgQUxJR04oQ0xfU0laRSkgOiB7Ci0gICAgUFJPVklERShfdGJzc19iZWdpbiA9IC4pOwotICAgICooLnRic3MgLnRic3MuKikKLSAgICAuID0gQUxJR04oQ0xfU0laRSk7Ci0gICAgUFJPVklERShfdGJzc19lbmQgPSAuKTsKLSAgfSA+VENNCi0KLSAgLyogYnNzIHNlZ21lbnQgKi8KLSAgLnNic3MgQUxJR04oQ0xfU0laRSkgOiB7Ci0gICAgUFJPVklERShfX0JTU19TVEFSVF9fID0gLik7Ci0gICAgKiguc2JzcyAuc2Jzcy4qIC5nbnUubGlua29uY2Uuc2IuKikKLSAgICAqKC5zY29tbW9uKQotICAgIC4gPSBBTElHTihDTF9TSVpFKTsKLSAgfSA+VENNCi0KLSAgLmJzcyBBTElHTihDTF9TSVpFKSA6IHsKLSAgICAqKC5keW5ic3MpICooLmJzcyAuYnNzLiogLmdudS5saW5rb25jZS5iLiopICooQ09NTU9OKQotICAgIC4gPSBBTElHTihDTF9TSVpFKTsKLSAgICBQUk9WSURFKF9fQlNTX0VORF9fID0gLik7Ci0gIH0gPlRDTQotCi0gIF9lbmQgPSAuOwotICBQUk9WSURFKF9fZW5kID0gLik7Ci0KLSAgLyogRW5kIG9mIHVuaW5pdGFsaXplZCBkYXRhIHNlZ2VtZW50ICovCi0KLSAgLnN0YWNrIE9SSUdJTihUQ00pICsgTEVOR1RIKFRDTSkgLSBTVEFDS19TSVpFIDogewotICAgIFBST1ZJREUoX19TVEFDS19TVEFSVF9fID0gLik7Ci0gICAgLiArPSBTVEFDS19TSVpFOwotICAgIFBST1ZJREUoX19DX1NUQUNLX1RPUF9fID0gLik7Ci0gICAgUFJPVklERShfX1NUQUNLX0VORF9fID0gLik7Ci0gIH0gPlRDTQotCi0gIC9ESVNDQVJELyA6IHsKLSAgICAqKC5laF9mcmFtZSAuZWhfZnJhbWUuKikKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9yZWxvYy5oIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9yZWxvYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2RiYTdhLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vcmVsb2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjEKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBTeW50YWNvcmUgTExDCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0KLSNpZm5kZWYgUkVMT0NfSAotI2RlZmluZSBSRUxPQ19ICi0KLSNpZiAoVENNID09IDEpCi0jZGVmaW5lIFJFTE9DX1BST0MgICAgICAgICAgICAgIFwKLSAgICBsYSAgICBhMCwgX19yZWxvY19zdGFydDsgICAgXAotICAgIGxhICAgIGExLCBfX1RFWFRfU1RBUlRfXzsgICBcCi0gICAgbGEgICAgYTIsIF9fREFUQV9FTkRfXzsgICAgIFwKLSAgICBiZXEgICBhMCwgYTEsIDIxZjsgICAgICAgICAgXAotICAgIGogICAgIDJmOyAgICAgICAgICAgICAgICAgICBcCi0xOiAgbHcgICAgYTMsIDAoYTApOyAgICAgICAgICAgIFwKLSAgICBzdyAgICBhMywgMChhMSk7ICAgICAgICAgICAgXAotICAgIGFkZCAgIGEwLCBhMCwgNDsgICAgICAgICAgICBcCi0gICAgYWRkICAgYTEsIGExLCA0OyAgICAgICAgICAgIFwKLTI6ICBibmUgICBhMSwgYTIsIDFiOyAgICAgICAgICAgXAotICAgIC8qIGNsZWFyIGJzcyAqLyAgICAgICAgICAgICBcCi0gICAgbGEgICAgYTIsIF9fQlNTX1NUQVJUX187ICAgIFwKLTIxOiBsYSAgICBhMSwgX19CU1NfRU5EX187ICAgICAgXAotICAgIGogICAgIDRmOyAgICAgICAgICAgICAgICAgICBcCi0zOiAgc3cgICAgemVybywgMChhMik7ICAgICAgICAgIFwKLSAgICBhZGQgICBhMiwgYTIsIDQ7ICAgICAgICAgICAgXAotNDogIGJuZSAgIGExLCBhMiwgM2I7ICAgICAgICAgICBcCi0gICAgLyogaW5pdCBzdGFjayAqLyAgICAgICAgICAgIFwKLSAgICBsYSAgICBzcCwgX19DX1NUQUNLX1RPUF9fOyAgXAotICAgIC8qIGluaXQgaGFydDAgVExTICovICAgICAgICBcCi0gICAgbGEgICAgYTAsIF90ZGF0YV9iZWdpbjsgICAgIFwKLSAgICBsYSAgICBhMiwgX3Ric3NfZW5kOyAgICAgICAgXAotICAgIHN1YiAgIGExLCBhMiwgYTA7ICAgICAgICAgICBcCi0gICAgbGEgICAgYTQsIF9fU1RBQ0tfU1RBUlRfXzsgIFwKLSAgICBzdWIgICB0cCwgYTQsIGExOyAgIAotI2Vsc2UgIC8vICNpZiBUQ00KLQotI2RlZmluZSBSRUxPQ19QUk9DCi0KLSNlbmRpZiAgLy8gI2Vsc2UgI2lmIFRDTQotCi0jZW5kaWYgIC8vIApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9yaXNjdl9jc3JfZW5jb2RpbmcuaCBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vcmlzY3ZfY3NyX2VuY29kaW5nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZDM4MDUuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9yaXNjdl9jc3JfZW5jb2RpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0OTAgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMQotLy8gCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IFN5bnRhY29yZSBMTEMKLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTZWUgTElDRU5TRSBmb3IgbGljZW5zZSBkZXRhaWxzLgotCi0jaWZuZGVmIFJJU0NWX0NTUl9FTkNPRElOR19ICi0jZGVmaW5lIFJJU0NWX0NTUl9FTkNPRElOR19ICi0KLSNkZWZpbmUgTVNUQVRVU19VSUUgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIE1TVEFUVVNfU0lFICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBNU1RBVFVTX0hJRSAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgTVNUQVRVU19NSUUgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIE1TVEFUVVNfVVBJRSAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBNU1RBVFVTX1NQSUUgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgTVNUQVRVU19IUElFICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIE1TVEFUVVNfTVBJRSAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBNU1RBVFVTX1NQUCAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgTVNUQVRVU19IUFAgICAgICAgICAweDAwMDAwNjAwCi0jZGVmaW5lIE1TVEFUVVNfTVBQICAgICAgICAgMHgwMDAwMTgwMAotI2RlZmluZSBNU1RBVFVTX0ZTICAgICAgICAgIDB4MDAwMDYwMDAKLSNkZWZpbmUgTVNUQVRVU19YUyAgICAgICAgICAweDAwMDE4MDAwCi0jZGVmaW5lIE1TVEFUVVNfTVBSViAgICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBNU1RBVFVTX1NVTSAgICAgICAgIDB4MDAwNDAwMDAKLSNkZWZpbmUgTVNUQVRVU19NWFIgICAgICAgICAweDAwMDgwMDAwCi0jZGVmaW5lIE1TVEFUVVNfVFZNICAgICAgICAgMHgwMDEwMDAwMAotI2RlZmluZSBNU1RBVFVTX1RXICAgICAgICAgIDB4MDAyMDAwMDAKLSNkZWZpbmUgTVNUQVRVU19UU1IgICAgICAgICAweDAwNDAwMDAwCi0jZGVmaW5lIE1TVEFUVVMzMl9TRCAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBNU1RBVFVTX1VYTCAgICAgICAgIDB4MDAwMDAwMDMwMDAwMDAwMAotI2RlZmluZSBNU1RBVFVTX1NYTCAgICAgICAgIDB4MDAwMDAwMEMwMDAwMDAwMAotI2RlZmluZSBNU1RBVFVTNjRfU0QgICAgICAgIDB4ODAwMDAwMDAwMDAwMDAwMAotCi0jZGVmaW5lIFNTVEFUVVNfVUlFICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBTU1RBVFVTX1NJRSAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgU1NUQVRVU19VUElFICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFNTVEFUVVNfU1BJRSAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBTU1RBVFVTX1NQUCAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgU1NUQVRVU19GUyAgICAgICAgICAweDAwMDA2MDAwCi0jZGVmaW5lIFNTVEFUVVNfWFMgICAgICAgICAgMHgwMDAxODAwMAotI2RlZmluZSBTU1RBVFVTX1NVTSAgICAgICAgIDB4MDAwNDAwMDAKLSNkZWZpbmUgU1NUQVRVU19NWFIgICAgICAgICAweDAwMDgwMDAwCi0jZGVmaW5lIFNTVEFUVVMzMl9TRCAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBTU1RBVFVTX1VYTCAgICAgICAgIDB4MDAwMDAwMDMwMDAwMDAwMAotI2RlZmluZSBTU1RBVFVTNjRfU0QgICAgICAgIDB4ODAwMDAwMDAwMDAwMDAwMAotCi0jZGVmaW5lIERDU1JfWERFQlVHVkVSICAgICAgKDNVPDwzMCkKLSNkZWZpbmUgRENTUl9ORFJFU0VUICAgICAgICAoMTw8MjkpCi0jZGVmaW5lIERDU1JfRlVMTFJFU0VUICAgICAgKDE8PDI4KQotI2RlZmluZSBEQ1NSX0VCUkVBS00gICAgICAgICgxPDwxNSkKLSNkZWZpbmUgRENTUl9FQlJFQUtIICAgICAgICAoMTw8MTQpCi0jZGVmaW5lIERDU1JfRUJSRUFLUyAgICAgICAgKDE8PDEzKQotI2RlZmluZSBEQ1NSX0VCUkVBS1UgICAgICAgICgxPDwxMikKLSNkZWZpbmUgRENTUl9TVE9QQ1lDTEUgICAgICAoMTw8MTApCi0jZGVmaW5lIERDU1JfU1RPUFRJTUUgICAgICAgKDE8PDkpCi0jZGVmaW5lIERDU1JfQ0FVU0UgICAgICAgICAgKDc8PDYpCi0jZGVmaW5lIERDU1JfREVCVUdJTlQgICAgICAgKDE8PDUpCi0jZGVmaW5lIERDU1JfSEFMVCAgICAgICAgICAgKDE8PDMpCi0jZGVmaW5lIERDU1JfU1RFUCAgICAgICAgICAgKDE8PDIpCi0jZGVmaW5lIERDU1JfUFJWICAgICAgICAgICAgKDM8PDApCi0KLSNkZWZpbmUgRENTUl9DQVVTRV9OT05FICAgICAwCi0jZGVmaW5lIERDU1JfQ0FVU0VfU1dCUCAgICAgMQotI2RlZmluZSBEQ1NSX0NBVVNFX0hXQlAgICAgIDIKLSNkZWZpbmUgRENTUl9DQVVTRV9ERUJVR0lOVCAzCi0jZGVmaW5lIERDU1JfQ0FVU0VfU1RFUCAgICAgNAotI2RlZmluZSBEQ1NSX0NBVVNFX0hBTFQgICAgIDUKLQotI2RlZmluZSBNQ09OVFJPTF9UWVBFKHhsZW4pICAgICgweGZVTEw8PCgoeGxlbiktNCkpCi0jZGVmaW5lIE1DT05UUk9MX0RNT0RFKHhsZW4pICAgKDFVTEw8PCgoeGxlbiktNSkpCi0jZGVmaW5lIE1DT05UUk9MX01BU0tNQVgoeGxlbikgKDB4M2ZVTEw8PCgoeGxlbiktMTEpKQotCi0jZGVmaW5lIE1DT05UUk9MX1NFTEVDVCAgICAgKDE8PDE5KQotI2RlZmluZSBNQ09OVFJPTF9USU1JTkcgICAgICgxPDwxOCkKLSNkZWZpbmUgTUNPTlRST0xfQUNUSU9OICAgICAoMHgzZjw8MTIpCi0jZGVmaW5lIE1DT05UUk9MX0NIQUlOICAgICAgKDE8PDExKQotI2RlZmluZSBNQ09OVFJPTF9NQVRDSCAgICAgICgweGY8PDcpCi0jZGVmaW5lIE1DT05UUk9MX00gICAgICAgICAgKDE8PDYpCi0jZGVmaW5lIE1DT05UUk9MX0ggICAgICAgICAgKDE8PDUpCi0jZGVmaW5lIE1DT05UUk9MX1MgICAgICAgICAgKDE8PDQpCi0jZGVmaW5lIE1DT05UUk9MX1UgICAgICAgICAgKDE8PDMpCi0jZGVmaW5lIE1DT05UUk9MX0VYRUNVVEUgICAgKDE8PDIpCi0jZGVmaW5lIE1DT05UUk9MX1NUT1JFICAgICAgKDE8PDEpCi0jZGVmaW5lIE1DT05UUk9MX0xPQUQgICAgICAgKDE8PDApCi0KLSNkZWZpbmUgTUNPTlRST0xfVFlQRV9OT05FICAgICAgMAotI2RlZmluZSBNQ09OVFJPTF9UWVBFX01BVENIICAgICAyCi0KLSNkZWZpbmUgTUNPTlRST0xfQUNUSU9OX0RFQlVHX0VYQ0VQVElPTiAgIDAKLSNkZWZpbmUgTUNPTlRST0xfQUNUSU9OX0RFQlVHX01PREUgICAgICAgIDEKLSNkZWZpbmUgTUNPTlRST0xfQUNUSU9OX1RSQUNFX1NUQVJUICAgICAgIDIKLSNkZWZpbmUgTUNPTlRST0xfQUNUSU9OX1RSQUNFX1NUT1AgICAgICAgIDMKLSNkZWZpbmUgTUNPTlRST0xfQUNUSU9OX1RSQUNFX0VNSVQgICAgICAgIDQKLQotI2RlZmluZSBNQ09OVFJPTF9NQVRDSF9FUVVBTCAgICAgMAotI2RlZmluZSBNQ09OVFJPTF9NQVRDSF9OQVBPVCAgICAgMQotI2RlZmluZSBNQ09OVFJPTF9NQVRDSF9HRSAgICAgICAgMgotI2RlZmluZSBNQ09OVFJPTF9NQVRDSF9MVCAgICAgICAgMwotI2RlZmluZSBNQ09OVFJPTF9NQVRDSF9NQVNLX0xPVyAgNAotI2RlZmluZSBNQ09OVFJPTF9NQVRDSF9NQVNLX0hJR0ggNQotCi0jZGVmaW5lIE1JUF9TU0lQICAgICAgICAgICAgKDEgPDwgSVJRX1NfU09GVCkKLSNkZWZpbmUgTUlQX0hTSVAgICAgICAgICAgICAoMSA8PCBJUlFfSF9TT0ZUKQotI2RlZmluZSBNSVBfTVNJUCAgICAgICAgICAgICgxIDw8IElSUV9NX1NPRlQpCi0jZGVmaW5lIE1JUF9TVElQICAgICAgICAgICAgKDEgPDwgSVJRX1NfVElNRVIpCi0jZGVmaW5lIE1JUF9IVElQICAgICAgICAgICAgKDEgPDwgSVJRX0hfVElNRVIpCi0jZGVmaW5lIE1JUF9NVElQICAgICAgICAgICAgKDEgPDwgSVJRX01fVElNRVIpCi0jZGVmaW5lIE1JUF9TRUlQICAgICAgICAgICAgKDEgPDwgSVJRX1NfRVhUKQotI2RlZmluZSBNSVBfSEVJUCAgICAgICAgICAgICgxIDw8IElSUV9IX0VYVCkKLSNkZWZpbmUgTUlQX01FSVAgICAgICAgICAgICAoMSA8PCBJUlFfTV9FWFQpCi0KLSNkZWZpbmUgU0lQX1NTSVAgTUlQX1NTSVAKLSNkZWZpbmUgU0lQX1NUSVAgTUlQX1NUSVAKLQotI2RlZmluZSBQUlZfVSAwCi0jZGVmaW5lIFBSVl9TIDEKLSNkZWZpbmUgUFJWX0ggMgotI2RlZmluZSBQUlZfTSAzCi0KLSNkZWZpbmUgU1BUQlIzMl9NT0RFIDB4ODAwMDAwMDAKLSNkZWZpbmUgU1BUQlIzMl9BU0lEIDB4N0ZDMDAwMDAKLSNkZWZpbmUgU1BUQlIzMl9QUE4gIDB4MDAzRkZGRkYKLSNkZWZpbmUgU1BUQlI2NF9NT0RFIDB4RjAwMDAwMDAwMDAwMDAwMAotI2RlZmluZSBTUFRCUjY0X0FTSUQgMHgwRkZGRjAwMDAwMDAwMDAwCi0jZGVmaW5lIFNQVEJSNjRfUFBOICAweDAwMDAwRkZGRkZGRkZGRkYKLQotI2RlZmluZSBTUFRCUl9NT0RFX09GRiAgMAotI2RlZmluZSBTUFRCUl9NT0RFX1NWMzIgMQotI2RlZmluZSBTUFRCUl9NT0RFX1NWMzkgOAotI2RlZmluZSBTUFRCUl9NT0RFX1NWNDggOQotI2RlZmluZSBTUFRCUl9NT0RFX1NWNTcgMTAKLSNkZWZpbmUgU1BUQlJfTU9ERV9TVjY0IDExCi0KLSNkZWZpbmUgUE1QX1IgICAgIDB4MDEKLSNkZWZpbmUgUE1QX1cgICAgIDB4MDIKLSNkZWZpbmUgUE1QX1ggICAgIDB4MDQKLSNkZWZpbmUgUE1QX0EgICAgIDB4MTgKLSNkZWZpbmUgUE1QX0wgICAgIDB4ODAKLSNkZWZpbmUgUE1QX1NISUZUIDIKLQotI2RlZmluZSBQTVBfVE9SICAgMHgwOAotI2RlZmluZSBQTVBfTkE0ICAgMHgxMAotI2RlZmluZSBQTVBfTkFQT1QgMHgxOAotCi0jZGVmaW5lIElSUV9TX1NPRlQgICAxCi0jZGVmaW5lIElSUV9IX1NPRlQgICAyCi0jZGVmaW5lIElSUV9NX1NPRlQgICAzCi0jZGVmaW5lIElSUV9TX1RJTUVSICA1Ci0jZGVmaW5lIElSUV9IX1RJTUVSICA2Ci0jZGVmaW5lIElSUV9NX1RJTUVSICA3Ci0jZGVmaW5lIElSUV9TX0VYVCAgICA5Ci0jZGVmaW5lIElSUV9IX0VYVCAgICAxMAotI2RlZmluZSBJUlFfTV9FWFQgICAgMTEKLSNkZWZpbmUgSVJRX0NPUCAgICAgIDEyCi0jZGVmaW5lIElSUV9IT1NUICAgICAxMwotCi0jZGVmaW5lIERFRkFVTFRfUlNUVkVDICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIENMSU5UX0JBU0UgICAgICAgICAweDAyMDAwMDAwCi0jZGVmaW5lIENMSU5UX1NJWkUgICAgICAgICAweDAwMGMwMDAwCi0jZGVmaW5lIEVYVF9JT19CQVNFICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIERSQU1fQkFTRSAgICAgICAgICAweDgwMDAwMDAwCi0KLS8vIHBhZ2UgdGFibGUgZW50cnkgKFBURSkgZmllbGRzCi0jZGVmaW5lIFBURV9WICAgICAweDAwMSAvLyBWYWxpZAotI2RlZmluZSBQVEVfUiAgICAgMHgwMDIgLy8gUmVhZAotI2RlZmluZSBQVEVfVyAgICAgMHgwMDQgLy8gV3JpdGUKLSNkZWZpbmUgUFRFX1ggICAgIDB4MDA4IC8vIEV4ZWN1dGUKLSNkZWZpbmUgUFRFX1UgICAgIDB4MDEwIC8vIFVzZXIKLSNkZWZpbmUgUFRFX0cgICAgIDB4MDIwIC8vIEdsb2JhbAotI2RlZmluZSBQVEVfQSAgICAgMHgwNDAgLy8gQWNjZXNzZWQKLSNkZWZpbmUgUFRFX0QgICAgIDB4MDgwIC8vIERpcnR5Ci0jZGVmaW5lIFBURV9TT0ZUICAweDMwMCAvLyBSZXNlcnZlZCBmb3IgU29mdHdhcmUKLQotI2RlZmluZSBQVEVfUFBOX1NISUZUIDEwCi0KLSNkZWZpbmUgUFRFX1RBQkxFKFBURSkgKCgoUFRFKSAmIChQVEVfViB8IFBURV9SIHwgUFRFX1cgfCBQVEVfWCkpID09IFBURV9WKQotCi0jaWZkZWYgX19yaXNjdgotCi0jaWYgX19yaXNjdl94bGVuID09IDY0Ci0jIGRlZmluZSBNU1RBVFVTX1NEIE1TVEFUVVM2NF9TRAotIyBkZWZpbmUgU1NUQVRVU19TRCBTU1RBVFVTNjRfU0QKLSMgZGVmaW5lIFJJU0NWX1BHTEVWRUxfQklUUyA5Ci0jIGRlZmluZSBTUFRCUl9NT0RFIFNQVEJSNjRfTU9ERQotI2Vsc2UKLSMgZGVmaW5lIE1TVEFUVVNfU0QgTVNUQVRVUzMyX1NECi0jIGRlZmluZSBTU1RBVFVTX1NEIFNTVEFUVVMzMl9TRAotIyBkZWZpbmUgUklTQ1ZfUEdMRVZFTF9CSVRTIDEwCi0jIGRlZmluZSBTUFRCUl9NT0RFIFNQVEJSMzJfTU9ERQotI2VuZGlmCi0jZGVmaW5lIFJJU0NWX1BHU0hJRlQgMTIKLSNkZWZpbmUgUklTQ1ZfUEdTSVpFICgxIDw8IFJJU0NWX1BHU0hJRlQpCi0KLSNpZm5kZWYgX19BU1NFTUJMRVJfXwotCi0jaWZkZWYgX19HTlVDX18KLQotI2RlZmluZSByZWFkX2NzcihyZWcpICh7IHVuc2lnbmVkIGxvbmcgX190bXA7IFwKLSAgYXNtIHZvbGF0aWxlICgiY3NyciAlMCwgIiAjcmVnIDogIj1yIihfX3RtcCkpOyBcCi0gIF9fdG1wOyB9KQotCi0jZGVmaW5lIHdyaXRlX2NzcihyZWcsIHZhbCkgKHsgXAotICBhc20gdm9sYXRpbGUgKCJjc3J3ICIgI3JlZyAiLCAlMCIgOjogInJLIih2YWwpKTsgfSkKLQotI2RlZmluZSBzd2FwX2NzcihyZWcsIHZhbCkgKHsgdW5zaWduZWQgbG9uZyBfX3RtcDsgXAotICBhc20gdm9sYXRpbGUgKCJjc3JydyAlMCwgIiAjcmVnICIsICUxIiA6ICI9ciIoX190bXApIDogInJLIih2YWwpKTsgXAotICBfX3RtcDsgfSkKLQotI2RlZmluZSBzZXRfY3NyKHJlZywgYml0KSAoeyB1bnNpZ25lZCBsb25nIF9fdG1wOyBcCi0gIGFzbSB2b2xhdGlsZSAoImNzcnJzICUwLCAiICNyZWcgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAicksiKGJpdCkpOyBcCi0gIF9fdG1wOyB9KQotCi0jZGVmaW5lIGNsZWFyX2NzcihyZWcsIGJpdCkgKHsgdW5zaWduZWQgbG9uZyBfX3RtcDsgXAotICBhc20gdm9sYXRpbGUgKCJjc3JyYyAlMCwgIiAjcmVnICIsICUxIiA6ICI9ciIoX190bXApIDogInJLIihiaXQpKTsgXAotICBfX3RtcDsgfSkKLQotI2RlZmluZSByZHRpbWUoKSByZWFkX2Nzcih0aW1lKQotI2RlZmluZSByZGN5Y2xlKCkgcmVhZF9jc3IoY3ljbGUpCi0jZGVmaW5lIHJkaW5zdHJldCgpIHJlYWRfY3NyKGluc3RyZXQpCi0KLSNlbmRpZgotCi0jZW5kaWYKLQotI2VuZGlmCi0KLSNlbmRpZgotLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgcGFyc2Utb3Bjb2Rlcy4gICovCi0jaWZuZGVmIFJJU0NWX0VOQ09ESU5HX0gKLSNkZWZpbmUgUklTQ1ZfRU5DT0RJTkdfSAotI2RlZmluZSBNQVRDSF9CRVEgMHg2MwotI2RlZmluZSBNQVNLX0JFUSAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX0JORSAweDEwNjMKLSNkZWZpbmUgTUFTS19CTkUgIDB4NzA3ZgotI2RlZmluZSBNQVRDSF9CTFQgMHg0MDYzCi0jZGVmaW5lIE1BU0tfQkxUICAweDcwN2YKLSNkZWZpbmUgTUFUQ0hfQkdFIDB4NTA2MwotI2RlZmluZSBNQVNLX0JHRSAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX0JMVFUgMHg2MDYzCi0jZGVmaW5lIE1BU0tfQkxUVSAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX0JHRVUgMHg3MDYzCi0jZGVmaW5lIE1BU0tfQkdFVSAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX0pBTFIgMHg2NwotI2RlZmluZSBNQVNLX0pBTFIgIDB4NzA3ZgotI2RlZmluZSBNQVRDSF9KQUwgMHg2ZgotI2RlZmluZSBNQVNLX0pBTCAgMHg3ZgotI2RlZmluZSBNQVRDSF9MVUkgMHgzNwotI2RlZmluZSBNQVNLX0xVSSAgMHg3ZgotI2RlZmluZSBNQVRDSF9BVUlQQyAweDE3Ci0jZGVmaW5lIE1BU0tfQVVJUEMgIDB4N2YKLSNkZWZpbmUgTUFUQ0hfQURESSAweDEzCi0jZGVmaW5lIE1BU0tfQURESSAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX1NMTEkgMHgxMDEzCi0jZGVmaW5lIE1BU0tfU0xMSSAgMHhmYzAwNzA3ZgotI2RlZmluZSBNQVRDSF9TTFRJIDB4MjAxMwotI2RlZmluZSBNQVNLX1NMVEkgIDB4NzA3ZgotI2RlZmluZSBNQVRDSF9TTFRJVSAweDMwMTMKLSNkZWZpbmUgTUFTS19TTFRJVSAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX1hPUkkgMHg0MDEzCi0jZGVmaW5lIE1BU0tfWE9SSSAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX1NSTEkgMHg1MDEzCi0jZGVmaW5lIE1BU0tfU1JMSSAgMHhmYzAwNzA3ZgotI2RlZmluZSBNQVRDSF9TUkFJIDB4NDAwMDUwMTMKLSNkZWZpbmUgTUFTS19TUkFJICAweGZjMDA3MDdmCi0jZGVmaW5lIE1BVENIX09SSSAweDYwMTMKLSNkZWZpbmUgTUFTS19PUkkgIDB4NzA3ZgotI2RlZmluZSBNQVRDSF9BTkRJIDB4NzAxMwotI2RlZmluZSBNQVNLX0FOREkgIDB4NzA3ZgotI2RlZmluZSBNQVRDSF9BREQgMHgzMwotI2RlZmluZSBNQVNLX0FERCAgMHhmZTAwNzA3ZgotI2RlZmluZSBNQVRDSF9TVUIgMHg0MDAwMDAzMwotI2RlZmluZSBNQVNLX1NVQiAgMHhmZTAwNzA3ZgotI2RlZmluZSBNQVRDSF9TTEwgMHgxMDMzCi0jZGVmaW5lIE1BU0tfU0xMICAweGZlMDA3MDdmCi0jZGVmaW5lIE1BVENIX1NMVCAweDIwMzMKLSNkZWZpbmUgTUFTS19TTFQgIDB4ZmUwMDcwN2YKLSNkZWZpbmUgTUFUQ0hfU0xUVSAweDMwMzMKLSNkZWZpbmUgTUFTS19TTFRVICAweGZlMDA3MDdmCi0jZGVmaW5lIE1BVENIX1hPUiAweDQwMzMKLSNkZWZpbmUgTUFTS19YT1IgIDB4ZmUwMDcwN2YKLSNkZWZpbmUgTUFUQ0hfU1JMIDB4NTAzMwotI2RlZmluZSBNQVNLX1NSTCAgMHhmZTAwNzA3ZgotI2RlZmluZSBNQVRDSF9TUkEgMHg0MDAwNTAzMwotI2RlZmluZSBNQVNLX1NSQSAgMHhmZTAwNzA3ZgotI2RlZmluZSBNQVRDSF9PUiAweDYwMzMKLSNkZWZpbmUgTUFTS19PUiAgMHhmZTAwNzA3ZgotI2RlZmluZSBNQVRDSF9BTkQgMHg3MDMzCi0jZGVmaW5lIE1BU0tfQU5EICAweGZlMDA3MDdmCi0jZGVmaW5lIE1BVENIX0FERElXIDB4MWIKLSNkZWZpbmUgTUFTS19BRERJVyAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX1NMTElXIDB4MTAxYgotI2RlZmluZSBNQVNLX1NMTElXICAweGZlMDA3MDdmCi0jZGVmaW5lIE1BVENIX1NSTElXIDB4NTAxYgotI2RlZmluZSBNQVNLX1NSTElXICAweGZlMDA3MDdmCi0jZGVmaW5lIE1BVENIX1NSQUlXIDB4NDAwMDUwMWIKLSNkZWZpbmUgTUFTS19TUkFJVyAgMHhmZTAwNzA3ZgotI2RlZmluZSBNQVRDSF9BRERXIDB4M2IKLSNkZWZpbmUgTUFTS19BRERXICAweGZlMDA3MDdmCi0jZGVmaW5lIE1BVENIX1NVQlcgMHg0MDAwMDAzYgotI2RlZmluZSBNQVNLX1NVQlcgIDB4ZmUwMDcwN2YKLSNkZWZpbmUgTUFUQ0hfU0xMVyAweDEwM2IKLSNkZWZpbmUgTUFTS19TTExXICAweGZlMDA3MDdmCi0jZGVmaW5lIE1BVENIX1NSTFcgMHg1MDNiCi0jZGVmaW5lIE1BU0tfU1JMVyAgMHhmZTAwNzA3ZgotI2RlZmluZSBNQVRDSF9TUkFXIDB4NDAwMDUwM2IKLSNkZWZpbmUgTUFTS19TUkFXICAweGZlMDA3MDdmCi0jZGVmaW5lIE1BVENIX0xCIDB4MwotI2RlZmluZSBNQVNLX0xCICAweDcwN2YKLSNkZWZpbmUgTUFUQ0hfTEggMHgxMDAzCi0jZGVmaW5lIE1BU0tfTEggIDB4NzA3ZgotI2RlZmluZSBNQVRDSF9MVyAweDIwMDMKLSNkZWZpbmUgTUFTS19MVyAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX0xEIDB4MzAwMwotI2RlZmluZSBNQVNLX0xEICAweDcwN2YKLSNkZWZpbmUgTUFUQ0hfTEJVIDB4NDAwMwotI2RlZmluZSBNQVNLX0xCVSAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX0xIVSAweDUwMDMKLSNkZWZpbmUgTUFTS19MSFUgIDB4NzA3ZgotI2RlZmluZSBNQVRDSF9MV1UgMHg2MDAzCi0jZGVmaW5lIE1BU0tfTFdVICAweDcwN2YKLSNkZWZpbmUgTUFUQ0hfU0IgMHgyMwotI2RlZmluZSBNQVNLX1NCICAweDcwN2YKLSNkZWZpbmUgTUFUQ0hfU0ggMHgxMDIzCi0jZGVmaW5lIE1BU0tfU0ggIDB4NzA3ZgotI2RlZmluZSBNQVRDSF9TVyAweDIwMjMKLSNkZWZpbmUgTUFTS19TVyAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX1NEIDB4MzAyMwotI2RlZmluZSBNQVNLX1NEICAweDcwN2YKLSNkZWZpbmUgTUFUQ0hfRkVOQ0UgMHhmCi0jZGVmaW5lIE1BU0tfRkVOQ0UgIDB4NzA3ZgotI2RlZmluZSBNQVRDSF9GRU5DRV9JIDB4MTAwZgotI2RlZmluZSBNQVNLX0ZFTkNFX0kgIDB4NzA3ZgotI2RlZmluZSBNQVRDSF9NVUwgMHgyMDAwMDMzCi0jZGVmaW5lIE1BU0tfTVVMICAweGZlMDA3MDdmCi0jZGVmaW5lIE1BVENIX01VTEggMHgyMDAxMDMzCi0jZGVmaW5lIE1BU0tfTVVMSCAgMHhmZTAwNzA3ZgotI2RlZmluZSBNQVRDSF9NVUxIU1UgMHgyMDAyMDMzCi0jZGVmaW5lIE1BU0tfTVVMSFNVICAweGZlMDA3MDdmCi0jZGVmaW5lIE1BVENIX01VTEhVIDB4MjAwMzAzMwotI2RlZmluZSBNQVNLX01VTEhVICAweGZlMDA3MDdmCi0jZGVmaW5lIE1BVENIX0RJViAweDIwMDQwMzMKLSNkZWZpbmUgTUFTS19ESVYgIDB4ZmUwMDcwN2YKLSNkZWZpbmUgTUFUQ0hfRElWVSAweDIwMDUwMzMKLSNkZWZpbmUgTUFTS19ESVZVICAweGZlMDA3MDdmCi0jZGVmaW5lIE1BVENIX1JFTSAweDIwMDYwMzMKLSNkZWZpbmUgTUFTS19SRU0gIDB4ZmUwMDcwN2YKLSNkZWZpbmUgTUFUQ0hfUkVNVSAweDIwMDcwMzMKLSNkZWZpbmUgTUFTS19SRU1VICAweGZlMDA3MDdmCi0jZGVmaW5lIE1BVENIX01VTFcgMHgyMDAwMDNiCi0jZGVmaW5lIE1BU0tfTVVMVyAgMHhmZTAwNzA3ZgotI2RlZmluZSBNQVRDSF9ESVZXIDB4MjAwNDAzYgotI2RlZmluZSBNQVNLX0RJVlcgIDB4ZmUwMDcwN2YKLSNkZWZpbmUgTUFUQ0hfRElWVVcgMHgyMDA1MDNiCi0jZGVmaW5lIE1BU0tfRElWVVcgIDB4ZmUwMDcwN2YKLSNkZWZpbmUgTUFUQ0hfUkVNVyAweDIwMDYwM2IKLSNkZWZpbmUgTUFTS19SRU1XICAweGZlMDA3MDdmCi0jZGVmaW5lIE1BVENIX1JFTVVXIDB4MjAwNzAzYgotI2RlZmluZSBNQVNLX1JFTVVXICAweGZlMDA3MDdmCi0jZGVmaW5lIE1BVENIX0FNT0FERF9XIDB4MjAyZgotI2RlZmluZSBNQVNLX0FNT0FERF9XICAweGY4MDA3MDdmCi0jZGVmaW5lIE1BVENIX0FNT1hPUl9XIDB4MjAwMDIwMmYKLSNkZWZpbmUgTUFTS19BTU9YT1JfVyAgMHhmODAwNzA3ZgotI2RlZmluZSBNQVRDSF9BTU9PUl9XIDB4NDAwMDIwMmYKLSNkZWZpbmUgTUFTS19BTU9PUl9XICAweGY4MDA3MDdmCi0jZGVmaW5lIE1BVENIX0FNT0FORF9XIDB4NjAwMDIwMmYKLSNkZWZpbmUgTUFTS19BTU9BTkRfVyAgMHhmODAwNzA3ZgotI2RlZmluZSBNQVRDSF9BTU9NSU5fVyAweDgwMDAyMDJmCi0jZGVmaW5lIE1BU0tfQU1PTUlOX1cgIDB4ZjgwMDcwN2YKLSNkZWZpbmUgTUFUQ0hfQU1PTUFYX1cgMHhhMDAwMjAyZgotI2RlZmluZSBNQVNLX0FNT01BWF9XICAweGY4MDA3MDdmCi0jZGVmaW5lIE1BVENIX0FNT01JTlVfVyAweGMwMDAyMDJmCi0jZGVmaW5lIE1BU0tfQU1PTUlOVV9XICAweGY4MDA3MDdmCi0jZGVmaW5lIE1BVENIX0FNT01BWFVfVyAweGUwMDAyMDJmCi0jZGVmaW5lIE1BU0tfQU1PTUFYVV9XICAweGY4MDA3MDdmCi0jZGVmaW5lIE1BVENIX0FNT1NXQVBfVyAweDgwMDIwMmYKLSNkZWZpbmUgTUFTS19BTU9TV0FQX1cgIDB4ZjgwMDcwN2YKLSNkZWZpbmUgTUFUQ0hfTFJfVyAweDEwMDAyMDJmCi0jZGVmaW5lIE1BU0tfTFJfVyAgMHhmOWYwNzA3ZgotI2RlZmluZSBNQVRDSF9TQ19XIDB4MTgwMDIwMmYKLSNkZWZpbmUgTUFTS19TQ19XICAweGY4MDA3MDdmCi0jZGVmaW5lIE1BVENIX0FNT0FERF9EIDB4MzAyZgotI2RlZmluZSBNQVNLX0FNT0FERF9EICAweGY4MDA3MDdmCi0jZGVmaW5lIE1BVENIX0FNT1hPUl9EIDB4MjAwMDMwMmYKLSNkZWZpbmUgTUFTS19BTU9YT1JfRCAgMHhmODAwNzA3ZgotI2RlZmluZSBNQVRDSF9BTU9PUl9EIDB4NDAwMDMwMmYKLSNkZWZpbmUgTUFTS19BTU9PUl9EICAweGY4MDA3MDdmCi0jZGVmaW5lIE1BVENIX0FNT0FORF9EIDB4NjAwMDMwMmYKLSNkZWZpbmUgTUFTS19BTU9BTkRfRCAgMHhmODAwNzA3ZgotI2RlZmluZSBNQVRDSF9BTU9NSU5fRCAweDgwMDAzMDJmCi0jZGVmaW5lIE1BU0tfQU1PTUlOX0QgIDB4ZjgwMDcwN2YKLSNkZWZpbmUgTUFUQ0hfQU1PTUFYX0QgMHhhMDAwMzAyZgotI2RlZmluZSBNQVNLX0FNT01BWF9EICAweGY4MDA3MDdmCi0jZGVmaW5lIE1BVENIX0FNT01JTlVfRCAweGMwMDAzMDJmCi0jZGVmaW5lIE1BU0tfQU1PTUlOVV9EICAweGY4MDA3MDdmCi0jZGVmaW5lIE1BVENIX0FNT01BWFVfRCAweGUwMDAzMDJmCi0jZGVmaW5lIE1BU0tfQU1PTUFYVV9EICAweGY4MDA3MDdmCi0jZGVmaW5lIE1BVENIX0FNT1NXQVBfRCAweDgwMDMwMmYKLSNkZWZpbmUgTUFTS19BTU9TV0FQX0QgIDB4ZjgwMDcwN2YKLSNkZWZpbmUgTUFUQ0hfTFJfRCAweDEwMDAzMDJmCi0jZGVmaW5lIE1BU0tfTFJfRCAgMHhmOWYwNzA3ZgotI2RlZmluZSBNQVRDSF9TQ19EIDB4MTgwMDMwMmYKLSNkZWZpbmUgTUFTS19TQ19EICAweGY4MDA3MDdmCi0jZGVmaW5lIE1BVENIX0VDQUxMIDB4NzMKLSNkZWZpbmUgTUFTS19FQ0FMTCAgMHhmZmZmZmZmZgotI2RlZmluZSBNQVRDSF9FQlJFQUsgMHgxMDAwNzMKLSNkZWZpbmUgTUFTS19FQlJFQUsgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTUFUQ0hfVVJFVCAweDIwMDA3MwotI2RlZmluZSBNQVNLX1VSRVQgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTUFUQ0hfU1JFVCAweDEwMjAwMDczCi0jZGVmaW5lIE1BU0tfU1JFVCAgMHhmZmZmZmZmZgotI2RlZmluZSBNQVRDSF9NUkVUIDB4MzAyMDAwNzMKLSNkZWZpbmUgTUFTS19NUkVUICAweGZmZmZmZmZmCi0jZGVmaW5lIE1BVENIX0RSRVQgMHg3YjIwMDA3MwotI2RlZmluZSBNQVNLX0RSRVQgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTUFUQ0hfU0ZFTkNFX1ZNQSAweDEyMDAwMDczCi0jZGVmaW5lIE1BU0tfU0ZFTkNFX1ZNQSAgMHhmZTAwN2ZmZgotI2RlZmluZSBNQVRDSF9XRkkgMHgxMDUwMDA3MwotI2RlZmluZSBNQVNLX1dGSSAgMHhmZmZmZmZmZgotI2RlZmluZSBNQVRDSF9DU1JSVyAweDEwNzMKLSNkZWZpbmUgTUFTS19DU1JSVyAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX0NTUlJTIDB4MjA3MwotI2RlZmluZSBNQVNLX0NTUlJTICAweDcwN2YKLSNkZWZpbmUgTUFUQ0hfQ1NSUkMgMHgzMDczCi0jZGVmaW5lIE1BU0tfQ1NSUkMgIDB4NzA3ZgotI2RlZmluZSBNQVRDSF9DU1JSV0kgMHg1MDczCi0jZGVmaW5lIE1BU0tfQ1NSUldJICAweDcwN2YKLSNkZWZpbmUgTUFUQ0hfQ1NSUlNJIDB4NjA3MwotI2RlZmluZSBNQVNLX0NTUlJTSSAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX0NTUlJDSSAweDcwNzMKLSNkZWZpbmUgTUFTS19DU1JSQ0kgIDB4NzA3ZgotI2RlZmluZSBNQVRDSF9GQUREX1MgMHg1MwotI2RlZmluZSBNQVNLX0ZBRERfUyAgMHhmZTAwMDA3ZgotI2RlZmluZSBNQVRDSF9GU1VCX1MgMHg4MDAwMDUzCi0jZGVmaW5lIE1BU0tfRlNVQl9TICAweGZlMDAwMDdmCi0jZGVmaW5lIE1BVENIX0ZNVUxfUyAweDEwMDAwMDUzCi0jZGVmaW5lIE1BU0tfRk1VTF9TICAweGZlMDAwMDdmCi0jZGVmaW5lIE1BVENIX0ZESVZfUyAweDE4MDAwMDUzCi0jZGVmaW5lIE1BU0tfRkRJVl9TICAweGZlMDAwMDdmCi0jZGVmaW5lIE1BVENIX0ZTR05KX1MgMHgyMDAwMDA1MwotI2RlZmluZSBNQVNLX0ZTR05KX1MgIDB4ZmUwMDcwN2YKLSNkZWZpbmUgTUFUQ0hfRlNHTkpOX1MgMHgyMDAwMTA1MwotI2RlZmluZSBNQVNLX0ZTR05KTl9TICAweGZlMDA3MDdmCi0jZGVmaW5lIE1BVENIX0ZTR05KWF9TIDB4MjAwMDIwNTMKLSNkZWZpbmUgTUFTS19GU0dOSlhfUyAgMHhmZTAwNzA3ZgotI2RlZmluZSBNQVRDSF9GTUlOX1MgMHgyODAwMDA1MwotI2RlZmluZSBNQVNLX0ZNSU5fUyAgMHhmZTAwNzA3ZgotI2RlZmluZSBNQVRDSF9GTUFYX1MgMHgyODAwMTA1MwotI2RlZmluZSBNQVNLX0ZNQVhfUyAgMHhmZTAwNzA3ZgotI2RlZmluZSBNQVRDSF9GU1FSVF9TIDB4NTgwMDAwNTMKLSNkZWZpbmUgTUFTS19GU1FSVF9TICAweGZmZjAwMDdmCi0jZGVmaW5lIE1BVENIX0ZBRERfRCAweDIwMDAwNTMKLSNkZWZpbmUgTUFTS19GQUREX0QgIDB4ZmUwMDAwN2YKLSNkZWZpbmUgTUFUQ0hfRlNVQl9EIDB4YTAwMDA1MwotI2RlZmluZSBNQVNLX0ZTVUJfRCAgMHhmZTAwMDA3ZgotI2RlZmluZSBNQVRDSF9GTVVMX0QgMHgxMjAwMDA1MwotI2RlZmluZSBNQVNLX0ZNVUxfRCAgMHhmZTAwMDA3ZgotI2RlZmluZSBNQVRDSF9GRElWX0QgMHgxYTAwMDA1MwotI2RlZmluZSBNQVNLX0ZESVZfRCAgMHhmZTAwMDA3ZgotI2RlZmluZSBNQVRDSF9GU0dOSl9EIDB4MjIwMDAwNTMKLSNkZWZpbmUgTUFTS19GU0dOSl9EICAweGZlMDA3MDdmCi0jZGVmaW5lIE1BVENIX0ZTR05KTl9EIDB4MjIwMDEwNTMKLSNkZWZpbmUgTUFTS19GU0dOSk5fRCAgMHhmZTAwNzA3ZgotI2RlZmluZSBNQVRDSF9GU0dOSlhfRCAweDIyMDAyMDUzCi0jZGVmaW5lIE1BU0tfRlNHTkpYX0QgIDB4ZmUwMDcwN2YKLSNkZWZpbmUgTUFUQ0hfRk1JTl9EIDB4MmEwMDAwNTMKLSNkZWZpbmUgTUFTS19GTUlOX0QgIDB4ZmUwMDcwN2YKLSNkZWZpbmUgTUFUQ0hfRk1BWF9EIDB4MmEwMDEwNTMKLSNkZWZpbmUgTUFTS19GTUFYX0QgIDB4ZmUwMDcwN2YKLSNkZWZpbmUgTUFUQ0hfRkNWVF9TX0QgMHg0MDEwMDA1MwotI2RlZmluZSBNQVNLX0ZDVlRfU19EICAweGZmZjAwMDdmCi0jZGVmaW5lIE1BVENIX0ZDVlRfRF9TIDB4NDIwMDAwNTMKLSNkZWZpbmUgTUFTS19GQ1ZUX0RfUyAgMHhmZmYwMDA3ZgotI2RlZmluZSBNQVRDSF9GU1FSVF9EIDB4NWEwMDAwNTMKLSNkZWZpbmUgTUFTS19GU1FSVF9EICAweGZmZjAwMDdmCi0jZGVmaW5lIE1BVENIX0ZBRERfUSAweDYwMDAwNTMKLSNkZWZpbmUgTUFTS19GQUREX1EgIDB4ZmUwMDAwN2YKLSNkZWZpbmUgTUFUQ0hfRlNVQl9RIDB4ZTAwMDA1MwotI2RlZmluZSBNQVNLX0ZTVUJfUSAgMHhmZTAwMDA3ZgotI2RlZmluZSBNQVRDSF9GTVVMX1EgMHgxNjAwMDA1MwotI2RlZmluZSBNQVNLX0ZNVUxfUSAgMHhmZTAwMDA3ZgotI2RlZmluZSBNQVRDSF9GRElWX1EgMHgxZTAwMDA1MwotI2RlZmluZSBNQVNLX0ZESVZfUSAgMHhmZTAwMDA3ZgotI2RlZmluZSBNQVRDSF9GU0dOSl9RIDB4MjYwMDAwNTMKLSNkZWZpbmUgTUFTS19GU0dOSl9RICAweGZlMDA3MDdmCi0jZGVmaW5lIE1BVENIX0ZTR05KTl9RIDB4MjYwMDEwNTMKLSNkZWZpbmUgTUFTS19GU0dOSk5fUSAgMHhmZTAwNzA3ZgotI2RlZmluZSBNQVRDSF9GU0dOSlhfUSAweDI2MDAyMDUzCi0jZGVmaW5lIE1BU0tfRlNHTkpYX1EgIDB4ZmUwMDcwN2YKLSNkZWZpbmUgTUFUQ0hfRk1JTl9RIDB4MmUwMDAwNTMKLSNkZWZpbmUgTUFTS19GTUlOX1EgIDB4ZmUwMDcwN2YKLSNkZWZpbmUgTUFUQ0hfRk1BWF9RIDB4MmUwMDEwNTMKLSNkZWZpbmUgTUFTS19GTUFYX1EgIDB4ZmUwMDcwN2YKLSNkZWZpbmUgTUFUQ0hfRkNWVF9TX1EgMHg0MDMwMDA1MwotI2RlZmluZSBNQVNLX0ZDVlRfU19RICAweGZmZjAwMDdmCi0jZGVmaW5lIE1BVENIX0ZDVlRfUV9TIDB4NDYwMDAwNTMKLSNkZWZpbmUgTUFTS19GQ1ZUX1FfUyAgMHhmZmYwMDA3ZgotI2RlZmluZSBNQVRDSF9GQ1ZUX0RfUSAweDQyMzAwMDUzCi0jZGVmaW5lIE1BU0tfRkNWVF9EX1EgIDB4ZmZmMDAwN2YKLSNkZWZpbmUgTUFUQ0hfRkNWVF9RX0QgMHg0NjEwMDA1MwotI2RlZmluZSBNQVNLX0ZDVlRfUV9EICAweGZmZjAwMDdmCi0jZGVmaW5lIE1BVENIX0ZTUVJUX1EgMHg1ZTAwMDA1MwotI2RlZmluZSBNQVNLX0ZTUVJUX1EgIDB4ZmZmMDAwN2YKLSNkZWZpbmUgTUFUQ0hfRkxFX1MgMHhhMDAwMDA1MwotI2RlZmluZSBNQVNLX0ZMRV9TICAweGZlMDA3MDdmCi0jZGVmaW5lIE1BVENIX0ZMVF9TIDB4YTAwMDEwNTMKLSNkZWZpbmUgTUFTS19GTFRfUyAgMHhmZTAwNzA3ZgotI2RlZmluZSBNQVRDSF9GRVFfUyAweGEwMDAyMDUzCi0jZGVmaW5lIE1BU0tfRkVRX1MgIDB4ZmUwMDcwN2YKLSNkZWZpbmUgTUFUQ0hfRkxFX0QgMHhhMjAwMDA1MwotI2RlZmluZSBNQVNLX0ZMRV9EICAweGZlMDA3MDdmCi0jZGVmaW5lIE1BVENIX0ZMVF9EIDB4YTIwMDEwNTMKLSNkZWZpbmUgTUFTS19GTFRfRCAgMHhmZTAwNzA3ZgotI2RlZmluZSBNQVRDSF9GRVFfRCAweGEyMDAyMDUzCi0jZGVmaW5lIE1BU0tfRkVRX0QgIDB4ZmUwMDcwN2YKLSNkZWZpbmUgTUFUQ0hfRkxFX1EgMHhhNjAwMDA1MwotI2RlZmluZSBNQVNLX0ZMRV9RICAweGZlMDA3MDdmCi0jZGVmaW5lIE1BVENIX0ZMVF9RIDB4YTYwMDEwNTMKLSNkZWZpbmUgTUFTS19GTFRfUSAgMHhmZTAwNzA3ZgotI2RlZmluZSBNQVRDSF9GRVFfUSAweGE2MDAyMDUzCi0jZGVmaW5lIE1BU0tfRkVRX1EgIDB4ZmUwMDcwN2YKLSNkZWZpbmUgTUFUQ0hfRkNWVF9XX1MgMHhjMDAwMDA1MwotI2RlZmluZSBNQVNLX0ZDVlRfV19TICAweGZmZjAwMDdmCi0jZGVmaW5lIE1BVENIX0ZDVlRfV1VfUyAweGMwMTAwMDUzCi0jZGVmaW5lIE1BU0tfRkNWVF9XVV9TICAweGZmZjAwMDdmCi0jZGVmaW5lIE1BVENIX0ZDVlRfTF9TIDB4YzAyMDAwNTMKLSNkZWZpbmUgTUFTS19GQ1ZUX0xfUyAgMHhmZmYwMDA3ZgotI2RlZmluZSBNQVRDSF9GQ1ZUX0xVX1MgMHhjMDMwMDA1MwotI2RlZmluZSBNQVNLX0ZDVlRfTFVfUyAgMHhmZmYwMDA3ZgotI2RlZmluZSBNQVRDSF9GTVZfWF9XIDB4ZTAwMDAwNTMKLSNkZWZpbmUgTUFTS19GTVZfWF9XICAweGZmZjA3MDdmCi0jZGVmaW5lIE1BVENIX0ZDTEFTU19TIDB4ZTAwMDEwNTMKLSNkZWZpbmUgTUFTS19GQ0xBU1NfUyAgMHhmZmYwNzA3ZgotI2RlZmluZSBNQVRDSF9GQ1ZUX1dfRCAweGMyMDAwMDUzCi0jZGVmaW5lIE1BU0tfRkNWVF9XX0QgIDB4ZmZmMDAwN2YKLSNkZWZpbmUgTUFUQ0hfRkNWVF9XVV9EIDB4YzIxMDAwNTMKLSNkZWZpbmUgTUFTS19GQ1ZUX1dVX0QgIDB4ZmZmMDAwN2YKLSNkZWZpbmUgTUFUQ0hfRkNWVF9MX0QgMHhjMjIwMDA1MwotI2RlZmluZSBNQVNLX0ZDVlRfTF9EICAweGZmZjAwMDdmCi0jZGVmaW5lIE1BVENIX0ZDVlRfTFVfRCAweGMyMzAwMDUzCi0jZGVmaW5lIE1BU0tfRkNWVF9MVV9EICAweGZmZjAwMDdmCi0jZGVmaW5lIE1BVENIX0ZNVl9YX0QgMHhlMjAwMDA1MwotI2RlZmluZSBNQVNLX0ZNVl9YX0QgIDB4ZmZmMDcwN2YKLSNkZWZpbmUgTUFUQ0hfRkNMQVNTX0QgMHhlMjAwMTA1MwotI2RlZmluZSBNQVNLX0ZDTEFTU19EICAweGZmZjA3MDdmCi0jZGVmaW5lIE1BVENIX0ZDVlRfV19RIDB4YzYwMDAwNTMKLSNkZWZpbmUgTUFTS19GQ1ZUX1dfUSAgMHhmZmYwMDA3ZgotI2RlZmluZSBNQVRDSF9GQ1ZUX1dVX1EgMHhjNjEwMDA1MwotI2RlZmluZSBNQVNLX0ZDVlRfV1VfUSAgMHhmZmYwMDA3ZgotI2RlZmluZSBNQVRDSF9GQ1ZUX0xfUSAweGM2MjAwMDUzCi0jZGVmaW5lIE1BU0tfRkNWVF9MX1EgIDB4ZmZmMDAwN2YKLSNkZWZpbmUgTUFUQ0hfRkNWVF9MVV9RIDB4YzYzMDAwNTMKLSNkZWZpbmUgTUFTS19GQ1ZUX0xVX1EgIDB4ZmZmMDAwN2YKLSNkZWZpbmUgTUFUQ0hfRk1WX1hfUSAweGU2MDAwMDUzCi0jZGVmaW5lIE1BU0tfRk1WX1hfUSAgMHhmZmYwNzA3ZgotI2RlZmluZSBNQVRDSF9GQ0xBU1NfUSAweGU2MDAxMDUzCi0jZGVmaW5lIE1BU0tfRkNMQVNTX1EgIDB4ZmZmMDcwN2YKLSNkZWZpbmUgTUFUQ0hfRkNWVF9TX1cgMHhkMDAwMDA1MwotI2RlZmluZSBNQVNLX0ZDVlRfU19XICAweGZmZjAwMDdmCi0jZGVmaW5lIE1BVENIX0ZDVlRfU19XVSAweGQwMTAwMDUzCi0jZGVmaW5lIE1BU0tfRkNWVF9TX1dVICAweGZmZjAwMDdmCi0jZGVmaW5lIE1BVENIX0ZDVlRfU19MIDB4ZDAyMDAwNTMKLSNkZWZpbmUgTUFTS19GQ1ZUX1NfTCAgMHhmZmYwMDA3ZgotI2RlZmluZSBNQVRDSF9GQ1ZUX1NfTFUgMHhkMDMwMDA1MwotI2RlZmluZSBNQVNLX0ZDVlRfU19MVSAgMHhmZmYwMDA3ZgotI2RlZmluZSBNQVRDSF9GTVZfV19YIDB4ZjAwMDAwNTMKLSNkZWZpbmUgTUFTS19GTVZfV19YICAweGZmZjA3MDdmCi0jZGVmaW5lIE1BVENIX0ZDVlRfRF9XIDB4ZDIwMDAwNTMKLSNkZWZpbmUgTUFTS19GQ1ZUX0RfVyAgMHhmZmYwMDA3ZgotI2RlZmluZSBNQVRDSF9GQ1ZUX0RfV1UgMHhkMjEwMDA1MwotI2RlZmluZSBNQVNLX0ZDVlRfRF9XVSAgMHhmZmYwMDA3ZgotI2RlZmluZSBNQVRDSF9GQ1ZUX0RfTCAweGQyMjAwMDUzCi0jZGVmaW5lIE1BU0tfRkNWVF9EX0wgIDB4ZmZmMDAwN2YKLSNkZWZpbmUgTUFUQ0hfRkNWVF9EX0xVIDB4ZDIzMDAwNTMKLSNkZWZpbmUgTUFTS19GQ1ZUX0RfTFUgIDB4ZmZmMDAwN2YKLSNkZWZpbmUgTUFUQ0hfRk1WX0RfWCAweGYyMDAwMDUzCi0jZGVmaW5lIE1BU0tfRk1WX0RfWCAgMHhmZmYwNzA3ZgotI2RlZmluZSBNQVRDSF9GQ1ZUX1FfVyAweGQ2MDAwMDUzCi0jZGVmaW5lIE1BU0tfRkNWVF9RX1cgIDB4ZmZmMDAwN2YKLSNkZWZpbmUgTUFUQ0hfRkNWVF9RX1dVIDB4ZDYxMDAwNTMKLSNkZWZpbmUgTUFTS19GQ1ZUX1FfV1UgIDB4ZmZmMDAwN2YKLSNkZWZpbmUgTUFUQ0hfRkNWVF9RX0wgMHhkNjIwMDA1MwotI2RlZmluZSBNQVNLX0ZDVlRfUV9MICAweGZmZjAwMDdmCi0jZGVmaW5lIE1BVENIX0ZDVlRfUV9MVSAweGQ2MzAwMDUzCi0jZGVmaW5lIE1BU0tfRkNWVF9RX0xVICAweGZmZjAwMDdmCi0jZGVmaW5lIE1BVENIX0ZNVl9RX1ggMHhmNjAwMDA1MwotI2RlZmluZSBNQVNLX0ZNVl9RX1ggIDB4ZmZmMDcwN2YKLSNkZWZpbmUgTUFUQ0hfRkxXIDB4MjAwNwotI2RlZmluZSBNQVNLX0ZMVyAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX0ZMRCAweDMwMDcKLSNkZWZpbmUgTUFTS19GTEQgIDB4NzA3ZgotI2RlZmluZSBNQVRDSF9GTFEgMHg0MDA3Ci0jZGVmaW5lIE1BU0tfRkxRICAweDcwN2YKLSNkZWZpbmUgTUFUQ0hfRlNXIDB4MjAyNwotI2RlZmluZSBNQVNLX0ZTVyAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX0ZTRCAweDMwMjcKLSNkZWZpbmUgTUFTS19GU0QgIDB4NzA3ZgotI2RlZmluZSBNQVRDSF9GU1EgMHg0MDI3Ci0jZGVmaW5lIE1BU0tfRlNRICAweDcwN2YKLSNkZWZpbmUgTUFUQ0hfRk1BRERfUyAweDQzCi0jZGVmaW5lIE1BU0tfRk1BRERfUyAgMHg2MDAwMDdmCi0jZGVmaW5lIE1BVENIX0ZNU1VCX1MgMHg0NwotI2RlZmluZSBNQVNLX0ZNU1VCX1MgIDB4NjAwMDA3ZgotI2RlZmluZSBNQVRDSF9GTk1TVUJfUyAweDRiCi0jZGVmaW5lIE1BU0tfRk5NU1VCX1MgIDB4NjAwMDA3ZgotI2RlZmluZSBNQVRDSF9GTk1BRERfUyAweDRmCi0jZGVmaW5lIE1BU0tfRk5NQUREX1MgIDB4NjAwMDA3ZgotI2RlZmluZSBNQVRDSF9GTUFERF9EIDB4MjAwMDA0MwotI2RlZmluZSBNQVNLX0ZNQUREX0QgIDB4NjAwMDA3ZgotI2RlZmluZSBNQVRDSF9GTVNVQl9EIDB4MjAwMDA0NwotI2RlZmluZSBNQVNLX0ZNU1VCX0QgIDB4NjAwMDA3ZgotI2RlZmluZSBNQVRDSF9GTk1TVUJfRCAweDIwMDAwNGIKLSNkZWZpbmUgTUFTS19GTk1TVUJfRCAgMHg2MDAwMDdmCi0jZGVmaW5lIE1BVENIX0ZOTUFERF9EIDB4MjAwMDA0ZgotI2RlZmluZSBNQVNLX0ZOTUFERF9EICAweDYwMDAwN2YKLSNkZWZpbmUgTUFUQ0hfRk1BRERfUSAweDYwMDAwNDMKLSNkZWZpbmUgTUFTS19GTUFERF9RICAweDYwMDAwN2YKLSNkZWZpbmUgTUFUQ0hfRk1TVUJfUSAweDYwMDAwNDcKLSNkZWZpbmUgTUFTS19GTVNVQl9RICAweDYwMDAwN2YKLSNkZWZpbmUgTUFUQ0hfRk5NU1VCX1EgMHg2MDAwMDRiCi0jZGVmaW5lIE1BU0tfRk5NU1VCX1EgIDB4NjAwMDA3ZgotI2RlZmluZSBNQVRDSF9GTk1BRERfUSAweDYwMDAwNGYKLSNkZWZpbmUgTUFTS19GTk1BRERfUSAgMHg2MDAwMDdmCi0jZGVmaW5lIE1BVENIX0NfTk9QIDB4MQotI2RlZmluZSBNQVNLX0NfTk9QICAweGZmZmYKLSNkZWZpbmUgTUFUQ0hfQ19BRERJMTZTUCAweDYxMDEKLSNkZWZpbmUgTUFTS19DX0FEREkxNlNQICAweGVmODMKLSNkZWZpbmUgTUFUQ0hfQ19KUiAweDgwMDIKLSNkZWZpbmUgTUFTS19DX0pSICAweGYwN2YKLSNkZWZpbmUgTUFUQ0hfQ19KQUxSIDB4OTAwMgotI2RlZmluZSBNQVNLX0NfSkFMUiAgMHhmMDdmCi0jZGVmaW5lIE1BVENIX0NfRUJSRUFLIDB4OTAwMgotI2RlZmluZSBNQVNLX0NfRUJSRUFLICAweGZmZmYKLSNkZWZpbmUgTUFUQ0hfQ19MRCAweDYwMDAKLSNkZWZpbmUgTUFTS19DX0xEICAweGUwMDMKLSNkZWZpbmUgTUFUQ0hfQ19TRCAweGUwMDAKLSNkZWZpbmUgTUFTS19DX1NEICAweGUwMDMKLSNkZWZpbmUgTUFUQ0hfQ19BRERJVyAweDIwMDEKLSNkZWZpbmUgTUFTS19DX0FERElXICAweGUwMDMKLSNkZWZpbmUgTUFUQ0hfQ19MRFNQIDB4NjAwMgotI2RlZmluZSBNQVNLX0NfTERTUCAgMHhlMDAzCi0jZGVmaW5lIE1BVENIX0NfU0RTUCAweGUwMDIKLSNkZWZpbmUgTUFTS19DX1NEU1AgIDB4ZTAwMwotI2RlZmluZSBNQVRDSF9DX0FEREk0U1BOIDB4MAotI2RlZmluZSBNQVNLX0NfQURESTRTUE4gIDB4ZTAwMwotI2RlZmluZSBNQVRDSF9DX0ZMRCAweDIwMDAKLSNkZWZpbmUgTUFTS19DX0ZMRCAgMHhlMDAzCi0jZGVmaW5lIE1BVENIX0NfTFcgMHg0MDAwCi0jZGVmaW5lIE1BU0tfQ19MVyAgMHhlMDAzCi0jZGVmaW5lIE1BVENIX0NfRkxXIDB4NjAwMAotI2RlZmluZSBNQVNLX0NfRkxXICAweGUwMDMKLSNkZWZpbmUgTUFUQ0hfQ19GU0QgMHhhMDAwCi0jZGVmaW5lIE1BU0tfQ19GU0QgIDB4ZTAwMwotI2RlZmluZSBNQVRDSF9DX1NXIDB4YzAwMAotI2RlZmluZSBNQVNLX0NfU1cgIDB4ZTAwMwotI2RlZmluZSBNQVRDSF9DX0ZTVyAweGUwMDAKLSNkZWZpbmUgTUFTS19DX0ZTVyAgMHhlMDAzCi0jZGVmaW5lIE1BVENIX0NfQURESSAweDEKLSNkZWZpbmUgTUFTS19DX0FEREkgIDB4ZTAwMwotI2RlZmluZSBNQVRDSF9DX0pBTCAweDIwMDEKLSNkZWZpbmUgTUFTS19DX0pBTCAgMHhlMDAzCi0jZGVmaW5lIE1BVENIX0NfTEkgMHg0MDAxCi0jZGVmaW5lIE1BU0tfQ19MSSAgMHhlMDAzCi0jZGVmaW5lIE1BVENIX0NfTFVJIDB4NjAwMQotI2RlZmluZSBNQVNLX0NfTFVJICAweGUwMDMKLSNkZWZpbmUgTUFUQ0hfQ19TUkxJIDB4ODAwMQotI2RlZmluZSBNQVNLX0NfU1JMSSAgMHhlYzAzCi0jZGVmaW5lIE1BVENIX0NfU1JBSSAweDg0MDEKLSNkZWZpbmUgTUFTS19DX1NSQUkgIDB4ZWMwMwotI2RlZmluZSBNQVRDSF9DX0FOREkgMHg4ODAxCi0jZGVmaW5lIE1BU0tfQ19BTkRJICAweGVjMDMKLSNkZWZpbmUgTUFUQ0hfQ19TVUIgMHg4YzAxCi0jZGVmaW5lIE1BU0tfQ19TVUIgIDB4ZmM2MwotI2RlZmluZSBNQVRDSF9DX1hPUiAweDhjMjEKLSNkZWZpbmUgTUFTS19DX1hPUiAgMHhmYzYzCi0jZGVmaW5lIE1BVENIX0NfT1IgMHg4YzQxCi0jZGVmaW5lIE1BU0tfQ19PUiAgMHhmYzYzCi0jZGVmaW5lIE1BVENIX0NfQU5EIDB4OGM2MQotI2RlZmluZSBNQVNLX0NfQU5EICAweGZjNjMKLSNkZWZpbmUgTUFUQ0hfQ19TVUJXIDB4OWMwMQotI2RlZmluZSBNQVNLX0NfU1VCVyAgMHhmYzYzCi0jZGVmaW5lIE1BVENIX0NfQUREVyAweDljMjEKLSNkZWZpbmUgTUFTS19DX0FERFcgIDB4ZmM2MwotI2RlZmluZSBNQVRDSF9DX0ogMHhhMDAxCi0jZGVmaW5lIE1BU0tfQ19KICAweGUwMDMKLSNkZWZpbmUgTUFUQ0hfQ19CRVFaIDB4YzAwMQotI2RlZmluZSBNQVNLX0NfQkVRWiAgMHhlMDAzCi0jZGVmaW5lIE1BVENIX0NfQk5FWiAweGUwMDEKLSNkZWZpbmUgTUFTS19DX0JORVogIDB4ZTAwMwotI2RlZmluZSBNQVRDSF9DX1NMTEkgMHgyCi0jZGVmaW5lIE1BU0tfQ19TTExJICAweGUwMDMKLSNkZWZpbmUgTUFUQ0hfQ19GTERTUCAweDIwMDIKLSNkZWZpbmUgTUFTS19DX0ZMRFNQICAweGUwMDMKLSNkZWZpbmUgTUFUQ0hfQ19MV1NQIDB4NDAwMgotI2RlZmluZSBNQVNLX0NfTFdTUCAgMHhlMDAzCi0jZGVmaW5lIE1BVENIX0NfRkxXU1AgMHg2MDAyCi0jZGVmaW5lIE1BU0tfQ19GTFdTUCAgMHhlMDAzCi0jZGVmaW5lIE1BVENIX0NfTVYgMHg4MDAyCi0jZGVmaW5lIE1BU0tfQ19NViAgMHhmMDAzCi0jZGVmaW5lIE1BVENIX0NfQUREIDB4OTAwMgotI2RlZmluZSBNQVNLX0NfQUREICAweGYwMDMKLSNkZWZpbmUgTUFUQ0hfQ19GU0RTUCAweGEwMDIKLSNkZWZpbmUgTUFTS19DX0ZTRFNQICAweGUwMDMKLSNkZWZpbmUgTUFUQ0hfQ19TV1NQIDB4YzAwMgotI2RlZmluZSBNQVNLX0NfU1dTUCAgMHhlMDAzCi0jZGVmaW5lIE1BVENIX0NfRlNXU1AgMHhlMDAyCi0jZGVmaW5lIE1BU0tfQ19GU1dTUCAgMHhlMDAzCi0jZGVmaW5lIE1BVENIX0NVU1RPTTAgMHhiCi0jZGVmaW5lIE1BU0tfQ1VTVE9NMCAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX0NVU1RPTTBfUlMxIDB4MjAwYgotI2RlZmluZSBNQVNLX0NVU1RPTTBfUlMxICAweDcwN2YKLSNkZWZpbmUgTUFUQ0hfQ1VTVE9NMF9SUzFfUlMyIDB4MzAwYgotI2RlZmluZSBNQVNLX0NVU1RPTTBfUlMxX1JTMiAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX0NVU1RPTTBfUkQgMHg0MDBiCi0jZGVmaW5lIE1BU0tfQ1VTVE9NMF9SRCAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX0NVU1RPTTBfUkRfUlMxIDB4NjAwYgotI2RlZmluZSBNQVNLX0NVU1RPTTBfUkRfUlMxICAweDcwN2YKLSNkZWZpbmUgTUFUQ0hfQ1VTVE9NMF9SRF9SUzFfUlMyIDB4NzAwYgotI2RlZmluZSBNQVNLX0NVU1RPTTBfUkRfUlMxX1JTMiAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX0NVU1RPTTEgMHgyYgotI2RlZmluZSBNQVNLX0NVU1RPTTEgIDB4NzA3ZgotI2RlZmluZSBNQVRDSF9DVVNUT00xX1JTMSAweDIwMmIKLSNkZWZpbmUgTUFTS19DVVNUT00xX1JTMSAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX0NVU1RPTTFfUlMxX1JTMiAweDMwMmIKLSNkZWZpbmUgTUFTS19DVVNUT00xX1JTMV9SUzIgIDB4NzA3ZgotI2RlZmluZSBNQVRDSF9DVVNUT00xX1JEIDB4NDAyYgotI2RlZmluZSBNQVNLX0NVU1RPTTFfUkQgIDB4NzA3ZgotI2RlZmluZSBNQVRDSF9DVVNUT00xX1JEX1JTMSAweDYwMmIKLSNkZWZpbmUgTUFTS19DVVNUT00xX1JEX1JTMSAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX0NVU1RPTTFfUkRfUlMxX1JTMiAweDcwMmIKLSNkZWZpbmUgTUFTS19DVVNUT00xX1JEX1JTMV9SUzIgIDB4NzA3ZgotI2RlZmluZSBNQVRDSF9DVVNUT00yIDB4NWIKLSNkZWZpbmUgTUFTS19DVVNUT00yICAweDcwN2YKLSNkZWZpbmUgTUFUQ0hfQ1VTVE9NMl9SUzEgMHgyMDViCi0jZGVmaW5lIE1BU0tfQ1VTVE9NMl9SUzEgIDB4NzA3ZgotI2RlZmluZSBNQVRDSF9DVVNUT00yX1JTMV9SUzIgMHgzMDViCi0jZGVmaW5lIE1BU0tfQ1VTVE9NMl9SUzFfUlMyICAweDcwN2YKLSNkZWZpbmUgTUFUQ0hfQ1VTVE9NMl9SRCAweDQwNWIKLSNkZWZpbmUgTUFTS19DVVNUT00yX1JEICAweDcwN2YKLSNkZWZpbmUgTUFUQ0hfQ1VTVE9NMl9SRF9SUzEgMHg2MDViCi0jZGVmaW5lIE1BU0tfQ1VTVE9NMl9SRF9SUzEgIDB4NzA3ZgotI2RlZmluZSBNQVRDSF9DVVNUT00yX1JEX1JTMV9SUzIgMHg3MDViCi0jZGVmaW5lIE1BU0tfQ1VTVE9NMl9SRF9SUzFfUlMyICAweDcwN2YKLSNkZWZpbmUgTUFUQ0hfQ1VTVE9NMyAweDdiCi0jZGVmaW5lIE1BU0tfQ1VTVE9NMyAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX0NVU1RPTTNfUlMxIDB4MjA3YgotI2RlZmluZSBNQVNLX0NVU1RPTTNfUlMxICAweDcwN2YKLSNkZWZpbmUgTUFUQ0hfQ1VTVE9NM19SUzFfUlMyIDB4MzA3YgotI2RlZmluZSBNQVNLX0NVU1RPTTNfUlMxX1JTMiAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX0NVU1RPTTNfUkQgMHg0MDdiCi0jZGVmaW5lIE1BU0tfQ1VTVE9NM19SRCAgMHg3MDdmCi0jZGVmaW5lIE1BVENIX0NVU1RPTTNfUkRfUlMxIDB4NjA3YgotI2RlZmluZSBNQVNLX0NVU1RPTTNfUkRfUlMxICAweDcwN2YKLSNkZWZpbmUgTUFUQ0hfQ1VTVE9NM19SRF9SUzFfUlMyIDB4NzA3YgotI2RlZmluZSBNQVNLX0NVU1RPTTNfUkRfUlMxX1JTMiAgMHg3MDdmCi0jZGVmaW5lIENTUl9GRkxBR1MgMHgxCi0jZGVmaW5lIENTUl9GUk0gMHgyCi0jZGVmaW5lIENTUl9GQ1NSIDB4MwotI2RlZmluZSBDU1JfQ1lDTEUgMHhjMDAKLSNkZWZpbmUgQ1NSX1RJTUUgMHhjMDEKLSNkZWZpbmUgQ1NSX0lOU1RSRVQgMHhjMDIKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIzIDB4YzAzCi0jZGVmaW5lIENTUl9IUE1DT1VOVEVSNCAweGMwNAotI2RlZmluZSBDU1JfSFBNQ09VTlRFUjUgMHhjMDUKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVI2IDB4YzA2Ci0jZGVmaW5lIENTUl9IUE1DT1VOVEVSNyAweGMwNwotI2RlZmluZSBDU1JfSFBNQ09VTlRFUjggMHhjMDgKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVI5IDB4YzA5Ci0jZGVmaW5lIENTUl9IUE1DT1VOVEVSMTAgMHhjMGEKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxMSAweGMwYgotI2RlZmluZSBDU1JfSFBNQ09VTlRFUjEyIDB4YzBjCi0jZGVmaW5lIENTUl9IUE1DT1VOVEVSMTMgMHhjMGQKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxNCAweGMwZQotI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE1IDB4YzBmCi0jZGVmaW5lIENTUl9IUE1DT1VOVEVSMTYgMHhjMTAKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxNyAweGMxMQotI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE4IDB4YzEyCi0jZGVmaW5lIENTUl9IUE1DT1VOVEVSMTkgMHhjMTMKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyMCAweGMxNAotI2RlZmluZSBDU1JfSFBNQ09VTlRFUjIxIDB4YzE1Ci0jZGVmaW5lIENTUl9IUE1DT1VOVEVSMjIgMHhjMTYKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyMyAweGMxNwotI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI0IDB4YzE4Ci0jZGVmaW5lIENTUl9IUE1DT1VOVEVSMjUgMHhjMTkKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyNiAweGMxYQotI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI3IDB4YzFiCi0jZGVmaW5lIENTUl9IUE1DT1VOVEVSMjggMHhjMWMKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyOSAweGMxZAotI2RlZmluZSBDU1JfSFBNQ09VTlRFUjMwIDB4YzFlCi0jZGVmaW5lIENTUl9IUE1DT1VOVEVSMzEgMHhjMWYKLSNkZWZpbmUgQ1NSX1NTVEFUVVMgMHgxMDAKLSNkZWZpbmUgQ1NSX1NJRSAweDEwNAotI2RlZmluZSBDU1JfU1RWRUMgMHgxMDUKLSNkZWZpbmUgQ1NSX1NDT1VOVEVSRU4gMHgxMDYKLSNkZWZpbmUgQ1NSX1NTQ1JBVENIIDB4MTQwCi0jZGVmaW5lIENTUl9TRVBDIDB4MTQxCi0jZGVmaW5lIENTUl9TQ0FVU0UgMHgxNDIKLSNkZWZpbmUgQ1NSX1NCQURBRERSIDB4MTQzCi0jZGVmaW5lIENTUl9TSVAgMHgxNDQKLSNkZWZpbmUgQ1NSX1NQVEJSIDB4MTgwCi0jZGVmaW5lIENTUl9NU1RBVFVTIDB4MzAwCi0jZGVmaW5lIENTUl9NSVNBIDB4MzAxCi0jZGVmaW5lIENTUl9NRURFTEVHIDB4MzAyCi0jZGVmaW5lIENTUl9NSURFTEVHIDB4MzAzCi0jZGVmaW5lIENTUl9NSUUgMHgzMDQKLSNkZWZpbmUgQ1NSX01UVkVDIDB4MzA1Ci0jZGVmaW5lIENTUl9NQ09VTlRFUkVOIDB4MzA2Ci0jZGVmaW5lIENTUl9NU0NSQVRDSCAweDM0MAotI2RlZmluZSBDU1JfTUVQQyAweDM0MQotI2RlZmluZSBDU1JfTUNBVVNFIDB4MzQyCi0jZGVmaW5lIENTUl9NQkFEQUREUiAweDM0MwotI2RlZmluZSBDU1JfTUlQIDB4MzQ0Ci0jZGVmaW5lIENTUl9QTVBDRkcwIDB4M2EwCi0jZGVmaW5lIENTUl9QTVBDRkcxIDB4M2ExCi0jZGVmaW5lIENTUl9QTVBDRkcyIDB4M2EyCi0jZGVmaW5lIENTUl9QTVBDRkczIDB4M2EzCi0jZGVmaW5lIENTUl9QTVBBRERSMCAweDNiMAotI2RlZmluZSBDU1JfUE1QQUREUjEgMHgzYjEKLSNkZWZpbmUgQ1NSX1BNUEFERFIyIDB4M2IyCi0jZGVmaW5lIENTUl9QTVBBRERSMyAweDNiMwotI2RlZmluZSBDU1JfUE1QQUREUjQgMHgzYjQKLSNkZWZpbmUgQ1NSX1BNUEFERFI1IDB4M2I1Ci0jZGVmaW5lIENTUl9QTVBBRERSNiAweDNiNgotI2RlZmluZSBDU1JfUE1QQUREUjcgMHgzYjcKLSNkZWZpbmUgQ1NSX1BNUEFERFI4IDB4M2I4Ci0jZGVmaW5lIENTUl9QTVBBRERSOSAweDNiOQotI2RlZmluZSBDU1JfUE1QQUREUjEwIDB4M2JhCi0jZGVmaW5lIENTUl9QTVBBRERSMTEgMHgzYmIKLSNkZWZpbmUgQ1NSX1BNUEFERFIxMiAweDNiYwotI2RlZmluZSBDU1JfUE1QQUREUjEzIDB4M2JkCi0jZGVmaW5lIENTUl9QTVBBRERSMTQgMHgzYmUKLSNkZWZpbmUgQ1NSX1BNUEFERFIxNSAweDNiZgotI2RlZmluZSBDU1JfVFNFTEVDVCAweDdhMAotI2RlZmluZSBDU1JfVERBVEExIDB4N2ExCi0jZGVmaW5lIENTUl9UREFUQTIgMHg3YTIKLSNkZWZpbmUgQ1NSX1REQVRBMyAweDdhMwotI2RlZmluZSBDU1JfRENTUiAweDdiMAotI2RlZmluZSBDU1JfRFBDIDB4N2IxCi0jZGVmaW5lIENTUl9EU0NSQVRDSCAweDdiMgotI2RlZmluZSBDU1JfTUNZQ0xFIDB4YjAwCi0jZGVmaW5lIENTUl9NSU5TVFJFVCAweGIwMgotI2RlZmluZSBDU1JfTUhQTUNPVU5URVIzIDB4YjAzCi0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjQgMHhiMDQKLSNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSNSAweGIwNQotI2RlZmluZSBDU1JfTUhQTUNPVU5URVI2IDB4YjA2Ci0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjcgMHhiMDcKLSNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSOCAweGIwOAotI2RlZmluZSBDU1JfTUhQTUNPVU5URVI5IDB4YjA5Ci0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjEwIDB4YjBhCi0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjExIDB4YjBiCi0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjEyIDB4YjBjCi0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjEzIDB4YjBkCi0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE0IDB4YjBlCi0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE1IDB4YjBmCi0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE2IDB4YjEwCi0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE3IDB4YjExCi0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE4IDB4YjEyCi0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE5IDB4YjEzCi0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjIwIDB4YjE0Ci0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjIxIDB4YjE1Ci0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjIyIDB4YjE2Ci0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjIzIDB4YjE3Ci0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI0IDB4YjE4Ci0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI1IDB4YjE5Ci0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI2IDB4YjFhCi0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI3IDB4YjFiCi0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI4IDB4YjFjCi0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI5IDB4YjFkCi0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjMwIDB4YjFlCi0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjMxIDB4YjFmCi0jZGVmaW5lIENTUl9NSFBNRVZFTlQzIDB4MzIzCi0jZGVmaW5lIENTUl9NSFBNRVZFTlQ0IDB4MzI0Ci0jZGVmaW5lIENTUl9NSFBNRVZFTlQ1IDB4MzI1Ci0jZGVmaW5lIENTUl9NSFBNRVZFTlQ2IDB4MzI2Ci0jZGVmaW5lIENTUl9NSFBNRVZFTlQ3IDB4MzI3Ci0jZGVmaW5lIENTUl9NSFBNRVZFTlQ4IDB4MzI4Ci0jZGVmaW5lIENTUl9NSFBNRVZFTlQ5IDB4MzI5Ci0jZGVmaW5lIENTUl9NSFBNRVZFTlQxMCAweDMyYQotI2RlZmluZSBDU1JfTUhQTUVWRU5UMTEgMHgzMmIKLSNkZWZpbmUgQ1NSX01IUE1FVkVOVDEyIDB4MzJjCi0jZGVmaW5lIENTUl9NSFBNRVZFTlQxMyAweDMyZAotI2RlZmluZSBDU1JfTUhQTUVWRU5UMTQgMHgzMmUKLSNkZWZpbmUgQ1NSX01IUE1FVkVOVDE1IDB4MzJmCi0jZGVmaW5lIENTUl9NSFBNRVZFTlQxNiAweDMzMAotI2RlZmluZSBDU1JfTUhQTUVWRU5UMTcgMHgzMzEKLSNkZWZpbmUgQ1NSX01IUE1FVkVOVDE4IDB4MzMyCi0jZGVmaW5lIENTUl9NSFBNRVZFTlQxOSAweDMzMwotI2RlZmluZSBDU1JfTUhQTUVWRU5UMjAgMHgzMzQKLSNkZWZpbmUgQ1NSX01IUE1FVkVOVDIxIDB4MzM1Ci0jZGVmaW5lIENTUl9NSFBNRVZFTlQyMiAweDMzNgotI2RlZmluZSBDU1JfTUhQTUVWRU5UMjMgMHgzMzcKLSNkZWZpbmUgQ1NSX01IUE1FVkVOVDI0IDB4MzM4Ci0jZGVmaW5lIENTUl9NSFBNRVZFTlQyNSAweDMzOQotI2RlZmluZSBDU1JfTUhQTUVWRU5UMjYgMHgzM2EKLSNkZWZpbmUgQ1NSX01IUE1FVkVOVDI3IDB4MzNiCi0jZGVmaW5lIENTUl9NSFBNRVZFTlQyOCAweDMzYwotI2RlZmluZSBDU1JfTUhQTUVWRU5UMjkgMHgzM2QKLSNkZWZpbmUgQ1NSX01IUE1FVkVOVDMwIDB4MzNlCi0jZGVmaW5lIENTUl9NSFBNRVZFTlQzMSAweDMzZgotI2RlZmluZSBDU1JfTVZFTkRPUklEIDB4ZjExCi0jZGVmaW5lIENTUl9NQVJDSElEIDB4ZjEyCi0jZGVmaW5lIENTUl9NSU1QSUQgMHhmMTMKLSNkZWZpbmUgQ1NSX01IQVJUSUQgMHhmMTQKLSNkZWZpbmUgQ1NSX0NZQ0xFSCAweGM4MAotI2RlZmluZSBDU1JfVElNRUggMHhjODEKLSNkZWZpbmUgQ1NSX0lOU1RSRVRIIDB4YzgyCi0jZGVmaW5lIENTUl9IUE1DT1VOVEVSM0ggMHhjODMKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVI0SCAweGM4NAotI2RlZmluZSBDU1JfSFBNQ09VTlRFUjVIIDB4Yzg1Ci0jZGVmaW5lIENTUl9IUE1DT1VOVEVSNkggMHhjODYKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVI3SCAweGM4NwotI2RlZmluZSBDU1JfSFBNQ09VTlRFUjhIIDB4Yzg4Ci0jZGVmaW5lIENTUl9IUE1DT1VOVEVSOUggMHhjODkKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxMEggMHhjOGEKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxMUggMHhjOGIKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxMkggMHhjOGMKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxM0ggMHhjOGQKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxNEggMHhjOGUKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxNUggMHhjOGYKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxNkggMHhjOTAKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxN0ggMHhjOTEKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxOEggMHhjOTIKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxOUggMHhjOTMKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyMEggMHhjOTQKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyMUggMHhjOTUKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyMkggMHhjOTYKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyM0ggMHhjOTcKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyNEggMHhjOTgKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyNUggMHhjOTkKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyNkggMHhjOWEKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyN0ggMHhjOWIKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyOEggMHhjOWMKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyOUggMHhjOWQKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIzMEggMHhjOWUKLSNkZWZpbmUgQ1NSX0hQTUNPVU5URVIzMUggMHhjOWYKLSNkZWZpbmUgQ1NSX01DWUNMRUggMHhiODAKLSNkZWZpbmUgQ1NSX01JTlNUUkVUSCAweGI4MgotI2RlZmluZSBDU1JfTUhQTUNPVU5URVIzSCAweGI4MwotI2RlZmluZSBDU1JfTUhQTUNPVU5URVI0SCAweGI4NAotI2RlZmluZSBDU1JfTUhQTUNPVU5URVI1SCAweGI4NQotI2RlZmluZSBDU1JfTUhQTUNPVU5URVI2SCAweGI4NgotI2RlZmluZSBDU1JfTUhQTUNPVU5URVI3SCAweGI4NwotI2RlZmluZSBDU1JfTUhQTUNPVU5URVI4SCAweGI4OAotI2RlZmluZSBDU1JfTUhQTUNPVU5URVI5SCAweGI4OQotI2RlZmluZSBDU1JfTUhQTUNPVU5URVIxMEggMHhiOGEKLSNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTFIIDB4YjhiCi0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjEySCAweGI4YwotI2RlZmluZSBDU1JfTUhQTUNPVU5URVIxM0ggMHhiOGQKLSNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTRIIDB4YjhlCi0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE1SCAweGI4ZgotI2RlZmluZSBDU1JfTUhQTUNPVU5URVIxNkggMHhiOTAKLSNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTdIIDB4YjkxCi0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE4SCAweGI5MgotI2RlZmluZSBDU1JfTUhQTUNPVU5URVIxOUggMHhiOTMKLSNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjBIIDB4Yjk0Ci0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjIxSCAweGI5NQotI2RlZmluZSBDU1JfTUhQTUNPVU5URVIyMkggMHhiOTYKLSNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjNIIDB4Yjk3Ci0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI0SCAweGI5OAotI2RlZmluZSBDU1JfTUhQTUNPVU5URVIyNUggMHhiOTkKLSNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjZIIDB4YjlhCi0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI3SCAweGI5YgotI2RlZmluZSBDU1JfTUhQTUNPVU5URVIyOEggMHhiOWMKLSNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjlIIDB4YjlkCi0jZGVmaW5lIENTUl9NSFBNQ09VTlRFUjMwSCAweGI5ZQotI2RlZmluZSBDU1JfTUhQTUNPVU5URVIzMUggMHhiOWYKLSNkZWZpbmUgQ0FVU0VfTUlTQUxJR05FRF9GRVRDSCAweDAKLSNkZWZpbmUgQ0FVU0VfRkVUQ0hfQUNDRVNTIDB4MQotI2RlZmluZSBDQVVTRV9JTExFR0FMX0lOU1RSVUNUSU9OIDB4MgotI2RlZmluZSBDQVVTRV9CUkVBS1BPSU5UIDB4MwotI2RlZmluZSBDQVVTRV9NSVNBTElHTkVEX0xPQUQgMHg0Ci0jZGVmaW5lIENBVVNFX0xPQURfQUNDRVNTIDB4NQotI2RlZmluZSBDQVVTRV9NSVNBTElHTkVEX1NUT1JFIDB4NgotI2RlZmluZSBDQVVTRV9TVE9SRV9BQ0NFU1MgMHg3Ci0jZGVmaW5lIENBVVNFX1VTRVJfRUNBTEwgMHg4Ci0jZGVmaW5lIENBVVNFX1NVUEVSVklTT1JfRUNBTEwgMHg5Ci0jZGVmaW5lIENBVVNFX0hZUEVSVklTT1JfRUNBTEwgMHhhCi0jZGVmaW5lIENBVVNFX01BQ0hJTkVfRUNBTEwgMHhiCi0jZGVmaW5lIENBVVNFX0ZFVENIX1BBR0VfRkFVTFQgMHhjCi0jZGVmaW5lIENBVVNFX0xPQURfUEFHRV9GQVVMVCAweGQKLSNkZWZpbmUgQ0FVU0VfU1RPUkVfUEFHRV9GQVVMVCAweGYKLSNlbmRpZgotI2lmZGVmIERFQ0xBUkVfSU5TTgotREVDTEFSRV9JTlNOKGJlcSwgTUFUQ0hfQkVRLCBNQVNLX0JFUSkKLURFQ0xBUkVfSU5TTihibmUsIE1BVENIX0JORSwgTUFTS19CTkUpCi1ERUNMQVJFX0lOU04oYmx0LCBNQVRDSF9CTFQsIE1BU0tfQkxUKQotREVDTEFSRV9JTlNOKGJnZSwgTUFUQ0hfQkdFLCBNQVNLX0JHRSkKLURFQ0xBUkVfSU5TTihibHR1LCBNQVRDSF9CTFRVLCBNQVNLX0JMVFUpCi1ERUNMQVJFX0lOU04oYmdldSwgTUFUQ0hfQkdFVSwgTUFTS19CR0VVKQotREVDTEFSRV9JTlNOKGphbHIsIE1BVENIX0pBTFIsIE1BU0tfSkFMUikKLURFQ0xBUkVfSU5TTihqYWwsIE1BVENIX0pBTCwgTUFTS19KQUwpCi1ERUNMQVJFX0lOU04obHVpLCBNQVRDSF9MVUksIE1BU0tfTFVJKQotREVDTEFSRV9JTlNOKGF1aXBjLCBNQVRDSF9BVUlQQywgTUFTS19BVUlQQykKLURFQ0xBUkVfSU5TTihhZGRpLCBNQVRDSF9BRERJLCBNQVNLX0FEREkpCi1ERUNMQVJFX0lOU04oc2xsaSwgTUFUQ0hfU0xMSSwgTUFTS19TTExJKQotREVDTEFSRV9JTlNOKHNsdGksIE1BVENIX1NMVEksIE1BU0tfU0xUSSkKLURFQ0xBUkVfSU5TTihzbHRpdSwgTUFUQ0hfU0xUSVUsIE1BU0tfU0xUSVUpCi1ERUNMQVJFX0lOU04oeG9yaSwgTUFUQ0hfWE9SSSwgTUFTS19YT1JJKQotREVDTEFSRV9JTlNOKHNybGksIE1BVENIX1NSTEksIE1BU0tfU1JMSSkKLURFQ0xBUkVfSU5TTihzcmFpLCBNQVRDSF9TUkFJLCBNQVNLX1NSQUkpCi1ERUNMQVJFX0lOU04ob3JpLCBNQVRDSF9PUkksIE1BU0tfT1JJKQotREVDTEFSRV9JTlNOKGFuZGksIE1BVENIX0FOREksIE1BU0tfQU5ESSkKLURFQ0xBUkVfSU5TTihhZGQsIE1BVENIX0FERCwgTUFTS19BREQpCi1ERUNMQVJFX0lOU04oc3ViLCBNQVRDSF9TVUIsIE1BU0tfU1VCKQotREVDTEFSRV9JTlNOKHNsbCwgTUFUQ0hfU0xMLCBNQVNLX1NMTCkKLURFQ0xBUkVfSU5TTihzbHQsIE1BVENIX1NMVCwgTUFTS19TTFQpCi1ERUNMQVJFX0lOU04oc2x0dSwgTUFUQ0hfU0xUVSwgTUFTS19TTFRVKQotREVDTEFSRV9JTlNOKHhvciwgTUFUQ0hfWE9SLCBNQVNLX1hPUikKLURFQ0xBUkVfSU5TTihzcmwsIE1BVENIX1NSTCwgTUFTS19TUkwpCi1ERUNMQVJFX0lOU04oc3JhLCBNQVRDSF9TUkEsIE1BU0tfU1JBKQotREVDTEFSRV9JTlNOKG9yLCBNQVRDSF9PUiwgTUFTS19PUikKLURFQ0xBUkVfSU5TTihhbmQsIE1BVENIX0FORCwgTUFTS19BTkQpCi1ERUNMQVJFX0lOU04oYWRkaXcsIE1BVENIX0FERElXLCBNQVNLX0FERElXKQotREVDTEFSRV9JTlNOKHNsbGl3LCBNQVRDSF9TTExJVywgTUFTS19TTExJVykKLURFQ0xBUkVfSU5TTihzcmxpdywgTUFUQ0hfU1JMSVcsIE1BU0tfU1JMSVcpCi1ERUNMQVJFX0lOU04oc3JhaXcsIE1BVENIX1NSQUlXLCBNQVNLX1NSQUlXKQotREVDTEFSRV9JTlNOKGFkZHcsIE1BVENIX0FERFcsIE1BU0tfQUREVykKLURFQ0xBUkVfSU5TTihzdWJ3LCBNQVRDSF9TVUJXLCBNQVNLX1NVQlcpCi1ERUNMQVJFX0lOU04oc2xsdywgTUFUQ0hfU0xMVywgTUFTS19TTExXKQotREVDTEFSRV9JTlNOKHNybHcsIE1BVENIX1NSTFcsIE1BU0tfU1JMVykKLURFQ0xBUkVfSU5TTihzcmF3LCBNQVRDSF9TUkFXLCBNQVNLX1NSQVcpCi1ERUNMQVJFX0lOU04obGIsIE1BVENIX0xCLCBNQVNLX0xCKQotREVDTEFSRV9JTlNOKGxoLCBNQVRDSF9MSCwgTUFTS19MSCkKLURFQ0xBUkVfSU5TTihsdywgTUFUQ0hfTFcsIE1BU0tfTFcpCi1ERUNMQVJFX0lOU04obGQsIE1BVENIX0xELCBNQVNLX0xEKQotREVDTEFSRV9JTlNOKGxidSwgTUFUQ0hfTEJVLCBNQVNLX0xCVSkKLURFQ0xBUkVfSU5TTihsaHUsIE1BVENIX0xIVSwgTUFTS19MSFUpCi1ERUNMQVJFX0lOU04obHd1LCBNQVRDSF9MV1UsIE1BU0tfTFdVKQotREVDTEFSRV9JTlNOKHNiLCBNQVRDSF9TQiwgTUFTS19TQikKLURFQ0xBUkVfSU5TTihzaCwgTUFUQ0hfU0gsIE1BU0tfU0gpCi1ERUNMQVJFX0lOU04oc3csIE1BVENIX1NXLCBNQVNLX1NXKQotREVDTEFSRV9JTlNOKHNkLCBNQVRDSF9TRCwgTUFTS19TRCkKLURFQ0xBUkVfSU5TTihmZW5jZSwgTUFUQ0hfRkVOQ0UsIE1BU0tfRkVOQ0UpCi1ERUNMQVJFX0lOU04oZmVuY2VfaSwgTUFUQ0hfRkVOQ0VfSSwgTUFTS19GRU5DRV9JKQotREVDTEFSRV9JTlNOKG11bCwgTUFUQ0hfTVVMLCBNQVNLX01VTCkKLURFQ0xBUkVfSU5TTihtdWxoLCBNQVRDSF9NVUxILCBNQVNLX01VTEgpCi1ERUNMQVJFX0lOU04obXVsaHN1LCBNQVRDSF9NVUxIU1UsIE1BU0tfTVVMSFNVKQotREVDTEFSRV9JTlNOKG11bGh1LCBNQVRDSF9NVUxIVSwgTUFTS19NVUxIVSkKLURFQ0xBUkVfSU5TTihkaXYsIE1BVENIX0RJViwgTUFTS19ESVYpCi1ERUNMQVJFX0lOU04oZGl2dSwgTUFUQ0hfRElWVSwgTUFTS19ESVZVKQotREVDTEFSRV9JTlNOKHJlbSwgTUFUQ0hfUkVNLCBNQVNLX1JFTSkKLURFQ0xBUkVfSU5TTihyZW11LCBNQVRDSF9SRU1VLCBNQVNLX1JFTVUpCi1ERUNMQVJFX0lOU04obXVsdywgTUFUQ0hfTVVMVywgTUFTS19NVUxXKQotREVDTEFSRV9JTlNOKGRpdncsIE1BVENIX0RJVlcsIE1BU0tfRElWVykKLURFQ0xBUkVfSU5TTihkaXZ1dywgTUFUQ0hfRElWVVcsIE1BU0tfRElWVVcpCi1ERUNMQVJFX0lOU04ocmVtdywgTUFUQ0hfUkVNVywgTUFTS19SRU1XKQotREVDTEFSRV9JTlNOKHJlbXV3LCBNQVRDSF9SRU1VVywgTUFTS19SRU1VVykKLURFQ0xBUkVfSU5TTihhbW9hZGRfdywgTUFUQ0hfQU1PQUREX1csIE1BU0tfQU1PQUREX1cpCi1ERUNMQVJFX0lOU04oYW1veG9yX3csIE1BVENIX0FNT1hPUl9XLCBNQVNLX0FNT1hPUl9XKQotREVDTEFSRV9JTlNOKGFtb29yX3csIE1BVENIX0FNT09SX1csIE1BU0tfQU1PT1JfVykKLURFQ0xBUkVfSU5TTihhbW9hbmRfdywgTUFUQ0hfQU1PQU5EX1csIE1BU0tfQU1PQU5EX1cpCi1ERUNMQVJFX0lOU04oYW1vbWluX3csIE1BVENIX0FNT01JTl9XLCBNQVNLX0FNT01JTl9XKQotREVDTEFSRV9JTlNOKGFtb21heF93LCBNQVRDSF9BTU9NQVhfVywgTUFTS19BTU9NQVhfVykKLURFQ0xBUkVfSU5TTihhbW9taW51X3csIE1BVENIX0FNT01JTlVfVywgTUFTS19BTU9NSU5VX1cpCi1ERUNMQVJFX0lOU04oYW1vbWF4dV93LCBNQVRDSF9BTU9NQVhVX1csIE1BU0tfQU1PTUFYVV9XKQotREVDTEFSRV9JTlNOKGFtb3N3YXBfdywgTUFUQ0hfQU1PU1dBUF9XLCBNQVNLX0FNT1NXQVBfVykKLURFQ0xBUkVfSU5TTihscl93LCBNQVRDSF9MUl9XLCBNQVNLX0xSX1cpCi1ERUNMQVJFX0lOU04oc2NfdywgTUFUQ0hfU0NfVywgTUFTS19TQ19XKQotREVDTEFSRV9JTlNOKGFtb2FkZF9kLCBNQVRDSF9BTU9BRERfRCwgTUFTS19BTU9BRERfRCkKLURFQ0xBUkVfSU5TTihhbW94b3JfZCwgTUFUQ0hfQU1PWE9SX0QsIE1BU0tfQU1PWE9SX0QpCi1ERUNMQVJFX0lOU04oYW1vb3JfZCwgTUFUQ0hfQU1PT1JfRCwgTUFTS19BTU9PUl9EKQotREVDTEFSRV9JTlNOKGFtb2FuZF9kLCBNQVRDSF9BTU9BTkRfRCwgTUFTS19BTU9BTkRfRCkKLURFQ0xBUkVfSU5TTihhbW9taW5fZCwgTUFUQ0hfQU1PTUlOX0QsIE1BU0tfQU1PTUlOX0QpCi1ERUNMQVJFX0lOU04oYW1vbWF4X2QsIE1BVENIX0FNT01BWF9ELCBNQVNLX0FNT01BWF9EKQotREVDTEFSRV9JTlNOKGFtb21pbnVfZCwgTUFUQ0hfQU1PTUlOVV9ELCBNQVNLX0FNT01JTlVfRCkKLURFQ0xBUkVfSU5TTihhbW9tYXh1X2QsIE1BVENIX0FNT01BWFVfRCwgTUFTS19BTU9NQVhVX0QpCi1ERUNMQVJFX0lOU04oYW1vc3dhcF9kLCBNQVRDSF9BTU9TV0FQX0QsIE1BU0tfQU1PU1dBUF9EKQotREVDTEFSRV9JTlNOKGxyX2QsIE1BVENIX0xSX0QsIE1BU0tfTFJfRCkKLURFQ0xBUkVfSU5TTihzY19kLCBNQVRDSF9TQ19ELCBNQVNLX1NDX0QpCi1ERUNMQVJFX0lOU04oZWNhbGwsIE1BVENIX0VDQUxMLCBNQVNLX0VDQUxMKQotREVDTEFSRV9JTlNOKGVicmVhaywgTUFUQ0hfRUJSRUFLLCBNQVNLX0VCUkVBSykKLURFQ0xBUkVfSU5TTih1cmV0LCBNQVRDSF9VUkVULCBNQVNLX1VSRVQpCi1ERUNMQVJFX0lOU04oc3JldCwgTUFUQ0hfU1JFVCwgTUFTS19TUkVUKQotREVDTEFSRV9JTlNOKG1yZXQsIE1BVENIX01SRVQsIE1BU0tfTVJFVCkKLURFQ0xBUkVfSU5TTihkcmV0LCBNQVRDSF9EUkVULCBNQVNLX0RSRVQpCi1ERUNMQVJFX0lOU04oc2ZlbmNlX3ZtYSwgTUFUQ0hfU0ZFTkNFX1ZNQSwgTUFTS19TRkVOQ0VfVk1BKQotREVDTEFSRV9JTlNOKHdmaSwgTUFUQ0hfV0ZJLCBNQVNLX1dGSSkKLURFQ0xBUkVfSU5TTihjc3JydywgTUFUQ0hfQ1NSUlcsIE1BU0tfQ1NSUlcpCi1ERUNMQVJFX0lOU04oY3NycnMsIE1BVENIX0NTUlJTLCBNQVNLX0NTUlJTKQotREVDTEFSRV9JTlNOKGNzcnJjLCBNQVRDSF9DU1JSQywgTUFTS19DU1JSQykKLURFQ0xBUkVfSU5TTihjc3Jyd2ksIE1BVENIX0NTUlJXSSwgTUFTS19DU1JSV0kpCi1ERUNMQVJFX0lOU04oY3NycnNpLCBNQVRDSF9DU1JSU0ksIE1BU0tfQ1NSUlNJKQotREVDTEFSRV9JTlNOKGNzcnJjaSwgTUFUQ0hfQ1NSUkNJLCBNQVNLX0NTUlJDSSkKLURFQ0xBUkVfSU5TTihmYWRkX3MsIE1BVENIX0ZBRERfUywgTUFTS19GQUREX1MpCi1ERUNMQVJFX0lOU04oZnN1Yl9zLCBNQVRDSF9GU1VCX1MsIE1BU0tfRlNVQl9TKQotREVDTEFSRV9JTlNOKGZtdWxfcywgTUFUQ0hfRk1VTF9TLCBNQVNLX0ZNVUxfUykKLURFQ0xBUkVfSU5TTihmZGl2X3MsIE1BVENIX0ZESVZfUywgTUFTS19GRElWX1MpCi1ERUNMQVJFX0lOU04oZnNnbmpfcywgTUFUQ0hfRlNHTkpfUywgTUFTS19GU0dOSl9TKQotREVDTEFSRV9JTlNOKGZzZ25qbl9zLCBNQVRDSF9GU0dOSk5fUywgTUFTS19GU0dOSk5fUykKLURFQ0xBUkVfSU5TTihmc2duanhfcywgTUFUQ0hfRlNHTkpYX1MsIE1BU0tfRlNHTkpYX1MpCi1ERUNMQVJFX0lOU04oZm1pbl9zLCBNQVRDSF9GTUlOX1MsIE1BU0tfRk1JTl9TKQotREVDTEFSRV9JTlNOKGZtYXhfcywgTUFUQ0hfRk1BWF9TLCBNQVNLX0ZNQVhfUykKLURFQ0xBUkVfSU5TTihmc3FydF9zLCBNQVRDSF9GU1FSVF9TLCBNQVNLX0ZTUVJUX1MpCi1ERUNMQVJFX0lOU04oZmFkZF9kLCBNQVRDSF9GQUREX0QsIE1BU0tfRkFERF9EKQotREVDTEFSRV9JTlNOKGZzdWJfZCwgTUFUQ0hfRlNVQl9ELCBNQVNLX0ZTVUJfRCkKLURFQ0xBUkVfSU5TTihmbXVsX2QsIE1BVENIX0ZNVUxfRCwgTUFTS19GTVVMX0QpCi1ERUNMQVJFX0lOU04oZmRpdl9kLCBNQVRDSF9GRElWX0QsIE1BU0tfRkRJVl9EKQotREVDTEFSRV9JTlNOKGZzZ25qX2QsIE1BVENIX0ZTR05KX0QsIE1BU0tfRlNHTkpfRCkKLURFQ0xBUkVfSU5TTihmc2duam5fZCwgTUFUQ0hfRlNHTkpOX0QsIE1BU0tfRlNHTkpOX0QpCi1ERUNMQVJFX0lOU04oZnNnbmp4X2QsIE1BVENIX0ZTR05KWF9ELCBNQVNLX0ZTR05KWF9EKQotREVDTEFSRV9JTlNOKGZtaW5fZCwgTUFUQ0hfRk1JTl9ELCBNQVNLX0ZNSU5fRCkKLURFQ0xBUkVfSU5TTihmbWF4X2QsIE1BVENIX0ZNQVhfRCwgTUFTS19GTUFYX0QpCi1ERUNMQVJFX0lOU04oZmN2dF9zX2QsIE1BVENIX0ZDVlRfU19ELCBNQVNLX0ZDVlRfU19EKQotREVDTEFSRV9JTlNOKGZjdnRfZF9zLCBNQVRDSF9GQ1ZUX0RfUywgTUFTS19GQ1ZUX0RfUykKLURFQ0xBUkVfSU5TTihmc3FydF9kLCBNQVRDSF9GU1FSVF9ELCBNQVNLX0ZTUVJUX0QpCi1ERUNMQVJFX0lOU04oZmFkZF9xLCBNQVRDSF9GQUREX1EsIE1BU0tfRkFERF9RKQotREVDTEFSRV9JTlNOKGZzdWJfcSwgTUFUQ0hfRlNVQl9RLCBNQVNLX0ZTVUJfUSkKLURFQ0xBUkVfSU5TTihmbXVsX3EsIE1BVENIX0ZNVUxfUSwgTUFTS19GTVVMX1EpCi1ERUNMQVJFX0lOU04oZmRpdl9xLCBNQVRDSF9GRElWX1EsIE1BU0tfRkRJVl9RKQotREVDTEFSRV9JTlNOKGZzZ25qX3EsIE1BVENIX0ZTR05KX1EsIE1BU0tfRlNHTkpfUSkKLURFQ0xBUkVfSU5TTihmc2duam5fcSwgTUFUQ0hfRlNHTkpOX1EsIE1BU0tfRlNHTkpOX1EpCi1ERUNMQVJFX0lOU04oZnNnbmp4X3EsIE1BVENIX0ZTR05KWF9RLCBNQVNLX0ZTR05KWF9RKQotREVDTEFSRV9JTlNOKGZtaW5fcSwgTUFUQ0hfRk1JTl9RLCBNQVNLX0ZNSU5fUSkKLURFQ0xBUkVfSU5TTihmbWF4X3EsIE1BVENIX0ZNQVhfUSwgTUFTS19GTUFYX1EpCi1ERUNMQVJFX0lOU04oZmN2dF9zX3EsIE1BVENIX0ZDVlRfU19RLCBNQVNLX0ZDVlRfU19RKQotREVDTEFSRV9JTlNOKGZjdnRfcV9zLCBNQVRDSF9GQ1ZUX1FfUywgTUFTS19GQ1ZUX1FfUykKLURFQ0xBUkVfSU5TTihmY3Z0X2RfcSwgTUFUQ0hfRkNWVF9EX1EsIE1BU0tfRkNWVF9EX1EpCi1ERUNMQVJFX0lOU04oZmN2dF9xX2QsIE1BVENIX0ZDVlRfUV9ELCBNQVNLX0ZDVlRfUV9EKQotREVDTEFSRV9JTlNOKGZzcXJ0X3EsIE1BVENIX0ZTUVJUX1EsIE1BU0tfRlNRUlRfUSkKLURFQ0xBUkVfSU5TTihmbGVfcywgTUFUQ0hfRkxFX1MsIE1BU0tfRkxFX1MpCi1ERUNMQVJFX0lOU04oZmx0X3MsIE1BVENIX0ZMVF9TLCBNQVNLX0ZMVF9TKQotREVDTEFSRV9JTlNOKGZlcV9zLCBNQVRDSF9GRVFfUywgTUFTS19GRVFfUykKLURFQ0xBUkVfSU5TTihmbGVfZCwgTUFUQ0hfRkxFX0QsIE1BU0tfRkxFX0QpCi1ERUNMQVJFX0lOU04oZmx0X2QsIE1BVENIX0ZMVF9ELCBNQVNLX0ZMVF9EKQotREVDTEFSRV9JTlNOKGZlcV9kLCBNQVRDSF9GRVFfRCwgTUFTS19GRVFfRCkKLURFQ0xBUkVfSU5TTihmbGVfcSwgTUFUQ0hfRkxFX1EsIE1BU0tfRkxFX1EpCi1ERUNMQVJFX0lOU04oZmx0X3EsIE1BVENIX0ZMVF9RLCBNQVNLX0ZMVF9RKQotREVDTEFSRV9JTlNOKGZlcV9xLCBNQVRDSF9GRVFfUSwgTUFTS19GRVFfUSkKLURFQ0xBUkVfSU5TTihmY3Z0X3dfcywgTUFUQ0hfRkNWVF9XX1MsIE1BU0tfRkNWVF9XX1MpCi1ERUNMQVJFX0lOU04oZmN2dF93dV9zLCBNQVRDSF9GQ1ZUX1dVX1MsIE1BU0tfRkNWVF9XVV9TKQotREVDTEFSRV9JTlNOKGZjdnRfbF9zLCBNQVRDSF9GQ1ZUX0xfUywgTUFTS19GQ1ZUX0xfUykKLURFQ0xBUkVfSU5TTihmY3Z0X2x1X3MsIE1BVENIX0ZDVlRfTFVfUywgTUFTS19GQ1ZUX0xVX1MpCi1ERUNMQVJFX0lOU04oZm12X3hfdywgTUFUQ0hfRk1WX1hfVywgTUFTS19GTVZfWF9XKQotREVDTEFSRV9JTlNOKGZjbGFzc19zLCBNQVRDSF9GQ0xBU1NfUywgTUFTS19GQ0xBU1NfUykKLURFQ0xBUkVfSU5TTihmY3Z0X3dfZCwgTUFUQ0hfRkNWVF9XX0QsIE1BU0tfRkNWVF9XX0QpCi1ERUNMQVJFX0lOU04oZmN2dF93dV9kLCBNQVRDSF9GQ1ZUX1dVX0QsIE1BU0tfRkNWVF9XVV9EKQotREVDTEFSRV9JTlNOKGZjdnRfbF9kLCBNQVRDSF9GQ1ZUX0xfRCwgTUFTS19GQ1ZUX0xfRCkKLURFQ0xBUkVfSU5TTihmY3Z0X2x1X2QsIE1BVENIX0ZDVlRfTFVfRCwgTUFTS19GQ1ZUX0xVX0QpCi1ERUNMQVJFX0lOU04oZm12X3hfZCwgTUFUQ0hfRk1WX1hfRCwgTUFTS19GTVZfWF9EKQotREVDTEFSRV9JTlNOKGZjbGFzc19kLCBNQVRDSF9GQ0xBU1NfRCwgTUFTS19GQ0xBU1NfRCkKLURFQ0xBUkVfSU5TTihmY3Z0X3dfcSwgTUFUQ0hfRkNWVF9XX1EsIE1BU0tfRkNWVF9XX1EpCi1ERUNMQVJFX0lOU04oZmN2dF93dV9xLCBNQVRDSF9GQ1ZUX1dVX1EsIE1BU0tfRkNWVF9XVV9RKQotREVDTEFSRV9JTlNOKGZjdnRfbF9xLCBNQVRDSF9GQ1ZUX0xfUSwgTUFTS19GQ1ZUX0xfUSkKLURFQ0xBUkVfSU5TTihmY3Z0X2x1X3EsIE1BVENIX0ZDVlRfTFVfUSwgTUFTS19GQ1ZUX0xVX1EpCi1ERUNMQVJFX0lOU04oZm12X3hfcSwgTUFUQ0hfRk1WX1hfUSwgTUFTS19GTVZfWF9RKQotREVDTEFSRV9JTlNOKGZjbGFzc19xLCBNQVRDSF9GQ0xBU1NfUSwgTUFTS19GQ0xBU1NfUSkKLURFQ0xBUkVfSU5TTihmY3Z0X3NfdywgTUFUQ0hfRkNWVF9TX1csIE1BU0tfRkNWVF9TX1cpCi1ERUNMQVJFX0lOU04oZmN2dF9zX3d1LCBNQVRDSF9GQ1ZUX1NfV1UsIE1BU0tfRkNWVF9TX1dVKQotREVDTEFSRV9JTlNOKGZjdnRfc19sLCBNQVRDSF9GQ1ZUX1NfTCwgTUFTS19GQ1ZUX1NfTCkKLURFQ0xBUkVfSU5TTihmY3Z0X3NfbHUsIE1BVENIX0ZDVlRfU19MVSwgTUFTS19GQ1ZUX1NfTFUpCi1ERUNMQVJFX0lOU04oZm12X3dfeCwgTUFUQ0hfRk1WX1dfWCwgTUFTS19GTVZfV19YKQotREVDTEFSRV9JTlNOKGZjdnRfZF93LCBNQVRDSF9GQ1ZUX0RfVywgTUFTS19GQ1ZUX0RfVykKLURFQ0xBUkVfSU5TTihmY3Z0X2Rfd3UsIE1BVENIX0ZDVlRfRF9XVSwgTUFTS19GQ1ZUX0RfV1UpCi1ERUNMQVJFX0lOU04oZmN2dF9kX2wsIE1BVENIX0ZDVlRfRF9MLCBNQVNLX0ZDVlRfRF9MKQotREVDTEFSRV9JTlNOKGZjdnRfZF9sdSwgTUFUQ0hfRkNWVF9EX0xVLCBNQVNLX0ZDVlRfRF9MVSkKLURFQ0xBUkVfSU5TTihmbXZfZF94LCBNQVRDSF9GTVZfRF9YLCBNQVNLX0ZNVl9EX1gpCi1ERUNMQVJFX0lOU04oZmN2dF9xX3csIE1BVENIX0ZDVlRfUV9XLCBNQVNLX0ZDVlRfUV9XKQotREVDTEFSRV9JTlNOKGZjdnRfcV93dSwgTUFUQ0hfRkNWVF9RX1dVLCBNQVNLX0ZDVlRfUV9XVSkKLURFQ0xBUkVfSU5TTihmY3Z0X3FfbCwgTUFUQ0hfRkNWVF9RX0wsIE1BU0tfRkNWVF9RX0wpCi1ERUNMQVJFX0lOU04oZmN2dF9xX2x1LCBNQVRDSF9GQ1ZUX1FfTFUsIE1BU0tfRkNWVF9RX0xVKQotREVDTEFSRV9JTlNOKGZtdl9xX3gsIE1BVENIX0ZNVl9RX1gsIE1BU0tfRk1WX1FfWCkKLURFQ0xBUkVfSU5TTihmbHcsIE1BVENIX0ZMVywgTUFTS19GTFcpCi1ERUNMQVJFX0lOU04oZmxkLCBNQVRDSF9GTEQsIE1BU0tfRkxEKQotREVDTEFSRV9JTlNOKGZscSwgTUFUQ0hfRkxRLCBNQVNLX0ZMUSkKLURFQ0xBUkVfSU5TTihmc3csIE1BVENIX0ZTVywgTUFTS19GU1cpCi1ERUNMQVJFX0lOU04oZnNkLCBNQVRDSF9GU0QsIE1BU0tfRlNEKQotREVDTEFSRV9JTlNOKGZzcSwgTUFUQ0hfRlNRLCBNQVNLX0ZTUSkKLURFQ0xBUkVfSU5TTihmbWFkZF9zLCBNQVRDSF9GTUFERF9TLCBNQVNLX0ZNQUREX1MpCi1ERUNMQVJFX0lOU04oZm1zdWJfcywgTUFUQ0hfRk1TVUJfUywgTUFTS19GTVNVQl9TKQotREVDTEFSRV9JTlNOKGZubXN1Yl9zLCBNQVRDSF9GTk1TVUJfUywgTUFTS19GTk1TVUJfUykKLURFQ0xBUkVfSU5TTihmbm1hZGRfcywgTUFUQ0hfRk5NQUREX1MsIE1BU0tfRk5NQUREX1MpCi1ERUNMQVJFX0lOU04oZm1hZGRfZCwgTUFUQ0hfRk1BRERfRCwgTUFTS19GTUFERF9EKQotREVDTEFSRV9JTlNOKGZtc3ViX2QsIE1BVENIX0ZNU1VCX0QsIE1BU0tfRk1TVUJfRCkKLURFQ0xBUkVfSU5TTihmbm1zdWJfZCwgTUFUQ0hfRk5NU1VCX0QsIE1BU0tfRk5NU1VCX0QpCi1ERUNMQVJFX0lOU04oZm5tYWRkX2QsIE1BVENIX0ZOTUFERF9ELCBNQVNLX0ZOTUFERF9EKQotREVDTEFSRV9JTlNOKGZtYWRkX3EsIE1BVENIX0ZNQUREX1EsIE1BU0tfRk1BRERfUSkKLURFQ0xBUkVfSU5TTihmbXN1Yl9xLCBNQVRDSF9GTVNVQl9RLCBNQVNLX0ZNU1VCX1EpCi1ERUNMQVJFX0lOU04oZm5tc3ViX3EsIE1BVENIX0ZOTVNVQl9RLCBNQVNLX0ZOTVNVQl9RKQotREVDTEFSRV9JTlNOKGZubWFkZF9xLCBNQVRDSF9GTk1BRERfUSwgTUFTS19GTk1BRERfUSkKLURFQ0xBUkVfSU5TTihjX25vcCwgTUFUQ0hfQ19OT1AsIE1BU0tfQ19OT1ApCi1ERUNMQVJFX0lOU04oY19hZGRpMTZzcCwgTUFUQ0hfQ19BRERJMTZTUCwgTUFTS19DX0FEREkxNlNQKQotREVDTEFSRV9JTlNOKGNfanIsIE1BVENIX0NfSlIsIE1BU0tfQ19KUikKLURFQ0xBUkVfSU5TTihjX2phbHIsIE1BVENIX0NfSkFMUiwgTUFTS19DX0pBTFIpCi1ERUNMQVJFX0lOU04oY19lYnJlYWssIE1BVENIX0NfRUJSRUFLLCBNQVNLX0NfRUJSRUFLKQotREVDTEFSRV9JTlNOKGNfbGQsIE1BVENIX0NfTEQsIE1BU0tfQ19MRCkKLURFQ0xBUkVfSU5TTihjX3NkLCBNQVRDSF9DX1NELCBNQVNLX0NfU0QpCi1ERUNMQVJFX0lOU04oY19hZGRpdywgTUFUQ0hfQ19BRERJVywgTUFTS19DX0FERElXKQotREVDTEFSRV9JTlNOKGNfbGRzcCwgTUFUQ0hfQ19MRFNQLCBNQVNLX0NfTERTUCkKLURFQ0xBUkVfSU5TTihjX3Nkc3AsIE1BVENIX0NfU0RTUCwgTUFTS19DX1NEU1ApCi1ERUNMQVJFX0lOU04oY19hZGRpNHNwbiwgTUFUQ0hfQ19BRERJNFNQTiwgTUFTS19DX0FEREk0U1BOKQotREVDTEFSRV9JTlNOKGNfZmxkLCBNQVRDSF9DX0ZMRCwgTUFTS19DX0ZMRCkKLURFQ0xBUkVfSU5TTihjX2x3LCBNQVRDSF9DX0xXLCBNQVNLX0NfTFcpCi1ERUNMQVJFX0lOU04oY19mbHcsIE1BVENIX0NfRkxXLCBNQVNLX0NfRkxXKQotREVDTEFSRV9JTlNOKGNfZnNkLCBNQVRDSF9DX0ZTRCwgTUFTS19DX0ZTRCkKLURFQ0xBUkVfSU5TTihjX3N3LCBNQVRDSF9DX1NXLCBNQVNLX0NfU1cpCi1ERUNMQVJFX0lOU04oY19mc3csIE1BVENIX0NfRlNXLCBNQVNLX0NfRlNXKQotREVDTEFSRV9JTlNOKGNfYWRkaSwgTUFUQ0hfQ19BRERJLCBNQVNLX0NfQURESSkKLURFQ0xBUkVfSU5TTihjX2phbCwgTUFUQ0hfQ19KQUwsIE1BU0tfQ19KQUwpCi1ERUNMQVJFX0lOU04oY19saSwgTUFUQ0hfQ19MSSwgTUFTS19DX0xJKQotREVDTEFSRV9JTlNOKGNfbHVpLCBNQVRDSF9DX0xVSSwgTUFTS19DX0xVSSkKLURFQ0xBUkVfSU5TTihjX3NybGksIE1BVENIX0NfU1JMSSwgTUFTS19DX1NSTEkpCi1ERUNMQVJFX0lOU04oY19zcmFpLCBNQVRDSF9DX1NSQUksIE1BU0tfQ19TUkFJKQotREVDTEFSRV9JTlNOKGNfYW5kaSwgTUFUQ0hfQ19BTkRJLCBNQVNLX0NfQU5ESSkKLURFQ0xBUkVfSU5TTihjX3N1YiwgTUFUQ0hfQ19TVUIsIE1BU0tfQ19TVUIpCi1ERUNMQVJFX0lOU04oY194b3IsIE1BVENIX0NfWE9SLCBNQVNLX0NfWE9SKQotREVDTEFSRV9JTlNOKGNfb3IsIE1BVENIX0NfT1IsIE1BU0tfQ19PUikKLURFQ0xBUkVfSU5TTihjX2FuZCwgTUFUQ0hfQ19BTkQsIE1BU0tfQ19BTkQpCi1ERUNMQVJFX0lOU04oY19zdWJ3LCBNQVRDSF9DX1NVQlcsIE1BU0tfQ19TVUJXKQotREVDTEFSRV9JTlNOKGNfYWRkdywgTUFUQ0hfQ19BRERXLCBNQVNLX0NfQUREVykKLURFQ0xBUkVfSU5TTihjX2osIE1BVENIX0NfSiwgTUFTS19DX0opCi1ERUNMQVJFX0lOU04oY19iZXF6LCBNQVRDSF9DX0JFUVosIE1BU0tfQ19CRVFaKQotREVDTEFSRV9JTlNOKGNfYm5leiwgTUFUQ0hfQ19CTkVaLCBNQVNLX0NfQk5FWikKLURFQ0xBUkVfSU5TTihjX3NsbGksIE1BVENIX0NfU0xMSSwgTUFTS19DX1NMTEkpCi1ERUNMQVJFX0lOU04oY19mbGRzcCwgTUFUQ0hfQ19GTERTUCwgTUFTS19DX0ZMRFNQKQotREVDTEFSRV9JTlNOKGNfbHdzcCwgTUFUQ0hfQ19MV1NQLCBNQVNLX0NfTFdTUCkKLURFQ0xBUkVfSU5TTihjX2Zsd3NwLCBNQVRDSF9DX0ZMV1NQLCBNQVNLX0NfRkxXU1ApCi1ERUNMQVJFX0lOU04oY19tdiwgTUFUQ0hfQ19NViwgTUFTS19DX01WKQotREVDTEFSRV9JTlNOKGNfYWRkLCBNQVRDSF9DX0FERCwgTUFTS19DX0FERCkKLURFQ0xBUkVfSU5TTihjX2ZzZHNwLCBNQVRDSF9DX0ZTRFNQLCBNQVNLX0NfRlNEU1ApCi1ERUNMQVJFX0lOU04oY19zd3NwLCBNQVRDSF9DX1NXU1AsIE1BU0tfQ19TV1NQKQotREVDTEFSRV9JTlNOKGNfZnN3c3AsIE1BVENIX0NfRlNXU1AsIE1BU0tfQ19GU1dTUCkKLURFQ0xBUkVfSU5TTihjdXN0b20wLCBNQVRDSF9DVVNUT00wLCBNQVNLX0NVU1RPTTApCi1ERUNMQVJFX0lOU04oY3VzdG9tMF9yczEsIE1BVENIX0NVU1RPTTBfUlMxLCBNQVNLX0NVU1RPTTBfUlMxKQotREVDTEFSRV9JTlNOKGN1c3RvbTBfcnMxX3JzMiwgTUFUQ0hfQ1VTVE9NMF9SUzFfUlMyLCBNQVNLX0NVU1RPTTBfUlMxX1JTMikKLURFQ0xBUkVfSU5TTihjdXN0b20wX3JkLCBNQVRDSF9DVVNUT00wX1JELCBNQVNLX0NVU1RPTTBfUkQpCi1ERUNMQVJFX0lOU04oY3VzdG9tMF9yZF9yczEsIE1BVENIX0NVU1RPTTBfUkRfUlMxLCBNQVNLX0NVU1RPTTBfUkRfUlMxKQotREVDTEFSRV9JTlNOKGN1c3RvbTBfcmRfcnMxX3JzMiwgTUFUQ0hfQ1VTVE9NMF9SRF9SUzFfUlMyLCBNQVNLX0NVU1RPTTBfUkRfUlMxX1JTMikKLURFQ0xBUkVfSU5TTihjdXN0b20xLCBNQVRDSF9DVVNUT00xLCBNQVNLX0NVU1RPTTEpCi1ERUNMQVJFX0lOU04oY3VzdG9tMV9yczEsIE1BVENIX0NVU1RPTTFfUlMxLCBNQVNLX0NVU1RPTTFfUlMxKQotREVDTEFSRV9JTlNOKGN1c3RvbTFfcnMxX3JzMiwgTUFUQ0hfQ1VTVE9NMV9SUzFfUlMyLCBNQVNLX0NVU1RPTTFfUlMxX1JTMikKLURFQ0xBUkVfSU5TTihjdXN0b20xX3JkLCBNQVRDSF9DVVNUT00xX1JELCBNQVNLX0NVU1RPTTFfUkQpCi1ERUNMQVJFX0lOU04oY3VzdG9tMV9yZF9yczEsIE1BVENIX0NVU1RPTTFfUkRfUlMxLCBNQVNLX0NVU1RPTTFfUkRfUlMxKQotREVDTEFSRV9JTlNOKGN1c3RvbTFfcmRfcnMxX3JzMiwgTUFUQ0hfQ1VTVE9NMV9SRF9SUzFfUlMyLCBNQVNLX0NVU1RPTTFfUkRfUlMxX1JTMikKLURFQ0xBUkVfSU5TTihjdXN0b20yLCBNQVRDSF9DVVNUT00yLCBNQVNLX0NVU1RPTTIpCi1ERUNMQVJFX0lOU04oY3VzdG9tMl9yczEsIE1BVENIX0NVU1RPTTJfUlMxLCBNQVNLX0NVU1RPTTJfUlMxKQotREVDTEFSRV9JTlNOKGN1c3RvbTJfcnMxX3JzMiwgTUFUQ0hfQ1VTVE9NMl9SUzFfUlMyLCBNQVNLX0NVU1RPTTJfUlMxX1JTMikKLURFQ0xBUkVfSU5TTihjdXN0b20yX3JkLCBNQVRDSF9DVVNUT00yX1JELCBNQVNLX0NVU1RPTTJfUkQpCi1ERUNMQVJFX0lOU04oY3VzdG9tMl9yZF9yczEsIE1BVENIX0NVU1RPTTJfUkRfUlMxLCBNQVNLX0NVU1RPTTJfUkRfUlMxKQotREVDTEFSRV9JTlNOKGN1c3RvbTJfcmRfcnMxX3JzMiwgTUFUQ0hfQ1VTVE9NMl9SRF9SUzFfUlMyLCBNQVNLX0NVU1RPTTJfUkRfUlMxX1JTMikKLURFQ0xBUkVfSU5TTihjdXN0b20zLCBNQVRDSF9DVVNUT00zLCBNQVNLX0NVU1RPTTMpCi1ERUNMQVJFX0lOU04oY3VzdG9tM19yczEsIE1BVENIX0NVU1RPTTNfUlMxLCBNQVNLX0NVU1RPTTNfUlMxKQotREVDTEFSRV9JTlNOKGN1c3RvbTNfcnMxX3JzMiwgTUFUQ0hfQ1VTVE9NM19SUzFfUlMyLCBNQVNLX0NVU1RPTTNfUlMxX1JTMikKLURFQ0xBUkVfSU5TTihjdXN0b20zX3JkLCBNQVRDSF9DVVNUT00zX1JELCBNQVNLX0NVU1RPTTNfUkQpCi1ERUNMQVJFX0lOU04oY3VzdG9tM19yZF9yczEsIE1BVENIX0NVU1RPTTNfUkRfUlMxLCBNQVNLX0NVU1RPTTNfUkRfUlMxKQotREVDTEFSRV9JTlNOKGN1c3RvbTNfcmRfcnMxX3JzMiwgTUFUQ0hfQ1VTVE9NM19SRF9SUzFfUlMyLCBNQVNLX0NVU1RPTTNfUkRfUlMxX1JTMikKLSNlbmRpZgotI2lmZGVmIERFQ0xBUkVfQ1NSCi1ERUNMQVJFX0NTUihmZmxhZ3MsIENTUl9GRkxBR1MpCi1ERUNMQVJFX0NTUihmcm0sIENTUl9GUk0pCi1ERUNMQVJFX0NTUihmY3NyLCBDU1JfRkNTUikKLURFQ0xBUkVfQ1NSKGN5Y2xlLCBDU1JfQ1lDTEUpCi1ERUNMQVJFX0NTUih0aW1lLCBDU1JfVElNRSkKLURFQ0xBUkVfQ1NSKGluc3RyZXQsIENTUl9JTlNUUkVUKQotREVDTEFSRV9DU1IoaHBtY291bnRlcjMsIENTUl9IUE1DT1VOVEVSMykKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI0LCBDU1JfSFBNQ09VTlRFUjQpCi1ERUNMQVJFX0NTUihocG1jb3VudGVyNSwgQ1NSX0hQTUNPVU5URVI1KQotREVDTEFSRV9DU1IoaHBtY291bnRlcjYsIENTUl9IUE1DT1VOVEVSNikKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI3LCBDU1JfSFBNQ09VTlRFUjcpCi1ERUNMQVJFX0NTUihocG1jb3VudGVyOCwgQ1NSX0hQTUNPVU5URVI4KQotREVDTEFSRV9DU1IoaHBtY291bnRlcjksIENTUl9IUE1DT1VOVEVSOSkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxMCwgQ1NSX0hQTUNPVU5URVIxMCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxMSwgQ1NSX0hQTUNPVU5URVIxMSkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxMiwgQ1NSX0hQTUNPVU5URVIxMikKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxMywgQ1NSX0hQTUNPVU5URVIxMykKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxNCwgQ1NSX0hQTUNPVU5URVIxNCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxNSwgQ1NSX0hQTUNPVU5URVIxNSkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxNiwgQ1NSX0hQTUNPVU5URVIxNikKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxNywgQ1NSX0hQTUNPVU5URVIxNykKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxOCwgQ1NSX0hQTUNPVU5URVIxOCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxOSwgQ1NSX0hQTUNPVU5URVIxOSkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyMCwgQ1NSX0hQTUNPVU5URVIyMCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyMSwgQ1NSX0hQTUNPVU5URVIyMSkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyMiwgQ1NSX0hQTUNPVU5URVIyMikKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyMywgQ1NSX0hQTUNPVU5URVIyMykKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyNCwgQ1NSX0hQTUNPVU5URVIyNCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyNSwgQ1NSX0hQTUNPVU5URVIyNSkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyNiwgQ1NSX0hQTUNPVU5URVIyNikKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyNywgQ1NSX0hQTUNPVU5URVIyNykKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyOCwgQ1NSX0hQTUNPVU5URVIyOCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyOSwgQ1NSX0hQTUNPVU5URVIyOSkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIzMCwgQ1NSX0hQTUNPVU5URVIzMCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIzMSwgQ1NSX0hQTUNPVU5URVIzMSkKLURFQ0xBUkVfQ1NSKHNzdGF0dXMsIENTUl9TU1RBVFVTKQotREVDTEFSRV9DU1Ioc2llLCBDU1JfU0lFKQotREVDTEFSRV9DU1Ioc3R2ZWMsIENTUl9TVFZFQykKLURFQ0xBUkVfQ1NSKHNjb3VudGVyZW4sIENTUl9TQ09VTlRFUkVOKQotREVDTEFSRV9DU1Ioc3NjcmF0Y2gsIENTUl9TU0NSQVRDSCkKLURFQ0xBUkVfQ1NSKHNlcGMsIENTUl9TRVBDKQotREVDTEFSRV9DU1Ioc2NhdXNlLCBDU1JfU0NBVVNFKQotREVDTEFSRV9DU1Ioc2JhZGFkZHIsIENTUl9TQkFEQUREUikKLURFQ0xBUkVfQ1NSKHNpcCwgQ1NSX1NJUCkKLURFQ0xBUkVfQ1NSKHNwdGJyLCBDU1JfU1BUQlIpCi1ERUNMQVJFX0NTUihtc3RhdHVzLCBDU1JfTVNUQVRVUykKLURFQ0xBUkVfQ1NSKG1pc2EsIENTUl9NSVNBKQotREVDTEFSRV9DU1IobWVkZWxlZywgQ1NSX01FREVMRUcpCi1ERUNMQVJFX0NTUihtaWRlbGVnLCBDU1JfTUlERUxFRykKLURFQ0xBUkVfQ1NSKG1pZSwgQ1NSX01JRSkKLURFQ0xBUkVfQ1NSKG10dmVjLCBDU1JfTVRWRUMpCi1ERUNMQVJFX0NTUihtY291bnRlcmVuLCBDU1JfTUNPVU5URVJFTikKLURFQ0xBUkVfQ1NSKG1zY3JhdGNoLCBDU1JfTVNDUkFUQ0gpCi1ERUNMQVJFX0NTUihtZXBjLCBDU1JfTUVQQykKLURFQ0xBUkVfQ1NSKG1jYXVzZSwgQ1NSX01DQVVTRSkKLURFQ0xBUkVfQ1NSKG1iYWRhZGRyLCBDU1JfTUJBREFERFIpCi1ERUNMQVJFX0NTUihtaXAsIENTUl9NSVApCi1ERUNMQVJFX0NTUihwbXBjZmcwLCBDU1JfUE1QQ0ZHMCkKLURFQ0xBUkVfQ1NSKHBtcGNmZzEsIENTUl9QTVBDRkcxKQotREVDTEFSRV9DU1IocG1wY2ZnMiwgQ1NSX1BNUENGRzIpCi1ERUNMQVJFX0NTUihwbXBjZmczLCBDU1JfUE1QQ0ZHMykKLURFQ0xBUkVfQ1NSKHBtcGFkZHIwLCBDU1JfUE1QQUREUjApCi1ERUNMQVJFX0NTUihwbXBhZGRyMSwgQ1NSX1BNUEFERFIxKQotREVDTEFSRV9DU1IocG1wYWRkcjIsIENTUl9QTVBBRERSMikKLURFQ0xBUkVfQ1NSKHBtcGFkZHIzLCBDU1JfUE1QQUREUjMpCi1ERUNMQVJFX0NTUihwbXBhZGRyNCwgQ1NSX1BNUEFERFI0KQotREVDTEFSRV9DU1IocG1wYWRkcjUsIENTUl9QTVBBRERSNSkKLURFQ0xBUkVfQ1NSKHBtcGFkZHI2LCBDU1JfUE1QQUREUjYpCi1ERUNMQVJFX0NTUihwbXBhZGRyNywgQ1NSX1BNUEFERFI3KQotREVDTEFSRV9DU1IocG1wYWRkcjgsIENTUl9QTVBBRERSOCkKLURFQ0xBUkVfQ1NSKHBtcGFkZHI5LCBDU1JfUE1QQUREUjkpCi1ERUNMQVJFX0NTUihwbXBhZGRyMTAsIENTUl9QTVBBRERSMTApCi1ERUNMQVJFX0NTUihwbXBhZGRyMTEsIENTUl9QTVBBRERSMTEpCi1ERUNMQVJFX0NTUihwbXBhZGRyMTIsIENTUl9QTVBBRERSMTIpCi1ERUNMQVJFX0NTUihwbXBhZGRyMTMsIENTUl9QTVBBRERSMTMpCi1ERUNMQVJFX0NTUihwbXBhZGRyMTQsIENTUl9QTVBBRERSMTQpCi1ERUNMQVJFX0NTUihwbXBhZGRyMTUsIENTUl9QTVBBRERSMTUpCi1ERUNMQVJFX0NTUih0c2VsZWN0LCBDU1JfVFNFTEVDVCkKLURFQ0xBUkVfQ1NSKHRkYXRhMSwgQ1NSX1REQVRBMSkKLURFQ0xBUkVfQ1NSKHRkYXRhMiwgQ1NSX1REQVRBMikKLURFQ0xBUkVfQ1NSKHRkYXRhMywgQ1NSX1REQVRBMykKLURFQ0xBUkVfQ1NSKGRjc3IsIENTUl9EQ1NSKQotREVDTEFSRV9DU1IoZHBjLCBDU1JfRFBDKQotREVDTEFSRV9DU1IoZHNjcmF0Y2gsIENTUl9EU0NSQVRDSCkKLURFQ0xBUkVfQ1NSKG1jeWNsZSwgQ1NSX01DWUNMRSkKLURFQ0xBUkVfQ1NSKG1pbnN0cmV0LCBDU1JfTUlOU1RSRVQpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjMsIENTUl9NSFBNQ09VTlRFUjMpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjQsIENTUl9NSFBNQ09VTlRFUjQpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjUsIENTUl9NSFBNQ09VTlRFUjUpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjYsIENTUl9NSFBNQ09VTlRFUjYpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjcsIENTUl9NSFBNQ09VTlRFUjcpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjgsIENTUl9NSFBNQ09VTlRFUjgpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjksIENTUl9NSFBNQ09VTlRFUjkpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjEwLCBDU1JfTUhQTUNPVU5URVIxMCkKLURFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTEsIENTUl9NSFBNQ09VTlRFUjExKQotREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxMiwgQ1NSX01IUE1DT1VOVEVSMTIpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjEzLCBDU1JfTUhQTUNPVU5URVIxMykKLURFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTQsIENTUl9NSFBNQ09VTlRFUjE0KQotREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxNSwgQ1NSX01IUE1DT1VOVEVSMTUpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjE2LCBDU1JfTUhQTUNPVU5URVIxNikKLURFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTcsIENTUl9NSFBNQ09VTlRFUjE3KQotREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxOCwgQ1NSX01IUE1DT1VOVEVSMTgpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjE5LCBDU1JfTUhQTUNPVU5URVIxOSkKLURFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjAsIENTUl9NSFBNQ09VTlRFUjIwKQotREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyMSwgQ1NSX01IUE1DT1VOVEVSMjEpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjIyLCBDU1JfTUhQTUNPVU5URVIyMikKLURFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjMsIENTUl9NSFBNQ09VTlRFUjIzKQotREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyNCwgQ1NSX01IUE1DT1VOVEVSMjQpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjI1LCBDU1JfTUhQTUNPVU5URVIyNSkKLURFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjYsIENTUl9NSFBNQ09VTlRFUjI2KQotREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyNywgQ1NSX01IUE1DT1VOVEVSMjcpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjI4LCBDU1JfTUhQTUNPVU5URVIyOCkKLURFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjksIENTUl9NSFBNQ09VTlRFUjI5KQotREVDTEFSRV9DU1IobWhwbWNvdW50ZXIzMCwgQ1NSX01IUE1DT1VOVEVSMzApCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjMxLCBDU1JfTUhQTUNPVU5URVIzMSkKLURFQ0xBUkVfQ1NSKG1ocG1ldmVudDMsIENTUl9NSFBNRVZFTlQzKQotREVDTEFSRV9DU1IobWhwbWV2ZW50NCwgQ1NSX01IUE1FVkVOVDQpCi1ERUNMQVJFX0NTUihtaHBtZXZlbnQ1LCBDU1JfTUhQTUVWRU5UNSkKLURFQ0xBUkVfQ1NSKG1ocG1ldmVudDYsIENTUl9NSFBNRVZFTlQ2KQotREVDTEFSRV9DU1IobWhwbWV2ZW50NywgQ1NSX01IUE1FVkVOVDcpCi1ERUNMQVJFX0NTUihtaHBtZXZlbnQ4LCBDU1JfTUhQTUVWRU5UOCkKLURFQ0xBUkVfQ1NSKG1ocG1ldmVudDksIENTUl9NSFBNRVZFTlQ5KQotREVDTEFSRV9DU1IobWhwbWV2ZW50MTAsIENTUl9NSFBNRVZFTlQxMCkKLURFQ0xBUkVfQ1NSKG1ocG1ldmVudDExLCBDU1JfTUhQTUVWRU5UMTEpCi1ERUNMQVJFX0NTUihtaHBtZXZlbnQxMiwgQ1NSX01IUE1FVkVOVDEyKQotREVDTEFSRV9DU1IobWhwbWV2ZW50MTMsIENTUl9NSFBNRVZFTlQxMykKLURFQ0xBUkVfQ1NSKG1ocG1ldmVudDE0LCBDU1JfTUhQTUVWRU5UMTQpCi1ERUNMQVJFX0NTUihtaHBtZXZlbnQxNSwgQ1NSX01IUE1FVkVOVDE1KQotREVDTEFSRV9DU1IobWhwbWV2ZW50MTYsIENTUl9NSFBNRVZFTlQxNikKLURFQ0xBUkVfQ1NSKG1ocG1ldmVudDE3LCBDU1JfTUhQTUVWRU5UMTcpCi1ERUNMQVJFX0NTUihtaHBtZXZlbnQxOCwgQ1NSX01IUE1FVkVOVDE4KQotREVDTEFSRV9DU1IobWhwbWV2ZW50MTksIENTUl9NSFBNRVZFTlQxOSkKLURFQ0xBUkVfQ1NSKG1ocG1ldmVudDIwLCBDU1JfTUhQTUVWRU5UMjApCi1ERUNMQVJFX0NTUihtaHBtZXZlbnQyMSwgQ1NSX01IUE1FVkVOVDIxKQotREVDTEFSRV9DU1IobWhwbWV2ZW50MjIsIENTUl9NSFBNRVZFTlQyMikKLURFQ0xBUkVfQ1NSKG1ocG1ldmVudDIzLCBDU1JfTUhQTUVWRU5UMjMpCi1ERUNMQVJFX0NTUihtaHBtZXZlbnQyNCwgQ1NSX01IUE1FVkVOVDI0KQotREVDTEFSRV9DU1IobWhwbWV2ZW50MjUsIENTUl9NSFBNRVZFTlQyNSkKLURFQ0xBUkVfQ1NSKG1ocG1ldmVudDI2LCBDU1JfTUhQTUVWRU5UMjYpCi1ERUNMQVJFX0NTUihtaHBtZXZlbnQyNywgQ1NSX01IUE1FVkVOVDI3KQotREVDTEFSRV9DU1IobWhwbWV2ZW50MjgsIENTUl9NSFBNRVZFTlQyOCkKLURFQ0xBUkVfQ1NSKG1ocG1ldmVudDI5LCBDU1JfTUhQTUVWRU5UMjkpCi1ERUNMQVJFX0NTUihtaHBtZXZlbnQzMCwgQ1NSX01IUE1FVkVOVDMwKQotREVDTEFSRV9DU1IobWhwbWV2ZW50MzEsIENTUl9NSFBNRVZFTlQzMSkKLURFQ0xBUkVfQ1NSKG12ZW5kb3JpZCwgQ1NSX01WRU5ET1JJRCkKLURFQ0xBUkVfQ1NSKG1hcmNoaWQsIENTUl9NQVJDSElEKQotREVDTEFSRV9DU1IobWltcGlkLCBDU1JfTUlNUElEKQotREVDTEFSRV9DU1IobWhhcnRpZCwgQ1NSX01IQVJUSUQpCi1ERUNMQVJFX0NTUihjeWNsZWgsIENTUl9DWUNMRUgpCi1ERUNMQVJFX0NTUih0aW1laCwgQ1NSX1RJTUVIKQotREVDTEFSRV9DU1IoaW5zdHJldGgsIENTUl9JTlNUUkVUSCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIzaCwgQ1NSX0hQTUNPVU5URVIzSCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI0aCwgQ1NSX0hQTUNPVU5URVI0SCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI1aCwgQ1NSX0hQTUNPVU5URVI1SCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI2aCwgQ1NSX0hQTUNPVU5URVI2SCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI3aCwgQ1NSX0hQTUNPVU5URVI3SCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI4aCwgQ1NSX0hQTUNPVU5URVI4SCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI5aCwgQ1NSX0hQTUNPVU5URVI5SCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxMGgsIENTUl9IUE1DT1VOVEVSMTBIKQotREVDTEFSRV9DU1IoaHBtY291bnRlcjExaCwgQ1NSX0hQTUNPVU5URVIxMUgpCi1ERUNMQVJFX0NTUihocG1jb3VudGVyMTJoLCBDU1JfSFBNQ09VTlRFUjEySCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxM2gsIENTUl9IUE1DT1VOVEVSMTNIKQotREVDTEFSRV9DU1IoaHBtY291bnRlcjE0aCwgQ1NSX0hQTUNPVU5URVIxNEgpCi1ERUNMQVJFX0NTUihocG1jb3VudGVyMTVoLCBDU1JfSFBNQ09VTlRFUjE1SCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxNmgsIENTUl9IUE1DT1VOVEVSMTZIKQotREVDTEFSRV9DU1IoaHBtY291bnRlcjE3aCwgQ1NSX0hQTUNPVU5URVIxN0gpCi1ERUNMQVJFX0NTUihocG1jb3VudGVyMThoLCBDU1JfSFBNQ09VTlRFUjE4SCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxOWgsIENTUl9IUE1DT1VOVEVSMTlIKQotREVDTEFSRV9DU1IoaHBtY291bnRlcjIwaCwgQ1NSX0hQTUNPVU5URVIyMEgpCi1ERUNMQVJFX0NTUihocG1jb3VudGVyMjFoLCBDU1JfSFBNQ09VTlRFUjIxSCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyMmgsIENTUl9IUE1DT1VOVEVSMjJIKQotREVDTEFSRV9DU1IoaHBtY291bnRlcjIzaCwgQ1NSX0hQTUNPVU5URVIyM0gpCi1ERUNMQVJFX0NTUihocG1jb3VudGVyMjRoLCBDU1JfSFBNQ09VTlRFUjI0SCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyNWgsIENTUl9IUE1DT1VOVEVSMjVIKQotREVDTEFSRV9DU1IoaHBtY291bnRlcjI2aCwgQ1NSX0hQTUNPVU5URVIyNkgpCi1ERUNMQVJFX0NTUihocG1jb3VudGVyMjdoLCBDU1JfSFBNQ09VTlRFUjI3SCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyOGgsIENTUl9IUE1DT1VOVEVSMjhIKQotREVDTEFSRV9DU1IoaHBtY291bnRlcjI5aCwgQ1NSX0hQTUNPVU5URVIyOUgpCi1ERUNMQVJFX0NTUihocG1jb3VudGVyMzBoLCBDU1JfSFBNQ09VTlRFUjMwSCkKLURFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIzMWgsIENTUl9IUE1DT1VOVEVSMzFIKQotREVDTEFSRV9DU1IobWN5Y2xlaCwgQ1NSX01DWUNMRUgpCi1ERUNMQVJFX0NTUihtaW5zdHJldGgsIENTUl9NSU5TVFJFVEgpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjNoLCBDU1JfTUhQTUNPVU5URVIzSCkKLURFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyNGgsIENTUl9NSFBNQ09VTlRFUjRIKQotREVDTEFSRV9DU1IobWhwbWNvdW50ZXI1aCwgQ1NSX01IUE1DT1VOVEVSNUgpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjZoLCBDU1JfTUhQTUNPVU5URVI2SCkKLURFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyN2gsIENTUl9NSFBNQ09VTlRFUjdIKQotREVDTEFSRV9DU1IobWhwbWNvdW50ZXI4aCwgQ1NSX01IUE1DT1VOVEVSOEgpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjloLCBDU1JfTUhQTUNPVU5URVI5SCkKLURFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTBoLCBDU1JfTUhQTUNPVU5URVIxMEgpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjExaCwgQ1NSX01IUE1DT1VOVEVSMTFIKQotREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxMmgsIENTUl9NSFBNQ09VTlRFUjEySCkKLURFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTNoLCBDU1JfTUhQTUNPVU5URVIxM0gpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjE0aCwgQ1NSX01IUE1DT1VOVEVSMTRIKQotREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxNWgsIENTUl9NSFBNQ09VTlRFUjE1SCkKLURFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTZoLCBDU1JfTUhQTUNPVU5URVIxNkgpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjE3aCwgQ1NSX01IUE1DT1VOVEVSMTdIKQotREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxOGgsIENTUl9NSFBNQ09VTlRFUjE4SCkKLURFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTloLCBDU1JfTUhQTUNPVU5URVIxOUgpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjIwaCwgQ1NSX01IUE1DT1VOVEVSMjBIKQotREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyMWgsIENTUl9NSFBNQ09VTlRFUjIxSCkKLURFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjJoLCBDU1JfTUhQTUNPVU5URVIyMkgpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjIzaCwgQ1NSX01IUE1DT1VOVEVSMjNIKQotREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyNGgsIENTUl9NSFBNQ09VTlRFUjI0SCkKLURFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjVoLCBDU1JfTUhQTUNPVU5URVIyNUgpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjI2aCwgQ1NSX01IUE1DT1VOVEVSMjZIKQotREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyN2gsIENTUl9NSFBNQ09VTlRFUjI3SCkKLURFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjhoLCBDU1JfTUhQTUNPVU5URVIyOEgpCi1ERUNMQVJFX0NTUihtaHBtY291bnRlcjI5aCwgQ1NSX01IUE1DT1VOVEVSMjlIKQotREVDTEFSRV9DU1IobWhwbWNvdW50ZXIzMGgsIENTUl9NSFBNQ09VTlRFUjMwSCkKLURFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMzFoLCBDU1JfTUhQTUNPVU5URVIzMUgpCi0jZW5kaWYKLSNpZmRlZiBERUNMQVJFX0NBVVNFCi1ERUNMQVJFX0NBVVNFKCJtaXNhbGlnbmVkIGZldGNoIiwgQ0FVU0VfTUlTQUxJR05FRF9GRVRDSCkKLURFQ0xBUkVfQ0FVU0UoImZldGNoIGFjY2VzcyIsIENBVVNFX0ZFVENIX0FDQ0VTUykKLURFQ0xBUkVfQ0FVU0UoImlsbGVnYWwgaW5zdHJ1Y3Rpb24iLCBDQVVTRV9JTExFR0FMX0lOU1RSVUNUSU9OKQotREVDTEFSRV9DQVVTRSgiYnJlYWtwb2ludCIsIENBVVNFX0JSRUFLUE9JTlQpCi1ERUNMQVJFX0NBVVNFKCJtaXNhbGlnbmVkIGxvYWQiLCBDQVVTRV9NSVNBTElHTkVEX0xPQUQpCi1ERUNMQVJFX0NBVVNFKCJsb2FkIGFjY2VzcyIsIENBVVNFX0xPQURfQUNDRVNTKQotREVDTEFSRV9DQVVTRSgibWlzYWxpZ25lZCBzdG9yZSIsIENBVVNFX01JU0FMSUdORURfU1RPUkUpCi1ERUNMQVJFX0NBVVNFKCJzdG9yZSBhY2Nlc3MiLCBDQVVTRV9TVE9SRV9BQ0NFU1MpCi1ERUNMQVJFX0NBVVNFKCJ1c2VyX2VjYWxsIiwgQ0FVU0VfVVNFUl9FQ0FMTCkKLURFQ0xBUkVfQ0FVU0UoInN1cGVydmlzb3JfZWNhbGwiLCBDQVVTRV9TVVBFUlZJU09SX0VDQUxMKQotREVDTEFSRV9DQVVTRSgiaHlwZXJ2aXNvcl9lY2FsbCIsIENBVVNFX0hZUEVSVklTT1JfRUNBTEwpCi1ERUNMQVJFX0NBVVNFKCJtYWNoaW5lX2VjYWxsIiwgQ0FVU0VfTUFDSElORV9FQ0FMTCkKLURFQ0xBUkVfQ0FVU0UoImZldGNoIHBhZ2UgZmF1bHQiLCBDQVVTRV9GRVRDSF9QQUdFX0ZBVUxUKQotREVDTEFSRV9DQVVTRSgibG9hZCBwYWdlIGZhdWx0IiwgQ0FVU0VfTE9BRF9QQUdFX0ZBVUxUKQotREVDTEFSRV9DQVVTRSgic3RvcmUgcGFnZSBmYXVsdCIsIENBVVNFX1NUT1JFX1BBR0VfRkFVTFQpCi0jZW5kaWYKLQotI2luY2x1ZGUgInNjcjFfc3BlY2lmaWMuaCIKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vcmlzY3ZfbWFjcm9zLmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uL3Jpc2N2X21hY3Jvcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjVhZTk0Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vcmlzY3ZfbWFjcm9zLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MzYgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMQotLy8gCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IFN5bnRhY29yZSBMTEMKLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTZWUgTElDRU5TRSBmb3IgbGljZW5zZSBkZXRhaWxzLgotCi0jaWZuZGVmIF9fUklTQ1ZfTUFDUk9TX0gKLSNkZWZpbmUgX19SSVNDVl9NQUNST1NfSAotCi0jaW5jbHVkZSAicmlzY3ZfY3NyX2VuY29kaW5nLmgiCi0jaW5jbHVkZSAic2NfdGVzdC5oIgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBCZWdpbiBNYWNybwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZGVmaW5lIFJWVEVTVF9SVjY0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIC5tYWNybyBpbml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIC5lbmRtCi0KLSNkZWZpbmUgUlZURVNUX1JWNjRVRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgLm1hY3JvIGluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgUlZURVNUX0ZQX0VOQUJMRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgLmVuZG0KLQotI2RlZmluZSBSVlRFU1RfUlYzMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAubWFjcm8gaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAuZW5kbQotCi0jZGVmaW5lIFJWVEVTVF9SVjMyVUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIC5tYWNybyBpbml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFJWVEVTVF9GUF9FTkFCTEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIC5lbmRtCi0KLSNkZWZpbmUgUlZURVNUX1JWNjRNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgLm1hY3JvIGluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgUlZURVNUX0VOQUJMRV9NQUNISU5FOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgLmVuZG0KLQotI2RlZmluZSBSVlRFU1RfUlY2NFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAubWFjcm8gaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBSVlRFU1RfRU5BQkxFX1NVUEVSVklTT1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAuZW5kbQotCi0jZGVmaW5lIFJWVEVTVF9SVjMyTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIC5tYWNybyBpbml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFJWVEVTVF9FTkFCTEVfTUFDSElORTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIC5lbmRtCi0KLSNkZWZpbmUgUlZURVNUX1JWMzJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgLm1hY3JvIGluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgUlZURVNUX0VOQUJMRV9TVVBFUlZJU09SOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgLmVuZG0KLQotI2lmIF9fcmlzY3ZfeGxlbiA9PSA2NAotIyBkZWZpbmUgQ0hFQ0tfWExFTiBsaSBhMCwgMTsgc2xsaSBhMCwgYTAsIDMxOyBiZ2V6IGEwLCAxZjsgUlZURVNUX1BBU1M7IDE6Ci0jZWxzZQotIyBkZWZpbmUgQ0hFQ0tfWExFTiBsaSBhMCwgMTsgc2xsaSBhMCwgYTAsIDMxOyBibHR6IGEwLCAxZjsgUlZURVNUX1BBU1M7IDE6Ci0jZW5kaWYKLQotI2RlZmluZSBJTklUX1BNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBsYSB0MCwgMWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjc3J3IG10dmVjLCB0MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBsaSB0MCwgLTE7ICAgICAgICAvKiBTZXQgdXAgYSBQTVAgdG8gcGVybWl0IGFsbCBhY2Nlc3NlcyAqLyAgICAgICAgICAgXAotICBjc3J3IHBtcGFkZHIwLCB0MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBsaSB0MCwgUE1QX05BUE9UIHwgUE1QX1IgfCBQTVBfVyB8IFBNUF9YOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjc3J3IHBtcGNmZzAsIHQwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAuYmFsaWduIDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLTE6Ci0KLSNkZWZpbmUgSU5JVF9TUFRCUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgbGEgdDAsIDFmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY3NydyBtdHZlYywgdDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY3Nyd2kgc3B0YnIsIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgLmJhbGlnbiA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0xOgotCi0jZGVmaW5lIERFTEVHQVRFX05PX1RSQVBTCi0KLSNkZWZpbmUgUlZURVNUX0VOQUJMRV9TVVBFUlZJU09SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgbGkgYTAsIE1TVEFUVVNfTVBQICYgKE1TVEFUVVNfTVBQID4+IDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY3NycyBtc3RhdHVzLCBhMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgbGkgYTAsIFNJUF9TU0lQIHwgU0lQX1NUSVA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY3NycyBtaWRlbGVnLCBhMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQotI2RlZmluZSBSVlRFU1RfRU5BQkxFX01BQ0hJTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBsaSBhMCwgTVNUQVRVU19NUFA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjc3JzIG1zdGF0dXMsIGEwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCi0jZGVmaW5lIFJWVEVTVF9GUF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGxpIGEwLCBNU1RBVFVTX0ZTICYgKE1TVEFUVVNfRlMgPj4gMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNzcnMgbXN0YXR1cywgYTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNzcndpIGZjc3IsIDAKLQotI2RlZmluZSBSSVNDVl9NVUxUSUNPUkVfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjc3JyIGEwLCBtaGFydGlkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAxOiBibmV6IGEwLCAxYgotCi0jZGVmaW5lIEVYVFJBX1RWRUNfVVNFUgotI2RlZmluZSBFWFRSQV9UVkVDX1NVUEVSVklTT1IKLSNkZWZpbmUgRVhUUkFfVFZFQ19IWVBFUlZJU09SCi0jZGVmaW5lIEVYVFJBX1RWRUNfTUFDSElORQotI2RlZmluZSBFWFRSQV9JTklUCi0jZGVmaW5lIEVYVFJBX0lOSVRfVElNRVIKLQotI2RlZmluZSBJTlRFUlJVUFRfSEFORExFUiBqIG90aGVyX2V4Y2VwdGlvbiAvKiBObyBpbnRlcnJ1cHRzIHNob3VsZCBvY2N1ciAqLwotCi0jZGVmaW5lIFJWVEVTVF9DT0RFX0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC5zZWN0aW9uIC50ZXh0LmluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC5vcmcgMHhDMCwgMHgwMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC5iYWxpZ24gIDY0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC53ZWFrIHN0dmVjX2hhbmRsZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC53ZWFrIG10dmVjX2hhbmRsZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi10cmFwX3ZlY3RvcjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC8qIHRlc3Qgd2hldGhlciB0aGUgdGVzdCBjYW1lIGZyb20gcGFzcy9mYWlsICovICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNzcnIgYTQsIG1jYXVzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGxpIGE1LCBDQVVTRV9VU0VSX0VDQUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGJlcSBhNCwgYTUsIF9yZXBvcnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGxpIGE1LCBDQVVTRV9TVVBFUlZJU09SX0VDQUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGJlcSBhNCwgYTUsIF9yZXBvcnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGxpIGE1LCBDQVVTRV9NQUNISU5FX0VDQUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGJlcSBhNCwgYTUsIF9yZXBvcnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC8qIGlmIGFuIG10dmVjX2hhbmRsZXIgaXMgZGVmaW5lZCwganVtcCB0byBpdCAqLyAgICAgICAgICAgICAgICBcCi0gICAgICAgIGxhIGE0LCBtdHZlY19oYW5kbGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGJlcXogYTQsIDFmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGpyIGE0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC8qIHdhcyBpdCBhbiBpbnRlcnJ1cHQgb3IgYW4gZXhjZXB0aW9uPyAqLyAgICAgICAgICAgICAgICAgICAgICBcCi0xOiAgICAgIGNzcnIgYTQsIG1jYXVzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGJnZXogYTQsIGhhbmRsZV9leGNlcHRpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIElOVEVSUlVQVF9IQU5ETEVSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1oYW5kbGVfZXhjZXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC8qIHdlIGRvbid0IGtub3cgaG93IHRvIGhhbmRsZSB3aGF0ZXZlciB0aGUgZXhjZXB0aW9uIHdhcyAqLyAgICBcCi1vdGhlcl9leGNlcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC8qIHNvbWUgdW5oYW5kbGFibGUgZXhjZXB0aW9uIG9jY3VycmVkICovICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGxpICAgYTAsIDB4MTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1fcmVwb3J0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGogc2NfZXhpdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC5iYWxpZ24gIDY0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC5nbG9ibCBfc3RhcnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1fc3RhcnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFJJU0NWX01VTFRJQ09SRV9ESVNBQkxFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC8qSU5JVF9TUFRCUjsqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC8qSU5JVF9QTVA7Ki8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIERFTEVHQVRFX05PX1RSQVBTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGxpIFRFU1ROVU0sIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGxhIHQwLCB0cmFwX3ZlY3RvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNzcncgbXR2ZWMsIHQwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENIRUNLX1hMRU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC8qIGlmIGFuIHN0dmVjX2hhbmRsZXIgaXMgZGVmaW5lZCwgZGVsZWdhdGUgZXhjZXB0aW9ucyB0byBpdCAqLyBcCi0gICAgICAgIGxhIHQwLCBzdHZlY19oYW5kbGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGJlcXogdDAsIDFmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNzcncgc3R2ZWMsIHQwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGxpIHQwLCAoMSA8PCBDQVVTRV9MT0FEX1BBR0VfRkFVTFQpIHwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAoMSA8PCBDQVVTRV9TVE9SRV9QQUdFX0ZBVUxUKSB8ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAoMSA8PCBDQVVTRV9GRVRDSF9QQUdFX0ZBVUxUKSB8ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAoMSA8PCBDQVVTRV9NSVNBTElHTkVEX0ZFVENIKSB8ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAoMSA8PCBDQVVTRV9VU0VSX0VDQUxMKSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAoMSA8PCBDQVVTRV9CUkVBS1BPSU5UKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNzcncgbWVkZWxlZywgdDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNzcnIgdDEsIG1lZGVsZWc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGJuZSB0MCwgdDEsIG90aGVyX2V4Y2VwdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0xOiAgICAgIGNzcndpIG1zdGF0dXMsIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIEVYVFJBX0lOSVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIEVYVFJBX0lOSVRfVElNRVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGxhIHQwLCBfcnVuX3Rlc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNzcncgbWVwYywgdDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNzcnIgYTAsIG1oYXJ0aWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIG1yZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC5zZWN0aW9uIC50ZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1fcnVuX3Rlc3Q6Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEVuZCBNYWNybwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZGVmaW5lIFJWVEVTVF9DT0RFX0VORCBlY2FsbDogZWNhbGwKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUGFzcy9GYWlsIE1hY3JvCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgUlZURVNUX1BBU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZmVuY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgbXYgYTEsIFRFU1ROVU07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgbGkgIGEwLCAweDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZWNhbGwKLQotI2RlZmluZSBURVNUTlVNIHgyOAotI2RlZmluZSBSVlRFU1RfRkFJTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBmZW5jZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBtdiBhMSwgVEVTVE5VTTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBsaSAgYTAsIDB4MTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBlY2FsbAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBEYXRhIFNlY3Rpb24gTWFjcm8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2RlZmluZSBFWFRSQV9EQVRBCi0KLSNkZWZpbmUgUlZURVNUX0RBVEFfQkVHSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBFWFRSQV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC5wdXNoc2VjdGlvbiAudG9ob3N0LCJhdyIsQHByb2diaXRzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgLmJhbGlnbiA2NDsgLmdsb2JhbCB0b2hvc3Q7IHRvaG9zdDogLmR3b3JkIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAuYmFsaWduIDY0OyAuZ2xvYmFsIGZyb21ob3N0OyBmcm9taG9zdDogLmR3b3JkIDA7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC5wb3BzZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgLmJhbGlnbiAxNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAuZ2xvYmFsIGJlZ2luX3JlZ3N0YXRlOyAgYmVnaW5fcmVnc3RhdGU6IC5kd29yZCAwOyAuZHdvcmQgMDsgLmR3b3JkIDA7ICBcCi0gICAgICAgIC5iYWxpZ24gMTY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgLmdsb2JhbCBiZWdpbl9zaWduYXR1cmU7IGJlZ2luX3NpZ25hdHVyZToKLQotI2RlZmluZSBSVlRFU1RfREFUQV9FTkQgLmJhbGlnbiAxNjsgLmdsb2JhbCBlbmRfc2lnbmF0dXJlOyBlbmRfc2lnbmF0dXJlOgotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgSGVscGVyIG1hY3JvcwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgTUFTS19YTEVOKHgpICgoeCkgJiAoKDEgPDwgKF9fcmlzY3ZfeGxlbiAtIDEpIDw8IDEpIC0gMSkpCi0KLSNkZWZpbmUgVEVTVF9DQVNFKCB0ZXN0bnVtLCB0ZXN0cmVnLCBjb3JyZWN0dmFsLCBjb2RlLi4uICkgXAotdGVzdF8gIyMgdGVzdG51bTogXAotICAgIGNvZGU7IFwKLSAgICBsaSAgeDI5LCBNQVNLX1hMRU4oY29ycmVjdHZhbCk7IFwKLSAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAotICAgIGJuZSB0ZXN0cmVnLCB4MjksIGZhaWw7Ci0KLSMgV2UgdXNlIGEgbWFjcm8gaGFjayB0byBzaW1waWZ5IGNvZGUgZ2VuZXJhdGlvbiBmb3IgdmFyaW91cyBudW1iZXJzCi0jIG9mIGJ1YmJsZSBjeWNsZXMuCi0KLSNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU18wCi0jZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfMSAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzAKLSNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU18yICBub3A7IFRFU1RfSU5TRVJUX05PUFNfMQotI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzMgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU18yCi0jZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfNCAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzMKLSNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU181ICBub3A7IFRFU1RfSU5TRVJUX05PUFNfNAotI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzYgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU181Ci0jZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfNyAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzYKLSNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU184ICBub3A7IFRFU1RfSU5TRVJUX05PUFNfNwotI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzkgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU184Ci0jZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfMTAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzkKLQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUlY2NFVJIE1BQ1JPUwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUZXN0cyBmb3IgaW5zdHJ1Y3Rpb25zIHdpdGggaW1tZWRpYXRlIG9wZXJhbmQKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZGVmaW5lIFNFWFRfSU1NKHgpICgoeCkgfCAoLSgoKHgpID4+IDExKSAmIDEpIDw8IDExKSkKLQotI2RlZmluZSBURVNUX0lNTV9PUCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCBpbW0gKSBcCi0gICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MywgcmVzdWx0LCBcCi0gICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAotICAgICAgaW5zdCB4MywgeDEsIFNFWFRfSU1NKGltbSk7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9JTU1fT1BfUlZDKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEsIGltbSApIFwKLSAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKLSAgICAgIGxpICB4MSwgdmFsMTsgXAotICAgICAgaW5zdCB4MSwgaW1tOyBcCi0gICAgKQotCi0jZGVmaW5lIFRFU1RfSU1NX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCBpbW0gKSBcCi0gICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MSwgcmVzdWx0LCBcCi0gICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAotICAgICAgaW5zdCB4MSwgeDEsIFNFWFRfSU1NKGltbSk7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9JTU1fREVTVF9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHJlc3VsdCwgdmFsMSwgaW1tICkgXAotICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDYsIHJlc3VsdCwgXAotICAgICAgbGkgIHg0LCAwOyBcCi0xOiAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAotICAgICAgaW5zdCB4MywgeDEsIFNFWFRfSU1NKGltbSk7IFwKLSAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAotICAgICAgYWRkaSAgeDYsIHgzLCAwOyBcCi0gICAgICBhZGRpICB4NCwgeDQsIDE7IFwKLSAgICAgIGxpICB4NSwgMjsgXAotICAgICAgYm5lIHg0LCB4NSwgMWIgXAotICAgICkKLQotI2RlZmluZSBURVNUX0lNTV9TUkMxX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCwgcmVzdWx0LCB2YWwxLCBpbW0gKSBcCi0gICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MywgcmVzdWx0LCBcCi0gICAgICBsaSAgeDQsIDA7IFwKLTE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCi0gICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKLSAgICAgIGluc3QgeDMsIHgxLCBTRVhUX0lNTShpbW0pOyBcCi0gICAgICBhZGRpICB4NCwgeDQsIDE7IFwKLSAgICAgIGxpICB4NSwgMjsgXAotICAgICAgYm5lIHg0LCB4NSwgMWIgXAotICAgICkKLQotI2RlZmluZSBURVNUX0lNTV9aRVJPU1JDMSggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCBpbW0gKSBcCi0gICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MSwgcmVzdWx0LCBcCi0gICAgICBpbnN0IHgxLCB4MCwgU0VYVF9JTU0oaW1tKTsgXAotICAgICkKLQotI2RlZmluZSBURVNUX0lNTV9aRVJPREVTVCggdGVzdG51bSwgaW5zdCwgdmFsMSwgaW1tICkgXAotICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDAsIDAsIFwKLSAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCi0gICAgICBpbnN0IHgwLCB4MSwgU0VYVF9JTU0oaW1tKTsgXAotICAgICkKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRlc3RzIGZvciB2ZWN0b3IgY29uZmlnIGluc3RydWN0aW9ucwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgVEVTVF9WU0VUQ0ZHSVZMKCB0ZXN0bnVtLCBueHByLCBuZnByLCBiYW5rLCB2bCwgcmVzdWx0ICkgXAotICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAotICAgICAgbGkgeDEsIChiYW5rIDw8IDEyKTsgXAotICAgICAgdnNldGNmZyB4MSxueHByLG5mcHI7IFwKLSAgICAgIGxpIHgxLCB2bDsgXAotICAgICAgdnNldHZsIHgxLHgxOyBcCi0gICAgKQotCi0jZGVmaW5lIFRFU1RfVlZDRkcoIHRlc3RudW0sIG54cHIsIG5mcHIsIGJhbmssIHZsLCByZXN1bHQgKSBcCi0gICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MSwgcmVzdWx0LCBcCi0gICAgICBsaSB4MSwgKGJhbmsgPDwgMTIpIHwgKG5mcHIgPDwgNikgfCBueHByOyBcCi0gICAgICB2c2V0Y2ZnIHgxOyBcCi0gICAgICBsaSB4MSwgdmw7IFwKLSAgICAgIHZzZXR2bCB4MSx4MTsgXAotICAgICkKLQotI2RlZmluZSBURVNUX1ZTRVRWTCggdGVzdG51bSwgbnhwciwgbmZwciwgYmFuaywgdmwsIHJlc3VsdCApIFwKLSAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKLSAgICAgIGxpIHgxLCAoYmFuayA8PCAxMik7IFwKLSAgICAgIHZzZXRjZmcgeDEsbnhwcixuZnByOyBcCi0gICAgICBsaSB4MSwgdmw7IFwKLSAgICAgIHZzZXR2bCB4MSwgeDE7IFwKLSAgICApCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUZXN0cyBmb3IgYW4gaW5zdHJ1Y3Rpb24gd2l0aCByZWdpc3RlciBvcGVyYW5kcwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgVEVTVF9SX09QKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEgKSBcCi0gICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MywgcmVzdWx0LCBcCi0gICAgICBsaSAgeDEsIHZhbDE7IFwKLSAgICAgIGluc3QgeDMsIHgxOyBcCi0gICAgKQotCi0jZGVmaW5lIFRFU1RfUl9TUkMxX0VRX0RFU1QoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKLSAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKLSAgICAgIGxpICB4MSwgdmFsMTsgXAotICAgICAgaW5zdCB4MSwgeDE7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9SX0RFU1RfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIHZhbDEgKSBcCi0gICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4NiwgcmVzdWx0LCBcCi0gICAgICBsaSAgeDQsIDA7IFwKLTE6ICAgIGxpICB4MSwgdmFsMTsgXAotICAgICAgaW5zdCB4MywgeDE7IFwKLSAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAotICAgICAgYWRkaSAgeDYsIHgzLCAwOyBcCi0gICAgICBhZGRpICB4NCwgeDQsIDE7IFwKLSAgICAgIGxpICB4NSwgMjsgXAotICAgICAgYm5lIHg0LCB4NSwgMWIgXAotICAgICkKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRlc3RzIGZvciBhbiBpbnN0cnVjdGlvbiB3aXRoIHJlZ2lzdGVyLXJlZ2lzdGVyIG9wZXJhbmRzCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2RlZmluZSBURVNUX1JSX09QKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEsIHZhbDIgKSBcCi0gICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MywgcmVzdWx0LCBcCi0gICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAotICAgICAgbGkgIHgyLCBNQVNLX1hMRU4odmFsMik7IFwKLSAgICAgIGluc3QgeDMsIHgxLCB4MjsgXAotICAgICkKLQotI2RlZmluZSBURVNUX1JSX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAotICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAotICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKLSAgICAgIGxpICB4MiwgTUFTS19YTEVOKHZhbDIpOyBcCi0gICAgICBpbnN0IHgxLCB4MSwgeDI7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9SUl9TUkMyX0VRX0RFU1QoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKLSAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgyLCByZXN1bHQsIFwKLSAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCi0gICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAotICAgICAgaW5zdCB4MiwgeDEsIHgyOyBcCi0gICAgKQotCi0jZGVmaW5lIFRFU1RfUlJfU1JDMTJfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAotICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAotICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKLSAgICAgIGluc3QgeDEsIHgxLCB4MTsgXAotICAgICkKLQotI2RlZmluZSBURVNUX1JSX0RFU1RfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIHZhbDEsIHZhbDIgKSBcCi0gICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4NiwgcmVzdWx0LCBcCi0gICAgICBsaSAgeDQsIDA7IFwKLTE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCi0gICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAotICAgICAgaW5zdCB4MywgeDEsIHgyOyBcCi0gICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKLSAgICAgIGFkZGkgIHg2LCB4MywgMDsgXAotICAgICAgYWRkaSAgeDQsIHg0LCAxOyBcCi0gICAgICBsaSAgeDUsIDI7IFwKLSAgICAgIGJuZSB4NCwgeDUsIDFiIFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9SUl9TUkMxMl9CWVBBU1MoIHRlc3RudW0sIHNyYzFfbm9wcywgc3JjMl9ub3BzLCBpbnN0LCByZXN1bHQsIHZhbDEsIHZhbDIgKSBcCi0gICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MywgcmVzdWx0LCBcCi0gICAgICBsaSAgeDQsIDA7IFwKLTE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCi0gICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAotICAgICAgbGkgIHgyLCBNQVNLX1hMRU4odmFsMik7IFwKLSAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCi0gICAgICBpbnN0IHgzLCB4MSwgeDI7IFwKLSAgICAgIGFkZGkgIHg0LCB4NCwgMTsgXAotICAgICAgbGkgIHg1LCAyOyBcCi0gICAgICBibmUgeDQsIHg1LCAxYiBcCi0gICAgKQotCi0jZGVmaW5lIFRFU1RfUlJfU1JDMjFfQllQQVNTKCB0ZXN0bnVtLCBzcmMxX25vcHMsIHNyYzJfbm9wcywgaW5zdCwgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAotICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDMsIHJlc3VsdCwgXAotICAgICAgbGkgIHg0LCAwOyBcCi0xOiAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAotICAgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMV9ub3BzIFwKLSAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCi0gICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMyX25vcHMgXAotICAgICAgaW5zdCB4MywgeDEsIHgyOyBcCi0gICAgICBhZGRpICB4NCwgeDQsIDE7IFwKLSAgICAgIGxpICB4NSwgMjsgXAotICAgICAgYm5lIHg0LCB4NSwgMWIgXAotICAgICkKLQotI2RlZmluZSBURVNUX1JSX1pFUk9TUkMxKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbCApIFwKLSAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgyLCByZXN1bHQsIFwKLSAgICAgIGxpIHgxLCBNQVNLX1hMRU4odmFsKTsgXAotICAgICAgaW5zdCB4MiwgeDAsIHgxOyBcCi0gICAgKQotCi0jZGVmaW5lIFRFU1RfUlJfWkVST1NSQzIoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsICkgXAotICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDIsIHJlc3VsdCwgXAotICAgICAgbGkgeDEsIE1BU0tfWExFTih2YWwpOyBcCi0gICAgICBpbnN0IHgyLCB4MSwgeDA7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9SUl9aRVJPU1JDMTIoIHRlc3RudW0sIGluc3QsIHJlc3VsdCApIFwKLSAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKLSAgICAgIGluc3QgeDEsIHgwLCB4MDsgXAotICAgICkKLQotI2RlZmluZSBURVNUX1JSX1pFUk9ERVNUKCB0ZXN0bnVtLCBpbnN0LCB2YWwxLCB2YWwyICkgXAotICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDAsIDAsIFwKLSAgICAgIGxpIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKLSAgICAgIGxpIHgyLCBNQVNLX1hMRU4odmFsMik7IFwKLSAgICAgIGluc3QgeDAsIHgxLCB4MjsgXAotICAgICkKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRlc3QgbWVtb3J5IGluc3RydWN0aW9ucwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgVEVTVF9MRF9PUCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCi0gICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MywgcmVzdWx0LCBcCi0gICAgICBsYSAgeDEsIGJhc2U7IFwKLSAgICAgIGluc3QgeDMsIG9mZnNldCh4MSk7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9TVF9PUCggdGVzdG51bSwgbG9hZF9pbnN0LCBzdG9yZV9pbnN0LCByZXN1bHQsIG9mZnNldCwgYmFzZSApIFwKLSAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzLCByZXN1bHQsIFwKLSAgICAgIGxhICB4MSwgYmFzZTsgXAotICAgICAgbGkgIHgyLCByZXN1bHQ7IFwKLSAgICAgIHN0b3JlX2luc3QgeDIsIG9mZnNldCh4MSk7IFwKLSAgICAgIGxvYWRfaW5zdCB4Mywgb2Zmc2V0KHgxKTsgXAotICAgICkKLQotI2RlZmluZSBURVNUX0xEX0RFU1RfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIG9mZnNldCwgYmFzZSApIFwKLXRlc3RfICMjIHRlc3RudW06IFwKLSAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAotICAgIGxpICB4NCwgMDsgXAotMTogIGxhICB4MSwgYmFzZTsgXAotICAgIGluc3QgeDMsIG9mZnNldCh4MSk7IFwKLSAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKLSAgICBhZGRpICB4NiwgeDMsIDA7IFwKLSAgICBsaSAgeDI5LCByZXN1bHQ7IFwKLSAgICBibmUgeDYsIHgyOSwgZmFpbDsgXAotICAgIGFkZGkgIHg0LCB4NCwgMTsgXAotICAgIGxpICB4NSwgMjsgXAotICAgIGJuZSB4NCwgeDUsIDFiOyBcCi0KLSNkZWZpbmUgVEVTVF9MRF9TUkMxX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCi10ZXN0XyAjIyB0ZXN0bnVtOiBcCi0gICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKLSAgICBsaSAgeDQsIDA7IFwKLTE6ICBsYSAgeDEsIGJhc2U7IFwKLSAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKLSAgICBpbnN0IHgzLCBvZmZzZXQoeDEpOyBcCi0gICAgbGkgIHgyOSwgcmVzdWx0OyBcCi0gICAgYm5lIHgzLCB4MjksIGZhaWw7IFwKLSAgICBhZGRpICB4NCwgeDQsIDE7IFwKLSAgICBsaSAgeDUsIDI7IFwKLSAgICBibmUgeDQsIHg1LCAxYiBcCi0KLSNkZWZpbmUgVEVTVF9TVF9TUkMxMl9CWVBBU1MoIHRlc3RudW0sIHNyYzFfbm9wcywgc3JjMl9ub3BzLCBsb2FkX2luc3QsIHN0b3JlX2luc3QsIHJlc3VsdCwgb2Zmc2V0LCBiYXNlICkgXAotdGVzdF8gIyMgdGVzdG51bTogXAotICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCi0gICAgbGkgIHg0LCAwOyBcCi0xOiAgbGkgIHgxLCByZXN1bHQ7IFwKLSAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAotICAgIGxhICB4MiwgYmFzZTsgXAotICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCi0gICAgc3RvcmVfaW5zdCB4MSwgb2Zmc2V0KHgyKTsgXAotICAgIGxvYWRfaW5zdCB4Mywgb2Zmc2V0KHgyKTsgXAotICAgIGxpICB4MjksIHJlc3VsdDsgXAotICAgIGJuZSB4MywgeDI5LCBmYWlsOyBcCi0gICAgYWRkaSAgeDQsIHg0LCAxOyBcCi0gICAgbGkgIHg1LCAyOyBcCi0gICAgYm5lIHg0LCB4NSwgMWIgXAotCi0jZGVmaW5lIFRFU1RfU1RfU1JDMjFfQllQQVNTKCB0ZXN0bnVtLCBzcmMxX25vcHMsIHNyYzJfbm9wcywgbG9hZF9pbnN0LCBzdG9yZV9pbnN0LCByZXN1bHQsIG9mZnNldCwgYmFzZSApIFwKLXRlc3RfICMjIHRlc3RudW06IFwKLSAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAotICAgIGxpICB4NCwgMDsgXAotMTogIGxhICB4MiwgYmFzZTsgXAotICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCi0gICAgbGkgIHgxLCByZXN1bHQ7IFwKLSAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMyX25vcHMgXAotICAgIHN0b3JlX2luc3QgeDEsIG9mZnNldCh4Mik7IFwKLSAgICBsb2FkX2luc3QgeDMsIG9mZnNldCh4Mik7IFwKLSAgICBsaSAgeDI5LCByZXN1bHQ7IFwKLSAgICBibmUgeDMsIHgyOSwgZmFpbDsgXAotICAgIGFkZGkgIHg0LCB4NCwgMTsgXAotICAgIGxpICB4NSwgMjsgXAotICAgIGJuZSB4NCwgeDUsIDFiIFwKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRlc3QgYnJhbmNoIGluc3RydWN0aW9ucwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgVEVTVF9CUjFfT1BfVEFLRU4oIHRlc3RudW0sIGluc3QsIHZhbDEgKSBcCi10ZXN0XyAjIyB0ZXN0bnVtOiBcCi0gICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKLSAgICBsaSAgeDEsIHZhbDE7IFwKLSAgICBpbnN0IHgxLCAyZjsgXAotICAgIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAotMTogIGJuZSB4MCwgVEVTVE5VTSwgM2Y7IFwKLTI6ICBpbnN0IHgxLCAxYjsgXAotICAgIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAotMzoKLQotI2RlZmluZSBURVNUX0JSMV9PUF9OT1RUQUtFTiggdGVzdG51bSwgaW5zdCwgdmFsMSApIFwKLXRlc3RfICMjIHRlc3RudW06IFwKLSAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAotICAgIGxpICB4MSwgdmFsMTsgXAotICAgIGluc3QgeDEsIDFmOyBcCi0gICAgYm5lIHgwLCBURVNUTlVNLCAyZjsgXAotMTogIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAotMjogIGluc3QgeDEsIDFiOyBcCi0zOgotCi0jZGVmaW5lIFRFU1RfQlIxX1NSQzFfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCB2YWwxICkgXAotdGVzdF8gIyMgdGVzdG51bTogXAotICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCi0gICAgbGkgIHg0LCAwOyBcCi0xOiAgbGkgIHgxLCB2YWwxOyBcCi0gICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCi0gICAgaW5zdCB4MSwgZmFpbDsgXAotICAgIGFkZGkgIHg0LCB4NCwgMTsgXAotICAgIGxpICB4NSwgMjsgXAotICAgIGJuZSB4NCwgeDUsIDFiIFwKLQotI2RlZmluZSBURVNUX0JSMl9PUF9UQUtFTiggdGVzdG51bSwgaW5zdCwgdmFsMSwgdmFsMiApIFwKLXRlc3RfICMjIHRlc3RudW06IFwKLSAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAotICAgIGxpICB4MSwgdmFsMTsgXAotICAgIGxpICB4MiwgdmFsMjsgXAotICAgIGluc3QgeDEsIHgyLCAyZjsgXAotICAgIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAotMTogIGJuZSB4MCwgVEVTVE5VTSwgM2Y7IFwKLTI6ICBpbnN0IHgxLCB4MiwgMWI7IFwKLSAgICBibmUgeDAsIFRFU1ROVU0sIGZhaWw7IFwKLTM6Ci0KLSNkZWZpbmUgVEVTVF9CUjJfT1BfTk9UVEFLRU4oIHRlc3RudW0sIGluc3QsIHZhbDEsIHZhbDIgKSBcCi10ZXN0XyAjIyB0ZXN0bnVtOiBcCi0gICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKLSAgICBsaSAgeDEsIHZhbDE7IFwKLSAgICBsaSAgeDIsIHZhbDI7IFwKLSAgICBpbnN0IHgxLCB4MiwgMWY7IFwKLSAgICBibmUgeDAsIFRFU1ROVU0sIDJmOyBcCi0xOiAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCi0yOiAgaW5zdCB4MSwgeDIsIDFiOyBcCi0zOgotCi0jZGVmaW5lIFRFU1RfQlIyX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGluc3QsIHZhbDEsIHZhbDIgKSBcCi10ZXN0XyAjIyB0ZXN0bnVtOiBcCi0gICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKLSAgICBsaSAgeDQsIDA7IFwKLTE6ICBsaSAgeDEsIHZhbDE7IFwKLSAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAotICAgIGxpICB4MiwgdmFsMjsgXAotICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCi0gICAgaW5zdCB4MSwgeDIsIGZhaWw7IFwKLSAgICBhZGRpICB4NCwgeDQsIDE7IFwKLSAgICBsaSAgeDUsIDI7IFwKLSAgICBibmUgeDQsIHg1LCAxYiBcCi0KLSNkZWZpbmUgVEVTVF9CUjJfU1JDMjFfQllQQVNTKCB0ZXN0bnVtLCBzcmMxX25vcHMsIHNyYzJfbm9wcywgaW5zdCwgdmFsMSwgdmFsMiApIFwKLXRlc3RfICMjIHRlc3RudW06IFwKLSAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAotICAgIGxpICB4NCwgMDsgXAotMTogIGxpICB4MiwgdmFsMjsgXAotICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCi0gICAgbGkgIHgxLCB2YWwxOyBcCi0gICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKLSAgICBpbnN0IHgxLCB4MiwgZmFpbDsgXAotICAgIGFkZGkgIHg0LCB4NCwgMTsgXAotICAgIGxpICB4NSwgMjsgXAotICAgIGJuZSB4NCwgeDUsIDFiIFwKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRlc3QganVtcCBpbnN0cnVjdGlvbnMKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZGVmaW5lIFRFU1RfSlJfU1JDMV9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QgKSBcCi10ZXN0XyAjIyB0ZXN0bnVtOiBcCi0gICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKLSAgICBsaSAgeDQsIDA7IFwKLTE6ICBsYSAgeDYsIDJmOyBcCi0gICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCi0gICAgaW5zdCB4NjsgXAotICAgIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAotMjogIGFkZGkgIHg0LCB4NCwgMTsgXAotICAgIGxpICB4NSwgMjsgXAotICAgIGJuZSB4NCwgeDUsIDFiIFwKLQotI2RlZmluZSBURVNUX0pBTFJfU1JDMV9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QgKSBcCi10ZXN0XyAjIyB0ZXN0bnVtOiBcCi0gICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKLSAgICBsaSAgeDQsIDA7IFwKLTE6ICBsYSAgeDYsIDJmOyBcCi0gICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCi0gICAgaW5zdCB4MTksIHg2LCAwOyBcCi0gICAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCi0yOiAgYWRkaSAgeDQsIHg0LCAxOyBcCi0gICAgbGkgIHg1LCAyOyBcCi0gICAgYm5lIHg0LCB4NSwgMWIgXAotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBSVjY0VUYgTUFDUk9TCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRlc3RzIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgcU5hTmYgMGY6N2ZjMDAwMDAKLSNkZWZpbmUgc05hTmYgMGY6N2Y4MDAwMDEKLSNkZWZpbmUgcU5hTiAwZDo3ZmY4MDAwMDAwMDAwMDAwCi0jZGVmaW5lIHNOYU4gMGQ6N2ZmMDAwMDAwMDAwMDAwMQotCi0jZGVmaW5lIFRFU1RfRlBfT1BfU19JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMywgY29kZS4uLiApIFwKLXRlc3RfICMjIHRlc3RudW06IFwKLSAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKLSAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCi0gIGZsdyBmMCwgMChhMCk7IFwKLSAgZmx3IGYxLCA0KGEwKTsgXAotICBmbHcgZjIsIDgoYTApOyBcCi0gIGx3ICBhMywgMTIoYTApOyBcCi0gIGNvZGU7IFwKLSAgZnNmbGFncyBhMSwgeDA7IFwKLSAgbGkgYTIsIGZsYWdzOyBcCi0gIGJuZSBhMCwgYTMsIGZhaWw7IFwKLSAgYm5lIGExLCBhMiwgZmFpbDsgXAotICBqIDJmOyBcCi0gIC5iYWxpZ24gNDsgXAotICAuZGF0YTsgXAotICB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhOiBcCi0gIC5mbG9hdCB2YWwxOyBcCi0gIC5mbG9hdCB2YWwyOyBcCi0gIC5mbG9hdCB2YWwzOyBcCi0gIC5yZXN1bHQ7IFwKLSAgLnRleHQ7IFwKLTI6Ci0KLSNkZWZpbmUgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzLCBjb2RlLi4uICkgXAotdGVzdF8gIyMgdGVzdG51bTogXAotICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAotICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKLSAgZmxkIGYwLCAwKGEwKTsgXAotICBmbGQgZjEsIDgoYTApOyBcCi0gIGZsZCBmMiwgMTYoYTApOyBcCi0gIGxkICBhMywgMjQoYTApOyBcCi0gIGNvZGU7IFwKLSAgZnNmbGFncyBhMSwgeDA7IFwKLSAgbGkgYTIsIGZsYWdzOyBcCi0gIGJuZSBhMCwgYTMsIGZhaWw7IFwKLSAgYm5lIGExLCBhMiwgZmFpbDsgXAotICBqIDJmOyBcCi0gIC5kYXRhOyBcCi0gIC5iYWxpZ24gODsgXAotICB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhOiBcCi0gIC5kb3VibGUgdmFsMTsgXAotICAuZG91YmxlIHZhbDI7IFwKLSAgLmRvdWJsZSB2YWwzOyBcCi0gIC5yZXN1bHQ7IFwKLSAgLnRleHQ7IFwKLTI6Ci0KLSNkZWZpbmUgVEVTVF9GQ1ZUX1NfRCggdGVzdG51bSwgcmVzdWx0LCB2YWwxICkgXAotICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIDAsIGRvdWJsZSByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCi0gICAgICAgICAgICAgICAgICAgIGZjdnQucy5kIGYzLCBmMDsgZmN2dC5kLnMgZjMsIGYzOyBmbXYueC5kIGEwLCBmMykKLQotI2RlZmluZSBURVNUX0ZDVlRfRF9TKCB0ZXN0bnVtLCByZXN1bHQsIHZhbDEgKSBcCi0gIFRFU1RfRlBfT1BfU19JTlRFUk5BTCggdGVzdG51bSwgMCwgZmxvYXQgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAotICAgICAgICAgICAgICAgICAgICBmY3Z0LmQucyBmMywgZjA7IGZjdnQucy5kIGYzLCBmMzsgZm12LngucyBhMCwgZjMpCi0KLSNkZWZpbmUgVEVTVF9GUF9PUDFfUyggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSApIFwKLSAgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZmxvYXQgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAotICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMDsgZm12LngucyBhMCwgZjMpCi0KLSNkZWZpbmUgVEVTVF9GUF9PUDFfRCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSApIFwKLSAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKLSAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZtdi54LmQgYTAsIGYzKQotCi0jZGVmaW5lIFRFU1RfRlBfT1AxX1NfRFdPUkRfUkVTVUxUKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAotICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCi0gICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwOyBmbXYueC5zIGEwLCBmMykKLQotI2RlZmluZSBURVNUX0ZQX09QMV9EX0RXT1JEX1JFU1VMVCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSApIFwKLSAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZHdvcmQgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAotICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMDsgZm12LnguZCBhMCwgZjMpCi0KLSNkZWZpbmUgVEVTVF9GUF9PUDJfUyggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKLSAgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZmxvYXQgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKLSAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxOyBmbXYueC5zIGEwLCBmMykKLQotI2RlZmluZSBURVNUX0ZQX09QMl9EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAotICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKLSAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxOyBmbXYueC5kIGEwLCBmMykKLQotI2RlZmluZSBURVNUX0ZQX09QM19TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzICkgXAotICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBmbG9hdCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIFwKLSAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxLCBmMjsgZm12LngucyBhMCwgZjMpCi0KLSNkZWZpbmUgVEVTVF9GUF9PUDNfRCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMyApIFwKLSAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZG91YmxlIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMywgXAotICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjEsIGYyOyBmbXYueC5kIGEwLCBmMykKLQotI2RlZmluZSBURVNUX0ZQX0lOVF9PUF9TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCBybSApIFwKLSAgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCi0gICAgICAgICAgICAgICAgICAgIGluc3QgYTAsIGYwLCBybSkKLQotI2RlZmluZSBURVNUX0ZQX0lOVF9PUF9EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCBybSApIFwKLSAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZHdvcmQgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAotICAgICAgICAgICAgICAgICAgICBpbnN0IGEwLCBmMCwgcm0pCi0KLSNkZWZpbmUgVEVTVF9GUF9DTVBfT1BfUyggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKLSAgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgd29yZCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAotICAgICAgICAgICAgICAgICAgICBpbnN0IGEwLCBmMCwgZjEpCi0KLSNkZWZpbmUgVEVTVF9GUF9DTVBfT1BfRCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKLSAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZHdvcmQgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKLSAgICAgICAgICAgICAgICAgICAgaW5zdCBhMCwgZjAsIGYxKQotCi0jZGVmaW5lIFRFU1RfRkNMQVNTX1ModGVzdG51bSwgY29ycmVjdCwgaW5wdXQpIFwKLSAgVEVTVF9DQVNFKHRlc3RudW0sIGEwLCBjb3JyZWN0LCBsaSBhMCwgaW5wdXQ7IGZtdi5zLnggZmEwLCBhMDsgXAotICAgICAgICAgICAgICAgICAgICBmY2xhc3MucyBhMCwgZmEwKQotCi0jZGVmaW5lIFRFU1RfRkNMQVNTX0QodGVzdG51bSwgY29ycmVjdCwgaW5wdXQpIFwKLSAgVEVTVF9DQVNFKHRlc3RudW0sIGEwLCBjb3JyZWN0LCBsaSBhMCwgaW5wdXQ7IGZtdi5kLnggZmEwLCBhMDsgXAotICAgICAgICAgICAgICAgICAgICBmY2xhc3MuZCBhMCwgZmEwKQotCi0jZGVmaW5lIFRFU1RfSU5UX0ZQX09QX1MoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKLXRlc3RfICMjIHRlc3RudW06IFwKLSAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKLSAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCi0gIGx3ICBhMywgMChhMCk7IFwKLSAgbGkgIGEwLCB2YWwxOyBcCi0gIGluc3QgZjAsIGEwOyBcCi0gIGZzZmxhZ3MgeDA7IFwKLSAgZm12LngucyBhMCwgZjA7IFwKLSAgYm5lIGEwLCBhMywgZmFpbDsgXAotICBqIDFmOyBcCi0gIC5iYWxpZ24gNDsgXAotICB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhOiBcCi0gIC5mbG9hdCByZXN1bHQ7IFwKLTE6Ci0KLSNkZWZpbmUgVEVTVF9JTlRfRlBfT1BfRCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAotdGVzdF8gIyMgdGVzdG51bTogXAotICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAotICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKLSAgbGQgIGEzLCAwKGEwKTsgXAotICBsaSAgYTAsIHZhbDE7IFwKLSAgaW5zdCBmMCwgYTA7IFwKLSAgZnNmbGFncyB4MDsgXAotICBmbXYueC5kIGEwLCBmMDsgXAotICBibmUgYTAsIGEzLCBmYWlsOyBcCi0gIGogMWY7IFwKLSAgLmJhbGlnbiA4OyBcCi0gIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKLSAgLmRvdWJsZSByZXN1bHQ7IFwKLTE6Ci0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQYXNzIGFuZCBmYWlsIGNvZGUgKGFzc3VtZXMgdGVzdCBudW0gaXMgaW4gVEVTVE5VTSkKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZGVmaW5lIFRFU1RfUEFTU0ZBSUwgXAotICAgICAgICBibmUgeDAsIFRFU1ROVU0sIHBhc3M7IFwKLWZhaWw6IFwKLSAgICAgICAgUlZURVNUX0ZBSUw7IFwKLXBhc3M6IFwKLSAgICAgICAgUlZURVNUX1BBU1MgXAotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUZXN0IGRhdGEgc2VjdGlvbgotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgVEVTVF9EQVRBCi0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uL3NjX3ByaW50LmMgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uL3NjX3ByaW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMzFlM2IuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9zY19wcmludC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjk4ICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjEKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBTeW50YWNvcmUgTExDCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vIEBmaWxlICAgICAgIDxzY19wcmludC5jPgotLy8vCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlICJzY19wcmludC5oIgotCi0jZGVmaW5lIFNDX1NJTV9PVVRQT1JUICgweGYwMDAwMDAwKQotI2RlZmluZSBDSEFSX0JJVCAoOCkKLQotc3RhdGljIHZvaWQKLXNjX3B1dHMobG9uZyBzdHIsIGxvbmcgc3RybGVuKSB7Ci0Jdm9sYXRpbGUgY2hhciAqb3V0X3B0ciA9ICh2b2xhdGlsZSBjaGFyKilTQ19TSU1fT1VUUE9SVDsKLQljb25zdCBjaGFyICppbl9wdHIgPSAoY29uc3QgY2hhciopc3RyOwotCWZvciAobG9uZyBsZW4gPSBzdHJsZW47IGxlbiA+IDA7IC0tbGVuKQotCSAgKm91dF9wdHIgPSAqaW5fcHRyKys7Ci19Ci0KLSN1bmRlZiBwdXRjaGFyCi1pbnQKLXB1dGNoYXIoaW50IGNoKSB7Ci0Jc3RhdGljIF9fdGhyZWFkIGNoYXIgYnVmWzY0XSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDY0KSkpOwotICAgIHN0YXRpYyBfX3RocmVhZCBpbnQgYnVmbGVuID0gMDsKLQotICAgIGJ1ZltidWZsZW4rK10gPSBjaDsKLQotCWlmICggY2ggPT0gJ1xuJyB8fCBidWZsZW4gPT0gc2l6ZW9mKGJ1ZikgKSB7Ci0gICAgICAgIHNjX3B1dHMoKGxvbmcpYnVmLCBidWZsZW4pOwotICAgICAgICBidWZsZW4gPSAwOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZAotcHJpbnRmX3B1dGNoKGludCBjaCwgdm9pZCoqIGRhdGEpCi17Ci0gICAgcHV0Y2hhcihjaCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcmludChjb25zdCBjaGFyICpzdHIpCi17Ci0gIHNjX3B1dHMoKGxvbmcpc3RyLCBzdHJsZW4oc3RyKSk7Ci19Ci0KLQotc3RhdGljIGxvbmcgbG9uZwotZ2V0aW50KHZhX2xpc3QgKmFwLCBpbnQgbGZsYWcpCi17Ci0gICAgaWYgKCBsZmxhZyA+PSAyICkKLSAgICAgICAgcmV0dXJuIHZhX2FyZygqYXAsIGxvbmcgbG9uZyk7Ci0gICAgZWxzZSBpZiAoIGxmbGFnICkKLSAgICAgICAgcmV0dXJuIHZhX2FyZygqYXAsIGxvbmcpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHZhX2FyZygqYXAsIGludCk7Ci19Ci0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZwotZ2V0dWludCh2YV9saXN0ICphcCwgaW50IGxmbGFnKQotewotICAgIGlmICggbGZsYWcgPj0gMiApCi0gICAgICAgIHJldHVybiB2YV9hcmcoKmFwLCB1bnNpZ25lZCBsb25nIGxvbmcpOwotICAgIGVsc2UgaWYgKCBsZmxhZyApCi0gICAgICAgIHJldHVybiB2YV9hcmcoKmFwLCB1bnNpZ25lZCBsb25nKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiB2YV9hcmcoKmFwLCB1bnNpZ25lZCBpbnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXByaW50bnVtKHZvaWQoKnB1dGNoKShpbnQsIHZvaWQqKiksCi12b2lkICoqcHV0ZGF0LAotdW5zaWduZWQgbG9uZyBsb25nIG51bSwKLXVuc2lnbmVkIGJhc2UsCi1pbnQgd2lkdGgsCi1pbnQgcGFkYywKLWludCBoZXhfQSkKLXsKLSAgICB1bnNpZ25lZCBkaWdzW3NpemVvZihudW0pICogQ0hBUl9CSVRdOwotICAgIGludCBwb3MgPSAwOwotCi0gICAgZm9yICggOzsgKSB7Ci0gICAgICAgIGRpZ3NbcG9zKytdID0gbnVtICUgYmFzZTsKLSAgICAgICAgaWYgKCBudW0gPCBiYXNlICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBudW0gLz0gYmFzZTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIHdpZHRoLS0gPiBwb3MgKQotICAgICAgICBwdXRjaChwYWRjLCBwdXRkYXQpOwotCi0gICAgd2hpbGUgKCBwb3MtLSA+IDAgKQotICAgICAgICBwdXRjaChkaWdzW3Bvc10gKyAoZGlnc1twb3NdID49IDEwID8gaGV4X0EgLSAxMCA6ICcwJyksIHB1dGRhdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi12cHJpbnRmbXQodm9pZCgqcHV0Y2gpKGludCwgdm9pZCoqKSwgdm9pZCAqKnB1dGRhdCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQotewotICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIqIHA7Ci0gICAgY29uc3QgY2hhciogbGFzdF9mbXQ7Ci0gICAgcmVnaXN0ZXIgaW50IGNoOwotICAgIGludCBlcnI7Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIG51bTsKLSAgICBpbnQgYmFzZTsKLSAgICBpbnQgbGZsYWc7Ci0gICAgaW50IHdpZHRoOwotICAgIGludCBwcmVjaXNpb247Ci0gICAgaW50IGFsdGZsYWc7Ci0gICAgY2hhciBwYWRjOwotICAgIGludCBoZXhfQSA9ICdhJzsKLSAgICBmb3IgKCA7OyApIHsKLSAgICAgICAgd2hpbGUgKCAoY2ggPSAqKHVuc2lnbmVkIGNoYXIgKilmbXQpICE9ICclJyApIHsKLSAgICAgICAgICAgIGlmICggY2ggPT0gJ1wwJyApCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgKytmbXQ7Ci0gICAgICAgICAgICBwdXRjaChjaCwgcHV0ZGF0KTsKLSAgICAgICAgfQotICAgICAgICArK2ZtdDsKLQotICAgICAgICAvLyBQcm9jZXNzIGEgJS1lc2NhcGUgc2VxdWVuY2UKLSAgICAgICAgbGFzdF9mbXQgPSBmbXQ7Ci0gICAgICAgIHBhZGMgPSAnICc7Ci0gICAgICAgIHdpZHRoID0gLTE7Ci0gICAgICAgIHByZWNpc2lvbiA9IC0xOwotICAgICAgICBsZmxhZyA9IDA7Ci0gICAgICAgIGFsdGZsYWcgPSAwOwotCi1yZXN3aXRjaDoKLSAgICAgICAgc3dpdGNoICggY2ggPSAqKHVuc2lnbmVkIGNoYXIgKilmbXQrKyApIHsKLSAgICAgICAgICAgIC8vIGZsYWcgdG8gcGFkIG9uIHRoZSByaWdodAotICAgICAgICAgICAgY2FzZSAnLSc6Ci0gICAgICAgICAgICAgICAgcGFkYyA9ICctJzsKLSAgICAgICAgICAgICAgICBnb3RvIHJlc3dpdGNoOwotCi0gICAgICAgICAgICAgICAgLy8gZmxhZyB0byBwYWQgd2l0aCAwJ3MgaW5zdGVhZCBvZiBzcGFjZXMKLSAgICAgICAgICAgIGNhc2UgJzAnOgotICAgICAgICAgICAgICAgIHBhZGMgPSAnMCc7Ci0gICAgICAgICAgICAgICAgZ290byByZXN3aXRjaDsKLQotICAgICAgICAgICAgICAgIC8vIHdpZHRoIGZpZWxkCi0gICAgICAgICAgICBjYXNlICcxJzoKLSAgICAgICAgICAgIGNhc2UgJzInOgotICAgICAgICAgICAgY2FzZSAnMyc6Ci0gICAgICAgICAgICBjYXNlICc0JzoKLSAgICAgICAgICAgIGNhc2UgJzUnOgotICAgICAgICAgICAgY2FzZSAnNic6Ci0gICAgICAgICAgICBjYXNlICc3JzoKLSAgICAgICAgICAgIGNhc2UgJzgnOgotICAgICAgICAgICAgY2FzZSAnOSc6Ci0gICAgICAgICAgICAgICAgZm9yICggcHJlY2lzaW9uID0gMDs7ICsrZm10ICkgewotICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSBwcmVjaXNpb24gKiAxMCArIGNoIC0gJzAnOwotICAgICAgICAgICAgICAgICAgICBjaCA9ICpmbXQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggY2ggPCAnMCcgfHwgY2ggPiAnOScgKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGdvdG8gcHJvY2Vzc19wcmVjaXNpb247Ci0KLSAgICAgICAgICAgIGNhc2UgJyonOgotICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IHZhX2FyZyhhcCwgaW50KTsKLSAgICAgICAgICAgICAgICBnb3RvIHByb2Nlc3NfcHJlY2lzaW9uOwotCi0gICAgICAgICAgICBjYXNlICcuJzoKLSAgICAgICAgICAgICAgICBpZiAoIHdpZHRoIDwgMCApCi0gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gMDsKLSAgICAgICAgICAgICAgICBnb3RvIHJlc3dpdGNoOwotCi0gICAgICAgICAgICBjYXNlICcjJzoKLSAgICAgICAgICAgICAgICBhbHRmbGFnID0gMTsKLSAgICAgICAgICAgICAgICBnb3RvIHJlc3dpdGNoOwotCi1wcm9jZXNzX3ByZWNpc2lvbjoKLSAgICAgICAgICAgICAgICBpZiAoIHdpZHRoIDwgMCApIHsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBwcmVjaXNpb247Ci0gICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IC0xOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBnb3RvIHJlc3dpdGNoOwotCi0gICAgICAgICAgICAgICAgLy8gbG9uZyBmbGFnIChkb3VibGVkIGZvciBsb25nIGxvbmcpCi0gICAgICAgICAgICBjYXNlICdsJzoKLSAgICAgICAgICAgICAgICBsZmxhZysrOwotICAgICAgICAgICAgICAgIGdvdG8gcmVzd2l0Y2g7Ci0KLSAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXIKLSAgICAgICAgICAgIGNhc2UgJ2MnOgotICAgICAgICAgICAgICAgIHB1dGNoKHZhX2FyZyhhcCwgaW50KSwgcHV0ZGF0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIC8vIHN0cmluZwotICAgICAgICAgICAgY2FzZSAncyc6Ci0gICAgICAgICAgICAgICAgaWYgKCAocCA9IHZhX2FyZyhhcCwgY2hhciAqKSkgPT0gTlVMTCApCi0gICAgICAgICAgICAgICAgICAgIHAgPSAiKG51bGwpIjsKLSAgICAgICAgICAgICAgICBpZiAoIHdpZHRoID4gMCAmJiBwYWRjICE9ICctJyApCi0gICAgICAgICAgICAgICAgICAgIGZvciAoIHdpZHRoIC09IHN0cm5sZW4ocCwgcHJlY2lzaW9uKTsgd2lkdGggPiAwOyB3aWR0aC0tICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1dGNoKHBhZGMsIHB1dGRhdCk7Ci0gICAgICAgICAgICAgICAgZm9yICggOyAoY2ggPSAqcCkgIT0gJ1wwJyAmJiAocHJlY2lzaW9uIDwgMCB8fCAtLXByZWNpc2lvbiA+PSAwKTsgd2lkdGgtLSApIHsKLSAgICAgICAgICAgICAgICAgICAgcHV0Y2goY2gsIHB1dGRhdCk7Ci0gICAgICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yICggOyB3aWR0aCA+IDA7IHdpZHRoLS0gKQotICAgICAgICAgICAgICAgICAgICBwdXRjaCgnICcsIHB1dGRhdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAvLyAoc2lnbmVkKSBkZWNpbWFsCi0gICAgICAgICAgICBjYXNlICdkJzoKLSAgICAgICAgICAgICAgICBudW0gPSBnZXRpbnQoJmFwLCBsZmxhZyk7Ci0gICAgICAgICAgICAgICAgaWYgKCAobG9uZyBsb25nKW51bSA8IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1dGNoKCctJywgcHV0ZGF0KTsKLSAgICAgICAgICAgICAgICAgICAgbnVtID0gLShsb25nIGxvbmcpbnVtOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBiYXNlID0gMTA7Ci0gICAgICAgICAgICAgICAgZ290byBzaWduZWRfbnVtYmVyOwotCi0gICAgICAgICAgICBjYXNlICdmJzoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vICNpZm5kZWYgbm9wZmxvYXQKLSAgICAgICAgICAgICAgICAgICAgLy8gZG91YmxlIG51bSA9IGdldGRvdWJsZSgmYXAsIGxmbGFnKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gcHJpbnRkb3VibGVGKHB1dGNoLCBwdXRkYXQsIG51bSwgd2lkdGgsIHByZWNpc2lvbiwgcGFkYyk7Ci0gICAgICAgICAgICAgICAgICAgIC8vICNlbmRpZgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIC8vIHVuc2lnbmVkIGRlY2ltYWwKLSAgICAgICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgICAgIGJhc2UgPSAxMDsKLSAgICAgICAgICAgICAgICBnb3RvIHVuc2lnbmVkX251bWJlcjsKLQotICAgICAgICAgICAgICAgIC8vICh1bnNpZ25lZCkgb2N0YWwKLSAgICAgICAgICAgIGNhc2UgJ28nOgotICAgICAgICAgICAgICAgIC8vIHNob3VsZCBkbyBzb21ldGhpbmcgd2l0aCBwYWRkaW5nIHNvIGl0J3MgYWx3YXlzIDMgb2N0aXRzCi0gICAgICAgICAgICAgICAgYmFzZSA9IDg7Ci0gICAgICAgICAgICAgICAgZ290byB1bnNpZ25lZF9udW1iZXI7Ci0KLSAgICAgICAgICAgICAgICAvLyBwb2ludGVyCi0gICAgICAgICAgICBjYXNlICdwJzoKLSAgICAgICAgICAgICAgICAvLyBzdGF0aWNfYXNzZXJ0KHNpemVvZihsb25nKSA9PSBzaXplb2Yodm9pZCopKTsKLSAgICAgICAgICAgICAgICBsZmxhZyA9IDE7Ci0gICAgICAgICAgICAgICAgcHV0Y2goJzAnLCBwdXRkYXQpOwotICAgICAgICAgICAgICAgIHB1dGNoKCd4JywgcHV0ZGF0KTsKLSAgICAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggdG8gJ3gnICovCi0KLSAgICAgICAgICAgICAgICAvLyAodW5zaWduZWQpIGhleGFkZWNpbWFsCi0gICAgICAgICAgICBjYXNlICd4JzoKLSAgICAgICAgICAgICAgICBoZXhfQSA9ICdhJzsKLSAgICAgICAgICAgICAgICBiYXNlID0gMTY7Ci0gICAgICAgICAgICAgICAgZ290byB1bnNpZ25lZF9udW1iZXI7Ci0KLSAgICAgICAgICAgIGNhc2UgJ1gnOgotICAgICAgICAgICAgICAgIGhleF9BID0gJ0EnOwotICAgICAgICAgICAgICAgIGJhc2UgPSAxNjsKLXVuc2lnbmVkX251bWJlcjoKLSAgICAgICAgICAgICAgICBudW0gPSBnZXR1aW50KCZhcCwgbGZsYWcpOwotc2lnbmVkX251bWJlcjoKLSAgICAgICAgICAgICAgICBwcmludG51bShwdXRjaCwgcHV0ZGF0LCBudW0sIGJhc2UsIHdpZHRoLCBwYWRjLCBoZXhfQSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAvLyBlc2NhcGVkICclJyBjaGFyYWN0ZXIKLSAgICAgICAgICAgIGNhc2UgJyUnOgotICAgICAgICAgICAgICAgIHB1dGNoKGNoLCBwdXRkYXQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgLy8gdW5yZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZSAtIGp1c3QgcHJpbnQgaXQgbGl0ZXJhbGx5Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHB1dGNoKCclJywgcHV0ZGF0KTsKLSAgICAgICAgICAgICAgICBmbXQgPSBsYXN0X2ZtdDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotaW50Ci1zY19wcmludGYoY29uc3QgY2hhciogZm10LCAuLi4pCi17Ci0gICAgdmFfbGlzdCBhcDsKLSAgICB2YV9zdGFydChhcCwgZm10KTsKLQotICAgIHZwcmludGZtdChwcmludGZfcHV0Y2gsIE5VTEwsIGZtdCwgYXApOwotCi0gICAgdmFfZW5kKGFwKTsKLSAgICByZXR1cm4gMDsgLy8gaW5jb3JyZWN0IHJldHVybiB2YWx1ZSwgYnV0IHdobyBjYXJlcywgYW55d2F5PwotfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9zY19wcmludC5oIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9zY19wcmludC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzIwNGNkLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vc2NfcHJpbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogU3ludGFjb3JlIExMQyDCqSAyMDE2LTIwMjEKLS8vIAotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLS8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBTeW50YWNvcmUgTExDCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vIEBmaWxlICAgICAgIDxzY19wcmludC5oPgotLy8vCi0KLSNpZm5kZWYgU0NfUFJJTlRfSAotI2RlZmluZSBTQ19QUklOVF9ICi0KLWV4dGVybiBpbnQgc2NfcHJpbnRmKGNvbnN0IGNoYXIqIGZtdCwgLi4uKTsKLQotI2VuZGlmIC8vIFNDX1BSSU5UX0gKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vc2NfdGVzdC5oIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9zY190ZXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMmRlN2MuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9zY190ZXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIxCi0vLyAKLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0vLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLyBAZmlsZSAgICAgICA8c2NfdGVzdC5oPgotLy8vCi0KLSNpZm5kZWYgU0NfVEVTVF9ICi0jZGVmaW5lIFNDX1RFU1RfSAotCi0jaWYgZGVmaW5lZChfX0FTU0VNQkxFUl9fKQotLmFsdG1hY3JvCi0KLS5tYWNybyB6ZXJvX2ludF9yZWcgcmVnbgotbXYgICB4XHJlZ24sIHplcm8KLS5lbmRtCi0KLS5tYWNybyB6ZXJvX2ludF9yZWdzIHJlZ19maXJzdCwgcmVnX2xhc3QKLS5zZXQgcmVnbiwgXHJlZ19maXJzdAotLnJlcHQgXHJlZ19sYXN0IC0gXHJlZ19maXJzdCArIDEKLXplcm9faW50X3JlZyAlKHJlZ24pCi0uc2V0IHJlZ24sIHJlZ24rMQotLmVuZHIKLS5lbmRtCi0KLSNkZWZpbmUgcmVwb3J0X3Jlc3VsdHMocmVzdWx0KSBcCi1saSAgYTAsIHJlc3VsdDsgIFwKLWxhIHQwLCBzY19leGl0OyAgXAotanIJIHQwOwotCi0ucHVzaHNlY3Rpb24gc2NfdGVzdF9zZWN0aW9uLCAiYXgiCi1zY19leGl0OiBsYSB0MCwgU0lNX0VYSVQ7IGpyIHQwOwotLmJhbGlnbiAzMgotLnBvcHNlY3Rpb24KLSNkZWZpbmUgc2NfcGFzcyByZXBvcnRfcmVzdWx0cygweDApCi0jZGVmaW5lIHNjX2ZhaWwgcmVwb3J0X3Jlc3VsdHMoMHgxKQotCi0jZWxzZQotCi1leHRlcm4gdm9pZCBzY19leGl0KHVuc2lnbmVkIHJlc3VsdCwgdW5zaWduZWQgcmVzMCwgdW5zaWduZWQgcmVzMSwgdW5zaWduZWQgcmVzMiwgdW5zaWduZWQgcmVzMykKLSAgICBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUsIG5vcmV0dXJuKSk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCAgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSkKLXJlcG9ydF9yZXN1bHRzKHVuc2lnbmVkIHJlc3VsdCwgdW5zaWduZWQgcmVzMCwgdW5zaWduZWQgcmVzMSwgdW5zaWduZWQgcmVzMiwgdW5zaWduZWQgcmVzMykKLXsKLSAgICBzY19leGl0KHJlc3VsdCwgcmVzMCwgcmVzMSwgcmVzMiwgcmVzMyk7Ci19Ci0KLSNlbmRpZgotCi0jZW5kaWYgLy8gU0NfVEVTVF9ICmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uL3NjcjFfc3BlY2lmaWMuaCBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vc2NyMV9zcGVjaWZpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWZlNWFlLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vc2NyMV9zcGVjaWZpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTeW50YWNvcmUgTExDIMKpIDIwMTYtMjAyMQotLy8gCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IFN5bnRhY29yZSBMTEMKLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0jaWZuZGVmIF9fU0NSMV9fU1BFQ0lGSUMKLSNkZWZpbmUgX19TQ1IxX19TUEVDSUZJQwotCi0jZGVmaW5lIG1jb3VudGVuICAgICAgICAweDdFMAotCi0vLyBNZW1vcnktbWFwcGVkIHJlZ2lzdGVycwotI2RlZmluZSBtdGltZV9jdHJsICAgICAgMHgwMDQ5MDAwMAotI2RlZmluZSBtdGltZV9kaXYgICAgICAgMHgwMDQ5MDAwNAotI2RlZmluZSBtdGltZSAgICAgICAgICAgMHgwMDQ5MDAwOAotI2RlZmluZSBtdGltZWggICAgICAgICAgMHgwMDQ5MDAwQwotI2RlZmluZSBtdGltZWNtcCAgICAgICAgMHgwMDQ5MDAxMAotI2RlZmluZSBtdGltZWNtcGggICAgICAgMHgwMDQ5MDAxNAotCi0jZGVmaW5lIFNDUjFfTVRJTUVfQ1RSTF9FTiAgICAgICAgICAwCi0jZGVmaW5lIFNDUjFfTVRJTUVfQ1RSTF9DTEtTUkMgICAgICAxCi0KLSNkZWZpbmUgU0NSMV9NVElNRV9DVFJMX1dSX01BU0sgICAgIDB4MwotI2RlZmluZSBTQ1IxX01USU1FX0RJVl9XUl9NQVNLICAgICAgMHgzRkYKLQotI2VuZGlmIC8vIF9TQ1IxX19TUEVDSUZJQwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2hlbGxvL01ha2VmaWxlIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2hlbGxvL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjU1ZDYwLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9oZWxsby9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLXNyY19kaXIgOj0gJChkaXIgJChsYXN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkKLQotY19zcmMgOj0gc2NfcHJpbnQuYyBoZWxsby5jCi0KLWluY2x1ZGUgJChpbmNfZGlyKS9jb21tb24ubWsKLQotZGVmYXVsdDogbG9nX3JlcXVlc3RlZF90Z3QgJChibGRfZGlyKS9oZWxsby5lbGYgJChibGRfZGlyKS9oZWxsby5oZXggJChibGRfZGlyKS9oZWxsby5kdW1wCi0KLWxvZ19yZXF1ZXN0ZWRfdGd0OgotCWVjaG8gaGVsbG8uaGV4Pj4gJChibGRfZGlyKS90ZXN0X2luZm8KLQotY2xlYW46Ci0JJChSTSkgJChjX29ianMpICQoYXNtX29ianMpICQoYmxkX2RpcikvaGVsbG8uZWxmICQoYmxkX2RpcikvaGVsbG8uaGV4ICQoYmxkX2RpcikvaGVsbG8uZHVtcApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9oZWxsby9oZWxsby5jIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2hlbGxvL2hlbGxvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyY2YxYmMuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2hlbGxvL2hlbGxvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNpbmNsdWRlICJzY19wcmludC5oIgotCi1pbnQgbWFpbigpCi17Ci0gICAgc2NfcHJpbnRmKCJIZWxsbyBmcm9tIFNDUjEhXG4iKTsKLSAgICByZXR1cm4gMDsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvaXNyX3NhbXBsZS9NYWtlZmlsZSBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9pc3Jfc2FtcGxlL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzk1ZTc0Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9pc3Jfc2FtcGxlL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotc3JjX2RpciA6PSAkKGRpciAkKGxhc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKQotCi1MREZMQUdTIDo9IC1ub3N0YXJ0ZmlsZXMgLW5vc3RkbGliIC1tYXJjaD1ydjMyJChBUkNIKSAtbWFiaT0kKEFCSSkKLUFERF9BU01fTUFDUk8gOj0gLURBU00KLQotaWZlcSAoJChJUElDKSAsMSkKLSAgICBBRERfQVNNX01BQ1JPICs9IC1ESVBJQ19FTkFCTEVECi1lbmRpZgotCi1pZmVxICgkKFZFQ1RfSVJRKSAsMSkKLSAgICBBRERfQVNNX01BQ1JPICs9IC1EVkVDVF9JUlFfRU5BQkxFRAotZW5kaWYKLWFzbV9zcmMgOj0gaXNyX3NhbXBsZS5TCi0KLSMgb3ZlcnJpZGUgbGQgc2NyaXB0Ci1sZF9zY3JpcHQgOj0gJChpbmNfZGlyKS9saW5rLmxkCi0KLWluY2x1ZGUgJChpbmNfZGlyKS9jb21tb24ubWsKLQotZGVmYXVsdDogbG9nX3JlcXVlc3RlZF90Z3QgJChibGRfZGlyKS9pc3Jfc2FtcGxlLmVsZiAkKGJsZF9kaXIpL2lzcl9zYW1wbGUuaGV4ICQoYmxkX2RpcikvaXNyX3NhbXBsZS5kdW1wCi0KLWxvZ19yZXF1ZXN0ZWRfdGd0OgotCWVjaG8gaXNyX3NhbXBsZS5oZXggPj4gJChibGRfZGlyKS90ZXN0X2luZm8KLQotY2xlYW46Ci0JJChSTSkkKGFzbV9vYmpzKSAkKGJsZF9kaXIpL2lzcl9zYW1wbGUuZWxmICQoYmxkX2RpcikvaXNyX3NhbXBsZS5oZXggJChibGRfZGlyKS9pc3Jfc2FtcGxlLmR1bXAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvaXNyX3NhbXBsZS9pc3Jfc2FtcGxlLlMgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvaXNyX3NhbXBsZS9pc3Jfc2FtcGxlLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3YjNkNjMuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2lzcl9zYW1wbGUvaXNyX3NhbXBsZS5TCisrKyAvZGV2L251bGwKQEAgLTEsMjkxICswLDAgQEAKLSNpbmNsdWRlICJyaXNjdl9tYWNyb3MuaCIKLSNpbmNsdWRlICJzY190ZXN0LmgiCi0KLS5hbHRtYWNybwotLy8gZ2xvYmFsIGludGVycnVwdCBiaXQKLSNkZWZpbmUgTVNJRSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IElSUV9NX1NPRlQpICAgICAgIC8vbWFjaGluZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgZW5hYmxlCi0jZGVmaW5lIE1USUUgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCBJUlFfTV9USU1FUikgICAgICAvL21hY2hpbmUgdGltZXIgaW50ZXJydXB0IGVuYWJsZQotI2RlZmluZSBNRUlFICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgSVJRX01fRVhUKSAgICAgICAgLy9tYWNoaW5lIGV4dGVybmFsIGludGVycnVwdCBlbmFibGUKLSNkZWZpbmUgTUNBVVNFX0VYVF9JUlEgICAgICAgICAgICAgICgxIDw8IDMxIHwgSVJRX01fRVhUKQotI2RlZmluZSBNQ0FVU0VfU09GVF9JUlEgICAgICAgICAgICAgKDEgPDwgMzEgfCBJUlFfTV9TT0ZUKQotI2RlZmluZSBNQ0FVU0VfVE1SX0lSUSAgICAgICAgICAgICAgKDEgPDwgMzEgfCBJUlFfTV9USU1FUikKLQotLy8gSVBJQwotI2RlZmluZSBJUlFfTElORVNfQUREUiAgICAgICAgICAgICAgMHgxMDAyMDAxOCAgICAgIC8vIHNpbXVsYXRpb24KLSNkZWZpbmUgVFJJR19FWFRfSVJRX0FERFIgICAgICAgICAgIDB4MTAwMjAwMTggICAgICAvLyBleHRlcm5hbCBpcnEgaXMgdHJpZ2dlcmVkIHdoZW4gdGIgbWVtb3J5IGlzIHNldCB0byBub24temVybyAvLyBCaXQgWzE1OjBdCi0jZGVmaW5lIFRSSUdfU1dfSVJRX0FERFIgICAgICAgICAgICAweDEwMDIwMDE4ICAgICAgLy8gc29mdHdhcmUgaXJxIGlzIHRyaWdnZXJlZCB3aGVuIHRiIG1lbW9yeSBpcyBzZXQgdG8gbm9uLXplcm8gLy8gQml0IFsxNl0KLQotI2RlZmluZSBJUElDX0VPSSAgICAgICAgICAgICAgICAgICAgMHhCRjQgICAgICAgICAgIC8vIGVuZCBvZiBpbnRlcnJ1cHQKLSNkZWZpbmUgSVBJQ19TT0kgICAgICAgICAgICAgICAgICAgIDB4QkY1ICAgICAgICAgICAvLyBzdGFydCBvZiBpbnRlcnJ1cHQKLSNkZWZpbmUgSVBJQ19JRFggICAgICAgICAgICAgICAgICAgIDB4QkY2ICAgICAgICAgICAvLyBpbmRleCByZWdpc3RlcgotI2RlZmluZSBJUElDX0lDU1IgICAgICAgICAgICAgICAgICAgMHhCRjcgICAgICAgICAgIC8vIGludGVycnVwdCBjb250cm9sIHN0YXR1cyByZWdpc3RlcgotCi0vLyBJUElDIEludGVycnVwdCBDb25zdHJvbCBTdGF0dXMgUmVnaXN0ZXIKLSNkZWZpbmUgSVBJQ19JQ1NSX0lQICAgICAgICAgICAgICAgICgxIDw8IDApICAgICAgICAvLyBpbnRlcnJ1cHQgcGVuZGluZwotI2RlZmluZSBJUElDX0lDU1JfSUUgICAgICAgICAgICAgICAgKDEgPDwgMSkgICAgICAgIC8vIGludGVycnVwdCBlbmFibGUKLSNkZWZpbmUgSVBJQ19JQ1NSX0lNICAgICAgICAgICAgICAgICgxIDw8IDIpICAgICAgICAvLyBpbnRlcnJ1cHQgbW9kZSAoMC8xOiBsZXZlbC9lZGdlKQotI2RlZmluZSBJUElDX0lDU1JfSU5WICAgICAgICAgICAgICAgKDEgPDwgMykgICAgICAgIC8vIGxpbmUgaW52ZXJzaW9uCi0jZGVmaW5lIElQSUNfSUNTUl9JUyAgICAgICAgICAgICAgICAoMSA8PCA0KSAgICAgICAgLy8gaW4gc2VydmljZQotCi0vLyAgSW50ZXJydXB0IGxpbmVzIGluIHVzZSAKLSNkZWZpbmUgSVBJQ19JUlFfTElORTkgICAgICAgICAgICAgIDkKLSNkZWZpbmUgRVhUX0lSUV9MSU5FX0NPTU1PTiAgICAgICAgIDAKLQotI2luY2x1ZGUgInRpbWVyLmgiCi0jaW5jbHVkZSAicmVsb2MuaCIKLQotLm1hY3JvIGptcF9zY19leGl0Ci0gICAgbGEgIHQwLCBzY19leGl0Ci0gICAganIgIHQwCi0uZW5kbQotCi0gICAgLnNlY3Rpb24gLnRleHQuaW5pdAotICAgIC5vcHRpb24gbm9ydmMKLSAgICAuZ2xvYmwgX3N0YXJ0Ci0vLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRyYXAgaGFuZGxlcnMKLS8vIDB4WFhYWFhYMDAKLSAgICAub3B0aW9uIG5vcnZjCi0ub3JnICg2NCozKQotCi0vLzB4WFhYWFhYQzAKLSAgICAuYmFsaWduIDY0Ci1tYWNoaW5lX3RyYXBfZW50cnk6Ci12ZWNfdXNyX3NvZnQ6Ci0jaWZkZWYgVkVDVF9JUlFfRU5BQkxFRAotICAgIHRyYXBfZW50cnk6Ci0gICAgICAgIGogICAgX3RyYXBfZmFpbAotICAgIHZlY19zdXBlcnZpc29yX3NvZnQ6Ci0gICAgICAgIGogICAgX3RyYXBfZmFpbAotICAgIHZlY19yZXNlcnZlZDE6Ci0gICAgICAgIGogICAgX3RyYXBfZmFpbAotICAgIHZlY19tYWNoaW5lX3NvZnQ6Ci0gICAgICAgIGogICAgdmVjX21hY2hpbmVfc29mdF9oYW5kbGVyCi0gICAgdmVjX3Vzcl90bXI6Ci0gICAgICAgIGogICAgX3RyYXBfZmFpbAotICAgIHZlY19zdXBlcnZpc29yX3RtcjoKLSAgICAgICAgaiAgICBfdHJhcF9mYWlsCi0gICAgdmVjX3Jlc2VydmVkMjoKLSAgICAgICAgaiAgICBfdHJhcF9mYWlsCi0gICAgdmVjX21hY2hpbmVfdG1yOgotICAgICAgICBqICAgIHZlY19tYWNoaW5lX3Rtcl9oYW5kbGVyCi0gICAgdmVjX3Vzcl9leHQ6Ci0gICAgICAgIGogICAgX3RyYXBfZmFpbAotICAgIHZlY19zdXBlcnZpc29yX2V4dDoKLSAgICAgICAgaiAgICBfdHJhcF9mYWlsCi0gICAgdmVjX3Jlc2VydmVkMzoKLSAgICAgICAgaiAgICBfdHJhcF9mYWlsCi0gICAgdmVjX21hY2hpbmVfZXh0OgotICAgICAgICBqICAgIHZlY19tYWNoaW5lX2V4dF9oYW5kbGVyCi0gICAgdmVjX3Jlc2VydmVkNDoKLSAgICAgICAgaiAgICBfdHJhcF9mYWlsCi0gICAgICAgIGogICAgX3RyYXBfZmFpbAotICAgICAgICBqICAgIF90cmFwX2ZhaWwKLSAgICAgICAgaiAgICBfdHJhcF9mYWlsCi0jZWxzZQotICAgIHRyYXBfZW50cnk6Ci0gICAgICAgIGogICAgZGlyZWN0X2lycV9oYW5kbGVyCi0gICAgdmVjX3N1cGVydmlzb3Jfc29mdDoKLSAgICAgICAgaiAgICBfdHJhcF9mYWlsCi0gICAgdmVjX3Jlc2VydmVkMToKLSAgICAgICAgaiAgICBfdHJhcF9mYWlsCi0gICAgdmVjX21hY2hpbmVfc29mdDoKLSAgICAgICAgaiAgICBfdHJhcF9mYWlsCi0gICAgdmVjX3Vzcl90bXI6Ci0gICAgICAgIGogICAgX3RyYXBfZmFpbAotICAgIHZlY19zdXBlcnZpc29yX3RtcjoKLSAgICAgICAgaiAgICBfdHJhcF9mYWlsCi0gICAgdmVjX3Jlc2VydmVkMjoKLSAgICAgICAgaiAgICBfdHJhcF9mYWlsCi0gICAgdmVjX21hY2hpbmVfdG1yOgotICAgICAgICBqICAgIF90cmFwX2ZhaWwKLSAgICB2ZWNfdXNyX2V4dDoKLSAgICAgICAgaiAgICBfdHJhcF9mYWlsCi0gICAgdmVjX3N1cGVydmlzb3JfZXh0OgotICAgICAgICBqICAgIF90cmFwX2ZhaWwKLSAgICB2ZWNfcmVzZXJ2ZWQzOgotICAgICAgICBqICAgIF90cmFwX2ZhaWwKLSAgICB2ZWNfbWFjaGluZV9leHQ6Ci0gICAgICAgIGogICAgX3RyYXBfZmFpbAotICAgIHZlY19yZXNlcnZlZDQ6Ci0gICAgICAgIGogICAgX3RyYXBfZmFpbAotICAgICAgICBqICAgIF90cmFwX2ZhaWwKLSAgICAgICAgaiAgICBfdHJhcF9mYWlsCi0gICAgICAgIGogICAgX3RyYXBfZmFpbAotCi0jZW5kaWYgLy8gaWZkZWYgVkVDVF9JUlFfRU5BQkxFRAotCi0KLSAgICAuYmFsaWduIDY0Ci1fc3RhcnQ6Ci0gICAgbGEgICAgICAgICAgICAgICAgICB0MCwgbWFjaGluZV90cmFwX2VudHJ5Ci0gICAgY3NydyAgICAgICAgICAgICAgICBtdHZlYywgdDAKLQotICAgIGxhICAgICAgICAgICAgICAgICAgdDAsICB0ZXN0X3N0YXJ0Ci0gICAganIgICAgICAgICAgICAgICAgICAodDApCi0KLS8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC5vcHRpb24gbm9ydmMKLSAgICAuYmFsaWduIDY0Ci10ZXN0X3N0YXJ0OgotICAgIAotICAgIGxhICAgICAgICAgICAgICAgICAgdDAsIHRyYXBfZW50cnkKLSAgICBjc3J3ICAgICAgICAgICAgICAgIG10dmVjLCB0MCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2V0IG10dmVjIHRvIHRyYXBfZW50cnkKLSAgICAjaWZkZWYgVkVDVF9JUlFfRU5BQkxFRAotICAgICAgICBjc3JzaSAgICAgICAgICAgICAgIG10dmVjLCAxICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXQgdmVjdG9yZWQgbW9kZQotICAgICNlbHNlCi0gICAgICAgIGNzcnNpICAgICAgICAgICAgICAgbXR2ZWMsIDAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNldCBkaXJlY3QgbW9kZQotICAgICNlbmRpZgotCi0gICAgLy8vIGNvbmZpZ3VyaW5nIHRpbWVyIGludGVycnVwdCAvLy8gCi0gICAgX3Jlc2V0X210aW1lY21wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXQgdGltZXIKLSAgICBfcnVuX3RpbWVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBydW4gdGltZXIKLSAgICBjc3JzICAgICAgICAgICAgICAgIG1zdGF0dXMsIE1TVEFUVVNfTUlFICAgICAgICAgICAvLyBlbmFibGUgZ2xvYmFsIGludGVycnVwdAotICAgIGxpICAgICAgICAgICAgICAgICAgYTAsIE1USUUgICAgICAgICAgICAgICAgICAgICAgIAotICAgIGNzcnMgICAgICAgICAgICAgICAgbWllLCBhMCAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuYWJsZSB0aW1lciBpbnRlcnJ1cHQKLSAgICBsaSAgICAgICAgICAgICAgICAgIHQyLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNldCB0aW1lciBjb3VudGVyID0gMCAodXBkYXRlZCBpbiBpc3IpCi0gICAgX3JlYWRfbXRpbWUgICAgICAgICBzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCB0aW1lciB2YWx1ZQotICAgIGFkZGkgICAgICAgICAgICAgICAgczEsIHMxLCAyNTYKLSAgICBfd3JpdGVfbXRpbWVjbXBfMzIgIHMxIAotICAgIHdmaSAgCi0KLQotICAgLy8vIGNvbmZpZ3VyaW5nIGV4dGVybmFsIGludGVycnVwdCAvLy8gCi0gICAgY3NydyAgICAgICAgICAgICAgICBtaWUsIHplcm8gICAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZSBhbGwgaW50ZXJydXB0cwotICAgIGxpICAgICAgICAgICAgICAgICAgdDAsIElSUV9MSU5FU19BRERSCi0gICAgc2ggICAgICAgICAgICAgICAgICB6ZXJvLCAodDApICAgICAgICAgICAgICAgICAgICAgLy8gc2V0IGFsbCBleHRlcmluYWwgaW50ZXJydXB0IGxpbmVzIGxvdwotICAgICNpZmRlZiBJUElDX0VOQUJMRUQKLSAgICAgICAgbGkgICAgICAgICAgICAgICAgICB0MCwgSVBJQ19JUlFfTElORTkKLSAgICAgICAgY3NydyAgICAgICAgICAgICAgICBJUElDX0lEWCwgdDAgICAgICAgICAgICAgICAvLyBzZXQgSVBJQyB0byBleHBlY3QgaW50ZXJ1cHQgb24gbGluZSA5Li4uCi0gICAgICAgIGxpICAgICAgICAgICAgICAgICAgdDAsIChJUElDX0lDU1JfSUUgfCBJUElDX0lDU1JfSU0pCi0gICAgICAgIGNzcncgICAgICAgICAgICAgICAgSVBJQ19JQ1NSLCB0MCAgICAgICAgICAgICAgLy8gIC4uLi5lbmFibGUgaW50ZXJydXB0LHNldCBlZGdlIGludGVycnVwdCBtb2RlCi0gICAgI2VuZGlmCi0gICAgbGkgICAgICAgICAgICAgICAgICB0MCwgTUVJRQotICAgIGNzcnMgICAgICAgICAgICAgICAgbWllLCB0MCAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBleHRlcm5hbCBpbnRlcnJ1cHQgCi0gICAgbGkgICAgICAgICAgICAgICAgICB0MCwgVFJJR19FWFRfSVJRX0FERFIKLSAgICAjaWZkZWYgSVBJQ19FTkFCTEVEICAgICAgICAgIAotICAgICAgICBsaSAgICAgICAgICAgICAgICAgIHQxLCAoMSA8PCBJUElDX0lSUV9MSU5FOSkKLSAgICAjZWxzZQotICAgICAgICBsaSAgICAgICAgICAgICAgICAgIHQxLCAoMSA8PCBFWFRfSVJRX0xJTkVfQ09NTU9OKQotICAgICNlbmRpZgotICAgIHNoICAgICAgICAgICAgICAgICAgdDEsICh0MCkgICAgICAgICAgICAgICAgICAgICAgIC8vc2VuZCBjb21tYW5kIHRvIGdlbmVyYXRlIGV4dGVybmFsIGludGVycnVwdCBvbiBsaW5lIDkgdG8gdGVzdGJlbmNoCi0gICAgbm9wCi0gICAgbm9wCi0gICAgbm9wCi0gICAgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93YWl0IGZvciBleHRlcm5hbCBpbnRlcnJ1cHQKLQotCi0gICAgLy8vIGNvbmZpZ3VyaW5nIHNvZnR3YXJlIGludGVycnVwdCAvLy8gCi0gICAgY3NydyAgICAgICAgICAgICAgICBtaWUsIHplcm8gICAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZSBhbGwgaW50ZXJydXB0cwotICAgIGxpICAgICAgICAgICAgICAgICAgdDAsIFRSSUdfU1dfSVJRX0FERFIKLSAgICBsaSAgICAgICAgICAgICAgICAgIHQxLCAweDAwMDEwMDAwICAgICAgICAgICAgICAgICAvLyBTb2Z0IGlyZXEgYml0IFsxNl0gCi0gICAgc3cgICAgICAgICAgICAgICAgICB0MSwgKHQwKSAgICAgICAgICAgICAgICAgICAgICAgLy9zZW5kIGNvbW1hbmQgdG8gZ2VuZXJhdGUgc29mdHdhcmUgaW50ZXJydXB0IAotICAgIGxpICAgICAgICAgICAgICAgICAgdDAsIE1TSUUKLSAgICBjc3JzICAgICAgICAgICAgICAgIG1pZSwgdDAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbmFibGUgc29mdHdhcmUgaW50ZXJydXB0IAotICAgIG5vcAotICAgIG5vcAotICAgIG5vcAotICAgIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2FpdCBmb3Igc29mdHdhcmUgaW50ZXJydXB0Ci0KLSAgICBsaSAgICAgICAgICAgICAgICAgIHMxLCAzCi0gICAgbGkgICAgICAgICAgICAgICAgICBhMCwgMAotICAgIGJlcSAgICAgICAgICAgICAgICAgdDIsIHMxLCAxZgotICAgIGxpICAgICAgICAgICAgICAgICAgYTAsIC0xCi0xOgotICAgIGptcF9zY19leGl0Ci0KLQotI2lmbmRlZiBWRUNUX0lSUV9FTkFCTEVECi0KLWRpcmVjdF9pcnFfaGFuZGxlcjoKLSAgICBjc3JyICAgICAgICAgICAgYTEsIG1jYXVzZQotICAgIGxpICAgICAgICAgICAgICBhNSwgTUNBVVNFX1RNUl9JUlEgICAgICAvLzB4ODAwMDAwMDcgLS0gbWNhdXNlID0gdG1yLmlycQotICAgIGJlcSAgICAgICAgICAgICBhMSwgYTUsIHZlY19tYWNoaW5lX3Rtcl9oYW5kbGVyCi0gICAgbGkgICAgICAgICAgICAgIGE1LCBNQ0FVU0VfU09GVF9JUlEgICAgIC8vMHg4MDAwMDAwMyAtLSBtY2F1c2UgPSBzb2Z0LmlycQotICAgIGJlcSAgICAgICAgICAgICBhMSwgYTUsIHZlY19tYWNoaW5lX3NvZnRfaGFuZGxlcgotICAgIGxpICAgICAgICAgICAgICBhNSwgTUNBVVNFX0VYVF9JUlEgICAgICAvLzB4ODAwMDAwMEIgLS0gbWNhdXNlID0gZXh0LmlycQotICAgIGJlcSAgICAgICAgICAgICBhMSwgYTUsIHZlY19tYWNoaW5lX2V4dF9oYW5kbGVyCi0gICAgbXJldAotI2VuZGlmCi0KLXZlY19tYWNoaW5lX3Rtcl9oYW5kbGVyOgotICAgIGNzcnIgICAgICAgICAgICBhMSwgbWNhdXNlCi0gICAgbGkgICAgICAgICAgICAgIGE1LCBNQ0FVU0VfVE1SX0lSUSAgICAgIC8vMHg4MDAwMDAwNyAtLSBtY2F1c2UgPSB0bXIuaXJxCi0gICAgbGkgICAgICAgICAgICAgIGEwLCAtMQotICAgIGJuZSAgICAgICAgICAgICBhMSwgYTUsIGNoZWNrX2ZhaWwKLSAgICBjc3JyICAgICAgICAgICAgdDEsIG1pcAotICAgIGxpICAgICAgICAgICAgICB0MCwgTUlQX01USVAKLSAgICBhbmQgICAgICAgICAgICAgdDAsIHQxLCB0MAotICAgIGJlcXogICAgICAgICAgICB0MCwgY2hlY2tfZmFpbAotI2lmZGVmIElQSUNfRU5BQkxFRAotICAgIGNzcncgICAgICAgICAgICBJUElDX1NPSSwgemVybwotICAgIGNzcncgICAgICAgICAgICBJUElDX0VPSSwgemVybwotI2VuZGlmCi0gICAgX3Jlc2V0X210aW1lY21wCi0gICAgY3NyciAgICAgICAgICAgIHQxLCBtaXAKLSAgICBhbmRpICAgICAgICAgICAgdDEsIHQxLCBNSVBfTVRJUAotICAgIGJuZSAgICAgICAgICAgICB0MSwgemVybywgY2hlY2tfZmFpbAotICAgIGFkZGkgICAgICAgICAgICB0MiwgdDIsIDEgICAgICAgICAgICAgICAvLyB0bXIgaXJxIGNvdW50ZXIgdXBkYXRlCi0gICAgbXJldAotCi12ZWNfbWFjaGluZV9leHRfaGFuZGxlcjoKLQotICAgIGNzcnIgICAgICAgICAgICBhMSwgbWNhdXNlCi0gICAgbGkgICAgICAgICAgICAgIGE1LCBNQ0FVU0VfRVhUX0lSUSAgICAgIC8vMHg4MDAwMDAwQiAtLSBtY2F1c2UgPSBleHQuaXJxCi0gICAgbGkgICAgICAgICAgICAgIGEwLCAtMQotICAgIGJuZSAgICAgICAgICAgICBhMSwgYTUsIGNoZWNrX2ZhaWwKLSAgICBjc3JyICAgICAgICAgICAgdDEsIG1pcAotICAgIGxpICAgICAgICAgICAgICB0MCwgTUlQX01FSVAKLSAgICBhbmQgICAgICAgICAgICAgdDAsIHQxLCB0MAotICAgIGJlcXogICAgICAgICAgICB0MCwgY2hlY2tfZmFpbAotI2lmZGVmIElQSUNfRU5BQkxFRAotICAgIGNzcncgICAgICAgICAgICBJUElDX1NPSSwgemVybwotICAgIGNzcncgICAgICAgICAgICBJUElDX0VPSSwgemVybwotI2VuZGlmCi0gICAgbGkgICAgICAgICAgICAgICAgICB0MCwgTUVJRQotICAgIGNzcmMgICAgICAgICAgICAgICAgbWllLCB0MCAgICAgICAgICAgICAvLyBkaXNhYmxlIHNvZnR3YXJlIGludGVycnVwdCAKLQotICAgIGxpICAgICAgICAgICAgICB0MCwgVFJJR19FWFRfSVJRX0FERFIKLSAgICBsaSAgICAgICAgICAgICAgdDEsIEVYVF9JUlFfTElORV9DT01NT04gICAgICAgICAKLSAgICBzaCAgICAgICAgICAgICAgdDEsICh0MCkgICAgICAgICAgICAgICAgLy8gc2VuZCBjb21tYW5kIHRvIGRpc2FibGUgZXh0ZXJuYWwgaW50ZXJydXB0IAotICAgICAKLSAgICBjc3JyICAgICAgICAgICAgdDEsIG1pcAotICAgIGxpICAgICAgICAgICAgICB0MCwgTUlQX01FSVAKLSAgICBibmUgICAgICAgICAgICAgdDEsIHplcm8sIGNoZWNrX2ZhaWwKLSAgICBhZGRpICAgICAgICAgICAgdDIsIHQyLCAxICAgICAgICAgICAgICAgLy8gZXh0IGlycSBjb3VudGVyIHVwZGF0ZQotICAgIG1yZXQKLQotdmVjX21hY2hpbmVfc29mdF9oYW5kbGVyOgotICAgIGNzcnIgICAgICAgICAgICBhMSwgbWNhdXNlCi0gICAgbGkgICAgICAgICAgICAgIGE1LCBNQ0FVU0VfU09GVF9JUlEgICAgIC8vMHg4MDAwMDAwMyAtLSBtY2F1c2UgPSBzb2Z0LmlycQotICAgIGxpICAgICAgICAgICAgICBhMCwgLTEKLSAgICBibmUgICAgICAgICAgICAgYTEsIGE1LCBjaGVja19mYWlsCi0gICAgY3NyciAgICAgICAgICAgIHQxLCBtaXAKLSAgICBsaSAgICAgICAgICAgICAgdDAsIE1JUF9NU0lQCi0gICAgYW5kICAgICAgICAgICAgIHQwLCB0MSwgdDAKLSAgICBiZXF6ICAgICAgICAgICAgdDAsIGNoZWNrX2ZhaWwKLSAgICAjaWZkZWYgSVBJQ19FTkFCTEVECi0gICAgICAgY3NydyAgICAgICAgIElQSUNfU09JLCB6ZXJvCi0gICAgICAgY3NydyAgICAgICAgIElQSUNfRU9JLCB6ZXJvCi0gICAgI2VuZGlmCi0gICAgbGkgICAgICAgICAgICAgIHQwLCBNU0lFCi0gICAgY3NyYyAgICAgICAgICAgIG1pZSwgdDAgICAgICAgICAgICAgICAgIC8vIGRpc2FibGUgc29mdHdhcmUgaW50ZXJydXB0IAotICAgIGxpICAgICAgICAgICAgICB0MCwgVFJJR19TV19JUlFfQUREUgotICAgIGxpICAgICAgICAgICAgICB0MSwgMHgwMDAwMDAwMAotICAgIHN3ICAgICAgICAgICAgICB0MSwgKHQwKSAgICAgICAgICAgICAgICAvLyBzZW5kIGNvbW1hbmQgdG8gc3RvcCBnZW5lcmF0aW5nICBzb2Z0d2FyZSBpbnRlcnJ1cHQgCi0gICAgbGkgICAgICAgICAgICAgIHQwLCBNSVBfTVNJUAotICAgIGNzcmMgICAgICAgICAgICBtaXAsIHQwCi0gICAgY3NyciAgICAgICAgICAgIHQxLCBtaXAKLSAgICBsaSAgICAgICAgICAgICAgdDAsIE1JUF9NU0lQCi0gICAgYW5kICAgICAgICAgICAgIHQxLCB0MSwgdDAKLSAgICBibmUgICAgICAgICAgICAgdDEsIHplcm8sIGNoZWNrX2ZhaWwKLSAgICBhZGRpICAgICAgICAgICAgdDIsIHQyLCAxICAgICAgICAgICAgICAgLy8gZXh0IGlycSBjb3VudGVyIHVwZGF0ZQotICAgIG1yZXQKLQotY2hlY2tfZmFpbDoKLSAgICBsYSAgICAgICAgICAgICAgdDAsIHNjX2V4aXQKLSAgICBqciAgICAgICAgICAgICAgdDAKLQotX3RyYXBfZmFpbDoKLSAgICBsaSAgICAgICAgICAgICAgYTAsIC0xCi0gICAgaiAgICAgICAgICAgICAgIGNoZWNrX2ZhaWwKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9pc3Jfc2FtcGxlL3RpbWVyLmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvaXNyX3NhbXBsZS90aW1lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODFiY2M4Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9pc3Jfc2FtcGxlL3RpbWVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0jaWZuZGVmIF9fVElNRVJfX0gKLSNkZWZpbmUgX19USU1FUl9fSAotCi0KLQotI2RlZmluZSBNRU1fTVRJTUVfTUFTSyAgMHhGMDAwMDAwMAotI2RlZmluZSBNRU1fTVRJTUVfQ1RSTCAgMHgwMDQ5MDAwMAotI2RlZmluZSBNRU1fTVRJTUVfRElWICAgMHgwMDQ5MDAwNAotI2RlZmluZSBNRU1fTVRJTUUgICAgICAgMHgwMDQ5MDAwOAotI2RlZmluZSBNRU1fTVRJTUVIICAgICAgMHgwMDQ5MDAwQwotI2RlZmluZSBNRU1fTVRJTUVDTVAgICAgMHgwMDQ5MDAxMAotI2RlZmluZSBNRU1fTVRJTUVDTVBIICAgMHgwMDQ5MDAxNAotCi0jZGVmaW5lIFRNUCAgIHQwCi0jZGVmaW5lIFRNUDIgIHQxCi0jZGVmaW5lIFRNUDMgIHQyCi0KLS8vIFJlc2V0Ci0ubWFjcm8gX3Jlc2V0X210aW1lCi0gICAgbGkgICAgICAgICAgVE1QLCBNRU1fTVRJTUUKLSAgICBzdyAgICAgICAgICB6ZXJvLCAwKFRNUCkKLSAgICBzdyAgICAgICAgICB6ZXJvLCA0KFRNUCkKLS5lbmRtCi0KLS5tYWNybyBfcmVzZXRfbXRpbWVjbXAKLSAgICBsaSAgICAgICAgICBUTVAsIE1FTV9NVElNRUNNUAotICAgIG5vdCAgICAgICAgIFRNUDIsIHplcm8KLSAgICBzdyAgICAgICAgICBUTVAyLCAwKFRNUCkKLSAgICBzdyAgICAgICAgICBUTVAyLCA0KFRNUCkKLS5lbmRtCi0KLS8vIFdyaXRlCi0ubWFjcm8gX3dyaXRlX210aW1lX2N0cmwgcmVnCi0gICAgbGkgICAgICAgICAgVE1QLCBNRU1fTVRJTUVfQ1RSTAotICAgIHN3ICAgICAgICAgIFxyZWcsIDAoVE1QKQotLmVuZG0KLQotLm1hY3JvIF93cml0ZV9tdGltZV9kaXYgcmVnCi0gICAgbGkgICAgICAgICAgVE1QLCBNRU1fTVRJTUVfRElWCi0gICAgc3cgICAgICAgICAgXHJlZywgMChUTVApCi0uZW5kbQotCi0ubWFjcm8gX3dyaXRlX210aW1lY21wXzMyIHJlZwotICAgIGxpICAgICAgICAgIFRNUCwgTUVNX01USU1FQ01QCi0gICAgbGkgICAgICAgICAgVE1QMiwgLTEKLSAgICBzdyAgICAgICAgICBUTVAyLCAwKFRNUCkKLSAgICBzdyAgICAgICAgICB6ZXJvLCA0KFRNUCkKLSAgICBzdyAgICAgICAgICBccmVnLCAwKFRNUCkKLS5lbmRtCi0KLS5tYWNybyBfd3JpdGVfbXRpbWUgcmVnCi0gICAgbGkgICAgICAgICAgVE1QLCBNRU1fTVRJTUUKLSAgICBzdyAgICAgICAgICBccmVnLCAwKFRNUCkKLS5lbmRtCi0KLS5tYWNybyBfcmVhZF9tdGltZSByZWcKLSAgICBsaSAgICAgICAgICBUTVAsIE1FTV9NVElNRQotICAgIGx3ICAgICAgICAgIFxyZWcsIDAoVE1QKQotLmVuZG0KLQotLy8gUmVhZAotLm1hY3JvIF9yZWFkX210aW1lY21wIHJlZwotICAgIGxpICAgICAgICAgIFRNUCwgTUVNX01USU1FQ01QCi0gICAgbHcgICAgICAgICAgXHJlZywgMChUTVApCi0uZW5kbQotCi0ubWFjcm8gX3JlYWRfbXRpbWVfY3RybCByZWcKLSAgICBsaSAgICAgICAgICBUTVAsIE1FTV9NVElNRV9DVFJMCi0gICAgbHcgICAgICAgICAgXHJlZywgMChUTVApCi0uZW5kbQotCi0ubWFjcm8gX3JlYWRfbXRpbWVfZGl2IHJlZwotICAgIGxpICAgICAgICAgIFRNUCwgTUVNX01USU1FX0RJVgotICAgIGx3ICAgICAgICAgIFxyZWcsIDAoVE1QKQotLmVuZG0KLQotLy8gTWlzYwotLm1hY3JvIF9ydW5fdGltZXIKLSAgICBsaSAgICAgICAgICBUTVAsIE1FTV9NVElNRV9DVFJMCi0gICAgbHcgICAgICAgICAgVE1QMiwgMChUTVApCi0gICAgbGkgICAgICAgICAgVE1QMywgKDEgPDwgU0NSMV9NVElNRV9DVFJMX0VOKQotICAgIG9yICAgICAgICAgIFRNUDIsIFRNUDIsIFRNUDMKLSAgICBzdyAgICAgICAgICBUTVAyLCAwKFRNUCkKLS5lbmRtCi0KLS5tYWNybyBfc3RvcF90aW1lcgotICAgIGxpICAgICAgICAgIFRNUCwgTUVNX01USU1FX0NUUkwKLSAgICBsdyAgICAgICAgICBUTVAyLCAwKFRNUCkKLSAgICBsaSAgICAgICAgICBUTVAzLCAoMSA8PCBTQ1IxX01USU1FX0NUUkxfRU4pCi0gICAgbm90ICAgICAgICAgVE1QMywgVE1QMwotICAgIGFuZCAgICAgICAgIFRNUDIsIFRNUDIsIFRNUDMKLSAgICBzdyAgICAgICAgICBUTVAyLCAwKFRNUCkKLS5lbmRtCi0KLQotCi0jZW5kaWYgLy8gI2lmbmRlZiBfX1RJTUVSX19ICmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvcmlzY3ZfY29tcGxpYW5jZS9NYWtlZmlsZSBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTU4NDM0Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLSMjIEBmaWxlCi0jIyBTeW50YWNvcmUgU0NSKiB0ZXN0cwotIyMKLSMjIEBjb3B5cmlnaHQgMjAxNS0yMDE4IFN5bnRhY29yZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMjIFJJU0NWLUNvbXBsaWFuY2UKLSMjCi0KLUFSQ0ggPz1pbQotb3ZlcnJpZGUgQVJDSDo9cnYzMiQoQVJDSCkKLQotc3JjX2RpciAgICAgICA6PSAkKENVUkRJUikKLVJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMgOj0gJChzcmNfZGlyKS8uLi8uLi8uLi9kZXBlbmRlbmNpZXMvcmlzY3YtY29tcGxpYW5jZS8KLQotI0kgSU0gSU1DIElDCi0jRU0gRU1DIEVDCi0KLWlmZXEgKHJ2MzJlLCQoZmluZHN0cmluZyBydjMyZSwkKEFSQ0gpKSkKLSAgICAkKGluZm8gPj4+IFJWMzJFIC0gbm8gY29tcGxpYW5jZSB0ZXN0cykKLWVsc2UgIyMgaWZkZWYgU0NSX0JBU0VfUlZFX0VYVAotICAjaWZlcSAocnYzMmksJChmaW5kc3RyaW5nIHJ2MzJpLCQoQVJDSCkpKQotICBpZmVxICgkKEFSQ0gpLCQoZmlsdGVyICQoQVJDSCkscnYzMmkgcnYzMmltIHJ2MzJpbWMgcnYzMmljKSkKLSAgICAkKGluZm8gPj4+IEkzMiBURVNUUykKLSAgICBpbmNsdWRlZF9pICs9ICQoZmlsdGVyICUuUyxcCi0gICAgICAgICAgICAgICAgICAgICAgICAkKHdpbGRjYXJkICQoUklTQ1ZfQ09NUExJQU5DRV9URVNUUykvcmlzY3YtdGVzdC1zdWl0ZS9ydjMyaS9zcmMvKikpCi0JaW5jbHVkZWRfaSArPSAkKGZpbHRlciAlLlMsXAotICAgICAgICAgICAgICAgICAgICAgICAgJCh3aWxkY2FyZCAkKFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMpL3Jpc2N2LXRlc3Qtc3VpdGUvcnYzMlppY3NyL3NyYy8qKSkKLQlpbmNsdWRlZF9pICs9ICQoZmlsdGVyICUuUyxcCi0gICAgICAgICAgICAgICAgICAgICAgICAkKHdpbGRjYXJkICQoUklTQ1ZfQ09NUExJQU5DRV9URVNUUykvcmlzY3YtdGVzdC1zdWl0ZS9ydjMyWmlmZW5jZWkvc3JjLyopKQotICAgIGNvbXBsaWFuY2Vfc2V0ICs9ICQoaW5jbHVkZWRfaSkKLSAgZW5kaWYKLQotICAjJChpZiBvciBpZmVxKHJ2MzJpbSwkKGZpbmRzdHJpbmcgcnYzMmltLCQoQVJDSCkpKSwgKHJ2MzJpbWMsJChmaW5kc3RyaW5nIHJ2MzJpbWMsJChBUkNIKSkpKQotICBpZmVxICgkKEFSQ0gpLCQoZmlsdGVyICQoQVJDSCksIHJ2MzJpbSBydjMyaW1jKSkKLSAgICAkKGluZm8gPj4+IElNMzIgVEVTVFMpCi0gICAgaW5jbHVkZWRfaW0gKz0gJChmaWx0ZXIgJS5TLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICQod2lsZGNhcmQgJChSSVNDVl9DT01QTElBTkNFX1RFU1RTKS9yaXNjdi10ZXN0LXN1aXRlL3J2MzJpbS9zcmMvKikpCi0gICAgY29tcGxpYW5jZV9zZXQgKz0gJChpbmNsdWRlZF9pbSkKLSAgZW5kaWYgIyMKLQotICBpZmVxIChydjMyaW1jLCQoZmluZHN0cmluZyBydjMyaW1jLCQoQVJDSCkpKQotICAgICQoaW5mbyA+Pj4gSU1DMzIgVEVTVFMpCi0gICAgaW5jbHVkZWRfaW1jICs9ICQoZmlsdGVyICUuUyxcCi0gICAgICAgICAgICAgICAgICAgICAgICAkKHdpbGRjYXJkICQoUklTQ1ZfQ09NUExJQU5DRV9URVNUUykvcmlzY3YtdGVzdC1zdWl0ZS9ydjMyaW1jL3NyYy8qKSkKLSAgICBjb21wbGlhbmNlX3NldCArPSAkKGluY2x1ZGVkX2ltYykKLSAgZW5kaWYgIyMgaWZlcSAocnYzMmltYywkKGZpbmRzdHJpbmcgcnYzMmltYywkKEFSQ0gpKSkKLSAgaWZlcSAocnYzMmljLCQoZmluZHN0cmluZyBydjMyaWMsJChBUkNIKSkpCi0gIGVuZGlmCi1lbmRpZiAjIwotCi0KLSQoaW5mbyA+Pj4kKEFSQ0gpIHNldCBpbmNsdWRlZCkKLQotaWZlcSAoJChjb21wbGlhbmNlX3NldCksKQotJChpbmZvID4+PiBObyBjb21wbGlhbmNlIHRlc3RzIGluY2x1ZGVkKQotZW5kaWYKLQotJChpbmZvID4+Pj4+IGNvbXBsaWFuY2Ugc2V0OiAkKGNvbXBsaWFuY2Vfc2V0KSkKLQotZHN0X2RpciAgICAgICA6PSAkKGJsZF9kaXIpCi10ZXN0X25hbWUgICAgIDo9IHJpc2N2X2NvbXBsaWFuY2UKLWJsZF9kaXIgICAgICAgOj0gJChhZGRwcmVmaXggJChkc3RfZGlyKS8sICQodGVzdF9uYW1lKSkKLW9ial9kaXIgICAgICAgOj0gJChibGRfZGlyKS9yaXNjdl9jb21wbGlhbmNlX29ianMKLQotI2N1dF9saXN0ICAgICAgKz0gc2NhbGwgY3NyIHNoYW10IHNpbXBsZQotY3V0X2xpc3QgKz0gSS1NSVNBTElHTl9KTVAtMDEgSS1NSVNBTElHTl9MRFNULTAxIEktRUJSRUFLLTAxIEktRUNBTEwtMDEKLXJlZmVyZW5jZV9zcmMgKz0gJCh3aWxkY2FyZCAkKFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMpL3Jpc2N2LXRlc3Qtc3VpdGUvcnYzMmkqLyovKi5yZWZlcmVuY2Vfb3V0cHV0KQotcmVmZXJlbmNlX3NyYyArPSAkKHdpbGRjYXJkICQoUklTQ1ZfQ09NUExJQU5DRV9URVNUUykvcmlzY3YtdGVzdC1zdWl0ZS9ydjMyWmkqLyovKi5yZWZlcmVuY2Vfb3V0cHV0KQotdGVzdG5hbWVzICAgICA6PSAkKGJhc2VuYW1lICQobm90ZGlyICQoY29tcGxpYW5jZV9zZXQpKSkKLWZpbHRlcmVkICAgICAgOj0gJChmaWx0ZXItb3V0ICQoY3V0X2xpc3QpLCQodGVzdG5hbWVzKSkKLW9ianMgICAgICAgICAgOj0gJChhZGRwcmVmaXggJChibGRfZGlyKS8sJChmaWx0ZXJlZDolPSUubykpCi10ZXN0X2VsZiAgICAgIDo9ICQoYWRkcHJlZml4ICQoZHN0X2RpcikvY29tcGxpYW5jZV8sJChmaWx0ZXJlZDolPSUuZWxmKSkKLXRlc3RfaGV4ICAgICAgOj0gJChhZGRwcmVmaXggJChkc3RfZGlyKS9jb21wbGlhbmNlXywkKGZpbHRlcmVkOiU9JS5oZXgpKQotdGVzdF9kdW1wICAgICA6PSAkKGFkZHByZWZpeCAkKGJsZF9kaXIpL2NvbXBsaWFuY2VfLCQoZmlsdGVyZWQ6JT0lLmR1bXApKQotCi1jb21wbGlhbmNlX21hY3Jvc19maWxlIDo9ICQocm9vdF9kaXIpL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvY29tcGxpYW5jZV9pby5oCi1jb21wbGlhbmNlX291dHB1dCA/PSB0cnVlCi0KLXRlc3RuYW1lc19pICAgICA6PSAkKGJhc2VuYW1lICQobm90ZGlyICQoaW5jbHVkZWRfaSkpKQotdGVzdG5hbWVzX2ltICAgICA6PSAkKGJhc2VuYW1lICQobm90ZGlyICQoaW5jbHVkZWRfaW0pKSkKLXRlc3RuYW1lc19pbWMgICAgIDo9ICQoYmFzZW5hbWUgJChub3RkaXIgJChpbmNsdWRlZF9pbWMpKSkKLWZpbHRlcmVkX2kgICAgICA6PSAkKGZpbHRlci1vdXQgJChjdXRfbGlzdCksJCh0ZXN0bmFtZXNfaSkpCi1maWx0ZXJlZF9pbSAgICAgIDo9ICQoZmlsdGVyLW91dCAkKGN1dF9saXN0KSwkKHRlc3RuYW1lc19pbSkpCi1maWx0ZXJlZF9pbWMgICAgICA6PSAkKGZpbHRlci1vdXQgJChjdXRfbGlzdCksJCh0ZXN0bmFtZXNfaW1jKSkKLQotIyBBUkNIX0ZMQUdTIDo9IC1XYSwtbWFyY2g9cnYzMmltIC1tYXJjaD1ydjMyaW0KLSMgQVJDSF9GTEFHU19DIDo9IC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYwotQ0ZMQUdTIDo9IC1JJChpbmNfZGlyKSAtSSQoc3JjX2RpcikgLURBU00gLW1hYmk9aWxwMzIgLURfX3Jpc2N2X3hsZW49MzIgLXcKLUxERkxBR1MgOj0gLXN0YXRpYyAtZnZpc2liaWxpdHk9aGlkZGVuIC1ub3N0ZGxpYiAtbm9zdGFydGZpbGVzIC1UJChpbmNfZGlyKS9saW5rLmxkIC1tYXJjaD0kKEFSQ0gpIC1tYWJpPWlscDMyCi1HQ0NWRVJTSU9OR1Q3IDo9ICQoc2hlbGwgZXhwciBgJChSSVNDVl9HQ0MpIC1kdW1wZnVsbHZlcnNpb24gfCBjdXQgLWYxIC1kJy4nYCBcPiA3KQotaWZlcSAiJChHQ0NWRVJTSU9OR1Q3KSIgIjEiCi0JTERGTEFHUyArPSAtbW5vLXJlbGF4Ci1lbmRpZgotVlBBVEggKz0gJChzcmNfZGlyKSAkKGJsZF9kaXIpICQob2JqX2RpcikgJChhc21fcGF0aCkgJChyZWZfcGF0aCkgJChSSVNDVl9DT01QTElBTkNFX1RFU1RTKQotCi1pZmVxICgkKGNvbXBsaWFuY2Vfb3V0cHV0KSwgdHJ1ZSkKLUNGTEFHUyArPSAtRF9DT01QTElBTkNFX09VVFBVVAotZW5kaWYKLQotZGVmYXVsdDogY2xlYW4gbG9nX3JlcXVlc3RlZF90Z3QgY2hlY2tfdmVyc2lvbiBjcF9hc20gcmVmX2RhdGEgJCh0ZXN0X2VsZikgJCh0ZXN0X2hleCkgJCh0ZXN0X2R1bXApCi0KLWRlZmluZSBjb21waWxlX3RlbXBsYXRlCi0kKG9ial9kaXIpLyQoMSkubzogJChvYmpfZGlyKSBjcF9hc20KLQkkKFJJU0NWX0dDQykgLWMgJCQoYmxkX2RpcikvY29tcGxpYW5jZV9hc20vJCgxKS5TICQkKENGTEFHUykgLVdhLCQoMikgJCgyKSAtbyAkJEAKLWVuZGVmCi0KLWRlZmluZSBwcmVwcm9jZXNzaW5nCi1mb3IgdGVzdF9hc20gaW4gJCgxKTsgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLW1hcmNoX3RtcD0kJHRlc3RfYXNtIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotbWFyY2hfdG1wPSQke21hcmNoX3RtcCUvc3JjKn0gOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1tYXJjaF90bXA9JCQoYmFzZW5hbWUgJCRtYXJjaF90bXApIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWZpbGVfbmFtZT0iJCQoYmFzZW5hbWUgJCR7dGVzdF9hc219KSIgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotJChSSVNDVl9HQ0MpICQoQ0ZMQUdTKSAtV2EsJCgyKSAkKDIpIC1FICQkdGVzdF9hc20gICAgICAgICAgICAgICAgICAgICAgICBcCi0tbyAkKGJsZF9kaXIpL2NvbXBsaWFuY2VfYXNtLyQkZmlsZV9uYW1lIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWRvbmUKLWVuZGVmCi0KLSQoZm9yZWFjaCBTUkMsJChmaWx0ZXJlZF9pKSwkKGV2YWwgJChjYWxsIGNvbXBpbGVfdGVtcGxhdGUsJChTUkMpLC1tYXJjaD1ydjMyaSkpKQotJChmb3JlYWNoIFNSQywkKGZpbHRlcmVkX2ltKSwkKGV2YWwgJChjYWxsIGNvbXBpbGVfdGVtcGxhdGUsJChTUkMpLC1tYXJjaD1ydjMyaW0pKSkKLSQoZm9yZWFjaCBTUkMsJChmaWx0ZXJlZF9pbWMpLCQoZXZhbCAkKGNhbGwgY29tcGlsZV90ZW1wbGF0ZSwkKFNSQyksLW1hcmNoPXJ2MzJpbWMpKSkKLQotCi1sb2dfcmVxdWVzdGVkX3RndDogJChibGRfZGlyKQotCSQoZm9yZWFjaCB0ZXN0X25hbWUsICQoZmlsdGVyZWQpLCAkKGV2YWwgJChzaGVsbCBlY2hvIGNvbXBsaWFuY2VfJCh0ZXN0X25hbWUpLmhleCA+PiAkKGJsZF9kaXIpLy4uL3Rlc3RfaW5mbykpKQotCi0kKGJsZF9kaXIpIDoKLQlta2RpciAtcCAkKGJsZF9kaXIpCi0KLSQob2JqX2RpcikgOiB8IHJlZl9kYXRhCi0JbWtkaXIgLXAgJChvYmpfZGlyKQotCi0kKGRzdF9kaXIpL2NvbXBsaWFuY2VfJS5lbGY6ICQob2JqX2RpcikvJS5vIHwgJChkZXBfZmlsZXMpCi0JJChSSVNDVl9HQ0MpICReICQoTERGTEFHUykgLW8gJEAgLWcKLQotJChkc3RfZGlyKS9jb21wbGlhbmNlXyUuaGV4OiAkKGRzdF9kaXIpL2NvbXBsaWFuY2VfJS5lbGYKLQkkKFJJU0NWX1JPTV9PQkpDT1BZKSAkXiAkQAotCSQoUklTQ1ZfUkFNX09CSkNPUFkpICReICRALnJhbQotCSNhc3NpZ24gMHgwMDQ4XzB4eHggIHRvIDB4MDAwMF8weHh4IHRvIG1hcCB0byBUQ00gTWVtb3J5Ci0Jc2VkIC1pICdzL0AwMDQ4MC9AMDAwMDAvZycgJEAucmFtCi0KLSQoYmxkX2RpcikvY29tcGxpYW5jZV8lLmR1bXA6ICQoZHN0X2RpcikvY29tcGxpYW5jZV8lLmVsZgotCSQoUklTQ1ZfT0JKRFVNUCkgLUQgLXcgLXggLVMgJF4gPiAkQAotCi1yZWZfZGF0YToKLQlta2RpciAtcCAkKGJsZF9kaXIpL3JlZl9kYXRhCi0JZm9yIGZpbGVzIGluICQocmVmZXJlbmNlX3NyYykgOyBkbyBcCi0Jc2VkX2lucHV0PSQkZmlsZXMgOyBcCi0Jc2VkX291dHB1dD0kJChiYXNlbmFtZSAkJHtmaWxlcyUuKn0pIDsgXAotCXNlZCAicy9cciQkLy87IFwKLQlzL1woLi4uLi4uLi5cKS9cMSwvZzsgXAotCXMvLiQkLy87IHMvXCguKlwpLFwoLipcKSxcKC4qXCksXCguKlwpL1w0LFwzLFwyLFwxLzsgXAotCXMvXCguLi4uLi4uLi5cKS9cMTB4L2c7IHMvXi8weC87IHMvJCQvLC87ICQkIHMvLiQkLy8iICQkc2VkX2lucHV0ID4gJChibGRfZGlyKS9yZWZfZGF0YS8kJHNlZF9vdXRwdXQ7IFwKLQlkb25lCi0KLWNwX2FzbToKLQlta2RpciAtcCAkKGJsZF9kaXIpL2NvbXBsaWFuY2VfYXNtCi0JJChjYWxsIHByZXByb2Nlc3NpbmcsJChpbmNsdWRlZF9pKSwtbWFyY2g9cnYzMmkpCi0JJChjYWxsIHByZXByb2Nlc3NpbmcsJChpbmNsdWRlZF9pbSksLW1hcmNoPXJ2MzJpbSkKLQkkKGNhbGwgcHJlcHJvY2Vzc2luZywkKGluY2x1ZGVkX2ltYyksLW1hcmNoPXJ2MzJpbWMpCi0KLQotcmlzY3ZfY29tcGxpYW5jZV90ZXN0c19kaXIgICAgOj0gJChpZiAkKFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMpLCAkKFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMpLCAuL3VuZGVmaW5lZCkKLXJpc2N2X3Rlc3RzX2NvbW1pdCA6PSBkNTEyNTliMmE5NDliZTNhZjAyZTc3NmMzOWUxMzU0MDI2NzVhYzliCi0jIyBjb21taXQgaGFzaCByZWFkZWQgZnJvbSBsb2NhbCBjb3B5IG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9yaXNjdi9yaXNjdi1jb21wbGlhbmNlCi10bXBfY29tbWl0ID0gJChzaGVsbCBjZCAkKHJpc2N2X2NvbXBsaWFuY2VfdGVzdHNfZGlyKSAyPi9kZXYvbnVsbCAmJiBnaXQgbG9nIC0xIHwgZ3JlcCAiY29tbWl0IiB8IGN1dCAtZjIgLWQgJyAnKQotaXNfY29tbWl0X2dvb2QgPSAkKGlmICQoc3Vic3QgJChyaXNjdl90ZXN0c19jb21taXQpLCwkKHRtcF9jb21taXQpKSxmYWxzZSx0cnVlKQotCi0jIENvbG9yCi1SRUQ9XDAzM1swOzMxbQotTkM9XDAzM1swbQotCi1jaGVja192ZXJzaW9uIDogJChyaXNjdl9jb21wbGlhbmNlX3Rlc3RzX2RpcikKLQlAaWYgWyAhIC1kICQocmlzY3ZfY29tcGxpYW5jZV90ZXN0c19kaXIpIF07IHRoZW4gXAotCQllY2hvIC1lICIkKFJFRCk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgJiZcCi0JCWVjaG8gIiAgIEVycm9yISBFbnZpcm9ubWVudCB2YXJpYWJsZSBSSVNDVl9DT01QTElBTkNFX1RFU1RTPSckKHJpc2N2X2NvbXBsaWFuY2VfdGVzdHNfZGlyKScgIiAmJlwKLQkJZWNobyAiICAgICAgZGlyZWN0b3J5IG5vdCBleGlzdCEiICYmIFwKLQkJZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0kKE5DKSIgOyBcCi0JZmkKLWlmbmVxICgkKGlzX2NvbW1pdF9nb29kKSx0cnVlKQotCUBlY2hvIC1lICIkKFJFRCk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKLQlAZWNobyAiICAgV2FybmluZyEgRXhlY3V0aW9uIG9mIHRlc3QgY29kZSBpcyBub3QgZ3VhcmFudGVlZCAiCi0JQGVjaG8gIiAgIHdoaWxlIHVzaW5nIHRoZSBjdXJyZW50IGNvbW1pdCBvZiByZXBvc2l0b3J5IGxvY2F0ZWQgYXQgOiAkKHJpc2N2X2NvbXBsaWFuY2VfdGVzdHNfZGlyKSAuIgotCUBlY2hvICIgICAiCi0JQGVjaG8gIiAgIHJpc2N2X2NvbXBsaWFuY2UgcmVwb3NpdG9yeSBtdXN0IHBvaW50IHRvIGNvbW1pdCAkKHJpc2N2X3Rlc3RzX2NvbW1pdCkhIgotCUBlY2hvIC1lICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSQoTkMpIgotZW5kaWYKLQotJChyaXNjdl9jb21wbGlhbmNlX3Rlc3RzX2RpcikgOi4KLWlmbmRlZiBSSVNDVl9DT01QTElBTkNFX1RFU1RTCi0JQGVjaG8gLWUgIiQoUkVEKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgotCUBlY2hvICIgICAgRXJyb3IhIEVudmlyb25tZW50IHZhcmlhYmxlIFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMgbm90IHNldCEiCi0JQGVjaG8gIiAgICBZb3UgbXVzdCBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMiCi0JQGVjaG8gIiAgICBUaGUgdmFyaWFibGUgc2hvdWxkIHBvaW50IHRvIHRoZSBsb2NhbCBjb3B5IG9mIHRoZSIKLQlAZWNobyAiICAgICAgcmVwb3NpdG9yeSBodHRwczovL2dpdGh1Yi5jb20vcmlzY3YvcmlzY3YtY29tcGxpYW5jZSIKLQlAZWNobyAiICAgICAgd2l0aCB0aGUgY29tbWl0ICQocmlzY3ZfdGVzdHNfY29tbWl0KSIKLQlAZWNobyAtZSAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0kKE5DKSIKLQlleGl0IDEKLWVuZGlmCi0KLWNsZWFuOgotCSQoUk0pIC1SICQodGVzdF9lbGYpICQodGVzdF9oZXgpICQoYmxkX2RpcikKLQotLlBIT05ZOiBjaGVja192ZXJzaW9uIGNsZWFuIHJlZl9kYXRhIGNwX2FzbSBkZWZhdWx0CmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvcmlzY3ZfY29tcGxpYW5jZS9hd190ZXN0X21hY3Jvcy5oIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvYXdfdGVzdF9tYWNyb3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UwNTJhMS4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvcmlzY3ZfY29tcGxpYW5jZS9hd190ZXN0X21hY3Jvcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjgzICswLDAgQEAKLS8qCi0gIENPUFkgT0YgL3Jpc2N2LWNvbXBsaWFuY2UvcmlzY3YtdGVzdC1lbnYvYXdfdGVzdF9tYWNyb3MuaAotICAqLwotCi0vLyBTZWUgTElDRU5TRSBmb3IgbGljZW5zZSBkZXRhaWxzLgotCi0jaWZuZGVmIF9fVEVTVF9NQUNST1NfU0NBTEFSX0gKLSNkZWZpbmUgX19URVNUX01BQ1JPU19TQ0FMQVJfSAotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBIZWxwZXIgbWFjcm9zCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2RlZmluZSBNQVNLX1hMRU4oeCkgKCh4KSAmICgoMSA8PCAoX19yaXNjdl94bGVuIC0gMSkgPDwgMSkgLSAxKSkKLQotI2RlZmluZSBDSEVDS19YTEVOIGxpIGEwLCAxOyBzbGxpIGEwLCBhMCwgMzE7IGJsdHogYTAsIDFmOyBSVlRFU1RfUEFTUzsgMTogc3JsaSBhMCwgYTAsIDMxOyBsYSB0MCwgYmVnaW5fc2lnbmF0dXJlOyBzdyBhMCwgMCh0MCkKLQotI2RlZmluZSBURVNUTlVNIGdwCi0KLSNkZWZpbmUgU1dTSUcoIHRlc3RudW0sIHRlc3RyZWcgKSBcCi0gICAgbGEgIHgyOCwgdGVzdF9yZXM7IFwKLSAgICBzdyB0ZXN0cmVnLCAodGVzdG51bTw8MikoeDI4KTsgXAotCi0jCi0jIEFkZHJlc3MgPSBiYXNlKyh0ZXN0bnVtPDwyKQotIyBzdyB0ZXN0cmVnLCAodGVzdG51bTw8MikoYmFzZXJlZykKLSMKLSNkZWZpbmUgVEVTVF9DQVNFKCB0ZXN0bnVtLCB0ZXN0cmVnLCBjb3JyZWN0dmFsLCBjb2RlLi4uICkgXAotdGVzdF8gIyMgdGVzdG51bTogXAotICAgIGNvZGU7IFwKLSAgICBsaSAgeDI5LCBNQVNLX1hMRU4oY29ycmVjdHZhbCk7IFwKLSAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAotICAgICAgICBTV1NJRyh0ZXN0bnVtLHRlc3RyZWcpOyBcCi0gICAgYm5lIHRlc3RyZWcsIHgyOSwgZmFpbDsKLQotIyBXZSB1c2UgYSBtYWNybyBoYWNrIHRvIHNpbXBpZnkgY29kZSBnZW5lcmF0aW9uIGZvciB2YXJpb3VzIG51bWJlcnMKLSMgb2YgYnViYmxlIGN5Y2xlcy4KLQotI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzAKLSNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU18xICBub3A7IFRFU1RfSU5TRVJUX05PUFNfMAotI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzIgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU18xCi0jZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfMyAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzIKLSNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU180ICBub3A7IFRFU1RfSU5TRVJUX05PUFNfMwotI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzUgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU180Ci0jZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfNiAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzUKLSNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU183ICBub3A7IFRFU1RfSU5TRVJUX05PUFNfNgotI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzggIG5vcDsgVEVTVF9JTlNFUlRfTk9QU183Ci0jZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfOSAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzgKLSNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU18xMCBub3A7IFRFU1RfSU5TRVJUX05PUFNfOQotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBSVjY0VUkgTUFDUk9TCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRlc3RzIGZvciBpbnN0cnVjdGlvbnMgd2l0aCBpbW1lZGlhdGUgb3BlcmFuZAotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgU0VYVF9JTU0oeCkgKCh4KSB8ICgtKCgoeCkgPj4gMTEpICYgMSkgPDwgMTEpKQotCi0jZGVmaW5lIFRFU1RfSU1NX09QKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEsIGltbSApIFwKLSAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzMCwgcmVzdWx0LCBcCi0gICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAotICAgICAgaW5zdCB4MzAsIHgxLCBTRVhUX0lNTShpbW0pOyBcCi0gICAgKQotCi0jZGVmaW5lIFRFU1RfSU1NX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCBpbW0gKSBcCi0gICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MSwgcmVzdWx0LCBcCi0gICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAotICAgICAgaW5zdCB4MSwgeDEsIFNFWFRfSU1NKGltbSk7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9JTU1fREVTVF9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHJlc3VsdCwgdmFsMSwgaW1tICkgXAotICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDYsIHJlc3VsdCwgXAotICAgICAgbGkgIHg0LCAwOyBcCi0xOiAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAotICAgICAgaW5zdCB4MzAsIHgxLCBTRVhUX0lNTShpbW0pOyBcCi0gICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKLSAgICAgIGFkZGkgIHg2LCB4MzAsIDA7IFwKLSAgICAgIGFkZGkgIHg0LCB4NCwgMTsgXAotICAgICAgbGkgIHg1LCAyOyBcCi0gICAgICBibmUgeDQsIHg1LCAxYiBcCi0gICAgKQotCi0jZGVmaW5lIFRFU1RfSU1NX1NSQzFfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIHZhbDEsIGltbSApIFwKLSAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzMCwgcmVzdWx0LCBcCi0gICAgICBsaSAgeDQsIDA7IFwKLTE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCi0gICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKLSAgICAgIGluc3QgeDMwLCB4MSwgU0VYVF9JTU0oaW1tKTsgXAotICAgICAgYWRkaSAgeDQsIHg0LCAxOyBcCi0gICAgICBsaSAgeDUsIDI7IFwKLSAgICAgIGJuZSB4NCwgeDUsIDFiIFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9JTU1fWkVST1NSQzEoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgaW1tICkgXAotICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAotICAgICAgaW5zdCB4MSwgeDAsIFNFWFRfSU1NKGltbSk7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9JTU1fWkVST0RFU1QoIHRlc3RudW0sIGluc3QsIHZhbDEsIGltbSApIFwKLSAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgwLCAwLCBcCi0gICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAotICAgICAgaW5zdCB4MCwgeDEsIFNFWFRfSU1NKGltbSk7IFwKLSAgICApCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUZXN0cyBmb3IgYW4gaW5zdHJ1Y3Rpb24gd2l0aCByZWdpc3RlciBvcGVyYW5kcwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgVEVTVF9SX09QKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEgKSBcCi0gICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MzAsIHJlc3VsdCwgXAotICAgICAgbGkgIHgxLCB2YWwxOyBcCi0gICAgICBpbnN0IHgzMCwgeDE7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9SX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAotICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAotICAgICAgbGkgIHgxLCB2YWwxOyBcCi0gICAgICBpbnN0IHgxLCB4MTsgXAotICAgICkKLQotI2RlZmluZSBURVNUX1JfREVTVF9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKLSAgICBURVNUX0NBU0UoIHRlc3RudW0sIHg2LCByZXN1bHQsIFwKLSAgICAgIGxpICB4NCwgMDsgXAotMTogICAgbGkgIHgxLCB2YWwxOyBcCi0gICAgICBpbnN0IHgzMCwgeDE7IFwKLSAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAotICAgICAgYWRkaSAgeDYsIHgzMCwgMDsgXAotICAgICAgYWRkaSAgeDQsIHg0LCAxOyBcCi0gICAgICBsaSAgeDUsIDI7IFwKLSAgICAgIGJuZSB4NCwgeDUsIDFiIFwKLSAgICApCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUZXN0cyBmb3IgYW4gaW5zdHJ1Y3Rpb24gd2l0aCByZWdpc3Rlci1yZWdpc3RlciBvcGVyYW5kcwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgVEVTVF9SUl9PUCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAotICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDMwLCByZXN1bHQsIFwKLSAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCi0gICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAotICAgICAgaW5zdCB4MzAsIHgxLCB4MjsgXAotICAgICkKLQotI2RlZmluZSBURVNUX1JSX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAotICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAotICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKLSAgICAgIGxpICB4MiwgTUFTS19YTEVOKHZhbDIpOyBcCi0gICAgICBpbnN0IHgxLCB4MSwgeDI7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9SUl9TUkMyX0VRX0RFU1QoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKLSAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgyLCByZXN1bHQsIFwKLSAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCi0gICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAotICAgICAgaW5zdCB4MiwgeDEsIHgyOyBcCi0gICAgKQotCi0jZGVmaW5lIFRFU1RfUlJfU1JDMTJfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAotICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAotICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKLSAgICAgIGluc3QgeDEsIHgxLCB4MTsgXAotICAgICkKLQotI2RlZmluZSBURVNUX1JSX0RFU1RfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIHZhbDEsIHZhbDIgKSBcCi0gICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4NiwgcmVzdWx0LCBcCi0gICAgICBsaSAgeDQsIDA7IFwKLTE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCi0gICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAotICAgICAgaW5zdCB4MzAsIHgxLCB4MjsgXAotICAgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCi0gICAgICBhZGRpICB4NiwgeDMwLCAwOyBcCi0gICAgICBhZGRpICB4NCwgeDQsIDE7IFwKLSAgICAgIGxpICB4NSwgMjsgXAotICAgICAgYm5lIHg0LCB4NSwgMWIgXAotICAgICkKLQotI2RlZmluZSBURVNUX1JSX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKLSAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzMCwgcmVzdWx0LCBcCi0gICAgICBsaSAgeDQsIDA7IFwKLTE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCi0gICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAotICAgICAgbGkgIHgyLCBNQVNLX1hMRU4odmFsMik7IFwKLSAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCi0gICAgICBpbnN0IHgzMCwgeDEsIHgyOyBcCi0gICAgICBhZGRpICB4NCwgeDQsIDE7IFwKLSAgICAgIGxpICB4NSwgMjsgXAotICAgICAgYm5lIHg0LCB4NSwgMWIgXAotICAgICkKLQotI2RlZmluZSBURVNUX1JSX1NSQzIxX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKLSAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzMCwgcmVzdWx0LCBcCi0gICAgICBsaSAgeDQsIDA7IFwKLTE6ICAgIGxpICB4MiwgTUFTS19YTEVOKHZhbDIpOyBcCi0gICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAotICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKLSAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCi0gICAgICBpbnN0IHgzMCwgeDEsIHgyOyBcCi0gICAgICBhZGRpICB4NCwgeDQsIDE7IFwKLSAgICAgIGxpICB4NSwgMjsgXAotICAgICAgYm5lIHg0LCB4NSwgMWIgXAotICAgICkKLQotI2RlZmluZSBURVNUX1JSX1pFUk9TUkMxKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbCApIFwKLSAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgyLCByZXN1bHQsIFwKLSAgICAgIGxpIHgxLCBNQVNLX1hMRU4odmFsKTsgXAotICAgICAgaW5zdCB4MiwgeDAsIHgxOyBcCi0gICAgKQotCi0jZGVmaW5lIFRFU1RfUlJfWkVST1NSQzIoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsICkgXAotICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDIsIHJlc3VsdCwgXAotICAgICAgbGkgeDEsIE1BU0tfWExFTih2YWwpOyBcCi0gICAgICBpbnN0IHgyLCB4MSwgeDA7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9SUl9aRVJPU1JDMTIoIHRlc3RudW0sIGluc3QsIHJlc3VsdCApIFwKLSAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKLSAgICAgIGluc3QgeDEsIHgwLCB4MDsgXAotICAgICkKLQotI2RlZmluZSBURVNUX1JSX1pFUk9ERVNUKCB0ZXN0bnVtLCBpbnN0LCB2YWwxLCB2YWwyICkgXAotICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDAsIDAsIFwKLSAgICAgIGxpIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKLSAgICAgIGxpIHgyLCBNQVNLX1hMRU4odmFsMik7IFwKLSAgICAgIGluc3QgeDAsIHgxLCB4MjsgXAotICAgICkKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRlc3QgbWVtb3J5IGluc3RydWN0aW9ucwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgVEVTVF9MRF9PUCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCi0gICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MzAsIHJlc3VsdCwgXAotICAgICAgbGEgIHgxLCBiYXNlOyBcCi0gICAgICBpbnN0IHgzMCwgb2Zmc2V0KHgxKTsgXAotICAgICkKLQotI2RlZmluZSBURVNUX1NUX09QKCB0ZXN0bnVtLCBsb2FkX2luc3QsIHN0b3JlX2luc3QsIHJlc3VsdCwgb2Zmc2V0LCBiYXNlICkgXAotICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDMwLCByZXN1bHQsIFwKLSAgICAgIGxhICB4MSwgYmFzZTsgXAotICAgICAgbGkgIHgyLCByZXN1bHQ7IFwKLSAgICAgIHN0b3JlX2luc3QgeDIsIG9mZnNldCh4MSk7IFwKLSAgICAgIGxvYWRfaW5zdCB4MzAsIG9mZnNldCh4MSk7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9MRF9ERVNUX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCi10ZXN0XyAjIyB0ZXN0bnVtOiBcCi0gICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKLSAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKLSAgICBsaSAgeDQsIDA7IFwKLTE6ICBsYSAgeDEsIGJhc2U7IFwKLSAgICBpbnN0IHgzMCwgb2Zmc2V0KHgxKTsgXAotICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAotICAgIGFkZGkgIHg2LCB4MzAsIDA7IFwKLSAgICBsaSAgeDI5LCByZXN1bHQ7IFwKLSAgICBibmUgeDYsIHgyOSwgZmFpbDsgXAotICAgIGFkZGkgIHg0LCB4NCwgMTsgXAotICAgIGxpICB4NSwgMjsgXAotICAgIGJuZSB4NCwgeDUsIDFiOyBcCi0KLSNkZWZpbmUgVEVTVF9MRF9TUkMxX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCi10ZXN0XyAjIyB0ZXN0bnVtOiBcCi0gICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKLSAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKLSAgICBsaSAgeDQsIDA7IFwKLTE6ICBsYSAgeDEsIGJhc2U7IFwKLSAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKLSAgICBpbnN0IHgzMCwgb2Zmc2V0KHgxKTsgXAotICAgIGxpICB4MjksIHJlc3VsdDsgXAotICAgIGJuZSB4MzAsIHgyOSwgZmFpbDsgXAotICAgIGFkZGkgIHg0LCB4NCwgMTsgXAotICAgIGxpICB4NSwgMjsgXAotICAgIGJuZSB4NCwgeDUsIDFiIFwKLQotI2RlZmluZSBURVNUX1NUX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGxvYWRfaW5zdCwgc3RvcmVfaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCi10ZXN0XyAjIyB0ZXN0bnVtOiBcCi0gICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKLSAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKLSAgICBsaSAgeDQsIDA7IFwKLTE6ICBsaSAgeDEsIHJlc3VsdDsgXAotICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCi0gICAgbGEgIHgyLCBiYXNlOyBcCi0gICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKLSAgICBzdG9yZV9pbnN0IHgxLCBvZmZzZXQoeDIpOyBcCi0gICAgbG9hZF9pbnN0IHgzMCwgb2Zmc2V0KHgyKTsgXAotICAgIGxpICB4MjksIHJlc3VsdDsgXAotICAgIGJuZSB4MzAsIHgyOSwgZmFpbDsgXAotICAgIGFkZGkgIHg0LCB4NCwgMTsgXAotICAgIGxpICB4NSwgMjsgXAotICAgIGJuZSB4NCwgeDUsIDFiIFwKLQotI2RlZmluZSBURVNUX1NUX1NSQzIxX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGxvYWRfaW5zdCwgc3RvcmVfaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCi10ZXN0XyAjIyB0ZXN0bnVtOiBcCi0gICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKLSAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKLSAgICBsaSAgeDQsIDA7IFwKLTE6ICBsYSAgeDIsIGJhc2U7IFwKLSAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAotICAgIGxpICB4MSwgcmVzdWx0OyBcCi0gICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKLSAgICBzdG9yZV9pbnN0IHgxLCBvZmZzZXQoeDIpOyBcCi0gICAgbG9hZF9pbnN0IHgzMCwgb2Zmc2V0KHgyKTsgXAotICAgIGxpICB4MjksIHJlc3VsdDsgXAotICAgIGJuZSB4MzAsIHgyOSwgZmFpbDsgXAotICAgIGFkZGkgIHg0LCB4NCwgMTsgXAotICAgIGxpICB4NSwgMjsgXAotICAgIGJuZSB4NCwgeDUsIDFiIFwKLQotI2RlZmluZSBURVNUX0JSMl9PUF9UQUtFTiggdGVzdG51bSwgaW5zdCwgdmFsMSwgdmFsMiApIFwKLXRlc3RfICMjIHRlc3RudW06IFwKLSAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAotICBTV1NJRyAodGVzdG51bSwgVEVTVE5VTSk7XAotICAgIGxpICB4MSwgdmFsMTsgXAotICAgIGxpICB4MiwgdmFsMjsgXAotICAgIGluc3QgeDEsIHgyLCAyZjsgXAotICAgIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAotMTogIGJuZSB4MCwgVEVTVE5VTSwgM2Y7IFwKLTI6ICBpbnN0IHgxLCB4MiwgMWI7IFwKLSAgICBibmUgeDAsIFRFU1ROVU0sIGZhaWw7IFwKLTM6Ci0KLSNkZWZpbmUgVEVTVF9CUjJfT1BfTk9UVEFLRU4oIHRlc3RudW0sIGluc3QsIHZhbDEsIHZhbDIgKSBcCi10ZXN0XyAjIyB0ZXN0bnVtOiBcCi0gICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKLSAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKLSAgICBsaSAgeDEsIHZhbDE7IFwKLSAgICBsaSAgeDIsIHZhbDI7IFwKLSAgICBpbnN0IHgxLCB4MiwgMWY7IFwKLSAgICBibmUgeDAsIFRFU1ROVU0sIDJmOyBcCi0xOiAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCi0yOiAgaW5zdCB4MSwgeDIsIDFiOyBcCi0zOgotCi0jZGVmaW5lIFRFU1RfQlIyX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGluc3QsIHZhbDEsIHZhbDIgKSBcCi10ZXN0XyAjIyB0ZXN0bnVtOiBcCi0gICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKLSAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKLSAgICBsaSAgeDQsIDA7IFwKLTE6ICBsaSAgeDEsIHZhbDE7IFwKLSAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAotICAgIGxpICB4MiwgdmFsMjsgXAotICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCi0gICAgaW5zdCB4MSwgeDIsIGZhaWw7IFwKLSAgICBhZGRpICB4NCwgeDQsIDE7IFwKLSAgICBsaSAgeDUsIDI7IFwKLSAgICBibmUgeDQsIHg1LCAxYiBcCi0KLSNkZWZpbmUgVEVTVF9CUjJfU1JDMjFfQllQQVNTKCB0ZXN0bnVtLCBzcmMxX25vcHMsIHNyYzJfbm9wcywgaW5zdCwgdmFsMSwgdmFsMiApIFwKLXRlc3RfICMjIHRlc3RudW06IFwKLSAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAotICBTV1NJRyAodGVzdG51bSwgVEVTVE5VTSk7XAotICAgIGxpICB4NCwgMDsgXAotMTogIGxpICB4MiwgdmFsMjsgXAotICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCi0gICAgbGkgIHgxLCB2YWwxOyBcCi0gICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKLSAgICBpbnN0IHgxLCB4MiwgZmFpbDsgXAotICAgIGFkZGkgIHg0LCB4NCwgMTsgXAotICAgIGxpICB4NSwgMjsgXAotICAgIGJuZSB4NCwgeDUsIDFiIFwKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRlc3QganVtcCBpbnN0cnVjdGlvbnMKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZGVmaW5lIFRFU1RfSlJfU1JDMV9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QgKSBcCi10ZXN0XyAjIyB0ZXN0bnVtOiBcCi0gICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKLSAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKLSAgICBsaSAgeDQsIDA7IFwKLTE6ICBsYSAgeDYsIDJmOyBcCi0gICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCi0gICAgaW5zdCB4NjsgXAotICAgIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAotMjogIGFkZGkgIHg0LCB4NCwgMTsgXAotICAgIGxpICB4NSwgMjsgXAotICAgIGJuZSB4NCwgeDUsIDFiIFwKLQotI2RlZmluZSBURVNUX0pBTFJfU1JDMV9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QgKSBcCi10ZXN0XyAjIyB0ZXN0bnVtOiBcCi0gICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKLSAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKLSAgICBsaSAgeDQsIDA7IFwKLTE6ICBsYSAgeDYsIDJmOyBcCi0gICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCi0gICAgaW5zdCB4MTksIHg2LCAwOyBcCi0gICAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCi0yOiAgYWRkaSAgeDQsIHg0LCAxOyBcCi0gICAgbGkgIHg1LCAyOyBcCi0gICAgYm5lIHg0LCB4NSwgMWIgXAotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBSVjY0VUYgTUFDUk9TCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRlc3RzIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgcU5hTmYgMGY6N2ZjMDAwMDAKLSNkZWZpbmUgc05hTmYgMGY6N2Y4MDAwMDEKLSNkZWZpbmUgcU5hTiAwZDo3ZmY4MDAwMDAwMDAwMDAwCi0jZGVmaW5lIHNOYU4gMGQ6N2ZmMDAwMDAwMDAwMDAwMQotCi0jZGVmaW5lIFRFU1RfRlBfT1BfU19JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMywgY29kZS4uLiApIFwKLXRlc3RfICMjIHRlc3RudW06IFwKLSAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKLSAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKLSAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCi0gIGZsdyBmMCwgMChhMCk7IFwKLSAgZmx3IGYxLCA0KGEwKTsgXAotICBmbHcgZjIsIDgoYTApOyBcCi0gIGx3ICBhMywgMTIoYTApOyBcCi0gIGNvZGU7IFwKLSAgZnNmbGFncyBhMSwgeDA7IFwKLSAgbGkgYTIsIGZsYWdzOyBcCi0gIGJuZSBhMCwgYTMsIGZhaWw7IFwKLSAgYm5lIGExLCBhMiwgZmFpbDsgXAotICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKLSAgLmFsaWduIDI7IFwKLSAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAotICAuZmxvYXQgdmFsMTsgXAotICAuZmxvYXQgdmFsMjsgXAotICAuZmxvYXQgdmFsMzsgXAotICAucmVzdWx0OyBcCi0gIC5wb3BzZWN0aW9uCi0KLSNkZWZpbmUgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzLCBjb2RlLi4uICkgXAotdGVzdF8gIyMgdGVzdG51bTogXAotICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAotICBTV1NJRyAodGVzdG51bSwgVEVTVE5VTSk7XAotICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKLSAgZmxkIGYwLCAwKGEwKTsgXAotICBmbGQgZjEsIDgoYTApOyBcCi0gIGZsZCBmMiwgMTYoYTApOyBcCi0gIGxkICBhMywgMjQoYTApOyBcCi0gIGNvZGU7IFwKLSAgZnNmbGFncyBhMSwgeDA7IFwKLSAgbGkgYTIsIGZsYWdzOyBcCi0gIGJuZSBhMCwgYTMsIGZhaWw7IFwKLSAgYm5lIGExLCBhMiwgZmFpbDsgXAotICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKLSAgLmFsaWduIDM7IFwKLSAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAotICAuZG91YmxlIHZhbDE7IFwKLSAgLmRvdWJsZSB2YWwyOyBcCi0gIC5kb3VibGUgdmFsMzsgXAotICAucmVzdWx0OyBcCi0gIC5wb3BzZWN0aW9uCi0KLS8vIFRPRE86IGFzc2lnbiBhIHNlcGFyYXRlIG1lbSBsb2NhdGlvbiBmb3IgdGhlIGNvbXBhcmlzb24gYWRkcmVzcz8KLSNkZWZpbmUgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIGNvZGUuLi4gKSBcCi10ZXN0XyAjIyB0ZXN0bnVtOiBcCi0gIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCi0gIFNXU0lHICh0ZXN0bnVtLCBURVNUTlVNKTtcCi0gIGxhICBhMCwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7XAotICBmbGQgZjAsIDAoYTApOyBcCi0gIGZsZCBmMSwgOChhMCk7IFwKLSAgZmxkIGYyLCAxNihhMCk7IFwKLSAgbHcgIGEzLCAyNChhMCk7IFwKLSAgbHcgIHQxLCAyOChhMCk7IFwKLSAgY29kZTsgXAotICBmc2ZsYWdzIGExLCB4MDsgXAotICBsaSBhMiwgZmxhZ3M7IFwKLSAgYm5lIGEwLCBhMywgZmFpbDsgXAotICBibmUgdDEsIHQyLCBmYWlsOyBcCi0gIGJuZSBhMSwgYTIsIGZhaWw7IFwKLSAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCi0gIC5hbGlnbiAzOyBcCi0gIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKLSAgLmRvdWJsZSB2YWwxOyBcCi0gIC5kb3VibGUgdmFsMjsgXAotICAuZG91YmxlIHZhbDM7IFwKLSAgLnJlc3VsdDsgXAotICAucG9wc2VjdGlvbgotCi0jZGVmaW5lIFRFU1RfRkNWVF9TX0QzMiggdGVzdG51bSwgcmVzdWx0LCB2YWwxICkgXAotICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgMCwgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKLSAgICAgICAgICAgICAgICAgICAgZmN2dC5zLmQgZjMsIGYwOyBmY3Z0LmQucyBmMywgZjM7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQotCi0jZGVmaW5lIFRFU1RfRkNWVF9TX0QoIHRlc3RudW0sIHJlc3VsdCwgdmFsMSApIFwKLSAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCAwLCBkb3VibGUgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAotICAgICAgICAgICAgICAgICAgICBmY3Z0LnMuZCBmMywgZjA7IGZjdnQuZC5zIGYzLCBmMzsgZm12LnguZCBhMCwgZjMpCi0KLSNkZWZpbmUgVEVTVF9GQ1ZUX0RfUyggdGVzdG51bSwgcmVzdWx0LCB2YWwxICkgXAotICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIDAsIGZsb2F0IHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKLSAgICAgICAgICAgICAgICAgICAgZmN2dC5kLnMgZjMsIGYwOyBmY3Z0LnMuZCBmMywgZjM7IGZtdi54LnMgYTAsIGYzKQotCi0jZGVmaW5lIFRFU1RfRlBfT1AxX1MoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEgKSBcCi0gIFRFU1RfRlBfT1BfU19JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGZsb2F0IHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKLSAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZtdi54LnMgYTAsIGYzKQotCi0jZGVmaW5lIFRFU1RfRlBfT1AxX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSApIFwKLSAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAotICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMDsgZnNkIGYzLCAwKGEwKTsgbHcgdDIsIDQoYTApOyBsdyBhMCwgMChhMCkpCi0vLyBeOiBzdG9yZSBjb21wdXRhdGlvbiByZXN1bHQgaW4gYWRkcmVzcyBmcm9tIGEwLCBsb2FkIGhpZ2gtd29yZCBpbnRvIHQyCi0KLSNkZWZpbmUgVEVTVF9GUF9PUDFfRCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSApIFwKLSAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKLSAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZtdi54LmQgYTAsIGYzKQotCi0jZGVmaW5lIFRFU1RfRlBfT1AxX1NfRFdPUkRfUkVTVUxUKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAotICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCi0gICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwOyBmbXYueC5zIGEwLCBmMykKLQotI2RlZmluZSBURVNUX0ZQX09QMV9EMzJfRFdPUkRfUkVTVUxUKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAotICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGR3b3JkIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKLSAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQotLy8gXjogc3RvcmUgY29tcHV0YXRpb24gcmVzdWx0IGluIGFkZHJlc3MgZnJvbSBhMCwgbG9hZCBoaWdoLXdvcmQgaW50byB0MgotCi0jZGVmaW5lIFRFU1RfRlBfT1AxX0RfRFdPUkRfUkVTVUxUKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAotICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCi0gICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwOyBmbXYueC5kIGEwLCBmMykKLQotI2RlZmluZSBURVNUX0ZQX09QMl9TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAotICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBmbG9hdCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAotICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjE7IGZtdi54LnMgYTAsIGYzKQotCi0jZGVmaW5lIFRFU1RfRlBfT1AyX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKLSAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKLSAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxOyBmc2QgZjMsIDAoYTApOyBsdyB0MiwgNChhMCk7IGx3IGEwLCAwKGEwKSkKLS8vIF46IHN0b3JlIGNvbXB1dGF0aW9uIHJlc3VsdCBpbiBhZGRyZXNzIGZyb20gYTAsIGxvYWQgaGlnaC13b3JkIGludG8gdDIKLQotI2RlZmluZSBURVNUX0ZQX09QMl9EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAotICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKLSAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxOyBmbXYueC5kIGEwLCBmMykKLQotI2RlZmluZSBURVNUX0ZQX09QM19TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzICkgXAotICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBmbG9hdCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIFwKLSAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxLCBmMjsgZm12LngucyBhMCwgZjMpCi0KLSNkZWZpbmUgVEVTVF9GUF9PUDNfRDMyKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzICkgXAotICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGRvdWJsZSByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIFwKLSAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxLCBmMjsgZnNkIGYzLCAwKGEwKTsgbHcgdDIsIDQoYTApOyBsdyBhMCwgMChhMCkpCi0vLyBeOiBzdG9yZSBjb21wdXRhdGlvbiByZXN1bHQgaW4gYWRkcmVzcyBmcm9tIGEwLCBsb2FkIGhpZ2gtd29yZCBpbnRvIHQyCi0KLSNkZWZpbmUgVEVTVF9GUF9PUDNfRCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMyApIFwKLSAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZG91YmxlIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMywgXAotICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjEsIGYyOyBmbXYueC5kIGEwLCBmMykKLQotI2RlZmluZSBURVNUX0ZQX0lOVF9PUF9TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCBybSApIFwKLSAgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCi0gICAgICAgICAgICAgICAgICAgIGluc3QgYTAsIGYwLCBybSkKLQotI2RlZmluZSBURVNUX0ZQX0lOVF9PUF9EMzIoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEsIHJtICkgXAotICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGR3b3JkIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKLSAgICAgICAgICAgICAgICAgICAgaW5zdCBhMCwgZjAsIGYxOyBsaSB0MiwgMCkKLQotI2RlZmluZSBURVNUX0ZQX0lOVF9PUF9EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCBybSApIFwKLSAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZHdvcmQgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAotICAgICAgICAgICAgICAgICAgICBpbnN0IGEwLCBmMCwgcm0pCi0KLSNkZWZpbmUgVEVTVF9GUF9DTVBfT1BfUyggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKLSAgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgd29yZCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAotICAgICAgICAgICAgICAgICAgICBpbnN0IGEwLCBmMCwgZjEpCi0KLSNkZWZpbmUgVEVTVF9GUF9DTVBfT1BfRDMyKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAotICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGR3b3JkIHJlc3VsdCwgdmFsMSwgdmFsMiwgMC4wLCBcCi0gICAgICAgICAgICAgICAgICAgIGluc3QgYTAsIGYwLCBmMTsgbGkgdDIsIDApCi0KLSNkZWZpbmUgVEVTVF9GUF9DTVBfT1BfRCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKLSAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZHdvcmQgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKLSAgICAgICAgICAgICAgICAgICAgaW5zdCBhMCwgZjAsIGYxKQotCi0jZGVmaW5lIFRFU1RfRkNMQVNTX1ModGVzdG51bSwgY29ycmVjdCwgaW5wdXQpIFwKLSAgVEVTVF9DQVNFKHRlc3RudW0sIGEwLCBjb3JyZWN0LCBsaSBhMCwgaW5wdXQ7IGZtdi5zLnggZmEwLCBhMDsgXAotICAgICAgICAgICAgICAgICAgICBmY2xhc3MucyBhMCwgZmEwKQotCi0jZGVmaW5lIFRFU1RfRkNMQVNTX0QzMih0ZXN0bnVtLCBjb3JyZWN0LCBpbnB1dCkgXAotICBURVNUX0NBU0UodGVzdG51bSwgYTAsIGNvcnJlY3QsIFwKLSAgICAgICAgICAgIGxhIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCi0gICAgICAgICAgICBmbGQgZmEwLCAwKGEwKTsgXAotICAgICAgICAgICAgZmNsYXNzLmQgYTAsIGZhMCkgXAotICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAotICAgIC5hbGlnbiAzOyBcCi0gICAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAotICAgIC5kd29yZCBpbnB1dDsgXAotICAgIC5wb3BzZWN0aW9uCi0KLSNkZWZpbmUgVEVTVF9GQ0xBU1NfRCh0ZXN0bnVtLCBjb3JyZWN0LCBpbnB1dCkgXAotICBURVNUX0NBU0UodGVzdG51bSwgYTAsIGNvcnJlY3QsIGxpIGEwLCBpbnB1dDsgZm12LmQueCBmYTAsIGEwOyBcCi0gICAgICAgICAgICAgICAgICAgIGZjbGFzcy5kIGEwLCBmYTApCi0KLSNkZWZpbmUgVEVTVF9JTlRfRlBfT1BfUyggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAotdGVzdF8gIyMgdGVzdG51bTogXAotICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAotICBTV1NJRyAodGVzdG51bSwgVEVTVE5VTSk7XAotICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKLSAgbHcgIGEzLCAwKGEwKTsgXAotICBsaSAgYTAsIHZhbDE7IFwKLSAgaW5zdCBmMCwgYTA7IFwKLSAgZnNmbGFncyB4MDsgXAotICBmbXYueC5zIGEwLCBmMDsgXAotICBibmUgYTAsIGEzLCBmYWlsOyBcCi0gIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAotICAuYWxpZ24gMjsgXAotICB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhOiBcCi0gIC5mbG9hdCByZXN1bHQ7IFwKLSAgLnBvcHNlY3Rpb24KLQotI2RlZmluZSBURVNUX0lOVF9GUF9PUF9EMzIoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKLXRlc3RfICMjIHRlc3RudW06IFwKLSAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKLSAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKLSAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCi0gIGx3ICBhMywgMChhMCk7IFwKLSAgbHcgIGE0LCA0KGEwKTsgXAotICBsaSAgYTEsIHZhbDE7IFwKLSAgaW5zdCBmMCwgYTE7IFwKLSAgXAotICBmc2QgZjAsIDAoYTApOyBcCi0gIGx3IGExLCA0KGEwKTsgXAotICBsdyBhMCwgMChhMCk7IFwKLSAgXAotICBmc2ZsYWdzIHgwOyBcCi0gIGJuZSBhMCwgYTMsIGZhaWw7IFwKLSAgYm5lIGExLCBhNCwgZmFpbDsgXAotICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKLSAgLmFsaWduIDM7IFwKLSAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAotICAuZG91YmxlIHJlc3VsdDsgXAotICAucG9wc2VjdGlvbgotCi0jZGVmaW5lIFRFU1RfSU5UX0ZQX09QX0QoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKLXRlc3RfICMjIHRlc3RudW06IFwKLSAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKLSAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKLSAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCi0gIGxkICBhMywgMChhMCk7IFwKLSAgbGkgIGEwLCB2YWwxOyBcCi0gIGluc3QgZjAsIGEwOyBcCi0gIGZzZmxhZ3MgeDA7IFwKLSAgZm12LnguZCBhMCwgZjA7IFwKLSAgYm5lIGEwLCBhMywgZmFpbDsgXAotICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKLSAgLmFsaWduIDM7IFwKLSAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAotICAuZG91YmxlIHJlc3VsdDsgXAotICAucG9wc2VjdGlvbgotCi0vLyBXZSBuZWVkIHNvbWUgc3BlY2lhbCBoYW5kbGluZyBoZXJlIHRvIGFsbG93IDY0LWJpdCBjb21wYXJpc29uIGluIDMyLWJpdCBhcmNoCi0vLyBUT0RPOiBmaW5kIGEgYmV0dGVyIG5hbWUgYW5kIGNsZWFuIHVwIHdoZW4gaW50ZW5kZWQgZm9yIGdlbmVyYWwgdXNhZ2U/Ci0jZGVmaW5lIFRFU1RfQ0FTRV9EMzIoIHRlc3RudW0sIHRlc3RyZWcxLCB0ZXN0cmVnMiwgY29ycmVjdHZhbCwgY29kZS4uLiApIFwKLXRlc3RfICMjIHRlc3RudW06IFwKLSAgICBjb2RlOyBcCi0gICAgbGEgIHgzMSwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7IFwKLSAgICBsdyAgeDI5LCAwKHgzMSk7IFwKLSAgICBsdyAgeDMxLCA0KHgzMSk7IFwKLSAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAotICAgIFNXU0lHICh0ZXN0bnVtLCBURVNUTlVNKTtcCi0gICAgYm5lIHRlc3RyZWcxLCB4MjksIGZhaWw7XAotICAgIGJuZSB0ZXN0cmVnMiwgeDMxLCBmYWlsO1wKLSAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKLSAgICAuYWxpZ24gMzsgXAotICAgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKLSAgICAuZHdvcmQgY29ycmVjdHZhbDsgXAotICAgIC5wb3BzZWN0aW9uCi0KLS8vIF4geDMwIGlzIHVzZWQgaW4gc29tZSBvdGhlciBtYWNyb3MsIHRvIGF2b2lkIGlzc3VlcyB3ZSB1c2UgeDMxIGZvciB1cHBlciB3b3JkCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQYXNzIGFuZCBmYWlsIGNvZGUgKGFzc3VtZXMgdGVzdCBudW0gaXMgaW4gVEVTVE5VTSkKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZGVmaW5lIFRFU1RfUEFTU0ZBSUwgXAotICAgICAgICBibmUgeDAsIFRFU1ROVU0sIHBhc3M7IFwKLWZhaWw6IFwKLSAgICAgICAgUlZURVNUX0ZBSUw7IFwKLXBhc3M6IFwKLSAgICAgICAgUlZURVNUX1BBU1MgXAotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUZXN0IGRhdGEgc2VjdGlvbgotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgVEVTVF9EQVRBCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvY29tcGxpYW5jZV9pby5oIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvY29tcGxpYW5jZV9pby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjdjYTU0Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL2NvbXBsaWFuY2VfaW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8vIFJJU0MtViBDb21wbGlhbmNlIElPIFRlc3QgSGVhZGVyIEZpbGUKLQotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNS0yMDE4IEltcGVyYXMgU29mdHdhcmUgTHRkLiwgd3d3LmltcGVyYXMuY29tCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwKLSAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKgotICovCi0KLSNpZm5kZWYgX0NPTVBMSUFOQ0VfSU9fSAotI2RlZmluZSBfQ09NUExJQU5DRV9JT19ICi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJWIElPIE1hY3JvcyAoTm9uIGZ1bmN0aW9uYWwpCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jaWZkZWYgX0NPTVBMSUFOQ0VfT1VUUFVUCi0KLSNkZWZpbmUgUlZURVNUX0lPX1BVU0goX1NQKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWxhIF9TUCwgYmVnaW5fcmVnc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXN3IHgzLCAwKF9TUCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXN3IHg0LCA0KF9TUCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXN3IHg1LCA4KF9TUCk7Ci0KLSNkZWZpbmUgUlZURVNUX0lPX1BPUChfU1ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWxhIF9TUCwgYmVnaW5fcmVnc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWx3IHgzLCAwKF9TUCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWx3IHg0LCA0KF9TUCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWx3IHg1LCA4KF9TUCk7CQotCi0jZGVmaW5lIFJWVEVTVF9JT19XUklURV9TVFIoX1NQLCBfU1RSKQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAuc2VjdGlvbiAuZGF0YS5zdHJpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLTIwMDAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAuc3RyaW5nIF9TVFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAuc2VjdGlvbiAudGV4dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBSVlRFU1RfSU9fUFVTSChfU1ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBsaSB4MywgMHhGMDAwMDAwMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBsYSB4NCwgMjAwMDFiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLTI6ICBsYiB4NSwgMCh4NCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBzYiB4NSwgMCh4Myk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBiZXEgeDUsIHplcm8sIDFmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhZGQgeDQsIHg0LCAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBqIDJiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLTE6ICBSVlRFU1RfSU9fUE9QKF9TUCkKLQotI2Vsc2UgLy8gI2lmZGVmIF9DT01QTElBTkNFX09VVFBVVAotCi0jZGVmaW5lIFJWVEVTVF9JT19XUklURV9TVFIoX1NQLCBfU1RSKQotCi0jZW5kaWYgLy8gI2VuZCAjaWZkZWYgX0NPTVBMSUFOQ0VfT1VUUFVUCi0KLSNkZWZpbmUgUlZURVNUX0lPX0lOSVQKLSNkZWZpbmUgUlZURVNUX0lPX0NIRUNLKCkKLSNkZWZpbmUgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoX1NQLCBfUiwgX0kpCi0jZGVmaW5lIFJWVEVTVF9JT19BU1NFUlRfU0ZQUl9FUShfRiwgX1IsIF9JKQotI2RlZmluZSBSVlRFU1RfSU9fQVNTRVJUX0RGUFJfRVEoX0QsIF9SLCBfSSkKLSNkZWZpbmUgUlZURVNUX0lPX0FTU0VSVF9FUShfUiwgX0kpIAotCi0jZW5kaWYgLy8gX0NPTVBMSUFOQ0VfSU9fSApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvY29tcGxpYW5jZV90ZXN0LmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvcmlzY3ZfY29tcGxpYW5jZS9jb21wbGlhbmNlX3Rlc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM3ZTdmOS4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvcmlzY3ZfY29tcGxpYW5jZS9jb21wbGlhbmNlX3Rlc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8vIFJJU0MtViBDb21wbGlhbmNlIFRlc3QgSGVhZGVyIEZpbGUKLS8vIENvcHlyaWdodCAoYykgMjAxNywgQ29kYXNpcCBMdGQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLyBTZWUgTElDRU5TRSBmb3IgbGljZW5zZSBkZXRhaWxzLgotLy8KLS8vIERlc2NyaXB0aW9uOiBDb21tb24gaGVhZGVyIGZpbGUgZm9yIFJWMzJJIHRlc3RzCi0KLSNpZm5kZWYgX0NPTVBMSUFOQ0VfVEVTVF9ICi0jZGVmaW5lIF9DT01QTElBTkNFX1RFU1RfSAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSViBDb21wbGlhbmNlIE1hY3JvcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZGVmaW5lIFJWX0NPTVBMSUFOQ0VfSEFMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQotI2RlZmluZSBSVl9DT01QTElBTkNFX1JWMzJNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFJWVEVTVF9SVjMyTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQotI2RlZmluZSBSVl9DT01QTElBTkNFX0NPREVfQkVHSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFJWVEVTVF9DT0RFX0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQotI2RlZmluZSBSVl9DT01QTElBTkNFX0NPREVfRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFJWVEVTVF9DT0RFX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQotI2RlZmluZSBSVl9DT01QTElBTkNFX0RBVEFfQkVHSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFJWVEVTVF9EQVRBX0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQotI2RlZmluZSBSVl9DT01QTElBTkNFX0RBVEFfRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFJWVEVTVF9EQVRBX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQotI2VuZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvcmlzY3ZfdGVzdC5oIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvcmlzY3ZfdGVzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGM2MTU2Li4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL3Jpc2N2X3Rlc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotCi0jaWZuZGVmIF9SSVNDVl9URVNUX0gKLSNkZWZpbmUgX1JJU0NWX1RFU1RfSAotCi0jaW5jbHVkZSAidGVzdF9tYWNyb3MuaCIKLQotI2VuZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvcmlzY3ZfdGVzdF9tYWNyb3MuaCBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL3Jpc2N2X3Rlc3RfbWFjcm9zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MTdiZDQuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvcmlzY3ZfdGVzdF9tYWNyb3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2MyArMCwwIEBACi0vLyBSSVNDLVYgQ29tcGxpYW5jZSBJTyBUZXN0IEhlYWRlciBGaWxlCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAxOCBJbXBlcmFzIFNvZnR3YXJlIEx0ZC4sIHd3dy5pbXBlcmFzLmNvbQotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsCi0gKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICoKLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICoKLSAqLwotCi0jaW5jbHVkZSAicmlzY3ZfbWFjcm9zLmgiCi0KLS8vCi0vLyBJbiBnZW5lcmFsIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzIGFyZSByZXNlcnZlZAotLy8gcmEsIGEwLCB0MCwgdDEKLS8vIEFkZGl0aW9uYWxseSBvbiBhbiBhc3NlcnRpb24gdmlvbGF0aW9uLCB0MSwgdDIgYXJlIG92ZXJ3cml0dGVuCi0vLyB4MSwgeDEwLCB4NSwgeDYsIHg3IHJlc3BlY3RpdmVseQotLy8gRmxvYXRpbmcgcmVnaXN0ZXJzIHJlc2VydmVkCi0vLyBmNQotLy8KLQotI2RlZmluZSBNQVNLX1hMRU4oeCkgKCh4KSAmICgoMSA8PCAoX19yaXNjdl94bGVuIC0gMSkgPDwgMSkgLSAxKSkKLQotI2RlZmluZSBTRVhUX0lNTSh4KSAoKHgpIHwgKC0oKCh4KSA+PiAxMSkgJiAxKSA8PCAxMSkpCi0KLS8vIEJhc2UgZnVuY3Rpb24gZm9yIGludGVnZXIgb3BlcmF0aW9ucwotI2RlZmluZSBURVNUX0NBU0UodGVzdHJlZywgZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKLSAgICBjb2RlOyBcCi0gICAgc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAotICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKLQotLy8gQmFzZSBmdW5jdGlvbnMgZm9yIHNpbmdsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucwotI2RlZmluZSBURVNUX0NBU0VfRlAodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCi0gICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAotICAgIGZsdyByZWcxLCAwKGEwKTsgXAotICAgIGZsdyByZWcyLCA0KGEwKTsgXAotICAgIGx3IHQxLCA4KGEwKTsgXAotICAgIGNvZGU7IFwKLSAgICBmc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAotICAgIFJWVEVTVF9JT19BU1NFUlRfU0ZQUl9FUShkZXN0cmVnLCB0MSwgY29ycmVjdHZhbCkgXAotICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAotICAgIC5hbGlnbiAzOyBcCi0gICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKLSAgICAgIC5mbG9hdCB2YWwxOyBcCi0gICAgICAuZmxvYXQgdmFsMjsgXAotICAgICAgLndvcmQgY29ycmVjdHZhbDsgXAotICAgIC5wb3BzZWN0aW9uCi0KLSNkZWZpbmUgVEVTVF9DQVNFX0ZQX0kodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAotICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKLSAgICBsdyB0MSwgMChhMCk7IFwKLSAgICBjb2RlOyBcCi0gICAgZnN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKLSAgICBSVlRFU1RfSU9fQVNTRVJUX1NGUFJfRVEoZGVzdHJlZywgdDEsIGNvcnJlY3R2YWwpIFwKLSAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKLSAgICAuYWxpZ24gMTsgXAotICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCi0gICAgICAud29yZCBjb3JyZWN0dmFsOyBcCi0gICAgLnBvcHNlY3Rpb24KLQotI2RlZmluZSBURVNUX0NBU0VfRlBfSTIodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAotICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKLSAgICBmbHcgcmVnLCAwKGEwKTsgXAotICAgIGx3IHQxLCA0KGEwKTsgXAotICAgIGNvZGU7IFwKLSAgICBzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCi0gICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCBkZXN0cmVnLCBjb3JyZWN0dmFsKSBcCi0gICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCi0gICAgLmFsaWduIDI7IFwKLSAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAotICAgICAgLmZsb2F0IHZhbDsgXAotICAgICAgLndvcmQgY29ycmVjdHZhbDsgXAotICAgIC5wb3BzZWN0aW9uCi0KLSNkZWZpbmUgVEVTVF9DQVNFX0ZQXzRSRUcodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzMsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHZhbDMsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCi0gICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAotICAgIGZsdyByZWcxLCAwKGEwKTsgXAotICAgIGZsdyByZWcyLCA0KGEwKTsgXAotICAgIGZsdyByZWczLCA4KGEwKTsgXAotICAgIGx3IHQxLCAxMihhMCk7IFwKLSAgICBjb2RlOyBcCi0gICAgZnN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKLSAgICBSVlRFU1RfSU9fQVNTRVJUX1NGUFJfRVEoZGVzdHJlZywgdDEsIGNvcnJlY3R2YWwpIFwKLSAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKLSAgICAuYWxpZ24gNDsgXAotICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCi0gICAgICAuZmxvYXQgdmFsMTsgXAotICAgICAgLmZsb2F0IHZhbDI7IFwKLSAgICAgIC5mbG9hdCB2YWwzOyBcCi0gICAgICAud29yZCBjb3JyZWN0dmFsOyBcCi0gICAgLnBvcHNlY3Rpb24KLQotI2RlZmluZSBURVNUX0NBU0VfRlBfRk1WWFModGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAotICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKLSAgICBmbHcgcmVnLCAwKGEwKTsgXAotICAgIGNvZGU7IFwKLSAgICBzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCi0gICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCBkZXN0cmVnLCBjb3JyZWN0dmFsKSBcCi0gICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCi0gICAgLmFsaWduIDE7IFwKLSAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAotICAgICAgLmZsb2F0IHZhbDsgXAotICAgIC5wb3BzZWN0aW9uCi0KLSNkZWZpbmUgVEVTVF9DQVNFX0ZQX0ZNVlNYKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgY29kZS4uLikgXAotICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKLSAgICBsaSByZWcsIHZhbDsgXAotICAgIGNvZGU7IFwKLSAgICBmc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAotICAgIGx3IGExLCAwKGEwKTsgXAotICAgIFJWVEVTVF9JT19BU1NFUlRfU0ZQUl9FUShkZXN0cmVnLCBhMSwgY29ycmVjdHZhbCkgXAotICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAotICAgIC5hbGlnbiAxOyBcCi0gICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKLSAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKLSAgICAucG9wc2VjdGlvbgotCi0vLyBCYXNlIGZ1bmN0aW9ucyBmb3IgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zIC0gcnYzMmQKLSNkZWZpbmUgVEVTVF9DQVNFX0ZQRCh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKLSAgICBsYSAgYTAsIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCi0gICAgZmxkIHJlZzEsIDAoYTApOyBcCi0gICAgZmxkIHJlZzIsIDgoYTApOyBcCi0gICAgY29kZTsgXAotICAgIGZzZCBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCi0gICAgbHcgdDEsIDE2KGEwKTsgXAotICAgIGx3IHQyLCAyMChhMCk7IFwKLSAgICBsYSBhMCwgc3RvcmVfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCi0gICAgZnNkIGRlc3RyZWcsIDAoYTApOyBcCi0gICAgbHcgYTEsIDAoYTApOyBcCi0gICAgbHcgYTIsIDQoYTApOyBcCi0gICAgUlZURVNUX0lPX0FTU0VSVF9ERlBSX0VRKGRlc3RyZWcsIHQyLCB0MSwgYTIsIGExLCBjb3JyZWN0dmFsKSBcCi0gICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCi0gICAgLmFsaWduIDM7IFwKLSAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAotICAgICAgLmRvdWJsZSB2YWwxOyBcCi0gICAgICAuZG91YmxlIHZhbDI7IFwKLSAgICAgIC5kd29yZCBjb3JyZWN0dmFsOyBcCi0gICAgLnBvcHNlY3Rpb247IFwKLSAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKLSAgICBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKLSAgICAgIC5maWxsIDEsIDgsIC0xOyBcCi0gICAgLnBvcHNlY3Rpb24KLQotI2RlZmluZSBURVNUX0NBU0VfRlBEX0kodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAotICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKLSAgICBjb2RlOyBcCi0gICAgZnNkIGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKLSAgICBsdyB0MSwgMChhMCk7IFwKLSAgICBsdyB0MiwgNChhMCk7IFwKLSAgICBsYSBhMCwgc3RvcmVfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCi0gICAgZnNkIGRlc3RyZWcsIDAoYTApOyBcCi0gICAgbHcgYTEsIDAoYTApOyBcCi0gICAgbHcgYTIsIDQoYTApOyBcCi0gICAgUlZURVNUX0lPX0FTU0VSVF9ERlBSX0VRKGRlc3RyZWcsIHQyLCB0MSwgYTIsIGExLCBjb3JyZWN0dmFsKSBcCi0gICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCi0gICAgLmFsaWduIDE7IFwKLSAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAotICAgICAgLmR3b3JkIGNvcnJlY3R2YWw7IFwKLSAgICAucG9wc2VjdGlvbjsgXAotICAgIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAotICAgICAgLmZpbGwgMSwgOCwgLTE7IFwKLSAgICAucG9wc2VjdGlvbgotCi0jZGVmaW5lIFRFU1RfQ0FTRV9GUERfSTIodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAotICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKLSAgICBmbGQgcmVnLCAwKGEwKTsgXAotICAgIGx3IHQxLCA4KGEwKTsgXAotICAgIGNvZGU7IFwKLSAgICBzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCi0gICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCBkZXN0cmVnLCBjb3JyZWN0dmFsKSBcCi0gICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCi0gICAgLmFsaWduIDI7IFwKLSAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAotICAgICAgLmRvdWJsZSB2YWw7IFwKLSAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKLSAgICAucG9wc2VjdGlvbgotCi0jZGVmaW5lIFRFU1RfQ0FTRV9GUERfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKLSAgICBsYSAgYTAsIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCi0gICAgZmxkIHJlZzEsIDAoYTApOyBcCi0gICAgZmxkIHJlZzIsIDgoYTApOyBcCi0gICAgZmxkIHJlZzMsIDE2KGEwKTsgXAotICAgIGNvZGU7IFwKLSAgICBmc2QgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAotICAgIGx3IHQxLCAyNChhMCk7IFwKLSAgICBsdyB0MiwgMjgoYTApOyBcCi0gICAgbGEgYTAsIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAotICAgIGZzZCBkZXN0cmVnLCAwKGEwKTsgXAotICAgIGx3IGExLCAwKGEwKTsgXAotICAgIGx3IGEyLCA0KGEwKTsgXAotICAgIFJWVEVTVF9JT19BU1NFUlRfREZQUl9FUShkZXN0cmVnLCB0MiwgdDEsIGEyLCBhMSwgY29ycmVjdHZhbCkgXAotICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAotICAgIC5hbGlnbiA0OyBcCi0gICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKLSAgICAgIC5kb3VibGUgdmFsMTsgXAotICAgICAgLmRvdWJsZSB2YWwyOyBcCi0gICAgICAuZG91YmxlIHZhbDM7IFwKLSAgICAgIC5kd29yZCBjb3JyZWN0dmFsOyBcCi0gICAgLnBvcHNlY3Rpb247IFwKLSAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKLSAgICBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKLSAgICAgIC5maWxsIDEsIDgsIC0xOyBcCi0gICAgLnBvcHNlY3Rpb24KLQotLy9UZXN0cyBmb3IgYSBpbnN0cnVjdGlvbnMgd2l0aCByZWdpc3Rlci1yZWdpc3RlciBvcGVyYW5kCi0jZGVmaW5lIFRFU1RfUlJfT1AoaW5zdCwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAotICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCi0gICAgICBsaSAgcmVnMSwgTUFTS19YTEVOKHZhbDEpOyBcCi0gICAgICBsaSAgcmVnMiwgTUFTS19YTEVOKHZhbDIpOyBcCi0gICAgICBpbnN0IGRlc3RyZWcsIHJlZzEsIHJlZzI7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9SUl9TUkMxKCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQsIHRlc3RyZWcpIFwKLSAgICBURVNUX0NBU0UodGVzdHJlZywgZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAotICAgICAgbGkgZGVzdHJlZywgTUFTS19YTEVOKHZhbDEpOyBcCi0gICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwyKTsgXAotICAgICAgaW5zdCBkZXN0cmVnLCBkZXN0cmVnLCByZWc7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9SUl9TUkMyKCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQsIHRlc3RyZWcpIFwKLSAgICBURVNUX0NBU0UodGVzdHJlZywgZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAotICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsMSk7IFwKLSAgICAgIGxpIGRlc3RyZWcsIE1BU0tfWExFTih2YWwyKTsgXAotICAgICAgaW5zdCBkZXN0cmVnLCByZWcsIGRlc3RyZWc7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9SUl9TUkMxMiggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCi0gICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgIGxpIGRlc3RyZWcsIE1BU0tfWExFTih2YWwxKTsgXAotICAgICAgaW5zdCBkZXN0cmVnLCBkZXN0cmVnLCBkZXN0cmVnOyBcCi0gICAgKQotCi0jZGVmaW5lIFRFU1RfUlJfWkVSTzEoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCi0gICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKLSAgICAgIGluc3QgZGVzdHJlZywgeDAsIHJlZzsgXAotICAgICkKLQotI2RlZmluZSBURVNUX1JSX1pFUk8yKCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAotICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCi0gICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwpOyBcCi0gICAgICBpbnN0IGRlc3RyZWcsIHJlZywgeDA7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9SUl9aRVJPMTIoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIHRlc3RyZWcpIFwKLSAgICBURVNUX0NBU0UodGVzdHJlZywgZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAotICAgICAgaW5zdCBkZXN0cmVnLCB4MCwgeDA7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9SUl9aRVJPREVTVCggaW5zdCwgcmVnMSwgcmVnMiwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAotICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCB4MCwgMCwgc3dyZWcsIG9mZnNldCwgXAotICAgICAgbGkgcmVnMSwgTUFTS19YTEVOKHZhbDEpOyBcCi0gICAgICBsaSByZWcyLCBNQVNLX1hMRU4odmFsMik7IFwKLSAgICAgIGluc3QgeDAsIHJlZzEsIHJlZzI7IFwKLSAgICApCi0KLS8vVGVzdHMgZm9yIGEgaW5zdHJ1Y3Rpb25zIHdpdGggcmVnaXN0ZXItaW1tZWRpYXRlIG9wZXJhbmQKLSNkZWZpbmUgVEVTVF9JTU1fT1AoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQsIHRlc3RyZWcpIFwKLSAgICBURVNUX0NBU0UodGVzdHJlZywgZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAotICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsKTsgXAotICAgICAgaW5zdCBkZXN0cmVnLCByZWcsIFNFWFRfSU1NKGltbSk7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9JTU1fU1JDKCBpbnN0LCBkZXN0cmVnLCBjb3JyZWN0dmFsLCB2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAotICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCi0gICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsKTsgXAotICAgICAgaW5zdCBkZXN0cmVnLCBkZXN0cmVnLCBTRVhUX0lNTShpbW0pOyBcCi0gICAgKQotCi0jZGVmaW5lIFRFU1RfSU1NX1pFUk9TUkMoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAotICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCi0gICAgICBpbnN0IGRlc3RyZWcsIHgwLCBTRVhUX0lNTShpbW0pOyBcCi0gICAgKQotCi0jZGVmaW5lIFRFU1RfSU1NX1pFUk9ERVNUKCBpbnN0LCByZWcsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCi0gICAgVEVTVF9DQVNFKHRlc3RyZWcsIHgwLCAwLCBzd3JlZywgb2Zmc2V0LCBcCi0gICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwpOyBcCi0gICAgICBpbnN0IHgwLCByZWcsIFNFWFRfSU1NKGltbSk7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9JTU1fT05FUkVHKCBpbnN0LCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQsIHRlc3RyZWcpIFwKLSAgICBURVNUX0NBU0UodGVzdHJlZywgZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAotICAgICAgaW5zdCBkZXN0cmVnLCBTRVhUX0lNTShpbW0pOyBcCi0gICAgICApCi0KLSNkZWZpbmUgVEVTVF9BVUlQQyhpbnN0LCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQsIHRlc3RyZWcpIFwKLSAgICBURVNUX0NBU0UodGVzdHJlZywgZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAotICAgICAgMTogXAotICAgICAgaW5zdCBkZXN0cmVnLCBpbW07IFwKLSAgICAgIGxhIHN3cmVnLCAxYjsgXAotICAgICAgc3ViIGRlc3RyZWcsIGRlc3RyZWcsIHN3cmVnOyBcCi0gICAgICApCi0KLS8vVGVzdHMgZm9yIGEgY29tcHJlc3NlZCBpbnN0cnVjdGlvbgotI2RlZmluZSBURVNUX0NSX09QKCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQsIHRlc3RyZWcpIFwKLSAgICBURVNUX0NBU0UodGVzdHJlZywgZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAotICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsMSk7IFwKLSAgICAgIGxpIGRlc3RyZWcsIE1BU0tfWExFTih2YWwyKTsgXAotICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKLSAgICAgICkKLQotI2RlZmluZSBURVNUX0NJX09QKCBpbnN0LCBkZXN0cmVnLCBjb3JyZWN0dmFsLCB2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAotICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCi0gICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsKTsgXAotICAgICAgaW5zdCBkZXN0cmVnLCBpbW07IFwKLSAgICAgICkKLQotI2RlZmluZSBURVNUX0NJX09QX05PUkVHKGluc3QsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAotICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLHgwLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCi0gICAgICBpbnN0IGltbTsgXAotICAgICAgKQotCi0vL1Rlc3RzIGZvciBmbG9hdGluZyBwb2ludCBpbnN0cnVjdGlvbnMgLSBzaW5nbGUgcHJlY2lzaW9uCi0jZGVmaW5lIFRFU1RfRlBfT1AodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQpIFwKLSAgICAgIFRFU1RfQ0FTRV9GUCh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgXAotICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzEsIHJlZzI7IFwKLSAgICAgICAgKQotCi0jZGVmaW5lIFRFU1RfRlBfT05FUkVHKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAotICAgICAgVEVTVF9DQVNFX0ZQKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKLSAgICAgICAgKQotCi0jZGVmaW5lIFRFU1RfRlBfNFJFRyh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCkgXAotICAgICAgVEVTVF9DQVNFX0ZQXzRSRUcodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzMsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHZhbDMsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgICAgaW5zdCBkZXN0cmVnLCByZWcxLCByZWcyLCByZWczOyBcCi0gICAgICAgICkKLQotI2RlZmluZSBURVNUX0ZQX0kodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCi0gICAgICBURVNUX0NBU0VfRlBfSSh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsKTsgXAotICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAotICAgICAgICApCi0KLSNkZWZpbmUgVEVTVF9GUF9JMih0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKLSAgICAgIFRFU1RfQ0FTRV9GUF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKLSAgICAgICAgKQotCi0vL1Rlc3RzIGZvciBmbG9hdGluZyBwb2ludCBpbnN0cnVjdGlvbnMgLSBkb3VibGUgcHJlY2lzaW9uCi0jZGVmaW5lIFRFU1RfRlBEX09QKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcxLCByZWcyLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0KSBcCi0gICAgICBURVNUX0NBU0VfRlBEKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcxLCByZWcyLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0LCBcCi0gICAgICAgIGluc3QgZGVzdHJlZywgcmVnMSwgcmVnMjsgXAotICAgICAgICApCi0KLSNkZWZpbmUgVEVTVF9GUERfT05FUkVHKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAotICAgICAgVEVTVF9DQVNFX0ZQRCh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBcCi0gICAgICAgIGluc3QgZGVzdHJlZywgcmVnOyBcCi0gICAgICAgICkKLQotI2RlZmluZSBURVNUX0ZQRF80UkVHKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcxLCByZWcyLCByZWczLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCB2YWwzLCBzd3JlZywgb2Zmc2V0KSBcCi0gICAgICBURVNUX0NBU0VfRlBEXzRSRUcodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzMsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHZhbDMsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgICAgaW5zdCBkZXN0cmVnLCByZWcxLCByZWcyLCByZWczOyBcCi0gICAgICAgICkKLQotI2RlZmluZSBURVNUX0ZQRF9JKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAotICAgICAgVEVTVF9DQVNFX0ZQRF9JKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAotICAgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwpOyBcCi0gICAgICAgIGluc3QgZGVzdHJlZywgcmVnOyBcCi0gICAgICAgICkKLQotI2RlZmluZSBURVNUX0ZQRF9JMih0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKLSAgICAgIFRFU1RfQ0FTRV9GUERfSTIodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBcCi0gICAgICAgIGluc3QgZGVzdHJlZywgcmVnOyBcCi0gICAgICAgICkKLQotI2RlZmluZSBURVNUX0NBRERJMTZTUChjb3JyZWN0dmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQsIHRlc3RyZWcpIFwKLSAgICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLHgyLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCi0gICAgICBjLmFkZGkxNnNwIHgyLCBpbW07IFwKLSAgICAgICkKLQotI2RlZmluZSBURVNUX0NBRERJNFNQTihkZXN0cmVnLCBjb3JyZWN0dmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQsIHRlc3RyZWcpIFwKLSAgICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgICAgYy5hZGRpNHNwbiBkZXN0cmVnLCB4MiwgU0VYVF9JTU0oaW1tKTsgXAotICAgICAgICApCi0KLSNkZWZpbmUgVEVTVF9DSkwoaW5zdCwgcmVnLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKLSAgICAgIGxpIHgxMCwgdmFsOyBcCi0gICAgICBsYSByZWcsIDFmOyBcCi0gICAgICBpbnN0IHJlZzsgXAotICAgICAgbGkgeDEwLCAweDEyM2FiOyBcCi0xOiBcCi0gICAgICBzdyB4MTAsIG9mZnNldChzd3JlZyk7IFwKLSAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgeDEwLCB2YWwpOyBcCi0KLSNkZWZpbmUgQUJTKHgpICgoeCA+PiAxMSkgXiB4KSAtICh4ID4+IDExKQotCi0jZGVmaW5lIFRFU1RfQ0ooaW5zdCwgcmVnLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKLSAgICAgIGxpIHJlZywgdmFsOyBcCi0gICAgICBpbnN0IDFmOyBcCi0gICAgICBsaSByZWcsIDB4MTIzYWI7IFwKLTE6IFwKLSAgICAgIHN3IHJlZywgb2Zmc2V0KHN3cmVnKTsgXAotICAgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCByZWcsIHZhbCk7IFwKLQotI2RlZmluZSBURVNUX0NMKGluc3QsIHJlZywgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCi0gICAgICBsYSByZWcsIHRlc3RfZGF0YTsgXAotICAgICAgaW5zdCByZWcsIGltbShyZWcpOyBcCi0gICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKLQotLy8gbHcgcmVnLCBpbW0oeDIpCi0vLyBjLmx3c3AgcmVnLCBpbW0oeDIpCi0jZGVmaW5lIFRFU1RfQ0xXU1AocmVnLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKLSAgICAgIGxhIHgyLCB0ZXN0X2RhdGE7IFwKLSAgICAgIGMubHdzcCByZWcsIGltbSh4Mik7IFwKLSAgICAgIHN3IHJlZywgb2Zmc2V0KHN3cmVnKTsgXAotCi0jZGVmaW5lIFRFU1RfQ1NXKHRlc3RfZGF0YSwgaW5zdCwgcmVnMSwgcmVnMiwgdmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKLSAgICAgIGxpIHJlZzEsIHZhbDsgXAotICAgICAgbGEgcmVnMiwgdGVzdF9kYXRhOyBcCi0gICAgICBpbnN0IHJlZzEsIGltbShyZWcyKTsgXAotICAgICAgbHcgcmVnMSwgaW1tKHJlZzIpOyBcCi0gICAgICBzdyByZWcxLCBvZmZzZXQoc3dyZWcpOyBcCi0gICAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIHJlZzEsIHZhbCk7IFwKLQotI2RlZmluZSBURVNUX0NTV1NQKHRlc3RfZGF0YSwgcmVnLCB2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAotICAgICAgbGEgeDIsIHRlc3RfZGF0YTsgXAotICAgICAgbGkgcmVnLCB2YWw7IFwKLSAgICAgIGMuc3dzcCByZWcsIGltbSh4Mik7IFwKLSAgICAgIGx3IHJlZywgaW1tKHgyKTsgXAotICAgICAgc3cgcmVnLCBvZmZzZXQoc3dyZWcpOyBcCi0gICAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIHJlZywgdmFsKTsgXAotCi0jZGVmaW5lIFRFU1RfQ0JFUVoocmVnLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKLSAgICAgIGxpIHJlZywgdmFsOyBcCi0gICAgICBjLnN1YiByZWcsIHJlZzsgXAotICAgICAgYy5iZXF6IHJlZywgM2Y7IFwKLSAgICAgIGxpIHJlZywgMHgxMjNhYjsgXAotMzogXAotICAgICAgc3cgcmVnLCBvZmZzZXQoc3dyZWcpOyBcCi0gICAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIHJlZywgMHgwKTsgXAotCi0jZGVmaW5lIFRFU1RfQ0JORVoocmVnLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKLSAgICAgIGxpIHJlZywgdmFsOyBcCi0gICAgICBjLmJuZXogcmVnLCA0ZjsgXAotICAgICAgbGkgcmVnLCAweDA7IFwKLTQ6IFwKLSAgICAgIHN3IHJlZywgb2Zmc2V0KHN3cmVnKTsgXAotICAgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCByZWcsIHZhbCk7IFwKLQotI2RlZmluZSBURVNUX0ZNVlhTKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAotICAgICAgVEVTVF9DQVNFX0ZQX0ZNVlhTKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAotICAgICAgICBmbXYueC5zIGRlc3RyZWcsIHJlZzsgXAotICAgICAgICApCi0KLSNkZWZpbmUgVEVTVF9GTVZTWCh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKLSAgICAgIFRFU1RfQ0FTRV9GUF9GTVZTWCh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgICAgZm12LnMueCBkZXN0cmVnLCByZWc7IFwKLSAgICAgICAgKQotCi0jZGVmaW5lIFNXU0lHKGEsYikKLQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvdGVzdF9tYWNyb3MuaCBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL3Rlc3RfbWFjcm9zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyYzYxMGUuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvdGVzdF9tYWNyb3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDU5MyArMCwwIEBACi0KLS8vIFJJU0MtViBDb21wbGlhbmNlIFRlc3QgSGVhZGVyIEZpbGUKLS8vIENvcHlyaWdodCAoYykgMjAxNywgQ29kYXNpcCBMdGQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLyBTZWUgTElDRU5TRSBmb3IgbGljZW5zZSBkZXRhaWxzLgotLy8KLS8vIERlc2NyaXB0aW9uOiBDb21tb24gaGVhZGVyIGZpbGUgZm9yIFJWMzJJIHRlc3RzCi0KLSNpZm5kZWYgX1RFU1RfTUFDUk9TX0gKLSNkZWZpbmUgX1RFU1RfTUFDUk9TX0gKLQotI2luY2x1ZGUgInJpc2N2X21hY3Jvcy5oIgotCi0vLyBSSVNDLVYgQ29tcGxpYW5jZSBJTyBUZXN0IEhlYWRlciBGaWxlCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAxOCBJbXBlcmFzIFNvZnR3YXJlIEx0ZC4sIHd3dy5pbXBlcmFzLmNvbQotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsCi0gKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICoKLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICoKLSAqLwotCi0KLS8vCi0vLyBJbiBnZW5lcmFsIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzIGFyZSByZXNlcnZlZAotLy8gcmEsIGEwLCB0MCwgdDEKLS8vIEFkZGl0aW9uYWxseSBvbiBhbiBhc3NlcnRpb24gdmlvbGF0aW9uLCB0MSwgdDIgYXJlIG92ZXJ3cml0dGVuCi0vLyB4MSwgeDEwLCB4NSwgeDYsIHg3IHJlc3BlY3RpdmVseQotLy8gRmxvYXRpbmcgcmVnaXN0ZXJzIHJlc2VydmVkCi0vLyBmNQotLy8KLQotI2RlZmluZSBNQVNLX1hMRU4oeCkgKCh4KSAmICgoMSA8PCAoX19yaXNjdl94bGVuIC0gMSkgPDwgMSkgLSAxKSkKLQotI2RlZmluZSBTRVhUX0lNTSh4KSAoKHgpIHwgKC0oKCh4KSA+PiAxMSkgJiAxKSA8PCAxMSkpCi0KLS8vIEJhc2UgZnVuY3Rpb24gZm9yIGludGVnZXIgb3BlcmF0aW9ucwotI2RlZmluZSBURVNUX0NBU0UoZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKLSAgICBjb2RlOyBcCi0gICAgc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAotICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgZGVzdHJlZywgY29ycmVjdHZhbCkgXAotCi0vLyBCYXNlIGZ1bmN0aW9ucyBmb3Igc2luZ2xlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zCi0jZGVmaW5lIFRFU1RfQ0FTRV9GUCh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKLSAgICBsYSAgYTAsIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCi0gICAgZmx3IHJlZzEsIDAoYTApOyBcCi0gICAgZmx3IHJlZzIsIDQoYTApOyBcCi0gICAgbHcgdDEsIDgoYTApOyBcCi0gICAgY29kZTsgXAotICAgIGZzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCi0gICAgUlZURVNUX0lPX0FTU0VSVF9TRlBSX0VRKGRlc3RyZWcsIHQxLCBjb3JyZWN0dmFsKSBcCi0gICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCi0gICAgLmJhbGlnbiA4OyBcCi0gICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKLSAgICAgIC5mbG9hdCB2YWwxOyBcCi0gICAgICAuZmxvYXQgdmFsMjsgXAotICAgICAgLndvcmQgY29ycmVjdHZhbDsgXAotICAgIC5wb3BzZWN0aW9uCi0KLSNkZWZpbmUgVEVTVF9DQVNFX0ZQX0kodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAotICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKLSAgICBsdyB0MSwgMChhMCk7IFwKLSAgICBjb2RlOyBcCi0gICAgZnN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKLSAgICBSVlRFU1RfSU9fQVNTRVJUX1NGUFJfRVEoZGVzdHJlZywgdDEsIGNvcnJlY3R2YWwpIFwKLSAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKLSAgICAuYmFsaWduIDI7IFwKLSAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAotICAgICAgLndvcmQgY29ycmVjdHZhbDsgXAotICAgIC5wb3BzZWN0aW9uCi0KLSNkZWZpbmUgVEVTVF9DQVNFX0ZQX0kyKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKLSAgICBsYSAgYTAsIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCi0gICAgZmx3IHJlZywgMChhMCk7IFwKLSAgICBsdyB0MSwgNChhMCk7IFwKLSAgICBjb2RlOyBcCi0gICAgc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAotICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgZGVzdHJlZywgY29ycmVjdHZhbCkgXAotICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAotICAgIC5iYWxpZ24gNDsgXAotICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCi0gICAgICAuZmxvYXQgdmFsOyBcCi0gICAgICAud29yZCBjb3JyZWN0dmFsOyBcCi0gICAgLnBvcHNlY3Rpb24KLQotI2RlZmluZSBURVNUX0NBU0VfRlBfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKLSAgICBsYSAgYTAsIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCi0gICAgZmx3IHJlZzEsIDAoYTApOyBcCi0gICAgZmx3IHJlZzIsIDQoYTApOyBcCi0gICAgZmx3IHJlZzMsIDgoYTApOyBcCi0gICAgbHcgdDEsIDEyKGEwKTsgXAotICAgIGNvZGU7IFwKLSAgICBmc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAotICAgIFJWVEVTVF9JT19BU1NFUlRfU0ZQUl9FUShkZXN0cmVnLCB0MSwgY29ycmVjdHZhbCkgXAotICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAotICAgIC5iYWxpZ24gMTY7IFwKLSAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAotICAgICAgLmZsb2F0IHZhbDE7IFwKLSAgICAgIC5mbG9hdCB2YWwyOyBcCi0gICAgICAuZmxvYXQgdmFsMzsgXAotICAgICAgLndvcmQgY29ycmVjdHZhbDsgXAotICAgIC5wb3BzZWN0aW9uCi0KLSNkZWZpbmUgVEVTVF9DQVNFX0ZQX0ZNVlhTKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKLSAgICBsYSAgYTAsIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCi0gICAgZmx3IHJlZywgMChhMCk7IFwKLSAgICBjb2RlOyBcCi0gICAgc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAotICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgZGVzdHJlZywgY29ycmVjdHZhbCkgXAotICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAotICAgIC5iYWxpZ24gMjsgXAotICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCi0gICAgICAuZmxvYXQgdmFsOyBcCi0gICAgLnBvcHNlY3Rpb24KLQotI2RlZmluZSBURVNUX0NBU0VfRlBfRk1WU1godGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uKSBcCi0gICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAotICAgIGxpIHJlZywgdmFsOyBcCi0gICAgY29kZTsgXAotICAgIGZzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCi0gICAgbHcgYTEsIDAoYTApOyBcCi0gICAgUlZURVNUX0lPX0FTU0VSVF9TRlBSX0VRKGRlc3RyZWcsIGExLCBjb3JyZWN0dmFsKSBcCi0gICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCi0gICAgLmJhbGlnbiAyOyBcCi0gICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKLSAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKLSAgICAucG9wc2VjdGlvbgotCi0vLyBCYXNlIGZ1bmN0aW9ucyBmb3IgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zIC0gcnYzMmQKLSNkZWZpbmUgVEVTVF9DQVNFX0ZQRCh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKLSAgICBsYSAgYTAsIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCi0gICAgZmxkIHJlZzEsIDAoYTApOyBcCi0gICAgZmxkIHJlZzIsIDgoYTApOyBcCi0gICAgY29kZTsgXAotICAgIGZzZCBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCi0gICAgbHcgdDEsIDE2KGEwKTsgXAotICAgIGx3IHQyLCAyMChhMCk7IFwKLSAgICBsYSBhMCwgc3RvcmVfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCi0gICAgZnNkIGRlc3RyZWcsIDAoYTApOyBcCi0gICAgbHcgYTEsIDAoYTApOyBcCi0gICAgbHcgYTIsIDQoYTApOyBcCi0gICAgUlZURVNUX0lPX0FTU0VSVF9ERlBSX0VRKGRlc3RyZWcsIHQyLCB0MSwgYTIsIGExLCBjb3JyZWN0dmFsKSBcCi0gICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCi0gICAgLmJhbGlnbiA4OyBcCi0gICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKLSAgICAgIC5kb3VibGUgdmFsMTsgXAotICAgICAgLmRvdWJsZSB2YWwyOyBcCi0gICAgICAuZHdvcmQgY29ycmVjdHZhbDsgXAotICAgIC5wb3BzZWN0aW9uOyBcCi0gICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCi0gICAgc3RvcmVfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCi0gICAgICAuZmlsbCAxLCA4LCAtMTsgXAotICAgIC5wb3BzZWN0aW9uCi0KLSNkZWZpbmUgVEVTVF9DQVNFX0ZQRF9JKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKLSAgICBsYSAgYTAsIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCi0gICAgY29kZTsgXAotICAgIGZzZCBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCi0gICAgbHcgdDEsIDAoYTApOyBcCi0gICAgbHcgdDIsIDQoYTApOyBcCi0gICAgbGEgYTAsIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAotICAgIGZzZCBkZXN0cmVnLCAwKGEwKTsgXAotICAgIGx3IGExLCAwKGEwKTsgXAotICAgIGx3IGEyLCA0KGEwKTsgXAotICAgIFJWVEVTVF9JT19BU1NFUlRfREZQUl9FUShkZXN0cmVnLCB0MiwgdDEsIGEyLCBhMSwgY29ycmVjdHZhbCkgXAotICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAotICAgIC5iYWxpZ24gMjsgXAotICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCi0gICAgICAuZHdvcmQgY29ycmVjdHZhbDsgXAotICAgIC5wb3BzZWN0aW9uOyBcCi0gICAgc3RvcmVfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCi0gICAgICAuZmlsbCAxLCA4LCAtMTsgXAotICAgIC5wb3BzZWN0aW9uCi0KLSNkZWZpbmUgVEVTVF9DQVNFX0ZQRF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCi0gICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAotICAgIGZsZCByZWcsIDAoYTApOyBcCi0gICAgbHcgdDEsIDgoYTApOyBcCi0gICAgY29kZTsgXAotICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKLSAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKLSAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKLSAgICAuYmFsaWduIDQ7IFwKLSAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAotICAgICAgLmRvdWJsZSB2YWw7IFwKLSAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKLSAgICAucG9wc2VjdGlvbgotCi0jZGVmaW5lIFRFU1RfQ0FTRV9GUERfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKLSAgICBsYSAgYTAsIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCi0gICAgZmxkIHJlZzEsIDAoYTApOyBcCi0gICAgZmxkIHJlZzIsIDgoYTApOyBcCi0gICAgZmxkIHJlZzMsIDE2KGEwKTsgXAotICAgIGNvZGU7IFwKLSAgICBmc2QgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAotICAgIGx3IHQxLCAyNChhMCk7IFwKLSAgICBsdyB0MiwgMjgoYTApOyBcCi0gICAgbGEgYTAsIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAotICAgIGZzZCBkZXN0cmVnLCAwKGEwKTsgXAotICAgIGx3IGExLCAwKGEwKTsgXAotICAgIGx3IGEyLCA0KGEwKTsgXAotICAgIFJWVEVTVF9JT19BU1NFUlRfREZQUl9FUShkZXN0cmVnLCB0MiwgdDEsIGEyLCBhMSwgY29ycmVjdHZhbCkgXAotICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAotICAgIC5iYWxpZ24gMTY7IFwKLSAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAotICAgICAgLmRvdWJsZSB2YWwxOyBcCi0gICAgICAuZG91YmxlIHZhbDI7IFwKLSAgICAgIC5kb3VibGUgdmFsMzsgXAotICAgICAgLmR3b3JkIGNvcnJlY3R2YWw7IFwKLSAgICAucG9wc2VjdGlvbjsgXAotICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAotICAgIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAotICAgICAgLmZpbGwgMSwgOCwgLTE7IFwKLSAgICAucG9wc2VjdGlvbgotCi0vL1Rlc3RzIGZvciBhIGluc3RydWN0aW9ucyB3aXRoIHJlZ2lzdGVyLXJlZ2lzdGVyIG9wZXJhbmQKLSNkZWZpbmUgVEVTVF9SUl9PUChpbnN0LCBkZXN0cmVnLCByZWcxLCByZWcyLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0KSBcCi0gICAgVEVTVF9DQVNFKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCi0gICAgICBsaSAgcmVnMSwgTUFTS19YTEVOKHZhbDEpOyBcCi0gICAgICBsaSAgcmVnMiwgTUFTS19YTEVOKHZhbDIpOyBcCi0gICAgICBpbnN0IGRlc3RyZWcsIHJlZzEsIHJlZzI7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9SUl9TUkMxKCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQpIFwKLSAgICBURVNUX0NBU0UoIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgIGxpIGRlc3RyZWcsIE1BU0tfWExFTih2YWwxKTsgXAotICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsMik7IFwKLSAgICAgIGluc3QgZGVzdHJlZywgZGVzdHJlZywgcmVnOyBcCi0gICAgKQotCi0jZGVmaW5lIFRFU1RfUlJfU1JDMiggaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0KSBcCi0gICAgVEVTVF9DQVNFKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCi0gICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwxKTsgXAotICAgICAgbGkgZGVzdHJlZywgTUFTS19YTEVOKHZhbDIpOyBcCi0gICAgICBpbnN0IGRlc3RyZWcsIHJlZywgZGVzdHJlZzsgXAotICAgICkKLQotI2RlZmluZSBURVNUX1JSX1NSQzEyKCBpbnN0LCBkZXN0cmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKLSAgICBURVNUX0NBU0UoIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgIGxpIGRlc3RyZWcsIE1BU0tfWExFTih2YWwxKTsgXAotICAgICAgaW5zdCBkZXN0cmVnLCBkZXN0cmVnLCBkZXN0cmVnOyBcCi0gICAgKQotCi0jZGVmaW5lIFRFU1RfUlJfWkVSTzEoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCi0gICAgVEVTVF9DQVNFKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCi0gICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwpOyBcCi0gICAgICBpbnN0IGRlc3RyZWcsIHgwLCByZWc7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9SUl9aRVJPMiggaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKLSAgICBURVNUX0NBU0UoIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKLSAgICAgIGluc3QgZGVzdHJlZywgcmVnLCB4MDsgXAotICAgICkKLQotI2RlZmluZSBURVNUX1JSX1pFUk8xMiggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCkgXAotICAgIFRFU1RfQ0FTRSggZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAotICAgICAgaW5zdCBkZXN0cmVnLCB4MCwgeDA7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9SUl9aRVJPREVTVCggaW5zdCwgcmVnMSwgcmVnMiwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCkgXAotICAgIFRFU1RfQ0FTRSggeDAsIDAsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgIGxpIHJlZzEsIE1BU0tfWExFTih2YWwxKTsgXAotICAgICAgbGkgcmVnMiwgTUFTS19YTEVOKHZhbDIpOyBcCi0gICAgICBpbnN0IHgwLCByZWcxLCByZWcyOyBcCi0gICAgKQotCi0vL1Rlc3RzIGZvciBhIGluc3RydWN0aW9ucyB3aXRoIHJlZ2lzdGVyLWltbWVkaWF0ZSBvcGVyYW5kCi0jZGVmaW5lIFRFU1RfSU1NX09QKCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCi0gICAgVEVTVF9DQVNFICggZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAotICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsKTsgXAotICAgICAgaW5zdCBkZXN0cmVnLCByZWcsIFNFWFRfSU1NKGltbSk7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9JTU1fU1JDKCBpbnN0LCBkZXN0cmVnLCBjb3JyZWN0dmFsLCB2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAotICAgIFRFU1RfQ0FTRSAoIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgIGxpIGRlc3RyZWcsIE1BU0tfWExFTih2YWwpOyBcCi0gICAgICBpbnN0IGRlc3RyZWcsIGRlc3RyZWcsIFNFWFRfSU1NKGltbSk7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9JTU1fWkVST1NSQyggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCi0gICAgVEVTVF9DQVNFICggZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAotICAgICAgaW5zdCBkZXN0cmVnLCB4MCwgU0VYVF9JTU0oaW1tKTsgXAotICAgICkKLQotI2RlZmluZSBURVNUX0lNTV9aRVJPREVTVCggaW5zdCwgcmVnLCB2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAotICAgIFRFU1RfQ0FTRSAoIHgwLCAwLCBzd3JlZywgb2Zmc2V0LCBcCi0gICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwpOyBcCi0gICAgICBpbnN0IHgwLCByZWcsIFNFWFRfSU1NKGltbSk7IFwKLSAgICApCi0KLSNkZWZpbmUgVEVTVF9JTU1fT05FUkVHKCBpbnN0LCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKLSAgICBURVNUX0NBU0UgKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCi0gICAgICBpbnN0IGRlc3RyZWcsIFNFWFRfSU1NKGltbSk7IFwKLSAgICAgICkKLQotI2RlZmluZSBURVNUX0FVSVBDKGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAotICAgIFRFU1RfQ0FTRSAoIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgIDE6IFwKLSAgICAgIGluc3QgZGVzdHJlZywgU0VYVF9JTU0oaW1tKTsgXAotICAgICAgbGEgc3dyZWcsIDFiOyBcCi0gICAgICBzdWIgZGVzdHJlZywgZGVzdHJlZywgc3dyZWc7IFwKLSAgICAgICkKLQotLy9UZXN0cyBmb3IgYSBjb21wcmVzc2VkIGluc3RydWN0aW9uCi0jZGVmaW5lIFRFU1RfQ1JfT1AoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCkgXAotICAgIFRFU1RfQ0FTRSAoIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbDEpOyBcCi0gICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsMik7IFwKLSAgICAgIGluc3QgZGVzdHJlZywgcmVnOyBcCi0gICAgICApCi0KLSNkZWZpbmUgVEVTVF9DSV9PUCggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgdmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKLSAgICBURVNUX0NBU0UoIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgIGxpIGRlc3RyZWcsIE1BU0tfWExFTih2YWwpOyBcCi0gICAgICBpbnN0IGRlc3RyZWcsIGltbTsgXAotICAgICAgKQotCi0jZGVmaW5lIFRFU1RfQ0lfT1BfTk9SRUcoaW5zdCwgY29ycmVjdHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCi0gICAgVEVTVF9DQVNFICh4MCwgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAotICAgICAgaW5zdCBpbW07IFwKLSAgICAgICkKLQotLy9UZXN0cyBmb3IgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zIC0gc2luZ2xlIHByZWNpc2lvbgotI2RlZmluZSBURVNUX0ZQX09QKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcxLCByZWcyLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0KSBcCi0gICAgICBURVNUX0NBU0VfRlAodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgICAgaW5zdCBkZXN0cmVnLCByZWcxLCByZWcyOyBcCi0gICAgICAgICkKLQotI2RlZmluZSBURVNUX0ZQX09ORVJFRyh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKLSAgICAgIFRFU1RfQ0FTRV9GUCh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBcCi0gICAgICAgIGluc3QgZGVzdHJlZywgcmVnOyBcCi0gICAgICAgICkKLQotI2RlZmluZSBURVNUX0ZQXzRSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzMsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHZhbDMsIHN3cmVnLCBvZmZzZXQpIFwKLSAgICAgIFRFU1RfQ0FTRV9GUF80UkVHKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcxLCByZWcyLCByZWczLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCB2YWwzLCBzd3JlZywgb2Zmc2V0LCBcCi0gICAgICAgIGluc3QgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMzsgXAotICAgICAgICApCi0KLSNkZWZpbmUgVEVTVF9GUF9JKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAotICAgICAgVEVTVF9DQVNFX0ZQX0kodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBcCi0gICAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKLSAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKLSAgICAgICAgKQotCi0jZGVmaW5lIFRFU1RfRlBfSTIodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCi0gICAgICBURVNUX0NBU0VfRlBfSTIodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBcCi0gICAgICAgIGluc3QgZGVzdHJlZywgcmVnOyBcCi0gICAgICAgICkKLQotLy9UZXN0cyBmb3IgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zIC0gZG91YmxlIHByZWNpc2lvbgotI2RlZmluZSBURVNUX0ZQRF9PUCh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCkgXAotICAgICAgVEVTVF9DQVNFX0ZQRCh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgXAotICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzEsIHJlZzI7IFwKLSAgICAgICAgKQotCi0jZGVmaW5lIFRFU1RfRlBEX09ORVJFRyh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKLSAgICAgIFRFU1RfQ0FTRV9GUEQodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAotICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAotICAgICAgICApCi0KLSNkZWZpbmUgVEVTVF9GUERfNFJFRyh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCkgXAotICAgICAgVEVTVF9DQVNFX0ZQRF80UkVHKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcxLCByZWcyLCByZWczLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCB2YWwzLCBzd3JlZywgb2Zmc2V0LCBcCi0gICAgICAgIGluc3QgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMzsgXAotICAgICAgICApCi0KLSNkZWZpbmUgVEVTVF9GUERfSSh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKLSAgICAgIFRFU1RfQ0FTRV9GUERfSSh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsKTsgXAotICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAotICAgICAgICApCi0KLSNkZWZpbmUgVEVTVF9GUERfSTIodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCi0gICAgICBURVNUX0NBU0VfRlBEX0kyKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAotICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAotICAgICAgICApCi0KLSNkZWZpbmUgVEVTVF9DQURESTE2U1AoY29ycmVjdHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCi0gICAgICBURVNUX0NBU0UoeDIsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgIGMuYWRkaTE2c3AgeDIsIGltbTsgXAotICAgICAgKQotCi0jZGVmaW5lIFRFU1RfQ0FEREk0U1BOKGRlc3RyZWcsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAotICAgICAgVEVTVF9DQVNFKGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgICAgYy5hZGRpNHNwbiBkZXN0cmVnLCB4MiwgU0VYVF9JTU0oaW1tKTsgXAotICAgICAgICApCi0KLSNkZWZpbmUgVEVTVF9DSkwoaW5zdCwgcmVnLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKLSAgICAgIGxpIHgxMCwgdmFsOyBcCi0gICAgICBsYSByZWcsIDFmOyBcCi0gICAgICBpbnN0IHJlZzsgXAotICAgICAgbGkgeDEwLCAweDEyM2FiOyBcCi0xOiBcCi0gICAgICBzdyB4MTAsIG9mZnNldChzd3JlZyk7IFwKLSAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgeDEwLCB2YWwpOyBcCi0KLSNkZWZpbmUgQUJTKHgpICgoeCA+PiAxMSkgXiB4KSAtICh4ID4+IDExKQotCi0jZGVmaW5lIFRFU1RfQ0ooaW5zdCwgcmVnLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKLSAgICAgIGxpIHJlZywgdmFsOyBcCi0gICAgICBpbnN0IDFmOyBcCi0gICAgICBsaSByZWcsIDB4MTIzYWI7IFwKLTE6IFwKLSAgICAgIHN3IHJlZywgb2Zmc2V0KHN3cmVnKTsgXAotICAgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCByZWcsIHZhbCk7IFwKLQotI2RlZmluZSBURVNUX0NMKGluc3QsIHJlZywgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCi0gICAgICBsYSByZWcsIHRlc3RfZGF0YTsgXAotICAgICAgaW5zdCByZWcsIGltbShyZWcpOyBcCi0gICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKLQotLy8gbHcgcmVnLCBpbW0oeDIpCi0vLyBjLmx3c3AgcmVnLCBpbW0oeDIpCi0jZGVmaW5lIFRFU1RfQ0xXU1AocmVnLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKLSAgICAgIGxhIHgyLCB0ZXN0X2RhdGE7IFwKLSAgICAgIGMubHdzcCByZWcsIGltbSh4Mik7IFwKLSAgICAgIHN3IHJlZywgb2Zmc2V0KHN3cmVnKTsgXAotCi0jZGVmaW5lIFRFU1RfQ1NXKHRlc3RfZGF0YSwgaW5zdCwgcmVnMSwgcmVnMiwgdmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKLSAgICAgIGxpIHJlZzEsIHZhbDsgXAotICAgICAgbGEgcmVnMiwgdGVzdF9kYXRhOyBcCi0gICAgICBpbnN0IHJlZzEsIGltbShyZWcyKTsgXAotICAgICAgbHcgcmVnMSwgaW1tKHJlZzIpOyBcCi0gICAgICBzdyByZWcxLCBvZmZzZXQoc3dyZWcpOyBcCi0gICAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIHJlZzEsIHZhbCk7IFwKLQotI2RlZmluZSBURVNUX0NTV1NQKHRlc3RfZGF0YSwgcmVnLCB2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAotICAgICAgbGEgeDIsIHRlc3RfZGF0YTsgXAotICAgICAgbGkgcmVnLCB2YWw7IFwKLSAgICAgIGMuc3dzcCByZWcsIGltbSh4Mik7IFwKLSAgICAgIGx3IHJlZywgaW1tKHgyKTsgXAotICAgICAgc3cgcmVnLCBvZmZzZXQoc3dyZWcpOyBcCi0gICAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIHJlZywgdmFsKTsgXAotCi0jZGVmaW5lIFRFU1RfQ0JFUVoocmVnLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKLSAgICAgIGxpIHJlZywgdmFsOyBcCi0gICAgICBjLnN1YiByZWcsIHJlZzsgXAotICAgICAgYy5iZXF6IHJlZywgM2Y7IFwKLSAgICAgIGxpIHJlZywgMHgxMjNhYjsgXAotMzogXAotICAgICAgc3cgcmVnLCBvZmZzZXQoc3dyZWcpOyBcCi0gICAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIHJlZywgMHgwKTsgXAotCi0jZGVmaW5lIFRFU1RfQ0JORVoocmVnLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKLSAgICAgIGxpIHJlZywgdmFsOyBcCi0gICAgICBjLmJuZXogcmVnLCA0ZjsgXAotICAgICAgbGkgcmVnLCAweDA7IFwKLTQ6IFwKLSAgICAgIHN3IHJlZywgb2Zmc2V0KHN3cmVnKTsgXAotICAgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCByZWcsIHZhbCk7IFwKLQotI2RlZmluZSBURVNUX0ZNVlhTKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAotICAgICAgVEVTVF9DQVNFX0ZQX0ZNVlhTKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAotICAgICAgICBmbXYueC5zIGRlc3RyZWcsIHJlZzsgXAotICAgICAgICApCi0KLSNkZWZpbmUgVEVTVF9GTVZTWCh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKLSAgICAgIFRFU1RfQ0FTRV9GUF9GTVZTWCh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKLSAgICAgICAgZm12LnMueCBkZXN0cmVnLCByZWc7IFwKLSAgICAgICAgKQotCi0jZGVmaW5lIFNXU0lHKGEsYikKLQotCi0jaWYgX19yaXNjdl94bGVuID09IDY0Ci0jZGVmaW5lIFNBVFBfTU9ERSBTQVRQNjRfTU9ERQotI2Vsc2UKLSNkZWZpbmUgU0FUUF9NT0RFIFNBVFAzMl9NT0RFCi0jZW5kaWYKLQotI2RlZmluZSBTQVRQMzJfTU9ERSAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgU0FUUDMyX0FTSUQgICAgICAgICAweDdGQzAwMDAwCi0jZGVmaW5lIFNBVFAzMl9QUE4gICAgICAgICAgMHgwMDNGRkZGRgotI2RlZmluZSBTQVRQNjRfTU9ERSAweEYwMDAwMDAwMDAwMDAwMDAKLSNkZWZpbmUgU0FUUDY0X0FTSUQgMHgwRkZGRjAwMDAwMDAwMDAwCi0jZGVmaW5lIFNBVFA2NF9QUE4gIDB4MDAwMDBGRkZGRkZGRkZGRgotCi0jZGVmaW5lIFNBVFBfTU9ERV9PRkYgICAgICAgICAgICAgICAgMAotI2RlZmluZSBTQVRQX01PREVfU1YzMiAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgU0FUUF9NT0RFX1NWMzkgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFNBVFBfTU9ERV9TVjQ4ICAgICAgICAgICAgICAgOQotI2RlZmluZSBTQVRQX01PREVfU1Y1NyAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgU0FUUF9NT0RFX1NWNjQgICAgICAgICAgICAgIDExCi0KLSNkZWZpbmUgVEVTVF9GUF9PUDJfRDMyKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAotICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGRvdWJsZSByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAotICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjE7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQotCi0jZGVmaW5lIFRFU1RfQ0FTRV9EMzIoIHRlc3RudW0sIHRlc3RyZWcxLCB0ZXN0cmVnMiwgY29ycmVjdHZhbCwgY29kZS4uLiApIFwKLXRlc3RfICMjIHRlc3RudW06IFwKLSAgICBjb2RlOyBcCi0gICAgbGEgIHgzMSwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7IFwKLSAgICBsdyAgeDI5LCAwKHgzMSk7IFwKLSAgICBsdyAgeDMxLCA0KHgzMSk7IFwKLSAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAotICAgIGJuZSB0ZXN0cmVnMSwgeDI5LCBmYWlsO1wKLSAgICBibmUgdGVzdHJlZzIsIHgzMSwgZmFpbDtcCi0gICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCi0gICAgLmJhbGlnbiA4OyBcCi0gICAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAotICAgIC5kd29yZCBjb3JyZWN0dmFsOyBcCi0gICAgLnBvcHNlY3Rpb24KLQotI2RlZmluZSBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMywgY29kZS4uLiApIFwKLXRlc3RfICMjIHRlc3RudW06IFwKLSAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKLSAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCi0gIGZsZCBmMCwgMChhMCk7IFwKLSAgZmxkIGYxLCA4KGEwKTsgXAotICBmbGQgZjIsIDE2KGEwKTsgXAotICBsdyAgYTMsIDI0KGEwKTsgXAotICBsdyAgdDEsIDI4KGEwKTsgXAotICBjb2RlOyBcCi0gIGZzZmxhZ3MgYTEsIHgwOyBcCi0gIGxpIGEyLCBmbGFnczsgXAotICBibmUgYTAsIGEzLCBmYWlsOyBcCi0gIGJuZSB0MSwgdDIsIGZhaWw7IFwKLSAgYm5lIGExLCBhMiwgZmFpbDsgXAotICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKLSAgLmJhbGlnbiA4OyBcCi0gIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKLSAgLmRvdWJsZSB2YWwxOyBcCi0gIC5kb3VibGUgdmFsMjsgXAotICAuZG91YmxlIHZhbDM7IFwKLSAgLnJlc3VsdDsgXAotICAucG9wc2VjdGlvbgotCi0jZGVmaW5lIFRFU1RfRlBfT1AxX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSApIFwKLSAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAotICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMDsgZnNkIGYzLCAwKGEwKTsgbHcgdDIsIDQoYTApOyBsdyBhMCwgMChhMCkpCi0KLSNkZWZpbmUgVEVTVF9GQ0xBU1NfRDMyKHRlc3RudW0sIGNvcnJlY3QsIGlucHV0KSBcCi0gIFRFU1RfQ0FTRSh0ZXN0bnVtLCBhMCwgY29ycmVjdCwgXAotICAgICAgICAgICAgbGEgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKLSAgICAgICAgICAgIGZsZCBmYTAsIDAoYTApOyBcCi0gICAgICAgICAgICBmY2xhc3MuZCBhMCwgZmEwKSBcCi0gICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCi0gICAgLmJhbGlnbiA4OyBcCi0gICAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAotICAgIC5kd29yZCBpbnB1dDsgXAotICAgIC5wb3BzZWN0aW9uCi0KLSNkZWZpbmUgVEVTVF9GUF9DTVBfT1BfRDMyKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAotICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGR3b3JkIHJlc3VsdCwgdmFsMSwgdmFsMiwgMC4wLCBcCi0gICAgICAgICAgICAgICAgICAgIGluc3QgYTAsIGYwLCBmMTsgbGkgdDIsIDApCi0KLSNkZWZpbmUgVEVTVF9JTlRfRlBfT1BfRDMyKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEgKSBcCi10ZXN0XyAjIyB0ZXN0bnVtOiBcCi0gIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCi0gIGxhICBhMCwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7XAotICBsdyAgYTMsIDAoYTApOyBcCi0gIGx3ICBhNCwgNChhMCk7IFwKLSAgbGkgIGExLCB2YWwxOyBcCi0gIGluc3QgZjAsIGExOyBcCi0gIFwKLSAgZnNkIGYwLCAwKGEwKTsgXAotICBsdyBhMSwgNChhMCk7IFwKLSAgbHcgYTAsIDAoYTApOyBcCi0gIFwKLSAgZnNmbGFncyB4MDsgXAotICBibmUgYTAsIGEzLCBmYWlsOyBcCi0gIGJuZSBhMSwgYTQsIGZhaWw7IFwKLSAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCi0gIC5iYWxpZ24gODsgXAotICB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhOiBcCi0gIC5kb3VibGUgcmVzdWx0OyBcCi0gIC5wb3BzZWN0aW9uCi0KLSNkZWZpbmUgVEVTVF9GQ1ZUX1NfRDMyKCB0ZXN0bnVtLCByZXN1bHQsIHZhbDEgKSBcCi0gIFRFU1RfRlBfT1BfRDMyX0lOVEVSTkFMKCB0ZXN0bnVtLCAwLCBkb3VibGUgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAotICAgICAgICAgICAgICAgICAgICBmY3Z0LnMuZCBmMywgZjA7IGZjdnQuZC5zIGYzLCBmMzsgZnNkIGYzLCAwKGEwKTsgbHcgdDIsIDQoYTApOyBsdyBhMCwgMChhMCkpCi0KLSNkZWZpbmUgVEVTVF9GUF9PUDNfRDMyKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzICkgXAotICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGRvdWJsZSByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIFwKLSAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxLCBmMjsgZnNkIGYzLCAwKGEwKTsgbHcgdDIsIDQoYTApOyBsdyBhMCwgMChhMCkpCi0KLSNkZWZpbmUgVEVTVF9GUF9PUDFfRDMyX0RXT1JEX1JFU1VMVCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSApIFwKLSAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCi0gICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwOyBmc2QgZjMsIDAoYTApOyBsdyB0MiwgNChhMCk7IGx3IGEwLCAwKGEwKSkKLQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9yaXNjdl9pc2EvTWFrZWZpbGUgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvcmlzY3ZfaXNhL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTUzNjQyLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9yaXNjdl9pc2EvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0KLWluY2x1ZGUgcnYzMl90ZXN0cy5pbmMKLQotQVJDSF90bXAgOj0gaW1mCi0KLWlmbmVxICgsJChmaW5kc3RyaW5nIGMsJChBUkNIX2xvd2VyY2FzZSkpKQotCUFSQ0hfdG1wIDo9ICQoQVJDSF90bXApYwotZW5kaWYKLQotb3ZlcnJpZGUgQVJDSCA6PSAkKEFSQ0hfdG1wKQotCi1zcmNfZGlyIDo9ICQoQ1VSRElSKQotb2JqX2RpciAgIDo9ICQoYmxkX2RpcikvcmlzY3Zfb2JqcwotdGVzdF9saXN0IDo9ICQocGF0c3Vic3QgJS5TLCAlLCAkKG5vdGRpciAkKHJ2MzJfaXNhX3Rlc3RzKSkpCi1vYmpzICAgICAgOj0gJChhZGRwcmVmaXggJChvYmpfZGlyKS8sJCh0ZXN0X2xpc3Q6JT0lLm8pKQotdGVzdF9lbGYgIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQodGVzdF9saXN0OiU9JS5lbGYpKQotdGVzdF9oZXggIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQodGVzdF9saXN0OiU9JS5oZXgpKQotdGVzdF9kdW1wIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQodGVzdF9saXN0OiU9JS5kdW1wKSkKLQotQ0ZMQUdTIDo9IC1JJChpbmNfZGlyKSAtSSQoc3JjX2RpcikgLURBU00gLVdhLC1tYXJjaD1ydjMyJChBUkNIKSAtbWFyY2g9cnYzMiQoQVJDSCkgLW1hYmk9aWxwMzJmIC1EX19yaXNjdl94bGVuPTMyCi1MREZMQUdTIDo9IC1zdGF0aWMgLWZ2aXNpYmlsaXR5PWhpZGRlbiAtbm9zdGRsaWIgLW5vc3RhcnRmaWxlcyAtVCQoaW5jX2RpcikvbGluay5sZCAtbWFyY2g9cnYzMiQoQVJDSCkgLW1hYmk9aWxwMzJmCi1SSVNDVl9URVNUUyA6PSAkKHNyY19kaXIpLy4uLy4uLy4uL2RlcGVuZGVuY2llcy9yaXNjdi10ZXN0cy8KLQotVlBBVEggKz0gJChzcmNfZGlyKSAkKGJsZF9kaXIpICQob2JqX2RpcikgJChSSVNDVl9URVNUUykKLQotZGVmYXVsdDogbG9nX3JlcXVlc3RlZF90Z3QgY2hlY2tfcmlzY3ZfdGVzdHMgJCh0ZXN0X2VsZikgJCh0ZXN0X2hleCkgJCh0ZXN0X2R1bXApCi0KLWRlZmluZSBjb21waWxlX3RlbXBsYXRlCi0kKG9ial9kaXIpLyQkKGJhc2VuYW1lICQobm90ZGlyICQoU1JDKSkpLm86ICQkKFNSQykgfCAkKG9ial9kaXIpCi0JJChSSVNDVl9HQ0MpIC1jICQkPCAkKENGTEFHUykgLW8gJCRACi0gZW5kZWYKLQotJChmb3JlYWNoIFNSQywkKHJ2MzJfaXNhX3Rlc3RzKSwgJChldmFsICQoY29tcGlsZV90ZW1wbGF0ZSkpKQotCi1sb2dfcmVxdWVzdGVkX3RndDoKLQkkKGZvcmVhY2ggdGVzdF9uYW1lLCAkKHRlc3RfbGlzdCksICQoZXZhbCAkKHNoZWxsIGVjaG8gJCh0ZXN0X25hbWUpLmhleCA+PiAkKGJsZF9kaXIpL3Rlc3RfaW5mbykpKQotCi0kKG9ial9kaXIpIDoKLQlta2RpciAtcCAkKG9ial9kaXIpCi0KLSQoYmxkX2RpcikvJS5lbGY6ICQob2JqX2RpcikvJS5vIHwgJChvYmpfZGlyKQotCSQoUklTQ1ZfR0NDKSAkXiAkKExERkxBR1MpIC1vICRACi0KLSQoYmxkX2RpcikvJS5oZXg6ICQoYmxkX2RpcikvJS5lbGYKLQkkKFJJU0NWX1JPTV9PQkpDT1BZKSAkXiAkQAotCSQoUklTQ1ZfUkFNX09CSkNPUFkpICReICRALnJhbQotCSNhc3NpZ24gMHgwMDQ4XzB4eHggIHRvIDB4MDAwMF8weHh4IHRvIG1hcCB0byBUQ00gTWVtb3J5Ci0Jc2VkIC1pICdzL0AwMDQ4MC9AMDAwMDAvZycgJEAucmFtCi0KLSQoYmxkX2RpcikvJS5kdW1wOiAkKGJsZF9kaXIpLyUuZWxmCi0JJChSSVNDVl9PQkpEVU1QKSAkXiA+ICRACi0KLWNsZWFuOgotCSQoUk0pICQodGVzdF9lbGYpICQodGVzdF9oZXgpICQodGVzdF9kdW1wKSAkKG9ianMpCi0JJChSTSkgLVIgJChvYmpfZGlyKQotCi0KLS5QSE9OWTogY2hlY2tfcmlzY3ZfdGVzdHMKLQotcmlzY3ZfdGVzdHNfZGlyICAgIDo9ICQoaWYgJChSSVNDVl9URVNUUyksICQoUklTQ1ZfVEVTVFMpLCAuL3VuZGVmaW5lZCkKLXJpc2N2X3Rlc3RzX2NvbW1pdCA6PSA1ZjhhNDkxOGM2NDgyZTY1YzY3YTJiN2RlY2Q1YzJhZjNlM2ZlMGU1Ci0jIyBjb21taXQgaGFzaCByZWFkZWQgZnJvbSBsb2NhbCBjb3B5IG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9yaXNjdi9yaXNjdi10ZXN0cwotdG1wX2NvbW1pdCA9ICQoc2hlbGwgY2QgJChyaXNjdl90ZXN0c19kaXIpIDI+L2Rldi9udWxsICYmIGdpdCBsb2cgLTEgfCBncmVwICJjb21taXQiIHwgY3V0IC1mMiAtZCAnICcpCi1pc19jb21taXRfZ29vZCA9ICQoaWYgJChzdWJzdCAkKHJpc2N2X3Rlc3RzX2NvbW1pdCksLCQodG1wX2NvbW1pdCkpLGZhbHNlLHRydWUpCi0KLSMgQ29sb3IKLVJFRD1cMDMzWzA7MzFtCi1OQz1cMDMzWzBtCi0KLWNoZWNrX3Jpc2N2X3Rlc3RzIDogJChyaXNjdl90ZXN0c19kaXIpCi0JQGlmIFsgISAtZCAkKHJpc2N2X3Rlc3RzX2RpcikgXTsgdGhlbiBcCi0JCWVjaG8gLWUgIiQoUkVEKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiAmJlwKLQkJZWNobyAiICAgRXJyb3IhIEVudmlyb25tZW50IHZhcmlhYmxlIFJJU0NWX1RFU1RTPSckKHJpc2N2X3Rlc3RzX2RpciknICIgJiZcCi0JCWVjaG8gIiAgICAgIGRpcmVjdG9yeSBub3QgZXhpc3QhIiAmJiBcCi0JCWVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiIDsgXAotCWZpCi1pZm5lcSAoJChpc19jb21taXRfZ29vZCksdHJ1ZSkKLQlAZWNobyAtZSAiJChSRUQpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCi0JQGVjaG8gIiAgIFdhcm5pbmchIEV4ZWN1dGlvbiBvZiB0ZXN0IGNvZGUgaXMgbm90IGd1YXJhbnRlZWQgIgotCUBlY2hvICIgICB3aGlsZSB1c2luZyB0aGUgY3VycmVudCBjb21taXQgb2YgcmVwb3NpdG9yeWxvY2F0ZWQgYXQgOiAkKHJpc2N2X3Rlc3RzX2RpcikgLiIKLQlAZWNobyAiICAgIgotCUBlY2hvICIgICBSaXNjdi10ZXN0cyByZXBvc2l0b3J5IG11c3QgcG9pbnQgdG8gY29tbWl0ICQocmlzY3ZfdGVzdHNfY29tbWl0KSEiCi0JQGVjaG8gLWUgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiCi1lbmRpZgotCi0kKHJpc2N2X3Rlc3RzX2RpcikgOi4KLWlmbmRlZiBSSVNDVl9URVNUUwotCUBlY2hvIC1lICIkKFJFRCk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKLQlAZWNobyAiICAgIEVycm9yISBFbnZpcm9ubWVudCB2YXJpYWJsZSBSSVNDVl9URVNUUyBub3Qgc2V0ISIKLQlAZWNobyAiICAgIFlvdSBtdXN0IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUklTQ1ZfVEVTVFMiCi0JQGVjaG8gIiAgICBUaGUgdmFyaWFibGUgc2hvdWxkIHBvaW50IHRvIHRoZSBsb2NhbCBjb3B5IG9mIHRoZSIKLQlAZWNobyAiICAgICAgcmVwb3NpdG9yeSBodHRwczovL2dpdGh1Yi5jb20vcmlzY3YvcmlzY3YtdGVzdHMiCi0JQGVjaG8gIiAgICAgIHdpdGggdGhlIGNvbW1pdCAkKHJpc2N2X3Rlc3RzX2NvbW1pdCkiCi0JQGVjaG8gLWUgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiCi0JZXhpdCAxCi1lbmRpZgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL3Jpc2N2X2lzYS9yaXNjdl90ZXN0LmggYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvcmlzY3ZfaXNhL3Jpc2N2X3Rlc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI5Y2UwZC4uMDAwMDAwMAotLS0gYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvcmlzY3ZfaXNhL3Jpc2N2X3Rlc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfX1JJU0NWX19URVNUX19ICi0jZGVmaW5lIF9fUklTQ1ZfX1RFU1RfX0gKLQotI2luY2x1ZGUgInJpc2N2X21hY3Jvcy5oIiAKLQotI2VuZGlmIC8vICNpZm5kZWYgX19SSVNDVl9fVEVTVF9fSApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL3Jpc2N2X2lzYS9ydjMyX3Rlc3RzLmluYyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9yaXNjdl9pc2EvcnYzMl90ZXN0cy5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyZTUwMTIuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL3Jpc2N2X2lzYS9ydjMyX3Rlc3RzLmluYworKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLQotQVJDSF9sb3dlcmNhc2UgPSAkKHNoZWxsIGVjaG8gJChBUkNIKSB8IHRyIEEtWiBhLXopCi0KLQotcnYzMl9pc2FfdGVzdHMgKz0gaXNhL3J2MzJ1aS9hZGQuUyAgICAgIFwKLSAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9hZGRpLlMgICAgICAgICBcCi0gICAgICAgICAgICAgIGlzYS9ydjMydWkvYW5kLlMgICAgICAgICAgXAotICAgICAgICAgICAgICBpc2EvcnYzMnVpL2FuZGkuUyAgICAgICAgIFwKLSAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9hdWlwYy5TICAgICAgICBcCi0gICAgICAgICAgICAgIGlzYS9ydjMydWkvYmVxLlMgICAgICAgICAgXAotICAgICAgICAgICAgICBpc2EvcnYzMnVpL2JnZS5TICAgICAgICAgIFwKLSAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9iZ2V1LlMgICAgICAgICBcCi0gICAgICAgICAgICAgIGlzYS9ydjMydWkvYmx0LlMgICAgICAgICAgXAotICAgICAgICAgICAgICBpc2EvcnYzMnVpL2JsdHUuUyAgICAgICAgIFwKLSAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9ibmUuUyAgICAgICAgICBcCi0gICAgICAgICAgICAgIGlzYS9ydjMybWkvY3NyLlMgICAgICAgICAgXAotICAgICAgICAgICAgICBpc2EvcnYzMnVpL2ZlbmNlX2kuUyAgICAgIFwKLSAgICAgICAgICAgICAgaXNhL3J2MzJtaS9pbGxlZ2FsLlMgICAgICBcCi0gICAgICAgICAgICAgIGlzYS9ydjMydWkvamFsLlMgICAgICAgICAgXAotICAgICAgICAgICAgICBpc2EvcnYzMnVpL2phbHIuUyAgICAgICAgIFwKLSAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9sYi5TICAgICAgICAgICBcCi0gICAgICAgICAgICAgIGlzYS9ydjMydWkvbGJ1LlMgICAgICAgICAgXAotICAgICAgICAgICAgICBpc2EvcnYzMnVpL2xoLlMgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9saHUuUyAgICAgICAgICBcCi0gICAgICAgICAgICAgIGlzYS9ydjMydWkvbHVpLlMgICAgICAgICAgXAotICAgICAgICAgICAgICBpc2EvcnYzMnVpL2x3LlMgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgaXNhL3J2MzJtaS9tYV9hZGRyLlMgICAgICBcCi0gICAgICAgICAgICAgIGlzYS9ydjMybWkvbWFfZmV0Y2guUyAgICAgXAotICAgICAgICAgICAgICBpc2EvcnYzMm1pL21jc3IuUyAgICAgICAgIFwKLSAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9vci5TICAgICAgICAgICBcCi0gICAgICAgICAgICAgIGlzYS9ydjMydWkvb3JpLlMgICAgICAgICAgXAotICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NiLlMgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgaXNhL3J2MzJtaS9zYnJlYWsuUyAgICAgICBcCi0gICAgICAgICAgICAgIGlzYS9ydjMybWkvc2NhbGwuUyAgICAgICAgXAotICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NoLlMgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgaXNhL3J2MzJtaS9zaGFtdC5TICAgICAgICBcCi0gICAgICAgICAgICAgIGlzYS9ydjMydWkvc2ltcGxlLlMgICAgICAgXAotICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NsbC5TICAgICAgICAgIFwKLSAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zbGxpLlMgICAgICAgICBcCi0gICAgICAgICAgICAgIGlzYS9ydjMydWkvc2x0LlMgICAgICAgICAgXAotICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NsdGkuUyAgICAgICAgIFwKLSAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zbHRpdS5TICAgICAgICBcCi0gICAgICAgICAgICAgIGlzYS9ydjMydWkvc2x0dS5TICAgICAgICAgXAotICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NyYS5TICAgICAgICAgIFwKLSAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zcmFpLlMgICAgICAgICBcCi0gICAgICAgICAgICAgIGlzYS9ydjMydWkvc3JsLlMgICAgICAgICAgXAotICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NybGkuUyAgICAgICAgIFwKLSAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zdWIuUyAgICAgICAgICBcCi0gICAgICAgICAgICAgIGlzYS9ydjMydWkvc3cuUyAgICAgICAgICAgXAotICAgICAgICAgICAgICBpc2EvcnYzMnVpL3hvci5TICAgICAgICAgIFwKLSAgICAgICAgICAgICAgaXNhL3J2MzJ1aS94b3JpLlMKLQotaWZuZXEgKCwkKGZpbmRzdHJpbmcgbSwkKEFSQ0hfbG93ZXJjYXNlKSkpCi1ydjMyX2lzYV90ZXN0cyArPSBpc2EvcnYzMnVtL2Rpdi5TICAgICAgXAotICAgICAgICAgICAgICBpc2EvcnYzMnVtL2RpdnUuUyAgICAgICAgIFwKLSAgICAgICAgICAgICAgaXNhL3J2MzJ1bS9tdWwuUyAgICAgICAgICBcCi0gICAgICAgICAgICAgIGlzYS9ydjMydW0vbXVsaC5TICAgICAgICAgXAotICAgICAgICAgICAgICBpc2EvcnYzMnVtL211bGhzdS5TICAgICAgIFwKLSAgICAgICAgICAgICAgaXNhL3J2MzJ1bS9tdWxodS5TICAgICAgICBcCi0gICAgICAgICAgICAgIGlzYS9ydjMydW0vcmVtLlMgICAgICAgICAgXAotICAgICAgICAgICAgICBpc2EvcnYzMnVtL3JlbXUuUwotZW5kaWYgIyMgaWZlcSAobSwkKGZpbmRzdHJpbmcgbSwkKEFSQ0hfbG93ZXJjYXNlKSkpCi0KLWlmbmVxICgsJChmaW5kc3RyaW5nIGMsJChBUkNIX2xvd2VyY2FzZSkpKQotcnYzMl9pc2FfdGVzdHMgKz0gaXNhL3J2MzJ1Yy9ydmMuUwotZW5kaWYgIyMgaWZlcSAobSwkKGZpbmRzdHJpbmcgYywkKEFSQ0hfbG93ZXJjYXNlKSkpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL3Jpc2N2X2lzYS90ZXN0X21hY3Jvcy5oIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL3Jpc2N2X2lzYS90ZXN0X21hY3Jvcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDM5MThkLi4wMDAwMDAwCi0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9yaXNjdl9pc2EvdGVzdF9tYWNyb3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotI2lmbmRlZiBfX1RFU1RfX01BQ1JPU19fSAotI2RlZmluZSBfX1RFU1RfX01BQ1JPU19fSAotCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdXNlcl9wcm9qX2V4YW1wbGUudiBiL3Zlcmlsb2cvcnRsL3VzZXJfcHJval9leGFtcGxlLnYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzM2UwMzIuLjAwMDAwMDAKLS0tIGEvdmVyaWxvZy9ydGwvdXNlcl9wcm9qX2V4YW1wbGUudgorKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKLQotYGRlZmF1bHRfbmV0dHlwZSBub25lCi0vKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogdXNlcl9wcm9qX2V4YW1wbGUKLSAqCi0gKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSAodHJpdmlhbGx5IHNpbXBsZSkgdXNlciBwcm9qZWN0LAotICogc2hvd2luZyBob3cgdGhlIHVzZXIgcHJvamVjdCBjYW4gY29ubmVjdCB0byB0aGUgbG9naWMKLSAqIGFuYWx5emVyLCB0aGUgd2lzaGJvbmUgYnVzLCBhbmQgdGhlIEkvTyBwYWRzLgotICoKLSAqIFRoaXMgcHJvamVjdCBnZW5lcmF0ZXMgYW4gaW50ZWdlciBjb3VudCwgd2hpY2ggaXMgb3V0cHV0Ci0gKiBvbiB0aGUgdXNlciBhcmVhIEdQSU8gcGFkcyAoZGlnaXRhbCBvdXRwdXQgb25seSkuICBUaGUKLSAqIHdpc2hib25lIGNvbm5lY3Rpb24gYWxsb3dzIHRoZSBwcm9qZWN0IHRvIGJlIGNvbnRyb2xsZWQKLSAqIChzdGFydCBhbmQgc3RvcCkgZnJvbSB0aGUgbWFuYWdlbWVudCBTb0MgcHJvZ3JhbS4KLSAqCi0gKiBTZWUgdGhlIHRlc3RiZW5jaGVzIGluIGRpcmVjdG9yeSAibXByal9jb3VudGVyIiBmb3IgdGhlCi0gKiBleGFtcGxlIHByb2dyYW1zIHRoYXQgZHJpdmUgdGhpcyB1c2VyIHByb2plY3QuICBUaGUgdGhyZWUKLSAqIHRlc3RiZW5jaGVzIGFyZSAiaW9fcG9ydHMiLCAibGFfdGVzdDEiLCBhbmQgImxhX3Rlc3QyIi4KLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi1tb2R1bGUgdXNlcl9wcm9qX2V4YW1wbGUgIygKLSAgICBwYXJhbWV0ZXIgQklUUyA9IDMyCi0pKAotYGlmZGVmIFVTRV9QT1dFUl9QSU5TCi0gICAgaW5vdXQgdmRkYTEsCS8vIFVzZXIgYXJlYSAxIDMuM1Ygc3VwcGx5Ci0gICAgaW5vdXQgdmRkYTIsCS8vIFVzZXIgYXJlYSAyIDMuM1Ygc3VwcGx5Ci0gICAgaW5vdXQgdnNzYTEsCS8vIFVzZXIgYXJlYSAxIGFuYWxvZyBncm91bmQKLSAgICBpbm91dCB2c3NhMiwJLy8gVXNlciBhcmVhIDIgYW5hbG9nIGdyb3VuZAotICAgIGlub3V0IHZjY2QxLAkvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQotICAgIGlub3V0IHZjY2QyLAkvLyBVc2VyIGFyZWEgMiAxLjh2IHN1cHBseQotICAgIGlub3V0IHZzc2QxLAkvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAotICAgIGlub3V0IHZzc2QyLAkvLyBVc2VyIGFyZWEgMiBkaWdpdGFsIGdyb3VuZAotYGVuZGlmCi0KLSAgICAvLyBXaXNoYm9uZSBTbGF2ZSBwb3J0cyAoV0IgTUkgQSkKLSAgICBpbnB1dCB3Yl9jbGtfaSwKLSAgICBpbnB1dCB3Yl9yc3RfaSwKLSAgICBpbnB1dCB3YnNfc3RiX2ksCi0gICAgaW5wdXQgd2JzX2N5Y19pLAotICAgIGlucHV0IHdic193ZV9pLAotICAgIGlucHV0IFszOjBdIHdic19zZWxfaSwKLSAgICBpbnB1dCBbMzE6MF0gd2JzX2RhdF9pLAotICAgIGlucHV0IFszMTowXSB3YnNfYWRyX2ksCi0gICAgb3V0cHV0IHdic19hY2tfbywKLSAgICBvdXRwdXQgWzMxOjBdIHdic19kYXRfbywKLQotICAgIC8vIExvZ2ljIEFuYWx5emVyIFNpZ25hbHMKLSAgICBpbnB1dCAgWzEyNzowXSBsYV9kYXRhX2luLAotICAgIG91dHB1dCBbMTI3OjBdIGxhX2RhdGFfb3V0LAotICAgIGlucHV0ICBbMTI3OjBdIGxhX29lbmIsCi0KLSAgICAvLyBJT3MKLSAgICBpbnB1dCAgW2BNUFJKX0lPX1BBRFMtMTowXSBpb19pbiwKLSAgICBvdXRwdXQgW2BNUFJKX0lPX1BBRFMtMTowXSBpb19vdXQsCi0gICAgb3V0cHV0IFtgTVBSSl9JT19QQURTLTE6MF0gaW9fb2ViLAotCi0gICAgLy8gSVJRCi0gICAgb3V0cHV0IFsyOjBdIGlycQotKTsKLSAgICB3aXJlIGNsazsKLSAgICB3aXJlIHJzdDsKLQotICAgIHdpcmUgW2BNUFJKX0lPX1BBRFMtMTowXSBpb19pbjsKLSAgICB3aXJlIFtgTVBSSl9JT19QQURTLTE6MF0gaW9fb3V0OwotICAgIHdpcmUgW2BNUFJKX0lPX1BBRFMtMTowXSBpb19vZWI7Ci0KLSAgICB3aXJlIFszMTowXSByZGF0YTsgCi0gICAgd2lyZSBbMzE6MF0gd2RhdGE7Ci0gICAgd2lyZSBbQklUUy0xOjBdIGNvdW50OwotCi0gICAgd2lyZSB2YWxpZDsKLSAgICB3aXJlIFszOjBdIHdzdHJiOwotICAgIHdpcmUgWzMxOjBdIGxhX3dyaXRlOwotCi0gICAgLy8gV0IgTUkgQQotICAgIGFzc2lnbiB2YWxpZCA9IHdic19jeWNfaSAmJiB3YnNfc3RiX2k7IAotICAgIGFzc2lnbiB3c3RyYiA9IHdic19zZWxfaSAmIHs0e3dic193ZV9pfX07Ci0gICAgYXNzaWduIHdic19kYXRfbyA9IHJkYXRhOwotICAgIGFzc2lnbiB3ZGF0YSA9IHdic19kYXRfaTsKLQotICAgIC8vIElPCi0gICAgYXNzaWduIGlvX291dCA9IGNvdW50OwotICAgIGFzc2lnbiBpb19vZWIgPSB7KGBNUFJKX0lPX1BBRFMtMSl7cnN0fX07Ci0KLSAgICAvLyBJUlEKLSAgICBhc3NpZ24gaXJxID0gMydiMDAwOwkvLyBVbnVzZWQKLQotICAgIC8vIExBCi0gICAgYXNzaWduIGxhX2RhdGFfb3V0ID0ge3soMTI3LUJJVFMpezEnYjB9fSwgY291bnR9OwotICAgIC8vIEFzc3VtaW5nIExBIHByb2JlcyBbNjM6MzJdIGFyZSBmb3IgY29udHJvbGxpbmcgdGhlIGNvdW50IHJlZ2lzdGVyICAKLSAgICBhc3NpZ24gbGFfd3JpdGUgPSB+bGFfb2VuYls2MzozMl0gJiB+e0JJVFN7dmFsaWR9fTsKLSAgICAvLyBBc3N1bWluZyBMQSBwcm9iZXMgWzY1OjY0XSBhcmUgZm9yIGNvbnRyb2xsaW5nIHRoZSBjb3VudCBjbGsgJiByZXNldCAgCi0gICAgYXNzaWduIGNsayA9ICh+bGFfb2VuYls2NF0pID8gbGFfZGF0YV9pbls2NF06IHdiX2Nsa19pOwotICAgIGFzc2lnbiByc3QgPSAofmxhX29lbmJbNjVdKSA/IGxhX2RhdGFfaW5bNjVdOiB3Yl9yc3RfaTsKLQotICAgIGNvdW50ZXIgIygKLSAgICAgICAgLkJJVFMoQklUUykKLSAgICApIGNvdW50ZXIoCi0gICAgICAgIC5jbGsoY2xrKSwKLSAgICAgICAgLnJlc2V0KHJzdCksCi0gICAgICAgIC5yZWFkeSh3YnNfYWNrX28pLAotICAgICAgICAudmFsaWQodmFsaWQpLAotICAgICAgICAucmRhdGEocmRhdGEpLAotICAgICAgICAud2RhdGEod2JzX2RhdF9pKSwKLSAgICAgICAgLndzdHJiKHdzdHJiKSwKLSAgICAgICAgLmxhX3dyaXRlKGxhX3dyaXRlKSwKLSAgICAgICAgLmxhX2lucHV0KGxhX2RhdGFfaW5bNjM6MzJdKSwKLSAgICAgICAgLmNvdW50KGNvdW50KQotICAgICk7Ci0KLWVuZG1vZHVsZQotCi1tb2R1bGUgY291bnRlciAjKAotICAgIHBhcmFtZXRlciBCSVRTID0gMzIKLSkoCi0gICAgaW5wdXQgY2xrLAotICAgIGlucHV0IHJlc2V0LAotICAgIGlucHV0IHZhbGlkLAotICAgIGlucHV0IFszOjBdIHdzdHJiLAotICAgIGlucHV0IFtCSVRTLTE6MF0gd2RhdGEsCi0gICAgaW5wdXQgW0JJVFMtMTowXSBsYV93cml0ZSwKLSAgICBpbnB1dCBbQklUUy0xOjBdIGxhX2lucHV0LAotICAgIG91dHB1dCByZWFkeSwKLSAgICBvdXRwdXQgW0JJVFMtMTowXSByZGF0YSwKLSAgICBvdXRwdXQgW0JJVFMtMTowXSBjb3VudAotKTsKLSAgICByZWcgcmVhZHk7Ci0gICAgcmVnIFtCSVRTLTE6MF0gY291bnQ7Ci0gICAgcmVnIFtCSVRTLTE6MF0gcmRhdGE7Ci0KLSAgICBhbHdheXMgQChwb3NlZGdlIGNsaykgYmVnaW4KLSAgICAgICAgaWYgKHJlc2V0KSBiZWdpbgotICAgICAgICAgICAgY291bnQgPD0gMDsKLSAgICAgICAgICAgIHJlYWR5IDw9IDA7Ci0gICAgICAgIGVuZCBlbHNlIGJlZ2luCi0gICAgICAgICAgICByZWFkeSA8PSAxJ2IwOwotICAgICAgICAgICAgaWYgKH58bGFfd3JpdGUpIGJlZ2luCi0gICAgICAgICAgICAgICAgY291bnQgPD0gY291bnQgKyAxOwotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBpZiAodmFsaWQgJiYgIXJlYWR5KSBiZWdpbgotICAgICAgICAgICAgICAgIHJlYWR5IDw9IDEnYjE7Ci0gICAgICAgICAgICAgICAgcmRhdGEgPD0gY291bnQ7Ci0gICAgICAgICAgICAgICAgaWYgKHdzdHJiWzBdKSBjb3VudFs3OjBdICAgPD0gd2RhdGFbNzowXTsKLSAgICAgICAgICAgICAgICBpZiAod3N0cmJbMV0pIGNvdW50WzE1OjhdICA8PSB3ZGF0YVsxNTo4XTsKLSAgICAgICAgICAgICAgICBpZiAod3N0cmJbMl0pIGNvdW50WzIzOjE2XSA8PSB3ZGF0YVsyMzoxNl07Ci0gICAgICAgICAgICAgICAgaWYgKHdzdHJiWzNdKSBjb3VudFszMToyNF0gPD0gd2RhdGFbMzE6MjRdOwotICAgICAgICAgICAgZW5kIGVsc2UgaWYgKHxsYV93cml0ZSkgYmVnaW4KLSAgICAgICAgICAgICAgICBjb3VudCA8PSBsYV93cml0ZSAmIGxhX2lucHV0OwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotICAgIGVuZAotCi1lbmRtb2R1bGUKLWBkZWZhdWx0X25ldHR5cGUgd2lyZQo=