ZGlmZiAtLWdpdCBhL0luYy9MZWdhY3kvc3RtMzJfaGFsX2xlZ2FjeS5oIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKaW5kZXggZTU3ZTgyMy4uNWFkZThlMSAxMDA2NDQKLS0tIGEvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKKysrIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKQEAgLTIzLDcgKzIzLDcgQEAKICNkZWZpbmUgU1RNMzJfSEFMX0xFR0FDWQogCiAjaWZkZWYgX19jcGx1c3BsdXMKLSBleHRlcm4gIkMiIHsKK2V4dGVybiAiQyIgewogI2VuZGlmCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0zOCw3ICszOCw2IEBACiAjZGVmaW5lIEFFU19DTEVBUkZMQUdfQ0NGICAgICAgICAgICAgICAgQ1JZUF9DTEVBUkZMQUdfQ0NGCiAjZGVmaW5lIEFFU19DTEVBUkZMQUdfUkRFUlIgICAgICAgICAgICAgQ1JZUF9DTEVBUkZMQUdfUkRFUlIKICNkZWZpbmUgQUVTX0NMRUFSRkxBR19XUkVSUiAgICAgICAgICAgICBDUllQX0NMRUFSRkxBR19XUkVSUgotCiAvKioKICAgKiBAfQogICAqLwpAQCAtMzgzLDcgKzM4Miw2IEBACiAjZGVmaW5lIERBQ19UUklHR0VSX0xQMl9PVVQgICAgICAgICAgICAgICAgICAgICAgICBEQUNfVFJJR0dFUl9MUFRJTTJfT1VUCiAKICNlbmRpZiAvKiBTVE0zMkg3ICovCi0KIC8qKgogICAqIEB9CiAgICovCkBAIC02MDQsMTYgKzYwMiwxNiBAQAogI2VuZGlmIC8qIFNUTTMyTDAgfHwgU1RNMzJMNCB8fCBTVE0zMkY0IHx8IFNUTTMyRjIgfHwgU1RNMzJGNyB8fCBTVE0zMkc0IHx8IFNUTTMySDcqLwogCiAjaWYgZGVmaW5lZChTVE0zMkwxKQotICNkZWZpbmUgIEdQSU9fU1BFRURfVkVSWV9MT1cgICAgR1BJT19TUEVFRF9GUkVRX0xPVwotICNkZWZpbmUgIEdQSU9fU1BFRURfTE9XICAgICAgICAgR1BJT19TUEVFRF9GUkVRX01FRElVTQotICNkZWZpbmUgIEdQSU9fU1BFRURfTUVESVVNICAgICAgR1BJT19TUEVFRF9GUkVRX0hJR0gKLSAjZGVmaW5lICBHUElPX1NQRUVEX0hJR0ggICAgICAgIEdQSU9fU1BFRURfRlJFUV9WRVJZX0hJR0gKKyNkZWZpbmUgIEdQSU9fU1BFRURfVkVSWV9MT1cgICAgR1BJT19TUEVFRF9GUkVRX0xPVworI2RlZmluZSAgR1BJT19TUEVFRF9MT1cgICAgICAgICBHUElPX1NQRUVEX0ZSRVFfTUVESVVNCisjZGVmaW5lICBHUElPX1NQRUVEX01FRElVTSAgICAgIEdQSU9fU1BFRURfRlJFUV9ISUdICisjZGVmaW5lICBHUElPX1NQRUVEX0hJR0ggICAgICAgIEdQSU9fU1BFRURfRlJFUV9WRVJZX0hJR0gKICNlbmRpZiAvKiBTVE0zMkwxICovCiAKICNpZiBkZWZpbmVkKFNUTTMyRjApIHx8IGRlZmluZWQoU1RNMzJGMykgfHwgZGVmaW5lZChTVE0zMkYxKQotICNkZWZpbmUgIEdQSU9fU1BFRURfTE9XICAgIEdQSU9fU1BFRURfRlJFUV9MT1cKLSAjZGVmaW5lICBHUElPX1NQRUVEX01FRElVTSBHUElPX1NQRUVEX0ZSRVFfTUVESVVNCi0gI2RlZmluZSAgR1BJT19TUEVFRF9ISUdIICAgR1BJT19TUEVFRF9GUkVRX0hJR0gKKyNkZWZpbmUgIEdQSU9fU1BFRURfTE9XICAgIEdQSU9fU1BFRURfRlJFUV9MT1cKKyNkZWZpbmUgIEdQSU9fU1BFRURfTUVESVVNIEdQSU9fU1BFRURfRlJFUV9NRURJVU0KKyNkZWZpbmUgIEdQSU9fU1BFRURfSElHSCAgIEdQSU9fU1BFRURfRlJFUV9ISUdICiAjZW5kaWYgLyogU1RNMzJGMCB8fCBTVE0zMkYzIHx8IFNUTTMyRjEgKi8KIAogI2RlZmluZSBHUElPX0FGNl9ERlNETSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX0FGNl9ERlNETTEKQEAgLTc3NCw0OSArNzcyLDYgQEAKICNkZWZpbmUgSFJUSU1fRVZFTlRTUkNfMyAgICAgICAgICAgICAgKEhSVElNX0VFQ1IxX0VFMVNSQ18xKQogI2RlZmluZSBIUlRJTV9FVkVOVFNSQ180ICAgICAgICAgICAgICAoSFJUSU1fRUVDUjFfRUUxU1JDXzEgfCBIUlRJTV9FRUNSMV9FRTFTUkNfMCkKIAotLyoqIEBicmllZiBDb25zdGFudHMgZGVmaW5pbmcgdGhlIGV2ZW50cyB0aGF0IGNhbiBiZSBzZWxlY3RlZCB0byBjb25maWd1cmUgdGhlCi0gICogICAgICAgIHNldC9yZXNldCBjcm9zc2JhciBvZiBhIHRpbWVyIG91dHB1dAotICAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfMSAgICAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDEpCi0jZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FVl8yICAgICAgIChIUlRJTV9TRVQxUl9USU1FVk5UMikKLSNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzMgICAgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQzKQotI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNCAgICAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDQpCi0jZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FVl81ICAgICAgIChIUlRJTV9TRVQxUl9USU1FVk5UNSkKLSNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzYgICAgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQ2KQotI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNyAgICAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDcpCi0jZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FVl84ICAgICAgIChIUlRJTV9TRVQxUl9USU1FVk5UOCkKLSNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzkgICAgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQ5KQotCi0jZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVWXzEgICAgIChIUlRJTV9SU1QxUl9USU1FVk5UMSkKLSNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfMiAgICAgKEhSVElNX1JTVDFSX1RJTUVWTlQyKQotI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FVl8zICAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDMpCi0jZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVWXzQgICAgIChIUlRJTV9SU1QxUl9USU1FVk5UNCkKLSNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfNSAgICAgKEhSVElNX1JTVDFSX1RJTUVWTlQ1KQotI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FVl82ICAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDYpCi0jZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVWXzcgICAgIChIUlRJTV9SU1QxUl9USU1FVk5UNykKLSNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfOCAgICAgKEhSVElNX1JTVDFSX1RJTUVWTlQ4KQotI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FVl85ICAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDkpCi0KLS8qKiBAYnJpZWYgQ29uc3RhbnRzIGRlZmluaW5nIHRoZSBldmVudCBmaWx0ZXJpbmcgYXBwbGllZCB0byBleHRlcm5hbCBldmVudHMKLSAgKiAgICAgICAgYnkgYSB0aW1lcgotICAqLwotI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9OT05FICAgICAgICAgICAgICgweDAwMDAwMDAwVSkKLSNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfQkxBTktJTkdDTVAxICAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8wKQotI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9CTEFOS0lOR0NNUDIgICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzEpCi0jZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX0JMQU5LSU5HQ01QMyAgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMSB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMCkKLSNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfQkxBTktJTkdDTVA0ICAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8yKQotI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9CTEFOS0lOR0ZMVFIxICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzIgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzApCi0jZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX0JMQU5LSU5HRkxUUjIgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMiB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMSkKLSNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfQkxBTktJTkdGTFRSMyAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8yIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8xIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8wKQotI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9CTEFOS0lOR0ZMVFI0ICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzMpCi0jZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX0JMQU5LSU5HRkxUUjUgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMyB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMCkKLSNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfQkxBTktJTkdGTFRSNiAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8zIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8xKQotI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9CTEFOS0lOR0ZMVFI3ICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzMgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzEgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzApCi0jZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX0JMQU5LSU5HRkxUUjggICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMyB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMikKLSNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfV0lORE9XSU5HQ01QMiAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8zIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8yIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8wKQotI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9XSU5ET1dJTkdDTVAzICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzMgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzIgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzEpCi0jZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX1dJTkRPV0lOR1RJTSAgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMyB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMiB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMSB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMCkKLQogLyoqIEBicmllZiBDb25zdGFudHMgZGVmaW5pbmcgdGhlIERMTCBjYWxpYnJhdGlvbiBwZXJpb2RzIChpbiBtaWNybyBzZWNvbmRzKQogICAqLwogI2RlZmluZSBIUlRJTV9DQUxJQlJBVElPTlJBVEVfNzMwMCAgICAgICAgICAgICAweDAwMDAwMDAwVQpAQCAtODk2LDcgKzg1MSw2IEBACiAjZGVmaW5lIExQVElNX1RSSUdTQU1QTEVUSU1FXzJUUkFOU0lUSU9OICAgICAgICBMUFRJTV9UUklHU0FNUExFVElNRV8yVFJBTlNJVElPTlMKICNkZWZpbmUgTFBUSU1fVFJJR1NBTVBMRVRJTUVfNFRSQU5TSVRJT04gICAgICAgIExQVElNX1RSSUdTQU1QTEVUSU1FXzRUUkFOU0lUSU9OUwogI2RlZmluZSBMUFRJTV9UUklHU0FNUExFVElNRV84VFJBTlNJVElPTiAgICAgICAgTFBUSU1fVFJJR1NBTVBMRVRJTUVfOFRSQU5TSVRJT05TCi0KIC8qKgogICAqIEB9CiAgICovCkBAIC05NjksNiArOTIzLDExIEBACiAjZGVmaW5lIEhBTF9PUEFNUF9NU1BfREVJTklUX0NCX0lEICAgICBIQUxfT1BBTVBfTVNQREVJTklUX0NCX0lECiAjZW5kaWYKIAorI2lmIGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMkw1KQorI2RlZmluZSBPUEFNUF9QT1dFUk1PREVfTk9STUFMICAgICAgICAgICAgICAgIE9QQU1QX1BPV0VSTU9ERV9OT1JNQUxQT1dFUgorI2VsaWYgZGVmaW5lZChTVE0zMkc0KQorI2RlZmluZSBPUEFNUF9QT1dFUk1PREVfTk9STUFMICAgICAgICAgICAgICAgIE9QQU1QX1BPV0VSTU9ERV9OT1JNQUxTUEVFRAorI2VuZGlmCiAKIC8qKgogICAqIEB9CkBAIC05ODAsMTUgKzkzOSwxNSBAQAogI2RlZmluZSBJMlNfU1RBTkRBUkRfUEhJTExJUFMgICAgICBJMlNfU1RBTkRBUkRfUEhJTElQUwogCiAjaWYgZGVmaW5lZChTVE0zMkg3KQotICAjZGVmaW5lIEkyU19JVF9UWEUgICAgICAgICAgICAgICBJMlNfSVRfVFhQCi0gICNkZWZpbmUgSTJTX0lUX1JYTkUgICAgICAgICAgICAgIEkyU19JVF9SWFAKKyNkZWZpbmUgSTJTX0lUX1RYRSAgICAgICAgICAgICAgIEkyU19JVF9UWFAKKyNkZWZpbmUgSTJTX0lUX1JYTkUgICAgICAgICAgICAgIEkyU19JVF9SWFAKIAotICAjZGVmaW5lIEkyU19GTEFHX1RYRSAgICAgICAgICAgICBJMlNfRkxBR19UWFAKLSAgI2RlZmluZSBJMlNfRkxBR19SWE5FICAgICAgICAgICAgSTJTX0ZMQUdfUlhQCisjZGVmaW5lIEkyU19GTEFHX1RYRSAgICAgICAgICAgICBJMlNfRkxBR19UWFAKKyNkZWZpbmUgSTJTX0ZMQUdfUlhORSAgICAgICAgICAgIEkyU19GTEFHX1JYUAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKFNUTTMyRjcpCi0gICNkZWZpbmUgSTJTX0NMT0NLX1NZU0NMSyAgICAgICAgICAgSTJTX0NMT0NLX1BMTAorI2RlZmluZSBJMlNfQ0xPQ0tfU1lTQ0xLICAgICAgICAgICBJMlNfQ0xPQ0tfUExMCiAjZW5kaWYKIC8qKgogICAqIEB9CkBAIC0xMDIzLDcgKzk4Miw3IEBACiAvKioKICAgKiBAfQogICAqLwotICAKKwogLyoqIEBkZWZncm91cCBIQUxfUlRDX0FsaWFzZWRfRGVmaW5lcyBIQUwgUlRDIEFsaWFzZWQgRGVmaW5lcyBtYWludGFpbmVkIGZvciBsZWdhY3kgcHVycG9zZQogICAqIEB7CiAgICovCkBAIC0xMTIzLDE2ICsxMDgyLDE2IEBACiAKICNpZiBkZWZpbmVkKFNUTTMySDcpCiAKLSAjZGVmaW5lIFNQSV9GTEFHX1RYRSAgICAgICAgICAgICAgICAgICAgU1BJX0ZMQUdfVFhQCi0gI2RlZmluZSBTUElfRkxBR19SWE5FICAgICAgICAgICAgICAgICAgIFNQSV9GTEFHX1JYUAorI2RlZmluZSBTUElfRkxBR19UWEUgICAgICAgICAgICAgICAgICAgIFNQSV9GTEFHX1RYUAorI2RlZmluZSBTUElfRkxBR19SWE5FICAgICAgICAgICAgICAgICAgIFNQSV9GTEFHX1JYUAogCi0gI2RlZmluZSBTUElfSVRfVFhFICAgICAgICAgICAgICAgICAgICAgIFNQSV9JVF9UWFAKLSAjZGVmaW5lIFNQSV9JVF9SWE5FICAgICAgICAgICAgICAgICAgICAgU1BJX0lUX1JYUAorI2RlZmluZSBTUElfSVRfVFhFICAgICAgICAgICAgICAgICAgICAgIFNQSV9JVF9UWFAKKyNkZWZpbmUgU1BJX0lUX1JYTkUgICAgICAgICAgICAgICAgICAgICBTUElfSVRfUlhQCiAKLSAjZGVmaW5lIFNQSV9GUkxWTF9FTVBUWSAgICAgICAgICAgICAgICAgU1BJX1JYX0ZJRk9fMFBBQ0tFVAotICNkZWZpbmUgU1BJX0ZSTFZMX1FVQVJURVJfRlVMTCAgICAgICAgICBTUElfUlhfRklGT18xUEFDS0VUCi0gI2RlZmluZSBTUElfRlJMVkxfSEFMRl9GVUxMICAgICAgICAgICAgIFNQSV9SWF9GSUZPXzJQQUNLRVQKLSAjZGVmaW5lIFNQSV9GUkxWTF9GVUxMICAgICAgICAgICAgICAgICAgU1BJX1JYX0ZJRk9fM1BBQ0tFVAorI2RlZmluZSBTUElfRlJMVkxfRU1QVFkgICAgICAgICAgICAgICAgIFNQSV9SWF9GSUZPXzBQQUNLRVQKKyNkZWZpbmUgU1BJX0ZSTFZMX1FVQVJURVJfRlVMTCAgICAgICAgICBTUElfUlhfRklGT18xUEFDS0VUCisjZGVmaW5lIFNQSV9GUkxWTF9IQUxGX0ZVTEwgICAgICAgICAgICAgU1BJX1JYX0ZJRk9fMlBBQ0tFVAorI2RlZmluZSBTUElfRlJMVkxfRlVMTCAgICAgICAgICAgICAgICAgIFNQSV9SWF9GSUZPXzNQQUNLRVQKIAogI2VuZGlmIC8qIFNUTTMySDcgKi8KIApAQCAtMTQ1OSw3ICsxNDE4LDcgQEAKICNkZWZpbmUgSEFTSF9ITUFDS2V5VHlwZV9TaG9ydEtleSAgSEFTSF9ITUFDX0tFWVRZUEVfU0hPUlRLRVkKICNkZWZpbmUgSEFTSF9ITUFDS2V5VHlwZV9Mb25nS2V5ICAgSEFTSF9ITUFDX0tFWVRZUEVfTE9OR0tFWQogCi0jaWYgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMySDcpCisjaWYgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJGMikgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJINykKIAogI2RlZmluZSBIQUxfSEFTSF9NRDVfQWNjdW11bGF0ZSAgICAgICAgICAgICAgICBIQUxfSEFTSF9NRDVfQWNjbWx0CiAjZGVmaW5lIEhBTF9IQVNIX01ENV9BY2N1bXVsYXRlX0VuZCAgICAgICAgICAgIEhBTF9IQVNIX01ENV9BY2NtbHRfRW5kCkBAIC0xNDgxLDcgKzE0NDAsNyBAQAogI2RlZmluZSBIQUxfSEFTSEV4X1NIQTI1Nl9BY2N1bXVsYXRlX0lUICAgICAgICBIQUxfSEFTSEV4X1NIQTI1Nl9BY2NtbHRfSVQKICNkZWZpbmUgSEFMX0hBU0hFeF9TSEEyNTZfQWNjdW11bGF0ZV9FbmRfSVQgICAgSEFMX0hBU0hFeF9TSEEyNTZfQWNjbWx0X0VuZF9JVAogCi0jZW5kaWYgIC8qIFNUTTMyTDQgfHwgU1RNMzJMNSB8fCBTVE0zMkY0IHx8IFNUTTMyRjcgfHwgU1RNMzJINyAqLworI2VuZGlmICAvKiBTVE0zMkw0IHx8IFNUTTMyTDUgfHwgU1RNMzJGMiB8fCBTVE0zMkY0IHx8IFNUTTMyRjcgfHwgU1RNMzJINyAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTE0OTUsNyArMTQ1NCw4IEBACiAjZGVmaW5lIEhBTF9EaXNhYmxlREJHU3RvcE1vZGUgSEFMX0RCR01DVV9EaXNhYmxlREJHU3RvcE1vZGUKICNkZWZpbmUgSEFMX0VuYWJsZURCR1N0YW5kYnlNb2RlIEhBTF9EQkdNQ1VfRW5hYmxlREJHU3RhbmRieU1vZGUKICNkZWZpbmUgSEFMX0Rpc2FibGVEQkdTdGFuZGJ5TW9kZSBIQUxfREJHTUNVX0Rpc2FibGVEQkdTdGFuZGJ5TW9kZQotI2RlZmluZSBIQUxfREJHX0xvd1Bvd2VyQ29uZmlnKFBlcmlwaCwgY21kKSAoKChjbWQpPT1FTkFCTEUpPyBIQUxfREJHTUNVX0RCR19FbmFibGVMb3dQb3dlckNvbmZpZyhQZXJpcGgpIDogSEFMX0RCR01DVV9EQkdfRGlzYWJsZUxvd1Bvd2VyQ29uZmlnKFBlcmlwaCkpCisjZGVmaW5lIEhBTF9EQkdfTG93UG93ZXJDb25maWcoUGVyaXBoLCBjbWQpICgoKGNtZFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPT1FTkFCTEUpPyBIQUxfREJHTUNVX0RCR19FbmFibGVMb3dQb3dlckNvbmZpZyhQZXJpcGgpIDogSEFMX0RCR01DVV9EQkdfRGlzYWJsZUxvd1Bvd2VyQ29uZmlnKFBlcmlwaCkpCiAjZGVmaW5lIEhBTF9WUkVGSU5UX091dHB1dFNlbGVjdCAgSEFMX1NZU0NGR19WUkVGSU5UX091dHB1dFNlbGVjdAogI2RlZmluZSBIQUxfTG9ja19DbWQoY21kKSAoKChjbWQpPT1FTkFCTEUpID8gSEFMX1NZU0NGR19FbmFibGVfTG9ja19WUkVGSU5UKCkgOiBIQUxfU1lTQ0ZHX0Rpc2FibGVfTG9ja19WUkVGSU5UKCkpCiAjaWYgZGVmaW5lZChTVE0zMkwwKQpAQCAtMTUwMyw3ICsxNDYzLDggQEAKICNkZWZpbmUgSEFMX1ZSRUZJTlRfQ21kKGNtZCkgKCgoY21kKT09RU5BQkxFKT8gSEFMX1NZU0NGR19FbmFibGVWUkVGSU5UKCkgOiBIQUxfU1lTQ0ZHX0Rpc2FibGVWUkVGSU5UKCkpCiAjZW5kaWYKICNkZWZpbmUgSEFMX0FEQ19FbmFibGVCdWZmZXJfQ21kKGNtZCkgICgoKGNtZCk9PUVOQUJMRSkgPyBIQUxfQURDRXhfRW5hYmxlVlJFRklOVCgpIDogSEFMX0FEQ0V4X0Rpc2FibGVWUkVGSU5UKCkpCi0jZGVmaW5lIEhBTF9BRENfRW5hYmxlQnVmZmVyU2Vuc29yX0NtZChjbWQpICgoKGNtZCk9PUVOQUJMRSkgPyAgSEFMX0FEQ0V4X0VuYWJsZVZSRUZJTlRUZW1wU2Vuc29yKCkgOiBIQUxfQURDRXhfRGlzYWJsZVZSRUZJTlRUZW1wU2Vuc29yKCkpCisjZGVmaW5lIEhBTF9BRENfRW5hYmxlQnVmZmVyU2Vuc29yX0NtZChjbWQpICgoKGNtZFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPT1FTkFCTEUpID8gIEhBTF9BRENFeF9FbmFibGVWUkVGSU5UVGVtcFNlbnNvcigpIDogSEFMX0FEQ0V4X0Rpc2FibGVWUkVGSU5UVGVtcFNlbnNvcigpKQogI2lmIGRlZmluZWQoU1RNMzJIN0EzeHgpIHx8IGRlZmluZWQoU1RNMzJIN0IzeHgpIHx8IGRlZmluZWQoU1RNMzJIN0IweHgpIHx8IGRlZmluZWQoU1RNMzJIN0EzeHhRKSB8fCBkZWZpbmVkKFNUTTMySDdCM3h4USkgfHwgZGVmaW5lZChTVE0zMkg3QjB4eFEpCiAjZGVmaW5lIEhBTF9FbmFibGVTUkRvbWFpbkRCR1N0b3BNb2RlICAgICAgSEFMX0VuYWJsZURvbWFpbjNEQkdTdG9wTW9kZQogI2RlZmluZSBIQUxfRGlzYWJsZVNSRG9tYWluREJHU3RvcE1vZGUgICAgIEhBTF9EaXNhYmxlRG9tYWluM0RCR1N0b3BNb2RlCkBAIC0xNTI2LDkgKzE0ODcsOSBAQAogI2RlZmluZSBIQUxfREFUQV9FRVBST01FeF9FcmFzZSAgICBIQUxfRkxBU0hFeF9EQVRBRUVQUk9NX0VyYXNlCiAjZGVmaW5lIEhBTF9EQVRBX0VFUFJPTUV4X1Byb2dyYW0gIEhBTF9GTEFTSEV4X0RBVEFFRVBST01fUHJvZ3JhbQogCi0gLyoqCisvKioKICAgKiBAfQotICAqLworICovCiAKIC8qKiBAZGVmZ3JvdXAgSEFMX0kyQ19BbGlhc2VkX0Z1bmN0aW9ucyBIQUwgSTJDIEFsaWFzZWQgRnVuY3Rpb25zIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlCiAgICogQHsKQEAgLTE1MzgsNyArMTQ5OSw4IEBACiAjZGVmaW5lIEhBTF9GTVBJMkNFeF9BbmFsb2dGaWx0ZXJfQ29uZmlnICAgICAgSEFMX0ZNUEkyQ0V4X0NvbmZpZ0FuYWxvZ0ZpbHRlcgogI2RlZmluZSBIQUxfRk1QSTJDRXhfRGlnaXRhbEZpbHRlcl9Db25maWcgICAgIEhBTF9GTVBJMkNFeF9Db25maWdEaWdpdGFsRmlsdGVyCiAKLSNkZWZpbmUgSEFMX0kyQ0Zhc3RNb2RlUGx1c0NvbmZpZyhTWVNDRkdfSTJDRmFzdE1vZGVQbHVzLCBjbWQpICgoKGNtZCk9PUVOQUJMRSk/IEhBTF9JMkNFeF9FbmFibGVGYXN0TW9kZVBsdXMoU1lTQ0ZHX0kyQ0Zhc3RNb2RlUGx1cyk6IEhBTF9JMkNFeF9EaXNhYmxlRmFzdE1vZGVQbHVzKFNZU0NGR19JMkNGYXN0TW9kZVBsdXMpKQorI2RlZmluZSBIQUxfSTJDRmFzdE1vZGVQbHVzQ29uZmlnKFNZU0NGR19JMkNGYXN0TW9kZVBsdXMsIGNtZCkgKCgoY21kXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPT1FTkFCTEUpPyBIQUxfSTJDRXhfRW5hYmxlRmFzdE1vZGVQbHVzKFNZU0NGR19JMkNGYXN0TW9kZVBsdXMpOiBIQUxfSTJDRXhfRGlzYWJsZUZhc3RNb2RlUGx1cyhTWVNDRkdfSTJDRmFzdE1vZGVQbHVzKSkKIAogI2lmIGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMldCKSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJGMCkgfHwgZGVmaW5lZChTVE0zMkYxKSB8fCBkZWZpbmVkKFNUTTMyRjIpIHx8IGRlZmluZWQoU1RNMzJGMykgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJMMCkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJHNCkgfHwgZGVmaW5lZChTVE0zMkwxKQogI2RlZmluZSBIQUxfSTJDX01hc3Rlcl9TZXF1ZW50aWFsX1RyYW5zbWl0X0lUICBIQUxfSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfSVQKQEAgLTE1NjMsOSArMTUyNSw5IEBACiAjZGVmaW5lIEhBTF9GTVBJMkNfU2xhdmVfU2VxdWVudGlhbF9UcmFuc21pdF9ETUEgIEhBTF9GTVBJMkNfU2xhdmVfU2VxX1RyYW5zbWl0X0RNQQogI2RlZmluZSBIQUxfRk1QSTJDX1NsYXZlX1NlcXVlbnRpYWxfUmVjZWl2ZV9ETUEgICBIQUxfRk1QSTJDX1NsYXZlX1NlcV9SZWNlaXZlX0RNQQogI2VuZGlmIC8qIFNUTTMyRjQgKi8KLSAvKioKKy8qKgogICAqIEB9Ci0gICovCisgKi8KIAogLyoqIEBkZWZncm91cCBIQUxfUFdSX0FsaWFzZWQgSEFMIFBXUiBBbGlhc2VkIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlCiAgICogQHsKQEAgLTE2MjAsOSArMTU4Miw5IEBACiAKICNkZWZpbmUgUFdSX01PREVfRVZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBXUl9QVkRfTU9ERV9OT1JNQUwKIAotIC8qKgorLyoqCiAgICogQH0KLSAgKi8KKyAqLwogCiAvKiogQGRlZmdyb3VwIEhBTF9TTUJVU19BbGlhc2VkX0Z1bmN0aW9ucyBIQUwgU01CVVMgQWxpYXNlZCBGdW5jdGlvbnMgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UKICAgKiBAewpAQCAtMTg3MSwxNSArMTgzMywxNSBAQAogI2RlZmluZSBfX0hBTF9GUkVFWkVfUlRDX0RCR01DVSBfX0hBTF9EQkdNQ1VfRlJFRVpFX1JUQwogI2RlZmluZSBfX0hBTF9VTkZSRUVaRV9SVENfREJHTUNVIF9fSEFMX0RCR01DVV9VTkZSRUVaRV9SVEMKICNpZiBkZWZpbmVkKFNUTTMySDcpCi0gICNkZWZpbmUgX19IQUxfRlJFRVpFX1dXREdfREJHTUNVIF9fSEFMX0RCR01DVV9GUkVFWkVfV1dERzEKLSAgI2RlZmluZSBfX0hBTF9VTkZSRUVaRV9XV0RHX0RCR01DVSBfX0hBTF9EQkdNQ1VfVW5GcmVlemVfV1dERzEKLSAgI2RlZmluZSBfX0hBTF9GUkVFWkVfSVdER19EQkdNQ1UgX19IQUxfREJHTUNVX0ZSRUVaRV9JV0RHMQotICAjZGVmaW5lIF9fSEFMX1VORlJFRVpFX0lXREdfREJHTUNVIF9fSEFMX0RCR01DVV9VbkZyZWV6ZV9JV0RHMQorI2RlZmluZSBfX0hBTF9GUkVFWkVfV1dER19EQkdNQ1UgX19IQUxfREJHTUNVX0ZSRUVaRV9XV0RHMQorI2RlZmluZSBfX0hBTF9VTkZSRUVaRV9XV0RHX0RCR01DVSBfX0hBTF9EQkdNQ1VfVW5GcmVlemVfV1dERzEKKyNkZWZpbmUgX19IQUxfRlJFRVpFX0lXREdfREJHTUNVIF9fSEFMX0RCR01DVV9GUkVFWkVfSVdERzEKKyNkZWZpbmUgX19IQUxfVU5GUkVFWkVfSVdER19EQkdNQ1UgX19IQUxfREJHTUNVX1VuRnJlZXplX0lXREcxCiAjZWxzZQotICAjZGVmaW5lIF9fSEFMX0ZSRUVaRV9XV0RHX0RCR01DVSBfX0hBTF9EQkdNQ1VfRlJFRVpFX1dXREcKLSAgI2RlZmluZSBfX0hBTF9VTkZSRUVaRV9XV0RHX0RCR01DVSBfX0hBTF9EQkdNQ1VfVU5GUkVFWkVfV1dERwotICAjZGVmaW5lIF9fSEFMX0ZSRUVaRV9JV0RHX0RCR01DVSBfX0hBTF9EQkdNQ1VfRlJFRVpFX0lXREcKLSAgI2RlZmluZSBfX0hBTF9VTkZSRUVaRV9JV0RHX0RCR01DVSBfX0hBTF9EQkdNQ1VfVU5GUkVFWkVfSVdERworI2RlZmluZSBfX0hBTF9GUkVFWkVfV1dER19EQkdNQ1UgX19IQUxfREJHTUNVX0ZSRUVaRV9XV0RHCisjZGVmaW5lIF9fSEFMX1VORlJFRVpFX1dXREdfREJHTUNVIF9fSEFMX0RCR01DVV9VTkZSRUVaRV9XV0RHCisjZGVmaW5lIF9fSEFMX0ZSRUVaRV9JV0RHX0RCR01DVSBfX0hBTF9EQkdNQ1VfRlJFRVpFX0lXREcKKyNkZWZpbmUgX19IQUxfVU5GUkVFWkVfSVdER19EQkdNQ1UgX19IQUxfREJHTUNVX1VORlJFRVpFX0lXREcKICNlbmRpZiAvKiBTVE0zMkg3ICovCiAjZGVmaW5lIF9fSEFMX0ZSRUVaRV9JMkMxX1RJTUVPVVRfREJHTUNVIF9fSEFMX0RCR01DVV9GUkVFWkVfSTJDMV9USU1FT1VUCiAjZGVmaW5lIF9fSEFMX1VORlJFRVpFX0kyQzFfVElNRU9VVF9EQkdNQ1UgX19IQUxfREJHTUNVX1VORlJFRVpFX0kyQzFfVElNRU9VVApAQCAtMjA5MCw4ICsyMDUyLDggQEAKICAgKi8KIAogI2RlZmluZSBJU19EQUNfV0FWRShXQVZFKSAoKChXQVZFKSA9PSBEQUNfV0FWRV9OT05FKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICgoV0FWRSkgPT0gREFDX1dBVkVfTk9JU0UpfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAoKFdBVkUpID09IERBQ19XQVZFX1RSSUFOR0xFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoV0FWRSkgPT0gREFDX1dBVkVfTk9JU0UpfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChXQVZFKSA9PSBEQUNfV0FWRV9UUklBTkdMRSkpCiAKIC8qKgogICAqIEB9CkBAIC0yMTQ3LDcgKzIxMDksNyBAQAogI2RlZmluZSBJU19JMlNfSU5TVEFOQ0VfRVhUICAgICAgICAgICAgIElTX0kyU19BTExfSU5TVEFOQ0VfRVhUCiAKICNpZiBkZWZpbmVkKFNUTTMySDcpCi0gICNkZWZpbmUgX19IQUxfSTJTX0NMRUFSX0ZSRUZMQUcgICAgICAgX19IQUxfSTJTX0NMRUFSX1RJRlJFRkxBRworI2RlZmluZSBfX0hBTF9JMlNfQ0xFQVJfRlJFRkxBRyAgICAgICBfX0hBTF9JMlNfQ0xFQVJfVElGUkVGTEFHCiAjZW5kaWYKIAogLyoqCkBAIC0yMjg0LDcgKzIyNDYsOCBAQAogI2RlZmluZSBSQ0NfU3RvcFdha2VVcENsb2NrX0hTSSAgICAgUkNDX1NUT1BfV0FLRVVQQ0xPQ0tfSFNJCiAKICNkZWZpbmUgSEFMX1JDQ19DQ1NDYWxsYmFjayBIQUxfUkNDX0NTU0NhbGxiYWNrCi0jZGVmaW5lIEhBTF9SQzQ4X0VuYWJsZUJ1ZmZlcl9DbWQoY21kKSAoKChjbWQpPT1FTkFCTEUpID8gSEFMX1JDQ0V4X0VuYWJsZUhTSTQ4X1ZSRUZJTlQoKSA6IEhBTF9SQ0NFeF9EaXNhYmxlSFNJNDhfVlJFRklOVCgpKQorI2RlZmluZSBIQUxfUkM0OF9FbmFibGVCdWZmZXJfQ21kKGNtZCkgKCgoY21kXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPT1FTkFCTEUpID8gSEFMX1JDQ0V4X0VuYWJsZUhTSTQ4X1ZSRUZJTlQoKSA6IEhBTF9SQ0NFeF9EaXNhYmxlSFNJNDhfVlJFRklOVCgpKQogCiAjZGVmaW5lIF9fQURDX0NMS19ESVNBQkxFICAgICAgICAgIF9fSEFMX1JDQ19BRENfQ0xLX0RJU0FCTEUKICNkZWZpbmUgX19BRENfQ0xLX0VOQUJMRSAgICAgICAgICAgX19IQUxfUkNDX0FEQ19DTEtfRU5BQkxFCkBAIC0zMjUyLDcgKzMyMTUsNyBAQAogI2RlZmluZSBSQ0NfTUNPU09VUkNFX1BMTENMS19OT0RJViAgUkNDX01DTzFTT1VSQ0VfUExMQ0xLCiAjZGVmaW5lIFJDQ19NQ09TT1VSQ0VfUExMQ0xLX0RJVjIgICBSQ0NfTUNPMVNPVVJDRV9QTExDTEtfRElWMgogCi0jaWYgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyV0IpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkc0KSB8fCBkZWZpbmVkKFNUTTMyTDUpCisjaWYgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyV0IpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkc0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJXTCkKICNkZWZpbmUgUkNDX1JUQ0NMS1NPVVJDRV9OT19DTEsgICAgIFJDQ19SVENDTEtTT1VSQ0VfTk9ORQogI2Vsc2UKICNkZWZpbmUgUkNDX1JUQ0NMS1NPVVJDRV9OT05FICAgICAgIFJDQ19SVENDTEtTT1VSQ0VfTk9fQ0xLCkBAIC0zMzgxLDcgKzMzNDQsNyBAQAogLyoqIEBkZWZncm91cCBIQUxfUlRDX0FsaWFzZWRfTWFjcm9zIEhBTCBSVEMgQWxpYXNlZCBNYWNyb3MgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UKICAgKiBAewogICAqLwotI2lmIGRlZmluZWQgKFNUTTMyRzApIHx8IGRlZmluZWQgKFNUTTMyTDUpIHx8IGRlZmluZWQgKFNUTTMyTDQxMnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0MjJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFA1eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRRNXh4KSB8fCBkZWZpbmVkIChTVE0zMkc0KQorI2lmIGRlZmluZWQgKFNUTTMyRzApIHx8IGRlZmluZWQgKFNUTTMyTDUpIHx8IGRlZmluZWQgKFNUTTMyTDQxMnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0MjJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFA1eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRRNXh4KSB8fCBkZWZpbmVkIChTVE0zMkc0KSB8fCBkZWZpbmVkIChTVE0zMldMKQogI2Vsc2UKICNkZWZpbmUgX19IQUxfUlRDX0NMRUFSX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX0VYVElfQ0xFQVJfRkxBRwogI2VuZGlmCkBAIC0zNDAxLDE5ICszMzY0LDE5IEBACiAjZWxzZQogI2RlZmluZSBfX0hBTF9SVENfRVhUSV9DTEVBUl9GTEFHKF9fRVhUSV9MSU5FX18pICAoKChfX0VYVElfTElORV9fKSA9PSBSVENfRVhUSV9MSU5FX0FMQVJNX0VWRU5UKSA/IF9fSEFMX1JUQ19BTEFSTV9FWFRJX0NMRUFSX0ZMQUcoKSA6IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fRVhUSV9MSU5FX18pID09IFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpID8gX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfQ0xFQVJfRkxBRygpIDogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9DTEVBUl9GTEFHKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfQ0xFQVJfRkxBRygpKSkKICNkZWZpbmUgX19IQUxfUlRDX0VYVElfRU5BQkxFX0lUKF9fRVhUSV9MSU5FX18pICAgKCgoX19FWFRJX0xJTkVfXykgID09IFJUQ19FWFRJX0xJTkVfQUxBUk1fRVZFTlQpID8gX19IQUxfUlRDX0FMQVJNX0VYVElfRU5BQkxFX0lUKCkgOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fRVhUSV9MSU5FX18pID09IFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpID8gX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX0lUKCkgOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0VOQUJMRV9JVCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fRVhUSV9MSU5FX18pID09IFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpID8gX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX0lUKCkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9FTkFCTEVfSVQoKSkpCiAjZGVmaW5lIF9fSEFMX1JUQ19FWFRJX0RJU0FCTEVfSVQoX19FWFRJX0xJTkVfXykgICgoKF9fRVhUSV9MSU5FX18pID09IFJUQ19FWFRJX0xJTkVfQUxBUk1fRVZFTlQpID8gX19IQUxfUlRDX0FMQVJNX0VYVElfRElTQUJMRV9JVCgpIDogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0VYVElfTElORV9fKSA9PSBSVENfRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKSA/IF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0RJU0FCTEVfSVQoKSA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRElTQUJMRV9JVCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fRVhUSV9MSU5FX18pID09IFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpID8gX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRElTQUJMRV9JVCgpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRElTQUJMRV9JVCgpKSkKICNkZWZpbmUgX19IQUxfUlRDX0VYVElfR0VUX0ZMQUcoX19FWFRJX0xJTkVfXykgICAgKCgoX19FWFRJX0xJTkVfXykgPT0gUlRDX0VYVElfTElORV9BTEFSTV9FVkVOVCkgPyBfX0hBTF9SVENfQUxBUk1fRVhUSV9HRVRfRkxBRygpIDogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0VYVElfTElORV9fKSA9PSBSVENfRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKSA/IF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0dFVF9GTEFHKCkgOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0dFVF9GTEFHKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19FWFRJX0xJTkVfXykgPT0gUlRDX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkgPyBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9HRVRfRkxBRygpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfR0VUX0ZMQUcoKSkpCiAjZGVmaW5lIF9fSEFMX1JUQ19FWFRJX0dFTkVSQVRFX1NXSVQoX19FWFRJX0xJTkVfXykgICAoKChfX0VYVElfTElORV9fKSA9PSBSVENfRVhUSV9MSU5FX0FMQVJNX0VWRU5UKSA/IF9fSEFMX1JUQ19BTEFSTV9FWFRJX0dFTkVSQVRFX1NXSVQoKSA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fRVhUSV9MSU5FX18pID09IFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpID8gX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfR0VORVJBVEVfU1dJVCgpIDogIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0dFTkVSQVRFX1NXSVQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19FWFRJX0xJTkVfXykgPT0gUlRDX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkgPyBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9HRU5FUkFURV9TV0lUKCkgOiAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0dFTkVSQVRFX1NXSVQoKSkpCiAjZW5kaWYgICAvKiBTVE0zMkYxICovCiAKICNkZWZpbmUgSVNfQUxBUk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVNfUlRDX0FMQVJNCkBAIC0zNTk3LDYgKzM1NjAsMTMgQEAKICNkZWZpbmUgX19IQUxfVVNBUlRfR0VUQ0xPQ0tTT1VSQ0UgICAgICBVU0FSVF9HRVRDTE9DS1NPVVJDRQogI2RlZmluZSBfX1VTQVJUX0dFVENMT0NLU09VUkNFICAgICAgICAgIFVTQVJUX0dFVENMT0NLU09VUkNFCiAKKyNpZiBkZWZpbmVkKFNUTTMyRjApIHx8IGRlZmluZWQoU1RNMzJGMykgfHwgZGVmaW5lZChTVE0zMkY3KQorI2RlZmluZSBVU0FSVF9PVkVSU0FNUExJTkdfMTYgICAgICAgICAgICAgICAweDAwMDAwMDAwVQorI2RlZmluZSBVU0FSVF9PVkVSU0FNUExJTkdfOCAgICAgICAgICAgICAgICBVU0FSVF9DUjFfT1ZFUjgKKworI2RlZmluZSBJU19VU0FSVF9PVkVSU0FNUExJTkcoX19TQU1QTElOR19fKSAoKChfX1NBTVBMSU5HX18pID09IFVTQVJUX09WRVJTQU1QTElOR18xNikgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NBTVBMSU5HX18pID09IFVTQVJUX09WRVJTQU1QTElOR184KSkKKyNlbmRpZiAvKiBTVE0zMkYwIHx8IFNUTTMyRjMgfHwgU1RNMzJGNyAqLwogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMl9hc3NlcnRfdGVtcGxhdGUuaCBiL0luYy9zdG0zMl9hc3NlcnRfdGVtcGxhdGUuaAppbmRleCA2NzkzYjBlLi4xNWMxMmYxIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJfYXNzZXJ0X3RlbXBsYXRlLmgKKysrIGIvSW5jL3N0bTMyX2Fzc2VydF90ZW1wbGF0ZS5oCkBAIC0yNCw3ICsyNCw3IEBACiAjZGVmaW5lIFNUTTMyX0FTU0VSVF9ICiAKICNpZmRlZiBfX2NwbHVzcGx1cwotIGV4dGVybiAiQyIgeworZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAogLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw1eHhfaGFsLmggYi9JbmMvc3RtMzJsNXh4X2hhbC5oCmluZGV4IGE1ODc3NzIuLmI4MGEyOTggMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw1eHhfaGFsLmgKKysrIGIvSW5jL3N0bTMybDV4eF9oYWwuaApAQCAtMjMsNyArMjMsNyBAQAogI2RlZmluZSBTVE0zMkw1eHhfSEFMX0gKIAogI2lmZGVmIF9fY3BsdXNwbHVzCi0gZXh0ZXJuICJDIiB7CitleHRlcm4gIkMiIHsKICNlbmRpZgogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMjA0LDggKzIwNCw4IEBACiAjZGVmaW5lIFNZU0NGR19GQVNUTU9ERVBMVVNfUEI5ICAgICAgICBTWVNDRkdfQ0ZHUjFfSTJDX1BCOV9GTVAgIC8qITwgRW5hYmxlIEZhc3QtbW9kZSBQbHVzIG9uIFBCOSAqLwogCiAvKioKLSAqIEB9Ci0gKi8KKyAgKiBAfQorICAqLwogCiAvKiogQGRlZmdyb3VwIFNZU0NGR19Mb2NrX2l0ZW1zIFNZU0NGRyBMb2NrIGl0ZW1zCiAgICogQGJyaWVmIFNZU0NGRyBpdGVtcyB0byBzZXQgbG9jayBvbgpAQCAtMzk1LDcgKzM5NSw3IEBACiAgICovCiAjZGVmaW5lIF9fSEFMX1NZU0NGR19TUkFNMl9XUlBfMF8zMV9FTkFCTEUoX19TUkFNMldSUF9fKSAgICBkbyB7YXNzZXJ0X3BhcmFtKElTX1NZU0NGR19TUkFNMldSUF9QQUdFKChfX1NSQU0yV1JQX18pKSk7XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoU1lTQ0ZHLT5TV1BSLCAoX19TUkFNMldSUF9fKSk7XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfXdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9d2hpbGUoMCkKIAogLyoqIEBicmllZiAgU1JBTTIgcGFnZSAzMiB0byA2MyB3cml0ZSBwcm90ZWN0aW9uIGVuYWJsZSBtYWNybwogICAqIEBwYXJhbSAgX19TUkFNMldSUF9fICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB2YWx1ZXMgb2YgQHJlZiBTWVNDRkdfU1JBTTJXUlBfMzJfNjMKQEAgLTQwMyw3ICs0MDMsNyBAQAogICAqLwogI2RlZmluZSBfX0hBTF9TWVNDRkdfU1JBTTJfV1JQXzMyXzYzX0VOQUJMRShfX1NSQU0yV1JQX18pICAgZG8ge2Fzc2VydF9wYXJhbShJU19TWVNDRkdfU1JBTTJXUlBfUEFHRSgoX19TUkFNMldSUF9fKSkpO1wKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFNZU0NGRy0+U1dQUjIsIChfX1NSQU0yV1JQX18pKTtcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9d2hpbGUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH13aGlsZSgwKQogCiAvKiogQGJyaWVmICBTUkFNMiBwYWdlIHdyaXRlIHByb3RlY3Rpb24gdW5sb2NrIHByaW9yIHRvIGVyYXNlCiAgICogQG5vdGUgICBXcml0aW5nIGEgd3Jvbmcga2V5IHJlYWN0aXZhdGVzIHRoZSB3cml0ZSBwcm90ZWN0aW9uCkBAIC00MjIsMTEgKzQyMiwxMSBAQAogICAqLwogI2RlZmluZSBfX0hBTF9TWVNDRkdfRlBVX0lOVEVSUlVQVF9FTkFCTEUoX19JTlRFUlJVUFRfXykgICAgZG8ge2Fzc2VydF9wYXJhbShJU19TWVNDRkdfRlBVX0lOVEVSUlVQVCgoX19JTlRFUlJVUFRfXykpKTtcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChTWVNDRkctPkZQVUlNUiwgKF9fSU5URVJSVVBUX18pKTtcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9d2hpbGUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH13aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1NZU0NGR19GUFVfSU5URVJSVVBUX0RJU0FCTEUoX19JTlRFUlJVUFRfXykgICBkbyB7YXNzZXJ0X3BhcmFtKElTX1NZU0NGR19GUFVfSU5URVJSVVBUKChfX0lOVEVSUlVQVF9fKSkpO1wKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTEVBUl9CSVQoU1lTQ0ZHLT5GUFVJTVIsIChfX0lOVEVSUlVQVF9fKSk7XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfXdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9d2hpbGUoMCkKIAogLyoqIEBicmllZiAgU1lTQ0ZHIEJyZWFrIEVDQyBsb2NrLgogICAqICAgICAgICAgRW5hYmxlIGFuZCBsb2NrIHRoZSBjb25uZWN0aW9uIG9mIEZsYXNoIEVDQyBlcnJvciBjb25uZWN0aW9uIHRvIFRJTTEvOC8xNS8xNi8xNyBCcmVhayBpbnB1dC4KQEAgLTQ1OSw3ICs0NTksOCBAQAogICAqICAgICAgICAgICAgQGFyZyBAcmVmIFNZU0NGR19GTEFHX1NSQU0yX0JVU1kgU1JBTTIgRXJhc2UgT25nb2luZwogICAqIEByZXR2YWwgVGhlIG5ldyBzdGF0ZSBvZiBfX0ZMQUdfXyAoVFJVRSBvciBGQUxTRSkuCiAgICovCi0jZGVmaW5lIF9fSEFMX1NZU0NGR19HRVRfRkxBRyhfX0ZMQUdfXykgICAgICAoKCgoKChfX0ZMQUdfXykgPT0gU1lTQ0ZHX1NDU1JfU1JBTTJCU1kpPyBTWVNDRkctPlNDU1IgOiBTWVNDRkctPkNGR1IyKSAmIChfX0ZMQUdfXykpIT0gMFUpID8gMVUgOiAwVSkKKyNkZWZpbmUgX19IQUxfU1lTQ0ZHX0dFVF9GTEFHKF9fRkxBR19fKSAgICAgICgoKCgoKF9fRkxBR19fKSA9PSBTWVNDRkdfU0NTUl9TUkFNMkJTWSk/IFNZU0NGRy0+U0NTUiA6IFNZU0NGRy0+Q0ZHUjIpXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAoX19GTEFHX18pKSE9IDBVKSA/IDFVIDogMFUpCiAKIC8qKiBAYnJpZWYgIFNldCB0aGUgU1BGIGJpdCB0byBjbGVhciB0aGUgU1JBTSBQYXJpdHkgRXJyb3IgRmxhZy4KICAgKi8KQEAgLTU4Nyw3ICs1ODgsNyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RlSW5pdCh2b2lkKTsKIHZvaWQgICAgICAgICAgICAgIEhBTF9Nc3BJbml0KHZvaWQpOwogdm9pZCAgICAgICAgICAgICAgSEFMX01zcERlSW5pdCh2b2lkKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9Jbml0VGljayAodWludDMyX3QgVGlja1ByaW9yaXR5KTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9Jbml0VGljayh1aW50MzJfdCBUaWNrUHJpb3JpdHkpOwogCiAvKioKICAgKiBAfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDV4eF9oYWxfY29uZl90ZW1wbGF0ZS5oIGIvSW5jL3N0bTMybDV4eF9oYWxfY29uZl90ZW1wbGF0ZS5oCmluZGV4IGNkNDc2NzYuLjEwNGFiOWQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw1eHhfaGFsX2NvbmZfdGVtcGxhdGUuaAorKysgYi9JbmMvc3RtMzJsNXh4X2hhbF9jb25mX3RlbXBsYXRlLmgKQEAgLTI0LDcgKzI0LDcgQEAKICNkZWZpbmUgU1RNMzJMNXh4X0hBTF9DT05GX0gKIAogI2lmZGVmIF9fY3BsdXNwbHVzCi0gZXh0ZXJuICJDIiB7CitleHRlcm4gIkMiIHsKICNlbmRpZgogCiAvKiBFeHBvcnRlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtODYsMTEgKzg2LDExIEBACiAgICogICAgICAgICh3aGVuIEhTRSBpcyB1c2VkIGFzIHN5c3RlbSBjbG9jayBzb3VyY2UsIGRpcmVjdGx5IG9yIHRocm91Z2ggdGhlIFBMTCkuCiAgICovCiAjaWYgIWRlZmluZWQgIChIU0VfVkFMVUUpCi0gICNkZWZpbmUgSFNFX1ZBTFVFICAgICAgICAgIDE2MDAwMDAwVUwgLyohPCBWYWx1ZSBvZiB0aGUgRXh0ZXJuYWwgb3NjaWxsYXRvciBpbiBIeiAqLworI2RlZmluZSBIU0VfVkFMVUUgICAgICAgICAgMTYwMDAwMDBVTCAvKiE8IFZhbHVlIG9mIHRoZSBFeHRlcm5hbCBvc2NpbGxhdG9yIGluIEh6ICovCiAjZW5kaWYgLyogSFNFX1ZBTFVFICovCiAKICNpZiAhZGVmaW5lZCAgKEhTRV9TVEFSVFVQX1RJTUVPVVQpCi0gICNkZWZpbmUgSFNFX1NUQVJUVVBfVElNRU9VVCAxMDBVTCAgIC8qITwgVGltZSBvdXQgZm9yIEhTRSBzdGFydCB1cCwgaW4gbXMgKi8KKyNkZWZpbmUgSFNFX1NUQVJUVVBfVElNRU9VVCAxMDBVTCAgIC8qITwgVGltZSBvdXQgZm9yIEhTRSBzdGFydCB1cCwgaW4gbXMgKi8KICNlbmRpZiAvKiBIU0VfU1RBUlRVUF9USU1FT1VUICovCiAKIC8qKgpAQCAtOTgsNyArOTgsNyBAQAogICAqICAgICAgICBUaGlzIHZhbHVlIGlzIHRoZSBkZWZhdWx0IE1TSSByYW5nZSB2YWx1ZSBhZnRlciBSZXNldC4KICAgKi8KICNpZiAhZGVmaW5lZCAgKE1TSV9WQUxVRSkKLSAgI2RlZmluZSBNU0lfVkFMVUUgICAgICAgICAgNDAwMDAwMFVMIC8qITwgVmFsdWUgb2YgdGhlIEludGVybmFsIG9zY2lsbGF0b3IgaW4gSHoqLworI2RlZmluZSBNU0lfVkFMVUUgICAgICAgICAgNDAwMDAwMFVMIC8qITwgVmFsdWUgb2YgdGhlIEludGVybmFsIG9zY2lsbGF0b3IgaW4gSHoqLwogI2VuZGlmIC8qIE1TSV9WQUxVRSAqLwogCiAvKioKQEAgLTEwNyw3ICsxMDcsNyBAQAogICAqICAgICAgICAod2hlbiBIU0kgaXMgdXNlZCBhcyBzeXN0ZW0gY2xvY2sgc291cmNlLCBkaXJlY3RseSBvciB0aHJvdWdoIHRoZSBQTEwpLgogICAqLwogI2lmICFkZWZpbmVkICAoSFNJX1ZBTFVFKQotICAjZGVmaW5lIEhTSV9WQUxVRSAgICAgICAgICAxNjAwMDAwMFVMIC8qITwgVmFsdWUgb2YgdGhlIEludGVybmFsIG9zY2lsbGF0b3IgaW4gSHoqLworI2RlZmluZSBIU0lfVkFMVUUgICAgICAgICAgMTYwMDAwMDBVTCAvKiE8IFZhbHVlIG9mIHRoZSBJbnRlcm5hbCBvc2NpbGxhdG9yIGluIEh6Ki8KICNlbmRpZiAvKiBIU0lfVkFMVUUgKi8KIAogLyoqCkBAIC0xMTgsNyArMTE4LDcgQEAKICAgKiAgICAgICAgd2hpY2ggaXMgc3ViamVjdCB0byBtYW51ZmFjdHVyaW5nIHByb2Nlc3MgdmFyaWF0aW9ucy4KICAgKi8KICNpZiAhZGVmaW5lZCAgKEhTSTQ4X1ZBTFVFKQotICAjZGVmaW5lIEhTSTQ4X1ZBTFVFICAgICAgICA0ODAwMDAwMFVMIC8qITwgVmFsdWUgb2YgdGhlIEludGVybmFsIEhpZ2ggU3BlZWQgb3NjaWxsYXRvciBmb3IgVVNCIEZTL1NETU1DL1JORyBpbiBIei4KKyNkZWZpbmUgSFNJNDhfVkFMVUUgICAgICAgIDQ4MDAwMDAwVUwgLyohPCBWYWx1ZSBvZiB0aGUgSW50ZXJuYWwgSGlnaCBTcGVlZCBvc2NpbGxhdG9yIGZvciBVU0IgRlMvU0RNTUMvUk5HIGluIEh6LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlYWwgdmFsdWUgbXkgdmFyeSBkZXBlbmRpbmcgb24gbWFudWZhY3R1cmluZyBwcm9jZXNzIHZhcmlhdGlvbnMuKi8KICNlbmRpZiAvKiBIU0k0OF9WQUxVRSAqLwogCkBAIC0xMjYsMjAgKzEyNiwyMCBAQAogICAqIEBicmllZiBJbnRlcm5hbCBMb3cgU3BlZWQgb3NjaWxsYXRvciAoTFNJKSB2YWx1ZS4KICAgKi8KICNpZiAhZGVmaW5lZCAgKExTSV9WQUxVRSkKLSAjZGVmaW5lIExTSV9WQUxVRSAgICAgICAgICAgMzIwMDBVTCAgICAvKiE8IExTSSBUeXBpY2FsIFZhbHVlIGluIEh6Ki8KKyNkZWZpbmUgTFNJX1ZBTFVFICAgICAgICAgICAzMjAwMFVMICAgIC8qITwgTFNJIFR5cGljYWwgVmFsdWUgaW4gSHoqLwogI2VuZGlmIC8qIExTSV9WQUxVRSAqLyAgICAgICAgICAgICAgICAgIC8qITwgVmFsdWUgb2YgdGhlIEludGVybmFsIExvdyBTcGVlZCBvc2NpbGxhdG9yIGluIEh6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVhbCB2YWx1ZSBtYXkgdmFyeSBkZXBlbmRpbmcgb24gdGhlIHZhcmlhdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHZvbHRhZ2UgYW5kIHRlbXBlcmF0dXJlLiovCitUaGUgcmVhbCB2YWx1ZSBtYXkgdmFyeSBkZXBlbmRpbmcgb24gdGhlIHZhcmlhdGlvbnMKK2luIHZvbHRhZ2UgYW5kIHRlbXBlcmF0dXJlLiovCiAvKioKICAgKiBAYnJpZWYgRXh0ZXJuYWwgTG93IFNwZWVkIG9zY2lsbGF0b3IgKExTRSkgdmFsdWUuCiAgICogICAgICAgIFRoaXMgdmFsdWUgaXMgdXNlZCBieSB0aGUgVUFSVCwgUlRDIEhBTCBtb2R1bGUgdG8gY29tcHV0ZSB0aGUgc3lzdGVtIGZyZXF1ZW5jeQogICAqLwogI2lmICFkZWZpbmVkICAoTFNFX1ZBTFVFKQotICAjZGVmaW5lIExTRV9WQUxVRSAgICAgICAgICAzMjc2OFVMICAgIC8qITwgVmFsdWUgb2YgdGhlIEV4dGVybmFsIG9zY2lsbGF0b3IgaW4gSHoqLworI2RlZmluZSBMU0VfVkFMVUUgICAgICAgICAgMzI3NjhVTCAgICAvKiE8IFZhbHVlIG9mIHRoZSBFeHRlcm5hbCBvc2NpbGxhdG9yIGluIEh6Ki8KICNlbmRpZiAvKiBMU0VfVkFMVUUgKi8KIAogI2lmICFkZWZpbmVkICAoTFNFX1NUQVJUVVBfVElNRU9VVCkKLSAgI2RlZmluZSBMU0VfU1RBUlRVUF9USU1FT1VUIDUwMDBVTCAgICAvKiE8IFRpbWUgb3V0IGZvciBMU0Ugc3RhcnQgdXAsIGluIG1zICovCisjZGVmaW5lIExTRV9TVEFSVFVQX1RJTUVPVVQgNTAwMFVMICAgIC8qITwgVGltZSBvdXQgZm9yIExTRSBzdGFydCB1cCwgaW4gbXMgKi8KICNlbmRpZiAvKiBIU0VfU1RBUlRVUF9USU1FT1VUICovCiAKIC8qKgpAQCAtMTQ4LDcgKzE0OCw3IEBACiAgICogICAgICAgIGZyZXF1ZW5jeS4KICAgKi8KICNpZiAhZGVmaW5lZCAgKEVYVEVSTkFMX1NBSTFfQ0xPQ0tfVkFMVUUpCi0gICNkZWZpbmUgRVhURVJOQUxfU0FJMV9DTE9DS19WQUxVRSAgNDgwMDBVTCAvKiE8IFZhbHVlIG9mIHRoZSBTQUkxIEV4dGVybmFsIGNsb2NrIHNvdXJjZSBpbiBIeiovCisjZGVmaW5lIEVYVEVSTkFMX1NBSTFfQ0xPQ0tfVkFMVUUgIDQ4MDAwVUwgLyohPCBWYWx1ZSBvZiB0aGUgU0FJMSBFeHRlcm5hbCBjbG9jayBzb3VyY2UgaW4gSHoqLwogI2VuZGlmIC8qIEVYVEVSTkFMX1NBSTFfQ0xPQ0tfVkFMVUUgKi8KIAogLyoqCkBAIC0xNTcsNyArMTU3LDcgQEAKICAgKiAgICAgICAgZnJlcXVlbmN5LgogICAqLwogI2lmICFkZWZpbmVkICAoRVhURVJOQUxfU0FJMl9DTE9DS19WQUxVRSkKLSAgI2RlZmluZSBFWFRFUk5BTF9TQUkyX0NMT0NLX1ZBTFVFICAgNDgwMDBVTCAvKiE8IFZhbHVlIG9mIHRoZSBTQUkyIEV4dGVybmFsIGNsb2NrIHNvdXJjZSBpbiBIeiovCisjZGVmaW5lIEVYVEVSTkFMX1NBSTJfQ0xPQ0tfVkFMVUUgICA0ODAwMFVMIC8qITwgVmFsdWUgb2YgdGhlIFNBSTIgRXh0ZXJuYWwgY2xvY2sgc291cmNlIGluIEh6Ki8KICNlbmRpZiAvKiBFWFRFUk5BTF9TQUkyX0NMT0NLX1ZBTFVFICovCiAKIC8qIFRpcDogVG8gYXZvaWQgbW9kaWZ5aW5nIHRoaXMgZmlsZSBlYWNoIHRpbWUgeW91IG5lZWQgdG8gdXNlIGRpZmZlcmVudCBIU0UsCkBAIC0yNDUsMTcxICsyNDUsMTcxIEBACiAgICovCiAKICNpZmRlZiBIQUxfUkNDX01PRFVMRV9FTkFCTEVECi0gICNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX3JjYy5oIgorI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfcmNjLmgiCiAjZW5kaWYgLyogSEFMX1JDQ19NT0RVTEVfRU5BQkxFRCAqLwogCiAjaWZkZWYgSEFMX0dQSU9fTU9EVUxFX0VOQUJMRUQKLSAgI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfZ3Bpby5oIgorI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfZ3Bpby5oIgogI2VuZGlmIC8qIEhBTF9HUElPX01PRFVMRV9FTkFCTEVEICovCiAKICNpZmRlZiBIQUxfRE1BX01PRFVMRV9FTkFCTEVECi0gICNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX2RtYS5oIgorI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfZG1hLmgiCiAjZW5kaWYgLyogSEFMX0RNQV9NT0RVTEVfRU5BQkxFRCAqLwogCiAjaWZkZWYgSEFMX0RGU0RNX01PRFVMRV9FTkFCTEVECi0gICNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX2Rmc2RtLmgiCisjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9kZnNkbS5oIgogI2VuZGlmIC8qIEhBTF9ERlNETV9NT0RVTEVfRU5BQkxFRCAqLwogCiAjaWZkZWYgSEFMX0NPUlRFWF9NT0RVTEVfRU5BQkxFRAotICAjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9jb3J0ZXguaCIKKyNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX2NvcnRleC5oIgogI2VuZGlmIC8qIEhBTF9DT1JURVhfTU9EVUxFX0VOQUJMRUQgKi8KIAogI2lmZGVmIEhBTF9BRENfTU9EVUxFX0VOQUJMRUQKLSAgI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfYWRjLmgiCisjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9hZGMuaCIKICNlbmRpZiAvKiBIQUxfQURDX01PRFVMRV9FTkFCTEVEICovCiAKICNpZmRlZiBIQUxfQ09NUF9NT0RVTEVfRU5BQkxFRAotICAjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9jb21wLmgiCisjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9jb21wLmgiCiAjZW5kaWYgLyogSEFMX0NPTVBfTU9EVUxFX0VOQUJMRUQgKi8KIAogI2lmZGVmIEhBTF9DUkNfTU9EVUxFX0VOQUJMRUQKLSAgI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfY3JjLmgiCisjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9jcmMuaCIKICNlbmRpZiAvKiBIQUxfQ1JDX01PRFVMRV9FTkFCTEVEICovCiAKICNpZmRlZiBIQUxfQ1JZUF9NT0RVTEVfRU5BQkxFRAotICAjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9jcnlwLmgiCisjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9jcnlwLmgiCiAjZW5kaWYgLyogSEFMX0NSWVBfTU9EVUxFX0VOQUJMRUQgKi8KIAogI2lmZGVmIEhBTF9EQUNfTU9EVUxFX0VOQUJMRUQKLSAgI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfZGFjLmgiCisjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9kYWMuaCIKICNlbmRpZiAvKiBIQUxfREFDX01PRFVMRV9FTkFCTEVEICovCiAKICNpZmRlZiBIQUxfRVhUSV9NT0RVTEVfRU5BQkxFRAotICAjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9leHRpLmgiCisjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9leHRpLmgiCiAjZW5kaWYgLyogSEFMX0VYVElfTU9EVUxFX0VOQUJMRUQgKi8KIAogI2lmZGVmIEhBTF9GRENBTl9NT0RVTEVfRU5BQkxFRAotICAjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9mZGNhbi5oIgorI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfZmRjYW4uaCIKICNlbmRpZiAvKiBIQUxfRkRDQU5fTU9EVUxFX0VOQUJMRUQgKi8KIAogI2lmZGVmIEhBTF9GTEFTSF9NT0RVTEVfRU5BQkxFRAotICAjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9mbGFzaC5oIgorI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfZmxhc2guaCIKICNlbmRpZiAvKiBIQUxfRkxBU0hfTU9EVUxFX0VOQUJMRUQgKi8KIAogI2lmZGVmIEhBTF9HVFpDX01PRFVMRV9FTkFCTEVECi0gICNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX2d0emMuaCIKKyNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX2d0emMuaCIKICNlbmRpZiAvKiBIQUxfR1RaQ19NT0RVTEVfRU5BQkxFRCAqLwogCiAjaWZkZWYgSEFMX0hBU0hfTU9EVUxFX0VOQUJMRUQKLSAgI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfaGFzaC5oIgorI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfaGFzaC5oIgogI2VuZGlmIC8qIEhBTF9IQVNIX01PRFVMRV9FTkFCTEVEICovCiAKICNpZmRlZiBIQUxfSTJDX01PRFVMRV9FTkFCTEVECi0gICNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX2kyYy5oIgorI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfaTJjLmgiCiAjZW5kaWYgLyogSEFMX0kyQ19NT0RVTEVfRU5BQkxFRCAqLwogCiAjaWZkZWYgSEFMX0lDQUNIRV9NT0RVTEVfRU5BQkxFRAotICAjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9pY2FjaGUuaCIKKyNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX2ljYWNoZS5oIgogI2VuZGlmIC8qIEhBTF9JQ0FDSEVfTU9EVUxFX0VOQUJMRUQgKi8KIAogI2lmZGVmIEhBTF9JUkRBX01PRFVMRV9FTkFCTEVECi0gICNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX2lyZGEuaCIKKyNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX2lyZGEuaCIKICNlbmRpZiAvKiBIQUxfSVJEQV9NT0RVTEVfRU5BQkxFRCAqLwogCiAjaWZkZWYgSEFMX0lXREdfTU9EVUxFX0VOQUJMRUQKLSAgI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfaXdkZy5oIgorI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfaXdkZy5oIgogI2VuZGlmIC8qIEhBTF9JV0RHX01PRFVMRV9FTkFCTEVEICovCiAKICNpZmRlZiBIQUxfTFBUSU1fTU9EVUxFX0VOQUJMRUQKLSAgI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfbHB0aW0uaCIKKyNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX2xwdGltLmgiCiAjZW5kaWYgLyogSEFMX0xQVElNX01PRFVMRV9FTkFCTEVEICovCiAKICNpZmRlZiBIQUxfTU1DX01PRFVMRV9FTkFCTEVECi0gICNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX21tYy5oIgorI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfbW1jLmgiCiAjZW5kaWYgLyogSEFMX01NQ19NT0RVTEVfRU5BQkxFRCAqLwogCiAjaWZkZWYgSEFMX05BTkRfTU9EVUxFX0VOQUJMRUQKLSAgI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfbmFuZC5oIgorI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfbmFuZC5oIgogI2VuZGlmIC8qIEhBTF9OQU5EX01PRFVMRV9FTkFCTEVEICovCiAKICNpZmRlZiBIQUxfTk9SX01PRFVMRV9FTkFCTEVECi0gICNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX25vci5oIgorI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfbm9yLmgiCiAjZW5kaWYgLyogSEFMX05PUl9NT0RVTEVfRU5BQkxFRCAqLwogCiAjaWZkZWYgSEFMX09QQU1QX01PRFVMRV9FTkFCTEVECi0gICNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX29wYW1wLmgiCisjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9vcGFtcC5oIgogI2VuZGlmIC8qIEhBTF9PUEFNUF9NT0RVTEVfRU5BQkxFRCAqLwogCiAjaWZkZWYgSEFMX09TUElfTU9EVUxFX0VOQUJMRUQKLSAgI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfb3NwaS5oIgorI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfb3NwaS5oIgogI2VuZGlmIC8qIEhBTF9PU1BJX01PRFVMRV9FTkFCTEVEICovCiAKICNpZmRlZiBIQUxfT1RGREVDX01PRFVMRV9FTkFCTEVECi0gICNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX290ZmRlYy5oIgorI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfb3RmZGVjLmgiCiAjZW5kaWYgLyogSEFMX09URkRFQ19NT0RVTEVfRU5BQkxFRCAqLwogCiAjaWZkZWYgSEFMX1BDRF9NT0RVTEVfRU5BQkxFRAotICAjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9wY2QuaCIKKyNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX3BjZC5oIgogI2VuZGlmIC8qIEhBTF9QQ0RfTU9EVUxFX0VOQUJMRUQgKi8KIAogI2lmZGVmIEhBTF9QS0FfTU9EVUxFX0VOQUJMRUQKLSAgI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfcGthLmgiCisjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9wa2EuaCIKICNlbmRpZiAvKiBIQUxfUEtBX01PRFVMRV9FTkFCTEVEICovCiAKICNpZmRlZiBIQUxfUFdSX01PRFVMRV9FTkFCTEVECi0gICNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX3B3ci5oIgorI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfcHdyLmgiCiAjZW5kaWYgLyogSEFMX1BXUl9NT0RVTEVfRU5BQkxFRCAqLwogCiAjaWZkZWYgSEFMX1JOR19NT0RVTEVfRU5BQkxFRAotICAjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9ybmcuaCIKKyNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX3JuZy5oIgogI2VuZGlmIC8qIEhBTF9STkdfTU9EVUxFX0VOQUJMRUQgKi8KIAogI2lmZGVmIEhBTF9SVENfTU9EVUxFX0VOQUJMRUQKLSAgI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfcnRjLmgiCisjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9ydGMuaCIKICNlbmRpZiAvKiBIQUxfUlRDX01PRFVMRV9FTkFCTEVEICovCiAKICNpZmRlZiBIQUxfU0FJX01PRFVMRV9FTkFCTEVECi0gICNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX3NhaS5oIgorI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfc2FpLmgiCiAjZW5kaWYgLyogSEFMX1NBSV9NT0RVTEVfRU5BQkxFRCAqLwogCiAjaWZkZWYgSEFMX1NEX01PRFVMRV9FTkFCTEVECi0gICNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX3NkLmgiCisjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9zZC5oIgogI2VuZGlmIC8qIEhBTF9TRF9NT0RVTEVfRU5BQkxFRCAqLwogCiAjaWZkZWYgSEFMX1NNQVJUQ0FSRF9NT0RVTEVfRU5BQkxFRAotICAjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9zbWFydGNhcmQuaCIKKyNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX3NtYXJ0Y2FyZC5oIgogI2VuZGlmIC8qIEhBTF9TTUFSVENBUkRfTU9EVUxFX0VOQUJMRUQgKi8KIAogI2lmZGVmIEhBTF9TTUJVU19NT0RVTEVfRU5BQkxFRAotICAjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9zbWJ1cy5oIgorI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfc21idXMuaCIKICNlbmRpZiAvKiBIQUxfU01CVVNfTU9EVUxFX0VOQUJMRUQgKi8KIAogI2lmZGVmIEhBTF9TUElfTU9EVUxFX0VOQUJMRUQKLSAgI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfc3BpLmgiCisjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9zcGkuaCIKICNlbmRpZiAvKiBIQUxfU1BJX01PRFVMRV9FTkFCTEVEICovCiAKICNpZmRlZiBIQUxfU1JBTV9NT0RVTEVfRU5BQkxFRAotICAjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9zcmFtLmgiCisjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9zcmFtLmgiCiAjZW5kaWYgLyogSEFMX1NSQU1fTU9EVUxFX0VOQUJMRUQgKi8KIAogI2lmZGVmIEhBTF9USU1fTU9EVUxFX0VOQUJMRUQKLSAgI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfdGltLmgiCisjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF90aW0uaCIKICNlbmRpZiAvKiBIQUxfVElNX01PRFVMRV9FTkFCTEVEICovCiAKICNpZmRlZiBIQUxfVFNDX01PRFVMRV9FTkFCTEVECi0gICNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX3RzYy5oIgorI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfdHNjLmgiCiAjZW5kaWYgLyogSEFMX1RTQ19NT0RVTEVfRU5BQkxFRCAqLwogCiAjaWZkZWYgSEFMX1VBUlRfTU9EVUxFX0VOQUJMRUQKLSAgI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfdWFydC5oIgorI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfdWFydC5oIgogI2VuZGlmIC8qIEhBTF9VQVJUX01PRFVMRV9FTkFCTEVEICovCiAKICNpZmRlZiBIQUxfVVNBUlRfTU9EVUxFX0VOQUJMRUQKLSAgI2luY2x1ZGUgInN0bTMybDV4eF9oYWxfdXNhcnQuaCIKKyNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX3VzYXJ0LmgiCiAjZW5kaWYgLyogSEFMX1VTQVJUX01PRFVMRV9FTkFCTEVEICovCiAKICNpZmRlZiBIQUxfV1dER19NT0RVTEVfRU5BQkxFRAotICAjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF93d2RnLmgiCisjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF93d2RnLmgiCiAjZW5kaWYgLyogSEFMX1dXREdfTU9EVUxFX0VOQUJMRUQgKi8KIAogLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTQyMiwxMSArNDIyLDExIEBACiAgICogICAgICAgICBJZiBleHByIGlzIHRydWUsIGl0IHJldHVybnMgbm8gdmFsdWUuCiAgICogQHJldHZhbCBOb25lCiAgICovCi0gICNkZWZpbmUgYXNzZXJ0X3BhcmFtKGV4cHIpICgoZXhwcikgPyAodm9pZCkwVSA6IGFzc2VydF9mYWlsZWQoKHVpbnQ4X3QgKilfX0ZJTEVfXywgX19MSU5FX18pKQorI2RlZmluZSBhc3NlcnRfcGFyYW0oZXhwcikgKChleHByKSA/ICh2b2lkKTBVIDogYXNzZXJ0X2ZhaWxlZCgodWludDhfdCAqKV9fRklMRV9fLCBfX0xJTkVfXykpCiAvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotICB2b2lkIGFzc2VydF9mYWlsZWQodWludDhfdCAqZmlsZSwgdWludDMyX3QgbGluZSk7Cit2b2lkIGFzc2VydF9mYWlsZWQodWludDhfdCAqZmlsZSwgdWludDMyX3QgbGluZSk7CiAjZWxzZQotICAjZGVmaW5lIGFzc2VydF9wYXJhbShleHByKSAoKHZvaWQpMFUpCisjZGVmaW5lIGFzc2VydF9wYXJhbShleHByKSAoKHZvaWQpMFUpCiAjZW5kaWYgLyogVVNFX0ZVTExfQVNTRVJUICovCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDV4eF9oYWxfY29ydGV4LmggYi9JbmMvc3RtMzJsNXh4X2hhbF9jb3J0ZXguaAppbmRleCAyZjMyZjUzLi41NjhmZDE4IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNXh4X2hhbF9jb3J0ZXguaAorKysgYi9JbmMvc3RtMzJsNXh4X2hhbF9jb3J0ZXguaApAQCAtMzcsNiArMzcsNTcgQEAKICAgKi8KIAogLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAZGVmZ3JvdXAgQ09SVEVYX0V4cG9ydGVkX1R5cGVzIENPUlRFWCBFeHBvcnRlZCBUeXBlcworICAqIEB7CisgICovCisKKyNpZiAoX19NUFVfUFJFU0VOVCA9PSAxKQorLyoqIEBkZWZncm91cCBDT1JURVhfTVBVX1JlZ2lvbl9Jbml0aWFsaXphdGlvbl9TdHJ1Y3R1cmVfZGVmaW5pdGlvbiBNUFUgUmVnaW9uIEluaXRpYWxpemF0aW9uIFN0cnVjdHVyZSBEZWZpbml0aW9uCisgICogQHsKKyAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgRW5hYmxlOyAgICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgc3RhdHVzIG9mIHRoZSByZWdpb24uIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIENPUlRFWF9NUFVfUmVnaW9uX0VuYWJsZSAgICAgICAgICAgICAgICAgKi8KKyAgdWludDhfdCAgICAgICAgICAgICAgICBOdW1iZXI7ICAgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdGhlIHJlZ2lvbiB0byBwcm90ZWN0LiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBDT1JURVhfTVBVX1JlZ2lvbl9OdW1iZXIgICAgICAgICAgICAgICAgICovCisgIHVpbnQzMl90ICAgICAgICAgICAgICAgQmFzZUFkZHJlc3M7ICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSByZWdpb24gdG8gcHJvdGVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB1aW50MzJfdCAgICAgICAgICAgICAgIExpbWl0QWRkcmVzczsgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGxpbWl0IGFkZHJlc3Mgb2YgdGhlIHJlZ2lvbiB0byBwcm90ZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdWludDhfdCAgICAgICAgICAgICAgICBBdHRyaWJ1dGVzSW5kZXg7ICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBtZW1vcnkgYXR0cmlidXRlcyBpbmRleC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBDT1JURVhfTVBVX0F0dHJpYnV0ZXNfTnVtYmVyICAgICAgICAgICAgICovCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgQWNjZXNzUGVybWlzc2lvbjsgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgcmVnaW9uIGFjY2VzcyBwZXJtaXNzaW9uIHR5cGUuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIENPUlRFWF9NUFVfUmVnaW9uX1Blcm1pc3Npb25fQXR0cmlidXRlcyAgKi8KKyAgdWludDhfdCAgICAgICAgICAgICAgICBEaXNhYmxlRXhlYzsgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBpbnN0cnVjdGlvbiBhY2Nlc3Mgc3RhdHVzLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBDT1JURVhfTVBVX0luc3RydWN0aW9uX0FjY2VzcyAgICAgICAgICAgICovCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgSXNTaGFyZWFibGU7ICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgc2hhcmVhYmlsaXR5IHN0YXR1cyBvZiB0aGUgcHJvdGVjdGVkIHJlZ2lvbi4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgQ09SVEVYX01QVV9BY2Nlc3NfU2hhcmVhYmxlICAgICAgICAgICAgICAqLworfSBNUFVfUmVnaW9uX0luaXRUeXBlRGVmOworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBDT1JURVhfTVBVX0F0dHJpYnV0ZXNfSW5pdGlhbGl6YXRpb25fU3RydWN0dXJlX2RlZmluaXRpb24gTVBVIEF0dHJpYnV0ZXMgSW5pdGlhbGl6YXRpb24gU3RydWN0dXJlIERlZmluaXRpb24KKyAgKiBAeworICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdWludDhfdCAgICAgICAgICAgICAgICBOdW1iZXI7ICAgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdGhlIG1lbW9yeSBhdHRyaWJ1dGVzIHRvIGNvbmZpZ3VyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBDT1JURVhfTVBVX0F0dHJpYnV0ZXNfTnVtYmVyICAgICAgICAgICAgICAqLworCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgQXR0cmlidXRlczsgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgbWVtb3J5IGF0dHJpYnV0ZXMgdnVlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAgYW5kIE1heF9EYXRhID0gMHhGRkZGICAgICovCisKK30gTVBVX0F0dHJpYnV0ZXNfSW5pdFR5cGVEZWY7CisvKioKKyAgKiBAfQorICAqLworCisjZW5kaWYgLyogX19NUFVfUFJFU0VOVCAqLworCisvKioKKyAgKiBAfQorICAqLworCiAvKiBFeHBvcnRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiogQGRlZmdyb3VwIENPUlRFWF9FeHBvcnRlZF9Db25zdGFudHMgQ09SVEVYIEV4cG9ydGVkIENvbnN0YW50cwpAQCAtNjcsNiArMTE4LDExNSBAQAogICAqIEB9CiAgICovCiAKKyNpZiAoX19NUFVfUFJFU0VOVCA9PSAxKQorLyoqIEBkZWZncm91cCBDT1JURVhfTVBVX0hGTk1JX1BSSVZERUZfQ29udHJvbCBDT1JURVggTVBVIEhGTk1JIGFuZCBQUklWSUxFR0VEIEFjY2VzcyBjb250cm9sCisgICogQHsKKyAgKi8KKyNkZWZpbmUgIE1QVV9IRk5NSV9QUklWREVGX05PTkUgICAgICAgICAgMFUKKyNkZWZpbmUgIE1QVV9IQVJERkFVTFRfTk1JICAgICAgICAgICAgICAgMlUKKyNkZWZpbmUgIE1QVV9QUklWSUxFR0VEX0RFRkFVTFQgICAgICAgICAgNFUKKyNkZWZpbmUgIE1QVV9IRk5NSV9QUklWREVGICAgICAgICAgICAgICAgNlUKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgQ09SVEVYX01QVV9SZWdpb25fRW5hYmxlIENPUlRFWCBNUFUgUmVnaW9uIEVuYWJsZQorICAqIEB7CisgICovCisjZGVmaW5lICBNUFVfUkVHSU9OX0VOQUJMRSAgICAgICAgICAgICAgIDFVCisjZGVmaW5lICBNUFVfUkVHSU9OX0RJU0FCTEUgICAgICAgICAgICAgIDBVCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIENPUlRFWF9NUFVfSW5zdHJ1Y3Rpb25fQWNjZXNzIENPUlRFWCBNUFUgSW5zdHJ1Y3Rpb24gQWNjZXNzCisgICogQHsKKyAgKi8KKyNkZWZpbmUgIE1QVV9JTlNUUlVDVElPTl9BQ0NFU1NfRU5BQkxFICAgMFUKKyNkZWZpbmUgIE1QVV9JTlNUUlVDVElPTl9BQ0NFU1NfRElTQUJMRSAgMVUKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgQ09SVEVYX01QVV9BY2Nlc3NfU2hhcmVhYmxlIENPUlRFWCBNUFUgSW5zdHJ1Y3Rpb24gQWNjZXNzIFNoYXJlYWJsZQorICAqIEB7CisgICovCisjZGVmaW5lICBNUFVfQUNDRVNTX05PVF9TSEFSRUFCTEUgICAgICAgIDBVCisjZGVmaW5lICBNUFVfQUNDRVNTX09VVEVSX1NIQVJFQUJMRSAgICAgIDFVCisjZGVmaW5lICBNUFVfQUNDRVNTX0lOTkVSX1NIQVJFQUJMRSAgICAgIDNVCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIENPUlRFWF9NUFVfUmVnaW9uX1Blcm1pc3Npb25fQXR0cmlidXRlcyBDT1JURVggTVBVIFJlZ2lvbiBQZXJtaXNzaW9uIEF0dHJpYnV0ZXMKKyAgKiBAeworICAqLworI2RlZmluZSAgTVBVX1JFR0lPTl9QUklWX1JXICAgICAgICAgICAgICAwVQorI2RlZmluZSAgTVBVX1JFR0lPTl9BTExfUlcgICAgICAgICAgICAgICAxVQorI2RlZmluZSAgTVBVX1JFR0lPTl9QUklWX1JPICAgICAgICAgICAgICAyVQorI2RlZmluZSAgTVBVX1JFR0lPTl9BTExfUk8gICAgICAgICAgICAgICAzVQorLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBDT1JURVhfTVBVX1JlZ2lvbl9OdW1iZXIgQ09SVEVYIE1QVSBSZWdpb24gTnVtYmVyCisgICogQHsKKyAgKi8KKyNkZWZpbmUgIE1QVV9SRUdJT05fTlVNQkVSMCAgICAgICAgICAgICAgMFUKKyNkZWZpbmUgIE1QVV9SRUdJT05fTlVNQkVSMSAgICAgICAgICAgICAgMVUKKyNkZWZpbmUgIE1QVV9SRUdJT05fTlVNQkVSMiAgICAgICAgICAgICAgMlUKKyNkZWZpbmUgIE1QVV9SRUdJT05fTlVNQkVSMyAgICAgICAgICAgICAgM1UKKyNkZWZpbmUgIE1QVV9SRUdJT05fTlVNQkVSNCAgICAgICAgICAgICAgNFUKKyNkZWZpbmUgIE1QVV9SRUdJT05fTlVNQkVSNSAgICAgICAgICAgICAgNVUKKyNkZWZpbmUgIE1QVV9SRUdJT05fTlVNQkVSNiAgICAgICAgICAgICAgNlUKKyNkZWZpbmUgIE1QVV9SRUdJT05fTlVNQkVSNyAgICAgICAgICAgICAgN1UKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgQ09SVEVYX01QVV9BdHRyaWJ1dGVzX051bWJlciBDT1JURVggTVBVIE1lbW9yeSBBdHRyaWJ1dGVzIE51bWJlcgorICAqIEB7CisgICovCisjZGVmaW5lICBNUFVfQVRUUklCVVRFU19OVU1CRVIwICAgICAgICAgIDBVCisjZGVmaW5lICBNUFVfQVRUUklCVVRFU19OVU1CRVIxICAgICAgICAgIDFVCisjZGVmaW5lICBNUFVfQVRUUklCVVRFU19OVU1CRVIyICAgICAgICAgIDJVCisjZGVmaW5lICBNUFVfQVRUUklCVVRFU19OVU1CRVIzICAgICAgICAgIDNVCisjZGVmaW5lICBNUFVfQVRUUklCVVRFU19OVU1CRVI0ICAgICAgICAgIDRVCisjZGVmaW5lICBNUFVfQVRUUklCVVRFU19OVU1CRVI1ICAgICAgICAgIDVVCisjZGVmaW5lICBNUFVfQVRUUklCVVRFU19OVU1CRVI2ICAgICAgICAgIDZVCisjZGVmaW5lICBNUFVfQVRUUklCVVRFU19OVU1CRVI3ICAgICAgICAgIDdVCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIENPUlRFWF9NUFVfQXR0cmlidXRlcyBDT1JURVggTVBVIEF0dHJpYnV0ZXMKKyAgKiBAeworICAqLworI2RlZmluZSAgTVBVX0RFVklDRV9uR25SbkUgICAgICAgICAgMHgwVSAgLyogRGV2aWNlLCBub0dhdGhlciwgbm9SZW9yZGVyLCBub0Vhcmx5IGFja25vd2xlZGdlLiAqLworI2RlZmluZSAgTVBVX0RFVklDRV9uR25SRSAgICAgICAgICAgMHg0VSAgLyogRGV2aWNlLCBub0dhdGhlciwgbm9SZW9yZGVyLCBFYXJseSBhY2tub3dsZWRnZS4gICAqLworI2RlZmluZSAgTVBVX0RFVklDRV9uR1JFICAgICAgICAgICAgMHg4VSAgLyogRGV2aWNlLCBub0dhdGhlciwgUmVvcmRlciwgRWFybHkgYWNrbm93bGVkZ2UuICAgICAqLworI2RlZmluZSAgTVBVX0RFVklDRV9HUkUgICAgICAgICAgICAgMHhDVSAgLyogRGV2aWNlLCBHYXRoZXIsIFJlb3JkZXIsIEVhcmx5IGFja25vd2xlZGdlLiAgICAgICAqLworCisjZGVmaW5lICBNUFVfV1JJVEVfVEhST1VHSCAgICAgICAgICAweDBVICAvKiBOb3JtYWwgbWVtb3J5LCB3cml0ZS10aHJvdWdoLiAqLworI2RlZmluZSAgTVBVX05PVF9DQUNIRUFCTEUgICAgICAgICAgMHg0VSAgLyogTm9ybWFsIG1lbW9yeSwgbm9uLWNhY2hlYWJsZS4gKi8KKyNkZWZpbmUgIE1QVV9XUklURV9CQUNLICAgICAgICAgICAgIDB4NFUgIC8qIE5vcm1hbCBtZW1vcnksIHdyaXRlLWJhY2suICAgICovCisKKyNkZWZpbmUgIE1QVV9UUkFOU0lFTlQgICAgICAgICAgICAgIDB4MFUgIC8qIE5vcm1hbCBtZW1vcnksIHRyYW5zaWVudC4gICAgICovCisjZGVmaW5lICBNUFVfTk9OX1RSQU5TSUVOVCAgICAgICAgICAweDhVICAvKiBOb3JtYWwgbWVtb3J5LCBub24tdHJhbnNpZW50LiAqLworCisjZGVmaW5lICBNUFVfTk9fQUxMT0NBVEUgICAgICAgICAgICAweDBVICAvKiBOb3JtYWwgbWVtb3J5LCBubyBhbGxvY2F0ZS4gICAgICAgICAqLworI2RlZmluZSAgTVBVX1dfQUxMT0NBVEUgICAgICAgICAgICAgMHgxVSAgLyogTm9ybWFsIG1lbW9yeSwgd3JpdGUgYWxsb2NhdGUuICAgICAgKi8KKyNkZWZpbmUgIE1QVV9SX0FMTE9DQVRFICAgICAgICAgICAgIDB4MlUgIC8qIE5vcm1hbCBtZW1vcnksIHJlYWQgYWxsb2NhdGUuICAgICAgICovCisjZGVmaW5lICBNUFVfUldfQUxMT0NBVEUgICAgICAgICAgICAweDNVICAvKiBOb3JtYWwgbWVtb3J5LCByZWFkL3dyaXRlIGFsbG9jYXRlLiAqLworCisjZGVmaW5lIE9VVEVSKF9fQVRUUl9fKSAgICAgICAgKChfX0FUVFJfXykgPDwgNFUpCisjZGVmaW5lIElOTkVSX09VVEVSKF9fQVRUUl9fKSAgKChfX0FUVFJfXykgfCAoKF9fQVRUUl9fKSA8PCA0VSkpCisvKioKKyAgKiBAfQorICAqLworCisjZW5kaWYgLyogX19NUFVfUFJFU0VOVCAqLworCiAvKioKICAgKiBAfQogICAqLwpAQCAtOTYsNyArMjU2LDYgQEAKIHZvaWQgSEFMX05WSUNfRGlzYWJsZUlSUShJUlFuX1R5cGUgSVJRbik7CiB2b2lkIEhBTF9OVklDX1N5c3RlbVJlc2V0KHZvaWQpOwogdWludDMyX3QgSEFMX1NZU1RJQ0tfQ29uZmlnKHVpbnQzMl90IFRpY2tzTnVtYik7Ci0KIC8qKgogICAqIEB9CiAgICovCkBAIC0xMTUsNiArMjc0LDE5IEBACiB2b2lkIEhBTF9TWVNUSUNLX0NMS1NvdXJjZUNvbmZpZyh1aW50MzJfdCBDTEtTb3VyY2UpOwogdm9pZCBIQUxfU1lTVElDS19JUlFIYW5kbGVyKHZvaWQpOwogdm9pZCBIQUxfU1lTVElDS19DYWxsYmFjayh2b2lkKTsKKworI2lmIChfX01QVV9QUkVTRU5UID09IDEpCit2b2lkIEhBTF9NUFVfRW5hYmxlKHVpbnQzMl90IE1QVV9Db250cm9sKTsKK3ZvaWQgSEFMX01QVV9EaXNhYmxlKHZvaWQpOwordm9pZCBIQUxfTVBVX0NvbmZpZ1JlZ2lvbihNUFVfUmVnaW9uX0luaXRUeXBlRGVmICpNUFVfUmVnaW9uSW5pdCk7Cit2b2lkIEhBTF9NUFVfQ29uZmlnTWVtb3J5QXR0cmlidXRlcyhNUFVfQXR0cmlidXRlc19Jbml0VHlwZURlZiAqTVBVX0F0dHJpYnV0ZXNJbml0KTsKKyNpZmRlZiBNUFVfTlMKK3ZvaWQgSEFMX01QVV9FbmFibGVfTlModWludDMyX3QgTVBVX0NvbnRyb2wpOwordm9pZCBIQUxfTVBVX0Rpc2FibGVfTlModm9pZCk7Cit2b2lkIEhBTF9NUFVfQ29uZmlnUmVnaW9uX05TKE1QVV9SZWdpb25fSW5pdFR5cGVEZWYgKk1QVV9SZWdpb25Jbml0KTsKK3ZvaWQgSEFMX01QVV9Db25maWdNZW1vcnlBdHRyaWJ1dGVzX05TKE1QVV9BdHRyaWJ1dGVzX0luaXRUeXBlRGVmICpNUFVfQXR0cmlidXRlc0luaXQpOworI2VuZGlmIC8qIE1QVV9OUyAqLworI2VuZGlmIC8qIF9fTVBVX1BSRVNFTlQgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0xNDQsNiArMzE2LDQyIEBACiAjZGVmaW5lIElTX1NZU1RJQ0tfQ0xLX1NPVVJDRShTT1VSQ0UpICgoKFNPVVJDRSkgPT0gU1lTVElDS19DTEtTT1VSQ0VfSENMSykgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IFNZU1RJQ0tfQ0xLU09VUkNFX0hDTEtfRElWOCkpCiAKKyNpZiAoX19NUFVfUFJFU0VOVCA9PSAxKQorI2RlZmluZSBJU19NUFVfUkVHSU9OX0VOQUJMRShTVEFURSkgKCgoU1RBVEUpID09IE1QVV9SRUdJT05fRU5BQkxFKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTVEFURSkgPT0gTVBVX1JFR0lPTl9ESVNBQkxFKSkKKworI2RlZmluZSBJU19NUFVfSU5TVFJVQ1RJT05fQUNDRVNTKFNUQVRFKSAoKChTVEFURSkgPT0gTVBVX0lOU1RSVUNUSU9OX0FDQ0VTU19FTkFCTEUpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1RBVEUpID09IE1QVV9JTlNUUlVDVElPTl9BQ0NFU1NfRElTQUJMRSkpCisKKyNkZWZpbmUgSVNfTVBVX0FDQ0VTU19TSEFSRUFCTEUoU1RBVEUpICAgKCgoU1RBVEUpID09IE1QVV9BQ0NFU1NfT1VURVJfU0hBUkVBQkxFKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNUQVRFKSA9PSBNUFVfQUNDRVNTX0lOTkVSX1NIQVJFQUJMRSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTVEFURSkgPT0gTVBVX0FDQ0VTU19OT1RfU0hBUkVBQkxFKSkKKworI2RlZmluZSBJU19NUFVfUkVHSU9OX1BFUk1JU1NJT05fQVRUUklCVVRFKFRZUEUpICgoKFRZUEUpID09IE1QVV9SRUdJT05fUFJJVl9SVykgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRZUEUpID09IE1QVV9SRUdJT05fQUxMX1JXKSAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRZUEUpID09IE1QVV9SRUdJT05fUFJJVl9STykgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUWVBFKSA9PSBNUFVfUkVHSU9OX0FMTF9STykpCisKKyNkZWZpbmUgSVNfTVBVX1JFR0lPTl9OVU1CRVIoTlVNQkVSKSAgICAoKChOVU1CRVIpID09IE1QVV9SRUdJT05fTlVNQkVSMCkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE5VTUJFUikgPT0gTVBVX1JFR0lPTl9OVU1CRVIxKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTlVNQkVSKSA9PSBNUFVfUkVHSU9OX05VTUJFUjIpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChOVU1CRVIpID09IE1QVV9SRUdJT05fTlVNQkVSMykgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE5VTUJFUikgPT0gTVBVX1JFR0lPTl9OVU1CRVI0KSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTlVNQkVSKSA9PSBNUFVfUkVHSU9OX05VTUJFUjUpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChOVU1CRVIpID09IE1QVV9SRUdJT05fTlVNQkVSNikgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE5VTUJFUikgPT0gTVBVX1JFR0lPTl9OVU1CRVI3KSkKKworI2RlZmluZSBJU19NUFVfQVRUUklCVVRFU19OVU1CRVIoTlVNQkVSKSAgKCgoTlVNQkVSKSA9PSBNUFVfQVRUUklCVVRFU19OVU1CRVIwKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChOVU1CRVIpID09IE1QVV9BVFRSSUJVVEVTX05VTUJFUjEpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE5VTUJFUikgPT0gTVBVX0FUVFJJQlVURVNfTlVNQkVSMikgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTlVNQkVSKSA9PSBNUFVfQVRUUklCVVRFU19OVU1CRVIzKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChOVU1CRVIpID09IE1QVV9BVFRSSUJVVEVTX05VTUJFUjQpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE5VTUJFUikgPT0gTVBVX0FUVFJJQlVURVNfTlVNQkVSNSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTlVNQkVSKSA9PSBNUFVfQVRUUklCVVRFU19OVU1CRVI2KSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChOVU1CRVIpID09IE1QVV9BVFRSSUJVVEVTX05VTUJFUjcpKQorCisjZW5kaWYgLyogX19NUFVfUFJFU0VOVCAqLworCiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDV4eF9oYWxfY3J5cC5oIGIvSW5jL3N0bTMybDV4eF9oYWxfY3J5cC5oCmluZGV4IDI0ZGIzYzcuLmYwMjQzNTcgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw1eHhfaGFsX2NyeXAuaAorKysgYi9JbmMvc3RtMzJsNXh4X2hhbF9jcnlwLmgKQEAgLTEwOSw3ICsxMDksNyBAQAogdHlwZWRlZiBzdHJ1Y3QKICNlbmRpZgogewotICBBRVNfVHlwZURlZiAgICAgICAgICAgICAgICAgICAgICAgKkluc3RhbmNlOyAgICAgICAgICAgIC8qITwgQUVTIFJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAqLworICBBRVNfVHlwZURlZiAgICAgICAgICAgICAgICAgICAgICAgKkluc3RhbmNlOyAgICAgICAgLyohPCBBRVMgUmVnaXN0ZXIgYmFzZSBhZGRyZXNzICovCiAKICAgQ1JZUF9Db25maWdUeXBlRGVmICAgICAgICAgICAgICAgIEluaXQ7ICAgICAgICAgICAgIC8qITwgQ1JZUCByZXF1aXJlZCBwYXJhbWV0ZXJzICovCiAKQEAgLTEyMCwxMyArMTIwLDEzIEBACiAKICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgICpwQ3J5cE91dEJ1ZmZQdHI7IC8qITwgUG9pbnRlciB0byBDUllQIHByb2Nlc3NpbmcgKGVuY3J5cHRpb24sIGRlY3J5cHRpb24sLi4uKSBidWZmZXIgKi8KIAotICBfX0lPIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgQ3J5cEhlYWRlckNvdW50OyAgIC8qITwgQ291bnRlciBvZiBoZWFkZXIgZGF0YSAqLworICBfX0lPIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgQ3J5cEhlYWRlckNvdW50OyAgLyohPCBDb3VudGVyIG9mIGhlYWRlciBkYXRhIGluIHdvcmRzICovCiAKLSAgX19JTyB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgIENyeXBJbkNvdW50OyAgICAgIC8qITwgQ291bnRlciBvZiBpbnB1dCBkYXRhICovCisgIF9fSU8gdWludDE2X3QgICAgICAgICAgICAgICAgICAgICBDcnlwSW5Db3VudDsgICAgICAvKiE8IENvdW50ZXIgb2YgaW5wdXQgZGF0YSBpbiB3b3JkcyAqLwogCi0gIF9fSU8gdWludDE2X3QgICAgICAgICAgICAgICAgICAgICBDcnlwT3V0Q291bnQ7ICAgICAvKiE8IENvdW50ZXIgb2Ygb3V0cHV0IGRhdGEgKi8KKyAgX19JTyB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgIENyeXBPdXRDb3VudDsgICAgIC8qITwgQ291bnRlciBvZiBvdXRwdXQgZGF0YSBpbiB3b3JkcyAqLwogCi0gIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgICBTaXplOyAgICAgICAgICAgICAvKiE8IGxlbmd0aCBvZiBpbnB1dCBkYXRhIGluIHdvcmRzICovCisgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgICBTaXplOyAgICAgICAgICAgICAvKiE8IExlbmd0aCBvZiBpbnB1dCBkYXRhICovCiAKICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgIFBoYXNlOyAgICAgICAgICAgIC8qITwgQ1JZUCBwZXJpcGhlcmFsIHBoYXNlICovCiAKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw1eHhfaGFsX2RlZi5oIGIvSW5jL3N0bTMybDV4eF9oYWxfZGVmLmgKaW5kZXggYTAwODIzMy4uMjI3MjQ3YSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDV4eF9oYWxfZGVmLmgKKysrIGIvSW5jL3N0bTMybDV4eF9oYWxfZGVmLmgKQEAgLTIzLDcgKzIzLDcgQEAKICNkZWZpbmUgU1RNMzJMNXh4X0hBTF9ERUZfSAogCiAjaWZkZWYgX19jcGx1c3BsdXMKLSBleHRlcm4gIkMiIHsKK2V4dGVybiAiQyIgewogI2VuZGlmCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC02NywxMCArNjcsMTAgQEAKICNkZWZpbmUgSEFMX0lTX0JJVF9DTFIoUkVHLCBCSVQpICAgICAgICAgKCgoUkVHKSAmIChCSVQpKSA9PSAwVSkKIAogI2RlZmluZSBfX0hBTF9MSU5LRE1BKF9fSEFORExFX18sIF9fUFBQX0RNQV9GSUVMRF9fLCBfX0RNQV9IQU5ETEVfXykgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgZG97ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+X19QUFBfRE1BX0ZJRUxEX18gPSAmKF9fRE1BX0hBTkRMRV9fKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0RNQV9IQU5ETEVfXykuUGFyZW50ID0gKF9fSEFORExFX18pOyAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICBkb3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKF9fSEFORExFX18pLT5fX1BQUF9ETUFfRklFTERfXyA9ICYoX19ETUFfSEFORExFX18pOyBcCisgICAgKF9fRE1BX0hBTkRMRV9fKS5QYXJlbnQgPSAoX19IQU5ETEVfXyk7ICAgICAgICAgICAgICBcCisgIH0gd2hpbGUoMCkKIAogLyoqIEBicmllZiBSZXNldCB0aGUgSGFuZGxlJ3MgU3RhdGUgZmllbGQuCiAgICogQHBhcmFtIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBQZXJpcGhlcmFsIEhhbmRsZS4KQEAgLTkwLDY4ICs5MCw2OCBAQAogI2RlZmluZSBfX0hBTF9SRVNFVF9IQU5ETEVfU1RBVEUoX19IQU5ETEVfXykgKChfX0hBTkRMRV9fKS0+U3RhdGUgPSAwKQogCiAjaWYgKFVTRV9SVE9TID09IDEpCi0gIC8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCi0gICNlcnJvciAiIFVTRV9SVE9TIHNob3VsZCBiZSAwIGluIHRoZSBjdXJyZW50IEhBTCByZWxlYXNlICIKKy8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCisjZXJyb3IgIiBVU0VfUlRPUyBzaG91bGQgYmUgMCBpbiB0aGUgY3VycmVudCBIQUwgcmVsZWFzZSAiCiAjZWxzZQotICAjZGVmaW5lIF9fSEFMX0xPQ0soX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoKF9fSEFORExFX18pLT5Mb2NrID09IEhBTF9MT0NLRUQpICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEhBTF9CVVNZOyAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5Mb2NrID0gSEFMX0xPQ0tFRDsgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH13aGlsZSAoMCkKKyNkZWZpbmUgX19IQUxfTE9DSyhfX0hBTkRMRV9fKSAgICAgICAgICAgICBcCisgIGRveyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmKChfX0hBTkRMRV9fKS0+TG9jayA9PSBIQUxfTE9DS0VEKSAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gSEFMX0JVU1k7ICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKF9fSEFORExFX18pLT5Mb2NrID0gSEFMX0xPQ0tFRDsgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH13aGlsZSAoMCkKIAotICAjZGVmaW5lIF9fSEFMX1VOTE9DSyhfX0hBTkRMRV9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+TG9jayA9IEhBTF9VTkxPQ0tFRDsgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfXdoaWxlICgwKQorI2RlZmluZSBfX0hBTF9VTkxPQ0soX19IQU5ETEVfXykgICAgICAgICAgIFwKKyAgZG97ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKF9fSEFORExFX18pLT5Mb2NrID0gSEFMX1VOTE9DS0VEOyAgICAgXAorICB9d2hpbGUgKDApCiAjZW5kaWYgLyogVVNFX1JUT1MgKi8KIAogCiAjaWYgZGVmaW5lZCAoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApIC8qIEFSTSBDb21waWxlciBWNiAqLwotICAjaWZuZGVmIF9fd2VhawotICAgICNkZWZpbmUgX193ZWFrICBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkKLSAgI2VuZGlmCi0gICNpZm5kZWYgX19wYWNrZWQKLSAgICAjZGVmaW5lIF9fcGFja2VkICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQotICAjZW5kaWYKKyNpZm5kZWYgX193ZWFrCisjZGVmaW5lIF9fd2VhayAgX19hdHRyaWJ1dGVfXygod2VhaykpCisjZW5kaWYKKyNpZm5kZWYgX19wYWNrZWQKKyNkZWZpbmUgX19wYWNrZWQgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCisjZW5kaWYKICNlbGlmIGRlZmluZWQgKF9fR05VQ19fKSAvKiBHTlUgQ29tcGlsZXIgKi8KLSAgI2lmbmRlZiBfX3dlYWsKLSAgICAjZGVmaW5lIF9fd2VhayAgX19hdHRyaWJ1dGVfXygod2VhaykpCi0gICNlbmRpZiAvKiBfX3dlYWsgKi8KLSAgI2lmbmRlZiBfX3BhY2tlZAotICAgICNkZWZpbmUgX19wYWNrZWQgIF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKQotICAjZW5kaWYgLyogX19wYWNrZWQgKi8KKyNpZm5kZWYgX193ZWFrCisjZGVmaW5lIF9fd2VhayAgX19hdHRyaWJ1dGVfXygod2VhaykpCisjZW5kaWYgLyogX193ZWFrICovCisjaWZuZGVmIF9fcGFja2VkCisjZGVmaW5lIF9fcGFja2VkICBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSkKKyNlbmRpZiAvKiBfX3BhY2tlZCAqLwogI2VuZGlmIC8qIF9fR05VQ19fICovCiAKIC8qIE1hY3JvIHRvIGdldCB2YXJpYWJsZSBhbGlnbmVkIG9uIDQtYnl0ZXMsIGZvciBfX0lDQ0FSTV9fIHRoZSBkaXJlY3RpdmUgIiNwcmFnbWEgZGF0YV9hbGlnbm1lbnQ9NCIgbXVzdCBiZSB1c2VkIGluc3RlYWQgKi8KICNpZiBkZWZpbmVkIChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkgLyogQVJNIENvbXBpbGVyIFY2ICovCi0gICNpZm5kZWYgX19BTElHTl9CRUdJTgotICAgICNkZWZpbmUgX19BTElHTl9CRUdJTgotICAjZW5kaWYKLSAgI2lmbmRlZiBfX0FMSUdOX0VORAotICAgICNkZWZpbmUgX19BTElHTl9FTkQgIF9fYXR0cmlidXRlX18oKGFsaWduZWQgKDQpKSkKLSAgI2VuZGlmCisjaWZuZGVmIF9fQUxJR05fQkVHSU4KKyNkZWZpbmUgX19BTElHTl9CRUdJTgorI2VuZGlmCisjaWZuZGVmIF9fQUxJR05fRU5ECisjZGVmaW5lIF9fQUxJR05fRU5EICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkICg0KSkpCisjZW5kaWYKICNlbGlmIGRlZmluZWQgKF9fR05VQ19fKSAvKiBHTlUgQ29tcGlsZXIgKi8KLSAgI2lmbmRlZiBfX0FMSUdOX0VORAotICAgICNkZWZpbmUgX19BTElHTl9FTkQgIF9fYXR0cmlidXRlX18oKGFsaWduZWQgKDQpKSkKLSAgI2VuZGlmIC8qIF9fQUxJR05fRU5EICovCi0gICNpZm5kZWYgX19BTElHTl9CRUdJTgotICAgICNkZWZpbmUgX19BTElHTl9CRUdJTgotICAjZW5kaWYgLyogX19BTElHTl9CRUdJTiAqLworI2lmbmRlZiBfX0FMSUdOX0VORAorI2RlZmluZSBfX0FMSUdOX0VORCAgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCAoNCkpKQorI2VuZGlmIC8qIF9fQUxJR05fRU5EICovCisjaWZuZGVmIF9fQUxJR05fQkVHSU4KKyNkZWZpbmUgX19BTElHTl9CRUdJTgorI2VuZGlmIC8qIF9fQUxJR05fQkVHSU4gKi8KICNlbHNlCi0gICNpZm5kZWYgX19BTElHTl9FTkQKLSAgICAjZGVmaW5lIF9fQUxJR05fRU5ECi0gICNlbmRpZiAvKiBfX0FMSUdOX0VORCAqLwotICAjaWZuZGVmIF9fQUxJR05fQkVHSU4KLSAgICAjaWYgZGVmaW5lZCAoX19JQ0NBUk1fXykgICAgLyogSUFSIENvbXBpbGVyICovCi0gICAgICAjZGVmaW5lIF9fQUxJR05fQkVHSU4KLSAgICAjZW5kaWYgLyogX19JQ0NBUk1fXyAqLwotICAjZW5kaWYgLyogX19BTElHTl9CRUdJTiAqLworI2lmbmRlZiBfX0FMSUdOX0VORAorI2RlZmluZSBfX0FMSUdOX0VORAorI2VuZGlmIC8qIF9fQUxJR05fRU5EICovCisjaWZuZGVmIF9fQUxJR05fQkVHSU4KKyNpZiBkZWZpbmVkIChfX0lDQ0FSTV9fKSAgICAvKiBJQVIgQ29tcGlsZXIgKi8KKyNkZWZpbmUgX19BTElHTl9CRUdJTgorI2VuZGlmIC8qIF9fSUNDQVJNX18gKi8KKyNlbmRpZiAvKiBfX0FMSUdOX0JFR0lOICovCiAjZW5kaWYgLyogX19HTlVDX18gKi8KIAogLyoqCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNXh4X2hhbF9leHRpLmggYi9JbmMvc3RtMzJsNXh4X2hhbF9leHRpLmgKaW5kZXggOWU2ZjZmYy4uMTIyMjhjMyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDV4eF9oYWxfZXh0aS5oCisrKyBiL0luYy9zdG0zMmw1eHhfaGFsX2V4dGkuaApAQCAtMjUyLDIyICsyNTIsMjIgQEAKIC8qKiBAZGVmZ3JvdXAgRVhUSV9Qcml2YXRlX01hY3JvcyBFWFRJIFByaXZhdGUgTWFjcm9zCiAgICogQHsKICAgKi8KLSNkZWZpbmUgSVNfRVhUSV9MSU5FKF9fTElORV9fKSAgICAgICAgICAoKCgoX19MSU5FX18pICYgfihFWFRJX1BST1BFUlRZX01BU0sgfCBFWFRJX1JFR19NQVNLIHwgRVhUSV9QSU5fTUFTSykpID09IDB4MDBVKSAmJiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKF9fTElORV9fKSAmIEVYVElfUFJPUEVSVFlfTUFTSykgPT0gRVhUSV9ESVJFQ1QpICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0xJTkVfXykgJiBFWFRJX1BST1BFUlRZX01BU0spID09IEVYVElfQ09ORklHKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19MSU5FX18pICYgRVhUSV9QUk9QRVJUWV9NQVNLKSA9PSBFWFRJX0dQSU8pKSAgICAmJiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fTElORV9fKSAmIChFWFRJX1JFR19NQVNLIHwgRVhUSV9QSU5fTUFTSykpICAgICAgPCBcCisjZGVmaW5lIElTX0VYVElfTElORShfX0VYVElfTElORV9fKSAgICAoKCgoX19FWFRJX0xJTkVfXykgJiB+KEVYVElfUFJPUEVSVFlfTUFTSyB8IEVYVElfUkVHX01BU0sgfCBFWFRJX1BJTl9NQVNLKSkgPT0gMHgwMFUpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgoX19FWFRJX0xJTkVfXykgJiBFWFRJX1BST1BFUlRZX01BU0spID09IEVYVElfRElSRUNUKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19FWFRJX0xJTkVfXykgJiBFWFRJX1BST1BFUlRZX01BU0spID09IEVYVElfQ09ORklHKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19FWFRJX0xJTkVfXykgJiBFWFRJX1BST1BFUlRZX01BU0spID09IEVYVElfR1BJTykpICAgICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19FWFRJX0xJTkVfXykgJiAoRVhUSV9SRUdfTUFTSyB8IEVYVElfUElOX01BU0spKSAgICAgIDwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChFWFRJX0xJTkVfTkIgLyAzMlUpIDw8IEVYVElfUkVHX1NISUZUKSB8IChFWFRJX0xJTkVfTkIgJSAzMlUpKSkpCiAKLSNkZWZpbmUgSVNfRVhUSV9NT0RFKF9fTElORV9fKSAgICAgICAgICAoKCgoX19MSU5FX18pICYgRVhUSV9NT0RFX01BU0spICE9IDB4MDBVKSAmJiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fTElORV9fKSAmIH5FWFRJX01PREVfTUFTSykgPT0gMHgwMFUpKQorI2RlZmluZSBJU19FWFRJX01PREUoX19FWFRJX0xJTkVfXykgICAgKCgoKF9fRVhUSV9MSU5FX18pICYgRVhUSV9NT0RFX01BU0spICE9IDB4MDBVKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19FWFRJX0xJTkVfXykgJiB+RVhUSV9NT0RFX01BU0spID09IDB4MDBVKSkKIAotI2RlZmluZSBJU19FWFRJX1RSSUdHRVIoX19MSU5FX18pICAgICAgICgoKF9fTElORV9fKSAmIH5FWFRJX1RSSUdHRVJfTUFTSykgPT0gMHgwMFUpCisjZGVmaW5lIElTX0VYVElfVFJJR0dFUihfX0VYVElfTElORV9fKSAgICAgICAoKChfX0VYVElfTElORV9fKSAmIH5FWFRJX1RSSUdHRVJfTUFTSykgPT0gMHgwMFUpCiAKLSNkZWZpbmUgSVNfRVhUSV9QRU5ESU5HX0VER0UoX19MSU5FX18pICAoKChfX0xJTkVfXykgPT0gRVhUSV9UUklHR0VSX1JJU0lORykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTElORV9fKSA9PSBFWFRJX1RSSUdHRVJfRkFMTElORykpCisjZGVmaW5lIElTX0VYVElfUEVORElOR19FREdFKF9fRVhUSV9MSU5FX18pICAoKChfX0VYVElfTElORV9fKSA9PSBFWFRJX1RSSUdHRVJfUklTSU5HKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0VYVElfTElORV9fKSA9PSBFWFRJX1RSSUdHRVJfRkFMTElORykpCiAKLSNkZWZpbmUgSVNfRVhUSV9DT05GSUdfTElORShfX0xJTkVfXykgICAoKChfX0xJTkVfXykgJiBFWFRJX0NPTkZJRykgIT0gMHgwMFUpCisjZGVmaW5lIElTX0VYVElfQ09ORklHX0xJTkUoX19FWFRJX0xJTkVfXykgICAoKChfX0VYVElfTElORV9fKSAmIEVYVElfQ09ORklHKSAhPSAweDAwVSkKIAogI2RlZmluZSBJU19FWFRJX0dQSU9fUE9SVChfX1BPUlRfXykgICAgICgoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9BKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT1JUX18pID09IEVYVElfR1BJT0IpIHx8IFwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw1eHhfaGFsX2d0emMuaCBiL0luYy9zdG0zMmw1eHhfaGFsX2d0emMuaAppbmRleCBjYjIwYjNhLi4zZTFiMmNlIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNXh4X2hhbF9ndHpjLmgKKysrIGIvSW5jL3N0bTMybDV4eF9oYWxfZ3R6Yy5oCkBAIC0zNDgsOCArMzQ4LDggQEAKIC8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qKiBAZGVmZ3JvdXAgR1RaQ19Qcml2YXRlX01hY3JvcyBHVFpDIFByaXZhdGUgTWFjcm9zCi0gKiBAewotICovCisgICogQHsKKyAgKi8KIAogLyogcmV0cmlldmUgaW5mb3JtYXRpb24gdG8gYWNjZXNzIHJlZ2lzdGVyIGZvciBhIHNwZWNpZmljIFBlcmlwaElkICovCiAjZGVmaW5lIEdUWkNfR0VUX1JFR19JTkRFWChwZXJpcGhfaWQpXApAQCAtMzc2LDE1ICszNzYsMTUgQEAKIC8qIEV4cG9ydGVkIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qKiBAZGVmZ3JvdXAgR1RaQ19FeHBvcnRlZF9NYWNyb3MgR1RaQyBFeHBvcnRlZCBNYWNyb3MKLSAqIEB7Ci0gKi8KKyAgKiBAeworICAqLwogCiAvKiB1c2VyLW9yaWVudGVkIG1hY3JvIHRvIGdldCBhcnJheSBpbmRleCBvZiBhIHNwZWNpZmljIFBlcmlwaElkCi0gKiBpbiBjYXNlIG9mIEdUWkNfUEVSSVBIX0FMTCB1c2FnZSBpbiB0aGUgdHdvIGZvbGxvd2luZyBmdW5jdGlvbnM6Ci0gKiBIQUxfR1RaQ19UWlNDX0NvbmZpZ1BlcmlwaEF0dHJpYnV0ZXMoKSBhbmQgSEFMX0dUWkNfVFpTQ19HZXRDb25maWdQZXJpcGhBdHRyaWJ1dGVzKCkKLSAqLworICAqIGluIGNhc2Ugb2YgR1RaQ19QRVJJUEhfQUxMIHVzYWdlIGluIHRoZSB0d28gZm9sbG93aW5nIGZ1bmN0aW9uczoKKyAgKiBIQUxfR1RaQ19UWlNDX0NvbmZpZ1BlcmlwaEF0dHJpYnV0ZXMoKSBhbmQgSEFMX0dUWkNfVFpTQ19HZXRDb25maWdQZXJpcGhBdHRyaWJ1dGVzKCkKKyAgKi8KICNkZWZpbmUgSEFMX0dUWkNfR0VUX0FSUkFZX0lOREVYKHBlcmlwaF9pZClcCi0oIChHVFpDX0dFVF9SRUdfSU5ERVgoKHBlcmlwaF9pZCkpICogMzJVKSArIEdUWkNfR0VUX1BFUklQSF9QT1MoKHBlcmlwaF9pZCkpICkKKyAgKCAoR1RaQ19HRVRfUkVHX0lOREVYKChwZXJpcGhfaWQpKSAqIDMyVSkgKyBHVFpDX0dFVF9QRVJJUEhfUE9TKChwZXJpcGhfaWQpKSApCiAKIC8qKgogICAqIEB9CkBAIC00MTcsMTIgKzQxNywxMCBAQAogICAqIEB7CiAgICovCiAKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9HVFpDX1RaU0NfTVBDV01fQ29uZmlnTWVtQXR0cmlidXRlcygKLSAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBNZW1CYXNlQWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICBNUENXTV9Db25maWdUeXBlRGVmICpwTVBDV01fRGVzYyk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfR1RaQ19UWlNDX01QQ1dNX0dldENvbmZpZ01lbUF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgTWVtQmFzZUFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgTVBDV01fQ29uZmlnVHlwZURlZiAqcE1QQ1dNX0Rlc2MpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0dUWkNfVFpTQ19NUENXTV9Db25maWdNZW1BdHRyaWJ1dGVzKHVpbnQzMl90IE1lbUJhc2VBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QQ1dNX0NvbmZpZ1R5cGVEZWYgKnBNUENXTV9EZXNjKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9HVFpDX1RaU0NfTVBDV01fR2V0Q29uZmlnTWVtQXR0cmlidXRlcyh1aW50MzJfdCBNZW1CYXNlQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUENXTV9Db25maWdUeXBlRGVmICpwTVBDV01fRGVzYyk7CiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDV4eF9oYWxfaWNhY2hlLmggYi9JbmMvc3RtMzJsNXh4X2hhbF9pY2FjaGUuaAppbmRleCBmZmZlZmQ0Li45MGJiOTQ3IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNXh4X2hhbF9pY2FjaGUuaAorKysgYi9JbmMvc3RtMzJsNXh4X2hhbF9pY2FjaGUuaApAQCAtMTg3LDcgKzE4Nyw3IEBACiAgICogQHJldHZhbCBUaGUgc3RhdGUgb2YgX19JTlRFUlJVUFRfXyAoMCBvciAxKS4KICAgKi8KICNkZWZpbmUgX19IQUxfSUNBQ0hFX0dFVF9JVF9TT1VSQ0UoX19JTlRFUlJVUFRfXykgIFwKLSAgICAgICAgICAoKFJFQURfQklUKElDQUNIRS0+SUVSLCAoX19JTlRFUlJVUFRfXykpID09IChfX0lOVEVSUlVQVF9fKSkgPyAxVSA6IDBVKQorICAoKFJFQURfQklUKElDQUNIRS0+SUVSLCAoX19JTlRFUlJVUFRfXykpID09IChfX0lOVEVSUlVQVF9fKSkgPyAxVSA6IDBVKQogCiAvKiogQGJyaWVmICBDaGVjayB3aGV0aGVyIHRoZSBzZWxlY3RlZCBJQ0FDSEUgZmxhZyBpcyBzZXQgb3Igbm90LgogICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNoZWNrLgpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDV4eF9oYWxfaXJkYS5oIGIvSW5jL3N0bTMybDV4eF9oYWxfaXJkYS5oCmluZGV4IDg0MTk0YzEuLmQyYWVmMGQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw1eHhfaGFsX2lyZGEuaAorKysgYi9JbmMvc3RtMzJsNXh4X2hhbF9pcmRhLmgKQEAgLTkwLDcgKzkwLDcgQEAKICAgKiAgICAgICAgICAgICAxMSA6IEVycm9yCiAgICogICAgICAgICAgYjUgICAgIFBlcmlwaGVyYWwgaW5pdGlhbGl6YXRpb24gc3RhdHVzCiAgICogICAgICAgICAgICAgMCAgOiBSZXNldCAoUGVyaXBoZXJhbCBub3QgaW5pdGlhbGl6ZWQpCi0gICogICAgICAgICAgICAgMSAgOiBJbml0IGRvbmUgKFBlcmlwaGVyYWwgbm90IGluaXRpYWxpemVkLiBIQUwgSVJEQSBJbml0IGZ1bmN0aW9uIGFscmVhZHkgY2FsbGVkKQorICAqICAgICAgICAgICAgIDEgIDogSW5pdCBkb25lIChQZXJpcGhlcmFsIGluaXRpYWxpemVkLiBIQUwgSVJEQSBJbml0IGZ1bmN0aW9uIGFscmVhZHkgY2FsbGVkKQogICAqICAgICAgICAgIGI0LWIzICAobm90IHVzZWQpCiAgICogICAgICAgICAgICAgeHggOiBTaG91bGQgYmUgc2V0IHRvIDAwCiAgICogICAgICAgICAgYjIgICAgIEludHJpbnNpYyBwcm9jZXNzIHN0YXRlCkBAIC0xMDcsNyArMTA3LDcgQEAKICAgKiAgICAgICAgICAgICB4eCA6IFNob3VsZCBiZSBzZXQgdG8gMDAKICAgKiAgICAgICAgICBiNSAgICAgUGVyaXBoZXJhbCBpbml0aWFsaXphdGlvbiBzdGF0dXMKICAgKiAgICAgICAgICAgICAwICA6IFJlc2V0IChQZXJpcGhlcmFsIG5vdCBpbml0aWFsaXplZCkKLSAgKiAgICAgICAgICAgICAxICA6IEluaXQgZG9uZSAoUGVyaXBoZXJhbCBub3QgaW5pdGlhbGl6ZWQpCisgICogICAgICAgICAgICAgMSAgOiBJbml0IGRvbmUgKFBlcmlwaGVyYWwgaW5pdGlhbGl6ZWQpCiAgICogICAgICAgICAgYjQtYjIgIChub3QgdXNlZCkKICAgKiAgICAgICAgICAgIHh4eCA6IFNob3VsZCBiZSBzZXQgdG8gMDAwCiAgICogICAgICAgICAgYjEgICAgIFJ4IHN0YXRlCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNXh4X2hhbF9pd2RnLmggYi9JbmMvc3RtMzJsNXh4X2hhbF9pd2RnLmgKaW5kZXggZDFhODRkMi4uZTM3NDIzZSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDV4eF9oYWxfaXdkZy5oCisrKyBiL0luYy9zdG0zMmw1eHhfaGFsX2l3ZGcuaApAQCAtODcsNyArODcsNiBAQAogI2RlZmluZSBJV0RHX1BSRVNDQUxFUl82NCAgICAgICAgICAgICAgIElXREdfUFJfUFJfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVdERyBwcmVzY2FsZXIgc2V0IHRvIDY0ICAqLwogI2RlZmluZSBJV0RHX1BSRVNDQUxFUl8xMjggICAgICAgICAgICAgIChJV0RHX1BSX1BSXzIgfCBJV0RHX1BSX1BSXzApICAgICAgICAgICAgICAgICAgIC8qITwgSVdERyBwcmVzY2FsZXIgc2V0IHRvIDEyOCAqLwogI2RlZmluZSBJV0RHX1BSRVNDQUxFUl8yNTYgICAgICAgICAgICAgIChJV0RHX1BSX1BSXzIgfCBJV0RHX1BSX1BSXzEpICAgICAgICAgICAgICAgICAgIC8qITwgSVdERyBwcmVzY2FsZXIgc2V0IHRvIDI1NiAqLwotCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTAwLDcgKzk5LDYgQEAKICAgKiBAfQogICAqLwogCi0KIC8qKgogICAqIEB9CiAgICovCkBAIC0xMzgsNyArMTM2LDcgQEAKICAgKiBAewogICAqLwogLyogSW5pdGlhbGl6YXRpb24vU3RhcnQgZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JV0RHX0luaXQoSVdER19IYW5kbGVUeXBlRGVmICpoaXdkZyk7CitIQUxfU3RhdHVzVHlwZURlZiAgICAgSEFMX0lXREdfSW5pdChJV0RHX0hhbmRsZVR5cGVEZWYgKmhpd2RnKTsKIC8qKgogICAqIEB9CiAgICovCkBAIC0xNDcsNyArMTQ1LDcgQEAKICAgKiBAewogICAqLwogLyogSS9PIG9wZXJhdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JV0RHX1JlZnJlc2goSVdER19IYW5kbGVUeXBlRGVmICpoaXdkZyk7CitIQUxfU3RhdHVzVHlwZURlZiAgICAgSEFMX0lXREdfUmVmcmVzaChJV0RHX0hhbmRsZVR5cGVEZWYgKmhpd2RnKTsKIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNXh4X2hhbF9scHRpbS5oIGIvSW5jL3N0bTMybDV4eF9oYWxfbHB0aW0uaAppbmRleCBjMWEyYjgzLi42YWI4OTFiIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNXh4X2hhbF9scHRpbS5oCisrKyBiL0luYy9zdG0zMmw1eHhfaGFsX2xwdGltLmgKQEAgLTM5NCwxMCArMzk0LDEwIEBACiAgICovCiAjaWYgKFVTRV9IQUxfTFBUSU1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAjZGVmaW5lIF9fSEFMX0xQVElNX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPlN0YXRlICAgICAgICAgICAgID0gSEFMX0xQVElNX1NUQVRFX1JFU0VUOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk1zcEluaXRDYWxsYmFjayAgID0gTlVMTDsgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk1zcERlSW5pdENhbGxiYWNrID0gTlVMTDsgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5TdGF0ZSAgICAgICAgICAgICA9IEhBTF9MUFRJTV9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk1zcEluaXRDYWxsYmFjayAgID0gTlVMTDsgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+TXNwRGVJbml0Q2FsbGJhY2sgPSBOVUxMOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKICNlbHNlCiAjZGVmaW5lIF9fSEFMX0xQVElNX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSAoKF9fSEFORExFX18pLT5TdGF0ZSA9IEhBTF9MUFRJTV9TVEFURV9SRVNFVCkKICNlbmRpZiAvKiBVU0VfSEFMX0xQVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLwpAQCAtNTczLDcgKzU3Myw4IEBACiAgICogQHJldHZhbCBJbnRlcnJ1cHQgc3RhdHVzLgogICAqLwogCi0jZGVmaW5lIF9fSEFMX0xQVElNX0dFVF9JVF9TT1VSQ0UoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SUVSICYgKF9fSU5URVJSVVBUX18pKSA9PSAoX19JTlRFUlJVUFRfXykpID8gU0VUIDogUkVTRVQpCisjZGVmaW5lIF9fSEFMX0xQVElNX0dFVF9JVF9TT1VSQ0UoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SUVSXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgKF9fSU5URVJSVVBUX18pKSA9PSAoX19JTlRFUlJVUFRfXykpID8gU0VUIDogUkVTRVQpCiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIHRoZSBMUFRJTTEgRVhUSSBsaW5lIGluIGludGVycnVwdCBtb2RlLgpAQCAtNTg1LDcgKzU4Niw4IEBACiAgICogQGJyaWVmICBEaXNhYmxlIHRoZSBMUFRJTTEgRVhUSSBsaW5lIGluIGludGVycnVwdCBtb2RlLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBfX0hBTF9MUFRJTV9MUFRJTTFfRVhUSV9ESVNBQkxFX0lUKCkgICAgICAgICAgIChFWFRJLT5JTVIyICY9IH4oTFBUSU1fRVhUSV9MSU5FX0xQVElNMSkpCisjZGVmaW5lIF9fSEFMX0xQVElNX0xQVElNMV9FWFRJX0RJU0FCTEVfSVQoKSAgICAgICAgICAgKEVYVEktPklNUjJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICY9IH4oTFBUSU1fRVhUSV9MSU5FX0xQVElNMSkpCiAKIAogLyoqCkBAIC01OTgsNyArNjAwLDggQEAKICAgKiBAYnJpZWYgIERpc2FibGUgdGhlIExQVElNMSBFWFRJIGxpbmUgaW4gZXZlbnQgbW9kZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgX19IQUxfTFBUSU1fTFBUSU0xX0VYVElfRElTQUJMRV9FVkVOVCgpICAgICAgICAoRVhUSS0+RU1SMiAmPSB+KExQVElNX0VYVElfTElORV9MUFRJTTEpKQorI2RlZmluZSBfX0hBTF9MUFRJTV9MUFRJTTFfRVhUSV9ESVNBQkxFX0VWRU5UKCkgICAgICAgIChFWFRJLT5FTVIyXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmPSB+KExQVElNX0VYVElfTElORV9MUFRJTTEpKQogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgTFBUSU0yIEVYVEkgbGluZSBpbiBpbnRlcnJ1cHQgbW9kZS4KQEAgLTYxMCw3ICs2MTMsOCBAQAogICAqIEBicmllZiAgRGlzYWJsZSB0aGUgTFBUSU0yIEVYVEkgbGluZSBpbiBpbnRlcnJ1cHQgbW9kZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgX19IQUxfTFBUSU1fTFBUSU0yX0VYVElfRElTQUJMRV9JVCgpICAgICAgICAgICAoRVhUSS0+SU1SMiAmPSB+KExQVElNX0VYVElfTElORV9MUFRJTTIpKQorI2RlZmluZSBfX0hBTF9MUFRJTV9MUFRJTTJfRVhUSV9ESVNBQkxFX0lUKCkgICAgICAgICAgIChFWFRJLT5JTVIyXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmPSB+KExQVElNX0VYVElfTElORV9MUFRJTTIpKQogCiAKIC8qKgpAQCAtNjIzLDcgKzYyNyw4IEBACiAgICogQGJyaWVmICBEaXNhYmxlIHRoZSBMUFRJTTIgRVhUSSBsaW5lIGluIGV2ZW50IG1vZGUuCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIF9fSEFMX0xQVElNX0xQVElNMl9FWFRJX0RJU0FCTEVfRVZFTlQoKSAgICAgICAgKEVYVEktPkVNUjIgJj0gfihMUFRJTV9FWFRJX0xJTkVfTFBUSU0yKSkKKyNkZWZpbmUgX19IQUxfTFBUSU1fTFBUSU0yX0VYVElfRElTQUJMRV9FVkVOVCgpICAgICAgICAoRVhUSS0+RU1SMlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJj0gfihMUFRJTV9FWFRJX0xJTkVfTFBUSU0yKSkKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgdGhlIExQVElNMyBFWFRJIGxpbmUgaW4gaW50ZXJydXB0IG1vZGUuCkBAIC02MzUsNyArNjQwLDggQEAKICAgKiBAYnJpZWYgIERpc2FibGUgdGhlIExQVElNMyBFWFRJIGxpbmUgaW4gaW50ZXJydXB0IG1vZGUuCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIF9fSEFMX0xQVElNX0xQVElNM19FWFRJX0RJU0FCTEVfSVQoKSAgICAgICAgICAgKEVYVEktPklNUjIgJj0gfihMUFRJTV9FWFRJX0xJTkVfTFBUSU0zKSkKKyNkZWZpbmUgX19IQUxfTFBUSU1fTFBUSU0zX0VYVElfRElTQUJMRV9JVCgpICAgICAgICAgICAoRVhUSS0+SU1SMlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJj0gfihMUFRJTV9FWFRJX0xJTkVfTFBUSU0zKSkKIAogCiAvKioKQEAgLTY0OCw3ICs2NTQsOCBAQAogICAqIEBicmllZiAgRGlzYWJsZSB0aGUgTFBUSU0zIEVYVEkgbGluZSBpbiBldmVudCBtb2RlLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBfX0hBTF9MUFRJTV9MUFRJTTNfRVhUSV9ESVNBQkxFX0VWRU5UKCkgICAgICAgIChFWFRJLT5FTVIyICY9IH4oTFBUSU1fRVhUSV9MSU5FX0xQVElNMykpCisjZGVmaW5lIF9fSEFMX0xQVElNX0xQVElNM19FWFRJX0RJU0FCTEVfRVZFTlQoKSAgICAgICAgKEVYVEktPkVNUjJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICY9IH4oTFBUSU1fRVhUSV9MSU5FX0xQVElNMykpCiAKIC8qKgogICAqIEB9CkBAIC02NjAsOSArNjY3LDkgQEAKICAgKi8KIAogLyoqIEBhZGR0b2dyb3VwIExQVElNX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEKLSAqICBAYnJpZWYgICAgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLgotICogQHsKLSAqLworICAqICBAYnJpZWYgICAgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLgorICAqIEB7CisgICovCiAvKiBJbml0aWFsaXphdGlvbi9kZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0xQVElNX0luaXQoTFBUSU1fSGFuZGxlVHlwZURlZiAqaGxwdGltKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9MUFRJTV9EZUluaXQoTFBUSU1fSGFuZGxlVHlwZURlZiAqaGxwdGltKTsKQEAgLTY3NSw5ICs2ODIsOSBAQAogICAqLwogCiAvKiogQGFkZHRvZ3JvdXAgTFBUSU1fRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMgotICogIEBicmllZiAgIFN0YXJ0LVN0b3Agb3BlcmF0aW9uIGZ1bmN0aW9ucy4KLSAqIEB7Ci0gKi8KKyAgKiAgQGJyaWVmICAgU3RhcnQtU3RvcCBvcGVyYXRpb24gZnVuY3Rpb25zLgorICAqIEB7CisgICovCiAvKiBTdGFydC9TdG9wIG9wZXJhdGlvbiBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBQV00gTW9kZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyovCiAvKiBCbG9ja2luZyBtb2RlOiBQb2xsaW5nICovCkBAIC03MzEsOSArNzM4LDkgQEAKICAgKi8KIAogLyoqIEBhZGR0b2dyb3VwIExQVElNX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMKLSAqICBAYnJpZWYgIFJlYWQgb3BlcmF0aW9uIGZ1bmN0aW9ucy4KLSAqIEB7Ci0gKi8KKyAgKiAgQGJyaWVmICBSZWFkIG9wZXJhdGlvbiBmdW5jdGlvbnMuCisgICogQHsKKyAgKi8KIC8qIFJlYWRpbmcgb3BlcmF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB1aW50MzJfdCBIQUxfTFBUSU1fUmVhZENvdW50ZXIoTFBUSU1fSGFuZGxlVHlwZURlZiAqaGxwdGltKTsKIHVpbnQzMl90IEhBTF9MUFRJTV9SZWFkQXV0b1JlbG9hZChMUFRJTV9IYW5kbGVUeXBlRGVmICpobHB0aW0pOwpAQCAtNzQzLDkgKzc1MCw5IEBACiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBMUFRJTV9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA0Ci0gKiAgQGJyaWVmICBMUFRJTSBJUlEgaGFuZGxlciBhbmQgY2FsbGJhY2sgZnVuY3Rpb25zLgotICogQHsKLSAqLworICAqICBAYnJpZWYgIExQVElNIElSUSBoYW5kbGVyIGFuZCBjYWxsYmFjayBmdW5jdGlvbnMuCisgICogQHsKKyAgKi8KIC8qIExQVElNIElSUSBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIEhBTF9MUFRJTV9JUlFIYW5kbGVyKExQVElNX0hhbmRsZVR5cGVEZWYgKmhscHRpbSk7CiAKQEAgLTc2Miw3ICs3NjksOCBAQAogCiAvKiBDYWxsYmFja3MgUmVnaXN0ZXIvVW5SZWdpc3RlciBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmIChVU0VfSEFMX0xQVElNX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0xQVElNX1JlZ2lzdGVyQ2FsbGJhY2soTFBUSU1fSGFuZGxlVHlwZURlZiAqbHBodGltLCBIQUxfTFBUSU1fQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwgcExQVElNX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0xQVElNX1JlZ2lzdGVyQ2FsbGJhY2soTFBUSU1fSGFuZGxlVHlwZURlZiAqbHBodGltLCBIQUxfTFBUSU1fQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMUFRJTV9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9MUFRJTV9VblJlZ2lzdGVyQ2FsbGJhY2soTFBUSU1fSGFuZGxlVHlwZURlZiAqbHBodGltLCBIQUxfTFBUSU1fQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCk7CiAjZW5kaWYgLyogVVNFX0hBTF9MUFRJTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIC8qKgpAQCAtNzcwLDkgKzc3OCw5IEBACiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBMUFRJTV9Hcm91cDUKLSAqICBAYnJpZWYgICBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucy4KLSAqIEB7Ci0gKi8KKyAgKiAgQGJyaWVmICAgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMuCisgICogQHsKKyAgKi8KIC8qIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBIQUxfTFBUSU1fU3RhdGVUeXBlRGVmIEhBTF9MUFRJTV9HZXRTdGF0ZShMUFRJTV9IYW5kbGVUeXBlRGVmICpobHB0aW0pOwogLyoqCkBAIC04NzgsMjYgKzg4NiwyNiBAQAogI2RlZmluZSBJU19MUFRJTV9SRVBFVElUSU9OKF9fUkVQRVRJVElPTl9fKSAgICAgKChfX1JFUEVUSVRJT05fXykgPD0gMHgwMDAwMDBGRlVMKQogCiAjZGVmaW5lIElTX0xQVElNX0lOUFVUMV9TT1VSQ0UoX19JTlNUQU5DRV9fLCBfX1NPVVJDRV9fKSAgICAgXAotICAgICgoKChfX0lOU1RBTkNFX18pID09IExQVElNMSkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgKCgoX19TT1VSQ0VfXykgPT0gTFBUSU1fSU5QVVQxU09VUkNFX0dQSU8pIHx8ICAgICAgICAgICBcCi0gICAgICAoKF9fU09VUkNFX18pID09IExQVElNX0lOUFVUMVNPVVJDRV9DT01QMSkpKSAgICAgICAgICAgXAotICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgKCgoX19JTlNUQU5DRV9fKSA9PSBMUFRJTTIpICYmICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICgoKF9fU09VUkNFX18pID09IExQVElNX0lOUFVUMVNPVVJDRV9HUElPKSB8fCAgICAgICAgICAgXAotICAgICAgKChfX1NPVVJDRV9fKSA9PSBMUFRJTV9JTlBVVDFTT1VSQ0VfQ09NUDEpIHx8ICAgICAgICAgIFwKLSAgICAgICgoX19TT1VSQ0VfXykgPT0gTFBUSU1fSU5QVVQxU09VUkNFX0NPTVAyKSB8fCAgICAgICAgICBcCi0gICAgICAoKF9fU09VUkNFX18pID09IExQVElNX0lOUFVUMVNPVVJDRV9DT01QMV9DT01QMikpKSAgICAgXAotICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgKCgoX19JTlNUQU5DRV9fKSA9PSBMUFRJTTMpICYmICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICgoKF9fU09VUkNFX18pID09IExQVElNX0lOUFVUMVNPVVJDRV9HUElPKSAgfHwgICAgICAgICAgXAotICAgICAgKChfX1NPVVJDRV9fKSA9PSBMUFRJTV9JTlBVVDFTT1VSQ0VfQ09NUDEpIHx8ICAgICAgICAgIFwKLSAgICAgICgoX19TT1VSQ0VfXykgPT0gTFBUSU1fSU5QVVQxU09VUkNFX0NPTVAyKSB8fCAgICAgICAgICBcCi0gICAgICAoKF9fU09VUkNFX18pID09IExQVElNX0lOUFVUMVNPVVJDRV9DT01QMV9DT01QMikpKSkKKyAgKCgoKF9fSU5TVEFOQ0VfXykgPT0gTFBUSU0xKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoKF9fU09VUkNFX18pID09IExQVElNX0lOUFVUMVNPVVJDRV9HUElPKSB8fCAgICAgICAgICAgXAorICAgICAoKF9fU09VUkNFX18pID09IExQVElNX0lOUFVUMVNPVVJDRV9DT01QMSkpKSAgICAgICAgICAgXAorICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAoKChfX0lOU1RBTkNFX18pID09IExQVElNMikgJiYgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKChfX1NPVVJDRV9fKSA9PSBMUFRJTV9JTlBVVDFTT1VSQ0VfR1BJTykgfHwgICAgICAgICAgIFwKKyAgICAgKChfX1NPVVJDRV9fKSA9PSBMUFRJTV9JTlBVVDFTT1VSQ0VfQ09NUDEpIHx8ICAgICAgICAgIFwKKyAgICAgKChfX1NPVVJDRV9fKSA9PSBMUFRJTV9JTlBVVDFTT1VSQ0VfQ09NUDIpIHx8ICAgICAgICAgIFwKKyAgICAgKChfX1NPVVJDRV9fKSA9PSBMUFRJTV9JTlBVVDFTT1VSQ0VfQ09NUDFfQ09NUDIpKSkgICAgIFwKKyAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgKCgoX19JTlNUQU5DRV9fKSA9PSBMUFRJTTMpICYmICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCgoX19TT1VSQ0VfXykgPT0gTFBUSU1fSU5QVVQxU09VUkNFX0dQSU8pICB8fCAgICAgICAgICBcCisgICAgICgoX19TT1VSQ0VfXykgPT0gTFBUSU1fSU5QVVQxU09VUkNFX0NPTVAxKSB8fCAgICAgICAgICBcCisgICAgICgoX19TT1VSQ0VfXykgPT0gTFBUSU1fSU5QVVQxU09VUkNFX0NPTVAyKSB8fCAgICAgICAgICBcCisgICAgICgoX19TT1VSQ0VfXykgPT0gTFBUSU1fSU5QVVQxU09VUkNFX0NPTVAxX0NPTVAyKSkpKQogCiAjZGVmaW5lIElTX0xQVElNX0lOUFVUMl9TT1VSQ0UoX19JTlNUQU5DRV9fLCBfX1NPVVJDRV9fKSAgXAotICAgICAoKChfX0lOU1RBTkNFX18pID09IExQVElNMSkgJiYgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgKCgoX19TT1VSQ0VfXykgPT0gTFBUSU1fSU5QVVQyU09VUkNFX0dQSU8pIHx8ICAgICAgICBcCi0gICAgICAoKF9fU09VUkNFX18pID09IExQVElNX0lOUFVUMlNPVVJDRV9DT01QMikpKQorICAoKChfX0lOU1RBTkNFX18pID09IExQVElNMSkgJiYgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICgoKF9fU09VUkNFX18pID09IExQVElNX0lOUFVUMlNPVVJDRV9HUElPKSB8fCAgICAgICAgXAorICAgICgoX19TT1VSQ0VfXykgPT0gTFBUSU1fSU5QVVQyU09VUkNFX0NPTVAyKSkpCiAKIC8qKgogICAqIEB9CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNXh4X2hhbF9tbWMuaCBiL0luYy9zdG0zMmw1eHhfaGFsX21tYy5oCmluZGV4IDBhY2RkMTQuLmNjOWM5ZmIgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw1eHhfaGFsX21tYy5oCisrKyBiL0luYy9zdG0zMmw1eHhfaGFsX21tYy5oCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgKiAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICovIAorICAqLwogCiAvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2lmbmRlZiBTVE0zMkw1eHhfSEFMX01NQ19ICiAjZGVmaW5lIFNUTTMyTDV4eF9IQUxfTU1DX0gKIAogI2lmZGVmIF9fY3BsdXNwbHVzCi0gZXh0ZXJuICJDIiB7CitleHRlcm4gIkMiIHsKICNlbmRpZgogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNTQsNyArNTQsNyBAQAogICBIQUxfTU1DX1NUQVRFX1JFQ0VJVklORyAgICAgICAgICAgICAgPSAoKHVpbnQzMl90KTB4MDAwMDAwMDVVKSwgIC8qITwgTU1DIFJlY2VpbnZpbmcgU3RhdGUgICAgICAgICAgICAgICAgICovCiAgIEhBTF9NTUNfU1RBVEVfVFJBTlNGRVIgICAgICAgICAgICAgICA9ICgodWludDMyX3QpMHgwMDAwMDAwNlUpLCAgLyohPCBNTUMgVHJhbnNmZXIgU3RhdGUgICAgICAgICAgICAgICAgICAgKi8KICAgSEFMX01NQ19TVEFURV9FUlJPUiAgICAgICAgICAgICAgICAgID0gKCh1aW50MzJfdCkweDAwMDAwMDBGVSkgICAvKiE8IE1NQyBpcyBpbiBlcnJvciBzdGF0ZSAgICAgICAgICAgICAgICAqLwotfUhBTF9NTUNfU3RhdGVUeXBlRGVmOworfSBIQUxfTU1DX1N0YXRlVHlwZURlZjsKIC8qKgogICAqIEB9CiAgICovCkBAIC0xMDIsNyArMTAyLDcgQEAKIAogICB1aW50MzJfdCBMb2dCbG9ja1NpemU7ICAgICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyBsb2dpY2FsIGJsb2NrIHNpemUgaW4gYnl0ZXMgICAgICAgICAgICovCiAKLX1IQUxfTU1DX0NhcmRJbmZvVHlwZURlZjsKK30gSEFMX01NQ19DYXJkSW5mb1R5cGVEZWY7CiAKIC8qKgogICAqIEBicmllZiAgTU1DIGhhbmRsZSBTdHJ1Y3R1cmUgZGVmaW5pdGlvbgpAQCAtMTQyLDE5ICsxNDIsMTkgQEAKICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICBFeHRfQ1NEWzEyOF07CiAKICNpZiBkZWZpbmVkIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCi0gIHZvaWQgKCogVHhDcGx0Q2FsbGJhY2spICAgICAgICAgICAgICAgICAoc3RydWN0IF9fTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOwotICB2b2lkICgqIFJ4Q3BsdENhbGxiYWNrKSAgICAgICAgICAgICAgICAgKHN0cnVjdCBfX01NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKLSAgdm9pZCAoKiBFcnJvckNhbGxiYWNrKSAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgX19NTUNfSGFuZGxlVHlwZURlZiAqaG1tYyk7Ci0gIHZvaWQgKCogQWJvcnRDcGx0Q2FsbGJhY2spICAgICAgICAgICAgICAoc3RydWN0IF9fTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOwotICB2b2lkICgqIFJlYWRfRE1BRGJsQnVmMENwbHRDYWxsYmFjaykgICAgKHN0cnVjdCBfX01NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKLSAgdm9pZCAoKiBSZWFkX0RNQURibEJ1ZjFDcGx0Q2FsbGJhY2spICAgIChzdHJ1Y3QgX19NTUNfSGFuZGxlVHlwZURlZiAqaG1tYyk7Ci0gIHZvaWQgKCogV3JpdGVfRE1BRGJsQnVmMENwbHRDYWxsYmFjaykgICAoc3RydWN0IF9fTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOwotICB2b2lkICgqIFdyaXRlX0RNQURibEJ1ZjFDcGx0Q2FsbGJhY2spICAgKHN0cnVjdCBfX01NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKKyAgdm9pZCAoKiBUeENwbHRDYWxsYmFjaykoc3RydWN0IF9fTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOworICB2b2lkICgqIFJ4Q3BsdENhbGxiYWNrKShzdHJ1Y3QgX19NTUNfSGFuZGxlVHlwZURlZiAqaG1tYyk7CisgIHZvaWQgKCogRXJyb3JDYWxsYmFjaykoc3RydWN0IF9fTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOworICB2b2lkICgqIEFib3J0Q3BsdENhbGxiYWNrKShzdHJ1Y3QgX19NTUNfSGFuZGxlVHlwZURlZiAqaG1tYyk7CisgIHZvaWQgKCogUmVhZF9ETUFEYmxCdWYwQ3BsdENhbGxiYWNrKShzdHJ1Y3QgX19NTUNfSGFuZGxlVHlwZURlZiAqaG1tYyk7CisgIHZvaWQgKCogUmVhZF9ETUFEYmxCdWYxQ3BsdENhbGxiYWNrKShzdHJ1Y3QgX19NTUNfSGFuZGxlVHlwZURlZiAqaG1tYyk7CisgIHZvaWQgKCogV3JpdGVfRE1BRGJsQnVmMENwbHRDYWxsYmFjaykoc3RydWN0IF9fTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOworICB2b2lkICgqIFdyaXRlX0RNQURibEJ1ZjFDcGx0Q2FsbGJhY2spKHN0cnVjdCBfX01NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKIAotICB2b2lkICgqIE1zcEluaXRDYWxsYmFjaykgICAgICAgICAgICAgICAgKHN0cnVjdCBfX01NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKLSAgdm9pZCAoKiBNc3BEZUluaXRDYWxsYmFjaykgICAgICAgICAgICAgIChzdHJ1Y3QgX19NTUNfSGFuZGxlVHlwZURlZiAqaG1tYyk7Ci0jZW5kaWYKLX1NTUNfSGFuZGxlVHlwZURlZjsKKyAgdm9pZCAoKiBNc3BJbml0Q2FsbGJhY2spKHN0cnVjdCBfX01NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKKyAgdm9pZCAoKiBNc3BEZUluaXRDYWxsYmFjaykoc3RydWN0IF9fTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOworI2VuZGlmIC8qIFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUyAqLworfSBNTUNfSGFuZGxlVHlwZURlZjsKIAogCiAvKioKQEAgLTIwNCw3ICsyMDQsNyBAQAogICBfX0lPIHVpbnQ4X3QgIENTRF9DUkM7ICAgICAgICAgICAgICAvKiE8IENTRCBDUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgX19JTyB1aW50OF90ICBSZXNlcnZlZDQ7ICAgICAgICAgICAgLyohPCBBbHdheXMgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLX1IQUxfTU1DX0NhcmRDU0RUeXBlRGVmOworfSBIQUxfTU1DX0NhcmRDU0RUeXBlRGVmOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTIyNSw3ICsyMjUsNyBAQAogICBfX0lPIHVpbnQ4X3QgIENJRF9DUkM7ICAgICAgICAgLyohPCBDSUQgQ1JDICAgICAgICAgICAgICAgKi8KICAgX19JTyB1aW50OF90ICBSZXNlcnZlZDI7ICAgICAgIC8qITwgQWx3YXlzIDEgICAgICAgICAgICAgICovCiAKLX1IQUxfTU1DX0NhcmRDSURUeXBlRGVmOworfSBIQUxfTU1DX0NhcmRDSURUeXBlRGVmOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTI0Nyw3ICsyNDcsNyBAQAogCiAgIEhBTF9NTUNfTVNQX0lOSVRfQ0JfSUQgICAgICAgICAgICAgICAgPSAweDEwVSwgIC8qITwgTU1DIE1zcEluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgSEFMX01NQ19NU1BfREVJTklUX0NCX0lEICAgICAgICAgICAgICA9IDB4MTFVICAgLyohPCBNTUMgTXNwRGVJbml0IENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAqLwotfUhBTF9NTUNfQ2FsbGJhY2tJRFR5cGVEZWY7Cit9IEhBTF9NTUNfQ2FsbGJhY2tJRFR5cGVEZWY7CiAvKioKICAgKiBAfQogICAqLwpAQCAtMjU1LDExICsyNTUsMTEgQEAKIC8qKiBAZGVmZ3JvdXAgTU1DX0V4cG9ydGVkX1R5cGVzX0dyb3VwNyBNTUMgQ2FsbGJhY2sgcG9pbnRlciBkZWZpbml0aW9uCiAgICogQHsKICAgKi8KLXR5cGVkZWYgdm9pZCAoKnBNTUNfQ2FsbGJhY2tUeXBlRGVmKSAgICAgICAgICAgKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKK3R5cGVkZWYgdm9pZCAoKnBNTUNfQ2FsbGJhY2tUeXBlRGVmKShNTUNfSGFuZGxlVHlwZURlZiAqaG1tYyk7CiAvKioKICAgKiBAfQogICAqLwotI2VuZGlmCisjZW5kaWYgLyogVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjgyLDEzICsyODIsMTMgQEAKICNkZWZpbmUgSEFMX01NQ19FUlJPUl9UWF9VTkRFUlJVTiAgICAgICAgICAgICAgU0RNTUNfRVJST1JfVFhfVU5ERVJSVU4gICAgICAgICAgICAgLyohPCBUcmFuc21pdCBGSUZPIHVuZGVycnVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEhBTF9NTUNfRVJST1JfUlhfT1ZFUlJVTiAgICAgICAgICAgICAgIFNETU1DX0VSUk9SX1JYX09WRVJSVU4gICAgICAgICAgICAgIC8qITwgUmVjZWl2ZSBGSUZPIG92ZXJydW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBIQUxfTU1DX0VSUk9SX0FERFJfTUlTQUxJR05FRCAgICAgICAgICBTRE1NQ19FUlJPUl9BRERSX01JU0FMSUdORUQgICAgICAgICAvKiE8IE1pc2FsaWduZWQgYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFMX01NQ19FUlJPUl9CTE9DS19MRU5fRVJSICAgICAgICAgICAgU0RNTUNfRVJST1JfQkxPQ0tfTEVOX0VSUiAgICAgICAgICAgLyohPCBUcmFuc2ZlcnJlZCBibG9jayBsZW5ndGggaXMgbm90IGFsbG93ZWQgZm9yIHRoZSBjYXJkIG9yIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiB0cmFuc2ZlcnJlZCBieXRlcyBkb2VzIG5vdCBtYXRjaCB0aGUgYmxvY2sgbGVuZ3RoICAgKi8KKyNkZWZpbmUgSEFMX01NQ19FUlJPUl9CTE9DS19MRU5fRVJSICAgICAgICAgICAgU0RNTUNfRVJST1JfQkxPQ0tfTEVOX0VSUiAgICAgICAgICAgLyohPCBUcmFuc2ZlcnJlZCBibG9jayBsZW5ndGggaXMgbm90IGFsbG93ZWQgZm9yIHRoZSBjYXJkIG9yIHRoZSAgICovCisvKiE8IG51bWJlciBvZiB0cmFuc2ZlcnJlZCBieXRlcyBkb2VzIG5vdCBtYXRjaCB0aGUgYmxvY2sgbGVuZ3RoICAgKi8KICNkZWZpbmUgSEFMX01NQ19FUlJPUl9FUkFTRV9TRVFfRVJSICAgICAgICAgICAgU0RNTUNfRVJST1JfRVJBU0VfU0VRX0VSUiAgICAgICAgICAgLyohPCBBbiBlcnJvciBpbiB0aGUgc2VxdWVuY2Ugb2YgZXJhc2UgY29tbWFuZCBvY2N1cnMgICAgICAgICAgICAgICovCiAjZGVmaW5lIEhBTF9NTUNfRVJST1JfQkFEX0VSQVNFX1BBUkFNICAgICAgICAgIFNETU1DX0VSUk9SX0JBRF9FUkFTRV9QQVJBTSAgICAgICAgIC8qITwgQW4gaW52YWxpZCBzZWxlY3Rpb24gZm9yIGVyYXNlIGdyb3VwcyAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBIQUxfTU1DX0VSUk9SX1dSSVRFX1BST1RfVklPTEFUSU9OICAgICBTRE1NQ19FUlJPUl9XUklURV9QUk9UX1ZJT0xBVElPTiAgICAvKiE8IEF0dGVtcHQgdG8gcHJvZ3JhbSBhIHdyaXRlIHByb3RlY3QgYmxvY2sgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFMX01NQ19FUlJPUl9MT0NLX1VOTE9DS19GQUlMRUQgICAgICAgU0RNTUNfRVJST1JfTE9DS19VTkxPQ0tfRkFJTEVEICAgICAgLyohPCBTZXF1ZW5jZSBvciBwYXNzd29yZCBlcnJvciBoYXMgYmVlbiBkZXRlY3RlZCBpbiB1bmxvY2sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIG9yIGlmIHRoZXJlIHdhcyBhbiBhdHRlbXB0IHRvIGFjY2VzcyBhIGxvY2tlZCBjYXJkICAgICovCisjZGVmaW5lIEhBTF9NTUNfRVJST1JfTE9DS19VTkxPQ0tfRkFJTEVEICAgICAgIFNETU1DX0VSUk9SX0xPQ0tfVU5MT0NLX0ZBSUxFRCAgICAgIC8qITwgU2VxdWVuY2Ugb3IgcGFzc3dvcmQgZXJyb3IgaGFzIGJlZW4gZGV0ZWN0ZWQgaW4gdW5sb2NrICAgICAgICAqLworLyohPCBjb21tYW5kIG9yIGlmIHRoZXJlIHdhcyBhbiBhdHRlbXB0IHRvIGFjY2VzcyBhIGxvY2tlZCBjYXJkICAgICovCiAjZGVmaW5lIEhBTF9NTUNfRVJST1JfQ09NX0NSQ19GQUlMRUQgICAgICAgICAgIFNETU1DX0VSUk9SX0NPTV9DUkNfRkFJTEVEICAgICAgICAgIC8qITwgQ1JDIGNoZWNrIG9mIHRoZSBwcmV2aW91cyBjb21tYW5kIGZhaWxlZCAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBIQUxfTU1DX0VSUk9SX0lMTEVHQUxfQ01EICAgICAgICAgICAgICBTRE1NQ19FUlJPUl9JTExFR0FMX0NNRCAgICAgICAgICAgICAvKiE8IENvbW1hbmQgaXMgbm90IGxlZ2FsIGZvciB0aGUgY2FyZCBzdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgSEFMX01NQ19FUlJPUl9DQVJEX0VDQ19GQUlMRUQgICAgICAgICAgU0RNTUNfRVJST1JfQ0FSRF9FQ0NfRkFJTEVEICAgICAgICAgLyohPCBDYXJkIGludGVybmFsIEVDQyB3YXMgYXBwbGllZCBidXQgZmFpbGVkIHRvIGNvcnJlY3QgdGhlIGRhdGEgICovCkBAIC0yOTksOCArMjk5LDggQEAKICNkZWZpbmUgSEFMX01NQ19FUlJPUl9DSURfQ1NEX09WRVJXUklURSAgICAgICAgU0RNTUNfRVJST1JfQ0lEX0NTRF9PVkVSV1JJVEUgICAgICAgLyohPCBDSUQvQ1NEIG92ZXJ3cml0ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEhBTF9NTUNfRVJST1JfV1BfRVJBU0VfU0tJUCAgICAgICAgICAgIFNETU1DX0VSUk9SX1dQX0VSQVNFX1NLSVAgICAgICAgICAgIC8qITwgT25seSBwYXJ0aWFsIGFkZHJlc3Mgc3BhY2Ugd2FzIGVyYXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBIQUxfTU1DX0VSUk9SX0NBUkRfRUNDX0RJU0FCTEVEICAgICAgICBTRE1NQ19FUlJPUl9DQVJEX0VDQ19ESVNBQkxFRCAgICAgICAvKiE8IENvbW1hbmQgaGFzIGJlZW4gZXhlY3V0ZWQgd2l0aG91dCB1c2luZyBpbnRlcm5hbCBFQ0MgICAgICAgICAgKi8KLSNkZWZpbmUgSEFMX01NQ19FUlJPUl9FUkFTRV9SRVNFVCAgICAgICAgICAgICAgU0RNTUNfRVJST1JfRVJBU0VfUkVTRVQgICAgICAgICAgICAgLyohPCBFcmFzZSBzZXF1ZW5jZSB3YXMgY2xlYXJlZCBiZWZvcmUgZXhlY3V0aW5nIGJlY2F1c2UgYW4gb3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgZXJhc2Ugc2VxdWVuY2UgY29tbWFuZCB3YXMgcmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBIQUxfTU1DX0VSUk9SX0VSQVNFX1JFU0VUICAgICAgICAgICAgICBTRE1NQ19FUlJPUl9FUkFTRV9SRVNFVCAgICAgICAgICAgICAvKiE8IEVyYXNlIHNlcXVlbmNlIHdhcyBjbGVhcmVkIGJlZm9yZSBleGVjdXRpbmcgYmVjYXVzZSBhbiBvdXQgICAgKi8KKy8qITwgb2YgZXJhc2Ugc2VxdWVuY2UgY29tbWFuZCB3YXMgcmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBIQUxfTU1DX0VSUk9SX0FLRV9TRVFfRVJSICAgICAgICAgICAgICBTRE1NQ19FUlJPUl9BS0VfU0VRX0VSUiAgICAgICAgICAgICAvKiE8IEVycm9yIGluIHNlcXVlbmNlIG9mIGF1dGhlbnRpY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgSEFMX01NQ19FUlJPUl9JTlZBTElEX1ZPTFRSQU5HRSAgICAgICAgU0RNTUNfRVJST1JfSU5WQUxJRF9WT0xUUkFOR0UgICAgICAgLyohPCBFcnJvciBpbiBjYXNlIG9mIGludmFsaWQgdm9sdGFnZSByYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEhBTF9NTUNfRVJST1JfQUREUl9PVVRfT0ZfUkFOR0UgICAgICAgIFNETU1DX0VSUk9SX0FERFJfT1VUX09GX1JBTkdFICAgICAgIC8qITwgRXJyb3Igd2hlbiBhZGRyZXNzZWQgYmxvY2sgaXMgb3V0IG9mIHJhbmdlICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzEzLDcgKzMxMyw3IEBACiAKICNpZiBkZWZpbmVkIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCiAjZGVmaW5lIEhBTF9NTUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSyAgICAgICAgIFNETU1DX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSICAgICAgIC8qITwgSW52YWxpZCBjYWxsYmFjayBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2VuZGlmCisjZW5kaWYgLyogVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtNDAzLDIyICs0MDMsMjIgQEAKIAogLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qKiBAZGVmZ3JvdXAgTU1DX0V4cG9ydGVkX21hY3JvcyBNTUMgRXhwb3J0ZWQgTWFjcm9zCi0gKiAgQGJyaWVmIG1hY3JvcyB0byBoYW5kbGUgaW50ZXJydXB0cyBhbmQgc3BlY2lmaWMgY2xvY2sgY29uZmlndXJhdGlvbnMKLSAqIEB7Ci0gKi8KKyAgKiAgQGJyaWVmIG1hY3JvcyB0byBoYW5kbGUgaW50ZXJydXB0cyBhbmQgc3BlY2lmaWMgY2xvY2sgY29uZmlndXJhdGlvbnMKKyAgKiBAeworICAqLwogLyoqIEBicmllZiBSZXNldCBNTUMgaGFuZGxlIHN0YXRlLgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBNTUMgSGFuZGxlLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2lmIGRlZmluZWQgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKICNkZWZpbmUgX19IQUxfTU1DX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSAgICAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRVNFVDsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5Nc3BJbml0Q2FsbGJhY2sgPSBOVUxMOyAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk1zcERlSW5pdENhbGxiYWNrID0gTlVMTDsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk1zcEluaXRDYWxsYmFjayA9IE5VTEw7ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk1zcERlSW5pdENhbGxiYWNrID0gTlVMTDsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogI2Vsc2UKICNkZWZpbmUgX19IQUxfTU1DX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSAgICAgICAgICAgKChfX0hBTkRMRV9fKS0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFU0VUKQotI2VuZGlmCisjZW5kaWYgLyogVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIHRoZSBNTUMgZGV2aWNlIGludGVycnVwdC4KQEAgLTYzMiw3ICs2MzIsNyBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19Jbml0KE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfSW5pdENhcmQoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19EZUluaXQgKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfRGVJbml0KE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKIHZvaWQgSEFMX01NQ19Nc3BJbml0KE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKIHZvaWQgSEFMX01NQ19Nc3BEZUluaXQoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOwogCkBAIC02NDQsMTUgKzY0NCwyMSBAQAogICAqIEB7CiAgICovCiAvKiBCbG9ja2luZyBtb2RlOiBQb2xsaW5nICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX1JlYWRCbG9ja3MoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBCbG9ja0FkZCwgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MsIHVpbnQzMl90IFRpbWVvdXQpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19Xcml0ZUJsb2NrcyhNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDhfdCAqcERhdGEsIHVpbnQzMl90IEJsb2NrQWRkLCB1aW50MzJfdCBOdW1iZXJPZkJsb2NrcywgdWludDMyX3QgVGltZW91dCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX1JlYWRCbG9ja3MoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBCbG9ja0FkZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBOdW1iZXJPZkJsb2NrcywgdWludDMyX3QgVGltZW91dCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX1dyaXRlQmxvY2tzKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgQmxvY2tBZGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE51bWJlck9mQmxvY2tzLCB1aW50MzJfdCBUaW1lb3V0KTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfRXJhc2UoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQzMl90IEJsb2NrU3RhcnRBZGQsIHVpbnQzMl90IEJsb2NrRW5kQWRkKTsKIC8qIE5vbi1CbG9ja2luZyBtb2RlOiBJVCAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19SZWFkQmxvY2tzX0lUKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgQmxvY2tBZGQsIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfV3JpdGVCbG9ja3NfSVQoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBCbG9ja0FkZCwgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19SZWFkQmxvY2tzX0lUKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgQmxvY2tBZGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19Xcml0ZUJsb2Nrc19JVChNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDhfdCAqcERhdGEsIHVpbnQzMl90IEJsb2NrQWRkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBOdW1iZXJPZkJsb2Nrcyk7CiAvKiBOb24tQmxvY2tpbmcgbW9kZTogRE1BICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX1JlYWRCbG9ja3NfRE1BKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgQmxvY2tBZGQsIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfV3JpdGVCbG9ja3NfRE1BKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgQmxvY2tBZGQsIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfUmVhZEJsb2Nrc19ETUEoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBCbG9ja0FkZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19Xcml0ZUJsb2Nrc19ETUEoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBCbG9ja0FkZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKTsKIAogdm9pZCBIQUxfTU1DX0lSUUhhbmRsZXIoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOwogCkBAIC02NjQsOSArNjcwLDEwIEBACiAKICNpZiBkZWZpbmVkIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCiAvKiBNTUMgY2FsbGJhY2sgcmVnaXN0ZXJpbmcvdW5yZWdpc3RlcmluZyAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19SZWdpc3RlckNhbGxiYWNrICAoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIEhBTF9NTUNfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJZCwgcE1NQ19DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfUmVnaXN0ZXJDYWxsYmFjayhNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgSEFMX01NQ19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBNTUNfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX1VuUmVnaXN0ZXJDYWxsYmFjayhNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgSEFMX01NQ19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lkKTsKLSNlbmRpZgorI2VuZGlmIC8qIFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTcxMyw3ICs3MjAsOCBAQAogLyoqIEBkZWZncm91cCBNTUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwNyBQZXJpcGhlcmFsIEVyYXNlIG1hbmFnZW1lbnQKICAgKiBAewogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19FcmFzZVNlcXVlbmNlKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50MzJfdCBFcmFzZVR5cGUsIHVpbnQzMl90IEJsb2NrU3RhcnRBZGQsIHVpbnQzMl90IEJsb2NrRW5kQWRkKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfRXJhc2VTZXF1ZW5jZShNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDMyX3QgRXJhc2VUeXBlLCB1aW50MzJfdCBCbG9ja1N0YXJ0QWRkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJsb2NrRW5kQWRkKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfU2FuaXRpemUoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19Db25maWdTZWNSZW1vdmFsVHlwZShNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDMyX3QgU1JUTW9kZSk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX0dldFN1cHBvcnRlZFNlY1JlbW92YWxUeXBlKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50MzJfdCAqU3VwcG9ydGVkU1JUKTsKQEAgLTczNCw3ICs3NDIsOCBAQAogLyoqIEBkZWZncm91cCBNTUNfUHJpdmF0ZV9EZWZpbmVzIE1NQyBQcml2YXRlIERlZmluZXMKICAgKiBAewogICAqLwotCisjZGVmaW5lIE1NQ19FWFRfQ1NEX0RBVEFfU0VDX1NJWkVfSU5ERVggNjEKKyNkZWZpbmUgTU1DX0VYVF9DU0RfREFUQV9TRUNfU0laRV9QT1MgICA4CiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDV4eF9oYWxfbW1jX2V4LmggYi9JbmMvc3RtMzJsNXh4X2hhbF9tbWNfZXguaAppbmRleCA5MWQwOTkwLi5iYzAwN2UzIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNXh4X2hhbF9tbWNfZXguaAorKysgYi9JbmMvc3RtMzJsNXh4X2hhbF9tbWNfZXguaApAQCAtMjIsNyArMjIsNyBAQAogI2RlZmluZSBTVE0zMkw1eHhfSEFMX01NQ19FWF9ICiAKICNpZmRlZiBfX2NwbHVzcGx1cwotIGV4dGVybiAiQyIgeworZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTUwLDcgKzUwLDcgQEAKICAgTU1DX0RNQV9CVUZGRVIwICAgICAgPSAweDAwVSwgICAgLyohPCBzZWxlY3RzIE1NQyBpbnRlcm5hbCBETUEgQnVmZmVyIDAgICAgICovCiAgIE1NQ19ETUFfQlVGRkVSMSAgICAgID0gMHgwMVUsICAgIC8qITwgc2VsZWN0cyBNTUMgaW50ZXJuYWwgRE1BIEJ1ZmZlciAxICAgICAqLwogCi19SEFMX01NQ0V4X0RNQUJ1ZmZlcl9NZW1vcnlUeXBlRGVmOworfSBIQUxfTU1DRXhfRE1BQnVmZmVyX01lbW9yeVR5cGVEZWY7CiAKIAogLyoqCkBAIC02MCw4ICs2MCw2IEBACiAvKioKICAgKiBAfQogICAqLwotLyogRXhwb3J0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIEV4cG9ydGVkIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBkZWZncm91cCBNTUNFeF9FeHBvcnRlZF9GdW5jdGlvbnMgTU1DRXggRXhwb3J0ZWQgRnVuY3Rpb25zCiAgICogQHsKQEAgLTcwLDEwICs2OCwxNCBAQAogLyoqIEBkZWZncm91cCBNTUNFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxIE11bHRpQnVmZmVyIGZ1bmN0aW9ucwogICAqIEB7CiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DRXhfQ29uZmlnRE1BTXVsdGlCdWZmZXIoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQzMl90ICogcERhdGFCdWZmZXIwLCB1aW50MzJfdCAqIHBEYXRhQnVmZmVyMSwgdWludDMyX3QgQnVmZmVyU2l6ZSk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DRXhfUmVhZEJsb2Nrc0RNQU11bHRpQnVmZmVyKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50MzJfdCBCbG9ja0FkZCwgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ0V4X1dyaXRlQmxvY2tzRE1BTXVsdGlCdWZmZXIoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQzMl90IEJsb2NrQWRkLCB1aW50MzJfdCBOdW1iZXJPZkJsb2Nrcyk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DRXhfQ2hhbmdlRE1BQnVmZmVyKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCBIQUxfTU1DRXhfRE1BQnVmZmVyX01lbW9yeVR5cGVEZWYgQnVmZmVyLCB1aW50MzJfdCAqcERhdGFCdWZmZXIpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ0V4X0NvbmZpZ0RNQU11bHRpQnVmZmVyKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50MzJfdCAqcERhdGFCdWZmZXIwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwRGF0YUJ1ZmZlcjEsIHVpbnQzMl90IEJ1ZmZlclNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ0V4X1JlYWRCbG9ja3NETUFNdWx0aUJ1ZmZlcihNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDMyX3QgQmxvY2tBZGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNFeF9Xcml0ZUJsb2Nrc0RNQU11bHRpQnVmZmVyKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50MzJfdCBCbG9ja0FkZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNFeF9DaGFuZ2VETUFCdWZmZXIoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIEhBTF9NTUNFeF9ETUFCdWZmZXJfTWVtb3J5VHlwZURlZiBCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwRGF0YUJ1ZmZlcik7CiAKIHZvaWQgSEFMX01NQ0V4X1JlYWRfRE1BRG91YmxlQnVmMENwbHRDYWxsYmFjayhNTUNfSGFuZGxlVHlwZURlZiAqaG1tYyk7CiB2b2lkIEhBTF9NTUNFeF9SZWFkX0RNQURvdWJsZUJ1ZjFDcGx0Q2FsbGJhY2soTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDV4eF9oYWxfbmFuZC5oIGIvSW5jL3N0bTMybDV4eF9oYWxfbmFuZC5oCmluZGV4IDk0N2Y5YzYuLmQ0NjI5MDAgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw1eHhfaGFsX25hbmQuaAorKysgYi9JbmMvc3RtMzJsNXh4X2hhbF9uYW5kLmgKQEAgLTEzMyw3ICsxMzMsNyBAQAogICB2b2lkICgqIE1zcEluaXRDYWxsYmFjaykoc3RydWN0IF9fTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCk7ICAgICAgICAgICAgICAgLyohPCBOQU5EIE1zcCBJbml0IGNhbGxiYWNrICAgICAgICAgICAgICAqLwogICB2b2lkICgqIE1zcERlSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19OQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kKTsgICAgICAgICAgICAgLyohPCBOQU5EIE1zcCBEZUluaXQgY2FsbGJhY2sgICAgICAgICAgICAqLwogICB2b2lkICgqIEl0Q2FsbGJhY2spKHN0cnVjdCBfX05BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQpOyAgICAgICAgICAgICAgICAgICAgLyohPCBOQU5EIElUIGNhbGxiYWNrICAgICAgICAgICAgICAgICAgICAqLwotI2VuZGlmCisjZW5kaWYgLyogVVNFX0hBTF9OQU5EX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogfSBOQU5EX0hhbmRsZVR5cGVEZWY7CiAKICNpZiAoVVNFX0hBTF9OQU5EX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQpAQCAtMTUxLDcgKzE1MSw3IEBACiAgICogQGJyaWVmICBIQUwgTkFORCBDYWxsYmFjayBwb2ludGVyIGRlZmluaXRpb24KICAgKi8KIHR5cGVkZWYgdm9pZCAoKnBOQU5EX0NhbGxiYWNrVHlwZURlZikoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCk7Ci0jZW5kaWYKKyNlbmRpZiAvKiBVU0VfSEFMX05BTkRfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKIC8qKgogICAqIEB9CkBAIC0xNzUsNyArMTc1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAjZWxzZQogI2RlZmluZSBfX0hBTF9OQU5EX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSAoKF9fSEFORExFX18pLT5TdGF0ZSA9IEhBTF9OQU5EX1NUQVRFX1JFU0VUKQotI2VuZGlmCisjZW5kaWYgLyogVVNFX0hBTF9OQU5EX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCiAvKioKICAgKiBAfQpAQCAtMjQyLDcgKzI0Miw3IEBACiBIQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfUmVnaXN0ZXJDYWxsYmFjayhOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBIQUxfTkFORF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5BTkRfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CiBIQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfVW5SZWdpc3RlckNhbGxiYWNrKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIEhBTF9OQU5EX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSWQpOwotI2VuZGlmCisjZW5kaWYgLyogVVNFX0hBTF9OQU5EX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCiAvKioKICAgKiBAfQpAQCAtMjg3LDE5ICsyODcsMTkgQEAKICNkZWZpbmUgQ01EX0FSRUEgICAgICAgICAgICAgICAgICAgKDFVTDw8MTZVKSAgLyogQTE2ID0gQ0xFIGhpZ2ggKi8KICNkZWZpbmUgQUREUl9BUkVBICAgICAgICAgICAgICAgICAgKDFVTDw8MTdVKSAgLyogQTE3ID0gQUxFIGhpZ2ggKi8KIAotI2RlZmluZSBOQU5EX0NNRF9BUkVBX0EgICAgICAgICAgICAweDAwVQotI2RlZmluZSBOQU5EX0NNRF9BUkVBX0IgICAgICAgICAgICAweDAxVQotI2RlZmluZSBOQU5EX0NNRF9BUkVBX0MgICAgICAgICAgICAweDUwVQotI2RlZmluZSBOQU5EX0NNRF9BUkVBX1RSVUUxICAgICAgICAweDMwVQorI2RlZmluZSBOQU5EX0NNRF9BUkVBX0EgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMCkKKyNkZWZpbmUgTkFORF9DTURfQVJFQV9CICAgICAgICAgICAgKCh1aW50OF90KTB4MDEpCisjZGVmaW5lIE5BTkRfQ01EX0FSRUFfQyAgICAgICAgICAgICgodWludDhfdCkweDUwKQorI2RlZmluZSBOQU5EX0NNRF9BUkVBX1RSVUUxICAgICAgICAoKHVpbnQ4X3QpMHgzMCkKIAotI2RlZmluZSBOQU5EX0NNRF9XUklURTAgICAgICAgICAgICAweDgwVQotI2RlZmluZSBOQU5EX0NNRF9XUklURV9UUlVFMSAgICAgICAweDEwVQotI2RlZmluZSBOQU5EX0NNRF9FUkFTRTAgICAgICAgICAgICAweDYwVQotI2RlZmluZSBOQU5EX0NNRF9FUkFTRTEgICAgICAgICAgICAweEQwVQotI2RlZmluZSBOQU5EX0NNRF9SRUFESUQgICAgICAgICAgICAweDkwVQotI2RlZmluZSBOQU5EX0NNRF9TVEFUVVMgICAgICAgICAgICAweDcwVQotI2RlZmluZSBOQU5EX0NNRF9MT0NLX1NUQVRVUyAgICAgICAweDdBVQotI2RlZmluZSBOQU5EX0NNRF9SRVNFVCAgICAgICAgICAgICAweEZGVQorI2RlZmluZSBOQU5EX0NNRF9XUklURTAgICAgICAgICAgICAoKHVpbnQ4X3QpMHg4MCkKKyNkZWZpbmUgTkFORF9DTURfV1JJVEVfVFJVRTEgICAgICAgKCh1aW50OF90KTB4MTApCisjZGVmaW5lIE5BTkRfQ01EX0VSQVNFMCAgICAgICAgICAgICgodWludDhfdCkweDYwKQorI2RlZmluZSBOQU5EX0NNRF9FUkFTRTEgICAgICAgICAgICAoKHVpbnQ4X3QpMHhEMCkKKyNkZWZpbmUgTkFORF9DTURfUkVBRElEICAgICAgICAgICAgKCh1aW50OF90KTB4OTApCisjZGVmaW5lIE5BTkRfQ01EX1NUQVRVUyAgICAgICAgICAgICgodWludDhfdCkweDcwKQorI2RlZmluZSBOQU5EX0NNRF9MT0NLX1NUQVRVUyAgICAgICAoKHVpbnQ4X3QpMHg3QSkKKyNkZWZpbmUgTkFORF9DTURfUkVTRVQgICAgICAgICAgICAgKCh1aW50OF90KTB4RkYpCiAKIC8qIE5BTkQgbWVtb3J5IHN0YXR1cyAqLwogI2RlZmluZSBOQU5EX1ZBTElEX0FERFJFU1MgICAgICAgICAweDAwMDAwMTAwVUwKQEAgLTMyNCw3ICszMjQsOCBAQAogICAqIEByZXR2YWwgTkFORCBSYXcgYWRkcmVzcyB2YWx1ZQogICAqLwogI2RlZmluZSBBUlJBWV9BRERSRVNTKF9fQUREUkVTU19fICwgX19IQU5ETEVfXykgKChfX0FERFJFU1NfXyktPlBhZ2UgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19BRERSRVNTX18pLT5CbG9jayArICgoKF9fQUREUkVTU19fKS0+UGxhbmUpICogKChfX0hBTkRMRV9fKS0+Q29uZmlnLlBsYW5lU2l6ZSkpKSogKChfX0hBTkRMRV9fKS0+Q29uZmlnLkJsb2NrU2l6ZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fQUREUkVTU19fKS0+QmxvY2sgKyAoKChfX0FERFJFU1NfXyktPlBsYW5lKSAqIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fSEFORExFX18pLT5Db25maWcuUGxhbmVTaXplKSkpKiAoKF9fSEFORExFX18pLT5Db25maWcuQmxvY2tTaXplKSkpCiAKIC8qKgogICAqIEBicmllZiAgTkFORCBtZW1vcnkgQ29sdW1uIGFkZHJlc3MgY29tcHV0YXRpb24uCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNXh4X2hhbF9ub3IuaCBiL0luYy9zdG0zMmw1eHhfaGFsX25vci5oCmluZGV4IDYwZjQ2NTEuLjQyMWRkYmEgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw1eHhfaGFsX25vci5oCisrKyBiL0luYy9zdG0zMmw1eHhfaGFsX25vci5oCkBAIC0xMjUsNyArMTI1LDcgQEAKICNpZiAoVVNFX0hBTF9OT1JfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIHZvaWQgKCogTXNwSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19OT1JfSGFuZGxlVHlwZURlZiAqaG5vcik7ICAgICAgICAgICAgICAgLyohPCBOT1IgTXNwIEluaXQgY2FsbGJhY2sgICAgICAgICAgICAgICovCiAgIHZvaWQgKCogTXNwRGVJbml0Q2FsbGJhY2spKHN0cnVjdCBfX05PUl9IYW5kbGVUeXBlRGVmICpobm9yKTsgICAgICAgICAgICAgLyohPCBOT1IgTXNwIERlSW5pdCBjYWxsYmFjayAgICAgICAgICAgICovCi0jZW5kaWYKKyNlbmRpZiAvKiBVU0VfSEFMX05PUl9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIH0gTk9SX0hhbmRsZVR5cGVEZWY7CiAKICNpZiAoVVNFX0hBTF9OT1JfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCkBAIC0xNDIsNyArMTQyLDcgQEAKICAgKiBAYnJpZWYgIEhBTCBOT1IgQ2FsbGJhY2sgcG9pbnRlciBkZWZpbml0aW9uCiAgICovCiB0eXBlZGVmIHZvaWQgKCpwTk9SX0NhbGxiYWNrVHlwZURlZikoTk9SX0hhbmRsZVR5cGVEZWYgKmhub3IpOwotI2VuZGlmCisjZW5kaWYgLyogVVNFX0hBTF9OT1JfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTY0LDcgKzE2NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogI2Vsc2UKICNkZWZpbmUgX19IQUxfTk9SX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSAoKF9fSEFORExFX18pLT5TdGF0ZSA9IEhBTF9OT1JfU1RBVEVfUkVTRVQpCi0jZW5kaWYKKyNlbmRpZiAvKiBVU0VfSEFMX05PUl9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0yMTMsNyArMjEzLDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OT1JfUmVnaXN0ZXJDYWxsYmFjayhOT1JfSGFuZGxlVHlwZURlZiAqaG5vciwgSEFMX05PUl9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOT1JfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTk9SX1VuUmVnaXN0ZXJDYWxsYmFjayhOT1JfSGFuZGxlVHlwZURlZiAqaG5vciwgSEFMX05PUl9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lkKTsKLSNlbmRpZgorI2VuZGlmIC8qIFVTRV9IQUxfTk9SX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTI1NywyMyArMjU3LDIzIEBACiAjZGVmaW5lIERFVklDRV9DT0RFM19BRERSICAgICAgICAoKHVpbnQxNl90KTB4MDAwRikKIAogLyogTk9SIENGSSBJRHMgYWRkcmVzc2VzICovCi0jZGVmaW5lIENGSTFfQUREUkVTUyAgICAgICAgICAgICAoKHVpbnQxNl90KTB4NjEpCi0jZGVmaW5lIENGSTJfQUREUkVTUyAgICAgICAgICAgICAoKHVpbnQxNl90KTB4NjIpCi0jZGVmaW5lIENGSTNfQUREUkVTUyAgICAgICAgICAgICAoKHVpbnQxNl90KTB4NjMpCi0jZGVmaW5lIENGSTRfQUREUkVTUyAgICAgICAgICAgICAoKHVpbnQxNl90KTB4NjQpCisjZGVmaW5lIENGSTFfQUREUkVTUyAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA2MSkKKyNkZWZpbmUgQ0ZJMl9BRERSRVNTICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDYyKQorI2RlZmluZSBDRkkzX0FERFJFU1MgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwNjMpCisjZGVmaW5lIENGSTRfQUREUkVTUyAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA2NCkKIAogLyogTk9SIG9wZXJhdGlvbiB3YWl0IHRpbWVvdXQgKi8KICNkZWZpbmUgTk9SX1RNRU9VVCAgICAgICAgICAgICAgICgodWludDE2X3QpMHhGRkZGKQogCiAvKiBOT1IgbWVtb3J5IGRhdGEgd2lkdGggKi8KLSNkZWZpbmUgTk9SX01FTU9SWV84QiAgICAgICAgICAgICgodWludDhfdCkweDApCi0jZGVmaW5lIE5PUl9NRU1PUllfMTZCICAgICAgICAgICAoKHVpbnQ4X3QpMHgxKQorI2RlZmluZSBOT1JfTUVNT1JZXzhCICAgICAgICAgICAgKCh1aW50OF90KTB4MDApCisjZGVmaW5lIE5PUl9NRU1PUllfMTZCICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMSkKIAogLyogTk9SIG1lbW9yeSBkZXZpY2UgcmVhZC93cml0ZSBzdGFydCBhZGRyZXNzICovCi0jZGVmaW5lIE5PUl9NRU1PUllfQURSRVNTMSAgICAgICAoKHVpbnQzMl90KTB4NjAwMDAwMDApCi0jZGVmaW5lIE5PUl9NRU1PUllfQURSRVNTMiAgICAgICAoKHVpbnQzMl90KTB4NjQwMDAwMDApCi0jZGVmaW5lIE5PUl9NRU1PUllfQURSRVNTMyAgICAgICAoKHVpbnQzMl90KTB4NjgwMDAwMDApCi0jZGVmaW5lIE5PUl9NRU1PUllfQURSRVNTNCAgICAgICAoKHVpbnQzMl90KTB4NkMwMDAwMDApCisjZGVmaW5lIE5PUl9NRU1PUllfQURSRVNTMSAgICAgICAoMHg2MDAwMDAwMFUpCisjZGVmaW5lIE5PUl9NRU1PUllfQURSRVNTMiAgICAgICAoMHg2NDAwMDAwMFUpCisjZGVmaW5lIE5PUl9NRU1PUllfQURSRVNTMyAgICAgICAoMHg2ODAwMDAwMFUpCisjZGVmaW5lIE5PUl9NRU1PUllfQURSRVNTNCAgICAgICAoMHg2QzAwMDAwMFUpCiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDV4eF9oYWxfb3BhbXAuaCBiL0luYy9zdG0zMmw1eHhfaGFsX29wYW1wLmgKaW5kZXggODZjZDIyMy4uMzIyMzhjYSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDV4eF9oYWxfb3BhbXAuaAorKysgYi9JbmMvc3RtMzJsNXh4X2hhbF9vcGFtcC5oCkBAIC0xNDUsMTAgKzE0NSw2IEBACiAKIHR5cGVkZWYgIHVpbnQzMl90IEhBTF9PUEFNUF9UcmltbWluZ1ZhbHVlVHlwZURlZjsKIAotLyoqCi0gICogQH0KLSAgKi8KLQogI2lmIChVU0VfSEFMX09QQU1QX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogLyoqCiAgICogQGJyaWVmICBIQUwgT1BBTVAgQ2FsbGJhY2sgSUQgZW51bWVyYXRpb24gZGVmaW5pdGlvbgpAQCAtMTY2LDYgKzE2MiwxMCBAQAogdHlwZWRlZiB2b2lkICgqcE9QQU1QX0NhbGxiYWNrVHlwZURlZikoT1BBTVBfSGFuZGxlVHlwZURlZiAqaG9wYW1wKTsKICNlbmRpZiAvKiBVU0VfSEFMX09QQU1QX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCisvKioKKyAgKiBAfQorICAqLworCiAKIC8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTIyMyw4ICsyMjMsOCBAQAogLyoqIEBkZWZncm91cCBPUEFNUF9Qb3dlck1vZGUgT1BBTVAgUG93ZXJNb2RlCiAgICogQHsKICAgKi8KLSNkZWZpbmUgT1BBTVBfUE9XRVJNT0RFX05PUk1BTCAgICAgICAgMHgwMDAwMDAwMFUKLSNkZWZpbmUgT1BBTVBfUE9XRVJNT0RFX0xPV1BPV0VSICAgICAgT1BBTVBfQ1NSX09QQUxQTQorI2RlZmluZSBPUEFNUF9QT1dFUk1PREVfTk9STUFMUE9XRVIgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAgLyohPCBPUEFNUCBwb3dlciBtb2RlIG5vcm1hbCAqLyAgIAorI2RlZmluZSBPUEFNUF9QT1dFUk1PREVfTE9XUE9XRVIgICAgICBPUEFNUF9DU1JfT1BBTFBNICAgICAgICAgLyohPCBPUEFNUCBwb3dlciBtb2RlIGxvdy1wb3dlciAqLwogCiAvKioKICAgKiBAfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDV4eF9oYWxfb3BhbXBfZXguaCBiL0luYy9zdG0zMmw1eHhfaGFsX29wYW1wX2V4LmgKaW5kZXggNTI0YjlmZC4uODM2MTViNiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDV4eF9oYWxfb3BhbXBfZXguaAorKysgYi9JbmMvc3RtMzJsNXh4X2hhbF9vcGFtcF9leC5oCkBAIC0zOSwxMiArMzksMTIgQEAKIC8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBFeHBvcnRlZCBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qKiBAYWRkdG9ncm91cCBPUEFNUEV4X0V4cG9ydGVkX0Z1bmN0aW9ucyBPUEFNUEV4IEV4cG9ydGVkIEZ1bmN0aW9ucworLyoqIEBhZGR0b2dyb3VwIE9QQU1QRXhfRXhwb3J0ZWRfRnVuY3Rpb25zCiAgICogQHsKICAgKi8KIAogLyogSS9PIG9wZXJhdGlvbiBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqIEBhZGR0b2dyb3VwIE9QQU1QRXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBFeHRlbmRlZCBJbnB1dCBhbmQgT3V0cHV0IG9wZXJhdGlvbiBmdW5jdGlvbnMKKy8qKiBAYWRkdG9ncm91cCBPUEFNUEV4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEKICAgKiBAewogICAqLwogCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNXh4X2hhbF9wY2QuaCBiL0luYy9zdG0zMmw1eHhfaGFsX3BjZC5oCmluZGV4IDExOTg0OGYuLjgwY2MyZTYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw1eHhfaGFsX3BjZC5oCisrKyBiL0luYy9zdG0zMmw1eHhfaGFsX3BjZC5oCkBAIC0yNjAsMjUgKzI2MCw0MSBAQAogICAqIEB9CiAgICovCiAKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfUmVnaXN0ZXJDYWxsYmFjayhQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgSEFMX1BDRF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELCBwUENEX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9VblJlZ2lzdGVyQ2FsbGJhY2soUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIEhBTF9QQ0RfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX1JlZ2lzdGVyQ2FsbGJhY2soUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFMX1BDRF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBQQ0RfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CiAKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfUmVnaXN0ZXJEYXRhT3V0U3RhZ2VDYWxsYmFjayhQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgcFBDRF9EYXRhT3V0U3RhZ2VDYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfVW5SZWdpc3RlckNhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFMX1BDRF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lEKTsKKworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9SZWdpc3RlckRhdGFPdXRTdGFnZUNhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBQQ0RfRGF0YU91dFN0YWdlQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CisKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfVW5SZWdpc3RlckRhdGFPdXRTdGFnZUNhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkKTsKIAotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9SZWdpc3RlckRhdGFJblN0YWdlQ2FsbGJhY2soUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIHBQQ0RfRGF0YUluU3RhZ2VDYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfUmVnaXN0ZXJEYXRhSW5TdGFnZUNhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFBDRF9EYXRhSW5TdGFnZUNhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOworCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX1VuUmVnaXN0ZXJEYXRhSW5TdGFnZUNhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkKTsKIAotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9SZWdpc3Rlcklzb091dEluY3BsdENhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCBwUENEX0lzb091dEluY3BsdENhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9SZWdpc3Rlcklzb091dEluY3BsdENhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBQQ0RfSXNvT3V0SW5jcGx0Q2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CisKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfVW5SZWdpc3Rlcklzb091dEluY3BsdENhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkKTsKIAotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9SZWdpc3Rlcklzb0luSW5jcGx0Q2FsbGJhY2soUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIHBQQ0RfSXNvSW5JbmNwbHRDYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfUmVnaXN0ZXJJc29JbkluY3BsdENhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFBDRF9Jc29JbkluY3BsdENhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOworCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX1VuUmVnaXN0ZXJJc29JbkluY3BsdENhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkKTsKIAotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9SZWdpc3RlckJjZENhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCBwUENEX0JjZENhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9SZWdpc3RlckJjZENhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBQQ0RfQmNkQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CisKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfVW5SZWdpc3RlckJjZENhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkKTsKIAotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9SZWdpc3RlckxwbUNhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCBwUENEX0xwbUNhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9SZWdpc3RlckxwbUNhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBQQ0RfTHBtQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CisKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfVW5SZWdpc3RlckxwbUNhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkKTsKICNlbmRpZiAvKiBVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIC8qKgpAQCAtMzE3LDE2ICszMzMsMjQgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRGV2Q29ubmVjdChQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX0RldkRpc2Nvbm5lY3QoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9TZXRBZGRyZXNzKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGFkZHJlc3MpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9PcGVuKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIsIHVpbnQxNl90IGVwX21wcywgdWludDhfdCBlcF90eXBlKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRVBfT3BlbihQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGVwX21wcywgdWludDhfdCBlcF90eXBlKTsKKwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9DbG9zZShQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRVBfUmVjZWl2ZShQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyLCB1aW50OF90ICpwQnVmLCB1aW50MzJfdCBsZW4pOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9UcmFuc21pdChQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyLCB1aW50OF90ICpwQnVmLCB1aW50MzJfdCBsZW4pOwotdWludDMyX3QgICAgICAgICAgSEFMX1BDRF9FUF9HZXRSeENvdW50KFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9SZWNlaXZlKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcEJ1ZiwgdWludDMyX3QgbGVuKTsKKworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9UcmFuc21pdChQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwQnVmLCB1aW50MzJfdCBsZW4pOworCisKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRVBfU2V0U3RhbGwoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIHVpbnQ4X3QgZXBfYWRkcik7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX0VQX0NsclN0YWxsKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9GbHVzaChQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfQWN0aXZhdGVSZW1vdGVXYWtldXAoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9EZUFjdGl2YXRlUmVtb3RlV2FrZXVwKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkKTsKKwordWludDMyX3QgICAgICAgICAgSEFMX1BDRF9FUF9HZXRSeENvdW50KFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIpOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTQxMiwxMCArNDM2LDEwIEBACiAjZGVmaW5lIFBDRF9TRVRfRU5EUE9JTlQoVVNCeCwgYkVwTnVtLCB3UmVnVmFsdWUpICAoKihfX0lPIHVpbnQxNl90ICopKCYoVVNCeCktPkVQMFIgKyAoKGJFcE51bSkgKiAyVSkpID0gKHVpbnQxNl90KSh3UmVnVmFsdWUpKQogCiAvKiBHZXRFTkRQT0lOVCAqLwotI2RlZmluZSBQQ0RfR0VUX0VORFBPSU5UKFVTQngsIGJFcE51bSkgICAgICAgICAgICAoKihfX0lPIHVpbnQxNl90ICopKCYoVVNCeCktPkVQMFIgKyAoKGJFcE51bSkgKiAyVSkpKQorI2RlZmluZSBQQ0RfR0VUX0VORFBPSU5UKFVTQngsIGJFcE51bSkgICAgICAgICAgICAgKCooX19JTyB1aW50MTZfdCAqKSgmKFVTQngpLT5FUDBSICsgKChiRXBOdW0pICogMlUpKSkKIAogLyogRU5EUE9JTlQgdHJhbnNmZXIgKi8KLSNkZWZpbmUgVVNCX0VQMFN0YXJ0WGZlciAgICAgICAgICAgICAgICAgICAgICAgICAgVVNCX0VQU3RhcnRYZmVyCisjZGVmaW5lIFVTQl9FUDBTdGFydFhmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfRVBTdGFydFhmZXIKIAogLyoqCiAgICogQGJyaWVmICBzZXRzIHRoZSB0eXBlIGluIHRoZSBlbmRwb2ludCByZWdpc3RlcihiaXRzIEVQX1RZUEVbMTowXSkKQEAgLTQyNCw4ICs0NDgsNyBAQAogICAqIEBwYXJhbSAgd1R5cGUgRW5kcG9pbnQgVHlwZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgUENEX1NFVF9FUFRZUEUoVVNCeCwgYkVwTnVtLCB3VHlwZSkgKFBDRF9TRVRfRU5EUE9JTlQoKFVTQngpLCAoYkVwTnVtKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQQ0RfR0VUX0VORFBPSU5UKChVU0J4KSwgKGJFcE51bSkpICYgVVNCX0VQX1RfTUFTSykgfCAod1R5cGUpIHwgVVNCX0VQX0NUUl9UWCB8IFVTQl9FUF9DVFJfUlgpKSkKKyNkZWZpbmUgUENEX1NFVF9FUFRZUEUoVVNCeCwgYkVwTnVtLCB3VHlwZSkgKFBDRF9TRVRfRU5EUE9JTlQoKFVTQngpLCAoYkVwTnVtKSwgKChQQ0RfR0VUX0VORFBPSU5UKChVU0J4KSwgKGJFcE51bSkpICYgVVNCX0VQX1RfTUFTSykgfCAod1R5cGUpIHwgVVNCX0VQX0NUUl9UWCB8IFVTQl9FUF9DVFJfUlgpKSkKIAogLyoqCiAgICogQGJyaWVmICBnZXRzIHRoZSB0eXBlIGluIHRoZSBlbmRwb2ludCByZWdpc3RlcihiaXRzIEVQX1RZUEVbMTowXSkKQEAgLTQ0MiwxOCArNDY1LDE5IEBACiAgICogQHBhcmFtICAgYkVwTnVtLCBiRGlyCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIFBDRF9GcmVlVXNlckJ1ZmZlcihVU0J4LCBiRXBOdW0sIGJEaXIpIGRvIHsgXAotICBpZiAoKGJEaXIpID09IDBVKSBcCi0gIHsgXAotICAgIC8qIE9VVCBkb3VibGUgYnVmZmVyZWQgZW5kcG9pbnQgKi8gXAotICAgIFBDRF9UWF9EVE9HKChVU0J4KSwgKGJFcE51bSkpOyBcCi0gIH0gXAotICBlbHNlIGlmICgoYkRpcikgPT0gMVUpIFwKLSAgeyBcCi0gICAgLyogSU4gZG91YmxlIGJ1ZmZlcmVkIGVuZHBvaW50ICovIFwKLSAgICBQQ0RfUlhfRFRPRygoVVNCeCksIChiRXBOdW0pKTsgXAotICB9IFwKLX0gd2hpbGUoMCkKKyNkZWZpbmUgUENEX0ZyZWVVc2VyQnVmZmVyKFVTQngsIGJFcE51bSwgYkRpcikgXAorICBkbyB7IFwKKyAgICBpZiAoKGJEaXIpID09IDBVKSBcCisgICAgeyBcCisgICAgICAvKiBPVVQgZG91YmxlIGJ1ZmZlcmVkIGVuZHBvaW50ICovIFwKKyAgICAgIFBDRF9UWF9EVE9HKChVU0J4KSwgKGJFcE51bSkpOyBcCisgICAgfSBcCisgICAgZWxzZSBpZiAoKGJEaXIpID09IDFVKSBcCisgICAgeyBcCisgICAgICAvKiBJTiBkb3VibGUgYnVmZmVyZWQgZW5kcG9pbnQgKi8gXAorICAgICAgUENEX1JYX0RUT0coKFVTQngpLCAoYkVwTnVtKSk7IFwKKyAgICB9IFwKKyAgfSB3aGlsZSgwKQogCiAvKioKICAgKiBAYnJpZWYgIHNldHMgdGhlIHN0YXR1cyBmb3IgdHggdHJhbnNmZXIgKGJpdHMgU1RBVF9UWFsxOjBdKS4KQEAgLTQ2MiwyMSArNDg2LDIyIEBACiAgICogQHBhcmFtICB3U3RhdGUgbmV3IHN0YXRlCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIFBDRF9TRVRfRVBfVFhfU1RBVFVTKFVTQngsIGJFcE51bSwgd1N0YXRlKSBkbyB7IFwKLSAgIHVpbnQxNl90IF93UmVnVmFsOyBcCi0gICBcCisjZGVmaW5lIFBDRF9TRVRfRVBfVFhfU1RBVFVTKFVTQngsIGJFcE51bSwgd1N0YXRlKSBcCisgIGRvIHsgXAorICAgIHVpbnQxNl90IF93UmVnVmFsOyBcCisgICAgXAogICAgIF93UmVnVmFsID0gUENEX0dFVF9FTkRQT0lOVCgoVVNCeCksIChiRXBOdW0pKSAmIFVTQl9FUFRYX0RUT0dNQVNLOyBcCi0gICAvKiB0b2dnbGUgZmlyc3QgYml0ID8gKi8gXAotICAgaWYgKChVU0JfRVBUWF9EVE9HMSAmICh3U3RhdGUpKSE9IDBVKSBcCi0gICB7IFwKKyAgICAvKiB0b2dnbGUgZmlyc3QgYml0ID8gKi8gXAorICAgIGlmICgoVVNCX0VQVFhfRFRPRzEgJiAod1N0YXRlKSkhPSAwVSkgXAorICAgIHsgXAogICAgICAgX3dSZWdWYWwgXj0gVVNCX0VQVFhfRFRPRzE7IFwKLSAgIH0gXAotICAgLyogdG9nZ2xlIHNlY29uZCBiaXQgPyAgKi8gXAotICAgaWYgKChVU0JfRVBUWF9EVE9HMiAmICh3U3RhdGUpKSE9IDBVKSBcCi0gICB7IFwKKyAgICB9IFwKKyAgICAvKiB0b2dnbGUgc2Vjb25kIGJpdCA/ICAqLyBcCisgICAgaWYgKChVU0JfRVBUWF9EVE9HMiAmICh3U3RhdGUpKSE9IDBVKSBcCisgICAgeyBcCiAgICAgICBfd1JlZ1ZhbCBePSBVU0JfRVBUWF9EVE9HMjsgXAotICAgfSBcCi0gICBQQ0RfU0VUX0VORFBPSU5UKChVU0J4KSwgKGJFcE51bSksIChfd1JlZ1ZhbCB8IFVTQl9FUF9DVFJfUlggfCBVU0JfRVBfQ1RSX1RYKSk7IFwKKyAgICB9IFwKKyAgICBQQ0RfU0VUX0VORFBPSU5UKChVU0J4KSwgKGJFcE51bSksIChfd1JlZ1ZhbCB8IFVTQl9FUF9DVFJfUlggfCBVU0JfRVBfQ1RSX1RYKSk7IFwKICAgfSB3aGlsZSgwKSAvKiBQQ0RfU0VUX0VQX1RYX1NUQVRVUyAqLwogCiAvKioKQEAgLTQ4NiwxOSArNTExLDIwIEBACiAgICogQHBhcmFtICB3U3RhdGUgbmV3IHN0YXRlCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIFBDRF9TRVRfRVBfUlhfU1RBVFVTKFVTQngsIGJFcE51bSx3U3RhdGUpIGRvIHsgXAorI2RlZmluZSBQQ0RfU0VUX0VQX1JYX1NUQVRVUyhVU0J4LCBiRXBOdW0sd1N0YXRlKSBcCisgIGRvIHsgXAogICAgIHVpbnQxNl90IF93UmVnVmFsOyBcCiAgICAgXAogICAgIF93UmVnVmFsID0gUENEX0dFVF9FTkRQT0lOVCgoVVNCeCksIChiRXBOdW0pKSAmIFVTQl9FUFJYX0RUT0dNQVNLOyBcCiAgICAgLyogdG9nZ2xlIGZpcnN0IGJpdCA/ICovIFwKICAgICBpZiAoKFVTQl9FUFJYX0RUT0cxICYgKHdTdGF0ZSkpIT0gMFUpIFwKICAgICB7IFwKLSAgICAgICBfd1JlZ1ZhbCBePSBVU0JfRVBSWF9EVE9HMTsgXAorICAgICAgX3dSZWdWYWwgXj0gVVNCX0VQUlhfRFRPRzE7IFwKICAgICB9IFwKICAgICAvKiB0b2dnbGUgc2Vjb25kIGJpdCA/ICovIFwKICAgICBpZiAoKFVTQl9FUFJYX0RUT0cyICYgKHdTdGF0ZSkpIT0gMFUpIFwKICAgICB7IFwKLSAgICAgICBfd1JlZ1ZhbCBePSBVU0JfRVBSWF9EVE9HMjsgXAorICAgICAgX3dSZWdWYWwgXj0gVVNCX0VQUlhfRFRPRzI7IFwKICAgICB9IFwKICAgICBQQ0RfU0VUX0VORFBPSU5UKChVU0J4KSwgKGJFcE51bSksIChfd1JlZ1ZhbCB8IFVTQl9FUF9DVFJfUlggfCBVU0JfRVBfQ1RSX1RYKSk7IFwKICAgfSB3aGlsZSgwKSAvKiBQQ0RfU0VUX0VQX1JYX1NUQVRVUyAqLwpAQCAtNTExLDcgKzUzNyw4IEBACiAgICogQHBhcmFtICB3U3RhdGV0eCBuZXcgc3RhdGUuCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIFBDRF9TRVRfRVBfVFhSWF9TVEFUVVMoVVNCeCwgYkVwTnVtLCB3U3RhdGVyeCwgd1N0YXRldHgpIGRvIHsgXAorI2RlZmluZSBQQ0RfU0VUX0VQX1RYUlhfU1RBVFVTKFVTQngsIGJFcE51bSwgd1N0YXRlcngsIHdTdGF0ZXR4KSBcCisgIGRvIHsgXAogICAgIHVpbnQxNl90IF93UmVnVmFsOyBcCiAgICAgXAogICAgIF93UmVnVmFsID0gUENEX0dFVF9FTkRQT0lOVCgoVVNCeCksIChiRXBOdW0pKSAmIChVU0JfRVBSWF9EVE9HTUFTSyB8IFVTQl9FUFRYX1NUQVQpOyBcCkBAIC01NzMsNyArNjAwLDggQEAKICAgKiBAcGFyYW0gIGJFcE51bSBFbmRwb2ludCBOdW1iZXIuCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIFBDRF9TRVRfRVBfS0lORChVU0J4LCBiRXBOdW0pIGRvIHsgXAorI2RlZmluZSBQQ0RfU0VUX0VQX0tJTkQoVVNCeCwgYkVwTnVtKSBcCisgIGRvIHsgXAogICAgIHVpbnQxNl90IF93UmVnVmFsOyBcCiAgICAgXAogICAgIF93UmVnVmFsID0gUENEX0dFVF9FTkRQT0lOVCgoVVNCeCksIChiRXBOdW0pKSAmIFVTQl9FUFJFR19NQVNLOyBcCkBAIC01ODEsNyArNjA5LDggQEAKICAgICBQQ0RfU0VUX0VORFBPSU5UKChVU0J4KSwgKGJFcE51bSksIChfd1JlZ1ZhbCB8IFVTQl9FUF9DVFJfUlggfCBVU0JfRVBfQ1RSX1RYIHwgVVNCX0VQX0tJTkQpKTsgXAogICB9IHdoaWxlKDApIC8qIFBDRF9TRVRfRVBfS0lORCAqLwogCi0jZGVmaW5lIFBDRF9DTEVBUl9FUF9LSU5EKFVTQngsIGJFcE51bSkgZG8geyBcCisjZGVmaW5lIFBDRF9DTEVBUl9FUF9LSU5EKFVTQngsIGJFcE51bSkgXAorICBkbyB7IFwKICAgICB1aW50MTZfdCBfd1JlZ1ZhbDsgXAogICAgIFwKICAgICBfd1JlZ1ZhbCA9IFBDRF9HRVRfRU5EUE9JTlQoKFVTQngpLCAoYkVwTnVtKSkgJiBVU0JfRVBLSU5EX01BU0s7IFwKQEAgLTYxMyw3ICs2NDIsOCBAQAogICAqIEBwYXJhbSAgYkVwTnVtIEVuZHBvaW50IE51bWJlci4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgUENEX0NMRUFSX1JYX0VQX0NUUihVU0J4LCBiRXBOdW0pIGRvIHsgXAorI2RlZmluZSBQQ0RfQ0xFQVJfUlhfRVBfQ1RSKFVTQngsIGJFcE51bSkgXAorICBkbyB7IFwKICAgICB1aW50MTZfdCBfd1JlZ1ZhbDsgXAogICAgIFwKICAgICBfd1JlZ1ZhbCA9IFBDRF9HRVRfRU5EUE9JTlQoKFVTQngpLCAoYkVwTnVtKSkgJiAoMHg3RkZGVSAmIFVTQl9FUFJFR19NQVNLKTsgXApAQCAtNjIxLDcgKzY1MSw4IEBACiAgICAgUENEX1NFVF9FTkRQT0lOVCgoVVNCeCksIChiRXBOdW0pLCAoX3dSZWdWYWwgfCBVU0JfRVBfQ1RSX1RYKSk7IFwKICAgfSB3aGlsZSgwKSAvKiBQQ0RfQ0xFQVJfUlhfRVBfQ1RSICovCiAKLSNkZWZpbmUgUENEX0NMRUFSX1RYX0VQX0NUUihVU0J4LCBiRXBOdW0pIGRvIHsgXAorI2RlZmluZSBQQ0RfQ0xFQVJfVFhfRVBfQ1RSKFVTQngsIGJFcE51bSkgXAorICBkbyB7IFwKICAgICB1aW50MTZfdCBfd1JlZ1ZhbDsgXAogICAgIFwKICAgICBfd1JlZ1ZhbCA9IFBDRF9HRVRfRU5EUE9JTlQoKFVTQngpLCAoYkVwTnVtKSkgJiAoMHhGRjdGVSAmIFVTQl9FUFJFR19NQVNLKTsgXApAQCAtNjM1LDcgKzY2Niw4IEBACiAgICogQHBhcmFtICBiRXBOdW0gRW5kcG9pbnQgTnVtYmVyLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBQQ0RfUlhfRFRPRyhVU0J4LCBiRXBOdW0pIGRvIHsgXAorI2RlZmluZSBQQ0RfUlhfRFRPRyhVU0J4LCBiRXBOdW0pIFwKKyAgZG8geyBcCiAgICAgdWludDE2X3QgX3dFUFZhbDsgXAogICAgIFwKICAgICBfd0VQVmFsID0gUENEX0dFVF9FTkRQT0lOVCgoVVNCeCksIChiRXBOdW0pKSAmIFVTQl9FUFJFR19NQVNLOyBcCkBAIC02NDMsNyArNjc1LDggQEAKICAgICBQQ0RfU0VUX0VORFBPSU5UKChVU0J4KSwgKGJFcE51bSksIChfd0VQVmFsIHwgVVNCX0VQX0NUUl9SWCB8IFVTQl9FUF9DVFJfVFggfCBVU0JfRVBfRFRPR19SWCkpOyBcCiAgIH0gd2hpbGUoMCkgLyogUENEX1JYX0RUT0cgKi8KIAotI2RlZmluZSBQQ0RfVFhfRFRPRyhVU0J4LCBiRXBOdW0pIGRvIHsgXAorI2RlZmluZSBQQ0RfVFhfRFRPRyhVU0J4LCBiRXBOdW0pIFwKKyAgZG8geyBcCiAgICAgdWludDE2X3QgX3dFUFZhbDsgXAogICAgIFwKICAgICBfd0VQVmFsID0gUENEX0dFVF9FTkRQT0lOVCgoVVNCeCksIChiRXBOdW0pKSAmIFVTQl9FUFJFR19NQVNLOyBcCkBAIC02NTYsNyArNjg5LDggQEAKICAgKiBAcGFyYW0gIGJFcE51bSBFbmRwb2ludCBOdW1iZXIuCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIFBDRF9DTEVBUl9SWF9EVE9HKFVTQngsIGJFcE51bSkgZG8geyBcCisjZGVmaW5lIFBDRF9DTEVBUl9SWF9EVE9HKFVTQngsIGJFcE51bSkgXAorICBkbyB7IFwKICAgICB1aW50MTZfdCBfd1JlZ1ZhbDsgXAogICAgIFwKICAgICBfd1JlZ1ZhbCA9IFBDRF9HRVRfRU5EUE9JTlQoKFVTQngpLCAoYkVwTnVtKSk7IFwKQEAgLTY2Nyw3ICs3MDEsOCBAQAogICAgIH0gXAogICB9IHdoaWxlKDApIC8qIFBDRF9DTEVBUl9SWF9EVE9HICovCiAKLSNkZWZpbmUgUENEX0NMRUFSX1RYX0RUT0coVVNCeCwgYkVwTnVtKSBkbyB7IFwKKyNkZWZpbmUgUENEX0NMRUFSX1RYX0RUT0coVVNCeCwgYkVwTnVtKSBcCisgIGRvIHsgXAogICAgIHVpbnQxNl90IF93UmVnVmFsOyBcCiAgICAgXAogICAgIF93UmVnVmFsID0gUENEX0dFVF9FTkRQT0lOVCgoVVNCeCksIChiRXBOdW0pKTsgXApAQCAtNjg1LDcgKzcyMCw4IEBACiAgICogQHBhcmFtICBiQWRkciBBZGRyZXNzLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBQQ0RfU0VUX0VQX0FERFJFU1MoVVNCeCwgYkVwTnVtLCBiQWRkcikgZG8geyBcCisjZGVmaW5lIFBDRF9TRVRfRVBfQUREUkVTUyhVU0J4LCBiRXBOdW0sIGJBZGRyKSBcCisgIGRvIHsgXAogICAgIHVpbnQxNl90IF93UmVnVmFsOyBcCiAgICAgXAogICAgIF93UmVnVmFsID0gKFBDRF9HRVRfRU5EUE9JTlQoKFVTQngpLCAoYkVwTnVtKSkgJiBVU0JfRVBSRUdfTUFTSykgfCAoYkFkZHIpOyBcCkBAIC03MTEsMjMgKzc0NywyNSBAQAogICAqIEBwYXJhbSAgd0FkZHIgYWRkcmVzcyB0byBiZSBzZXQgKG11c3QgYmUgd29yZCBhbGlnbmVkKS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgUENEX1NFVF9FUF9UWF9BRERSRVNTKFVTQngsIGJFcE51bSwgd0FkZHIpIGRvIHsgXAotICBfX0lPIHVpbnQxNl90ICpfd1JlZ1ZhbDsgXAotICB1aW50MzJfdCBfd1JlZ0Jhc2UgPSAodWludDMyX3QpVVNCeDsgXAotICBcCi0gIF93UmVnQmFzZSArPSAodWludDMyX3QpKFVTQngpLT5CVEFCTEU7IFwKLSAgX3dSZWdWYWwgPSAoX19JTyB1aW50MTZfdCAqKShfd1JlZ0Jhc2UgKyAweDQwMFUgKyAoKCh1aW50MzJfdCkoYkVwTnVtKSAqIDhVKSAqIFBNQV9BQ0NFU1MpKTsgXAotICAqX3dSZWdWYWwgPSAoKHdBZGRyKSA+PiAxKSA8PCAxOyBcCi19IHdoaWxlKDApIC8qIFBDRF9TRVRfRVBfVFhfQUREUkVTUyAqLworI2RlZmluZSBQQ0RfU0VUX0VQX1RYX0FERFJFU1MoVVNCeCwgYkVwTnVtLCB3QWRkcikgXAorICBkbyB7IFwKKyAgICBfX0lPIHVpbnQxNl90ICpfd1JlZ1ZhbDsgXAorICAgIHVpbnQzMl90IF93UmVnQmFzZSA9ICh1aW50MzJfdClVU0J4OyBcCisgICAgXAorICAgIF93UmVnQmFzZSArPSAodWludDMyX3QpKFVTQngpLT5CVEFCTEU7IFwKKyAgICBfd1JlZ1ZhbCA9IChfX0lPIHVpbnQxNl90ICopKF93UmVnQmFzZSArIDB4NDAwVSArICgoKHVpbnQzMl90KShiRXBOdW0pICogOFUpICogUE1BX0FDQ0VTUykpOyBcCisgICAgKl93UmVnVmFsID0gKCh3QWRkcikgPj4gMSkgPDwgMTsgXAorICB9IHdoaWxlKDApIC8qIFBDRF9TRVRfRVBfVFhfQUREUkVTUyAqLwogCi0jZGVmaW5lIFBDRF9TRVRfRVBfUlhfQUREUkVTUyhVU0J4LCBiRXBOdW0sIHdBZGRyKSBkbyB7IFwKLSAgX19JTyB1aW50MTZfdCAqX3dSZWdWYWw7IFwKLSAgdWludDMyX3QgX3dSZWdCYXNlID0gKHVpbnQzMl90KVVTQng7IFwKLSAgXAotICBfd1JlZ0Jhc2UgKz0gKHVpbnQzMl90KShVU0J4KS0+QlRBQkxFOyBcCi0gIF93UmVnVmFsID0gKF9fSU8gdWludDE2X3QgKikoX3dSZWdCYXNlICsgMHg0MDBVICsgKCgoKHVpbnQzMl90KShiRXBOdW0pICogOFUpICsgNFUpICogUE1BX0FDQ0VTUykpOyBcCi0gICpfd1JlZ1ZhbCA9ICgod0FkZHIpID4+IDEpIDw8IDE7IFwKLX0gd2hpbGUoMCkgLyogUENEX1NFVF9FUF9SWF9BRERSRVNTICovCisjZGVmaW5lIFBDRF9TRVRfRVBfUlhfQUREUkVTUyhVU0J4LCBiRXBOdW0sIHdBZGRyKSBcCisgIGRvIHsgXAorICAgIF9fSU8gdWludDE2X3QgKl93UmVnVmFsOyBcCisgICAgdWludDMyX3QgX3dSZWdCYXNlID0gKHVpbnQzMl90KVVTQng7IFwKKyAgICBcCisgICAgX3dSZWdCYXNlICs9ICh1aW50MzJfdCkoVVNCeCktPkJUQUJMRTsgXAorICAgIF93UmVnVmFsID0gKF9fSU8gdWludDE2X3QgKikoX3dSZWdCYXNlICsgMHg0MDBVICsgKCgoKHVpbnQzMl90KShiRXBOdW0pICogOFUpICsgNFUpICogUE1BX0FDQ0VTUykpOyBcCisgICAgKl93UmVnVmFsID0gKCh3QWRkcikgPj4gMSkgPDwgMTsgXAorICB9IHdoaWxlKDApIC8qIFBDRF9TRVRfRVBfUlhfQUREUkVTUyAqLwogCiAvKioKICAgKiBAYnJpZWYgIEdldHMgYWRkcmVzcyBvZiB0aGUgdHgvcnggYnVmZmVyLgpAQCAtNzQ1LDcgKzc4Myw4IEBACiAgICogQHBhcmFtICB3TkJsb2NrcyBuby4gb2YgQmxvY2tzLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBQQ0RfQ0FMQ19CTEszMihwZHdSZWcsIHdDb3VudCwgd05CbG9ja3MpIGRvIHsgXAorI2RlZmluZSBQQ0RfQ0FMQ19CTEszMihwZHdSZWcsIHdDb3VudCwgd05CbG9ja3MpIFwKKyAgZG8geyBcCiAgICAgKHdOQmxvY2tzKSA9ICh3Q291bnQpID4+IDU7IFwKICAgICBpZiAoKCh3Q291bnQpICYgMHgxZlUpID09IDBVKSBcCiAgICAgeyBcCkBAIC03NTQsNyArNzkzLDggQEAKICAgICAqKHBkd1JlZykgPSAodWludDE2X3QpKCgod05CbG9ja3MpIDw8IDEwKSB8IFVTQl9DTlRSWF9CTFNJWkUpOyBcCiAgIH0gd2hpbGUoMCkgLyogUENEX0NBTENfQkxLMzIgKi8KIAotI2RlZmluZSBQQ0RfQ0FMQ19CTEsyKHBkd1JlZywgd0NvdW50LCB3TkJsb2NrcykgZG8geyBcCisjZGVmaW5lIFBDRF9DQUxDX0JMSzIocGR3UmVnLCB3Q291bnQsIHdOQmxvY2tzKSBcCisgIGRvIHsgXAogICAgICh3TkJsb2NrcykgPSAod0NvdW50KSA+PiAxOyBcCiAgICAgaWYgKCgod0NvdW50KSAmIDB4MVUpICE9IDBVKSBcCiAgICAgeyBcCkBAIC03NjMsNyArODAzLDggQEAKICAgICAqKHBkd1JlZykgPSAodWludDE2X3QpKCh3TkJsb2NrcykgPDwgMTApOyBcCiAgIH0gd2hpbGUoMCkgLyogUENEX0NBTENfQkxLMiAqLwogCi0jZGVmaW5lIFBDRF9TRVRfRVBfQ05UX1JYX1JFRyhwZHdSZWcsIHdDb3VudCkgIGRvIHsgXAorI2RlZmluZSBQQ0RfU0VUX0VQX0NOVF9SWF9SRUcocGR3UmVnLCB3Q291bnQpIFwKKyAgZG8geyBcCiAgICAgdWludDMyX3Qgd05CbG9ja3M7IFwKICAgICBpZiAoKHdDb3VudCkgPT0gMFUpIFwKICAgICB7IFwKQEAgLTc4MCwxMCArODIxLDExIEBACiAgICAgfSBcCiAgIH0gd2hpbGUoMCkgLyogUENEX1NFVF9FUF9DTlRfUlhfUkVHICovCiAKLSNkZWZpbmUgUENEX1NFVF9FUF9SWF9EQlVGMF9DTlQoVVNCeCwgYkVwTnVtLCB3Q291bnQpIGRvIHsgXAotICAgICB1aW50MzJfdCBfd1JlZ0Jhc2UgPSAodWludDMyX3QpKFVTQngpOyBcCi0gICAgIF9fSU8gdWludDE2X3QgKnBkd1JlZzsgXAotICAgICBcCisjZGVmaW5lIFBDRF9TRVRfRVBfUlhfREJVRjBfQ05UKFVTQngsIGJFcE51bSwgd0NvdW50KSBcCisgIGRvIHsgXAorICAgIHVpbnQzMl90IF93UmVnQmFzZSA9ICh1aW50MzJfdCkoVVNCeCk7IFwKKyAgICBfX0lPIHVpbnQxNl90ICpwZHdSZWc7IFwKKyAgICBcCiAgICAgX3dSZWdCYXNlICs9ICh1aW50MzJfdCkoVVNCeCktPkJUQUJMRTsgXAogICAgIHBkd1JlZyA9IChfX0lPIHVpbnQxNl90ICopKF93UmVnQmFzZSArIDB4NDAwVSArICgoKCh1aW50MzJfdCkoYkVwTnVtKSAqIDhVKSArIDJVKSAqIFBNQV9BQ0NFU1MpKTsgXAogICAgIFBDRF9TRVRfRVBfQ05UX1JYX1JFRyhwZHdSZWcsICh3Q291bnQpKTsgXApAQCAtNzk2LDIzICs4MzgsMjUgQEAKICAgKiBAcGFyYW0gIHdDb3VudCBDb3VudGVyIHZhbHVlLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBQQ0RfU0VUX0VQX1RYX0NOVChVU0J4LCBiRXBOdW0sIHdDb3VudCkgZG8geyBcCisjZGVmaW5lIFBDRF9TRVRfRVBfVFhfQ05UKFVTQngsIGJFcE51bSwgd0NvdW50KSBcCisgIGRvIHsgXAogICAgIHVpbnQzMl90IF93UmVnQmFzZSA9ICh1aW50MzJfdCkoVVNCeCk7IFwKICAgICBfX0lPIHVpbnQxNl90ICpfd1JlZ1ZhbDsgXAogICAgIFwKICAgICBfd1JlZ0Jhc2UgKz0gKHVpbnQzMl90KShVU0J4KS0+QlRBQkxFOyBcCiAgICAgX3dSZWdWYWwgPSAoX19JTyB1aW50MTZfdCAqKShfd1JlZ0Jhc2UgKyAweDQwMFUgKyAoKCgodWludDMyX3QpKGJFcE51bSkgKiA4VSkgKyAyVSkgKiBQTUFfQUNDRVNTKSk7IFwKICAgICAqX3dSZWdWYWwgPSAodWludDE2X3QpKHdDb3VudCk7IFwKLX0gd2hpbGUoMCkKKyAgfSB3aGlsZSgwKQogCi0jZGVmaW5lIFBDRF9TRVRfRVBfUlhfQ05UKFVTQngsIGJFcE51bSwgd0NvdW50KSBkbyB7IFwKKyNkZWZpbmUgUENEX1NFVF9FUF9SWF9DTlQoVVNCeCwgYkVwTnVtLCB3Q291bnQpIFwKKyAgZG8geyBcCiAgICAgdWludDMyX3QgX3dSZWdCYXNlID0gKHVpbnQzMl90KShVU0J4KTsgXAogICAgIF9fSU8gdWludDE2X3QgKl93UmVnVmFsOyBcCiAgICAgXAogICAgIF93UmVnQmFzZSArPSAodWludDMyX3QpKFVTQngpLT5CVEFCTEU7IFwKICAgICBfd1JlZ1ZhbCA9IChfX0lPIHVpbnQxNl90ICopKF93UmVnQmFzZSArIDB4NDAwVSArICgoKCh1aW50MzJfdCkoYkVwTnVtKSAqIDhVKSArIDZVKSAqIFBNQV9BQ0NFU1MpKTsgXAogICAgIFBDRF9TRVRfRVBfQ05UX1JYX1JFRyhfd1JlZ1ZhbCwgKHdDb3VudCkpOyBcCi19IHdoaWxlKDApCisgIH0gd2hpbGUoMCkKIAogLyoqCiAgICogQGJyaWVmICBnZXRzIGNvdW50ZXIgb2YgdGhlIHR4IGJ1ZmZlci4KQEAgLTgzMCwxMCArODc0LDEzIEBACiAgICogQHBhcmFtICB3QnVmMEFkZHIgYnVmZmVyIDAgYWRkcmVzcy4KICAgKiBAcmV0dmFsIENvdW50ZXIgdmFsdWUKICAgKi8KLSNkZWZpbmUgUENEX1NFVF9FUF9EQlVGMF9BRERSKFVTQngsIGJFcE51bSwgd0J1ZjBBZGRyKSBkbyB7IFwKKyNkZWZpbmUgUENEX1NFVF9FUF9EQlVGMF9BRERSKFVTQngsIGJFcE51bSwgd0J1ZjBBZGRyKSBcCisgIGRvIHsgXAogICAgIFBDRF9TRVRfRVBfVFhfQUREUkVTUygoVVNCeCksIChiRXBOdW0pLCAod0J1ZjBBZGRyKSk7IFwKICAgfSB3aGlsZSgwKSAvKiBQQ0RfU0VUX0VQX0RCVUYwX0FERFIgKi8KLSNkZWZpbmUgUENEX1NFVF9FUF9EQlVGMV9BRERSKFVTQngsIGJFcE51bSwgd0J1ZjFBZGRyKSBkbyB7IFwKKworI2RlZmluZSBQQ0RfU0VUX0VQX0RCVUYxX0FERFIoVVNCeCwgYkVwTnVtLCB3QnVmMUFkZHIpIFwKKyAgZG8geyBcCiAgICAgUENEX1NFVF9FUF9SWF9BRERSRVNTKChVU0J4KSwgKGJFcE51bSksICh3QnVmMUFkZHIpKTsgXAogICB9IHdoaWxlKDApIC8qIFBDRF9TRVRfRVBfREJVRjFfQUREUiAqLwogCkBAIC04NDUsNyArODkyLDggQEAKICAgKiBAcGFyYW0gIHdCdWYxQWRkciA9IGJ1ZmZlciAxIGFkZHJlc3MuCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIFBDRF9TRVRfRVBfREJVRl9BRERSKFVTQngsIGJFcE51bSwgd0J1ZjBBZGRyLCB3QnVmMUFkZHIpIGRvIHsgXAorI2RlZmluZSBQQ0RfU0VUX0VQX0RCVUZfQUREUihVU0J4LCBiRXBOdW0sIHdCdWYwQWRkciwgd0J1ZjFBZGRyKSBcCisgIGRvIHsgXAogICAgIFBDRF9TRVRfRVBfREJVRjBfQUREUigoVVNCeCksIChiRXBOdW0pLCAod0J1ZjBBZGRyKSk7IFwKICAgICBQQ0RfU0VUX0VQX0RCVUYxX0FERFIoKFVTQngpLCAoYkVwTnVtKSwgKHdCdWYxQWRkcikpOyBcCiAgIH0gd2hpbGUoMCkgLyogUENEX1NFVF9FUF9EQlVGX0FERFIgKi8KQEAgLTg2OCw3ICs5MTYsOCBAQAogICAqIEBwYXJhbSAgd0NvdW50OiBDb3VudGVyIHZhbHVlCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIFBDRF9TRVRfRVBfREJVRjBfQ05UKFVTQngsIGJFcE51bSwgYkRpciwgd0NvdW50KSBkbyB7IFwKKyNkZWZpbmUgUENEX1NFVF9FUF9EQlVGMF9DTlQoVVNCeCwgYkVwTnVtLCBiRGlyLCB3Q291bnQpIFwKKyAgZG8geyBcCiAgICAgaWYgKChiRGlyKSA9PSAwVSkgXAogICAgICAgLyogT1VUIGVuZHBvaW50ICovIFwKICAgICB7IFwKQEAgLTg4NCw3ICs5MzMsOCBAQAogICAgIH0gXAogICB9IHdoaWxlKDApIC8qIFNldEVQRGJsQnVmMENvdW50Ki8KIAotI2RlZmluZSBQQ0RfU0VUX0VQX0RCVUYxX0NOVChVU0J4LCBiRXBOdW0sIGJEaXIsIHdDb3VudCkgZG8geyBcCisjZGVmaW5lIFBDRF9TRVRfRVBfREJVRjFfQ05UKFVTQngsIGJFcE51bSwgYkRpciwgd0NvdW50KSBcCisgIGRvIHsgXAogICAgIHVpbnQzMl90IF93QmFzZSA9ICh1aW50MzJfdCkoVVNCeCk7IFwKICAgICBfX0lPIHVpbnQxNl90ICpfd0VQUmVnVmFsOyBcCiAgICAgXApAQCAtOTA1LDcgKzk1NSw4IEBACiAgICAgfSBcCiAgIH0gd2hpbGUoMCkgLyogU2V0RVBEYmxCdWYxQ291bnQgKi8KIAotI2RlZmluZSBQQ0RfU0VUX0VQX0RCVUZfQ05UKFVTQngsIGJFcE51bSwgYkRpciwgd0NvdW50KSBkbyB7IFwKKyNkZWZpbmUgUENEX1NFVF9FUF9EQlVGX0NOVChVU0J4LCBiRXBOdW0sIGJEaXIsIHdDb3VudCkgXAorICBkbyB7IFwKICAgICBQQ0RfU0VUX0VQX0RCVUYwX0NOVCgoVVNCeCksIChiRXBOdW0pLCAoYkRpciksICh3Q291bnQpKTsgXAogICAgIFBDRF9TRVRfRVBfREJVRjFfQ05UKChVU0J4KSwgKGJFcE51bSksIChiRGlyKSwgKHdDb3VudCkpOyBcCiAgIH0gd2hpbGUoMCkgLyogUENEX1NFVF9FUF9EQlVGX0NOVCAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDV4eF9oYWxfcGNkX2V4LmggYi9JbmMvc3RtMzJsNXh4X2hhbF9wY2RfZXguaAppbmRleCAwZGJmYzk0Li4xMWRkYjJlIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNXh4X2hhbF9wY2RfZXguaAorKysgYi9JbmMvc3RtMzJsNXh4X2hhbF9wY2RfZXguaApAQCAtNDksMTAgKzQ5LDggQEAKIAogCiAKLUhBTF9TdGF0dXNUeXBlRGVmICBIQUxfUENERXhfUE1BQ29uZmlnKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgZXBfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGVwX2tpbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwbWFhZHJlc3MpOworSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9QQ0RFeF9QTUFDb25maWcoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIHVpbnQxNl90IGVwX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBlcF9raW5kLCB1aW50MzJfdCBwbWFhZHJlc3MpOwogCiAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RFeF9BY3RpdmF0ZUxQTShQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCk7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNXh4X2hhbF9yY2MuaCBiL0luYy9zdG0zMmw1eHhfaGFsX3JjYy5oCmluZGV4IGI5MmVjOTIuLjNjMzY3NjUgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw1eHhfaGFsX3JjYy5oCisrKyBiL0luYy9zdG0zMmw1eHhfaGFsX3JjYy5oCkBAIC02NTIsNTkgKzY1Miw1OSBAQAogICAqLwogCiAjZGVmaW5lIF9fSEFMX1JDQ19ETUExX0NMS19FTkFCTEUoKSAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjFFTlIsIFJDQ19BSEIxRU5SX0RNQTFFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIxRU5SLCBSQ0NfQUhCMUVOUl9ETUExRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjFFTlIsIFJDQ19BSEIxRU5SX0RNQTFFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIxRU5SLCBSQ0NfQUhCMUVOUl9ETUExRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19ETUEyX0NMS19FTkFCTEUoKSAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjFFTlIsIFJDQ19BSEIxRU5SX0RNQTJFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIxRU5SLCBSQ0NfQUhCMUVOUl9ETUEyRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjFFTlIsIFJDQ19BSEIxRU5SX0RNQTJFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIxRU5SLCBSQ0NfQUhCMUVOUl9ETUEyRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19ETUFNVVgxX0NMS19FTkFCTEUoKSAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjFFTlIsIFJDQ19BSEIxRU5SX0RNQU1VWDFFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIxRU5SLCBSQ0NfQUhCMUVOUl9ETUFNVVgxRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjFFTlIsIFJDQ19BSEIxRU5SX0RNQU1VWDFFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIxRU5SLCBSQ0NfQUhCMUVOUl9ETUFNVVgxRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogI2RlZmluZSBfX0hBTF9SQ0NfRkxBU0hfQ0xLX0VOQUJMRSgpICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BSEIxRU5SLCBSQ0NfQUhCMUVOUl9GTEFTSEVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFIQjFFTlIsIFJDQ19BSEIxRU5SX0ZMQVNIRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjFFTlIsIFJDQ19BSEIxRU5SX0ZMQVNIRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QUhCMUVOUiwgUkNDX0FIQjFFTlJfRkxBU0hFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKICNkZWZpbmUgX19IQUxfUkNDX0NSQ19DTEtfRU5BQkxFKCkgICAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QUhCMUVOUiwgUkNDX0FIQjFFTlJfQ1JDRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QUhCMUVOUiwgUkNDX0FIQjFFTlJfQ1JDRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjFFTlIsIFJDQ19BSEIxRU5SX0NSQ0VOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFIQjFFTlIsIFJDQ19BSEIxRU5SX0NSQ0VOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBfX0hBTF9SQ0NfVFNDX0NMS19FTkFCTEUoKSAgICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BSEIxRU5SLCBSQ0NfQUhCMUVOUl9UU0NFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIxRU5SLCBSQ0NfQUhCMUVOUl9UU0NFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QUhCMUVOUiwgUkNDX0FIQjFFTlJfVFNDRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QUhCMUVOUiwgUkNDX0FIQjFFTlJfVFNDRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19HVFpDX0NMS19FTkFCTEUoKSAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjFFTlIsIFJDQ19BSEIxRU5SX0dUWkNFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIxRU5SLCBSQ0NfQUhCMUVOUl9HVFpDRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjFFTlIsIFJDQ19BSEIxRU5SX0dUWkNFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIxRU5SLCBSQ0NfQUhCMUVOUl9HVFpDRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAKICNkZWZpbmUgX19IQUxfUkNDX0RNQTFfQ0xLX0RJU0FCTEUoKSAgICAgICAgICAgQ0xFQVJfQklUKFJDQy0+QUhCMUVOUiwgUkNDX0FIQjFFTlJfRE1BMUVOKQpAQCAtNzM0LDEyOCArNzM0LDEyOCBAQAogICAqLwogCiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPQV9DTEtfRU5BQkxFKCkgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjJFTlIsIFJDQ19BSEIyRU5SX0dQSU9BRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfR1BJT0FFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfR1BJT0FFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIyRU5SLCBSQ0NfQUhCMkVOUl9HUElPQUVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0JfQ0xLX0VOQUJMRSgpICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BSEIyRU5SLCBSQ0NfQUhCMkVOUl9HUElPQkVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFIQjJFTlIsIFJDQ19BSEIyRU5SX0dQSU9CRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjJFTlIsIFJDQ19BSEIyRU5SX0dQSU9CRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfR1BJT0JFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKICNkZWZpbmUgX19IQUxfUkNDX0dQSU9DX0NMS19FTkFCTEUoKSAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfR1BJT0NFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIyRU5SLCBSQ0NfQUhCMkVOUl9HUElPQ0VOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BSEIyRU5SLCBSQ0NfQUhCMkVOUl9HUElPQ0VOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFIQjJFTlIsIFJDQ19BSEIyRU5SX0dQSU9DRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPRF9DTEtfRU5BQkxFKCkgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjJFTlIsIFJDQ19BSEIyRU5SX0dQSU9ERU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfR1BJT0RFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfR1BJT0RFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIyRU5SLCBSQ0NfQUhCMkVOUl9HUElPREVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0VfQ0xLX0VOQUJMRSgpICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BSEIyRU5SLCBSQ0NfQUhCMkVOUl9HUElPRUVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFIQjJFTlIsIFJDQ19BSEIyRU5SX0dQSU9FRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjJFTlIsIFJDQ19BSEIyRU5SX0dQSU9FRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfR1BJT0VFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKICNkZWZpbmUgX19IQUxfUkNDX0dQSU9GX0NMS19FTkFCTEUoKSAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfR1BJT0ZFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIyRU5SLCBSQ0NfQUhCMkVOUl9HUElPRkVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BSEIyRU5SLCBSQ0NfQUhCMkVOUl9HUElPRkVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFIQjJFTlIsIFJDQ19BSEIyRU5SX0dQSU9GRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPR19DTEtfRU5BQkxFKCkgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjJFTlIsIFJDQ19BSEIyRU5SX0dQSU9HRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfR1BJT0dFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfR1BJT0dFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIyRU5SLCBSQ0NfQUhCMkVOUl9HUElPR0VOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0hfQ0xLX0VOQUJMRSgpICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BSEIyRU5SLCBSQ0NfQUhCMkVOUl9HUElPSEVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFIQjJFTlIsIFJDQ19BSEIyRU5SX0dQSU9IRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjJFTlIsIFJDQ19BSEIyRU5SX0dQSU9IRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfR1BJT0hFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKICNkZWZpbmUgX19IQUxfUkNDX0FEQ19DTEtfRU5BQkxFKCkgICAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfQURDRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfQURDRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjJFTlIsIFJDQ19BSEIyRU5SX0FEQ0VOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFIQjJFTlIsIFJDQ19BSEIyRU5SX0FEQ0VOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2lmIGRlZmluZWQoQUVTKQogI2RlZmluZSBfX0hBTF9SQ0NfQUVTX0NMS19FTkFCTEUoKSAgICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BSEIyRU5SLCBSQ0NfQUhCMkVOUl9BRVNFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIyRU5SLCBSQ0NfQUhCMkVOUl9BRVNFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfQUVTRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfQUVTRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogI2VuZGlmIC8qIEFFUyAqLwogCiAjaWYgZGVmaW5lZChIQVNIKQogI2RlZmluZSBfX0hBTF9SQ0NfSEFTSF9DTEtfRU5BQkxFKCkgICAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfSEFTSEVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFIQjJFTlIsIFJDQ19BSEIyRU5SX0hBU0hFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BSEIyRU5SLCBSQ0NfQUhCMkVOUl9IQVNIRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFIQjJFTlIsIFJDQ19BSEIyRU5SX0hBU0hFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKICNlbmRpZiAvKiBIQVNIICovCiAKICNkZWZpbmUgX19IQUxfUkNDX1JOR19DTEtfRU5BQkxFKCkgICAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfUk5HRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfUk5HRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjJFTlIsIFJDQ19BSEIyRU5SX1JOR0VOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFIQjJFTlIsIFJDQ19BSEIyRU5SX1JOR0VOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBfX0hBTF9SQ0NfUEtBX0NMS19FTkFCTEUoKSAgICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BSEIyRU5SLCBSQ0NfQUhCMkVOUl9QS0FFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIyRU5SLCBSQ0NfQUhCMkVOUl9QS0FFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfUEtBRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfUEtBRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19PVEZERUMxX0NMS19FTkFCTEUoKSAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjJFTlIsIFJDQ19BSEIyRU5SX09URkRFQzFFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIyRU5SLCBSQ0NfQUhCMkVOUl9PVEZERUMxRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjJFTlIsIFJDQ19BSEIyRU5SX09URkRFQzFFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIyRU5SLCBSQ0NfQUhCMkVOUl9PVEZERUMxRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19TRE1NQzFfQ0xLX0VOQUJMRSgpICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjJFTlIsIFJDQ19BSEIyRU5SX1NETU1DMUVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFIQjJFTlIsIFJDQ19BSEIyRU5SX1NETU1DMUVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BSEIyRU5SLCBSQ0NfQUhCMkVOUl9TRE1NQzFFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIyRU5SLCBSQ0NfQUhCMkVOUl9TRE1NQzFFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKIAogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0FfQ0xLX0RJU0FCTEUoKSAgICAgICAgICBDTEVBUl9CSVQoUkNDLT5BSEIyRU5SLCBSQ0NfQUhCMkVOUl9HUElPQUVOKQpAQCAtOTA1LDIwICs5MDUsMjAgQEAKICAgKi8KIAogI2RlZmluZSBfX0hBTF9SQ0NfRk1DX0NMS19FTkFCTEUoKSAgICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BSEIzRU5SLCBSQ0NfQUhCM0VOUl9GTUNFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIzRU5SLCBSQ0NfQUhCM0VOUl9GTUNFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QUhCM0VOUiwgUkNDX0FIQjNFTlJfRk1DRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QUhCM0VOUiwgUkNDX0FIQjNFTlJfRk1DRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19PU1BJMV9DTEtfRU5BQkxFKCkgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFIQjNFTlIsIFJDQ19BSEIzRU5SX09TUEkxRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QUhCM0VOUiwgUkNDX0FIQjNFTlJfT1NQSTFFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QUhCM0VOUiwgUkNDX0FIQjNFTlJfT1NQSTFFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIzRU5SLCBSQ0NfQUhCM0VOUl9PU1BJMUVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBfX0hBTF9SQ0NfRk1DX0NMS19ESVNBQkxFKCkgICAgICAgICAgICBDTEVBUl9CSVQoUkNDLT5BSEIzRU5SLCBSQ0NfQUhCM0VOUl9GTUNFTikKIApAQCAtOTM3LDIzOCArOTM3LDIzOCBAQAogICAqLwogCiAjZGVmaW5lIF9fSEFMX1JDQ19USU0yX0NMS19FTkFCTEUoKSAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfVElNMkVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfVElNMkVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX1RJTTJFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX1RJTTJFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKICNkZWZpbmUgX19IQUxfUkNDX1RJTTNfQ0xLX0VOQUJMRSgpICAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9USU0zRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9USU0zRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfVElNM0VOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfVElNM0VOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBfX0hBTF9SQ0NfVElNNF9DTEtfRU5BQkxFKCkgICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX1RJTTRFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX1RJTTRFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9USU00RU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9USU00RU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19USU01X0NMS19FTkFCTEUoKSAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfVElNNUVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfVElNNUVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX1RJTTVFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX1RJTTVFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKICNkZWZpbmUgX19IQUxfUkNDX1RJTTZfQ0xLX0VOQUJMRSgpICAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9USU02RU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9USU02RU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfVElNNkVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfVElNNkVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBfX0hBTF9SQ0NfVElNN19DTEtfRU5BQkxFKCkgICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX1RJTTdFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX1RJTTdFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9USU03RU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9USU03RU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19SVENBUEJfQ0xLX0VOQUJMRSgpICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfUlRDQVBCRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9SVENBUEJFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9SVENBUEJFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX1JUQ0FQQkVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBfX0hBTF9SQ0NfV1dER19DTEtfRU5BQkxFKCkgICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX1dXREdFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX1dXREdFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9XV0RHRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9XV0RHRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19TUEkyX0NMS19FTkFCTEUoKSAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfU1BJMkVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfU1BJMkVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX1NQSTJFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX1NQSTJFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKICNkZWZpbmUgX19IQUxfUkNDX1NQSTNfQ0xLX0VOQUJMRSgpICAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9TUEkzRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9TUEkzRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfU1BJM0VOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfU1BJM0VOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBfX0hBTF9SQ0NfVVNBUlQyX0NMS19FTkFCTEUoKSAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX1VTQVJUMkVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfVVNBUlQyRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfVVNBUlQyRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9VU0FSVDJFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKICNkZWZpbmUgX19IQUxfUkNDX1VTQVJUM19DTEtfRU5BQkxFKCkgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9VU0FSVDNFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX1VTQVJUM0VOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX1VTQVJUM0VOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfVVNBUlQzRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19VQVJUNF9DTEtfRU5BQkxFKCkgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfVUFSVDRFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX1VBUlQ0RU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfVUFSVDRFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX1VBUlQ0RU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19VQVJUNV9DTEtfRU5BQkxFKCkgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfVUFSVDVFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX1VBUlQ1RU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfVUFSVDVFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX1VBUlQ1RU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19JMkMxX0NMS19FTkFCTEUoKSAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfSTJDMUVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfSTJDMUVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX0kyQzFFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX0kyQzFFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKICNkZWZpbmUgX19IQUxfUkNDX0kyQzJfQ0xLX0VOQUJMRSgpICAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9JMkMyRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9JMkMyRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfSTJDMkVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfSTJDMkVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBfX0hBTF9SQ0NfSTJDM19DTEtfRU5BQkxFKCkgICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX0kyQzNFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX0kyQzNFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9JMkMzRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9JMkMzRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19JMkM0X0NMS19FTkFCTEUoKSAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIyLCBSQ0NfQVBCMUVOUjJfSTJDNEVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjFFTlIyLCBSQ0NfQVBCMUVOUjJfSTJDNEVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIxRU5SMiwgUkNDX0FQQjFFTlIyX0kyQzRFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMiwgUkNDX0FQQjFFTlIyX0kyQzRFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKICNkZWZpbmUgX19IQUxfUkNDX0NSU19DTEtfRU5BQkxFKCkgICAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9DUlNFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX0NSU0VOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX0NSU0VOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfQ1JTRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19QV1JfQ0xLX0VOQUJMRSgpICAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfUFdSRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9QV1JFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9QV1JFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX1BXUkVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBfX0hBTF9SQ0NfREFDMV9DTEtfRU5BQkxFKCkgICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX0RBQzFFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX0RBQzFFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9EQUMxRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9EQUMxRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19PUEFNUF9DTEtfRU5BQkxFKCkgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfT1BBTVBFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX09QQU1QRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfT1BBTVBFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX09QQU1QRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19MUFRJTTFfQ0xLX0VOQUJMRSgpICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIxLCBSQ0NfQVBCMUVOUjFfTFBUSU0xRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9MUFRJTTFFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9MUFRJTTFFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMSwgUkNDX0FQQjFFTlIxX0xQVElNMUVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBfX0hBTF9SQ0NfTFBVQVJUMV9DTEtfRU5BQkxFKCkgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIxRU5SMiwgUkNDX0FQQjFFTlIyX0xQVUFSVDFFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMiwgUkNDX0FQQjFFTlIyX0xQVUFSVDFFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMUVOUjIsIFJDQ19BUEIxRU5SMl9MUFVBUlQxRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMUVOUjIsIFJDQ19BUEIxRU5SMl9MUFVBUlQxRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19MUFRJTTJfQ0xLX0VOQUJMRSgpICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIyLCBSQ0NfQVBCMUVOUjJfTFBUSU0yRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMUVOUjIsIFJDQ19BUEIxRU5SMl9MUFRJTTJFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMUVOUjIsIFJDQ19BUEIxRU5SMl9MUFRJTTJFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMiwgUkNDX0FQQjFFTlIyX0xQVElNMkVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBfX0hBTF9SQ0NfTFBUSU0zX0NMS19FTkFCTEUoKSAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIxRU5SMiwgUkNDX0FQQjFFTlIyX0xQVElNM0VOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjFFTlIyLCBSQ0NfQVBCMUVOUjJfTFBUSU0zRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIyLCBSQ0NfQVBCMUVOUjJfTFBUSU0zRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMUVOUjIsIFJDQ19BUEIxRU5SMl9MUFRJTTNFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKICNkZWZpbmUgX19IQUxfUkNDX0ZEQ0FOMV9DTEtfRU5BQkxFKCkgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMUVOUjIsIFJDQ19BUEIxRU5SMl9GRENBTjFFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMiwgUkNDX0FQQjFFTlIyX0ZEQ0FOMUVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIxRU5SMiwgUkNDX0FQQjFFTlIyX0ZEQ0FOMUVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjFFTlIyLCBSQ0NfQVBCMUVOUjJfRkRDQU4xRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjaWYgZGVmaW5lZChVU0IpCiAjZGVmaW5lIF9fSEFMX1JDQ19VU0JfQ0xLX0VOQUJMRSgpICAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIyLCBSQ0NfQVBCMUVOUjJfVVNCRlNFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMiwgUkNDX0FQQjFFTlIyX1VTQkZTRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIyLCBSQ0NfQVBCMUVOUjJfVVNCRlNFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMiwgUkNDX0FQQjFFTlIyX1VTQkZTRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogI2VuZGlmIC8qIFVTQiAqLwogCiAjZGVmaW5lIF9fSEFMX1JDQ19VQ1BEMV9DTEtfRU5BQkxFKCkgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIyLCBSQ0NfQVBCMUVOUjJfVUNQRDFFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMiwgUkNDX0FQQjFFTlIyX1VDUEQxRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFFTlIyLCBSQ0NfQVBCMUVOUjJfVUNQRDFFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SMiwgUkNDX0FQQjFFTlIyX1VDUEQxRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAKICNkZWZpbmUgX19IQUxfUkNDX1RJTTJfQ0xLX0RJU0FCTEUoKSAgICAgICAgICAgQ0xFQVJfQklUKFJDQy0+QVBCMUVOUjEsIFJDQ19BUEIxRU5SMV9USU0yRU4pCkBAIC0xMjQyLDkzICsxMjQyLDkzIEBACiAgICovCiAKICNkZWZpbmUgX19IQUxfUkNDX1NZU0NGR19DTEtfRU5BQkxFKCkgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMkVOUiwgUkNDX0FQQjJFTlJfU1lTQ0ZHRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMkVOUiwgUkNDX0FQQjJFTlJfU1lTQ0ZHRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjJFTlIsIFJDQ19BUEIyRU5SX1NZU0NGR0VOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjJFTlIsIFJDQ19BUEIyRU5SX1NZU0NGR0VOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBfX0hBTF9SQ0NfVElNMV9DTEtfRU5BQkxFKCkgICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIyRU5SLCBSQ0NfQVBCMkVOUl9USU0xRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMkVOUiwgUkNDX0FQQjJFTlJfVElNMUVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIyRU5SLCBSQ0NfQVBCMkVOUl9USU0xRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMkVOUiwgUkNDX0FQQjJFTlJfVElNMUVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBfX0hBTF9SQ0NfU1BJMV9DTEtfRU5BQkxFKCkgICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIyRU5SLCBSQ0NfQVBCMkVOUl9TUEkxRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMkVOUiwgUkNDX0FQQjJFTlJfU1BJMUVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIyRU5SLCBSQ0NfQVBCMkVOUl9TUEkxRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMkVOUiwgUkNDX0FQQjJFTlJfU1BJMUVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBfX0hBTF9SQ0NfVElNOF9DTEtfRU5BQkxFKCkgICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIyRU5SLCBSQ0NfQVBCMkVOUl9USU04RU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMkVOUiwgUkNDX0FQQjJFTlJfVElNOEVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIyRU5SLCBSQ0NfQVBCMkVOUl9USU04RU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMkVOUiwgUkNDX0FQQjJFTlJfVElNOEVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBfX0hBTF9SQ0NfVVNBUlQxX0NMS19FTkFCTEUoKSAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIyRU5SLCBSQ0NfQVBCMkVOUl9VU0FSVDFFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIyRU5SLCBSQ0NfQVBCMkVOUl9VU0FSVDFFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMkVOUiwgUkNDX0FQQjJFTlJfVVNBUlQxRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMkVOUiwgUkNDX0FQQjJFTlJfVVNBUlQxRU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAKICNkZWZpbmUgX19IQUxfUkNDX1RJTTE1X0NMS19FTkFCTEUoKSAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMkVOUiwgUkNDX0FQQjJFTlJfVElNMTVFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIyRU5SLCBSQ0NfQVBCMkVOUl9USU0xNUVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIyRU5SLCBSQ0NfQVBCMkVOUl9USU0xNUVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjJFTlIsIFJDQ19BUEIyRU5SX1RJTTE1RU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19USU0xNl9DTEtfRU5BQkxFKCkgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjJFTlIsIFJDQ19BUEIyRU5SX1RJTTE2RU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMkVOUiwgUkNDX0FQQjJFTlJfVElNMTZFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMkVOUiwgUkNDX0FQQjJFTlJfVElNMTZFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIyRU5SLCBSQ0NfQVBCMkVOUl9USU0xNkVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBfX0hBTF9SQ0NfVElNMTdfQ0xLX0VOQUJMRSgpICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIyRU5SLCBSQ0NfQVBCMkVOUl9USU0xN0VOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjJFTlIsIFJDQ19BUEIyRU5SX1RJTTE3RU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjJFTlIsIFJDQ19BUEIyRU5SX1RJTTE3RU4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMkVOUiwgUkNDX0FQQjJFTlJfVElNMTdFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKICNkZWZpbmUgX19IQUxfUkNDX1NBSTFfQ0xLX0VOQUJMRSgpICAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMkVOUiwgUkNDX0FQQjJFTlJfU0FJMUVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjJFTlIsIFJDQ19BUEIyRU5SX1NBSTFFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMkVOUiwgUkNDX0FQQjJFTlJfU0FJMUVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjJFTlIsIFJDQ19BUEIyRU5SX1NBSTFFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKICNkZWZpbmUgX19IQUxfUkNDX1NBSTJfQ0xLX0VOQUJMRSgpICAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMkVOUiwgUkNDX0FQQjJFTlJfU0FJMkVOKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjJFTlIsIFJDQ19BUEIyRU5SX1NBSTJFTik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMkVOUiwgUkNDX0FQQjJFTlJfU0FJMkVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjJFTlIsIFJDQ19BUEIyRU5SX1NBSTJFTik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKICNkZWZpbmUgX19IQUxfUkNDX0RGU0RNMV9DTEtfRU5BQkxFKCkgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMkVOUiwgUkNDX0FQQjJFTlJfREZTRE0xRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMkVOUiwgUkNDX0FQQjJFTlJfREZTRE0xRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjJFTlIsIFJDQ19BUEIyRU5SX0RGU0RNMUVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IGFmdGVyIGFuIFJDQyBwZXJpcGhlcmFsIGNsb2NrIGVuYWJsaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjJFTlIsIFJDQ19BUEIyRU5SX0RGU0RNMUVOKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogCiAjZGVmaW5lIF9fSEFMX1JDQ19TWVNDRkdfQ0xLX0RJU0FCTEUoKSAgICAgICAgIENMRUFSX0JJVChSQ0MtPkFQQjJFTlIsIFJDQ19BUEIyRU5SX1NZU0NGR0VOKQpAQCAtMTgxNCw5ICsxODE0LDkgQEAKICAgKiBAewogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfQVBCMV9GT1JDRV9SRVNFVCgpICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUklURV9SRUcoUkNDLT5BUEIxUlNUUjEsIDB4RkZGRkZGRkZVTCk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUklURV9SRUcoUkNDLT5BUEIxUlNUUjIsIDB4RkZGRkZGRkZVTCk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdSSVRFX1JFRyhSQ0MtPkFQQjFSU1RSMSwgMHhGRkZGRkZGRlVMKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdSSVRFX1JFRyhSQ0MtPkFQQjFSU1RSMiwgMHhGRkZGRkZGRlVMKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKICNkZWZpbmUgX19IQUxfUkNDX1RJTTJfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFSU1RSMSwgUkNDX0FQQjFSU1RSMV9USU0yUlNUKQogCkBAIC0xODc2LDkgKzE4NzYsOSBAQAogCiAKICNkZWZpbmUgX19IQUxfUkNDX0FQQjFfUkVMRUFTRV9SRVNFVCgpICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1JJVEVfUkVHKFJDQy0+QVBCMVJTVFIxLCAweDAwMDAwMDAwVUwpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1JJVEVfUkVHKFJDQy0+QVBCMVJTVFIyLCAweDAwMDAwMDAwVUwpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUklURV9SRUcoUkNDLT5BUEIxUlNUUjEsIDB4MDAwMDAwMDBVTCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUklURV9SRUcoUkNDLT5BUEIxUlNUUjIsIDB4MDAwMDAwMDBVTCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fSEFMX1JDQ19USU0yX1JFTEVBU0VfUkVTRVQoKSAgICAgICAgIENMRUFSX0JJVChSQ0MtPkFQQjFSU1RSMSwgUkNDX0FQQjFSU1RSMV9USU0yUlNUKQogCkBAIC0yNzQwLDcgKzI3NDAsNyBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfSFNJX0NBTElCUkFUSU9OVkFMVUVfQURKVVNUKF9fSFNJQ0FMSUJSQVRJT05WQUxVRV9fKSBcCi0gICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+SUNTQ1IsIFJDQ19JQ1NDUl9IU0lUUklNLCAodWludDMyX3QpKF9fSFNJQ0FMSUJSQVRJT05WQUxVRV9fKSA8PCBSQ0NfSUNTQ1JfSFNJVFJJTV9Qb3MpCisgIE1PRElGWV9SRUcoUkNDLT5JQ1NDUiwgUkNDX0lDU0NSX0hTSVRSSU0sICh1aW50MzJfdCkoX19IU0lDQUxJQlJBVElPTlZBTFVFX18pIDw8IFJDQ19JQ1NDUl9IU0lUUklNX1BvcykKIAogLyoqCiAgICogQGJyaWVmICAgIE1hY3JvcyB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgd2FrZXVwIHRoZSBJbnRlcm5hbCBIaWdoIFNwZWVkIG9zY2lsbGF0b3IgKEhTSSkKQEAgLTI3OTgsNyArMjc5OCw3IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19NU0lfQ0FMSUJSQVRJT05WQUxVRV9BREpVU1QoX19NU0lDQUxJQlJBVElPTlZBTFVFX18pIFwKLSAgICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5JQ1NDUiwgUkNDX0lDU0NSX01TSVRSSU0sICh1aW50MzJfdCkoX19NU0lDQUxJQlJBVElPTlZBTFVFX18pIDw8IDgpCisgIE1PRElGWV9SRUcoUkNDLT5JQ1NDUiwgUkNDX0lDU0NSX01TSVRSSU0sICh1aW50MzJfdCkoX19NU0lDQUxJQlJBVElPTlZBTFVFX18pIDw8IDgpCiAKIC8qKgogICAqIEBicmllZiAgTWFjcm8gY29uZmlndXJlcyB0aGUgSW50ZXJuYWwgTXVsdGkgU3BlZWQgb3NjaWxsYXRvciAoTVNJKSBjbG9jayByYW5nZSBpbiBydW4gbW9kZQpAQCAtMjgyNywxMCArMjgyNywxMCBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfTVNJX1JBTkdFX0NPTkZJRyhfX01TSVJBTkdFVkFMVUVfXykgXAotICAgICAgICAgICAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkNSLCBSQ0NfQ1JfTVNJUkdTRUwpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5DUiwgUkNDX0NSX01TSVJBTkdFLCAoX19NU0lSQU5HRVZBTFVFX18pKTsgXAotICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFNFVF9CSVQoUkNDLT5DUiwgUkNDX0NSX01TSVJHU0VMKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1PRElGWV9SRUcoUkNDLT5DUiwgUkNDX0NSX01TSVJBTkdFLCAoX19NU0lSQU5HRVZBTFVFX18pKTsgXAorICB9IHdoaWxlKDApCiAKIC8qKgogICAqIEBicmllZiAgTWFjcm8gY29uZmlndXJlcyB0aGUgSW50ZXJuYWwgTXVsdGkgU3BlZWQgb3NjaWxsYXRvciAoTVNJKSBjbG9jayByYW5nZSBhZnRlciBTdGFuZGJ5IG1vZGUKQEAgLTI4NDQsNyArMjg0NCw3IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19NU0lfU1RBTkRCWV9SQU5HRV9DT05GSUcoX19NU0lSQU5HRVZBTFVFX18pIFwKLSAgICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5DU1IsIFJDQ19DU1JfTVNJU1JBTkdFLCAoX19NU0lSQU5HRVZBTFVFX18pIDw8IDRVKQorICBNT0RJRllfUkVHKFJDQy0+Q1NSLCBSQ0NfQ1NSX01TSVNSQU5HRSwgKF9fTVNJUkFOR0VWQUxVRV9fKSA8PCA0VSkKIAogLyoqIEBicmllZiAgTWFjcm8gdG8gZ2V0IHRoZSBJbnRlcm5hbCBNdWx0aSBTcGVlZCBvc2NpbGxhdG9yIChNU0kpIGNsb2NrIHJhbmdlIGluIHJ1biBtb2RlCiAgICogQHJldHZhbCBNU0kgY2xvY2sgcmFuZ2UuCkBAIC0yODYzLDkgKzI4NjMsOSBAQAogICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19NU0lSQU5HRV8xMSAgTVNJIGNsb2NrIGlzIGFyb3VuZCA0OCBNSHoKICAgKi8KICNkZWZpbmUgX19IQUxfUkNDX0dFVF9NU0lfUkFOR0UoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAoKFJFQURfQklUKFJDQy0+Q1IsIFJDQ19DUl9NU0lSR1NFTCkgIT0gMFUpID8gICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkoUkVBRF9CSVQoUkNDLT5DUiwgUkNDX0NSX01TSVJBTkdFKSkgOiAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAodWludDMyX3QpKFJFQURfQklUKFJDQy0+Q1NSLCBSQ0NfQ1NSX01TSVNSQU5HRSkgPj4gNCkpCisgICgoUkVBRF9CSVQoUkNDLT5DUiwgUkNDX0NSX01TSVJHU0VMKSAhPSAwVSkgPyAgICAgICAgICAgICAgICBcCisgICAodWludDMyX3QpKFJFQURfQklUKFJDQy0+Q1IsIFJDQ19DUl9NU0lSQU5HRSkpIDogICAgICAgICAgICBcCisgICAodWludDMyX3QpKFJFQURfQklUKFJDQy0+Q1NSLCBSQ0NfQ1NSX01TSVNSQU5HRSkgPj4gNCkpCiAKIC8qKiBAYnJpZWYgIE1hY3JvcyB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgSW50ZXJuYWwgTG93IFNwZWVkIG9zY2lsbGF0b3IgKExTSSkuCiAgICogQG5vdGUgICBBZnRlciBlbmFibGluZyB0aGUgTFNJLCB0aGUgYXBwbGljYXRpb24gc29mdHdhcmUgc2hvdWxkIHdhaXQgb24KQEAgLTI5MDQsMjIgKzI5MDQsMjIgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUkNDX0hTRV9DT05GSUcoX19TVEFURV9fKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgIGlmKChfX1NUQVRFX18pID09IFJDQ19IU0VfT04pICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+Q1IsIFJDQ19DUl9IU0VPTik7ICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKChfX1NUQVRFX18pID09IFJDQ19IU0VfQllQQVNTKSBcCi0gICAgICAgICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkNSLCBSQ0NfQ1JfSFNFQllQKTsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5DUiwgUkNDX0NSX0hTRU9OKTsgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICBDTEVBUl9CSVQoUkNDLT5DUiwgUkNDX0NSX0hTRU9OKTsgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgQ0xFQVJfQklUKFJDQy0+Q1IsIFJDQ19DUl9IU0VCWVApOyAgIFwKLSAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYoKF9fU1RBVEVfXykgPT0gUkNDX0hTRV9PTikgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIFNFVF9CSVQoUkNDLT5DUiwgUkNDX0NSX0hTRU9OKTsgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYoKF9fU1RBVEVfXykgPT0gUkNDX0hTRV9CWVBBU1MpIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBTRVRfQklUKFJDQy0+Q1IsIFJDQ19DUl9IU0VCWVApOyAgICAgXAorICAgICAgU0VUX0JJVChSQ0MtPkNSLCBSQ0NfQ1JfSFNFT04pOyAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIENMRUFSX0JJVChSQ0MtPkNSLCBSQ0NfQ1JfSFNFT04pOyAgICBcCisgICAgICBDTEVBUl9CSVQoUkNDLT5DUiwgUkNDX0NSX0hTRUJZUCk7ICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSgwKQogCiAvKioKICAgKiBAYnJpZWYgIE1hY3JvIHRvIGNvbmZpZ3VyZSB0aGUgRXh0ZXJuYWwgTG93IFNwZWVkIG9zY2lsbGF0b3IgKExTRSkuCkBAIC0yOTQyLDIyICsyOTQyLDIyIEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19MU0VfQ09ORklHKF9fU1RBVEVfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIGlmKChfX1NUQVRFX18pID09IFJDQ19MU0VfT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkJEQ1IsIFJDQ19CRENSX0xTRU9OKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZigoX19TVEFURV9fKSA9PSBSQ0NfTFNFX0JZUEFTUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QkRDUiwgUkNDX0JEQ1JfTFNFQllQKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5CRENSLCBSQ0NfQkRDUl9MU0VPTik7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgQ0xFQVJfQklUKFJDQy0+QkRDUiwgUkNDX0JEQ1JfTFNFT04pOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICBDTEVBUl9CSVQoUkNDLT5CRENSLCBSQ0NfQkRDUl9MU0VCWVApOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYoKF9fU1RBVEVfXykgPT0gUkNDX0xTRV9PTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgU0VUX0JJVChSQ0MtPkJEQ1IsIFJDQ19CRENSX0xTRU9OKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYoKF9fU1RBVEVfXykgPT0gUkNDX0xTRV9CWVBBU1MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIFNFVF9CSVQoUkNDLT5CRENSLCBSQ0NfQkRDUl9MU0VCWVApOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBTRVRfQklUKFJDQy0+QkRDUiwgUkNDX0JEQ1JfTFNFT04pOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgQ0xFQVJfQklUKFJDQy0+QkRDUiwgUkNDX0JEQ1JfTFNFT04pOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIENMRUFSX0JJVChSQ0MtPkJEQ1IsIFJDQ19CRENSX0xTRUJZUCk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSgwKQogCiAvKiogQGJyaWVmICBNYWNyb3MgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIEludGVybmFsIEhpZ2ggU3BlZWQgNDhNSHogb3NjaWxsYXRvciAoSFNJNDgpLgogICAqIEBub3RlICAgVGhlIEhTSTQ4IGlzIHN0b3BwZWQgYnkgaGFyZHdhcmUgd2hlbiBlbnRlcmluZyBTVE9QIGFuZCBTVEFOREJZIG1vZGVzLgpAQCAtMjk5NSw3ICsyOTk1LDcgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUkNDX1JUQ19DT05GSUcoX19SVENfQ0xLU09VUkNFX18pICBcCi0gICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKCBSQ0MtPkJEQ1IsIFJDQ19CRENSX1JUQ1NFTCwgKF9fUlRDX0NMS1NPVVJDRV9fKSkKKyAgTU9ESUZZX1JFRyggUkNDLT5CRENSLCBSQ0NfQkRDUl9SVENTRUwsIChfX1JUQ19DTEtTT1VSQ0VfXykpCiAKIAogLyoqIEBicmllZiAgTWFjcm8gdG8gZ2V0IHRoZSBSVEMgY2xvY2sgc291cmNlLgpAQCAtMzAzMSw3ICszMDMxLDcgQEAKICAgKgogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfUExMX1BMTFNPVVJDRV9DT05GSUcoX19QTExTT1VSQ0VfXykgXAotICAgICAgICAgICAgICAgICAgTU9ESUZZX1JFRyhSQ0MtPlBMTENGR1IsIFJDQ19QTExDRkdSX1BMTFNSQywgKF9fUExMU09VUkNFX18pKQorICBNT0RJRllfUkVHKFJDQy0+UExMQ0ZHUiwgUkNDX1BMTENGR1JfUExMU1JDLCAoX19QTExTT1VSQ0VfXykpCiAKIC8qKiBAYnJpZWYgIE1hY3JvIHRvIGNvbmZpZ3VyZSB0aGUgUExMIHNvdXJjZSBkaXZpc2lvbiBmYWN0b3IgTS4KICAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSB1c2VkIG9ubHkgd2hlbiB0aGUgbWFpbiBQTEwgaXMgZGlzYWJsZWQuCkBAIC0zMDQ0LDcgKzMwNDQsNyBAQAogICAqCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19QTExfUExMTV9DT05GSUcoX19QTExNX18pIFwKLSAgICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5QTExDRkdSLCBSQ0NfUExMQ0ZHUl9QTExNLCAoKF9fUExMTV9fKSAtIDEpIDw8IFJDQ19QTExDRkdSX1BMTE1fUG9zKQorICBNT0RJRllfUkVHKFJDQy0+UExMQ0ZHUiwgUkNDX1BMTENGR1JfUExMTSwgKChfX1BMTE1fXykgLSAxKSA8PCBSQ0NfUExMQ0ZHUl9QTExNX1BvcykKIAogLyoqCiAgICogQGJyaWVmICBNYWNybyB0byBjb25maWd1cmUgdGhlIG1haW4gUExMIGNsb2NrIHNvdXJjZSwgbXVsdGlwbGljYXRpb24gYW5kIGRpdmlzaW9uIGZhY3RvcnMuCkBAIC0zMDg1LDE1ICszMDg1LDE1IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19QTExfQ09ORklHKF9fUExMU09VUkNFX18sIF9fUExMTV9fLCBfX1BMTE5fXywgX19QTExQX18sIF9fUExMUV9fLF9fUExMUl9fICkgXAotICAgICAgICAgICAgICAgICAgTU9ESUZZX1JFRyhSQ0MtPlBMTENGR1IsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJDQ19QTExDRkdSX1BMTFNSQyB8IFJDQ19QTExDRkdSX1BMTE0gfCBSQ0NfUExMQ0ZHUl9QTExOIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkNDX1BMTENGR1JfUExMUSB8IFJDQ19QTExDRkdSX1BMTFIgfCBSQ0NfUExMQ0ZHUl9QTExQRElWKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUExMU09VUkNFX18pIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19QTExNX18pIC0gMVUpIDw8IFJDQ19QTExDRkdSX1BMTE1fUG9zKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QTExOX18pIDw8IFJDQ19QTExDRkdSX1BMTE5fUG9zKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKChfX1BMTFFfXykgPj4gMVUpIC0gMVUpIDw8IFJDQ19QTExDRkdSX1BMTFFfUG9zKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKChfX1BMTFJfXykgPj4gMVUpIC0gMVUpIDw8IFJDQ19QTExDRkdSX1BMTFJfUG9zKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QTExQX18pIDw8IFJDQ19QTExDRkdSX1BMTFBESVZfUG9zKSkpCisgIE1PRElGWV9SRUcoUkNDLT5QTExDRkdSLCBcCisgICAgICAgICAgICAgKFJDQ19QTExDRkdSX1BMTFNSQyB8IFJDQ19QTExDRkdSX1BMTE0gfCBSQ0NfUExMQ0ZHUl9QTExOIHwgXAorICAgICAgICAgICAgICBSQ0NfUExMQ0ZHUl9QTExRIHwgUkNDX1BMTENGR1JfUExMUiB8IFJDQ19QTExDRkdSX1BMTFBESVYpLCBcCisgICAgICAgICAgICAgKChfX1BMTFNPVVJDRV9fKSB8IFwKKyAgICAgICAgICAgICAgKCgoX19QTExNX18pIC0gMVUpIDw8IFJDQ19QTExDRkdSX1BMTE1fUG9zKSB8IFwKKyAgICAgICAgICAgICAgKChfX1BMTE5fXykgPDwgUkNDX1BMTENGR1JfUExMTl9Qb3MpIHwgXAorICAgICAgICAgICAgICAoKCgoX19QTExRX18pID4+IDFVKSAtIDFVKSA8PCBSQ0NfUExMQ0ZHUl9QTExRX1BvcykgfCBcCisgICAgICAgICAgICAgICgoKChfX1BMTFJfXykgPj4gMVUpIC0gMVUpIDw8IFJDQ19QTExDRkdSX1BMTFJfUG9zKSB8IFwKKyAgICAgICAgICAgICAgKChfX1BMTFBfXykgPDwgUkNDX1BMTENGR1JfUExMUERJVl9Qb3MpKSkKIAogLyoqIEBicmllZiAgTWFjcm8gdG8gZ2V0IHRoZSBvc2NpbGxhdG9yIHVzZWQgYXMgUExMIGNsb2NrIHNvdXJjZS4KICAgKiBAcmV0dmFsIFRoZSBvc2NpbGxhdG9yIHVzZWQgYXMgUExMIGNsb2NrIHNvdXJjZS4gVGhlIHJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUKQEAgLTMxNDcsNyArMzE0Nyw3IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19TWVNDTEtfQ09ORklHKF9fU1lTQ0xLU09VUkNFX18pIFwKLSAgICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5DRkdSLCBSQ0NfQ0ZHUl9TVywgKF9fU1lTQ0xLU09VUkNFX18pKQorICBNT0RJRllfUkVHKFJDQy0+Q0ZHUiwgUkNDX0NGR1JfU1csIChfX1NZU0NMS1NPVVJDRV9fKSkKIAogLyoqIEBicmllZiAgTWFjcm8gdG8gZ2V0IHRoZSBjbG9jayBzb3VyY2UgdXNlZCBhcyBzeXN0ZW0gY2xvY2suCiAgICogQHJldHZhbCBUaGUgY2xvY2sgc291cmNlIHVzZWQgYXMgc3lzdGVtIGNsb2NrLiBUaGUgcmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZQpAQCAtMzE3NCw3ICszMTc0LDcgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUkNDX0xTRURSSVZFX0NPTkZJRyhfX0xTRURSSVZFX18pIFwKLSAgICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5CRENSLCBSQ0NfQkRDUl9MU0VEUlYsICh1aW50MzJfdCkoX19MU0VEUklWRV9fKSkKKyAgTU9ESUZZX1JFRyhSQ0MtPkJEQ1IsIFJDQ19CRENSX0xTRURSViwgKHVpbnQzMl90KShfX0xTRURSSVZFX18pKQogCiAvKioKICAgKiBAYnJpZWYgIE1hY3JvIHRvIGNvbmZpZ3VyZSB0aGUgd2FrZSB1cCBmcm9tIHN0b3AgY2xvY2suCkBAIC0zMTg1LDcgKzMxODUsNyBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfV0FLRVVQU1RPUF9DTEtfQ09ORklHKF9fU1RPUFdVQ0xLX18pIFwKLSAgICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5DRkdSLCBSQ0NfQ0ZHUl9TVE9QV1VDSywgKF9fU1RPUFdVQ0xLX18pKQorICBNT0RJRllfUkVHKFJDQy0+Q0ZHUiwgUkNDX0NGR1JfU1RPUFdVQ0ssIChfX1NUT1BXVUNMS19fKSkKIAogCiAvKiogQGJyaWVmICBNYWNybyB0byBjb25maWd1cmUgdGhlIE1DTyBjbG9jay4KQEAgLTMyMDksNyArMzIwOSw3IEBACiAgICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX01DT0RJVl8xNiAgTUNPIGNsb2NrIHNvdXJjZSBpcyBkaXZpZGVkIGJ5IDE2CiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19NQ08xX0NPTkZJRyhfX01DT0NMS1NPVVJDRV9fLCBfX01DT0RJVl9fKSBcCi0gICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5DRkdSLCAoUkNDX0NGR1JfTUNPU0VMIHwgUkNDX0NGR1JfTUNPUFJFKSwgKChfX01DT0NMS1NPVVJDRV9fKSB8IChfX01DT0RJVl9fKSkpCisgIE1PRElGWV9SRUcoUkNDLT5DRkdSLCAoUkNDX0NGR1JfTUNPU0VMIHwgUkNDX0NGR1JfTUNPUFJFKSwgKChfX01DT0NMS1NPVVJDRV9fKSB8IChfX01DT0RJVl9fKSkpCiAKIC8qKiBAZGVmZ3JvdXAgUkNDX0ZsYWdzX0ludGVycnVwdHNfTWFuYWdlbWVudCBGbGFncyBJbnRlcnJ1cHRzIE1hbmFnZW1lbnQKICAgKiBAYnJpZWYgbWFjcm9zIHRvIG1hbmFnZSB0aGUgc3BlY2lmaWVkIFJDQyBGbGFncyBhbmQgaW50ZXJydXB0cy4KQEAgLTMzMTIsMTEgKzMzMTIsMTEgQEAKICAgKiBAcmV0dmFsIFRoZSBuZXcgc3RhdGUgb2YgX19GTEFHX18gKFRSVUUgb3IgRkFMU0UpLgogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfR0VUX0ZMQUcoX19GTEFHX18pICgoKCgoKChfX0ZMQUdfXykgPj4gNVUpID09IENSX1JFR19JTkRFWCkgICAgPyBSQ0MtPkNSIDogICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKChfX0ZMQUdfXykgPj4gNVUpID09IENSUkNSX1JFR19JTkRFWCkgPyBSQ0MtPkNSUkNSIDogICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKChfX0ZMQUdfXykgPj4gNVUpID09IEJEQ1JfUkVHX0lOREVYKSAgPyBSQ0MtPkJEQ1IgOiAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKChfX0ZMQUdfXykgPj4gNVUpID09IENTUl9SRUdfSU5ERVgpICAgPyBSQ0MtPkNTUiA6IFJDQy0+Q0lGUikpKSkgJiAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCAoKF9fRkxBR19fKSAmIFJDQ19GTEFHX01BU0spKSkgIT0gMFUpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAxVSA6IDBVKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgoX19GTEFHX18pID4+IDVVKSA9PSBDUlJDUl9SRUdfSU5ERVgpID8gUkNDLT5DUlJDUiA6ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKChfX0ZMQUdfXykgPj4gNVUpID09IEJEQ1JfUkVHX0lOREVYKSAgPyBSQ0MtPkJEQ1IgOiAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKChfX0ZMQUdfXykgPj4gNVUpID09IENTUl9SRUdfSU5ERVgpICAgPyBSQ0MtPkNTUiA6IFJDQy0+Q0lGUikpKSkgJiAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgKChfX0ZMQUdfXykgJiBSQ0NfRkxBR19NQVNLKSkpICE9IDBVKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMVUgOiAwVSkKIAogLyoqCiAgICogQH0KQEAgLTMzNzEsNyArMzM3MSw4IEBACiAKICNkZWZpbmUgSVNfUkNDX0hTSShfX0hTSV9fKSAgKCgoX19IU0lfXykgPT0gUkNDX0hTSV9PRkYpIHx8ICgoX19IU0lfXykgPT0gUkNDX0hTSV9PTikpCiAKLSNkZWZpbmUgSVNfUkNDX0hTSV9DQUxJQlJBVElPTl9WQUxVRShfX1ZBTFVFX18pICgoX19WQUxVRV9fKSA8PSAodWludDMyX3QpKCBSQ0NfSUNTQ1JfSFNJVFJJTSAgPj4gIFJDQ19JQ1NDUl9IU0lUUklNX1BvcykpCisjZGVmaW5lIElTX1JDQ19IU0lfQ0FMSUJSQVRJT05fVkFMVUUoX19WQUxVRV9fKSAoKF9fVkFMVUVfXykgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw9ICh1aW50MzJfdCkoIFJDQ19JQ1NDUl9IU0lUUklNICA+PiAgUkNDX0lDU0NSX0hTSVRSSU1fUG9zKSkKIAogI2RlZmluZSBJU19SQ0NfTFNJKF9fTFNJX18pICAoKChfX0xTSV9fKSA9PSBSQ0NfTFNJX09GRikgfHwgKChfX0xTSV9fKSA9PSBSQ0NfTFNJX09OKSkKIApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDV4eF9oYWxfcmNjX2V4LmggYi9JbmMvc3RtMzJsNXh4X2hhbF9yY2NfZXguaAppbmRleCA3OTg0YjEzLi5mZDAxMTkxIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNXh4X2hhbF9yY2NfZXguaAorKysgYi9JbmMvc3RtMzJsNXh4X2hhbF9yY2NfZXguaApAQCAtMjcxLDcgKzI3MSw3IEBACiAjZGVmaW5lIFJDQ19QRVJJUEhDTEtfU0FJMiAgICAgICAgICAgICAweDAwMDAxMDAwVQogI2lmIGRlZmluZWQoVVNCKQogI2RlZmluZSBSQ0NfUEVSSVBIQ0xLX1VTQiAgICAgICAgICAgICAgMHgwMDAwMjAwMFUKLSNlbmRpZgorI2VuZGlmIC8qIFVTQiAqLwogI2RlZmluZSBSQ0NfUEVSSVBIQ0xLX0FEQyAgICAgICAgICAgICAgMHgwMDAwNDAwMFUKICNkZWZpbmUgUkNDX1BFUklQSENMS19ERlNETTEgICAgICAgICAgIDB4MDAwMTAwMDBVCiAjZGVmaW5lIFJDQ19QRVJJUEhDTEtfUlRDICAgICAgICAgICAgICAweDAwMDIwMDAwVQpAQCAtNjgzLDggKzY4Myw4IEBACiAKIC8qIEV4cG9ydGVkIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGRlZmdyb3VwIFJDQ0V4X0V4cG9ydGVkX01hY3JvcyBSQ0NFeCBFeHBvcnRlZCBNYWNyb3MKLSAqIEB7Ci0gKi8KKyAgKiBAeworICAqLwogCiAKIC8qKgpAQCAtNzI0LDE2ICs3MjQsMTYgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUkNDX1BMTFNBSTFfQ09ORklHKF9fUExMU0FJMVNPVVJDRV9fLCBfX1BMTFNBSTFNX18sIF9fUExMU0FJMU5fXywgX19QTExTQUkxUF9fLCBfX1BMTFNBSTFRX18sIF9fUExMU0FJMVJfXykgXAotICAgICAgICAgICAgICAgICAgTU9ESUZZX1JFRyhSQ0MtPlBMTFNBSTFDRkdSLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSQ0NfUExMU0FJMUNGR1JfUExMU0FJMVNSQyB8IFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxTSB8IFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxTiB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxUCB8IFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxUSB8IFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxUiB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxUERJViksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BMTFNBSTFTT1VSQ0VfXykgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX1BMTFNBSTFNX18pIC0gMVUpIDw8IFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxTV9Qb3MpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BMTFNBSTFOX18pIDw8IFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxTl9Qb3MpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKF9fUExMU0FJMVFfXykgPj4gMVUpIC0gMVUpIDw8IFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxUV9Qb3MpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKF9fUExMU0FJMVJfXykgPj4gMVUpIC0gMVUpIDw8IFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxUl9Qb3MpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BMTFNBSTFQX18pIDw8IFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxUERJVl9Qb3MpKSkKKyAgTU9ESUZZX1JFRyhSQ0MtPlBMTFNBSTFDRkdSLCBcCisgICAgICAgICAgICAgKFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxU1JDIHwgUkNDX1BMTFNBSTFDRkdSX1BMTFNBSTFNIHwgUkNDX1BMTFNBSTFDRkdSX1BMTFNBSTFOIHwgXAorICAgICAgICAgICAgICBSQ0NfUExMU0FJMUNGR1JfUExMU0FJMVAgfCBSQ0NfUExMU0FJMUNGR1JfUExMU0FJMVEgfCBSQ0NfUExMU0FJMUNGR1JfUExMU0FJMVIgfCBcCisgICAgICAgICAgICAgIFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxUERJViksIFwKKyAgICAgICAgICAgICAoKF9fUExMU0FJMVNPVVJDRV9fKSB8IFwKKyAgICAgICAgICAgICAgKCgoX19QTExTQUkxTV9fKSAtIDFVKSA8PCBSQ0NfUExMU0FJMUNGR1JfUExMU0FJMU1fUG9zKSB8IFwKKyAgICAgICAgICAgICAgKChfX1BMTFNBSTFOX18pIDw8IFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxTl9Qb3MpIHwgXAorICAgICAgICAgICAgICAoKCgoX19QTExTQUkxUV9fKSA+PiAxVSkgLSAxVSkgPDwgUkNDX1BMTFNBSTFDRkdSX1BMTFNBSTFRX1BvcykgfCBcCisgICAgICAgICAgICAgICgoKChfX1BMTFNBSTFSX18pID4+IDFVKSAtIDFVKSA8PCBSQ0NfUExMU0FJMUNGR1JfUExMU0FJMVJfUG9zKSB8IFwKKyAgICAgICAgICAgICAgKChfX1BMTFNBSTFQX18pIDw8IFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxUERJVl9Qb3MpKSkKIAogLyoqCiAgICogQGJyaWVmICBNYWNybyB0byBjb25maWd1cmUgdGhlIFBMTFNBSTEgY2xvY2sgbXVsdGlwbGljYXRpb24gZmFjdG9yIE4uCkBAIC03NTEsNyArNzUxLDcgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUkNDX1BMTFNBSTFfTVVMTl9DT05GSUcoX19QTExTQUkxTl9fKSBcCi0gICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+UExMU0FJMUNGR1IsIFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxTiwgKF9fUExMU0FJMU5fXykgPDwgUkNDX1BMTFNBSTFDRkdSX1BMTFNBSTFOX1BvcykKKyAgTU9ESUZZX1JFRyhSQ0MtPlBMTFNBSTFDRkdSLCBSQ0NfUExMU0FJMUNGR1JfUExMU0FJMU4sIChfX1BMTFNBSTFOX18pIDw8IFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxTl9Qb3MpCiAKIC8qKiBAYnJpZWYgIE1hY3JvIHRvIGNvbmZpZ3VyZSB0aGUgUExMU0FJMSBpbnB1dCBjbG9jayBkaXZpc2lvbiBmYWN0b3IgTS4KICAgKgpAQCAtNzY1LDcgKzc2NSw3IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19QTExTQUkxX0RJVk1fQ09ORklHKF9fUExMU0FJMU1fXykgXAotICAgICAgICAgICAgICAgICAgTU9ESUZZX1JFRyhSQ0MtPlBMTFNBSTFDRkdSLCBSQ0NfUExMU0FJMUNGR1JfUExMU0FJMU0sICgoX19QTExTQUkxTV9fKSAtIDFVKSA8PCBSQ0NfUExMU0FJMUNGR1JfUExMU0FJMU1fUG9zKQorICBNT0RJRllfUkVHKFJDQy0+UExMU0FJMUNGR1IsIFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxTSwgKChfX1BMTFNBSTFNX18pIC0gMVUpIDw8IFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxTV9Qb3MpCiAKIC8qKiBAYnJpZWYgIE1hY3JvIHRvIGNvbmZpZ3VyZSB0aGUgUExMU0FJMSBjbG9jayBkaXZpc2lvbiBmYWN0b3IgUC4KICAgKgpAQCAtNzgwLDcgKzc4MCw3IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19QTExTQUkxX0RJVlBfQ09ORklHKF9fUExMU0FJMVBfXykgXAotICAgICAgICAgICAgICAgICAgTU9ESUZZX1JFRyhSQ0MtPlBMTFNBSTFDRkdSLCBSQ0NfUExMU0FJMUNGR1JfUExMU0FJMVBESVYsIChfX1BMTFNBSTFQX18pIDw8IFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxUERJVl9Qb3MpCisgIE1PRElGWV9SRUcoUkNDLT5QTExTQUkxQ0ZHUiwgUkNDX1BMTFNBSTFDRkdSX1BMTFNBSTFQRElWLCAoX19QTExTQUkxUF9fKSA8PCBSQ0NfUExMU0FJMUNGR1JfUExMU0FJMVBESVZfUG9zKQogCiAvKiogQGJyaWVmICBNYWNybyB0byBjb25maWd1cmUgdGhlIFBMTFNBSTEgY2xvY2sgZGl2aXNpb24gZmFjdG9yIFEuCiAgICoKQEAgLTc5NSw3ICs3OTUsNyBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfUExMU0FJMV9ESVZRX0NPTkZJRyhfX1BMTFNBSTFRX18pIFwKLSAgICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5QTExTQUkxQ0ZHUiwgUkNDX1BMTFNBSTFDRkdSX1BMTFNBSTFRLCAoKChfX1BMTFNBSTFRX18pID4+IDFVKSAtIDFVKSA8PCBSQ0NfUExMU0FJMUNGR1JfUExMU0FJMVFfUG9zKQorICBNT0RJRllfUkVHKFJDQy0+UExMU0FJMUNGR1IsIFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxUSwgKCgoX19QTExTQUkxUV9fKSA+PiAxVSkgLSAxVSkgPDwgUkNDX1BMTFNBSTFDRkdSX1BMTFNBSTFRX1BvcykKIAogLyoqIEBicmllZiAgTWFjcm8gdG8gY29uZmlndXJlIHRoZSBQTExTQUkxIGNsb2NrIGRpdmlzaW9uIGZhY3RvciBSLgogICAqCkBAIC04MTAsNyArODEwLDcgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUkNDX1BMTFNBSTFfRElWUl9DT05GSUcoX19QTExTQUkxUl9fKSBcCi0gICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+UExMU0FJMUNGR1IsIFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxUiwgKCgoX19QTExTQUkxUl9fKSA+PiAxVSkgLSAxVSkgPDwgUkNDX1BMTFNBSTFDRkdSX1BMTFNBSTFSX1BvcykKKyAgTU9ESUZZX1JFRyhSQ0MtPlBMTFNBSTFDRkdSLCBSQ0NfUExMU0FJMUNGR1JfUExMU0FJMVIsICgoKF9fUExMU0FJMVJfXykgPj4gMVUpIC0gMVUpIDw8IFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxUl9Qb3MpCiAKIC8qKgogICAqIEBicmllZiAgTWFjcm9zIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBQTExTQUkxLgpAQCAtODgxLDEzICs4ODEsMTMgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUkNDX1BMTFNBSTJfQ09ORklHKF9fUExMU0FJMlNPVVJDRV9fLCBfX1BMTFNBSTJNX18sIF9fUExMU0FJMk5fXywgX19QTExTQUkyUF9fKSBcCi0gICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+UExMU0FJMkNGR1IsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJDQ19QTExTQUkyQ0ZHUl9QTExTQUkyU1JDIHwgUkNDX1BMTFNBSTJDRkdSX1BMTFNBSTJNIHwgUkNDX1BMTFNBSTJDRkdSX1BMTFNBSTJOIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkNDX1BMTFNBSTJDRkdSX1BMTFNBSTJQIHwgUkNDX1BMTFNBSTJDRkdSX1BMTFNBSTJQRElWKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUExMU0FJMlNPVVJDRV9fKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fUExMU0FJMk1fXykgLSAxVSkgPDwgUkNDX1BMTFNBSTJDRkdSX1BMTFNBSTJNX1BvcykgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUExMU0FJMk5fXykgPDwgUkNDX1BMTFNBSTJDRkdSX1BMTFNBSTJOX1BvcykgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUExMU0FJMlBfXykgPDwgUkNDX1BMTFNBSTJDRkdSX1BMTFNBSTJQRElWX1BvcykpKQorICBNT0RJRllfUkVHKFJDQy0+UExMU0FJMkNGR1IsIFwKKyAgICAgICAgICAgICAoUkNDX1BMTFNBSTJDRkdSX1BMTFNBSTJTUkMgfCBSQ0NfUExMU0FJMkNGR1JfUExMU0FJMk0gfCBSQ0NfUExMU0FJMkNGR1JfUExMU0FJMk4gfCBcCisgICAgICAgICAgICAgIFJDQ19QTExTQUkyQ0ZHUl9QTExTQUkyUCB8IFJDQ19QTExTQUkyQ0ZHUl9QTExTQUkyUERJViksIFwKKyAgICAgICAgICAgICAoKF9fUExMU0FJMlNPVVJDRV9fKSB8IFwKKyAgICAgICAgICAgICAgKCgoX19QTExTQUkyTV9fKSAtIDFVKSA8PCBSQ0NfUExMU0FJMkNGR1JfUExMU0FJMk1fUG9zKSB8IFwKKyAgICAgICAgICAgICAgKChfX1BMTFNBSTJOX18pIDw8IFJDQ19QTExTQUkyQ0ZHUl9QTExTQUkyTl9Qb3MpIHwgXAorICAgICAgICAgICAgICAoKF9fUExMU0FJMlBfXykgPDwgUkNDX1BMTFNBSTJDRkdSX1BMTFNBSTJQRElWX1BvcykpKQogCiAvKioKICAgKiBAYnJpZWYgIE1hY3JvIHRvIGNvbmZpZ3VyZSB0aGUgUExMU0FJMiBjbG9jayBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgTi4KQEAgLTkwNSw3ICs5MDUsNyBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfUExMU0FJMl9NVUxOX0NPTkZJRyhfX1BMTFNBSTJOX18pIFwKLSAgICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5QTExTQUkyQ0ZHUiwgUkNDX1BMTFNBSTJDRkdSX1BMTFNBSTJOLCAoX19QTExTQUkyTl9fKSA8PCBSQ0NfUExMU0FJMkNGR1JfUExMU0FJMk5fUG9zKQorICBNT0RJRllfUkVHKFJDQy0+UExMU0FJMkNGR1IsIFJDQ19QTExTQUkyQ0ZHUl9QTExTQUkyTiwgKF9fUExMU0FJMk5fXykgPDwgUkNDX1BMTFNBSTJDRkdSX1BMTFNBSTJOX1BvcykKIAogLyoqIEBicmllZiAgTWFjcm8gdG8gY29uZmlndXJlIHRoZSBQTExTQUkyIGlucHV0IGNsb2NrIGRpdmlzaW9uIGZhY3RvciBNLgogICAqCkBAIC05MjAsNyArOTIwLDcgQEAKICAgKi8KIAogI2RlZmluZSBfX0hBTF9SQ0NfUExMU0FJMl9ESVZNX0NPTkZJRyhfX1BMTFNBSTJNX18pIFwKLSAgICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5QTExTQUkyQ0ZHUiwgUkNDX1BMTFNBSTJDRkdSX1BMTFNBSTJNLCAgKChfX1BMTFNBSTJNX18pIC0gMVUpIDw8IFJDQ19QTExTQUkyQ0ZHUl9QTExTQUkyTV9Qb3MpCisgIE1PRElGWV9SRUcoUkNDLT5QTExTQUkyQ0ZHUiwgUkNDX1BMTFNBSTJDRkdSX1BMTFNBSTJNLCAgKChfX1BMTFNBSTJNX18pIC0gMVUpIDw8IFJDQ19QTExTQUkyQ0ZHUl9QTExTQUkyTV9Qb3MpCiAKIC8qKiBAYnJpZWYgIE1hY3JvIHRvIGNvbmZpZ3VyZSB0aGUgUExMU0FJMiBjbG9jayBkaXZpc2lvbiBmYWN0b3IgUC4KICAgKgpAQCAtOTM1LDcgKzkzNSw3IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19QTExTQUkyX0RJVlBfQ09ORklHKF9fUExMU0FJMlBfXykgXAotICAgICAgICAgICAgICAgICAgTU9ESUZZX1JFRyhSQ0MtPlBMTFNBSTJDRkdSLCBSQ0NfUExMU0FJMkNGR1JfUExMU0FJMlAsICgoX19QTExTQUkyUF9fKSA+PiA0VSkgPDwgUkNDX1BMTFNBSTJDRkdSX1BMTFNBSTJQX1BvcykKKyAgTU9ESUZZX1JFRyhSQ0MtPlBMTFNBSTJDRkdSLCBSQ0NfUExMU0FJMkNGR1JfUExMU0FJMlAsICgoX19QTExTQUkyUF9fKSA+PiA0VSkgPDwgUkNDX1BMTFNBSTJDRkdSX1BMTFNBSTJQX1BvcykKIAogLyoqCiAgICogQGJyaWVmICBNYWNyb3MgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIFBMTFNBSTIuCkBAIC05ODgsNyArOTg4LDcgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUkNDX1NBSTFfQ09ORklHKF9fU0FJMV9DTEtTT1VSQ0VfXylcCi0gICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+Q0NJUFIyLCBSQ0NfQ0NJUFIyX1NBSTFTRUwsICh1aW50MzJfdCkoX19TQUkxX0NMS1NPVVJDRV9fKSkKKyAgTU9ESUZZX1JFRyhSQ0MtPkNDSVBSMiwgUkNDX0NDSVBSMl9TQUkxU0VMLCAodWludDMyX3QpKF9fU0FJMV9DTEtTT1VSQ0VfXykpCiAKIC8qKiBAYnJpZWYgIE1hY3JvIHRvIGdldCB0aGUgU0FJMSBjbG9jayBzb3VyY2UuCiAgICogQHJldHZhbCBUaGUgY2xvY2sgc291cmNlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0xMDE4LDcgKzEwMTgsNyBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfU0FJMl9DT05GSUcoX19TQUkyX0NMS1NPVVJDRV9fIClcCi0gICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+Q0NJUFIyLCBSQ0NfQ0NJUFIyX1NBSTJTRUwsICh1aW50MzJfdCkoX19TQUkyX0NMS1NPVVJDRV9fKSkKKyAgTU9ESUZZX1JFRyhSQ0MtPkNDSVBSMiwgUkNDX0NDSVBSMl9TQUkyU0VMLCAodWludDMyX3QpKF9fU0FJMl9DTEtTT1VSQ0VfXykpCiAKIC8qKiBAYnJpZWYgIE1hY3JvIHRvIGdldCB0aGUgU0FJMiBjbG9jayBzb3VyY2UuCiAgICogQHJldHZhbCBUaGUgY2xvY2sgc291cmNlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0xMDQwLDcgKzEwNDAsNyBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfSTJDMV9DT05GSUcoX19JMkMxX0NMS1NPVVJDRV9fKSBcCi0gICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+Q0NJUFIxLCBSQ0NfQ0NJUFIxX0kyQzFTRUwsICh1aW50MzJfdCkoX19JMkMxX0NMS1NPVVJDRV9fKSkKKyAgTU9ESUZZX1JFRyhSQ0MtPkNDSVBSMSwgUkNDX0NDSVBSMV9JMkMxU0VMLCAodWludDMyX3QpKF9fSTJDMV9DTEtTT1VSQ0VfXykpCiAKIC8qKiBAYnJpZWYgIE1hY3JvIHRvIGdldCB0aGUgSTJDMSBjbG9jayBzb3VyY2UuCiAgICogQHJldHZhbCBUaGUgY2xvY2sgc291cmNlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0xMDYwLDcgKzEwNjAsNyBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfSTJDMl9DT05GSUcoX19JMkMyX0NMS1NPVVJDRV9fKSBcCi0gICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+Q0NJUFIxLCBSQ0NfQ0NJUFIxX0kyQzJTRUwsICh1aW50MzJfdCkoX19JMkMyX0NMS1NPVVJDRV9fKSkKKyAgTU9ESUZZX1JFRyhSQ0MtPkNDSVBSMSwgUkNDX0NDSVBSMV9JMkMyU0VMLCAodWludDMyX3QpKF9fSTJDMl9DTEtTT1VSQ0VfXykpCiAKIC8qKiBAYnJpZWYgIE1hY3JvIHRvIGdldCB0aGUgSTJDMiBjbG9jayBzb3VyY2UuCiAgICogQHJldHZhbCBUaGUgY2xvY2sgc291cmNlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0xMDgwLDcgKzEwODAsNyBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfSTJDM19DT05GSUcoX19JMkMzX0NMS1NPVVJDRV9fKSBcCi0gICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+Q0NJUFIxLCBSQ0NfQ0NJUFIxX0kyQzNTRUwsICh1aW50MzJfdCkoX19JMkMzX0NMS1NPVVJDRV9fKSkKKyAgTU9ESUZZX1JFRyhSQ0MtPkNDSVBSMSwgUkNDX0NDSVBSMV9JMkMzU0VMLCAodWludDMyX3QpKF9fSTJDM19DTEtTT1VSQ0VfXykpCiAKIC8qKiBAYnJpZWYgIE1hY3JvIHRvIGdldCB0aGUgSTJDMyBjbG9jayBzb3VyY2UuCiAgICogQHJldHZhbCBUaGUgY2xvY2sgc291cmNlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0xMTAwLDcgKzExMDAsNyBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfSTJDNF9DT05GSUcoX19JMkM0X0NMS1NPVVJDRV9fKSBcCi0gICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+Q0NJUFIyLCBSQ0NfQ0NJUFIyX0kyQzRTRUwsICh1aW50MzJfdCkoX19JMkM0X0NMS1NPVVJDRV9fKSkKKyAgTU9ESUZZX1JFRyhSQ0MtPkNDSVBSMiwgUkNDX0NDSVBSMl9JMkM0U0VMLCAodWludDMyX3QpKF9fSTJDNF9DTEtTT1VSQ0VfXykpCiAKIC8qKiBAYnJpZWYgIE1hY3JvIHRvIGdldCB0aGUgSTJDNCBjbG9jayBzb3VyY2UuCiAgICogQHJldHZhbCBUaGUgY2xvY2sgc291cmNlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0xMTIyLDcgKzExMjIsNyBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfVVNBUlQxX0NPTkZJRyhfX1VTQVJUMV9DTEtTT1VSQ0VfXykgXAotICAgICAgICAgICAgICAgICAgTU9ESUZZX1JFRyhSQ0MtPkNDSVBSMSwgUkNDX0NDSVBSMV9VU0FSVDFTRUwsICh1aW50MzJfdCkoX19VU0FSVDFfQ0xLU09VUkNFX18pKQorICBNT0RJRllfUkVHKFJDQy0+Q0NJUFIxLCBSQ0NfQ0NJUFIxX1VTQVJUMVNFTCwgKHVpbnQzMl90KShfX1VTQVJUMV9DTEtTT1VSQ0VfXykpCiAKIC8qKiBAYnJpZWYgIE1hY3JvIHRvIGdldCB0aGUgVVNBUlQxIGNsb2NrIHNvdXJjZS4KICAgKiBAcmV0dmFsIFRoZSBjbG9jayBzb3VyY2UgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTExNDQsNyArMTE0NCw3IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19VU0FSVDJfQ09ORklHKF9fVVNBUlQyX0NMS1NPVVJDRV9fKSBcCi0gICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+Q0NJUFIxLCBSQ0NfQ0NJUFIxX1VTQVJUMlNFTCwgKHVpbnQzMl90KShfX1VTQVJUMl9DTEtTT1VSQ0VfXykpCisgIE1PRElGWV9SRUcoUkNDLT5DQ0lQUjEsIFJDQ19DQ0lQUjFfVVNBUlQyU0VMLCAodWludDMyX3QpKF9fVVNBUlQyX0NMS1NPVVJDRV9fKSkKIAogLyoqIEBicmllZiAgTWFjcm8gdG8gZ2V0IHRoZSBVU0FSVDIgY2xvY2sgc291cmNlLgogICAqIEByZXR2YWwgVGhlIGNsb2NrIHNvdXJjZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtMTE2Niw3ICsxMTY2LDcgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUkNDX1VTQVJUM19DT05GSUcoX19VU0FSVDNfQ0xLU09VUkNFX18pIFwKLSAgICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5DQ0lQUjEsIFJDQ19DQ0lQUjFfVVNBUlQzU0VMLCAodWludDMyX3QpKF9fVVNBUlQzX0NMS1NPVVJDRV9fKSkKKyAgTU9ESUZZX1JFRyhSQ0MtPkNDSVBSMSwgUkNDX0NDSVBSMV9VU0FSVDNTRUwsICh1aW50MzJfdCkoX19VU0FSVDNfQ0xLU09VUkNFX18pKQogCiAvKiogQGJyaWVmICBNYWNybyB0byBnZXQgdGhlIFVTQVJUMyBjbG9jayBzb3VyY2UuCiAgICogQHJldHZhbCBUaGUgY2xvY2sgc291cmNlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0xMTg4LDcgKzExODgsNyBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfVUFSVDRfQ09ORklHKF9fVUFSVDRfQ0xLU09VUkNFX18pIFwKLSAgICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5DQ0lQUjEsIFJDQ19DQ0lQUjFfVUFSVDRTRUwsICh1aW50MzJfdCkoX19VQVJUNF9DTEtTT1VSQ0VfXykpCisgIE1PRElGWV9SRUcoUkNDLT5DQ0lQUjEsIFJDQ19DQ0lQUjFfVUFSVDRTRUwsICh1aW50MzJfdCkoX19VQVJUNF9DTEtTT1VSQ0VfXykpCiAKIC8qKiBAYnJpZWYgIE1hY3JvIHRvIGdldCB0aGUgVUFSVDQgY2xvY2sgc291cmNlLgogICAqIEByZXR2YWwgVGhlIGNsb2NrIHNvdXJjZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtMTIxMCw3ICsxMjEwLDcgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUkNDX1VBUlQ1X0NPTkZJRyhfX1VBUlQ1X0NMS1NPVVJDRV9fKSBcCi0gICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+Q0NJUFIxLCBSQ0NfQ0NJUFIxX1VBUlQ1U0VMLCAodWludDMyX3QpKF9fVUFSVDVfQ0xLU09VUkNFX18pKQorICBNT0RJRllfUkVHKFJDQy0+Q0NJUFIxLCBSQ0NfQ0NJUFIxX1VBUlQ1U0VMLCAodWludDMyX3QpKF9fVUFSVDVfQ0xLU09VUkNFX18pKQogCiAvKiogQGJyaWVmICBNYWNybyB0byBnZXQgdGhlIFVBUlQ1IGNsb2NrIHNvdXJjZS4KICAgKiBAcmV0dmFsIFRoZSBjbG9jayBzb3VyY2UgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTEyMzIsNyArMTIzMiw3IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19MUFVBUlQxX0NPTkZJRyhfX0xQVUFSVDFfQ0xLU09VUkNFX18pIFwKLSAgICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5DQ0lQUjEsIFJDQ19DQ0lQUjFfTFBVQVJUMVNFTCwgKHVpbnQzMl90KShfX0xQVUFSVDFfQ0xLU09VUkNFX18pKQorICBNT0RJRllfUkVHKFJDQy0+Q0NJUFIxLCBSQ0NfQ0NJUFIxX0xQVUFSVDFTRUwsICh1aW50MzJfdCkoX19MUFVBUlQxX0NMS1NPVVJDRV9fKSkKIAogLyoqIEBicmllZiAgTWFjcm8gdG8gZ2V0IHRoZSBMUFVBUlQxIGNsb2NrIHNvdXJjZS4KICAgKiBAcmV0dmFsIFRoZSBjbG9jayBzb3VyY2UgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTEyNTQsNyArMTI1NCw3IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19MUFRJTTFfQ09ORklHKF9fTFBUSU0xX0NMS1NPVVJDRV9fKSBcCi0gICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+Q0NJUFIxLCBSQ0NfQ0NJUFIxX0xQVElNMVNFTCwgKHVpbnQzMl90KShfX0xQVElNMV9DTEtTT1VSQ0VfXykpCisgIE1PRElGWV9SRUcoUkNDLT5DQ0lQUjEsIFJDQ19DQ0lQUjFfTFBUSU0xU0VMLCAodWludDMyX3QpKF9fTFBUSU0xX0NMS1NPVVJDRV9fKSkKIAogLyoqIEBicmllZiAgTWFjcm8gdG8gZ2V0IHRoZSBMUFRJTTEgY2xvY2sgc291cmNlLgogICAqIEByZXR2YWwgVGhlIGNsb2NrIHNvdXJjZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtMTI3Niw3ICsxMjc2LDcgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUkNDX0xQVElNMl9DT05GSUcoX19MUFRJTTJfQ0xLU09VUkNFX18pIFwKLSAgICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5DQ0lQUjEsIFJDQ19DQ0lQUjFfTFBUSU0yU0VMLCAodWludDMyX3QpKF9fTFBUSU0yX0NMS1NPVVJDRV9fKSkKKyAgTU9ESUZZX1JFRyhSQ0MtPkNDSVBSMSwgUkNDX0NDSVBSMV9MUFRJTTJTRUwsICh1aW50MzJfdCkoX19MUFRJTTJfQ0xLU09VUkNFX18pKQogCiAvKiogQGJyaWVmICBNYWNybyB0byBnZXQgdGhlIExQVElNMiBjbG9jayBzb3VyY2UuCiAgICogQHJldHZhbCBUaGUgY2xvY2sgc291cmNlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0xMjk4LDcgKzEyOTgsNyBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfTFBUSU0zX0NPTkZJRyhfX0xQVElNM19DTEtTT1VSQ0VfXykgXAotICAgICAgICAgICAgICAgICAgTU9ESUZZX1JFRyhSQ0MtPkNDSVBSMSwgUkNDX0NDSVBSMV9MUFRJTTNTRUwsICh1aW50MzJfdCkoX19MUFRJTTNfQ0xLU09VUkNFX18pKQorICBNT0RJRllfUkVHKFJDQy0+Q0NJUFIxLCBSQ0NfQ0NJUFIxX0xQVElNM1NFTCwgKHVpbnQzMl90KShfX0xQVElNM19DTEtTT1VSQ0VfXykpCiAKIC8qKiBAYnJpZWYgIE1hY3JvIHRvIGdldCB0aGUgTFBUSU0zIGNsb2NrIHNvdXJjZS4KICAgKiBAcmV0dmFsIFRoZSBjbG9jayBzb3VyY2UgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTEzMTksNyArMTMxOSw3IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19GRENBTl9DT05GSUcoX19GRENBTl9DTEtTT1VSQ0VfXykgXAotICAgICAgICAgICAgICAgICAgTU9ESUZZX1JFRyhSQ0MtPkNDSVBSMSwgUkNDX0NDSVBSMV9GRENBTlNFTCwgKHVpbnQzMl90KShfX0ZEQ0FOX0NMS1NPVVJDRV9fKSkKKyAgTU9ESUZZX1JFRyhSQ0MtPkNDSVBSMSwgUkNDX0NDSVBSMV9GRENBTlNFTCwgKHVpbnQzMl90KShfX0ZEQ0FOX0NMS1NPVVJDRV9fKSkKIAogLyoqIEBicmllZiAgTWFjcm8gdG8gZ2V0IHRoZSBGRENBTiBjbG9jayBzb3VyY2UuCiAgICogQHJldHZhbCBUaGUgY2xvY2sgc291cmNlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0xMzQxLDE4ICsxMzQxLDE4IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19TRE1NQzFfQ09ORklHKF9fU0RNTUMxX0NMS1NPVVJDRV9fKSBcCi0gICAgICAgICAgICAgICAgICBkbyBcCi0gICAgICAgICAgICAgICAgICB7ICBcCi0gICAgICAgICAgICAgICAgICAgIGlmKChfX1NETU1DMV9DTEtTT1VSQ0VfXykgPT0gUkNDX1NETU1DMUNMS1NPVVJDRV9QTExQKSBcCi0gICAgICAgICAgICAgICAgICAgIHsgXAotICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5DQ0lQUjIsIFJDQ19DQ0lQUjJfU0RNTUNTRUwpOyBcCi0gICAgICAgICAgICAgICAgICAgIH0gXAotICAgICAgICAgICAgICAgICAgICBlbHNlIFwKLSAgICAgICAgICAgICAgICAgICAgeyBcCi0gICAgICAgICAgICAgICAgICAgICAgTU9ESUZZX1JFRyhSQ0MtPkNDSVBSMSwgUkNDX0NDSVBSMV9DTEs0OE1TRUwsICh1aW50MzJfdCkoX19TRE1NQzFfQ0xLU09VUkNFX18pKTsgXAotICAgICAgICAgICAgICAgICAgICAgIENMRUFSX0JJVChSQ0MtPkNDSVBSMiwgUkNDX0NDSVBSMl9TRE1NQ1NFTCk7IFwKLSAgICAgICAgICAgICAgICAgICAgfSBcCi0gICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgIGRvIFwKKyAgeyAgXAorICAgIGlmKChfX1NETU1DMV9DTEtTT1VSQ0VfXykgPT0gUkNDX1NETU1DMUNMS1NPVVJDRV9QTExQKSBcCisgICAgeyBcCisgICAgICBTRVRfQklUKFJDQy0+Q0NJUFIyLCBSQ0NfQ0NJUFIyX1NETU1DU0VMKTsgXAorICAgIH0gXAorICAgIGVsc2UgXAorICAgIHsgXAorICAgICAgTU9ESUZZX1JFRyhSQ0MtPkNDSVBSMSwgUkNDX0NDSVBSMV9DTEs0OE1TRUwsICh1aW50MzJfdCkoX19TRE1NQzFfQ0xLU09VUkNFX18pKTsgXAorICAgICAgQ0xFQVJfQklUKFJDQy0+Q0NJUFIyLCBSQ0NfQ0NJUFIyX1NETU1DU0VMKTsgXAorICAgIH0gXAorICB9IHdoaWxlKDApCiAKIC8qKiBAYnJpZWYgIE1hY3JvIHRvIGdldCB0aGUgU0RNTUMxIGNsb2NrLgogICAqIEByZXR2YWwgVGhlIGNsb2NrIHNvdXJjZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtMTM2Myw3ICsxMzYzLDcgQEAKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfU0RNTUMxQ0xLU09VUkNFX1BMTFAgIFBMTCAiUCIgY2xvY2sgKFBMTFNBSTNDTEspIHNlbGVjdGVkIGFzIFNETU1DMSBjbG9jawogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfR0VUX1NETU1DMV9TT1VSQ0UoKSBcCi0gICAgICAgICAgICAgICAgICAoKFJFQURfQklUKFJDQy0+Q0NJUFIyLCBSQ0NfQ0NJUFIyX1NETU1DU0VMKSAhPSAwVSkgPyBSQ0NfU0RNTUMxQ0xLU09VUkNFX1BMTFAgOiAoKHVpbnQzMl90KShSRUFEX0JJVChSQ0MtPkNDSVBSMSwgUkNDX0NDSVBSMV9DTEs0OE1TRUwpKSkpCisgICgoUkVBRF9CSVQoUkNDLT5DQ0lQUjIsIFJDQ19DQ0lQUjJfU0RNTUNTRUwpICE9IDBVKSA/IFJDQ19TRE1NQzFDTEtTT1VSQ0VfUExMUCA6ICgodWludDMyX3QpKFJFQURfQklUKFJDQy0+Q0NJUFIxLCBSQ0NfQ0NJUFIxX0NMSzQ4TVNFTCkpKSkKIAogLyoqIEBicmllZiAgTWFjcm8gdG8gY29uZmlndXJlIHRoZSBSTkcgY2xvY2suCiAgICoKQEAgLTEzNzgsNyArMTM3OCw3IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19STkdfQ09ORklHKF9fUk5HX0NMS1NPVVJDRV9fKSBcCi0gICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+Q0NJUFIxLCBSQ0NfQ0NJUFIxX0NMSzQ4TVNFTCwgKHVpbnQzMl90KShfX1JOR19DTEtTT1VSQ0VfXykpCisgIE1PRElGWV9SRUcoUkNDLT5DQ0lQUjEsIFJDQ19DQ0lQUjFfQ0xLNDhNU0VMLCAodWludDMyX3QpKF9fUk5HX0NMS1NPVVJDRV9fKSkKIAogLyoqIEBicmllZiAgTWFjcm8gdG8gZ2V0IHRoZSBSTkcgY2xvY2suCiAgICogQHJldHZhbCBUaGUgY2xvY2sgc291cmNlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0xNDA0LDcgKzE0MDQsNyBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfVVNCX0NPTkZJRyhfX1VTQl9DTEtTT1VSQ0VfXykgXAotICAgICAgICAgICAgICAgICAgTU9ESUZZX1JFRyhSQ0MtPkNDSVBSMSwgUkNDX0NDSVBSMV9DTEs0OE1TRUwsICh1aW50MzJfdCkoX19VU0JfQ0xLU09VUkNFX18pKQorICBNT0RJRllfUkVHKFJDQy0+Q0NJUFIxLCBSQ0NfQ0NJUFIxX0NMSzQ4TVNFTCwgKHVpbnQzMl90KShfX1VTQl9DTEtTT1VSQ0VfXykpCiAKIC8qKiBAYnJpZWYgIE1hY3JvIHRvIGdldCB0aGUgVVNCIGNsb2NrIHNvdXJjZS4KICAgKiBAcmV0dmFsIFRoZSBjbG9jayBzb3VyY2UgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTE0MjYsNyArMTQyNiw3IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19BRENfQ09ORklHKF9fQURDX0NMS1NPVVJDRV9fKSBcCi0gICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+Q0NJUFIxLCBSQ0NfQ0NJUFIxX0FEQ1NFTCwgKHVpbnQzMl90KShfX0FEQ19DTEtTT1VSQ0VfXykpCisgIE1PRElGWV9SRUcoUkNDLT5DQ0lQUjEsIFJDQ19DQ0lQUjFfQURDU0VMLCAodWludDMyX3QpKF9fQURDX0NMS1NPVVJDRV9fKSkKIAogLyoqIEBicmllZiAgTWFjcm8gdG8gZ2V0IHRoZSBBREMgY2xvY2sgc291cmNlLgogICAqIEByZXR2YWwgVGhlIGNsb2NrIHNvdXJjZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtMTQ0NCw3ICsxNDQ0LDcgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUkNDX0RGU0RNMV9DT05GSUcoX19ERlNETTFfQ0xLU09VUkNFX18pIFwKLSAgICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5DQ0lQUjIsIFJDQ19DQ0lQUjJfREZTRE1TRUwsICh1aW50MzJfdCkoX19ERlNETTFfQ0xLU09VUkNFX18pKQorICBNT0RJRllfUkVHKFJDQy0+Q0NJUFIyLCBSQ0NfQ0NJUFIyX0RGU0RNU0VMLCAodWludDMyX3QpKF9fREZTRE0xX0NMS1NPVVJDRV9fKSkKIAogLyoqIEBicmllZiAgTWFjcm8gdG8gZ2V0IHRoZSBERlNETTEgY2xvY2sgc291cmNlLgogICAqIEByZXR2YWwgVGhlIGNsb2NrIHNvdXJjZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtMTQ2Miw3ICsxNDYyLDcgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUkNDX0RGU0RNMUFVRElPX0NPTkZJRyhfX0RGU0RNMUFVRElPX0NMS1NPVVJDRV9fKSBcCi0gICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+Q0NJUFIyLCBSQ0NfQ0NJUFIyX0FERlNETVNFTCwgKHVpbnQzMl90KShfX0RGU0RNMUFVRElPX0NMS1NPVVJDRV9fKSkKKyAgTU9ESUZZX1JFRyhSQ0MtPkNDSVBSMiwgUkNDX0NDSVBSMl9BREZTRE1TRUwsICh1aW50MzJfdCkoX19ERlNETTFBVURJT19DTEtTT1VSQ0VfXykpCiAKIC8qKiBAYnJpZWYgIE1hY3JvIHRvIGdldCB0aGUgREZTRE0xIGF1ZGlvIGNsb2NrIHNvdXJjZS4KICAgKiBAcmV0dmFsIFRoZSBjbG9jayBzb3VyY2UgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTE0ODEsNyArMTQ4MSw3IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19PU1BJX0NPTkZJRyhfX09TUElfQ0xLU09VUkNFX18pIFwKLSAgICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5DQ0lQUjIsIFJDQ19DQ0lQUjJfT1NQSVNFTCwgKHVpbnQzMl90KShfX09TUElfQ0xLU09VUkNFX18pKQorICBNT0RJRllfUkVHKFJDQy0+Q0NJUFIyLCBSQ0NfQ0NJUFIyX09TUElTRUwsICh1aW50MzJfdCkoX19PU1BJX0NMS1NPVVJDRV9fKSkKIAogLyoqIEBicmllZiAgTWFjcm8gdG8gZ2V0IHRoZSBPY3RvU1BJIGNsb2NrIHNvdXJjZS4KICAgKiBAcmV0dmFsIFRoZSBjbG9jayBzb3VyY2UgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTE3NzEsMTggKzE3NzEsMTkgQEAKICAgKiAgICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19DUlNfSVRfU1lOQ01JU1MgIFNZTkMgbWlzc2VkIGludGVycnVwdAogICAqLwogLyogQ1JTIElUIEVycm9yIE1hc2sgKi8KLSNkZWZpbmUgIFJDQ19DUlNfSVRfRVJST1JfTUFTSyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoUkNDX0NSU19JVF9UUklNT1ZGIHwgUkNDX0NSU19JVF9TWU5DRVJSIHwgUkNDX0NSU19JVF9TWU5DTUlTUykpCisjZGVmaW5lICBSQ0NfQ1JTX0lUX0VSUk9SX01BU0sgICAgICAgICAgICAgICAgICgodWludDMyX3QpKFJDQ19DUlNfSVRfVFJJTU9WRlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSQ0NfQ1JTX0lUX1NZTkNFUlIgfCBSQ0NfQ1JTX0lUX1NZTkNNSVNTKSkKIAogI2RlZmluZSBfX0hBTF9SQ0NfQ1JTX0NMRUFSX0lUKF9fSU5URVJSVVBUX18pICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigoKF9fSU5URVJSVVBUX18pICYgUkNDX0NSU19JVF9FUlJPUl9NQVNLKSAhPSAwVSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1JJVEVfUkVHKENSUy0+SUNSLCBDUlNfSUNSX0VSUkMgfCAoKF9fSU5URVJSVVBUX18pICYgflJDQ19DUlNfSVRfRVJST1JfTUFTSykpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUklURV9SRUcoQ1JTLT5JQ1IsIChfX0lOVEVSUlVQVF9fKSk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCgoX19JTlRFUlJVUFRfXykgJiBSQ0NfQ1JTX0lUX0VSUk9SX01BU0spICE9IDBVKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUklURV9SRUcoQ1JTLT5JQ1IsIENSU19JQ1JfRVJSQyB8ICgoX19JTlRFUlJVUFRfXykgJiB+UkNDX0NSU19JVF9FUlJPUl9NQVNLKSk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdSSVRFX1JFRyhDUlMtPklDUiwgKF9fSU5URVJSVVBUX18pKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKIC8qKgogICAqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIENSUyBmbGFnIGlzIHNldCBvciBub3QuCkBAIC0xODE1LDE4ICsxODE2LDE5IEBACiAgICovCiAKIC8qIENSUyBGbGFnIEVycm9yIE1hc2sgKi8KLSNkZWZpbmUgUkNDX0NSU19GTEFHX0VSUk9SX01BU0sgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoUkNDX0NSU19GTEFHX1RSSU1PVkYgfCBSQ0NfQ1JTX0ZMQUdfU1lOQ0VSUiB8IFJDQ19DUlNfRkxBR19TWU5DTUlTUykpCisjZGVmaW5lIFJDQ19DUlNfRkxBR19FUlJPUl9NQVNLICAgICAgICAgICAgICAgICgodWludDMyX3QpKFJDQ19DUlNfRkxBR19UUklNT1ZGXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJDQ19DUlNfRkxBR19TWU5DRVJSIHwgUkNDX0NSU19GTEFHX1NZTkNNSVNTKSkKIAogI2RlZmluZSBfX0hBTF9SQ0NfQ1JTX0NMRUFSX0ZMQUcoX19GTEFHX18pICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigoKF9fRkxBR19fKSAmIFJDQ19DUlNfRkxBR19FUlJPUl9NQVNLKSAhPSAwVSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1JJVEVfUkVHKENSUy0+SUNSLCBDUlNfSUNSX0VSUkMgfCAoKF9fRkxBR19fKSAmIH5SQ0NfQ1JTX0ZMQUdfRVJST1JfTUFTSykpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUklURV9SRUcoQ1JTLT5JQ1IsIChfX0ZMQUdfXykpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigoKF9fRkxBR19fKSAmIFJDQ19DUlNfRkxBR19FUlJPUl9NQVNLKSAhPSAwVSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1JJVEVfUkVHKENSUy0+SUNSLCBDUlNfSUNSX0VSUkMgfCAoKF9fRkxBR19fKSAmIH5SQ0NfQ1JTX0ZMQUdfRVJST1JfTUFTSykpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUklURV9SRUcoQ1JTLT5JQ1IsIChfX0ZMQUdfXykpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgdGhlIG9zY2lsbGF0b3IgY2xvY2sgZm9yIGZyZXF1ZW5jeSBlcnJvciBjb3VudGVyLgpAQCAtMTk1MiwxNjUgKzE5NTQsMTY1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19MU0NPU09VUkNFX0xTRSkpCiAKICNkZWZpbmUgSVNfUkNDX1BFUklQSENMT0NLKF9fU0VMRUNUSU9OX18pICBcCi0gICAgICAgICAgICAgICAoKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX1VTQVJUMSkgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX1VTQVJUMSkgIHx8IFwKLSAgICAgICAgICAgICAgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfVVNBUlQyKSAgICAgID09IFJDQ19QRVJJUEhDTEtfVVNBUlQyKSAgfHwgXAotICAgICAgICAgICAgICAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19VU0FSVDMpICAgICAgPT0gUkNDX1BFUklQSENMS19VU0FSVDMpICB8fCBcCi0gICAgICAgICAgICAgICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX1VBUlQ0KSAgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX1VBUlQ0KSAgIHx8IFwKLSAgICAgICAgICAgICAgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfVUFSVDUpICAgICAgID09IFJDQ19QRVJJUEhDTEtfVUFSVDUpICAgfHwgXAotICAgICAgICAgICAgICAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19MUFVBUlQxKSAgICAgPT0gUkNDX1BFUklQSENMS19MUFVBUlQxKSB8fCBcCi0gICAgICAgICAgICAgICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX0kyQzEpICAgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX0kyQzEpICAgIHx8IFwKLSAgICAgICAgICAgICAgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfSTJDMikgICAgICAgID09IFJDQ19QRVJJUEhDTEtfSTJDMikgICAgfHwgXAotICAgICAgICAgICAgICAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19JMkMzKSAgICAgICAgPT0gUkNDX1BFUklQSENMS19JMkMzKSAgICB8fCBcCi0gICAgICAgICAgICAgICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX0kyQzQpICAgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX0kyQzQpICAgIHx8IFwKLSAgICAgICAgICAgICAgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfTFBUSU0xKSAgICAgID09IFJDQ19QRVJJUEhDTEtfTFBUSU0xKSAgfHwgXAotICAgICAgICAgICAgICAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19MUFRJTTIpICAgICAgPT0gUkNDX1BFUklQSENMS19MUFRJTTIpICB8fCBcCi0gICAgICAgICAgICAgICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX0xQVElNMykgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX0xQVElNMykgIHx8IFwKLSAgICAgICAgICAgICAgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfU0FJMSkgICAgICAgID09IFJDQ19QRVJJUEhDTEtfU0FJMSkgICAgfHwgXAotICAgICAgICAgICAgICAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19TQUkyKSAgICAgICAgPT0gUkNDX1BFUklQSENMS19TQUkyKSAgICB8fCBcCi0gICAgICAgICAgICAgICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX1VTQikgICAgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX1VTQikgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfQURDKSAgICAgICAgID09IFJDQ19QRVJJUEhDTEtfQURDKSAgICAgfHwgXAotICAgICAgICAgICAgICAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19ERlNETTEpICAgICAgPT0gUkNDX1BFUklQSENMS19ERlNETTEpICB8fCBcCi0gICAgICAgICAgICAgICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX0RGU0RNMUFVRElPKSA9PSBSQ0NfUEVSSVBIQ0xLX0RGU0RNMUFVRElPKSB8fCBcCi0gICAgICAgICAgICAgICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX1JUQykgICAgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX1JUQykgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfUk5HKSAgICAgICAgID09IFJDQ19QRVJJUEhDTEtfUk5HKSAgICAgfHwgXAotICAgICAgICAgICAgICAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19TRE1NQzEpICAgICAgPT0gUkNDX1BFUklQSENMS19TRE1NQzEpICB8fCBcCi0gICAgICAgICAgICAgICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX09TUEkpICAgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX09TUEkpICAgIHx8IFwKLSAgICAgICAgICAgICAgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfRkRDQU4pICAgICAgID09IFJDQ19QRVJJUEhDTEtfRkRDQU4pKQorICAoKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX1VTQVJUMSkgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX1VTQVJUMSkgIHx8IFwKKyAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19VU0FSVDIpICAgICAgPT0gUkNDX1BFUklQSENMS19VU0FSVDIpICB8fCBcCisgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfVVNBUlQzKSAgICAgID09IFJDQ19QRVJJUEhDTEtfVVNBUlQzKSAgfHwgXAorICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX1VBUlQ0KSAgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX1VBUlQ0KSAgIHx8IFwKKyAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19VQVJUNSkgICAgICAgPT0gUkNDX1BFUklQSENMS19VQVJUNSkgICB8fCBcCisgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfTFBVQVJUMSkgICAgID09IFJDQ19QRVJJUEhDTEtfTFBVQVJUMSkgfHwgXAorICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX0kyQzEpICAgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX0kyQzEpICAgIHx8IFwKKyAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19JMkMyKSAgICAgICAgPT0gUkNDX1BFUklQSENMS19JMkMyKSAgICB8fCBcCisgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfSTJDMykgICAgICAgID09IFJDQ19QRVJJUEhDTEtfSTJDMykgICAgfHwgXAorICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX0kyQzQpICAgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX0kyQzQpICAgIHx8IFwKKyAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19MUFRJTTEpICAgICAgPT0gUkNDX1BFUklQSENMS19MUFRJTTEpICB8fCBcCisgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfTFBUSU0yKSAgICAgID09IFJDQ19QRVJJUEhDTEtfTFBUSU0yKSAgfHwgXAorICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX0xQVElNMykgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX0xQVElNMykgIHx8IFwKKyAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19TQUkxKSAgICAgICAgPT0gUkNDX1BFUklQSENMS19TQUkxKSAgICB8fCBcCisgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfU0FJMikgICAgICAgID09IFJDQ19QRVJJUEhDTEtfU0FJMikgICAgfHwgXAorICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX1VTQikgICAgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX1VTQikgICAgIHx8IFwKKyAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19BREMpICAgICAgICAgPT0gUkNDX1BFUklQSENMS19BREMpICAgICB8fCBcCisgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfREZTRE0xKSAgICAgID09IFJDQ19QRVJJUEhDTEtfREZTRE0xKSAgfHwgXAorICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX0RGU0RNMUFVRElPKSA9PSBSQ0NfUEVSSVBIQ0xLX0RGU0RNMUFVRElPKSB8fCBcCisgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfUlRDKSAgICAgICAgID09IFJDQ19QRVJJUEhDTEtfUlRDKSAgICAgfHwgXAorICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX1JORykgICAgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX1JORykgICAgIHx8IFwKKyAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19TRE1NQzEpICAgICAgPT0gUkNDX1BFUklQSENMS19TRE1NQzEpICB8fCBcCisgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfT1NQSSkgICAgICAgID09IFJDQ19QRVJJUEhDTEtfT1NQSSkgICAgfHwgXAorICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX0ZEQ0FOKSAgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX0ZEQ0FOKSkKIAogI2RlZmluZSBJU19SQ0NfVVNBUlQxQ0xLU09VUkNFKF9fU09VUkNFX18pICBcCi0gICAgICAgICAgICAgICAoKChfX1NPVVJDRV9fKSA9PSBSQ0NfVVNBUlQxQ0xLU09VUkNFX1BDTEsyKSAgfHwgXAotICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX1VTQVJUMUNMS1NPVVJDRV9TWVNDTEspIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19VU0FSVDFDTEtTT1VSQ0VfTFNFKSAgICB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfVVNBUlQxQ0xLU09VUkNFX0hTSSkpCisgICgoKF9fU09VUkNFX18pID09IFJDQ19VU0FSVDFDTEtTT1VSQ0VfUENMSzIpICB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19VU0FSVDFDTEtTT1VSQ0VfU1lTQ0xLKSB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19VU0FSVDFDTEtTT1VSQ0VfTFNFKSAgICB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19VU0FSVDFDTEtTT1VSQ0VfSFNJKSkKIAogI2RlZmluZSBJU19SQ0NfVVNBUlQyQ0xLU09VUkNFKF9fU09VUkNFX18pICBcCi0gICAgICAgICAgICAgICAoKChfX1NPVVJDRV9fKSA9PSBSQ0NfVVNBUlQyQ0xLU09VUkNFX1BDTEsxKSAgfHwgXAotICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX1VTQVJUMkNMS1NPVVJDRV9TWVNDTEspIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19VU0FSVDJDTEtTT1VSQ0VfTFNFKSAgICB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfVVNBUlQyQ0xLU09VUkNFX0hTSSkpCisgICgoKF9fU09VUkNFX18pID09IFJDQ19VU0FSVDJDTEtTT1VSQ0VfUENMSzEpICB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19VU0FSVDJDTEtTT1VSQ0VfU1lTQ0xLKSB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19VU0FSVDJDTEtTT1VSQ0VfTFNFKSAgICB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19VU0FSVDJDTEtTT1VSQ0VfSFNJKSkKIAogI2RlZmluZSBJU19SQ0NfVVNBUlQzQ0xLU09VUkNFKF9fU09VUkNFX18pICBcCi0gICAgICAgICAgICAgICAoKChfX1NPVVJDRV9fKSA9PSBSQ0NfVVNBUlQzQ0xLU09VUkNFX1BDTEsxKSAgfHwgXAotICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX1VTQVJUM0NMS1NPVVJDRV9TWVNDTEspIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19VU0FSVDNDTEtTT1VSQ0VfTFNFKSAgICB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfVVNBUlQzQ0xLU09VUkNFX0hTSSkpCisgICgoKF9fU09VUkNFX18pID09IFJDQ19VU0FSVDNDTEtTT1VSQ0VfUENMSzEpICB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19VU0FSVDNDTEtTT1VSQ0VfU1lTQ0xLKSB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19VU0FSVDNDTEtTT1VSQ0VfTFNFKSAgICB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19VU0FSVDNDTEtTT1VSQ0VfSFNJKSkKIAogI2RlZmluZSBJU19SQ0NfVUFSVDRDTEtTT1VSQ0UoX19TT1VSQ0VfXykgIFwKLSAgICAgICAgICAgICAgICgoKF9fU09VUkNFX18pID09IFJDQ19VQVJUNENMS1NPVVJDRV9QQ0xLMSkgIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19VQVJUNENMS1NPVVJDRV9TWVNDTEspIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19VQVJUNENMS1NPVVJDRV9MU0UpICAgIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19VQVJUNENMS1NPVVJDRV9IU0kpKQorICAoKChfX1NPVVJDRV9fKSA9PSBSQ0NfVUFSVDRDTEtTT1VSQ0VfUENMSzEpICB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19VQVJUNENMS1NPVVJDRV9TWVNDTEspIHx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX1VBUlQ0Q0xLU09VUkNFX0xTRSkgICAgfHwgXAorICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfVUFSVDRDTEtTT1VSQ0VfSFNJKSkKIAogI2RlZmluZSBJU19SQ0NfVUFSVDVDTEtTT1VSQ0UoX19TT1VSQ0VfXykgIFwKLSAgICAgICAgICAgICAgICgoKF9fU09VUkNFX18pID09IFJDQ19VQVJUNUNMS1NPVVJDRV9QQ0xLMSkgIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19VQVJUNUNMS1NPVVJDRV9TWVNDTEspIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19VQVJUNUNMS1NPVVJDRV9MU0UpICAgIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19VQVJUNUNMS1NPVVJDRV9IU0kpKQorICAoKChfX1NPVVJDRV9fKSA9PSBSQ0NfVUFSVDVDTEtTT1VSQ0VfUENMSzEpICB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19VQVJUNUNMS1NPVVJDRV9TWVNDTEspIHx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX1VBUlQ1Q0xLU09VUkNFX0xTRSkgICAgfHwgXAorICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfVUFSVDVDTEtTT1VSQ0VfSFNJKSkKIAogI2RlZmluZSBJU19SQ0NfTFBVQVJUMUNMS1NPVVJDRShfX1NPVVJDRV9fKSAgXAotICAgICAgICAgICAgICAgKCgoX19TT1VSQ0VfXykgPT0gUkNDX0xQVUFSVDFDTEtTT1VSQ0VfUENMSzEpICB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfTFBVQVJUMUNMS1NPVVJDRV9TWVNDTEspIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19MUFVBUlQxQ0xLU09VUkNFX0xTRSkgICAgfHwgXAotICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0xQVUFSVDFDTEtTT1VSQ0VfSFNJKSkKKyAgKCgoX19TT1VSQ0VfXykgPT0gUkNDX0xQVUFSVDFDTEtTT1VSQ0VfUENMSzEpICB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19MUFVBUlQxQ0xLU09VUkNFX1NZU0NMSykgfHwgXAorICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfTFBVQVJUMUNMS1NPVVJDRV9MU0UpICAgIHx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0xQVUFSVDFDTEtTT1VSQ0VfSFNJKSkKIAogI2RlZmluZSBJU19SQ0NfSTJDMUNMS1NPVVJDRShfX1NPVVJDRV9fKSAgIFwKLSAgICAgICAgICAgICAgICgoKF9fU09VUkNFX18pID09IFJDQ19JMkMxQ0xLU09VUkNFX1BDTEsxKSB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfSTJDMUNMS1NPVVJDRV9TWVNDTEspfHwgXAotICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0kyQzFDTEtTT1VSQ0VfSFNJKSkKKyAgKCgoX19TT1VSQ0VfXykgPT0gUkNDX0kyQzFDTEtTT1VSQ0VfUENMSzEpIHx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0kyQzFDTEtTT1VSQ0VfU1lTQ0xLKXx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0kyQzFDTEtTT1VSQ0VfSFNJKSkKIAogI2RlZmluZSBJU19SQ0NfSTJDMkNMS1NPVVJDRShfX1NPVVJDRV9fKSAgIFwKLSAgICAgICAgICAgICAgICgoKF9fU09VUkNFX18pID09IFJDQ19JMkMyQ0xLU09VUkNFX1BDTEsxKSB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfSTJDMkNMS1NPVVJDRV9TWVNDTEspfHwgXAotICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0kyQzJDTEtTT1VSQ0VfSFNJKSkKKyAgKCgoX19TT1VSQ0VfXykgPT0gUkNDX0kyQzJDTEtTT1VSQ0VfUENMSzEpIHx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0kyQzJDTEtTT1VSQ0VfU1lTQ0xLKXx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0kyQzJDTEtTT1VSQ0VfSFNJKSkKIAogI2RlZmluZSBJU19SQ0NfSTJDM0NMS1NPVVJDRShfX1NPVVJDRV9fKSAgIFwKLSAgICAgICAgICAgICAgICgoKF9fU09VUkNFX18pID09IFJDQ19JMkMzQ0xLU09VUkNFX1BDTEsxKSB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfSTJDM0NMS1NPVVJDRV9TWVNDTEspfHwgXAotICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0kyQzNDTEtTT1VSQ0VfSFNJKSkKKyAgKCgoX19TT1VSQ0VfXykgPT0gUkNDX0kyQzNDTEtTT1VSQ0VfUENMSzEpIHx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0kyQzNDTEtTT1VSQ0VfU1lTQ0xLKXx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0kyQzNDTEtTT1VSQ0VfSFNJKSkKIAogI2RlZmluZSBJU19SQ0NfSTJDNENMS1NPVVJDRShfX1NPVVJDRV9fKSAgIFwKLSAgICAgICAgICAgICAgICgoKF9fU09VUkNFX18pID09IFJDQ19JMkM0Q0xLU09VUkNFX1BDTEsxKSB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfSTJDNENMS1NPVVJDRV9TWVNDTEspfHwgXAotICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0kyQzRDTEtTT1VSQ0VfSFNJKSkKKyAgKCgoX19TT1VSQ0VfXykgPT0gUkNDX0kyQzRDTEtTT1VSQ0VfUENMSzEpIHx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0kyQzRDTEtTT1VSQ0VfU1lTQ0xLKXx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0kyQzRDTEtTT1VSQ0VfSFNJKSkKIAogI2RlZmluZSBJU19SQ0NfU0FJMUNMSyhfX1NPVVJDRV9fKSAgIFwKLSAgICAgICAgICAgICAgICgoKF9fU09VUkNFX18pID09IFJDQ19TQUkxQ0xLU09VUkNFX1BMTFNBSTEpIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19TQUkxQ0xLU09VUkNFX1BMTFNBSTIpIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19TQUkxQ0xLU09VUkNFX1BMTCkgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19TQUkxQ0xLU09VUkNFX1BJTikgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19TQUkxQ0xLU09VUkNFX0hTSSkpCisgICgoKF9fU09VUkNFX18pID09IFJDQ19TQUkxQ0xLU09VUkNFX1BMTFNBSTEpIHx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX1NBSTFDTEtTT1VSQ0VfUExMU0FJMikgfHwgXAorICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfU0FJMUNMS1NPVVJDRV9QTEwpICAgICB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19TQUkxQ0xLU09VUkNFX1BJTikgICAgIHx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX1NBSTFDTEtTT1VSQ0VfSFNJKSkKIAogI2RlZmluZSBJU19SQ0NfU0FJMkNMSyhfX1NPVVJDRV9fKSAgIFwKLSAgICAgICAgICAgICAgICgoKF9fU09VUkNFX18pID09IFJDQ19TQUkyQ0xLU09VUkNFX1BMTFNBSTEpIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19TQUkyQ0xLU09VUkNFX1BMTFNBSTIpIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19TQUkyQ0xLU09VUkNFX1BMTCkgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19TQUkyQ0xLU09VUkNFX1BJTikgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19TQUkyQ0xLU09VUkNFX0hTSSkpCisgICgoKF9fU09VUkNFX18pID09IFJDQ19TQUkyQ0xLU09VUkNFX1BMTFNBSTEpIHx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX1NBSTJDTEtTT1VSQ0VfUExMU0FJMikgfHwgXAorICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfU0FJMkNMS1NPVVJDRV9QTEwpICAgICB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19TQUkyQ0xLU09VUkNFX1BJTikgICAgIHx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX1NBSTJDTEtTT1VSQ0VfSFNJKSkKIAogI2RlZmluZSBJU19SQ0NfTFBUSU0xQ0xLKF9fU09VUkNFX18pICBcCi0gICAgICAgICAgICAgICAoKChfX1NPVVJDRV9fKSA9PSBSQ0NfTFBUSU0xQ0xLU09VUkNFX1BDTEsxKSB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfTFBUSU0xQ0xLU09VUkNFX0xTSSkgICB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfTFBUSU0xQ0xLU09VUkNFX0hTSSkgICB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfTFBUSU0xQ0xLU09VUkNFX0xTRSkpCisgICgoKF9fU09VUkNFX18pID09IFJDQ19MUFRJTTFDTEtTT1VSQ0VfUENMSzEpIHx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0xQVElNMUNMS1NPVVJDRV9MU0kpICAgfHwgXAorICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfTFBUSU0xQ0xLU09VUkNFX0hTSSkgICB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19MUFRJTTFDTEtTT1VSQ0VfTFNFKSkKIAogI2RlZmluZSBJU19SQ0NfTFBUSU0yQ0xLKF9fU09VUkNFX18pICBcCi0gICAgICAgICAgICAgICAoKChfX1NPVVJDRV9fKSA9PSBSQ0NfTFBUSU0yQ0xLU09VUkNFX1BDTEsxKSB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfTFBUSU0yQ0xLU09VUkNFX0xTSSkgICB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfTFBUSU0yQ0xLU09VUkNFX0hTSSkgICB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfTFBUSU0yQ0xLU09VUkNFX0xTRSkpCisgICgoKF9fU09VUkNFX18pID09IFJDQ19MUFRJTTJDTEtTT1VSQ0VfUENMSzEpIHx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0xQVElNMkNMS1NPVVJDRV9MU0kpICAgfHwgXAorICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfTFBUSU0yQ0xLU09VUkNFX0hTSSkgICB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19MUFRJTTJDTEtTT1VSQ0VfTFNFKSkKIAogI2RlZmluZSBJU19SQ0NfTFBUSU0zQ0xLKF9fU09VUkNFX18pICBcCi0gICAgICAgICAgICAgICAoKChfX1NPVVJDRV9fKSA9PSBSQ0NfTFBUSU0zQ0xLU09VUkNFX1BDTEsxKSB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfTFBUSU0zQ0xLU09VUkNFX0xTSSkgICB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfTFBUSU0zQ0xLU09VUkNFX0hTSSkgICB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfTFBUSU0zQ0xLU09VUkNFX0xTRSkpCisgICgoKF9fU09VUkNFX18pID09IFJDQ19MUFRJTTNDTEtTT1VSQ0VfUENMSzEpIHx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0xQVElNM0NMS1NPVVJDRV9MU0kpICAgfHwgXAorICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfTFBUSU0zQ0xLU09VUkNFX0hTSSkgICB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19MUFRJTTNDTEtTT1VSQ0VfTFNFKSkKIAogI2RlZmluZSBJU19SQ0NfRkRDQU5DTEsoX19TT1VSQ0VfXykgIFwKLSAgICAgICAgICAgICAgICgoKF9fU09VUkNFX18pID09IFJDQ19GRENBTkNMS1NPVVJDRV9IU0UpICAgfHwgXAotICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0ZEQ0FOQ0xLU09VUkNFX1BMTCkgICB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfRkRDQU5DTEtTT1VSQ0VfUExMU0FJMSkpCisgICgoKF9fU09VUkNFX18pID09IFJDQ19GRENBTkNMS1NPVVJDRV9IU0UpICAgfHwgXAorICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfRkRDQU5DTEtTT1VSQ0VfUExMKSAgIHx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0ZEQ0FOQ0xLU09VUkNFX1BMTFNBSTEpKQogCiAjZGVmaW5lIElTX1JDQ19TRE1NQzFDTEtTT1VSQ0UoX19TT1VSQ0VfXykgIFwKLSAgICAgICAgICAgICAgICgoKF9fU09VUkNFX18pID09IFJDQ19TRE1NQzFDTEtTT1VSQ0VfSFNJNDgpICAgfHwgXAotICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX1NETU1DMUNMS1NPVVJDRV9QTExTQUkxKSB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfU0RNTUMxQ0xLU09VUkNFX1BMTCkgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19TRE1NQzFDTEtTT1VSQ0VfTVNJKSAgICAgfHwgXAotICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX1NETU1DMUNMS1NPVVJDRV9QTExQKSkKKyAgKCgoX19TT1VSQ0VfXykgPT0gUkNDX1NETU1DMUNMS1NPVVJDRV9IU0k0OCkgICB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19TRE1NQzFDTEtTT1VSQ0VfUExMU0FJMSkgfHwgXAorICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfU0RNTUMxQ0xLU09VUkNFX1BMTCkgICAgIHx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX1NETU1DMUNMS1NPVVJDRV9NU0kpICAgICB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19TRE1NQzFDTEtTT1VSQ0VfUExMUCkpCiAKICNkZWZpbmUgSVNfUkNDX1JOR0NMS1NPVVJDRShfX1NPVVJDRV9fKSAgXAotICAgICAgICAgICAgICAgKCgoX19TT1VSQ0VfXykgPT0gUkNDX1JOR0NMS1NPVVJDRV9IU0k0OCkgICB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfUk5HQ0xLU09VUkNFX1BMTFNBSTEpIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19STkdDTEtTT1VSQ0VfUExMKSAgICAgfHwgXAotICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX1JOR0NMS1NPVVJDRV9NU0kpKQorICAoKChfX1NPVVJDRV9fKSA9PSBSQ0NfUk5HQ0xLU09VUkNFX0hTSTQ4KSAgIHx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX1JOR0NMS1NPVVJDRV9QTExTQUkxKSB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19STkdDTEtTT1VSQ0VfUExMKSAgICAgfHwgXAorICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfUk5HQ0xLU09VUkNFX01TSSkpCiAKICNpZiAgZGVmaW5lZChVU0IpCiAKICNkZWZpbmUgSVNfUkNDX1VTQkNMS1NPVVJDRShfX1NPVVJDRV9fKSAgXAotICAgICAgICAgICAgICAgKCgoX19TT1VSQ0VfXykgPT0gUkNDX1VTQkNMS1NPVVJDRV9IU0k0OCkgICB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfVVNCQ0xLU09VUkNFX1BMTFNBSTEpIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19VU0JDTEtTT1VSQ0VfUExMKSAgICAgfHwgXAotICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX1VTQkNMS1NPVVJDRV9NU0kpKQorICAoKChfX1NPVVJDRV9fKSA9PSBSQ0NfVVNCQ0xLU09VUkNFX0hTSTQ4KSAgIHx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX1VTQkNMS1NPVVJDRV9QTExTQUkxKSB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19VU0JDTEtTT1VSQ0VfUExMKSAgICAgfHwgXAorICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfVVNCQ0xLU09VUkNFX01TSSkpCiAKICNlbmRpZiAvKiBVU0IgKi8KIAogI2RlZmluZSBJU19SQ0NfQURDQ0xLU09VUkNFKF9fU09VUkNFX18pICBcCi0gICAgICAgICAgICAgICAoKChfX1NPVVJDRV9fKSA9PSBSQ0NfQURDQ0xLU09VUkNFX05PTkUpICAgIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19BRENDTEtTT1VSQ0VfUExMU0FJMSkgfHwgXAotICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0FEQ0NMS1NPVVJDRV9TWVNDTEspKQorICAoKChfX1NPVVJDRV9fKSA9PSBSQ0NfQURDQ0xLU09VUkNFX05PTkUpICAgIHx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0FEQ0NMS1NPVVJDRV9QTExTQUkxKSB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19BRENDTEtTT1VSQ0VfU1lTQ0xLKSkKIAogI2RlZmluZSBJU19SQ0NfREZTRE0xQ0xLU09VUkNFKF9fU09VUkNFX18pICBcCi0gICAgICAgICAgICAgICAoKChfX1NPVVJDRV9fKSA9PSBSQ0NfREZTRE0xQ0xLU09VUkNFX1BDTEsyKSB8fCBcCi0gICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfREZTRE0xQ0xLU09VUkNFX1NZU0NMSykpCisgICgoKF9fU09VUkNFX18pID09IFJDQ19ERlNETTFDTEtTT1VSQ0VfUENMSzIpIHx8IFwKKyAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0RGU0RNMUNMS1NPVVJDRV9TWVNDTEspKQogCiAjZGVmaW5lIElTX1JDQ19ERlNETTFBVURJT0NMS1NPVVJDRShfX1NPVVJDRV9fKSAgXAotICAgICAgICAgICAgICAgKCgoX19TT1VSQ0VfXykgPT0gUkNDX0RGU0RNMUFVRElPQ0xLU09VUkNFX1NBSTEpIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19ERlNETTFBVURJT0NMS1NPVVJDRV9IU0kpIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19ERlNETTFBVURJT0NMS1NPVVJDRV9NU0kpKQorICAoKChfX1NPVVJDRV9fKSA9PSBSQ0NfREZTRE0xQVVESU9DTEtTT1VSQ0VfU0FJMSkgfHwgXAorICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfREZTRE0xQVVESU9DTEtTT1VSQ0VfSFNJKSB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19ERlNETTFBVURJT0NMS1NPVVJDRV9NU0kpKQogCiAjZGVmaW5lIElTX1JDQ19PU1BJQ0xLU09VUkNFKF9fU09VUkNFX18pICBcCi0gICAgICAgICAgICAgICAoKChfX1NPVVJDRV9fKSA9PSBSQ0NfT1NQSUNMS1NPVVJDRV9TWVNDTEspIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19PU1BJQ0xLU09VUkNFX01TSSkgfHwgXAotICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX09TUElDTEtTT1VSQ0VfUExMKSkKKyAgKCgoX19TT1VSQ0VfXykgPT0gUkNDX09TUElDTEtTT1VSQ0VfU1lTQ0xLKSB8fCBcCisgICAoKF9fU09VUkNFX18pID09IFJDQ19PU1BJQ0xLU09VUkNFX01TSSkgfHwgXAorICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfT1NQSUNMS1NPVVJDRV9QTEwpKQogCiAjZGVmaW5lIElTX1JDQ19QTExTQUkxU09VUkNFKF9fVkFMVUVfXykgICAgSVNfUkNDX1BMTFNPVVJDRShfX1ZBTFVFX18pCiAKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw1eHhfaGFsX3JuZy5oIGIvSW5jL3N0bTMybDV4eF9oYWxfcm5nLmgKaW5kZXggOGRlNzE5MC4uMTAxZDExMiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDV4eF9oYWxfcm5nLmgKKysrIGIvSW5jL3N0bTMybDV4eF9oYWxfcm5nLmgKQEAgLTM2Myw2ICszNjMsMTQgQEAKICAgKiBAfQogICAqLwogCisvKiBQcml2YXRlIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBkZWZncm91cCBSTkdfUHJpdmF0ZV9GdW5jdGlvbnMgUk5HIFByaXZhdGUgZnVuY3Rpb25zCisgICogQHsKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIFJOR19SZWNvdmVyU2VlZEVycm9yKFJOR19IYW5kbGVUeXBlRGVmICpocm5nKTsKKy8qKgorICAqIEB9CisgICovCiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDV4eF9oYWxfcnRjLmggYi9JbmMvc3RtMzJsNXh4X2hhbF9ydGMuaAppbmRleCAwZTM1MTI5Li5jNDY1MWZjIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNXh4X2hhbF9ydGMuaAorKysgYi9JbmMvc3RtMzJsNXh4X2hhbF9ydGMuaApAQCAtMTEyLDEyICsxMTIsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBbMSBTZWMgLyBTZWNvbmRGcmFjdGlvbiArMV0gZ3JhbnVsYXJpdHkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIHdpbGwgYmUgdXNlZCBvbmx5IGJ5IEhBTF9SVENfR2V0VGltZSBmdW5jdGlvbiAqLwogCi0gIHVpbnQzMl90IERheUxpZ2h0U2F2aW5nOyAgLyohPCBTcGVjaWZpZXMgUlRDX0RheUxpZ2h0U2F2ZU9wZXJhdGlvbjogdGhlIHZhbHVlIG9mIGhvdXIgYWRqdXN0bWVudC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgUlRDX0RheUxpZ2h0U2F2aW5nX0RlZmluaXRpb25zICovCisgIHVpbnQzMl90IERheUxpZ2h0U2F2aW5nOyAgLyohPCBUaGlzIGludGVyZmFjZSBpcyBkZXByZWNhdGVkLiBUbyBtYW5hZ2UgRGF5bGlnaHQgU2F2aW5nIFRpbWUsIHBsZWFzZSB1c2UgSEFMX1JUQ19EU1RfeHh4IGZ1bmN0aW9ucyAqLwogCi0gIHVpbnQzMl90IFN0b3JlT3BlcmF0aW9uOyAgLyohPCBTcGVjaWZpZXMgUlRDX1N0b3JlT3BlcmF0aW9uIHZhbHVlIHRvIGJlIHdyaXR0ZW4gaW4gdGhlIEJLUCBiaXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIENSIHJlZ2lzdGVyIHRvIHN0b3JlIHRoZSBvcGVyYXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFJUQ19TdG9yZU9wZXJhdGlvbl9EZWZpbml0aW9ucyAqLworICB1aW50MzJfdCBTdG9yZU9wZXJhdGlvbjsgIC8qITwgVGhpcyBpbnRlcmZhY2UgaXMgZGVwcmVjYXRlZC4gVG8gbWFuYWdlIERheWxpZ2h0IFNhdmluZyBUaW1lLCBwbGVhc2UgdXNlIEhBTF9SVENfRFNUX3h4eCBmdW5jdGlvbnMgKi8KIH0gUlRDX1RpbWVUeXBlRGVmOwogCiAvKioKQEAgLTU1Nyw2ICs1NTQsOCBAQAogCiAvKioKICAgKiBAYnJpZWYgIEFkZCAxIGhvdXIgKHN1bW1lciB0aW1lIGNoYW5nZSkuCisgICogQG5vdGUgICBUaGlzIGludGVyZmFjZSBpcyBkZXByZWNhdGVkLgorICAqICAgICAgICAgVG8gbWFuYWdlIERheWxpZ2h0IFNhdmluZyBUaW1lLCBwbGVhc2UgdXNlIEhBTF9SVENfRFNUX3h4eCBmdW5jdGlvbnMKICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBSVEMgaGFuZGxlLgogICAqIEBwYXJhbSAgX19CS1BfXyBCYWNrdXAKICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToKQEAgLTU3NCw2ICs1NzMsOCBAQAogCiAvKioKICAgKiBAYnJpZWYgIFN1YnRyYWN0IDEgaG91ciAod2ludGVyIHRpbWUgY2hhbmdlKS4KKyAgKiBAbm90ZSAgIFRoaXMgaW50ZXJmYWNlIGlzIGRlcHJlY2F0ZWQuCisgICogICAgICAgICBUbyBtYW5hZ2UgRGF5bGlnaHQgU2F2aW5nIFRpbWUsIHBsZWFzZSB1c2UgSEFMX1JUQ19EU1RfeHh4IGZ1bmN0aW9ucwogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFJUQyBoYW5kbGUuCiAgICogQHBhcmFtICBfX0JLUF9fIEJhY2t1cAogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgpAQCAtNzQ3LDYgKzc0OCwxMSBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ19HZXRUaW1lKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCBSVENfVGltZVR5cGVEZWYgKnNUaW1lLCB1aW50MzJfdCBGb3JtYXQpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ19TZXREYXRlKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCBSVENfRGF0ZVR5cGVEZWYgKnNEYXRlLCB1aW50MzJfdCBGb3JtYXQpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ19HZXREYXRlKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCBSVENfRGF0ZVR5cGVEZWYgKnNEYXRlLCB1aW50MzJfdCBGb3JtYXQpOwordm9pZCAgICAgICAgICAgICAgSEFMX1JUQ19EU1RfQWRkMUhvdXIoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwordm9pZCAgICAgICAgICAgICAgSEFMX1JUQ19EU1RfU3ViMUhvdXIoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwordm9pZCAgICAgICAgICAgICAgSEFMX1JUQ19EU1RfU2V0U3RvcmVPcGVyYXRpb24oUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwordm9pZCAgICAgICAgICAgICAgSEFMX1JUQ19EU1RfQ2xlYXJTdG9yZU9wZXJhdGlvbihSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Cit1aW50MzJfdCAgICAgICAgICBIQUxfUlRDX0RTVF9SZWFkU3RvcmVPcGVyYXRpb24oUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw1eHhfaGFsX3J0Y19leC5oIGIvSW5jL3N0bTMybDV4eF9oYWxfcnRjX2V4LmgKaW5kZXggNDFjNmQ5OS4uMWZmMTYzYSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDV4eF9oYWxfcnRjX2V4LmgKKysrIGIvSW5jL3N0bTMybDV4eF9oYWxfcnRjX2V4LmgKQEAgLTM4Myw2ICszODMsMTYgQEAKICAgKiBAfQogICAqLwogCisKKy8qKiBAZGVmZ3JvdXAgUlRDRXhfVGFtcGVyX01hc2thYmxlX25iICBSVENFeCBUYW1wZXJzIG1hc2thYmxlIG51bWJlcgorICAqIEB7CisgICovCisjZGVmaW5lIFJUQ19UQU1QRVJfTUFTS0FCTEVfTkIgICAgICAgICAgICAgIDN1CisKKy8qKgorICAqIEB9CisgICovCisKIC8qKiBAZGVmZ3JvdXAgUlRDRXhfVGFtcGVyX0VyYXNlQmFja1VwICBSVENFeCBUYW1wZXIgRXJhc2VCYWNrVXAKICogQHsKICovCkBAIC0xMzk1LDYgKzE0MDUsMTIgQEAKIHZvaWQgICAgICAgICAgICAgIEhBTF9SVENFeF9JbnRlcm5hbFRhbXBlcjNFdmVudENhbGxiYWNrKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKIHZvaWQgICAgICAgICAgICAgIEhBTF9SVENFeF9JbnRlcm5hbFRhbXBlcjVFdmVudENhbGxiYWNrKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKIHZvaWQgICAgICAgICAgICAgIEhBTF9SVENFeF9JbnRlcm5hbFRhbXBlcjhFdmVudENhbGxiYWNrKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKK3ZvaWQgICAgICAgICAgICAgIEhBTF9SVENFeF9FbmFibGVUZW1wZXJhdHVyZU1vbml0b3JpbmcoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwordm9pZCAgICAgICAgICAgICAgSEFMX1JUQ0V4X0Rpc2FibGVUZW1wZXJhdHVyZU1vbml0b3JpbmcoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwordm9pZCAgICAgICAgICAgICAgSEFMX1JUQ0V4X0VuYWJsZVZvbHRhZ2VNb25pdG9yaW5nKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKK3ZvaWQgICAgICAgICAgICAgIEhBTF9SVENFeF9EaXNhYmxlVm9sdGFnZU1vbml0b3JpbmcoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwordm9pZCAgICAgICAgICAgICAgSEFMX1JUQ0V4X0VuYWJsZVdVVE1vbml0b3JpbmcoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwordm9pZCAgICAgICAgICAgICAgSEFMX1JUQ0V4X0Rpc2FibGVXVVRNb25pdG9yaW5nKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNXh4X2hhbF9zZC5oIGIvSW5jL3N0bTMybDV4eF9oYWxfc2QuaAppbmRleCBhZTQ1ODM5Li41ZmI4MmE4IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNXh4X2hhbF9zZC5oCisrKyBiL0luYy9zdG0zMmw1eHhfaGFsX3NkLmgKQEAgLTIyLDcgKzIyLDcgQEAKICNkZWZpbmUgU1RNMzJMNXh4X0hBTF9TRF9ICiAKICNpZmRlZiBfX2NwbHVzcGx1cwotIGV4dGVybiAiQyIgeworZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTU4LDcgKzU4LDcgQEAKICAgSEFMX1NEX1NUQVRFX1JFQ0VJVklORyAgICAgICAgICAgICAgPSAoKHVpbnQzMl90KTB4MDAwMDAwMDVVKSwgIC8qITwgU0QgUmVjZWl2aW5nIFN0YXRlICAgICAgICAgICAgICAgICAgKi8KICAgSEFMX1NEX1NUQVRFX1RSQU5TRkVSICAgICAgICAgICAgICAgPSAoKHVpbnQzMl90KTB4MDAwMDAwMDZVKSwgIC8qITwgU0QgVHJhbnNmZXIgU3RhdGUgICAgICAgICAgICAgICAgICAgKi8KICAgSEFMX1NEX1NUQVRFX0VSUk9SICAgICAgICAgICAgICAgICAgPSAoKHVpbnQzMl90KTB4MDAwMDAwMEZVKSAgIC8qITwgU0QgaXMgaW4gZXJyb3Igc3RhdGUgICAgICAgICAgICAgICAgKi8KLX1IQUxfU0RfU3RhdGVUeXBlRGVmOworfSBIQUxfU0RfU3RhdGVUeXBlRGVmOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTExMCw3ICsxMTAsNyBAQAogCiAgIHVpbnQzMl90IENhcmRTcGVlZDsgICAgICAgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBjYXJkIFNwZWVkICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotfUhBTF9TRF9DYXJkSW5mb1R5cGVEZWY7Cit9IEhBTF9TRF9DYXJkSW5mb1R5cGVEZWY7CiAKIC8qKgogICAqIEBicmllZiAgU0QgaGFuZGxlIFN0cnVjdHVyZSBkZWZpbml0aW9uCkBAIC0xNDgsMjIgKzE0OCwyMiBAQAogICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgIENJRFs0XTsgICAgICAgICAgIC8qITwgU0QgY2FyZCBpZGVudGlmaWNhdGlvbiBudW1iZXIgdGFibGUgKi8KIAogI2lmIGRlZmluZWQgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTKSAmJiAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCi0gIHZvaWQgKCogVHhDcGx0Q2FsbGJhY2spICAgICAgICAgICAgICAgICAoc3RydWN0IF9fU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKLSAgdm9pZCAoKiBSeENwbHRDYWxsYmFjaykgICAgICAgICAgICAgICAgIChzdHJ1Y3QgX19TRF9IYW5kbGVUeXBlRGVmICpoc2QpOwotICB2b2lkICgqIEVycm9yQ2FsbGJhY2spICAgICAgICAgICAgICAgICAgKHN0cnVjdCBfX1NEX0hhbmRsZVR5cGVEZWYgKmhzZCk7Ci0gIHZvaWQgKCogQWJvcnRDcGx0Q2FsbGJhY2spICAgICAgICAgICAgICAoc3RydWN0IF9fU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKLSAgdm9pZCAoKiBSZWFkX0RNQURibEJ1ZjBDcGx0Q2FsbGJhY2spICAgIChzdHJ1Y3QgX19TRF9IYW5kbGVUeXBlRGVmICpoc2QpOwotICB2b2lkICgqIFJlYWRfRE1BRGJsQnVmMUNwbHRDYWxsYmFjaykgICAgKHN0cnVjdCBfX1NEX0hhbmRsZVR5cGVEZWYgKmhzZCk7Ci0gIHZvaWQgKCogV3JpdGVfRE1BRGJsQnVmMENwbHRDYWxsYmFjaykgICAoc3RydWN0IF9fU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKLSAgdm9pZCAoKiBXcml0ZV9ETUFEYmxCdWYxQ3BsdENhbGxiYWNrKSAgIChzdHJ1Y3QgX19TRF9IYW5kbGVUeXBlRGVmICpoc2QpOworICB2b2lkICgqIFR4Q3BsdENhbGxiYWNrKShzdHJ1Y3QgX19TRF9IYW5kbGVUeXBlRGVmICpoc2QpOworICB2b2lkICgqIFJ4Q3BsdENhbGxiYWNrKShzdHJ1Y3QgX19TRF9IYW5kbGVUeXBlRGVmICpoc2QpOworICB2b2lkICgqIEVycm9yQ2FsbGJhY2spKHN0cnVjdCBfX1NEX0hhbmRsZVR5cGVEZWYgKmhzZCk7CisgIHZvaWQgKCogQWJvcnRDcGx0Q2FsbGJhY2spKHN0cnVjdCBfX1NEX0hhbmRsZVR5cGVEZWYgKmhzZCk7CisgIHZvaWQgKCogUmVhZF9ETUFEYmxCdWYwQ3BsdENhbGxiYWNrKShzdHJ1Y3QgX19TRF9IYW5kbGVUeXBlRGVmICpoc2QpOworICB2b2lkICgqIFJlYWRfRE1BRGJsQnVmMUNwbHRDYWxsYmFjaykoc3RydWN0IF9fU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKKyAgdm9pZCAoKiBXcml0ZV9ETUFEYmxCdWYwQ3BsdENhbGxiYWNrKShzdHJ1Y3QgX19TRF9IYW5kbGVUeXBlRGVmICpoc2QpOworICB2b2lkICgqIFdyaXRlX0RNQURibEJ1ZjFDcGx0Q2FsbGJhY2spKHN0cnVjdCBfX1NEX0hhbmRsZVR5cGVEZWYgKmhzZCk7CiAjaWYgKFVTRV9TRF9UUkFOU0NFSVZFUiAhPSAwVSkKLSAgdm9pZCAoKiBEcml2ZVRyYW5zY2VpdmVyXzFfOFZfQ2FsbGJhY2spIChGbGFnU3RhdHVzIHN0YXR1cyk7CisgIHZvaWQgKCogRHJpdmVUcmFuc2NlaXZlcl8xXzhWX0NhbGxiYWNrKShGbGFnU3RhdHVzIHN0YXR1cyk7CiAjZW5kaWYgLyogVVNFX1NEX1RSQU5TQ0VJVkVSICovCiAKLSAgdm9pZCAoKiBNc3BJbml0Q2FsbGJhY2spICAgICAgICAgICAgICAgIChzdHJ1Y3QgX19TRF9IYW5kbGVUeXBlRGVmICpoc2QpOwotICB2b2lkICgqIE1zcERlSW5pdENhbGxiYWNrKSAgICAgICAgICAgICAgKHN0cnVjdCBfX1NEX0hhbmRsZVR5cGVEZWYgKmhzZCk7CisgIHZvaWQgKCogTXNwSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19TRF9IYW5kbGVUeXBlRGVmICpoc2QpOworICB2b2lkICgqIE1zcERlSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19TRF9IYW5kbGVUeXBlRGVmICpoc2QpOwogI2VuZGlmIC8qIFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCi19U0RfSGFuZGxlVHlwZURlZjsKK30gU0RfSGFuZGxlVHlwZURlZjsKIAogLyoqCiAgICogQH0KQEAgLTIxMSw3ICsyMTEsNyBAQAogICBfX0lPIHVpbnQ4X3QgIEVDQzsgICAgICAgICAgICAgICAgICAvKiE8IEVDQyBjb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgX19JTyB1aW50OF90ICBDU0RfQ1JDOyAgICAgICAgICAgICAgLyohPCBDU0QgQ1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIF9fSU8gdWludDhfdCAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgIC8qITwgQWx3YXlzIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotfUhBTF9TRF9DYXJkQ1NEVHlwZURlZjsKK30gSEFMX1NEX0NhcmRDU0RUeXBlRGVmOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTIzMiw3ICsyMzIsNyBAQAogICBfX0lPIHVpbnQ4X3QgIENJRF9DUkM7ICAgICAgICAgLyohPCBDSUQgQ1JDICAgICAgICAgICAgICAgKi8KICAgX19JTyB1aW50OF90ICBSZXNlcnZlZDI7ICAgICAgIC8qITwgQWx3YXlzIDEgICAgICAgICAgICAgICovCiAKLX1IQUxfU0RfQ2FyZENJRFR5cGVEZWY7Cit9IEhBTF9TRF9DYXJkQ0lEVHlwZURlZjsKIC8qKgogICAqIEB9CiAgICovCkBAIC0yNTUsNyArMjU1LDcgQEAKICAgX19JTyB1aW50OF90ICBVaHNTcGVlZEdyYWRlOyAgICAgICAgICAvKiE8IENhcnJpZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNwZWVkIGdyYWRlIG9mIFVIUyBjYXJkICAgICAgKi8KICAgX19JTyB1aW50OF90ICBVaHNBbGxvY2F0aW9uVW5pdFNpemU7ICAvKiE8IENhcnJpZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFVIUyBjYXJkJ3MgYWxsb2NhdGlvbiB1bml0IHNpemUgICovCiAgIF9fSU8gdWludDhfdCAgVmlkZW9TcGVlZENsYXNzOyAgICAgICAgLyohPCBDYXJyaWVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBWaWRlbyBTcGVlZCBDbGFzcyBvZiBVSFMgY2FyZCAgICAqLwotfUhBTF9TRF9DYXJkU3RhdHVzVHlwZURlZjsKK30gSEFMX1NEX0NhcmRTdGF0dXNUeXBlRGVmOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTI3Nyw3ICsyNzcsNyBAQAogCiAgIEhBTF9TRF9NU1BfSU5JVF9DQl9JRCAgICAgICAgICAgICAgICA9IDB4MTBVLCAgLyohPCBTRCBNc3BJbml0IENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEhBTF9TRF9NU1BfREVJTklUX0NCX0lEICAgICAgICAgICAgICA9IDB4MTFVICAgLyohPCBTRCBNc3BEZUluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICovCi19SEFMX1NEX0NhbGxiYWNrSURUeXBlRGVmOworfSBIQUxfU0RfQ2FsbGJhY2tJRFR5cGVEZWY7CiAvKioKICAgKiBAfQogICAqLwpAQCAtMjg1LDcgKzI4NSw3IEBACiAvKiogQGRlZmdyb3VwIFNEX0V4cG9ydGVkX1R5cGVzX0dyb3VwOCBTRCBDYWxsYmFjayBwb2ludGVyIGRlZmluaXRpb24KICAgKiBAewogICAqLwotdHlwZWRlZiB2b2lkICgqcFNEX0NhbGxiYWNrVHlwZURlZikgICAgICAgICAgIChTRF9IYW5kbGVUeXBlRGVmICpoc2QpOwordHlwZWRlZiB2b2lkICgqcFNEX0NhbGxiYWNrVHlwZURlZikoU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKICNpZiAoVVNFX1NEX1RSQU5TQ0VJVkVSICE9IDBVKQogdHlwZWRlZiB2b2lkICgqcFNEX1RyYW5zY2VpdmVyQ2FsbGJhY2tUeXBlRGVmKShGbGFnU3RhdHVzIHN0YXR1cyk7CiAjZW5kaWYgLyogVVNFX1NEX1RSQU5TQ0VJVkVSICovCkBAIC0yOTgsNyArMjk4LDcgQEAKICAgKi8KIAogLyogRXhwb3J0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qKiBAZGVmZ3JvdXAgU0RfRXhwb3J0ZWRfQ29uc3RhbnRzIEV4cG9ydGVkIENvbnN0YW50cworLyoqIEBkZWZncm91cCBTRF9FeHBvcnRlZF9Db25zdGFudHMgU0QgRXhwb3J0ZWQgQ29uc3RhbnRzCiAgICogQHsKICAgKi8KIApAQCAtMzE1LDEzICszMTUsMTMgQEAKICNkZWZpbmUgSEFMX1NEX0VSUk9SX1RYX1VOREVSUlVOICAgICAgICAgICAgICBTRE1NQ19FUlJPUl9UWF9VTkRFUlJVTiAgICAgICAgICAgICAgICAgLyohPCBUcmFuc21pdCBGSUZPIHVuZGVycnVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgSEFMX1NEX0VSUk9SX1JYX09WRVJSVU4gICAgICAgICAgICAgICBTRE1NQ19FUlJPUl9SWF9PVkVSUlVOICAgICAgICAgICAgICAgICAgLyohPCBSZWNlaXZlIEZJRk8gb3ZlcnJ1biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgSEFMX1NEX0VSUk9SX0FERFJfTUlTQUxJR05FRCAgICAgICAgICBTRE1NQ19FUlJPUl9BRERSX01JU0FMSUdORUQgICAgICAgICAgICAgLyohPCBNaXNhbGlnbmVkIGFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFMX1NEX0VSUk9SX0JMT0NLX0xFTl9FUlIgICAgICAgICAgICBTRE1NQ19FUlJPUl9CTE9DS19MRU5fRVJSICAgICAgICAgICAgICAgLyohPCBUcmFuc2ZlcnJlZCBibG9jayBsZW5ndGggaXMgbm90IGFsbG93ZWQgZm9yIHRoZSBjYXJkIG9yIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHRyYW5zZmVycmVkIGJ5dGVzIGRvZXMgbm90IG1hdGNoIHRoZSBibG9jayBsZW5ndGggICAqLworI2RlZmluZSBIQUxfU0RfRVJST1JfQkxPQ0tfTEVOX0VSUiAgICAgICAgICAgIFNETU1DX0VSUk9SX0JMT0NLX0xFTl9FUlIgICAgICAgICAgICAgICAvKiE8IFRyYW5zZmVycmVkIGJsb2NrIGxlbmd0aCBpcyBub3QgYWxsb3dlZCBmb3IgdGhlIGNhcmQgb3IgdGhlICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IG51bWJlciBvZiB0cmFuc2ZlcnJlZCBieXRlcyBkb2VzIG5vdCBtYXRjaCB0aGUgYmxvY2sgbGVuZ3RoICAqLwogI2RlZmluZSBIQUxfU0RfRVJST1JfRVJBU0VfU0VRX0VSUiAgICAgICAgICAgIFNETU1DX0VSUk9SX0VSQVNFX1NFUV9FUlIgICAgICAgICAgICAgICAvKiE8IEFuIGVycm9yIGluIHRoZSBzZXF1ZW5jZSBvZiBlcmFzZSBjb21tYW5kIG9jY3VycyAgICAgICAgICAgICAqLwogI2RlZmluZSBIQUxfU0RfRVJST1JfQkFEX0VSQVNFX1BBUkFNICAgICAgICAgIFNETU1DX0VSUk9SX0JBRF9FUkFTRV9QQVJBTSAgICAgICAgICAgICAvKiE8IEFuIGludmFsaWQgc2VsZWN0aW9uIGZvciBlcmFzZSBncm91cHMgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBIQUxfU0RfRVJST1JfV1JJVEVfUFJPVF9WSU9MQVRJT04gICAgIFNETU1DX0VSUk9SX1dSSVRFX1BST1RfVklPTEFUSU9OICAgICAgICAvKiE8IEF0dGVtcHQgdG8gcHJvZ3JhbSBhIHdyaXRlIHByb3RlY3QgYmxvY2sgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQUxfU0RfRVJST1JfTE9DS19VTkxPQ0tfRkFJTEVEICAgICAgIFNETU1DX0VSUk9SX0xPQ0tfVU5MT0NLX0ZBSUxFRCAgICAgICAgICAvKiE8IFNlcXVlbmNlIG9yIHBhc3N3b3JkIGVycm9yIGhhcyBiZWVuIGRldGVjdGVkIGluIHVubG9jawotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgb3IgaWYgdGhlcmUgd2FzIGFuIGF0dGVtcHQgdG8gYWNjZXNzIGEgbG9ja2VkIGNhcmQgICAqLworI2RlZmluZSBIQUxfU0RfRVJST1JfTE9DS19VTkxPQ0tfRkFJTEVEICAgICAgIFNETU1DX0VSUk9SX0xPQ0tfVU5MT0NLX0ZBSUxFRCAgICAgICAgICAvKiE8IFNlcXVlbmNlIG9yIHBhc3N3b3JkIGVycm9yIGhhcyBiZWVuIGRldGVjdGVkIGluIHVubG9jayAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGNvbW1hbmQgb3IgaWYgdGhlcmUgd2FzIGFuIGF0dGVtcHQgdG8gYWNjZXNzIGEgbG9ja2VkIGNhcmQgICAqLwogI2RlZmluZSBIQUxfU0RfRVJST1JfQ09NX0NSQ19GQUlMRUQgICAgICAgICAgIFNETU1DX0VSUk9SX0NPTV9DUkNfRkFJTEVEICAgICAgICAgICAgICAvKiE8IENSQyBjaGVjayBvZiB0aGUgcHJldmlvdXMgY29tbWFuZCBmYWlsZWQgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBIQUxfU0RfRVJST1JfSUxMRUdBTF9DTUQgICAgICAgICAgICAgIFNETU1DX0VSUk9SX0lMTEVHQUxfQ01EICAgICAgICAgICAgICAgICAvKiE8IENvbW1hbmQgaXMgbm90IGxlZ2FsIGZvciB0aGUgY2FyZCBzdGF0ZSAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBIQUxfU0RfRVJST1JfQ0FSRF9FQ0NfRkFJTEVEICAgICAgICAgIFNETU1DX0VSUk9SX0NBUkRfRUNDX0ZBSUxFRCAgICAgICAgICAgICAvKiE8IENhcmQgaW50ZXJuYWwgRUNDIHdhcyBhcHBsaWVkIGJ1dCBmYWlsZWQgdG8gY29ycmVjdCB0aGUgZGF0YSAqLwpAQCAtMzMyLDggKzMzMiw4IEBACiAjZGVmaW5lIEhBTF9TRF9FUlJPUl9DSURfQ1NEX09WRVJXUklURSAgICAgICAgU0RNTUNfRVJST1JfQ0lEX0NTRF9PVkVSV1JJVEUgICAgICAgICAgIC8qITwgQ0lEL0NTRCBvdmVyd3JpdGUgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEhBTF9TRF9FUlJPUl9XUF9FUkFTRV9TS0lQICAgICAgICAgICAgU0RNTUNfRVJST1JfV1BfRVJBU0VfU0tJUCAgICAgICAgICAgICAgIC8qITwgT25seSBwYXJ0aWFsIGFkZHJlc3Mgc3BhY2Ugd2FzIGVyYXNlZCAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEhBTF9TRF9FUlJPUl9DQVJEX0VDQ19ESVNBQkxFRCAgICAgICAgU0RNTUNfRVJST1JfQ0FSRF9FQ0NfRElTQUJMRUQgICAgICAgICAgIC8qITwgQ29tbWFuZCBoYXMgYmVlbiBleGVjdXRlZCB3aXRob3V0IHVzaW5nIGludGVybmFsIEVDQyAgICAgICAgICovCi0jZGVmaW5lIEhBTF9TRF9FUlJPUl9FUkFTRV9SRVNFVCAgICAgICAgICAgICAgU0RNTUNfRVJST1JfRVJBU0VfUkVTRVQgICAgICAgICAgICAgICAgIC8qITwgRXJhc2Ugc2VxdWVuY2Ugd2FzIGNsZWFyZWQgYmVmb3JlIGV4ZWN1dGluZyBiZWNhdXNlIGFuIG91dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGVyYXNlIHNlcXVlbmNlIGNvbW1hbmQgd2FzIHJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBIQUxfU0RfRVJST1JfRVJBU0VfUkVTRVQgICAgICAgICAgICAgIFNETU1DX0VSUk9SX0VSQVNFX1JFU0VUICAgICAgICAgICAgICAgICAvKiE8IEVyYXNlIHNlcXVlbmNlIHdhcyBjbGVhcmVkIGJlZm9yZSBleGVjdXRpbmcgYmVjYXVzZSBhbiBvdXQgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IG9mIGVyYXNlIHNlcXVlbmNlIGNvbW1hbmQgd2FzIHJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBIQUxfU0RfRVJST1JfQUtFX1NFUV9FUlIgICAgICAgICAgICAgIFNETU1DX0VSUk9SX0FLRV9TRVFfRVJSICAgICAgICAgICAgICAgICAvKiE8IEVycm9yIGluIHNlcXVlbmNlIG9mIGF1dGhlbnRpY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBIQUxfU0RfRVJST1JfSU5WQUxJRF9WT0xUUkFOR0UgICAgICAgIFNETU1DX0VSUk9SX0lOVkFMSURfVk9MVFJBTkdFICAgICAgICAgICAvKiE8IEVycm9yIGluIGNhc2Ugb2YgaW52YWxpZCB2b2x0YWdlIHJhbmdlICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBIQUxfU0RfRVJST1JfQUREUl9PVVRfT0ZfUkFOR0UgICAgICAgIFNETU1DX0VSUk9SX0FERFJfT1VUX09GX1JBTkdFICAgICAgICAgICAvKiE8IEVycm9yIHdoZW4gYWRkcmVzc2VkIGJsb2NrIGlzIG91dCBvZiByYW5nZSAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzQyLDcgKzM0Miw3IEBACiAjZGVmaW5lIEhBTF9TRF9FUlJPUl9VTlNVUFBPUlRFRF9GRUFUVVJFICAgICAgU0RNTUNfRVJST1JfVU5TVVBQT1JURURfRkVBVFVSRSAgICAgICAgIC8qITwgRXJyb3Igd2hlbiBmZWF0dXJlIGlzIG5vdCBpbnN1cHBvcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEhBTF9TRF9FUlJPUl9CVVNZICAgICAgICAgICAgICAgICAgICAgU0RNTUNfRVJST1JfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRXJyb3Igd2hlbiB0cmFuc2ZlciBwcm9jZXNzIGlzIGJ1c3kgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEhBTF9TRF9FUlJPUl9ETUEgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfRVJST1JfRE1BICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRXJyb3Igd2hpbGUgRE1BIHRyYW5zZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBTF9TRF9FUlJPUl9USU1FT1VUICAgICAgICAgICAgICAgICAgU0RNTUNfRVJST1JfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgIC8qITwgVGltZW91dCBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBIQUxfU0RfRVJST1JfVElNRU9VVCAgICAgICAgICAgICAgICAgIFNETU1DX0VSUk9SX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAvKiE8IFRpbWVvdXQgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAjaWYgZGVmaW5lZCAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKICNkZWZpbmUgSEFMX1NEX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0sgICAgICAgICBTRE1NQ19FUlJPUl9JTlZBTElEX1BBUkFNRVRFUiAgICAgICAvKiE8IEludmFsaWQgY2FsbGJhY2sgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTM5Nyw5ICszOTcsOSBAQAogCiAvKiBFeHBvcnRlZCBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBkZWZncm91cCBTRF9FeHBvcnRlZF9tYWNyb3MgU0QgRXhwb3J0ZWQgTWFjcm9zCi0gKiAgQGJyaWVmIG1hY3JvcyB0byBoYW5kbGUgaW50ZXJydXB0cyBhbmQgc3BlY2lmaWMgY2xvY2sgY29uZmlndXJhdGlvbnMKLSAqIEB7Ci0gKi8KKyAgKiAgQGJyaWVmIG1hY3JvcyB0byBoYW5kbGUgaW50ZXJydXB0cyBhbmQgc3BlY2lmaWMgY2xvY2sgY29uZmlndXJhdGlvbnMKKyAgKiBAeworICAqLwogLyoqIEBicmllZiBSZXNldCBTRCBoYW5kbGUgc3RhdGUuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIFNEIEhhbmRsZS4KICAgKiBAcmV0dmFsIE5vbmUKQEAgLTYyMCwxMCArNjIwLDEwIEBACiAvKiogQGRlZmdyb3VwIFNEX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwogICAqIEB7CiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RfSW5pdCAgICAgKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RfSW5pdENhcmQgKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RfRGVJbml0ICAgKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7Ci12b2lkICAgICAgICAgICAgICBIQUxfU0RfTXNwSW5pdCAgKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RfSW5pdChTRF9IYW5kbGVUeXBlRGVmICpoc2QpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NEX0luaXRDYXJkKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RfRGVJbml0KFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7Cit2b2lkICAgICAgICAgICAgICBIQUxfU0RfTXNwSW5pdChTRF9IYW5kbGVUeXBlRGVmICpoc2QpOwogdm9pZCAgICAgICAgICAgICAgSEFMX1NEX01zcERlSW5pdChTRF9IYW5kbGVUeXBlRGVmICpoc2QpOwogLyoqCiAgICogQH0KQEAgLTYzMywyMyArNjMzLDI5IEBACiAgICogQHsKICAgKi8KIC8qIEJsb2NraW5nIG1vZGU6IFBvbGxpbmcgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9SZWFkQmxvY2tzICAgICAoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgQmxvY2tBZGQsIHVpbnQzMl90IE51bWJlck9mQmxvY2tzLCB1aW50MzJfdCBUaW1lb3V0KTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9Xcml0ZUJsb2NrcyAgICAoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgQmxvY2tBZGQsIHVpbnQzMl90IE51bWJlck9mQmxvY2tzLCB1aW50MzJfdCBUaW1lb3V0KTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9FcmFzZSAgICAgICAgICAoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50MzJfdCBCbG9ja1N0YXJ0QWRkLCB1aW50MzJfdCBCbG9ja0VuZEFkZCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RfUmVhZEJsb2NrcyhTRF9IYW5kbGVUeXBlRGVmICpoc2QsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBCbG9ja0FkZCwgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0KTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9Xcml0ZUJsb2NrcyhTRF9IYW5kbGVUeXBlRGVmICpoc2QsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBCbG9ja0FkZCwgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RfRXJhc2UoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50MzJfdCBCbG9ja1N0YXJ0QWRkLCB1aW50MzJfdCBCbG9ja0VuZEFkZCk7CiAvKiBOb24tQmxvY2tpbmcgbW9kZTogSVQgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9SZWFkQmxvY2tzX0lUICAoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgQmxvY2tBZGQsIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9Xcml0ZUJsb2Nrc19JVCAoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgQmxvY2tBZGQsIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9SZWFkQmxvY2tzX0lUKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgdWludDhfdCAqcERhdGEsIHVpbnQzMl90IEJsb2NrQWRkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NEX1dyaXRlQmxvY2tzX0lUKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgdWludDhfdCAqcERhdGEsIHVpbnQzMl90IEJsb2NrQWRkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKTsKIC8qIE5vbi1CbG9ja2luZyBtb2RlOiBETUEgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9SZWFkQmxvY2tzX0RNQSAoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgQmxvY2tBZGQsIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9Xcml0ZUJsb2Nrc19ETUEoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgQmxvY2tBZGQsIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9SZWFkQmxvY2tzX0RNQShTRF9IYW5kbGVUeXBlRGVmICpoc2QsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBCbG9ja0FkZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBOdW1iZXJPZkJsb2Nrcyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RfV3JpdGVCbG9ja3NfRE1BKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgdWludDhfdCAqcERhdGEsIHVpbnQzMl90IEJsb2NrQWRkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBOdW1iZXJPZkJsb2Nrcyk7CiAKLXZvaWQgICAgICAgICAgICAgIEhBTF9TRF9JUlFIYW5kbGVyICAgICAoU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKK3ZvaWQgICAgICAgICAgICAgIEhBTF9TRF9JUlFIYW5kbGVyKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7CiAKIC8qIENhbGxiYWNrIGluIG5vbiBibG9ja2luZyBtb2RlcyAoRE1BKSAqLwotdm9pZCAgICAgICAgICAgICAgSEFMX1NEX1R4Q3BsdENhbGxiYWNrIChTRF9IYW5kbGVUeXBlRGVmICpoc2QpOwotdm9pZCAgICAgICAgICAgICAgSEFMX1NEX1J4Q3BsdENhbGxiYWNrIChTRF9IYW5kbGVUeXBlRGVmICpoc2QpOwotdm9pZCAgICAgICAgICAgICAgSEFMX1NEX0Vycm9yQ2FsbGJhY2sgIChTRF9IYW5kbGVUeXBlRGVmICpoc2QpOwotdm9pZCAgICAgICAgICAgICAgSEFMX1NEX0Fib3J0Q2FsbGJhY2sgIChTRF9IYW5kbGVUeXBlRGVmICpoc2QpOwordm9pZCAgICAgICAgICAgICAgSEFMX1NEX1R4Q3BsdENhbGxiYWNrKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7Cit2b2lkICAgICAgICAgICAgICBIQUxfU0RfUnhDcGx0Q2FsbGJhY2soU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKK3ZvaWQgICAgICAgICAgICAgIEhBTF9TRF9FcnJvckNhbGxiYWNrKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7Cit2b2lkICAgICAgICAgICAgICBIQUxfU0RfQWJvcnRDYWxsYmFjayhTRF9IYW5kbGVUeXBlRGVmICpoc2QpOwogCiAjaWYgKFVTRV9TRF9UUkFOU0NFSVZFUiAhPSAwVSkKIC8qIENhbGxiYWNrIHRvIHN3aXRjaCBpbiAxLjhWIG1vZGUgKi8KQEAgLTY1OCwxMSArNjY0LDEyIEBACiAKICNpZiBkZWZpbmVkIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogLyogU0QgY2FsbGJhY2sgcmVnaXN0ZXJpbmcvdW5yZWdpc3RlcmluZyAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NEX1JlZ2lzdGVyQ2FsbGJhY2sgIChTRF9IYW5kbGVUeXBlRGVmICpoc2QsIEhBTF9TRF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELCBwU0RfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RfUmVnaXN0ZXJDYWxsYmFjayhTRF9IYW5kbGVUeXBlRGVmICpoc2QsIEhBTF9TRF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFNEX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NEX1VuUmVnaXN0ZXJDYWxsYmFjayhTRF9IYW5kbGVUeXBlRGVmICpoc2QsIEhBTF9TRF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lEKTsKIAogI2lmIChVU0VfU0RfVFJBTlNDRUlWRVIgIT0gMFUpCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RfUmVnaXN0ZXJUcmFuc2NlaXZlckNhbGxiYWNrICAoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCBwU0RfVHJhbnNjZWl2ZXJDYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9SZWdpc3RlclRyYW5zY2VpdmVyQ2FsbGJhY2soU0RfSGFuZGxlVHlwZURlZiAqaHNkLCBwU0RfVHJhbnNjZWl2ZXJDYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9VblJlZ2lzdGVyVHJhbnNjZWl2ZXJDYWxsYmFjayhTRF9IYW5kbGVUeXBlRGVmICpoc2QpOwogI2VuZGlmIC8qIFVTRV9TRF9UUkFOU0NFSVZFUiAqLwogI2VuZGlmIC8qIFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCkBAIC02ODQsMTAgKzY5MSwxMCBAQAogICAqIEB7CiAgICovCiBIQUxfU0RfQ2FyZFN0YXRlVHlwZURlZiBIQUxfU0RfR2V0Q2FyZFN0YXRlKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7Ci1IQUxfU3RhdHVzVHlwZURlZiAgICAgICBIQUxfU0RfR2V0Q2FyZENJRCAgIChTRF9IYW5kbGVUeXBlRGVmICpoc2QsIEhBTF9TRF9DYXJkQ0lEVHlwZURlZiAqcENJRCk7Ci1IQUxfU3RhdHVzVHlwZURlZiAgICAgICBIQUxfU0RfR2V0Q2FyZENTRCAgIChTRF9IYW5kbGVUeXBlRGVmICpoc2QsIEhBTF9TRF9DYXJkQ1NEVHlwZURlZiAqcENTRCk7CitIQUxfU3RhdHVzVHlwZURlZiAgICAgICBIQUxfU0RfR2V0Q2FyZENJRChTRF9IYW5kbGVUeXBlRGVmICpoc2QsIEhBTF9TRF9DYXJkQ0lEVHlwZURlZiAqcENJRCk7CitIQUxfU3RhdHVzVHlwZURlZiAgICAgICBIQUxfU0RfR2V0Q2FyZENTRChTRF9IYW5kbGVUeXBlRGVmICpoc2QsIEhBTF9TRF9DYXJkQ1NEVHlwZURlZiAqcENTRCk7CiBIQUxfU3RhdHVzVHlwZURlZiAgICAgICBIQUxfU0RfR2V0Q2FyZFN0YXR1cyhTRF9IYW5kbGVUeXBlRGVmICpoc2QsIEhBTF9TRF9DYXJkU3RhdHVzVHlwZURlZiAqcFN0YXR1cyk7Ci1IQUxfU3RhdHVzVHlwZURlZiAgICAgICBIQUxfU0RfR2V0Q2FyZEluZm8gIChTRF9IYW5kbGVUeXBlRGVmICpoc2QsIEhBTF9TRF9DYXJkSW5mb1R5cGVEZWYgKnBDYXJkSW5mbyk7CitIQUxfU3RhdHVzVHlwZURlZiAgICAgICBIQUxfU0RfR2V0Q2FyZEluZm8oU0RfSGFuZGxlVHlwZURlZiAqaHNkLCBIQUxfU0RfQ2FyZEluZm9UeXBlRGVmICpwQ2FyZEluZm8pOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTcwNCw3ICs3MTEsNyBAQAogLyoqIEBkZWZncm91cCBTRF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA2IFBlcmlvaGVyYWwgQWJvcnQgbWFuYWdlbWVudAogICAqIEB7CiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RfQWJvcnQgICAoU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9BYm9ydChTRF9IYW5kbGVUeXBlRGVmICpoc2QpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NEX0Fib3J0X0lUKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7CiAvKioKICAgKiBAfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDV4eF9oYWxfc2RfZXguaCBiL0luYy9zdG0zMmw1eHhfaGFsX3NkX2V4LmgKaW5kZXggYzQ1ZmYyMC4uOTUyMDkzYSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDV4eF9oYWxfc2RfZXguaAorKysgYi9JbmMvc3RtMzJsNXh4X2hhbF9zZF9leC5oCkBAIC0yMiw3ICsyMiw3IEBACiAjZGVmaW5lIFNUTTMyTDV4eF9IQUxfU0RfRVhfSAogCiAjaWZkZWYgX19jcGx1c3BsdXMKLSBleHRlcm4gIkMiIHsKK2V4dGVybiAiQyIgewogI2VuZGlmCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC01MCwxNyArNTAsMTUgQEAKICAgU0RfRE1BX0JVRkZFUjAgICAgICA9IDB4MDBVLCAgICAvKiE8IHNlbGVjdHMgU0QgaW50ZXJuYWwgRE1BIEJ1ZmZlciAwICAgICAqLwogICBTRF9ETUFfQlVGRkVSMSAgICAgID0gMHgwMVUsICAgIC8qITwgc2VsZWN0cyBTRCBpbnRlcm5hbCBETUEgQnVmZmVyIDEgICAgICovCiAKLX1IQUxfU0RFeF9ETUFCdWZmZXJfTWVtb3J5VHlwZURlZjsKK30gSEFMX1NERXhfRE1BQnVmZmVyX01lbW9yeVR5cGVEZWY7CiAKIC8qKgogICAqIEB9CiAgICovCi0KIC8qKgogICAqIEB9CiAgICovCi0vKiBFeHBvcnRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qKiBAZGVmZ3JvdXAgU0RFeF9FeHBvcnRlZF9GdW5jdGlvbnMgU0RFeCBFeHBvcnRlZCBGdW5jdGlvbnMKICAgKiBAewpAQCAtNzAsMTAgKzY4LDEyIEBACiAgICogQHsKICAgKi8KIAotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NERXhfQ29uZmlnRE1BTXVsdGlCdWZmZXIoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50MzJfdCAqIHBEYXRhQnVmZmVyMCwgdWludDMyX3QgKiBwRGF0YUJ1ZmZlcjEsIHVpbnQzMl90IEJ1ZmZlclNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NERXhfQ29uZmlnRE1BTXVsdGlCdWZmZXIoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50MzJfdCAqcERhdGFCdWZmZXIwLCB1aW50MzJfdCAqcERhdGFCdWZmZXIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQnVmZmVyU2l6ZSk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RFeF9SZWFkQmxvY2tzRE1BTXVsdGlCdWZmZXIoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50MzJfdCBCbG9ja0FkZCwgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NERXhfV3JpdGVCbG9ja3NETUFNdWx0aUJ1ZmZlcihTRF9IYW5kbGVUeXBlRGVmICpoc2QsIHVpbnQzMl90IEJsb2NrQWRkLCB1aW50MzJfdCBOdW1iZXJPZkJsb2Nrcyk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RFeF9DaGFuZ2VETUFCdWZmZXIoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCBIQUxfU0RFeF9ETUFCdWZmZXJfTWVtb3J5VHlwZURlZiBCdWZmZXIsIHVpbnQzMl90ICpwRGF0YUJ1ZmZlcik7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RFeF9DaGFuZ2VETUFCdWZmZXIoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCBIQUxfU0RFeF9ETUFCdWZmZXJfTWVtb3J5VHlwZURlZiBCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnBEYXRhQnVmZmVyKTsKIAogdm9pZCBIQUxfU0RFeF9SZWFkX0RNQURvdWJsZUJ1ZjBDcGx0Q2FsbGJhY2soU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKIHZvaWQgSEFMX1NERXhfUmVhZF9ETUFEb3VibGVCdWYxQ3BsdENhbGxiYWNrKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNXh4X2hhbF9zbWFydGNhcmQuaCBiL0luYy9zdG0zMmw1eHhfaGFsX3NtYXJ0Y2FyZC5oCmluZGV4IDdmYjNhZmIuLjlhYTg5ZmYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw1eHhfaGFsX3NtYXJ0Y2FyZC5oCisrKyBiL0luYy9zdG0zMmw1eHhfaGFsX3NtYXJ0Y2FyZC5oCkBAIC0xNjMsNyArMTYzLDcgQEAKICAgKiAgICAgICAgICAgICAxMSA6IEVycm9yCiAgICogICAgICAgICAgYjUgICAgIFBlcmlwaGVyYWwgaW5pdGlhbGl6YXRpb24gc3RhdHVzCiAgICogICAgICAgICAgICAgMCAgOiBSZXNldCAoUGVyaXBoZXJhbCBub3QgaW5pdGlhbGl6ZWQpCi0gICogICAgICAgICAgICAgMSAgOiBJbml0IGRvbmUgKFBlcmlwaGVyYWwgbm90IGluaXRpYWxpemVkLiBIQUwgU01BUlRDQVJEIEluaXQgZnVuY3Rpb24gYWxyZWFkeSBjYWxsZWQpCisgICogICAgICAgICAgICAgMSAgOiBJbml0IGRvbmUgKFBlcmlwaGVyYWwgaW5pdGlhbGl6ZWQuIEhBTCBTTUFSVENBUkQgSW5pdCBmdW5jdGlvbiBhbHJlYWR5IGNhbGxlZCkKICAgKiAgICAgICAgICBiNC1iMyAgKG5vdCB1c2VkKQogICAqICAgICAgICAgICAgIHh4IDogU2hvdWxkIGJlIHNldCB0byAwMAogICAqICAgICAgICAgIGIyICAgICBJbnRyaW5zaWMgcHJvY2VzcyBzdGF0ZQpAQCAtMTgwLDcgKzE4MCw3IEBACiAgICogICAgICAgICAgICAgeHggOiBTaG91bGQgYmUgc2V0IHRvIDAwCiAgICogICAgICAgICAgYjUgICAgIFBlcmlwaGVyYWwgaW5pdGlhbGl6YXRpb24gc3RhdHVzCiAgICogICAgICAgICAgICAgMCAgOiBSZXNldCAoUGVyaXBoZXJhbCBub3QgaW5pdGlhbGl6ZWQpCi0gICogICAgICAgICAgICAgMSAgOiBJbml0IGRvbmUgKFBlcmlwaGVyYWwgbm90IGluaXRpYWxpemVkKQorICAqICAgICAgICAgICAgIDEgIDogSW5pdCBkb25lIChQZXJpcGhlcmFsIGluaXRpYWxpemVkKQogICAqICAgICAgICAgIGI0LWIyICAobm90IHVzZWQpCiAgICogICAgICAgICAgICB4eHggOiBTaG91bGQgYmUgc2V0IHRvIDAwMAogICAqICAgICAgICAgIGIxICAgICBSeCBzdGF0ZQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDV4eF9oYWxfc21idXMuaCBiL0luYy9zdG0zMmw1eHhfaGFsX3NtYnVzLmgKaW5kZXggM2I0MjQ4YS4uNjY1NWJhNCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDV4eF9oYWxfc21idXMuaAorKysgYi9JbmMvc3RtMzJsNXh4X2hhbF9zbWJ1cy5oCkBAIC0yNyw2ICsyNyw3IEBACiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaW5jbHVkZSAic3RtMzJsNXh4X2hhbF9kZWYuaCIKKyNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX3NtYnVzX2V4LmgiCiAKIC8qKiBAYWRkdG9ncm91cCBTVE0zMkw1eHhfSEFMX0RyaXZlcgogICAqIEB7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNXh4X2hhbF9zbWJ1c19leC5oIGIvSW5jL3N0bTMybDV4eF9oYWxfc21idXNfZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTIzNTBjCi0tLSAvZGV2L251bGwKKysrIGIvSW5jL3N0bTMybDV4eF9oYWxfc21idXNfZXguaApAQCAtMCwwICsxLDE0MCBAQAorLyoqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBmaWxlICAgIHN0bTMybDV4eF9oYWxfc21idXNfZXguaAorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtCisgICogQGJyaWVmICAgSGVhZGVyIGZpbGUgb2YgU01CVVMgSEFMIEV4dGVuZGVkIG1vZHVsZS4KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQGF0dGVudGlvbgorICAqCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgorICAqCisgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCisgICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQorICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQorICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqLworCisvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmbmRlZiBTVE0zMkw1eHhfSEFMX1NNQlVTX0VYX0gKKyNkZWZpbmUgU1RNMzJMNXh4X0hBTF9TTUJVU19FWF9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpbmNsdWRlICJzdG0zMmw1eHhfaGFsX2RlZi5oIgorCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJMNXh4X0hBTF9Ecml2ZXIKKyAgKiBAeworICAqLworCisvKiogQGFkZHRvZ3JvdXAgU01CVVNFeAorICAqIEB7CisgICovCisKKy8qIEV4cG9ydGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiogQGRlZmdyb3VwIFNNQlVTRXhfRXhwb3J0ZWRfQ29uc3RhbnRzIFNNQlVTIEV4dGVuZGVkIEV4cG9ydGVkIENvbnN0YW50cworICAqIEB7CisgICovCisKKy8qKiBAZGVmZ3JvdXAgU01CVVNFeF9GYXN0TW9kZVBsdXMgU01CVVMgRXh0ZW5kZWQgRmFzdCBNb2RlIFBsdXMKKyAgKiBAeworICAqLworI2RlZmluZSBTTUJVU19GQVNUTU9ERVBMVVNfUEI2ICAgICAgICAgICAgU1lTQ0ZHX0NGR1IxX0kyQ19QQjZfRk1QICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgRmFzdCBNb2RlIFBsdXMgb24gUEI2ICAgICAgICovCisjZGVmaW5lIFNNQlVTX0ZBU1RNT0RFUExVU19QQjcgICAgICAgICAgICBTWVNDRkdfQ0ZHUjFfSTJDX1BCN19GTVAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBGYXN0IE1vZGUgUGx1cyBvbiBQQjcgICAgICAgKi8KKyNkZWZpbmUgU01CVVNfRkFTVE1PREVQTFVTX1BCOCAgICAgICAgICAgIFNZU0NGR19DRkdSMV9JMkNfUEI4X0ZNUCAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIEZhc3QgTW9kZSBQbHVzIG9uIFBCOCAgICAgICAqLworI2RlZmluZSBTTUJVU19GQVNUTU9ERVBMVVNfUEI5ICAgICAgICAgICAgU1lTQ0ZHX0NGR1IxX0kyQ19QQjlfRk1QICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgRmFzdCBNb2RlIFBsdXMgb24gUEI5ICAgICAgICovCisjZGVmaW5lIFNNQlVTX0ZBU1RNT0RFUExVU19JMkMxICAgICAgICAgICBTWVNDRkdfQ0ZHUjFfSTJDMV9GTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBGYXN0IE1vZGUgUGx1cyBvbiBJMkMxIHBpbnMgKi8KKyNkZWZpbmUgU01CVVNfRkFTVE1PREVQTFVTX0kyQzIgICAgICAgICAgIFNZU0NGR19DRkdSMV9JMkMyX0ZNUCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIEZhc3QgTW9kZSBQbHVzIG9uIEkyQzIgcGlucyAqLworI2RlZmluZSBTTUJVU19GQVNUTU9ERVBMVVNfSTJDMyAgICAgICAgICAgU1lTQ0ZHX0NGR1IxX0kyQzNfRk1QICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgRmFzdCBNb2RlIFBsdXMgb24gSTJDMyBwaW5zICovCisjZGVmaW5lIFNNQlVTX0ZBU1RNT0RFUExVU19JMkM0ICAgICAgICAgICBTWVNDRkdfQ0ZHUjFfSTJDNF9GTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBGYXN0IE1vZGUgUGx1cyBvbiBJMkM0IHBpbnMgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKgorICAqIEB9CisgICovCisKKy8qIEV4cG9ydGVkIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiogQGRlZmdyb3VwIFNNQlVTRXhfRXhwb3J0ZWRfTWFjcm9zIFNNQlVTIEV4dGVuZGVkIEV4cG9ydGVkIE1hY3JvcworICAqIEB7CisgICovCisKKy8qKgorICAqIEB9CisgICovCisKKy8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiogQGFkZHRvZ3JvdXAgU01CVVNFeF9FeHBvcnRlZF9GdW5jdGlvbnMgU01CVVMgRXh0ZW5kZWQgRXhwb3J0ZWQgRnVuY3Rpb25zCisgICogQHsKKyAgKi8KKworLyoqIEBhZGR0b2dyb3VwIFNNQlVTRXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMyBTTUJVUyBFeHRlbmRlZCBGYXN0TW9kZVBsdXMgRnVuY3Rpb25zCisgICogQHsKKyAgKi8KK3ZvaWQgSEFMX1NNQlVTRXhfRW5hYmxlRmFzdE1vZGVQbHVzKHVpbnQzMl90IENvbmZpZ0Zhc3RNb2RlUGx1cyk7Cit2b2lkIEhBTF9TTUJVU0V4X0Rpc2FibGVGYXN0TW9kZVBsdXModWludDMyX3QgQ29uZmlnRmFzdE1vZGVQbHVzKTsKKy8qKgorICAqIEB9CisgICovCisKKy8qKgorICAqIEB9CisgICovCisKKy8qIFByaXZhdGUgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiogQGRlZmdyb3VwIFNNQlVTRXhfUHJpdmF0ZV9Db25zdGFudHMgU01CVVMgRXh0ZW5kZWQgUHJpdmF0ZSBDb25zdGFudHMKKyAgKiBAeworICAqLworCisvKioKKyAgKiBAfQorICAqLworCisvKiBQcml2YXRlIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBkZWZncm91cCBTTUJVU0V4X1ByaXZhdGVfTWFjcm8gU01CVVMgRXh0ZW5kZWQgUHJpdmF0ZSBNYWNyb3MKKyAgKiBAeworICAqLworI2RlZmluZSBJU19TTUJVU19GQVNUTU9ERVBMVVMoX19DT05GSUdfXykgKCgoKF9fQ09ORklHX18pICYgKFNNQlVTX0ZBU1RNT0RFUExVU19QQjYpKSAgPT0gU01CVVNfRkFTVE1PREVQTFVTX1BCNikgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0NPTkZJR19fKSAmIChTTUJVU19GQVNUTU9ERVBMVVNfUEI3KSkgID09IFNNQlVTX0ZBU1RNT0RFUExVU19QQjcpICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19DT05GSUdfXykgJiAoU01CVVNfRkFTVE1PREVQTFVTX1BCOCkpICA9PSBTTUJVU19GQVNUTU9ERVBMVVNfUEI4KSAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fQ09ORklHX18pICYgKFNNQlVTX0ZBU1RNT0RFUExVU19QQjkpKSAgPT0gU01CVVNfRkFTVE1PREVQTFVTX1BCOSkgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0NPTkZJR19fKSAmIChTTUJVU19GQVNUTU9ERVBMVVNfSTJDMSkpID09IFNNQlVTX0ZBU1RNT0RFUExVU19JMkMxKSAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19DT05GSUdfXykgJiAoU01CVVNfRkFTVE1PREVQTFVTX0kyQzIpKSA9PSBTTUJVU19GQVNUTU9ERVBMVVNfSTJDMikgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fQ09ORklHX18pICYgKFNNQlVTX0ZBU1RNT0RFUExVU19JMkMzKSkgPT0gU01CVVNfRkFTVE1PREVQTFVTX0kyQzMpICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0NPTkZJR19fKSAmIChTTUJVU19GQVNUTU9ERVBMVVNfSTJDNCkpID09IFNNQlVTX0ZBU1RNT0RFUExVU19JMkM0KSkKKy8qKgorICAqIEB9CisgICovCisKKy8qIFByaXZhdGUgRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiogQGRlZmdyb3VwIFNNQlVTRXhfUHJpdmF0ZV9GdW5jdGlvbnMgU01CVVMgRXh0ZW5kZWQgUHJpdmF0ZSBGdW5jdGlvbnMKKyAgKiBAeworICAqLworLyogUHJpdmF0ZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gc3RtMzJsNXh4X2hhbF9zbWJ1c19leC5jIGZpbGUgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKgorICAqIEB9CisgICovCisKKy8qKgorICAqIEB9CisgICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBTVE0zMkw1eHhfSEFMX1NNQlVTX0VYX0ggKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw1eHhfaGFsX3NyYW0uaCBiL0luYy9zdG0zMmw1eHhfaGFsX3NyYW0uaAppbmRleCA1ZDQ4MjBjLi42OWM0NzBlIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNXh4X2hhbF9zcmFtLmgKKysrIGIvSW5jL3N0bTMybDV4eF9oYWxfc3JhbS5oCkBAIC03OCw5ICs3OCw5IEBACiAjaWYgKFVTRV9IQUxfU1JBTV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgdm9pZCAoKiBNc3BJbml0Q2FsbGJhY2spKHN0cnVjdCBfX1NSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0pOyAgICAgICAgICAgICAgIC8qITwgU1JBTSBNc3AgSW5pdCBjYWxsYmFjayAgICAgICAgICAgICAgKi8KICAgdm9pZCAoKiBNc3BEZUluaXRDYWxsYmFjaykoc3RydWN0IF9fU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSk7ICAgICAgICAgICAgIC8qITwgU1JBTSBNc3AgRGVJbml0IGNhbGxiYWNrICAgICAgICAgICAgKi8KLSAgdm9pZCAoKiBEbWFYZmVyQ3BsdENhbGxiYWNrKShETUFfSGFuZGxlVHlwZURlZiAqIGhkbWEpOyAgICAgICAgICAgICAgICAgICAgIC8qITwgU1JBTSBETUEgWGZlciBDb21wbGV0ZSBjYWxsYmFjayAgICAgKi8KLSAgdm9pZCAoKiBEbWFYZmVyRXJyb3JDYWxsYmFjaykoRE1BX0hhbmRsZVR5cGVEZWYgKiBoZG1hKTsgICAgICAgICAgICAgICAgICAgIC8qITwgU1JBTSBETUEgWGZlciBFcnJvciBjYWxsYmFjayAgICAgICAgKi8KLSNlbmRpZgorICB2b2lkICgqIERtYVhmZXJDcGx0Q2FsbGJhY2spKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBTUkFNIERNQSBYZmVyIENvbXBsZXRlIGNhbGxiYWNrICAgICAqLworICB2b2lkICgqIERtYVhmZXJFcnJvckNhbGxiYWNrKShETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7ICAgICAgICAgICAgICAgICAgICAgLyohPCBTUkFNIERNQSBYZmVyIEVycm9yIGNhbGxiYWNrICAgICAgICAqLworI2VuZGlmIC8qIFVTRV9IQUxfU1JBTV9SRUdJU1RFUl9DQUxMQkFDS1MgICovCiB9IFNSQU1fSGFuZGxlVHlwZURlZjsKIAogI2lmIChVU0VfSEFMX1NSQU1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCkBAIC0xMDAsNyArMTAwLDcgQEAKICAgKi8KIHR5cGVkZWYgdm9pZCAoKnBTUkFNX0NhbGxiYWNrVHlwZURlZikoU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSk7CiB0eXBlZGVmIHZvaWQgKCpwU1JBTV9EbWFDYWxsYmFja1R5cGVEZWYpKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKLSNlbmRpZgorI2VuZGlmIC8qIFVTRV9IQUxfU1JBTV9SRUdJU1RFUl9DQUxMQkFDS1MgICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogI2Vsc2UKICNkZWZpbmUgX19IQUxfU1JBTV9SRVNFVF9IQU5ETEVfU1RBVEUoX19IQU5ETEVfXykgKChfX0hBTkRMRV9fKS0+U3RhdGUgPSBIQUxfU1JBTV9TVEFURV9SRVNFVCkKLSNlbmRpZgorI2VuZGlmIC8qIFVTRV9IQUxfU1JBTV9SRUdJU1RFUl9DQUxMQkFDS1MgICovCiAKIC8qKgogICAqIEB9CkBAIC0xODIsNyArMTgyLDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUkFNX1VuUmVnaXN0ZXJDYWxsYmFjayhTUkFNX0hhbmRsZVR5cGVEZWYgKmhzcmFtLCBIQUxfU1JBTV9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lkKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUkFNX1JlZ2lzdGVyRG1hQ2FsbGJhY2soU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSwgSEFMX1NSQU1fQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFNSQU1fRG1hQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7Ci0jZW5kaWYKKyNlbmRpZiAvKiBVU0VfSEFMX1NSQU1fUkVHSVNURVJfQ0FMTEJBQ0tTICAqLwogCiAvKioKICAgKiBAfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDV4eF9oYWxfdGltLmggYi9JbmMvc3RtMzJsNXh4X2hhbF90aW0uaAppbmRleCA1MTVjZmQ3Li5jYThkMjZjIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNXh4X2hhbF90aW0uaAorKysgYi9JbmMvc3RtMzJsNXh4X2hhbF90aW0uaApAQCAtMTA3MSwyNCArMTA3MSwyNCBAQAogLyoqIEBkZWZncm91cCBUSU1fRE1BX0J1cnN0X0xlbmd0aCBUSU0gRE1BIEJ1cnN0IExlbmd0aAogICAqIEB7CiAgICovCi0jZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF8xVFJBTlNGRVIgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gMSByZWdpc3RlciBzdGFydGluZyB0cm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICAgKi8KLSNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzJUUkFOU0ZFUlMgICAgICAweDAwMDAwMTAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byAyIHJlZ2lzdGVycyBzdGFydGluZyB0cm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICAqLwotI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfM1RSQU5TRkVSUyAgICAgIDB4MDAwMDAyMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDMgcmVnaXN0ZXJzIHN0YXJ0aW5nIHRyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgICovCi0jZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF80VFJBTlNGRVJTICAgICAgMHgwMDAwMDMwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gNCByZWdpc3RlcnMgc3RhcnRpbmcgdHJvbSBUSU14X0NSMSArIFRJTXhfRENSLkRCQSAgKi8KLSNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzVUUkFOU0ZFUlMgICAgICAweDAwMDAwNDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byA1IHJlZ2lzdGVycyBzdGFydGluZyB0cm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICAqLwotI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfNlRSQU5TRkVSUyAgICAgIDB4MDAwMDA1MDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDYgcmVnaXN0ZXJzIHN0YXJ0aW5nIHRyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgICovCi0jZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF83VFJBTlNGRVJTICAgICAgMHgwMDAwMDYwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gNyByZWdpc3RlcnMgc3RhcnRpbmcgdHJvbSBUSU14X0NSMSArIFRJTXhfRENSLkRCQSAgKi8KLSNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzhUUkFOU0ZFUlMgICAgICAweDAwMDAwNzAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byA4IHJlZ2lzdGVycyBzdGFydGluZyB0cm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICAqLwotI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfOVRSQU5TRkVSUyAgICAgIDB4MDAwMDA4MDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDkgcmVnaXN0ZXJzIHN0YXJ0aW5nIHRyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgICovCi0jZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF8xMFRSQU5TRkVSUyAgICAgMHgwMDAwMDkwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gMTAgcmVnaXN0ZXJzIHN0YXJ0aW5nIHRyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgKi8KLSNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzExVFJBTlNGRVJTICAgICAweDAwMDAwQTAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byAxMSByZWdpc3RlcnMgc3RhcnRpbmcgdHJvbSBUSU14X0NSMSArIFRJTXhfRENSLkRCQSAqLwotI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfMTJUUkFOU0ZFUlMgICAgIDB4MDAwMDBCMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDEyIHJlZ2lzdGVycyBzdGFydGluZyB0cm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICovCi0jZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF8xM1RSQU5TRkVSUyAgICAgMHgwMDAwMEMwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gMTMgcmVnaXN0ZXJzIHN0YXJ0aW5nIHRyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgKi8KLSNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzE0VFJBTlNGRVJTICAgICAweDAwMDAwRDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byAxNCByZWdpc3RlcnMgc3RhcnRpbmcgdHJvbSBUSU14X0NSMSArIFRJTXhfRENSLkRCQSAqLwotI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfMTVUUkFOU0ZFUlMgICAgIDB4MDAwMDBFMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDE1IHJlZ2lzdGVycyBzdGFydGluZyB0cm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICovCi0jZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF8xNlRSQU5TRkVSUyAgICAgMHgwMDAwMEYwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gMTYgcmVnaXN0ZXJzIHN0YXJ0aW5nIHRyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgKi8KLSNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzE3VFJBTlNGRVJTICAgICAweDAwMDAxMDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byAxNyByZWdpc3RlcnMgc3RhcnRpbmcgdHJvbSBUSU14X0NSMSArIFRJTXhfRENSLkRCQSAqLwotI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfMThUUkFOU0ZFUlMgICAgIDB4MDAwMDExMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDE4IHJlZ2lzdGVycyBzdGFydGluZyB0cm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICovCisjZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF8xVFJBTlNGRVIgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gMSByZWdpc3RlciBzdGFydGluZyBmcm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICAgKi8KKyNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzJUUkFOU0ZFUlMgICAgICAweDAwMDAwMTAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byAyIHJlZ2lzdGVycyBzdGFydGluZyBmcm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICAqLworI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfM1RSQU5TRkVSUyAgICAgIDB4MDAwMDAyMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDMgcmVnaXN0ZXJzIHN0YXJ0aW5nIGZyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgICovCisjZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF80VFJBTlNGRVJTICAgICAgMHgwMDAwMDMwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gNCByZWdpc3RlcnMgc3RhcnRpbmcgZnJvbSBUSU14X0NSMSArIFRJTXhfRENSLkRCQSAgKi8KKyNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzVUUkFOU0ZFUlMgICAgICAweDAwMDAwNDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byA1IHJlZ2lzdGVycyBzdGFydGluZyBmcm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICAqLworI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfNlRSQU5TRkVSUyAgICAgIDB4MDAwMDA1MDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDYgcmVnaXN0ZXJzIHN0YXJ0aW5nIGZyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgICovCisjZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF83VFJBTlNGRVJTICAgICAgMHgwMDAwMDYwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gNyByZWdpc3RlcnMgc3RhcnRpbmcgZnJvbSBUSU14X0NSMSArIFRJTXhfRENSLkRCQSAgKi8KKyNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzhUUkFOU0ZFUlMgICAgICAweDAwMDAwNzAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byA4IHJlZ2lzdGVycyBzdGFydGluZyBmcm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICAqLworI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfOVRSQU5TRkVSUyAgICAgIDB4MDAwMDA4MDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDkgcmVnaXN0ZXJzIHN0YXJ0aW5nIGZyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgICovCisjZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF8xMFRSQU5TRkVSUyAgICAgMHgwMDAwMDkwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gMTAgcmVnaXN0ZXJzIHN0YXJ0aW5nIGZyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgKi8KKyNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzExVFJBTlNGRVJTICAgICAweDAwMDAwQTAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byAxMSByZWdpc3RlcnMgc3RhcnRpbmcgZnJvbSBUSU14X0NSMSArIFRJTXhfRENSLkRCQSAqLworI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfMTJUUkFOU0ZFUlMgICAgIDB4MDAwMDBCMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDEyIHJlZ2lzdGVycyBzdGFydGluZyBmcm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICovCisjZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF8xM1RSQU5TRkVSUyAgICAgMHgwMDAwMEMwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gMTMgcmVnaXN0ZXJzIHN0YXJ0aW5nIGZyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgKi8KKyNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzE0VFJBTlNGRVJTICAgICAweDAwMDAwRDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byAxNCByZWdpc3RlcnMgc3RhcnRpbmcgZnJvbSBUSU14X0NSMSArIFRJTXhfRENSLkRCQSAqLworI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfMTVUUkFOU0ZFUlMgICAgIDB4MDAwMDBFMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDE1IHJlZ2lzdGVycyBzdGFydGluZyBmcm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICovCisjZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF8xNlRSQU5TRkVSUyAgICAgMHgwMDAwMEYwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gMTYgcmVnaXN0ZXJzIHN0YXJ0aW5nIGZyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgKi8KKyNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzE3VFJBTlNGRVJTICAgICAweDAwMDAxMDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byAxNyByZWdpc3RlcnMgc3RhcnRpbmcgZnJvbSBUSU14X0NSMSArIFRJTXhfRENSLkRCQSAqLworI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfMThUUkFOU0ZFUlMgICAgIDB4MDAwMDExMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDE4IHJlZ2lzdGVycyBzdGFydGluZyBmcm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjA2MCw3ICsyMDYwLDcgQEAKICAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzQpID8gKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbM10gOlwKICAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzUpID8gKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbNF0gOlwKICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzVdKQotICAgIAorCiAjZGVmaW5lIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChfX0hBTkRMRV9fLCBfX0NIQU5ORUxfXywgX19DSEFOTkVMX1NUQVRFX18pIFwKICAgKCgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzEpID8gKChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzBdID0gKF9fQ0hBTk5FTF9TVEFURV9fKSkgOlwKICAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpID8gKChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzFdID0gKF9fQ0hBTk5FTF9TVEFURV9fKSkgOlwKQEAgLTIwODMsNyArMjA4Myw3IEBACiAgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8yKSA/IChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVsxXSA6XAogICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMykgPyAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMl0gOlwKICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVszXSkKLSAgICAKKwogI2RlZmluZSBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChfX0hBTkRMRV9fLCBfX0NIQU5ORUxfXywgX19DSEFOTkVMX1NUQVRFX18pIFwKICAgKCgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzEpID8gKChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVswXSA9IChfX0NIQU5ORUxfU1RBVEVfXykpIDpcCiAgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8yKSA/ICgoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMV0gPSAoX19DSEFOTkVMX1NUQVRFX18pKSA6XApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDV4eF9oYWxfdHNjLmggYi9JbmMvc3RtMzJsNXh4X2hhbF90c2MuaAppbmRleCAwNGFmY2IwLi5kYWZkYzc4IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNXh4X2hhbF90c2MuaAorKysgYi9JbmMvc3RtMzJsNXh4X2hhbF90c2MuaApAQCAtNjM0LDYgKzYzNCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVkFMVUVfXykgPT0gVFNDX1BHX1BSRVNDX0RJVjY0KSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA9PSBUU0NfUEdfUFJFU0NfRElWMTI4KSkKIAorI2RlZmluZSBJU19UU0NfUEdfUFJFU0NfVlNfQ1RQTChfX1BHUFNDX18sIF9fQ1RQTF9fKSAgICAoKCgoX19QR1BTQ19fKSA9PSBUU0NfUEdfUFJFU0NfRElWMSkgJiYgKChfX0NUUExfXykgPiBUU0NfQ1RQTF8yQ1lDTEVTKSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19QR1BTQ19fKSA9PSBUU0NfUEdfUFJFU0NfRElWMikgJiYgKChfX0NUUExfXykgPiBUU0NfQ1RQTF8xQ1lDTEUpKSAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19QR1BTQ19fKSA+IFRTQ19QR19QUkVTQ19ESVYyKSAgJiYgKCgoX19DVFBMX18pID09IFRTQ19DVFBMXzFDWUNMRSkgfHwgKChfX0NUUExfXykgPiBUU0NfQ1RQTF8xQ1lDTEUpKSkpCisKICNkZWZpbmUgSVNfVFNDX01DVihfX1ZBTFVFX18pICAgICAgICAgICAoKChfX1ZBTFVFX18pID09IFRTQ19NQ1ZfMjU1KSAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVkFMVUVfXykgPT0gVFNDX01DVl81MTEpICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA9PSBUU0NfTUNWXzEwMjMpIHx8IFwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw1eHhfaGFsX3VhcnQuaCBiL0luYy9zdG0zMmw1eHhfaGFsX3VhcnQuaAppbmRleCBmNjkwNmU0Li5hYWMxNzRhIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNXh4X2hhbF91YXJ0LmgKKysrIGIvSW5jL3N0bTMybDV4eF9oYWxfdWFydC5oCkBAIC0xNDYsNyArMTQ2LDcgQEAKICAgKiAgICAgICAgICAgICAxMSA6IEVycm9yCiAgICogICAgICAgICAgYjUgICAgIFBlcmlwaGVyYWwgaW5pdGlhbGl6YXRpb24gc3RhdHVzCiAgICogICAgICAgICAgICAgMCAgOiBSZXNldCAoUGVyaXBoZXJhbCBub3QgaW5pdGlhbGl6ZWQpCi0gICogICAgICAgICAgICAgMSAgOiBJbml0IGRvbmUgKFBlcmlwaGVyYWwgbm90IGluaXRpYWxpemVkLiBIQUwgVUFSVCBJbml0IGZ1bmN0aW9uIGFscmVhZHkgY2FsbGVkKQorICAqICAgICAgICAgICAgIDEgIDogSW5pdCBkb25lIChQZXJpcGhlcmFsIGluaXRpYWxpemVkLiBIQUwgVUFSVCBJbml0IGZ1bmN0aW9uIGFscmVhZHkgY2FsbGVkKQogICAqICAgICAgICAgIGI0LWIzICAobm90IHVzZWQpCiAgICogICAgICAgICAgICAgeHggOiBTaG91bGQgYmUgc2V0IHRvIDAwCiAgICogICAgICAgICAgYjIgICAgIEludHJpbnNpYyBwcm9jZXNzIHN0YXRlCkBAIC0xNjMsNyArMTYzLDcgQEAKICAgKiAgICAgICAgICAgICB4eCA6IFNob3VsZCBiZSBzZXQgdG8gMDAKICAgKiAgICAgICAgICBiNSAgICAgUGVyaXBoZXJhbCBpbml0aWFsaXphdGlvbiBzdGF0dXMKICAgKiAgICAgICAgICAgICAwICA6IFJlc2V0IChQZXJpcGhlcmFsIG5vdCBpbml0aWFsaXplZCkKLSAgKiAgICAgICAgICAgICAxICA6IEluaXQgZG9uZSAoUGVyaXBoZXJhbCBub3QgaW5pdGlhbGl6ZWQpCisgICogICAgICAgICAgICAgMSAgOiBJbml0IGRvbmUgKFBlcmlwaGVyYWwgaW5pdGlhbGl6ZWQpCiAgICogICAgICAgICAgYjQtYjIgIChub3QgdXNlZCkKICAgKiAgICAgICAgICAgIHh4eCA6IFNob3VsZCBiZSBzZXQgdG8gMDAwCiAgICogICAgICAgICAgYjEgICAgIFJ4IHN0YXRlCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNXh4X2xsX2FkYy5oIGIvSW5jL3N0bTMybDV4eF9sbF9hZGMuaAppbmRleCAyY2JiODljLi41Y2ZjZjgwIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNXh4X2xsX2FkYy5oCisrKyBiL0luYy9zdG0zMmw1eHhfbGxfYWRjLmgKQEAgLTEyODUsNyArMTI4NSw3IEBACiAvKiBEZWxheSBzZXQgdG8gbWF4aW11bSB2YWx1ZSAocmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCwgICAgICAgICAgICAgICAgICAgICAqLwogLyogcGFyYW1ldGVyICJ0QURDVlJFR19TVFVQIikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIFVuaXQ6IHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIExMX0FEQ19ERUxBWV9JTlRFUk5BTF9SRUdVTF9TVEFCX1VTICggMTBVTCkgIC8qITwgRGVsYXkgZm9yIEFEQyBzdGFiaWxpemF0aW9uIHRpbWUgKEFEQyB2b2x0YWdlIHJlZ3VsYXRvciBzdGFydC11cCB0aW1lKSAqLworI2RlZmluZSBMTF9BRENfREVMQVlfSU5URVJOQUxfUkVHVUxfU1RBQl9VUyAoIDIwVUwpICAvKiE8IERlbGF5IGZvciBBREMgc3RhYmlsaXphdGlvbiB0aW1lIChBREMgdm9sdGFnZSByZWd1bGF0b3Igc3RhcnQtdXAgdGltZSkgKi8KIAogLyogRGVsYXkgZm9yIGludGVybmFsIHZvbHRhZ2UgcmVmZXJlbmNlIHN0YWJpbGl6YXRpb24gdGltZS4gICAgICAgICAgICAgICAgICAgKi8KIC8qIERlbGF5IHNldCB0byBtYXhpbXVtIHZhbHVlIChyZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0LCAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNXh4X2xsX2J1cy5oIGIvSW5jL3N0bTMybDV4eF9sbF9idXMuaAppbmRleCBlNzAyNjQyLi43OWNmZTUzIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNXh4X2xsX2J1cy5oCisrKyBiL0luYy9zdG0zMmw1eHhfbGxfYnVzLmgKQEAgLTIxOSw3ICsyMTksNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfVFNDCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9HVFpDCiAgICogQHJldHZhbCBOb25lCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQUhCMV9HUlAxX0VuYWJsZUNsb2NrKHVpbnQzMl90IFBlcmlwaHMpCiB7CiAgIF9fSU8gdWludDMyX3QgdG1wcmVnOwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9UU0MKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0dUWkMKICAgKiBAcmV0dmFsIFN0YXRlIG9mIFBlcmlwaHMgKDEgb3IgMCkuCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FIQjFfR1JQMV9Jc0VuYWJsZWRDbG9jayh1aW50MzJfdCBQZXJpcGhzKQogewogICByZXR1cm4gKChSRUFEX0JJVChSQ0MtPkFIQjFFTlIsIFBlcmlwaHMpID09IFBlcmlwaHMpID8gMVVMIDogMFVMKTsKQEAgLTI3Miw3ICsyNzIsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfVFNDCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9HVFpDCiAgICogQHJldHZhbCBOb25lCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQUhCMV9HUlAxX0Rpc2FibGVDbG9jayh1aW50MzJfdCBQZXJpcGhzKQogewogICBDTEVBUl9CSVQoUkNDLT5BSEIxRU5SLCBQZXJpcGhzKTsKQEAgLTI5NSw3ICsyOTUsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfQ1JDCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9UU0MKICAgKiBAcmV0dmFsIE5vbmUKLSovCisgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BSEIxX0dSUDFfRm9yY2VSZXNldCh1aW50MzJfdCBQZXJpcGhzKQogewogICBTRVRfQklUKFJDQy0+QUhCMVJTVFIsIFBlcmlwaHMpOwpAQCAtMzE4LDcgKzMxOCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9DUkMKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX1RTQwogICAqIEByZXR2YWwgTm9uZQotKi8KKyAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FIQjFfR1JQMV9SZWxlYXNlUmVzZXQodWludDMyX3QgUGVyaXBocykKIHsKICAgQ0xFQVJfQklUKFJDQy0+QUhCMVJTVFIsIFBlcmlwaHMpOwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9HVFpDCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9JQ0FDSEUKICAgKiBAcmV0dmFsIE5vbmUKLSovCisgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BSEIxX0dSUDFfRW5hYmxlQ2xvY2tTdG9wU2xlZXAodWludDMyX3QgUGVyaXBocykKIHsKICAgX19JTyB1aW50MzJfdCB0bXByZWc7CkBAIC0zODAsNyArMzgwLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0dUWkMKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0lDQUNIRQogICAqIEByZXR2YWwgTm9uZQotKi8KKyAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FIQjFfR1JQMV9EaXNhYmxlQ2xvY2tTdG9wU2xlZXAodWludDMyX3QgUGVyaXBocykKIHsKICAgQ0xFQVJfQklUKFJDQy0+QUhCMVNNRU5SLCBQZXJpcGhzKTsKQEAgLTQzMSw3ICs0MzEsNyBAQAogICAqCiAgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQUhCMl9HUlAxX0VuYWJsZUNsb2NrKHVpbnQzMl90IFBlcmlwaHMpCiB7CiAgIF9fSU8gdWludDMyX3QgdG1wcmVnOwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAgICoKICAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIFN0YXRlIG9mIFBlcmlwaHMgKDEgb3IgMCkuCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FIQjJfR1JQMV9Jc0VuYWJsZWRDbG9jayh1aW50MzJfdCBQZXJpcGhzKQogewogICByZXR1cm4gKChSRUFEX0JJVChSQ0MtPkFIQjJFTlIsIFBlcmlwaHMpID09IFBlcmlwaHMpID8gMVVMIDogMFVMKTsKQEAgLTUyMCw3ICs1MjAsNyBAQAogICAqCiAgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQUhCMl9HUlAxX0Rpc2FibGVDbG9jayh1aW50MzJfdCBQZXJpcGhzKQogewogICBDTEVBUl9CSVQoUkNDLT5BSEIyRU5SLCBQZXJpcGhzKTsKQEAgLTU2Myw3ICs1NjMsNyBAQAogICAqCiAgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQUhCMl9HUlAxX0ZvcmNlUmVzZXQodWludDMyX3QgUGVyaXBocykKIHsKICAgU0VUX0JJVChSQ0MtPkFIQjJSU1RSLCBQZXJpcGhzKTsKQEAgLTYwNiw3ICs2MDYsNyBAQAogICAqCiAgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQUhCMl9HUlAxX1JlbGVhc2VSZXNldCh1aW50MzJfdCBQZXJpcGhzKQogewogICBDTEVBUl9CSVQoUkNDLT5BSEIyUlNUUiwgUGVyaXBocyk7CkBAIC02NTEsNyArNjUxLDcgQEAKICAgKgogICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgogICAqIEByZXR2YWwgTm9uZQotKi8KKyAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FIQjJfR1JQMV9FbmFibGVDbG9ja1N0b3BTbGVlcCh1aW50MzJfdCBQZXJpcGhzKQogewogICBfX0lPIHVpbnQzMl90IHRtcHJlZzsKQEAgLTcwMCw3ICs3MDAsNyBAQAogICAqCiAgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQUhCMl9HUlAxX0Rpc2FibGVDbG9ja1N0b3BTbGVlcCh1aW50MzJfdCBQZXJpcGhzKQogewogICBDTEVBUl9CSVQoUkNDLT5BSEIyU01FTlIsIFBlcmlwaHMpOwpAQCAtNzIzLDcgKzcyMyw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9GTUMKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09TUEkxCiAgICogQHJldHZhbCBOb25lCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQUhCM19HUlAxX0VuYWJsZUNsb2NrKHVpbnQzMl90IFBlcmlwaHMpCiB7CiAgIF9fSU8gdWludDMyX3QgdG1wcmVnOwpAQCAtNzQxLDcgKzc0MSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9GTUMKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09TUEkxCiAgICogQHJldHZhbCBTdGF0ZSBvZiBQZXJpcGhzICgxIG9yIDApLgotKi8KKyAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BSEIzX0dSUDFfSXNFbmFibGVkQ2xvY2sodWludDMyX3QgUGVyaXBocykKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoUkNDLT5BSEIzRU5SLCBQZXJpcGhzKSA9PSBQZXJpcGhzKSA/IDFVTCA6IDBVTCk7CkBAIC03NTYsNyArNzU2LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0ZNQwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1NQSTEKICAgKiBAcmV0dmFsIE5vbmUKLSovCisgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BSEIzX0dSUDFfRGlzYWJsZUNsb2NrKHVpbnQzMl90IFBlcmlwaHMpCiB7CiAgIENMRUFSX0JJVChSQ0MtPkFIQjNFTlIsIFBlcmlwaHMpOwpAQCAtNzcxLDcgKzc3MSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9GTUMKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09TUEkxCiAgICogQHJldHZhbCBOb25lCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQUhCM19HUlAxX0ZvcmNlUmVzZXQodWludDMyX3QgUGVyaXBocykKIHsKICAgU0VUX0JJVChSQ0MtPkFIQjNSU1RSLCBQZXJpcGhzKTsKQEAgLTc4Niw3ICs3ODYsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfRk1DCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PU1BJMQogICAqIEByZXR2YWwgTm9uZQotKi8KKyAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FIQjNfR1JQMV9SZWxlYXNlUmVzZXQodWludDMyX3QgUGVyaXBocykKIHsKICAgQ0xFQVJfQklUKFJDQy0+QUhCM1JTVFIsIFBlcmlwaHMpOwpAQCAtODAxLDcgKzgwMSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9GTUMKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09TUEkxCiAgICogQHJldHZhbCBOb25lCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQUhCM19HUlAxX0VuYWJsZUNsb2NrU3RvcFNsZWVwKHVpbnQzMl90IFBlcmlwaHMpCiB7CiAgIF9fSU8gdWludDMyX3QgdG1wcmVnOwpAQCAtODIwLDcgKzgyMCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9GTUMKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09TUEkxCiAgICogQHJldHZhbCBOb25lCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQUhCM19HUlAxX0Rpc2FibGVDbG9ja1N0b3BTbGVlcCh1aW50MzJfdCBQZXJpcGhzKQogewogICBDTEVBUl9CSVQoUkNDLT5BSEIzU01FTlIsIFBlcmlwaHMpOwpAQCAtODgzLDcgKzg4Myw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9PUEFNUAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfTFBUSU0xCiAgICogQHJldHZhbCBOb25lCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQVBCMV9HUlAxX0VuYWJsZUNsb2NrKHVpbnQzMl90IFBlcmlwaHMpCiB7CiAgIF9fSU8gdWludDMyX3QgdG1wcmVnOwpAQCAtOTEyLDcgKzkxMiw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9VU0IKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX1VDUEQxCiAgICogQHJldHZhbCBOb25lCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQVBCMV9HUlAyX0VuYWJsZUNsb2NrKHVpbnQzMl90IFBlcmlwaHMpCiB7CiAgIF9fSU8gdWludDMyX3QgdG1wcmVnOwpAQCAtOTcwLDcgKzk3MCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9PUEFNUAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfTFBUSU0xCiAgICogQHJldHZhbCBTdGF0ZSBvZiBQZXJpcGhzICgxIG9yIDApLgotKi8KKyAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BUEIxX0dSUDFfSXNFbmFibGVkQ2xvY2sodWludDMyX3QgUGVyaXBocykKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoUkNDLT5BUEIxRU5SMSwgUGVyaXBocykgPT0gUGVyaXBocykgPyAxVUwgOiAwVUwpOwpAQCAtOTk0LDcgKzk5NCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9VU0IKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX1VDUEQxCiAgICogQHJldHZhbCBTdGF0ZSBvZiBQZXJpcGhzICgxIG9yIDApLgotKi8KKyAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BUEIxX0dSUDJfSXNFbmFibGVkQ2xvY2sodWludDMyX3QgUGVyaXBocykKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoUkNDLT5BUEIxRU5SMiwgUGVyaXBocykgPT0gUGVyaXBocykgPyAxVUwgOiAwVUwpOwpAQCAtMTA0OSw3ICsxMDQ5LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX09QQU1QCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9MUFRJTTEKICAgKiBAcmV0dmFsIE5vbmUKLSovCisgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BUEIxX0dSUDFfRGlzYWJsZUNsb2NrKHVpbnQzMl90IFBlcmlwaHMpCiB7CiAgIENMRUFSX0JJVChSQ0MtPkFQQjFFTlIxLCBQZXJpcGhzKTsKQEAgLTEwNzQsNyArMTA3NCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9VU0IKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX1VDUEQxCiAgICogQHJldHZhbCBOb25lCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQVBCMV9HUlAyX0Rpc2FibGVDbG9jayh1aW50MzJfdCBQZXJpcGhzKQogewogICBDTEVBUl9CSVQoUkNDLT5BUEIxRU5SMiwgUGVyaXBocyk7CkBAIC0xMTI3LDcgKzExMjcsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfT1BBTVAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX0xQVElNMQogICAqIEByZXR2YWwgTm9uZQotKi8KKyAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FQQjFfR1JQMV9Gb3JjZVJlc2V0KHVpbnQzMl90IFBlcmlwaHMpCiB7CiAgIFNFVF9CSVQoUkNDLT5BUEIxUlNUUjEsIFBlcmlwaHMpOwpAQCAtMTE1Miw3ICsxMTUyLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX1VTQgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfVUNQRDEKICAgKiBAcmV0dmFsIE5vbmUKLSovCisgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BUEIxX0dSUDJfRm9yY2VSZXNldCh1aW50MzJfdCBQZXJpcGhzKQogewogICBTRVRfQklUKFJDQy0+QVBCMVJTVFIyLCBQZXJpcGhzKTsKQEAgLTEyMDUsNyArMTIwNSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9PUEFNUAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfTFBUSU0xCiAgICogQHJldHZhbCBOb25lCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQVBCMV9HUlAxX1JlbGVhc2VSZXNldCh1aW50MzJfdCBQZXJpcGhzKQogewogICBDTEVBUl9CSVQoUkNDLT5BUEIxUlNUUjEsIFBlcmlwaHMpOwpAQCAtMTIzMCw3ICsxMjMwLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX1VTQgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfVUNQRDEKICAgKiBAcmV0dmFsIE5vbmUKLSovCisgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BUEIxX0dSUDJfUmVsZWFzZVJlc2V0KHVpbnQzMl90IFBlcmlwaHMpCiB7CiAgIENMRUFSX0JJVChSQ0MtPkFQQjFSU1RSMiwgUGVyaXBocyk7CkBAIC0xMjg1LDcgKzEyODUsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfT1BBTVAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX0xQVElNMQogICAqIEByZXR2YWwgTm9uZQotKi8KKyAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FQQjFfR1JQMV9FbmFibGVDbG9ja1N0b3BTbGVlcCh1aW50MzJfdCBQZXJpcGhzKQogewogICBfX0lPIHVpbnQzMl90IHRtcHJlZzsKQEAgLTEzMTQsNyArMTMxNCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9VU0IKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX1VDUEQxCiAgICogQHJldHZhbCBOb25lCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQVBCMV9HUlAyX0VuYWJsZUNsb2NrU3RvcFNsZWVwKHVpbnQzMl90IFBlcmlwaHMpCiB7CiAgIF9fSU8gdWludDMyX3QgdG1wcmVnOwpAQCAtMTM3Myw3ICsxMzczLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX09QQU1QCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9MUFRJTTEKICAgKiBAcmV0dmFsIE5vbmUKLSovCisgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BUEIxX0dSUDFfRGlzYWJsZUNsb2NrU3RvcFNsZWVwKHVpbnQzMl90IFBlcmlwaHMpCiB7CiAgIENMRUFSX0JJVChSQ0MtPkFQQjFTTUVOUjEsIFBlcmlwaHMpOwpAQCAtMTM5OCw3ICsxMzk4LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX1VTQgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfVUNQRDEKICAgKiBAcmV0dmFsIE5vbmUKLSovCisgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BUEIxX0dSUDJfRGlzYWJsZUNsb2NrU3RvcFNsZWVwKHVpbnQzMl90IFBlcmlwaHMpCiB7CiAgIENMRUFSX0JJVChSQ0MtPkFQQjFTTUVOUjIsIFBlcmlwaHMpOwpAQCAtMTQzOSw3ICsxNDM5LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX0RGU0RNMQogICAqIEByZXR2YWwgTm9uZQotKi8KKyAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FQQjJfR1JQMV9FbmFibGVDbG9jayh1aW50MzJfdCBQZXJpcGhzKQogewogICBfX0lPIHVpbnQzMl90IHRtcHJlZzsKQEAgLTE0NzUsNyArMTQ3NSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9ERlNETTEKICAgKiBAcmV0dmFsIFN0YXRlIG9mIFBlcmlwaHMgKDEgb3IgMCkuCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FQQjJfR1JQMV9Jc0VuYWJsZWRDbG9jayh1aW50MzJfdCBQZXJpcGhzKQogewogICByZXR1cm4gKChSRUFEX0JJVChSQ0MtPkFQQjJFTlIsIFBlcmlwaHMpID09IFBlcmlwaHMpID8gMVVMIDogMFVMKTsKQEAgLTE1MDgsNyArMTUwOCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9ERlNETTEKICAgKiBAcmV0dmFsIE5vbmUKLSovCisgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BUEIyX0dSUDFfRGlzYWJsZUNsb2NrKHVpbnQzMl90IFBlcmlwaHMpCiB7CiAgIENMRUFSX0JJVChSQ0MtPkFQQjJFTlIsIFBlcmlwaHMpOwpAQCAtMTU0MSw3ICsxNTQxLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX0RGU0RNMQogICAqIEByZXR2YWwgTm9uZQotKi8KKyAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FQQjJfR1JQMV9Gb3JjZVJlc2V0KHVpbnQzMl90IFBlcmlwaHMpCiB7CiAgIFNFVF9CSVQoUkNDLT5BUEIyUlNUUiwgUGVyaXBocyk7CkBAIC0xNTc0LDcgKzE1NzQsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfREZTRE0xCiAgICogQHJldHZhbCBOb25lCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQVBCMl9HUlAxX1JlbGVhc2VSZXNldCh1aW50MzJfdCBQZXJpcGhzKQogewogICBDTEVBUl9CSVQoUkNDLT5BUEIyUlNUUiwgUGVyaXBocyk7CkBAIC0xNjA3LDcgKzE2MDcsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfREZTRE0xCiAgICogQHJldHZhbCBOb25lCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQVBCMl9HUlAxX0VuYWJsZUNsb2NrU3RvcFNsZWVwKHVpbnQzMl90IFBlcmlwaHMpCiB7CiAgIF9fSU8gdWludDMyX3QgdG1wcmVnOwpAQCAtMTY0NCw3ICsxNjQ0LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX0RGU0RNMQogICAqIEByZXR2YWwgTm9uZQotKi8KKyAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FQQjJfR1JQMV9EaXNhYmxlQ2xvY2tTdG9wU2xlZXAodWludDMyX3QgUGVyaXBocykKIHsKICAgQ0xFQVJfQklUKFJDQy0+QVBCMlNNRU5SLCBQZXJpcGhzKTsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw1eHhfbGxfY29ydGV4LmggYi9JbmMvc3RtMzJsNXh4X2xsX2NvcnRleC5oCmluZGV4IGRmY2Y2MjMuLjJlZWVhYzkgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw1eHhfbGxfY29ydGV4LmgKKysrIGIvSW5jL3N0bTMybDV4eF9sbF9jb3J0ZXguaApAQCAtODMsNiArODMsMTEyIEBACiAgICogQH0KICAgKi8KIAorI2lmIChfX01QVV9QUkVTRU5UID09IDEpCisvKiogQGRlZmdyb3VwIENPUlRFWF9MTF9NUFVfSEZOTUlfUFJJVkRFRl9Db250cm9sIE1QVSBIRk5NSSBhbmQgUFJJVklMRUdFRCBBY2Nlc3MgY29udHJvbAorICAqIEB7CisgICovCisjZGVmaW5lIExMX01QVV9DVFJMX0hGTk1JX1BSSVZERUZfTk9ORSAgICAgICAgICAwVQorI2RlZmluZSBMTF9NUFVfQ1RSTF9IQVJERkFVTFRfTk1JICAgICAgICAgICAgICAgMlUKKyNkZWZpbmUgTExfTVBVX0NUUkxfUFJJVklMRUdFRF9ERUZBVUxUICAgICAgICAgIDRVCisjZGVmaW5lIExMX01QVV9DVFJMX0hGTk1JX1BSSVZERUYgICAgICAgICAgICAgICA2VQorLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBDT1JURVhfTExfTVBVX0F0dHJpYnV0ZXMgTVBVIEF0dHJpYnV0ZXMKKyAgKiBAeworICAqLworI2RlZmluZSAgTExfTVBVX0RFVklDRV9uR25SbkUgICAgICAgICAgMHgwVSAgLyogRGV2aWNlLCBub0dhdGhlciwgbm9SZW9yZGVyLCBub0Vhcmx5IGFja25vd2xlZGdlLiAqLworI2RlZmluZSAgTExfTVBVX0RFVklDRV9uR25SRSAgICAgICAgICAgMHg0VSAgLyogRGV2aWNlLCBub0dhdGhlciwgbm9SZW9yZGVyLCBFYXJseSBhY2tub3dsZWRnZS4gICAqLworI2RlZmluZSAgTExfTVBVX0RFVklDRV9uR1JFICAgICAgICAgICAgMHg4VSAgLyogRGV2aWNlLCBub0dhdGhlciwgUmVvcmRlciwgRWFybHkgYWNrbm93bGVkZ2UuICAgICAqLworI2RlZmluZSAgTExfTVBVX0RFVklDRV9HUkUgICAgICAgICAgICAgMHhDVSAgLyogRGV2aWNlLCBHYXRoZXIsIFJlb3JkZXIsIEVhcmx5IGFja25vd2xlZGdlLiAgICAgICAqLworCisjZGVmaW5lICBMTF9NUFVfV1JJVEVfVEhST1VHSCAgICAgICAgICAweDBVICAvKiBOb3JtYWwgbWVtb3J5LCB3cml0ZS10aHJvdWdoLiAqLworI2RlZmluZSAgTExfTVBVX05PVF9DQUNIRUFCTEUgICAgICAgICAgMHg0VSAgLyogTm9ybWFsIG1lbW9yeSwgbm9uLWNhY2hlYWJsZS4gKi8KKyNkZWZpbmUgIExMX01QVV9XUklURV9CQUNLICAgICAgICAgICAgIDB4NFUgIC8qIE5vcm1hbCBtZW1vcnksIHdyaXRlLWJhY2suICAgICovCisKKyNkZWZpbmUgIExMX01QVV9UUkFOU0lFTlQgICAgICAgICAgICAgIDB4MFUgIC8qIE5vcm1hbCBtZW1vcnksIHRyYW5zaWVudC4gICAgICovCisjZGVmaW5lICBMTF9NUFVfTk9OX1RSQU5TSUVOVCAgICAgICAgICAweDhVICAvKiBOb3JtYWwgbWVtb3J5LCBub24tdHJhbnNpZW50LiAqLworCisjZGVmaW5lICBMTF9NUFVfTk9fQUxMT0NBVEUgICAgICAgICAgICAweDBVICAvKiBOb3JtYWwgbWVtb3J5LCBubyBhbGxvY2F0ZS4gICAgICAgICAqLworI2RlZmluZSAgTExfTVBVX1dfQUxMT0NBVEUgICAgICAgICAgICAgMHgxVSAgLyogTm9ybWFsIG1lbW9yeSwgd3JpdGUgYWxsb2NhdGUuICAgICAgKi8KKyNkZWZpbmUgIExMX01QVV9SX0FMTE9DQVRFICAgICAgICAgICAgIDB4MlUgIC8qIE5vcm1hbCBtZW1vcnksIHJlYWQgYWxsb2NhdGUuICAgICAgICovCisjZGVmaW5lICBMTF9NUFVfUldfQUxMT0NBVEUgICAgICAgICAgICAweDNVICAvKiBOb3JtYWwgbWVtb3J5LCByZWFkL3dyaXRlIGFsbG9jYXRlLiAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBDT1JURVhfTExfTVBVX1JlZ2lvbl9FbmFibGUgTVBVIFJlZ2lvbiBFbmFibGUKKyAgKiBAeworICAqLworI2RlZmluZSBMTF9NUFVfUkVHSU9OX0VOQUJMRSAgICAgICAgICAgICAgIDFVCisjZGVmaW5lIExMX01QVV9SRUdJT05fRElTQUJMRSAgICAgICAgICAgICAgMFUKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgQ09SVEVYX0xMX01QVV9JbnN0cnVjdGlvbl9BY2Nlc3MgTVBVIEluc3RydWN0aW9uIEFjY2VzcworICAqIEB7CisgICovCisjZGVmaW5lIExMX01QVV9JTlNUUlVDVElPTl9BQ0NFU1NfRU5BQkxFICAgKDBVIDw8IE1QVV9SQkFSX1hOX1BvcykKKyNkZWZpbmUgTExfTVBVX0lOU1RSVUNUSU9OX0FDQ0VTU19ESVNBQkxFICAoMVUgPDwgTVBVX1JCQVJfWE5fUG9zKQorLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBDT1JURVhfTExfTVBVX0FjY2Vzc19TaGFyZWFibGUgTVBVIEluc3RydWN0aW9uIEFjY2VzcyBTaGFyZWFibGUKKyAgKiBAeworICAqLworI2RlZmluZSBMTF9NUFVfQUNDRVNTX05PVF9TSEFSRUFCTEUgICAgICAgICgwVSA8PCBNUFVfUkJBUl9TSF9Qb3MpCisjZGVmaW5lIExMX01QVV9BQ0NFU1NfT1VURVJfU0hBUkVBQkxFICAgICAgKDFVIDw8IE1QVV9SQkFSX1NIX1BvcykKKyNkZWZpbmUgTExfTVBVX0FDQ0VTU19JTk5FUl9TSEFSRUFCTEUgICAgICAoM1UgPDwgTVBVX1JCQVJfU0hfUG9zKQorLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBDT1JURVhfTExfTVBVX1JlZ2lvbl9QZXJtaXNzaW9uX0F0dHJpYnV0ZXMgTVBVIFJlZ2lvbiBQZXJtaXNzaW9uIEF0dHJpYnV0ZXMKKyAgKiBAeworICAqLworI2RlZmluZSBMTF9NUFVfUkVHSU9OX1BSSVZfUlcgICAgICAgICAgICAgICgwVSA8PCBNUFVfUkJBUl9BUF9Qb3MpCisjZGVmaW5lIExMX01QVV9SRUdJT05fQUxMX1JXICAgICAgICAgICAgICAgKDFVIDw8IE1QVV9SQkFSX0FQX1BvcykKKyNkZWZpbmUgTExfTVBVX1JFR0lPTl9QUklWX1JPICAgICAgICAgICAgICAoMlUgPDwgTVBVX1JCQVJfQVBfUG9zKQorI2RlZmluZSBMTF9NUFVfUkVHSU9OX0FMTF9STyAgICAgICAgICAgICAgICgzVSA8PCBNUFVfUkJBUl9BUF9Qb3MpCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIENPUlRFWF9MTF9NUFVfUmVnaW9uX051bWJlciBNUFUgUmVnaW9uIE51bWJlcgorICAqIEB7CisgICovCisjZGVmaW5lIExMX01QVV9SRUdJT05fTlVNQkVSMCAgICAgICAgICAgICAgMFUKKyNkZWZpbmUgTExfTVBVX1JFR0lPTl9OVU1CRVIxICAgICAgICAgICAgICAxVQorI2RlZmluZSBMTF9NUFVfUkVHSU9OX05VTUJFUjIgICAgICAgICAgICAgIDJVCisjZGVmaW5lIExMX01QVV9SRUdJT05fTlVNQkVSMyAgICAgICAgICAgICAgM1UKKyNkZWZpbmUgTExfTVBVX1JFR0lPTl9OVU1CRVI0ICAgICAgICAgICAgICA0VQorI2RlZmluZSBMTF9NUFVfUkVHSU9OX05VTUJFUjUgICAgICAgICAgICAgIDVVCisjZGVmaW5lIExMX01QVV9SRUdJT05fTlVNQkVSNiAgICAgICAgICAgICAgNlUKKyNkZWZpbmUgTExfTVBVX1JFR0lPTl9OVU1CRVI3ICAgICAgICAgICAgICA3VQorLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBDT1JURVhfTExfTVBVX0F0dHJpYnV0ZXNfTnVtYmVyIE1QVSBNZW1vcnkgQXR0cmlidXRlcyBOdW1iZXIKKyAgKiBAeworICAqLworI2RlZmluZSBMTF9NUFVfQVRUUklCVVRFU19OVU1CRVIwICAgICAgICAgIDBVCisjZGVmaW5lIExMX01QVV9BVFRSSUJVVEVTX05VTUJFUjEgICAgICAgICAgMVUKKyNkZWZpbmUgTExfTVBVX0FUVFJJQlVURVNfTlVNQkVSMiAgICAgICAgICAyVQorI2RlZmluZSBMTF9NUFVfQVRUUklCVVRFU19OVU1CRVIzICAgICAgICAgIDNVCisjZGVmaW5lIExMX01QVV9BVFRSSUJVVEVTX05VTUJFUjQgICAgICAgICAgNFUKKyNkZWZpbmUgTExfTVBVX0FUVFJJQlVURVNfTlVNQkVSNSAgICAgICAgICA1VQorI2RlZmluZSBMTF9NUFVfQVRUUklCVVRFU19OVU1CRVI2ICAgICAgICAgIDZVCisjZGVmaW5lIExMX01QVV9BVFRSSUJVVEVTX05VTUJFUjcgICAgICAgICAgN1UKKy8qKgorICAqIEB9CisgICovCisKKyNlbmRpZiAvKiBfX01QVV9QUkVTRU5UICovCisKIC8qKgogICAqIEB9CiAgICovCkBAIC0zNjEsNiArNDY3LDc5NSBAQAogICAqIEB9CiAgICovCiAKKyNpZiBfX01QVV9QUkVTRU5UCisvKiogQGRlZmdyb3VwIENPUlRFWF9MTF9FRl9NUFUgTVBVCisgICogQHsKKyAgKi8KKworLyoqCisgICogQGJyaWVmICBFbmFibGUgTVBVIHdpdGggaW5wdXQgb3B0aW9ucworICAqIEBybXRvbGwgTVBVX0NUUkwgICAgIEVOQUJMRSAgICAgICAgTExfTVBVX0VuYWJsZVxuCisgICogQHJtdG9sbCBNUFVfQ1RSTCAgICAgSEZOTUlFTkEgICAgICBMTF9NUFVfRW5hYmxlXG4KKyAgKiBAcm10b2xsIE1QVV9DVFJMICAgICBQUklWREVGRU5BICAgIExMX01QVV9FbmFibGUKKyAgKiBAcGFyYW0gIE1QVV9Db250cm9sIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX0NUUkxfSEZOTUlfUFJJVkRFRl9OT05FCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX0NUUkxfSEFSREZBVUxUX05NSQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9DVFJMX1BSSVZJTEVHRURfREVGQVVMVAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9DVFJMX0hGTk1JX1BSSVZERUYKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX01QVV9FbmFibGUodWludDMyX3QgTVBVX0NvbnRyb2wpCit7CisgIC8qIEVuYWJsZSB0aGUgTVBVKi8KKyAgTVBVLT5DVFJMID0gTVBVX0NUUkxfRU5BQkxFX01zayB8IE1QVV9Db250cm9sOworCisgIC8qIEVuc3VyZSBNUFUgc2V0dGluZ3MgdGFrZSBlZmZlY3RzICovCisgIF9fRFNCKCk7CisKKyAgLyogU2VxdWVuY2UgaW5zdHJ1Y3Rpb24gZmV0Y2hlcyB1c2luZyB1cGRhdGUgc2V0dGluZ3MgKi8KKyAgX19JU0IoKTsKK30KKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIE1QVQorICAqIEBybXRvbGwgTVBVX0NUUkwgICAgIEVOQUJMRSAgICAgICAgTExfTVBVX0Rpc2FibGVcbgorICAqIEBybXRvbGwgTVBVX0NUUkwgICAgIEhGTk1JRU5BICAgICAgTExfTVBVX0Rpc2FibGVcbgorICAqIEBybXRvbGwgTVBVX0NUUkwgICAgIFBSSVZERUZFTkEgICAgTExfTVBVX0Rpc2FibGUKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX01QVV9EaXNhYmxlKHZvaWQpCit7CisgIC8qIE1ha2Ugc3VyZSBvdXRzdGFuZGluZyB0cmFuc2ZlcnMgYXJlIGRvbmUgKi8KKyAgX19ETUIoKTsKKyAgLyogRGlzYWJsZSBNUFUqLworICBXUklURV9SRUcoTVBVLT5DVFJMLCAwVSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2hlY2sgaWYgTVBVIGlzIGVuYWJsZWQgb3Igbm90CisgICogQHJtdG9sbCBNUFVfQ1RSTCAgICAgRU5BQkxFICAgICAgICBMTF9NUFVfSXNFbmFibGVkCisgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTVBVX0lzRW5hYmxlZCh2b2lkKQoreworICByZXR1cm4gKChSRUFEX0JJVChNUFUtPkNUUkwsIE1QVV9DVFJMX0VOQUJMRV9Nc2spID09IChNUFVfQ1RSTF9FTkFCTEVfTXNrKSkgPyAxVUwgOiAwVUwpOworfQorCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSBhIE1QVSByZWdpb24KKyAgKiBAcm10b2xsIE1QVV9STlIgICAgICBSRUdJT04gICAgICAgIExMX01QVV9FbmFibGVSZWdpb25cbgorICAqIEBybXRvbGwgTVBVX1JMQVIgICAgIEVOICAgICAgICAgICAgTExfTVBVX0VuYWJsZVJlZ2lvbgorICAqIEBwYXJhbSAgUmVnaW9uIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIwCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIxCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIyCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIzCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI0CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI1CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI2CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI3CisgICogQG5vdGUgICBjb3J0ZXgtTTMzIHN1cHBvcnQgOCBzZWN1cmUgYW5kIDggbm9uIHNlY3VyZSByZWdpb25zLgorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTVBVX0VuYWJsZVJlZ2lvbih1aW50MzJfdCBSZWdpb24pCit7CisgIC8qIFNldCBSZWdpb24gbnVtYmVyICovCisgIFdSSVRFX1JFRyhNUFUtPlJOUiwgUmVnaW9uKTsKKworICAvKiBFbmFibGUgdGhlIE1QVSByZWdpb24gKi8KKyAgU0VUX0JJVChNUFUtPlJMQVIsIE1QVV9STEFSX0VOX01zayk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2hlY2sgaWYgTVBVIHJlZ2lvbiBpcyBlbmFibGVkIG9yIG5vdAorICAqIEBybXRvbGwgTVBVX1JOUiAgICAgIFJFR0lPTiAgICAgICAgTExfTVBVX0lzRW5hYmxlZFJlZ2lvblxuCisgICogQHJtdG9sbCBNUFVfUkxBUiAgICAgRU4gICAgICAgICAgICBMTF9NUFVfSXNFbmFibGVkUmVnaW9uCisgICogQHBhcmFtICBSZWdpb24gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjAKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjcKKyAgKiBAbm90ZSAgIGNvcnRleC1NMzMgc3VwcG9ydCA4IHNlY3VyZSBhbmQgOCBub24gc2VjdXJlIHJlZ2lvbnMuCisgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTVBVX0lzRW5hYmxlZFJlZ2lvbih1aW50MzJfdCBSZWdpb24pCit7CisgIHJldHVybiAoKFJFQURfQklUKE1QVS0+Uk5SLCBSZWdpb24pID09IChSZWdpb24pKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBhIE1QVSByZWdpb24KKyAgKiBAcm10b2xsIE1QVV9STlIgICAgICBSRUdJT04gICAgICAgIExMX01QVV9EaXNhYmxlUmVnaW9uXG4KKyAgKiBAcm10b2xsIE1QVV9STEFSICAgICBFTiAgICAgICAgICAgIExMX01QVV9EaXNhYmxlUmVnaW9uCisgICogQHBhcmFtICBSZWdpb24gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjAKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjcKKyAgKiBAbm90ZSAgIGNvcnRleC1NMzMgc3VwcG9ydCA4IHNlY3VyZSBhbmQgOCBub24gc2VjdXJlIHJlZ2lvbnMuCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NUFVfRGlzYWJsZVJlZ2lvbih1aW50MzJfdCBSZWdpb24pCit7CisgIC8qIFNldCBSZWdpb24gbnVtYmVyICovCisgIFdSSVRFX1JFRyhNUFUtPlJOUiwgUmVnaW9uKTsKKworICAvKiBEaXNhYmxlIHRoZSBNUFUgcmVnaW9uICovCisgIENMRUFSX0JJVChNUFUtPlJMQVIsIE1QVV9STEFSX0VOX01zayk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIGFuZCBlbmFibGUgYSBNUFUgcmVnaW9uCisgICogQHJtdG9sbCBNUFVfUk5SICAgICAgUkVHSU9OICAgICAgICBMTF9NUFVfQ29uZmlnUmVnaW9uXG4KKyAgKiAgICAgICAgIE1QVV9SQkFSICAgICBBRERSICAgICAgICAgIExMX01QVV9Db25maWdSZWdpb25cbgorICAqICAgICAgICAgTVBVX1JMQVIgICAgIEFERFIgICAgICAgICAgTExfTVBVX0NvbmZpZ1JlZ2lvblxuCisgICogICAgICAgICBNUFVfUkJBUiAgICAgWE4gICAgICAgICAgICBMTF9NUFVfQ29uZmlnUmVnaW9uXG4KKyAgKiAgICAgICAgIE1QVV9SQkFSICAgICBBUCAgICAgICAgICAgIExMX01QVV9Db25maWdSZWdpb25cbgorICAqICAgICAgICAgTVBVX1JCQVIgICAgIFNIICAgICAgICAgICAgTExfTVBVX0NvbmZpZ1JlZ2lvblxuCisgICogICAgICAgICBNUFVfUkxBUiAgICAgRU4gICAgICAgICAgICBMTF9NUFVfQ29uZmlnUmVnaW9uXG4KKyAgKiAgICAgICAgIE1QVV9STEFSICAgICBBdHRySW5keCAgICAgIExMX01QVV9Db25maWdSZWdpb24KKyAgKiBAcGFyYW0gIFJlZ2lvbiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNworICAqIEBwYXJhbSAgQXR0ckluZHggVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfQVRUUklCVVRFU19OVU1CRVIwCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX0FUVFJJQlVURVNfTlVNQkVSMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9BVFRSSUJVVEVTX05VTUJFUjIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfQVRUUklCVVRFU19OVU1CRVIzCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX0FUVFJJQlVURVNfTlVNQkVSNAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9BVFRSSUJVVEVTX05VTUJFUjUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfQVRUUklCVVRFU19OVU1CRVI2CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX0FUVFJJQlVURVNfTlVNQkVSNworICAqIEBwYXJhbSAgQmFzZUFkZHJlc3MgVmFsdWUgb2YgcmVnaW9uIGJhc2UgYWRkcmVzcworICAqIEBwYXJhbSAgTGltaXRBZGRyZXNzIFZhbHVlIG9mIHJlZ2lvbiBsaW1pdCBhZGRyZXNzCisgICogQHBhcmFtICBBdHRyaWJ1dGVzIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9JTlNUUlVDVElPTl9BQ0NFU1NfRU5BQkxFIG9yIEByZWYgTExfTVBVX0lOU1RSVUNUSU9OX0FDQ0VTU19ESVNBQkxFCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX0FDQ0VTU19OT1RfU0hBUkVBQkxFIG9yIEByZWYgTExfTVBVX0FDQ0VTU19PVVRFUl9TSEFSRUFCTEUgb3IgQHJlZiBMTF9NUFVfQUNDRVNTX0lOTkVSX1NIQVJFQUJMRQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fUFJJVl9SVyBvciBAcmVmIExMX01QVV9SRUdJT05fQUxMX1JXIG9yIEByZWYgTExfTVBVX1JFR0lPTl9QUklWX1JPIG9yIEByZWYgTExfTVBVX1JFR0lPTl9BTExfUk8KKyAgKiBAbm90ZSAgIGNvcnRleC1NMzMgc3VwcG9ydCA4IHNlY3VyZSBhbmQgOCBub24gc2VjdXJlIHJlZ2lvbnMuCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NUFVfQ29uZmlnUmVnaW9uKHVpbnQzMl90IFJlZ2lvbiwgdWludDMyX3QgQXR0cmlidXRlcywgdWludDMyX3QgQXR0ckluZHgsIHVpbnQzMl90IEJhc2VBZGRyZXNzLCB1aW50MzJfdCBMaW1pdEFkZHJlc3MpCit7CisgIC8qIFNldCBSZWdpb24gbnVtYmVyICovCisgIFdSSVRFX1JFRyhNUFUtPlJOUiwgUmVnaW9uKTsKKworICAvKiBTZXQgYmFzZSBhZGRyZXNzICovCisgIE1QVS0+UkJBUiB8PSAgQXR0cmlidXRlczsKKyAgLyogU2V0IGJhc2UgYWRkcmVzcyAqLworICBNUFUtPlJCQVIgfD0gKEJhc2VBZGRyZXNzICYgMHhGRkZGRkZFMFUpOworCisgIC8qIFNldCBsaW1pdCBhZGRyZXNzICovCisgIE1QVS0+UkxBUiB8PSAoTGltaXRBZGRyZXNzICYgMHhGRkZGRkZFMFUpOworICAvKiBDb25maWd1cmUgTVBVICovCisgIE1QVS0+UkxBUiB8PSAoTVBVX1JMQVJfRU5fTXNrIHwgQXR0ckluZHgpOworfQorCisvKioKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSBhIE1QVSByZWdpb24gYWRkcmVzcyByYW5nZQorICAqIEBybXRvbGwgTVBVX1JOUiAgICAgIFJFR0lPTiAgICAgICAgTExfTVBVX0NvbmZpZ1JlZ2lvbkFkZHJlc3NcbgorICAqICAgICAgICAgTVBVX1JCQVIgICAgIEFERFIgICAgICAgICAgTExfTVBVX0NvbmZpZ1JlZ2lvbkFkZHJlc3NcbgorICAqICAgICAgICAgTVBVX1JMQVIgICAgIEFERFIgICAgICAgICAgTExfTVBVX0NvbmZpZ1JlZ2lvbkFkZHJlc3NcbgorICAqIEBwYXJhbSAgUmVnaW9uIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIwCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIxCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIyCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIzCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI0CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI1CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI2CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI3CisgICogQHBhcmFtICBCYXNlQWRkcmVzcyBWYWx1ZSBvZiByZWdpb24gYmFzZSBhZGRyZXNzCisgICogQHBhcmFtICBMaW1pdEFkZHJlc3MgVmFsdWUgb2YgcmVnaW9uIGxpbWl0IGFkZHJlc3MKKyAgKiBAbm90ZSAgIGNvcnRleC1NMzMgc3VwcG9ydCA4IHNlY3VyZSBhbmQgOCBub24gc2VjdXJlIHJlZ2lvbnMuCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NUFVfQ29uZmlnUmVnaW9uQWRkcmVzcyh1aW50MzJfdCBSZWdpb24sIHVpbnQzMl90IEJhc2VBZGRyZXNzLCB1aW50MzJfdCBMaW1pdEFkZHJlc3MpCit7CisgIC8qIFNldCBSZWdpb24gbnVtYmVyICovCisgIFdSSVRFX1JFRyhNUFUtPlJOUiwgUmVnaW9uKTsKKworICAvKiBTZXQgYmFzZSBhZGRyZXNzICovCisgIE1QVS0+UkJBUiB8PSAoQmFzZUFkZHJlc3MgJiAweEZGRkZGRkUwVSkgOworCisgIC8qIFNldCBsaW1pdCBhZGRyZXNzICovCisgIE1QVS0+UkxBUiB8PSAoTGltaXRBZGRyZXNzICYgMHhGRkZGRkZFMFUpOworfQorCisvKioKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSBhIE1QVSBhdHRyaWJ1dGVzIGluZGV4CisgICogQHJtdG9sbCBNUFVfTUFJUjAgICAgICBBVFRSMCAgICAgICAgICAgTExfTVBVX0NvbmZpZ0F0dHJpYnV0ZXNcbgorICAqICAgICAgICAgTVBVX01BSVIwICAgICAgQVRUUjEgICAgICAgICAgIExMX01QVV9Db25maWdBdHRyaWJ1dGVzXG4KKyAgKiAgICAgICAgIE1QVV9NQUlSMCAgICAgIEFUVFIyICAgICAgICAgICBMTF9NUFVfQ29uZmlnQXR0cmlidXRlc1xuCisgICogICAgICAgICBNUFVfTUFJUjAgICAgICBBVFRSMyAgICAgICAgICAgTExfTVBVX0NvbmZpZ0F0dHJpYnV0ZXNcbgorICAqICAgICAgICAgTVBVX01BSVIxICAgICAgQVRUUjQgICAgICAgICAgIExMX01QVV9Db25maWdBdHRyaWJ1dGVzXG4KKyAgKiAgICAgICAgIE1QVV9NQUlSMSAgICAgIEFUVFI1ICAgICAgICAgICBMTF9NUFVfQ29uZmlnQXR0cmlidXRlc1xuCisgICogICAgICAgICBNUFVfTUFJUjEgICAgICBBVFRSNiAgICAgICAgICAgTExfTVBVX0NvbmZpZ0F0dHJpYnV0ZXNcbgorICAqICAgICAgICAgTVBVX01BSVIxICAgICAgQVRUUjcgICAgICAgICAgIExMX01QVV9Db25maWdBdHRyaWJ1dGVzCisgICogQHBhcmFtICBBdHRJbmRleCBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9BVFRSSUJVVEVTX05VTUJFUjAKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfQVRUUklCVVRFU19OVU1CRVIxCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX0FUVFJJQlVURVNfTlVNQkVSMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9BVFRSSUJVVEVTX05VTUJFUjMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfQVRUUklCVVRFU19OVU1CRVI0CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX0FUVFJJQlVURVNfTlVNQkVSNQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9BVFRSSUJVVEVTX05VTUJFUjYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfQVRUUklCVVRFU19OVU1CRVI3CisgICogQHBhcmFtICBBdHRyaWJ1dGVzIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MCBhbmQgTWF4X0RhdGEgPSAweEZGCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NUFVfQ29uZmlnQXR0cmlidXRlcyh1aW50MzJfdCBBdHRJbmRleCwgdWludDMyX3QgIEF0dHJpYnV0ZXMpCit7CisgIGlmIChBdHRJbmRleCA8IExMX01QVV9BVFRSSUJVVEVTX05VTUJFUjQpCisgIHsKKyAgICAvKiBQcm9ncmFtIE1QVV9NQUlSMCAqLworICAgIFdSSVRFX1JFRyhNUFUtPk1BSVIwLCAoQXR0cmlidXRlcyA8PCAoQXR0SW5kZXggKiA4VSkpKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBQcm9ncmFtIE1QVV9NQUlSMSAqLworICAgIFdSSVRFX1JFRyhNUFUtPk1BSVIxLCAoQXR0cmlidXRlcyA8PCAoKEF0dEluZGV4IC0gNFUpICogOFUpKSk7CisgIH0KK30KKworLyoqCisgICogQGJyaWVmICBDb25maWd1cmUgYSBNUFUgcmVnaW9uIGJhc2UgYWRkcmVzcworICAqIEBybXRvbGwgTVBVX1JOUiAgICAgIFJFR0lPTiAgICAgICAgTExfTVBVX1NldFJlZ2lvbkJhc2VBZGRyZXNzXG4KKyAgKiAgICAgICAgIE1QVV9SQkFSICAgICBBRERSICAgICAgICAgIExMX01QVV9TZXRSZWdpb25CYXNlQWRkcmVzcworICAqIEBwYXJhbSAgUmVnaW9uIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIwCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIxCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIyCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIzCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI0CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI1CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI2CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI3CisgICogQHBhcmFtICBCYXNlQWRkcmVzcyBWYWx1ZSBvZiByZWdpb24gYmFzZSBhZGRyZXNzCisgICogQG5vdGUgICBjb3J0ZXgtTTMzIHN1cHBvcnQgOCBzZWN1cmUgYW5kIDggbm9uIHNlY3VyZSByZWdpb25zLgorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTVBVX1NldFJlZ2lvbkJhc2VBZGRyZXNzKHVpbnQzMl90IFJlZ2lvbiwgdWludDMyX3QgQmFzZUFkZHJlc3MpCit7CisgIC8qIFNldCBSZWdpb24gbnVtYmVyICovCisgIFdSSVRFX1JFRyhNUFUtPlJOUiwgUmVnaW9uKTsKKyAgLyogU2V0IGJhc2UgYWRkcmVzcyAqLworICBNUFUtPlJCQVIgfD0gKEJhc2VBZGRyZXNzICYgMHhGRkZGRkZFMFUpOworfQorCisvKioKKyAgKiBAYnJpZWYgIEdldCBhIE1QVSByZWdpb24gYmFzZSBhZGRyZXNzCisgICogQHJtdG9sbCBNUFVfUk5SICAgICAgUkVHSU9OICAgICAgICBMTF9NUFVfR2V0UmVnaW9uQmFzZUFkZHJlc3NcbgorICAqIEBybXRvbGwgTVBVX1JCQVIgICAgIEJBU0UgICAgICAgICAgTExfTVBVX0dldFJlZ2lvbkJhc2VBZGRyZXNzCisgICogQHBhcmFtICBSZWdpb24gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjAKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjcKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9NUFVfR2V0UmVnaW9uQmFzZUFkZHJlc3ModWludDMyX3QgUmVnaW9uKQoreworICAvKiBTZXQgUmVnaW9uIG51bWJlciAqLworICBXUklURV9SRUcoTVBVLT5STlIsIFJlZ2lvbik7CisgIHJldHVybiAoUkVBRF9SRUcoTVBVLT5SQkFSICYgTVBVX1JCQVJfQkFTRV9Nc2spKTsKK30KKworLyoqCisgICogQGJyaWVmICBDb25maWd1cmUgYSBNUFUgcmVnaW9uIGxpbWl0IGFkZHJlc3MKKyAgKiBAcm10b2xsIE1QVV9STlIgICAgICBSRUdJT04gICAgICAgIExMX01QVV9TZXRSZWdpb25MaW1pdEFkZHJlc3NcbgorICAqICAgICAgICAgTVBVX1JMQVIgICAgIEFERFIgICAgICAgICAgTExfTVBVX1NldFJlZ2lvbkxpbWl0QWRkcmVzcworICAqIEBwYXJhbSAgUmVnaW9uIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIwCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIxCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIyCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIzCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI0CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI1CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI2CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI3CisgICogQHBhcmFtICBMaW1pdEFkZHJlc3MgVmFsdWUgb2YgcmVnaW9uIGxpbWl0IGFkZHJlc3MKKyAgKiBAbm90ZSAgIGNvcnRleC1NMzMgc3VwcG9ydCA4IHNlY3VyZSBhbmQgOCBub24gc2VjdXJlIHJlZ2lvbnMuCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NUFVfU2V0UmVnaW9uTGltaXRBZGRyZXNzKHVpbnQzMl90IFJlZ2lvbiwgdWludDMyX3QgTGltaXRBZGRyZXNzKQoreworICAvKiBTZXQgUmVnaW9uIG51bWJlciAqLworICBXUklURV9SRUcoTVBVLT5STlIsIFJlZ2lvbik7CisgIC8qIFNldCBsaW1pdCBhZGRyZXNzICovCisgIE1QVS0+UkxBUiB8PSAoTGltaXRBZGRyZXNzICYgMHhGRkZGRkZFMFUpOworfQorCisvKioKKyAgKiBAYnJpZWYgIEdldCBhIE1QVSByZWdpb24gbGltaXQgYWRkcmVzcworICAqIEBybXRvbGwgTVBVX1JOUiAgICAgIFJFR0lPTiAgICAgICAgTExfTVBVX0dldFJlZ2lvbkxpbWl0QWRkcmVzc1xuCisgICogQHJtdG9sbCBNUFVfUkxBUiAgICAgTElNSVQgICAgICAgICBMTF9NUFVfR2V0UmVnaW9uTGltaXRBZGRyZXNzCisgICogQHBhcmFtICBSZWdpb24gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjAKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjcKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9NUFVfR2V0UmVnaW9uTGltaXRBZGRyZXNzKHVpbnQzMl90IFJlZ2lvbikKK3sKKyAgLyogU2V0IFJlZ2lvbiBudW1iZXIgKi8KKyAgV1JJVEVfUkVHKE1QVS0+Uk5SLCBSZWdpb24pOworICByZXR1cm4gKFJFQURfUkVHKE1QVS0+UkxBUiAmIE1QVV9STEFSX0xJTUlUX01zaykpOworfQorCisvKioKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSBhIE1QVSByZWdpb24gYWNjZXNzIGF0dHJpYnV0ZXMgYW5kIGVuYWJsZSBhIHJlZ2lvbgorICAqIEBybXRvbGwgTVBVX1JOUiAgICAgIFJFR0lPTiAgICAgICAgTExfTVBVX1NldFJlZ2lvbkFjY2Vzc1xuCisgICogICAgICAgICBNUFVfUkJBUiAgICAgWE4gICAgICAgICAgICBMTF9NUFVfU2V0UmVnaW9uQWNjZXNzXG4KKyAgKiAgICAgICAgIE1QVV9SQkFSICAgICBBUCAgICAgICAgICAgIExMX01QVV9TZXRSZWdpb25BY2Nlc3NcbgorICAqICAgICAgICAgTVBVX1JCQVIgICAgIFNIICAgICAgICAgICAgTExfTVBVX1NldFJlZ2lvbkFjY2VzcworICAqIEBwYXJhbSAgUmVnaW9uIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIwCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIxCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIyCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIzCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI0CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI1CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI2CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI3CisgICogQHBhcmFtICBBdHRyaWJ1dGVzIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9JTlNUUlVDVElPTl9BQ0NFU1NfRU5BQkxFIG9yIEByZWYgTExfTVBVX0lOU1RSVUNUSU9OX0FDQ0VTU19ESVNBQkxFCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX0FDQ0VTU19OT1RfU0hBUkVBQkxFIG9yIEByZWYgTExfTVBVX0FDQ0VTU19PVVRFUl9TSEFSRUFCTEUgb3IgQHJlZiBMTF9NUFVfQUNDRVNTX0lOTkVSX1NIQVJFQUJMRQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fUFJJVl9SVyBvciBAcmVmIExMX01QVV9SRUdJT05fQUxMX1JXIG9yIEByZWYgTExfTVBVX1JFR0lPTl9QUklWX1JPIG9yIEByZWYgTExfTVBVX1JFR0lPTl9BTExfUk8KKyAgKiBAbm90ZSAgIGNvcnRleC1NMzMgc3VwcG9ydCA4IHNlY3VyZSBhbmQgOCBub24gc2VjdXJlIHJlZ2lvbnMuCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NUFVfU2V0UmVnaW9uQWNjZXNzKHVpbnQzMl90IFJlZ2lvbiwgdWludDMyX3QgQXR0cmlidXRlcykKK3sKKyAgLyogU2V0IFJlZ2lvbiBudW1iZXIgKi8KKyAgV1JJVEVfUkVHKE1QVS0+Uk5SLCBSZWdpb24pOworICAvKiBTZXQgYmFzZSBhZGRyZXNzICovCisgIE1QVS0+UkJBUiB8PSAgQXR0cmlidXRlczsKK30KKworLyoqCisgICogQGJyaWVmICBHZXQgYSBNUFUgcmVnaW9uIGFjY2VzcyBhdHRyaWJ1dGVzCisgICogQHJtdG9sbCBNUFVfUk5SICAgICAgUkVHSU9OICAgICAgICBMTF9NUFVfR2V0UmVnaW9uQWNjZXNzXG4KKyAgKiAgICAgICAgIE1QVV9SQkFSICAgICBYTiAgICAgICAgICAgIExMX01QVV9HZXRSZWdpb25BY2Nlc3NcbgorICAqICAgICAgICAgTVBVX1JCQVIgICAgIEFQICAgICAgICAgICAgTExfTVBVX0dldFJlZ2lvbkFjY2Vzc1xuCisgICogICAgICAgICBNUFVfUkJBUiAgICAgU0ggICAgICAgICAgICBMTF9NUFVfR2V0UmVnaW9uQWNjZXNzCisgICogQHBhcmFtICBSZWdpb24gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjAKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjcKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9NUFVfR2V0UmVnaW9uQWNjZXNzKHVpbnQzMl90IFJlZ2lvbikKK3sKKyAgLyogU2V0IFJlZ2lvbiBudW1iZXIgKi8KKyAgV1JJVEVfUkVHKE1QVS0+Uk5SLCBSZWdpb24pOworICByZXR1cm4gKFJFQURfUkVHKE1QVS0+UkJBUiAmIChNUFVfUkJBUl9YTl9Nc2sgfCBNUFVfUkJBUl9BUF9Nc2sgfCBNUFVfUkJBUl9TSF9Nc2spKSk7Cit9CisKKyNpZiBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0NNU0UpICYmIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSBub24tc2VjdXJlIE1QVSB3aXRoIGlucHV0IG9wdGlvbnMKKyAgKiBAcm10b2xsIE1QVV9DVFJMICAgICBFTkFCTEUgICAgICAgIExMX01QVV9FbmFibGVfTlNcbgorICAqIEBybXRvbGwgTVBVX0NUUkwgICAgIEhGTk1JRU5BICAgICAgTExfTVBVX0VuYWJsZV9OU1xuCisgICogQHJtdG9sbCBNUFVfQ1RSTCAgICAgUFJJVkRFRkVOQSAgICBMTF9NUFVfRW5hYmxlX05TCisgICogQHBhcmFtICBNUFVfQ29udHJvbCBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9DVFJMX0hGTk1JX1BSSVZERUZfTk9ORQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9DVFJMX0hBUkRGQVVMVF9OTUkKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfQ1RSTF9QUklWSUxFR0VEX0RFRkFVTFQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfQ1RSTF9IRk5NSV9QUklWREVGCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NUFVfRW5hYmxlX05TKHVpbnQzMl90IE1QVV9Db250cm9sKQoreworICAvKiBFbmFibGUgdGhlIE1QVSovCisgIE1QVV9OUy0+Q1RSTCA9IE1QVV9DVFJMX0VOQUJMRV9Nc2sgfCBNUFVfQ29udHJvbDsKKworICAvKiBFbnN1cmUgTVBVIHNldHRpbmdzIHRha2UgZWZmZWN0cyAqLworICBfX0RTQigpOworCisgIC8qIFNlcXVlbmNlIGluc3RydWN0aW9uIGZldGNoZXMgdXNpbmcgdXBkYXRlIHNldHRpbmdzICovCisgIF9fSVNCKCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBub24tc2VjdXJlIE1QVQorICAqIEBybXRvbGwgTVBVX0NUUkwgICAgIEVOQUJMRSAgICAgICAgTExfTVBVX0Rpc2FibGVfTlNcbgorICAqIEBybXRvbGwgTVBVX0NUUkwgICAgIEhGTk1JRU5BICAgICAgTExfTVBVX0Rpc2FibGVfTlNcbgorICAqIEBybXRvbGwgTVBVX0NUUkwgICAgIFBSSVZERUZFTkEgICAgTExfTVBVX0Rpc2FibGVfTlMKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX01QVV9EaXNhYmxlX05TKHZvaWQpCit7CisgIC8qIE1ha2Ugc3VyZSBvdXRzdGFuZGluZyB0cmFuc2ZlcnMgYXJlIGRvbmUgKi8KKyAgX19ETUIoKTsKKyAgLyogRGlzYWJsZSBNUFUqLworICBXUklURV9SRUcoTVBVX05TLT5DVFJMLCAwVSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2hlY2sgaWYgbm9uLXNlY3VyZSBNUFUgaXMgZW5hYmxlZCBvciBub3QKKyAgKiBAcm10b2xsIE1QVV9DVFJMICAgICBFTkFCTEUgICAgICAgIExMX01QVV9Jc0VuYWJsZWRfTlMKKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9NUFVfSXNFbmFibGVkX05TKHZvaWQpCit7CisgIHJldHVybiAoKFJFQURfQklUKE1QVV9OUy0+Q1RSTCwgTVBVX0NUUkxfRU5BQkxFX01zaykgPT0gKE1QVV9DVFJMX0VOQUJMRV9Nc2spKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIGEgbm9uLXNlY3VyZSBNUFUgcmVnaW9uCisgICogQHJtdG9sbCBNUFVfUk5SICAgICAgUkVHSU9OICAgICAgICBMTF9NUFVfRW5hYmxlUmVnaW9uX05TXG4KKyAgKiBAcm10b2xsIE1QVV9STEFSICAgICBFTiAgICAgICAgICAgIExMX01QVV9FbmFibGVSZWdpb25fTlMKKyAgKiBAcGFyYW0gIFJlZ2lvbiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNworICAqIEBub3RlICAgY29ydGV4LU0zMyBzdXBwb3J0IDggc2VjdXJlIGFuZCA4IG5vbiBzZWN1cmUgcmVnaW9ucy4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX01QVV9FbmFibGVSZWdpb25fTlModWludDMyX3QgUmVnaW9uKQoreworICAvKiBTZXQgUmVnaW9uIG51bWJlciAqLworICBXUklURV9SRUcoTVBVX05TLT5STlIsIFJlZ2lvbik7CisKKyAgLyogRW5hYmxlIHRoZSBNUFUgcmVnaW9uICovCisgIFNFVF9CSVQoTVBVX05TLT5STEFSLCBNUFVfUkxBUl9FTl9Nc2spOworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgYSBub24tc2VjdXJlIE1QVSByZWdpb24KKyAgKiBAcm10b2xsIE1QVV9STlIgICAgICBSRUdJT04gICAgICAgIExMX01QVV9EaXNhYmxlUmVnaW9uX05TXG4KKyAgKiBAcm10b2xsIE1QVV9STEFSICAgICBFTiAgICAgICAgICAgIExMX01QVV9EaXNhYmxlUmVnaW9uX05TCisgICogQHBhcmFtICBSZWdpb24gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjAKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjcKKyAgKiBAbm90ZSAgIGNvcnRleC1NMzMgc3VwcG9ydCA4IHNlY3VyZSBhbmQgOCBub24gc2VjdXJlIHJlZ2lvbnMuCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NUFVfRGlzYWJsZVJlZ2lvbl9OUyh1aW50MzJfdCBSZWdpb24pCit7CisgIC8qIFNldCBSZWdpb24gbnVtYmVyICovCisgIFdSSVRFX1JFRyhNUFVfTlMtPlJOUiwgUmVnaW9uKTsKKworICAvKiBEaXNhYmxlIHRoZSBNUFUgcmVnaW9uICovCisgIENMRUFSX0JJVChNUFVfTlMtPlJMQVIsIE1QVV9STEFSX0VOX01zayk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2hlY2sgaWYgbm9uLXNlY3VyZSBNUFUgcmVnaW9uIGlzIGVuYWJsZWQgb3Igbm90CisgICogQHJtdG9sbCBNUFVfUk5SICAgICAgUkVHSU9OICAgICAgICBMTF9NUFVfSXNFbmFibGVkUmVnaW9uX05TXG4KKyAgKiBAcm10b2xsIE1QVV9STEFSICAgICBFTiAgICAgICAgICAgIExMX01QVV9Jc0VuYWJsZWRSZWdpb25fTlMKKyAgKiBAcGFyYW0gIFJlZ2lvbiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNworICAqIEBub3RlICAgY29ydGV4LU0zMyBzdXBwb3J0IDggc2VjdXJlIGFuZCA4IG5vbiBzZWN1cmUgcmVnaW9ucy4KKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9NUFVfSXNFbmFibGVkUmVnaW9uX05TKHVpbnQzMl90IFJlZ2lvbikKK3sKKyAgcmV0dXJuICgoUkVBRF9CSVQoTVBVX05TLT5STlIsIFJlZ2lvbikgPT0gKFJlZ2lvbikpID8gMVVMIDogMFVMKTsKK30KKworLyoqCisgICogQGJyaWVmICBDb25maWd1cmUgYW5kIGVuYWJsZSBhIG5vbi1zZWN1cmUgTVBVIHJlZ2lvbgorICAqIEBybXRvbGwgTVBVX1JOUiAgICAgIFJFR0lPTiAgICAgICAgTExfTVBVX0NvbmZpZ1JlZ2lvbl9OU1xuCisgICogICAgICAgICBNUFVfUkJBUiAgICAgQUREUiAgICAgICAgICBMTF9NUFVfQ29uZmlnUmVnaW9uX05TXG4KKyAgKiAgICAgICAgIE1QVV9STEFSICAgICBBRERSICAgICAgICAgIExMX01QVV9Db25maWdSZWdpb25fTlNcbgorICAqICAgICAgICAgTVBVX1JCQVIgICAgIFhOICAgICAgICAgICAgTExfTVBVX0NvbmZpZ1JlZ2lvbl9OU1xuCisgICogICAgICAgICBNUFVfUkJBUiAgICAgQVAgICAgICAgICAgICBMTF9NUFVfQ29uZmlnUmVnaW9uX05TXG4KKyAgKiAgICAgICAgIE1QVV9SQkFSICAgICBTSCAgICAgICAgICAgIExMX01QVV9Db25maWdSZWdpb25fTlNcbgorICAqICAgICAgICAgTVBVX1JMQVIgICAgIEVOICAgICAgICAgICAgTExfTVBVX0NvbmZpZ1JlZ2lvbl9OU1xuCisgICogICAgICAgICBNUFVfUkxBUiAgICAgQXR0ckluZHggICAgICBMTF9NUFVfQ29uZmlnUmVnaW9uX05TCisgICogQHBhcmFtICBSZWdpb24gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjAKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjcKKyAgKiBAcGFyYW0gIEF0dHJJbmR4IFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX0FUVFJJQlVURVNfTlVNQkVSMAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9BVFRSSUJVVEVTX05VTUJFUjEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfQVRUUklCVVRFU19OVU1CRVIyCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX0FUVFJJQlVURVNfTlVNQkVSMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9BVFRSSUJVVEVTX05VTUJFUjQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfQVRUUklCVVRFU19OVU1CRVI1CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX0FUVFJJQlVURVNfTlVNQkVSNgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9BVFRSSUJVVEVTX05VTUJFUjcKKyAgKiBAcGFyYW0gIEJhc2VBZGRyZXNzIFZhbHVlIG9mIHJlZ2lvbiBiYXNlIGFkZHJlc3MKKyAgKiBAcGFyYW0gIExpbWl0QWRkcmVzcyBWYWx1ZSBvZiByZWdpb24gbGltaXQgYWRkcmVzcworICAqIEBwYXJhbSAgQXR0cmlidXRlcyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfSU5TVFJVQ1RJT05fQUNDRVNTX0VOQUJMRSBvciBAcmVmIExMX01QVV9JTlNUUlVDVElPTl9BQ0NFU1NfRElTQUJMRQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9BQ0NFU1NfTk9UX1NIQVJFQUJMRSBvciBAcmVmIExMX01QVV9BQ0NFU1NfT1VURVJfU0hBUkVBQkxFIG9yIEByZWYgTExfTVBVX0FDQ0VTU19JTk5FUl9TSEFSRUFCTEUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX1BSSVZfUlcgb3IgQHJlZiBMTF9NUFVfUkVHSU9OX0FMTF9SVyBvciBAcmVmIExMX01QVV9SRUdJT05fUFJJVl9STyBvciBAcmVmIExMX01QVV9SRUdJT05fQUxMX1JPCisgICogQG5vdGUgICBjb3J0ZXgtTTMzIHN1cHBvcnQgOCBzZWN1cmUgYW5kIDggbm9uIHNlY3VyZSByZWdpb25zLgorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTVBVX0NvbmZpZ1JlZ2lvbl9OUyh1aW50MzJfdCBSZWdpb24sIHVpbnQzMl90IEF0dHJpYnV0ZXMsIHVpbnQzMl90IEF0dHJJbmR4LCB1aW50MzJfdCBCYXNlQWRkcmVzcywgdWludDMyX3QgTGltaXRBZGRyZXNzKQoreworICAvKiBTZXQgUmVnaW9uIG51bWJlciAqLworICBXUklURV9SRUcoTVBVX05TLT5STlIsIFJlZ2lvbik7CisKKyAgLyogU2V0IGJhc2UgYWRkcmVzcyAqLworICBNUFVfTlMtPlJCQVIgfD0gIEF0dHJpYnV0ZXM7CisKKyAgLyogU2V0IGJhc2UgYWRkcmVzcyAqLworICBNUFVfTlMtPlJCQVIgfD0gKEJhc2VBZGRyZXNzICYgMHhGRkZGRkZFMFUpOworCisgIC8qIFNldCBsaW1pdCBhZGRyZXNzICovCisgIE1QVV9OUy0+UkxBUiB8PSAoTGltaXRBZGRyZXNzICYgMHhGRkZGRkZFMFUpOworICAvKiBDb25maWd1cmUgTVBVICovCisgIE1QVV9OUy0+UkxBUiB8PSAoTVBVX1JMQVJfRU5fTXNrIHwgQXR0ckluZHgpOworfQorCisvKioKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSBhIG5vbi1zZWN1cmUgTVBVIHJlZ2lvbiBhZGRyZXNzIHJhbmdlCisgICogQHJtdG9sbCBNUFVfUk5SICAgICAgUkVHSU9OICAgICAgICBMTF9NUFVfQ29uZmlnUmVnaW9uQWRkcmVzc19OU1xuCisgICogICAgICAgICBNUFVfUkJBUiAgICAgQUREUiAgICAgICAgICBMTF9NUFVfQ29uZmlnUmVnaW9uQWRkcmVzc19OU1xuCisgICogICAgICAgICBNUFVfUkxBUiAgICAgQUREUiAgICAgICAgICBMTF9NUFVfQ29uZmlnUmVnaW9uQWRkcmVzc19OU1xuCisgICogQHBhcmFtICBSZWdpb24gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjAKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjcKKyAgKiBAcGFyYW0gIEJhc2VBZGRyZXNzIFZhbHVlIG9mIHJlZ2lvbiBiYXNlIGFkZHJlc3MKKyAgKiBAcGFyYW0gIExpbWl0QWRkcmVzcyBWYWx1ZSBvZiByZWdpb24gbGltaXQgYWRkcmVzcworICAqIEBub3RlICAgY29ydGV4LU0zMyBzdXBwb3J0IDggc2VjdXJlIGFuZCA4IG5vbiBzZWN1cmUgcmVnaW9ucy4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX01QVV9Db25maWdSZWdpb25BZGRyZXNzX05TKHVpbnQzMl90IFJlZ2lvbiwgdWludDMyX3QgQmFzZUFkZHJlc3MsIHVpbnQzMl90IExpbWl0QWRkcmVzcykKK3sKKyAgLyogU2V0IFJlZ2lvbiBudW1iZXIgKi8KKyAgV1JJVEVfUkVHKE1QVV9OUy0+Uk5SLCBSZWdpb24pOworCisgIC8qIFNldCBiYXNlIGFkZHJlc3MgKi8KKyAgTVBVX05TLT5SQkFSIHw9IChCYXNlQWRkcmVzcyAmIDB4RkZGRkZGRTBVKTsKKworICAvKiBTZXQgbGltaXQgYWRkcmVzcyAqLworICBNUFVfTlMtPlJMQVIgfD0gKExpbWl0QWRkcmVzcyAmIDB4RkZGRkZGRTBVKTsKK30KKworLyoqCisgICogQGJyaWVmICBDb25maWd1cmUgYSBub24tc2VjdXJlIE1QVSBhdHRyaWJ1dGVzIGluZGV4CisgICogQHJtdG9sbCBNUFVfTUFJUjAgICAgICBBVFRSMCAgICAgICAgICAgTExfTVBVX0NvbmZpZ0F0dHJpYnV0ZXNfTlNcbgorICAqICAgICAgICAgTVBVX01BSVIwICAgICAgQVRUUjEgICAgICAgICAgIExMX01QVV9Db25maWdBdHRyaWJ1dGVzX05TXG4KKyAgKiAgICAgICAgIE1QVV9NQUlSMCAgICAgIEFUVFIyICAgICAgICAgICBMTF9NUFVfQ29uZmlnQXR0cmlidXRlc19OU1xuCisgICogICAgICAgICBNUFVfTUFJUjAgICAgICBBVFRSMyAgICAgICAgICAgTExfTVBVX0NvbmZpZ0F0dHJpYnV0ZXNfTlNcbgorICAqICAgICAgICAgTVBVX01BSVIxICAgICAgQVRUUjQgICAgICAgICAgIExMX01QVV9Db25maWdBdHRyaWJ1dGVzX05TXG4KKyAgKiAgICAgICAgIE1QVV9NQUlSMSAgICAgIEFUVFI1ICAgICAgICAgICBMTF9NUFVfQ29uZmlnQXR0cmlidXRlc19OU1xuCisgICogICAgICAgICBNUFVfTUFJUjEgICAgICBBVFRSNiAgICAgICAgICAgTExfTVBVX0NvbmZpZ0F0dHJpYnV0ZXNfTlNcbgorICAqICAgICAgICAgTVBVX01BSVIxICAgICAgQVRUUjcgICAgICAgICAgIExMX01QVV9Db25maWdBdHRyaWJ1dGVzX05TCisgICogQHBhcmFtICBBdHRJbmRleCBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9BVFRSSUJVVEVTX05VTUJFUjAKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfQVRUUklCVVRFU19OVU1CRVIxCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX0FUVFJJQlVURVNfTlVNQkVSMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9BVFRSSUJVVEVTX05VTUJFUjMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfQVRUUklCVVRFU19OVU1CRVI0CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX0FUVFJJQlVURVNfTlVNQkVSNQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9BVFRSSUJVVEVTX05VTUJFUjYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfQVRUUklCVVRFU19OVU1CRVI3CisgICogQHBhcmFtICBBdHRyaWJ1dGVzIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MCBhbmQgTWF4X0RhdGEgPSAweEZGCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NUFVfQ29uZmlnQXR0cmlidXRlc19OUyh1aW50MzJfdCBBdHRJbmRleCwgdWludDMyX3QgIEF0dHJpYnV0ZXMpCit7CisgIGlmIChBdHRJbmRleCA8IExMX01QVV9BVFRSSUJVVEVTX05VTUJFUjQpCisgIHsKKyAgICAvKiBQcm9ncmFtIE1QVV9NQUlSMCAqLworICAgIFdSSVRFX1JFRyhNUFVfTlMtPk1BSVIwLCAoQXR0cmlidXRlcyA8PCAoQXR0SW5kZXggKiA4VSkpKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBQcm9ncmFtIE1QVV9NQUlSMSAqLworICAgIFdSSVRFX1JFRyhNUFVfTlMtPk1BSVIxLCAoQXR0cmlidXRlcyA8PCAoKEF0dEluZGV4IC0gNFUpICogOFUpKSk7CisgIH0KK30KKworLyoqCisgICogQGJyaWVmICBDb25maWd1cmUgYSBub24tc2VjdXJlIE1QVSByZWdpb24gYmFzZSBhZGRyZXNzCisgICogQHJtdG9sbCBNUFVfUk5SICAgICAgUkVHSU9OICAgICAgICBMTF9NUFVfU2V0UmVnaW9uQmFzZUFkZHJlc3NfTlNcbgorICAqICAgICAgICAgTVBVX1JCQVIgICAgIEFERFIgICAgICAgICAgTExfTVBVX1NldFJlZ2lvbkJhc2VBZGRyZXNzX05TCisgICogQHBhcmFtICBSZWdpb24gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjAKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX05VTUJFUjcKKyAgKiBAcGFyYW0gIEJhc2VBZGRyZXNzIFZhbHVlIG9mIHJlZ2lvbiBiYXNlIGFkZHJlc3MKKyAgKiBAbm90ZSAgIGNvcnRleC1NMzMgc3VwcG9ydCA4IHNlY3VyZSBhbmQgOCBub24gc2VjdXJlIHJlZ2lvbnMuCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NUFVfU2V0UmVnaW9uQmFzZUFkZHJlc3NfTlModWludDMyX3QgUmVnaW9uLCB1aW50MzJfdCBCYXNlQWRkcmVzcykKK3sKKyAgLyogU2V0IFJlZ2lvbiBudW1iZXIgKi8KKyAgV1JJVEVfUkVHKE1QVV9OUy0+Uk5SLCBSZWdpb24pOworICAvKiBTZXQgYmFzZSBhZGRyZXNzICovCisgIE1QVV9OUy0+UkJBUiB8PSAoQmFzZUFkZHJlc3MgJiAweEZGRkZGRkUwVSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgR2V0IGEgbm9uLXNlY3VyZSBNUFUgcmVnaW9uIGJhc2UgYWRkcmVzcworICAqIEBybXRvbGwgTVBVX1JOUiAgICAgIFJFR0lPTiAgICAgICAgTExfTVBVX0dldFJlZ2lvbkJhc2VBZGRyZXNzX05TXG4KKyAgKiBAcm10b2xsIE1QVV9SQkFSICAgICBCQVNFICAgICAgICAgIExMX01QVV9HZXRSZWdpb25CYXNlQWRkcmVzc19OUworICAqIEBwYXJhbSAgUmVnaW9uIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIwCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIxCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIyCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIzCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI0CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI1CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI2CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI3CisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTVBVX0dldFJlZ2lvbkJhc2VBZGRyZXNzX05TKHVpbnQzMl90IFJlZ2lvbikKK3sKKyAgLyogU2V0IFJlZ2lvbiBudW1iZXIgKi8KKyAgV1JJVEVfUkVHKE1QVV9OUy0+Uk5SLCBSZWdpb24pOworICByZXR1cm4gKFJFQURfUkVHKE1QVV9OUy0+UkJBUiAmIE1QVV9SQkFSX0JBU0VfTXNrKSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIGEgbm9uLXNlY3VyZSBNUFUgcmVnaW9uIGxpbWl0IGFkZHJlc3MKKyAgKiBAcm10b2xsIE1QVV9STlIgICAgICBSRUdJT04gICAgICAgIExMX01QVV9TZXRSZWdpb25MaW1pdEFkZHJlc3NfTlNcbgorICAqICAgICAgICAgTVBVX1JMQVIgICAgIEFERFIgICAgICAgICAgTExfTVBVX1NldFJlZ2lvbkxpbWl0QWRkcmVzc19OUworICAqIEBwYXJhbSAgUmVnaW9uIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIwCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIxCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIyCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVIzCisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI0CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI1CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI2CisgICogICAgICAgICBAYXJnIEByZWYgTExfTVBVX1JFR0lPTl9OVU1CRVI3CisgICogQHBhcmFtICBMaW1pdEFkZHJlc3MgVmFsdWUgb2YgcmVnaW9uIGxpbWl0IGFkZHJlc3MKKyAgKiBAbm90ZSAgIGNvcnRleC1NMzMgc3VwcG9ydCA4IHNlY3VyZSBhbmQgOCBub24gc2VjdXJlIHJlZ2lvbnMuCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NUFVfU2V0UmVnaW9uTGltaXRBZGRyZXNzX05TKHVpbnQzMl90IFJlZ2lvbiwgdWludDMyX3QgTGltaXRBZGRyZXNzKQoreworICAvKiBTZXQgUmVnaW9uIG51bWJlciAqLworICBXUklURV9SRUcoTVBVX05TLT5STlIsIFJlZ2lvbik7CisgIC8qIFNldCBsaW1pdCBhZGRyZXNzICovCisgIE1QVV9OUy0+UkxBUiB8PSAoTGltaXRBZGRyZXNzICYgMHhGRkZGRkZFMFUpOworfQorCisvKioKKyAgKiBAYnJpZWYgIEdldCBhIG5vbi1zZWN1cmUgTVBVIHJlZ2lvbiBsaW1pdCBhZGRyZXNzCisgICogQHJtdG9sbCBNUFVfUk5SICAgICAgUkVHSU9OICAgICAgICBMTF9NUFVfR2V0UmVnaW9uTGltaXRBZGRyZXNzX05TXG4KKyAgKiBAcm10b2xsIE1QVV9STEFSICAgICBMSU1JVCAgICAgICAgIExMX01QVV9HZXRSZWdpb25MaW1pdEFkZHJlc3NfTlMKKyAgKiBAcGFyYW0gIFJlZ2lvbiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNworICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX01QVV9HZXRSZWdpb25MaW1pdEFkZHJlc3NfTlModWludDMyX3QgUmVnaW9uKQoreworICAvKiBTZXQgUmVnaW9uIG51bWJlciAqLworICBXUklURV9SRUcoTVBVX05TLT5STlIsIFJlZ2lvbik7CisgIHJldHVybiAoUkVBRF9SRUcoTVBVX05TLT5STEFSICYgTVBVX1JMQVJfTElNSVRfTXNrKSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIGEgbm9uLXNlY3VyZSBNUFUgcmVnaW9uIGFjY2VzcyBhdHRyaWJ1dGVzIGFuZCBlbmFibGUgYSByZWdpb24KKyAgKiBAcm10b2xsIE1QVV9STlIgICAgICBSRUdJT04gICAgICAgIExMX01QVV9TZXRSZWdpb25BY2Nlc3NfTlNcbgorICAqICAgICAgICAgTVBVX1JCQVIgICAgIFhOICAgICAgICAgICAgTExfTVBVX1NldFJlZ2lvbkFjY2Vzc19OU1xuCisgICogICAgICAgICBNUFVfUkJBUiAgICAgQVAgICAgICAgICAgICBMTF9NUFVfU2V0UmVnaW9uQWNjZXNzX05TXG4KKyAgKiAgICAgICAgIE1QVV9SQkFSICAgICBTSCAgICAgICAgICAgIExMX01QVV9TZXRSZWdpb25BY2Nlc3NfTlMKKyAgKiBAcGFyYW0gIFJlZ2lvbiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNworICAqIEBwYXJhbSAgQXR0cmlidXRlcyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfSU5TVFJVQ1RJT05fQUNDRVNTX0VOQUJMRSBvciBAcmVmIExMX01QVV9JTlNUUlVDVElPTl9BQ0NFU1NfRElTQUJMRQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9BQ0NFU1NfTk9UX1NIQVJFQUJMRSBvciBAcmVmIExMX01QVV9BQ0NFU1NfT1VURVJfU0hBUkVBQkxFIG9yIEByZWYgTExfTVBVX0FDQ0VTU19JTk5FUl9TSEFSRUFCTEUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9NUFVfUkVHSU9OX1BSSVZfUlcgb3IgQHJlZiBMTF9NUFVfUkVHSU9OX0FMTF9SVyBvciBAcmVmIExMX01QVV9SRUdJT05fUFJJVl9STyBvciBAcmVmIExMX01QVV9SRUdJT05fQUxMX1JPCisgICogQG5vdGUgICBjb3J0ZXgtTTMzIHN1cHBvcnQgOCBzZWN1cmUgYW5kIDggbm9uIHNlY3VyZSByZWdpb25zLgorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTVBVX1NldFJlZ2lvbkFjY2Vzc19OUyh1aW50MzJfdCBSZWdpb24sIHVpbnQzMl90IEF0dHJpYnV0ZXMpCit7CisgIC8qIFNldCBSZWdpb24gbnVtYmVyICovCisgIFdSSVRFX1JFRyhNUFVfTlMtPlJOUiwgUmVnaW9uKTsKKyAgLyogU2V0IGJhc2UgYWRkcmVzcyBBdHRyaWJ1dGVzICovCisgIE1QVV9OUy0+UkJBUiB8PSAgQXR0cmlidXRlczsKK30KKworLyoqCisgICogQGJyaWVmICBHZXQgYSBub24tc2VjdXJlIE1QVSByZWdpb24gYWNjZXNzIGF0dHJpYnV0ZXMKKyAgKiBAcm10b2xsIE1QVV9STlIgICAgICBSRUdJT04gICAgICAgIExMX01QVV9HZXRSZWdpb25BY2Nlc3NfTlNcbgorICAqICAgICAgICAgTVBVX1JCQVIgICAgIFhOICAgICAgICAgICAgTExfTVBVX0dldFJlZ2lvbkFjY2Vzc19OU1xuCisgICogICAgICAgICBNUFVfUkJBUiAgICAgQVAgICAgICAgICAgICBMTF9NUFVfR2V0UmVnaW9uQWNjZXNzX05TXG4KKyAgKiAgICAgICAgIE1QVV9SQkFSICAgICBTSCAgICAgICAgICAgIExMX01QVV9HZXRSZWdpb25BY2Nlc3NfTlMKKyAgKiBAcGFyYW0gIFJlZ2lvbiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX01QVV9SRUdJT05fTlVNQkVSNworICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX01QVV9HZXRSZWdpb25BY2Nlc3NfTlModWludDMyX3QgUmVnaW9uKQoreworICAvKiBTZXQgUmVnaW9uIG51bWJlciAqLworICBXUklURV9SRUcoTVBVX05TLT5STlIsIFJlZ2lvbik7CisgIHJldHVybiAoUkVBRF9SRUcoTVBVX05TLT5SQkFSICYgKE1QVV9SQkFSX1hOX01zayB8IE1QVV9SQkFSX0FQX01zayB8IE1QVV9SQkFSX1NIX01zaykpKTsKK30KKyNlbmRpZiAvKiBfX0FSTV9GRUFUVVJFX0NNU0UgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworI2VuZGlmIC8qIF9fTVBVX1BSRVNFTlQgKi8KIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNXh4X2xsX2ZtYy5oIGIvSW5jL3N0bTMybDV4eF9sbF9mbWMuaAppbmRleCA1ODViYmE4Li44MGE0NjgwIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNXh4X2xsX2ZtYy5oCisrKyBiL0luYy9zdG0zMmw1eHhfbGxfZm1jLmgKQEAgLTQxLDUxICs0MSw1MSBAQAogICAqLwogCiAjZGVmaW5lIElTX0ZNQ19OT1JTUkFNX0JBTksoX19CQU5LX18pICgoKF9fQkFOS19fKSA9PSBGTUNfTk9SU1JBTV9CQU5LMSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0JBTktfXykgPT0gRk1DX05PUlNSQU1fQkFOSzIpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQU5LX18pID09IEZNQ19OT1JTUkFNX0JBTkszKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQkFOS19fKSA9PSBGTUNfTk9SU1JBTV9CQU5LNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQkFOS19fKSA9PSBGTUNfTk9SU1JBTV9CQU5LMikgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0JBTktfXykgPT0gRk1DX05PUlNSQU1fQkFOSzMpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQU5LX18pID09IEZNQ19OT1JTUkFNX0JBTks0KSkKICNkZWZpbmUgSVNfRk1DX01VWChfX01VWF9fKSAoKChfX01VWF9fKSA9PSBGTUNfREFUQV9BRERSRVNTX01VWF9ESVNBQkxFKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NVVhfXykgPT0gRk1DX0RBVEFfQUREUkVTU19NVVhfRU5BQkxFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01VWF9fKSA9PSBGTUNfREFUQV9BRERSRVNTX01VWF9FTkFCTEUpKQogI2RlZmluZSBJU19GTUNfTUVNT1JZKF9fTUVNT1JZX18pICgoKF9fTUVNT1JZX18pID09IEZNQ19NRU1PUllfVFlQRV9TUkFNKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NRU1PUllfXykgPT0gRk1DX01FTU9SWV9UWVBFX1BTUkFNKXx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01FTU9SWV9fKSA9PSBGTUNfTUVNT1JZX1RZUEVfTk9SKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01FTU9SWV9fKSA9PSBGTUNfTUVNT1JZX1RZUEVfUFNSQU0pfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTUVNT1JZX18pID09IEZNQ19NRU1PUllfVFlQRV9OT1IpKQogI2RlZmluZSBJU19GTUNfTk9SU1JBTV9NRU1PUllfV0lEVEgoX19XSURUSF9fKSAoKChfX1dJRFRIX18pID09IEZNQ19OT1JTUkFNX01FTV9CVVNfV0lEVEhfOCkgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19XSURUSF9fKSA9PSBGTUNfTk9SU1JBTV9NRU1fQlVTX1dJRFRIXzE2KSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fV0lEVEhfXykgPT0gRk1DX05PUlNSQU1fTUVNX0JVU19XSURUSF8zMikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fV0lEVEhfXykgPT0gRk1DX05PUlNSQU1fTUVNX0JVU19XSURUSF8xNikgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1dJRFRIX18pID09IEZNQ19OT1JTUkFNX01FTV9CVVNfV0lEVEhfMzIpKQogI2RlZmluZSBJU19GTUNfUEFHRVNJWkUoX19TSVpFX18pICgoKF9fU0laRV9fKSA9PSBGTUNfUEFHRV9TSVpFX05PTkUpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NJWkVfXykgPT0gRk1DX1BBR0VfU0laRV8xMjgpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NJWkVfXykgPT0gRk1DX1BBR0VfU0laRV8yNTYpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NJWkVfXykgPT0gRk1DX1BBR0VfU0laRV81MTIpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NJWkVfXykgPT0gRk1DX1BBR0VfU0laRV8xMDI0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NJWkVfXykgPT0gRk1DX1BBR0VfU0laRV8xMjgpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NJWkVfXykgPT0gRk1DX1BBR0VfU0laRV8yNTYpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NJWkVfXykgPT0gRk1DX1BBR0VfU0laRV81MTIpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NJWkVfXykgPT0gRk1DX1BBR0VfU0laRV8xMDI0KSkKICNkZWZpbmUgSVNfRk1DX1dSSVRFX0ZJRk8oX19GSUZPX18pICgoKF9fRklGT19fKSA9PSBGTUNfV1JJVEVfRklGT19ESVNBQkxFKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0ZJRk9fXykgPT0gRk1DX1dSSVRFX0ZJRk9fRU5BQkxFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRklGT19fKSA9PSBGTUNfV1JJVEVfRklGT19FTkFCTEUpKQogI2RlZmluZSBJU19GTUNfQUNDRVNTX01PREUoX19NT0RFX18pICgoKF9fTU9ERV9fKSA9PSBGTUNfQUNDRVNTX01PREVfQSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTU9ERV9fKSA9PSBGTUNfQUNDRVNTX01PREVfQikgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTU9ERV9fKSA9PSBGTUNfQUNDRVNTX01PREVfQykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTU9ERV9fKSA9PSBGTUNfQUNDRVNTX01PREVfRCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NT0RFX18pID09IEZNQ19BQ0NFU1NfTU9ERV9CKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NT0RFX18pID09IEZNQ19BQ0NFU1NfTU9ERV9DKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NT0RFX18pID09IEZNQ19BQ0NFU1NfTU9ERV9EKSkKICNkZWZpbmUgSVNfRk1DX05CTF9TRVRVUFRJTUUoX19OQkxfXykgKCgoX19OQkxfXykgPT0gRk1DX05CTF9TRVRVUFRJTUVfMCkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX05CTF9fKSA9PSBGTUNfTkJMX1NFVFVQVElNRV8xKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTkJMX18pID09IEZNQ19OQkxfU0VUVVBUSU1FXzIpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19OQkxfXykgPT0gRk1DX05CTF9TRVRVUFRJTUVfMykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTkJMX18pID09IEZNQ19OQkxfU0VUVVBUSU1FXzEpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19OQkxfXykgPT0gRk1DX05CTF9TRVRVUFRJTUVfMikgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX05CTF9fKSA9PSBGTUNfTkJMX1NFVFVQVElNRV8zKSkKICNkZWZpbmUgSVNfRk1DX0JVUlNUTU9ERShfX1NUQVRFX18pICgoKF9fU1RBVEVfXykgPT0gRk1DX0JVUlNUX0FDQ0VTU19NT0RFX0RJU0FCTEUpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU1RBVEVfXykgPT0gRk1DX0JVUlNUX0FDQ0VTU19NT0RFX0VOQUJMRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NUQVRFX18pID09IEZNQ19CVVJTVF9BQ0NFU1NfTU9ERV9FTkFCTEUpKQogI2RlZmluZSBJU19GTUNfV0FJVF9QT0xBUklUWShfX1BPTEFSSVRZX18pICgoKF9fUE9MQVJJVFlfXykgPT0gRk1DX1dBSVRfU0lHTkFMX1BPTEFSSVRZX0xPVykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9MQVJJVFlfXykgPT0gRk1DX1dBSVRfU0lHTkFMX1BPTEFSSVRZX0hJR0gpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9MQVJJVFlfXykgPT0gRk1DX1dBSVRfU0lHTkFMX1BPTEFSSVRZX0hJR0gpKQogI2RlZmluZSBJU19GTUNfV0FJVF9TSUdOQUxfQUNUSVZFKF9fQUNUSVZFX18pICgoKF9fQUNUSVZFX18pID09IEZNQ19XQUlUX1RJTUlOR19CRUZPUkVfV1MpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0FDVElWRV9fKSA9PSBGTUNfV0FJVF9USU1JTkdfRFVSSU5HX1dTKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0FDVElWRV9fKSA9PSBGTUNfV0FJVF9USU1JTkdfRFVSSU5HX1dTKSkKICNkZWZpbmUgSVNfRk1DX1dSSVRFX09QRVJBVElPTihfX09QRVJBVElPTl9fKSAoKChfX09QRVJBVElPTl9fKSA9PSBGTUNfV1JJVEVfT1BFUkFUSU9OX0RJU0FCTEUpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX09QRVJBVElPTl9fKSA9PSBGTUNfV1JJVEVfT1BFUkFUSU9OX0VOQUJMRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19PUEVSQVRJT05fXykgPT0gRk1DX1dSSVRFX09QRVJBVElPTl9FTkFCTEUpKQogI2RlZmluZSBJU19GTUNfV0FJVEVfU0lHTkFMKF9fU0lHTkFMX18pICgoKF9fU0lHTkFMX18pID09IEZNQ19XQUlUX1NJR05BTF9ESVNBQkxFKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TSUdOQUxfXykgPT0gRk1DX1dBSVRfU0lHTkFMX0VOQUJMRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TSUdOQUxfXykgPT0gRk1DX1dBSVRfU0lHTkFMX0VOQUJMRSkpCiAjZGVmaW5lIElTX0ZNQ19FWFRFTkRFRF9NT0RFKF9fTU9ERV9fKSAoKChfX01PREVfXykgPT0gRk1DX0VYVEVOREVEX01PREVfRElTQUJMRSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NT0RFX18pID09IEZNQ19FWFRFTkRFRF9NT0RFX0VOQUJMRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gRk1DX0VYVEVOREVEX01PREVfRU5BQkxFKSkKICNkZWZpbmUgSVNfRk1DX0FTWU5XQUlUKF9fU1RBVEVfXykgKCgoX19TVEFURV9fKSA9PSBGTUNfQVNZTkNIUk9OT1VTX1dBSVRfRElTQUJMRSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NUQVRFX18pID09IEZNQ19BU1lOQ0hST05PVVNfV0FJVF9FTkFCTEUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NUQVRFX18pID09IEZNQ19BU1lOQ0hST05PVVNfV0FJVF9FTkFCTEUpKQogI2RlZmluZSBJU19GTUNfREFUQV9MQVRFTkNZKF9fTEFURU5DWV9fKSAoKChfX0xBVEVOQ1lfXykgPiAxVSkgJiYgKChfX0xBVEVOQ1lfXykgPD0gMTdVKSkKICNkZWZpbmUgSVNfRk1DX1dSSVRFX0JVUlNUKF9fQlVSU1RfXykgKCgoX19CVVJTVF9fKSA9PSBGTUNfV1JJVEVfQlVSU1RfRElTQUJMRSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0JVUlNUX18pID09IEZNQ19XUklURV9CVVJTVF9FTkFCTEUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0JVUlNUX18pID09IEZNQ19XUklURV9CVVJTVF9FTkFCTEUpKQogI2RlZmluZSBJU19GTUNfQ09OVElOT1VTX0NMT0NLKF9fQ0NMT0NLX18pICgoKF9fQ0NMT0NLX18pID09IEZNQ19DT05USU5VT1VTX0NMT0NLX1NZTkNfT05MWSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0NMT0NLX18pID09IEZNQ19DT05USU5VT1VTX0NMT0NLX1NZTkNfQVNZTkMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0NMT0NLX18pID09IEZNQ19DT05USU5VT1VTX0NMT0NLX1NZTkNfQVNZTkMpKQogI2RlZmluZSBJU19GTUNfQUREUkVTU19TRVRVUF9USU1FKF9fVElNRV9fKSAoKF9fVElNRV9fKSA8PSAxNVUpCiAjZGVmaW5lIElTX0ZNQ19BRERSRVNTX0hPTERfVElNRShfX1RJTUVfXykgKCgoX19USU1FX18pID4gMFUpICYmICgoX19USU1FX18pIDw9IDE1VSkpCiAjZGVmaW5lIElTX0ZNQ19EQVRBU0VUVVBfVElNRShfX1RJTUVfXykgKCgoX19USU1FX18pID4gMFUpICYmICgoX19USU1FX18pIDw9IDI1NVUpKQpAQCAtOTksMTggKzk5LDE4IEBACiAKICNkZWZpbmUgSVNfRk1DX05BTkRfQkFOSyhfX0JBTktfXykgKChfX0JBTktfXykgPT0gRk1DX05BTkRfQkFOSzMpCiAjZGVmaW5lIElTX0ZNQ19XQUlUX0ZFQVRVUkUoX19GRUFUVVJFX18pICgoKF9fRkVBVFVSRV9fKSA9PSBGTUNfTkFORF9XQUlUX0ZFQVRVUkVfRElTQUJMRSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0ZFQVRVUkVfXykgPT0gRk1DX05BTkRfV0FJVF9GRUFUVVJFX0VOQUJMRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRkVBVFVSRV9fKSA9PSBGTUNfTkFORF9XQUlUX0ZFQVRVUkVfRU5BQkxFKSkKICNkZWZpbmUgSVNfRk1DX05BTkRfTUVNT1JZX1dJRFRIKF9fV0lEVEhfXykgKCgoX19XSURUSF9fKSA9PSBGTUNfTkFORF9NRU1fQlVTX1dJRFRIXzgpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19XSURUSF9fKSA9PSBGTUNfTkFORF9NRU1fQlVTX1dJRFRIXzE2KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19XSURUSF9fKSA9PSBGTUNfTkFORF9NRU1fQlVTX1dJRFRIXzE2KSkKICNkZWZpbmUgSVNfRk1DX0VDQ19TVEFURShfX1NUQVRFX18pICgoKF9fU1RBVEVfXykgPT0gRk1DX05BTkRfRUNDX0RJU0FCTEUpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU1RBVEVfXykgPT0gRk1DX05BTkRfRUNDX0VOQUJMRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NUQVRFX18pID09IEZNQ19OQU5EX0VDQ19FTkFCTEUpKQogCiAjZGVmaW5lIElTX0ZNQ19FQ0NQQUdFX1NJWkUoX19TSVpFX18pICgoKF9fU0laRV9fKSA9PSBGTUNfTkFORF9FQ0NfUEFHRV9TSVpFXzI1NkJZVEUpICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0laRV9fKSA9PSBGTUNfTkFORF9FQ0NfUEFHRV9TSVpFXzUxMkJZVEUpICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0laRV9fKSA9PSBGTUNfTkFORF9FQ0NfUEFHRV9TSVpFXzEwMjRCWVRFKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0laRV9fKSA9PSBGTUNfTkFORF9FQ0NfUEFHRV9TSVpFXzIwNDhCWVRFKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0laRV9fKSA9PSBGTUNfTkFORF9FQ0NfUEFHRV9TSVpFXzQwOTZCWVRFKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0laRV9fKSA9PSBGTUNfTkFORF9FQ0NfUEFHRV9TSVpFXzgxOTJCWVRFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TSVpFX18pID09IEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfNTEyQllURSkgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TSVpFX18pID09IEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfMTAyNEJZVEUpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TSVpFX18pID09IEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfMjA0OEJZVEUpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TSVpFX18pID09IEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfNDA5NkJZVEUpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TSVpFX18pID09IEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfODE5MkJZVEUpKQogI2RlZmluZSBJU19GTUNfVENMUl9USU1FKF9fVElNRV9fKSAoKF9fVElNRV9fKSA8PSAyNTVVKQogI2RlZmluZSBJU19GTUNfVEFSX1RJTUUoX19USU1FX18pICgoX19USU1FX18pIDw9IDI1NVUpCiAjZGVmaW5lIElTX0ZNQ19TRVRVUF9USU1FKF9fVElNRV9fKSAoKF9fVElNRV9fKSA8PSAyNTRVKQpAQCAtMTQ0LDc1ICsxNDQsNzUgQEAKIHR5cGVkZWYgc3RydWN0CiB7CiAgIHVpbnQzMl90IE5TQmFuazsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBOT1JTUkFNIG1lbW9yeSBkZXZpY2UgdGhhdCB3aWxsIGJlIHVzZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGTUNfTk9SU1JBTV9CYW5rICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZNQ19OT1JTUkFNX0JhbmsgICAgICAgICAgICAgICAgICAqLwogCiAgIHVpbnQzMl90IERhdGFBZGRyZXNzTXV4OyAgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGFkZHJlc3MgYW5kIGRhdGEgdmFsdWVzIGFyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxleGVkIG9uIHRoZSBkYXRhIGJ1cyBvciBub3QuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGTUNfRGF0YV9BZGRyZXNzX0J1c19NdWx0aXBsZXhpbmcgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZNQ19EYXRhX0FkZHJlc3NfQnVzX011bHRpcGxleGluZyAqLwogCiAgIHVpbnQzMl90IE1lbW9yeVR5cGU7ICAgICAgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSB0eXBlIG9mIGV4dGVybmFsIG1lbW9yeSBhdHRhY2hlZCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb3JyZXNwb25kaW5nIG1lbW9yeSBkZXZpY2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGTUNfTWVtb3J5X1R5cGUgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZNQ19NZW1vcnlfVHlwZSAgICAgICAgICAgICAgICAgICAqLwogCiAgIHVpbnQzMl90IE1lbW9yeURhdGFXaWR0aDsgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBleHRlcm5hbCBtZW1vcnkgZGV2aWNlIHdpZHRoLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRk1DX05PUlNSQU1fRGF0YV9XaWR0aCAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGTUNfTk9SU1JBTV9EYXRhX1dpZHRoICAgICAgICAgICAgKi8KIAogICB1aW50MzJfdCBCdXJzdEFjY2Vzc01vZGU7ICAgICAgICAgICAgICAvKiE8IEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGJ1cnN0IGFjY2VzcyBtb2RlIGZvciBGbGFzaCBtZW1vcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQgb25seSB3aXRoIHN5bmNocm9ub3VzIGJ1cnN0IEZsYXNoIG1lbW9yaWVzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRk1DX0J1cnN0X0FjY2Vzc19Nb2RlICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGTUNfQnVyc3RfQWNjZXNzX01vZGUgICAgICAgICAgICAgKi8KIAogICB1aW50MzJfdCBXYWl0U2lnbmFsUG9sYXJpdHk7ICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgd2FpdCBzaWduYWwgcG9sYXJpdHksIHZhbGlkIG9ubHkgd2hlbiBhY2Nlc3NpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgRmxhc2ggbWVtb3J5IGluIGJ1cnN0IG1vZGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGTUNfV2FpdF9TaWduYWxfUG9sYXJpdHkgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZNQ19XYWl0X1NpZ25hbF9Qb2xhcml0eSAgICAgICAgICAqLwogCiAgIHVpbnQzMl90IFdhaXRTaWduYWxBY3RpdmU7ICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIGlmIHRoZSB3YWl0IHNpZ25hbCBpcyBhc3NlcnRlZCBieSB0aGUgbWVtb3J5IG9uZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrIGN5Y2xlIGJlZm9yZSB0aGUgd2FpdCBzdGF0ZSBvciBkdXJpbmcgdGhlIHdhaXQgc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQgb25seSB3aGVuIGFjY2Vzc2luZyBtZW1vcmllcyBpbiBidXJzdCBtb2RlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRk1DX1dhaXRfVGltaW5nICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGTUNfV2FpdF9UaW1pbmcgICAgICAgICAgICAgICAgICAgKi8KIAogICB1aW50MzJfdCBXcml0ZU9wZXJhdGlvbjsgICAgICAgICAgICAgICAvKiE8IEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHdyaXRlIG9wZXJhdGlvbiBpbiB0aGUgc2VsZWN0ZWQgZGV2aWNlIGJ5IHRoZSBGTUMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGTUNfV3JpdGVfT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZNQ19Xcml0ZV9PcGVyYXRpb24gICAgICAgICAgICAgICAqLwogCiAgIHVpbnQzMl90IFdhaXRTaWduYWw7ICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgd2FpdCBzdGF0ZSBpbnNlcnRpb24gdmlhIHdhaXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwsIHZhbGlkIGZvciBGbGFzaCBtZW1vcnkgYWNjZXNzIGluIGJ1cnN0IG1vZGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGTUNfV2FpdF9TaWduYWwgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZNQ19XYWl0X1NpZ25hbCAgICAgICAgICAgICAgICAgICAqLwogCiAgIHVpbnQzMl90IEV4dGVuZGVkTW9kZTsgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZXh0ZW5kZWQgbW9kZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZNQ19FeHRlbmRlZF9Nb2RlICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRk1DX0V4dGVuZGVkX01vZGUgICAgICAgICAgICAgICAgICovCiAKICAgdWludDMyX3QgQXN5bmNocm9ub3VzV2FpdDsgICAgICAgICAgICAgLyohPCBFbmFibGVzIG9yIGRpc2FibGVzIHdhaXQgc2lnbmFsIGR1cmluZyBhc3luY2hyb25vdXMgdHJhbnNmZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkIG9ubHkgd2l0aCBhc3luY2hyb25vdXMgRmxhc2ggbWVtb3JpZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGTUNfQXN5bmNocm9ub3VzV2FpdCAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZNQ19Bc3luY2hyb25vdXNXYWl0ICAgICAgICAgICAgICAqLwogCiAgIHVpbnQzMl90IFdyaXRlQnVyc3Q7ICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgd3JpdGUgYnVyc3Qgb3BlcmF0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRk1DX1dyaXRlX0J1cnN0ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGTUNfV3JpdGVfQnVyc3QgICAgICAgICAgICAgICAgICAgKi8KIAogICB1aW50MzJfdCBDb250aW51b3VzQ2xvY2s7ICAgICAgICAgICAgICAvKiE8IEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIEZNQyBjbG9jayBvdXRwdXQgdG8gZXh0ZXJuYWwgbWVtb3J5IGRldmljZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgb25seSBlbmFibGVkIHRocm91Z2ggdGhlIEZNQ19CQ1IxIHJlZ2lzdGVyLCBhbmQgZG9uJ3QgY2FyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggRk1DX0JDUjIuLjQgcmVnaXN0ZXJzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRk1DX0NvbnRpbm91c19DbG9jayAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgb25seSBlbmFibGVkIHRocm91Z2ggdGhlIEZNQ19CQ1IxIHJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBkb24ndCBjYXJlIHRocm91Z2ggRk1DX0JDUjIuLjQgcmVnaXN0ZXJzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRk1DX0NvbnRpbm91c19DbG9jayAgICAgICAgICAgICAgICovCiAKICAgdWludDMyX3QgV3JpdGVGaWZvOyAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSB3cml0ZSBGSUZPIHVzZWQgYnkgdGhlIEZNQyBjb250cm9sbGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIG9ubHkgZW5hYmxlZCB0aHJvdWdoIHRoZSBGTUNfQkNSMSByZWdpc3RlciwgYW5kIGRvbid0IGNhcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIEZNQ19CQ1IyLi40IHJlZ2lzdGVycy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZNQ19Xcml0ZV9GSUZPICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIG9ubHkgZW5hYmxlZCB0aHJvdWdoIHRoZSBGTUNfQkNSMSByZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZG9uJ3QgY2FyZSB0aHJvdWdoIEZNQ19CQ1IyLi40IHJlZ2lzdGVycy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZNQ19Xcml0ZV9GSUZPICAgICAgICAgICAgICAgICAgICAqLwogCiAgIHVpbnQzMl90IFBhZ2VTaXplOyAgICAgICAgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBtZW1vcnkgcGFnZSBzaXplLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRk1DX1BhZ2VfU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGTUNfUGFnZV9TaXplICAgICAgICAgICAgICAgICAgICAgKi8KIAogICB1aW50MzJfdCBOQkxTZXR1cFRpbWU7ICAgICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgTkJMIHNldHVwIHRpbWluZyBjbG9jayBjeWNsZSBudW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZNQ19CeXRlX0xhbmUgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRk1DX0J5dGVfTGFuZSAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgRnVuY3Rpb25hbFN0YXRlIE1heENoaXBTZWxlY3RQdWxzZTsgICAgLyohPCBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBtYXhpbXVtIGNoaXAgc2VsZWN0IHB1bHNlIG1hbmFnZW1lbnQgaW4gdGhpcyBOU0JhbmsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgUFNSQU0gcmVmcmVzaC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgc2V0IHRvIEVOQUJMRSBvciBESVNBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGdW5jdGlvbmFsU3RhdGUgTWF4Q2hpcFNlbGVjdFB1bHNlOyAgICAvKiE8IEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIG1heGltdW0gY2hpcCBzZWxlY3QgcHVsc2UgbWFuYWdlbWVudCBpbiB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNCYW5rIGZvciBQU1JBTSByZWZyZXNoLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBzZXQgdG8gRU5BQkxFIG9yIERJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgdWludDMyX3QgTWF4Q2hpcFNlbGVjdFB1bHNlVGltZTsgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG1heGltdW0gY2hpcCBzZWxlY3QgcHVsc2UgdGltZSBpbiBGTUNfQ0xLIGN5Y2xlcyBmb3Igc3luY2hyb25vdXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NlcyBhbmQgaW4gSENMSyBjeWNsZXMgZm9yIGFzeW5jaHJvbm91cyBhY2Nlc3NlcywKKyAgdWludDMyX3QgTWF4Q2hpcFNlbGVjdFB1bHNlVGltZTsgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG1heGltdW0gY2hpcCBzZWxlY3QgcHVsc2UgdGltZSBpbiBGTUNfQ0xLIGN5Y2xlcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbm91cyBhY2Nlc3NlcyBhbmQgaW4gSENMSyBjeWNsZXMgZm9yIGFzeW5jaHJvbm91cyBhY2Nlc3NlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCBvbmx5IGlmIE1heENoaXBTZWxlY3RQdWxzZSBpcyBFTkFCTEUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiBNaW5fRGF0YSA9IDEgYW5kIE1heF9EYXRhID0gNjU1MzUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGU6IFRoaXMgcGFyYW1ldGVyIGlzIGNvbW1vbiB0byBhbGwgTlNCYW5rLiAqLwotfUZNQ19OT1JTUkFNX0luaXRUeXBlRGVmOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlOiBUaGlzIHBhcmFtZXRlciBpcyBjb21tb24gdG8gYWxsIE5TQmFuay4gICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IEZNQ19OT1JTUkFNX0luaXRUeXBlRGVmOwogCiAvKioKICAgKiBAYnJpZWYgIEZNQyBOT1JTUkFNIFRpbWluZyBwYXJhbWV0ZXJzIHN0cnVjdHVyZSBkZWZpbml0aW9uCkBAIC0yMjIsNDUgKzIyMiw0NiBAQAogICB1aW50MzJfdCBBZGRyZXNzU2V0dXBUaW1lOyAgICAgICAgICAgICAvKiE8IERlZmluZXMgdGhlIG51bWJlciBvZiBIQ0xLIGN5Y2xlcyB0byBjb25maWd1cmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZHVyYXRpb24gb2YgdGhlIGFkZHJlc3Mgc2V0dXAgdGltZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIE1pbl9EYXRhID0gMCBhbmQgTWF4X0RhdGEgPSAxNS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZCB3aXRoIHN5bmNocm9ub3VzIE5PUiBGbGFzaCBtZW1vcmllcy4gICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkIHdpdGggc3luY2hyb25vdXMgTk9SIEZsYXNoIG1lbW9yaWVzLiAgICovCiAKICAgdWludDMyX3QgQWRkcmVzc0hvbGRUaW1lOyAgICAgICAgICAgICAgLyohPCBEZWZpbmVzIHRoZSBudW1iZXIgb2YgSENMSyBjeWNsZXMgdG8gY29uZmlndXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGR1cmF0aW9uIG9mIHRoZSBhZGRyZXNzIGhvbGQgdGltZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIE1pbl9EYXRhID0gMSBhbmQgTWF4X0RhdGEgPSAxNS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZCB3aXRoIHN5bmNocm9ub3VzIE5PUiBGbGFzaCBtZW1vcmllcy4gICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkIHdpdGggc3luY2hyb25vdXMgTk9SIEZsYXNoIG1lbW9yaWVzLiAgICovCiAKICAgdWludDMyX3QgRGF0YVNldHVwVGltZTsgICAgICAgICAgICAgICAgLyohPCBEZWZpbmVzIHRoZSBudW1iZXIgb2YgSENMSyBjeWNsZXMgdG8gY29uZmlndXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGR1cmF0aW9uIG9mIHRoZSBkYXRhIHNldHVwIHRpbWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiBNaW5fRGF0YSA9IDEgYW5kIE1heF9EYXRhID0gMjU1LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIFRoaXMgcGFyYW1ldGVyIGlzIHVzZWQgZm9yIFNSQU1zLCBST01zIGFuZCBhc3luY2hyb25vdXMgbXVsdGlwbGV4ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT1IgRmxhc2ggbWVtb3JpZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PUiBGbGFzaCBtZW1vcmllcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKICAgdWludDMyX3QgRGF0YUhvbGRUaW1lOyAgICAgICAgICAgICAgICAgLyohPCBEZWZpbmVzIHRoZSBudW1iZXIgb2YgSENMSyBjeWNsZXMgdG8gY29uZmlndXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGR1cmF0aW9uIG9mIHRoZSBkYXRhIGhvbGQgdGltZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIE1pbl9EYXRhID0gMCBhbmQgTWF4X0RhdGEgPSAzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIFRoaXMgcGFyYW1ldGVyIGlzIHVzZWQgZm9yIHVzZWQgaW4gYXN5bmNocm9ub3VzIGFjY2Vzc2VzLiAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgdXNlZCBpbiBhc3luY2hyb25vdXMgYWNjZXNzZXMuICAgICAgICAgKi8KIAogICB1aW50MzJfdCBCdXNUdXJuQXJvdW5kRHVyYXRpb247ICAgICAgICAvKiE8IERlZmluZXMgdGhlIG51bWJlciBvZiBIQ0xLIGN5Y2xlcyB0byBjb25maWd1cmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZHVyYXRpb24gb2YgdGhlIGJ1cyB0dXJuYXJvdW5kLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDE1LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIFRoaXMgcGFyYW1ldGVyIGlzIG9ubHkgdXNlZCBmb3IgbXVsdGlwbGV4ZWQgTk9SIEZsYXNoIG1lbW9yaWVzLiAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgVGhpcyBwYXJhbWV0ZXIgaXMgb25seSB1c2VkIGZvciBtdWx0aXBsZXhlZCBOT1IgRmxhc2ggbWVtb3JpZXMuICAgKi8KIAogICB1aW50MzJfdCBDTEtEaXZpc2lvbjsgICAgICAgICAgICAgICAgICAvKiE8IERlZmluZXMgdGhlIHBlcmlvZCBvZiBDTEsgY2xvY2sgb3V0cHV0IHNpZ25hbCwgZXhwcmVzc2VkIGluIG51bWJlciBvZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhDTEsgY3ljbGVzLiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIE1pbl9EYXRhID0gMiBhbmQgTWF4X0RhdGEgPSAxNi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQ0xLIGN5Y2xlcy4gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiBNaW5fRGF0YSA9IDIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4X0RhdGEgPSAxNi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZCBmb3IgYXN5bmNocm9ub3VzIE5PUiBGbGFzaCwgU1JBTSBvciBST00KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3Nlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKICAgdWludDMyX3QgRGF0YUxhdGVuY3k7ICAgICAgICAgICAgICAgICAgLyohPCBEZWZpbmVzIHRoZSBudW1iZXIgb2YgbWVtb3J5IGNsb2NrIGN5Y2xlcyB0byBpc3N1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBtZW1vcnkgYmVmb3JlIGdldHRpbmcgdGhlIGZpcnN0IGRhdGEuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBhcmFtZXRlciB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBtZW1vcnkgdHlwZSBhcyBzaG93biBiZWxvdzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEl0IG11c3QgYmUgc2V0IHRvIDAgaW4gY2FzZSBvZiBhIENSQU0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEl0IGlzIGRvbid0IGNhcmUgaW4gYXN5bmNocm9ub3VzIE5PUiwgU1JBTSBvciBST00gYWNjZXNzZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEl0IG1heSBhc3N1bWUgYSB2YWx1ZSBiZXR3ZWVuIE1pbl9EYXRhID0gMiBhbmQgTWF4X0RhdGEgPSAxNyBpbiBOT1IgRmxhc2ggbWVtb3JpZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggc3luY2hyb25vdXMgYnVyc3QgbW9kZSBlbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gSXQgbWF5IGFzc3VtZSBhIHZhbHVlIGJldHdlZW4gTWluX0RhdGEgPSAyIGFuZCBNYXhfRGF0YSA9IDE3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBOT1IgRmxhc2ggbWVtb3JpZXMgd2l0aCBzeW5jaHJvbm91cyBidXJzdCBtb2RlIGVuYWJsZSAgICAgICAgICAgICAgKi8KIAogICB1aW50MzJfdCBBY2Nlc3NNb2RlOyAgICAgICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgYXN5bmNocm9ub3VzIGFjY2VzcyBtb2RlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRk1DX0FjY2Vzc19Nb2RlICAgICAgICAgICAgICAgICAgICAgICovCi19Rk1DX05PUlNSQU1fVGltaW5nVHlwZURlZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZNQ19BY2Nlc3NfTW9kZSAgICAgICAgICAgICAgICAgICAqLworfSBGTUNfTk9SU1JBTV9UaW1pbmdUeXBlRGVmOwogCiAvKioKICAgKiBAYnJpZWYgIEZNQyBOQU5EIENvbmZpZ3VyYXRpb24gU3RydWN0dXJlIGRlZmluaXRpb24KQEAgLTI2OCwxOSArMjY5LDE5IEBACiB0eXBlZGVmIHN0cnVjdAogewogICB1aW50MzJfdCBOYW5kQmFuazsgICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgTkFORCBtZW1vcnkgZGV2aWNlIHRoYXQgd2lsbCBiZSB1c2VkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRk1DX05BTkRfQmFuayAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZNQ19OQU5EX0JhbmsgICAgICAgICAgICAgICAgICAqLwogCiAgIHVpbnQzMl90IFdhaXRmZWF0dXJlOyAgICAgICAgICAgIC8qITwgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgV2FpdCBmZWF0dXJlIGZvciB0aGUgTkFORCBNZW1vcnkgZGV2aWNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBGTUNfV2FpdF9mZWF0dXJlICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEByZWYgRk1DX1dhaXRfZmVhdHVyZSAgICAgICAgICAgICAqLwogCiAgIHVpbnQzMl90IE1lbW9yeURhdGFXaWR0aDsgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBleHRlcm5hbCBtZW1vcnkgZGV2aWNlIHdpZHRoLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBGTUNfTkFORF9EYXRhX1dpZHRoICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEByZWYgRk1DX05BTkRfRGF0YV9XaWR0aCAgICAgICAgICAqLwogCiAgIHVpbnQzMl90IEVjY0NvbXB1dGF0aW9uOyAgICAgICAgIC8qITwgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgRUNDIGNvbXB1dGF0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBGTUNfRUNDICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEByZWYgRk1DX0VDQyAgICAgICAgICAgICAgICAgICAgICAqLwogCiAgIHVpbnQzMl90IEVDQ1BhZ2VTaXplOyAgICAgICAgICAgIC8qITwgRGVmaW5lcyB0aGUgcGFnZSBzaXplIGZvciB0aGUgZXh0ZW5kZWQgRUNDLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBGTUNfRUNDX1BhZ2VfU2l6ZSAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEByZWYgRk1DX0VDQ19QYWdlX1NpemUgICAgICAgICAgICAqLwogCiAgIHVpbnQzMl90IFRDTFJTZXR1cFRpbWU7ICAgICAgICAgIC8qITwgRGVmaW5lcyB0aGUgbnVtYmVyIG9mIEhDTEsgY3ljbGVzIHRvIGNvbmZpZ3VyZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheSBiZXR3ZWVuIENMRSBsb3cgYW5kIFJFIGxvdy4KQEAgLTI4OSw3ICsyOTAsNyBAQAogICB1aW50MzJfdCBUQVJTZXR1cFRpbWU7ICAgICAgICAgICAvKiE8IERlZmluZXMgdGhlIG51bWJlciBvZiBIQ0xLIGN5Y2xlcyB0byBjb25maWd1cmUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXkgYmV0d2VlbiBBTEUgbG93IGFuZCBSRSBsb3cuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDI1NSAqLwotfUZNQ19OQU5EX0luaXRUeXBlRGVmOworfSBGTUNfTkFORF9Jbml0VHlwZURlZjsKIAogLyoqCiAgICogQGJyaWVmICBGTUMgTkFORCBUaW1pbmcgcGFyYW1ldGVycyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbgpAQCAtMzIwLDcgKzMyMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlIGFjY2VzcyB0byBjb21tb24vQXR0cmlidXRlIG9yIEkvTyBtZW1vcnkgc3BhY2UgKGRlcGVuZGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgbWVtb3J5IHNwYWNlIHRpbWluZyB0byBiZSBjb25maWd1cmVkKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDI1NCAgICovCi19Rk1DX05BTkRfUENDX1RpbWluZ1R5cGVEZWY7Cit9IEZNQ19OQU5EX1BDQ19UaW1pbmdUeXBlRGVmOwogCiAKIC8qKgpAQCAtMzM5LDEwICszNDAsMTAgQEAKIC8qKiBAZGVmZ3JvdXAgRk1DX05PUlNSQU1fQmFuayBGTUMgTk9SL1NSQU0gQmFuawogICAqIEB7CiAgICovCi0jZGVmaW5lIEZNQ19OT1JTUkFNX0JBTksxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApCi0jZGVmaW5lIEZNQ19OT1JTUkFNX0JBTksyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpCi0jZGVmaW5lIEZNQ19OT1JTUkFNX0JBTkszICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpCi0jZGVmaW5lIEZNQ19OT1JTUkFNX0JBTks0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDYpCisjZGVmaW5lIEZNQ19OT1JTUkFNX0JBTksxICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMFUpCisjZGVmaW5lIEZNQ19OT1JTUkFNX0JBTksyICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMlUpCisjZGVmaW5lIEZNQ19OT1JTUkFNX0JBTkszICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwNFUpCisjZGVmaW5lIEZNQ19OT1JTUkFNX0JBTks0ICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwNlUpCiAvKioKICAgKiBAfQogICAqLwpAQCAtMzUwLDggKzM1MSw4IEBACiAvKiogQGRlZmdyb3VwIEZNQ19EYXRhX0FkZHJlc3NfQnVzX011bHRpcGxleGluZyBGTUMgRGF0YSBBZGRyZXNzIEJ1cyBNdWx0aXBsZXhpbmcKICAgKiBAewogICAqLwotI2RlZmluZSBGTUNfREFUQV9BRERSRVNTX01VWF9ESVNBQkxFICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQotI2RlZmluZSBGTUNfREFUQV9BRERSRVNTX01VWF9FTkFCTEUgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQorI2RlZmluZSBGTUNfREFUQV9BRERSRVNTX01VWF9ESVNBQkxFICAgICAgICAgICAgKDB4MDAwMDAwMDBVKQorI2RlZmluZSBGTUNfREFUQV9BRERSRVNTX01VWF9FTkFCTEUgICAgICAgICAgICAgKDB4MDAwMDAwMDJVKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTM1OSw5ICszNjAsOSBAQAogLyoqIEBkZWZncm91cCBGTUNfTWVtb3J5X1R5cGUgRk1DIE1lbW9yeSBUeXBlCiAgICogQHsKICAgKi8KLSNkZWZpbmUgRk1DX01FTU9SWV9UWVBFX1NSQU0gICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkKLSNkZWZpbmUgRk1DX01FTU9SWV9UWVBFX1BTUkFNICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkKLSNkZWZpbmUgRk1DX01FTU9SWV9UWVBFX05PUiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkKKyNkZWZpbmUgRk1DX01FTU9SWV9UWVBFX1NSQU0gICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAwVSkKKyNkZWZpbmUgRk1DX01FTU9SWV9UWVBFX1BTUkFNICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDA0VSkKKyNkZWZpbmUgRk1DX01FTU9SWV9UWVBFX05PUiAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDA4VSkKIC8qKgogICAqIEB9CiAgICovCkBAIC0zNjksOSArMzcwLDkgQEAKIC8qKiBAZGVmZ3JvdXAgRk1DX05PUlNSQU1fRGF0YV9XaWR0aCBGTUMgTk9SU1JBTSBEYXRhIFdpZHRoCiAgICogQHsKICAgKi8KLSNkZWZpbmUgRk1DX05PUlNSQU1fTUVNX0JVU19XSURUSF84ICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkKLSNkZWZpbmUgRk1DX05PUlNSQU1fTUVNX0JVU19XSURUSF8xNiAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkKLSNkZWZpbmUgRk1DX05PUlNSQU1fTUVNX0JVU19XSURUSF8zMiAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkKKyNkZWZpbmUgRk1DX05PUlNSQU1fTUVNX0JVU19XSURUSF84ICAgICAgICAgICAgICgweDAwMDAwMDAwVSkKKyNkZWZpbmUgRk1DX05PUlNSQU1fTUVNX0JVU19XSURUSF8xNiAgICAgICAgICAgICgweDAwMDAwMDEwVSkKKyNkZWZpbmUgRk1DX05PUlNSQU1fTUVNX0JVU19XSURUSF8zMiAgICAgICAgICAgICgweDAwMDAwMDIwVSkKIC8qKgogICAqIEB9CiAgICovCkBAIC0zNzksOCArMzgwLDggQEAKIC8qKiBAZGVmZ3JvdXAgRk1DX05PUlNSQU1fRmxhc2hfQWNjZXNzIEZNQyBOT1IvU1JBTSBGbGFzaCBBY2Nlc3MKICAgKiBAewogICAqLwotI2RlZmluZSBGTUNfTk9SU1JBTV9GTEFTSF9BQ0NFU1NfRU5BQkxFICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQotI2RlZmluZSBGTUNfTk9SU1JBTV9GTEFTSF9BQ0NFU1NfRElTQUJMRSAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQorI2RlZmluZSBGTUNfTk9SU1JBTV9GTEFTSF9BQ0NFU1NfRU5BQkxFICAgICAgICAgKDB4MDAwMDAwNDBVKQorI2RlZmluZSBGTUNfTk9SU1JBTV9GTEFTSF9BQ0NFU1NfRElTQUJMRSAgICAgICAgKDB4MDAwMDAwMDBVKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTM4OCw4ICszODksOCBAQAogLyoqIEBkZWZncm91cCBGTUNfQnVyc3RfQWNjZXNzX01vZGUgRk1DIEJ1cnN0IEFjY2VzcyBNb2RlCiAgICogQHsKICAgKi8KLSNkZWZpbmUgRk1DX0JVUlNUX0FDQ0VTU19NT0RFX0RJU0FCTEUgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkKLSNkZWZpbmUgRk1DX0JVUlNUX0FDQ0VTU19NT0RFX0VOQUJMRSAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkKKyNkZWZpbmUgRk1DX0JVUlNUX0FDQ0VTU19NT0RFX0RJU0FCTEUgICAgICAgICAgICgweDAwMDAwMDAwVSkKKyNkZWZpbmUgRk1DX0JVUlNUX0FDQ0VTU19NT0RFX0VOQUJMRSAgICAgICAgICAgICgweDAwMDAwMTAwVSkKIC8qKgogICAqIEB9CiAgICovCkBAIC0zOTcsOCArMzk4LDggQEAKIC8qKiBAZGVmZ3JvdXAgRk1DX1dhaXRfU2lnbmFsX1BvbGFyaXR5IEZNQyBXYWl0IFNpZ25hbCBQb2xhcml0eQogICAqIEB7CiAgICovCi0jZGVmaW5lIEZNQ19XQUlUX1NJR05BTF9QT0xBUklUWV9MT1cgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApCi0jZGVmaW5lIEZNQ19XQUlUX1NJR05BTF9QT0xBUklUWV9ISUdIICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApCisjZGVmaW5lIEZNQ19XQUlUX1NJR05BTF9QT0xBUklUWV9MT1cgICAgICAgICAgICAoMHgwMDAwMDAwMFUpCisjZGVmaW5lIEZNQ19XQUlUX1NJR05BTF9QT0xBUklUWV9ISUdIICAgICAgICAgICAoMHgwMDAwMDIwMFUpCiAvKioKICAgKiBAfQogICAqLwpAQCAtNDA2LDggKzQwNyw4IEBACiAvKiogQGRlZmdyb3VwIEZNQ19XYWl0X1RpbWluZyBGTUMgV2FpdCBUaW1pbmcKICAgKiBAewogICAqLwotI2RlZmluZSBGTUNfV0FJVF9USU1JTkdfQkVGT1JFX1dTICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQotI2RlZmluZSBGTUNfV0FJVF9USU1JTkdfRFVSSU5HX1dTICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKQorI2RlZmluZSBGTUNfV0FJVF9USU1JTkdfQkVGT1JFX1dTICAgICAgICAgICAgICAgKDB4MDAwMDAwMDBVKQorI2RlZmluZSBGTUNfV0FJVF9USU1JTkdfRFVSSU5HX1dTICAgICAgICAgICAgICAgKDB4MDAwMDA4MDBVKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTQxNSw4ICs0MTYsOCBAQAogLyoqIEBkZWZncm91cCBGTUNfV3JpdGVfT3BlcmF0aW9uIEZNQyBXcml0ZSBPcGVyYXRpb24KICAgKiBAewogICAqLwotI2RlZmluZSBGTUNfV1JJVEVfT1BFUkFUSU9OX0RJU0FCTEUgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQotI2RlZmluZSBGTUNfV1JJVEVfT1BFUkFUSU9OX0VOQUJMRSAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKQorI2RlZmluZSBGTUNfV1JJVEVfT1BFUkFUSU9OX0RJU0FCTEUgICAgICAgICAgICAgKDB4MDAwMDAwMDBVKQorI2RlZmluZSBGTUNfV1JJVEVfT1BFUkFUSU9OX0VOQUJMRSAgICAgICAgICAgICAgKDB4MDAwMDEwMDBVKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTQyNCw4ICs0MjUsOCBAQAogLyoqIEBkZWZncm91cCBGTUNfV2FpdF9TaWduYWwgRk1DIFdhaXQgU2lnbmFsCiAgICogQHsKICAgKi8KLSNkZWZpbmUgRk1DX1dBSVRfU0lHTkFMX0RJU0FCTEUgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkKLSNkZWZpbmUgRk1DX1dBSVRfU0lHTkFMX0VOQUJMRSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkKKyNkZWZpbmUgRk1DX1dBSVRfU0lHTkFMX0RJU0FCTEUgICAgICAgICAgICAgICAgICgweDAwMDAwMDAwVSkKKyNkZWZpbmUgRk1DX1dBSVRfU0lHTkFMX0VOQUJMRSAgICAgICAgICAgICAgICAgICgweDAwMDAyMDAwVSkKIC8qKgogICAqIEB9CiAgICovCkBAIC00MzMsOCArNDM0LDggQEAKIC8qKiBAZGVmZ3JvdXAgRk1DX0V4dGVuZGVkX01vZGUgRk1DIEV4dGVuZGVkIE1vZGUKICAgKiBAewogICAqLwotI2RlZmluZSBGTUNfRVhURU5ERURfTU9ERV9ESVNBQkxFICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQotI2RlZmluZSBGTUNfRVhURU5ERURfTU9ERV9FTkFCTEUgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKQorI2RlZmluZSBGTUNfRVhURU5ERURfTU9ERV9ESVNBQkxFICAgICAgICAgICAgICAgKDB4MDAwMDAwMDBVKQorI2RlZmluZSBGTUNfRVhURU5ERURfTU9ERV9FTkFCTEUgICAgICAgICAgICAgICAgKDB4MDAwMDQwMDBVKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTQ0Miw4ICs0NDMsOCBAQAogLyoqIEBkZWZncm91cCBGTUNfQXN5bmNocm9ub3VzV2FpdCBGTUMgQXN5bmNocm9ub3VzIFdhaXQKICAgKiBAewogICAqLwotI2RlZmluZSBGTUNfQVNZTkNIUk9OT1VTX1dBSVRfRElTQUJMRSAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQotI2RlZmluZSBGTUNfQVNZTkNIUk9OT1VTX1dBSVRfRU5BQkxFICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKQorI2RlZmluZSBGTUNfQVNZTkNIUk9OT1VTX1dBSVRfRElTQUJMRSAgICAgICAgICAgKDB4MDAwMDAwMDBVKQorI2RlZmluZSBGTUNfQVNZTkNIUk9OT1VTX1dBSVRfRU5BQkxFICAgICAgICAgICAgKDB4MDAwMDgwMDBVKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTQ1MSwxMiArNDUyLDEyIEBACiAvKiogQGRlZmdyb3VwIEZNQ19QYWdlX1NpemUgRk1DIFBhZ2UgU2l6ZQogICAqIEB7CiAgICovCi0jZGVmaW5lIEZNQ19QQUdFX1NJWkVfTk9ORSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApCi0jZGVmaW5lIEZNQ19QQUdFX1NJWkVfMTI4ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KUZNQ19CQ1J4X0NQU0laRV8wKQotI2RlZmluZSBGTUNfUEFHRV9TSVpFXzI1NiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClGTUNfQkNSeF9DUFNJWkVfMSkKLSNkZWZpbmUgRk1DX1BBR0VfU0laRV81MTIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpKEZNQ19CQ1J4X0NQU0laRV8wXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBGTUNfQkNSeF9DUFNJWkVfMSkpCi0jZGVmaW5lIEZNQ19QQUdFX1NJWkVfMTAyNCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KUZNQ19CQ1J4X0NQU0laRV8yKQorI2RlZmluZSBGTUNfUEFHRV9TSVpFX05PTkUgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDBVKQorI2RlZmluZSBGTUNfUEFHRV9TSVpFXzEyOCAgICAgICAgICAgICAgICAgICAgICAgRk1DX0JDUnhfQ1BTSVpFXzAKKyNkZWZpbmUgRk1DX1BBR0VfU0laRV8yNTYgICAgICAgICAgICAgICAgICAgICAgIEZNQ19CQ1J4X0NQU0laRV8xCisjZGVmaW5lIEZNQ19QQUdFX1NJWkVfNTEyICAgICAgICAgICAgICAgICAgICAgICAoRk1DX0JDUnhfQ1BTSVpFXzBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBGTUNfQkNSeF9DUFNJWkVfMSkKKyNkZWZpbmUgRk1DX1BBR0VfU0laRV8xMDI0ICAgICAgICAgICAgICAgICAgICAgIEZNQ19CQ1J4X0NQU0laRV8yCiAvKioKICAgKiBAfQogICAqLwpAQCAtNDY0LDggKzQ2NSw4IEBACiAvKiogQGRlZmdyb3VwIEZNQ19Xcml0ZV9CdXJzdCBGTUMgV3JpdGUgQnVyc3QKICAgKiBAewogICAqLwotI2RlZmluZSBGTUNfV1JJVEVfQlVSU1RfRElTQUJMRSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQotI2RlZmluZSBGTUNfV1JJVEVfQlVSU1RfRU5BQkxFICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKQorI2RlZmluZSBGTUNfV1JJVEVfQlVSU1RfRElTQUJMRSAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDBVKQorI2RlZmluZSBGTUNfV1JJVEVfQlVSU1RfRU5BQkxFICAgICAgICAgICAgICAgICAgKDB4MDAwODAwMDBVKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTQ3Myw4ICs0NzQsOCBAQAogLyoqIEBkZWZncm91cCBGTUNfQ29udGlub3VzX0Nsb2NrIEZNQyBDb250aW51b3VzIENsb2NrCiAgICogQHsKICAgKi8KLSNkZWZpbmUgRk1DX0NPTlRJTlVPVVNfQ0xPQ0tfU1lOQ19PTkxZICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkKLSNkZWZpbmUgRk1DX0NPTlRJTlVPVVNfQ0xPQ0tfU1lOQ19BU1lOQyAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkKKyNkZWZpbmUgRk1DX0NPTlRJTlVPVVNfQ0xPQ0tfU1lOQ19PTkxZICAgICAgICAgICgweDAwMDAwMDAwVSkKKyNkZWZpbmUgRk1DX0NPTlRJTlVPVVNfQ0xPQ0tfU1lOQ19BU1lOQyAgICAgICAgICgweDAwMTAwMDAwVSkKIC8qKgogICAqIEB9CiAgICovCkBAIC00ODIsMTkgKzQ4MywxOSBAQAogLyoqIEBkZWZncm91cCBGTUNfV3JpdGVfRklGTyBGTUMgV3JpdGUgRklGTwogICAqIEB7CiAgICovCi0jZGVmaW5lIEZNQ19XUklURV9GSUZPX0RJU0FCTEUgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KUZNQ19CQ1IxX1dGRElTKQotI2RlZmluZSBGTUNfV1JJVEVfRklGT19FTkFCTEUgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQorI2RlZmluZSBGTUNfV1JJVEVfRklGT19ESVNBQkxFICAgICAgICAgICAgICAgICAgRk1DX0JDUjFfV0ZESVMKKyNkZWZpbmUgRk1DX1dSSVRFX0ZJRk9fRU5BQkxFICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAwVSkKIC8qKgogICAqIEB9CiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgRk1DX0FjY2Vzc19Nb2RlIEZNQyBBY2Nlc3MgTW9kZQogICAqIEB7Ci0qLwotI2RlZmluZSBGTUNfQUNDRVNTX01PREVfQSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQotI2RlZmluZSBGTUNfQUNDRVNTX01PREVfQiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKQotI2RlZmluZSBGTUNfQUNDRVNTX01PREVfQyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKQotI2RlZmluZSBGTUNfQUNDRVNTX01PREVfRCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDMwMDAwMDAwKQorICAqLworI2RlZmluZSBGTUNfQUNDRVNTX01PREVfQSAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDBVKQorI2RlZmluZSBGTUNfQUNDRVNTX01PREVfQiAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMDAwMDBVKQorI2RlZmluZSBGTUNfQUNDRVNTX01PREVfQyAgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMDAwMDBVKQorI2RlZmluZSBGTUNfQUNDRVNTX01PREVfRCAgICAgICAgICAgICAgICAgICAgICAgKDB4MzAwMDAwMDBVKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTUwMiwxMCArNTAzLDEwIEBACiAvKiogQGRlZmdyb3VwIEZNQ19CeXRlX0xhbmUgRk1DIEJ5dGUgTGFuZShOQkwpIFNldHVwCiAgICogQHsKICAgKi8KLSNkZWZpbmUgRk1DX05CTF9TRVRVUFRJTUVfMCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkKLSNkZWZpbmUgRk1DX05CTF9TRVRVUFRJTUVfMSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkKLSNkZWZpbmUgRk1DX05CTF9TRVRVUFRJTUVfMiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkKLSNkZWZpbmUgRk1DX05CTF9TRVRVUFRJTUVfMyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMEMwMDAwMCkKKyNkZWZpbmUgRk1DX05CTF9TRVRVUFRJTUVfMCAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAwVSkKKyNkZWZpbmUgRk1DX05CTF9TRVRVUFRJTUVfMSAgICAgICAgICAgICAgICAgICAgICgweDAwNDAwMDAwVSkKKyNkZWZpbmUgRk1DX05CTF9TRVRVUFRJTUVfMiAgICAgICAgICAgICAgICAgICAgICgweDAwODAwMDAwVSkKKyNkZWZpbmUgRk1DX05CTF9TRVRVUFRJTUVfMyAgICAgICAgICAgICAgICAgICAgICgweDAwQzAwMDAwVSkKIC8qKgogICAqIEB9CiAgICovCkBAIC01MjEsNyArNTIyLDcgQEAKIC8qKiBAZGVmZ3JvdXAgRk1DX05BTkRfQmFuayBGTUMgTkFORCBCYW5rCiAgICogQHsKICAgKi8KLSNkZWZpbmUgRk1DX05BTkRfQkFOSzMgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkKKyNkZWZpbmUgRk1DX05BTkRfQkFOSzMgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMTAwVSkKIC8qKgogICAqIEB9CiAgICovCkBAIC01MjksOCArNTMwLDggQEAKIC8qKiBAZGVmZ3JvdXAgRk1DX1dhaXRfZmVhdHVyZSBGTUMgV2FpdCBmZWF0dXJlCiAgICogQHsKICAgKi8KLSNkZWZpbmUgRk1DX05BTkRfV0FJVF9GRUFUVVJFX0RJU0FCTEUgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkKLSNkZWZpbmUgRk1DX05BTkRfV0FJVF9GRUFUVVJFX0VOQUJMRSAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikKKyNkZWZpbmUgRk1DX05BTkRfV0FJVF9GRUFUVVJFX0RJU0FCTEUgICAgICAgICAgICgweDAwMDAwMDAwVSkKKyNkZWZpbmUgRk1DX05BTkRfV0FJVF9GRUFUVVJFX0VOQUJMRSAgICAgICAgICAgICgweDAwMDAwMDAyVSkKIC8qKgogICAqIEB9CiAgICovCkBAIC01MzgsNyArNTM5LDcgQEAKIC8qKiBAZGVmZ3JvdXAgRk1DX1BDUl9NZW1vcnlfVHlwZSBGTUMgUENSIE1lbW9yeSBUeXBlCiAgICogQHsKICAgKi8KLSNkZWZpbmUgRk1DX1BDUl9NRU1PUllfVFlQRV9OQU5EICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkKKyNkZWZpbmUgRk1DX1BDUl9NRU1PUllfVFlQRV9OQU5EICAgICAgICAgICAgICAgICgweDAwMDAwMDA4VSkKIC8qKgogICAqIEB9CiAgICovCkBAIC01NDYsOCArNTQ3LDggQEAKIC8qKiBAZGVmZ3JvdXAgRk1DX05BTkRfRGF0YV9XaWR0aCBGTUMgTkFORCBEYXRhIFdpZHRoCiAgICogQHsKICAgKi8KLSNkZWZpbmUgRk1DX05BTkRfTUVNX0JVU19XSURUSF84ICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkKLSNkZWZpbmUgRk1DX05BTkRfTUVNX0JVU19XSURUSF8xNiAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkKKyNkZWZpbmUgRk1DX05BTkRfTUVNX0JVU19XSURUSF84ICAgICAgICAgICAgICAgICgweDAwMDAwMDAwVSkKKyNkZWZpbmUgRk1DX05BTkRfTUVNX0JVU19XSURUSF8xNiAgICAgICAgICAgICAgICgweDAwMDAwMDEwVSkKIC8qKgogICAqIEB9CiAgICovCkBAIC01NTUsOCArNTU2LDggQEAKIC8qKiBAZGVmZ3JvdXAgRk1DX0VDQyBGTUMgRUNDCiAgICogQHsKICAgKi8KLSNkZWZpbmUgRk1DX05BTkRfRUNDX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkKLSNkZWZpbmUgRk1DX05BTkRfRUNDX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkKKyNkZWZpbmUgRk1DX05BTkRfRUNDX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAwVSkKKyNkZWZpbmUgRk1DX05BTkRfRUNDX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDQwVSkKIC8qKgogICAqIEB9CiAgICovCkBAIC01NjQsMTIgKzU2NSwxMiBAQAogLyoqIEBkZWZncm91cCBGTUNfRUNDX1BhZ2VfU2l6ZSBGTUMgRUNDIFBhZ2UgU2l6ZQogICAqIEB7CiAgICovCi0jZGVmaW5lIEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfMjU2QllURSAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApCi0jZGVmaW5lIEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfNTEyQllURSAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApCi0jZGVmaW5lIEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfMTAyNEJZVEUgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApCi0jZGVmaW5lIEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfMjA0OEJZVEUgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNjAwMDApCi0jZGVmaW5lIEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfNDA5NkJZVEUgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApCi0jZGVmaW5lIEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfODE5MkJZVEUgICAgICAgICAoKHVpbnQzMl90KTB4MDAwQTAwMDApCisjZGVmaW5lIEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfMjU2QllURSAgICAgICAgICAoMHgwMDAwMDAwMFUpCisjZGVmaW5lIEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfNTEyQllURSAgICAgICAgICAoMHgwMDAyMDAwMFUpCisjZGVmaW5lIEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfMTAyNEJZVEUgICAgICAgICAoMHgwMDA0MDAwMFUpCisjZGVmaW5lIEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfMjA0OEJZVEUgICAgICAgICAoMHgwMDA2MDAwMFUpCisjZGVmaW5lIEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfNDA5NkJZVEUgICAgICAgICAoMHgwMDA4MDAwMFUpCisjZGVmaW5lIEZNQ19OQU5EX0VDQ19QQUdFX1NJWkVfODE5MkJZVEUgICAgICAgICAoMHgwMDBBMDAwMFUpCiAvKioKICAgKiBAfQogICAqLwpAQCAtNTgyLDkgKzU4Myw5IEBACiAvKiogQGRlZmdyb3VwIEZNQ19MTF9JbnRlcnJ1cHRfZGVmaW5pdGlvbiBGTUMgTG93IExheWVyIEludGVycnVwdCBkZWZpbml0aW9uCiAgICogQHsKICAgKi8KLSNkZWZpbmUgRk1DX0lUX1JJU0lOR19FREdFICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkKLSNkZWZpbmUgRk1DX0lUX0xFVkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkKLSNkZWZpbmUgRk1DX0lUX0ZBTExJTkdfRURHRSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkKKyNkZWZpbmUgRk1DX0lUX1JJU0lOR19FREdFICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDA4VSkKKyNkZWZpbmUgRk1DX0lUX0xFVkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDEwVSkKKyNkZWZpbmUgRk1DX0lUX0ZBTExJTkdfRURHRSAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDIwVSkKIC8qKgogICAqIEB9CiAgICovCkBAIC01OTIsMTAgKzU5MywxMCBAQAogLyoqIEBkZWZncm91cCBGTUNfTExfRmxhZ19kZWZpbml0aW9uIEZNQyBMb3cgTGF5ZXIgRmxhZyBkZWZpbml0aW9uCiAgICogQHsKICAgKi8KLSNkZWZpbmUgRk1DX0ZMQUdfUklTSU5HX0VER0UgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkKLSNkZWZpbmUgRk1DX0ZMQUdfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikKLSNkZWZpbmUgRk1DX0ZMQUdfRkFMTElOR19FREdFICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkKLSNkZWZpbmUgRk1DX0ZMQUdfRkVNUFQgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkKKyNkZWZpbmUgRk1DX0ZMQUdfUklTSU5HX0VER0UgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAxVSkKKyNkZWZpbmUgRk1DX0ZMQUdfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAyVSkKKyNkZWZpbmUgRk1DX0ZMQUdfRkFMTElOR19FREdFICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDA0VSkKKyNkZWZpbmUgRk1DX0ZMQUdfRkVNUFQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDQwVSkKIC8qKgogICAqIEB9CiAgICovCkBAIC02MjQsNyArNjI1LDcgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19GTUNfTk9SU1JBTV9FTkFCTEUoX19JTlNUQU5DRV9fLCBfX0JBTktfXykgICgoX19JTlNUQU5DRV9fKS0+QlRDUlsoX19CQU5LX18pXVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8PSBGTUNfQkNSeF9NQktFTikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8PSBGTUNfQkNSeF9NQktFTikKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIHRoZSBOT1JTUkFNIGRldmljZSBhY2Nlc3MuCkBAIC02MzMsNyArNjM0LDcgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19GTUNfTk9SU1JBTV9ESVNBQkxFKF9fSU5TVEFOQ0VfXywgX19CQU5LX18pICgoX19JTlNUQU5DRV9fKS0+QlRDUlsoX19CQU5LX18pXVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmPSB+Rk1DX0JDUnhfTUJLRU4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJj0gfkZNQ19CQ1J4X01CS0VOKQogCiAvKioKICAgKiBAfQpAQCAtNzQ0LDEzICs3NDUsMTQgQEAKICAgKiAgQHsKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmICBGTUNfTk9SU1JBTV9Jbml0KEZNQ19OT1JTUkFNX1R5cGVEZWYgKkRldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZNQ19OT1JTUkFNX0luaXRUeXBlRGVmICpJbml0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZNQ19OT1JTUkFNX0luaXRUeXBlRGVmICpJbml0KTsKIEhBTF9TdGF0dXNUeXBlRGVmICBGTUNfTk9SU1JBTV9UaW1pbmdfSW5pdChGTUNfTk9SU1JBTV9UeXBlRGVmICpEZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1DX05PUlNSQU1fVGltaW5nVHlwZURlZiAqVGltaW5nLCB1aW50MzJfdCBCYW5rKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTUNfTk9SU1JBTV9UaW1pbmdUeXBlRGVmICpUaW1pbmcsIHVpbnQzMl90IEJhbmspOwogSEFMX1N0YXR1c1R5cGVEZWYgIEZNQ19OT1JTUkFNX0V4dGVuZGVkX1RpbWluZ19Jbml0KEZNQ19OT1JTUkFNX0VYVEVOREVEX1R5cGVEZWYgKkRldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTUNfTk9SU1JBTV9UaW1pbmdUeXBlRGVmICpUaW1pbmcsIHVpbnQzMl90IEJhbmssIHVpbnQzMl90IEV4dGVuZGVkTW9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1DX05PUlNSQU1fVGltaW5nVHlwZURlZiAqVGltaW5nLCB1aW50MzJfdCBCYW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEV4dGVuZGVkTW9kZSk7CiBIQUxfU3RhdHVzVHlwZURlZiAgRk1DX05PUlNSQU1fRGVJbml0KEZNQ19OT1JTUkFNX1R5cGVEZWYgKkRldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1DX05PUlNSQU1fRVhURU5ERURfVHlwZURlZiAqRXhEZXZpY2UsIHVpbnQzMl90IEJhbmspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTUNfTk9SU1JBTV9FWFRFTkRFRF9UeXBlRGVmICpFeERldmljZSwgdWludDMyX3QgQmFuayk7CiAvKioKICAgKiBAfQogICAqLwpAQCAtNzc1LDkgKzc3Nyw5IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiAgRk1DX05BTkRfSW5pdChGTUNfTkFORF9UeXBlRGVmICpEZXZpY2UsIEZNQ19OQU5EX0luaXRUeXBlRGVmICpJbml0KTsKIEhBTF9TdGF0dXNUeXBlRGVmICBGTUNfTkFORF9Db21tb25TcGFjZV9UaW1pbmdfSW5pdChGTUNfTkFORF9UeXBlRGVmICpEZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1DX05BTkRfUENDX1RpbWluZ1R5cGVEZWYgKlRpbWluZywgdWludDMyX3QgQmFuayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1DX05BTkRfUENDX1RpbWluZ1R5cGVEZWYgKlRpbWluZywgdWludDMyX3QgQmFuayk7CiBIQUxfU3RhdHVzVHlwZURlZiAgRk1DX05BTkRfQXR0cmlidXRlU3BhY2VfVGltaW5nX0luaXQoRk1DX05BTkRfVHlwZURlZiAqRGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZNQ19OQU5EX1BDQ19UaW1pbmdUeXBlRGVmICpUaW1pbmcsIHVpbnQzMl90IEJhbmspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZNQ19OQU5EX1BDQ19UaW1pbmdUeXBlRGVmICpUaW1pbmcsIHVpbnQzMl90IEJhbmspOwogSEFMX1N0YXR1c1R5cGVEZWYgIEZNQ19OQU5EX0RlSW5pdChGTUNfTkFORF9UeXBlRGVmICpEZXZpY2UsIHVpbnQzMl90IEJhbmspOwogLyoqCiAgICogQH0KQEAgLTc4OSw3ICs3OTEsNyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgIEZNQ19OQU5EX0VDQ19FbmFibGUoRk1DX05BTkRfVHlwZURlZiAqRGV2aWNlLCB1aW50MzJfdCBCYW5rKTsKIEhBTF9TdGF0dXNUeXBlRGVmICBGTUNfTkFORF9FQ0NfRGlzYWJsZShGTUNfTkFORF9UeXBlRGVmICpEZXZpY2UsIHVpbnQzMl90IEJhbmspOwogSEFMX1N0YXR1c1R5cGVEZWYgIEZNQ19OQU5EX0dldEVDQyhGTUNfTkFORF9UeXBlRGVmICpEZXZpY2UsIHVpbnQzMl90ICpFQ0N2YWwsIHVpbnQzMl90IEJhbmssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFRpbWVvdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0KTsKIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNXh4X2xsX2ljYWNoZS5oIGIvSW5jL3N0bTMybDV4eF9sbF9pY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2ZlYmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvSW5jL3N0bTMybDV4eF9sbF9pY2FjaGUuaApAQCAtMCwwICsxLDc4MiBAQAorLyoqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBmaWxlICAgIHN0bTMybDV4eF9sbF9pY2FjaGUuaAorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtCisgICogQGJyaWVmICAgSGVhZGVyIGZpbGUgb2YgSUNBQ0hFIExMIG1vZHVsZS4KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQGF0dGVudGlvbgorICAqCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgorICAqCisgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCisgICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQorICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQorICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqLworCisvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWZuZGVmIFNUTTMyTDV4eF9MTF9JQ0FDSEVfSAorI2RlZmluZSBTVE0zMkw1eHhfTExfSUNBQ0hFX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaW5jbHVkZSAic3RtMzJsNXh4LmgiCisKKy8qKiBAYWRkdG9ncm91cCBTVE0zMkw1eHhfTExfRHJpdmVyCisgICogQHsKKyAgKi8KKworI2lmIGRlZmluZWQoSUNBQ0hFKQorCisvKiogQGRlZmdyb3VwIElDQUNIRV9MTCBJQ0FDSEUKKyAgKiBAeworICAqLworCisvKiBQcml2YXRlIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcml2YXRlIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAZGVmZ3JvdXAgSUNBQ0hFX0xMX1JFR0lPTl9DT05GSUcgSUNBQ0hFIEV4cG9ydGVkIENvbmZpZ3VyYXRpb24gc3RydWN0dXJlCisgICogQHsKKyAgKi8KKworLyoqCisgICogQGJyaWVmICBMTCBJQ0FDSEUgcmVnaW9uIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGRlZmluaXRpb24KKyAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIHVpbnQzMl90IEJhc2VBZGRyZXNzOyAgICAgICAgICAgICAgLyohPCBDb25maWd1cmVzIHRoZSBDLUFIQiBiYXNlIGFkZHJlc3MgdG8gYmUgcmVtYXBwZWQgKi8KKworICB1aW50MzJfdCBSZW1hcEFkZHJlc3M7ICAgICAgICAgICAgIC8qITwgQ29uZmlndXJlcyB0aGUgcmVtYXAgYWRkcmVzcyB0byBiZSByZW1hcHBlZCAqLworCisgIHVpbnQzMl90IFNpemU7ICAgICAgICAgICAgICAgICAgICAgLyohPCBDb25maWd1cmVzIHRoZSByZWdpb24gc2l6ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSUNBQ0hFX0xMX0VDX1JlZ2lvbl9TaXplICovCisKKyAgdWludDMyX3QgVHJhZmZpY1JvdXRlOyAgICAgICAgICAgICAvKiE8IFNlbGVjdHMgdGhlIHRyYWZmaWMgcm91dGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIElDQUNIRV9MTF9FQ19UcmFmZmljX1JvdXRlICovCisKKyAgdWludDMyX3QgT3V0cHV0QnVyc3RUeXBlOyAgICAgICAgICAvKiE8IFNlbGVjdHMgdGhlIG91dHB1dCBidXJzdCB0eXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBJQ0FDSEVfTExfRUNfT3V0cHV0X0J1cnN0X1R5cGUgKi8KK30gTExfSUNBQ0hFX1JlZ2lvblR5cGVEZWY7CisKKy8qKgorICAqIEB9CisgICovCisKKy8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAZGVmZ3JvdXAgSUNBQ0hFX0xMX0V4cG9ydGVkX0NvbnN0YW50cyBJQ0FDSEUgRXhwb3J0ZWQgQ29uc3RhbnRzCisgICogQHsKKyAgKi8KKworLyoqIEBkZWZncm91cCBJQ0FDSEVfTExfRUNfV2F5c1NlbGVjdGlvbiBXYXlzIHNlbGVjdGlvbgorICAqIEB7CisgICovCisjZGVmaW5lIExMX0lDQUNIRV8xV0FZICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAvKiE8IDEtd2F5IGNhY2hlIChkaXJlY3QgbWFwcGVkIGNhY2hlKSAqLworI2RlZmluZSBMTF9JQ0FDSEVfMldBWVMgICAgICAgICAgICAgICAgSUNBQ0hFX0NSX1dBWVNFTCAgLyohPCAyLXdheXMgc2V0IGFzc29jaWF0aXZlIGNhY2hlIChkZWZhdWx0KSAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBJQ0FDSEVfTExfRUNfTW9uaXRvcl9UeXBlIE1vbml0b3IgdHlwZQorICAqIEB7CisgICovCisjZGVmaW5lIExMX0lDQUNIRV9NT05JVE9SX0hJVCAgICAgICAgICBJQ0FDSEVfQ1JfSElUTUVOICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEhpdCBtb25pdG9yIGNvdW50ZXIgKi8KKyNkZWZpbmUgTExfSUNBQ0hFX01PTklUT1JfTUlTUyAgICAgICAgIElDQUNIRV9DUl9NSVNTTUVOICAgICAgICAgICAgICAgICAgICAgIC8qITwgTWlzcyBtb25pdG9yIGNvdW50ZXIgKi8KKyNkZWZpbmUgTExfSUNBQ0hFX01PTklUT1JfQUxMICAgICAgICAgIChJQ0FDSEVfQ1JfSElUTUVOIHwgSUNBQ0hFX0NSX01JU1NNRU4pIC8qITwgQWxsIG1vbml0b3JzIGNvdW50ZXJzICovCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIElDQUNIRV9MTF9FQ19HRVRfRkxBRyBHZXQgRmxhZ3MgRGVmaW5lcworICAqIEBicmllZiAgICBGbGFncyBkZWZpbmVzIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggTExfSUNBQ0hFX1JlYWRSZWcgZnVuY3Rpb24KKyAgKiBAeworICAqLworI2RlZmluZSBMTF9JQ0FDSEVfU1JfQlVTWUYgICAgICAgICAgICAgSUNBQ0hFX1NSX0JVU1lGICAgICAvKiE8IEJ1c3kgZmxhZyAqLworI2RlZmluZSBMTF9JQ0FDSEVfU1JfQlNZRU5ERiAgICAgICAgICAgSUNBQ0hFX1NSX0JTWUVOREYgICAvKiE8IEJ1c3kgZW5kIGZsYWcgKi8KKyNkZWZpbmUgTExfSUNBQ0hFX1NSX0VSUkYgICAgICAgICAgICAgIElDQUNIRV9TUl9FUlJGICAgICAgLyohPCBDYWNoZSBlcnJvciBmbGFnICovCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIElDQUNIRV9MTF9FQ19DTEVBUl9GTEFHIENsZWFyIEZsYWdzIERlZmluZXMKKyAgKiBAYnJpZWYgICAgRmxhZ3MgZGVmaW5lcyB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIExMX0lDQUNIRV9Xcml0ZVJlZyBmdW5jdGlvbgorICAqIEB7CisgICovCisjZGVmaW5lIExMX0lDQUNIRV9GQ1JfQ0JTWUVOREYgICAgICAgICBJQ0FDSEVfRkNSX0NCU1lFTkRGIC8qITwgQnVzeSBlbmQgZmxhZyAqLworI2RlZmluZSBMTF9JQ0FDSEVfRkNSX0NFUlJGICAgICAgICAgICAgSUNBQ0hFX0ZDUl9DRVJSRiAgICAvKiE8IENhY2hlIGVycm9yIGZsYWcgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgSUNBQ0hFX0xMX0VDX0lUIElUIERlZmluZXMKKyAgKiBAYnJpZWYgICAgSVQgZGVmaW5lcyB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIExMX0lDQUNIRV9SZWFkUmVnIGFuZCAgTExfSUNBQ0hFX1dyaXRlUmVnIGZ1bmN0aW9ucworICAqIEB7CisgICovCisjZGVmaW5lIExMX0lDQUNIRV9JRVJfQlNZRU5ESUUgICAgICAgICBJQ0FDSEVfSUVSX0JTWUVORElFIC8qITwgQnVzeSBlbmQgaW50ZXJydXB0ICovCisjZGVmaW5lIExMX0lDQUNIRV9JRVJfRVJSSUUgICAgICAgICAgICBJQ0FDSEVfSUVSX0VSUklFICAgIC8qITwgQ2FjaGUgZXJyb3IgaW50ZXJydXB0ICovCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIElDQUNIRV9MTF9FQ19SZWdpb24gUmVtYXBwZWQgUmVnaW9uIG51bWJlcgorICAqIEB7CisgICovCisjZGVmaW5lIExMX0lDQUNIRV9SRUdJT05fMCAgICAgICAgICAgICAwVSAgLyohPCBSZWdpb24gMCAqLworI2RlZmluZSBMTF9JQ0FDSEVfUkVHSU9OXzEgICAgICAgICAgICAgMVUgIC8qITwgUmVnaW9uIDEgKi8KKyNkZWZpbmUgTExfSUNBQ0hFX1JFR0lPTl8yICAgICAgICAgICAgIDJVICAvKiE8IFJlZ2lvbiAyICovCisjZGVmaW5lIExMX0lDQUNIRV9SRUdJT05fMyAgICAgICAgICAgICAzVSAgLyohPCBSZWdpb24gMyAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBJQ0FDSEVfTExfRUNfUmVnaW9uX1NpemUgUmVtYXBwZWQgUmVnaW9uIHNpemUKKyAgKiBAeworICAqLworI2RlZmluZSBMTF9JQ0FDSEVfUkVHSU9OU0laRV8yTUIgICAgICAgMVUgIC8qITwgUmVnaW9uIHNpemUgMk1CICovCisjZGVmaW5lIExMX0lDQUNIRV9SRUdJT05TSVpFXzRNQiAgICAgICAyVSAgLyohPCBSZWdpb24gc2l6ZSA0TUIgKi8KKyNkZWZpbmUgTExfSUNBQ0hFX1JFR0lPTlNJWkVfOE1CICAgICAgIDNVICAvKiE8IFJlZ2lvbiBzaXplIDhNQiAqLworI2RlZmluZSBMTF9JQ0FDSEVfUkVHSU9OU0laRV8xNk1CICAgICAgNFUgIC8qITwgUmVnaW9uIHNpemUgMTZNQiAqLworI2RlZmluZSBMTF9JQ0FDSEVfUkVHSU9OU0laRV8zMk1CICAgICAgNVUgIC8qITwgUmVnaW9uIHNpemUgMzJNQiAqLworI2RlZmluZSBMTF9JQ0FDSEVfUkVHSU9OU0laRV82NE1CICAgICAgNlUgIC8qITwgUmVnaW9uIHNpemUgNjRNQiAqLworI2RlZmluZSBMTF9JQ0FDSEVfUkVHSU9OU0laRV8xMjhNQiAgICAgN1UgIC8qITwgUmVnaW9uIHNpemUgMTI4TUIgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgSUNBQ0hFX0xMX0VDX1RyYWZmaWNfUm91dGUgUmVtYXBwZWQgVHJhZmZpYyByb3V0ZQorICAqIEB7CisgICovCisjZGVmaW5lIExMX0lDQUNIRV9NQVNURVIxX1BPUlQgICAgICAgICAwVSAgICAgICAgICAgICAgICAgIC8qITwgTWFzdGVyMSBwb3J0ICovCisjZGVmaW5lIExMX0lDQUNIRV9NQVNURVIyX1BPUlQgICAgICAgICBJQ0FDSEVfQ1JSeF9NU1RTRUwgIC8qITwgTWFzdGVyMiBwb3J0ICovCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIElDQUNIRV9MTF9FQ19PdXRwdXRfQnVyc3RfVHlwZSBSZW1hcHBlZCBPdXRwdXQgYnVyc3QgdHlwZQorICAqIEB7CisgICovCisjZGVmaW5lIExMX0lDQUNIRV9PVVRQVVRfQlVSU1RfV1JBUCAgICAwVSAgICAgICAgICAgICAgICAgIC8qITwgV1JBUCAqLworI2RlZmluZSBMTF9JQ0FDSEVfT1VUUFVUX0JVUlNUX0lOQ1IgICAgSUNBQ0hFX0NSUnhfSEJVUlNUICAvKiE8IElOQ1IgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKgorICAqIEB9CisgICovCisKKy8qIEV4cG9ydGVkIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAZGVmZ3JvdXAgSUNBQ0hFX0xMX0V4cG9ydGVkX01hY3JvcyBJQ0FDSEUgRXhwb3J0ZWQgTWFjcm9zCisgICogQHsKKyAgKi8KKworLyoqIEBkZWZncm91cCBJQ0FDSEVfTExfRU1fV1JJVEVfUkVBRCBDb21tb24gd3JpdGUgYW5kIHJlYWQgcmVnaXN0ZXJzIE1hY3JvcworICAqIEB7CisgICovCisKKy8qKgorICAqIEBicmllZiAgV3JpdGUgYSB2YWx1ZSBpbiBJQ0FDSEUgcmVnaXN0ZXIKKyAgKiBAcGFyYW0gIF9fUkVHX18gUmVnaXN0ZXIgdG8gYmUgd3JpdHRlbgorICAqIEBwYXJhbSAgX19WQUxVRV9fIFZhbHVlIHRvIGJlIHdyaXR0ZW4gaW4gdGhlIHJlZ2lzdGVyCisgICogQHJldHZhbCBOb25lCisgICovCisjZGVmaW5lIExMX0lDQUNIRV9Xcml0ZVJlZyhfX1JFR19fLCBfX1ZBTFVFX18pIFdSSVRFX1JFRyhJQ0FDSEUtPl9fUkVHX18sIChfX1ZBTFVFX18pKQorCisvKioKKyAgKiBAYnJpZWYgIFJlYWQgYSB2YWx1ZSBpbiBJQ0FDSEUgcmVnaXN0ZXIKKyAgKiBAcGFyYW0gIF9fUkVHX18gUmVnaXN0ZXIgdG8gYmUgcmVhZAorICAqIEByZXR2YWwgUmVnaXN0ZXIgdmFsdWUKKyAgKi8KKyNkZWZpbmUgTExfSUNBQ0hFX1JlYWRSZWcoX19SRUdfXykgUkVBRF9SRUcoSUNBQ0hFLT5fX1JFR19fKQorLyoqCisgICogQH0KKyAgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAZGVmZ3JvdXAgSUNBQ0hFX0xMX0V4cG9ydGVkX0Z1bmN0aW9ucyBJQ0FDSEUgRXhwb3J0ZWQgRnVuY3Rpb25zCisgICogQHsKKyAgKi8KKworLyoqIEBkZWZncm91cCBJQ0FDSEVfTExfRUZfQ29uZmlndXJhdGlvbiBDb25maWd1cmF0aW9uCisgICogQHsKKyAgKi8KKworLyoqCisgICogQGJyaWVmICBFbmFibGUgdGhlIElDQUNIRS4KKyAgKiBAcm10b2xsIENSICAgICAgICAgICBFTiAgICAgICAgICAgIExMX0lDQUNIRV9FbmFibGUKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0lDQUNIRV9FbmFibGUodm9pZCkKK3sKKyAgU0VUX0JJVChJQ0FDSEUtPkNSLCBJQ0FDSEVfQ1JfRU4pOworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgdGhlIElDQUNIRS4KKyAgKiBAcm10b2xsIENSICAgICAgICAgICBFTiAgICAgICAgICAgIExMX0lDQUNIRV9EaXNhYmxlCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JQ0FDSEVfRGlzYWJsZSh2b2lkKQoreworICBDTEVBUl9CSVQoSUNBQ0hFLT5DUiwgSUNBQ0hFX0NSX0VOKTsKK30KKworLyoqCisgICogQGJyaWVmICBSZXR1cm4gaWYgSUNBQ0hFIGlzIGVuYWJsZWQgb3Igbm90LgorICAqIEBybXRvbGwgQ1IgICAgICAgICAgIEVOICAgICAgICAgICAgTExfSUNBQ0hFX0lzRW5hYmxlZAorICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0lDQUNIRV9Jc0VuYWJsZWQodm9pZCkKK3sKKyAgcmV0dXJuICgoUkVBRF9CSVQoSUNBQ0hFLT5DUiwgSUNBQ0hFX0NSX0VOKSA9PSAoSUNBQ0hFX0NSX0VOKSkgPyAxVUwgOiAwVUwpOworfQorCisvKioKKyAgKiBAYnJpZWYgIFNlbGVjdCB0aGUgSUNBQ0hFIG9wZXJhdGluZyBtb2RlLgorICAqIEBybXRvbGwgQ1IgICAgICAgICAgIFdBWVNFTCAgICAgICAgTExfSUNBQ0hFX1NldE1vZGUKKyAgKiBAcGFyYW0gIE1vZGUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfMVdBWQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV8yV0FZUworICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSUNBQ0hFX1NldE1vZGUodWludDMyX3QgTW9kZSkKK3sKKyAgTU9ESUZZX1JFRyhJQ0FDSEUtPkNSLCBJQ0FDSEVfQ1JfV0FZU0VMLCBNb2RlKTsKK30KKworLyoqCisgICogQGJyaWVmICBHZXQgdGhlIHNlbGVjdGVkIElDQUNIRSBvcGVyYXRpbmcgbW9kZS4KKyAgKiBAcm10b2xsIENSICAgICAgICAgICBXQVlTRUwgICAgICAgIExMX0lDQUNIRV9HZXRNb2RlCisgICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV8xV0FZCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFXzJXQVlTCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSUNBQ0hFX0dldE1vZGUodm9pZCkKK3sKKyAgcmV0dXJuIChSRUFEX0JJVChJQ0FDSEUtPkNSLCBJQ0FDSEVfQ1JfV0FZU0VMKSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgSW52YWxpZGF0ZSB0aGUgSUNBQ0hFLgorICAqIEBub3RlICAgVW50aWwgdGhlIEJTWUVORCBmbGFnIGlzIHNldCwgdGhlIGNhY2hlIGlzIGJ5cGFzc2VkLgorICAqIEBybXRvbGwgQ1IgICAgICAgICAgIENBQ0hFSU5WICAgICAgTExfSUNBQ0hFX0ludmFsaWRhdGUKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0lDQUNIRV9JbnZhbGlkYXRlKHZvaWQpCit7CisgIFNFVF9CSVQoSUNBQ0hFLT5DUiwgSUNBQ0hFX0NSX0NBQ0hFSU5WKTsKK30KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBJQ0FDSEVfTExfRUZfTW9uaXRvcnMgTW9uaXRvcnMKKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgaGl0L21pc3MgbW9uaXRvcihzKS4KKyAgKiBAcm10b2xsIENSICAgICAgICAgICBISVRNRU4gICAgICAgIExMX0lDQUNIRV9FbmFibGVNb25pdG9yc1xuCisgICogQHJtdG9sbCBDUiAgICAgICAgICAgTUlTU01FTiAgICAgICBMTF9JQ0FDSEVfRW5hYmxlTW9uaXRvcnMKKyAgKiBAcGFyYW0gIE1vbml0b3JzIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfTU9OSVRPUl9ISVQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfTU9OSVRPUl9NSVNTCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX01PTklUT1JfQUxMCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JQ0FDSEVfRW5hYmxlTW9uaXRvcnModWludDMyX3QgTW9uaXRvcnMpCit7CisgIFNFVF9CSVQoSUNBQ0hFLT5DUiwgTW9uaXRvcnMpOworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgdGhlIGhpdC9taXNzIG1vbml0b3IocykuCisgICogQHJtdG9sbCBDUiAgICAgICAgICAgSElUTUVOICAgICAgICBMTF9JQ0FDSEVfRGlzYWJsZU1vbml0b3JzXG4KKyAgKiBAcm10b2xsIENSICAgICAgICAgICBNSVNTTUVOICAgICAgIExMX0lDQUNIRV9EaXNhYmxlTW9uaXRvcnMKKyAgKiBAcGFyYW0gIE1vbml0b3JzIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfTU9OSVRPUl9ISVQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfTU9OSVRPUl9NSVNTCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX01PTklUT1JfQUxMCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JQ0FDSEVfRGlzYWJsZU1vbml0b3JzKHVpbnQzMl90IE1vbml0b3JzKQoreworICBDTEVBUl9CSVQoSUNBQ0hFLT5DUiwgTW9uaXRvcnMpOworfQorCisvKioKKyAgKiBAYnJpZWYgIENoZWNrIGlmIHRoZSBtb25pdG9yKHMpIGlzKGFyZSkgZW5hYmxlZCBvciBkaXNhYmxlZC4KKyAgKiBAcm10b2xsIENSICAgICAgICAgICBISVRNRU4gICAgICAgIExMX0lDQUNIRV9Jc0VuYWJsZWRNb25pdG9yc1xuCisgICogQHJtdG9sbCBDUiAgICAgICAgICAgTUlTU01FTiAgICAgICBMTF9JQ0FDSEVfSXNFbmFibGVkTW9uaXRvcnMKKyAgKiBAcGFyYW0gIE1vbml0b3JzIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfTU9OSVRPUl9ISVQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfTU9OSVRPUl9NSVNTCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX01PTklUT1JfQUxMCisgICogQHJldHZhbCBTdGF0ZSBvZiBwYXJhbWV0ZXIgdmFsdWUgKDEgb3IgMCkuCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSUNBQ0hFX0lzRW5hYmxlZE1vbml0b3JzKHVpbnQzMl90IE1vbml0b3JzKQoreworICByZXR1cm4gKChSRUFEX0JJVChJQ0FDSEUtPkNSLCBNb25pdG9ycykgPT0gKE1vbml0b3JzKSkgPyAxVUwgOiAwVUwpOworfQorCisvKioKKyAgKiBAYnJpZWYgIFJlc2V0IHRoZSBoaXQvbWlzcyBtb25pdG9yKHMpLgorICAqIEBybXRvbGwgQ1IgICAgICAgICAgIEhJVE1SU1QgICAgICAgTExfSUNBQ0hFX1Jlc2V0TW9uaXRvcnNcbgorICAqIEBybXRvbGwgQ1IgICAgICAgICAgIE1JU1NNUlNUICAgICAgTExfSUNBQ0hFX1Jlc2V0TW9uaXRvcnMKKyAgKiBAcGFyYW0gIE1vbml0b3JzIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfTU9OSVRPUl9ISVQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfTU9OSVRPUl9NSVNTCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX01PTklUT1JfQUxMCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JQ0FDSEVfUmVzZXRNb25pdG9ycyh1aW50MzJfdCBNb25pdG9ycykKK3sKKyAgLyogUmVzZXQgKi8KKyAgU0VUX0JJVChJQ0FDSEUtPkNSLCAoTW9uaXRvcnMgPDwgMlUpKTsKKyAgLyogUmVsZWFzZSByZXNldCAqLworICBDTEVBUl9CSVQoSUNBQ0hFLT5DUiwgKE1vbml0b3JzIDw8IDJVKSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgR2V0IHRoZSBIaXQgbW9uaXRvci4KKyAgKiBAbm90ZSAgIFVwb24gcmVhY2hpbmcgdGhlIDMyLWJpdCBtYXhpbXVtIHZhbHVlLCBoaXQgbW9uaXRvciBkb2VzIG5vdCB3cmFwLgorICAqIEBybXRvbGwgSE1PTlIgICAgICAgIEhJVE1PTiAgICAgICAgTExfSUNBQ0hFX0dldEhpdE1vbml0b3IKKyAgKiBAcmV0dmFsIFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MCBhbmQgTWF4X0RhdGE9MHhGRkZGRkZGRgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0lDQUNIRV9HZXRIaXRNb25pdG9yKHZvaWQpCit7CisgIHJldHVybiAoSUNBQ0hFLT5ITU9OUik7Cit9CisKKy8qKgorICAqIEBicmllZiAgR2V0IHRoZSBNaXNzIG1vbml0b3IuCisgICogQG5vdGUgICBVcG9uIHJlYWNoaW5nIHRoZSAxNi1iaXQgbWF4aW11bSB2YWx1ZSwgbWlzcyBtb25pdG9yIGRvZXMgbm90IHdyYXAuCisgICogQHJtdG9sbCBNTU9OUiAgICAgICAgTUlTU01PTiAgICAgICBMTF9JQ0FDSEVfR2V0TWlzc01vbml0b3IKKyAgKiBAcmV0dmFsIFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MCBhbmQgTWF4X0RhdGE9MHhGRkZGCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSUNBQ0hFX0dldE1pc3NNb25pdG9yKHZvaWQpCit7CisgIHJldHVybiAoSUNBQ0hFLT5NTU9OUik7Cit9CisKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgSUNBQ0hFX0xMX0VGX0lUX01hbmFnZW1lbnQgSVRfTWFuYWdlbWVudAorICAqIEB7CisgICovCisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIEJTWUVORCBpbnRlcnJ1cHQuCisgICogQHJtdG9sbCBJRVIgICAgICAgICAgQlNZRU5ESUUgICAgICBMTF9JQ0FDSEVfRW5hYmxlSVRfQlNZRU5ECisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JQ0FDSEVfRW5hYmxlSVRfQlNZRU5EKHZvaWQpCit7CisgIFNFVF9CSVQoSUNBQ0hFLT5JRVIsIElDQUNIRV9JRVJfQlNZRU5ESUUpOworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgQlNZRU5EIGludGVycnVwdC4KKyAgKiBAcm10b2xsIElFUiAgICAgICAgICBCU1lFTkRJRSAgICAgIExMX0lDQUNIRV9EaXNhYmxlSVRfQlNZRU5ECisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JQ0FDSEVfRGlzYWJsZUlUX0JTWUVORCh2b2lkKQoreworICBDTEVBUl9CSVQoSUNBQ0hFLT5JRVIsIElDQUNIRV9JRVJfQlNZRU5ESUUpOworfQorCisvKioKKyAgKiBAYnJpZWYgIENoZWNrIGlmIHRoZSBCU1lFTkQgSW50ZXJydXB0IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisgICogQHJtdG9sbCBJRVIgICAgICAgICAgQlNZRU5ESUUgICAgICBMTF9JQ0FDSEVfSXNFbmFibGVkSVRfQlNZRU5ECisgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSUNBQ0hFX0lzRW5hYmxlZElUX0JTWUVORCh2b2lkKQoreworICByZXR1cm4gKChSRUFEX0JJVChJQ0FDSEUtPklFUiwgSUNBQ0hFX0lFUl9CU1lFTkRJRSkgPT0gKElDQUNIRV9JRVJfQlNZRU5ESUUpKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIEVSUiBpbnRlcnJ1cHQuCisgICogQHJtdG9sbCBJRVIgICAgICAgICAgRVJSSUUgICAgICAgICBMTF9JQ0FDSEVfRW5hYmxlSVRfRVJSCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JQ0FDSEVfRW5hYmxlSVRfRVJSKHZvaWQpCit7CisgIFNFVF9CSVQoSUNBQ0hFLT5JRVIsIElDQUNIRV9JRVJfRVJSSUUpOworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgRVJSIGludGVycnVwdC4KKyAgKiBAcm10b2xsIElFUiAgICAgICAgICBFUlJJRSAgICAgICAgTExfSUNBQ0hFX0Rpc2FibGVJVF9FUlIKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0lDQUNIRV9EaXNhYmxlSVRfRVJSKHZvaWQpCit7CisgIENMRUFSX0JJVChJQ0FDSEUtPklFUiwgSUNBQ0hFX0lFUl9FUlJJRSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2hlY2sgaWYgdGhlIEVSUiBJbnRlcnJ1cHQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4KKyAgKiBAcm10b2xsIElFUiAgICAgICAgICBFUlJJRSAgICAgICAgIExMX0lDQUNIRV9Jc0VuYWJsZWRJVF9FUlIKKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JQ0FDSEVfSXNFbmFibGVkSVRfRVJSKHZvaWQpCit7CisgIHJldHVybiAoKFJFQURfQklUKElDQUNIRS0+SUVSLCBJQ0FDSEVfSUVSX0VSUklFKSA9PSAoSUNBQ0hFX0lFUl9FUlJJRSkpID8gMVVMIDogMFVMKTsKK30KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBJQ0FDSEVfTExfRUZfRkxBR19NYW5hZ2VtZW50IEZMQUdfTWFuYWdlbWVudAorICAqIEB7CisgICovCisKKy8qKgorICAqIEBicmllZiAgSW5kaWNhdGUgdGhlIHN0YXR1cyBvZiBhbiBvbmdvaW5nIG9wZXJhdGlvbiBmbGFnLgorICAqIEBybXRvbGwgU1IgICAgICAgICAgIEJVU1lGICAgICAgICAgTExfSUNBQ0hFX0lzQWN0aXZlRmxhZ19CVVNZCisgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSUNBQ0hFX0lzQWN0aXZlRmxhZ19CVVNZKHZvaWQpCit7CisgIHJldHVybiAoKFJFQURfQklUKElDQUNIRS0+U1IsIElDQUNIRV9TUl9CVVNZRikgPT0gKElDQUNIRV9TUl9CVVNZRikpID8gMVVMIDogMFVMKTsKK30KKworLyoqCisgICogQGJyaWVmICBJbmRpY2F0ZSB0aGUgc3RhdHVzIG9mIGFuIG9wZXJhdGlvbiBlbmQgZmxhZy4KKyAgKiBAcm10b2xsIFNSICAgICAgICAgICBCU1lFTkQgICAgICAgTExfSUNBQ0hFX0lzQWN0aXZlRmxhZ19CU1lFTkQKKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JQ0FDSEVfSXNBY3RpdmVGbGFnX0JTWUVORCh2b2lkKQoreworICByZXR1cm4gKChSRUFEX0JJVChJQ0FDSEUtPlNSLCBJQ0FDSEVfU1JfQlNZRU5ERikgPT0gKElDQUNIRV9TUl9CU1lFTkRGKSkgPyAxVUwgOiAwVUwpOworfQorCisvKioKKyAgKiBAYnJpZWYgIEluZGljYXRlIHRoZSBzdGF0dXMgb2YgYW4gZXJyb3IgZmxhZy4KKyAgKiBAcm10b2xsIFNSICAgICAgICAgICBFUlJGICAgICAgICAgIExMX0lDQUNIRV9Jc0FjdGl2ZUZsYWdfRVJSCisgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSUNBQ0hFX0lzQWN0aXZlRmxhZ19FUlIodm9pZCkKK3sKKyAgcmV0dXJuICgoUkVBRF9CSVQoSUNBQ0hFLT5TUiwgSUNBQ0hFX1NSX0VSUkYpID09IChJQ0FDSEVfU1JfRVJSRikpID8gMVVMIDogMFVMKTsKK30KKworLyoqCisgICogQGJyaWVmICBDbGVhciBidXN5IGVuZCBvZiBvcGVyYXRpb24gZmxhZy4KKyAgKiBAcm10b2xsIEZDUiAgICAgICAgICBDQlNZRU5ERiAgICAgIExMX0lDQUNIRV9DbGVhckZsYWdfQlNZRU5ECisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JQ0FDSEVfQ2xlYXJGbGFnX0JTWUVORCh2b2lkKQoreworICBXUklURV9SRUcoSUNBQ0hFLT5GQ1IsIElDQUNIRV9GQ1JfQ0JTWUVOREYpOworfQorCisvKioKKyAgKiBAYnJpZWYgIENsZWFyIGVycm9yIGZsYWcuCisgICogQHJtdG9sbCBGQ1IgICAgICAgICAgRVJSRiAgICAgICAgICBMTF9JQ0FDSEVfQ2xlYXJGbGFnX0VSUgorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSUNBQ0hFX0NsZWFyRmxhZ19FUlIodm9pZCkKK3sKKyAgV1JJVEVfUkVHKElDQUNIRS0+RkNSLCBJQ0FDSEVfRkNSX0NFUlJGKTsKK30KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBJQ0FDSEVfTExfRUZfUkVHSU9OX01hbmFnZW1lbnQgUkVHSU9OX01hbmFnZW1lbnQKKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgcmVtYXBwZWQgbWVtb3J5IHJlZ2lvbi4KKyAgKiBAbm90ZSAgIFRoZSByZWdpb24gbXVzdCBoYXZlIGJlZW4gYWxyZWFkeSBjb25maWd1cmVkLgorICAqIEBybXRvbGwgQ1JSeCAgICAgICAgIFJFTiAgICAgICAgICAgTExfSUNBQ0hFX0VuYWJsZVJlZ2lvbgorICAqIEBwYXJhbSAgUmVnaW9uIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTl8wCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTl8xCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTl8yCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTl8zCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JQ0FDSEVfRW5hYmxlUmVnaW9uKHVpbnQzMl90IFJlZ2lvbikKK3sKKyAgU0VUX0JJVCgqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgmKElDQUNIRS0+Q1JSMCkgKyAoMVUgKiBSZWdpb24pKSksIFwKKyAgICAgICAgICBJQ0FDSEVfQ1JSeF9SRU4pOworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgdGhlIHJlbWFwcGVkIG1lbW9yeSByZWdpb24uCisgICogQHJtdG9sbCBDUlJ4ICAgICAgICAgUkVOICAgICAgICAgICBMTF9JQ0FDSEVfRGlzYWJsZVJlZ2lvbgorICAqIEBwYXJhbSAgUmVnaW9uIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTl8wCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTl8xCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTl8yCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTl8zCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JQ0FDSEVfRGlzYWJsZVJlZ2lvbih1aW50MzJfdCBSZWdpb24pCit7CisgIENMRUFSX0JJVCgqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgmKElDQUNIRS0+Q1JSMCkgKyAoMVUgKiBSZWdpb24pKSksIFwKKyAgICAgICAgICAgIElDQUNIRV9DUlJ4X1JFTik7Cit9CisKKy8qKgorICAqIEBicmllZiAgUmV0dXJuIGlmIHJlbWFwcGVkIG1lbW9yeSByZWdpb24gaXMgZW5hYmxlZCBvciBub3QuCisgICogQHJtdG9sbCBDUlJ4ICAgICAgICAgUkVOICAgICAgICAgICBMTF9JQ0FDSEVfSXNFbmFibGVkUmVnaW9uCisgICogQHBhcmFtICBSZWdpb24gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzAKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzMKKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JQ0FDSEVfSXNFbmFibGVkUmVnaW9uKHVpbnQzMl90IFJlZ2lvbikKK3sKKyAgcmV0dXJuICgoUkVBRF9CSVQoKigodm9sYXRpbGUgdWludDMyX3QgKikoJihJQ0FDSEUtPkNSUjApICsgKDFVICogUmVnaW9uKSkpLCBcCisgICAgICAgICAgICAgICAgICAgIElDQUNIRV9DUlJ4X1JFTikgPT0gKElDQUNIRV9DUlJ4X1JFTikpID8gMVVMIDogMFVMKTsKK30KKworLyoqCisgICogQGJyaWVmICBTZWxlY3QgdGhlIG1lbW9yeSByZW1hcHBlZCByZWdpb24gYmFzZSBhZGRyZXNzLgorICAqIEBybXRvbGwgQ1JSeCAgICAgICAgIEJBU0VBRERSICAgICAgTExfSUNBQ0hFX1NldFJlZ2lvbkJhc2VBZGRyZXNzCisgICogQHBhcmFtICBSZWdpb24gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzAKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzMKKyAgKiBAcGFyYW0gIEFkZHJlc3MgIEFsaWFzIGFkZHJlc3MgaW4gdGhlIENvZGUgcmVnaW9uCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JQ0FDSEVfU2V0UmVnaW9uQmFzZUFkZHJlc3ModWludDMyX3QgUmVnaW9uLCB1aW50MzJfdCBBZGRyZXNzKQoreworICBNT0RJRllfUkVHKCooKHZvbGF0aWxlIHVpbnQzMl90ICopKCYoSUNBQ0hFLT5DUlIwKSArICgxVSAqIFJlZ2lvbikpKSwgXAorICAgICAgICAgICAgIElDQUNIRV9DUlJ4X0JBU0VBRERSLCAoKChBZGRyZXNzICYgMHgxRkZGRkZGRlUpID4+IDIxVSkgJiBJQ0FDSEVfQ1JSeF9CQVNFQUREUikpOworfQorCisvKioKKyAgKiBAYnJpZWYgIEdldCB0aGUgbWVtb3J5IHJlbWFwcGVkIHJlZ2lvbiBiYXNlIGFkZHJlc3MuCisgICogQG5vdGUgICBUaGUgYmFzZSBhZGRyZXNzIGlzIHRoZSBhbGlhcyBpbiB0aGUgQ29kZSByZWdpb24uCisgICogQHJtdG9sbCBDUlJ4ICAgICAgICAgQkFTRUFERFIgICAgICBMTF9JQ0FDSEVfR2V0UmVnaW9uQmFzZUFkZHJlc3MKKyAgKiBAcGFyYW0gIFJlZ2lvbiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05fMAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05fMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05fMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05fMworICAqIEByZXR2YWwgQWRkcmVzcyAgQWxpYXMgYWRkcmVzcyBpbiB0aGUgQ29kZSByZWdpb24KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JQ0FDSEVfR2V0UmVnaW9uQmFzZUFkZHJlc3ModWludDMyX3QgUmVnaW9uKQoreworICByZXR1cm4gKFJFQURfQklUKCooKHZvbGF0aWxlIHVpbnQzMl90ICopKCYoSUNBQ0hFLT5DUlIwKSArICgxVSAqIFJlZ2lvbikpKSwgXAorICAgICAgICAgICAgICAgICAgIElDQUNIRV9DUlJ4X0JBU0VBRERSKSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgU2VsZWN0IHRoZSBtZW1vcnkgcmVtYXBwZWQgcmVnaW9uIHJlbWFwIGFkZHJlc3MuCisgICogQHJtdG9sbCBDUlJ4ICAgICAgICAgUkVNQVBBRERSICAgICBMTF9JQ0FDSEVfU2V0UmVnaW9uUmVtYXBBZGRyZXNzCisgICogQHBhcmFtICBSZWdpb24gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzAKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzMKKyAgKiBAcGFyYW0gIEFkZHJlc3MgIEV4dGVybmFsIG1lbW9yeSBhZGRyZXNzCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JQ0FDSEVfU2V0UmVnaW9uUmVtYXBBZGRyZXNzKHVpbnQzMl90IFJlZ2lvbiwgdWludDMyX3QgQWRkcmVzcykKK3sKKyAgTU9ESUZZX1JFRygqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgmKElDQUNIRS0+Q1JSMCkgKyAoMVUgKiBSZWdpb24pKSksIFwKKyAgICAgICAgICAgICBJQ0FDSEVfQ1JSeF9SRU1BUEFERFIsICgoQWRkcmVzcyA+PiAyMVUpIDw8IElDQUNIRV9DUlJ4X1JFTUFQQUREUl9Qb3MpKTsKK30KKworLyoqCisgICogQGJyaWVmICBHZXQgdGhlIG1lbW9yeSByZW1hcHBlZCByZWdpb24gYmFzZSBhZGRyZXNzLgorICAqIEBybXRvbGwgQ1JSeCAgICAgICAgIFJFTUFQQUREUiAgICAgTExfSUNBQ0hFX0dldFJlZ2lvblJlbWFwQWRkcmVzcworICAqIEBwYXJhbSAgUmVnaW9uIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTl8wCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTl8xCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTl8yCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTl8zCisgICogQHJldHZhbCBBZGRyZXNzICBFeHRlcm5hbCBtZW1vcnkgYWRkcmVzcworICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0lDQUNIRV9HZXRSZWdpb25SZW1hcEFkZHJlc3ModWludDMyX3QgUmVnaW9uKQoreworICByZXR1cm4gKChSRUFEX0JJVCgqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgmKElDQUNIRS0+Q1JSMCkgKyAoMVUgKiBSZWdpb24pKSksIFwKKyAgICAgICAgICAgICAgICAgICAgSUNBQ0hFX0NSUnhfUkVNQVBBRERSKSA+PiBJQ0FDSEVfQ1JSeF9SRU1BUEFERFJfUG9zKSA8PCAyMVUpOworfQorCisvKioKKyAgKiBAYnJpZWYgIFNlbGVjdCB0aGUgbWVtb3J5IHJlbWFwcGVkIHJlZ2lvbiBzaXplLgorICAqIEBybXRvbGwgQ1JSeCAgICAgICAgIFJTSVpFICAgICAgICAgTExfSUNBQ0hFX1NldFJlZ2lvblNpemUKKyAgKiBAcGFyYW0gIFJlZ2lvbiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05fMAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05fMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05fMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05fMworICAqIEBwYXJhbSAgU2l6ZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05TSVpFXzJNQgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05TSVpFXzRNQgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05TSVpFXzhNQgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05TSVpFXzE2TUIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OU0laRV8zMk1CCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTlNJWkVfNjRNQgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05TSVpFXzEyOE1CCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JQ0FDSEVfU2V0UmVnaW9uU2l6ZSh1aW50MzJfdCBSZWdpb24sIHVpbnQzMl90IFNpemUpCit7CisgIE1PRElGWV9SRUcoKigodm9sYXRpbGUgdWludDMyX3QgKikoJihJQ0FDSEUtPkNSUjApICsgKDFVICogUmVnaW9uKSkpLCBcCisgICAgICAgICAgICAgSUNBQ0hFX0NSUnhfUlNJWkUsIChTaXplIDw8IElDQUNIRV9DUlJ4X1JTSVpFX1BvcykpOworfQorCisvKioKKyAgKiBAYnJpZWYgIEdldCB0aGUgc2VsZWN0ZWQgdGhlIG1lbW9yeSByZW1hcHBlZCByZWdpb24gc2l6ZS4KKyAgKiBAcm10b2xsIENSUnggICAgICAgICBSU0laRSAgICAgICAgIExMX0lDQUNIRV9HZXRSZWdpb25TaXplCisgICogQHBhcmFtICBSZWdpb24gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzAKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzMKKyAgKiBAcmV0dmFsIFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTlNJWkVfMk1CCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTlNJWkVfNE1CCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTlNJWkVfOE1CCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTlNJWkVfMTZNQgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05TSVpFXzMyTUIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OU0laRV82NE1CCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTlNJWkVfMTI4TUIKKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JQ0FDSEVfR2V0UmVnaW9uU2l6ZSh1aW50MzJfdCBSZWdpb24pCit7CisgIHJldHVybiAoUkVBRF9CSVQoKigodm9sYXRpbGUgdWludDMyX3QgKikoJihJQ0FDSEUtPkNSUjApICsgKDFVICogUmVnaW9uKSkpLCBcCisgICAgICAgICAgICAgICAgICAgSUNBQ0hFX0NSUnhfUlNJWkUpID4+IElDQUNIRV9DUlJ4X1JTSVpFX1Bvcyk7Cit9CisKKy8qKgorICAqIEBicmllZiAgU2VsZWN0IHRoZSBtZW1vcnkgcmVtYXBwZWQgcmVnaW9uIG91dHB1dCBidXJzdCB0eXBlLgorICAqIEBybXRvbGwgQ1JSeCAgICAgICAgIEhCVVJTVCAgICAgICAgTExfSUNBQ0hFX1NldFJlZ2lvbk91dHB1dEJ1cnN0VHlwZQorICAqIEBwYXJhbSAgUmVnaW9uIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTl8wCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTl8xCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTl8yCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX1JFR0lPTl8zCisgICogQHBhcmFtICBUeXBlIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX09VVFBVVF9CVVJTVF9XUkFQCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX09VVFBVVF9CVVJTVF9JTkNSCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JQ0FDSEVfU2V0UmVnaW9uT3V0cHV0QnVyc3RUeXBlKHVpbnQzMl90IFJlZ2lvbiwgdWludDMyX3QgVHlwZSkKK3sKKyAgTU9ESUZZX1JFRygqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgmKElDQUNIRS0+Q1JSMCkgKyAoMVUgKiBSZWdpb24pKSksIFwKKyAgICAgICAgICAgICBJQ0FDSEVfQ1JSeF9IQlVSU1QsIFR5cGUpOworfQorCisvKioKKyAgKiBAYnJpZWYgIEdldCB0aGUgc2VsZWN0ZWQgdGhlIG1lbW9yeSByZW1hcHBlZCByZWdpb24gb3V0cHV0IGJ1cnN0IHR5cGUuCisgICogQHJtdG9sbCBDUlJ4ICAgICAgICAgSEJVUlNUICAgICAgICBMTF9JQ0FDSEVfR2V0UmVnaW9uT3V0cHV0QnVyc3RUeXBlCisgICogQHBhcmFtICBSZWdpb24gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzAKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzMKKyAgKiBAcmV0dmFsIFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX09VVFBVVF9CVVJTVF9XUkFQCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX09VVFBVVF9CVVJTVF9JTkNSCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSUNBQ0hFX0dldFJlZ2lvbk91dHB1dEJ1cnN0VHlwZSh1aW50MzJfdCBSZWdpb24pCit7CisgIHJldHVybiAoUkVBRF9CSVQoKigodm9sYXRpbGUgdWludDMyX3QgKikoJihJQ0FDSEUtPkNSUjApICsgKDFVICogUmVnaW9uKSkpLCBcCisgICAgICAgICAgICAgICAgICAgSUNBQ0hFX0NSUnhfSEJVUlNUKSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgU2VsZWN0IHRoZSBtZW1vcnkgcmVtYXBwZWQgcmVnaW9uIGNhY2hlIG1hc3RlciBwb3J0LgorICAqIEBybXRvbGwgQ1JSeCAgICAgICAgIE1TVFNFTCAgICAgICAgTExfSUNBQ0hFX1NldFJlZ2lvbk1hc3RlclBvcnQKKyAgKiBAcGFyYW0gIFJlZ2lvbiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05fMAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05fMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05fMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05fMworICAqIEBwYXJhbSAgUG9ydCBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9NQVNURVIxX1BPUlQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfTUFTVEVSMl9QT1JUCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JQ0FDSEVfU2V0UmVnaW9uTWFzdGVyUG9ydCh1aW50MzJfdCBSZWdpb24sIHVpbnQzMl90IFBvcnQpCit7CisgIE1PRElGWV9SRUcoKigodm9sYXRpbGUgdWludDMyX3QgKikoJihJQ0FDSEUtPkNSUjApICsgKDFVICogUmVnaW9uKSkpLCBcCisgICAgICAgICAgICAgSUNBQ0hFX0NSUnhfTVNUU0VMLCBQb3J0KTsKK30KKworLyoqCisgICogQGJyaWVmICBHZXQgdGhlIHNlbGVjdGVkIHRoZSBtZW1vcnkgcmVtYXBwZWQgcmVnaW9uIGNhY2hlIG1hc3RlciBwb3J0LgorICAqIEBybXRvbGwgQ1JSeCAgICAgICAgIE1TVFNFTCAgICAgICAgTExfSUNBQ0hFX0dldFJlZ2lvbk1hc3RlclBvcnQKKyAgKiBAcGFyYW0gIFJlZ2lvbiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05fMAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05fMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05fMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0lDQUNIRV9SRUdJT05fMworICAqIEByZXR2YWwgUmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfTUFTVEVSMV9QT1JUCisgICogICAgICAgICBAYXJnIEByZWYgTExfSUNBQ0hFX01BU1RFUjJfUE9SVAorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0lDQUNIRV9HZXRSZWdpb25NYXN0ZXJQb3J0KHVpbnQzMl90IFJlZ2lvbikKK3sKKyAgcmV0dXJuIChSRUFEX0JJVCgqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgmKElDQUNIRS0+Q1JSMCkgKyAoMVUgKiBSZWdpb24pKSksIFwKKyAgICAgICAgICAgICAgICAgICBJQ0FDSEVfQ1JSeF9NU1RTRUwpKTsKK30KKworLyoqCisgICogQH0KKyAgKi8KKworI2lmIGRlZmluZWQoVVNFX0ZVTExfTExfRFJJVkVSKQorLyoqIEBkZWZncm91cCBJQ0FDSEVfTExfRUZfUkVHSU9OX0luaXQgUmVnaW9uIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucworICAqIEB7CisgICovCisKK3ZvaWQgTExfSUNBQ0hFX0NvbmZpZ1JlZ2lvbih1aW50MzJfdCBSZWdpb24sIExMX0lDQUNIRV9SZWdpb25UeXBlRGVmICpJQ0FDSEVfUmVnaW9uU3RydWN0KTsKKworLyoqCisgICogQH0KKyAgKi8KKyNlbmRpZiAvKiBVU0VfRlVMTF9MTF9EUklWRVIgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworI2VuZGlmIC8qIElDQUNIRSAqLworCisvKioKKyAgKiBAfQorICAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogU1RNMzJMNXh4X0xMX0lDQUNIRV9IICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNXh4X2xsX2l3ZGcuaCBiL0luYy9zdG0zMmw1eHhfbGxfaXdkZy5oCmluZGV4IGZhNjJmYmYuLjEzYmFhOTYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw1eHhfbGxfaXdkZy5oCisrKyBiL0luYy9zdG0zMmw1eHhfbGxfaXdkZy5oCkBAIC0zMDQsOCArMzA0LDggQEAKIC8qKgogICAqIEBicmllZiAgQ2hlY2sgaWYgYWxsIGZsYWdzIFByZXNjYWxlciwgUmVsb2FkICYgV2luZG93IFZhbHVlIFVwZGF0ZSBhcmUgcmVzZXQgb3Igbm90CiAgICogQHJtdG9sbCBTUiAgICAgICAgICAgUFZVICAgICAgICAgICBMTF9JV0RHX0lzUmVhZHlcbgotICAqICAgICAgICAgU1IgICAgICAgICAgIFdWVSAgICAgICAgICAgTExfSVdER19Jc1JlYWR5XG4KLSAgKiAgICAgICAgIFNSICAgICAgICAgICBSVlUgICAgICAgICAgIExMX0lXREdfSXNSZWFkeQorICAqICAgICAgICAgU1IgICAgICAgICAgIFJWVSAgICAgICAgICAgTExfSVdER19Jc1JlYWR5XG4KKyAgKiAgICAgICAgIFNSICAgICAgICAgICBXVlUgICAgICAgICAgIExMX0lXREdfSXNSZWFkeQogICAqIEBwYXJhbSAgSVdER3ggSVdERyBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0cyAoMSBvciAwKS4KICAgKi8KQEAgLTMxOCw3ICszMTgsNiBAQAogICAqIEB9CiAgICovCiAKLQogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw1eHhfbGxfb3BhbXAuaCBiL0luYy9zdG0zMmw1eHhfbGxfb3BhbXAuaAppbmRleCA1NTQ1Mzg4Li45YjcwYTQ5IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNXh4X2xsX29wYW1wLmgKKysrIGIvSW5jL3N0bTMybDV4eF9sbF9vcGFtcC5oCkBAIC0xNTMsOCArMTUzLDExIEBACiAvKiogQGRlZmdyb3VwIE9QQU1QX0xMX0VDX1BPV0VSTU9ERSBPUEFNUCBwb3dlciBtb2RlCiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfT1BBTVBfUE9XRVJNT0RFX05PUk1BTCAgICAgICAoT1BBTVBfUE9XRVJNT0RFX09UUl9SRUdPRkZTRVQpICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1BBTVAgcG93ZXIgbW9kZSBub3JtYWwgKi8KKyNkZWZpbmUgTExfT1BBTVBfUE9XRVJNT0RFX05PUk1BTFBPV0VSICAoT1BBTVBfUE9XRVJNT0RFX09UUl9SRUdPRkZTRVQpICAgICAgICAgICAgICAgICAgICAgIC8qITwgT1BBTVAgcG93ZXIgbW9kZSBub3JtYWwgKi8KICNkZWZpbmUgTExfT1BBTVBfUE9XRVJNT0RFX0xPV1BPV0VSICAgICAoT1BBTVBfUE9XRVJNT0RFX0xQT1RSX1JFR09GRlNFVCB8IE9QQU1QX0NTUl9PUEFMUE0pIC8qITwgT1BBTVAgcG93ZXIgbW9kZSBsb3ctcG93ZXIgKi8KKworI2RlZmluZSBMTF9PUEFNUF9QT1dFUk1PREVfTk9STUFMICAgICAgIExMX09QQU1QX1BPV0VSTU9ERV9OT1JNQUxQT1dFUiAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPUEFNUCBwb3dlciBtb2RlIG5vcm1hbCAtIE9sZCBOYW1pbmcgZm9yIGNvbXBhdGliaWxpdHkgKi8KKwogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw1eHhfbGxfcmNjLmggYi9JbmMvc3RtMzJsNXh4X2xsX3JjYy5oCmluZGV4IDI5NjM1OTcuLmM5Y2NjNjMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw1eHhfbGxfcmNjLmgKKysrIGIvSW5jL3N0bTMybDV4eF9sbF9yY2MuaApAQCAtMTA1Niw4ICsxMDU2LDkgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMUl9ESVZfOAogICAqIEByZXR2YWwgUExMIGNsb2NrIGZyZXF1ZW5jeSAoaW4gSHopCiAgICovCi0jZGVmaW5lIF9fTExfUkNDX0NBTENfUExMQ0xLX0ZSRVEoX19JTlBVVEZSRVFfXywgX19QTExNX18sIF9fUExMTl9fLCBfX1BMTFJfXykgKChfX0lOUFVURlJFUV9fKSAvICgoKChfX1BMTE1fXyk+PiBSQ0NfUExMQ0ZHUl9QTExNX1BvcykgKyAxVSkpICogKF9fUExMTl9fKSAvIFwKLSAgICAgICAgICAgICAgICAgICAoKCgoX19QTExSX18pID4+IFJDQ19QTExDRkdSX1BMTFJfUG9zKSArIDFVKSAqIDJVKSkKKyNkZWZpbmUgX19MTF9SQ0NfQ0FMQ19QTExDTEtfRlJFUShfX0lOUFVURlJFUV9fLCBfX1BMTE1fXywgX19QTExOX18sIF9fUExMUl9fKSBcCisgICgoX19JTlBVVEZSRVFfXykgLyAoKCgoX19QTExNX18pPj4gUkNDX1BMTENGR1JfUExMTV9Qb3MpICsgMVUpKSAqIChfX1BMTE5fXykgLyBcCisgICAoKCgoX19QTExSX18pID4+IFJDQ19QTExDRkdSX1BMTFJfUG9zKSArIDFVKSAqIDJVKSkKIAogLyoqCiAgICogQGJyaWVmICBIZWxwZXIgbWFjcm8gdG8gY2FsY3VsYXRlIHRoZSBQTExDTEsgZnJlcXVlbmN5IHVzZWQgb24gU0FJIGRvbWFpbgpAQCAtMTExNSw4ICsxMTE2LDkgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMUF9ESVZfMzEKICAgKiBAcmV0dmFsIFBMTCBjbG9jayBmcmVxdWVuY3kgKGluIEh6KQogICAqLwotI2RlZmluZSBfX0xMX1JDQ19DQUxDX1BMTENMS19TQUlfRlJFUShfX0lOUFVURlJFUV9fLCBfX1BMTE1fXywgX19QTExOX18sIF9fUExMUF9fKSAoKF9fSU5QVVRGUkVRX18pIC8gKCgoKF9fUExMTV9fKT4+IFJDQ19QTExDRkdSX1BMTE1fUG9zKSArIDFVKSkgKiAoX19QTExOX18pIC8gXAotICAgICAgICAgICAgICAgICAgICgoX19QTExQX18pID4+IFJDQ19QTExDRkdSX1BMTFBESVZfUG9zKSkKKyNkZWZpbmUgX19MTF9SQ0NfQ0FMQ19QTExDTEtfU0FJX0ZSRVEoX19JTlBVVEZSRVFfXywgX19QTExNX18sIF9fUExMTl9fLCBfX1BMTFBfXykgXAorICAoKF9fSU5QVVRGUkVRX18pIC8gKCgoKF9fUExMTV9fKT4+IFJDQ19QTExDRkdSX1BMTE1fUG9zKSArIDFVKSkgKiAoX19QTExOX18pIC8gXAorICAgKChfX1BMTFBfXykgPj4gUkNDX1BMTENGR1JfUExMUERJVl9Qb3MpKQogCiAvKioKICAgKiBAYnJpZWYgIEhlbHBlciBtYWNybyB0byBjYWxjdWxhdGUgdGhlIFBMTENMSyBmcmVxdWVuY3kgdXNlZCBvbiA0OE0gZG9tYWluCkBAIC0xMTQ4LDggKzExNTAsOSBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExRX0RJVl84CiAgICogQHJldHZhbCBQTEwgY2xvY2sgZnJlcXVlbmN5IChpbiBIeikKICAgKi8KLSNkZWZpbmUgX19MTF9SQ0NfQ0FMQ19QTExDTEtfNDhNX0ZSRVEoX19JTlBVVEZSRVFfXywgX19QTExNX18sIF9fUExMTl9fLCBfX1BMTFFfXykgKChfX0lOUFVURlJFUV9fKSAvICgoKChfX1BMTE1fXyk+PiBSQ0NfUExMQ0ZHUl9QTExNX1BvcykgKyAxVSkpICogKF9fUExMTl9fKSAvIFwKLSAgICAgICAgICAgICAgICAgICAoKCgoX19QTExRX18pID4+IFJDQ19QTExDRkdSX1BMTFFfUG9zKSArIDFVKSA8PCAxVSkpCisjZGVmaW5lIF9fTExfUkNDX0NBTENfUExMQ0xLXzQ4TV9GUkVRKF9fSU5QVVRGUkVRX18sIF9fUExMTV9fLCBfX1BMTE5fXywgX19QTExRX18pIFwKKyAgKChfX0lOUFVURlJFUV9fKSAvICgoKChfX1BMTE1fXyk+PiBSQ0NfUExMQ0ZHUl9QTExNX1BvcykgKyAxVSkpICogKF9fUExMTl9fKSAvIFwKKyAgICgoKChfX1BMTFFfXykgPj4gUkNDX1BMTENGR1JfUExMUV9Qb3MpICsgMVUpIDw8IDFVKSkKIAogLyoqCiAgICogQGJyaWVmICBIZWxwZXIgbWFjcm8gdG8gY2FsY3VsYXRlIHRoZSBQTExTQUkxIGZyZXF1ZW5jeSB1c2VkIGZvciBTQUkgZG9tYWluCkBAIC0xMjA4LDggKzEyMTEsOCBAQAogICAqIEByZXR2YWwgUExMU0FJMSBjbG9jayBmcmVxdWVuY3kgKGluIEh6KQogICAqLwogI2RlZmluZSBfX0xMX1JDQ19DQUxDX1BMTFNBSTFfU0FJX0ZSRVEoX19JTlBVVEZSRVFfXywgX19QTExTQUkxTV9fLCBfX1BMTFNBSTFOX18sIF9fUExMU0FJMVBfXykgXAotICAgICAgICAgICAgICAgICAgICgoX19JTlBVVEZSRVFfXykgLyAoKCgoX19QTExTQUkxTV9fKSA+PiBSQ0NfUExMU0FJMUNGR1JfUExMU0FJMU1fUG9zKSArIDFVKSkgKiAoX19QTExTQUkxTl9fKSAvIFwKLSAgICAgICAgICAgICAgICAgICAgKChfX1BMTFNBSTFQX18pID4+IFJDQ19QTExTQUkxQ0ZHUl9QTExTQUkxUERJVl9Qb3MpKQorICAoKF9fSU5QVVRGUkVRX18pIC8gKCgoKF9fUExMU0FJMU1fXykgPj4gUkNDX1BMTFNBSTFDRkdSX1BMTFNBSTFNX1BvcykgKyAxVSkpICogKF9fUExMU0FJMU5fXykgLyBcCisgICAoKF9fUExMU0FJMVBfXykgPj4gUkNDX1BMTFNBSTFDRkdSX1BMTFNBSTFQRElWX1BvcykpCiAKIC8qKgogICAqIEBicmllZiAgSGVscGVyIG1hY3JvIHRvIGNhbGN1bGF0ZSB0aGUgUExMU0FJMSBmcmVxdWVuY3kgdXNlZCBvbiA0OE0gZG9tYWluCkBAIC0xMjQyLDggKzEyNDUsOCBAQAogICAqIEByZXR2YWwgUExMU0FJMSBjbG9jayBmcmVxdWVuY3kgKGluIEh6KQogICAqLwogI2RlZmluZSBfX0xMX1JDQ19DQUxDX1BMTFNBSTFfNDhNX0ZSRVEoX19JTlBVVEZSRVFfXywgX19QTExTQUkxTV9fLCBfX1BMTFNBSTFOX18sIF9fUExMU0FJMVFfXykgXAotICAgICAgICAgICAgICAgICAgICgoX19JTlBVVEZSRVFfXykgLyAoKCgoX19QTExTQUkxTV9fKSA+PiBSQ0NfUExMU0FJMUNGR1JfUExMU0FJMU1fUG9zKSArIDFVKSkgKiAoX19QTExTQUkxTl9fKSAvIFwKLSAgICAgICAgICAgICAgICAgICAgKCgoKF9fUExMU0FJMVFfXykgPj4gUkNDX1BMTFNBSTFDRkdSX1BMTFNBSTFRX1BvcykgKyAxVSkgPDwgMVUpKQorICAoKF9fSU5QVVRGUkVRX18pIC8gKCgoKF9fUExMU0FJMU1fXykgPj4gUkNDX1BMTFNBSTFDRkdSX1BMTFNBSTFNX1BvcykgKyAxVSkpICogKF9fUExMU0FJMU5fXykgLyBcCisgICAoKCgoX19QTExTQUkxUV9fKSA+PiBSQ0NfUExMU0FJMUNGR1JfUExMU0FJMVFfUG9zKSArIDFVKSA8PCAxVSkpCiAKIC8qKgogICAqIEBicmllZiAgSGVscGVyIG1hY3JvIHRvIGNhbGN1bGF0ZSB0aGUgUExMU0FJMSBmcmVxdWVuY3kgdXNlZCBvbiBBREMgZG9tYWluCkBAIC0xMjc2LDggKzEyNzksOCBAQAogICAqIEByZXR2YWwgUExMU0FJMSBjbG9jayBmcmVxdWVuY3kgKGluIEh6KQogICAqLwogI2RlZmluZSBfX0xMX1JDQ19DQUxDX1BMTFNBSTFfQURDX0ZSRVEoX19JTlBVVEZSRVFfXywgX19QTExTQUkxTV9fLCBfX1BMTFNBSTFOX18sIF9fUExMU0FJMVJfXykgXAotICAgICAgICAgICAgICAgICAgICgoX19JTlBVVEZSRVFfXykgLyAoKCgoX19QTExTQUkxTV9fKSA+PiBSQ0NfUExMU0FJMUNGR1JfUExMU0FJMU1fUG9zKSArIDFVKSkgKiAoX19QTExTQUkxTl9fKSAvIFwKLSAgICAgICAgICAgICAgICAgICAgKCgoKF9fUExMU0FJMVJfXykgPj4gUkNDX1BMTFNBSTFDRkdSX1BMTFNBSTFSX1BvcykgKyAxVSkgPDwgMVUpKQorICAoKF9fSU5QVVRGUkVRX18pIC8gKCgoKF9fUExMU0FJMU1fXykgPj4gUkNDX1BMTFNBSTFDRkdSX1BMTFNBSTFNX1BvcykgKyAxVSkpICogKF9fUExMU0FJMU5fXykgLyBcCisgICAoKCgoX19QTExTQUkxUl9fKSA+PiBSQ0NfUExMU0FJMUNGR1JfUExMU0FJMVJfUG9zKSArIDFVKSA8PCAxVSkpCiAKIC8qKgogICAqIEBicmllZiAgSGVscGVyIG1hY3JvIHRvIGNhbGN1bGF0ZSB0aGUgUExMU0FJMiBmcmVxdWVuY3kgdXNlZCBmb3IgU0FJIGRvbWFpbgpAQCAtMTMzNiw4ICsxMzM5LDggQEAKICAgKiBAcmV0dmFsIFBMTFNBSTIgY2xvY2sgZnJlcXVlbmN5IChpbiBIeikKICAgKi8KICNkZWZpbmUgX19MTF9SQ0NfQ0FMQ19QTExTQUkyX1NBSV9GUkVRKF9fSU5QVVRGUkVRX18sIF9fUExMU0FJMk1fXywgX19QTExTQUkyTl9fLCBfX1BMTFNBSTJQX18pIFwKLSAgICAgICAgICAgICAgICAgICAoKF9fSU5QVVRGUkVRX18pIC8gKCgoKF9fUExMU0FJMk1fXykgPj4gUkNDX1BMTFNBSTJDRkdSX1BMTFNBSTJNX1BvcykgKyAxVSkpICogKF9fUExMU0FJMk5fXykgLyBcCi0gICAgICAgICAgICAgICAgICAgICgoX19QTExTQUkyUF9fKSA+PiBSQ0NfUExMU0FJMkNGR1JfUExMU0FJMlBESVZfUG9zKSkKKyAgKChfX0lOUFVURlJFUV9fKSAvICgoKChfX1BMTFNBSTJNX18pID4+IFJDQ19QTExTQUkyQ0ZHUl9QTExTQUkyTV9Qb3MpICsgMVUpKSAqIChfX1BMTFNBSTJOX18pIC8gXAorICAgKChfX1BMTFNBSTJQX18pID4+IFJDQ19QTExTQUkyQ0ZHUl9QTExTQUkyUERJVl9Qb3MpKQogCiAvKioKICAgKiBAYnJpZWYgIEhlbHBlciBtYWNybyB0byBjYWxjdWxhdGUgdGhlIEhDTEsgZnJlcXVlbmN5CkBAIC0xMzU0LDcgKzEzNTcsOCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19TWVNDTEtfRElWXzUxMgogICAqIEByZXR2YWwgSENMSyBjbG9jayBmcmVxdWVuY3kgKGluIEh6KQogICAqLwotI2RlZmluZSBfX0xMX1JDQ19DQUxDX0hDTEtfRlJFUShfX1NZU0NMS0ZSRVFfXywgX19BSEJQUkVTQ0FMRVJfXykgKChfX1NZU0NMS0ZSRVFfXykgPj4gQUhCUHJlc2NUYWJsZVsoKF9fQUhCUFJFU0NBTEVSX18pICYgUkNDX0NGR1JfSFBSRSkgPj4gIFJDQ19DRkdSX0hQUkVfUG9zXSkKKyNkZWZpbmUgX19MTF9SQ0NfQ0FMQ19IQ0xLX0ZSRVEoX19TWVNDTEtGUkVRX18sIF9fQUhCUFJFU0NBTEVSX18pIFwKKyAgKChfX1NZU0NMS0ZSRVFfXykgPj4gQUhCUHJlc2NUYWJsZVsoKF9fQUhCUFJFU0NBTEVSX18pICYgUkNDX0NGR1JfSFBSRSkgPj4gIFJDQ19DRkdSX0hQUkVfUG9zXSkKIAogLyoqCiAgICogQGJyaWVmICBIZWxwZXIgbWFjcm8gdG8gY2FsY3VsYXRlIHRoZSBQQ0xLMSBmcmVxdWVuY3kgKEFCUDEpCkBAIC0xNDE0LDkgKzE0MTgsMTAgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfTVNJU1JBTkdFXzcKICAgKiBAcmV0dmFsIE1TSSBjbG9jayBmcmVxdWVuY3kgKGluIEh6KQogICAqLwotI2RlZmluZSBfX0xMX1JDQ19DQUxDX01TSV9GUkVRKF9fTVNJU0VMX18sIF9fTVNJUkFOR0VfXykgICAoKChfX01TSVNFTF9fKSA9PSBMTF9SQ0NfTVNJUkFOR0VTRUxfU1RBTkRCWSkgPyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBNU0lSYW5nZVRhYmxlWygoX19NU0lSQU5HRV9fKSA+PiBSQ0NfQ1NSX01TSVNSQU5HRV9Qb3MpICYgMHgwRlVdIDogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTVNJUmFuZ2VUYWJsZVsoKF9fTVNJUkFOR0VfXykgPj4gUkNDX0NSX01TSVJBTkdFX1BvcykgJiAweDBGVV0pCisjZGVmaW5lIF9fTExfUkNDX0NBTENfTVNJX0ZSRVEoX19NU0lTRUxfXywgX19NU0lSQU5HRV9fKSBcCisgICgoKF9fTVNJU0VMX18pID09IExMX1JDQ19NU0lSQU5HRVNFTF9TVEFOREJZKSA/IFwKKyAgIE1TSVJhbmdlVGFibGVbKChfX01TSVJBTkdFX18pID4+IFJDQ19DU1JfTVNJU1JBTkdFX1BvcykgJiAweDBGVV0gOiBcCisgICBNU0lSYW5nZVRhYmxlWygoX19NU0lSQU5HRV9fKSA+PiBSQ0NfQ1JfTVNJUkFOR0VfUG9zKSAmIDB4MEZVXSkKIAogLyoqCiAgICogQH0KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw1eHhfbGxfcnRjLmggYi9JbmMvc3RtMzJsNXh4X2xsX3J0Yy5oCmluZGV4IDQ1NTdlMzAuLmFmZmI0NDcgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw1eHhfbGxfcnRjLmgKKysrIGIvSW5jL3N0bTMybDV4eF9sbF9ydGMuaApAQCAtNTMyOCw2ICs1MzI4LDc5IEBACiB9CiAKIC8qKgorICAqIEBicmllZiAgRW5hYmxlIFRlbXBlcmF0dXJlIE1vbml0b3JpbmcuCisgICogQHJtdG9sbCBUQU1QX0NGR1IgICAgICAgICAgIFRNT05FTiAgICAgICAgICBMTF9SVENfRW5hYmxlVGVtcGVyYXR1cmVNb25pdG9yaW5nCisgICogQHBhcmFtICBSVEN4IFJUQyBJbnN0YW5jZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUlRDX0VuYWJsZVRlbXBlcmF0dXJlTW9uaXRvcmluZyhSVENfVHlwZURlZiAqUlRDeCkKK3sKKyAgVU5VU0VEKFJUQ3gpOworICBTRVRfQklUKFRBTVAtPkNGR1IsIFRBTVBfQ0ZHUl9UTU9ORU4pOworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgVGVtcGVyYXR1cmUgTW9uaXRvcmluZy4KKyAgKiBAcm10b2xsIFRBTVBfQ0ZHUiAgICAgICAgICAgVE1PTkVOICAgICAgICAgIExMX1JUQ19EaXNhYmxlVGVtcGVyYXR1cmVNb25pdG9yaW5nCisgICogQHBhcmFtICBSVEN4IFJUQyBJbnN0YW5jZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUlRDX0Rpc2FibGVUZW1wZXJhdHVyZU1vbml0b3JpbmcoUlRDX1R5cGVEZWYgKlJUQ3gpCit7CisgIFVOVVNFRChSVEN4KTsKKyAgQ0xFQVJfQklUKFRBTVAtPkNGR1IsIFRBTVBfQ0ZHUl9UTU9ORU4pOworfQorCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSBWb2x0YWdlIE1vbml0b3JpbmcuCisgICogQHJtdG9sbCBUQU1QX0NGR1IgICAgICAgICAgIFZNT05FTiAgICAgICAgICBMTF9SVENfRW5hYmxlVm9sdGFnZU1vbml0b3JpbmcKKyAgKiBAcGFyYW0gIFJUQ3ggUlRDIEluc3RhbmNlCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SVENfRW5hYmxlVm9sdGFnZU1vbml0b3JpbmcoUlRDX1R5cGVEZWYgKlJUQ3gpCit7CisgIFVOVVNFRChSVEN4KTsKKyAgU0VUX0JJVChUQU1QLT5DRkdSLCBUQU1QX0NGR1JfVk1PTkVOKTsKK30KKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIFZvbHRhZ2UgTW9uaXRvcmluZy4KKyAgKiBAcm10b2xsIFRBTVBfQ0ZHUiAgICAgICAgICAgVk1PTkVOICAgICAgICAgIExMX1JUQ19EaXNhYmxlVm9sdGFnZU1vbml0b3JpbmcKKyAgKiBAcGFyYW0gIFJUQ3ggUlRDIEluc3RhbmNlCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SVENfRGlzYWJsZVZvbHRhZ2VNb25pdG9yaW5nKFJUQ19UeXBlRGVmICpSVEN4KQoreworICBVTlVTRUQoUlRDeCk7CisgIENMRUFSX0JJVChUQU1QLT5DRkdSLCBUQU1QX0NGR1JfVk1PTkVOKTsKK30KKworLyoqCisgICogQGJyaWVmICBFbmFibGUgV1VUIE1vbml0b3JpbmcuCisgICogQHJtdG9sbCBUQU1QX0NGR1IgICAgICAgICAgIFdVVE1PTkVOICAgICAgICAgIExMX1JUQ19FbmFibGVXVVRNb25pdG9yaW5nCisgICogQHBhcmFtICBSVEN4IFJUQyBJbnN0YW5jZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUlRDX0VuYWJsZVdVVE1vbml0b3JpbmcoUlRDX1R5cGVEZWYgKlJUQ3gpCit7CisgIFVOVVNFRChSVEN4KTsKKyAgU0VUX0JJVChUQU1QLT5DRkdSLCBUQU1QX0NGR1JfV1VUTU9ORU4pOworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgV1VUIE1vbml0b3JpbmcuCisgICogQHJtdG9sbCBUQU1QX0NGR1IgICAgICAgICAgIFdVVE1PTkVOICAgICAgICAgIExMX1JUQ19EaXNhYmxlV1VUTW9uaXRvcmluZworICAqIEBwYXJhbSAgUlRDeCBSVEMgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX1JUQ19EaXNhYmxlV1VUTW9uaXRvcmluZyhSVENfVHlwZURlZiAqUlRDeCkKK3sKKyAgVU5VU0VEKFJUQ3gpOworICBDTEVBUl9CSVQoVEFNUC0+Q0ZHUiwgVEFNUF9DRkdSX1dVVE1PTkVOKTsKK30KKworCisvKioKICAgKiBAfQogICAqLwogCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNXh4X2xsX3NkbW1jLmggYi9JbmMvc3RtMzJsNXh4X2xsX3NkbW1jLmgKaW5kZXggZjJiNTBiZi4uZjljMjQ2ZiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDV4eF9sbF9zZG1tYy5oCisrKyBiL0luYy9zdG0zMmw1eHhfbGxfc2RtbWMuaApAQCAtMjIsNyArMjIsNyBAQAogI2RlZmluZSBTVE0zMkw1eHhfTExfU0RNTUNfSAogCiAjaWZkZWYgX19jcGx1c3BsdXMKLSBleHRlcm4gIkMiIHsKK2V4dGVybiAiQyIgewogI2VuZGlmCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC02Niw3ICs2Niw3IEBACiAgIHVpbnQzMl90IFRyYW5jZWl2ZXJQcmVzZW50OyAgICAvKiE8IFNwZWNpZmllcyBpZiB0aGVyZSBpcyBhIDFWOCBUcmFuc2NlaXZlci9Td2l0Y2hlci4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBTRE1NQ19MTF9UUkFOU0NFSVZFUl9QUkVTRU5UICAgICAgICovCiAjZW5kaWYgLyogVVNFX1NEX1RSQU5TQ0VJVkVSICovCi19U0RNTUNfSW5pdFR5cGVEZWY7Cit9IFNETU1DX0luaXRUeXBlRGVmOwogCiAKIC8qKgpAQCAtOTIsNyArOTIsNyBAQAogICB1aW50MzJfdCBDUFNNOyAgICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB3aGV0aGVyIFNETU1DIENvbW1hbmQgcGF0aCBzdGF0ZSBtYWNoaW5lIChDUFNNKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBTRE1NQ19MTF9DUFNNX1N0YXRlICAgICAgICAgICAgKi8KLX1TRE1NQ19DbWRJbml0VHlwZURlZjsKK30gU0RNTUNfQ21kSW5pdFR5cGVEZWY7CiAKIAogLyoqCkBAIC0xMTcsNyArMTE3LDcgQEAKICAgdWludDMyX3QgRFBTTTsgICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgd2hldGhlciBTRE1NQyBEYXRhIHBhdGggc3RhdGUgbWFjaGluZSAoRFBTTSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBlbmFibGVkIG9yIGRpc2FibGVkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgU0RNTUNfTExfRFBTTV9TdGF0ZSAgICAgICAgICovCi19U0RNTUNfRGF0YUluaXRUeXBlRGVmOworfSBTRE1NQ19EYXRhSW5pdFR5cGVEZWY7CiAKIC8qKgogICAqIEB9CkBAIC0xMzUsMTMgKzEzNSwxMyBAQAogI2RlZmluZSBTRE1NQ19FUlJPUl9UWF9VTkRFUlJVTiAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwVSkgICAvKiE8IFRyYW5zbWl0IEZJRk8gdW5kZXJydW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgU0RNTUNfRVJST1JfUlhfT1ZFUlJVTiAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMFUpICAgLyohPCBSZWNlaXZlIEZJRk8gb3ZlcnJ1biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFNETU1DX0VSUk9SX0FERFJfTUlTQUxJR05FRCAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDBVKSAgIC8qITwgTWlzYWxpZ25lZCBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19FUlJPUl9CTE9DS19MRU5fRVJSICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwVSkgICAvKiE8IFRyYW5zZmVycmVkIGJsb2NrIGxlbmd0aCBpcyBub3QgYWxsb3dlZCBmb3IgdGhlIGNhcmQgb3IgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHRyYW5zZmVycmVkIGJ5dGVzIGRvZXMgbm90IG1hdGNoIHRoZSBibG9jayBsZW5ndGggICAqLworI2RlZmluZSBTRE1NQ19FUlJPUl9CTE9DS19MRU5fRVJSICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwVSkgICAvKiE8IFRyYW5zZmVycmVkIGJsb2NrIGxlbmd0aCBpcyBub3QgYWxsb3dlZCBmb3IgdGhlIGNhcmQgb3IgdGhlICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBudW1iZXIgb2YgdHJhbnNmZXJyZWQgYnl0ZXMgZG9lcyBub3QgbWF0Y2ggdGhlIGJsb2NrIGxlbmd0aCAgICovCiAjZGVmaW5lIFNETU1DX0VSUk9SX0VSQVNFX1NFUV9FUlIgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDBVKSAgIC8qITwgQW4gZXJyb3IgaW4gdGhlIHNlcXVlbmNlIG9mIGVyYXNlIGNvbW1hbmQgb2NjdXJzICAgICAgICAgICAgICAqLwogI2RlZmluZSBTRE1NQ19FUlJPUl9CQURfRVJBU0VfUEFSQU0gICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwVSkgICAvKiE8IEFuIGludmFsaWQgc2VsZWN0aW9uIGZvciBlcmFzZSBncm91cHMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgU0RNTUNfRVJST1JfV1JJVEVfUFJPVF9WSU9MQVRJT04gICAgICgodWludDMyX3QpMHgwMDAwMDQwMFUpICAgLyohPCBBdHRlbXB0IHRvIHByb2dyYW0gYSB3cml0ZSBwcm90ZWN0IGJsb2NrICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0VSUk9SX0xPQ0tfVU5MT0NLX0ZBSUxFRCAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDBVKSAgIC8qITwgU2VxdWVuY2Ugb3IgcGFzc3dvcmQgZXJyb3IgaGFzIGJlZW4gZGV0ZWN0ZWQgaW4gdW5sb2NrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBvciBpZiB0aGVyZSB3YXMgYW4gYXR0ZW1wdCB0byBhY2Nlc3MgYSBsb2NrZWQgY2FyZCAgICAqLworI2RlZmluZSBTRE1NQ19FUlJPUl9MT0NLX1VOTE9DS19GQUlMRUQgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwVSkgICAvKiE8IFNlcXVlbmNlIG9yIHBhc3N3b3JkIGVycm9yIGhhcyBiZWVuIGRldGVjdGVkIGluIHVubG9jayAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBjb21tYW5kIG9yIGlmIHRoZXJlIHdhcyBhbiBhdHRlbXB0IHRvIGFjY2VzcyBhIGxvY2tlZCBjYXJkICAgICovCiAjZGVmaW5lIFNETU1DX0VSUk9SX0NPTV9DUkNfRkFJTEVEICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDBVKSAgIC8qITwgQ1JDIGNoZWNrIG9mIHRoZSBwcmV2aW91cyBjb21tYW5kIGZhaWxlZCAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBTRE1NQ19FUlJPUl9JTExFR0FMX0NNRCAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwVSkgICAvKiE8IENvbW1hbmQgaXMgbm90IGxlZ2FsIGZvciB0aGUgY2FyZCBzdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgU0RNTUNfRVJST1JfQ0FSRF9FQ0NfRkFJTEVEICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMFUpICAgLyohPCBDYXJkIGludGVybmFsIEVDQyB3YXMgYXBwbGllZCBidXQgZmFpbGVkIHRvIGNvcnJlY3QgdGhlIGRhdGEgICovCkBAIC0xNTIsOCArMTUyLDggQEAKICNkZWZpbmUgU0RNTUNfRVJST1JfQ0lEX0NTRF9PVkVSV1JJVEUgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMFUpICAgLyohPCBDSUQvQ1NEIG92ZXJ3cml0ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFNETU1DX0VSUk9SX1dQX0VSQVNFX1NLSVAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDBVKSAgIC8qITwgT25seSBwYXJ0aWFsIGFkZHJlc3Mgc3BhY2Ugd2FzIGVyYXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBTRE1NQ19FUlJPUl9DQVJEX0VDQ19ESVNBQkxFRCAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwVSkgICAvKiE8IENvbW1hbmQgaGFzIGJlZW4gZXhlY3V0ZWQgd2l0aG91dCB1c2luZyBpbnRlcm5hbCBFQ0MgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfRVJST1JfRVJBU0VfUkVTRVQgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMFUpICAgLyohPCBFcmFzZSBzZXF1ZW5jZSB3YXMgY2xlYXJlZCBiZWZvcmUgZXhlY3V0aW5nIGJlY2F1c2UgYW4gb3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgZXJhc2Ugc2VxdWVuY2UgY29tbWFuZCB3YXMgcmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19FUlJPUl9FUkFTRV9SRVNFVCAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwVSkgICAvKiE8IEVyYXNlIHNlcXVlbmNlIHdhcyBjbGVhcmVkIGJlZm9yZSBleGVjdXRpbmcgYmVjYXVzZSBhbiBvdXQgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBvZiBlcmFzZSBzZXF1ZW5jZSBjb21tYW5kIHdhcyByZWNlaXZlZCAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFNETU1DX0VSUk9SX0FLRV9TRVFfRVJSICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDBVKSAgIC8qITwgRXJyb3IgaW4gc2VxdWVuY2Ugb2YgYXV0aGVudGljYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBTRE1NQ19FUlJPUl9JTlZBTElEX1ZPTFRSQU5HRSAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwVSkgICAvKiE8IEVycm9yIGluIGNhc2Ugb2YgaW52YWxpZCB2b2x0YWdlIHJhbmdlICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgU0RNTUNfRVJST1JfQUREUl9PVVRfT0ZfUkFOR0UgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMFUpICAgLyohPCBFcnJvciB3aGVuIGFkZHJlc3NlZCBibG9jayBpcyBvdXQgb2YgcmFuZ2UgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNzIsMTIgKzE3MiwxMiBAQAogI2RlZmluZSBTRE1NQ19DTURfQUxMX1NFTkRfQ0lEICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTJVKSAgIC8qITwgQXNrcyBhbnkgY2FyZCBjb25uZWN0ZWQgdG8gdGhlIGhvc3QgdG8gc2VuZCB0aGUgQ0lEIG51bWJlcnMgb24gdGhlIENNRCBsaW5lLiAgICAgICAgICAgICAqLwogI2RlZmluZSBTRE1NQ19DTURfU0VUX1JFTF9BRERSICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTNVKSAgIC8qITwgQXNrcyB0aGUgY2FyZCB0byBwdWJsaXNoIGEgbmV3IHJlbGF0aXZlIGFkZHJlc3MgKFJDQSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBTRE1NQ19DTURfU0VUX0RTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTRVKSAgIC8qITwgUHJvZ3JhbXMgdGhlIERTUiBvZiBhbGwgY2FyZHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19DTURfU0RNTUNfU0VOX09QX0NPTkQgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTVVKSAgIC8qITwgU2VuZHMgaG9zdCBjYXBhY2l0eSBzdXBwb3J0IGluZm9ybWF0aW9uIChIQ1MpIGFuZCBhc2tzIHRoZSBhY2Nlc3NlZCBjYXJkIHRvIHNlbmQgaXRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpbmcgY29uZGl0aW9uIHJlZ2lzdGVyIChPQ1IpIGNvbnRlbnQgaW4gdGhlIHJlc3BvbnNlIG9uIHRoZSBDTUQgbGluZS4gICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19DTURfU0RNTUNfU0VOX09QX0NPTkQgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTVVKSAgIC8qITwgU2VuZHMgaG9zdCBjYXBhY2l0eSBzdXBwb3J0IGluZm9ybWF0aW9uIChIQ1MpIGFuZCBhc2tzIHRoZSBhY2Nlc3NlZCBjYXJkIHRvIHNlbmQgaXRzICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgb3BlcmF0aW5nIGNvbmRpdGlvbiByZWdpc3RlciAoT0NSKSBjb250ZW50IGluIHRoZSByZXNwb25zZSBvbiB0aGUgQ01EIGxpbmUuICAgICAgICAgICAgICAqLwogI2RlZmluZSBTRE1NQ19DTURfSFNfU1dJVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTZVKSAgIC8qITwgQ2hlY2tzIHN3aXRjaGFibGUgZnVuY3Rpb24gKG1vZGUgMCkgYW5kIHN3aXRjaCBjYXJkIGZ1bmN0aW9uIChtb2RlIDEpLiAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBTRE1NQ19DTURfU0VMX0RFU0VMX0NBUkQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTdVKSAgIC8qITwgU2VsZWN0cyB0aGUgY2FyZCBieSBpdHMgb3duIHJlbGF0aXZlIGFkZHJlc3MgYW5kIGdldHMgZGVzZWxlY3RlZCBieSBhbnkgb3RoZXIgYWRkcmVzcyAgICAqLwotI2RlZmluZSBTRE1NQ19DTURfSFNfU0VORF9FWFRfQ1NEICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KThVKSAgIC8qITwgU2VuZHMgU0QgTWVtb3J5IENhcmQgaW50ZXJmYWNlIGNvbmRpdGlvbiwgd2hpY2ggaW5jbHVkZXMgaG9zdCBzdXBwbHkgdm9sdGFnZSBpbmZvcm1hdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGFza3MgdGhlIGNhcmQgd2hldGhlciBjYXJkIHN1cHBvcnRzIHZvbHRhZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfQ01EX0hTX1NFTkRfRVhUX0NTRCAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCk4VSkgICAvKiE8IFNlbmRzIFNEIE1lbW9yeSBDYXJkIGludGVyZmFjZSBjb25kaXRpb24sIHdoaWNoIGluY2x1ZGVzIGhvc3Qgc3VwcGx5IHZvbHRhZ2UgaW5mb3JtYXRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8ICBhbmQgYXNrcyB0aGUgY2FyZCB3aGV0aGVyIGNhcmQgc3VwcG9ydHMgdm9sdGFnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgU0RNTUNfQ01EX1NFTkRfQ1NEICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCk5VSkgICAvKiE8IEFkZHJlc3NlZCBjYXJkIHNlbmRzIGl0cyBjYXJkIHNwZWNpZmljIGRhdGEgKENTRCkgb24gdGhlIENNRCBsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgU0RNTUNfQ01EX1NFTkRfQ0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkxMFUpICAvKiE8IEFkZHJlc3NlZCBjYXJkIHNlbmRzIGl0cyBjYXJkIGlkZW50aWZpY2F0aW9uIChDSUQpIG9uIHRoZSBDTUQgbGluZS4gICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgU0RNTUNfQ01EX1ZPTFRBR0VfU1dJVENIICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkxMVUpICAvKiE8IFNEIGNhcmQgVm9sdGFnZSBzd2l0Y2ggdG8gMS44ViBtb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE4NSwxOCArMTg1LDE4IEBACiAjZGVmaW5lIFNETU1DX0NNRF9TRU5EX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMTNVKSAgLyohPCBBZGRyZXNzZWQgY2FyZCBzZW5kcyBpdHMgc3RhdHVzIHJlZ2lzdGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFNETU1DX0NNRF9IU19CVVNURVNUX1JFQUQgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMTRVKSAgLyohPCBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFNETU1DX0NNRF9HT19JTkFDVElWRV9TVEFURSAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMTVVKSAgLyohPCBTZW5kcyBhbiBhZGRyZXNzZWQgY2FyZCBpbnRvIHRoZSBpbmFjdGl2ZSBzdGF0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0NNRF9TRVRfQkxPQ0tMRU4gICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMTZVKSAgLyohPCBTZXRzIHRoZSBibG9jayBsZW5ndGggKGluIGJ5dGVzIGZvciBTRFNDKSBmb3IgYWxsIGZvbGxvd2luZyBibG9jayBjb21tYW5kcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWQsIHdyaXRlLCBsb2NrKS4gRGVmYXVsdCBibG9jayBsZW5ndGggaXMgZml4ZWQgdG8gNTEyIEJ5dGVzLiBOb3QgZWZmZWN0aXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgU0RIUyBhbmQgU0RYQy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0NNRF9SRUFEX1NJTkdMRV9CTE9DSyAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMTdVKSAgLyohPCBSZWFkcyBzaW5nbGUgYmxvY2sgb2Ygc2l6ZSBzZWxlY3RlZCBieSBTRVRfQkxPQ0tMRU4gaW4gY2FzZSBvZiBTRFNDLCBhbmQgYSBibG9jayBvZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWQgNTEyIGJ5dGVzIGluIGNhc2Ugb2YgU0RIQyBhbmQgU0RYQy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19DTURfUkVBRF9NVUxUX0JMT0NLICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTE4VSkgIC8qITwgQ29udGludW91c2x5IHRyYW5zZmVycyBkYXRhIGJsb2NrcyBmcm9tIGNhcmQgdG8gaG9zdCB1bnRpbCBpbnRlcnJ1cHRlZCBieQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RPUF9UUkFOU01JU1NJT04gY29tbWFuZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19DTURfU0VUX0JMT0NLTEVOICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTE2VSkgIC8qITwgU2V0cyB0aGUgYmxvY2sgbGVuZ3RoIChpbiBieXRlcyBmb3IgU0RTQykgZm9yIGFsbCBmb2xsb3dpbmcgYmxvY2sgY29tbWFuZHMgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKHJlYWQsIHdyaXRlLCBsb2NrKS4gRGVmYXVsdCBibG9jayBsZW5ndGggaXMgZml4ZWQgdG8gNTEyIEJ5dGVzLiBOb3QgZWZmZWN0aXZlICAgICAgICAgICAqLworLyohPCBmb3IgU0RIUyBhbmQgU0RYQy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0NNRF9SRUFEX1NJTkdMRV9CTE9DSyAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMTdVKSAgLyohPCBSZWFkcyBzaW5nbGUgYmxvY2sgb2Ygc2l6ZSBzZWxlY3RlZCBieSBTRVRfQkxPQ0tMRU4gaW4gY2FzZSBvZiBTRFNDLCBhbmQgYSBibG9jayBvZiAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAgZml4ZWQgNTEyIGJ5dGVzIGluIGNhc2Ugb2YgU0RIQyBhbmQgU0RYQy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0NNRF9SRUFEX01VTFRfQkxPQ0sgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMThVKSAgLyohPCBDb250aW51b3VzbHkgdHJhbnNmZXJzIGRhdGEgYmxvY2tzIGZyb20gY2FyZCB0byBob3N0IHVudGlsIGludGVycnVwdGVkIGJ5ICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTVE9QX1RSQU5TTUlTU0lPTiBjb21tYW5kLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFNETU1DX0NNRF9IU19CVVNURVNUX1dSSVRFICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMTlVKSAgLyohPCA2NCBieXRlcyB0dW5pbmcgcGF0dGVybiBpcyBzZW50IGZvciBTRFI1MCBhbmQgU0RSMTA0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFNETU1DX0NNRF9XUklURV9EQVRfVU5USUxfU1RPUCAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMjBVKSAgLyohPCBTcGVlZCBjbGFzcyBjb250cm9sIGNvbW1hbmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFNETU1DX0NNRF9TRVRfQkxPQ0tfQ09VTlQgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMjNVKSAgLyohPCBTcGVjaWZ5IGJsb2NrIGNvdW50IGZvciBDTUQxOCBhbmQgQ01EMjUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0NNRF9XUklURV9TSU5HTEVfQkxPQ0sgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMjRVKSAgLyohPCBXcml0ZXMgc2luZ2xlIGJsb2NrIG9mIHNpemUgc2VsZWN0ZWQgYnkgU0VUX0JMT0NLTEVOIGluIGNhc2Ugb2YgU0RTQywgYW5kIGEgYmxvY2sgb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkIDUxMiBieXRlcyBpbiBjYXNlIG9mIFNESEMgYW5kIFNEWEMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfQ01EX1dSSVRFX1NJTkdMRV9CTE9DSyAgICAgICAgICAgICAgICAgICgodWludDhfdCkyNFUpICAvKiE8IFdyaXRlcyBzaW5nbGUgYmxvY2sgb2Ygc2l6ZSBzZWxlY3RlZCBieSBTRVRfQkxPQ0tMRU4gaW4gY2FzZSBvZiBTRFNDLCBhbmQgYSBibG9jayBvZiAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGZpeGVkIDUxMiBieXRlcyBpbiBjYXNlIG9mIFNESEMgYW5kIFNEWEMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgU0RNTUNfQ01EX1dSSVRFX01VTFRfQkxPQ0sgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkyNVUpICAvKiE8IENvbnRpbnVvdXNseSB3cml0ZXMgYmxvY2tzIG9mIGRhdGEgdW50aWwgYSBTVE9QX1RSQU5TTUlTU0lPTiBmb2xsb3dzLiAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgU0RNTUNfQ01EX1BST0dfQ0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkyNlUpICAvKiE8IFJlc2VydmVkIGZvciBtYW51ZmFjdHVyZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgU0RNTUNfQ01EX1BST0dfQ1NEICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkyN1UpICAvKiE8IFByb2dyYW1taW5nIG9mIHRoZSBwcm9ncmFtbWFibGUgYml0cyBvZiB0aGUgQ1NELiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTIwNSwzMiArMjA1LDMyIEBACiAjZGVmaW5lIFNETU1DX0NNRF9TRU5EX1dSSVRFX1BST1QgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMzBVKSAgLyohPCBBc2tzIHRoZSBjYXJkIHRvIHNlbmQgdGhlIHN0YXR1cyBvZiB0aGUgd3JpdGUgcHJvdGVjdGlvbiBiaXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFNETU1DX0NNRF9TRF9FUkFTRV9HUlBfU1RBUlQgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMzJVKSAgLyohPCBTZXRzIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCB3cml0ZSBibG9jayB0byBiZSBlcmFzZWQuIChGb3IgU0QgY2FyZCBvbmx5KS4gICAgICAgICAgICAgICovCiAjZGVmaW5lIFNETU1DX0NNRF9TRF9FUkFTRV9HUlBfRU5EICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMzNVKSAgLyohPCBTZXRzIHRoZSBhZGRyZXNzIG9mIHRoZSBsYXN0IHdyaXRlIGJsb2NrIG9mIHRoZSBjb250aW51b3VzIHJhbmdlIHRvIGJlIGVyYXNlZC4gICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0NNRF9FUkFTRV9HUlBfU1RBUlQgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMzVVKSAgLyohPCBTZXRzIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCB3cml0ZSBibG9jayB0byBiZSBlcmFzZWQuIFJlc2VydmVkIGZvciBlYWNoIGNvbW1hbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBzZXQgYnkgc3dpdGNoIGZ1bmN0aW9uIGNvbW1hbmQgKENNRDYpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX0VSQVNFX0dSUF9FTkQgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkzNlUpICAvKiE8IFNldHMgdGhlIGFkZHJlc3Mgb2YgdGhlIGxhc3Qgd3JpdGUgYmxvY2sgb2YgdGhlIGNvbnRpbnVvdXMgcmFuZ2UgdG8gYmUgZXJhc2VkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQgZm9yIGVhY2ggY29tbWFuZCBzeXN0ZW0gc2V0IGJ5IHN3aXRjaCBmdW5jdGlvbiBjb21tYW5kIChDTUQ2KS4gICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19DTURfRVJBU0VfR1JQX1NUQVJUICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTM1VSkgIC8qITwgU2V0cyB0aGUgYWRkcmVzcyBvZiB0aGUgZmlyc3Qgd3JpdGUgYmxvY2sgdG8gYmUgZXJhc2VkLiBSZXNlcnZlZCBmb3IgZWFjaCBjb21tYW5kICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgc3lzdGVtIHNldCBieSBzd2l0Y2ggZnVuY3Rpb24gY29tbWFuZCAoQ01ENikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19DTURfRVJBU0VfR1JQX0VORCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTM2VSkgIC8qITwgU2V0cyB0aGUgYWRkcmVzcyBvZiB0aGUgbGFzdCB3cml0ZSBibG9jayBvZiB0aGUgY29udGludW91cyByYW5nZSB0byBiZSBlcmFzZWQuICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgIFJlc2VydmVkIGZvciBlYWNoIGNvbW1hbmQgc3lzdGVtIHNldCBieSBzd2l0Y2ggZnVuY3Rpb24gY29tbWFuZCAoQ01ENikuICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBTRE1NQ19DTURfRVJBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTM4VSkgIC8qITwgUmVzZXJ2ZWQgZm9yIFNEIHNlY3VyaXR5IGFwcGxpY2F0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBTRE1NQ19DTURfRkFTVF9JTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTM5VSkgIC8qITwgU0QgY2FyZCBkb2Vzbid0IHN1cHBvcnQgaXQgKFJlc2VydmVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBTRE1NQ19DTURfR09fSVJRX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTQwVSkgIC8qITwgU0QgY2FyZCBkb2Vzbid0IHN1cHBvcnQgaXQgKFJlc2VydmVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19DTURfTE9DS19VTkxPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTQyVSkgIC8qITwgU2V0cy9yZXNldHMgdGhlIHBhc3N3b3JkIG9yIGxvY2svdW5sb2NrIHRoZSBjYXJkLiBUaGUgc2l6ZSBvZiB0aGUgZGF0YSBibG9jayBpcyBzZXQgYnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBTRVRfQkxPQ0tfTEVOIGNvbW1hbmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX0FQUF9DTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCk1NVUpICAvKiE8IEluZGljYXRlcyB0byB0aGUgY2FyZCB0aGF0IHRoZSBuZXh0IGNvbW1hbmQgaXMgYW4gYXBwbGljYXRpb24gc3BlY2lmaWMgY29tbWFuZCByYXRoZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYW4gYSBzdGFuZGFyZCBjb21tYW5kLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX0dFTl9DTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCk1NlUpICAvKiE8IFVzZWQgZWl0aGVyIHRvIHRyYW5zZmVyIGEgZGF0YSBibG9jayB0byB0aGUgY2FyZCBvciB0byBnZXQgYSBkYXRhIGJsb2NrIGZyb20gdGhlIGNhcmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBnZW5lcmFsIHB1cnBvc2UvYXBwbGljYXRpb24gc3BlY2lmaWMgY29tbWFuZHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfQ01EX0xPQ0tfVU5MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCk0MlUpICAvKiE8IFNldHMvcmVzZXRzIHRoZSBwYXNzd29yZCBvciBsb2NrL3VubG9jayB0aGUgY2FyZC4gVGhlIHNpemUgb2YgdGhlIGRhdGEgYmxvY2sgaXMgc2V0IGJ5ICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHRoZSBTRVRfQkxPQ0tfTEVOIGNvbW1hbmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfQ01EX0FQUF9DTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCk1NVUpICAvKiE8IEluZGljYXRlcyB0byB0aGUgY2FyZCB0aGF0IHRoZSBuZXh0IGNvbW1hbmQgaXMgYW4gYXBwbGljYXRpb24gc3BlY2lmaWMgY29tbWFuZCByYXRoZXIgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHRoYW4gYSBzdGFuZGFyZCBjb21tYW5kLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfQ01EX0dFTl9DTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCk1NlUpICAvKiE8IFVzZWQgZWl0aGVyIHRvIHRyYW5zZmVyIGEgZGF0YSBibG9jayB0byB0aGUgY2FyZCBvciB0byBnZXQgYSBkYXRhIGJsb2NrIGZyb20gdGhlIGNhcmQgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGZvciBnZW5lcmFsIHB1cnBvc2UvYXBwbGljYXRpb24gc3BlY2lmaWMgY29tbWFuZHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgU0RNTUNfQ01EX05PX0NNRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCk2NFUpICAvKiE8IE5vIGNvbW1hbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogLyoqCiAgICogQGJyaWVmIEZvbGxvd2luZyBjb21tYW5kcyBhcmUgU0QgQ2FyZCBTcGVjaWZpYyBjb21tYW5kcy4KICAgKiAgICAgICAgU0RNTUNfQVBQX0NNRCBzaG91bGQgYmUgc2VudCBiZWZvcmUgc2VuZGluZyB0aGVzZSBjb21tYW5kcy4KICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX0FQUF9TRF9TRVRfQlVTV0lEVEggICAgICAgICAgICAgICAgICgodWludDhfdCk2VSkgICAvKiE8IChBQ01ENikgRGVmaW5lcyB0aGUgZGF0YSBidXMgd2lkdGggdG8gYmUgdXNlZCBmb3IgZGF0YSB0cmFuc2Zlci4gVGhlIGFsbG93ZWQgZGF0YSBidXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aHMgYXJlIGdpdmVuIGluIFNDUiByZWdpc3Rlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfQ01EX0FQUF9TRF9TRVRfQlVTV0lEVEggICAgICAgICAgICAgICAgICgodWludDhfdCk2VSkgICAvKiE8IChBQ01ENikgRGVmaW5lcyB0aGUgZGF0YSBidXMgd2lkdGggdG8gYmUgdXNlZCBmb3IgZGF0YSB0cmFuc2Zlci4gVGhlIGFsbG93ZWQgZGF0YSBidXMgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8ICB3aWR0aHMgYXJlIGdpdmVuIGluIFNDUiByZWdpc3Rlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgU0RNTUNfQ01EX1NEX0FQUF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkxM1UpICAvKiE8IChBQ01EMTMpIFNlbmRzIHRoZSBTRCBzdGF0dXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX1NEX0FQUF9TRU5EX05VTV9XUklURV9CTE9DS1MgICAgICAgICgodWludDhfdCkyMlUpICAvKiE8IChBQ01EMjIpIFNlbmRzIHRoZSBudW1iZXIgb2YgdGhlIHdyaXR0ZW4gKHdpdGhvdXQgZXJyb3JzKSB3cml0ZSBibG9ja3MuIFJlc3BvbmRzIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyYml0K0NSQyBkYXRhIGJsb2NrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX1NEX0FQUF9PUF9DT05EICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCk0MVUpICAvKiE8IChBQ01ENDEpIFNlbmRzIGhvc3QgY2FwYWNpdHkgc3VwcG9ydCBpbmZvcm1hdGlvbiAoSENTKSBhbmQgYXNrcyB0aGUgYWNjZXNzZWQgY2FyZCB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZCBpdHMgb3BlcmF0aW5nIGNvbmRpdGlvbiByZWdpc3RlciAoT0NSKSBjb250ZW50IGluIHRoZSByZXNwb25zZSBvbiB0aGUgQ01EIGxpbmUuICAgICAqLworI2RlZmluZSBTRE1NQ19DTURfU0RfQVBQX1NFTkRfTlVNX1dSSVRFX0JMT0NLUyAgICAgICAgKCh1aW50OF90KTIyVSkgIC8qITwgKEFDTUQyMikgU2VuZHMgdGhlIG51bWJlciBvZiB0aGUgd3JpdHRlbiAod2l0aG91dCBlcnJvcnMpIHdyaXRlIGJsb2Nrcy4gUmVzcG9uZHMgd2l0aCAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgMzJiaXQrQ1JDIGRhdGEgYmxvY2suICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19DTURfU0RfQVBQX09QX0NPTkQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTQxVSkgIC8qITwgKEFDTUQ0MSkgU2VuZHMgaG9zdCBjYXBhY2l0eSBzdXBwb3J0IGluZm9ybWF0aW9uIChIQ1MpIGFuZCBhc2tzIHRoZSBhY2Nlc3NlZCBjYXJkIHRvICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgc2VuZCBpdHMgb3BlcmF0aW5nIGNvbmRpdGlvbiByZWdpc3RlciAoT0NSKSBjb250ZW50IGluIHRoZSByZXNwb25zZSBvbiB0aGUgQ01EIGxpbmUuICAgICAqLwogI2RlZmluZSBTRE1NQ19DTURfU0RfQVBQX1NFVF9DTFJfQ0FSRF9ERVRFQ1QgICAgICAgICAgKCh1aW50OF90KTQyVSkgIC8qITwgKEFDTUQ0MikgQ29ubmVjdC9EaXNjb25uZWN0IHRoZSA1MCBLT2htIHB1bGwtdXAgcmVzaXN0b3Igb24gQ0QvREFUMyAocGluIDEpIG9mIHRoZSBjYXJkICAqLwogI2RlZmluZSBTRE1NQ19DTURfU0RfQVBQX1NFTkRfU0NSICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTUxVSkgIC8qITwgUmVhZHMgdGhlIFNEIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKFNDUikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBTRE1NQ19DTURfU0RNTUNfUldfRElSRUNUICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTUyVSkgIC8qITwgRm9yIFNEIEkvTyBjYXJkIG9ubHksIHJlc2VydmVkIGZvciBzZWN1cml0eSBzcGVjaWZpY2F0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNTAzLDE0ICs1MDMsMTggQEAKICNkZWZpbmUgU0RNTUNfREFUQUJMT0NLX1NJWkVfMTZCICAgICAgICAgICAgICBTRE1NQ19EQ1RSTF9EQkxPQ0tTSVpFXzIKICNkZWZpbmUgU0RNTUNfREFUQUJMT0NLX1NJWkVfMzJCICAgICAgICAgICAgICAoU0RNTUNfRENUUkxfREJMT0NLU0laRV8wfFNETU1DX0RDVFJMX0RCTE9DS1NJWkVfMikKICNkZWZpbmUgU0RNTUNfREFUQUJMT0NLX1NJWkVfNjRCICAgICAgICAgICAgICAoU0RNTUNfRENUUkxfREJMT0NLU0laRV8xfFNETU1DX0RDVFJMX0RCTE9DS1NJWkVfMikKLSNkZWZpbmUgU0RNTUNfREFUQUJMT0NLX1NJWkVfMTI4QiAgICAgICAgICAgICAoU0RNTUNfRENUUkxfREJMT0NLU0laRV8wfFNETU1DX0RDVFJMX0RCTE9DS1NJWkVfMXxTRE1NQ19EQ1RSTF9EQkxPQ0tTSVpFXzIpCisjZGVmaW5lIFNETU1DX0RBVEFCTE9DS19TSVpFXzEyOEIgICAgICAgICAgICAgKFNETU1DX0RDVFJMX0RCTE9DS1NJWkVfMHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19EQ1RSTF9EQkxPQ0tTSVpFXzF8U0RNTUNfRENUUkxfREJMT0NLU0laRV8yKQogI2RlZmluZSBTRE1NQ19EQVRBQkxPQ0tfU0laRV8yNTZCICAgICAgICAgICAgIFNETU1DX0RDVFJMX0RCTE9DS1NJWkVfMwogI2RlZmluZSBTRE1NQ19EQVRBQkxPQ0tfU0laRV81MTJCICAgICAgICAgICAgIChTRE1NQ19EQ1RSTF9EQkxPQ0tTSVpFXzB8U0RNTUNfRENUUkxfREJMT0NLU0laRV8zKQogI2RlZmluZSBTRE1NQ19EQVRBQkxPQ0tfU0laRV8xMDI0QiAgICAgICAgICAgIChTRE1NQ19EQ1RSTF9EQkxPQ0tTSVpFXzF8U0RNTUNfRENUUkxfREJMT0NLU0laRV8zKQotI2RlZmluZSBTRE1NQ19EQVRBQkxPQ0tfU0laRV8yMDQ4QiAgICAgICAgICAgIChTRE1NQ19EQ1RSTF9EQkxPQ0tTSVpFXzB8U0RNTUNfRENUUkxfREJMT0NLU0laRV8xfFNETU1DX0RDVFJMX0RCTE9DS1NJWkVfMykKKyNkZWZpbmUgU0RNTUNfREFUQUJMT0NLX1NJWkVfMjA0OEIgICAgICAgICAgICAoU0RNTUNfRENUUkxfREJMT0NLU0laRV8wfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNETU1DX0RDVFJMX0RCTE9DS1NJWkVfMXxTRE1NQ19EQ1RSTF9EQkxPQ0tTSVpFXzMpCiAjZGVmaW5lIFNETU1DX0RBVEFCTE9DS19TSVpFXzQwOTZCICAgICAgICAgICAgKFNETU1DX0RDVFJMX0RCTE9DS1NJWkVfMnxTRE1NQ19EQ1RSTF9EQkxPQ0tTSVpFXzMpCi0jZGVmaW5lIFNETU1DX0RBVEFCTE9DS19TSVpFXzgxOTJCICAgICAgICAgICAgKFNETU1DX0RDVFJMX0RCTE9DS1NJWkVfMHxTRE1NQ19EQ1RSTF9EQkxPQ0tTSVpFXzJ8U0RNTUNfRENUUkxfREJMT0NLU0laRV8zKQotI2RlZmluZSBTRE1NQ19EQVRBQkxPQ0tfU0laRV8xNjM4NEIgICAgICAgICAgIChTRE1NQ19EQ1RSTF9EQkxPQ0tTSVpFXzF8U0RNTUNfRENUUkxfREJMT0NLU0laRV8yfFNETU1DX0RDVFJMX0RCTE9DS1NJWkVfMykKKyNkZWZpbmUgU0RNTUNfREFUQUJMT0NLX1NJWkVfODE5MkIgICAgICAgICAgICAoU0RNTUNfRENUUkxfREJMT0NLU0laRV8wfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNETU1DX0RDVFJMX0RCTE9DS1NJWkVfMnxTRE1NQ19EQ1RSTF9EQkxPQ0tTSVpFXzMpCisjZGVmaW5lIFNETU1DX0RBVEFCTE9DS19TSVpFXzE2Mzg0QiAgICAgICAgICAgKFNETU1DX0RDVFJMX0RCTE9DS1NJWkVfMXwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19EQ1RSTF9EQkxPQ0tTSVpFXzJ8U0RNTUNfRENUUkxfREJMT0NLU0laRV8zKQogCiAjZGVmaW5lIElTX1NETU1DX0JMT0NLX1NJWkUoU0laRSkgKCgoU0laRSkgPT0gU0RNTUNfREFUQUJMT0NLX1NJWkVfMUIpICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBTRE1NQ19EQVRBQkxPQ0tfU0laRV8yQikgICAgfHwgXApAQCAtNjQyLDIxICs2NDYsMjEgQEAKICNkZWZpbmUgU0RNTUNfRkxBR19JRE1BVEUgICAgICAgICAgICAgICAgICAgIFNETU1DX1NUQV9JRE1BVEUKICNkZWZpbmUgU0RNTUNfRkxBR19JRE1BQlRDICAgICAgICAgICAgICAgICAgIFNETU1DX1NUQV9JRE1BQlRDCiAKLSNkZWZpbmUgU0RNTUNfU1RBVElDX0ZMQUdTICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpKFNETU1DX0ZMQUdfQ0NSQ0ZBSUwgICB8IFNETU1DX0ZMQUdfRENSQ0ZBSUwgfCBTRE1NQ19GTEFHX0NUSU1FT1VUIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19GTEFHX0RUSU1FT1VUICAgfCBTRE1NQ19GTEFHX1RYVU5ERVJSIHwgU0RNTUNfRkxBR19SWE9WRVJSICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfRkxBR19DTURSRU5EICAgIHwgU0RNTUNfRkxBR19DTURTRU5UICB8IFNETU1DX0ZMQUdfREFUQUVORCAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNETU1DX0ZMQUdfREhPTEQgICAgICB8IFNETU1DX0ZMQUdfREJDS0VORCAgfCBTRE1NQ19GTEFHX0RBQk9SVCAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19GTEFHX0JVU1lEMEVORCAgfCBTRE1NQ19GTEFHX1NESU9JVCAgIHwgU0RNTUNfRkxBR19BQ0tGQUlMICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfRkxBR19BQ0tUSU1FT1VUIHwgU0RNTUNfRkxBR19WU1dFTkQgICB8IFNETU1DX0ZMQUdfQ0tTVE9QICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNETU1DX0ZMQUdfSURNQVRFICAgICB8IFNETU1DX0ZMQUdfSURNQUJUQykpCisjZGVmaW5lIFNETU1DX1NUQVRJQ19GTEFHUyAgICAgICAgICAgICAoKHVpbnQzMl90KShTRE1NQ19GTEFHX0NDUkNGQUlMICAgfCBTRE1NQ19GTEFHX0RDUkNGQUlMIHwgU0RNTUNfRkxBR19DVElNRU9VVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfRkxBR19EVElNRU9VVCAgIHwgU0RNTUNfRkxBR19UWFVOREVSUiB8IFNETU1DX0ZMQUdfUlhPVkVSUiAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNETU1DX0ZMQUdfQ01EUkVORCAgICB8IFNETU1DX0ZMQUdfQ01EU0VOVCAgfCBTRE1NQ19GTEFHX0RBVEFFTkQgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19GTEFHX0RIT0xEICAgICAgfCBTRE1NQ19GTEFHX0RCQ0tFTkQgIHwgU0RNTUNfRkxBR19EQUJPUlQgICB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfRkxBR19CVVNZRDBFTkQgIHwgU0RNTUNfRkxBR19TRElPSVQgICB8IFNETU1DX0ZMQUdfQUNLRkFJTCAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNETU1DX0ZMQUdfQUNLVElNRU9VVCB8IFNETU1DX0ZMQUdfVlNXRU5EICAgfCBTRE1NQ19GTEFHX0NLU1RPUCAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19GTEFHX0lETUFURSAgICAgfCBTRE1NQ19GTEFHX0lETUFCVEMpKQogCi0jZGVmaW5lIFNETU1DX1NUQVRJQ19DTURfRkxBR1MgICAgICAgICAgICAgICAoKHVpbnQzMl90KShTRE1NQ19GTEFHX0NDUkNGQUlMIHwgU0RNTUNfRkxBR19DVElNRU9VVCAgfCBTRE1NQ19GTEFHX0NNRFJFTkQgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNETU1DX0ZMQUdfQ01EU0VOVCAgfCBTRE1NQ19GTEFHX0JVU1lEMEVORCkpCisjZGVmaW5lIFNETU1DX1NUQVRJQ19DTURfRkxBR1MgICAgICAgICAoKHVpbnQzMl90KShTRE1NQ19GTEFHX0NDUkNGQUlMIHwgU0RNTUNfRkxBR19DVElNRU9VVCAgfCBTRE1NQ19GTEFHX0NNRFJFTkQgICB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfRkxBR19DTURTRU5UICB8IFNETU1DX0ZMQUdfQlVTWUQwRU5EKSkKIAotI2RlZmluZSBTRE1NQ19TVEFUSUNfREFUQV9GTEFHUyAgICAgICAgICAgICAgKCh1aW50MzJfdCkoU0RNTUNfRkxBR19EQ1JDRkFJTCB8IFNETU1DX0ZMQUdfRFRJTUVPVVQgfCBTRE1NQ19GTEFHX1RYVU5ERVJSIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19GTEFHX1JYT1ZFUlIgIHwgU0RNTUNfRkxBR19EQVRBRU5EICB8IFNETU1DX0ZMQUdfREhPTEQgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNETU1DX0ZMQUdfREJDS0VORCAgfCBTRE1NQ19GTEFHX0RBQk9SVCAgIHwgU0RNTUNfRkxBR19JRE1BVEUgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfRkxBR19JRE1BQlRDKSkKKyNkZWZpbmUgU0RNTUNfU1RBVElDX0RBVEFfRkxBR1MgICAgICAgICgodWludDMyX3QpKFNETU1DX0ZMQUdfRENSQ0ZBSUwgfCBTRE1NQ19GTEFHX0RUSU1FT1VUIHwgU0RNTUNfRkxBR19UWFVOREVSUiAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19GTEFHX1JYT1ZFUlIgIHwgU0RNTUNfRkxBR19EQVRBRU5EICB8IFNETU1DX0ZMQUdfREhPTEQgICAgICB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfRkxBR19EQkNLRU5EICB8IFNETU1DX0ZMQUdfREFCT1JUICAgfCBTRE1NQ19GTEFHX0lETUFURSAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNETU1DX0ZMQUdfSURNQUJUQykpCiAvKioKICAgKiBAfQogICAqLwpAQCAtNzA3LDkgKzcxMSw5IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgU0RNTUNfTExfSW50ZXJydXB0X0Nsb2NrIEludGVycnVwdCBBbmQgQ2xvY2sgQ29uZmlndXJhdGlvbgotICogIEBicmllZiBtYWNyb3MgdG8gaGFuZGxlIGludGVycnVwdHMgYW5kIHNwZWNpZmljIGNsb2NrIGNvbmZpZ3VyYXRpb25zCi0gKiBAewotICovCisgICogIEBicmllZiBtYWNyb3MgdG8gaGFuZGxlIGludGVycnVwdHMgYW5kIHNwZWNpZmljIGNsb2NrIGNvbmZpZ3VyYXRpb25zCisgICogQHsKKyAgKi8KIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgdGhlIFNETU1DIGRldmljZSBpbnRlcnJ1cHQuCkBAIC0xMDM0LDcgKzEwMzgsNyBAQAogdWludDMyX3QgICAgICAgICAgU0RNTUNfR2V0UmVzcG9uc2UoU0RNTUNfVHlwZURlZiAqU0RNTUN4LCB1aW50MzJfdCBSZXNwb25zZSk7CiAKIC8qIERhdGEgcGF0aCBzdGF0ZSBtYWNoaW5lIChEUFNNKSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAqLwotSEFMX1N0YXR1c1R5cGVEZWYgU0RNTUNfQ29uZmlnRGF0YShTRE1NQ19UeXBlRGVmICpTRE1NQ3gsIFNETU1DX0RhdGFJbml0VHlwZURlZiogRGF0YSk7CitIQUxfU3RhdHVzVHlwZURlZiBTRE1NQ19Db25maWdEYXRhKFNETU1DX1R5cGVEZWYgKlNETU1DeCwgU0RNTUNfRGF0YUluaXRUeXBlRGVmICpEYXRhKTsKIHVpbnQzMl90ICAgICAgICAgIFNETU1DX0dldERhdGFDb3VudGVyKFNETU1DX1R5cGVEZWYgKlNETU1DeCk7CiB1aW50MzJfdCAgICAgICAgICBTRE1NQ19HZXRGSUZPQ291bnQoU0RNTUNfVHlwZURlZiAqU0RNTUN4KTsKIApAQCAtMTA1OSw3ICsxMDYzLDcgQEAKIHVpbnQzMl90IFNETU1DX0NtZFNERXJhc2VFbmRBZGQoU0RNTUNfVHlwZURlZiAqU0RNTUN4LCB1aW50MzJfdCBFbmRBZGQpOwogdWludDMyX3QgU0RNTUNfQ21kRXJhc2UoU0RNTUNfVHlwZURlZiAqU0RNTUN4LCB1aW50MzJfdCBFcmFzZVR5cGUpOwogdWludDMyX3QgU0RNTUNfQ21kU3RvcFRyYW5zZmVyKFNETU1DX1R5cGVEZWYgKlNETU1DeCk7Ci11aW50MzJfdCBTRE1NQ19DbWRTZWxEZXNlbChTRE1NQ19UeXBlRGVmICpTRE1NQ3gsIHVpbnQ2NF90IEFkZHIpOwordWludDMyX3QgU0RNTUNfQ21kU2VsRGVzZWwoU0RNTUNfVHlwZURlZiAqU0RNTUN4LCB1aW50MzJfdCBBZGRyKTsKIHVpbnQzMl90IFNETU1DX0NtZEdvSWRsZVN0YXRlKFNETU1DX1R5cGVEZWYgKlNETU1DeCk7CiB1aW50MzJfdCBTRE1NQ19DbWRPcGVyQ29uZChTRE1NQ19UeXBlRGVmICpTRE1NQ3gpOwogdWludDMyX3QgU0RNTUNfQ21kQXBwQ29tbWFuZChTRE1NQ19UeXBlRGVmICpTRE1NQ3gsIHVpbnQzMl90IEFyZ3VtZW50KTsKQEAgLTExMDYsNyArMTExMCw3IEBACiAgICogQH0KICAgKi8KIAotICAvKioKKy8qKgogICAqIEB9CiAgICovCiAKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw1eHhfbGxfc3lzdGVtLmggYi9JbmMvc3RtMzJsNXh4X2xsX3N5c3RlbS5oCmluZGV4IDBjZmVjMDUuLjE4Zjk0NTYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw1eHhfbGxfc3lzdGVtLmgKKysrIGIvSW5jL3N0bTMybDV4eF9sbF9zeXN0ZW0uaApAQCAtNTksMTYgKzU5LDE2IEBACiAgICogQHsKICAgKi8KIC8qKgotICogQGJyaWVmIFZSRUZCVUYgVlJFRl9TQzAgJiBWUkVGX1NDMSBjYWxpYnJhdGlvbiB2YWx1ZXMKLSAqLworICAqIEBicmllZiBWUkVGQlVGIFZSRUZfU0MwICYgVlJFRl9TQzEgY2FsaWJyYXRpb24gdmFsdWVzCisgICovCiAjZGVmaW5lIFZSRUZCVUZfU0MwX0NBTF9BRERSICAgKCh1aW50OF90KikgKDB4MEJGQTA1NzlVTCkpIC8qITwgIEFkZHJlc3Mgb2YgVlJFRkJVRiB0cmltbWluZyB2YWx1ZSBmb3IgVlJTPTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZSRUZfU0MwIGluIFNUTTMyTDUgZGF0YXNoZWV0ICovCiAjZGVmaW5lIFZSRUZCVUZfU0MxX0NBTF9BRERSICAgKCh1aW50OF90KikgKDB4MEJGQTA1MzBVTCkpIC8qITwgIEFkZHJlc3Mgb2YgVlJFRkJVRiB0cmltbWluZyB2YWx1ZSBmb3IgVlJTPTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZSRUZfU0MxIGluIFNUTTMyTDUgZGF0YXNoZWV0ICovCiAKIC8qKgotICogQGJyaWVmIFBvd2VyLWRvd24gaW4gUnVuIG1vZGUgRmxhc2gga2V5Ci0gKi8KKyAgKiBAYnJpZWYgUG93ZXItZG93biBpbiBSdW4gbW9kZSBGbGFzaCBrZXkKKyAgKi8KICNkZWZpbmUgRkxBU0hfUERLRVkxICAgICAgICAgICAgICAgICAgMHgwNDE1MjYzN1UgLyohPCBGbGFzaCBwb3dlciBkb3duIGtleTEgKi8KICNkZWZpbmUgRkxBU0hfUERLRVkyICAgICAgICAgICAgICAgICAgMHhGQUZCRkNGRFUgLyohPCBGbGFzaCBwb3dlciBkb3duIGtleTI6IHVzZWQgd2l0aCBGTEFTSF9QREtFWTEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB1bmxvY2sgdGhlIFJVTl9QRCBiaXQgaW4gRkxBU0hfQUNSICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNXh4X2xsX3RpbS5oIGIvSW5jL3N0bTMybDV4eF9sbF90aW0uaAppbmRleCBkNmIzNDY2Li5mM2UzYTdhIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNXh4X2xsX3RpbS5oCisrKyBiL0luYy9zdG0zMmw1eHhfbGxfdGltLmgKQEAgLTYwMSw4ICs2MDEsOCBAQAogLyoqIEBkZWZncm91cCBUSU1fTExfRUNfT05FUFVMU0VNT0RFIE9uZSBQdWxzZSBNb2RlCiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfVElNX09ORVBVTFNFTU9ERV9TSU5HTEUgICAgICAgICAgICAgVElNX0NSMV9PUE0gICAgICAgICAgLyohPCBDb3VudGVyIGlzIG5vdCBzdG9wcGVkIGF0IHVwZGF0ZSBldmVudCAqLwotI2RlZmluZSBMTF9USU1fT05FUFVMU0VNT0RFX1JFUEVUSVRJVkUgICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAvKiE8IENvdW50ZXIgc3RvcHMgY291bnRpbmcgYXQgdGhlIG5leHQgdXBkYXRlIGV2ZW50ICovCisjZGVmaW5lIExMX1RJTV9PTkVQVUxTRU1PREVfU0lOR0xFICAgICAgICAgICAgIFRJTV9DUjFfT1BNICAgICAgICAgIC8qITwgQ291bnRlciBzdG9wcyBjb3VudGluZyBhdCB0aGUgbmV4dCB1cGRhdGUgZXZlbnQgKi8KKyNkZWZpbmUgTExfVElNX09ORVBVTFNFTU9ERV9SRVBFVElUSVZFICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgLyohPCBDb3VudGVyIGlzIG5vdCBzdG9wcGVkIGF0IHVwZGF0ZSBldmVudCAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTE1NDUsNyArMTU0NSwxNiBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9HZXRDb3VudGVyTW9kZShUSU1fVHlwZURlZiAqVElNeCkKIHsKLSAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoVElNeC0+Q1IxLCBUSU1fQ1IxX0RJUiB8IFRJTV9DUjFfQ01TKSk7CisgIHVpbnQzMl90IGNvdW50ZXJfbW9kZTsKKworICBjb3VudGVyX21vZGUgPSAodWludDMyX3QpKFJFQURfQklUKFRJTXgtPkNSMSwgVElNX0NSMV9DTVMpKTsKKworICBpZiAoY291bnRlcl9tb2RlID09IDBVKQorICB7CisgICAgY291bnRlcl9tb2RlID0gKHVpbnQzMl90KShSRUFEX0JJVChUSU14LT5DUjEsIFRJTV9DUjFfRElSKSk7CisgIH0KKworICByZXR1cm4gY291bnRlcl9tb2RlOwogfQogCiAvKioKQEAgLTIwMDAsOCArMjAwOSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fT0NfQ29uZmlnT3V0cHV0KFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBDb25maWd1cmF0aW9uKQogewotICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIENMRUFSX0JJVCgqcFJlZywgKFRJTV9DQ01SMV9DQzFTIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSkpOwogICBNT0RJRllfUkVHKFRJTXgtPkNDRVIsIChUSU1fQ0NFUl9DQzFQIDw8IFNISUZUX1RBQl9DQ3hQW2lDaGFubmVsXSksCiAgICAgICAgICAgICAgKENvbmZpZ3VyYXRpb24gJiBUSU1fQ0NFUl9DQzFQKSA8PCBTSElGVF9UQUJfQ0N4UFtpQ2hhbm5lbF0pOwpAQCAtMjA0NSw4ICsyMDU0LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9PQ19TZXRNb2RlKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBNb2RlKQogewotICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIE1PRElGWV9SRUcoKnBSZWcsICgoVElNX0NDTVIxX09DMU0gIHwgVElNX0NDTVIxX0NDMVMpIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSksICBNb2RlIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSk7CiB9CiAKQEAgLTIwODQsOCArMjA5Myw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0dldE1vZGUoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgcmV0dXJuIChSRUFEX0JJVCgqcFJlZywgKChUSU1fQ0NNUjFfT0MxTSAgfCBUSU1fQ0NNUjFfQ0MxUykgPDwgU0hJRlRfVEFCX09DeHhbaUNoYW5uZWxdKSkgPj4gU0hJRlRfVEFCX09DeHhbaUNoYW5uZWxdKTsKIH0KIApAQCAtMjExOCw3ICsyMTI3LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9PQ19TZXRQb2xhcml0eShUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgUG9sYXJpdHkpCiB7Ci0gICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwogICBNT0RJRllfUkVHKFRJTXgtPkNDRVIsIChUSU1fQ0NFUl9DQzFQIDw8IFNISUZUX1RBQl9DQ3hQW2lDaGFubmVsXSksICBQb2xhcml0eSA8PCBTSElGVF9UQUJfQ0N4UFtpQ2hhbm5lbF0pOwogfQogCkBAIC0yMTUwLDcgKzIxNTksNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9PQ19HZXRQb2xhcml0eShUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CiAgIHJldHVybiAoUkVBRF9CSVQoVElNeC0+Q0NFUiwgKFRJTV9DQ0VSX0NDMVAgPDwgU0hJRlRfVEFCX0NDeFBbaUNoYW5uZWxdKSkgPj4gU0hJRlRfVEFCX0NDeFBbaUNoYW5uZWxdKTsKIH0KIApAQCAtMjE4Nyw3ICsyMTk2LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9PQ19TZXRJZGxlU3RhdGUoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IElkbGVTdGF0ZSkKIHsKLSAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CiAgIE1PRElGWV9SRUcoVElNeC0+Q1IyLCAoVElNX0NSMl9PSVMxIDw8IFNISUZUX1RBQl9PSVN4W2lDaGFubmVsXSksICBJZGxlU3RhdGUgPDwgU0hJRlRfVEFCX09JU3hbaUNoYW5uZWxdKTsKIH0KIApAQCAtMjIxOSw3ICsyMjI4LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fT0NfR2V0SWRsZVN0YXRlKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewotICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKICAgcmV0dXJuIChSRUFEX0JJVChUSU14LT5DUjIsIChUSU1fQ1IyX09JUzEgPDwgU0hJRlRfVEFCX09JU3hbaUNoYW5uZWxdKSkgPj4gU0hJRlRfVEFCX09JU3hbaUNoYW5uZWxdKTsKIH0KIApAQCAtMjI0NCw4ICsyMjUzLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9PQ19FbmFibGVGYXN0KFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewotICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIChUSU1fQ0NNUjFfT0MxRkUgPDwgU0hJRlRfVEFCX09DeHhbaUNoYW5uZWxdKSk7CiAKIH0KQEAgLTIyNzAsOCArMjI3OSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fT0NfRGlzYWJsZUZhc3QoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgQ0xFQVJfQklUKCpwUmVnLCAoVElNX0NDTVIxX09DMUZFIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSkpOwogCiB9CkBAIC0yMjk2LDkgKzIzMDUsOSBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9PQ19Jc0VuYWJsZWRGYXN0KFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewotICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7Ci0gICB1aW50MzJfdCBiaXRmaWVsZCA9IFRJTV9DQ01SMV9PQzFGRSA8PCBTSElGVF9UQUJfT0N4eFtpQ2hhbm5lbF07CisgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgIHVpbnQzMl90IGJpdGZpZWxkID0gVElNX0NDTVIxX09DMUZFIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXTsKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsIGJpdGZpZWxkKSA9PSBiaXRmaWVsZCkgPyAxVUwgOiAwVUwpOwogfQogCkBAIC0yMzIyLDggKzIzMzEsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfVElNX09DX0VuYWJsZVByZWxvYWQoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgU0VUX0JJVCgqcFJlZywgKFRJTV9DQ01SMV9PQzFQRSA8PCBTSElGVF9UQUJfT0N4eFtpQ2hhbm5lbF0pKTsKIH0KIApAQCAtMjM0Nyw4ICsyMzU2LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9PQ19EaXNhYmxlUHJlbG9hZChUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwogICBDTEVBUl9CSVQoKnBSZWcsIChUSU1fQ0NNUjFfT0MxUEUgPDwgU0hJRlRfVEFCX09DeHhbaUNoYW5uZWxdKSk7CiB9CiAKQEAgLTIzNzIsOSArMjM4MSw5IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0lzRW5hYmxlZFByZWxvYWQoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKLSAgIHVpbnQzMl90IGJpdGZpZWxkID0gVElNX0NDTVIxX09DMVBFIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXTsKKyAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgdWludDMyX3QgYml0ZmllbGQgPSBUSU1fQ0NNUjFfT0MxUEUgPDwgU0hJRlRfVEFCX09DeHhbaUNoYW5uZWxdOwogICByZXR1cm4gKChSRUFEX0JJVCgqcFJlZywgYml0ZmllbGQpID09IGJpdGZpZWxkKSA/IDFVTCA6IDBVTCk7CiB9CiAKQEAgLTI0MDEsOCArMjQxMCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fT0NfRW5hYmxlQ2xlYXIoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgU0VUX0JJVCgqcFJlZywgKFRJTV9DQ01SMV9PQzFDRSA8PCBTSElGVF9UQUJfT0N4eFtpQ2hhbm5lbF0pKTsKIH0KIApAQCAtMjQyOCw4ICsyNDM3LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9PQ19EaXNhYmxlQ2xlYXIoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgQ0xFQVJfQklUKCpwUmVnLCAoVElNX0NDTVIxX09DMUNFIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSkpOwogfQogCkBAIC0yNDU3LDkgKzI0NjYsOSBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9PQ19Jc0VuYWJsZWRDbGVhcihUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwotICAgdWludDMyX3QgYml0ZmllbGQgPSBUSU1fQ0NNUjFfT0MxQ0UgPDwgU0hJRlRfVEFCX09DeHhbaUNoYW5uZWxdOworICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICB1aW50MzJfdCBiaXRmaWVsZCA9IFRJTV9DQ01SMV9PQzFDRSA8PCBTSElGVF9UQUJfT0N4eFtpQ2hhbm5lbF07CiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBiaXRmaWVsZCkgPT0gYml0ZmllbGQpID8gMVVMIDogMFVMKTsKIH0KIApAQCAtMjcyOCw4ICsyNzM3LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9JQ19Db25maWcoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IENvbmZpZ3VyYXRpb24pCiB7Ci0gICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgTU9ESUZZX1JFRygqcFJlZywgKChUSU1fQ0NNUjFfSUMxRiB8IFRJTV9DQ01SMV9JQzFQU0MgfCBUSU1fQ0NNUjFfQ0MxUykgPDwgU0hJRlRfVEFCX0lDeHhbaUNoYW5uZWxdKSwKICAgICAgICAgICAgICAoKENvbmZpZ3VyYXRpb24gPj4gMTZVKSAmIChUSU1fQ0NNUjFfSUMxRiB8IFRJTV9DQ01SMV9JQzFQU0MgfCBUSU1fQ0NNUjFfQ0MxUykpICA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pOwogICBNT0RJRllfUkVHKFRJTXgtPkNDRVIsICgoVElNX0NDRVJfQ0MxTlAgfCBUSU1fQ0NFUl9DQzFQKSA8PCBTSElGVF9UQUJfQ0N4UFtpQ2hhbm5lbF0pLApAQCAtMjc1Niw4ICsyNzY1LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9JQ19TZXRBY3RpdmVJbnB1dChUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgSUNBY3RpdmVJbnB1dCkKIHsKLSAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCAoKFRJTV9DQ01SMV9DQzFTKSA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pLCAoSUNBY3RpdmVJbnB1dCA+PiAxNlUpIDw8IFNISUZUX1RBQl9JQ3h4W2lDaGFubmVsXSk7CiB9CiAKQEAgLTI3ODAsOCArMjc4OSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lDX0dldEFjdGl2ZUlucHV0KFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewotICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCAoKFRJTV9DQ01SMV9DQzFTKSA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pKSA+PiBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pIDw8IDE2VSk7CiB9CiAKQEAgLTI4MDYsOCArMjgxNSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fSUNfU2V0UHJlc2NhbGVyKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBJQ1ByZXNjYWxlcikKIHsKLSAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCAoKFRJTV9DQ01SMV9JQzFQU0MpIDw8IFNISUZUX1RBQl9JQ3h4W2lDaGFubmVsXSksIChJQ1ByZXNjYWxlciA+PiAxNlUpIDw8IFNISUZUX1RBQl9JQ3h4W2lDaGFubmVsXSk7CiB9CiAKQEAgLTI4MzEsOCArMjg0MCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lDX0dldFByZXNjYWxlcihUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwogICByZXR1cm4gKChSRUFEX0JJVCgqcFJlZywgKChUSU1fQ0NNUjFfSUMxUFNDKSA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pKSA+PiBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pIDw8IDE2VSk7CiB9CiAKQEAgLTI4NjksOCArMjg3OCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fSUNfU2V0RmlsdGVyKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBJQ0ZpbHRlcikKIHsKLSAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCAoKFRJTV9DQ01SMV9JQzFGKSA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pLCAoSUNGaWx0ZXIgPj4gMTZVKSA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pOwogfQogCkBAIC0yOTA2LDggKzI5MTUsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9JQ19HZXRGaWx0ZXIoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsICgoVElNX0NDTVIxX0lDMUYpIDw8IFNISUZUX1RBQl9JQ3h4W2lDaGFubmVsXSkpID4+IFNISUZUX1RBQl9JQ3h4W2lDaGFubmVsXSkgPDwgMTZVKTsKIH0KIApAQCAtMjkzNSw3ICsyOTQ0LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9JQ19TZXRQb2xhcml0eShUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgSUNQb2xhcml0eSkKIHsKLSAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CiAgIE1PRElGWV9SRUcoVElNeC0+Q0NFUiwgKChUSU1fQ0NFUl9DQzFOUCB8IFRJTV9DQ0VSX0NDMVApIDw8IFNISUZUX1RBQl9DQ3hQW2lDaGFubmVsXSksCiAgICAgICAgICAgICAgSUNQb2xhcml0eSA8PCBTSElGVF9UQUJfQ0N4UFtpQ2hhbm5lbF0pOwogfQpAQCAtMjk2Myw3ICsyOTcyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSUNfR2V0UG9sYXJpdHkoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwogICByZXR1cm4gKFJFQURfQklUKFRJTXgtPkNDRVIsICgoVElNX0NDRVJfQ0MxTlAgfCBUSU1fQ0NFUl9DQzFQKSA8PCBTSElGVF9UQUJfQ0N4UFtpQ2hhbm5lbF0pKSA+PgogICAgICAgICAgIFNISUZUX1RBQl9DQ3hQW2lDaGFubmVsXSk7CiB9CkBAIC0zMzU2LDcgKzMzNjUsNiBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfVElNX1NldEVUUlNvdXJjZShUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgRVRSU291cmNlKQogewotCiAgIE1PRElGWV9SRUcoVElNeC0+T1IyLCBUSU14X09SMl9FVFJTRUwsIEVUUlNvdXJjZSk7CiB9CiAKQEAgLTM2OTYsNyArMzcwNCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fRW5hYmxlQnJlYWtJbnB1dFNvdXJjZShUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQnJlYWtJbnB1dCwgdWludDMyX3QgU291cmNlKQogewotICAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+T1IyKSArIEJyZWFrSW5wdXQpKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+T1IyKSArIEJyZWFrSW5wdXQpKTsKICAgU0VUX0JJVCgqcFJlZywgU291cmNlKTsKIH0KIApAQCAtMzcyNSw3ICszNzMzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9EaXNhYmxlQnJlYWtJbnB1dFNvdXJjZShUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQnJlYWtJbnB1dCwgdWludDMyX3QgU291cmNlKQogewotICAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+T1IyKSArIEJyZWFrSW5wdXQpKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+T1IyKSArIEJyZWFrSW5wdXQpKTsKICAgQ0xFQVJfQklUKCpwUmVnLCBTb3VyY2UpOwogfQogCkBAIC0zNzU1LDcgKzM3NjMsNyBAQAogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfVElNX1NldEJyZWFrSW5wdXRTb3VyY2VQb2xhcml0eShUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQnJlYWtJbnB1dCwgdWludDMyX3QgU291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBQb2xhcml0eSkKIHsKLSAgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPk9SMikgKyBCcmVha0lucHV0KSk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPk9SMikgKyBCcmVha0lucHV0KSk7CiAgIE1PRElGWV9SRUcoKnBSZWcsIChUSU14X09SMl9CS0lOUCA8PCBUSU1fUE9TSVRJT05fQlJLX1NPVVJDRSksIChQb2xhcml0eSA8PCBUSU1fUE9TSVRJT05fQlJLX1NPVVJDRSkpOwogfQogLyoqCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNXh4X2xsX3VzYi5oIGIvSW5jL3N0bTMybDV4eF9sbF91c2IuaAppbmRleCAyMDhlYzE0Li41ZGE1MTMxIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNXh4X2xsX3VzYi5oCisrKyBiL0luYy9zdG0zMmw1eHhfbGxfdXNiLmgKQEAgLTEzNSwxMCArMTM1LDEwIEBACiAvKiogQGRlZmdyb3VwIFVTQl9MTF9FUDBfTVBTIFVTQiBMb3cgTGF5ZXIgRVAwIE1QUwogICAqIEB7CiAgICovCi0jZGVmaW5lIEVQX01QU182NCAgICAgICAgICAgICAgICAgICAgICAgICAwVQotI2RlZmluZSBFUF9NUFNfMzIgICAgICAgICAgICAgICAgICAgICAgICAgMVUKLSNkZWZpbmUgRVBfTVBTXzE2ICAgICAgICAgICAgICAgICAgICAgICAgIDJVCi0jZGVmaW5lIEVQX01QU184ICAgICAgICAgICAgICAgICAgICAgICAgICAzVQorI2RlZmluZSBFUF9NUFNfNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwVQorI2RlZmluZSBFUF9NUFNfMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxVQorI2RlZmluZSBFUF9NUFNfMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyVQorI2RlZmluZSBFUF9NUFNfOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzVQogLyoqCiAgICogQH0KICAgKi8KQEAgLTE2MywxMCArMTYzLDEwIEBACiAgICogQH0KICAgKi8KIAotI2RlZmluZSBCVEFCTEVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwVQorI2RlZmluZSBCVEFCTEVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMFUKICNkZWZpbmUgUE1BX0FDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMVUKIAotI2RlZmluZSBFUF9BRERSX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3VQorI2RlZmluZSBFUF9BRERSX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdVCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTg3LDMyICsxODcsMjggQEAKIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9FbmFibGVHbG9iYWxJbnQoVVNCX1R5cGVEZWYgKlVTQngpOwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0Rpc2FibGVHbG9iYWxJbnQoVVNCX1R5cGVEZWYgKlVTQngpOwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX1NldEN1cnJlbnRNb2RlKFVTQl9UeXBlRGVmICpVU0J4LCBVU0JfTW9kZVR5cGVEZWYgbW9kZSk7Ci1IQUxfU3RhdHVzVHlwZURlZiBVU0JfU2V0RGV2U3BlZWQoVVNCX1R5cGVEZWYgKlVTQngsIHVpbnQ4X3Qgc3BlZWQpOwotSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0ZsdXNoUnhGaWZvKFVTQl9UeXBlRGVmICpVU0J4KTsKLUhBTF9TdGF0dXNUeXBlRGVmIFVTQl9GbHVzaFR4RmlmbyhVU0JfVHlwZURlZiAqVVNCeCwgdWludDMyX3QgbnVtKTsKKworI2lmIGRlZmluZWQgKEhBTF9QQ0RfTU9EVUxFX0VOQUJMRUQpCiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfQWN0aXZhdGVFbmRwb2ludChVU0JfVHlwZURlZiAqVVNCeCwgVVNCX0VQVHlwZURlZiAqZXApOwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0RlYWN0aXZhdGVFbmRwb2ludChVU0JfVHlwZURlZiAqVVNCeCwgVVNCX0VQVHlwZURlZiAqZXApOwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0VQU3RhcnRYZmVyKFVTQl9UeXBlRGVmICpVU0J4LCBVU0JfRVBUeXBlRGVmICplcCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBVU0JfV3JpdGVQYWNrZXQoVVNCX1R5cGVEZWYgKlVTQngsIHVpbnQ4X3QgKnNyYywgdWludDhfdCBjaF9lcF9udW0sIHVpbnQxNl90IGxlbik7Ci12b2lkICAgICAgICAgICAgICpVU0JfUmVhZFBhY2tldChVU0JfVHlwZURlZiAqVVNCeCwgdWludDhfdCAqZGVzdCwgdWludDE2X3QgbGVuKTsKIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9FUFNldFN0YWxsKFVTQl9UeXBlRGVmICpVU0J4LCBVU0JfRVBUeXBlRGVmICplcCk7CiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfRVBDbGVhclN0YWxsKFVTQl9UeXBlRGVmICpVU0J4LCBVU0JfRVBUeXBlRGVmICplcCk7CisjZW5kaWYKKwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX1NldERldkFkZHJlc3MoVVNCX1R5cGVEZWYgKlVTQngsIHVpbnQ4X3QgYWRkcmVzcyk7CiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfRGV2Q29ubmVjdChVU0JfVHlwZURlZiAqVVNCeCk7CiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfRGV2RGlzY29ubmVjdChVU0JfVHlwZURlZiAqVVNCeCk7CiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfU3RvcERldmljZShVU0JfVHlwZURlZiAqVVNCeCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBVU0JfRVAwX091dFN0YXJ0KFVTQl9UeXBlRGVmICpVU0J4LCB1aW50OF90ICpwc2V0dXApOwogdWludDMyX3QgICAgICAgICAgVVNCX1JlYWRJbnRlcnJ1cHRzKFVTQl9UeXBlRGVmICpVU0J4KTsKLXVpbnQzMl90ICAgICAgICAgIFVTQl9SZWFkRGV2QWxsT3V0RXBJbnRlcnJ1cHQoVVNCX1R5cGVEZWYgKlVTQngpOwotdWludDMyX3QgICAgICAgICAgVVNCX1JlYWREZXZPdXRFUEludGVycnVwdChVU0JfVHlwZURlZiAqVVNCeCwgdWludDhfdCBlcG51bSk7Ci11aW50MzJfdCAgICAgICAgICBVU0JfUmVhZERldkFsbEluRXBJbnRlcnJ1cHQoVVNCX1R5cGVEZWYgKlVTQngpOwotdWludDMyX3QgICAgICAgICAgVVNCX1JlYWREZXZJbkVQSW50ZXJydXB0KFVTQl9UeXBlRGVmICpVU0J4LCB1aW50OF90IGVwbnVtKTsKLXZvaWQgICAgICAgICAgICAgIFVTQl9DbGVhckludGVycnVwdHMoVVNCX1R5cGVEZWYgKlVTQngsIHVpbnQzMl90IGludGVycnVwdCk7Ci0KIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9BY3RpdmF0ZVJlbW90ZVdha2V1cChVU0JfVHlwZURlZiAqVVNCeCk7CiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfRGVBY3RpdmF0ZVJlbW90ZVdha2V1cChVU0JfVHlwZURlZiAqVVNCeCk7Ci12b2lkIFVTQl9Xcml0ZVBNQShVU0JfVHlwZURlZiAgKlVTQngsIHVpbnQ4X3QgKnBiVXNyQnVmLCB1aW50MTZfdCB3UE1BQnVmQWRkciwgdWludDE2X3Qgd05CeXRlcyk7Ci12b2lkIFVTQl9SZWFkUE1BKFVTQl9UeXBlRGVmICAqVVNCeCwgdWludDhfdCAqcGJVc3JCdWYsIHVpbnQxNl90IHdQTUFCdWZBZGRyLCB1aW50MTZfdCB3TkJ5dGVzKTsKKwordm9pZCAgICAgICAgICAgICAgVVNCX1dyaXRlUE1BKFVTQl9UeXBlRGVmICpVU0J4LCB1aW50OF90ICpwYlVzckJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCB3UE1BQnVmQWRkciwgdWludDE2X3Qgd05CeXRlcyk7CisKK3ZvaWQgICAgICAgICAgICAgIFVTQl9SZWFkUE1BKFVTQl9UeXBlRGVmICpVU0J4LCB1aW50OF90ICpwYlVzckJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHdQTUFCdWZBZGRyLCB1aW50MTZfdCB3TkJ5dGVzKTsKIAogLyoqCiAgICogQH0KZGlmZiAtLWdpdCBhL1JFQURNRS5tZCBiL1JFQURNRS5tZAppbmRleCBmNzRjN2M4Li4xYjJjM2U1IDEwMDY0NAotLS0gYS9SRUFETUUubWQKKysrIGIvUkVBRE1FLm1kCkBAIC0zOCw5ICszOCwxMCBAQAogCiBIQUwgRHJpdmVyIEw1IHwgQ01TSVMgRGV2aWNlIEw1IHwgQ01TSVMgQ29yZSB8IFdhcyBkZWxpdmVyZWQgaW4gdGhlIGZ1bGwgTUNVIHBhY2thZ2UKIC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGFnIHYxLjAuMCB8IFRhZyB2MS4wLjAgfCBUYWcgdjUuNC4wX2NtMzMgfCBUYWcgdjEuMS4wIChhbmQgZm9sbG93aW5nLCBpZiBhbnksIHRpbGwgbmV4dCB0YWcpCi1UYWcgdjEuMC4yIHwgVGFnIHYxLjAuMiB8IFRhZyB2NS40LjBfY20zMyB8IFRhZyB2MS4yLjAgKGFuZCBmb2xsb3dpbmcsIGlmIGFueSwgdGlsbCBuZXh0IHRhZykKLVRhZyB2MS4wLjMgfCBUYWcgdjEuMC4zIHwgVGFnIHY1LjYuMF9jbTMzIHwgVGFnIHYxLjMuMCAoYW5kIGZvbGxvd2luZywgaWYgYW55LCB0aWxsIG5leHQgdGFnKQorVGFnIHYxLjAuMCB8IFRhZyB2MS4wLjAgfCBUYWcgdjUuNC4wX2NtMzMgfCBUYWcgdjEuMS4wCitUYWcgdjEuMC4yIHwgVGFnIHYxLjAuMiB8IFRhZyB2NS40LjBfY20zMyB8IFRhZyB2MS4yLjAKK1RhZyB2MS4wLjMgfCBUYWcgdjEuMC4zIHwgVGFnIHY1LjYuMF9jbTMzIHwgVGFnIHYxLjMuMAorVGFnIHYxLjAuNCB8IFRhZyB2MS4wLjQgfCBUYWcgdjUuNi4wX2NtMzMgfCBUYWcgdjEuNC4wIChhbmQgZm9sbG93aW5nLCBpZiBhbnksIHRpbGwgbmV4dCB0YWcpCiAKIFRoZSBmdWxsICoqU1RNMzJDdWJlTDUqKiBNQ1UgcGFja2FnZSBpcyBhdmFpbGFibGUgW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9TVE1pY3JvZWxlY3Ryb25pY3MvU1RNMzJDdWJlTDUpLgogCmRpZmYgLS1naXQgYS9SZWxlYXNlX05vdGVzLmh0bWwgYi9SZWxlYXNlX05vdGVzLmh0bWwKaW5kZXggMGZlZWU3MS4uMmJjMGE0ZiAxMDA2NDQKLS0tIGEvUmVsZWFzZV9Ob3Rlcy5odG1sCisrKyBiL1JlbGVhc2VfTm90ZXMuaHRtbApAQCAtMTEsMjQgKzExLDIyIEBACiAgICAgICBzcGFuLnVuZGVybGluZXt0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTt9CiAgICAgICBkaXYuY29sdW1ue2Rpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IHRvcDsgd2lkdGg6IDUwJTt9CiAgIDwvc3R5bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iX2h0bXJlc2MvbWluaS1zdC5jc3MiIC8+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iX2h0bXJlc2MvbWluaS1zdF8yMDIwLmNzcyIgLz4KICAgPCEtLVtpZiBsdCBJRSA5XT4KICAgICA8c2NyaXB0IHNyYz0iLy9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvaHRtbDVzaGl2LzMuNy4zL2h0bWw1c2hpdi1wcmludHNoaXYubWluLmpzIj48L3NjcmlwdD4KICAgPCFbZW5kaWZdLS0+CisgIDxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2UveC1pY29uIiBocmVmPSJfaHRtcmVzYy9mYXZpY29uLnBuZyIgLz4KIDwvaGVhZD4KIDxib2R5PgogPGRpdiBjbGFzcz0icm93Ij4KIDxkaXYgY2xhc3M9ImNvbC1zbS0xMiBjb2wtbGctNCI+Ci08ZGl2IGNsYXNzPSJjYXJkIGZsdWlkIj4KLTxkaXYgY2xhc3M9InNlY3Rpb25lIGRhcmsiPgogPGNlbnRlcj4KLTxoMSBpZD0icmVsZWFzZS1ub3Rlcy1mb3Itc3RtMzJsNXh4LWhhbC1kcml2ZXJzIj48c21hbGw+UmVsZWFzZSBOb3RlcyBmb3I8L3NtYWxsPiA8c3Ryb25nPlNUTTMyTDV4eCBIQUwgRHJpdmVyczwvc3Ryb25nPjwvaDE+Cis8aDEgaWQ9InJlbGVhc2Utbm90ZXMtZm9yIj5SZWxlYXNlIE5vdGVzIGZvcjwvaDE+Cis8aDEgaWQ9InN0bTMybDV4eC1oYWwtZHJpdmVycyI+PG1hcms+U1RNMzJMNXh4IEhBTCBEcml2ZXJzPC9tYXJrPjwvaDE+CiA8cD5Db3B5cmlnaHQgwqkgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3M8YnIgLz4KIDwvcD4KLTxhIGhyZWY9Imh0dHBzOi8vd3d3LnN0LmNvbSIgY2xhc3M9ImxvZ28iPjxpbWcgc3JjPSIuL19odG1yZXNjL3N0X2xvZ28ucG5nIiBhbHQ9IlNUIGxvZ28iIC8+PC9hPgorPGEgaHJlZj0iaHR0cHM6Ly93d3cuc3QuY29tIiBjbGFzcz0ibG9nbyI+PGltZyBzcmM9Ii4vX2h0bXJlc2Mvc3RfbG9nb18yMDIwLnBuZyIgYWx0PSJTVCBsb2dvIiAvPjwvYT4KIDwvY2VudGVyPgotPC9kaXY+Ci08L2Rpdj4KIDxoMSBpZD0ibGljZW5zZSI+TGljZW5zZTwvaDE+CiA8cD5UaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwgdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgY29tcG9uZW50IGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDo8L3A+CiA8cD48YSBocmVmPSJodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZSI+aHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2U8L2E+PC9wPgpAQCAtNDYsMTUgKzQ0LDE3NyBAQAogPGRpdiBjbGFzcz0iY29sLXNtLTEyIGNvbC1sZy04Ij4KIDxoMSBpZD0idXBkYXRlLWhpc3RvcnkiPlVwZGF0ZSBIaXN0b3J5PC9oMT4KIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KLTxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb240IiBjaGVja2VkIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjQiIGFyaWEtaGlkZGVuPSJ0cnVlIj48c3Ryb25nPlYxLjAuMyAvIDI2LUp1bmUtMjAyMDwvc3Ryb25nPjwvbGFiZWw+Cis8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uNSIgY2hlY2tlZCBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb241IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4wLjQgLyAxMC1GZWJydWFyeS0yMDIxPC9zdHJvbmc+PC9sYWJlbD4KIDxkaXY+CiA8aDIgaWQ9Im1haW4tY2hhbmdlcyI+TWFpbiBDaGFuZ2VzPC9oMj4KLTxwPjxzdHJvbmc+Rm91cnRoIHJlbGVhc2U8L3N0cm9uZz48L3A+Cis8cD48c3Ryb25nPk1haW50ZW5hbmNlIHJlbGVhc2U8L3N0cm9uZz48L3A+CiA8aDIgaWQ9ImNvbnRlbnRzIj5Db250ZW50czwvaDI+Ci08cD5Gb3VydGggcmVsZWFzZSBvZiA8c3Ryb25nPkhBTCBhbmQgTG93IExheWVyIGRyaXZlcnM8L3N0cm9uZz4gZm9yIDxzdHJvbmc+U1RNMzJMNTUyeHgvU1RNMzJMNTYyeHg8L3N0cm9uZz4gZGV2aWNlczwvcD4KKzxwPk1haW50ZW5hbmNlIHJlbGVhc2Ugb2YgPHN0cm9uZz5IQUwgYW5kIExvdyBMYXllciBkcml2ZXJzPC9zdHJvbmc+IGZvciA8c3Ryb25nPlNUTTMyTDU1Mnh4L1NUTTMyTDU2Mnh4PC9zdHJvbmc+IGRldmljZXM8L3A+CiA8cD5TdXBlcnNldCBmZWF0dXJlcyBkZXZpY2UgU1RNMzJMNTYyeHggQVBJIFVzZXIgTWFudWFsIGF2YWlsYWJsZSAoU1RNMzJMNTYyeHhfVXNlcl9NYW51YWwuY2htKTwvcD4KIDxoMyBpZD0iaGFsLWRyaXZlcnMtdXBkYXRlcyI+PHN0cm9uZz5IQUwgRHJpdmVyczwvc3Ryb25nPiB1cGRhdGVzPC9oMz4KIDx1bD4KKzxsaT48c3Ryb25nPkhBTCBBREM8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+VXBkYXRlIHRpbWVvdXQgbWVjaGFuaXNtIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgQ09SVEVYPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPkFkZCBBUElzIGZvciBNUFUgY29udHJvbDoKKzx1bD4KKzxsaT5IQUxfTVBVX0VuYWJsZSgpLCBIQUxfTVBVX0Rpc2FibGUoKSwgSEFMX01QVV9Db25maWdSZWdpb24oKSBhbmQgSEFMX01QVV9Db25maWdNZW1vcnlBdHRyaWJ1dGVzKCk8L2xpPgorPGxpPkhBTF9NUFVfRW5hYmxlX05TKCksIEhBTF9NUFVfRGlzYWJsZV9OUygpLCBIQUxfTVBVX0NvbmZpZ1JlZ2lvbl9OUygpIGFuZCBIQUxfTVBVX0NvbmZpZ01lbW9yeUF0dHJpYnV0ZXNfTlMoKSBmb3Igbm9uLXNlY3VyZSBNUFUgY29udHJvbDwvbGk+Cis8L3VsPjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgQ1JZUDwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5BZGQgY2FwYWJpbGl0eSB0byBtYW5hZ2UgR0NNL0dNQUMvQ0NNIGhlYWRlciBmZWVkIGluIERNQSBtb2RlPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBEQUM8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+VXBkYXRlIHRpbWVvdXQgbWVjaGFuaXNtIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgSUNBQ0hFPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPlVwZGF0ZSB0aW1lb3V0IG1lY2hhbmlzbSB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb248L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIElXREc8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+VXBkYXRlIHRpbWVvdXQgbWVjaGFuaXNtIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgTFBUSU08L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+VXBkYXRlIGV4dGVybmFsIGNsb2NrIGNvbmZpZ3VyYXRpb24gZm9yIHNvbWUgQ2xvY2tTb3VyY2UvQ291bnRlclNvdXJjZSBjb21iaW5hdGlvbnM8L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIE1NQzwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5IaWdoIHNwZWVkIG1vZGUgZnJlcXVlbmN5IGNvbXB1dGVkIGJhc2VkIG9uIHJlYWwgY2xvY2sgdmFsdWU8L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIE5BTkQ8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+Rml4IHJlYWQgYW5kIHdyaXRlIGluIHNwYXJlIGFyZWEgKDE2LWJpdHMgYWRkcmVzc2luZyk8L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIE9QQU1QPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPlJlbmFtZSBkZWZpbml0aW9uIE9QQU1QX1BPV0VSTU9ERV9OT1JNQUwgdG8gT1BBTVBfUE9XRVJNT0RFX05PUk1BTFBPV0VSPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBQQ0Q8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+Rml4IGRldmljZSBJU08gSU4gZG91YmxlIGJ1ZmZlciBtb2RlPC9saT4KKzxsaT5GaXggUE1BIHJ4IGNvdW50IGRlc2NyaXB0b3IgdXBkYXRlPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBSQ0M8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+VXBkYXRlIHRpbWVvdXQgbWVjaGFuaXNtIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgUk5HPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPlVwZGF0ZSB0aW1lb3V0IG1lY2hhbmlzbSB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb248L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIFJUQzwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5BZGQgQVBJcyBmb3IgZGF5bGlnaHQgc2F2aW5nIHRpbWU6Cis8dWw+Cis8bGk+SEFMX1JUQ19EU1RfQWRkMUhvdXIoKSwgSEFMX1JUQ19EU1RfU3ViMUhvdXIoKSwgSEFMX1JUQ19EU1RfU2V0U3RvcmVPcGVyYXRpb24oKSwgSEFMX1JUQ19EU1RfQ2xlYXJTdG9yZU9wZXJhdGlvbigpIGFuZCBIQUxfUlRDX0RTVF9SZWFkU3RvcmVPcGVyYXRpb24oKTwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+QWRkIEFQSXMgZm9yIG1vbml0b3JpbmcgZnVuY3Rpb25zOgorPHVsPgorPGxpPkhBTF9SVENFeF9FbmFibGVUZW1wZXJhdHVyZU1vbml0b3JpbmcoKSBhbmQgSEFMX1JUQ0V4X0Rpc2FibGVUZW1wZXJhdHVyZU1vbml0b3JpbmcoKTwvbGk+Cis8bGk+SEFMX1JUQ0V4X0VuYWJsZVZvbHRhZ2VNb25pdG9yaW5nKCkgYW5kIEhBTF9SVENFeF9EaXNhYmxlVm9sdGFnZU1vbml0b3JpbmcoKTwvbGk+Cis8bGk+SEFMX1JUQ0V4X0VuYWJsZVdVVE1vbml0b3JpbmcoKSBhbmQgSEFMX1JUQ0V4X0Rpc2FibGVXVVRNb25pdG9yaW5nKCk8L2xpPgorPC91bD48L2xpPgorPGxpPkZpeCBjbGVhciBvZiByZWdpc3RlcnMgc3luY2hyb25pemF0aW9uIGZsYWcgKFJTRikgaW4gSEFMX1JUQ19XYWl0Rm9yU3luY2hybygpPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBTRE1NQzwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5IaWdoIHNwZWVkIG1vZGUgZnJlcXVlbmN5IGNvbXB1dGVkIGJhc2VkIG9uIHJlYWwgY2xvY2sgdmFsdWU8L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIFNNQlVTPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPjxzdHJvbmc+QWRkIGV4dGVuc2lvbiBmaWxlcyBzdG0zMmw1eHhfaGFsX3NtYnVzX2V4LmgvLmM8L3N0cm9uZz4gZm9yIG5ldyBBUElzOgorPHVsPgorPGxpPkhBTF9TTUJVU0V4X0VuYWJsZUZhc3RNb2RlUGx1cygpIGFuZCBIQUxfU01CVVNFeF9EaXNhYmxlRmFzdE1vZGVQbHVzKCk8L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIFNQSTwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5GaXggY29kZSBvcHRpbWl6YXRpb24gcHJvYmxlbSBpbiBTUElfV2FpdEZpZm9TdGF0ZVVudGlsVGltZW91dCgpPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBUSU08L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+Rml4IEhBTF9USU1fT25lUHVsc2VfU3RhcnQoKSBub3QgdG8gaWdub3JlIE91dHB1dENoYW5uZWwgcGFyYW1ldGVyPC9saT4KKzxsaT5GaXggY291bnRlciB2YWx1ZSBsYXRjaCBkZWxheSBhdCBoaWdoIGZyZXF1ZW5jeSBpbiBIQUxfVElNX0lDX1N0YXJ0X0RNQSgpPC9saT4KKzxsaT5VcGRhdGUgdGltZW91dCBtZWNoYW5pc20gdG8gYXZvaWQgZmFsc2UgdGltZW91dCBkZXRlY3Rpb24gaW4gY2FzZSBvZiBwcmVlbXB0aW9uPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBUU0M8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+QWRkIGFzc2VydCBtYWNybyB0byBhdm9pZCB3cm9uZyBDUExUL1BHUFNDIGNvbmZpZ3VyYXRpb248L2xpPgorPC91bD48L2xpPgorPC91bD4KKzxoMyBpZD0ibGwtZHJpdmVycy11cGRhdGVzIj48c3Ryb25nPkxMIERyaXZlcnM8L3N0cm9uZz4gdXBkYXRlczwvaDM+Cis8dWw+Cis8bGk+PHN0cm9uZz5OZXcgTEwgSUNBQ0hFIGRyaXZlcjogbmV3IHN0bTMybDV4eF9sbF9pY2FjaGUuaC8uYyBmaWxlczwvc3Ryb25nPgorPHVsPgorPGxpPkFkZCBBUElzIGZvciBJQ0FDSEUgY29udHJvbDoKKzx1bD4KKzxsaT5MTF9JQ0FDSEVfRW5hYmxlKCksIExMX0lDQUNIRV9EaXNhYmxlKCksIExMX0lDQUNIRV9Jc0VuYWJsZWQoKSwgTExfSUNBQ0hFX1NldE1vZGUoKSwgTExfSUNBQ0hFX0dldE1vZGUoKSwgTExfSUNBQ0hFX0ludmFsaWRhdGUoKSwgTExfSUNBQ0hFX0VuYWJsZU1vbml0b3JzKCksIExMX0lDQUNIRV9EaXNhYmxlTW9uaXRvcnMoKSwgTExfSUNBQ0hFX0lzRW5hYmxlZE1vbml0b3JzKCksIExMX0lDQUNIRV9SZXNldE1vbml0b3JzKCksIExMX0lDQUNIRV9HZXRIaXRNb25pdG9yKCkgYW5kIExMX0lDQUNIRV9HZXRNaXNzTW9uaXRvcigpPC9saT4KKzxsaT5MTF9JQ0FDSEVfQ29uZmlnUmVnaW9uKCk8L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+TEwgQURDPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPkluY3JlYXNlIGludGVybmFsIHJlZ3VsYXRvciBzdGFiaWxpemF0aW9uIHRpbWUgZnJvbSAxMHVzIHRvIDIwdXMgKExMX0FEQ19ERUxBWV9JTlRFUk5BTF9SRUdVTF9TVEFCX1VTKTwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5MTCBDT1JURVg8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+QWRkIEFQSXMgZm9yIE1QVSBjb250cm9sOgorPHVsPgorPGxpPkxMX01QVV9FbmFibGUoKSwgTExfTVBVX0Rpc2FibGUoKSwgTExfTVBVX0lzRW5hYmxlZCgpLCBMTF9NUFVfRW5hYmxlUmVnaW9uKCksIExMX01QVV9EaXNhYmxlUmVnaW9uKCksIExMX01QVV9Jc0VuYWJsZWRSZWdpb24oKSwgTExfTVBVX0NvbmZpZ1JlZ2lvbigpLCBMTF9NUFVfQ29uZmlnUmVnaW9uQWRkcmVzcygpLCBMTF9NUFVfQ29uZmlnQXR0cmlidXRlcygpLCBMTF9NUFVfU2V0UmVnaW9uQmFzZUFkZHJlc3MoKSwgTExfTVBVX0dldFJlZ2lvbkJhc2VBZGRyZXNzKCksIExMX01QVV9TZXRSZWdpb25MaW1pdEFkZHJlc3MoKSwgTExfTVBVX0dldFJlZ2lvbkxpbWl0QWRkcmVzcygpLCBMTF9NUFVfU2V0UmVnaW9uQWNjZXNzKCkgYW5kIExMX01QVV9HZXRSZWdpb25BY2Nlc3MoKTwvbGk+Cis8bGk+TExfTVBVX0VuYWJsZV9OUygpLCBMTF9NUFVfRGlzYWJsZV9OUygpLCBMTF9NUFVfSXNFbmFibGVkX05TKCksIExMX01QVV9FbmFibGVSZWdpb25fTlMoKSwgTExfTVBVX0Rpc2FibGVSZWdpb25fTlMoKSwgTExfTVBVX0lzRW5hYmxlZFJlZ2lvbl9OUygpLCBMTF9NUFVfQ29uZmlnUmVnaW9uX05TKCksIExMX01QVV9Db25maWdSZWdpb25BZGRyZXNzX05TKCksIExMX01QVV9Db25maWdBdHRyaWJ1dGVzX05TKCksIExMX01QVV9TZXRSZWdpb25CYXNlQWRkcmVzc19OUygpLCBMTF9NUFVfR2V0UmVnaW9uQmFzZUFkZHJlc3NfTlMoKSwgTExfTVBVX1NldFJlZ2lvbkxpbWl0QWRkcmVzc19OUygpLCBMTF9NUFVfR2V0UmVnaW9uTGltaXRBZGRyZXNzX05TKCksIExMX01QVV9TZXRSZWdpb25BY2Nlc3NfTlMoKSBhbmQgTExfTVBVX0dldFJlZ2lvbkFjY2Vzc19OUygpIGZvciBub24tc2VjdXJlIE1QVTwvbGk+Cis8L3VsPjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5MTCBPUEFNUDwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5SZW5hbWUgZGVmaW5pdGlvbiBMTF9PUEFNUF9QT1dFUk1PREVfTk9STUFMIHRvIExMX09QQU1QX1BPV0VSTU9ERV9OT1JNQUxQT1dFUjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5MTCBSVEM8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+QWRkIEFQSXMgZm9yIG1vbml0b3JpbmcgZnVuY3Rpb25zOgorPHVsPgorPGxpPkxMX1JUQ19FbmFibGVUZW1wZXJhdHVyZU1vbml0b3JpbmcoKSBhbmQgTExfUlRDX0Rpc2FibGVUZW1wZXJhdHVyZU1vbml0b3JpbmcoKTwvbGk+Cis8bGk+TExfUlRDX0VuYWJsZVZvbHRhZ2VNb25pdG9yaW5nKCkgYW5kIExMX1JUQ19EaXNhYmxlVm9sdGFnZU1vbml0b3JpbmcoKTwvbGk+Cis8bGk+TExfUlRDX0VuYWJsZVdVVE1vbml0b3JpbmcoKSBhbmQgTExfUlRDX0Rpc2FibGVXVVRNb25pdG9yaW5nKCk8L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+TEwgU1BJPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPkZpeCBMTF9TUElfSW5pdCgpIGZvciBSeCBGSUZPIHRocmVzaG9sZCBpZiA4LWJpdHMgbW9kZTwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5MTCBUSU08L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+Rml4IExMX1RJTV9HZXRDb3VudGVyTW9kZSgpPC9saT4KKzxsaT5GaXggaW52ZXJ0ZWQgY29tbWVudCBmb3IgT25lIFB1bHNlIE1vZGUgZGVmaW5pdGlvbnM8L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+TEwgVVNBUlQ8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+Rml4IExMX1VTQVJUX0Nsb2NrSW5pdCgpIHRvIGNvbmZpZ3VyZSBjbG9jayBwaGFzZSBhbmQgY2xvY2sgcG9sYXJpdHkgd2hlbiBDUjJfQ0xLRU4gaXMgY2xlYXJlZDwvbGk+Cis8bGk+UmVtb3ZlIHVzZWxlc3MgSVNfTExfVVNBUlRfQlJSX01BWCgpIG1hY3JvPC9saT4KKzwvdWw+PC9saT4KKzwvdWw+Cis8aDIgaWQ9Im5vdGVzIj5Ob3RlczwvaDI+Cis8cD5Gb3IgSEFMIGRyaXZlcnMgdXNhZ2UsIHN0bTMybDV4eF9oYWxfY29uZl90ZW1wbGF0ZS5oIGZpbGUgbXVzdCBiZSBjb3BpZWQgaW4gdXNlciBhcHBsaWNhdGlvbiBhcyBzdG0zMmw1eHhfaGFsX2NvbmYuaCB3aXRoIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdXBkYXRlLjwvcD4KKzxwPkZvciBMTCBkcml2ZXJzIHVzYWdlLCBzdG0zMl9hc3NlcnRfdGVtcGxhdGUuaCBmaWxlIG11c3QgYmUgY29waWVkIGluIHVzZXIgYXBwbGljYXRpb24gYXMgc3RtMzJfYXNzZXJ0Lmggd2l0aCBvcHRpb25hbCBhc3NlcnQgY29uZmlndXJhdGlvbiB1cGRhdGUuPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KKzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb240IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb240IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4wLjMgLyAyNi1KdW5lLTIwMjA8L3N0cm9uZz48L2xhYmVsPgorPGRpdj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEiPk1haW4gQ2hhbmdlczwvaDI+Cis8cD48c3Ryb25nPkZvdXJ0aCByZWxlYXNlPC9zdHJvbmc+PC9wPgorPGgyIGlkPSJjb250ZW50cy0xIj5Db250ZW50czwvaDI+Cis8cD5Gb3VydGggcmVsZWFzZSBvZiA8c3Ryb25nPkhBTCBhbmQgTG93IExheWVyIGRyaXZlcnM8L3N0cm9uZz4gZm9yIDxzdHJvbmc+U1RNMzJMNTUyeHgvU1RNMzJMNTYyeHg8L3N0cm9uZz4gZGV2aWNlczwvcD4KKzxwPlN1cGVyc2V0IGZlYXR1cmVzIGRldmljZSBTVE0zMkw1NjJ4eCBBUEkgVXNlciBNYW51YWwgYXZhaWxhYmxlIChTVE0zMkw1NjJ4eF9Vc2VyX01hbnVhbC5jaG0pPC9wPgorPGgzIGlkPSJoYWwtZHJpdmVycy11cGRhdGVzLTEiPjxzdHJvbmc+SEFMIERyaXZlcnM8L3N0cm9uZz4gdXBkYXRlczwvaDM+Cis8dWw+CiA8bGk+R2xvYmFsIHJlbW92YWwgb2Yg4oCYcmVnaXN0ZXLigJkgc3RvcmFnZSBjbGFzcyBxdWFsaWZpZXIgZGVwcmVjYXRlZCBzaW5jZSBDKysgMTE8L2xpPgogPGxpPjxzdHJvbmc+SEFMPC9zdHJvbmc+IGdlbmVyaWMgZHJpdmVyCiA8dWw+CkBAIC0xNDIsNyArMzAyLDcgQEAKIDxsaT5SZXdvcmsgQlJSIHJlZ2lzdGVyIHZhbHVlIGNvbXB1dGF0aW9uIGluIEhBTF9VQVJUX0luaXQoKSBmb3IgUk9NIHNpemUgZ2FpbjwvbGk+CiA8L3VsPjwvbGk+CiA8L3VsPgotPGgzIGlkPSJsbC1kcml2ZXJzLXVwZGF0ZXMiPjxzdHJvbmc+TEwgRHJpdmVyczwvc3Ryb25nPiB1cGRhdGVzPC9oMz4KKzxoMyBpZD0ibGwtZHJpdmVycy11cGRhdGVzLTEiPjxzdHJvbmc+TEwgRHJpdmVyczwvc3Ryb25nPiB1cGRhdGVzPC9oMz4KIDx1bD4KIDxsaT5HbG9iYWwgcmVtb3ZhbCBvZiDigJhyZWdpc3RlcuKAmSBzdG9yYWdlIGNsYXNzIHF1YWxpZmllciBkZXByZWNhdGVkIHNpbmNlIEMrKyAxMTwvbGk+CiA8bGk+PHN0cm9uZz5MTCBHUElPPC9zdHJvbmc+IGRyaXZlcgpAQCAtMTY3LDcgKzMyNyw3IEBACiA8bGk+Q2hhbmdlIGRlZmF1bHQgQ0ZHUjEgcmVnaXN0ZXIgdmFsdWVzIGluIExMX1VDUERfU3RydWN0SW5pdCgpPC9saT4KIDwvdWw+PC9saT4KIDwvdWw+Ci08aDIgaWQ9Im5vdGVzIj5Ob3RlczwvaDI+Cis8aDIgaWQ9Im5vdGVzLTEiPk5vdGVzPC9oMj4KIDxwPkZvciBIQUwgZHJpdmVycyB1c2FnZSwgc3RtMzJsNXh4X2hhbF9jb25mX3RlbXBsYXRlLmggZmlsZSBtdXN0IGJlIGNvcGllZCBpbiB1c2VyIGFwcGxpY2F0aW9uIGFzIHN0bTMybDV4eF9oYWxfY29uZi5oIHdpdGggb3B0aW9uYWwgY29uZmlndXJhdGlvbiB1cGRhdGUuPC9wPgogPHA+Rm9yIExMIGRyaXZlcnMgdXNhZ2UsIHN0bTMyX2Fzc2VydF90ZW1wbGF0ZS5oIGZpbGUgbXVzdCBiZSBjb3BpZWQgaW4gdXNlciBhcHBsaWNhdGlvbiBhcyBzdG0zMl9hc3NlcnQuaCB3aXRoIG9wdGlvbmFsIGFzc2VydCBjb25maWd1cmF0aW9uIHVwZGF0ZS48L3A+CiA8L2Rpdj4KQEAgLTE3NSwxMiArMzM1LDEyIEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMyIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMyIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuMC4yIC8gMTItRmVicnVhcnktMjAyMDwvc3Ryb25nPjwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtMSI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTIiPk1haW4gQ2hhbmdlczwvaDI+CiA8cD48c3Ryb25nPlRoaXJkIHJlbGVhc2U8L3N0cm9uZz48L3A+Ci08aDIgaWQ9ImNvbnRlbnRzLTEiPkNvbnRlbnRzPC9oMj4KKzxoMiBpZD0iY29udGVudHMtMiI+Q29udGVudHM8L2gyPgogPHA+VGhpcmQgb2ZmaWNpYWwgcmVsZWFzZSBvZiA8c3Ryb25nPkhBTCBhbmQgTG93IExheWVyIGRyaXZlcnM8L3N0cm9uZz4gZm9yIDxzdHJvbmc+U1RNMzJMNTUyeHgvU1RNMzJMNTYyeHg8L3N0cm9uZz4gZGV2aWNlczwvcD4KIDxwPlN1cGVyc2V0IGZlYXR1cmVzIGRldmljZSBTVE0zMkw1NjJ4eCBBUEkgVXNlciBNYW51YWwgYXZhaWxhYmxlIChTVE0zMkw1NjJ4eF9Vc2VyX01hbnVhbC5jaG0pPC9wPgotPGgzIGlkPSJoYWwtZHJpdmVycy11cGRhdGVzLTEiPjxzdHJvbmc+SEFMIERyaXZlcnM8L3N0cm9uZz4gdXBkYXRlczwvaDM+Cis8aDMgaWQ9ImhhbC1kcml2ZXJzLXVwZGF0ZXMtMiI+PHN0cm9uZz5IQUwgRHJpdmVyczwvc3Ryb25nPiB1cGRhdGVzPC9oMz4KIDx1bD4KIDxsaT48c3Ryb25nPkhBTCBGTEFTSDwvc3Ryb25nPiBkcml2ZXIKIDx1bD4KQEAgLTIwMyw3ICszNjMsNyBAQAogPGxpPkZpeCBIQUxfU1BJX1JlY2VpdmVfRE1BKCkgYW5kIEhBTF9TUElfVHJhbnNtaXRSZWNlaXZlX0RNQSgpIHRvIG9ubHkgZGlzYWJsZSBUWCBETUEgaW50ZXJydXB0IGF0IGVuZCBvZiBETUEgcmVjZXB0aW9uIGluIE1hc3RlciBSWCAyIGxpbmVzIG1vZGU8L2xpPgogPC91bD48L2xpPgogPC91bD4KLTxoMyBpZD0ibGwtZHJpdmVycy11cGRhdGVzLTEiPjxzdHJvbmc+TEwgRHJpdmVyczwvc3Ryb25nPiB1cGRhdGVzPC9oMz4KKzxoMyBpZD0ibGwtZHJpdmVycy11cGRhdGVzLTIiPjxzdHJvbmc+TEwgRHJpdmVyczwvc3Ryb25nPiB1cGRhdGVzPC9oMz4KIDx1bD4KIDxsaT48c3Ryb25nPkxMIFVUSUxTPC9zdHJvbmc+IGRyaXZlcgogPHVsPgpAQCAtMjEzLDcgKzM3Myw3IEBACiA8L3VsPjwvbGk+CiA8L3VsPjwvbGk+CiA8L3VsPgotPGgyIGlkPSJub3Rlcy0xIj5Ob3RlczwvaDI+Cis8aDIgaWQ9Im5vdGVzLTIiPk5vdGVzPC9oMj4KIDxwPkZvciBIQUwgZHJpdmVycyB1c2FnZSwgc3RtMzJsNXh4X2hhbF9jb25mX3RlbXBsYXRlLmggZmlsZSBtdXN0IGJlIGNvcGllZCBpbiB1c2VyIGFwcGxpY2F0aW9uIGFzIHN0bTMybDV4eF9oYWxfY29uZi5oIHdpdGggb3B0aW9uYWwgY29uZmlndXJhdGlvbiB1cGRhdGUuPC9wPgogPHA+Rm9yIExMIGRyaXZlcnMgdXNhZ2UsIHN0bTMyX2Fzc2VydF90ZW1wbGF0ZS5oIGZpbGUgbXVzdCBiZSBjb3BpZWQgaW4gdXNlciBhcHBsaWNhdGlvbiBhcyBzdG0zMl9hc3NlcnQuaCB3aXRoIG9wdGlvbmFsIGFzc2VydCBjb25maWd1cmF0aW9uIHVwZGF0ZS48L3A+CiA8aDIgaWQ9Imtub3duLWxpbWl0YXRpb25zIj5Lbm93biBMaW1pdGF0aW9uczwvaDI+CkBAIC0yMjgsMTIgKzM4OCwxMiBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjIiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjIiIGFyaWEtaGlkZGVuPSJ0cnVlIj48c3Ryb25nPlYxLjAuMSAvIDIyLUphbnVhcnktMjAyMDwvc3Ryb25nPjwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtMiI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTMiPk1haW4gQ2hhbmdlczwvaDI+CiA8cD48c3Ryb25nPlNlY29uZCByZWxlYXNlPC9zdHJvbmc+PC9wPgotPGgyIGlkPSJjb250ZW50cy0yIj5Db250ZW50czwvaDI+Cis8aDIgaWQ9ImNvbnRlbnRzLTMiPkNvbnRlbnRzPC9oMj4KIDxwPlNlY29uZCBvZmZpY2lhbCByZWxlYXNlIG9mIDxzdHJvbmc+SEFMIGFuZCBMb3cgTGF5ZXIgZHJpdmVyczwvc3Ryb25nPiBmb3IgPHN0cm9uZz5TVE0zMkw1NTJ4eC9TVE0zMkw1NjJ4eDwvc3Ryb25nPiBkZXZpY2VzPC9wPgogPHA+U3VwZXJzZXQgZmVhdHVyZXMgZGV2aWNlIFNUTTMyTDU2Mnh4IEFQSSBVc2VyIE1hbnVhbCBhdmFpbGFibGUgKFNUTTMyTDU2Mnh4X1VzZXJfTWFudWFsLmNobSk8L3A+Ci08aDMgaWQ9ImhhbC1kcml2ZXJzLXVwZGF0ZXMtMiI+PHN0cm9uZz5IQUwgRHJpdmVyczwvc3Ryb25nPiB1cGRhdGVzPC9oMz4KKzxoMyBpZD0iaGFsLWRyaXZlcnMtdXBkYXRlcy0zIj48c3Ryb25nPkhBTCBEcml2ZXJzPC9zdHJvbmc+IHVwZGF0ZXM8L2gzPgogPHVsPgogPGxpPjxzdHJvbmc+SEFMIEZMQVNIPC9zdHJvbmc+IGRyaXZlcgogPHVsPgpAQCAtMjc3LDcgKzQzNyw3IEBACiA8bGk+QWRkIHJlY2VpdmVyIHRpbWVvdXQgaW50ZXJydXB0IG1hbmFnZW1lbnQgd2l0aCBuZXcgSEFMX1VTQVJUX0VSUk9SX1JUTyBlcnJvciBjb2RlIGluIEhBTF9VU0FSVF9JUlFIYW5kbGVyKCk8L2xpPgogPC91bD48L2xpPgogPC91bD4KLTxoMyBpZD0ibGwtZHJpdmVycy11cGRhdGVzLTIiPjxzdHJvbmc+TEwgRHJpdmVyczwvc3Ryb25nPiB1cGRhdGVzPC9oMz4KKzxoMyBpZD0ibGwtZHJpdmVycy11cGRhdGVzLTMiPjxzdHJvbmc+TEwgRHJpdmVyczwvc3Ryb25nPiB1cGRhdGVzPC9oMz4KIDx1bD4KIDxsaT48c3Ryb25nPkxMIEdQSU88L3N0cm9uZz4gZHJpdmVyCiA8dWw+CkBAIC0yOTIsNyArNDUyLDcgQEAKIDxsaT5BZGQgTExfU2V0Rmxhc2hMYXRlbmN5KCkgQVBJPC9saT4KIDwvdWw+PC9saT4KIDwvdWw+Ci08aDIgaWQ9Im5vdGVzLTIiPk5vdGVzPC9oMj4KKzxoMiBpZD0ibm90ZXMtMyI+Tm90ZXM8L2gyPgogPHA+Rm9yIEhBTCBkcml2ZXJzIHVzYWdlLCBzdG0zMmw1eHhfaGFsX2NvbmZfdGVtcGxhdGUuaCBmaWxlIG11c3QgYmUgY29waWVkIGluIHVzZXIgYXBwbGljYXRpb24gYXMgc3RtMzJsNXh4X2hhbF9jb25mLmggd2l0aCBvcHRpb25hbCBjb25maWd1cmF0aW9uIHVwZGF0ZS48L3A+CiA8cD5Gb3IgTEwgZHJpdmVycyB1c2FnZSwgc3RtMzJfYXNzZXJ0X3RlbXBsYXRlLmggZmlsZSBtdXN0IGJlIGNvcGllZCBpbiB1c2VyIGFwcGxpY2F0aW9uIGFzIHN0bTMyX2Fzc2VydC5oIHdpdGggb3B0aW9uYWwgYXNzZXJ0IGNvbmZpZ3VyYXRpb24gdXBkYXRlLjwvcD4KIDwvZGl2PgpAQCAtMzAwLDkgKzQ2MCw5IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMSIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMSIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuMC4wIC8gMTMtRGVjZW1iZXItMjAxOTwvc3Ryb25nPjwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtMyI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTQiPk1haW4gQ2hhbmdlczwvaDI+CiA8cD48c3Ryb25nPkZpcnN0IHJlbGVhc2U8L3N0cm9uZz48L3A+Ci08aDIgaWQ9ImNvbnRlbnRzLTMiPkNvbnRlbnRzPC9oMj4KKzxoMiBpZD0iY29udGVudHMtNCI+Q29udGVudHM8L2gyPgogPHA+Rmlyc3Qgb2ZmaWNpYWwgcmVsZWFzZSBvZiA8c3Ryb25nPkhBTCBhbmQgTG93IExheWVyIGRyaXZlcnM8L3N0cm9uZz4gZm9yIDxzdHJvbmc+U1RNMzJMNTUyeHgvU1RNMzJMNTYyeHg8L3N0cm9uZz4gZGV2aWNlczwvcD4KIDxwPlN1cGVyc2V0IGZlYXR1cmVzIGRldmljZSBTVE0zMkw1NjJ4eCBBUEkgVXNlciBNYW51YWwgYXZhaWxhYmxlIChTVE0zMkw1NjJ4eF9Vc2VyX01hbnVhbC5jaG0pPC9wPgogPGgzIGlkPSJoYWwtZHJpdmVycyI+SEFMIERyaXZlcnM8L2gzPgpAQCAtMzE0LDcgKzQ3NCw3IEBACiA8dWw+CiA8bGk+QURDLCBCVVMsIENPTVAsIENPUlRFWCwgQ1JDLCBDUlMsIENSWVAsIERBQywgRE1BLCBETUFNVVgsIEVYVEksIEdQSU8sIEkyQywgSVdERywgTFBUSU0sIExQVUFSVCwgT1BBTVAsIFBLQSwgUFdSLCBSQ0MsIFJORywgUlRDLCBTRE1NQywgU1BJLCBTWVNURU0sIFRJTSwgVUNQRCwgVVNBUlQsIFVUSUxTLCBXV0RHPC9saT4KIDwvdWw+Ci08aDIgaWQ9Im5vdGVzLTMiPk5vdGVzPC9oMj4KKzxoMiBpZD0ibm90ZXMtNCI+Tm90ZXM8L2gyPgogPHA+Rm9yIEhBTCBkcml2ZXJzIHVzYWdlLCBzdG0zMmw1eHhfaGFsX2NvbmZfdGVtcGxhdGUuaCBmaWxlIG11c3QgYmUgY29waWVkIGluIHVzZXIgYXBwbGljYXRpb24gYXMgc3RtMzJsNXh4X2hhbF9jb25mLmggd2l0aCBvcHRpb25hbCBjb25maWd1cmF0aW9uIHVwZGF0ZS48L3A+CiA8cD5Gb3IgTEwgZHJpdmVycyB1c2FnZSwgc3RtMzJfYXNzZXJ0X3RlbXBsYXRlLmggZmlsZSBtdXN0IGJlIGNvcGllZCBpbiB1c2VyIGFwcGxpY2F0aW9uIGFzIHN0bTMyX2Fzc2VydC5oIHdpdGggb3B0aW9uYWwgYXNzZXJ0IGNvbmZpZ3VyYXRpb24gdXBkYXRlLjwvcD4KIDwvZGl2PgpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDV4eF9oYWwuYyBiL1NyYy9zdG0zMmw1eHhfaGFsLmMKaW5kZXggNjA1ZmRhZi4uNzAyYTQ3YiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDV4eF9oYWwuYworKysgYi9TcmMvc3RtMzJsNXh4X2hhbC5jCkBAIC00OSwxMSArNDksMTEgQEAKIC8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGRlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqCi0gKiBAYnJpZWYgU1RNMzJMNXh4IEhBTCBEcml2ZXIgdmVyc2lvbiBudW1iZXIKLSAgICovCisgICogQGJyaWVmIFNUTTMyTDV4eCBIQUwgRHJpdmVyIHZlcnNpb24gbnVtYmVyCisgICovCiAjZGVmaW5lIFNUTTMyTDVYWF9IQUxfVkVSU0lPTl9NQUlOICAgKDB4MDFVKSAvKiE8IFszMToyNF0gbWFpbiB2ZXJzaW9uICovCiAjZGVmaW5lIFNUTTMyTDVYWF9IQUxfVkVSU0lPTl9TVUIxICAgKDB4MDBVKSAvKiE8IFsyMzoxNl0gc3ViMSB2ZXJzaW9uICovCi0jZGVmaW5lIFNUTTMyTDVYWF9IQUxfVkVSU0lPTl9TVUIyICAgKDB4MDNVKSAvKiE8IFsxNTo4XSAgc3ViMiB2ZXJzaW9uICovCisjZGVmaW5lIFNUTTMyTDVYWF9IQUxfVkVSU0lPTl9TVUIyICAgKDB4MDRVKSAvKiE8IFsxNTo4XSAgc3ViMiB2ZXJzaW9uICovCiAjZGVmaW5lIFNUTTMyTDVYWF9IQUxfVkVSU0lPTl9SQyAgICAgKDB4MDBVKSAvKiE8IFs3OjBdICByZWxlYXNlIGNhbmRpZGF0ZSAqLwogI2RlZmluZSBTVE0zMkw1WFhfSEFMX1ZFUlNJT04gICAgICAgICgoU1RNMzJMNVhYX0hBTF9WRVJTSU9OX01BSU4gIDw8IDI0VSlcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwoU1RNMzJMNVhYX0hBTF9WRVJTSU9OX1NVQjEgPDwgMTZVKVwKQEAgLTg5LDggKzg5LDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBIQUxfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gRnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgIyMjIyMgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAjIyMjIwpAQCAtMjY5LDggKzI2OSw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgSEFMX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDIgSEFMIENvbnRyb2wgZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgIEhBTCBDb250cm9sIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgIEhBTCBDb250cm9sIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgSEFMIENvbnRyb2wgZnVuY3Rpb25zICMjIyMjCkBAIC0yOTMsNyArMjkzLDcgQEAKICAgKiAgICAgICAgdXNlZCBhcyBhcHBsaWNhdGlvbiB0aW1lIGJhc2UuCiAgICogQG5vdGUgSW4gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIHRoaXMgdmFyaWFibGUgaXMgaW5jcmVtZW50ZWQgZWFjaCAxbXMKICAgKiAgICAgICBpbiBTeXNUaWNrIElTUi4KLSAqIEBub3RlIFRoaXMgZnVuY3Rpb24gaXMgZGVjbGFyZWQgYXMgX193ZWFrIHRvIGJlIG92ZXJ3cml0dGVuIGluIGNhc2Ugb2Ygb3RoZXIKKyAgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGFzIF9fd2VhayB0byBiZSBvdmVyd3JpdHRlbiBpbiBjYXNlIG9mIG90aGVyCiAgICogICAgICBpbXBsZW1lbnRhdGlvbnMgaW4gdXNlciBmaWxlLgogICAqIEByZXR2YWwgTm9uZQogICAqLwpAQCAtNDM1LDcgKzQzNSw3IEBACiAgICovCiB1aW50MzJfdCBIQUxfR2V0UkVWSUQodm9pZCkKIHsKLSAgcmV0dXJuKChEQkdNQ1UtPklEQ09ERSAmIERCR01DVV9JRENPREVfUkVWX0lEKSA+PiBEQkdNQ1VfSURDT0RFX1JFVl9JRF9Qb3MpOworICByZXR1cm4gKChEQkdNQ1UtPklEQ09ERSAmIERCR01DVV9JRENPREVfUkVWX0lEKSA+PiBEQkdNQ1VfSURDT0RFX1JFVl9JRF9Qb3MpOwogfQogCiAvKioKQEAgLTQ0NCw3ICs0NDQsNyBAQAogICAqLwogdWludDMyX3QgSEFMX0dldERFVklEKHZvaWQpCiB7Ci0gIHJldHVybihEQkdNQ1UtPklEQ09ERSAmIERCR01DVV9JRENPREVfREVWX0lEKTsKKyAgcmV0dXJuIChEQkdNQ1UtPklEQ09ERSAmIERCR01DVV9JRENPREVfREVWX0lEKTsKIH0KIAogLyoqCkBAIC00NTMsNyArNDUzLDcgQEAKICAgKi8KIHVpbnQzMl90IEhBTF9HZXRVSUR3MCh2b2lkKQogewotICByZXR1cm4oUkVBRF9SRUcoKigodWludDMyX3QgKilVSURfQkFTRSkpKTsKKyAgcmV0dXJuIChSRUFEX1JFRygqKCh1aW50MzJfdCAqKVVJRF9CQVNFKSkpOwogfQogCiAvKioKQEAgLTQ2Miw3ICs0NjIsNyBAQAogICAqLwogdWludDMyX3QgSEFMX0dldFVJRHcxKHZvaWQpCiB7Ci0gIHJldHVybihSRUFEX1JFRygqKCh1aW50MzJfdCAqKShVSURfQkFTRSArIDRVKSkpKTsKKyAgcmV0dXJuIChSRUFEX1JFRygqKCh1aW50MzJfdCAqKShVSURfQkFTRSArIDRVKSkpKTsKIH0KIAogLyoqCkBAIC00NzEsNyArNDcxLDcgQEAKICAgKi8KIHVpbnQzMl90IEhBTF9HZXRVSUR3Mih2b2lkKQogewotICAgcmV0dXJuKFJFQURfUkVHKCooKHVpbnQzMl90ICopKFVJRF9CQVNFICsgOFUpKSkpOworICByZXR1cm4gKFJFQURfUkVHKCooKHVpbnQzMl90ICopKFVJRF9CQVNFICsgOFUpKSkpOwogfQogCiAvKioKQEAgLTQ3OSw4ICs0NzksOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIEhBTF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzIEhBTCBEZWJ1ZyBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICAgSEFMIERlYnVnIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgIEhBTCBEZWJ1ZyBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICMjIyMjIEhBTCBEZWJ1ZyBmdW5jdGlvbnMgIyMjIyMKQEAgLTUzNCw4ICs1MzQsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIEhBTF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA0IEhBTCBTWVNDRkcgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICAgSEFMIFNZU0NGRyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgIEhBTCBTWVNDRkcgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICMjIyMjIEhBTCBTWVNDRkcgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgIyMjIyMKQEAgLTY0NCw5ICs2NDQsOSBAQAogICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCiAgIC8qIFdhaXQgZm9yIFZSUiBiaXQgICovCi0gIHdoaWxlKFJFQURfQklUKFZSRUZCVUYtPkNTUiwgVlJFRkJVRl9DU1JfVlJSKSA9PSAwVSkKKyAgd2hpbGUgKFJFQURfQklUKFZSRUZCVUYtPkNTUiwgVlJFRkJVRl9DU1JfVlJSKSA9PSAwVSkKICAgewotICAgIGlmKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFZSRUZCVUZfVElNRU9VVF9WQUxVRSkKKyAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gVlJFRkJVRl9USU1FT1VUX1ZBTFVFKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICB9CkBAIC03MTAsOCArNzEwLDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBIQUxfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwNSBIQUwgU1lTQ0ZHIGxvY2sgbWFuYWdlbWVudCBmdW5jdGlvbnMKLSAqICBAYnJpZWYgU1lTQ0ZHIGxvY2sgbWFuYWdlbWVudCBmdW5jdGlvbnMuCi0gKgorICAqICBAYnJpZWYgU1lTQ0ZHIGxvY2sgbWFuYWdlbWVudCBmdW5jdGlvbnMuCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgU1lTQ0ZHIGxvY2sgZnVuY3Rpb25zICMjIyMjCkBAIC03NTUsNyArNzU1LDcgQEAKICAgdWludDMyX3QgdG1wX2xvY2s7CiAKICAgLyogQ2hlY2sgbnVsbCBwb2ludGVyICovCi0gIGlmKHBJdGVtID09IE5VTEwpCisgIGlmIChwSXRlbSA9PSBOVUxMKQogICB7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQpAQCAtNzgyLDggKzc4Miw4IEBACiAKIAogLyoqIEBkZWZncm91cCBIQUxfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwNiBIQUwgU1lTQ0ZHIGF0dHJpYnV0ZXMgbWFuYWdlbWVudCBmdW5jdGlvbnMKLSAqICBAYnJpZWYgU1lTQ0ZHIGF0dHJpYnV0ZXMgbWFuYWdlbWVudCBmdW5jdGlvbnMuCi0gKgorICAqICBAYnJpZWYgU1lTQ0ZHIGF0dHJpYnV0ZXMgbWFuYWdlbWVudCBmdW5jdGlvbnMuCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgU1lTQ0ZHIGF0dHJpYnV0ZXMgZnVuY3Rpb25zICMjIyMjCkBAIC04MTMsNyArODEzLDcgQEAKICAgdG1wID0gU1lTQ0ZHX1MtPlNFQ0NGR1I7CiAKICAgLyogU2V0IG9yIHJlc2V0IEl0ZW0gKi8KLSAgaWYoKEF0dHJpYnV0ZXMgJiBTWVNDRkdfU0VDKSAhPSAweDAwVSkKKyAgaWYgKChBdHRyaWJ1dGVzICYgU1lTQ0ZHX1NFQykgIT0gMHgwMFUpCiAgIHsKICAgICB0bXAgfD0gSXRlbTsKICAgfQpAQCAtODM3LDcgKzgzNyw3IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU1lTQ0ZHX0dldENvbmZpZ0F0dHJpYnV0ZXModWludDMyX3QgSXRlbSwgdWludDMyX3QgKnBBdHRyaWJ1dGVzKQogewogICAvKiBDaGVjayBudWxsIHBvaW50ZXIgKi8KLSAgaWYocEF0dHJpYnV0ZXMgPT0gTlVMTCkKKyAgaWYgKHBBdHRyaWJ1dGVzID09IE5VTEwpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC04NDYsNyArODQ2LDcgQEAKICAgYXNzZXJ0X3BhcmFtKElTX1NZU0NGR19JVEVNU19BVFRSSUJVVEVTKEl0ZW0pKTsKIAogICAvKiBHZXQgdGhlIHNlY3VyZSBhdHRyaWJ1dGUgc3RhdGUgKi8KLSAgaWYoKFNZU0NGR19TLT5TRUNDRkdSICYgSXRlbSkgIT0gMFUpCisgIGlmICgoU1lTQ0ZHX1MtPlNFQ0NGR1IgJiBJdGVtKSAhPSAwVSkKICAgewogICAgICpwQXR0cmlidXRlcyA9IFNZU0NGR19TRUM7CiAgIH0KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw1eHhfaGFsX2FkYy5jIGIvU3JjL3N0bTMybDV4eF9oYWxfYWRjLmMKaW5kZXggNDUxOTk0MS4uN2UzMDY1YiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDV4eF9oYWxfYWRjLmMKKysrIGIvU3JjL3N0bTMybDV4eF9oYWxfYWRjLmMKQEAgLTQ5OSw3ICs0OTksNyBAQAogICAgIC8qIE5vdGU6IFZhcmlhYmxlIGRpdmlkZWQgYnkgMiB0byBjb21wZW5zYXRlIHBhcnRpYWxseSAgICAgICAgICAgICAgKi8KICAgICAvKiAgICAgICBDUFUgcHJvY2Vzc2luZyBjeWNsZXMsIHNjYWxpbmcgaW4gdXMgc3BsaXQgdG8gbm90ICAgICAgICAgICovCiAgICAgLyogICAgICAgZXhjZWVkIDMyIGJpdHMgcmVnaXN0ZXIgY2FwYWNpdHkgYW5kIGhhbmRsZSBsb3cgZnJlcXVlbmN5LiAqLwotICAgIHdhaXRfbG9vcF9pbmRleCA9ICgoTExfQURDX0RFTEFZX0lOVEVSTkFMX1JFR1VMX1NUQUJfVVMgLyAxMFVMKSAqIChTeXN0ZW1Db3JlQ2xvY2sgLyAoMTAwMDAwVUwgKiAyVUwpKSk7CisgICAgd2FpdF9sb29wX2luZGV4ID0gKChMTF9BRENfREVMQVlfSU5URVJOQUxfUkVHVUxfU1RBQl9VUyAvIDEwVUwpICogKChTeXN0ZW1Db3JlQ2xvY2sgLyAoMTAwMDAwVUwgKiAyVUwpKSArIDFVTCkpOwogICAgIHdoaWxlICh3YWl0X2xvb3BfaW5kZXggIT0gMFVMKQogICAgIHsKICAgICAgIHdhaXRfbG9vcF9pbmRleC0tOwpAQCAtODU3LDMxICs4NTcsMjggQEAKICAgICAgICAgSEFMX0FEQ19Db25maWdDaGFubmVsKCkgb3IgSEFMX0FEQ0V4X0luamVjdGVkQ29uZmlnQ2hhbm5lbCgpICkKICAgICAqLwogICAgIEFEQ19DTEVBUl9DT01NT05fQ09OVFJPTF9SRUdJU1RFUihoYWRjKTsKLSAgfQogCi0gIC8qIERlSW5pdCB0aGUgbG93IGxldmVsIGhhcmR3YXJlLgotCi0gICAgIEZvciBleGFtcGxlOgotICAgIF9fSEFMX1JDQ19BRENfRk9SQ0VfUkVTRVQoKTsKLSAgICBfX0hBTF9SQ0NfQURDX1JFTEVBU0VfUkVTRVQoKTsKLSAgICBfX0hBTF9SQ0NfQURDX0NMS19ESVNBQkxFKCk7Ci0KLSAgICBLZWVwIGluIG1pbmQgdGhhdCBhbGwgQURDcyB1c2UgdGhlIHNhbWUgY2xvY2s6IGRpc2FibGluZwotICAgIHRoZSBjbG9jayB3aWxsIHJlc2V0IGFsbCBBRENzLgotCi0gICovCisgICAgLyogPT09PT09PT09PSBIYXJkIHJlc2V0IEFEQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8KKyAgICAvKiBQZXJmb3JtcyBhIGdsb2JhbCByZXNldCBvZiB0aGUgZW50aXJlIEFEQyBwZXJpcGhlcmFscyBpbnN0YW5jZXMgICAgICAgICovCisgICAgLyogc2hhcmluZyB0aGUgc2FtZSBjb21tb24gQURDIGluc3RhbmNlOiBBREMgc3RhdGUgaXMgZm9yY2VkIHRvICAgICAgICAgICAqLworICAgIC8qIGEgc2ltaWxhciBzdGF0ZSBhcyBhZnRlciBkZXZpY2UgcG93ZXItb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBOb3RlOiBBIHBvc3NpYmxlIGltcGxlbWVudGF0aW9uIGlzIHRvIGFkZCBSQ0MgYnVzIHJlc2V0IG9mIEFEQyAgICAgICAgICovCisgICAgLyogKGZvciBleGFtcGxlLCB1c2luZyBtYWNybyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICBfX0hBTF9SQ0NfQURDLi4uX0ZPUkNFX1JFU0VUKCkvLi4uX1JFTEVBU0VfUkVTRVQoKS8uLi5fQ0xLX0RJU0FCTEUoKSkgKi8KKyAgICAvKiBpbiBmdW5jdGlvbiAidm9pZCBIQUxfQURDX01zcERlSW5pdChBRENfSGFuZGxlVHlwZURlZiAqaGFkYykiOiAgICAgICAgICovCiAjaWYgKFVTRV9IQUxfQURDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotICBpZiAoaGFkYy0+TXNwRGVJbml0Q2FsbGJhY2sgPT0gTlVMTCkKLSAgewotICAgIGhhZGMtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX0FEQ19Nc3BEZUluaXQ7IC8qIExlZ2FjeSB3ZWFrIE1zcERlSW5pdCAgKi8KLSAgfQorICAgIGlmIChoYWRjLT5Nc3BEZUluaXRDYWxsYmFjayA9PSBOVUxMKQorICAgIHsKKyAgICAgIGhhZGMtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX0FEQ19Nc3BEZUluaXQ7IC8qIExlZ2FjeSB3ZWFrIE1zcERlSW5pdCAgKi8KKyAgICB9CiAKLSAgLyogRGVJbml0IHRoZSBsb3cgbGV2ZWwgaGFyZHdhcmUgKi8KLSAgaGFkYy0+TXNwRGVJbml0Q2FsbGJhY2soaGFkYyk7CisgICAgLyogRGVJbml0IHRoZSBsb3cgbGV2ZWwgaGFyZHdhcmUgKi8KKyAgICBoYWRjLT5Nc3BEZUluaXRDYWxsYmFjayhoYWRjKTsKICNlbHNlCi0gIC8qIERlSW5pdCB0aGUgbG93IGxldmVsIGhhcmR3YXJlICovCi0gIEhBTF9BRENfTXNwRGVJbml0KGhhZGMpOworICAgIC8qIERlSW5pdCB0aGUgbG93IGxldmVsIGhhcmR3YXJlICovCisgICAgSEFMX0FEQ19Nc3BEZUluaXQoaGFkYyk7CiAjZW5kaWYgLyogVVNFX0hBTF9BRENfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgIH0KIAogICAvKiBTZXQgQURDIGVycm9yIGNvZGUgdG8gbm9uZSAqLwogICBBRENfQ0xFQVJfRVJST1JDT0RFKGhhZGMpOwpAQCAtMTQ4MywxMyArMTQ4MCwxNyBAQAogICAgIHsKICAgICAgIGlmICgoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gVGltZW91dCkgfHwgKFRpbWVvdXQgPT0gMFVMKSkKICAgICAgIHsKLSAgICAgICAgLyogVXBkYXRlIEFEQyBzdGF0ZSBtYWNoaW5lIHRvIHRpbWVvdXQgKi8KLSAgICAgICAgU0VUX0JJVChoYWRjLT5TdGF0ZSwgSEFMX0FEQ19TVEFURV9USU1FT1VUKTsKKyAgICAgICAgLyogTmV3IGNoZWNrIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbiAqLworICAgICAgICBpZiAoKGhhZGMtPkluc3RhbmNlLT5JU1IgJiB0bXBfRmxhZ19FbmQpID09IDBVTCkKKyAgICAgICAgeworICAgICAgICAgIC8qIFVwZGF0ZSBBREMgc3RhdGUgbWFjaGluZSB0byB0aW1lb3V0ICovCisgICAgICAgICAgU0VUX0JJVChoYWRjLT5TdGF0ZSwgSEFMX0FEQ19TVEFURV9USU1FT1VUKTsKIAotICAgICAgICAvKiBQcm9jZXNzIHVubG9ja2VkICovCi0gICAgICAgIF9fSEFMX1VOTE9DSyhoYWRjKTsKKyAgICAgICAgICAvKiBQcm9jZXNzIHVubG9ja2VkICovCisgICAgICAgICAgX19IQUxfVU5MT0NLKGhhZGMpOwogCi0gICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTE1OTksMTMgKzE2MDAsMTcgQEAKICAgICB7CiAgICAgICBpZiAoKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFRpbWVvdXQpIHx8IChUaW1lb3V0ID09IDBVTCkpCiAgICAgICB7Ci0gICAgICAgIC8qIFVwZGF0ZSBBREMgc3RhdGUgbWFjaGluZSB0byB0aW1lb3V0ICovCi0gICAgICAgIFNFVF9CSVQoaGFkYy0+U3RhdGUsIEhBTF9BRENfU1RBVEVfVElNRU9VVCk7CisgICAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgICAgaWYgKF9fSEFMX0FEQ19HRVRfRkxBRyhoYWRjLCBFdmVudFR5cGUpID09IDBVTCkKKyAgICAgICAgeworICAgICAgICAgIC8qIFVwZGF0ZSBBREMgc3RhdGUgbWFjaGluZSB0byB0aW1lb3V0ICovCisgICAgICAgICAgU0VUX0JJVChoYWRjLT5TdGF0ZSwgSEFMX0FEQ19TVEFURV9USU1FT1VUKTsKIAotICAgICAgICAvKiBQcm9jZXNzIHVubG9ja2VkICovCi0gICAgICAgIF9fSEFMX1VOTE9DSyhoYWRjKTsKKyAgICAgICAgICAvKiBQcm9jZXNzIHVubG9ja2VkICovCisgICAgICAgICAgX19IQUxfVU5MT0NLKGhhZGMpOwogCi0gICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTI0MDAsNDQgKzI0MDUsNDYgQEAKICAgICAvKiBncm91cCBoYXZpbmcgbm8gZnVydGhlciBjb252ZXJzaW9uIHVwY29taW5nIChzYW1lIGNvbmRpdGlvbnMgYXMgICAgICAgICovCiAgICAgLyogcmVndWxhciBncm91cCBpbnRlcnJ1cHRpb24gZGlzYWJsaW5nIGFib3ZlKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIC8qIGFuZCBpZiBpbmplY3RlZCBzY2FuIHNlcXVlbmNlIGlzIGNvbXBsZXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBpZiAoKHRtcF9hZGNfaW5qX2lzX3RyaWdnZXJfc291cmNlX3N3X3N0YXJ0ICE9IDBVTCkgICAgICAgICAgICB8fAotICAgICAgICAoKFJFQURfQklUKHRtcF9jZmdyLCBBRENfQ0ZHUl9KQVVUTykgPT0gMFVMKSAgICAgICYmCi0gICAgICAgICAoKHRtcF9hZGNfcmVnX2lzX3RyaWdnZXJfc291cmNlX3N3X3N0YXJ0ICE9IDBVTCkgICYmCi0gICAgICAgICAgKFJFQURfQklUKHRtcF9jZmdyLCBBRENfQ0ZHUl9DT05UKSA9PSAwVUwpKSkpCisgICAgaWYgKHRtcF9hZGNfaW5qX2lzX3RyaWdnZXJfc291cmNlX3N3X3N0YXJ0ICE9IDBVTCkKICAgICB7Ci0gICAgICAvKiBJZiBFbmQgb2YgU2VxdWVuY2UgaXMgcmVhY2hlZCwgZGlzYWJsZSBpbnRlcnJ1cHRzICovCi0gICAgICBpZiAoX19IQUxfQURDX0dFVF9GTEFHKGhhZGMsIEFEQ19GTEFHX0pFT1MpKQorICAgICAgaWYgKChSRUFEX0JJVCh0bXBfY2ZnciwgQURDX0NGR1JfSkFVVE8pID09IDBVTCkgfHwKKyAgICAgICAgICAoKHRtcF9hZGNfcmVnX2lzX3RyaWdnZXJfc291cmNlX3N3X3N0YXJ0ICE9IDBVTCkgJiYKKyAgICAgICAgICAgKFJFQURfQklUKHRtcF9jZmdyLCBBRENfQ0ZHUl9DT05UKSA9PSAwVUwpKSkKICAgICAgIHsKLSAgICAgICAgLyogUGFydGljdWxhciBjYXNlIGlmIGluamVjdGVkIGNvbnRleHRzIHF1ZXVlIGlzIGVuYWJsZWQ6ICAgICAgICAgICAgICovCi0gICAgICAgIC8qIHdoZW4gdGhlIGxhc3QgY29udGV4dCBoYXMgYmVlbiBmdWxseSBwcm9jZXNzZWQsIEpTUVIgaXMgcmVzZXQgICAgICAqLwotICAgICAgICAvKiBieSB0aGUgaGFyZHdhcmUuIEV2ZW4gaWYgbm8gaW5qZWN0ZWQgY29udmVyc2lvbiBpcyBwbGFubmVkIHRvIGNvbWUgKi8KLSAgICAgICAgLyogKHF1ZXVlIGVtcHR5LCB0cmlnZ2VycyBhcmUgaWdub3JlZCksIGl0IGNhbiBzdGFydCBhZ2FpbiAgICAgICAgICAgICovCi0gICAgICAgIC8qIGltbWVkaWF0ZWx5IGFmdGVyIHNldHRpbmcgYSBuZXcgY29udGV4dCAoSkFEU1RBUlQgaXMgc3RpbGwgc2V0KS4gICAqLwotICAgICAgICAvKiBUaGVyZWZvcmUsIHN0YXRlIG9mIEhBTCBBREMgaW5qZWN0ZWQgZ3JvdXAgaXMga2VwdCB0byBidXN5LiAgICAgICAgKi8KLSAgICAgICAgaWYgKFJFQURfQklUKHRtcF9jZmdyLCBBRENfQ0ZHUl9KUU0pID09IDBVTCkKKyAgICAgICAgLyogSWYgRW5kIG9mIFNlcXVlbmNlIGlzIHJlYWNoZWQsIGRpc2FibGUgaW50ZXJydXB0cyAqLworICAgICAgICBpZiAoX19IQUxfQURDX0dFVF9GTEFHKGhhZGMsIEFEQ19GTEFHX0pFT1MpKQogICAgICAgICB7Ci0gICAgICAgICAgLyogQWxsb3dlZCB0byBtb2RpZnkgYml0cyBBRENfSVRfSkVPQy9BRENfSVRfSkVPUyBvbmx5IGlmIGJpdCAgICAgICAqLwotICAgICAgICAgIC8qIEpBRFNUQVJUPT0wIChubyBjb252ZXJzaW9uIG9uIGdvaW5nKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICBpZiAoTExfQURDX0lOSl9Jc0NvbnZlcnNpb25PbmdvaW5nKGhhZGMtPkluc3RhbmNlKSA9PSAwVUwpCisgICAgICAgICAgLyogUGFydGljdWxhciBjYXNlIGlmIGluamVjdGVkIGNvbnRleHRzIHF1ZXVlIGlzIGVuYWJsZWQ6ICAgICAgICAgICAgICovCisgICAgICAgICAgLyogd2hlbiB0aGUgbGFzdCBjb250ZXh0IGhhcyBiZWVuIGZ1bGx5IHByb2Nlc3NlZCwgSlNRUiBpcyByZXNldCAgICAgICovCisgICAgICAgICAgLyogYnkgdGhlIGhhcmR3YXJlLiBFdmVuIGlmIG5vIGluamVjdGVkIGNvbnZlcnNpb24gaXMgcGxhbm5lZCB0byBjb21lICovCisgICAgICAgICAgLyogKHF1ZXVlIGVtcHR5LCB0cmlnZ2VycyBhcmUgaWdub3JlZCksIGl0IGNhbiBzdGFydCBhZ2FpbiAgICAgICAgICAgICovCisgICAgICAgICAgLyogaW1tZWRpYXRlbHkgYWZ0ZXIgc2V0dGluZyBhIG5ldyBjb250ZXh0IChKQURTVEFSVCBpcyBzdGlsbCBzZXQpLiAgICovCisgICAgICAgICAgLyogVGhlcmVmb3JlLCBzdGF0ZSBvZiBIQUwgQURDIGluamVjdGVkIGdyb3VwIGlzIGtlcHQgdG8gYnVzeS4gICAgICAgICovCisgICAgICAgICAgaWYgKFJFQURfQklUKHRtcF9jZmdyLCBBRENfQ0ZHUl9KUU0pID09IDBVTCkKICAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBEaXNhYmxlIEFEQyBlbmQgb2Ygc2VxdWVuY2UgY29udmVyc2lvbiBpbnRlcnJ1cHQgICovCi0gICAgICAgICAgICBfX0hBTF9BRENfRElTQUJMRV9JVChoYWRjLCBBRENfSVRfSkVPQyB8IEFEQ19JVF9KRU9TKTsKLQotICAgICAgICAgICAgLyogU2V0IEFEQyBzdGF0ZSAqLwotICAgICAgICAgICAgQ0xFQVJfQklUKGhhZGMtPlN0YXRlLCBIQUxfQURDX1NUQVRFX0lOSl9CVVNZKTsKLQotICAgICAgICAgICAgaWYgKChoYWRjLT5TdGF0ZSAmIEhBTF9BRENfU1RBVEVfUkVHX0JVU1kpID09IDBVTCkKKyAgICAgICAgICAgIC8qIEFsbG93ZWQgdG8gbW9kaWZ5IGJpdHMgQURDX0lUX0pFT0MvQURDX0lUX0pFT1Mgb25seSBpZiBiaXQgICAgICAgKi8KKyAgICAgICAgICAgIC8qIEpBRFNUQVJUPT0wIChubyBjb252ZXJzaW9uIG9uIGdvaW5nKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChMTF9BRENfSU5KX0lzQ29udmVyc2lvbk9uZ29pbmcoaGFkYy0+SW5zdGFuY2UpID09IDBVTCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU0VUX0JJVChoYWRjLT5TdGF0ZSwgSEFMX0FEQ19TVEFURV9SRUFEWSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBVcGRhdGUgQURDIHN0YXRlIG1hY2hpbmUgdG8gZXJyb3IgKi8KLSAgICAgICAgICAgIFNFVF9CSVQoaGFkYy0+U3RhdGUsIEhBTF9BRENfU1RBVEVfRVJST1JfSU5URVJOQUwpOworICAgICAgICAgICAgICAvKiBEaXNhYmxlIEFEQyBlbmQgb2Ygc2VxdWVuY2UgY29udmVyc2lvbiBpbnRlcnJ1cHQgICovCisgICAgICAgICAgICAgIF9fSEFMX0FEQ19ESVNBQkxFX0lUKGhhZGMsIEFEQ19JVF9KRU9DIHwgQURDX0lUX0pFT1MpOwogCi0gICAgICAgICAgICAvKiBTZXQgQURDIGVycm9yIGNvZGUgdG8gQURDIHBlcmlwaGVyYWwgaW50ZXJuYWwgZXJyb3IgKi8KLSAgICAgICAgICAgIFNFVF9CSVQoaGFkYy0+RXJyb3JDb2RlLCBIQUxfQURDX0VSUk9SX0lOVEVSTkFMKTsKKyAgICAgICAgICAgICAgLyogU2V0IEFEQyBzdGF0ZSAqLworICAgICAgICAgICAgICBDTEVBUl9CSVQoaGFkYy0+U3RhdGUsIEhBTF9BRENfU1RBVEVfSU5KX0JVU1kpOworCisgICAgICAgICAgICAgIGlmICgoaGFkYy0+U3RhdGUgJiBIQUxfQURDX1NUQVRFX1JFR19CVVNZKSA9PSAwVUwpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTRVRfQklUKGhhZGMtPlN0YXRlLCBIQUxfQURDX1NUQVRFX1JFQURZKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBVcGRhdGUgQURDIHN0YXRlIG1hY2hpbmUgdG8gZXJyb3IgKi8KKyAgICAgICAgICAgICAgU0VUX0JJVChoYWRjLT5TdGF0ZSwgSEFMX0FEQ19TVEFURV9FUlJPUl9JTlRFUk5BTCk7CisKKyAgICAgICAgICAgICAgLyogU2V0IEFEQyBlcnJvciBjb2RlIHRvIEFEQyBwZXJpcGhlcmFsIGludGVybmFsIGVycm9yICovCisgICAgICAgICAgICAgIFNFVF9CSVQoaGFkYy0+RXJyb3JDb2RlLCBIQUxfQURDX0VSUk9SX0lOVEVSTkFMKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTI4NTcsNyArMjg2NCw3IEBACiAgICAgICAgICAgICAgIC8qIE5vdGU6IFZhcmlhYmxlIGRpdmlkZWQgYnkgMiB0byBjb21wZW5zYXRlIHBhcnRpYWxseSAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgLyogICAgICAgQ1BVIHByb2Nlc3NpbmcgY3ljbGVzLCBzY2FsaW5nIGluIHVzIHNwbGl0IHRvIG5vdCAgICAgICAgICAqLwogICAgICAgICAgICAgICAvKiAgICAgICBleGNlZWQgMzIgYml0cyByZWdpc3RlciBjYXBhY2l0eSBhbmQgaGFuZGxlIGxvdyBmcmVxdWVuY3kuICovCi0gICAgICAgICAgICAgIHdhaXRfbG9vcF9pbmRleCA9ICgoTExfQURDX0RFTEFZX1RFTVBTRU5TT1JfU1RBQl9VUyAvIDEwVUwpICogKFN5c3RlbUNvcmVDbG9jayAvICgxMDAwMDBVTCAqIDJVTCkpKTsKKyAgICAgICAgICAgICAgd2FpdF9sb29wX2luZGV4ID0gKChMTF9BRENfREVMQVlfVEVNUFNFTlNPUl9TVEFCX1VTIC8gMTBVTCkgKiAoKFN5c3RlbUNvcmVDbG9jayAvICgxMDAwMDBVTCAqIDJVTCkpICsgMVVMKSk7CiAgICAgICAgICAgICAgIHdoaWxlKHdhaXRfbG9vcF9pbmRleCAhPSAwVUwpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB3YWl0X2xvb3BfaW5kZXgtLTsKQEAgLTMzMzQsMTMgKzMzNDEsMTcgQEAKICAgICB7CiAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gQURDX1NUT1BfQ09OVkVSU0lPTl9USU1FT1VUKQogICAgICAgewotICAgICAgICAvKiBVcGRhdGUgQURDIHN0YXRlIG1hY2hpbmUgdG8gZXJyb3IgKi8KLSAgICAgICAgU0VUX0JJVChoYWRjLT5TdGF0ZSwgSEFMX0FEQ19TVEFURV9FUlJPUl9JTlRFUk5BTCk7CisgICAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgICAgaWYgKChoYWRjLT5JbnN0YW5jZS0+Q1IgJiB0bXBfQURDX0NSX0FEU1RBUlRfSkFEU1RBUlQpICE9IDBVTCkKKyAgICAgICAgeworICAgICAgICAgIC8qIFVwZGF0ZSBBREMgc3RhdGUgbWFjaGluZSB0byBlcnJvciAqLworICAgICAgICAgIFNFVF9CSVQoaGFkYy0+U3RhdGUsIEhBTF9BRENfU1RBVEVfRVJST1JfSU5URVJOQUwpOwogCi0gICAgICAgIC8qIFNldCBBREMgZXJyb3IgY29kZSB0byBBREMgcGVyaXBoZXJhbCBpbnRlcm5hbCBlcnJvciAqLwotICAgICAgICBTRVRfQklUKGhhZGMtPkVycm9yQ29kZSwgSEFMX0FEQ19FUlJPUl9JTlRFUk5BTCk7CisgICAgICAgICAgLyogU2V0IEFEQyBlcnJvciBjb2RlIHRvIEFEQyBwZXJpcGhlcmFsIGludGVybmFsIGVycm9yICovCisgICAgICAgICAgU0VUX0JJVChoYWRjLT5FcnJvckNvZGUsIEhBTF9BRENfRVJST1JfSU5URVJOQUwpOwogCi0gICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgICAgfQogICAgICAgfQogICAgIH0KIApAQCAtMzQwMywxMyArMzQxNCwxNyBAQAogCiAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gQURDX0VOQUJMRV9USU1FT1VUKQogICAgICAgewotICAgICAgICAvKiBVcGRhdGUgQURDIHN0YXRlIG1hY2hpbmUgdG8gZXJyb3IgKi8KLSAgICAgICAgU0VUX0JJVChoYWRjLT5TdGF0ZSwgSEFMX0FEQ19TVEFURV9FUlJPUl9JTlRFUk5BTCk7CisgICAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgICAgaWYgKF9fSEFMX0FEQ19HRVRfRkxBRyhoYWRjLCBBRENfRkxBR19SRFkpID09IDBVTCkKKyAgICAgICAgeworICAgICAgICAgIC8qIFVwZGF0ZSBBREMgc3RhdGUgbWFjaGluZSB0byBlcnJvciAqLworICAgICAgICAgIFNFVF9CSVQoaGFkYy0+U3RhdGUsIEhBTF9BRENfU1RBVEVfRVJST1JfSU5URVJOQUwpOwogCi0gICAgICAgIC8qIFNldCBBREMgZXJyb3IgY29kZSB0byBBREMgcGVyaXBoZXJhbCBpbnRlcm5hbCBlcnJvciAqLwotICAgICAgICBTRVRfQklUKGhhZGMtPkVycm9yQ29kZSwgSEFMX0FEQ19FUlJPUl9JTlRFUk5BTCk7CisgICAgICAgICAgLyogU2V0IEFEQyBlcnJvciBjb2RlIHRvIEFEQyBwZXJpcGhlcmFsIGludGVybmFsIGVycm9yICovCisgICAgICAgICAgU0VUX0JJVChoYWRjLT5FcnJvckNvZGUsIEhBTF9BRENfRVJST1JfSU5URVJOQUwpOwogCi0gICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgICAgfQogICAgICAgfQogICAgIH0KICAgfQpAQCAtMzQ2MywxMyArMzQ3OCwxNyBAQAogICAgIHsKICAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBBRENfRElTQUJMRV9USU1FT1VUKQogICAgICAgewotICAgICAgICAvKiBVcGRhdGUgQURDIHN0YXRlIG1hY2hpbmUgdG8gZXJyb3IgKi8KLSAgICAgICAgU0VUX0JJVChoYWRjLT5TdGF0ZSwgSEFMX0FEQ19TVEFURV9FUlJPUl9JTlRFUk5BTCk7CisgICAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgICAgaWYgKChoYWRjLT5JbnN0YW5jZS0+Q1IgJiBBRENfQ1JfQURFTikgIT0gMFVMKQorICAgICAgICB7CisgICAgICAgICAgLyogVXBkYXRlIEFEQyBzdGF0ZSBtYWNoaW5lIHRvIGVycm9yICovCisgICAgICAgICAgU0VUX0JJVChoYWRjLT5TdGF0ZSwgSEFMX0FEQ19TVEFURV9FUlJPUl9JTlRFUk5BTCk7CiAKLSAgICAgICAgLyogU2V0IEFEQyBlcnJvciBjb2RlIHRvIEFEQyBwZXJpcGhlcmFsIGludGVybmFsIGVycm9yICovCi0gICAgICAgIFNFVF9CSVQoaGFkYy0+RXJyb3JDb2RlLCBIQUxfQURDX0VSUk9SX0lOVEVSTkFMKTsKKyAgICAgICAgICAvKiBTZXQgQURDIGVycm9yIGNvZGUgdG8gQURDIHBlcmlwaGVyYWwgaW50ZXJuYWwgZXJyb3IgKi8KKyAgICAgICAgICBTRVRfQklUKGhhZGMtPkVycm9yQ29kZSwgSEFMX0FEQ19FUlJPUl9JTlRFUk5BTCk7CiAKLSAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgICB9CiAgICAgICB9CiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNXh4X2hhbF9hZGNfZXguYyBiL1NyYy9zdG0zMmw1eHhfaGFsX2FkY19leC5jCmluZGV4IGYwYWVmYzEuLjI3OTYzOGMgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw1eHhfaGFsX2FkY19leC5jCisrKyBiL1NyYy9zdG0zMmw1eHhfaGFsX2FkY19leC5jCkBAIC01MTYsMTMgKzUxNiwxNyBAQAogICAgIHsKICAgICAgIGlmICgoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gVGltZW91dCkgfHwgKFRpbWVvdXQgPT0gMFVMKSkKICAgICAgIHsKLSAgICAgICAgLyogVXBkYXRlIEFEQyBzdGF0ZSBtYWNoaW5lIHRvIHRpbWVvdXQgKi8KLSAgICAgICAgU0VUX0JJVChoYWRjLT5TdGF0ZSwgSEFMX0FEQ19TVEFURV9USU1FT1VUKTsKKyAgICAgICAgLyogTmV3IGNoZWNrIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbiAqLworICAgICAgICBpZiAoKGhhZGMtPkluc3RhbmNlLT5JU1IgJiB0bXBfRmxhZ19FbmQpID09IDBVTCkKKyAgICAgICAgeworICAgICAgICAgIC8qIFVwZGF0ZSBBREMgc3RhdGUgbWFjaGluZSB0byB0aW1lb3V0ICovCisgICAgICAgICAgU0VUX0JJVChoYWRjLT5TdGF0ZSwgSEFMX0FEQ19TVEFURV9USU1FT1VUKTsKIAotICAgICAgICAvKiBQcm9jZXNzIHVubG9ja2VkICovCi0gICAgICAgIF9fSEFMX1VOTE9DSyhoYWRjKTsKKyAgICAgICAgICAvKiBQcm9jZXNzIHVubG9ja2VkICovCisgICAgICAgICAgX19IQUxfVU5MT0NLKGhhZGMpOwogCi0gICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTg3OCw2ICs4ODIsMTAgQEAKICAgICAvKiBQcm9jZXNzIGxvY2tlZCAqLwogICAgIF9fSEFMX0xPQ0soaGFkYyk7CiAKKyAgICAvKiBUZW1wb3JhcnkgaGFuZGxlIG1pbmltdW0gaW5pdGlhbGl6YXRpb24gKi8KKyAgICBfX0hBTF9BRENfUkVTRVRfSEFORExFX1NUQVRFKCZ0bXBoYWRjU2xhdmUpOworICAgIEFEQ19DTEVBUl9FUlJPUkNPREUoJnRtcGhhZGNTbGF2ZSk7CisKICAgICAvKiBTZXQgYSB0ZW1wb3JhcnkgaGFuZGxlIG9mIHRoZSBBREMgc2xhdmUgYXNzb2NpYXRlZCB0byB0aGUgQURDIG1hc3RlciAgICovCiAgICAgQURDX01VTFRJX1NMQVZFKGhhZGMsICZ0bXBoYWRjU2xhdmUpOwogCkBAIC05OTMsNiArMTAwMSwxMCBAQAogICAvKiBEaXNhYmxlIEFEQyBwZXJpcGhlcmFsIGlmIGNvbnZlcnNpb25zIGFyZSBlZmZlY3RpdmVseSBzdG9wcGVkICovCiAgIGlmICh0bXBfaGFsX3N0YXR1cyA9PSBIQUxfT0spCiAgIHsKKyAgICAvKiBUZW1wb3JhcnkgaGFuZGxlIG1pbmltdW0gaW5pdGlhbGl6YXRpb24gKi8KKyAgICBfX0hBTF9BRENfUkVTRVRfSEFORExFX1NUQVRFKCZ0bXBoYWRjU2xhdmUpOworICAgIEFEQ19DTEVBUl9FUlJPUkNPREUoJnRtcGhhZGNTbGF2ZSk7CisKICAgICAvKiBTZXQgYSB0ZW1wb3JhcnkgaGFuZGxlIG9mIHRoZSBBREMgc2xhdmUgYXNzb2NpYXRlZCB0byB0aGUgQURDIG1hc3RlciAgICovCiAgICAgQURDX01VTFRJX1NMQVZFKGhhZGMsICZ0bXBoYWRjU2xhdmUpOwogCkBAIC0xMDIwLDEzICsxMDMyLDIwIEBACiAgICAgewogICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IEFEQ19TVE9QX0NPTlZFUlNJT05fVElNRU9VVCkKICAgICAgIHsKLSAgICAgICAgLyogVXBkYXRlIEFEQyBzdGF0ZSBtYWNoaW5lIHRvIGVycm9yICovCi0gICAgICAgIFNFVF9CSVQoaGFkYy0+U3RhdGUsIEhBTF9BRENfU1RBVEVfRVJST1JfSU5URVJOQUwpOworICAgICAgICAvKiBOZXcgY2hlY2sgdG8gYXZvaWQgZmFsc2UgdGltZW91dCBkZXRlY3Rpb24gaW4gY2FzZSBvZiBwcmVlbXB0aW9uICovCisgICAgICAgIHRtcGhhZGNTbGF2ZV9jb252ZXJzaW9uX29uX2dvaW5nID0gTExfQURDX1JFR19Jc0NvbnZlcnNpb25PbmdvaW5nKCgmdG1waGFkY1NsYXZlKS0+SW5zdGFuY2UpOworICAgICAgICBpZiAoKExMX0FEQ19SRUdfSXNDb252ZXJzaW9uT25nb2luZyhoYWRjLT5JbnN0YW5jZSkgPT0gMVVMKQorICAgICAgICAgICAgfHwgKHRtcGhhZGNTbGF2ZV9jb252ZXJzaW9uX29uX2dvaW5nID09IDFVTCkKKyAgICAgICAgICAgKQorICAgICAgICB7CisgICAgICAgICAgLyogVXBkYXRlIEFEQyBzdGF0ZSBtYWNoaW5lIHRvIGVycm9yICovCisgICAgICAgICAgU0VUX0JJVChoYWRjLT5TdGF0ZSwgSEFMX0FEQ19TVEFURV9FUlJPUl9JTlRFUk5BTCk7CiAKLSAgICAgICAgLyogUHJvY2VzcyB1bmxvY2tlZCAqLwotICAgICAgICBfX0hBTF9VTkxPQ0soaGFkYyk7CisgICAgICAgICAgLyogUHJvY2VzcyB1bmxvY2tlZCAqLworICAgICAgICAgIF9fSEFMX1VOTE9DSyhoYWRjKTsKIAotICAgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICAgIH0KICAgICAgIH0KIAogICAgICAgdG1waGFkY1NsYXZlX2NvbnZlcnNpb25fb25fZ29pbmcgPSBMTF9BRENfUkVHX0lzQ29udmVyc2lvbk9uZ29pbmcoKCZ0bXBoYWRjU2xhdmUpLT5JbnN0YW5jZSk7CkBAIC0xNDc3LDYgKzE0OTYsMTAgQEAKICAgICAvKiBDbGVhciBIQUxfQURDX1NUQVRFX1JFR19CVVNZIGJpdCAqLwogICAgIENMRUFSX0JJVChoYWRjLT5TdGF0ZSwgSEFMX0FEQ19TVEFURV9SRUdfQlVTWSk7CiAKKyAgICAvKiBUZW1wb3JhcnkgaGFuZGxlIG1pbmltdW0gaW5pdGlhbGl6YXRpb24gKi8KKyAgICBfX0hBTF9BRENfUkVTRVRfSEFORExFX1NUQVRFKCZ0bXBoYWRjU2xhdmUpOworICAgIEFEQ19DTEVBUl9FUlJPUkNPREUoJnRtcGhhZGNTbGF2ZSk7CisKICAgICAvKiBTZXQgYSB0ZW1wb3JhcnkgaGFuZGxlIG9mIHRoZSBBREMgc2xhdmUgYXNzb2NpYXRlZCB0byB0aGUgQURDIG1hc3RlciAgICovCiAgICAgQURDX01VTFRJX1NMQVZFKGhhZGMsICZ0bXBoYWRjU2xhdmUpOwogCkBAIC0xNTA0LDEzICsxNTI3LDIwIEBACiAgICAgewogICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IEFEQ19TVE9QX0NPTlZFUlNJT05fVElNRU9VVCkKICAgICAgIHsKLSAgICAgICAgLyogVXBkYXRlIEFEQyBzdGF0ZSBtYWNoaW5lIHRvIGVycm9yICovCi0gICAgICAgIFNFVF9CSVQoaGFkYy0+U3RhdGUsIEhBTF9BRENfU1RBVEVfRVJST1JfSU5URVJOQUwpOworICAgICAgICAvKiBOZXcgY2hlY2sgdG8gYXZvaWQgZmFsc2UgdGltZW91dCBkZXRlY3Rpb24gaW4gY2FzZSBvZiBwcmVlbXB0aW9uICovCisgICAgICAgIHRtcGhhZGNTbGF2ZV9jb252ZXJzaW9uX29uX2dvaW5nID0gTExfQURDX1JFR19Jc0NvbnZlcnNpb25PbmdvaW5nKCgmdG1waGFkY1NsYXZlKS0+SW5zdGFuY2UpOworICAgICAgICBpZiAoKExMX0FEQ19SRUdfSXNDb252ZXJzaW9uT25nb2luZyhoYWRjLT5JbnN0YW5jZSkgPT0gMVVMKQorICAgICAgICAgICAgfHwgKHRtcGhhZGNTbGF2ZV9jb252ZXJzaW9uX29uX2dvaW5nID09IDFVTCkKKyAgICAgICAgICAgKQorICAgICAgICB7CisgICAgICAgICAgLyogVXBkYXRlIEFEQyBzdGF0ZSBtYWNoaW5lIHRvIGVycm9yICovCisgICAgICAgICAgU0VUX0JJVChoYWRjLT5TdGF0ZSwgSEFMX0FEQ19TVEFURV9FUlJPUl9JTlRFUk5BTCk7CiAKLSAgICAgICAgLyogUHJvY2VzcyB1bmxvY2tlZCAqLwotICAgICAgICBfX0hBTF9VTkxPQ0soaGFkYyk7CisgICAgICAgICAgLyogUHJvY2VzcyB1bmxvY2tlZCAqLworICAgICAgICAgIF9fSEFMX1VOTE9DSyhoYWRjKTsKIAotICAgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICAgIH0KICAgICAgIH0KIAogICAgICAgdG1waGFkY1NsYXZlX2NvbnZlcnNpb25fb25fZ29pbmcgPSBMTF9BRENfUkVHX0lzQ29udmVyc2lvbk9uZ29pbmcoKCZ0bXBoYWRjU2xhdmUpLT5JbnN0YW5jZSk7CkBAIC0yMDE1LDcgKzIwNDUsNyBAQAogICAgICAgICAgICAgLyogTm90ZTogVmFyaWFibGUgZGl2aWRlZCBieSAyIHRvIGNvbXBlbnNhdGUgcGFydGlhbGx5ICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgLyogICAgICAgQ1BVIHByb2Nlc3NpbmcgY3ljbGVzLCBzY2FsaW5nIGluIHVzIHNwbGl0IHRvIG5vdCAgICAgICAgICAqLwogICAgICAgICAgICAgLyogICAgICAgZXhjZWVkIDMyIGJpdHMgcmVnaXN0ZXIgY2FwYWNpdHkgYW5kIGhhbmRsZSBsb3cgZnJlcXVlbmN5LiAqLwotICAgICAgICAgICAgd2FpdF9sb29wX2luZGV4ID0gKChMTF9BRENfREVMQVlfVEVNUFNFTlNPUl9TVEFCX1VTIC8gMTBVTCkgKiAoU3lzdGVtQ29yZUNsb2NrIC8gKDEwMDAwMFVMICogMlVMKSkpOworICAgICAgICAgICAgd2FpdF9sb29wX2luZGV4ID0gKChMTF9BRENfREVMQVlfVEVNUFNFTlNPUl9TVEFCX1VTIC8gMTBVTCkgKiAoKFN5c3RlbUNvcmVDbG9jayAvICgxMDAwMDBVTCAqIDJVTCkpICsgMVVMKSk7CiAgICAgICAgICAgICB3aGlsZSh3YWl0X2xvb3BfaW5kZXggIT0gMFVMKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICB3YWl0X2xvb3BfaW5kZXgtLTsKQEAgLTIwODMsNyArMjExMyw3IEBACiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHRtcF9oYWxfc3RhdHVzID0gSEFMX09LOwogICBBRENfQ29tbW9uX1R5cGVEZWYgKnRtcEFEQ19Db21tb247Ci0gIEFEQ19IYW5kbGVUeXBlRGVmICB0bXBoYWRjU2xhdmU7CisgIEFEQ19IYW5kbGVUeXBlRGVmIHRtcGhhZGNTbGF2ZTsKICAgdWludDMyX3QgdG1waGFkY1NsYXZlX2NvbnZlcnNpb25fb25fZ29pbmc7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KQEAgLTIwOTgsNiArMjEyOCwxMCBAQAogICAvKiBQcm9jZXNzIGxvY2tlZCAqLwogICBfX0hBTF9MT0NLKGhhZGMpOwogCisgIC8qIFRlbXBvcmFyeSBoYW5kbGUgbWluaW11bSBpbml0aWFsaXphdGlvbiAqLworICBfX0hBTF9BRENfUkVTRVRfSEFORExFX1NUQVRFKCZ0bXBoYWRjU2xhdmUpOworICBBRENfQ0xFQVJfRVJST1JDT0RFKCZ0bXBoYWRjU2xhdmUpOworCiAgIEFEQ19NVUxUSV9TTEFWRShoYWRjLCAmdG1waGFkY1NsYXZlKTsKIAogICBpZiAodG1waGFkY1NsYXZlLkluc3RhbmNlID09IE5VTEwpCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNXh4X2hhbF9jb3J0ZXguYyBiL1NyYy9zdG0zMmw1eHhfaGFsX2NvcnRleC5jCmluZGV4IDlmYzUzZWIuLmE4MjYwY2QgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw1eHhfaGFsX2NvcnRleC5jCisrKyBiL1NyYy9zdG0zMmw1eHhfaGFsX2NvcnRleC5jCkBAIC0xMTUsNyArMTE1LDE4IEBACiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBQcml2YXRlIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAZGVmZ3JvdXAgQ09SVEVYX1ByaXZhdGVfRnVuY3Rpb25zIENPUlRFWCBQcml2YXRlIEZ1bmN0aW9ucworICAqIEB7CisgICovCisjaWYgKF9fTVBVX1BSRVNFTlQgPT0gMSkKK3N0YXRpYyB2b2lkIE1QVV9Db25maWdSZWdpb24oTVBVX1R5cGUqIE1QVXgsIE1QVV9SZWdpb25fSW5pdFR5cGVEZWYgKk1QVV9SZWdpb25Jbml0KTsKK3N0YXRpYyB2b2lkIE1QVV9Db25maWdNZW1vcnlBdHRyaWJ1dGVzKE1QVV9UeXBlKiBNUFV4LCBNUFVfQXR0cmlidXRlc19Jbml0VHlwZURlZiAqTVBVX0F0dHJpYnV0ZXNJbml0KTsKKyNlbmRpZiAvKiBfX01QVV9QUkVTRU5UICovCisvKioKKyAgKiBAfQorICAqLworCiAvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiogQGFkZHRvZ3JvdXAgQ09SVEVYX0V4cG9ydGVkX0Z1bmN0aW9ucwpAQCAtMTQyLDE1ICsxNTMsMTUgQEAKIC8qKgogICAqIEBicmllZiAgU2V0IHRoZSBwcmlvcml0eSBncm91cGluZyBmaWVsZCAocHJlLWVtcHRpb24gcHJpb3JpdHkgYW5kIHN1YnByaW9yaXR5KQogICAqICAgICAgICAgdXNpbmcgdGhlIHJlcXVpcmVkIHVubG9jayBzZXF1ZW5jZS4KLSAgKiBAcGFyYW0gIFByaW9yaXR5R3JvdXA6IFRoZSBwcmlvcml0eSBncm91cGluZyBiaXRzIGxlbmd0aC4KKyAgKiBAcGFyYW0gIFByaW9yaXR5R3JvdXAgVGhlIHByaW9yaXR5IGdyb3VwaW5nIGJpdHMgbGVuZ3RoLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgIEBhcmcgTlZJQ19QUklPUklUWUdST1VQXzA6IDAgYml0ICBmb3IgcHJlLWVtcHRpb24gcHJpb3JpdHksCisgICogICAgICAgICBAYXJnIE5WSUNfUFJJT1JJVFlHUk9VUF8wICAwIGJpdCAgZm9yIHByZS1lbXB0aW9uIHByaW9yaXR5LAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyBiaXRzIGZvciBzdWJwcmlvcml0eQotICAqICAgICAgICAgQGFyZyBOVklDX1BSSU9SSVRZR1JPVVBfMTogMSBiaXQgIGZvciBwcmUtZW1wdGlvbiBwcmlvcml0eSwKKyAgKiAgICAgICAgIEBhcmcgTlZJQ19QUklPUklUWUdST1VQXzEgIDEgYml0ICBmb3IgcHJlLWVtcHRpb24gcHJpb3JpdHksCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIGJpdHMgZm9yIHN1YnByaW9yaXR5Ci0gICogICAgICAgICBAYXJnIE5WSUNfUFJJT1JJVFlHUk9VUF8yOiAyIGJpdHMgZm9yIHByZS1lbXB0aW9uIHByaW9yaXR5LAorICAqICAgICAgICAgQGFyZyBOVklDX1BSSU9SSVRZR1JPVVBfMiAgMiBiaXRzIGZvciBwcmUtZW1wdGlvbiBwcmlvcml0eSwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgYml0cyBmb3Igc3VicHJpb3JpdHkKLSAgKiAgICAgICAgIEBhcmcgTlZJQ19QUklPUklUWUdST1VQXzM6IDMgYml0cyBmb3IgcHJlLWVtcHRpb24gcHJpb3JpdHksCisgICogICAgICAgICBAYXJnIE5WSUNfUFJJT1JJVFlHUk9VUF8zICAzIGJpdHMgZm9yIHByZS1lbXB0aW9uIHByaW9yaXR5LAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCBiaXQgIGZvciBzdWJwcmlvcml0eQogICAqIEBub3RlICAgV2hlbiB0aGUgTlZJQ19Qcmlvcml0eUdyb3VwXzAgaXMgc2VsZWN0ZWQsIElSUSBwcmUtZW1wdGlvbiBpcyBubyBtb3JlIHBvc3NpYmxlLgogICAqICAgICAgICAgVGhlIHBlbmRpbmcgSVJRIHByaW9yaXR5IHdpbGwgYmUgbWFuYWdlZCBvbmx5IGJ5IHRoZSBzdWJwcmlvcml0eS4KQEAgLTE2NywxMyArMTc4LDEzIEBACiAKIC8qKgogICAqIEBicmllZiAgU2V0IHRoZSBwcmlvcml0eSBvZiBhbiBpbnRlcnJ1cHQuCi0gICogQHBhcmFtICBJUlFuOiBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLgorICAqIEBwYXJhbSAgSVJRbiBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFuIGVudW1lcmF0b3Igb2YgSVJRbl9UeXBlIGVudW1lcmF0aW9uCiAgICogICAgICAgICAoRm9yIHRoZSBjb21wbGV0ZSBTVE0zMiBEZXZpY2VzIElSUSBDaGFubmVscyBsaXN0LCBwbGVhc2UgcmVmZXIgdG8gdGhlIGFwcHJvcHJpYXRlIENNU0lTIGRldmljZSBmaWxlIChzdG0zMmw1eHh4eC5oKSkKLSAgKiBAcGFyYW0gIFByZWVtcHRQcmlvcml0eTogVGhlIHByZS1lbXB0aW9uIHByaW9yaXR5IGZvciB0aGUgSVJRbiBjaGFubmVsLgorICAqIEBwYXJhbSAgUHJlZW1wdFByaW9yaXR5IFRoZSBwcmUtZW1wdGlvbiBwcmlvcml0eSBmb3IgdGhlIElSUW4gY2hhbm5lbC4KICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgNwogICAqICAgICAgICAgQSBsb3dlciBwcmlvcml0eSB2YWx1ZSBpbmRpY2F0ZXMgYSBoaWdoZXIgcHJpb3JpdHkKLSAgKiBAcGFyYW0gIFN1YlByaW9yaXR5OiB0aGUgc3VicHJpb3JpdHkgbGV2ZWwgZm9yIHRoZSBJUlEgY2hhbm5lbC4KKyAgKiBAcGFyYW0gIFN1YlByaW9yaXR5IFRoZSBzdWJwcmlvcml0eSBsZXZlbCBmb3IgdGhlIElSUSBjaGFubmVsLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCA3CiAgICogICAgICAgICBBIGxvd2VyIHByaW9yaXR5IHZhbHVlIGluZGljYXRlcyBhIGhpZ2hlciBwcmlvcml0eS4KICAgKiBAcmV0dmFsIE5vbmUKQEAgLTIzOCw3ICsyNDksNyBAQAogLyoqCiAgICogQGJyaWVmICBJbml0aWFsaXplIHRoZSBTeXN0ZW0gVGltZXIgd2l0aCBpbnRlcnJ1cHQgZW5hYmxlZCBhbmQgc3RhcnQgdGhlIFN5c3RlbSBUaWNrIFRpbWVyIChTeXNUaWNrKToKICAgKiAgICAgICAgIENvdW50ZXIgaXMgaW4gZnJlZSBydW5uaW5nIG1vZGUgdG8gZ2VuZXJhdGUgcGVyaW9kaWMgaW50ZXJydXB0cy4KLSAgKiBAcGFyYW0gIFRpY2tzTnVtYjogU3BlY2lmaWVzIHRoZSB0aWNrcyBOdW1iZXIgb2YgdGlja3MgYmV0d2VlbiB0d28gaW50ZXJydXB0cy4KKyAgKiBAcGFyYW0gIFRpY2tzTnVtYiBTcGVjaWZpZXMgdGhlIHRpY2tzIE51bWJlciBvZiB0aWNrcyBiZXR3ZWVuIHR3byBpbnRlcnJ1cHRzLgogICAqIEByZXR2YWwgc3RhdHVzOiAgLSAwICBGdW5jdGlvbiBzdWNjZWVkZWQuCiAgICogICAgICAgICAgICAgICAgICAtIDEgIEZ1bmN0aW9uIGZhaWxlZC4KICAgKi8KQEAgLTI1OSw3ICsyNzAsNyBAQAogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBbLi5dCiAgICAgICBUaGlzIHN1YnNlY3Rpb24gcHJvdmlkZXMgYSBzZXQgb2YgZnVuY3Rpb25zIGFsbG93aW5nIHRvIGNvbnRyb2wgdGhlIENPUlRFWAotICAgICAgKE5WSUMsIFNZU1RJQ0spIGZ1bmN0aW9uYWxpdGllcy4KKyAgICAgIChOVklDLCBTWVNUSUNLLCBNUFUpIGZ1bmN0aW9uYWxpdGllcy4KIAogCiBAZW5kdmVyYmF0aW0KQEAgLTI3OCwyMSArMjg5LDIxIEBACiAKIC8qKgogICAqIEBicmllZiAgR2V0IHRoZSBwcmlvcml0eSBvZiBhbiBpbnRlcnJ1cHQuCi0gICogQHBhcmFtICBJUlFuOiBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLgorICAqIEBwYXJhbSAgSVJRbiBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFuIGVudW1lcmF0b3Igb2YgSVJRbl9UeXBlIGVudW1lcmF0aW9uCiAgICogICAgICAgICAoRm9yIHRoZSBjb21wbGV0ZSBTVE0zMiBEZXZpY2VzIElSUSBDaGFubmVscyBsaXN0LCBwbGVhc2UgcmVmZXIgdG8gdGhlIGFwcHJvcHJpYXRlIENNU0lTIGRldmljZSBmaWxlIChzdG0zMmw1eHh4eC5oKSkKICAgKiBAcGFyYW0gICBQcmlvcml0eUdyb3VwOiB0aGUgcHJpb3JpdHkgZ3JvdXBpbmcgYml0cyBsZW5ndGguCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgICBAYXJnIE5WSUNfUFJJT1JJVFlHUk9VUF8wOiAwIGJpdCBmb3IgcHJlLWVtcHRpb24gcHJpb3JpdHksCisgICogICAgICAgICAgIEBhcmcgTlZJQ19QUklPUklUWUdST1VQXzAgIDAgYml0IGZvciBwcmUtZW1wdGlvbiBwcmlvcml0eSwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyBiaXRzIGZvciBzdWJwcmlvcml0eQotICAqICAgICAgICAgICBAYXJnIE5WSUNfUFJJT1JJVFlHUk9VUF8xOiAxIGJpdCBmb3IgcHJlLWVtcHRpb24gcHJpb3JpdHksCisgICogICAgICAgICAgIEBhcmcgTlZJQ19QUklPUklUWUdST1VQXzEgIDEgYml0IGZvciBwcmUtZW1wdGlvbiBwcmlvcml0eSwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiBiaXRzIGZvciBzdWJwcmlvcml0eQotICAqICAgICAgICAgICBAYXJnIE5WSUNfUFJJT1JJVFlHUk9VUF8yOiAyIGJpdHMgZm9yIHByZS1lbXB0aW9uIHByaW9yaXR5LAorICAqICAgICAgICAgICBAYXJnIE5WSUNfUFJJT1JJVFlHUk9VUF8yICAyIGJpdHMgZm9yIHByZS1lbXB0aW9uIHByaW9yaXR5LAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIGJpdHMgZm9yIHN1YnByaW9yaXR5Ci0gICogICAgICAgICAgIEBhcmcgTlZJQ19QUklPUklUWUdST1VQXzM6IDMgYml0cyBmb3IgcHJlLWVtcHRpb24gcHJpb3JpdHksCisgICogICAgICAgICAgIEBhcmcgTlZJQ19QUklPUklUWUdST1VQXzMgIDMgYml0cyBmb3IgcHJlLWVtcHRpb24gcHJpb3JpdHksCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgYml0IGZvciBzdWJwcmlvcml0eQotICAqIEBwYXJhbSAgcFByZWVtcHRQcmlvcml0eTogUG9pbnRlciBvbiB0aGUgUHJlZW1wdGl2ZSBwcmlvcml0eSB2YWx1ZSAoc3RhcnRpbmcgZnJvbSAwKS4KLSAgKiBAcGFyYW0gIHBTdWJQcmlvcml0eTogUG9pbnRlciBvbiB0aGUgU3VicHJpb3JpdHkgdmFsdWUgKHN0YXJ0aW5nIGZyb20gMCkuCisgICogQHBhcmFtICBwUHJlZW1wdFByaW9yaXR5IFBvaW50ZXIgb24gdGhlIFByZWVtcHRpdmUgcHJpb3JpdHkgdmFsdWUgKHN0YXJ0aW5nIGZyb20gMCkuCisgICogQHBhcmFtICBwU3ViUHJpb3JpdHkgUG9pbnRlciBvbiB0aGUgU3VicHJpb3JpdHkgdmFsdWUgKHN0YXJ0aW5nIGZyb20gMCkuCiAgICogQHJldHZhbCBOb25lCiAgICovCiB2b2lkIEhBTF9OVklDX0dldFByaW9yaXR5KElSUW5fVHlwZSBJUlFuLCB1aW50MzJfdCBQcmlvcml0eUdyb3VwLCB1aW50MzJfdCAqcFByZWVtcHRQcmlvcml0eSwgdWludDMyX3QgKnBTdWJQcmlvcml0eSkKQEAgLTM0NSw4ICszNTYsOCBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgR2V0IGFjdGl2ZSBpbnRlcnJ1cHQgKHJlYWQgdGhlIGFjdGl2ZSByZWdpc3RlciBpbiBOVklDIGFuZCByZXR1cm4gdGhlIGFjdGl2ZSBiaXQpLgotICAqIEBwYXJhbSBJUlFuIEV4dGVybmFsIGludGVycnVwdCBudW1iZXIKKyAgKiBAYnJpZWYgIEdldCBhY3RpdmUgaW50ZXJydXB0IChyZWFkIHRoZSBhY3RpdmUgcmVnaXN0ZXIgaW4gTlZJQyBhbmQgcmV0dXJuIHRoZSBhY3RpdmUgYml0KS4KKyAgKiBAcGFyYW0gIElSUW4gRXh0ZXJuYWwgaW50ZXJydXB0IG51bWJlcgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFuIGVudW1lcmF0b3Igb2YgSVJRbl9UeXBlIGVudW1lcmF0aW9uCiAgICogICAgICAgICAoRm9yIHRoZSBjb21wbGV0ZSBTVE0zMiBEZXZpY2VzIElSUSBDaGFubmVscyBsaXN0LCBwbGVhc2UgcmVmZXIgdG8gdGhlIGFwcHJvcHJpYXRlIENNU0lTIGRldmljZSBmaWxlIChzdG0zMmw1eHh4eC5oKSkKICAgKiBAcmV0dmFsIHN0YXR1czogLSAwICBJbnRlcnJ1cHQgc3RhdHVzIGlzIG5vdCBwZW5kaW5nLgpAQCAtMzYwLDggKzM3MSw4IEBACiAKIC8qKgogICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSBTeXNUaWNrIGNsb2NrIHNvdXJjZS4KLSAgKiBAcGFyYW0gIENMS1NvdXJjZTogc3BlY2lmaWVzIHRoZSBTeXNUaWNrIGNsb2NrIHNvdXJjZS4KLSAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqIEBwYXJhbSAgQ0xLU291cmNlIHNwZWNpZmllcyB0aGUgU3lzVGljayBjbG9jayBzb3VyY2UuCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgIEBhcmcgU1lTVElDS19DTEtTT1VSQ0VfSENMS19ESVY4OiBBSEIgY2xvY2sgZGl2aWRlZCBieSA4IHNlbGVjdGVkIGFzIFN5c1RpY2sgY2xvY2sgc291cmNlLgogICAqICAgICAgICAgICAgIEBhcmcgU1lTVElDS19DTEtTT1VSQ0VfSENMSzogQUhCIGNsb2NrIHNlbGVjdGVkIGFzIFN5c1RpY2sgY2xvY2sgc291cmNlLgogICAqIEByZXR2YWwgTm9uZQpAQCAtNDAwLDYgKzQxMSwxMzAgQEAKICAgICovCiB9CiAKKyNpZiAoX19NUFVfUFJFU0VOVCA9PSAxKQorCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgTVBVLgorICAqIEBwYXJhbSAgTVBVX0NvbnRyb2wgU3BlY2lmaWVzIHRoZSBjb250cm9sIG1vZGUgb2YgdGhlIE1QVSBkdXJpbmcgaGFyZCBmYXVsdCwKKyAgKiAgICAgICAgIE5NSSwgRkFVTFRNQVNLIGFuZCBwcml2aWxlZ2VkIGFjY2Vzc3RvIHRoZSBkZWZhdWx0IG1lbW9yeQorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgTVBVX0hGTk1JX1BSSVZERUZfTk9ORQorICAqICAgICAgICAgICAgQGFyZyBNUFVfSEFSREZBVUxUX05NSQorICAqICAgICAgICAgICAgQGFyZyBNUFVfUFJJVklMRUdFRF9ERUZBVUxUCisgICogICAgICAgICAgICBAYXJnIE1QVV9IRk5NSV9QUklWREVGCisgICogQHJldHZhbCBOb25lCisgICovCit2b2lkIEhBTF9NUFVfRW5hYmxlKHVpbnQzMl90IE1QVV9Db250cm9sKQoreworICAvKiBFbmFibGUgdGhlIE1QVSAqLworICBNUFUtPkNUUkwgICA9IE1QVV9Db250cm9sIHwgTVBVX0NUUkxfRU5BQkxFX01zazsKKworICAvKiBFbmFibGUgZmF1bHQgZXhjZXB0aW9ucyAqLworICBTQ0ItPlNIQ1NSIHw9IFNDQl9TSENTUl9NRU1GQVVMVEVOQV9Nc2s7CisKKyAgLyogRm9sbG93IEFSTSByZWNvbW1lbmRhdGlvbiB3aXRoICovCisgIC8qIC0gRGF0YSBNZW1vcnkgQmFycmllciBhbmQgSW5zdHJ1Y3Rpb24gU3luY2hyb25pemF0aW9uIHRvIGluc3VyZSBNUFUgdXNhZ2UgKi8KKyAgX19ETUIoKTsgLyogRm9yY2UgbWVtb3J5IHdyaXRlcyBiZWZvcmUgY29udGludWluZyAqLworICBfX0lTQigpOyAvKiBGbHVzaCBhbmQgcmVmaWxsIHBpcGVsaW5lIHdpdGggdXBkYXRlZCBwZXJtaXNzaW9ucyAqLworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgdGhlIE1QVS4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK3ZvaWQgSEFMX01QVV9EaXNhYmxlKHZvaWQpCit7CisgIF9fRE1CKCk7IC8qIEZvcmNlIGFueSBvdXRzdGFuZGluZyB0cmFuc2ZlcnMgdG8gY29tcGxldGUgYmVmb3JlIGRpc2FibGluZyBNUFUgKi8KKworICAvKiBEaXNhYmxlIHRoZSBNUFUgKi8KKyAgTVBVLT5DVFJMICAmPSB+TVBVX0NUUkxfRU5BQkxFX01zazsKK30KKworLyoqCisgICogQGJyaWVmICBJbml0aWFsaXplIGFuZCBjb25maWd1cmUgdGhlIFJlZ2lvbiBhbmQgdGhlIG1lbW9yeSB0byBiZSBwcm90ZWN0ZWQuCisgICogQHBhcmFtICBNUFVfUmVnaW9uSW5pdCBQb2ludGVyIHRvIGEgTVBVX1JlZ2lvbl9Jbml0VHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorICAqIEByZXR2YWwgTm9uZQorICAqLwordm9pZCBIQUxfTVBVX0NvbmZpZ1JlZ2lvbihNUFVfUmVnaW9uX0luaXRUeXBlRGVmICpNUFVfUmVnaW9uSW5pdCkKK3sKKyAgTVBVX0NvbmZpZ1JlZ2lvbihNUFUsIE1QVV9SZWdpb25Jbml0KTsKK30KKworLyoqCisgICogQGJyaWVmICBJbml0aWFsaXplIGFuZCBjb25maWd1cmUgdGhlIG1lbW9yeSBhdHRyaWJ1dGVzLgorICAqIEBwYXJhbSAgTVBVX0F0dHJpYnV0ZXNJbml0IFBvaW50ZXIgdG8gYSBNUFVfQXR0cmlidXRlc19Jbml0VHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK3ZvaWQgSEFMX01QVV9Db25maWdNZW1vcnlBdHRyaWJ1dGVzKE1QVV9BdHRyaWJ1dGVzX0luaXRUeXBlRGVmICpNUFVfQXR0cmlidXRlc0luaXQpCit7CisgIE1QVV9Db25maWdNZW1vcnlBdHRyaWJ1dGVzKE1QVSwgTVBVX0F0dHJpYnV0ZXNJbml0KTsKK30KKworI2lmZGVmIE1QVV9OUworLyoqCisgICogQGJyaWVmICBFbmFibGUgdGhlIG5vbi1zZWN1cmUgTVBVLgorICAqIEBwYXJhbSAgTVBVX0NvbnRyb2wgU3BlY2lmaWVzIHRoZSBjb250cm9sIG1vZGUgb2YgdGhlIE1QVSBkdXJpbmcgaGFyZCBmYXVsdCwKKyAgKiAgICAgICAgIE5NSSwgRkFVTFRNQVNLIGFuZCBwcml2aWxlZ2VkIGFjY2Vzc3RvIHRoZSBkZWZhdWx0IG1lbW9yeQorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgTVBVX0hGTk1JX1BSSVZERUZfTk9ORQorICAqICAgICAgICAgICAgQGFyZyBNUFVfSEFSREZBVUxUX05NSQorICAqICAgICAgICAgICAgQGFyZyBNUFVfUFJJVklMRUdFRF9ERUZBVUxUCisgICogICAgICAgICAgICBAYXJnIE1QVV9IRk5NSV9QUklWREVGCisgICogQHJldHZhbCBOb25lCisgICovCit2b2lkIEhBTF9NUFVfRW5hYmxlX05TKHVpbnQzMl90IE1QVV9Db250cm9sKQoreworICAvKiBFbmFibGUgdGhlIE1QVSAqLworICBNUFVfTlMtPkNUUkwgICA9IE1QVV9Db250cm9sIHwgTVBVX0NUUkxfRU5BQkxFX01zazsKKworICAvKiBFbmFibGUgZmF1bHQgZXhjZXB0aW9ucyAqLworICBTQ0JfTlMtPlNIQ1NSIHw9IFNDQl9TSENTUl9NRU1GQVVMVEVOQV9Nc2s7CisKKyAgLyogRm9sbG93IEFSTSByZWNvbW1lbmRhdGlvbiB3aXRoICovCisgIC8qIC0gRGF0YSBNZW1vcnkgQmFycmllciBhbmQgSW5zdHJ1Y3Rpb24gU3luY2hyb25pemF0aW9uIHRvIGluc3VyZSBNUFUgdXNhZ2UgKi8KKyAgX19ETUIoKTsgLyogRm9yY2UgbWVtb3J5IHdyaXRlcyBiZWZvcmUgY29udGludWluZyAqLworICBfX0lTQigpOyAvKiBGbHVzaCBhbmQgcmVmaWxsIHBpcGVsaW5lIHdpdGggdXBkYXRlZCBwZXJtaXNzaW9ucyAqLworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgdGhlIG5vbi1zZWN1cmUgTVBVLgorICAqIEByZXR2YWwgTm9uZQorICAqLwordm9pZCBIQUxfTVBVX0Rpc2FibGVfTlModm9pZCkKK3sKKyAgX19ETUIoKTsgLyogRm9yY2UgYW55IG91dHN0YW5kaW5nIHRyYW5zZmVycyB0byBjb21wbGV0ZSBiZWZvcmUgZGlzYWJsaW5nIE1QVSAqLworCisgIC8qIERpc2FibGUgdGhlIE1QVSAqLworICBNUFVfTlMtPkNUUkwgICY9IH5NUFVfQ1RSTF9FTkFCTEVfTXNrOworfQorCisvKioKKyAgKiBAYnJpZWYgIEluaXRpYWxpemUgYW5kIGNvbmZpZ3VyZSB0aGUgUmVnaW9uIGFuZCB0aGUgbWVtb3J5IHRvIGJlIHByb3RlY3RlZCBmb3Igbm9uLXNlY3VyZSBNUFUuCisgICogQHBhcmFtICBNUFVfUmVnaW9uSW5pdCBQb2ludGVyIHRvIGEgTVBVX1JlZ2lvbl9Jbml0VHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorICAqIEByZXR2YWwgTm9uZQorICAqLwordm9pZCBIQUxfTVBVX0NvbmZpZ1JlZ2lvbl9OUyhNUFVfUmVnaW9uX0luaXRUeXBlRGVmICpNUFVfUmVnaW9uSW5pdCkKK3sKKyAgTVBVX0NvbmZpZ1JlZ2lvbihNUFVfTlMsIE1QVV9SZWdpb25Jbml0KTsKK30KKworLyoqCisgICogQGJyaWVmICBJbml0aWFsaXplIGFuZCBjb25maWd1cmUgdGhlIG1lbW9yeSBhdHRyaWJ1dGVzIGZvciBub24tc2VjdXJlIE1QVS4KKyAgKiBAcGFyYW0gIE1QVV9BdHRyaWJ1dGVzSW5pdCBQb2ludGVyIHRvIGEgTVBVX0F0dHJpYnV0ZXNfSW5pdFR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCisgICogQHJldHZhbCBOb25lCisgICovCit2b2lkIEhBTF9NUFVfQ29uZmlnTWVtb3J5QXR0cmlidXRlc19OUyhNUFVfQXR0cmlidXRlc19Jbml0VHlwZURlZiAqTVBVX0F0dHJpYnV0ZXNJbml0KQoreworICBNUFVfQ29uZmlnTWVtb3J5QXR0cmlidXRlcyhNUFVfTlMsIE1QVV9BdHRyaWJ1dGVzSW5pdCk7Cit9CisjZW5kaWYgLyogTVBVX05TICovCisKKyNlbmRpZiAvKiBfX01QVV9QUkVTRU5UICovCisKIC8qKgogICAqIEB9CiAgICovCkBAIC00MDgsNyArNTQzLDg3IEBACiAgICogQH0KICAgKi8KIAorLyogUHJpdmF0ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAYWRkdG9ncm91cCBDT1JURVhfUHJpdmF0ZV9GdW5jdGlvbnMKKyAgKiBAeworICAqLworCisjaWYgKF9fTVBVX1BSRVNFTlQgPT0gMSkKKworc3RhdGljIHZvaWQgTVBVX0NvbmZpZ1JlZ2lvbihNUFVfVHlwZSogTVBVeCwgTVBVX1JlZ2lvbl9Jbml0VHlwZURlZiAqTVBVX1JlZ2lvbkluaXQpCit7CisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCisgIGFzc2VydF9wYXJhbShJU19NUFVfUkVHSU9OX05VTUJFUihNUFVfUmVnaW9uSW5pdC0+TnVtYmVyKSk7CisgIGFzc2VydF9wYXJhbShJU19NUFVfUkVHSU9OX0VOQUJMRShNUFVfUmVnaW9uSW5pdC0+RW5hYmxlKSk7CisKKyAgLyogRm9sbG93IEFSTSByZWNvbW1lbmRhdGlvbiB3aXRoIERhdGEgTWVtb3J5IEJhcnJpZXIgcHJpb3IgdG8gTVBVIGNvbmZpZ3VyYXRpb24gKi8KKyAgX19ETUIoKTsKKworICAvKiBTZXQgdGhlIFJlZ2lvbiBudW1iZXIgKi8KKyAgTVBVeC0+Uk5SID0gTVBVX1JlZ2lvbkluaXQtPk51bWJlcjsKKworICBpZiAoTVBVX1JlZ2lvbkluaXQtPkVuYWJsZSAhPSBNUFVfUkVHSU9OX0RJU0FCTEUpCisgIHsKKyAgICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLworICAgIGFzc2VydF9wYXJhbShJU19NUFVfSU5TVFJVQ1RJT05fQUNDRVNTKE1QVV9SZWdpb25Jbml0LT5EaXNhYmxlRXhlYykpOworICAgIGFzc2VydF9wYXJhbShJU19NUFVfUkVHSU9OX1BFUk1JU1NJT05fQVRUUklCVVRFKE1QVV9SZWdpb25Jbml0LT5BY2Nlc3NQZXJtaXNzaW9uKSk7CisgICAgYXNzZXJ0X3BhcmFtKElTX01QVV9BQ0NFU1NfU0hBUkVBQkxFKE1QVV9SZWdpb25Jbml0LT5Jc1NoYXJlYWJsZSkpOworCisgICAgTVBVeC0+UkJBUiA9ICgoKHVpbnQzMl90KU1QVV9SZWdpb25Jbml0LT5CYXNlQWRkcmVzcyAmIDB4RkZGRkZGRTBVKSAgfAorICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClNUFVfUmVnaW9uSW5pdC0+SXNTaGFyZWFibGUgICAgICA8PCBNUFVfUkJBUl9TSF9Qb3MpICB8CisgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KU1QVV9SZWdpb25Jbml0LT5BY2Nlc3NQZXJtaXNzaW9uIDw8IE1QVV9SQkFSX0FQX1BvcykgIHwKKyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpTVBVX1JlZ2lvbkluaXQtPkRpc2FibGVFeGVjICAgICAgPDwgTVBVX1JCQVJfWE5fUG9zKSk7CisKKyAgICBNUFV4LT5STEFSID0gKCgodWludDMyX3QpTVBVX1JlZ2lvbkluaXQtPkxpbWl0QWRkcmVzcyAmIDB4RkZGRkZGRTBVKSB8CisgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KU1QVV9SZWdpb25Jbml0LT5BdHRyaWJ1dGVzSW5kZXggPDwgTVBVX1JMQVJfQXR0ckluZHhfUG9zKSB8CisgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KU1QVV9SZWdpb25Jbml0LT5FbmFibGUgICAgICAgICAgPDwgTVBVX1JMQVJfRU5fUG9zKSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgTVBVeC0+UkJBUiA9IDBVOworICAgIE1QVXgtPlJMQVIgPSAwVTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCBNUFVfQ29uZmlnTWVtb3J5QXR0cmlidXRlcyhNUFVfVHlwZSogTVBVeCwgTVBVX0F0dHJpYnV0ZXNfSW5pdFR5cGVEZWYgKk1QVV9BdHRyaWJ1dGVzSW5pdCkKK3sKKyAgX19JTyB1aW50MzJfdCAqbWFpcjsKKyAgdWludDMyX3QgICAgICBhdHRyX3ZhbHVlczsKKyAgdWludDMyX3QgICAgICBhdHRyX251bWJlcjsKKworICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLworICBhc3NlcnRfcGFyYW0oSVNfTVBVX0FUVFJJQlVURVNfTlVNQkVSKE1QVV9BdHRyaWJ1dGVzSW5pdC0+TnVtYmVyKSk7CisgIC8qIE5vIG5lZWQgdG8gY2hlY2sgQXR0cmlidXRlcyB2YWx1ZSBhcyBhbGwgMHgwLi4weEZGIHBvc3NpYmxlICovCisKKyAgLyogRm9sbG93IEFSTSByZWNvbW1lbmRhdGlvbiB3aXRoIERhdGEgTWVtb3J5IEJhcnJpZXIgcHJpb3IgdG8gTVBVeCBjb25maWd1cmF0aW9uICovCisgIF9fRE1CKCk7CisKKyAgaWYoTVBVX0F0dHJpYnV0ZXNJbml0LT5OdW1iZXIgPCBNUFVfQVRUUklCVVRFU19OVU1CRVI0KQorICB7CisgICAgLyogUHJvZ3JhbSBNUFVfTUFJUjAgKi8KKyAgICBtYWlyID0gJihNUFV4LT5NQUlSMCk7CisgICAgYXR0cl9udW1iZXIgPSBNUFVfQXR0cmlidXRlc0luaXQtPk51bWJlcjsKKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBQcm9ncmFtIE1QVV9NQUlSMSAqLworICAgIG1haXIgPSAmKE1QVXgtPk1BSVIxKTsKKyAgICBhdHRyX251bWJlciA9ICh1aW50MzJfdClNUFVfQXR0cmlidXRlc0luaXQtPk51bWJlciAtIDRVOworICB9CisKKyAgYXR0cl92YWx1ZXMgPSAqKG1haXIpOworICBhdHRyX3ZhbHVlcyAmPSAgfigweEZGVSA8PCAoYXR0cl9udW1iZXIgKiA4VSkpOworICAqKG1haXIpID0gYXR0cl92YWx1ZXMgfCAoKHVpbnQzMl90KU1QVV9BdHRyaWJ1dGVzSW5pdC0+QXR0cmlidXRlcyA8PCAoYXR0cl9udW1iZXIgKiA4VSkpOworfQorCisjZW5kaWYgLyogX19NUFVfUFJFU0VOVCAqLworCisvKioKKyAgKiBAfQorICAqLworCiAjZW5kaWYgLyogSEFMX0NPUlRFWF9NT0RVTEVfRU5BQkxFRCAqLworCiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDV4eF9oYWxfY3J5cC5jIGIvU3JjL3N0bTMybDV4eF9oYWxfY3J5cC5jCmluZGV4IGE0MWRhODkuLjUwMTg2YmYgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw1eHhfaGFsX2NyeXAuYworKysgYi9TcmMvc3RtMzJsNXh4X2hhbF9jcnlwLmMKQEAgLTYsNyArNiw3IEBACiAgICogICAgICAgICAgVGhpcyBmaWxlIHByb3ZpZGVzIGZpcm13YXJlIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZvbGxvd2luZwogICAqICAgICAgICAgIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgQ3J5cHRvZ3JhcGh5IChDUllQKSBwZXJpcGhlcmFsOgogICAqICAgICAgICAgICArIEluaXRpYWxpemF0aW9uLCBkZS1pbml0aWFsaXphdGlvbiwgc2V0IGNvbmZpZyBhbmQgZ2V0IGNvbmZpZyAgZnVuY3Rpb25zCi0gICogICAgICAgICAgICsgREVTL1RERVMsIEFFUyBwcm9jZXNzaW5nIGZ1bmN0aW9ucworICAqICAgICAgICAgICArIEFFUyBwcm9jZXNzaW5nIGZ1bmN0aW9ucwogICAqICAgICAgICAgICArIERNQSBjYWxsYmFjayBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgKyBDUllQIElSUSBoYW5kbGVyIG1hbmFnZW1lbnQKICAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucwpAQCAtMzIsOCArMzIsOCBAQAogICAgICAgICAgICAgICgrKyspIEFzc29jaWF0ZSB0aGUgaW5pdGlhbGl6ZWQgRE1BIGhhbmRsZSB0byB0aGUgQ1JZUCBETUEgaGFuZGxlCiAgICAgICAgICAgICAgICAgIHVzaW5nICBfX0hBTF9MSU5LRE1BKCkKICAgICAgICAgICAgICAoKysrKSBDb25maWd1cmUgdGhlIHByaW9yaXR5IGFuZCBlbmFibGUgdGhlIE5WSUMgZm9yIHRoZSB0cmFuc2ZlciBjb21wbGV0ZQotICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgb24gdGhlIHR3byBETUEgU3RyZWFtcy4gVGhlIG91dHB1dCBzdHJlYW0gc2hvdWxkIGhhdmUgaGlnaGVyCi0gICAgICAgICAgICAgICAgIHByaW9yaXR5IHRoYW4gdGhlIGlucHV0IHN0cmVhbSBIQUxfTlZJQ19TZXRQcmlvcml0eSgpIGFuZCBIQUxfTlZJQ19FbmFibGVJUlEoKQorICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgb24gdGhlIHR3byBETUEgY2hhbm5lbHMuIFRoZSBvdXRwdXQgY2hhbm5lbCBzaG91bGQgaGF2ZSBoaWdoZXIKKyAgICAgICAgICAgICAgICAgcHJpb3JpdHkgdGhhbiB0aGUgaW5wdXQgY2hhbm5lbCBIQUxfTlZJQ19TZXRQcmlvcml0eSgpIGFuZCBIQUxfTlZJQ19FbmFibGVJUlEoKS4KIAogICAgICAgKCMpSW5pdGlhbGl6ZSB0aGUgQ1JZUCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzIDoKICAgICAgICAgICgjIykgVGhlIGRhdGEgdHlwZTogMS1iaXQsIDgtYml0LCAxNi1iaXQgb3IgMzItYml0LgpAQCAtNDQsOSArNDQsMTMgQEAKICAgICAgICAgICAgICAoKysrKSBJbiBzb21lIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCB0aGUga2V5IGlzIHdyaXR0ZW4gYnkgdGhlIGFwcGxpY2F0aW9uCiAgICAgICAgICAgICAgICAgICAgY29kZSBvdXQgb2YgdGhlIEhBTCBzY29wZS4gSW4gdGhhdCBjYXNlLCB1c2VyIGNhbiBzdGlsbCByZXNvcnQgdG8gdGhlCiAgICAgICAgICAgICAgICAgICAgSEFMIEFQSXMgYXMgdXN1YWwgYnV0IG11c3QgbWFrZSBzdXJlIHRoYXQgcEtleSBwb2ludGVyIGlzIHNldCB0byBOVUxMLgorICAgICAgICAgKCMjKSBUaGUgRGF0YVdpZHRoVW5pdCBmaWVsZC4gSXQgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRhdGEgbGVuZ3RoIChvciB0aGUgcGF5bG9hZCBsZW5ndGggZm9yIGF1dGhlbnRpY2F0aW9uCisgICAgICAgICAgICAgICBhbGdvcml0aG1zKSBpcyBpbiB3b3JkcyBvciBieXRlcy4KICAgICAgICAgICgjIykgVGhlIEhlYWRlciB1c2VkIG9ubHkgaW4gQUVTIEdDTSBhbmQgQ0NNIEFsZ29yaXRobSBmb3IgYXV0aGVudGljYXRpb24uCi0gICAgICAgICAoIyMpIFRoZSBIZWFkZXJTaXplIFRoZSBzaXplIG9mIGhlYWRlciBidWZmZXIgaW4gd29yZC4KLSAgICAgICAgICgjIykgVGhlIEIwIGJsb2NrIGlzIHRoZSBmaXJzdCBhdXRoZW50aWNhdGlvbiBibG9jayB1c2VkIG9ubHkgIGluIEFFUyBDQ00gbW9kZS4KKyAgICAgICAgICgjIykgVGhlIEhlYWRlclNpemUgcHJvdmlkaW5nIHRoZSBzaXplIG9mIHRoZSBoZWFkZXIgYnVmZmVyIGluIHdvcmRzIG9yIGJ5dGVzLCBkZXBlbmRpbmcgdXBvbiBIZWFkZXJXaWR0aFVuaXQgZmllbGQuCisgICAgICAgICAoIyMpIFRoZSBIZWFkZXJXaWR0aFVuaXQgZmllbGQuIEl0IHNwZWNpZmllcyB3aGV0aGVyIHRoZSBoZWFkZXIgbGVuZ3RoIChmb3IgYXV0aGVudGljYXRpb24gYWxnb3JpdGhtcykgaXMgaW4gd29yZHMgb3IgYnl0ZXMuICAgICAgICAgCisgICAgICAgICAoIyMpIFRoZSBCMCBibG9jayBpcyB0aGUgZmlyc3QgYXV0aGVudGljYXRpb24gYmxvY2sgdXNlZCBvbmx5IGluIEFFUyBDQ00gbW9kZS4KKyAgICAgICAgICgjIykgVGhlIEtleUlWQ29uZmlnU2tpcCB1c2VkIHRvIHByb2Nlc3Mgc2V2ZXJhbCBtZXNzYWdlcyBpbiBhIHJvdyAocGxlYXNlIHNlZSBtb3JlIGluZm9ybWF0aW9uIGJlbG93KS4KIAogICAgICAgKCMpVGhyZWUgcHJvY2Vzc2luZyAoZW5jcnlwdGlvbi9kZWNyeXB0aW9uKSBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZToKICAgICAgICAgICgjIykgUG9sbGluZyBtb2RlOiBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIEFQSXMgYXJlIGJsb2NraW5nIGZ1bmN0aW9ucwpAQCAtMTk0LDExICsxOTgsMTEgQEAKICAgWy4uXQogICBUaGUgY29tcGlsYXRpb24gZGVmaW5lICBVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTIHdoZW4gc2V0IHRvIDEKICAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KLSAgVXNlIEZ1bmN0aW9ucyBAcmVmIEhBTF9DUllQX1JlZ2lzdGVyQ2FsbGJhY2soKSBvciBIQUxfQ1JZUF9SZWdpc3RlclhYWENhbGxiYWNrKCkKKyAgVXNlIEZ1bmN0aW9ucyBIQUxfQ1JZUF9SZWdpc3RlckNhbGxiYWNrKCkgb3IgSEFMX0NSWVBfUmVnaXN0ZXJYWFhDYWxsYmFjaygpCiAgIHRvIHJlZ2lzdGVyIGFuIGludGVycnVwdCBjYWxsYmFjay4KIAogICBbLi5dCi0gIEZ1bmN0aW9uIEByZWYgSEFMX0NSWVBfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgorICBGdW5jdGlvbiBIQUxfQ1JZUF9SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgKCspIEluQ3BsdENhbGxiYWNrICAgICA6ICBJbnB1dCBGSUZPIHRyYW5zZmVyIGNvbXBsZXRlZCBjYWxsYmFjay4KICAgICAoKykgT3V0Q3BsdENhbGxiYWNrICAgIDogT3V0cHV0IEZJRk8gdHJhbnNmZXIgY29tcGxldGVkIGNhbGxiYWNrLgogICAgICgrKSBFcnJvckNhbGxiYWNrICAgICAgOiBjYWxsYmFjayBmb3IgZXJyb3IgZGV0ZWN0aW9uLgpAQCAtMjA4LDkgKzIxMiw5IEBACiAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKICAgWy4uXQotICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfQ1JZUF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CisgIFVzZSBmdW5jdGlvbiBIQUxfQ1JZUF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CiAgIHdlYWsgZnVuY3Rpb24uCi0gIEByZWYgSEFMX0NSWVBfVW5SZWdpc3RlckNhbGxiYWNrKCkgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAorICBIQUxfQ1JZUF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCiAgIGFuZCB0aGUgQ2FsbGJhY2sgSUQuCiAgIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIHJlc2V0IGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgKCspIEluQ3BsdENhbGxiYWNrICAgICA6ICBJbnB1dCBGSUZPIHRyYW5zZmVyIGNvbXBsZXRlZCBjYWxsYmFjay4KQEAgLTIyMCwxMyArMjI0LDEzIEBACiAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICA6IENSWVAgTXNwRGVJbml0LgogCiAgIFsuLl0KLSAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEByZWYgSEFMX0NSWVBfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfQ1JZUF9TVEFURV9SRVNFVAorICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX0NSWVBfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfQ1JZUF9TVEFURV9SRVNFVAogICBhbGwgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnMgOgotICBleGFtcGxlcyBAcmVmIEhBTF9DUllQX0luQ3BsdENhbGxiYWNrKCkgLCBAcmVmIEhBTF9DUllQX091dENwbHRDYWxsYmFjaygpLgorICBleGFtcGxlcyBIQUxfQ1JZUF9JbkNwbHRDYWxsYmFjaygpICwgSEFMX0NSWVBfT3V0Q3BsdENhbGxiYWNrKCkuCiAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgZnVuY3Rpb25zIHRoYXQgYXJlCi0gIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayBmdW5jdGlvbiBpbiB0aGUgQHJlZiBIQUxfQ1JZUF9Jbml0KCkvIEByZWYgSEFMX0NSWVBfRGVJbml0KCkgb25seSB3aGVuCisgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayBmdW5jdGlvbiBpbiB0aGUgSEFMX0NSWVBfSW5pdCgpLyBIQUxfQ1JZUF9EZUluaXQoKSBvbmx5IHdoZW4KICAgdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KLSAgaWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBAcmVmIEhBTF9DUllQX0luaXQoKSAvIEByZWYgSEFMX0NSWVBfRGVJbml0KCkKKyAgaWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBIQUxfQ1JZUF9Jbml0KCkgLyBIQUxfQ1JZUF9EZUluaXQoKQogICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgZnVuY3Rpb25zIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpCiAKICAgWy4uXQpAQCAtMjM1LDggKzIzOSw4IEBACiAgIGluIEhBTF9DUllQX1NUQVRFX1JFQURZIG9yIEhBTF9DUllQX1NUQVRFX1JFU0VUIHN0YXRlLAogICB0aHVzIHJlZ2lzdGVyZWQgKHVzZXIpIE1zcEluaXQvRGVJbml0IGNhbGxiYWNrcyBjYW4gYmUgdXNlZCBkdXJpbmcgdGhlIEluaXQvRGVJbml0LgogICBJbiB0aGF0IGNhc2UgZmlyc3QgcmVnaXN0ZXIgdGhlIE1zcEluaXQvTXNwRGVJbml0IHVzZXIgY2FsbGJhY2tzCi0gIHVzaW5nIEByZWYgSEFMX0NSWVBfUmVnaXN0ZXJDYWxsYmFjaygpIGJlZm9yZSBjYWxsaW5nIEByZWYgSEFMX0NSWVBfRGVJbml0KCkKLSAgb3IgQHJlZiBIQUxfQ1JZUF9Jbml0KCkgZnVuY3Rpb24uCisgIHVzaW5nIEhBTF9DUllQX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBIQUxfQ1JZUF9EZUluaXQoKQorICBvciBIQUxfQ1JZUF9Jbml0KCkgZnVuY3Rpb24uCiAKICAgWy4uXQogICBXaGVuIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9DUllQX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgpAQCAtMzIxLDYgKzMyNSw3IEBACiAjZGVmaW5lICBDUllQX1BIQVNFX0hFQURFUl9TVVNQRU5ERUQgICAgIDB4MDAwMDAwMDRVICAgIC8qITwgR0NNL0dNQUMvQ0NNIGhlYWRlciBwaGFzZSBpcyBzdXNwZW5kZWQgKi8KICNkZWZpbmUgIENSWVBfUEhBU0VfUEFZTE9BRF9TVVNQRU5ERUQgICAgMHgwMDAwMDAwNVUgICAgLyohPCBHQ00vQ0NNIHBheWxvYWQgcGhhc2UgaXMgc3VzcGVuZGVkICAgICAqLwogI2VuZGlmIC8qIFVTRV9IQUxfQ1JZUF9TVVNQRU5EX1JFU1VNRSAqLworI2RlZmluZSAgQ1JZUF9QSEFTRV9IRUFERVJfRE1BX0ZFRUQgICAgICAweDAwMDAwMDA2VSAgICAvKiE8IEdDTS9HTUFDL0NDTSBoZWFkZXIgaXMgZmVkIHRvIHRoZSBwZXJpcGhlcmFsIGluIERNQSBtb2RlICovCiAKICNkZWZpbmUgQ1JZUF9PUEVSQVRJTkdNT0RFX0VOQ1JZUFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUgICAgIC8qITwgRW5jcnlwdGlvbiBtb2RlKE1vZGUgMSkgICovCiAjZGVmaW5lIENSWVBfT1BFUkFUSU5HTU9ERV9LRVlERVJJVkFUSU9OICAgICAgICAgICAgIEFFU19DUl9NT0RFXzAgICAvKiE8IEtleSBkZXJpdmF0aW9uIG1vZGUgIG9ubHkgdXNlZCB3aGVuIHBlcmZvcm1pbmcgRUNCIGFuZCBDQkMgZGVjcnlwdGlvbnMgKE1vZGUgMikgKi8KQEAgLTM0NSw5ICszNTAsNyBAQAogICAqIEB7CiAgICovCiAKLSNkZWZpbmUgQ1JZUF9TRVRfUEhBU0UoX19IQU5ETEVfXywgX19QSEFTRV9fKSAgZG97KF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IgJj0gKHVpbnQzMl90KSh+QUVTX0NSX0dDTVBIKTtcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSIHw9ICh1aW50MzJfdCkoX19QSEFTRV9fKTtcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfXdoaWxlKDBVKQorI2RlZmluZSBDUllQX1NFVF9QSEFTRShfX0hBTkRMRV9fLCBfX1BIQVNFX18pICAgTU9ESUZZX1JFRygoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUiwgQUVTX0NSX0dDTVBILCAodWludDMyX3QpKF9fUEhBU0VfXykpCiAKIC8qKgogICAqIEB9CkBAIC0zNjEsNiArMzY0LDcgQEAKICAgKi8KIAogc3RhdGljIHZvaWQgQ1JZUF9TZXRETUFDb25maWcoQ1JZUF9IYW5kbGVUeXBlRGVmICpoY3J5cCwgdWludDMyX3QgaW5wdXRhZGRyLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBvdXRwdXRhZGRyKTsKK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBDUllQX1NldEhlYWRlckRNQUNvbmZpZyhDUllQX0hhbmRsZVR5cGVEZWYgKmhjcnlwLCB1aW50MzJfdCBpbnB1dGFkZHIsIHVpbnQxNl90IFNpemUpOwogc3RhdGljIHZvaWQgQ1JZUF9ETUFJbkNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwogc3RhdGljIHZvaWQgQ1JZUF9ETUFPdXRDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKIHN0YXRpYyB2b2lkIENSWVBfRE1BRXJyb3IoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwpAQCAtMzcwLDYgKzM3NCw3IEBACiBzdGF0aWMgdm9pZCBDUllQX0dDTUNDTV9TZXRQYXlsb2FkUGhhc2VfSVQoQ1JZUF9IYW5kbGVUeXBlRGVmICpoY3J5cCk7CiBzdGF0aWMgdm9pZCBDUllQX0dDTUNDTV9TZXRIZWFkZXJQaGFzZV9JVChDUllQX0hhbmRsZVR5cGVEZWYgKmhjcnlwKTsKIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBDUllQX0dDTUNDTV9TZXRIZWFkZXJQaGFzZV9ETUEoQ1JZUF9IYW5kbGVUeXBlRGVmICpoY3J5cCk7CitzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgQ1JZUF9HQ01DQ01fU2V0UGF5bG9hZFBoYXNlX0RNQShDUllQX0hhbmRsZVR5cGVEZWYgKmhjcnlwKTsKIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBDUllQX0FFU0dDTV9Qcm9jZXNzX0RNQShDUllQX0hhbmRsZVR5cGVEZWYgKmhjcnlwKTsKIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBDUllQX0FFU0dDTV9Qcm9jZXNzX0lUKENSWVBfSGFuZGxlVHlwZURlZiAqaGNyeXApOwogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIENSWVBfQUVTR0NNX1Byb2Nlc3MoQ1JZUF9IYW5kbGVUeXBlRGVmICpoY3J5cCwgdWludDMyX3QgVGltZW91dCk7CkBAIC0zODMsNiArMzg4LDcgQEAKIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBDUllQX0FFU19FbmNyeXB0X0lUKENSWVBfSGFuZGxlVHlwZURlZiAqaGNyeXApOwogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIENSWVBfQUVTX0RlY3J5cHRfRE1BKENSWVBfSGFuZGxlVHlwZURlZiAqaGNyeXApOwogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIENSWVBfV2FpdE9uQ0NGbGFnKENSWVBfSGFuZGxlVHlwZURlZiAqaGNyeXAsIHVpbnQzMl90IFRpbWVvdXQpOworc3RhdGljIHZvaWQgQ1JZUF9DbGVhckNDRmxhZ1doZW5IaWdoKENSWVBfSGFuZGxlVHlwZURlZiAqaGNyeXAsIHVpbnQzMl90IFRpbWVvdXQpOwogI2lmIChVU0VfSEFMX0NSWVBfU1VTUEVORF9SRVNVTUUgPT0gMVUpCiBzdGF0aWMgdm9pZCBDUllQX1JlYWRfSVZSZWdpc3RlcnMoQ1JZUF9IYW5kbGVUeXBlRGVmICpoY3J5cCwgdWludDMyX3QqIE91dHB1dCk7CiBzdGF0aWMgdm9pZCBDUllQX1dyaXRlX0lWUmVnaXN0ZXJzKENSWVBfSGFuZGxlVHlwZURlZiAqaGNyeXAsIHVpbnQzMl90KiBJbnB1dCk7CkBAIC00MTgsMTMgKzQyNCwxMyBAQAogICAgICAgKCspIERlSW5pdGlhbGl6ZSB0aGUgQ1JZUCBNU1AKICAgICAgICgrKSBjb25maWd1cmUgQ1JZUCAoSEFMX0NSWVBfU2V0Q29uZmlnKSB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycyBpbiB0aGUgQ1JZUF9Db25maWdUeXBlRGVmCiAgICAgICAgICAgUGFyYW1ldGVycyB3aGljaCBhcmUgY29uZmlndXJlZCBpbiBUaGlzIHNlY3Rpb24gYXJlIDoKLSAgICAgICAgICAoKykgS2V5IHNpemUKLSAgICAgICAgICAoKykgRGF0YSBUeXBlIDogMzIsMTYsIDggb3IgMWJpdAotICAgICAgICAgICgrKSBBbGdvTW9kZSA6Ci0gICAgICAgICAgICAgIC0gZm9yIENSWVAxIHBlcmlwaGVyYWwgOgorICAgICAgICAgICgrKykgS2V5IHNpemUKKyAgICAgICAgICAoKyspIERhdGEgVHlwZSA6IDMyLDE2LCA4IG9yIDFiaXQKKyAgICAgICAgICAoKyspIEFsZ29Nb2RlIDoKKyAgICAgICAgICAgICAgKCsrKykgZm9yIENSWVAxIHBlcmlwaGVyYWwgOgogICAgICAgICAgICAgICAgICBFQ0IgYW5kIENCQyBpbiBERVMvVERFUyBTdGFuZGFyZAogICAgICAgICAgICAgICAgICBFQ0IsQ0JDLENUUixHQ00vR01BQyBhbmQgQ0NNIGluIEFFUyBTdGFuZGFyZC4KLSAgICAgICAgICAgICAgLSBmb3IgVGlueUFFUzIgcGVyaXBoZXJhbCwgb25seSBFQ0IsQ0JDLENUUixHQ00vR01BQyBhbmQgQ0NNIGluIEFFUyBTdGFuZGFyZCBhcmUgc3VwcG9ydGVkLgorICAgICAgICAgICAgICAoKysrKSBmb3IgVGlueUFFUzIgcGVyaXBoZXJhbCwgb25seSBFQ0IsQ0JDLENUUixHQ00vR01BQyBhbmQgQ0NNIGluIEFFUyBTdGFuZGFyZCBhcmUgc3VwcG9ydGVkLgogICAgICAgKCspIEdldCBDUllQIGNvbmZpZ3VyYXRpb24gKEhBTF9DUllQX0dldENvbmZpZykgZnJvbSB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMgaW4gdGhlIENSWVBfSGFuZGxlVHlwZURlZgogCiBAZW5kdmVyYmF0aW0KQEAgLTU4MSwxNSArNTg3LDE3IEBACiAgICAgX19IQUxfTE9DSyhoY3J5cCk7CiAKICAgICAvKiBTZXQgIENSWVAgcGFyYW1ldGVycyAgKi8KLSAgICBoY3J5cC0+SW5pdC5EYXRhVHlwZSAgID0gcENvbmYtPkRhdGFUeXBlOwotICAgIGhjcnlwLT5Jbml0LnBLZXkgICAgICAgPSBwQ29uZi0+cEtleTsKLSAgICBoY3J5cC0+SW5pdC5BbGdvcml0aG0gID0gcENvbmYtPkFsZ29yaXRobTsKLSAgICBoY3J5cC0+SW5pdC5LZXlTaXplICAgID0gcENvbmYtPktleVNpemU7Ci0gICAgaGNyeXAtPkluaXQucEluaXRWZWN0ICA9IHBDb25mLT5wSW5pdFZlY3Q7Ci0gICAgaGNyeXAtPkluaXQuSGVhZGVyICAgICA9IHBDb25mLT5IZWFkZXI7Ci0gICAgaGNyeXAtPkluaXQuSGVhZGVyU2l6ZSA9IHBDb25mLT5IZWFkZXJTaXplOwotICAgIGhjcnlwLT5Jbml0LkIwICAgICAgICAgPSBwQ29uZi0+QjA7Ci0gICAgaGNyeXAtPkluaXQuRGF0YVdpZHRoVW5pdCA9IHBDb25mLT5EYXRhV2lkdGhVbml0OworICAgIGhjcnlwLT5Jbml0LkRhdGFUeXBlICAgICAgICA9IHBDb25mLT5EYXRhVHlwZTsKKyAgICBoY3J5cC0+SW5pdC5wS2V5ICAgICAgICAgICAgPSBwQ29uZi0+cEtleTsKKyAgICBoY3J5cC0+SW5pdC5BbGdvcml0aG0gICAgICAgPSBwQ29uZi0+QWxnb3JpdGhtOworICAgIGhjcnlwLT5Jbml0LktleVNpemUgICAgICAgICA9IHBDb25mLT5LZXlTaXplOworICAgIGhjcnlwLT5Jbml0LnBJbml0VmVjdCAgICAgICA9IHBDb25mLT5wSW5pdFZlY3Q7CisgICAgaGNyeXAtPkluaXQuSGVhZGVyICAgICAgICAgID0gcENvbmYtPkhlYWRlcjsKKyAgICBoY3J5cC0+SW5pdC5IZWFkZXJTaXplICAgICAgPSBwQ29uZi0+SGVhZGVyU2l6ZTsKKyAgICBoY3J5cC0+SW5pdC5CMCAgICAgICAgICAgICAgPSBwQ29uZi0+QjA7CisgICAgaGNyeXAtPkluaXQuRGF0YVdpZHRoVW5pdCAgID0gcENvbmYtPkRhdGFXaWR0aFVuaXQ7CisgICAgaGNyeXAtPkluaXQuSGVhZGVyV2lkdGhVbml0ID0gcENvbmYtPkhlYWRlcldpZHRoVW5pdDsKKyAgICBoY3J5cC0+SW5pdC5LZXlJVkNvbmZpZ1NraXAgPSBwQ29uZi0+S2V5SVZDb25maWdTa2lwOwogCiAgICAgLyogU2V0IHRoZSBrZXkgc2l6ZSAoVGhpcyBiaXQgZmllbGQgaXMgZG8gbm90IGNhcmUgaW4gdGhlIERFUyBvciBUREVTIG1vZGVzKSwgZGF0YSB0eXBlIGFuZCBvcGVyYXRpbmcgbW9kZSovCiAgICAgTU9ESUZZX1JFRyhoY3J5cC0+SW5zdGFuY2UtPkNSLCBBRVNfQ1JfREFUQVRZUEUgfCBBRVNfQ1JfS0VZU0laRSB8IEFFU19DUl9DSE1PRCwgaGNyeXAtPkluaXQuRGF0YVR5cGUgfCBoY3J5cC0+SW5pdC5LZXlTaXplIHwgaGNyeXAtPkluaXQuQWxnb3JpdGhtKTsKQEAgLTY1NSw3ICs2NjMsOSBAQAogICAgIHBDb25mLT5IZWFkZXIgICAgICAgICAgPSBoY3J5cC0+SW5pdC5IZWFkZXIgOwogICAgIHBDb25mLT5IZWFkZXJTaXplICAgICAgPSBoY3J5cC0+SW5pdC5IZWFkZXJTaXplOwogICAgIHBDb25mLT5CMCAgICAgICAgICAgICAgPSBoY3J5cC0+SW5pdC5CMDsKLSAgICBwQ29uZi0+RGF0YVdpZHRoVW5pdCAgICA9IGhjcnlwLT5Jbml0LkRhdGFXaWR0aFVuaXQ7CisgICAgcENvbmYtPkRhdGFXaWR0aFVuaXQgICA9IGhjcnlwLT5Jbml0LkRhdGFXaWR0aFVuaXQ7CisgICAgcENvbmYtPkhlYWRlcldpZHRoVW5pdCA9IGhjcnlwLT5Jbml0LkhlYWRlcldpZHRoVW5pdDsKKyAgICBwQ29uZi0+S2V5SVZDb25maWdTa2lwID0gaGNyeXAtPkluaXQuS2V5SVZDb25maWdTa2lwOwogCiAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICAgIF9fSEFMX1VOTE9DSyhoY3J5cCk7CkBAIC02ODcsOCArNjk3LDggQEAKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaGNyeXApOwogCi0gIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIFNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKLSAgICAgICAgICAgIHRoZSBIQUxfQ1JZUF9Nc3BJbml0IGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKKyAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZDsgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorICAgICAgICAgICAgdGhlIEhBTF9DUllQX01zcEluaXQgY2FuIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKICAgICovCiB9CiAKQEAgLTcwMyw4ICs3MTMsOCBAQAogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChoY3J5cCk7CiAKLSAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gU2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAotICAgICAgICAgICAgdGhlIEhBTF9DUllQX01zcERlSW5pdCBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCisgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQ7IHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKyAgICAgICAgICAgIHRoZSBIQUxfQ1JZUF9Nc3BEZUluaXQgY2FuIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKICAgICovCiB9CiAKQEAgLTExODUsNyArMTE5NSw3IEBACiAgICogQHBhcmFtICBoY3J5cCBwb2ludGVyIHRvIGEgQ1JZUF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgQ1JZUCBtb2R1bGUKICAgKiBAcGFyYW0gIElucHV0IFBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAocGxhaW50ZXh0KQotICAqIEBwYXJhbSAgU2l6ZSBMZW5ndGggb2YgdGhlIHBsYWludGV4dCBidWZmZXIgaW4gd29yZC4KKyAgKiBAcGFyYW0gIFNpemUgTGVuZ3RoIG9mIHRoZSBwbGFpbnRleHQgYnVmZmVyIGluIGJ5dGVzIG9yIHdvcmRzIChkZXBlbmRpbmcgdXBvbiBEYXRhV2lkdGhVbml0IGZpZWxkKQogICAqIEBwYXJhbSAgT3V0cHV0IFBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIoY2lwaGVydGV4dCkKICAgKiBAcGFyYW0gIFRpbWVvdXQgU3BlY2lmeSBUaW1lb3V0IHZhbHVlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCkBAIC0xMjg1LDcgKzEyOTUsNyBAQAogICAqIEBwYXJhbSAgaGNyeXAgcG9pbnRlciB0byBhIENSWVBfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIENSWVAgbW9kdWxlCiAgICogQHBhcmFtICBJbnB1dCBQb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGNpcGhlcnRleHQgKQotICAqIEBwYXJhbSAgU2l6ZSBMZW5ndGggb2YgdGhlIHBsYWludGV4dCBidWZmZXIgaW4gd29yZC4KKyAgKiBAcGFyYW0gIFNpemUgTGVuZ3RoIG9mIHRoZSBwbGFpbnRleHQgYnVmZmVyIGluIGJ5dGVzIG9yIHdvcmRzIChkZXBlbmRpbmcgdXBvbiBEYXRhV2lkdGhVbml0IGZpZWxkKQogICAqIEBwYXJhbSAgT3V0cHV0IFBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIocGxhaW50ZXh0KQogICAqIEBwYXJhbSAgVGltZW91dCBTcGVjaWZ5IFRpbWVvdXQgdmFsdWUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKQEAgLTEzODUsNyArMTM5NSw3IEBACiAgICogQHBhcmFtICBoY3J5cCBwb2ludGVyIHRvIGEgQ1JZUF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgQ1JZUCBtb2R1bGUKICAgKiBAcGFyYW0gIElucHV0IFBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAocGxhaW50ZXh0KQotICAqIEBwYXJhbSAgU2l6ZSBMZW5ndGggb2YgdGhlIHBsYWludGV4dCBidWZmZXIgaW4gd29yZAorICAqIEBwYXJhbSAgU2l6ZSBMZW5ndGggb2YgdGhlIHBsYWludGV4dCBidWZmZXIgaW4gYnl0ZXMgb3Igd29yZHMgKGRlcGVuZGluZyB1cG9uIERhdGFXaWR0aFVuaXQgZmllbGQpCiAgICogQHBhcmFtICBPdXRwdXQgUG9pbnRlciB0byB0aGUgb3V0cHV0IGJ1ZmZlcihjaXBoZXJ0ZXh0KQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwpAQCAtMTQ5NSw3ICsxNTA1LDcgQEAKICAgKiBAcGFyYW0gIGhjcnlwIHBvaW50ZXIgdG8gYSBDUllQX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBDUllQIG1vZHVsZQogICAqIEBwYXJhbSAgSW5wdXQgUG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChjaXBoZXJ0ZXh0ICkKLSAgKiBAcGFyYW0gIFNpemUgTGVuZ3RoIG9mIHRoZSBwbGFpbnRleHQgYnVmZmVyIGluIHdvcmQuCisgICogQHBhcmFtICBTaXplIExlbmd0aCBvZiB0aGUgcGxhaW50ZXh0IGJ1ZmZlciBpbiBieXRlcyBvciB3b3JkcyAoZGVwZW5kaW5nIHVwb24gRGF0YVdpZHRoVW5pdCBmaWVsZCkKICAgKiBAcGFyYW0gIE91dHB1dCBQb2ludGVyIHRvIHRoZSBvdXRwdXQgYnVmZmVyKHBsYWludGV4dCkKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KQEAgLTE2MDQsNyArMTYxNCw3IEBACiAgICogQHBhcmFtICBoY3J5cCBwb2ludGVyIHRvIGEgQ1JZUF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgQ1JZUCBtb2R1bGUKICAgKiBAcGFyYW0gIElucHV0IFBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAocGxhaW50ZXh0KQotICAqIEBwYXJhbSAgU2l6ZSBMZW5ndGggb2YgdGhlIHBsYWludGV4dCBidWZmZXIgaW4gd29yZC4KKyAgKiBAcGFyYW0gIFNpemUgTGVuZ3RoIG9mIHRoZSBwbGFpbnRleHQgYnVmZmVyIGluIGJ5dGVzIG9yIHdvcmRzIChkZXBlbmRpbmcgdXBvbiBEYXRhV2lkdGhVbml0IGZpZWxkKQogICAqIEBwYXJhbSAgT3V0cHV0IFBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIoY2lwaGVydGV4dCkKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KQEAgLTE3MzEsNyArMTc0MSw3IEBACiAgICogQHBhcmFtICBoY3J5cCBwb2ludGVyIHRvIGEgQ1JZUF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgQ1JZUCBtb2R1bGUKICAgKiBAcGFyYW0gIElucHV0IFBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoY2lwaGVydGV4dCApCi0gICogQHBhcmFtICBTaXplIExlbmd0aCBvZiB0aGUgcGxhaW50ZXh0IGJ1ZmZlciBpbiB3b3JkCisgICogQHBhcmFtICBTaXplIExlbmd0aCBvZiB0aGUgcGxhaW50ZXh0IGJ1ZmZlciBpbiBieXRlcyBvciB3b3JkcyAoZGVwZW5kaW5nIHVwb24gRGF0YVdpZHRoVW5pdCBmaWVsZCkKICAgKiBAcGFyYW0gIE91dHB1dCBQb2ludGVyIHRvIHRoZSBvdXRwdXQgYnVmZmVyKHBsYWludGV4dCkKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KQEAgLTE4NjksNyArMTg3OSw3IEBACiAgICAgLyogQ2xlYXIgY29tcHV0YXRpb24gY29tcGxldGUgZmxhZyAqLwogICAgIF9fSEFMX0NSWVBfQ0xFQVJfRkxBRyhoY3J5cCwgQ1JZUF9DQ0ZfQ0xFQVIpOwogCi0gICAgaWYgKGhjcnlwLT5Jbml0LkFsZ29yaXRobSA9PSBDUllQX0FFU19HQ01fR01BQykKKyAgICBpZiAoKGhjcnlwLT5Jbml0LkFsZ29yaXRobSA9PSBDUllQX0FFU19HQ01fR01BQykgfHwgKGhjcnlwLT5Jbml0LkFsZ29yaXRobSA9PSBDUllQX0FFU19DQ00pKQogICAgIHsKIAogICAgICAgLyogaWYgaGVhZGVyIHBoYXNlICovCkBAIC0xODgyLDE4ICsxODkyLDYgQEAKICAgICAgICAgQ1JZUF9HQ01DQ01fU2V0UGF5bG9hZFBoYXNlX0lUKGhjcnlwKTsKICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAoaGNyeXAtPkluaXQuQWxnb3JpdGhtID09IENSWVBfQUVTX0NDTSkKLSAgICB7Ci0gICAgICAvKiBpZiBoZWFkZXIgcGhhc2UgKi8KLSAgICAgIGlmIChoY3J5cC0+SW5pdC5IZWFkZXJTaXplID49ICBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KQotICAgICAgewotICAgICAgICBDUllQX0dDTUNDTV9TZXRIZWFkZXJQaGFzZV9JVChoY3J5cCk7Ci0gICAgICB9Ci0gICAgICBlbHNlICAgLyogaWYgcGF5bG9hZCBwaGFzZSAqLwotICAgICAgewotICAgICAgICBDUllQX0dDTUNDTV9TZXRQYXlsb2FkUGhhc2VfSVQoaGNyeXApOwotICAgICAgfQotICAgIH0KICAgICBlbHNlICAvKiBBRVMgQWxnb3JpdGhtIEVDQixDQkMgb3IgQ1RSKi8KICAgICB7CiAgICAgICBDUllQX0FFU19JVChoY3J5cCk7CkBAIC0xOTM1LDggKzE5MzMsOCBAQAogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChoY3J5cCk7CiAKLSAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gU2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAotICAgICAgICAgICAgdGhlIEhBTF9DUllQX0luQ3BsdENhbGxiYWNrIGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKKyAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZDsgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorICAgICAgICAgICAgdGhlIEhBTF9DUllQX0luQ3BsdENhbGxiYWNrIGNhbiBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCiAgICAqLwogfQogCkBAIC0xOTUxLDggKzE5NDksOCBAQAogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChoY3J5cCk7CiAKLSAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gU2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAotICAgICAgICAgICAgdGhlIEhBTF9DUllQX091dENwbHRDYWxsYmFjayBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCisgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQ7IHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKyAgICAgICAgICAgIHRoZSBIQUxfQ1JZUF9PdXRDcGx0Q2FsbGJhY2sgY2FuIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKICAgICovCiB9CiAKQEAgLTE5NjcsOCArMTk2NSw4IEBACiAgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KICAgVU5VU0VEKGhjcnlwKTsKIAotICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBTaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCi0gICAgICAgICAgICB0aGUgSEFMX0NSWVBfRXJyb3JDYWxsYmFjayBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCisgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQ7IHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKyAgICAgICAgICAgIHRoZSBIQUxfQ1JZUF9FcnJvckNhbGxiYWNrIGNhbiBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCiAgICAqLwogfQogLyoqCkBAIC0yNTAyLDE4ICsyNTAwLDEwNSBAQAogc3RhdGljIHZvaWQgQ1JZUF9ETUFJbkNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpCiB7CiAgIENSWVBfSGFuZGxlVHlwZURlZiAqaGNyeXAgPSAoQ1JZUF9IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CisgIHVpbnQzMl90IGxvb3Bjb3VudGVyOworICB1aW50MzJfdCBoZWFkZXJzaXplX2luX2J5dGVzOworICB1aW50MzJfdCB0bXA7CisgIHVpbnQzMl90IG1hc2tbMTJdID0gezB4MFUsIDB4RkYwMDAwMDBVLCAweEZGRkYwMDAwVSwgMHhGRkZGRkYwMFUsICAvKiAzMi1iaXQgZGF0YSB0eXBlICovCisgICAgICAgICAgICAgICAgICAgICAgIDB4MFUsIDB4MDAwMEZGMDBVLCAweDAwMDBGRkZGVSwgMHhGRjAwRkZGRlUsICAvKiAxNi1iaXQgZGF0YSB0eXBlICovCisgICAgICAgICAgICAgICAgICAgICAgIDB4MFUsIDB4MDAwMDAwRkZVLCAweDAwMDBGRkZGVSwgMHgwMEZGRkZGRlV9OyAvKiAgOC1iaXQgZGF0YSB0eXBlICovCiAKICAgLyogU3RvcCB0aGUgRE1BIHRyYW5zZmVycyB0byB0aGUgSU4gRklGTyBieSBjbGVhcmluZyB0byAiMCIgdGhlIERNQUlORU4gKi8KICAgQ0xFQVJfQklUKGhjcnlwLT5JbnN0YW5jZS0+Q1IsIEFFU19DUl9ETUFJTkVOKTsKIAotICAvKiBDYWxsIGlucHV0IGRhdGEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KKyAgaWYgKGhjcnlwLT5QaGFzZSA9PSBDUllQX1BIQVNFX0hFQURFUl9ETUFfRkVFRCkKKyAgeworICAgIC8qIERNQSBpcyBkaXNhYmxlZCwgQ0NGIGlzIG1lYW5pbmdmdWwuIFdhaXQgZm9yIGNvbXB1dGF0aW9uIGNvbXBsZXRpb24gYmVmb3JlIG1vdmluZyBmb3J3YXJkICovCisgICAgQ1JZUF9DbGVhckNDRmxhZ1doZW5IaWdoKGhjcnlwLCBDUllQX1RJTUVPVVRfR0NNQ0NNSEVBREVSUEhBU0UpOworCisgICAgLyogU2V0IHRoZSBwaGFzZSAqLworICAgIGhjcnlwLT5QaGFzZSA9IENSWVBfUEhBU0VfUFJPQ0VTUzsKKworICAgIGlmIChoY3J5cC0+SW5pdC5IZWFkZXJXaWR0aFVuaXQgPT0gQ1JZUF9IRUFERVJXSURUSFVOSVRfV09SRCkKKyAgICB7CisgICAgICBoZWFkZXJzaXplX2luX2J5dGVzID0gaGNyeXAtPkluaXQuSGVhZGVyU2l6ZSAqIDRVOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgaGVhZGVyc2l6ZV9pbl9ieXRlcyA9IGhjcnlwLT5Jbml0LkhlYWRlclNpemU7CisgICAgfQorCisgICAgaWYgKChoZWFkZXJzaXplX2luX2J5dGVzICUgMTZVKSAhPSAwVSkKKyAgICB7CisgICAgICAvKiBXcml0ZSBsYXN0IHdvcmRzIHRoYXQgY291bGRuJ3QgYmUgZmVkIGJ5IERNQSAqLworICAgICAgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCA9ICh1aW50MTZfdCkoKGhlYWRlcnNpemVfaW5fYnl0ZXMgLyAxNlUpICogNFUpOworICAgICAgZm9yIChsb29wY291bnRlciA9IDBVOyAobG9vcGNvdW50ZXIgPCAoKGhlYWRlcnNpemVfaW5fYnl0ZXMgLyA0VSkgJSA0VSkpOyBsb29wY291bnRlcisrKQorICAgICAgeworICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSAqKHVpbnQzMl90ICopKGhjcnlwLT5Jbml0LkhlYWRlciArIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQpOworICAgICAgICBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KysgOworICAgICAgfQorICAgICAgLyogSWYgdGhlIGhlYWRlciBzaXplIGlzIGEgbXVsdGlwbGUgb2Ygd29yZHMgKi8KKyAgICAgIGlmICgoaGVhZGVyc2l6ZV9pbl9ieXRlcyAlIDRVKSA9PSAwVSkKKyAgICAgIHsKKyAgICAgICAgLyogUGFkIHRoZSBkYXRhIHdpdGggemVyb3MgdG8gaGF2ZSBhIGNvbXBsZXRlIGJsb2NrICovCisgICAgICAgIHdoaWxlIChsb29wY291bnRlciA8IDRVKQorICAgICAgICB7CisgICAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gMHgwVTsKKyAgICAgICAgICBsb29wY291bnRlcisrOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIEVudGVyIGxhc3QgYnl0ZXMsIHBhZGRlZCB3aXRoIHplcm9zICovCisgICAgICAgIHRtcCA9ICAqKHVpbnQzMl90ICopKGhjcnlwLT5Jbml0LkhlYWRlciArIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQpOworICAgICAgICB0bXAgJj0gbWFza1soaGNyeXAtPkluaXQuRGF0YVR5cGUgKiAyVSkgKyAoaGVhZGVyc2l6ZV9pbl9ieXRlcyAlIDRVKV07CisgICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiA9IHRtcDsKKyAgICAgICAgbG9vcGNvdW50ZXIrKzsKKyAgICAgICAgLyogUGFkIHRoZSBkYXRhIHdpdGggemVyb3MgdG8gaGF2ZSBhIGNvbXBsZXRlIGJsb2NrICovCisgICAgICAgIHdoaWxlIChsb29wY291bnRlciA8IDRVKQorICAgICAgICB7CisgICAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gMHgwVTsKKyAgICAgICAgICBsb29wY291bnRlcisrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIFdhaXQgZm9yIGNvbXB1dGF0aW9uIGNvbXBsZXRpb24gYmVmb3JlIG1vdmluZyBmb3J3YXJkICovCisgICAgICBDUllQX0NsZWFyQ0NGbGFnV2hlbkhpZ2goaGNyeXAsIENSWVBfVElNRU9VVF9HQ01DQ01IRUFERVJQSEFTRSk7CisgICAgfSAvKiBpZiAoKGhlYWRlcnNpemVfaW5fYnl0ZXMgJSAxNlUpICE9IDBVKSAqLworCisgICAgLyogU2V0IHRvIDAgdGhlIG51bWJlciBvZiBub24tdmFsaWQgYnl0ZXMgdXNpbmcgTlBCTEIgcmVnaXN0ZXIqLworICAgIE1PRElGWV9SRUcoaGNyeXAtPkluc3RhbmNlLT5DUiwgQUVTX0NSX05QQkxCLCAwVSk7CisKKyAgICAvKiBTZWxlY3QgcGF5bG9hZCBwaGFzZSBvbmNlIHRoZSBoZWFkZXIgcGhhc2UgaXMgcGVyZm9ybWVkICovCisgICAgQ1JZUF9TRVRfUEhBU0UoaGNyeXAsIENSWVBfUEhBU0VfUEFZTE9BRCk7CisKKyAgICAvKiBJbml0aWF0ZSBwYXlsb2FkIERNQSBJTiBhbmQgcHJvY2Vzc2VkIGRhdGEgRE1BIE9VVCB0cmFuc2ZlcnMgKi8KKyAgICAodm9pZClDUllQX0dDTUNDTV9TZXRQYXlsb2FkUGhhc2VfRE1BKGhjcnlwKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICB1aW50MzJfdCBhbGdvOworICAgIC8qIEVDQiwgQ0JDIG9yIENUUiBlbmQgb2YgaW5wdXQgZGF0YSBmZWVkaW5nIAorICAgICAgIG9yCisgICAgICAgZW5kIG9mIEdDTS9DQ00gcGF5bG9hZCBkYXRhIGZlZWRpbmcgdGhyb3VnaCBETUEgKi8KKyAgICBhbGdvID0gaGNyeXAtPkluc3RhbmNlLT5DUiAmIEFFU19DUl9DSE1PRDsKKworICAgIC8qIERvbid0IGNhbGwgaW5wdXQgZGF0YSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayBvbmx5IGlmIAorICAgICAgIGl0IHJlbWFpbnMgc29tZSBpbnB1dCBkYXRhIHRvIHdyaXRlIHRvIHRoZSBwZXJpcGhlcmFsLgorICAgICAgIFRoaXMgY2FzZSBjYW4gb25seSBvY2N1ciBmb3IgR0NNIGFuZCBDQ00gd2l0aCBhIHBheWxvYWQgbGVuZ3RoCisgICAgICAgbm90IGEgbXVsdGlwbGUgb2YgMTYgYnl0ZXMgKi8KKyAgICBpZiAoISgoKGFsZ28gPT0gQ1JZUF9BRVNfR0NNX0dNQUMpIHx8IChhbGdvID09IENSWVBfQUVTX0NDTSkpICYmIFwKKyAgICAgICAgKCgoaGNyeXAtPlNpemUpICUgMTZVKSAhPSAwVSkpKQorICAgIHsKKyAgICAgIC8qIENhbGwgaW5wdXQgZGF0YSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLwogI2lmIChVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQotICAvKkNhbGwgcmVnaXN0ZXJlZCBJbnB1dCBjb21wbGV0ZSBjYWxsYmFjayovCi0gIGhjcnlwLT5JbkNwbHRDYWxsYmFjayhoY3J5cCk7CisgICAgICAvKkNhbGwgcmVnaXN0ZXJlZCBJbnB1dCBjb21wbGV0ZSBjYWxsYmFjayovCisgICAgICBoY3J5cC0+SW5DcGx0Q2FsbGJhY2soaGNyeXApOwogI2Vsc2UKLSAgLypDYWxsIGxlZ2FjeSB3ZWFrIElucHV0IGNvbXBsZXRlIGNhbGxiYWNrKi8KLSAgSEFMX0NSWVBfSW5DcGx0Q2FsbGJhY2soaGNyeXApOworICAgICAgLypDYWxsIGxlZ2FjeSB3ZWFrIElucHV0IGNvbXBsZXRlIGNhbGxiYWNrKi8KKyAgICAgIEhBTF9DUllQX0luQ3BsdENhbGxiYWNrKGhjcnlwKTsKICNlbmRpZiAvKiBVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgICAgfQorICB9IC8qIGlmIChoY3J5cC0+UGhhc2UgPT0gQ1JZUF9QSEFTRV9IRUFERVJfRE1BX0ZFRUQpICovCiB9CiAKIC8qKgpAQCAtMjUyNiw3ICsyNjExLDcgQEAKICAgdWludDMyX3QgY291bnQ7CiAgIHVpbnQzMl90IG5wYmxiOwogICB1aW50MzJfdCBsYXN0d29yZHNpemU7Ci0gIHVpbnQzMl90IHRlbXA7ICAvKiBUZW1wb3JhcnkgQ3J5cE91dEJ1ZmYgKi8KKyAgdWludDMyX3QgdGVtcFs0XTsgIC8qIFRlbXBvcmFyeSBDcnlwT3V0QnVmZiAqLwogICB1aW50MzJfdCBtb2RlOwogCiAgIENSWVBfSGFuZGxlVHlwZURlZiAqaGNyeXAgPSAoQ1JZUF9IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CkBAIC0yNTc3LDQ2ICsyNjYyLDMxIEBACiAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSAweDBVOwogICAgICAgY291bnQrKzsKICAgICB9CisgICAgLyogQ2FsbCBpbnB1dCBkYXRhIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrICovCisjaWYgKFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCisgICAgLypDYWxsIHJlZ2lzdGVyZWQgSW5wdXQgY29tcGxldGUgY2FsbGJhY2sqLworICAgIGhjcnlwLT5JbkNwbHRDYWxsYmFjayhoY3J5cCk7CisjZWxzZQorICAgIC8qQ2FsbCBsZWdhY3kgd2VhayBJbnB1dCBjb21wbGV0ZSBjYWxsYmFjayovCisgICAgSEFMX0NSWVBfSW5DcGx0Q2FsbGJhY2soaGNyeXApOworI2VuZGlmIC8qIFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8gIAogCiAgICAgLypXYWl0IG9uIENDRiBmbGFnKi8KLSAgICBjb3VudCA9IENSWVBfVElNRU9VVF9HQ01DQ01IRUFERVJQSEFTRTsKLSAgICBkbwotICAgIHsKLSAgICAgIGNvdW50LS0gOwotICAgICAgaWYgKGNvdW50ID09IDBVKQotICAgICAgewotICAgICAgICAvKiBEaXNhYmxlIHRoZSBDUllQIHBlcmlwaGVyYWwgY2xvY2sgKi8KLSAgICAgICAgX19IQUxfQ1JZUF9ESVNBQkxFKGhjcnlwKTsKLQotICAgICAgICAvKiBDaGFuZ2Ugc3RhdGUgKi8KLSAgICAgICAgaGNyeXAtPkVycm9yQ29kZSB8PSBIQUxfQ1JZUF9FUlJPUl9USU1FT1VUOwotICAgICAgICBoY3J5cC0+U3RhdGUgPSBIQUxfQ1JZUF9TVEFURV9SRUFEWTsKLQotICAgICAgICAvKiBQcm9jZXNzIHVubG9ja2VkICovCi0gICAgICAgIF9fSEFMX1VOTE9DSyhoY3J5cCk7Ci0KLSNpZiAoVVNFX0hBTF9DUllQX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKLSAgICAgICAgLypDYWxsIHJlZ2lzdGVyZWQgZXJyb3IgY2FsbGJhY2sqLwotICAgICAgICBoY3J5cC0+RXJyb3JDYWxsYmFjayhoY3J5cCk7Ci0jZWxzZQotICAgICAgICAvKkNhbGwgbGVnYWN5IHdlYWsgZXJyb3IgY2FsbGJhY2sqLwotICAgICAgICBIQUxfQ1JZUF9FcnJvckNhbGxiYWNrKGhjcnlwKTsKLSNlbmRpZiAvKiBVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTICovCi0gICAgICB9Ci0gICAgfQotICAgIHdoaWxlIChIQUxfSVNfQklUX0NMUihoY3J5cC0+SW5zdGFuY2UtPlNSLCBBRVNfU1JfQ0NGKSk7Ci0KLSAgICAvKiBDbGVhciBDQ0YgZmxhZyAqLwotICAgIF9fSEFMX0NSWVBfQ0xFQVJfRkxBRyhoY3J5cCwgQ1JZUF9DQ0ZfQ0xFQVIpOworICAgIENSWVBfQ2xlYXJDQ0ZsYWdXaGVuSGlnaChoY3J5cCwgQ1JZUF9USU1FT1VUX0dDTUNDTUhFQURFUlBIQVNFKTsKIAogICAgIC8qUmVhZCB0aGUgb3V0cHV0IGJsb2NrIGZyb20gdGhlIG91dHB1dCBGSUZPICovCiAgICAgZm9yIChjb3VudCA9IDBVOyBjb3VudCA8IDRVOyBjb3VudCsrKQogICAgIHsKICAgICAgIC8qIFJlYWQgdGhlIG91dHB1dCBibG9jayBmcm9tIHRoZSBvdXRwdXQgRklGTyBhbmQgcHV0IHRoZW0gaW4gdGVtcG9yYXJ5IGJ1ZmZlciB0aGVuIGdldCBDcnlwT3V0QnVmZiBmcm9tIHRlbXBvcmFyeSBidWZmZXIgKi8KLSAgICAgIHRlbXAgPSBoY3J5cC0+SW5zdGFuY2UtPkRPVVRSOworICAgICAgdGVtcFtjb3VudF0gPSBoY3J5cC0+SW5zdGFuY2UtPkRPVVRSOworICAgIH0KIAotICAgICAgKih1aW50MzJfdCAqKShoY3J5cC0+cENyeXBPdXRCdWZmUHRyICsgKGhjcnlwLT5DcnlwT3V0Q291bnQpKSA9IHRlbXA7CisgICAgY291bnQgPSAwVTsKKyAgICB3aGlsZSgoaGNyeXAtPkNyeXBPdXRDb3VudCA8ICgoaGNyeXAtPlNpemUgKyAzVSkvNFUpKSAmJiAoY291bnQ8NFUpKQorICAgIHsKKyAgICAgICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwT3V0QnVmZlB0ciArIGhjcnlwLT5DcnlwT3V0Q291bnQpID0gdGVtcFtjb3VudF07CiAgICAgICBoY3J5cC0+Q3J5cE91dENvdW50Kys7CisgICAgICBjb3VudCsrOwogICAgIH0KICAgfQogCkBAIC0yNjc1LDcgKzI3NDUsNyBAQAogICAqIEBwYXJhbSAgaGNyeXAgcG9pbnRlciB0byBhIENSWVBfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIENSWVAgbW9kdWxlCiAgICogQHBhcmFtICBpbnB1dGFkZHIgYWRkcmVzcyBvZiB0aGUgaW5wdXQgYnVmZmVyCi0gICogQHBhcmFtICBTaXplIHNpemUgb2YgdGhlIGlucHV0IGJ1ZmZlciwgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LgorICAqIEBwYXJhbSAgU2l6ZSBzaXplIG9mIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgaW4gd29yZHMsIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0CiAgICogQHBhcmFtICBvdXRwdXRhZGRyIGFkZHJlc3Mgb2YgdGhlIG91dHB1dCBidWZmZXIKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KQEAgLTI3MzQsNiArMjgwNCw0MyBAQAogfQogCiAvKioKKyAgKiBAYnJpZWYgIFNldCB0aGUgRE1BIGNvbmZpZ3VyYXRpb24gYW5kIHN0YXJ0IHRoZSBoZWFkZXIgRE1BIHRyYW5zZmVyCisgICogQHBhcmFtICBoY3J5cCBwb2ludGVyIHRvIGEgQ1JZUF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgQ1JZUCBtb2R1bGUKKyAgKiBAcGFyYW0gIGlucHV0YWRkciBhZGRyZXNzIG9mIHRoZSBpbnB1dCBidWZmZXIKKyAgKiBAcGFyYW0gIFNpemUgc2l6ZSBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIHdvcmRzLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNAorICAqIEByZXR2YWwgTm9uZQorICAqLworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIENSWVBfU2V0SGVhZGVyRE1BQ29uZmlnKENSWVBfSGFuZGxlVHlwZURlZiAqaGNyeXAsIHVpbnQzMl90IGlucHV0YWRkciwgdWludDE2X3QgU2l6ZSkKK3sKKyAgLyogU2V0IHRoZSBDUllQIERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLworICBoY3J5cC0+aGRtYWluLT5YZmVyQ3BsdENhbGxiYWNrID0gQ1JZUF9ETUFJbkNwbHQ7CisKKyAgLyogU2V0IHRoZSBETUEgaW5wdXQgZXJyb3IgY2FsbGJhY2sgKi8KKyAgaGNyeXAtPmhkbWFpbi0+WGZlckVycm9yQ2FsbGJhY2sgPSBDUllQX0RNQUVycm9yOworCisgIC8qIE1hcmsgdGhhdCBoZWFkZXIgaXMgZmVkIHRvIHRoZSBwZXJpcGhlcmFsIGluIERNQSBtb2RlICovCisgIGhjcnlwLT5QaGFzZSA9IENSWVBfUEhBU0VfSEVBREVSX0RNQV9GRUVEOworICAvKiBFbmFibGUgdGhlIERNQSBpbnB1dCBzdHJlYW0gKi8KKyAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaGNyeXAtPmhkbWFpbiwgaW5wdXRhZGRyLCAodWludDMyX3QpJmhjcnlwLT5JbnN0YW5jZS0+RElOUiwgU2l6ZSkgIT0gSEFMX09LKQorICB7CisgICAgLyogRE1BIGVycm9yIGNvZGUgZmllbGQgKi8KKyAgICBoY3J5cC0+RXJyb3JDb2RlIHw9IEhBTF9DUllQX0VSUk9SX0RNQTsKKyAgICBoY3J5cC0+U3RhdGUgPSBIQUxfQ1JZUF9TVEFURV9SRUFEWTsKKworICAgIC8qIFByb2Nlc3MgdW5sb2NrZWQgKi8KKyAgICBfX0hBTF9VTkxPQ0soaGNyeXApOworICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgLyogQ2FsbCBlcnJvciBjYWxsYmFjayAqLworICB9CisKKyAgLyogRW5hYmxlIElOIERNQSByZXF1ZXN0cyAqLworICBTRVRfQklUKGhjcnlwLT5JbnN0YW5jZS0+Q1IsIEFFU19DUl9ETUFJTkVOKTsKKworICByZXR1cm4gSEFMX09LOworfQorCisvKioKICAgKiBAYnJpZWYgIFByb2Nlc3MgRGF0YTogV3JpdGUgSW5wdXQgZGF0YSBpbiBwb2xsaW5nIG1vZGUgYW5kIHVzZWQgaW4gQUVTIGZ1bmN0aW9ucy4KICAgKiBAcGFyYW0gIGhjcnlwIHBvaW50ZXIgdG8gYSBDUllQX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBDUllQIG1vZHVsZQpAQCAtMzE2Miw2ICszMjY5LDEyIEBACiAgIHVpbnQzMl90IGxhc3R3b3Jkc2l6ZTsKICAgdWludDMyX3QgbnBibGI7CiAgIHVpbnQzMl90IERvS2V5SVZDb25maWcgPSAxVTsgLyogQnkgZGVmYXVsdCwgY2Fycnkgb3V0IHBlcmlwaGVyYWwgS2V5IGFuZCBJViBjb25maWd1cmF0aW9uICovCisgIHVpbnQzMl90IGhlYWRlcnNpemVfaW5fYnl0ZXM7CisgIHVpbnQzMl90IHRtcDsKKyAgdWludDMyX3QgbWFza1sxMl0gPSB7MHgwVSwgMHhGRjAwMDAwMFUsIDB4RkZGRjAwMDBVLCAweEZGRkZGRjAwVSwgIC8qIDMyLWJpdCBkYXRhIHR5cGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgMHgwVSwgMHgwMDAwRkYwMFUsIDB4MDAwMEZGRkZVLCAweEZGMDBGRkZGVSwgIC8qIDE2LWJpdCBkYXRhIHR5cGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgMHgwVSwgMHgwMDAwMDBGRlUsIDB4MDAwMEZGRkZVLCAweDAwRkZGRkZGVX07IC8qICA4LWJpdCBkYXRhIHR5cGUgKi8KKwogCiAjaWYgKFVTRV9IQUxfQ1JZUF9TVVNQRU5EX1JFU1VNRSA9PSAxVSkKICAgaWYgKChoY3J5cC0+UGhhc2UgPT0gQ1JZUF9QSEFTRV9IRUFERVJfU1VTUEVOREVEKSB8fCAoaGNyeXAtPlBoYXNlID09IENSWVBfUEhBU0VfUEFZTE9BRF9TVVNQRU5ERUQpKQpAQCAtMzE3MSw2ICszMjg0LDE3IEBACiAgIH0KICNlbmRpZiAvKiBVU0VfSEFMX0NSWVBfU1VTUEVORF9SRVNVTUUgKi8KIAorICAvKiBNYW5hZ2UgaGVhZGVyIHNpemUgZ2l2ZW4gaW4gYnl0ZXMgdG8gaGFuZGxlIGNhc2VzIHdoZXJlCisgICAgIGhlYWRlciBzaXplIGlzIG5vdCBhIG11bHRpcGxlIG9mIDQgYnl0ZXMgKi8KKyAgaWYgKGhjcnlwLT5Jbml0LkhlYWRlcldpZHRoVW5pdCA9PSBDUllQX0hFQURFUldJRFRIVU5JVF9XT1JEKQorICB7CisgICAgaGVhZGVyc2l6ZV9pbl9ieXRlcyA9IGhjcnlwLT5Jbml0LkhlYWRlclNpemUgKiA0VTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBoZWFkZXJzaXplX2luX2J5dGVzID0gaGNyeXAtPkluaXQuSGVhZGVyU2l6ZTsKKyAgfQorCiAgIGlmIChoY3J5cC0+SW5pdC5LZXlJVkNvbmZpZ1NraXAgPT0gQ1JZUF9LRVlJVkNPTkZJR19PTkNFKQogICB7CiAgICAgaWYgKGhjcnlwLT5LZXlJVkNvbmZpZyA9PSAxVSkKQEAgLTMyODQsNyArMzQwOCw3IEBACiAgICAgICAgIGhjcnlwLT5DcnlwSW5Db3VudCsrOwogICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgID0gKih1aW50MzJfdCAqKShoY3J5cC0+cENyeXBJbkJ1ZmZQdHIgKyBoY3J5cC0+Q3J5cEluQ291bnQpOwogICAgICAgICBoY3J5cC0+Q3J5cEluQ291bnQrKzsKLSAgICAgICAgaWYgKGhjcnlwLT5DcnlwSW5Db3VudCA9PSAgKGhjcnlwLT5TaXplIC8gNFUpKQorICAgICAgICBpZiAoKGhjcnlwLT5DcnlwSW5Db3VudCA9PSAgKGhjcnlwLT5TaXplIC8gNFUpKSAmJiAoKGhjcnlwLT5TaXplICUgMTZVKSA9PSAwVSkpICAKICAgICAgICAgewogICAgICAgICAgIC8qIENhbGwgSW5wdXQgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KICNpZiAoVVNFX0hBTF9DUllQX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKQEAgLTMzMzUsNDIgKzM0NTksNTggQEAKICAgICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSAweDBVOwogICAgICAgICAgIGxvb3Bjb3VudGVyKys7CiAgICAgICAgIH0KKyAgICAgICAgLyogQ2FsbCBJbnB1dCB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLworI2lmIChVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQorICAgICAgICAvKkNhbGwgcmVnaXN0ZXJlZCBJbnB1dCBjb21wbGV0ZSBjYWxsYmFjayovCisgICAgICAgIGhjcnlwLT5JbkNwbHRDYWxsYmFjayhoY3J5cCk7CisjZWxzZQorICAgICAgICAvKkNhbGwgbGVnYWN5IHdlYWsgSW5wdXQgY29tcGxldGUgY2FsbGJhY2sqLworICAgICAgICBIQUxfQ1JZUF9JbkNwbHRDYWxsYmFjayhoY3J5cCk7CisjZW5kaWYgLyogVVNFX0hBTF9DUllQX1JFR0lTVEVSX0NBTExCQUNLUyAqLyAgICAgICAgCiAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKChoY3J5cC0+SW5pdC5IZWFkZXJTaXplKSA8IDRVKQorICAgIC8qIEVudGVyIGhlYWRlciBkYXRhICovCisgICAgLyogQ2hlciBmaXJzdCB3aGV0aGVyIGhlYWRlciBsZW5ndGggaXMgc21hbGwgZW5vdWdoIHRvIGVudGVyIHRoZSBmdWxsIGhlYWRlciBpbiBvbmUgc2hvdCAqLworICAgIGVsc2UgaWYgKGhlYWRlcnNpemVfaW5fYnl0ZXMgPD0gMTZVKQogICAgIHsKLSAgICAgIGZvciAobG9vcGNvdW50ZXIgPSAwVTsgbG9vcGNvdW50ZXIgPCBoY3J5cC0+SW5pdC5IZWFkZXJTaXplIDsgbG9vcGNvdW50ZXIrKykKKyAgICAgIC8qIFdyaXRlIGhlYWRlciBkYXRhLCBwYWRkZWQgd2l0aCB6ZXJvcyBpZiBuZWVkIGJlICovCisgICAgICBmb3IgKGxvb3Bjb3VudGVyID0gMFU7IChsb29wY291bnRlciA8IChoZWFkZXJzaXplX2luX2J5dGVzIC8gNFUpKTsgbG9vcGNvdW50ZXIrKykKICAgICAgIHsKICAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gKih1aW50MzJfdCAqKShoY3J5cC0+SW5pdC5IZWFkZXIgKyBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KTsKICAgICAgICAgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCsrIDsKICAgICAgIH0KKyAgICAgIC8qIElmIHRoZSBoZWFkZXIgc2l6ZSBpcyBhIG11bHRpcGxlIG9mIHdvcmRzICovCisgICAgICBpZiAoKGhlYWRlcnNpemVfaW5fYnl0ZXMgJSA0VSkgPT0gMFUpCisgICAgICB7CisgICAgICAgIC8qIFBhZCB0aGUgZGF0YSB3aXRoIHplcm9zIHRvIGhhdmUgYSBjb21wbGV0ZSBibG9jayAqLworICAgICAgICB3aGlsZSAobG9vcGNvdW50ZXIgPCA0VSkKKyAgICAgICAgeworICAgICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiA9IDB4MFU7CisgICAgICAgICAgbG9vcGNvdW50ZXIrKzsKKyAgICAgICAgICBoY3J5cC0+Q3J5cEhlYWRlckNvdW50Kys7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogRW50ZXIgbGFzdCBieXRlcywgcGFkZGVkIHdpdGggemVyb3MgKi8KKyAgICAgICAgdG1wID0gICoodWludDMyX3QgKikoaGNyeXAtPkluaXQuSGVhZGVyICsgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCk7CisgICAgICAgIHRtcCAmPSBtYXNrWyhoY3J5cC0+SW5pdC5EYXRhVHlwZSAqIDJVKSArIChoZWFkZXJzaXplX2luX2J5dGVzICUgNFUpXTsKKyAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gdG1wOworICAgICAgICBsb29wY291bnRlcisrOworICAgICAgICBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KysgOworICAgICAgICAvKiBQYWQgdGhlIGRhdGEgd2l0aCB6ZXJvcyB0byBoYXZlIGEgY29tcGxldGUgYmxvY2sgKi8KICAgICAgIHdoaWxlIChsb29wY291bnRlciA8IDRVKQogICAgICAgewotICAgICAgICAvKiBwYWQgdGhlIGRhdGEgd2l0aCB6ZXJvcyB0byBoYXZlIGEgY29tcGxldGUgYmxvY2sgKi8KICAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gMHgwVTsKICAgICAgICAgbG9vcGNvdW50ZXIrKzsKKyAgICAgICAgICBoY3J5cC0+Q3J5cEhlYWRlckNvdW50Kys7CisgICAgICAgIH0KICAgICAgIH0KLSAgICAgIC8qIFNldCB0aGUgcGhhc2UgKi8KLSAgICAgIGhjcnlwLT5QaGFzZSA9IENSWVBfUEhBU0VfUFJPQ0VTUzsKLQotICAgICAgLyogU2VsZWN0IHBheWxvYWQgcGhhc2Ugb25jZSB0aGUgaGVhZGVyIHBoYXNlIGlzIHBlcmZvcm1lZCAqLwotICAgICAgQ1JZUF9TRVRfUEhBU0UoaGNyeXAsIENSWVBfUEhBU0VfUEFZTE9BRCk7Ci0KLSAgICAgIC8qIFNldCB0byAwIHRoZSBudW1iZXIgb2Ygbm9uLXZhbGlkIGJ5dGVzIHVzaW5nIE5QQkxCIHJlZ2lzdGVyKi8KLSAgICAgIE1PRElGWV9SRUcoaGNyeXAtPkluc3RhbmNlLT5DUiwgQUVTX0NSX05QQkxCLCAwVSk7Ci0KLSAgICAgIC8qIENhbGwgSW5wdXQgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KLSNpZiAoVVNFX0hBTF9DUllQX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKLSAgICAgIC8qQ2FsbCByZWdpc3RlcmVkIElucHV0IGNvbXBsZXRlIGNhbGxiYWNrKi8KLSAgICAgIGhjcnlwLT5JbkNwbHRDYWxsYmFjayhoY3J5cCk7Ci0jZWxzZQotICAgICAgLypDYWxsIGxlZ2FjeSB3ZWFrIElucHV0IGNvbXBsZXRlIGNhbGxiYWNrKi8KLSAgICAgIEhBTF9DUllQX0luQ3BsdENhbGxiYWNrKGhjcnlwKTsKLSNlbmRpZiAvKiBVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAvKiBXcml0ZSB0aGUgaW5wdXQgYmxvY2sgaW4gdGhlIElOIEZJRk8gKi8KKyAgICAgIC8qIFdyaXRlIHRoZSBmaXJzdCBpbnB1dCBoZWFkZXIgYmxvY2sgaW4gdGhlIElucHV0IEZJRk8sCisgICAgICAgICB0aGUgZm9sbG93aW5nIGhlYWRlciBkYXRhIHdpbGwgYmUgZmVkIGFmdGVyIGludGVycnVwdCBvY2N1cnJlbmNlICovCiAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgID0gKih1aW50MzJfdCAqKShoY3J5cC0+SW5pdC5IZWFkZXIgKyBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KTsKICAgICAgIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQrKzsKICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiAgPSAqKHVpbnQzMl90ICopKGhjcnlwLT5Jbml0LkhlYWRlciArIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQpOwpAQCAtMzQxNSw3ICszNTU1LDcgQEAKICAgICAgIGhjcnlwLT5DcnlwSW5Db3VudCsrOwogICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SICA9ICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwSW5CdWZmUHRyICsgaGNyeXAtPkNyeXBJbkNvdW50KTsKICAgICAgIGhjcnlwLT5DcnlwSW5Db3VudCsrOwotICAgICAgaWYgKGhjcnlwLT5DcnlwSW5Db3VudCA9PSAgKGhjcnlwLT5TaXplIC8gNFUpKQorICAgICAgaWYgKChoY3J5cC0+Q3J5cEluQ291bnQgPT0gIChoY3J5cC0+U2l6ZSAvIDRVKSkgJiYgKChoY3J5cC0+U2l6ZSAlIDE2VSkgPT0gMFUpKSAKICAgICAgIHsKICAgICAgICAgLyogQ2FsbCBJbnB1dCB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLwogI2lmIChVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQpAQCAtMzQ2Niw2ICszNjA2LDE0IEBACiAgICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiA9IDB4MFU7CiAgICAgICAgIGxvb3Bjb3VudGVyKys7CiAgICAgICB9CisgICAgICAvKiBDYWxsIElucHV0IHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrICovCisjaWYgKFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCisgICAgICAvKkNhbGwgcmVnaXN0ZXJlZCBJbnB1dCBjb21wbGV0ZSBjYWxsYmFjayovCisgICAgICBoY3J5cC0+SW5DcGx0Q2FsbGJhY2soaGNyeXApOworI2Vsc2UKKyAgICAgIC8qQ2FsbCBsZWdhY3kgd2VhayBJbnB1dCBjb21wbGV0ZSBjYWxsYmFjayovCisgICAgICBIQUxfQ1JZUF9JbkNwbHRDYWxsYmFjayhoY3J5cCk7CisjZW5kaWYgLyogVVNFX0hBTF9DUllQX1JFR0lTVEVSX0NBTExCQUNLUyAqLyAgICAgIAogICAgIH0KICAgfQogCkBAIC0zNDgyLDEyICszNjMwLDcgQEAKICAgKi8KIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBDUllQX0FFU0dDTV9Qcm9jZXNzX0RNQShDUllQX0hhbmRsZVR5cGVEZWYgKmhjcnlwKQogewotICBfX0lPIHVpbnQzMl90IGNvdW50OwotICB1aW50MTZfdCB3b3Jkc2l6ZSA9IGhjcnlwLT5TaXplIC8gNFUgOwotICB1aW50MzJfdCBpbmRleDsKLSAgdWludDMyX3QgbnBibGI7Ci0gIHVpbnQzMl90IGxhc3R3b3Jkc2l6ZTsKLSAgdWludDMyX3QgdGVtcFs0XTsgIC8qIFRlbXBvcmFyeSBDcnlwT3V0QnVmZiAqLworICB1aW50MzJfdCBjb3VudDsKICAgdWludDMyX3QgRG9LZXlJVkNvbmZpZyA9IDFVOyAvKiBCeSBkZWZhdWx0LCBjYXJyeSBvdXQgcGVyaXBoZXJhbCBLZXkgYW5kIElWIGNvbmZpZ3VyYXRpb24gKi8KIAogICBpZiAoaGNyeXAtPkluaXQuS2V5SVZDb25maWdTa2lwID09IENSWVBfS0VZSVZDT05GSUdfT05DRSkKQEAgLTM1NjYsMTIyICszNzA5LDE2IEBACiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KIAotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiogUGF5bG9hZCBwaGFzZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSAgICAvKiBTZXQgdGhlIHBoYXNlICovCi0gICAgaGNyeXAtPlBoYXNlID0gQ1JZUF9QSEFTRV9QUk9DRVNTOwotCi0gICAgLyogU2V0IHRvIDAgdGhlIG51bWJlciBvZiBub24tdmFsaWQgYnl0ZXMgdXNpbmcgTlBCTEIgcmVnaXN0ZXIqLwotICAgIE1PRElGWV9SRUcoaGNyeXAtPkluc3RhbmNlLT5DUiwgQUVTX0NSX05QQkxCLCAwVSk7Ci0KLSAgICAvKiBTZWxlY3QgcGF5bG9hZCBwaGFzZSBvbmNlIHRoZSBoZWFkZXIgcGhhc2UgaXMgcGVyZm9ybWVkICovCi0gICAgQ1JZUF9TRVRfUEhBU0UoaGNyeXAsIENSWVBfUEhBU0VfUEFZTE9BRCk7Ci0KKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBJbml0aWFsaXphdGlvbiBhbmQgaGVhZGVyIHBoYXNlcyBhbHJlYWR5IGRvbmUsIG9ubHkgZG8gcGF5bG9hZCBwaGFzZSAqLworICAgIGlmIChDUllQX0dDTUNDTV9TZXRQYXlsb2FkUGhhc2VfRE1BKGhjcnlwKSAhPSBIQUxfT0spCisgICAgeworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CiAgIH0gLyogaWYgKERvS2V5SVZDb25maWcgPT0gMVUpICovCiAKLSAgaWYgKGhjcnlwLT5TaXplID09IDBVKQotICB7Ci0gICAgLyogUHJvY2VzcyB1bkxvY2tlZCAqLwotICAgIF9fSEFMX1VOTE9DSyhoY3J5cCk7Ci0KLSAgICAvKiBDaGFuZ2UgdGhlIENSWVAgc3RhdGUgYW5kIHBoYXNlICovCi0gICAgaGNyeXAtPlN0YXRlID0gSEFMX0NSWVBfU1RBVEVfUkVBRFk7Ci0gIH0KLSAgZWxzZSBpZiAoaGNyeXAtPlNpemUgPj0gMTZVKQotICB7Ci0gICAgLypETUEgdHJhbnNmZXIgbXVzdCBub3QgaW5jbHVkZSB0aGUgbGFzdCBibG9jayBpbiBjYXNlIG9mIFNpemUgaXMgbm90ICUxNiAqLwotICAgIHdvcmRzaXplID0gd29yZHNpemUgLSAod29yZHNpemUgJSA0VSk7Ci0KLSAgICAvKkRNQSB0cmFuc2ZlciAqLwotICAgIENSWVBfU2V0RE1BQ29uZmlnKGhjcnlwLCAodWludDMyX3QpKGhjcnlwLT5wQ3J5cEluQnVmZlB0ciksIHdvcmRzaXplLCAodWludDMyX3QpKGhjcnlwLT5wQ3J5cE91dEJ1ZmZQdHIpKTsKLSAgfQotICBlbHNlIC8qIGxlbmd0aCBvZiBpbnB1dCBkYXRhIGlzIDwgMTYgKi8KLSAgewotICAgIC8qIENvbXB1dGUgdGhlIG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzIGluIGxhc3QgYmxvY2sgb2YgcGF5bG9hZCAqLwotICAgIG5wYmxiID0gMTZVIC0gKHVpbnQzMl90KWhjcnlwLT5TaXplOwotCi0gICAgLyogU2V0IE5wYmxiIGluIGNhc2Ugb2YgQUVTIEdDTSBwYXlsb2FkIGVuY3J5cHRpb24gdG8gZ2V0IHJpZ2h0IHRhZyovCi0gICAgaWYgKChoY3J5cC0+SW5zdGFuY2UtPkNSICYgQUVTX0NSX01PREUpID09IENSWVBfT1BFUkFUSU5HTU9ERV9FTkNSWVBUKQotICAgIHsKLSAgICAgIC8qIFNwZWNpZnkgdGhlIG51bWJlciBvZiBub24tdmFsaWQgYnl0ZXMgdXNpbmcgTlBCTEIgcmVnaXN0ZXIqLwotICAgICAgTU9ESUZZX1JFRyhoY3J5cC0+SW5zdGFuY2UtPkNSLCBBRVNfQ1JfTlBCTEIsIG5wYmxiIDw8IDIwVSk7Ci0gICAgfQotCi0gICAgLyogRW5hYmxlIENSWVAgdG8gc3RhcnQgdGhlIGZpbmFsIHBoYXNlICovCi0gICAgX19IQUxfQ1JZUF9FTkFCTEUoaGNyeXApOwotCi0gICAgLyogTnVtYmVyIG9mIHZhbGlkIHdvcmRzIChsYXN0d29yZHNpemUpIGluIGxhc3QgYmxvY2sgKi8KLSAgICBpZiAoKG5wYmxiICUgNFUpID09IDBVKQotICAgIHsKLSAgICAgIGxhc3R3b3Jkc2l6ZSA9ICgxNlUgLSBucGJsYikgLyA0VTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGxhc3R3b3Jkc2l6ZSA9ICgoMTZVIC0gbnBibGIpIC8gNFUpICsgMVU7Ci0gICAgfQotCi0gICAgLyogIGxhc3QgYmxvY2sgb3B0aW9uYWxseSBwYWQgdGhlIGRhdGEgd2l0aCB6ZXJvcyovCi0gICAgZm9yIChpbmRleCA9IDBVOyBpbmRleCA8IGxhc3R3b3Jkc2l6ZTsgaW5kZXggKyspCi0gICAgewotICAgICAgLyogV3JpdGUgdGhlIGxhc3QgSW5wdXQgYmxvY2sgaW4gdGhlIElOIEZJRk8gKi8KLSAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiAgPSAqKHVpbnQzMl90ICopKGhjcnlwLT5wQ3J5cEluQnVmZlB0ciArIGhjcnlwLT5DcnlwSW5Db3VudCk7Ci0gICAgICBoY3J5cC0+Q3J5cEluQ291bnQrKzsKLSAgICB9Ci0gICAgd2hpbGUgKGluZGV4IDwgNFUpCi0gICAgewotICAgICAgLyogcGFkIHRoZSBkYXRhIHdpdGggemVyb3MgdG8gaGF2ZSBhIGNvbXBsZXRlIGJsb2NrICovCi0gICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgID0gMFU7Ci0gICAgICBpbmRleCsrOwotICAgIH0KLSAgICAvKiBXYWl0IGZvciBDQ0YgZmxhZyB0byBiZSByYWlzZWQgKi8KLSAgICBjb3VudCA9IENSWVBfVElNRU9VVF9HQ01DQ01IRUFERVJQSEFTRTsKLSAgICBkbwotICAgIHsKLSAgICAgIGNvdW50LS0gOwotICAgICAgaWYgKGNvdW50ID09IDBVKQotICAgICAgewotICAgICAgICAvKiBEaXNhYmxlIHRoZSBDUllQIHBlcmlwaGVyYWwgY2xvY2sgKi8KLSAgICAgICAgX19IQUxfQ1JZUF9ESVNBQkxFKGhjcnlwKTsKLQotICAgICAgICAvKiBDaGFuZ2Ugc3RhdGUgKi8KLSAgICAgICAgaGNyeXAtPkVycm9yQ29kZSB8PSBIQUxfQ1JZUF9FUlJPUl9USU1FT1VUOwotICAgICAgICBoY3J5cC0+U3RhdGUgPSBIQUxfQ1JZUF9TVEFURV9SRUFEWTsKLQotICAgICAgICAvKiBQcm9jZXNzIHVubG9ja2VkICovCi0gICAgICAgIF9fSEFMX1VOTE9DSyhoY3J5cCk7Ci0jaWYgKFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCi0gICAgICAgIC8qQ2FsbCByZWdpc3RlcmVkIGVycm9yIGNhbGxiYWNrKi8KLSAgICAgICAgaGNyeXAtPkVycm9yQ2FsbGJhY2soaGNyeXApOwotI2Vsc2UKLSAgICAgICAgLypDYWxsIGxlZ2FjeSB3ZWFrIGVycm9yIGNhbGxiYWNrKi8KLSAgICAgICAgSEFMX0NSWVBfRXJyb3JDYWxsYmFjayhoY3J5cCk7Ci0jZW5kaWYgLyogVVNFX0hBTF9DUllQX1JFR0lTVEVSX0NBTExCQUNLUyAqLwotICAgICAgfQotICAgIH0KLSAgICB3aGlsZSAoSEFMX0lTX0JJVF9DTFIoaGNyeXAtPkluc3RhbmNlLT5TUiwgQUVTX1NSX0NDRikpOwotCi0gICAgLyogQ2xlYXIgQ0NGIEZsYWcgKi8KLSAgICBfX0hBTF9DUllQX0NMRUFSX0ZMQUcoaGNyeXAsIENSWVBfQ0NGX0NMRUFSKTsKLQotICAgIC8qUmVhZCB0aGUgb3V0cHV0IGJsb2NrIGZyb20gdGhlIG91dHB1dCBGSUZPICovCi0gICAgZm9yIChpbmRleCA9IDBVOyBpbmRleCA8IDRVOyBpbmRleCsrKQotICAgIHsKLSAgICAgIC8qIFJlYWQgdGhlIG91dHB1dCBibG9jayBmcm9tIHRoZSBvdXRwdXQgRklGTyBhbmQgcHV0IHRoZW0gaW4gdGVtcG9yYXJ5IGJ1ZmZlciB0aGVuIGdldCBDcnlwT3V0QnVmZiBmcm9tIHRlbXBvcmFyeSBidWZmZXIgKi8KLSAgICAgIHRlbXBbaW5kZXhdID0gaGNyeXAtPkluc3RhbmNlLT5ET1VUUjsKLSAgICB9Ci0gICAgZm9yIChpbmRleCA9IDBVOyBpbmRleCA8IGxhc3R3b3Jkc2l6ZTsgaW5kZXgrKykKLSAgICB7Ci0gICAgICAqKHVpbnQzMl90ICopKGhjcnlwLT5wQ3J5cE91dEJ1ZmZQdHIgKyBoY3J5cC0+Q3J5cE91dENvdW50KSA9IHRlbXBbaW5kZXhdOwotICAgICAgaGNyeXAtPkNyeXBPdXRDb3VudCsrOwotICAgIH0KLQotICAgIC8qIENoYW5nZSB0aGUgQ1JZUCBzdGF0ZSB0byByZWFkeSAqLwotICAgIGhjcnlwLT5TdGF0ZSA9IEhBTF9DUllQX1NUQVRFX1JFQURZOwotCi0gICAgLyogUHJvY2VzcyB1bmxvY2tlZCAqLwotICAgIF9fSEFMX1VOTE9DSyhoY3J5cCk7Ci0gIH0KLQogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC00MDc1LDYgKzQxMTIsMTQgQEAKICAgICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSAweDBVOwogICAgICAgICAgIGxvb3Bjb3VudGVyKys7CiAgICAgICAgIH0KKyAgICAgICAgLyogQ2FsbCBJbnB1dCB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLworI2lmIChVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQorICAgICAgICAvKkNhbGwgcmVnaXN0ZXJlZCBJbnB1dCBjb21wbGV0ZSBjYWxsYmFjayovCisgICAgICAgIGhjcnlwLT5JbkNwbHRDYWxsYmFjayhoY3J5cCk7CisjZWxzZQorICAgICAgICAvKkNhbGwgbGVnYWN5IHdlYWsgSW5wdXQgY29tcGxldGUgY2FsbGJhY2sqLworICAgICAgICBIQUxfQ1JZUF9JbkNwbHRDYWxsYmFjayhoY3J5cCk7CisjZW5kaWYgLyogVVNFX0hBTF9DUllQX1JFR0lTVEVSX0NBTExCQUNLUyAqLyAgICAgICAgCiAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKChoY3J5cC0+SW5pdC5IZWFkZXJTaXplKSA8IDRVKSAvKkhlYWRlclNpemUgPCA0ICovCkBAIC00MTgwLDYgKzQyMjUsMTQgQEAKICAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gMHgwVTsKICAgICAgICAgbG9vcGNvdW50ZXIrKzsKICAgICAgIH0KKyAgICAgIC8qIENhbGwgSW5wdXQgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KKyNpZiAoVVNFX0hBTF9DUllQX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKKyAgICAgIC8qQ2FsbCByZWdpc3RlcmVkIElucHV0IGNvbXBsZXRlIGNhbGxiYWNrKi8KKyAgICAgIGhjcnlwLT5JbkNwbHRDYWxsYmFjayhoY3J5cCk7CisjZWxzZQorICAgICAgLypDYWxsIGxlZ2FjeSB3ZWFrIElucHV0IGNvbXBsZXRlIGNhbGxiYWNrKi8KKyAgICAgIEhBTF9DUllQX0luQ3BsdENhbGxiYWNrKGhjcnlwKTsKKyNlbmRpZiAvKiBVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTICovICAgICAgCiAgICAgfQogICB9CiAKQEAgLTQxOTYsMTIgKzQyNDksNyBAQAogICAqLwogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIENSWVBfQUVTQ0NNX1Byb2Nlc3NfRE1BKENSWVBfSGFuZGxlVHlwZURlZiAqaGNyeXApCiB7Ci0gIF9fSU8gdWludDMyX3QgY291bnQgICAgPSAwVTsKLSAgdWludDE2X3Qgd29yZHNpemUgPSBoY3J5cC0+U2l6ZSAvIDRVIDsKLSAgdWludDMyX3QgaW5kZXg7Ci0gIHVpbnQzMl90IG5wYmxiOwotICB1aW50MzJfdCBsYXN0d29yZHNpemU7Ci0gIHVpbnQzMl90IHRlbXBbNF07ICAvKiBUZW1wb3JhcnkgQ3J5cE91dEJ1ZmYgKi8KKyAgdWludDMyX3QgY291bnQ7CiAgIHVpbnQzMl90IERvS2V5SVZDb25maWcgPSAxVTsgLyogQnkgZGVmYXVsdCwgY2Fycnkgb3V0IHBlcmlwaGVyYWwgS2V5IGFuZCBJViBjb25maWd1cmF0aW9uICovCiAKICAgaWYgKGhjcnlwLT5Jbml0LktleUlWQ29uZmlnU2tpcCA9PSBDUllQX0tFWUlWQ09ORklHX09OQ0UpCkBAIC00MjgyLDExOSArNDMzMCwxNiBAQAogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CiAKLSAgICAvKioqKioqKioqKioqKioqKioqKiogUGF5bG9hZCBwaGFzZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotICAgIC8qIFNldCB0aGUgcGhhc2UgKi8KLSAgICBoY3J5cC0+UGhhc2UgPSBDUllQX1BIQVNFX1BST0NFU1M7Ci0KLSAgICAvKiBTZXQgdG8gMCB0aGUgbnVtYmVyIG9mIG5vbi12YWxpZCBieXRlcyB1c2luZyBOUEJMQiByZWdpc3RlciovCi0gICAgTU9ESUZZX1JFRyhoY3J5cC0+SW5zdGFuY2UtPkNSLCBBRVNfQ1JfTlBCTEIsIDBVKTsKLQotICAgIC8qIFNlbGVjdCBwYXlsb2FkIHBoYXNlIG9uY2UgdGhlIGhlYWRlciBwaGFzZSBpcyBwZXJmb3JtZWQgKi8KLSAgICBNT0RJRllfUkVHKGhjcnlwLT5JbnN0YW5jZS0+Q1IsIEFFU19DUl9HQ01QSCwgQ1JZUF9QSEFTRV9QQVlMT0FEKTsKLQorICB9CisgIGVsc2UKKyAgeworICAgIC8qIEluaXRpYWxpemF0aW9uIGFuZCBoZWFkZXIgcGhhc2VzIGFscmVhZHkgZG9uZSwgb25seSBkbyBwYXlsb2FkIHBoYXNlICovCisgICAgaWYgKENSWVBfR0NNQ0NNX1NldFBheWxvYWRQaGFzZV9ETUEoaGNyeXApICE9IEhBTF9PSykKKyAgICB7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KICAgfSAvKiBpZiAoRG9LZXlJVkNvbmZpZyA9PSAxVSkgKi8KIAotICBpZiAoaGNyeXAtPlNpemUgPT0gMFUpCi0gIHsKLSAgICAvKiBQcm9jZXNzIHVuTG9ja2VkICovCi0gICAgX19IQUxfVU5MT0NLKGhjcnlwKTsKLQotICAgIC8qIENoYW5nZSB0aGUgQ1JZUCBzdGF0ZSBhbmQgcGhhc2UgKi8KLSAgICBoY3J5cC0+U3RhdGUgPSBIQUxfQ1JZUF9TVEFURV9SRUFEWTsKLSAgfQotICBlbHNlIGlmIChoY3J5cC0+U2l6ZSA+PSAxNlUpCi0gIHsKLSAgICAvKkRNQSB0cmFuc2ZlciBtdXN0IG5vdCBpbmNsdWRlIHRoZSBsYXN0IGJsb2NrIGluIGNhc2Ugb2YgU2l6ZSBpcyBub3QgJTE2ICovCi0gICAgd29yZHNpemUgPSB3b3Jkc2l6ZSAtICh3b3Jkc2l6ZSAlIDRVKTsKLQotICAgIC8qRE1BIHRyYW5zZmVyICovCi0gICAgQ1JZUF9TZXRETUFDb25maWcoaGNyeXAsICh1aW50MzJfdCkoaGNyeXAtPnBDcnlwSW5CdWZmUHRyKSwgd29yZHNpemUsICh1aW50MzJfdCkoaGNyeXAtPnBDcnlwT3V0QnVmZlB0cikpOwotICB9Ci0gIGVsc2UgLyogbGVuZ3RoIG9mIGlucHV0IGRhdGEgaXMgPCAxNiAqLwotICB7Ci0gICAgLyogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIHBhZGRpbmcgYnl0ZXMgaW4gbGFzdCBibG9jayBvZiBwYXlsb2FkICovCi0gICAgbnBibGIgPSAxNlUgLSAodWludDMyX3QpaGNyeXAtPlNpemU7Ci0KLSAgICAvKiBTZXQgTnBibGIgaW4gY2FzZSBvZiBBRVMgQ0NNIHBheWxvYWQgZGVjcnlwdGlvbiB0byBnZXQgcmlnaHQgdGFnKi8KLSAgICBpZiAoKGhjcnlwLT5JbnN0YW5jZS0+Q1IgJiBBRVNfQ1JfTU9ERSkgPT0gQ1JZUF9PUEVSQVRJTkdNT0RFX0RFQ1JZUFQpCi0gICAgewotICAgICAgLyogU3BlY2lmeSB0aGUgbnVtYmVyIG9mIG5vbi12YWxpZCBieXRlcyB1c2luZyBOUEJMQiByZWdpc3RlciovCi0gICAgICBNT0RJRllfUkVHKGhjcnlwLT5JbnN0YW5jZS0+Q1IsIEFFU19DUl9OUEJMQiwgbnBibGIgPDwgMjBVKTsKLSAgICB9Ci0KLSAgICAvKiBOdW1iZXIgb2YgdmFsaWQgd29yZHMgKGxhc3R3b3Jkc2l6ZSkgaW4gbGFzdCBibG9jayAqLwotICAgIGlmICgobnBibGIgJSA0VSkgPT0gMFUpCi0gICAgewotICAgICAgbGFzdHdvcmRzaXplID0gKDE2VSAtIG5wYmxiKSAvIDRVOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgbGFzdHdvcmRzaXplID0gKCgxNlUgLSBucGJsYikgLyA0VSkgKyAxVTsKLSAgICB9Ci0KLSAgICAvKiAgbGFzdCBibG9jayBvcHRpb25hbGx5IHBhZCB0aGUgZGF0YSB3aXRoIHplcm9zKi8KLSAgICBmb3IgKGluZGV4ID0gMFU7IGluZGV4IDwgbGFzdHdvcmRzaXplOyBpbmRleCArKykKLSAgICB7Ci0gICAgICAvKiBXcml0ZSB0aGUgbGFzdCBJbnB1dCBibG9jayBpbiB0aGUgSU4gRklGTyAqLwotICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SICA9ICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwSW5CdWZmUHRyICsgaGNyeXAtPkNyeXBJbkNvdW50KTsKLSAgICAgIGhjcnlwLT5DcnlwSW5Db3VudCsrOwotICAgIH0KLSAgICB3aGlsZSAoaW5kZXggPCA0VSkKLSAgICB7Ci0gICAgICAvKiBwYWQgdGhlIGRhdGEgd2l0aCB6ZXJvcyB0byBoYXZlIGEgY29tcGxldGUgYmxvY2sgKi8KLSAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiAgPSAwVTsKLSAgICAgIGluZGV4Kys7Ci0gICAgfQotICAgIC8qIFdhaXQgZm9yIENDRiBmbGFnIHRvIGJlIHJhaXNlZCAqLwotICAgIGNvdW50ID0gQ1JZUF9USU1FT1VUX0dDTUNDTUhFQURFUlBIQVNFOwotICAgIGRvCi0gICAgewotICAgICAgY291bnQtLSA7Ci0gICAgICBpZiAoY291bnQgPT0gMFUpCi0gICAgICB7Ci0gICAgICAgIC8qIERpc2FibGUgdGhlIENSWVAgcGVyaXBoZXJhbCBjbG9jayAqLwotICAgICAgICBfX0hBTF9DUllQX0RJU0FCTEUoaGNyeXApOwotCi0gICAgICAgIC8qIENoYW5nZSBzdGF0ZSAqLwotICAgICAgICBoY3J5cC0+RXJyb3JDb2RlIHw9IEhBTF9DUllQX0VSUk9SX1RJTUVPVVQ7Ci0gICAgICAgIGhjcnlwLT5TdGF0ZSA9IEhBTF9DUllQX1NUQVRFX1JFQURZOwotCi0gICAgICAgIC8qIFByb2Nlc3MgdW5sb2NrZWQgKi8KLSAgICAgICAgX19IQUxfVU5MT0NLKGhjcnlwKTsKLSNpZiAoVVNFX0hBTF9DUllQX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKLSAgICAgICAgLypDYWxsIHJlZ2lzdGVyZWQgZXJyb3IgY2FsbGJhY2sqLwotICAgICAgICBoY3J5cC0+RXJyb3JDYWxsYmFjayhoY3J5cCk7Ci0jZWxzZQotICAgICAgICAvKkNhbGwgbGVnYWN5IHdlYWsgZXJyb3IgY2FsbGJhY2sqLwotICAgICAgICBIQUxfQ1JZUF9FcnJvckNhbGxiYWNrKGhjcnlwKTsKLSNlbmRpZiAvKiBVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTICovCi0gICAgICB9Ci0gICAgfQotICAgIHdoaWxlIChIQUxfSVNfQklUX0NMUihoY3J5cC0+SW5zdGFuY2UtPlNSLCBBRVNfU1JfQ0NGKSk7Ci0KLSAgICAvKiBDbGVhciBDQ0YgRmxhZyAqLwotICAgIF9fSEFMX0NSWVBfQ0xFQVJfRkxBRyhoY3J5cCwgQ1JZUF9DQ0ZfQ0xFQVIpOwotCi0gICAgLypSZWFkIHRoZSBvdXRwdXQgYmxvY2sgZnJvbSB0aGUgb3V0cHV0IEZJRk8gKi8KLSAgICBmb3IgKGluZGV4ID0gMFU7IGluZGV4IDwgNFU7IGluZGV4KyspCi0gICAgewotICAgICAgLyogUmVhZCB0aGUgb3V0cHV0IGJsb2NrIGZyb20gdGhlIG91dHB1dCBGSUZPIGFuZCBwdXQgdGhlbSBpbiB0ZW1wb3JhcnkgYnVmZmVyIHRoZW4gZ2V0IENyeXBPdXRCdWZmIGZyb20gdGVtcG9yYXJ5IGJ1ZmZlciAqLwotICAgICAgdGVtcFtpbmRleF0gPSBoY3J5cC0+SW5zdGFuY2UtPkRPVVRSOwotICAgIH0KLSAgICBmb3IgKGluZGV4ID0gMFU7IGluZGV4IDwgbGFzdHdvcmRzaXplOyBpbmRleCsrKQotICAgIHsKLSAgICAgICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwT3V0QnVmZlB0ciArIGhjcnlwLT5DcnlwT3V0Q291bnQpID0gdGVtcFtpbmRleF07Ci0gICAgICBoY3J5cC0+Q3J5cE91dENvdW50Kys7Ci0gICAgfQotCi0gICAgLyogQ2hhbmdlIHRoZSBDUllQIHN0YXRlIHRvIHJlYWR5ICovCi0gICAgaGNyeXAtPlN0YXRlID0gSEFMX0NSWVBfU1RBVEVfUkVBRFk7Ci0KLSAgICAvKiBQcm9jZXNzIHVubG9ja2VkICovCi0gICAgX19IQUxfVU5MT0NLKGhjcnlwKTsKLSAgfQotCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTQ0OTMsOSArNDQzOCw5IEBACiAgICAgaGNyeXAtPkNyeXBJbkNvdW50Kys7CiAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SICA9ICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwSW5CdWZmUHRyICsgaGNyeXAtPkNyeXBJbkNvdW50KTsKICAgICBoY3J5cC0+Q3J5cEluQ291bnQrKzsKLSAgICBpZiAoKGhjcnlwLT5DcnlwSW5Db3VudCA9PSAgaGNyeXAtPlNpemUpICYmIChoY3J5cC0+SW5pdC5BbGdvcml0aG0gPT0gQ1JZUF9BRVNfR0NNX0dNQUMpKQorICAgIGlmICgoaGNyeXAtPkNyeXBJbkNvdW50ID09ICAoaGNyeXAtPlNpemUgLyA0VSkpICYmICgoaGNyeXAtPlNpemUgJSAxNlUpID09IDBVKSkgIAogICAgIHsKLSAgICAgIC8qIENhbGwgb3V0cHV0IHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrICovCisgICAgICAvKiBDYWxsIGlucHV0IHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrICovCiAjaWYgKFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCiAgICAgICAvKkNhbGwgcmVnaXN0ZXJlZCBJbnB1dCBjb21wbGV0ZSBjYWxsYmFjayovCiAgICAgICBoY3J5cC0+SW5DcGx0Q2FsbGJhY2soaGNyeXApOwpAQCAtNDU0MSwxMSArNDQ4NiwxNTIgQEAKICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiA9IDB4MFU7CiAgICAgICBsb29wY291bnRlcisrOwogICAgIH0KKyAgICAgIC8qIENhbGwgaW5wdXQgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KKyNpZiAoVVNFX0hBTF9DUllQX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKKyAgICAgIC8qQ2FsbCByZWdpc3RlcmVkIElucHV0IGNvbXBsZXRlIGNhbGxiYWNrKi8KKyAgICAgIGhjcnlwLT5JbkNwbHRDYWxsYmFjayhoY3J5cCk7CisjZWxzZQorICAgICAgLypDYWxsIGxlZ2FjeSB3ZWFrIElucHV0IGNvbXBsZXRlIGNhbGxiYWNrKi8KKyAgICAgIEhBTF9DUllQX0luQ3BsdENhbGxiYWNrKGhjcnlwKTsKKyNlbmRpZiAvKiBVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTICovICAgIAogICB9CiB9CiAKIAogLyoqCisgICogQGJyaWVmICBTZXRzIHRoZSBwYXlsb2FkIHBoYXNlIGluIERNQSBtb2RlCisgICogQHBhcmFtICBoY3J5cCBwb2ludGVyIHRvIGEgQ1JZUF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgQ1JZUCBtb2R1bGUKKyAgKiBAcmV0dmFsIHN0YXRlCisgICovCitzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgQ1JZUF9HQ01DQ01fU2V0UGF5bG9hZFBoYXNlX0RNQShDUllQX0hhbmRsZVR5cGVEZWYgKmhjcnlwKQoreworICB1aW50MTZfdCB3b3Jkc2l6ZSA9IGhjcnlwLT5TaXplIC8gNFUgOworICB1aW50MzJfdCBpbmRleDsKKyAgdWludDMyX3QgbnBibGI7CisgIHVpbnQzMl90IGxhc3R3b3Jkc2l6ZTsKKyAgdWludDMyX3QgdGVtcFs0XTsgIC8qIFRlbXBvcmFyeSBDcnlwT3V0QnVmZiAqLworICB1aW50MzJfdCBjb3VudDsKKyAgdWludDMyX3QgcmVnOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKiogUGF5bG9hZCBwaGFzZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIGlmIChoY3J5cC0+U2l6ZSA9PSAwVSkKKyAgeworICAgIC8qIFByb2Nlc3MgdW5Mb2NrZWQgKi8KKyAgICBfX0hBTF9VTkxPQ0soaGNyeXApOworCisgICAgLyogQ2hhbmdlIHRoZSBDUllQIHN0YXRlIGFuZCBwaGFzZSAqLworICAgIGhjcnlwLT5TdGF0ZSA9IEhBTF9DUllQX1NUQVRFX1JFQURZOworICB9CisgIGVsc2UgaWYgKGhjcnlwLT5TaXplID49IDE2VSkKKyAgeworICAgIC8qRE1BIHRyYW5zZmVyIG11c3Qgbm90IGluY2x1ZGUgdGhlIGxhc3QgYmxvY2sgaW4gY2FzZSBvZiBTaXplIGlzIG5vdCAlMTYgKi8KKyAgICB3b3Jkc2l6ZSA9IHdvcmRzaXplIC0gKHdvcmRzaXplICUgNFUpOworCisgICAgLypETUEgdHJhbnNmZXIgKi8KKyAgICBDUllQX1NldERNQUNvbmZpZyhoY3J5cCwgKHVpbnQzMl90KShoY3J5cC0+cENyeXBJbkJ1ZmZQdHIpLCB3b3Jkc2l6ZSwgKHVpbnQzMl90KShoY3J5cC0+cENyeXBPdXRCdWZmUHRyKSk7CisgIH0KKyAgZWxzZSAvKiBsZW5ndGggb2YgaW5wdXQgZGF0YSBpcyA8IDE2ICovCisgIHsKKyAgICAvKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgcGFkZGluZyBieXRlcyBpbiBsYXN0IGJsb2NrIG9mIHBheWxvYWQgKi8KKyAgICBucGJsYiA9IDE2VSAtICh1aW50MzJfdCloY3J5cC0+U2l6ZTsKKworICAgIC8qIFNldCBOcGJsYiBpbiBjYXNlIG9mIEFFUyBHQ00gcGF5bG9hZCBlbmNyeXB0aW9uIG9yIEFFUyBDQ00gcGF5bG9hZCBkZWNyeXB0aW9uIHRvIGdldCByaWdodCB0YWcqLworICAgIHJlZyA9IGhjcnlwLT5JbnN0YW5jZS0+Q1IgJiAoQUVTX0NSX0NITU9EfEFFU19DUl9NT0RFKTsKKyAgICBpZiAoKHJlZyA9PSAoQ1JZUF9BRVNfR0NNX0dNQUN8Q1JZUF9PUEVSQVRJTkdNT0RFX0VOQ1JZUFQpKSB8fFwKKyAgICAgICAgKHJlZyA9PSAoQ1JZUF9BRVNfQ0NNfENSWVBfT1BFUkFUSU5HTU9ERV9ERUNSWVBUKSkpCisgICAgeworICAgICAgLyogU3BlY2lmeSB0aGUgbnVtYmVyIG9mIG5vbi12YWxpZCBieXRlcyB1c2luZyBOUEJMQiByZWdpc3RlciovCisgICAgICBNT0RJRllfUkVHKGhjcnlwLT5JbnN0YW5jZS0+Q1IsIEFFU19DUl9OUEJMQiwgbnBibGIgPDwgMjBVKTsKKyAgICB9CisKKyAgICAvKiBOdW1iZXIgb2YgdmFsaWQgd29yZHMgKGxhc3R3b3Jkc2l6ZSkgaW4gbGFzdCBibG9jayAqLworICAgIGlmICgobnBibGIgJSA0VSkgPT0gMFUpCisgICAgeworICAgICAgbGFzdHdvcmRzaXplID0gKDE2VSAtIG5wYmxiKSAvIDRVOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgbGFzdHdvcmRzaXplID0gKCgxNlUgLSBucGJsYikgLyA0VSkgKyAxVTsKKyAgICB9CisKKyAgICAvKiAgbGFzdCBibG9jayBvcHRpb25hbGx5IHBhZCB0aGUgZGF0YSB3aXRoIHplcm9zKi8KKyAgICBmb3IgKGluZGV4ID0gMFU7IGluZGV4IDwgbGFzdHdvcmRzaXplOyBpbmRleCArKykKKyAgICB7CisgICAgICAvKiBXcml0ZSB0aGUgbGFzdCBJbnB1dCBibG9jayBpbiB0aGUgSU4gRklGTyAqLworICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SICA9ICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwSW5CdWZmUHRyICsgaGNyeXAtPkNyeXBJbkNvdW50KTsKKyAgICAgIGhjcnlwLT5DcnlwSW5Db3VudCsrOworICAgIH0KKyAgICB3aGlsZSAoaW5kZXggPCA0VSkKKyAgICB7CisgICAgICAvKiBwYWQgdGhlIGRhdGEgd2l0aCB6ZXJvcyB0byBoYXZlIGEgY29tcGxldGUgYmxvY2sgKi8KKyAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiAgPSAwVTsKKyAgICAgIGluZGV4Kys7CisgICAgfQorICAgIC8qIENhbGwgdGhlIGlucHV0IGRhdGEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KKyNpZiAoVVNFX0hBTF9DUllQX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKKyAgICAvKkNhbGwgcmVnaXN0ZXJlZCBJbnB1dCBjb21wbGV0ZSBjYWxsYmFjayovCisgICAgaGNyeXAtPkluQ3BsdENhbGxiYWNrKGhjcnlwKTsKKyNlbHNlCisgICAgLypDYWxsIGxlZ2FjeSB3ZWFrIElucHV0IGNvbXBsZXRlIGNhbGxiYWNrKi8KKyAgICBIQUxfQ1JZUF9JbkNwbHRDYWxsYmFjayhoY3J5cCk7CisjZW5kaWYgLyogVVNFX0hBTF9DUllQX1JFR0lTVEVSX0NBTExCQUNLUyAqLyAgICAKKyAgICAvKiBXYWl0IGZvciBDQ0YgZmxhZyB0byBiZSByYWlzZWQgKi8KKyAgICBjb3VudCA9IENSWVBfVElNRU9VVF9HQ01DQ01IRUFERVJQSEFTRTsKKyAgICBkbworICAgIHsKKyAgICAgIGNvdW50LS0gOworICAgICAgaWYgKGNvdW50ID09IDBVKQorICAgICAgeworICAgICAgICAvKiBEaXNhYmxlIHRoZSBDUllQIHBlcmlwaGVyYWwgY2xvY2sgKi8KKyAgICAgICAgX19IQUxfQ1JZUF9ESVNBQkxFKGhjcnlwKTsKKworICAgICAgICAvKiBDaGFuZ2Ugc3RhdGUgKi8KKyAgICAgICAgaGNyeXAtPkVycm9yQ29kZSB8PSBIQUxfQ1JZUF9FUlJPUl9USU1FT1VUOworICAgICAgICBoY3J5cC0+U3RhdGUgPSBIQUxfQ1JZUF9TVEFURV9SRUFEWTsKKworICAgICAgICAvKiBQcm9jZXNzIHVubG9ja2VkICovCisgICAgICAgIF9fSEFMX1VOTE9DSyhoY3J5cCk7CisgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICB9CisgICAgfQorICAgIHdoaWxlIChIQUxfSVNfQklUX0NMUihoY3J5cC0+SW5zdGFuY2UtPlNSLCBBRVNfU1JfQ0NGKSk7CisKKyAgICAvKiBDbGVhciBDQ0YgRmxhZyAqLworICAgIF9fSEFMX0NSWVBfQ0xFQVJfRkxBRyhoY3J5cCwgQ1JZUF9DQ0ZfQ0xFQVIpOworCisgICAgLypSZWFkIHRoZSBvdXRwdXQgYmxvY2sgZnJvbSB0aGUgb3V0cHV0IEZJRk8gKi8KKyAgICBmb3IgKGluZGV4ID0gMFU7IGluZGV4IDwgNFU7IGluZGV4KyspCisgICAgeworICAgICAgLyogUmVhZCB0aGUgb3V0cHV0IGJsb2NrIGZyb20gdGhlIG91dHB1dCBGSUZPIGFuZCBwdXQgdGhlbSBpbiB0ZW1wb3JhcnkgYnVmZmVyIHRoZW4gZ2V0IENyeXBPdXRCdWZmIGZyb20gdGVtcG9yYXJ5IGJ1ZmZlciAqLworICAgICAgdGVtcFtpbmRleF0gPSBoY3J5cC0+SW5zdGFuY2UtPkRPVVRSOworICAgIH0KKyAgICBmb3IgKGluZGV4ID0gMFU7IGluZGV4IDwgbGFzdHdvcmRzaXplOyBpbmRleCsrKQorICAgIHsKKyAgICAgICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwT3V0QnVmZlB0ciArIGhjcnlwLT5DcnlwT3V0Q291bnQpID0gdGVtcFtpbmRleF07CisgICAgICBoY3J5cC0+Q3J5cE91dENvdW50Kys7CisgICAgfQorCisgICAgLyogQ2hhbmdlIHRoZSBDUllQIHN0YXRlIHRvIHJlYWR5ICovCisgICAgaGNyeXAtPlN0YXRlID0gSEFMX0NSWVBfU1RBVEVfUkVBRFk7CisKKyAgICAvKiBQcm9jZXNzIHVubG9ja2VkICovCisgICAgX19IQUxfVU5MT0NLKGhjcnlwKTsKKworICAgICAgLyogQ2FsbCBPdXRwdXQgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KKyNpZiAoVVNFX0hBTF9DUllQX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKKyAgICAgIC8qQ2FsbCByZWdpc3RlcmVkIE91dHB1dCBjb21wbGV0ZSBjYWxsYmFjayovCisgICAgICBoY3J5cC0+T3V0Q3BsdENhbGxiYWNrKGhjcnlwKTsKKyNlbHNlCisgICAgICAvKkNhbGwgbGVnYWN5IHdlYWsgT3V0cHV0IGNvbXBsZXRlIGNhbGxiYWNrKi8KKyAgICAgIEhBTF9DUllQX091dENwbHRDYWxsYmFjayhoY3J5cCk7CisjZW5kaWYgLyogVVNFX0hBTF9DUllQX1JFR0lTVEVSX0NBTExCQUNLUyAqLyAgICAKKyAgfQorCisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgogICAqIEBicmllZiAgU2V0cyB0aGUgaGVhZGVyIHBoYXNlIGluIHBvbGxpbmcgbW9kZQogICAqIEBwYXJhbSAgaGNyeXAgcG9pbnRlciB0byBhIENSWVBfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIENSWVAgbW9kdWxlKEhlYWRlciAmIEhlYWRlclNpemUpCkBAIC00NTU3LDcgKzQ2NDMsOSBAQAogICB1aW50MzJfdCBsb29wY291bnRlcjsKICAgdWludDMyX3Qgc2l6ZV9pbl9ieXRlczsKICAgdWludDMyX3QgdG1wOwotICB1aW50MzJfdCBtYXNrWzRdID0gezB4MFUsIDB4MEZGVSwgMHgwRkZGRlUsIDB4MEZGRkZGRlV9OworICB1aW50MzJfdCBtYXNrWzEyXSA9IHsweDBVLCAweEZGMDAwMDAwVSwgMHhGRkZGMDAwMFUsIDB4RkZGRkZGMDBVLCAgLyogMzItYml0IGRhdGEgdHlwZSAqLworICAgICAgICAgICAgICAgICAgICAgICAweDBVLCAweDAwMDBGRjAwVSwgMHgwMDAwRkZGRlUsIDB4RkYwMEZGRkZVLCAgLyogMTYtYml0IGRhdGEgdHlwZSAqLworICAgICAgICAgICAgICAgICAgICAgICAweDBVLCAweDAwMDAwMEZGVSwgMHgwMDAwRkZGRlUsIDB4MDBGRkZGRkZVfTsgLyogIDgtYml0IGRhdGEgdHlwZSAqLwogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBIZWFkZXIgcGhhc2UgZm9yIEdDTS9HTUFDIG9yIENDTSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIGlmIChoY3J5cC0+SW5pdC5IZWFkZXJXaWR0aFVuaXQgPT0gQ1JZUF9IRUFERVJXSURUSFVOSVRfV09SRCkKQEAgLTQ2NTksOSArNDc0Nyw5IEBACiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgICAvKiBFbnRlciBsYXN0IGJ5dGVzLCBwYWRkZWQgd2l0aCB6ZXJvZXMgKi8KKyAgICAgICAgIC8qIEVudGVyIGxhc3QgYnl0ZXMsIHBhZGRlZCB3aXRoIHplcm9zICovCiAgICAgICAgICB0bXAgPSAgKih1aW50MzJfdCAqKShoY3J5cC0+SW5pdC5IZWFkZXIgKyBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KTsKLSAgICAgICAgIHRtcCAmPSBtYXNrW3NpemVfaW5fYnl0ZXMgJSA0VV07CisgICAgICAgICB0bXAgJj0gbWFza1soaGNyeXAtPkluaXQuRGF0YVR5cGUgKiAyVSkgKyAoc2l6ZV9pbl9ieXRlcyAlIDRVKV07CiAgICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSB0bXA7CiAgICAgICAgICBsb29wY291bnRlcisrOwogICAgICAgICAgLyogUGFkIHRoZSBkYXRhIHdpdGggemVyb3MgdG8gaGF2ZSBhIGNvbXBsZXRlIGJsb2NrICovCkBAIC00NjkxLDE3ICs0Nzc5LDE0IEBACiAgIH0KICAgZWxzZQogICB7Ci0gICAgaWYgKGhjcnlwLT5Jbml0LkFsZ29yaXRobSA9PSBDUllQX0FFU19HQ01fR01BQykKLSAgICB7Ci0gICAgICAvKldvcmthcm91bmQgMTogb25seSBBRVMsIGJlZm9yZSByZS1lbmFibGluZyB0aGUgcGVyaXBoZXJhbCwgZGF0YXR5cGUgY2FuIGJlIGNvbmZpZ3VyZWQuKi8KLSAgICAgIE1PRElGWV9SRUcoaGNyeXAtPkluc3RhbmNlLT5DUiwgQUVTX0NSX0RBVEFUWVBFLCBoY3J5cC0+SW5pdC5EYXRhVHlwZSk7CisgICAgLypXb3JrYXJvdW5kIDE6IG9ubHkgQUVTLCBiZWZvcmUgcmUtZW5hYmxpbmcgdGhlIHBlcmlwaGVyYWwsIGRhdGF0eXBlIGNhbiBiZSBjb25maWd1cmVkLiovCisgICAgTU9ESUZZX1JFRyhoY3J5cC0+SW5zdGFuY2UtPkNSLCBBRVNfQ1JfREFUQVRZUEUsIGhjcnlwLT5Jbml0LkRhdGFUeXBlKTsKIAotICAgICAgLyogU2VsZWN0IGhlYWRlciBwaGFzZSAqLwotICAgICAgQ1JZUF9TRVRfUEhBU0UoaGNyeXAsIENSWVBfUEhBU0VfSEVBREVSKTsKKyAgICAvKiBTZWxlY3QgaGVhZGVyIHBoYXNlICovCisgICAgQ1JZUF9TRVRfUEhBU0UoaGNyeXAsIENSWVBfUEhBU0VfSEVBREVSKTsKIAotICAgICAgLyogRW5hYmxlIHRoZSBDUllQIHBlcmlwaGVyYWwgKi8KLSAgICAgIF9fSEFMX0NSWVBfRU5BQkxFKGhjcnlwKTsKLSAgICB9CisgICAgLyogRW5hYmxlIHRoZSBDUllQIHBlcmlwaGVyYWwgKi8KKyAgICBfX0hBTF9DUllQX0VOQUJMRShoY3J5cCk7CiAgIH0KICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwpAQCAtNDcxNSwxNDMgKzQ4MDAsMTEyIEBACiAgICovCiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgQ1JZUF9HQ01DQ01fU2V0SGVhZGVyUGhhc2VfRE1BKENSWVBfSGFuZGxlVHlwZURlZiAqaGNyeXApCiB7Ci0gIF9fSU8gdWludDMyX3QgY291bnQgID0gMFU7CiAgIHVpbnQzMl90IGxvb3Bjb3VudGVyOworICB1aW50MzJfdCBoZWFkZXJzaXplX2luX2J5dGVzOworICB1aW50MzJfdCB0bXA7CisgIHVpbnQzMl90IG1hc2tbMTJdID0gezB4MFUsIDB4RkYwMDAwMDBVLCAweEZGRkYwMDAwVSwgMHhGRkZGRkYwMFUsICAvKiAzMi1iaXQgZGF0YSB0eXBlICovCisgICAgICAgICAgICAgICAgICAgICAgIDB4MFUsIDB4MDAwMEZGMDBVLCAweDAwMDBGRkZGVSwgMHhGRjAwRkZGRlUsICAvKiAxNi1iaXQgZGF0YSB0eXBlICovCisgICAgICAgICAgICAgICAgICAgICAgIDB4MFUsIDB4MDAwMDAwRkZVLCAweDAwMDBGRkZGVSwgMHgwMEZGRkZGRlV9OyAvKiAgOC1iaXQgZGF0YSB0eXBlICovCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEhlYWRlciBwaGFzZSBmb3IgR0NNL0dNQUMgb3IgQ0NNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgaWYgKChoY3J5cC0+SW5pdC5IZWFkZXJTaXplICE9IDBVKSkKKyAgaWYgKGhjcnlwLT5Jbml0LkhlYWRlcldpZHRoVW5pdCA9PSBDUllQX0hFQURFUldJRFRIVU5JVF9XT1JEKQogICB7Ci0gICAgLyogU2VsZWN0IGhlYWRlciBwaGFzZSAqLwotICAgIENSWVBfU0VUX1BIQVNFKGhjcnlwLCBDUllQX1BIQVNFX0hFQURFUik7CisgICAgaGVhZGVyc2l6ZV9pbl9ieXRlcyA9IGhjcnlwLT5Jbml0LkhlYWRlclNpemUgKiA0VTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBoZWFkZXJzaXplX2luX2J5dGVzID0gaGNyeXAtPkluaXQuSGVhZGVyU2l6ZTsKKyAgfQogCi0gICAgLyogRW5hYmxlIHRoZSBDUllQIHBlcmlwaGVyYWwgKi8KLSAgICBfX0hBTF9DUllQX0VOQUJMRShoY3J5cCk7CisgIC8qIFNlbGVjdCBoZWFkZXIgcGhhc2UgKi8KKyAgQ1JZUF9TRVRfUEhBU0UoaGNyeXAsIENSWVBfUEhBU0VfSEVBREVSKTsKIAotICAgIGlmICgoaGNyeXAtPkluaXQuSGVhZGVyU2l6ZSAlIDRVKSA9PSAwVSkKKyAgLyogRW5hYmxlIHRoZSBDUllQIHBlcmlwaGVyYWwgKi8KKyAgX19IQUxfQ1JZUF9FTkFCTEUoaGNyeXApOworCisgIC8qIFNldCB0aGUgcGhhc2UgKi8KKyAgaGNyeXAtPlBoYXNlID0gQ1JZUF9QSEFTRV9QUk9DRVNTOworCisgIC8qIElmIGhlYWRlciBzaXplIGlzIGF0IGxlYXN0IGVxdWFsIHRvIDE2IGJ5dGVzLCBmZWVkIHRoZSBoZWFkZXIgdGhyb3VnaCBETUEuCisgICAgIElmIHNpemVfaW5fYnl0ZXMgaXMgbm90IGEgbXVsdGlwbGUgb2YgYmxvY2tzIChpcyBub3QgYSBtdWx0aXBsZSBvZiBmb3VyIDMyLWJpdCB3b3JkcyApLAorICAgICBsYXN0IGJ5dGVzIGZlZWRpbmcgYW5kIHBhZGRpbmcgd2lsbCBiZSBkb25lIGluIENSWVBfRE1BSW5DcGx0KCkgKi8KKyAgaWYgKGhlYWRlcnNpemVfaW5fYnl0ZXMgPj0gMTZVKQorICB7CisgICAgLyogSW5pdGlhdGUgaGVhZGVyIERNQSB0cmFuc2ZlciAqLworICAgIGlmIChDUllQX1NldEhlYWRlckRNQUNvbmZpZyhoY3J5cCwgKHVpbnQzMl90KShoY3J5cC0+SW5pdC5IZWFkZXIpLCAodWludDE2X3QpKChoZWFkZXJzaXplX2luX2J5dGVzIC8gMTZVKSAqIDRVKSkgIT0gSEFMX09LKQogICAgIHsKLSAgICAgIC8qIEhlYWRlclNpemUgJTQsIG5vIHBhZGRpbmcgKi8KLSAgICAgIGZvciAobG9vcGNvdW50ZXIgPSAwVTsgKGxvb3Bjb3VudGVyIDwgaGNyeXAtPkluaXQuSGVhZGVyU2l6ZSk7IGxvb3Bjb3VudGVyICs9IDRVKQotICAgICAgewotICAgICAgICAvKiBXcml0ZSB0aGUgaW5wdXQgYmxvY2sgaW4gdGhlIGRhdGEgaW5wdXQgcmVnaXN0ZXIgKi8KLSAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gKih1aW50MzJfdCAqKShoY3J5cC0+SW5pdC5IZWFkZXIgKyBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KTsKLSAgICAgICAgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCsrIDsKLSAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gKih1aW50MzJfdCAqKShoY3J5cC0+SW5pdC5IZWFkZXIgKyBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KTsKLSAgICAgICAgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCsrIDsKLSAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SICA9ICoodWludDMyX3QgKikoaGNyeXAtPkluaXQuSGVhZGVyICsgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCk7Ci0gICAgICAgIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQrKyA7Ci0gICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiA9ICoodWludDMyX3QgKikoaGNyeXAtPkluaXQuSGVhZGVyICsgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCk7Ci0gICAgICAgIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQrKyA7Ci0KLSAgICAgICAgLypXYWl0IG9uIENDRiBmbGFnKi8KLSAgICAgICAgY291bnQgPSBDUllQX1RJTUVPVVRfR0NNQ0NNSEVBREVSUEhBU0U7Ci0gICAgICAgIGRvCi0gICAgICAgIHsKLSAgICAgICAgICBjb3VudC0tIDsKLSAgICAgICAgICBpZiAoY291bnQgPT0gMFUpCi0gICAgICAgICAgewotICAgICAgICAgICAgLyogRGlzYWJsZSB0aGUgQ1JZUCBwZXJpcGhlcmFsIGNsb2NrICovCi0gICAgICAgICAgICBfX0hBTF9DUllQX0RJU0FCTEUoaGNyeXApOwotCi0gICAgICAgICAgICAvKiBDaGFuZ2Ugc3RhdGUgKi8KLSAgICAgICAgICAgIGhjcnlwLT5FcnJvckNvZGUgfD0gSEFMX0NSWVBfRVJST1JfVElNRU9VVDsKLSAgICAgICAgICAgIGhjcnlwLT5TdGF0ZSA9IEhBTF9DUllQX1NUQVRFX1JFQURZOwotCi0gICAgICAgICAgICAvKiBQcm9jZXNzIHVubG9ja2VkICovCi0gICAgICAgICAgICBfX0hBTF9VTkxPQ0soaGNyeXApOwotICAgICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgd2hpbGUgKEhBTF9JU19CSVRfQ0xSKGhjcnlwLT5JbnN0YW5jZS0+U1IsIEFFU19TUl9DQ0YpKTsKLQotICAgICAgICAvKiBDbGVhciBDQ0YgZmxhZyAqLwotICAgICAgICBfX0hBTF9DUllQX0NMRUFSX0ZMQUcoaGNyeXAsIENSWVBfQ0NGX0NMRUFSKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8qV3JpdGUgaGVhZGVyIGJsb2NrIGluIHRoZSBJTiBGSUZPIHdpdGhvdXQgbGFzdCBibG9jayAqLwotICAgICAgZm9yIChsb29wY291bnRlciA9IDBVOyAobG9vcGNvdW50ZXIgPCAoKGhjcnlwLT5Jbml0LkhlYWRlclNpemUpIC0gKGhjcnlwLT5Jbml0LkhlYWRlclNpemUgJSA0VSkpKTsgbG9vcGNvdW50ZXIgKz0gNFUpCi0gICAgICB7Ci0gICAgICAgIC8qIFdyaXRlIHRoZSBJbnB1dCBibG9jayBpbiB0aGUgRGF0YSBJbnB1dCByZWdpc3RlciAqLwotICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSAqKHVpbnQzMl90ICopKGhjcnlwLT5Jbml0LkhlYWRlciArIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQpOwotICAgICAgICBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KysgOwotICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSAqKHVpbnQzMl90ICopKGhjcnlwLT5Jbml0LkhlYWRlciArIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQpOwotICAgICAgICBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KysgOwotICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgID0gKih1aW50MzJfdCAqKShoY3J5cC0+SW5pdC5IZWFkZXIgKyBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KTsKLSAgICAgICAgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCsrIDsKLSAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gKih1aW50MzJfdCAqKShoY3J5cC0+SW5pdC5IZWFkZXIgKyBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KTsKLSAgICAgICAgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCsrIDsKLQotICAgICAgICAvKldhaXQgb24gQ0NGIGZsYWcqLwotICAgICAgICBjb3VudCA9IENSWVBfVElNRU9VVF9HQ01DQ01IRUFERVJQSEFTRTsKLSAgICAgICAgZG8KLSAgICAgICAgewotICAgICAgICAgIGNvdW50LS0gOwotICAgICAgICAgIGlmIChjb3VudCA9PSAwVSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBEaXNhYmxlIHRoZSBDUllQIHBlcmlwaGVyYWwgY2xvY2sgKi8KLSAgICAgICAgICAgIF9fSEFMX0NSWVBfRElTQUJMRShoY3J5cCk7Ci0KLSAgICAgICAgICAgIC8qIENoYW5nZSBzdGF0ZSAqLwotICAgICAgICAgICAgaGNyeXAtPkVycm9yQ29kZSB8PSBIQUxfQ1JZUF9FUlJPUl9USU1FT1VUOwotICAgICAgICAgICAgaGNyeXAtPlN0YXRlID0gSEFMX0NSWVBfU1RBVEVfUkVBRFk7Ci0KLSAgICAgICAgICAgIC8qIFByb2Nlc3MgdW5sb2NrZWQgKi8KLSAgICAgICAgICAgIF9fSEFMX1VOTE9DSyhoY3J5cCk7Ci0gICAgICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB3aGlsZSAoSEFMX0lTX0JJVF9DTFIoaGNyeXAtPkluc3RhbmNlLT5TUiwgQUVTX1NSX0NDRikpOwotCi0gICAgICAgIC8qIENsZWFyIENDRiBmbGFnICovCi0gICAgICAgIF9fSEFMX0NSWVBfQ0xFQVJfRkxBRyhoY3J5cCwgQ1JZUF9DQ0ZfQ0xFQVIpOwotICAgICAgfQotICAgICAgLyogIExhc3QgYmxvY2sgb3B0aW9uYWxseSBwYWQgdGhlIGRhdGEgd2l0aCB6ZXJvcyovCi0gICAgICBmb3IgKGxvb3Bjb3VudGVyID0gMFU7IChsb29wY291bnRlciA8IChoY3J5cC0+SW5pdC5IZWFkZXJTaXplICUgNFUpKTsgbG9vcGNvdW50ZXIrKykKLSAgICAgIHsKLSAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gKih1aW50MzJfdCAqKShoY3J5cC0+SW5pdC5IZWFkZXIgKyBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KTsKLSAgICAgICAgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCsrIDsKLSAgICAgIH0KLSAgICAgIHdoaWxlIChsb29wY291bnRlciA8IDRVKQotICAgICAgewotICAgICAgICAvKiBQYWQgdGhlIGRhdGEgd2l0aCB6ZXJvcyB0byBoYXZlIGEgY29tcGxldGUgYmxvY2sgKi8KLSAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gMHgwVTsKLSAgICAgICAgbG9vcGNvdW50ZXIrKzsKLSAgICAgIH0KLQotICAgICAgLypXYWl0IG9uIENDRiBmbGFnKi8KLSAgICAgIGNvdW50ID0gQ1JZUF9USU1FT1VUX0dDTUNDTUhFQURFUlBIQVNFOwotICAgICAgZG8KLSAgICAgIHsKLSAgICAgICAgY291bnQtLSA7Ci0gICAgICAgIGlmIChjb3VudCA9PSAwVSkKLSAgICAgICAgewotICAgICAgICAgIC8qIERpc2FibGUgdGhlIENSWVAgcGVyaXBoZXJhbCBjbG9jayAqLwotICAgICAgICAgIF9fSEFMX0NSWVBfRElTQUJMRShoY3J5cCk7Ci0KLSAgICAgICAgICAvKiBDaGFuZ2Ugc3RhdGUgKi8KLSAgICAgICAgICBoY3J5cC0+RXJyb3JDb2RlIHw9IEhBTF9DUllQX0VSUk9SX1RJTUVPVVQ7Ci0gICAgICAgICAgaGNyeXAtPlN0YXRlID0gSEFMX0NSWVBfU1RBVEVfUkVBRFk7Ci0KLSAgICAgICAgICAvKiBQcm9jZXNzIHVubG9ja2VkICovCi0gICAgICAgICAgX19IQUxfVU5MT0NLKGhjcnlwKTsKLSAgICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB3aGlsZSAoSEFMX0lTX0JJVF9DTFIoaGNyeXAtPkluc3RhbmNlLT5TUiwgQUVTX1NSX0NDRikpOwotCi0gICAgICAvKiBDbGVhciBDQ0YgZmxhZyAqLwotICAgICAgX19IQUxfQ1JZUF9DTEVBUl9GTEFHKGhjcnlwLCBDUllQX0NDRl9DTEVBUik7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KICAgfQogICBlbHNlCiAgIHsKLSAgICAvKiBTZWxlY3QgaGVhZGVyIHBoYXNlICovCi0gICAgQ1JZUF9TRVRfUEhBU0UoaGNyeXAsIENSWVBfUEhBU0VfSEVBREVSKTsKKyAgICBpZiAoaGVhZGVyc2l6ZV9pbl9ieXRlcyAhPSAwVSkKKyAgICB7CisgICAgICAvKiBIZWFkZXIgbGVuZ3RoIGlzIGxhcmdlciB0aGFuIDAgYW5kIHN0cmljdGx5IGxlc3MgdGhhbiAxNiBieXRlcyAqLworICAgICAgLyogV3JpdGUgbGFzdCBjb21wbGV0ZSB3b3JkcyAqLworICAgICAgZm9yIChsb29wY291bnRlciA9IDBVOyAobG9vcGNvdW50ZXIgPCAoaGVhZGVyc2l6ZV9pbl9ieXRlcyAvIDRVKSk7IGxvb3Bjb3VudGVyKyspCisgICAgICB7CisgICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiA9ICoodWludDMyX3QgKikoaGNyeXAtPkluaXQuSGVhZGVyICsgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCk7CisgICAgICAgIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQrKyA7CisgICAgICB9CisgICAgICAvKiBJZiB0aGUgaGVhZGVyIHNpemUgaXMgYSBtdWx0aXBsZSBvZiB3b3JkcyAqLworICAgICAgaWYgKChoZWFkZXJzaXplX2luX2J5dGVzICUgNFUpID09IDBVKQorICAgICAgeworICAgICAgICAvKiBQYWQgdGhlIGRhdGEgd2l0aCB6ZXJvcyB0byBoYXZlIGEgY29tcGxldGUgYmxvY2sgKi8KKyAgICAgICAgd2hpbGUgKGxvb3Bjb3VudGVyIDwgNFUpCisgICAgICAgIHsKKyAgICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSAweDBVOworICAgICAgICAgIGxvb3Bjb3VudGVyKys7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogRW50ZXIgbGFzdCBieXRlcywgcGFkZGVkIHdpdGggemVyb3MgKi8KKyAgICAgICAgdG1wID0gICoodWludDMyX3QgKikoaGNyeXAtPkluaXQuSGVhZGVyICsgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCk7CisgICAgICAgIHRtcCAmPSBtYXNrWyhoY3J5cC0+SW5pdC5EYXRhVHlwZSAqIDJVKSArIChoZWFkZXJzaXplX2luX2J5dGVzICUgNFUpXTsKKyAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gdG1wOworICAgICAgICBsb29wY291bnRlcisrOworICAgICAgICAvKiBQYWQgdGhlIGRhdGEgd2l0aCB6ZXJvcyB0byBoYXZlIGEgY29tcGxldGUgYmxvY2sgKi8KKyAgICAgICAgd2hpbGUgKGxvb3Bjb3VudGVyIDwgNFUpCisgICAgICAgIHsKKyAgICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSAweDBVOworICAgICAgICAgIGxvb3Bjb3VudGVyKys7CisgICAgICAgIH0KKyAgICAgIH0KIAotICAgIC8qIEVuYWJsZSB0aGUgQ1JZUCBwZXJpcGhlcmFsICovCi0gICAgX19IQUxfQ1JZUF9FTkFCTEUoaGNyeXApOwotICB9CisgICAgICBpZiAoQ1JZUF9XYWl0T25DQ0ZsYWcoaGNyeXAsIENSWVBfVElNRU9VVF9HQ01DQ01IRUFERVJQSEFTRSkgIT0gSEFMX09LKQorICAgICAgeworICAgICAgICAvKiBEaXNhYmxlIHRoZSBDUllQIHBlcmlwaGVyYWwgY2xvY2sgKi8KKyAgICAgICAgX19IQUxfQ1JZUF9ESVNBQkxFKGhjcnlwKTsKKworICAgICAgICAvKiBDaGFuZ2Ugc3RhdGUgKi8KKyAgICAgICAgaGNyeXAtPkVycm9yQ29kZSB8PSBIQUxfQ1JZUF9FUlJPUl9USU1FT1VUOworICAgICAgICBoY3J5cC0+U3RhdGUgPSBIQUxfQ1JZUF9TVEFURV9SRUFEWTsKKworICAgICAgICAvKiBQcm9jZXNzIHVubG9ja2VkICovCisgICAgICAgIF9fSEFMX1VOTE9DSyhoY3J5cCk7CisgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICB9CisgICAgICAvKiBDbGVhciBDQ0YgZmxhZyAqLworICAgICAgX19IQUxfQ1JZUF9DTEVBUl9GTEFHKGhjcnlwLCBDUllQX0NDRl9DTEVBUik7CisgICAgfSAvKiBpZiAoaGVhZGVyc2l6ZV9pbl9ieXRlcyAhPSAwVSkgKi8KKworICAgIC8qIE1vdmUgdG8gcGF5bG9hZCBwaGFzZSBpZiBoZWFkZXIgbGVuZ3RoIGlzIG51bGwgb3IKKyAgICAgICBpZiB0aGUgaGVhZGVyIGxlbmd0aCB3YXMgbGVzcyB0aGFuIDE2IGFuZCBoZWFkZXIgd3JpdHRlbiBieSBzb2Z0d2FyZSBpbnN0ZWFkIG9mIERNQSAqLworCisgICAgLyogU2V0IHRvIDAgdGhlIG51bWJlciBvZiBub24tdmFsaWQgYnl0ZXMgdXNpbmcgTlBCTEIgcmVnaXN0ZXIqLworICAgIE1PRElGWV9SRUcoaGNyeXAtPkluc3RhbmNlLT5DUiwgQUVTX0NSX05QQkxCLCAwVSk7CisKKyAgICAvKiBTZWxlY3QgcGF5bG9hZCBwaGFzZSBvbmNlIHRoZSBoZWFkZXIgcGhhc2UgaXMgcGVyZm9ybWVkICovCisgICAgQ1JZUF9TRVRfUEhBU0UoaGNyeXAsIENSWVBfUEhBU0VfUEFZTE9BRCk7CisKKyAgICAvKiBJbml0aWF0ZSBwYXlsb2FkIERNQSBJTiBhbmQgcHJvY2Vzc2VkIGRhdGEgRE1BIE9VVCB0cmFuc2ZlcnMgKi8KKyAgICBpZiAoQ1JZUF9HQ01DQ01fU2V0UGF5bG9hZFBoYXNlX0RNQShoY3J5cCkgIT0gSEFMX09LKQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICB9IC8qIGlmIChoZWFkZXJzaXplX2luX2J5dGVzID49IDE2VSkgKi8KKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC00ODY4LDkgKzQ5MjIsMjUgQEAKICAgdWludDMyX3QgbGFzdHdvcmRzaXplOwogICB1aW50MzJfdCBucGJsYjsKICAgdWludDMyX3QgbW9kZTsKKyAgdWludDMyX3QgaGVhZGVyc2l6ZV9pbl9ieXRlczsKKyAgdWludDMyX3QgdG1wOworICB1aW50MzJfdCBtYXNrWzEyXSA9IHsweDBVLCAweEZGMDAwMDAwVSwgMHhGRkZGMDAwMFUsIDB4RkZGRkZGMDBVLCAgLyogMzItYml0IGRhdGEgdHlwZSAqLworICAgICAgICAgICAgICAgICAgICAgICAweDBVLCAweDAwMDBGRjAwVSwgMHgwMDAwRkZGRlUsIDB4RkYwMEZGRkZVLCAgLyogMTYtYml0IGRhdGEgdHlwZSAqLworICAgICAgICAgICAgICAgICAgICAgICAweDBVLCAweDAwMDAwMEZGVSwgMHgwMDAwRkZGRlUsIDB4MDBGRkZGRkZVfTsgLyogIDgtYml0IGRhdGEgdHlwZSAqLworCisgIGlmIChoY3J5cC0+SW5pdC5IZWFkZXJXaWR0aFVuaXQgPT0gQ1JZUF9IRUFERVJXSURUSFVOSVRfV09SRCkKKyAgeworICAgIGhlYWRlcnNpemVfaW5fYnl0ZXMgPSBoY3J5cC0+SW5pdC5IZWFkZXJTaXplICogNFU7CisgIH0KKyAgZWxzZQorICB7CisgICAgaGVhZGVyc2l6ZV9pbl9ieXRlcyA9IGhjcnlwLT5Jbml0LkhlYWRlclNpemU7CisgIH0KIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogSGVhZGVyIHBoYXNlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgaWYgKGhjcnlwLT5Jbml0LkhlYWRlclNpemUgPT0gIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQpCisgIC8qIFRlc3Qgd2hldGhlciBvciBub3QgdGhlIGhlYWRlciBwaGFzZSBpcyBvdmVyLgorICAgICBJZiB0aGUgdGVzdCBiZWxvdyBpcyB0cnVlLCBtb3ZlIHRvIHBheWxvYWQgcGhhc2UgKi8KKyAgaWYgKGhlYWRlcnNpemVfaW5fYnl0ZXMgPD0gKCh1aW50MzJfdCkoaGNyeXAtPkNyeXBIZWFkZXJDb3VudCkgKiA0VSkpCiAgIHsKICAgICAvKiBTZXQgdGhlIHBoYXNlICovCiAgICAgaGNyeXAtPlBoYXNlID0gQ1JZUF9QSEFTRV9QUk9DRVNTOwpAQCAtNDk1MywxMSArNTAyMywxOSBAQAogICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSAweDBVOwogICAgICAgICBsb29wY291bnRlcisrOwogICAgICAgfQorICAgICAgLyogQ2FsbCB0aGUgaW5wdXQgZGF0YSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLworI2lmIChVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQorICAgICAgLypDYWxsIHJlZ2lzdGVyZWQgSW5wdXQgY29tcGxldGUgY2FsbGJhY2sqLworICAgICAgaGNyeXAtPkluQ3BsdENhbGxiYWNrKGhjcnlwKTsKKyNlbHNlCisgICAgICAvKkNhbGwgbGVnYWN5IHdlYWsgSW5wdXQgY29tcGxldGUgY2FsbGJhY2sqLworICAgICAgSEFMX0NSWVBfSW5DcGx0Q2FsbGJhY2soaGNyeXApOworI2VuZGlmIC8qIFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8gICAgICAKICAgICB9CiAgIH0KLSAgZWxzZSBpZiAoKCgoaGNyeXAtPkluaXQuSGVhZGVyU2l6ZSkgLSAoaGNyeXAtPkNyeXBIZWFkZXJDb3VudCkpID49IDRVKSkKKyAgZWxzZSBpZiAoKCgoaGVhZGVyc2l6ZV9pbl9ieXRlcyAvIDRVKSAtIChoY3J5cC0+Q3J5cEhlYWRlckNvdW50KSkgPj0gNFUpKQogICB7Ci0KKyAgICAvKiBDYW4gZW50ZXIgZnVsbCA0IGhlYWRlciB3b3JkcyAqLwogI2lmIChVU0VfSEFMX0NSWVBfU1VTUEVORF9SRVNVTUUgPT0gMVUpCiAgICAgLyogSWYgc3VzcGVuc2lvbiBmbGFnIGhhcyBiZWVuIHJhaXNlZCwgc3VzcGVuZCBwcm9jZXNzaW5nCiAgICAgICAgb25seSBpZiBub3QgYWxyZWFkeSBhdCB0aGUgZW5kIG9mIHRoZSBoZWFkZXIgKi8KQEAgLTQ5OTIsMTkgKzUwNzAsNDAgQEAKICAgICBoY3J5cC0+Q3J5cEhlYWRlckNvdW50Kys7CiAgIH0KICAgfQotICBlbHNlIC8qSGVhZGVyU2l6ZSA8IDQgb3IgSGVhZGVyU2l6ZSA+NCAmIEhlYWRlclNpemUgJTQgIT0gMCovCisgIGVsc2UgLyogV3JpdGUgbGFzdCBoZWFkZXIgYmxvY2sgKDQgd29yZHMpLCBwYWRkZWQgd2l0aCB6ZXJvcyBpZiBuZWVkZWQgKi8KICAgewotICAgIC8qICBMYXN0IGJsb2NrIG9wdGlvbmFsbHkgcGFkIHRoZSBkYXRhIHdpdGggemVyb3MqLwotICAgIGZvciAobG9vcGNvdW50ZXIgPSAwVTsgbG9vcGNvdW50ZXIgPCAoaGNyeXAtPkluaXQuSGVhZGVyU2l6ZSAlIDRVKTsgbG9vcGNvdW50ZXIrKykKKworICAgIGZvciAobG9vcGNvdW50ZXIgPSAwVTsgKGxvb3Bjb3VudGVyIDwgKChoZWFkZXJzaXplX2luX2J5dGVzIC8gNFUpICUgNFUpKTsgbG9vcGNvdW50ZXIrKykKICAgICB7CiAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSAqKHVpbnQzMl90ICopKGhjcnlwLT5Jbml0LkhlYWRlciArIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQpOwogICAgICAgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCsrIDsKICAgICB9CisgICAgLyogSWYgdGhlIGhlYWRlciBzaXplIGlzIGEgbXVsdGlwbGUgb2Ygd29yZHMgKi8KKyAgICBpZiAoKGhlYWRlcnNpemVfaW5fYnl0ZXMgJSA0VSkgPT0gMFUpCisgICAgeworICAgICAgLyogUGFkIHRoZSBkYXRhIHdpdGggemVyb3MgdG8gaGF2ZSBhIGNvbXBsZXRlIGJsb2NrICovCisgICAgICB3aGlsZSAobG9vcGNvdW50ZXIgPCA0VSkKKyAgICAgIHsKKyAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gMHgwVTsKKyAgICAgICAgbG9vcGNvdW50ZXIrKzsKKyAgICAgICAgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCsrOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogRW50ZXIgbGFzdCBieXRlcywgcGFkZGVkIHdpdGggemVyb3MgKi8KKyAgICAgIHRtcCA9ICAqKHVpbnQzMl90ICopKGhjcnlwLT5Jbml0LkhlYWRlciArIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQpOworICAgICAgdG1wICY9IG1hc2tbKGhjcnlwLT5Jbml0LkRhdGFUeXBlICogMlUpICsgKGhlYWRlcnNpemVfaW5fYnl0ZXMgJSA0VSldOworICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gdG1wOworICAgICAgbG9vcGNvdW50ZXIrKzsKKyAgICAgIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQrKzsKKyAgICAgIC8qIFBhZCB0aGUgZGF0YSB3aXRoIHplcm9zIHRvIGhhdmUgYSBjb21wbGV0ZSBibG9jayAqLwogICAgIHdoaWxlIChsb29wY291bnRlciA8IDRVKQogICAgIHsKLSAgICAgIC8qIHBhZCB0aGUgZGF0YSB3aXRoIHplcm9zIHRvIGhhdmUgYSBjb21wbGV0ZSBibG9jayAqLwogICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gMHgwVTsKICAgICAgIGxvb3Bjb3VudGVyKys7CisgICAgICAgIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQrKzsKKyAgICAgIH0KICAgICB9CiAgIH0KIH0KQEAgLTUwMTQsNiArNTExMyw3IEBACiAgICogQHBhcmFtICBoY3J5cCBwb2ludGVyIHRvIGEgQ1JZUF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgQ1JZUCBtb2R1bGUuCiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24uCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgaW4gdGhyZWFkIG1vZGUuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgQ1JZUF9XYWl0T25DQ0ZsYWcoQ1JZUF9IYW5kbGVUeXBlRGVmICpoY3J5cCwgdWludDMyX3QgVGltZW91dCkKQEAgLTUwMzcsNiArNTEzNyw0NyBAQAogICByZXR1cm4gSEFMX09LOwogfQogCisvKioKKyAgKiBAYnJpZWYgIFdhaXQgZm9yIENvbXB1dGF0aW9uIENvbXBsZXRlIEZsYWcgKENDRikgdG8gcmFpc2UgdGhlbiBjbGVhciBpdC4KKyAgKiBAcGFyYW0gIGhjcnlwIHBvaW50ZXIgdG8gYSBDUllQX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBDUllQIG1vZHVsZS4KKyAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCBkdXJhdGlvbi4KKyAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgaW4gdGhyZWFkIG9yIGhhbmRsZXIgbW9kZS4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK3N0YXRpYyB2b2lkIENSWVBfQ2xlYXJDQ0ZsYWdXaGVuSGlnaChDUllQX0hhbmRsZVR5cGVEZWYgKmhjcnlwLCB1aW50MzJfdCBUaW1lb3V0KQoreworICB1aW50MzJfdCBjb3VudCA9IFRpbWVvdXQ7CisKKyAgZG8KKyAgeworICAgIGNvdW50LS0gOworICAgIGlmIChjb3VudCA9PSAwVSkKKyAgICB7CisgICAgICAvKiBEaXNhYmxlIHRoZSBDUllQIHBlcmlwaGVyYWwgY2xvY2sgKi8KKyAgICAgIF9fSEFMX0NSWVBfRElTQUJMRShoY3J5cCk7CisKKyAgICAgIC8qIENoYW5nZSBzdGF0ZSAqLworICAgICAgaGNyeXAtPkVycm9yQ29kZSB8PSBIQUxfQ1JZUF9FUlJPUl9USU1FT1VUOworCisgICAgICAvKiBQcm9jZXNzIHVubG9ja2VkICovCisgICAgICBfX0hBTF9VTkxPQ0soaGNyeXApOworICAgICAgaGNyeXAtPlN0YXRlID0gSEFMX0NSWVBfU1RBVEVfUkVBRFk7CisKKyNpZiAoVVNFX0hBTF9DUllQX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKKyAgICAvKkNhbGwgcmVnaXN0ZXJlZCBlcnJvciBjYWxsYmFjayovCisgICAgaGNyeXAtPkVycm9yQ2FsbGJhY2soaGNyeXApOworI2Vsc2UKKyAgICAvKkNhbGwgbGVnYWN5IHdlYWsgZXJyb3IgY2FsbGJhY2sqLworICAgIEhBTF9DUllQX0Vycm9yQ2FsbGJhY2soaGNyeXApOworI2VuZGlmIC8qIFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyAgICB9CisgIH0KKyAgd2hpbGUgKEhBTF9JU19CSVRfQ0xSKGhjcnlwLT5JbnN0YW5jZS0+U1IsIEFFU19TUl9DQ0YpKTsKKworICAvKiBDbGVhciBDQ0YgZmxhZyAqLworICBfX0hBTF9DUllQX0NMRUFSX0ZMQUcoaGNyeXAsIENSWVBfQ0NGX0NMRUFSKTsKK30KIAogI2lmIChVU0VfSEFMX0NSWVBfU1VTUEVORF9SRVNVTUUgPT0gMVUpCiAvKioKQEAgLTUzNDEsOSArNTQ4Miw5IEBACiAgICAgICAgIGhjcnlwLT5DcnlwSW5Db3VudCsrOwogICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgID0gKih1aW50MzJfdCAqKShoY3J5cC0+cENyeXBJbkJ1ZmZQdHIgKyBoY3J5cC0+Q3J5cEluQ291bnQgKTsKICAgICAgICAgaGNyeXAtPkNyeXBJbkNvdW50Kys7Ci0gICAgICAgIGlmKChoY3J5cC0+Q3J5cEluQ291bnQgPT0gIGhjcnlwLT5TaXplKSAmJiAoaGNyeXAtPkluaXQuQWxnb3JpdGhtID09IENSWVBfQUVTX0dDTV9HTUFDKSkKKyAgICAgICAgaWYgKChoY3J5cC0+Q3J5cEluQ291bnQgPT0gIChoY3J5cC0+U2l6ZSAvIDRVKSkgJiYgKChoY3J5cC0+U2l6ZSAlIDE2VSkgPT0gMFUpKQogICAgICAgICB7Ci0gICAgICAgICAgLyogQ2FsbCBvdXRwdXQgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KKyAgICAgICAgICAvKiBDYWxsIGlucHV0IHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrICovCiAjaWYgKFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgICAgICAgICAvKkNhbGwgcmVnaXN0ZXJlZCBJbnB1dCBjb21wbGV0ZSBjYWxsYmFjayovCiAgICAgICAgICAgaGNyeXAtPkluQ3BsdENhbGxiYWNrKGhjcnlwKTsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw1eHhfaGFsX2RhYy5jIGIvU3JjL3N0bTMybDV4eF9oYWxfZGFjLmMKaW5kZXggMjAwYzg2Yi4uNTEyYWY2MiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDV4eF9oYWxfZGFjLmMKKysrIGIvU3JjL3N0bTMybDV4eF9oYWxfZGFjLmMKQEAgLTEwNTIsMTMgKzEwNTIsMTcgQEAKICAgICAgICAgLyogQ2hlY2sgZm9yIHRoZSBUaW1lb3V0ICovCiAgICAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBUSU1FT1VUX0RBQ19DQUxJQkNPTkZJRykKICAgICAgICAgewotICAgICAgICAgIC8qIFVwZGF0ZSBlcnJvciBjb2RlICovCi0gICAgICAgICAgU0VUX0JJVChoZGFjLT5FcnJvckNvZGUsIEhBTF9EQUNfRVJST1JfVElNRU9VVCk7CisgICAgICAgICAgLyogTmV3IGNoZWNrIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbiAqLworICAgICAgICAgIGlmKCgoaGRhYy0+SW5zdGFuY2UtPlNSKSAmIERBQ19TUl9CV1NUMSkgIT0gMFVMKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFVwZGF0ZSBlcnJvciBjb2RlICovCisgICAgICAgICAgICBTRVRfQklUKGhkYWMtPkVycm9yQ29kZSwgSEFMX0RBQ19FUlJPUl9USU1FT1VUKTsKIAotICAgICAgICAgIC8qIENoYW5nZSB0aGUgRE1BIHN0YXRlICovCi0gICAgICAgICAgaGRhYy0+U3RhdGUgPSBIQUxfREFDX1NUQVRFX1RJTUVPVVQ7CisgICAgICAgICAgICAvKiBDaGFuZ2UgdGhlIERNQSBzdGF0ZSAqLworICAgICAgICAgICAgaGRhYy0+U3RhdGUgPSBIQUxfREFDX1NUQVRFX1RJTUVPVVQ7CiAKLSAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CiAgICAgICBIQUxfRGVsYXkoMSk7CkBAIC0xMDcyLDEzICsxMDc2LDE3IEBACiAgICAgICAgIC8qIENoZWNrIGZvciB0aGUgVGltZW91dCAqLwogICAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gVElNRU9VVF9EQUNfQ0FMSUJDT05GSUcpCiAgICAgICAgIHsKLSAgICAgICAgICAvKiBVcGRhdGUgZXJyb3IgY29kZSAqLwotICAgICAgICAgIFNFVF9CSVQoaGRhYy0+RXJyb3JDb2RlLCBIQUxfREFDX0VSUk9SX1RJTUVPVVQpOworICAgICAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgICAgICBpZigoKGhkYWMtPkluc3RhbmNlLT5TUikgJiBEQUNfU1JfQldTVDIpICE9IDBVTCkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBVcGRhdGUgZXJyb3IgY29kZSAqLworICAgICAgICAgICAgU0VUX0JJVChoZGFjLT5FcnJvckNvZGUsIEhBTF9EQUNfRVJST1JfVElNRU9VVCk7CiAKLSAgICAgICAgICAvKiBDaGFuZ2UgdGhlIERNQSBzdGF0ZSAqLwotICAgICAgICAgIGhkYWMtPlN0YXRlID0gSEFMX0RBQ19TVEFURV9USU1FT1VUOworICAgICAgICAgICAgLyogQ2hhbmdlIHRoZSBETUEgc3RhdGUgKi8KKyAgICAgICAgICAgIGhkYWMtPlN0YXRlID0gSEFMX0RBQ19TVEFURV9USU1FT1VUOwogCi0gICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQogICAgICAgSEFMX0RlbGF5KDFVKTsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw1eHhfaGFsX2V4dGkuYyBiL1NyYy9zdG0zMmw1eHhfaGFsX2V4dGkuYwppbmRleCA3NzkwMmI4Li41NDliN2I1IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNXh4X2hhbF9leHRpLmMKKysrIGIvU3JjL3N0bTMybDV4eF9oYWxfZXh0aS5jCkBAIC00LDcgKzQsOCBAQAogICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtCiAgICogQGJyaWVmICAgRVhUSSBIQUwgbW9kdWxlIGRyaXZlci4KICAgKiAgICAgICAgICBUaGlzIGZpbGUgcHJvdmlkZXMgZmlybXdhcmUgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgZm9sbG93aW5nCi0gICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBHZW5lcmFsIFB1cnBvc2UgSW5wdXQvT3V0cHV0IChFWFRJKSBwZXJpcGhlcmFsOgorICAqICAgICAgICAgIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgRXh0ZW5kZWQgSW50ZXJydXB0cyBhbmQgZXZlbnQgY29udHJvbGxlcgorICAqICAgICAgICAgIChFWFRJKSBwZXJpcGhlcmFsOgogICAqICAgICAgICAgICArIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgKyBJTyBvcGVyYXRpb24gZnVuY3Rpb25zCiAgICoKQEAgLTI1LDcgKzI2LDcgQEAKICAgICAgICAgKCsrKSBGYWxsaW5nCiAgICAgICAgICgrKykgQm90aCBvZiB0aGVtCiAKLSAgICAoKykgV2hlbiBzZXQgaW4gaW50ZXJydXB0IG1vZGUsIGNvbmZpZ3VyYWJsZSBFeHRpIGxpbmVzIGhhdmUgdHdvIGRpZmZlbnJlbnRzCisgICAgKCspIFdoZW4gc2V0IGluIGludGVycnVwdCBtb2RlLCBjb25maWd1cmFibGUgRXh0aSBsaW5lcyBoYXZlIHR3byBkaWZmZXJlbnQKICAgICAgICAgaW50ZXJydXB0IHBlbmRpbmcgcmVnaXN0ZXJzIHdoaWNoIGFsbG93IHRvIGRpc3Rpbmd1aXNoIHdoaWNoIHRyYW5zaXRpb24KICAgICAgICAgb2NjdXJzOgogICAgICAgICAoKyspIFJpc2luZyBlZGdlIHBlbmRpbmcgaW50ZXJydXB0CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNXh4X2hhbF9ndHpjLmMgYi9TcmMvc3RtMzJsNXh4X2hhbF9ndHpjLmMKaW5kZXggNTRjMDBkNi4uYmZhNmM3MyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDV4eF9oYWxfZ3R6Yy5jCisrKyBiL1NyYy9zdG0zMmw1eHhfaGFsX2d0emMuYwpAQCAtMTEwLDggKzExMCw4IEBACiAvKiBQcml2YXRlIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiogQGRlZmdyb3VwIEdUWkNfUHJpdmF0ZV9Db25zdGFudHMgR1RaQyBQcml2YXRlIENvbnN0YW50cwotICogQHsKLSAqLworICAqIEB7CisgICovCiAKIC8qIERlZmluaXRpb25zIGZvciBHVFpDX1RaU0NfTVBDV00gKi8KICNkZWZpbmUgR1RaQ19UWlNDX01QQ1dNMV9NRU1fU0laRSAgICAgIDB4MTAwMDAwMDBVICAgIC8qIDI1Nk1CIG1heCBzaXplICovCkBAIC0xNTMsMjUgKzE1MywyNSBAQAogLyogUHJpdmF0ZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoqIEBkZWZncm91cCBHVFpDX1ByaXZhdGVfTWFjcm9zIEdUWkMgUHJpdmF0ZSBNYWNyb3MKLSAqIEB7Ci0gKi8KKyAgKiBAeworICAqLwogCiAjZGVmaW5lIElTX0FERFJFU1NfSU4obWVtLCBhZGRyZXNzKVwKLSggICAoICAgKCAodWludDMyX3QpKGFkZHJlc3MpID49ICh1aW50MzJfdClHVFpDX0JBU0VfQUREUkVTU19OUyhtZW0pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgJiYgKCAodWludDMyX3QpKGFkZHJlc3MpIDwgKCh1aW50MzJfdClHVFpDX0JBU0VfQUREUkVTU19OUyhtZW0pICsgKHVpbnQzMl90KUdUWkNfTUVNX1NJWkUobWVtKSApICkgKSAgXAotIHx8ICggICAoICh1aW50MzJfdCkoYWRkcmVzcykgPj0gKHVpbnQzMl90KUdUWkNfQkFTRV9BRERSRVNTX1MobWVtKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICYmICggKHVpbnQzMl90KShhZGRyZXNzKSA8ICgodWludDMyX3QpR1RaQ19CQVNFX0FERFJFU1NfUyhtZW0pICsgKHVpbnQzMl90KUdUWkNfTUVNX1NJWkUobWVtKSApICkgKSApCisgICggICAoICAgKCAodWludDMyX3QpKGFkZHJlc3MpID49ICh1aW50MzJfdClHVFpDX0JBU0VfQUREUkVTU19OUyhtZW0pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAmJiAoICh1aW50MzJfdCkoYWRkcmVzcykgPCAoKHVpbnQzMl90KUdUWkNfQkFTRV9BRERSRVNTX05TKG1lbSkgKyAodWludDMyX3QpR1RaQ19NRU1fU0laRShtZW0pICkgKSApICBcCisgICAgICB8fCAoICAgKCAodWludDMyX3QpKGFkZHJlc3MpID49ICh1aW50MzJfdClHVFpDX0JBU0VfQUREUkVTU19TKG1lbSkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICYmICggKHVpbnQzMl90KShhZGRyZXNzKSA8ICgodWludDMyX3QpR1RaQ19CQVNFX0FERFJFU1NfUyhtZW0pICsgKHVpbnQzMl90KUdUWkNfTUVNX1NJWkUobWVtKSApICkgKSApCiAKICNkZWZpbmUgSVNfQUREUkVTU19JTl9TKG1lbSwgYWRkcmVzcylcCi0oICAgKCAodWludDMyX3QpKGFkZHJlc3MpID49ICh1aW50MzJfdClHVFpDX0JBU0VfQUREUkVTU19TKG1lbSkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICYmICggKHVpbnQzMl90KShhZGRyZXNzKSA8ICgodWludDMyX3QpR1RaQ19CQVNFX0FERFJFU1NfUyhtZW0pICsgKHVpbnQzMl90KUdUWkNfTUVNX1NJWkUobWVtKSApICkgKQorICAoICAgKCAodWludDMyX3QpKGFkZHJlc3MpID49ICh1aW50MzJfdClHVFpDX0JBU0VfQUREUkVTU19TKG1lbSkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgJiYgKCAodWludDMyX3QpKGFkZHJlc3MpIDwgKCh1aW50MzJfdClHVFpDX0JBU0VfQUREUkVTU19TKG1lbSkgKyAodWludDMyX3QpR1RaQ19NRU1fU0laRShtZW0pICkgKSApCiAKICNkZWZpbmUgSVNfQUREUkVTU19JTl9OUyhtZW0sIGFkZHJlc3MpXAotKCAgICggKHVpbnQzMl90KShhZGRyZXNzKSA+PSAodWludDMyX3QpR1RaQ19CQVNFX0FERFJFU1NfTlMobWVtKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gJiYgKCAodWludDMyX3QpKGFkZHJlc3MpIDwgKCh1aW50MzJfdClHVFpDX0JBU0VfQUREUkVTU19OUyhtZW0pICsgKHVpbnQzMl90KUdUWkNfTUVNX1NJWkUobWVtKSApICkgKQorICAoICAgKCAodWludDMyX3QpKGFkZHJlc3MpID49ICh1aW50MzJfdClHVFpDX0JBU0VfQUREUkVTU19OUyhtZW0pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICYmICggKHVpbnQzMl90KShhZGRyZXNzKSA8ICgodWludDMyX3QpR1RaQ19CQVNFX0FERFJFU1NfTlMobWVtKSArICh1aW50MzJfdClHVFpDX01FTV9TSVpFKG1lbSkgKSApICkKIAogI2RlZmluZSBHVFpDX0JBU0VfQUREUkVTUyhtZW0pXAotKCBtZW0gIyMgX0JBU0UgKQorICAoIG1lbSAjIyBfQkFTRSApCiAKIC8qKgogICAqIEB9CkBAIC0yMTksMTAgKzIxOSw5IEBACiAgIHVpbnQzMl90IHJlZ2lzdGVyX2FkZHJlc3M7CiAKICAgLyogY2hlY2sgZW50cnkgcGFyYW1ldGVycyAqLwotICBpZiAoICAgKFBlcmlwaEF0dHJpYnV0ZXMgPiAoR1RaQ19UWlNDX1BFUklQSF9TRUMgfCBHVFpDX1RaU0NfUEVSSVBIX1BSSVYpKQotICAgICAgfHwgKCAgSEFMX0dUWkNfR0VUX0FSUkFZX0lOREVYKFBlcmlwaElkKSA+PSBHVFpDX1RaU0NfUEVSSVBIX05VTUJFUikKLSAgICAgIHx8ICggICAoKFBlcmlwaElkICYgR1RaQ19QRVJJUEhfQUxMKSAhPSAwVSkKLSAgICAgICAgICAmJiAoSEFMX0dUWkNfR0VUX0FSUkFZX0lOREVYKFBlcmlwaElkKSAhPSAwVSkpKQorICBpZiAoKFBlcmlwaEF0dHJpYnV0ZXMgPiAoR1RaQ19UWlNDX1BFUklQSF9TRUMgfCBHVFpDX1RaU0NfUEVSSVBIX1BSSVYpKQorICAgICAgfHwgKEhBTF9HVFpDX0dFVF9BUlJBWV9JTkRFWChQZXJpcGhJZCkgPj0gR1RaQ19UWlNDX1BFUklQSF9OVU1CRVIpCisgICAgICB8fCAoKChQZXJpcGhJZCAmIEdUWkNfUEVSSVBIX0FMTCkgIT0gMFUpICYmIChIQUxfR1RaQ19HRVRfQVJSQVlfSU5ERVgoUGVyaXBoSWQpICE9IDBVKSkpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC0yNzEsOCArMjcwLDcgQEAKIAogI2lmIGRlZmluZWQoX19BUk1fRkVBVFVSRV9DTVNFKSAmJiAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQogICAgIC8qIHNlY3VyZSBjb25maWd1cmF0aW9uICovCi0gICAgcmVnaXN0ZXJfYWRkcmVzcyA9ICAgKHVpbnQzMl90KSYoR1RaQ19UWlNDLT5TRUNDRkdSMSkKLSAgICAgICAgICAgICAgICAgICAgICAgKyAoNFUgKiBHVFpDX0dFVF9SRUdfSU5ERVgoUGVyaXBoSWQpKTsKKyAgICByZWdpc3Rlcl9hZGRyZXNzID0gKHVpbnQzMl90KSAmKEdUWkNfVFpTQy0+U0VDQ0ZHUjEpICsgKDRVICogR1RaQ19HRVRfUkVHX0lOREVYKFBlcmlwaElkKSk7CiAgICAgaWYgKChQZXJpcGhBdHRyaWJ1dGVzICYgR1RaQ19UWlNDX1BFUklQSF9TRUMpID09IEdUWkNfVFpTQ19QRVJJUEhfU0VDKQogICAgIHsKICAgICAgIFNFVF9CSVQoKihfX0lPIHVpbnQzMl90ICopcmVnaXN0ZXJfYWRkcmVzcywgMVVMIDw8IEdUWkNfR0VUX1BFUklQSF9QT1MoUGVyaXBoSWQpKTsKQEAgLTI4OCw4ICsyODYsNyBAQAogI2VuZGlmIC8qIGRlZmluZWQoX19BUk1fRkVBVFVSRV9DTVNFKSAmJiAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKSAqLwogCiAgICAgLyogcHJpdmlsZWdlIGNvbmZpZ3VyYXRpb24gKi8KLSAgICByZWdpc3Rlcl9hZGRyZXNzID0gICAodWludDMyX3QpJihHVFpDX1RaU0MtPlBSSVZDRkdSMSkKLSAgICAgICAgICAgICAgICAgICAgICAgKyAoNFUgKiBHVFpDX0dFVF9SRUdfSU5ERVgoUGVyaXBoSWQpKTsKKyAgICByZWdpc3Rlcl9hZGRyZXNzID0gKHVpbnQzMl90KSAmKEdUWkNfVFpTQy0+UFJJVkNGR1IxKSArICg0VSAqIEdUWkNfR0VUX1JFR19JTkRFWChQZXJpcGhJZCkpOwogICAgIGlmICgoUGVyaXBoQXR0cmlidXRlcyAmIEdUWkNfVFpTQ19QRVJJUEhfUFJJVikgPT0gR1RaQ19UWlNDX1BFUklQSF9QUklWKQogICAgIHsKICAgICAgIFNFVF9CSVQoKihfX0lPIHVpbnQzMl90ICopcmVnaXN0ZXJfYWRkcmVzcywgMVVMIDw8IEdUWkNfR0VUX1BFUklQSF9QT1MoUGVyaXBoSWQpKTsKQEAgLTMyNiwxMCArMzIzLDkgQEAKICAgdWludDMyX3QgcmVnaXN0ZXJfYWRkcmVzczsKIAogICAvKiBjaGVjayBlbnRyeSBwYXJhbWV0ZXJzICovCi0gIGlmICggICAoUGVyaXBoQXR0cmlidXRlcyA9PSBOVUxMKQotICAgICAgfHwgKCAgSEFMX0dUWkNfR0VUX0FSUkFZX0lOREVYKFBlcmlwaElkKSA+PSBHVFpDX1RaU0NfUEVSSVBIX05VTUJFUikKLSAgICAgIHx8ICggICAgKChQZXJpcGhJZCAmIEdUWkNfUEVSSVBIX0FMTCkgIT0gMFUpCi0gICAgICAgICAgICYmIChIQUxfR1RaQ19HRVRfQVJSQVlfSU5ERVgoUGVyaXBoSWQpICE9IDBVKSkpCisgIGlmICgoUGVyaXBoQXR0cmlidXRlcyA9PSBOVUxMKQorICAgICAgfHwgKEhBTF9HVFpDX0dFVF9BUlJBWV9JTkRFWChQZXJpcGhJZCkgPj0gR1RaQ19UWlNDX1BFUklQSF9OVU1CRVIpCisgICAgICB8fCAoKChQZXJpcGhJZCAmIEdUWkNfUEVSSVBIX0FMTCkgIT0gMFUpICYmIChIQUxfR1RaQ19HRVRfQVJSQVlfSU5ERVgoUGVyaXBoSWQpICE9IDBVKSkpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC0zNDIsNyArMzM4LDcgQEAKICAgICByZWdfdmFsdWUgPSBSRUFEX1JFRyhHVFpDX1RaU0MtPlNFQ0NGR1IxKTsKICAgICBmb3IgKGkgPSAwVTsgaSA8IDMyVTsgaSsrKQogICAgIHsKLSAgICAgIGlmKCgocmVnX3ZhbHVlICYgKDFVTCA8PCBpKSkgPj4gaSkgIT0gMFUpCisgICAgICBpZiAoKChyZWdfdmFsdWUgJiAoMVVMIDw8IGkpKSA+PiBpKSAhPSAwVSkKICAgICAgIHsKICAgICAgICAgUGVyaXBoQXR0cmlidXRlc1tpXSA9IEdUWkNfVFpTQ19QRVJJUEhfU0VDOwogICAgICAgfQpAQCAtMzU1LDcgKzM1MSw3IEBACiAgICAgcmVnX3ZhbHVlID0gUkVBRF9SRUcoR1RaQ19UWlNDLT5TRUNDRkdSMik7CiAgICAgZm9yICgvKmkgPSAzMlUqLzsgaSA8IEdUWkNfVFpTQ19QRVJJUEhfTlVNQkVSOyBpKyspCiAgICAgewotICAgICAgaWYoKChyZWdfdmFsdWUgJiAoMVVMIDw8IChpIC0gMzJVKSkpID4+IChpIC0gMzJVKSkgIT0gMFUpCisgICAgICBpZiAoKChyZWdfdmFsdWUgJiAoMVVMIDw8IChpIC0gMzJVKSkpID4+IChpIC0gMzJVKSkgIT0gMFUpCiAgICAgICB7CiAgICAgICAgIFBlcmlwaEF0dHJpYnV0ZXNbaV0gPSBHVFpDX1RaU0NfUEVSSVBIX1NFQzsKICAgICAgIH0KQEAgLTM3MSw3ICszNjcsNyBAQAogICAgIHJlZ192YWx1ZSA9IFJFQURfUkVHKEdUWkNfVFpTQy0+UFJJVkNGR1IxKTsKICAgICBmb3IgKGkgPSAwVTsgaSA8IDMyVTsgaSsrKQogICAgIHsKLSAgICAgIGlmKCgocmVnX3ZhbHVlICYgKDFVTCA8PCBpKSkgPj4gaSkgIT0gMFUpCisgICAgICBpZiAoKChyZWdfdmFsdWUgJiAoMVVMIDw8IGkpKSA+PiBpKSAhPSAwVSkKICAgICAgIHsKICAgICAgICAgUGVyaXBoQXR0cmlidXRlc1tpXSB8PSBHVFpDX1RaU0NfUEVSSVBIX1BSSVY7CiAgICAgICB9CkBAIC0zODQsNyArMzgwLDcgQEAKICAgICByZWdfdmFsdWUgPSBSRUFEX1JFRyhHVFpDX1RaU0MtPlBSSVZDRkdSMik7CiAgICAgZm9yICgvKmkgPSAzMlUqLzsgaSA8IEdUWkNfVFpTQ19QRVJJUEhfTlVNQkVSOyBpKyspCiAgICAgewotICAgICAgaWYoKChyZWdfdmFsdWUgJiAoMVVMIDw8IChpIC0gMzJVKSkpID4+IChpIC0gMzJVKSkgIT0gMFUpCisgICAgICBpZiAoKChyZWdfdmFsdWUgJiAoMVVMIDw8IChpIC0gMzJVKSkpID4+IChpIC0gMzJVKSkgIT0gMFUpCiAgICAgICB7CiAgICAgICAgIFBlcmlwaEF0dHJpYnV0ZXNbaV0gfD0gR1RaQ19UWlNDX1BFUklQSF9QUklWOwogICAgICAgfQpAQCAtNDAwLDExICszOTYsMTAgQEAKICAgICAvKiBjb21tb24gY2FzZSB3aGVyZSBvbmx5IG9uZSBwZXJpcGhlcmFsIGlzIGNvbmZpZ3VyZWQgKi8KIAogICAgIC8qIHNlY3VyZSBjb25maWd1cmF0aW9uICovCi0gICAgcmVnaXN0ZXJfYWRkcmVzcyA9ICAgKHVpbnQzMl90KSYoR1RaQ19UWlNDLT5TRUNDRkdSMSkKLSAgICAgICAgICAgICAgICAgICAgICAgKyAoNFUgKiBHVFpDX0dFVF9SRUdfSU5ERVgoUGVyaXBoSWQpKTsKKyAgICByZWdpc3Rlcl9hZGRyZXNzID0gKHVpbnQzMl90KSAmKEdUWkNfVFpTQy0+U0VDQ0ZHUjEpICsgKDRVICogR1RaQ19HRVRfUkVHX0lOREVYKFBlcmlwaElkKSk7CiAKLSAgICBpZigoKFJFQURfQklUKCooX19JTyB1aW50MzJfdCAqKXJlZ2lzdGVyX2FkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAxVUwgPDwgR1RaQ19HRVRfUEVSSVBIX1BPUyhQZXJpcGhJZCkpKSA+PiBHVFpDX0dFVF9QRVJJUEhfUE9TKFBlcmlwaElkKSkKKyAgICBpZiAoKChSRUFEX0JJVCgqKF9fSU8gdWludDMyX3QgKilyZWdpc3Rlcl9hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgIDFVTCA8PCBHVFpDX0dFVF9QRVJJUEhfUE9TKFBlcmlwaElkKSkpID4+IEdUWkNfR0VUX1BFUklQSF9QT1MoUGVyaXBoSWQpKQogICAgICAgICAhPSAwVSkKICAgICB7CiAgICAgICAqUGVyaXBoQXR0cmlidXRlcyA9IEdUWkNfVFpTQ19QRVJJUEhfU0VDOwpAQCAtNDE1LDExICs0MTAsMTAgQEAKICAgICB9CiAKICAgICAvKiBwcml2aWxlZ2UgY29uZmlndXJhdGlvbiAqLwotICAgIHJlZ2lzdGVyX2FkZHJlc3MgPSAgICh1aW50MzJfdCkmKEdUWkNfVFpTQy0+UFJJVkNGR1IxKQotICAgICAgICAgICAgICAgICAgICAgICArICg0VSAqIEdUWkNfR0VUX1JFR19JTkRFWChQZXJpcGhJZCkpOworICAgIHJlZ2lzdGVyX2FkZHJlc3MgPSAodWludDMyX3QpICYoR1RaQ19UWlNDLT5QUklWQ0ZHUjEpICsgKDRVICogR1RaQ19HRVRfUkVHX0lOREVYKFBlcmlwaElkKSk7CiAKLSAgICBpZigoKFJFQURfQklUKCooX19JTyB1aW50MzJfdCAqKXJlZ2lzdGVyX2FkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAxVUwgPDwgR1RaQ19HRVRfUEVSSVBIX1BPUyhQZXJpcGhJZCkpKSA+PiBHVFpDX0dFVF9QRVJJUEhfUE9TKFBlcmlwaElkKSkKKyAgICBpZiAoKChSRUFEX0JJVCgqKF9fSU8gdWludDMyX3QgKilyZWdpc3Rlcl9hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgIDFVTCA8PCBHVFpDX0dFVF9QRVJJUEhfUE9TKFBlcmlwaElkKSkpID4+IEdUWkNfR0VUX1BFUklQSF9QT1MoUGVyaXBoSWQpKQogICAgICAgICAhPSAwVSkKICAgICB7CiAgICAgICAqUGVyaXBoQXR0cmlidXRlcyB8PSBHVFpDX1RaU0NfUEVSSVBIX1BSSVY7CkBAIC00NTksOSArNDUzLDggQEAKICAgKiAgICAgICAgIFRoZSBzdHJ1Y3R1cmUgZGVzY3JpcHRpb24gaXMgYXZhaWxhYmxlIGluIEByZWYgR1RaQ19FeHBvcnRlZF9UeXBlcy4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMuCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfR1RaQ19UWlNDX01QQ1dNX0NvbmZpZ01lbUF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE1lbUJhc2VBZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICBNUENXTV9Db25maWdUeXBlRGVmICpwTVBDV01fRGVzYykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9HVFpDX1RaU0NfTVBDV01fQ29uZmlnTWVtQXR0cmlidXRlcyh1aW50MzJfdCBNZW1CYXNlQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUENXTV9Db25maWdUeXBlRGVmICpwTVBDV01fRGVzYykKIHsKICAgdWludDMyX3QgcmVnaXN0ZXJfYWRkcmVzczsKICAgdWludDMyX3QgcmVnX3ZhbHVlOwpAQCAtNDcwLDExICs0NjMsMTAgQEAKICAgdWludDMyX3QgbGVuZ3RoX3BvcywgbGVuZ3RoX21zazsKIAogICAvKiBjaGVjayBlbnRyeSBwYXJhbWV0ZXJzICovCi0gIGlmICggICAocE1QQ1dNX0Rlc2MtPkFyZWFJZCA+IEdUWkNfVFpTQ19NUENXTV9JRDIpCi0gICAgICB8fCAoICAgKE1lbUJhc2VBZGRyZXNzID09IEZNQ19CQU5LMykKLSAgICAgICAgICAmJiAocE1QQ1dNX0Rlc2MtPkFyZWFJZCA9PSBHVFpDX1RaU0NfTVBDV01fSUQyKSkKLSAgICAgIHx8ICgoICAgcE1QQ1dNX0Rlc2MtPk9mZnNldCAlIEdUWkNfVFpTQ19NUENXTV9HUkFOVUxBUklUWSkgIT0gMFUpCi0gICAgICB8fCAoKCAgIHBNUENXTV9EZXNjLT5MZW5ndGggJSBHVFpDX1RaU0NfTVBDV01fR1JBTlVMQVJJVFkpICE9IDBVKSkKKyAgaWYgKChwTVBDV01fRGVzYy0+QXJlYUlkID4gR1RaQ19UWlNDX01QQ1dNX0lEMikKKyAgICAgIHx8ICgoTWVtQmFzZUFkZHJlc3MgPT0gRk1DX0JBTkszKSAmJiAocE1QQ1dNX0Rlc2MtPkFyZWFJZCA9PSBHVFpDX1RaU0NfTVBDV01fSUQyKSkKKyAgICAgIHx8ICgocE1QQ1dNX0Rlc2MtPk9mZnNldCAlIEdUWkNfVFpTQ19NUENXTV9HUkFOVUxBUklUWSkgIT0gMFUpCisgICAgICB8fCAoKHBNUENXTV9EZXNjLT5MZW5ndGggJSBHVFpDX1RaU0NfTVBDV01fR1JBTlVMQVJJVFkpICE9IDBVKSkKICAgewogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KQEAgLTQ4Niw0NCArNDc4LDQ0IEBACiAgICAgICBzaXplID0gR1RaQ19UWlNDX01QQ1dNMV9NRU1fU0laRTsKICAgICAgIGlmIChwTVBDV01fRGVzYy0+QXJlYUlkID09IEdUWkNfVFpTQ19NUENXTV9JRDEpCiAgICAgICB7Ci0gICAgICAgICAgcmVnaXN0ZXJfYWRkcmVzcyA9ICh1aW50MzJfdCkmKEdUWkNfVFpTQ19TLT5NUENXTTFfTlNXTVIxKTsKLSAgICAgICAgICBzdGFydF9wb3MgPSBHVFpDX1RaU0NfTVBDV00xX05TV01SMV9OU1dNMVNUUlRfUG9zOwotICAgICAgICAgIHN0YXJ0X21zayA9IEdUWkNfVFpTQ19NUENXTTFfTlNXTVIxX05TV00xU1RSVF9Nc2s7Ci0gICAgICAgICAgbGVuZ3RoX3BvcyA9IEdUWkNfVFpTQ19NUENXTTFfTlNXTVIxX05TV00xTEdUSF9Qb3M7Ci0gICAgICAgICAgbGVuZ3RoX21zayA9IEdUWkNfVFpTQ19NUENXTTFfTlNXTVIxX05TV00xTEdUSF9Nc2s7CisgICAgICAgIHJlZ2lzdGVyX2FkZHJlc3MgPSAodWludDMyX3QpICYoR1RaQ19UWlNDX1MtPk1QQ1dNMV9OU1dNUjEpOworICAgICAgICBzdGFydF9wb3MgPSBHVFpDX1RaU0NfTVBDV00xX05TV01SMV9OU1dNMVNUUlRfUG9zOworICAgICAgICBzdGFydF9tc2sgPSBHVFpDX1RaU0NfTVBDV00xX05TV01SMV9OU1dNMVNUUlRfTXNrOworICAgICAgICBsZW5ndGhfcG9zID0gR1RaQ19UWlNDX01QQ1dNMV9OU1dNUjFfTlNXTTFMR1RIX1BvczsKKyAgICAgICAgbGVuZ3RoX21zayA9IEdUWkNfVFpTQ19NUENXTTFfTlNXTVIxX05TV00xTEdUSF9Nc2s7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgICAgLyogSGVyZSBwTVBDV01fRGVzYy0+QXJlYUlkID09IEdUWkNfVFpTQ19NUENXTV9JRDIKLSAgICAgICAgICAgKiAoUGFyYW1ldGVyIGFscmVhZHkgY2hlY2tlZCkKLSAgICAgICAgICAgKi8KLSAgICAgICAgICByZWdpc3Rlcl9hZGRyZXNzID0gKHVpbnQzMl90KSYoR1RaQ19UWlNDX1MtPk1QQ1dNMV9OU1dNUjIpOwotICAgICAgICAgIHN0YXJ0X3BvcyA9IEdUWkNfVFpTQ19NUENXTTFfTlNXTVIyX05TV00yU1RSVF9Qb3M7Ci0gICAgICAgICAgc3RhcnRfbXNrID0gR1RaQ19UWlNDX01QQ1dNMV9OU1dNUjJfTlNXTTJTVFJUX01zazsKLSAgICAgICAgICBsZW5ndGhfcG9zID0gR1RaQ19UWlNDX01QQ1dNMV9OU1dNUjJfTlNXTTJMR1RIX1BvczsKLSAgICAgICAgICBsZW5ndGhfbXNrID0gR1RaQ19UWlNDX01QQ1dNMV9OU1dNUjJfTlNXTTJMR1RIX01zazsKKyAgICAgICAgLyogSGVyZSBwTVBDV01fRGVzYy0+QXJlYUlkID09IEdUWkNfVFpTQ19NUENXTV9JRDIKKyAgICAgICAgICogKFBhcmFtZXRlciBhbHJlYWR5IGNoZWNrZWQpCisgICAgICAgICAqLworICAgICAgICByZWdpc3Rlcl9hZGRyZXNzID0gKHVpbnQzMl90KSAmKEdUWkNfVFpTQ19TLT5NUENXTTFfTlNXTVIyKTsKKyAgICAgICAgc3RhcnRfcG9zID0gR1RaQ19UWlNDX01QQ1dNMV9OU1dNUjJfTlNXTTJTVFJUX1BvczsKKyAgICAgICAgc3RhcnRfbXNrID0gR1RaQ19UWlNDX01QQ1dNMV9OU1dNUjJfTlNXTTJTVFJUX01zazsKKyAgICAgICAgbGVuZ3RoX3BvcyA9IEdUWkNfVFpTQ19NUENXTTFfTlNXTVIyX05TV00yTEdUSF9Qb3M7CisgICAgICAgIGxlbmd0aF9tc2sgPSBHVFpDX1RaU0NfTVBDV00xX05TV01SMl9OU1dNMkxHVEhfTXNrOwogICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgY2FzZSBGTUNfQkFOSzE6CiAgICAgICBzaXplID0gR1RaQ19UWlNDX01QQ1dNMV9NRU1fU0laRTsKICAgICAgIGlmIChwTVBDV01fRGVzYy0+QXJlYUlkID09IEdUWkNfVFpTQ19NUENXTV9JRDEpCiAgICAgICB7Ci0gICAgICAgICAgcmVnaXN0ZXJfYWRkcmVzcyA9ICh1aW50MzJfdCkmKEdUWkNfVFpTQ19TLT5NUENXTTJfTlNXTVIxKTsKLSAgICAgICAgICBzdGFydF9wb3MgPSBHVFpDX1RaU0NfTVBDV00yX05TV01SMV9OU1dNMVNUUlRfUG9zOwotICAgICAgICAgIHN0YXJ0X21zayA9IEdUWkNfVFpTQ19NUENXTTJfTlNXTVIxX05TV00xU1RSVF9Nc2s7Ci0gICAgICAgICAgbGVuZ3RoX3BvcyA9IEdUWkNfVFpTQ19NUENXTTJfTlNXTVIxX05TV00xTEdUSF9Qb3M7Ci0gICAgICAgICAgbGVuZ3RoX21zayA9IEdUWkNfVFpTQ19NUENXTTJfTlNXTVIxX05TV00xTEdUSF9Nc2s7CisgICAgICAgIHJlZ2lzdGVyX2FkZHJlc3MgPSAodWludDMyX3QpICYoR1RaQ19UWlNDX1MtPk1QQ1dNMl9OU1dNUjEpOworICAgICAgICBzdGFydF9wb3MgPSBHVFpDX1RaU0NfTVBDV00yX05TV01SMV9OU1dNMVNUUlRfUG9zOworICAgICAgICBzdGFydF9tc2sgPSBHVFpDX1RaU0NfTVBDV00yX05TV01SMV9OU1dNMVNUUlRfTXNrOworICAgICAgICBsZW5ndGhfcG9zID0gR1RaQ19UWlNDX01QQ1dNMl9OU1dNUjFfTlNXTTFMR1RIX1BvczsKKyAgICAgICAgbGVuZ3RoX21zayA9IEdUWkNfVFpTQ19NUENXTTJfTlNXTVIxX05TV00xTEdUSF9Nc2s7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgICAgLyogSGVyZSBwTVBDV01fRGVzYy0+QXJlYUlkID09IEdUWkNfVFpTQ19NUENXTV9JRDIKLSAgICAgICAgICAgKiAoUGFyYW1ldGVyIGFscmVhZHkgY2hlY2tlZCkKLSAgICAgICAgICAgKi8KLSAgICAgICAgICByZWdpc3Rlcl9hZGRyZXNzID0gKHVpbnQzMl90KSYoR1RaQ19UWlNDX1MtPk1QQ1dNMl9OU1dNUjIpOwotICAgICAgICAgIHN0YXJ0X3BvcyA9IEdUWkNfVFpTQ19NUENXTTJfTlNXTVIyX05TV00yU1RSVF9Qb3M7Ci0gICAgICAgICAgc3RhcnRfbXNrID0gR1RaQ19UWlNDX01QQ1dNMl9OU1dNUjJfTlNXTTJTVFJUX01zazsKLSAgICAgICAgICBsZW5ndGhfcG9zID0gR1RaQ19UWlNDX01QQ1dNMl9OU1dNUjJfTlNXTTJMR1RIX1BvczsKLSAgICAgICAgICBsZW5ndGhfbXNrID0gR1RaQ19UWlNDX01QQ1dNMl9OU1dNUjJfTlNXTTJMR1RIX01zazsKKyAgICAgICAgLyogSGVyZSBwTVBDV01fRGVzYy0+QXJlYUlkID09IEdUWkNfVFpTQ19NUENXTV9JRDIKKyAgICAgICAgICogKFBhcmFtZXRlciBhbHJlYWR5IGNoZWNrZWQpCisgICAgICAgICAqLworICAgICAgICByZWdpc3Rlcl9hZGRyZXNzID0gKHVpbnQzMl90KSAmKEdUWkNfVFpTQ19TLT5NUENXTTJfTlNXTVIyKTsKKyAgICAgICAgc3RhcnRfcG9zID0gR1RaQ19UWlNDX01QQ1dNMl9OU1dNUjJfTlNXTTJTVFJUX1BvczsKKyAgICAgICAgc3RhcnRfbXNrID0gR1RaQ19UWlNDX01QQ1dNMl9OU1dNUjJfTlNXTTJTVFJUX01zazsKKyAgICAgICAgbGVuZ3RoX3BvcyA9IEdUWkNfVFpTQ19NUENXTTJfTlNXTVIyX05TV00yTEdUSF9Qb3M7CisgICAgICAgIGxlbmd0aF9tc2sgPSBHVFpDX1RaU0NfTVBDV00yX05TV01SMl9OU1dNMkxHVEhfTXNrOwogICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgY2FzZSBGTUNfQkFOSzM6CkBAIC01MzEsNyArNTIzLDcgQEAKICAgICAgICAqIChQYXJhbWV0ZXIgYWxyZWFkeSBjaGVja2VkKQogICAgICAgICovCiAgICAgICBzaXplID0gR1RaQ19UWlNDX01QQ1dNM19NRU1fU0laRTsKLSAgICAgIHJlZ2lzdGVyX2FkZHJlc3MgPSAodWludDMyX3QpJihHVFpDX1RaU0NfUy0+TVBDV00zX05TV01SMSk7CisgICAgICByZWdpc3Rlcl9hZGRyZXNzID0gKHVpbnQzMl90KSAmKEdUWkNfVFpTQ19TLT5NUENXTTNfTlNXTVIxKTsKICAgICAgIHN0YXJ0X3BvcyA9IEdUWkNfVFpTQ19NUENXTTNfTlNXTVIxX05TV00xU1RSVF9Qb3M7CiAgICAgICBzdGFydF9tc2sgPSBHVFpDX1RaU0NfTVBDV00zX05TV01SMV9OU1dNMVNUUlRfTXNrOwogICAgICAgbGVuZ3RoX3BvcyA9IEdUWkNfVFpTQ19NUENXTTNfTlNXTVIxX05TV00xTEdUSF9Qb3M7CkBAIC01NDIsMTAgKzUzNCw4IEBACiAgICAgICBicmVhazsKICAgfQogCi0gIGlmICggICAocE1QQ1dNX0Rlc2MtPk9mZnNldCA+IHNpemUpCi0gICAgICB8fCAoICAgKCAgIHBNUENXTV9EZXNjLT5PZmZzZXQKLSAgICAgICAgICAgICAgICsgcE1QQ1dNX0Rlc2MtPkxlbmd0aCkKLSAgICAgICAgICAgPiBzaXplKSkKKyAgaWYgKChwTVBDV01fRGVzYy0+T2Zmc2V0ID4gc2l6ZSkKKyAgICAgIHx8ICgocE1QQ1dNX0Rlc2MtPk9mZnNldCArIHBNUENXTV9EZXNjLT5MZW5ndGgpID4gc2l6ZSkpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC01NjUsOSArNTU1LDggQEAKICAgKiAgICAgICAgIFRoZSBzdHJ1Y3R1cmUgZGVzY3JpcHRpb24gaXMgYXZhaWxhYmxlIGluIEByZWYgR1RaQ19FeHBvcnRlZF9UeXBlcy4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMuCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfR1RaQ19UWlNDX01QQ1dNX0dldENvbmZpZ01lbUF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE1lbUJhc2VBZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICBNUENXTV9Db25maWdUeXBlRGVmICpwTVBDV01fRGVzYykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9HVFpDX1RaU0NfTVBDV01fR2V0Q29uZmlnTWVtQXR0cmlidXRlcyh1aW50MzJfdCBNZW1CYXNlQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUENXTV9Db25maWdUeXBlRGVmICpwTVBDV01fRGVzYykKIHsKICAgdWludDMyX3QgcmVnaXN0ZXJfYWRkcmVzczsKICAgdWludDMyX3QgcmVnX3ZhbHVlOwpAQCAtNTc4LDIxICs1NjcsMjEgQEAKICAgc3dpdGNoIChNZW1CYXNlQWRkcmVzcykKICAgewogICAgIGNhc2UgT0NUT1NQSTFfQkFTRToKLSAgICAgIHJlZ2lzdGVyX2FkZHJlc3MgPSAodWludDMyX3QpJihHVFpDX1RaU0NfUy0+TVBDV00xX05TV01SMSk7CisgICAgICByZWdpc3Rlcl9hZGRyZXNzID0gKHVpbnQzMl90KSAmKEdUWkNfVFpTQ19TLT5NUENXTTFfTlNXTVIxKTsKICAgICAgIHN0YXJ0X3BvcyA9IEdUWkNfVFpTQ19NUENXTTFfTlNXTVIxX05TV00xU1RSVF9Qb3M7CiAgICAgICBzdGFydF9tc2sgPSBHVFpDX1RaU0NfTVBDV00xX05TV01SMV9OU1dNMVNUUlRfTXNrOwogICAgICAgbGVuZ3RoX3BvcyA9IEdUWkNfVFpTQ19NUENXTTFfTlNXTVIxX05TV00xTEdUSF9Qb3M7CiAgICAgICBsZW5ndGhfbXNrID0gR1RaQ19UWlNDX01QQ1dNMV9OU1dNUjFfTlNXTTFMR1RIX01zazsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgRk1DX0JBTksxOgotICAgICAgcmVnaXN0ZXJfYWRkcmVzcyA9ICh1aW50MzJfdCkmKEdUWkNfVFpTQ19TLT5NUENXTTJfTlNXTVIxKTsKKyAgICAgIHJlZ2lzdGVyX2FkZHJlc3MgPSAodWludDMyX3QpICYoR1RaQ19UWlNDX1MtPk1QQ1dNMl9OU1dNUjEpOwogICAgICAgc3RhcnRfcG9zID0gR1RaQ19UWlNDX01QQ1dNMl9OU1dNUjFfTlNXTTFTVFJUX1BvczsKICAgICAgIHN0YXJ0X21zayA9IEdUWkNfVFpTQ19NUENXTTJfTlNXTVIxX05TV00xU1RSVF9Nc2s7CiAgICAgICBsZW5ndGhfcG9zID0gR1RaQ19UWlNDX01QQ1dNMl9OU1dNUjFfTlNXTTFMR1RIX1BvczsKICAgICAgIGxlbmd0aF9tc2sgPSBHVFpDX1RaU0NfTVBDV00yX05TV01SMV9OU1dNMUxHVEhfTXNrOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBGTUNfQkFOSzM6Ci0gICAgICByZWdpc3Rlcl9hZGRyZXNzID0gKHVpbnQzMl90KSYoR1RaQ19UWlNDX1MtPk1QQ1dNM19OU1dNUjEpOworICAgICAgcmVnaXN0ZXJfYWRkcmVzcyA9ICh1aW50MzJfdCkgJihHVFpDX1RaU0NfUy0+TVBDV00zX05TV01SMSk7CiAgICAgICBzdGFydF9wb3MgPSBHVFpDX1RaU0NfTVBDV00zX05TV01SMV9OU1dNMVNUUlRfUG9zOwogICAgICAgc3RhcnRfbXNrID0gR1RaQ19UWlNDX01QQ1dNM19OU1dNUjFfTlNXTTFTVFJUX01zazsKICAgICAgIGxlbmd0aF9wb3MgPSBHVFpDX1RaU0NfTVBDV00zX05TV01SMV9OU1dNMUxHVEhfUG9zOwpAQCAtNjE4LDE0ICs2MDcsMTQgQEAKICAgICBzd2l0Y2ggKE1lbUJhc2VBZGRyZXNzKQogICAgIHsKICAgICAgIGNhc2UgT0NUT1NQSTFfQkFTRToKLSAgICAgICAgcmVnaXN0ZXJfYWRkcmVzcyA9ICh1aW50MzJfdCkmKEdUWkNfVFpTQ19TLT5NUENXTTFfTlNXTVIyKTsKKyAgICAgICAgcmVnaXN0ZXJfYWRkcmVzcyA9ICh1aW50MzJfdCkgJihHVFpDX1RaU0NfUy0+TVBDV00xX05TV01SMik7CiAgICAgICAgIHN0YXJ0X3BvcyA9IEdUWkNfVFpTQ19NUENXTTFfTlNXTVIyX05TV00yU1RSVF9Qb3M7CiAgICAgICAgIHN0YXJ0X21zayA9IEdUWkNfVFpTQ19NUENXTTFfTlNXTVIyX05TV00yU1RSVF9Nc2s7CiAgICAgICAgIGxlbmd0aF9wb3MgPSBHVFpDX1RaU0NfTVBDV00xX05TV01SMl9OU1dNMkxHVEhfUG9zOwogICAgICAgICBsZW5ndGhfbXNrID0gR1RaQ19UWlNDX01QQ1dNMV9OU1dNUjJfTlNXTTJMR1RIX01zazsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEZNQ19CQU5LMToKLSAgICAgICAgcmVnaXN0ZXJfYWRkcmVzcyA9ICh1aW50MzJfdCkmKEdUWkNfVFpTQ19TLT5NUENXTTJfTlNXTVIyKTsKKyAgICAgICAgcmVnaXN0ZXJfYWRkcmVzcyA9ICh1aW50MzJfdCkgJihHVFpDX1RaU0NfUy0+TVBDV00yX05TV01SMik7CiAgICAgICAgIHN0YXJ0X3BvcyA9IEdUWkNfVFpTQ19NUENXTTJfTlNXTVIyX05TV00yU1RSVF9Qb3M7CiAgICAgICAgIHN0YXJ0X21zayA9IEdUWkNfVFpTQ19NUENXTTJfTlNXTVIyX05TV00yU1RSVF9Nc2s7CiAgICAgICAgIGxlbmd0aF9wb3MgPSBHVFpDX1RaU0NfTVBDV00yX05TV01SMl9OU1dNMkxHVEhfUG9zOwpAQCAtNzI5LDE2ICs3MTgsMTIgQEAKICAgdWludDMyX3QgaTsKIAogICAvKiBjaGVjayBlbnRyeSBwYXJhbWV0ZXJzICovCi0gIGlmICggICAoICAgICAhKElTX0dUWkNfQkFTRV9BRERSRVNTKFNSQU0xLCBNZW1CYXNlQWRkcmVzcykpCi0gICAgICAgICAgICYmICAhKElTX0dUWkNfQkFTRV9BRERSRVNTKFNSQU0yLCBNZW1CYXNlQWRkcmVzcykpKQotICAgICAgfHwgKCAgICggICAgcE1QQ0JCX2Rlc2MtPlNlY3VyZVJXSWxsZWdhbE1vZGUKLSAgICAgICAgICAgICAgICE9IEdUWkNfTVBDQkJfU1JXSUxBRElTX0VOQUJMRSkKLSAgICAgICAgICAmJiAoICAgIHBNUENCQl9kZXNjLT5TZWN1cmVSV0lsbGVnYWxNb2RlCi0gICAgICAgICAgICAgICAhPSBHVFpDX01QQ0JCX1NSV0lMQURJU19ESVNBQkxFKSkKLSAgICAgIHx8ICggICAoICAgIHBNUENCQl9kZXNjLT5JbnZlcnRTZWN1cmVTdGF0ZQotICAgICAgICAgICAgICAgIT0gR1RaQ19NUENCQl9JTlZTRUNTVEFURV9OT1RfSU5WRVJURUQpCi0gICAgICAgICAgJiYgKCAgICBwTVBDQkJfZGVzYy0+SW52ZXJ0U2VjdXJlU3RhdGUKLSAgICAgICAgICAgICAgICE9IEdUWkNfTVBDQkJfSU5WU0VDU1RBVEVfSU5WRVJURUQpKSkKKyAgaWYgKCghKElTX0dUWkNfQkFTRV9BRERSRVNTKFNSQU0xLCBNZW1CYXNlQWRkcmVzcykpCisgICAgICAgJiYgICEoSVNfR1RaQ19CQVNFX0FERFJFU1MoU1JBTTIsIE1lbUJhc2VBZGRyZXNzKSkpCisgICAgICB8fCAoKHBNUENCQl9kZXNjLT5TZWN1cmVSV0lsbGVnYWxNb2RlICE9IEdUWkNfTVBDQkJfU1JXSUxBRElTX0VOQUJMRSkKKyAgICAgICAgICAmJiAocE1QQ0JCX2Rlc2MtPlNlY3VyZVJXSWxsZWdhbE1vZGUgIT0gR1RaQ19NUENCQl9TUldJTEFESVNfRElTQUJMRSkpCisgICAgICB8fCAoKHBNUENCQl9kZXNjLT5JbnZlcnRTZWN1cmVTdGF0ZSAhPSBHVFpDX01QQ0JCX0lOVlNFQ1NUQVRFX05PVF9JTlZFUlRFRCkKKyAgICAgICAgICAmJiAocE1QQ0JCX2Rlc2MtPkludmVydFNlY3VyZVN0YXRlICE9IEdUWkNfTVBDQkJfSU5WU0VDU1RBVEVfSU5WRVJURUQpKSkKICAgewogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KQEAgLTc5NSw4ICs3ODAsOCBAQAogICB1aW50MzJfdCBpOwogCiAgIC8qIGNoZWNrIGVudHJ5IHBhcmFtZXRlcnMgKi8KLSAgaWYgKCAgICAhKElTX0dUWkNfQkFTRV9BRERSRVNTKFNSQU0xLCBNZW1CYXNlQWRkcmVzcykpCi0gICAgICAgJiYgIShJU19HVFpDX0JBU0VfQUREUkVTUyhTUkFNMiwgTWVtQmFzZUFkZHJlc3MpKSkKKyAgaWYgKCEoSVNfR1RaQ19CQVNFX0FERFJFU1MoU1JBTTEsIE1lbUJhc2VBZGRyZXNzKSkKKyAgICAgICYmICEoSVNfR1RaQ19CQVNFX0FERFJFU1MoU1JBTTIsIE1lbUJhc2VBZGRyZXNzKSkpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC04MjAsOCArODA1LDcgQEAKICAgcE1QQ0JCX2Rlc2MtPlNlY3VyZVJXSWxsZWdhbE1vZGUgPSAocmVnX3ZhbHVlICYgR1RaQ19NUENCQl9DUl9TUldJTEFESVNfTXNrKTsKICAgc2l6ZV9tYXNrID0gKDFVTCA8PCAobWVtX3NpemUgLyBHVFpDX01QQ0JCX1NVUEVSQkxPQ0tfU0laRSkpIC0gMVU7CiAgIC8qIGxpbWl0YXRpb246IGNvZGUgbm90IHBvcnRhYmxlIHdpdGggbWVtb3J5ID4gMjU2SyAqLwotICBwTVBDQkJfZGVzYy0+QXR0cmlidXRlQ29uZmlnLk1QQ0JCX0xvY2tDb25maWdfYXJyYXlbMF0gPSBSRUFEX1JFRyhtcGNiYl9wdHItPkxDS1ZUUjEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIHNpemVfbWFzazsKKyAgcE1QQ0JCX2Rlc2MtPkF0dHJpYnV0ZUNvbmZpZy5NUENCQl9Mb2NrQ29uZmlnX2FycmF5WzBdID0gUkVBRF9SRUcobXBjYmJfcHRyLT5MQ0tWVFIxKSYgc2l6ZV9tYXNrOwogCiAgIC8qIHJlYWQgdmVjdG9yIHJlZ2lzdGVyIGluZm9ybWF0aW9uICovCiAgIHNpemVfaW5fc3VwZXJibG9ja3MgPSAobWVtX3NpemUgLyBHVFpDX01QQ0JCX1NVUEVSQkxPQ0tfU0laRSk7CkBAIC04NjAsMjYgKzg0NCwyNiBAQAogCiAgIC8qIGNoZWNrIGVudHJ5IHBhcmFtZXRlcnMgYW5kIGRlZHVjZSBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgKi8KICAgZW5kX2FkZHJlc3MgPSBNZW1BZGRyZXNzICsgKE5iQmxvY2tzICogR1RaQ19NUENCQl9CTE9DS19TSVpFKSAtIDFVOwotICBpZiAoICggKElTX0FERFJFU1NfSU5fTlMoU1JBTTEsIE1lbUFkZHJlc3MpKQotICAgICAgJiYgKElTX0FERFJFU1NfSU5fTlMoU1JBTTEsIGVuZF9hZGRyZXNzKSkpICE9IDBVICkKKyAgaWYgKCgoSVNfQUREUkVTU19JTl9OUyhTUkFNMSwgTWVtQWRkcmVzcykpCisgICAgICAgJiYgKElTX0FERFJFU1NfSU5fTlMoU1JBTTEsIGVuZF9hZGRyZXNzKSkpICE9IDBVKQogICB7CiAgICAgbXBjYmJfcHRyID0gR1RaQ19NUENCQjFfUzsKICAgICBiYXNlX2FkZHJlc3MgPSBTUkFNMV9CQVNFX05TOwogICB9Ci0gIGVsc2UgaWYgKCAoIChJU19BRERSRVNTX0lOX1MoU1JBTTEsIE1lbUFkZHJlc3MpKQotICAgICAgICAgICAmJiAoSVNfQUREUkVTU19JTl9TKFNSQU0xLCBlbmRfYWRkcmVzcykpKSAhPSAwVSApCisgIGVsc2UgaWYgKCgoSVNfQUREUkVTU19JTl9TKFNSQU0xLCBNZW1BZGRyZXNzKSkKKyAgICAgICAgICAgICYmIChJU19BRERSRVNTX0lOX1MoU1JBTTEsIGVuZF9hZGRyZXNzKSkpICE9IDBVKQogICB7CiAgICAgbXBjYmJfcHRyID0gR1RaQ19NUENCQjFfUzsKICAgICBiYXNlX2FkZHJlc3MgPSBTUkFNMV9CQVNFX1M7CiAgIH0KLSAgZWxzZSBpZiAoICggKElTX0FERFJFU1NfSU5fTlMoU1JBTTIsIE1lbUFkZHJlc3MpKQotICAgICAgICAgICAmJiAoSVNfQUREUkVTU19JTl9OUyhTUkFNMiwgZW5kX2FkZHJlc3MpKSkgIT0gMFUgKQorICBlbHNlIGlmICgoKElTX0FERFJFU1NfSU5fTlMoU1JBTTIsIE1lbUFkZHJlc3MpKQorICAgICAgICAgICAgJiYgKElTX0FERFJFU1NfSU5fTlMoU1JBTTIsIGVuZF9hZGRyZXNzKSkpICE9IDBVKQogICB7CiAgICAgbXBjYmJfcHRyID0gR1RaQ19NUENCQjJfUzsKICAgICBiYXNlX2FkZHJlc3MgPSBTUkFNMl9CQVNFX05TOwogICB9Ci0gIGVsc2UgaWYgKCAoIChJU19BRERSRVNTX0lOX1MoU1JBTTIsIE1lbUFkZHJlc3MpKQotICAgICAgICAgICAmJiAoSVNfQUREUkVTU19JTl9TKFNSQU0yLCBlbmRfYWRkcmVzcykpKSAhPSAwVSApCisgIGVsc2UgaWYgKCgoSVNfQUREUkVTU19JTl9TKFNSQU0yLCBNZW1BZGRyZXNzKSkKKyAgICAgICAgICAgICYmIChJU19BRERSRVNTX0lOX1MoU1JBTTIsIGVuZF9hZGRyZXNzKSkpICE9IDBVKQogICB7CiAgICAgbXBjYmJfcHRyID0gR1RaQ19NUENCQjJfUzsKICAgICBiYXNlX2FkZHJlc3MgPSBTUkFNMl9CQVNFX1M7CkBAIC05NTUsMjUgKzkzOSwyNSBAQAogCiAgIC8qIGNoZWNrIGVudHJ5IHBhcmFtZXRlcnMgYW5kIGRlZHVjZSBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgKi8KICAgZW5kX2FkZHJlc3MgPSBNZW1BZGRyZXNzICsgKE5iQmxvY2tzICogR1RaQ19NUENCQl9CTE9DS19TSVpFKSAtIDFVOwotICBpZiAoICAgKElTX0FERFJFU1NfSU5fTlMoU1JBTTEsIE1lbUFkZHJlc3MpKQorICBpZiAoKElTX0FERFJFU1NfSU5fTlMoU1JBTTEsIE1lbUFkZHJlc3MpKQogICAgICAgJiYgKElTX0FERFJFU1NfSU5fTlMoU1JBTTEsIGVuZF9hZGRyZXNzKSkpCiAgIHsKICAgICBtcGNiYl9wdHIgPSBHVFpDX01QQ0JCMV9TOwogICAgIGJhc2VfYWRkcmVzcyA9IFNSQU0xX0JBU0VfTlM7CiAgIH0KLSAgZWxzZSBpZiAoICAgKElTX0FERFJFU1NfSU5fUyhTUkFNMSwgTWVtQWRkcmVzcykpCisgIGVsc2UgaWYgKChJU19BRERSRVNTX0lOX1MoU1JBTTEsIE1lbUFkZHJlc3MpKQogICAgICAgICAgICAmJiAoSVNfQUREUkVTU19JTl9TKFNSQU0xLCBlbmRfYWRkcmVzcykpKQogICB7CiAgICAgbXBjYmJfcHRyID0gR1RaQ19NUENCQjFfUzsKICAgICBiYXNlX2FkZHJlc3MgPSBTUkFNMV9CQVNFX1M7CiAgIH0KLSAgZWxzZSBpZiAoICAgKElTX0FERFJFU1NfSU5fTlMoU1JBTTIsIE1lbUFkZHJlc3MpKQorICBlbHNlIGlmICgoSVNfQUREUkVTU19JTl9OUyhTUkFNMiwgTWVtQWRkcmVzcykpCiAgICAgICAgICAgICYmIChJU19BRERSRVNTX0lOX05TKFNSQU0yLCBlbmRfYWRkcmVzcykpKQogICB7CiAgICAgbXBjYmJfcHRyID0gR1RaQ19NUENCQjJfUzsKICAgICBiYXNlX2FkZHJlc3MgPSBTUkFNMl9CQVNFX05TOwogICB9Ci0gIGVsc2UgaWYgKCAgIChJU19BRERSRVNTX0lOX1MoU1JBTTIsIE1lbUFkZHJlc3MpKQorICBlbHNlIGlmICgoSVNfQUREUkVTU19JTl9TKFNSQU0yLCBNZW1BZGRyZXNzKSkKICAgICAgICAgICAgJiYgKElTX0FERFJFU1NfSU5fUyhTUkFNMiwgZW5kX2FkZHJlc3MpKSkKICAgewogICAgIG1wY2JiX3B0ciA9IEdUWkNfTVBDQkIyX1M7CkBAIC05OTEsOCArOTc1LDggQEAKIAogICBmb3IgKGkgPSAwVTsgaSA8IE5iQmxvY2tzOyBpKyspCiAgIHsKLSAgICBwTWVtQXR0cmlidXRlc1tpXSA9ICAgIFJFQURfQklUKG1wY2JiX3B0ci0+VkNUUltvZmZzZXRfcmVnX3N0YXJ0XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFVTCA8PCAob2Zmc2V0X2JpdF9zdGFydCAlIDMyVSkpCisgICAgcE1lbUF0dHJpYnV0ZXNbaV0gPSBSRUFEX0JJVChtcGNiYl9wdHItPlZDVFJbb2Zmc2V0X3JlZ19zdGFydF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxVUwgPDwgKG9mZnNldF9iaXRfc3RhcnQgJSAzMlUpKQogICAgICAgICAgICAgICAgICAgICAgICAgPj4gKG9mZnNldF9iaXRfc3RhcnQgJSAzMlUpOwogCiAgICAgb2Zmc2V0X2JpdF9zdGFydCsrOwpAQCAtMTAzNCwyMCArMTAxOCwxOSBAQAogICB9CiAKICAgLyogY2hlY2sgZW50cnkgcGFyYW1ldGVycyAqLwotICBpZiAoICAgKElTX0FERFJFU1NfSU4oU1JBTTEsIE1lbUFkZHJlc3MpKQorICBpZiAoKElTX0FERFJFU1NfSU4oU1JBTTEsIE1lbUFkZHJlc3MpKQogICAgICAgJiYgKElTX0FERFJFU1NfSU4oU1JBTTEsIChNZW1BZGRyZXNzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoTmJTdXBlckJsb2NrcyAqIEdUWkNfTVBDQkJfU1VQRVJCTE9DS19TSVpFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMVUpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKE5iU3VwZXJCbG9ja3MgKiBHVFpDX01QQ0JCX1NVUEVSQkxPQ0tfU0laRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAxVSkpKSkKICAgewogICAgIGJhc2VfYWRkcmVzcyA9IEdUWkNfQkFTRV9BRERSRVNTKFNSQU0xKTsKICAgICAvKiBsaW1pdGF0aW9uOiBjb2RlIG5vdCBwb3J0YWJsZSB3aXRoIG1lbW9yeSA+IDI1NksgKi8KICAgICByZWdfbXBjYmIgPSAoX19JTyB1aW50MzJfdCAqKSZHVFpDX01QQ0JCMV9TLT5MQ0tWVFIxOwogICB9Ci0gIGVsc2UgaWYgKCAgIChJU19BRERSRVNTX0lOKFNSQU0yLCBNZW1BZGRyZXNzKSkKKyAgZWxzZSBpZiAoKElTX0FERFJFU1NfSU4oU1JBTTIsIE1lbUFkZHJlc3MpKQogICAgICAgICAgICAmJiAoSVNfQUREUkVTU19JTihTUkFNMiwgKE1lbUFkZHJlc3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKCAgIE5iU3VwZXJCbG9ja3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEdUWkNfTVBDQkJfU1VQRVJCTE9DS19TSVpFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAxVSkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChOYlN1cGVyQmxvY2tzICogR1RaQ19NUENCQl9TVVBFUkJMT0NLX1NJWkUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAxVSkpKSkKICAgewogICAgIGJhc2VfYWRkcmVzcyA9IEdUWkNfQkFTRV9BRERSRVNTKFNSQU0yKTsKICAgICAvKiBsaW1pdGF0aW9uOiBjb2RlIG5vdCBwb3J0YWJsZSB3aXRoIG1lbW9yeSA+IDI1NksgKi8KQEAgLTExMTcsMjAgKzExMDAsMTkgQEAKICAgfQogCiAgIC8qIGNoZWNrIGVudHJ5IHBhcmFtZXRlcnMgKi8KLSAgaWYgKCAgIChJU19BRERSRVNTX0lOKFNSQU0xLCBNZW1BZGRyZXNzKSkKKyAgaWYgKChJU19BRERSRVNTX0lOKFNSQU0xLCBNZW1BZGRyZXNzKSkKICAgICAgICYmIChJU19BRERSRVNTX0lOKFNSQU0xLCAoTWVtQWRkcmVzcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKE5iU3VwZXJCbG9ja3MgKiBHVFpDX01QQ0JCX1NVUEVSQkxPQ0tfU0laRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDFVKSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChOYlN1cGVyQmxvY2tzICogR1RaQ19NUENCQl9TVVBFUkJMT0NLX1NJWkUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMVUpKSkpCiAgIHsKICAgICBiYXNlX2FkZHJlc3MgPSBHVFpDX0JBU0VfQUREUkVTUyhTUkFNMSk7CiAgICAgLyogbGltaXRhdGlvbjogY29kZSBub3QgcG9ydGFibGUgd2l0aCBtZW1vcnkgPiAyNTZLICovCiAgICAgcmVnX21wY2JiID0gR1RaQ19NUENCQjFfUy0+TENLVlRSMTsKICAgfQotICBlbHNlIGlmICggICAoSVNfQUREUkVTU19JTihTUkFNMiwgTWVtQWRkcmVzcykpCisgIGVsc2UgaWYgKChJU19BRERSRVNTX0lOKFNSQU0yLCBNZW1BZGRyZXNzKSkKICAgICAgICAgICAgJiYgKElTX0FERFJFU1NfSU4oU1JBTTIsIChNZW1BZGRyZXNzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICggICBOYlN1cGVyQmxvY2tzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBHVFpDX01QQ0JCX1NVUEVSQkxPQ0tfU0laRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMVUpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoTmJTdXBlckJsb2NrcyAqIEdUWkNfTVBDQkJfU1VQRVJCTE9DS19TSVpFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMVUpKSkpCiAgIHsKICAgICBiYXNlX2FkZHJlc3MgPSBHVFpDX0JBU0VfQUREUkVTUyhTUkFNMik7CiAgICAgLyogbGltaXRhdGlvbjogY29kZSBub3QgcG9ydGFibGUgd2l0aCBtZW1vcnkgPiAyNTZLICovCkBAIC0xMTQ3LDggKzExMjksOCBAQAogCiAgIGZvciAoaSA9IDBVOyBpIDwgTmJTdXBlckJsb2NrczsgaSsrKQogICB7Ci0gICAgcExvY2tBdHRyaWJ1dGVzW2ldID0gICAocmVnX21wY2JiICYgKDFVTCA8PCAob2Zmc2V0X2JpdF9zdGFydCAlIDMyVSkpKQotICAgICAgICAgICAgICAgICAgICAgICAgPj4gKG9mZnNldF9iaXRfc3RhcnQgJSAzMlUpOworICAgIHBMb2NrQXR0cmlidXRlc1tpXSA9IChyZWdfbXBjYmIgJiAoMVVMIDw8IChvZmZzZXRfYml0X3N0YXJ0ICUgMzJVKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgPj4gKG9mZnNldF9iaXRfc3RhcnQgJSAzMlUpOwogICAgIG9mZnNldF9iaXRfc3RhcnQrKzsKICAgfQogCkBAIC0xMjM1LDkgKzEyMTcsOCBAQAogICB1aW50MzJfdCByZWdpc3Rlcl9hZGRyZXNzOwogCiAgIC8qIGNoZWNrIGVudHJ5IHBhcmFtZXRlcnMgKi8KLSAgaWYgKCAgICggICBIQUxfR1RaQ19HRVRfQVJSQVlfSU5ERVgoUGVyaXBoSWQpID49IEdUWkNfVFpJQ19QRVJJUEhfTlVNQkVSKQotICAgICAgfHwgKCAgICAoKFBlcmlwaElkICYgR1RaQ19QRVJJUEhfQUxMKSAhPSAwVSkKLSAgICAgICAgICAgJiYgKEhBTF9HVFpDX0dFVF9BUlJBWV9JTkRFWChQZXJpcGhJZCkgIT0gMFUpKSkKKyAgaWYgKChIQUxfR1RaQ19HRVRfQVJSQVlfSU5ERVgoUGVyaXBoSWQpID49IEdUWkNfVFpJQ19QRVJJUEhfTlVNQkVSKQorICAgICAgfHwgKCgoUGVyaXBoSWQgJiBHVFpDX1BFUklQSF9BTEwpICE9IDBVKSAmJiAoSEFMX0dUWkNfR0VUX0FSUkFZX0lOREVYKFBlcmlwaElkKSAhPSAwVSkpKQogICB7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQpAQCAtMTI1Miw4ICsxMjMzLDcgQEAKICAgZWxzZQogICB7CiAgICAgLyogY29tbW9uIGNhc2Ugd2hlcmUgb25seSBvbmUgcGVyaXBoZXJhbCBpcyBjb25maWd1cmVkICovCi0gICAgcmVnaXN0ZXJfYWRkcmVzcyA9ICAgKHVpbnQzMl90KSYoR1RaQ19UWklDLT5JRVIxKQotICAgICAgICAgICAgICAgICAgICAgICArICg0VSAqIEdUWkNfR0VUX1JFR19JTkRFWChQZXJpcGhJZCkpOworICAgIHJlZ2lzdGVyX2FkZHJlc3MgPSAodWludDMyX3QpICYoR1RaQ19UWklDLT5JRVIxKSArICg0VSAqIEdUWkNfR0VUX1JFR19JTkRFWChQZXJpcGhJZCkpOwogICAgIENMRUFSX0JJVCgqKF9fSU8gdWludDMyX3QgKilyZWdpc3Rlcl9hZGRyZXNzLCAxVUwgPDwgR1RaQ19HRVRfUEVSSVBIX1BPUyhQZXJpcGhJZCkpOwogICB9CiAKQEAgLTEyNzIsOSArMTI1Miw4IEBACiAgIHVpbnQzMl90IHJlZ2lzdGVyX2FkZHJlc3M7CiAKICAgLyogY2hlY2sgZW50cnkgcGFyYW1ldGVycyAqLwotICBpZiAoICAgKCAgIEhBTF9HVFpDX0dFVF9BUlJBWV9JTkRFWChQZXJpcGhJZCkgPj0gR1RaQ19UWklDX1BFUklQSF9OVU1CRVIpCi0gICAgICB8fCAoICAgICgoUGVyaXBoSWQgJiBHVFpDX1BFUklQSF9BTEwpICE9IDBVKQotICAgICAgICAgICAmJiAoSEFMX0dUWkNfR0VUX0FSUkFZX0lOREVYKFBlcmlwaElkKSAhPSAwVSkpKQorICBpZiAoKEhBTF9HVFpDX0dFVF9BUlJBWV9JTkRFWChQZXJpcGhJZCkgPj0gR1RaQ19UWklDX1BFUklQSF9OVU1CRVIpCisgICAgICB8fCAoKChQZXJpcGhJZCAmIEdUWkNfUEVSSVBIX0FMTCkgIT0gMFUpICYmIChIQUxfR1RaQ19HRVRfQVJSQVlfSU5ERVgoUGVyaXBoSWQpICE9IDBVKSkpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC0xMjg5LDggKzEyNjgsNyBAQAogICBlbHNlCiAgIHsKICAgICAvKiBjb21tb24gY2FzZSB3aGVyZSBvbmx5IG9uZSBwZXJpcGhlcmFsIGlzIGNvbmZpZ3VyZWQgKi8KLSAgICByZWdpc3Rlcl9hZGRyZXNzID0gICAodWludDMyX3QpJihHVFpDX1RaSUMtPklFUjEpCi0gICAgICAgICAgICAgICAgICAgICAgICsgKDRVICogR1RaQ19HRVRfUkVHX0lOREVYKFBlcmlwaElkKSk7CisgICAgcmVnaXN0ZXJfYWRkcmVzcyA9ICh1aW50MzJfdCkgJihHVFpDX1RaSUMtPklFUjEpICsgKDRVICogR1RaQ19HRVRfUkVHX0lOREVYKFBlcmlwaElkKSk7CiAgICAgU0VUX0JJVCgqKF9fSU8gdWludDMyX3QgKilyZWdpc3Rlcl9hZGRyZXNzLCAxVUwgPDwgR1RaQ19HRVRfUEVSSVBIX1BPUyhQZXJpcGhJZCkpOwogICB9CiAKQEAgLTEzMTcsOSArMTI5NSw4IEBACiAgIHVpbnQzMl90IHJlZ2lzdGVyX2FkZHJlc3M7CiAKICAgLyogY2hlY2sgZW50cnkgcGFyYW1ldGVycyAqLwotICBpZiAoICAgKCAgIEhBTF9HVFpDX0dFVF9BUlJBWV9JTkRFWChQZXJpcGhJZCkgPj0gR1RaQ19UWklDX1BFUklQSF9OVU1CRVIpCi0gICAgICB8fCAoICAgICgoUGVyaXBoSWQgJiBHVFpDX1BFUklQSF9BTEwpICE9IDBVKQotICAgICAgICAgICAmJiAoSEFMX0dUWkNfR0VUX0FSUkFZX0lOREVYKFBlcmlwaElkKSAhPSAwVSkpKQorICBpZiAoKEhBTF9HVFpDX0dFVF9BUlJBWV9JTkRFWChQZXJpcGhJZCkgPj0gR1RaQ19UWklDX1BFUklQSF9OVU1CRVIpCisgICAgICB8fCAoKChQZXJpcGhJZCAmIEdUWkNfUEVSSVBIX0FMTCkgIT0gMFUpICYmIChIQUxfR1RaQ19HRVRfQVJSQVlfSU5ERVgoUGVyaXBoSWQpICE9IDBVKSkpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC0xMzQ4LDEwICsxMzI1LDkgQEAKICAgZWxzZQogICB7CiAgICAgLyogY29tbW9uIGNhc2Ugd2hlcmUgb25seSBvbmUgcGVyaXBoZXJhbCBpcyBjb25jZXJuZWQgKi8KLSAgICByZWdpc3Rlcl9hZGRyZXNzID0gICAgKHVpbnQzMl90KSYoR1RaQ19UWklDLT5TUjEpCi0gICAgICAgICAgICAgICAgICAgICAgICArICg0VSAqIEdUWkNfR0VUX1JFR19JTkRFWChQZXJpcGhJZCkpOworICAgIHJlZ2lzdGVyX2FkZHJlc3MgPSAodWludDMyX3QpICYoR1RaQ19UWklDLT5TUjEpICsgKDRVICogR1RaQ19HRVRfUkVHX0lOREVYKFBlcmlwaElkKSk7CiAgICAgKnBGbGFnID0gUkVBRF9CSVQoKihfX0lPIHVpbnQzMl90ICopcmVnaXN0ZXJfYWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgIDFVTCA8PCBHVFpDX0dFVF9QRVJJUEhfUE9TKFBlcmlwaElkKSkgPj4gR1RaQ19HRVRfUEVSSVBIX1BPUyhQZXJpcGhJZCk7CisgICAgICAgICAgICAgICAgICAgICAgMVVMIDw8IEdUWkNfR0VUX1BFUklQSF9QT1MoUGVyaXBoSWQpKSA+PiBHVFpDX0dFVF9QRVJJUEhfUE9TKFBlcmlwaElkKTsKICAgfQogCiAgIHJldHVybiBIQUxfT0s7CkBAIC0xMzY5LDkgKzEzNDUsOCBAQAogICB1aW50MzJfdCByZWdpc3Rlcl9hZGRyZXNzOwogCiAgIC8qIGNoZWNrIGVudHJ5IHBhcmFtZXRlcnMgKi8KLSAgaWYgKCAgICggICBIQUxfR1RaQ19HRVRfQVJSQVlfSU5ERVgoUGVyaXBoSWQpID49IEdUWkNfVFpJQ19QRVJJUEhfTlVNQkVSKQotICAgICAgfHwgKCAgICAoKFBlcmlwaElkICYgR1RaQ19QRVJJUEhfQUxMKSAhPSAwVSkKLSAgICAgICAgICAgJiYgKEhBTF9HVFpDX0dFVF9BUlJBWV9JTkRFWChQZXJpcGhJZCkgIT0gMFUpKSkKKyAgaWYgKChIQUxfR1RaQ19HRVRfQVJSQVlfSU5ERVgoUGVyaXBoSWQpID49IEdUWkNfVFpJQ19QRVJJUEhfTlVNQkVSKQorICAgICAgfHwgKCgoUGVyaXBoSWQgJiBHVFpDX1BFUklQSF9BTEwpICE9IDBVKSAmJiAoSEFMX0dUWkNfR0VUX0FSUkFZX0lOREVYKFBlcmlwaElkKSAhPSAwVSkpKQogICB7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQpAQCAtMTM4Niw4ICsxMzYxLDcgQEAKICAgZWxzZQogICB7CiAgICAgLyogY29tbW9uIGNhc2Ugd2hlcmUgb25seSBvbmUgcGVyaXBoZXJhbCBpcyBjb25maWd1cmVkICovCi0gICAgcmVnaXN0ZXJfYWRkcmVzcyA9ICAgKHVpbnQzMl90KSYoR1RaQ19UWklDLT5GQ1IxKQotICAgICAgICAgICAgICAgICAgICAgICArICg0VSAqIEdUWkNfR0VUX1JFR19JTkRFWChQZXJpcGhJZCkpOworICAgIHJlZ2lzdGVyX2FkZHJlc3MgPSAodWludDMyX3QpICYoR1RaQ19UWklDLT5GQ1IxKSArICg0VSAqIEdUWkNfR0VUX1JFR19JTkRFWChQZXJpcGhJZCkpOwogICAgIFNFVF9CSVQoKihfX0lPIHVpbnQzMl90ICopcmVnaXN0ZXJfYWRkcmVzcywgMVVMIDw8IEdUWkNfR0VUX1BFUklQSF9QT1MoUGVyaXBoSWQpKTsKICAgfQogCkBAIC0xNDI4LDcgKzE0MDIsNyBAQAogCiAgIC8qIEdldCBNYXNrIGludGVycnVwdCBhbmQgdGhlbiBjbGVhciB0aGVtICovCiAgIGZsYWcgPSBpZXJfaXRzb3VyY2VzICYgc3JfZmxhZ3M7Ci0gIGlmKGZsYWcgIT0gMFUpCisgIGlmIChmbGFnICE9IDBVKQogICB7CiAgICAgV1JJVEVfUkVHKEdUWkNfVFpJQy0+RkNSMSwgZmxhZyk7CiAKQEAgLTE0NTIsNyArMTQyNiw3IEBACiAKICAgLyogR2V0IE1hc2sgaW50ZXJydXB0IGFuZCB0aGVuIGNsZWFyIHRoZW0gKi8KICAgZmxhZyA9IGllcl9pdHNvdXJjZXMgJiBzcl9mbGFnczsKLSAgaWYoZmxhZyAhPSAwVSkKKyAgaWYgKGZsYWcgIT0gMFUpCiAgIHsKICAgICBXUklURV9SRUcoR1RaQ19UWklDLT5GQ1IyLCBmbGFnKTsKIApAQCAtMTQ3Niw3ICsxNDUwLDcgQEAKIAogICAvKiBHZXQgTWFzayBpbnRlcnJ1cHQgYW5kIHRoZW4gY2xlYXIgdGhlbSAqLwogICBmbGFnID0gaWVyX2l0c291cmNlcyAmIHNyX2ZsYWdzOwotICBpZihmbGFnICE9IDBVKQorICBpZiAoZmxhZyAhPSAwVSkKICAgewogICAgIFdSSVRFX1JFRyhHVFpDX1RaSUMtPkZDUjMsIGZsYWcpOwogCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNXh4X2hhbF9pY2FjaGUuYyBiL1NyYy9zdG0zMmw1eHhfaGFsX2ljYWNoZS5jCmluZGV4IDQ2OTAxOGQuLmFmYTZlMjMgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw1eHhfaGFsX2ljYWNoZS5jCisrKyBiL1NyYy9zdG0zMmw1eHhfaGFsX2ljYWNoZS5jCkBAIC00NCw3ICs0NCw4IEBACiAgICAgICAgIEByZWYgSEFMX0lDQUNIRV9JbnZhbGlkYXRlQ29tcGxldGVDYWxsYmFjaygpIGlzIGNhbGxlZCB3aGVuIHRoZSBpbnZhbGlkYXRlCiAgICAgICAgIHByb2NlZHVyZSBpcyBjb21wbGV0ZS4gVGhlIGZ1bmN0aW9uIEByZWYgSEFMX0lDQUNIRV9XYWl0Rm9ySW52YWxpZGF0ZUNvbXBsZXRlKCkKICAgICAgICAgbWF5IGJlIGNhbGxlZCB0byB3YWl0IGZvciB0aGUgZW5kIG9mIHRoZSBpbnZhbGlkYXRlIHByb2NlZHVyZSBhdXRvbWF0aWNhbGx5Ci0gICAgICAgIGluaXRpYXRlZCB3aGVuIGRpc2FibGluZyB0aGUgSW5zdHJ1Y3Rpb24gQ2FjaGUgd2l0aCBAcmVmIEhBTF9JQ0FDSEVfRGlzYWJsZSgpCisgICAgICAgIGluaXRpYXRlZCB3aGVuIGRpc2FibGluZyB0aGUgSW5zdHJ1Y3Rpb24gQ2FjaGUgd2l0aCBAcmVmIEhBTF9JQ0FDSEVfRGlzYWJsZSgpLgorICAgICAgICBUaGUgY2FjaGUgb3BlcmF0aW9uIGlzIGJ5cGFzc2VkIGR1cmluZyB0aGUgaW52YWxpZGF0aW9uIHByb2NlZHVyZS4KIAogICAgICgjKSBVc2UgdGhlIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgY291bnRlcnMgZm9yIEhpdCBhbmQgTWlzcyB3aXRoIHRoZSBmb2xsb3dpbmcKICAgICAgICAgZnVuY3Rpb25zOiBAcmVmIEhBTF9JQ0FDSEVfTW9uaXRvcl9TdGFydCgpLCBAcmVmIEhBTF9JQ0FDSEVfTW9uaXRvcl9TdG9wKCksCkBAIC0yMTYsOCArMjE3LDEyIEBACiAgIHsKICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gSUNBQ0hFX0RJU0FCTEVfVElNRU9VVF9WQUxVRSkKICAgICB7Ci0gICAgICBzdGF0dXMgPSBIQUxfVElNRU9VVDsKLSAgICAgIGJyZWFrOworICAgICAgLyogTmV3IGNoZWNrIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbiAqLworICAgICAgaWYgKFJFQURfQklUKElDQUNIRS0+Q1IsIElDQUNIRV9DUl9FTikgIT0gMFUpCisgICAgICB7CisgICAgICAgIHN0YXR1cyA9IEhBTF9USU1FT1VUOworICAgICAgICBicmVhazsKKyAgICAgIH0KICAgICB9CiAgIH0KIApAQCAtMzA2LDggKzMxMSwxMiBAQAogICAgIHsKICAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBJQ0FDSEVfSU5WQUxJREFURV9USU1FT1VUX1ZBTFVFKQogICAgICAgewotICAgICAgICBzdGF0dXMgPSBIQUxfVElNRU9VVDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgICAgaWYgKFJFQURfQklUKElDQUNIRS0+U1IsIElDQUNIRV9TUl9CU1lFTkRGKSA9PSAwVSkKKyAgICAgICAgeworICAgICAgICAgIHN0YXR1cyA9IEhBTF9USU1FT1VUOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICB9CiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNXh4X2hhbF9pcmRhLmMgYi9TcmMvc3RtMzJsNXh4X2hhbF9pcmRhLmMKaW5kZXggNmIzYWM0My4uNTMzYzg0ZiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDV4eF9oYWxfaXJkYS5jCisrKyBiL1NyYy9zdG0zMmw1eHhfaGFsX2lyZGEuYwpAQCAtNjEzLDQzICs2MTMsNDUgQEAKICAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCiAgICAgewogICAgICAgY2FzZSBIQUxfSVJEQV9UWF9IQUxGQ09NUExFVEVfQ0JfSUQgOgotICAgICAgICBoaXJkYS0+VHhIYWxmQ3BsdENhbGxiYWNrID0gSEFMX0lSREFfVHhIYWxmQ3BsdENhbGxiYWNrOyAgICAgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrICBUeEhhbGZDcGx0Q2FsbGJhY2sgICAgICAgKi8KKyAgICAgICAgaGlyZGEtPlR4SGFsZkNwbHRDYWxsYmFjayA9IEhBTF9JUkRBX1R4SGFsZkNwbHRDYWxsYmFjazsgICAgICAgICAgICAgICAvKiBMZWdhY3kgd2VhayAgVHhIYWxmQ3BsdENhbGxiYWNrICAgICovCiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIEhBTF9JUkRBX1RYX0NPTVBMRVRFX0NCX0lEIDoKLSAgICAgICAgaGlyZGEtPlR4Q3BsdENhbGxiYWNrID0gSEFMX0lSREFfVHhDcGx0Q2FsbGJhY2s7ICAgICAgICAgICAgICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBUeENwbHRDYWxsYmFjayAgICAgICAgICAgICovCisgICAgICAgIGhpcmRhLT5UeENwbHRDYWxsYmFjayA9IEhBTF9JUkRBX1R4Q3BsdENhbGxiYWNrOyAgICAgICAgICAgICAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgVHhDcGx0Q2FsbGJhY2sgICAgICAgICAqLwogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSBIQUxfSVJEQV9SWF9IQUxGQ09NUExFVEVfQ0JfSUQgOgotICAgICAgICBoaXJkYS0+UnhIYWxmQ3BsdENhbGxiYWNrID0gSEFMX0lSREFfUnhIYWxmQ3BsdENhbGxiYWNrOyAgICAgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIFJ4SGFsZkNwbHRDYWxsYmFjayAgICAgICAgKi8KKyAgICAgICAgaGlyZGEtPlJ4SGFsZkNwbHRDYWxsYmFjayA9IEhBTF9JUkRBX1J4SGFsZkNwbHRDYWxsYmFjazsgICAgICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBSeEhhbGZDcGx0Q2FsbGJhY2sgICAgICovCiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIEhBTF9JUkRBX1JYX0NPTVBMRVRFX0NCX0lEIDoKLSAgICAgICAgaGlyZGEtPlJ4Q3BsdENhbGxiYWNrID0gSEFMX0lSREFfUnhDcGx0Q2FsbGJhY2s7ICAgICAgICAgICAgICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBSeENwbHRDYWxsYmFjayAgICAgICAgICAgICovCisgICAgICAgIGhpcmRhLT5SeENwbHRDYWxsYmFjayA9IEhBTF9JUkRBX1J4Q3BsdENhbGxiYWNrOyAgICAgICAgICAgICAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgUnhDcGx0Q2FsbGJhY2sgICAgICAgICAqLwogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSBIQUxfSVJEQV9FUlJPUl9DQl9JRCA6Ci0gICAgICAgIGhpcmRhLT5FcnJvckNhbGxiYWNrID0gSEFMX0lSREFfRXJyb3JDYWxsYmFjazsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgRXJyb3JDYWxsYmFjayAgICAgICAgICAgICAqLworICAgICAgICBoaXJkYS0+RXJyb3JDYWxsYmFjayA9IEhBTF9JUkRBX0Vycm9yQ2FsbGJhY2s7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIEVycm9yQ2FsbGJhY2sgICAgICAgICAgKi8KICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgSEFMX0lSREFfQUJPUlRfQ09NUExFVEVfQ0JfSUQgOgotICAgICAgICBoaXJkYS0+QWJvcnRDcGx0Q2FsbGJhY2sgPSBIQUxfSVJEQV9BYm9ydENwbHRDYWxsYmFjazsgICAgICAgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIEFib3J0Q3BsdENhbGxiYWNrICAgICAgICAgKi8KKyAgICAgICAgaGlyZGEtPkFib3J0Q3BsdENhbGxiYWNrID0gSEFMX0lSREFfQWJvcnRDcGx0Q2FsbGJhY2s7ICAgICAgICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBBYm9ydENwbHRDYWxsYmFjayAgICAgICovCiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIEhBTF9JUkRBX0FCT1JUX1RSQU5TTUlUX0NPTVBMRVRFX0NCX0lEIDoKLSAgICAgICAgaGlyZGEtPkFib3J0VHJhbnNtaXRDcGx0Q2FsbGJhY2sgPSBIQUxfSVJEQV9BYm9ydFRyYW5zbWl0Q3BsdENhbGxiYWNrOyAvKiBMZWdhY3kgd2VhayBBYm9ydFRyYW5zbWl0Q3BsdENhbGxiYWNrICovCisgICAgICAgIGhpcmRhLT5BYm9ydFRyYW5zbWl0Q3BsdENhbGxiYWNrID0gSEFMX0lSREFfQWJvcnRUcmFuc21pdENwbHRDYWxsYmFjazsgLyogTGVnYWN5IHdlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYm9ydFRyYW5zbWl0Q3BsdENhbGxiYWNrICAgICAgICAgICovCiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIEhBTF9JUkRBX0FCT1JUX1JFQ0VJVkVfQ09NUExFVEVfQ0JfSUQgOgotICAgICAgICBoaXJkYS0+QWJvcnRSZWNlaXZlQ3BsdENhbGxiYWNrID0gSEFMX0lSREFfQWJvcnRSZWNlaXZlQ3BsdENhbGxiYWNrOyAgIC8qIExlZ2FjeSB3ZWFrIEFib3J0UmVjZWl2ZUNwbHRDYWxsYmFjayAgKi8KKyAgICAgICAgaGlyZGEtPkFib3J0UmVjZWl2ZUNwbHRDYWxsYmFjayA9IEhBTF9JUkRBX0Fib3J0UmVjZWl2ZUNwbHRDYWxsYmFjazsgICAvKiBMZWdhY3kgd2VhaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFib3J0UmVjZWl2ZUNwbHRDYWxsYmFjayAgICAgICAgICAgKi8KICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgSEFMX0lSREFfTVNQSU5JVF9DQl9JRCA6Ci0gICAgICAgIGhpcmRhLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfSVJEQV9Nc3BJbml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgTXNwSW5pdENhbGxiYWNrICAgICAgICAgICAqLworICAgICAgICBoaXJkYS0+TXNwSW5pdENhbGxiYWNrID0gSEFMX0lSREFfTXNwSW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIE1zcEluaXRDYWxsYmFjayAgICAgICAgKi8KICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgSEFMX0lSREFfTVNQREVJTklUX0NCX0lEIDoKLSAgICAgICAgaGlyZGEtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX0lSREFfTXNwRGVJbml0OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBNc3BEZUluaXRDYWxsYmFjayAgICAgICAgICovCisgICAgICAgIGhpcmRhLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9JUkRBX01zcERlSW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgTXNwRGVJbml0Q2FsbGJhY2sgICAgICAqLwogICAgICAgICBicmVhazsKIAogICAgICAgZGVmYXVsdCA6CkBAIC0yMjQyLDcgKzIyNDQsNyBAQAogICB1aW50MzJfdCB0bXByZWc7CiAgIElSREFfQ2xvY2tTb3VyY2VUeXBlRGVmIGNsb2Nrc291cmNlOwogICBIQUxfU3RhdHVzVHlwZURlZiByZXQgPSBIQUxfT0s7Ci0gIGNvbnN0IHVpbnQxNl90IElSREFQcmVzY1RhYmxlWzEyXSA9IHsxVSwgMlUsIDRVLCA2VSwgOFUsIDEwVSwgMTJVLCAxNlUsIDMyVSwgNjRVLCAxMjhVLCAyNTZVfTsKKyAgc3RhdGljIGNvbnN0IHVpbnQxNl90IElSREFQcmVzY1RhYmxlWzEyXSA9IHsxVSwgMlUsIDRVLCA2VSwgOFUsIDEwVSwgMTJVLCAxNlUsIDMyVSwgNjRVLCAxMjhVLCAyNTZVfTsKICAgdWludDMyX3QgcGNsazsKIAogICAvKiBDaGVjayB0aGUgY29tbXVuaWNhdGlvbiBwYXJhbWV0ZXJzICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNXh4X2hhbF9pd2RnLmMgYi9TcmMvc3RtMzJsNXh4X2hhbF9pd2RnLmMKaW5kZXggMjg5N2M1YS4uYzZlYzU0MSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDV4eF9oYWxfaXdkZy5jCisrKyBiL1NyYy9zdG0zMmw1eHhfaGFsX2l3ZGcuYwpAQCAtNDcsNyArNDcsNyBAQAogCiAgICAgWy4uXSBEZWZhdWx0IHRpbWVvdXQgdmFsdWUgKG5lY2Vzc2FyeSBmb3IgSVdER19TUiBzdGF0dXMgcmVnaXN0ZXIgdXBkYXRlKToKICAgICAgICAgIENvbnN0YW50IExTSV9WQUxVRSBpcyBkZWZpbmVkIGJhc2VkIG9uIHRoZSBub21pbmFsIExTSSBjbG9jayBmcmVxdWVuY3kuCi0gICAgICAgICBUaGlzIGZyZXF1ZW5jeSBiZWluZyBzdWJqZWN0IHRvIHZhcmlhdGlvbnMgYXMgbWVudGlvbmVkIGFib3ZlLCB0aGUgCisgICAgICAgICBUaGlzIGZyZXF1ZW5jeSBiZWluZyBzdWJqZWN0IHRvIHZhcmlhdGlvbnMgYXMgbWVudGlvbmVkIGFib3ZlLCB0aGUKICAgICAgICAgIGRlZmF1bHQgdGltZW91dCB2YWx1ZSAoZGVmaW5lZCB0aHJvdWdoIGNvbnN0YW50IEhBTF9JV0RHX0RFRkFVTFRfVElNRU9VVAogICAgICAgICAgYmVsb3cpIG1heSBiZWNvbWUgdG9vIHNob3J0IG9yIHRvbyBsb25nLgogICAgICAgICAgSW4gc3VjaCBjYXNlcywgdGhpcyBkZWZhdWx0IHRpbWVvdXQgdmFsdWUgY2FuIGJlIHR1bmVkIGJ5IHJlZGVmaW5pbmcKQEAgLTY1LDEzICs2NSwxMyBAQAogICAgICAgKCsrKSBDb25maWd1cmUgdGhlIElXREcgcHJlc2NhbGVyIGFuZCBjb3VudGVyIHJlbG9hZCB2YWx1ZS4gVGhpcyByZWxvYWQKICAgICAgICAgICAgdmFsdWUgd2lsbCBiZSBsb2FkZWQgaW4gdGhlIElXREcgY291bnRlciBlYWNoIHRpbWUgdGhlIHdhdGNoZG9nIGlzCiAgICAgICAgICAgIHJlbG9hZGVkLCB0aGVuIHRoZSBJV0RHIHdpbGwgc3RhcnQgY291bnRpbmcgZG93biBmcm9tIHRoaXMgdmFsdWUuCi0gICAgICAoKyspIFdhaXQgZm9yIHN0YXR1cyBmbGFncyB0byBiZSByZXNldC4KICAgICAgICgrKykgRGVwZW5kaW5nIG9uIHdpbmRvdyBwYXJhbWV0ZXI6CiAgICAgICAgICgrKyspIElmIFdpbmRvdyBJbml0IHBhcmFtZXRlciBpcyBzYW1lIGFzIFdpbmRvdyByZWdpc3RlciB2YWx1ZSwKICAgICAgICAgICAgICBub3RoaW5nIG1vcmUgaXMgZG9uZSBidXQgcmVsb2FkIGNvdW50ZXIgdmFsdWUgaW4gb3JkZXIgdG8gZXhpdAogICAgICAgICAgICAgIGZ1bmN0aW9uIHdpdGggZXhhY3QgdGltZSBiYXNlLgogICAgICAgICAoKysrKSBFbHNlIG1vZGlmeSBXaW5kb3cgcmVnaXN0ZXIuIFRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5IHJlbG9hZAogICAgICAgICAgICAgIHdhdGNoZG9nIGNvdW50ZXIuCisgICAgICAoKyspIFdhaXQgZm9yIHN0YXR1cyBmbGFncyB0byBiZSByZXNldC4KIAogICAgICgjKSBUaGVuIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtIG11c3QgcmVmcmVzaCB0aGUgSVdERyBjb3VudGVyIGF0IHJlZ3VsYXIKICAgICAgICAgaW50ZXJ2YWxzIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uIHRvIHByZXZlbnQgYW4gTUNVIHJlc2V0LCB1c2luZwpAQCAtMTI1LDcgKzEyNSw4IEBACiAgICB0aGUgTFNJX1ZBTFVFIGNvbnN0YW50LiBUaGUgdmFsdWUgb2YgdGhpcyBjb25zdGFudCBjYW4gYmUgY2hhbmdlZCBieSB0aGUgdXNlcgogICAgdG8gdGFrZSBpbnRvIGFjY291bnQgcG9zc2libGUgTFNJIGNsb2NrIHBlcmlvZCB2YXJpYXRpb25zLgogICAgVGhlIHRpbWVvdXQgdmFsdWUgaXMgbXVsdGlwbGllZCBieSAxMDAwIHRvIGJlIGNvbnZlcnRlZCBpbiBtaWxsaXNlY29uZHMuICovCi0jZGVmaW5lIEhBTF9JV0RHX0RFRkFVTFRfVElNRU9VVCAoKDZVTCAqIDI1NlVMICogMTAwMFVMKSAvIExTSV9WQUxVRSkKKyNkZWZpbmUgSEFMX0lXREdfREVGQVVMVF9USU1FT1VUICAgICAgICAoKDZVTCAqIDI1NlVMICogMTAwMFVMKSAvIExTSV9WQUxVRSkKKyNkZWZpbmUgSVdER19LRVJORUxfVVBEQVRFX0ZMQUdTICAgICAgICAoSVdER19TUl9XVlUgfCBJV0RHX1NSX1JWVSB8IElXREdfU1JfUFZVKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTE5NiwxMSArMTk3LDE0IEBACiAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CiAKICAgLyogV2FpdCBmb3IgcmVnaXN0ZXIgdG8gYmUgdXBkYXRlZCAqLwotICB3aGlsZSAoaGl3ZGctPkluc3RhbmNlLT5TUiAhPSAweDAwdSkKKyAgd2hpbGUgKChoaXdkZy0+SW5zdGFuY2UtPlNSICYgSVdER19LRVJORUxfVVBEQVRFX0ZMQUdTKSAhPSAweDAwdSkKICAgewogICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBIQUxfSVdER19ERUZBVUxUX1RJTUVPVVQpCiAgICAgewotICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgaWYgKChoaXdkZy0+SW5zdGFuY2UtPlNSICYgSVdER19LRVJORUxfVVBEQVRFX0ZMQUdTKSAhPSAweDAwdSkKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgfQogICAgIH0KICAgfQogCkBAIC0yMjMsNiArMjI3LDcgQEAKICAgcmV0dXJuIEhBTF9PSzsKIH0KIAorCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjQyLDcgKzI0Nyw2IEBACiAgICogQHsKICAgKi8KIAotCiAvKioKICAgKiBAYnJpZWYgIFJlZnJlc2ggdGhlIElXREcuCiAgICogQHBhcmFtICBoaXdkZyAgcG9pbnRlciB0byBhIElXREdfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwpAQCAtMjU4LDYgKzI2Miw3IEBACiAgIHJldHVybiBIQUxfT0s7CiB9CiAKKwogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw1eHhfaGFsX2xwdGltLmMgYi9TcmMvc3RtMzJsNXh4X2hhbF9scHRpbS5jCmluZGV4IDJiYjE2NTQuLmVkNzRhMzQgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw1eHhfaGFsX2xwdGltLmMKKysrIGIvU3JjL3N0bTMybDV4eF9oYWxfbHB0aW0uYwpAQCAtMTg5LDEyICsxODksMTIgQEAKICAgKiBAewogICAqLwogI2RlZmluZSBfX0hBTF9MUFRJTV9XQUtFVVBUSU1FUl9FWFRJX0VOQUJMRV9JVChfX0lOU1RBTkNFX18pIFwKLSAgICAgKCgoX19JTlNUQU5DRV9fKSA9PSBMUFRJTTEpID8gX19IQUxfTFBUSU1fTFBUSU0xX0VYVElfRU5BQkxFX0lUKCkgOlwKLSAgICAgICgoX19JTlNUQU5DRV9fKSA9PSBMUFRJTTIpID8gX19IQUxfTFBUSU1fTFBUSU0yX0VYVElfRU5BQkxFX0lUKCkgOiBfX0hBTF9MUFRJTV9MUFRJTTNfRVhUSV9FTkFCTEVfSVQoKSkKKyAgKCgoX19JTlNUQU5DRV9fKSA9PSBMUFRJTTEpID8gX19IQUxfTFBUSU1fTFBUSU0xX0VYVElfRU5BQkxFX0lUKCkgOlwKKyAgICgoX19JTlNUQU5DRV9fKSA9PSBMUFRJTTIpID8gX19IQUxfTFBUSU1fTFBUSU0yX0VYVElfRU5BQkxFX0lUKCkgOiBfX0hBTF9MUFRJTV9MUFRJTTNfRVhUSV9FTkFCTEVfSVQoKSkKIAogI2RlZmluZSBfX0hBTF9MUFRJTV9XQUtFVVBUSU1FUl9FWFRJX0RJU0FCTEVfSVQoX19JTlNUQU5DRV9fKSBcCi0gICAgICgoKF9fSU5TVEFOQ0VfXykgPT0gTFBUSU0xKSA/IF9fSEFMX0xQVElNX0xQVElNMV9FWFRJX0RJU0FCTEVfSVQoKSA6XAotICAgICAgKChfX0lOU1RBTkNFX18pID09IExQVElNMikgPyBfX0hBTF9MUFRJTV9MUFRJTTJfRVhUSV9ESVNBQkxFX0lUKCkgOiBfX0hBTF9MUFRJTV9MUFRJTTNfRVhUSV9ESVNBQkxFX0lUKCkpCisgICgoKF9fSU5TVEFOQ0VfXykgPT0gTFBUSU0xKSA/IF9fSEFMX0xQVElNX0xQVElNMV9FWFRJX0RJU0FCTEVfSVQoKSA6XAorICAgKChfX0lOU1RBTkNFX18pID09IExQVElNMikgPyBfX0hBTF9MUFRJTV9MUFRJTTJfRVhUSV9ESVNBQkxFX0lUKCkgOiBfX0hBTF9MUFRJTV9MUFRJTTNfRVhUSV9ESVNBQkxFX0lUKCkpCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjEzLDggKzIxMyw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgTFBUSU1fRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBJbml0aWFsaXphdGlvbi9kZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICAgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLgotICoKKyAgKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucy4KKyAgKgogQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAjIyMjIyBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICMjIyMjCkBAIC0yNTEsMTkgKzI1MSwxNyBAQAogCiAgIGFzc2VydF9wYXJhbShJU19MUFRJTV9DTE9DS19TT1VSQ0UoaGxwdGltLT5Jbml0LkNsb2NrLlNvdXJjZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fQ0xPQ0tfUFJFU0NBTEVSKGhscHRpbS0+SW5pdC5DbG9jay5QcmVzY2FsZXIpKTsKLSAgaWYgKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UgPT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfVUxQVElNKQorICBpZiAoKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UgPT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfVUxQVElNKSAKKyAgIHx8IChobHB0aW0tPkluaXQuQ291bnRlclNvdXJjZSA9PSBMUFRJTV9DT1VOVEVSU09VUkNFX0VYVEVSTkFMKSkKICAgewogICAgIGFzc2VydF9wYXJhbShJU19MUFRJTV9DTE9DS19QT0xBUklUWShobHB0aW0tPkluaXQuVWx0cmFMb3dQb3dlckNsb2NrLlBvbGFyaXR5KSk7CisgICAgYXNzZXJ0X3BhcmFtKElTX0xQVElNX0NMT0NLX1NBTVBMRV9USU1FKGhscHRpbS0+SW5pdC5VbHRyYUxvd1Bvd2VyQ2xvY2suU2FtcGxlVGltZSkpOwogICB9CiAgIGFzc2VydF9wYXJhbShJU19MUFRJTV9UUkdfU09VUkNFKGhscHRpbS0+SW5pdC5UcmlnZ2VyLlNvdXJjZSkpOwogICBpZiAoaGxwdGltLT5Jbml0LlRyaWdnZXIuU291cmNlICE9IExQVElNX1RSSUdTT1VSQ0VfU09GVFdBUkUpCiAgIHsKICAgICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fRVhUX1RSR19QT0xBUklUWShobHB0aW0tPkluaXQuVHJpZ2dlci5BY3RpdmVFZGdlKSk7Ci0gIH0KLSAgaWYgKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UgPT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfQVBCQ0xPQ0tfTFBPU0MpCi0gIHsKICAgICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fVFJJR19TQU1QTEVfVElNRShobHB0aW0tPkluaXQuVHJpZ2dlci5TYW1wbGVUaW1lKSk7Ci0gICAgYXNzZXJ0X3BhcmFtKElTX0xQVElNX0NMT0NLX1NBTVBMRV9USU1FKGhscHRpbS0+SW5pdC5VbHRyYUxvd1Bvd2VyQ2xvY2suU2FtcGxlVGltZSkpOwogICB9CiAgIGFzc2VydF9wYXJhbShJU19MUFRJTV9PVVRQVVRfUE9MQVJJVFkoaGxwdGltLT5Jbml0Lk91dHB1dFBvbGFyaXR5KSk7CiAgIGFzc2VydF9wYXJhbShJU19MUFRJTV9VUERBVEVfTU9ERShobHB0aW0tPkluaXQuVXBkYXRlTW9kZSkpOwpAQCAtMzIyLDIxICszMjAsMTggQEAKICAgLyogR2V0IHRoZSBMUFRJTXggQ0ZHUiB2YWx1ZSAqLwogICB0bXBjZmdyID0gaGxwdGltLT5JbnN0YW5jZS0+Q0ZHUjsKIAotICBpZiAoaGxwdGltLT5Jbml0LkNsb2NrLlNvdXJjZSA9PSBMUFRJTV9DTE9DS1NPVVJDRV9VTFBUSU0pCisgIGlmICgoaGxwdGltLT5Jbml0LkNsb2NrLlNvdXJjZSA9PSBMUFRJTV9DTE9DS1NPVVJDRV9VTFBUSU0pIAorICAgfHwgKGhscHRpbS0+SW5pdC5Db3VudGVyU291cmNlID09IExQVElNX0NPVU5URVJTT1VSQ0VfRVhURVJOQUwpKQogICB7Ci0gICAgdG1wY2ZnciAmPSAodWludDMyX3QpKH4oTFBUSU1fQ0ZHUl9DS1BPTCkpOworICAgIHRtcGNmZ3IgJj0gKHVpbnQzMl90KSh+KExQVElNX0NGR1JfQ0tQT0wgfCBMUFRJTV9DRkdSX0NLRkxUKSk7CiAgIH0KICAgaWYgKGhscHRpbS0+SW5pdC5UcmlnZ2VyLlNvdXJjZSAhPSBMUFRJTV9UUklHU09VUkNFX1NPRlRXQVJFKQogICB7Ci0gICAgdG1wY2ZnciAmPSAodWludDMyX3QpKH4oTFBUSU1fQ0ZHUl9UUklHU0VMKSk7Ci0gIH0KLSAgaWYgKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UgPT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfQVBCQ0xPQ0tfTFBPU0MpCi0gIHsKLSAgICB0bXBjZmdyICY9ICh1aW50MzJfdCkofihMUFRJTV9DRkdSX1RSR0ZMVCB8IExQVElNX0NGR1JfQ0tGTFQpKTsKKyAgICB0bXBjZmdyICY9ICh1aW50MzJfdCkofihMUFRJTV9DRkdSX1RSR0ZMVCB8IExQVElNX0NGR1JfVFJJR1NFTCkpOwogICB9CiAKLSAgLyogQ2xlYXIgQ0tTRUwsIENLUE9MLCBQUkVTQywgVFJJR0VOLCBUUkdGTFQsIFdBVlBPTCwgUFJFTE9BRCAmIENPVU5UTU9ERSBiaXRzICovCi0gIHRtcGNmZ3IgJj0gKHVpbnQzMl90KSh+KExQVElNX0NGR1JfQ0tTRUwgfCBMUFRJTV9DRkdSX0NLUE9MIHwgTFBUSU1fQ0ZHUl9UUklHRU4gfCBMUFRJTV9DRkdSX1BSRUxPQUQgfAorICAvKiBDbGVhciBDS1NFTCwgUFJFU0MsIFRSSUdFTiwgVFJHRkxULCBXQVZQT0wsIFBSRUxPQUQgJiBDT1VOVE1PREUgYml0cyAqLworICB0bXBjZmdyICY9ICh1aW50MzJfdCkofihMUFRJTV9DRkdSX0NLU0VMIHwgTFBUSU1fQ0ZHUl9UUklHRU4gfCBMUFRJTV9DRkdSX1BSRUxPQUQgfAogICAgICAgICAgICAgICAgICAgICAgICAgICBMUFRJTV9DRkdSX1dBVlBPTCB8IExQVElNX0NGR1JfUFJFU0MgfCBMUFRJTV9DRkdSX0NPVU5UTU9ERSkpOwogCiAgIC8qIFNldCBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzICovCkBAIC0zNTUsMTkgKzM1MCwyMSBAQAogICAgICAgICAgICAgICAgIGhscHRpbS0+SW5pdC5VbHRyYUxvd1Bvd2VyQ2xvY2suU2FtcGxlVGltZSk7CiAgIH0KIAotICAvKiBDb25maWd1cmUgdGhlIGFjdGl2ZSBlZGdlIG9yIGVkZ2VzIHVzZWQgYnkgdGhlIGNvdW50ZXIgb25seSBpZiBMUFRJTSBpcwotICAgKiBjbG9ja2VkIGJ5IGFuIGV4dGVybmFsIGNsb2NrIHNvdXJjZQotICAgKi8KLSAgaWYgKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UgPT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfVUxQVElNKQorICAvKiBDb25maWd1cmUgTFBUSU0gZXh0ZXJuYWwgY2xvY2sgcG9sYXJpdHkgYW5kIGRpZ2l0YWwgZmlsdGVyICovCisgIGlmICgoaGxwdGltLT5Jbml0LkNsb2NrLlNvdXJjZSA9PSBMUFRJTV9DTE9DS1NPVVJDRV9VTFBUSU0pIAorICAgfHwgKGhscHRpbS0+SW5pdC5Db3VudGVyU291cmNlID09IExQVElNX0NPVU5URVJTT1VSQ0VfRVhURVJOQUwpKQogICB7Ci0gICAgdG1wY2ZnciB8PSAoaGxwdGltLT5Jbml0LlVsdHJhTG93UG93ZXJDbG9jay5Qb2xhcml0eSk7CisgICAgdG1wY2ZnciB8PSAoaGxwdGltLT5Jbml0LlVsdHJhTG93UG93ZXJDbG9jay5Qb2xhcml0eSB8CisgICAgICAgICAgICAgICAgaGxwdGltLT5Jbml0LlVsdHJhTG93UG93ZXJDbG9jay5TYW1wbGVUaW1lKTsKICAgfQogCisgIC8qIENvbmZpZ3VyZSBMUFRJTSBleHRlcm5hbCB0cmlnZ2VyICovCiAgIGlmIChobHB0aW0tPkluaXQuVHJpZ2dlci5Tb3VyY2UgIT0gTFBUSU1fVFJJR1NPVVJDRV9TT0ZUV0FSRSkKICAgewogICAgIC8qIEVuYWJsZSBFeHRlcm5hbCB0cmlnZ2VyIGFuZCBzZXQgdGhlIHRyaWdnZXIgc291cmNlICovCi0gICAgdG1wY2ZnciB8PSAoaGxwdGltLT5Jbml0LlRyaWdnZXIuU291cmNlIHwKLSAgICAgICAgICAgICAgICBobHB0aW0tPkluaXQuVHJpZ2dlci5BY3RpdmVFZGdlKTsKKyAgICB0bXBjZmdyIHw9IChobHB0aW0tPkluaXQuVHJpZ2dlci5Tb3VyY2UgICAgIHwKKyAgICAgICAgICAgICAgICBobHB0aW0tPkluaXQuVHJpZ2dlci5BY3RpdmVFZGdlIHwKKyAgICAgICAgICAgICAgICBobHB0aW0tPkluaXQuVHJpZ2dlci5TYW1wbGVUaW1lKTsKICAgfQogCiAgIC8qIFdyaXRlIHRvIExQVElNeCBDRkdSICovCkBAIC00ODEsOCArNDc4LDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBMUFRJTV9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyIExQVElNIFN0YXJ0LVN0b3Agb3BlcmF0aW9uIGZ1bmN0aW9ucwotICogIEBicmllZiAgIFN0YXJ0LVN0b3Agb3BlcmF0aW9uIGZ1bmN0aW9ucy4KLSAqCisgICogIEBicmllZiAgIFN0YXJ0LVN0b3Agb3BlcmF0aW9uIGZ1bmN0aW9ucy4KKyAgKgogQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICMjIyMjIExQVElNIFN0YXJ0IFN0b3Agb3BlcmF0aW9uIGZ1bmN0aW9ucyAjIyMjIwpAQCAtMTYzMSw3ICsxNjI4LDggQEAKICAgaGxwdGltLT5TdGF0ZSA9IEhBTF9MUFRJTV9TVEFURV9CVVNZOwogCiAgIC8qIElmIGNsb2NrIHNvdXJjZSBpcyBub3QgVUxQVElNIGNsb2NrIGFuZCBjb3VudGVyIHNvdXJjZSBpcyBleHRlcm5hbCwgdGhlbiBpdCBtdXN0IG5vdCBiZSBwcmVzY2FsZWQgKi8KLSAgaWYgKChobHB0aW0tPkluaXQuQ2xvY2suU291cmNlICE9IExQVElNX0NMT0NLU09VUkNFX1VMUFRJTSkgJiYgKGhscHRpbS0+SW5pdC5Db3VudGVyU291cmNlID09IExQVElNX0NPVU5URVJTT1VSQ0VfRVhURVJOQUwpKQorICBpZiAoKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UgIT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfVUxQVElNKQorICAgICAgJiYgKGhscHRpbS0+SW5pdC5Db3VudGVyU291cmNlID09IExQVElNX0NPVU5URVJTT1VSQ0VfRVhURVJOQUwpKQogICB7CiAgICAgLyogQ2hlY2sgaWYgY2xvY2sgaXMgcHJlc2NhbGVkICovCiAgICAgYXNzZXJ0X3BhcmFtKElTX0xQVElNX0NMT0NLX1BSRVNDQUxFUkRJVjEoaGxwdGltLT5Jbml0LkNsb2NrLlByZXNjYWxlcikpOwpAQCAtMTcxMiw3ICsxNzEwLDggQEAKICAgX19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9FTkFCTEVfSVQoaGxwdGltLT5JbnN0YW5jZSk7CiAKICAgLyogSWYgY2xvY2sgc291cmNlIGlzIG5vdCBVTFBUSU0gY2xvY2sgYW5kIGNvdW50ZXIgc291cmNlIGlzIGV4dGVybmFsLCB0aGVuIGl0IG11c3Qgbm90IGJlIHByZXNjYWxlZCAqLwotICBpZiAoKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UgIT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfVUxQVElNKSAmJiAoaGxwdGltLT5Jbml0LkNvdW50ZXJTb3VyY2UgPT0gTFBUSU1fQ09VTlRFUlNPVVJDRV9FWFRFUk5BTCkpCisgIGlmICgoaGxwdGltLT5Jbml0LkNsb2NrLlNvdXJjZSAhPSBMUFRJTV9DTE9DS1NPVVJDRV9VTFBUSU0pCisgICAgICAmJiAoaGxwdGltLT5Jbml0LkNvdW50ZXJTb3VyY2UgPT0gTFBUSU1fQ09VTlRFUlNPVVJDRV9FWFRFUk5BTCkpCiAgIHsKICAgICAvKiBDaGVjayBpZiBjbG9jayBpcyBwcmVzY2FsZWQgKi8KICAgICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fQ0xPQ0tfUFJFU0NBTEVSRElWMShobHB0aW0tPkluaXQuQ2xvY2suUHJlc2NhbGVyKSk7CkBAIC0xODE1LDggKzE4MTQsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIExQVElNX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMgTFBUSU0gUmVhZCBvcGVyYXRpb24gZnVuY3Rpb25zCi0gKiAgQGJyaWVmICBSZWFkIG9wZXJhdGlvbiBmdW5jdGlvbnMuCi0gKgorICAqICBAYnJpZWYgIFJlYWQgb3BlcmF0aW9uIGZ1bmN0aW9ucy4KKyAgKgogQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgIyMjIyMgTFBUSU0gUmVhZCBvcGVyYXRpb24gZnVuY3Rpb25zICMjIyMjCkBAIC0xODczLDggKzE4NzIsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIExQVElNX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDQgTFBUSU0gSVJRIGhhbmRsZXIgYW5kIGNhbGxiYWNrcwotICogIEBicmllZiAgTFBUSU0gIElSUSBoYW5kbGVyLgotICoKKyAgKiAgQGJyaWVmICBMUFRJTSAgSVJRIGhhbmRsZXIuCisgICoKIEB2ZXJiYXRpbQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBMUFRJTSBJUlEgaGFuZGxlciBhbmQgY2FsbGJhY2tzICAjIyMjIwpAQCAtMjQyNiw4ICsyNDI1LDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBMUFRJTV9Hcm91cDUgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucy4KLSAqCisgICogIEBicmllZiAgIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zLgorICAqCiBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMgIyMjIyMKQEAgLTI1MDQsOCArMjUwMyw3IEBACiAgICAgewogICAgICAgcmVzdWx0ID0gSEFMX1RJTUVPVVQ7CiAgICAgfQotICB9Ci0gIHdoaWxlICgoIShfX0hBTF9MUFRJTV9HRVRfRkxBRygoaGxwdGltKSwgKGZsYWcpKSkpICYmIChjb3VudCAhPSAwVUwpKTsKKyAgfSB3aGlsZSAoKCEoX19IQUxfTFBUSU1fR0VUX0ZMQUcoKGhscHRpbSksIChmbGFnKSkpKSAmJiAoY291bnQgIT0gMFVMKSk7CiAKICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw1eHhfaGFsX21tYy5jIGIvU3JjL3N0bTMybDV4eF9oYWxfbW1jLmMKaW5kZXggOTEyODU3MC4uNDRkNDhhMiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDV4eF9oYWxfbW1jLmMKKysrIGIvU3JjL3N0bTMybDV4eF9oYWxfbW1jLmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogCiAgICAgKCspIFlvdSBjYW4gcmVhZCBmcm9tIE1NQyBjYXJkIGluIEludGVycnVwdCBtb2RlIGJ5IHVzaW5nIGZ1bmN0aW9uIEhBTF9NTUNfUmVhZEJsb2Nrc19JVCgpLgogICAgICAgICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0aGUgcmVhZCBvZiA1MTIgYnl0ZXMgYmxvY2tzLgotICAgICAgICBZb3UgY2FuIGNob29zZSBlaXRoZXIgb25lIGJsb2NrIHJlYWQgb3BlcmF0aW9uIG9yIG11bHRpcGxlIGJsb2NrIHJlYWQgb3BlcmF0aW9uIAorICAgICAgICBZb3UgY2FuIGNob29zZSBlaXRoZXIgb25lIGJsb2NrIHJlYWQgb3BlcmF0aW9uIG9yIG11bHRpcGxlIGJsb2NrIHJlYWQgb3BlcmF0aW9uCiAgICAgICAgIGJ5IGFkanVzdGluZyB0aGUgIk51bWJlck9mQmxvY2tzIiBwYXJhbWV0ZXIuCiAgICAgICAgIEFmdGVyIHRoaXMsIHlvdSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZSB0cmFuc2ZlciBpcyBkb25lIGNvcnJlY3RseS4gVGhlIGNoZWNrIGlzIGRvbmUKICAgICAgICAgdGhyb3VnaCBIQUxfTU1DX0dldENhcmRTdGF0ZSgpIGZ1bmN0aW9uIGZvciBNTUMgY2FyZCBzdGF0ZS4KQEAgLTEyOSwxOCArMTI5LDE4IEBACiAgICAgICAgIGJ5IGFkanVzdGluZyB0aGUgIk51bWJlck9mQmxvY2tzIiBwYXJhbWV0ZXIuCiAgICAgICAgIEFmdGVyIHRoaXMsIHlvdSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZSB0cmFuc2ZlciBpcyBkb25lIGNvcnJlY3RseS4gVGhlIGNoZWNrIGlzIGRvbmUKICAgICAgICAgdGhyb3VnaCBIQUxfTU1DX0dldENhcmRTdGF0ZSgpIGZ1bmN0aW9uIGZvciBNTUMgY2FyZCBzdGF0ZS4KLSAgICAgICAgWW91IGNvdWxkIGFsc28gY2hlY2sgdGhlIERNQSB0cmFuc2ZlciBwcm9jZXNzIHRocm91Z2ggdGhlIE1NQyBUeCBpbnRlcnJ1cHQgZXZlbnQuICAKKyAgICAgICAgWW91IGNvdWxkIGFsc28gY2hlY2sgdGhlIERNQSB0cmFuc2ZlciBwcm9jZXNzIHRocm91Z2ggdGhlIE1NQyBUeCBpbnRlcnJ1cHQgZXZlbnQuCiAKICAgICAoKykgWW91IGNhbiB3cml0ZSB0byBNTUMgY2FyZCBpbiBJbnRlcnJ1cHQgbW9kZSBieSB1c2luZyBmdW5jdGlvbiBIQUxfTU1DX1dyaXRlQmxvY2tzX0lUKCkuCiAgICAgICAgIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRoZSByZWFkIG9mIDUxMiBieXRlcyBibG9ja3MuCi0gICAgICAgIFlvdSBjYW4gY2hvb3NlIGVpdGhlciBvbmUgYmxvY2sgcmVhZCBvcGVyYXRpb24gb3IgbXVsdGlwbGUgYmxvY2sgcmVhZCBvcGVyYXRpb24gCisgICAgICAgIFlvdSBjYW4gY2hvb3NlIGVpdGhlciBvbmUgYmxvY2sgcmVhZCBvcGVyYXRpb24gb3IgbXVsdGlwbGUgYmxvY2sgcmVhZCBvcGVyYXRpb24KICAgICAgICAgYnkgYWRqdXN0aW5nIHRoZSAiTnVtYmVyT2ZCbG9ja3MiIHBhcmFtZXRlci4KICAgICAgICAgQWZ0ZXIgdGhpcywgeW91IGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIHRyYW5zZmVyIGlzIGRvbmUgY29ycmVjdGx5LiBUaGUgY2hlY2sgaXMgZG9uZQogICAgICAgICB0aHJvdWdoIEhBTF9NTUNfR2V0Q2FyZFN0YXRlKCkgZnVuY3Rpb24gZm9yIE1NQyBjYXJkIHN0YXRlLgogICAgICAgICBZb3UgY291bGQgYWxzbyBjaGVjayB0aGUgSVQgdHJhbnNmZXIgcHJvY2VzcyB0aHJvdWdoIHRoZSBNTUMgVHggaW50ZXJydXB0IGV2ZW50LgogCiAgICoqKiBNTUMgY2FyZCBpbmZvcm1hdGlvbiAqKioKLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09IAorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgWy4uXQogICAgICgrKSBUbyBnZXQgTU1DIGNhcmQgaW5mb3JtYXRpb24sIHlvdSBjYW4gdXNlIHRoZSBmdW5jdGlvbiBIQUxfTU1DX0dldENhcmRJbmZvKCkuCiAgICAgICAgIEl0IHJldHVybnMgdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBNTUMgY2FyZCBzdWNoIGFzIGJsb2NrIHNpemUsIGNhcmQgdHlwZSwKQEAgLTI4MSw2ICsyODEsMTAgQEAKICNkZWZpbmUgTU1DX0VYVF9DU0RfUFdSX0NMXzUyX1BPUyAgICAgICAxNgogI2RlZmluZSBNTUNfRVhUX0NTRF9QV1JfQ0xfRERSXzUyX1BPUyAgIDI0CiAjZW5kaWYKKworLyogRnJlcXVlbmNpZXMgdXNlZCBpbiB0aGUgZHJpdmVyIGZvciBjbG9jayBkaXZpZGVyIGNhbGN1bGF0aW9uICovCisjZGVmaW5lIE1NQ19JTklUX0ZSRVEgICAgICAgICAgICAgICAgICAgNDAwMDAwVSAgIC8qIEluaXRhbGl6YXRpb24gcGhhc2UgOiA0MDAga0h6IG1heCAqLworI2RlZmluZSBNTUNfSElHSF9TUEVFRF9GUkVRICAgICAgICAgICAgIDUyMDAwMDAwVSAvKiBIaWdoIHNwZWVkIHBoYXNlIDogNTIgTUh6IG1heCAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTMwMCw3ICszMDQsOCBAQAogc3RhdGljIHZvaWQgICAgIE1NQ19SZWFkX0lUKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKIHN0YXRpYyB1aW50MzJfdCBNTUNfSGlnaFNwZWVkKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCBGdW5jdGlvbmFsU3RhdGUgc3RhdGUpOwogc3RhdGljIHVpbnQzMl90IE1NQ19ERFJfTW9kZShNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgRnVuY3Rpb25hbFN0YXRlIHN0YXRlKTsKLXN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBNTUNfUmVhZEV4dENTRChNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDMyX3QgKnBGaWVsZERhdGEsIHVpbnQxNl90IEZpZWxkSW5kZXgsIHVpbnQzMl90IFRpbWVvdXQpOworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIE1NQ19SZWFkRXh0Q1NEKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50MzJfdCAqcEZpZWxkRGF0YSwgdWludDE2X3QgRmllbGRJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0KTsKIHN0YXRpYyB1aW50MzJfdCBNTUNfUHdyQ2xhc3NVcGRhdGUoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQzMl90IFdpZGUsIHVpbnQzMl90IFNwZWVkKTsKIAogLyoqCkBAIC0zMTIsOCArMzE3LDggQEAKICAgKi8KIAogLyoqIEBhZGR0b2dyb3VwIE1NQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxCi0gKiAgQGJyaWVmICAgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgIyMjIyMgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAjIyMjIwpAQCAtMzM1LDcgKzM0MCw3IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX0luaXQoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpCiB7CiAgIC8qIENoZWNrIHRoZSBNTUMgaGFuZGxlIGFsbG9jYXRpb24gKi8KLSAgaWYoaG1tYyA9PSBOVUxMKQorICBpZiAoaG1tYyA9PSBOVUxMKQogICB7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQpAQCAtMzQ4LDcgKzM1Myw3IEBACiAgIGFzc2VydF9wYXJhbShJU19TRE1NQ19IQVJEV0FSRV9GTE9XX0NPTlRST0woaG1tYy0+SW5pdC5IYXJkd2FyZUZsb3dDb250cm9sKSk7CiAgIGFzc2VydF9wYXJhbShJU19TRE1NQ19DTEtESVYoaG1tYy0+SW5pdC5DbG9ja0RpdikpOwogCi0gIGlmKGhtbWMtPlN0YXRlID09IEhBTF9NTUNfU1RBVEVfUkVTRVQpCisgIGlmIChobW1jLT5TdGF0ZSA9PSBIQUxfTU1DX1NUQVRFX1JFU0VUKQogICB7CiAgICAgLyogQWxsb2NhdGUgbG9jayByZXNvdXJjZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLwogICAgIGhtbWMtPkxvY2sgPSBIQUxfVU5MT0NLRUQ7CkBAIC0zNjMsNyArMzY4LDcgQEAKICAgICBobW1jLT5Xcml0ZV9ETUFEYmxCdWYwQ3BsdENhbGxiYWNrID0gSEFMX01NQ0V4X1dyaXRlX0RNQURvdWJsZUJ1ZjBDcGx0Q2FsbGJhY2s7CiAgICAgaG1tYy0+V3JpdGVfRE1BRGJsQnVmMUNwbHRDYWxsYmFjayA9IEhBTF9NTUNFeF9Xcml0ZV9ETUFEb3VibGVCdWYxQ3BsdENhbGxiYWNrOwogCi0gICAgaWYoaG1tYy0+TXNwSW5pdENhbGxiYWNrID09IE5VTEwpCisgICAgaWYgKGhtbWMtPk1zcEluaXRDYWxsYmFjayA9PSBOVUxMKQogICAgIHsKICAgICAgIGhtbWMtPk1zcEluaXRDYWxsYmFjayA9IEhBTF9NTUNfTXNwSW5pdDsKICAgICB9CkBAIC0zNzksNyArMzg0LDcgQEAKICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX0JVU1k7CiAKICAgLyogSW5pdGlhbGl6ZSB0aGUgQ2FyZCBwYXJhbWV0ZXJzICovCi0gIGlmKEhBTF9NTUNfSW5pdENhcmQoaG1tYykgPT0gSEFMX0VSUk9SKQorICBpZiAoSEFMX01NQ19Jbml0Q2FyZChobW1jKSA9PSBIQUxfRVJST1IpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC00MjgsMTEgKzQzMywxNSBAQAogICBzZG1tY19jbGsgICAgID0gSEFMX1JDQ0V4X0dldFBlcmlwaENMS0ZyZXEoUkNDX1BFUklQSENMS19TRE1NQzEpOwogICBpZiAoc2RtbWNfY2xrID09IDBVKQogICB7Ci0gICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7Ci0gICAgICBobW1jLT5FcnJvckNvZGUgPSBTRE1NQ19FUlJPUl9JTlZBTElEX1BBUkFNRVRFUjsKLSAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOworICAgIGhtbWMtPkVycm9yQ29kZSA9IFNETU1DX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSOworICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KLSAgSW5pdC5DbG9ja0RpdiA9IHNkbW1jX2Nsay8oMlUqNDAwMDAwVSk7CisgIEluaXQuQ2xvY2tEaXYgPSBzZG1tY19jbGsgLyAoMlUgKiBNTUNfSU5JVF9GUkVRKTsKKworI2lmIChVU0VfU0RfVFJBTlNDRUlWRVIgIT0gMFUpCisgIEluaXQuVHJhbmNlaXZlclByZXNlbnQgPSBTRE1NQ19UUkFOU0NFSVZFUl9OT1RfUFJFU0VOVDsKKyNlbmRpZiAvKiBVU0VfU0RfVFJBTlNDRUlWRVIgKi8KIAogICAvKiBJbml0aWFsaXplIFNETU1DIHBlcmlwaGVyYWwgaW50ZXJmYWNlIHdpdGggZGVmYXVsdCBjb25maWd1cmF0aW9uICovCiAgICh2b2lkKVNETU1DX0luaXQoaG1tYy0+SW5zdGFuY2UsIEluaXQpOwpAQCAtNDQyLDEyICs0NTEsMTIgQEAKIAogICAvKiB3YWl0IDc0IEN5Y2xlczogcmVxdWlyZWQgcG93ZXIgdXAgd2FpdGluZyB0aW1lIGJlZm9yZSBzdGFydGluZwogICAgICB0aGUgTU1DIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlICovCi0gIHNkbW1jX2NsayA9IHNkbW1jX2Nsay8oMlUqSW5pdC5DbG9ja0Rpdik7Ci0gIEhBTF9EZWxheSgxVSsgKDc0VSoxMDAwVS8oc2RtbWNfY2xrKSkpOworICBzZG1tY19jbGsgPSBzZG1tY19jbGsgLyAoMlUgKiBJbml0LkNsb2NrRGl2KTsKKyAgSEFMX0RlbGF5KDFVICsgKDc0VSAqIDEwMDBVIC8gKHNkbW1jX2NsaykpKTsKIAogICAvKiBJZGVudGlmeSBjYXJkIG9wZXJhdGluZyB2b2x0YWdlICovCiAgIGVycm9yc3RhdGUgPSBNTUNfUG93ZXJPTihobW1jKTsKLSAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgewogICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKQEAgLTQ1Niw3ICs0NjUsNyBAQAogCiAgIC8qIENhcmQgaW5pdGlhbGl6YXRpb24gKi8KICAgZXJyb3JzdGF0ZSA9IE1NQ19Jbml0Q2FyZChobW1jKTsKLSAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgewogICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKQEAgLTQ2NSw3ICs0NzQsNyBAQAogCiAgIC8qIFNldCBCbG9jayBTaXplIGZvciBDYXJkICovCiAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRCbG9ja0xlbmd0aChobW1jLT5JbnN0YW5jZSwgTU1DX0JMT0NLU0laRSk7Ci0gIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgIHsKICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNETU1DX1NUQVRJQ19GTEFHUyk7CkBAIC00ODUsNyArNDk0LDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfRGVJbml0KE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKQogewogICAvKiBDaGVjayB0aGUgTU1DIGhhbmRsZSBhbGxvY2F0aW9uICovCi0gIGlmKGhtbWMgPT0gTlVMTCkKKyAgaWYgKGhtbWMgPT0gTlVMTCkKICAgewogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KQEAgLTQ5OSw3ICs1MDgsNyBAQAogICBNTUNfUG93ZXJPRkYoaG1tYyk7CiAKICNpZiBkZWZpbmVkIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCi0gIGlmKGhtbWMtPk1zcERlSW5pdENhbGxiYWNrID09IE5VTEwpCisgIGlmIChobW1jLT5Nc3BEZUluaXRDYWxsYmFjayA9PSBOVUxMKQogICB7CiAgICAgaG1tYy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfTU1DX01zcERlSW5pdDsKICAgfQpAQCAtNTUzLDggKzU2Miw4IEBACiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBNTUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMgotICogIEBicmllZiAgIERhdGEgdHJhbnNmZXIgZnVuY3Rpb25zCi0gKgorICAqICBAYnJpZWYgICBEYXRhIHRyYW5zZmVyIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBJTyBvcGVyYXRpb24gZnVuY3Rpb25zICMjIyMjCkBAIC01NzksNyArNTg4LDggQEAKICAgKiBAcGFyYW0gIFRpbWVvdXQ6IFNwZWNpZnkgdGltZW91dCB2YWx1ZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19SZWFkQmxvY2tzKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgQmxvY2tBZGQsIHVpbnQzMl90IE51bWJlck9mQmxvY2tzLCB1aW50MzJfdCBUaW1lb3V0KQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19SZWFkQmxvY2tzKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgQmxvY2tBZGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MsIHVpbnQzMl90IFRpbWVvdXQpCiB7CiAgIFNETU1DX0RhdGFJbml0VHlwZURlZiBjb25maWc7CiAgIHVpbnQzMl90IGVycm9yc3RhdGU7CkBAIC01ODgsMjIgKzU5OCw0MCBAQAogICB1aW50MzJfdCBhZGQgPSBCbG9ja0FkZDsKICAgdWludDhfdCAqdGVtcGJ1ZmYgPSBwRGF0YTsKIAotICBpZihOVUxMID09IHBEYXRhKQorICBpZiAoTlVMTCA9PSBwRGF0YSkKICAgewogICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX1BBUkFNOwogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAotICBpZihobW1jLT5TdGF0ZSA9PSBIQUxfTU1DX1NUQVRFX1JFQURZKQorICBpZiAoaG1tYy0+U3RhdGUgPT0gSEFMX01NQ19TVEFURV9SRUFEWSkKICAgewogICAgIGhtbWMtPkVycm9yQ29kZSA9IEhBTF9NTUNfRVJST1JfTk9ORTsKIAotICAgIGlmKChCbG9ja0FkZCArIE51bWJlck9mQmxvY2tzKSA+IChobW1jLT5NbWNDYXJkLkxvZ0Jsb2NrTmJyKSkKKyAgICBpZiAoKEJsb2NrQWRkICsgTnVtYmVyT2ZCbG9ja3MpID4gKGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tOYnIpKQogICAgIHsKICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0FERFJfT1VUX09GX1JBTkdFOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CiAKKyAgICAvKiBDaGVjayB0aGUgY2FzZSBvZiA0a0IgYmxvY2tzIChmaWVsZCBEQVRBIFNFQ1RPUiBTSVpFIG9mIGV4dGVuZGVkIENTRCByZWdpc3RlcikgKi8KKyAgICBpZiAoKChobW1jLT5FeHRfQ1NEWyhNTUNfRVhUX0NTRF9EQVRBX1NFQ19TSVpFX0lOREVYIC8gNCldID4+IE1NQ19FWFRfQ1NEX0RBVEFfU0VDX1NJWkVfUE9TKSAmIDB4MDAwMDAwRkZVKSAhPSAweDBVKQorICAgIHsKKyAgICAgIGlmICgoTnVtYmVyT2ZCbG9ja3MgJSA4VSkgIT0gMFUpCisgICAgICB7CisgICAgICAgIC8qIFRoZSBudW1iZXIgb2YgYmxvY2tzIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIDggc2VjdG9ycyBvZiA1MTIgYnl0ZXMgPSA0IEtCeXRlcyAqLworICAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9CTE9DS19MRU5fRVJSOworICAgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgfQorCisgICAgICBpZiAoKEJsb2NrQWRkICUgOFUpICE9IDBVKQorICAgICAgeworICAgICAgICAvKiBUaGUgYWRkcmVzcyBzaG91bGQgYmUgYWxpZ25lZCB0byA4IChjb3JyZXNwb25kaW5nIHRvIDQgS0J5dGVzIGJsb2NrcykgKi8KKyAgICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfQUREUl9NSVNBTElHTkVEOworICAgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgfQorICAgIH0KKwogICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9CVVNZOwogCiAgICAgLyogSW5pdGlhbGl6ZSBkYXRhIGNvbnRyb2wgcmVnaXN0ZXIgKi8KQEAgLTYyMiwxMCArNjUwLDEwIEBACiAgICAgY29uZmlnLlRyYW5zZmVyTW9kZSAgPSBTRE1NQ19UUkFOU0ZFUl9NT0RFX0JMT0NLOwogICAgIGNvbmZpZy5EUFNNICAgICAgICAgID0gU0RNTUNfRFBTTV9ESVNBQkxFOwogICAgICh2b2lkKVNETU1DX0NvbmZpZ0RhdGEoaG1tYy0+SW5zdGFuY2UsICZjb25maWcpOwotICAgIF9fU0RNTUNfQ01EVFJBTlNfRU5BQkxFKCBobW1jLT5JbnN0YW5jZSk7CisgICAgX19TRE1NQ19DTURUUkFOU19FTkFCTEUoaG1tYy0+SW5zdGFuY2UpOwogCiAgICAgLyogUmVhZCBibG9jayhzKSBpbiBwb2xsaW5nIG1vZGUgKi8KLSAgICBpZihOdW1iZXJPZkJsb2NrcyA+IDFVKQorICAgIGlmIChOdW1iZXJPZkJsb2NrcyA+IDFVKQogICAgIHsKICAgICAgIGhtbWMtPkNvbnRleHQgPSBNTUNfQ09OVEVYVF9SRUFEX01VTFRJUExFX0JMT0NLOwogCkBAIC02MzksNyArNjY3LDcgQEAKICAgICAgIC8qIFJlYWQgU2luZ2xlIEJsb2NrIGNvbW1hbmQgKi8KICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRSZWFkU2luZ2xlQmxvY2soaG1tYy0+SW5zdGFuY2UsIGFkZCk7CiAgICAgfQotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTY1MCwxMiArNjc4LDEzIEBACiAKICAgICAvKiBQb2xsIG9uIFNETU1DIGZsYWdzICovCiAgICAgZGF0YXJlbWFpbmluZyA9IGNvbmZpZy5EYXRhTGVuZ3RoOwotICAgIHdoaWxlKCFfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19SWE9WRVJSIHwgU0RNTUNfRkxBR19EQ1JDRkFJTCB8IFNETU1DX0ZMQUdfRFRJTUVPVVQgfCBTRE1NQ19GTEFHX0RBVEFFTkQpKQorICAgIHdoaWxlICghX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfRkxBR19SWE9WRVJSIHwgU0RNTUNfRkxBR19EQ1JDRkFJTCB8IFNETU1DX0ZMQUdfRFRJTUVPVVQgfCBTRE1NQ19GTEFHX0RBVEFFTkQpKQogICAgIHsKLSAgICAgIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX1JYRklGT0hGKSAmJiAoZGF0YXJlbWFpbmluZyA+PSAzMlUpKQorICAgICAgaWYgKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX1JYRklGT0hGKSAmJiAoZGF0YXJlbWFpbmluZyA+PSAzMlUpKQogICAgICAgewogICAgICAgICAvKiBSZWFkIGRhdGEgZnJvbSBTRE1NQyBSeCBGSUZPICovCi0gICAgICAgIGZvcihjb3VudCA9IDBVOyBjb3VudCA8IDhVOyBjb3VudCsrKQorICAgICAgICBmb3IgKGNvdW50ID0gMFU7IGNvdW50IDwgOFU7IGNvdW50KyspCiAgICAgICAgIHsKICAgICAgICAgICBkYXRhID0gU0RNTUNfUmVhZEZJRk8oaG1tYy0+SW5zdGFuY2UpOwogICAgICAgICAgICp0ZW1wYnVmZiA9ICh1aW50OF90KShkYXRhICYgMHhGRlUpOwpAQCAtNjcwLDIzICs2OTksMjMgQEAKICAgICAgICAgZGF0YXJlbWFpbmluZyAtPSAzMlU7CiAgICAgICB9CiAKLSAgICAgIGlmKCgoSEFMX0dldFRpY2soKS10aWNrc3RhcnQpID49ICBUaW1lb3V0KSB8fCAoVGltZW91dCA9PSAwVSkpCisgICAgICBpZiAoKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+PSAgVGltZW91dCkgfHwgKFRpbWVvdXQgPT0gMFUpKQogICAgICAgewogICAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwogICAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9USU1FT1VUOwotICAgICAgICBobW1jLT5TdGF0ZT0gSEFMX01NQ19TVEFURV9SRUFEWTsKKyAgICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwogICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgICB9CiAgICAgfQotICAgIF9fU0RNTUNfQ01EVFJBTlNfRElTQUJMRSggaG1tYy0+SW5zdGFuY2UpOworICAgIF9fU0RNTUNfQ01EVFJBTlNfRElTQUJMRShobW1jLT5JbnN0YW5jZSk7CiAKICAgICAvKiBTZW5kIHN0b3AgdHJhbnNtaXNzaW9uIGNvbW1hbmQgaW4gY2FzZSBvZiBtdWx0aWJsb2NrIHJlYWQgKi8KLSAgICBpZihfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19EQVRBRU5EKSAmJiAoTnVtYmVyT2ZCbG9ja3MgPiAxVSkpCisgICAgaWYgKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX0RBVEFFTkQpICYmIChOdW1iZXJPZkJsb2NrcyA+IDFVKSkKICAgICB7CiAgICAgICAvKiBTZW5kIHN0b3AgdHJhbnNtaXNzaW9uIGNvbW1hbmQgKi8KICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTdG9wVHJhbnNmZXIoaG1tYy0+SW5zdGFuY2UpOwotICAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgICB7CiAgICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCiAgICAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNETU1DX1NUQVRJQ19GTEFHUyk7CkBAIC02OTcsNyArNzI2LDcgQEAKICAgICB9CiAKICAgICAvKiBHZXQgZXJyb3Igc3RhdGUgKi8KLSAgICBpZihfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19EVElNRU9VVCkpCisgICAgaWYgKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX0RUSU1FT1VUKSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTcwNSw3ICs3MzQsNyBAQAogICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgZWxzZSBpZihfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19EQ1JDRkFJTCkpCisgICAgZWxzZSBpZiAoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0ZMQUdfRENSQ0ZBSUwpKQogICAgIHsKICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCiAgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwpAQCAtNzEzLDcgKzc0Miw3IEBACiAgICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICBlbHNlIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX1JYT1ZFUlIpKQorICAgIGVsc2UgaWYgKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX1JYT1ZFUlIpKQogICAgIHsKICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCiAgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwpAQCAtNzUyLDcgKzc4MSw4IEBACiAgICogQHBhcmFtICBUaW1lb3V0OiBTcGVjaWZ5IHRpbWVvdXQgdmFsdWUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfV3JpdGVCbG9ja3MoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBCbG9ja0FkZCwgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MsIHVpbnQzMl90IFRpbWVvdXQpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX1dyaXRlQmxvY2tzKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgQmxvY2tBZGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE51bWJlck9mQmxvY2tzLCB1aW50MzJfdCBUaW1lb3V0KQogewogICBTRE1NQ19EYXRhSW5pdFR5cGVEZWYgY29uZmlnOwogICB1aW50MzJfdCBlcnJvcnN0YXRlOwpAQCAtNzYxLDIyICs3OTEsNDAgQEAKICAgdWludDMyX3QgYWRkID0gQmxvY2tBZGQ7CiAgIHVpbnQ4X3QgKnRlbXBidWZmID0gcERhdGE7CiAKLSAgaWYoTlVMTCA9PSBwRGF0YSkKKyAgaWYgKE5VTEwgPT0gcERhdGEpCiAgIHsKICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9QQVJBTTsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKLSAgaWYoaG1tYy0+U3RhdGUgPT0gSEFMX01NQ19TVEFURV9SRUFEWSkKKyAgaWYgKGhtbWMtPlN0YXRlID09IEhBTF9NTUNfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBobW1jLT5FcnJvckNvZGUgPSBIQUxfTU1DX0VSUk9SX05PTkU7CiAKLSAgICBpZigoQmxvY2tBZGQgKyBOdW1iZXJPZkJsb2NrcykgPiAoaG1tYy0+TW1jQ2FyZC5Mb2dCbG9ja05icikpCisgICAgaWYgKChCbG9ja0FkZCArIE51bWJlck9mQmxvY2tzKSA+IChobW1jLT5NbWNDYXJkLkxvZ0Jsb2NrTmJyKSkKICAgICB7CiAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9BRERSX09VVF9PRl9SQU5HRTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogCisgICAgLyogQ2hlY2sgdGhlIGNhc2Ugb2YgNGtCIGJsb2NrcyAoZmllbGQgREFUQSBTRUNUT1IgU0laRSBvZiBleHRlbmRlZCBDU0QgcmVnaXN0ZXIpICovCisgICAgaWYgKCgoaG1tYy0+RXh0X0NTRFsoTU1DX0VYVF9DU0RfREFUQV9TRUNfU0laRV9JTkRFWCAvIDQpXSA+PiBNTUNfRVhUX0NTRF9EQVRBX1NFQ19TSVpFX1BPUykgJiAweDAwMDAwMEZGVSkgIT0gMHgwVSkKKyAgICB7CisgICAgICBpZiAoKE51bWJlck9mQmxvY2tzICUgOFUpICE9IDBVKQorICAgICAgeworICAgICAgICAvKiBUaGUgbnVtYmVyIG9mIGJsb2NrcyBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiA4IHNlY3RvcnMgb2YgNTEyIGJ5dGVzID0gNCBLQnl0ZXMgKi8KKyAgICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfQkxPQ0tfTEVOX0VSUjsKKyAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIH0KKworICAgICAgaWYgKChCbG9ja0FkZCAlIDhVKSAhPSAwVSkKKyAgICAgIHsKKyAgICAgICAgLyogVGhlIGFkZHJlc3Mgc2hvdWxkIGJlIGFsaWduZWQgdG8gOCAoY29ycmVzcG9uZGluZyB0byA0IEtCeXRlcyBibG9ja3MpICovCisgICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0FERFJfTUlTQUxJR05FRDsKKyAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIH0KKyAgICB9CisKICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfQlVTWTsKIAogICAgIC8qIEluaXRpYWxpemUgZGF0YSBjb250cm9sIHJlZ2lzdGVyICovCkBAIC03OTUsMTAgKzg0MywxMCBAQAogICAgIGNvbmZpZy5UcmFuc2Zlck1vZGUgID0gU0RNTUNfVFJBTlNGRVJfTU9ERV9CTE9DSzsKICAgICBjb25maWcuRFBTTSAgICAgICAgICA9IFNETU1DX0RQU01fRElTQUJMRTsKICAgICAodm9pZClTRE1NQ19Db25maWdEYXRhKGhtbWMtPkluc3RhbmNlLCAmY29uZmlnKTsKLSAgICBfX1NETU1DX0NNRFRSQU5TX0VOQUJMRSggaG1tYy0+SW5zdGFuY2UpOworICAgIF9fU0RNTUNfQ01EVFJBTlNfRU5BQkxFKGhtbWMtPkluc3RhbmNlKTsKIAogICAgIC8qIFdyaXRlIEJsb2NrcyBpbiBQb2xsaW5nIG1vZGUgKi8KLSAgICBpZihOdW1iZXJPZkJsb2NrcyA+IDFVKQorICAgIGlmIChOdW1iZXJPZkJsb2NrcyA+IDFVKQogICAgIHsKICAgICAgIGhtbWMtPkNvbnRleHQgPSBNTUNfQ09OVEVYVF9XUklURV9NVUxUSVBMRV9CTE9DSzsKIApAQCAtODEyLDcgKzg2MCw3IEBACiAgICAgICAvKiBXcml0ZSBTaW5nbGUgQmxvY2sgY29tbWFuZCAqLwogICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFdyaXRlU2luZ2xlQmxvY2soaG1tYy0+SW5zdGFuY2UsIGFkZCk7CiAgICAgfQotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTgyMywxMiArODcxLDEzIEBACiAKICAgICAvKiBXcml0ZSBibG9jayhzKSBpbiBwb2xsaW5nIG1vZGUgKi8KICAgICBkYXRhcmVtYWluaW5nID0gY29uZmlnLkRhdGFMZW5ndGg7Ci0gICAgd2hpbGUoIV9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX1RYVU5ERVJSIHwgU0RNTUNfRkxBR19EQ1JDRkFJTCB8IFNETU1DX0ZMQUdfRFRJTUVPVVQgfCBTRE1NQ19GTEFHX0RBVEFFTkQpKQorICAgIHdoaWxlICghX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfRkxBR19UWFVOREVSUiB8IFNETU1DX0ZMQUdfRENSQ0ZBSUwgfCBTRE1NQ19GTEFHX0RUSU1FT1VUIHwgU0RNTUNfRkxBR19EQVRBRU5EKSkKICAgICB7Ci0gICAgICBpZihfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19UWEZJRk9IRSkgJiYgKGRhdGFyZW1haW5pbmcgPj0gMzJVKSkKKyAgICAgIGlmIChfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19UWEZJRk9IRSkgJiYgKGRhdGFyZW1haW5pbmcgPj0gMzJVKSkKICAgICAgIHsKICAgICAgICAgLyogV3JpdGUgZGF0YSB0byBTRE1NQyBUeCBGSUZPICovCi0gICAgICAgIGZvcihjb3VudCA9IDBVOyBjb3VudCA8IDhVOyBjb3VudCsrKQorICAgICAgICBmb3IgKGNvdW50ID0gMFU7IGNvdW50IDwgOFU7IGNvdW50KyspCiAgICAgICAgIHsKICAgICAgICAgICBkYXRhID0gKHVpbnQzMl90KSgqdGVtcGJ1ZmYpOwogICAgICAgICAgIHRlbXBidWZmKys7CkBAIC04NDMsNyArODkyLDcgQEAKICAgICAgICAgZGF0YXJlbWFpbmluZyAtPSAzMlU7CiAgICAgICB9CiAKLSAgICAgIGlmKCgoSEFMX0dldFRpY2soKS10aWNrc3RhcnQpID49ICBUaW1lb3V0KSB8fCAoVGltZW91dCA9PSAwVSkpCisgICAgICBpZiAoKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+PSAgVGltZW91dCkgfHwgKFRpbWVvdXQgPT0gMFUpKQogICAgICAgewogICAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwpAQCAtODUyLDE0ICs5MDEsMTQgQEAKICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICAgICAgfQogICAgIH0KLSAgICBfX1NETU1DX0NNRFRSQU5TX0RJU0FCTEUoIGhtbWMtPkluc3RhbmNlKTsKKyAgICBfX1NETU1DX0NNRFRSQU5TX0RJU0FCTEUoaG1tYy0+SW5zdGFuY2UpOwogCiAgICAgLyogU2VuZCBzdG9wIHRyYW5zbWlzc2lvbiBjb21tYW5kIGluIGNhc2Ugb2YgbXVsdGlibG9jayB3cml0ZSAqLwotICAgIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX0RBVEFFTkQpICYmIChOdW1iZXJPZkJsb2NrcyA+IDFVKSkKKyAgICBpZiAoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0ZMQUdfREFUQUVORCkgJiYgKE51bWJlck9mQmxvY2tzID4gMVUpKQogICAgIHsKICAgICAgIC8qIFNlbmQgc3RvcCB0cmFuc21pc3Npb24gY29tbWFuZCAqLwogICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFN0b3BUcmFuc2ZlcihobW1jLT5JbnN0YW5jZSk7Ci0gICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICAgIHsKICAgICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTg3MCw3ICs5MTksNyBAQAogICAgIH0KIAogICAgIC8qIEdldCBlcnJvciBzdGF0ZSAqLwotICAgIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX0RUSU1FT1VUKSkKKyAgICBpZiAoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0ZMQUdfRFRJTUVPVVQpKQogICAgIHsKICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCiAgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwpAQCAtODc4LDcgKzkyNyw3IEBACiAgICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICBlbHNlIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX0RDUkNGQUlMKSkKKyAgICBlbHNlIGlmIChfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19EQ1JDRkFJTCkpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNETU1DX1NUQVRJQ19GTEFHUyk7CkBAIC04ODYsNyArOTM1LDcgQEAKICAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQotICAgIGVsc2UgaWYoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0ZMQUdfVFhVTkRFUlIpKQorICAgIGVsc2UgaWYgKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX1RYVU5ERVJSKSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTkyNiwyOCArOTc1LDQ3IEBACiAgICogQHBhcmFtICBOdW1iZXJPZkJsb2NrczogTnVtYmVyIG9mIGJsb2NrcyB0byByZWFkLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19SZWFkQmxvY2tzX0lUKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgQmxvY2tBZGQsIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19SZWFkQmxvY2tzX0lUKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50OF90ICpwRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBCbG9ja0FkZCwgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MpCiB7CiAgIFNETU1DX0RhdGFJbml0VHlwZURlZiBjb25maWc7CiAgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIHVpbnQzMl90IGFkZCA9IEJsb2NrQWRkOwogCi0gIGlmKE5VTEwgPT0gcERhdGEpCisgIGlmIChOVUxMID09IHBEYXRhKQogICB7CiAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfUEFSQU07CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCi0gIGlmKGhtbWMtPlN0YXRlID09IEhBTF9NTUNfU1RBVEVfUkVBRFkpCisgIGlmIChobW1jLT5TdGF0ZSA9PSBIQUxfTU1DX1NUQVRFX1JFQURZKQogICB7CiAgICAgaG1tYy0+RXJyb3JDb2RlID0gSEFMX01NQ19FUlJPUl9OT05FOwogCi0gICAgaWYoKEJsb2NrQWRkICsgTnVtYmVyT2ZCbG9ja3MpID4gKGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tOYnIpKQorICAgIGlmICgoQmxvY2tBZGQgKyBOdW1iZXJPZkJsb2NrcykgPiAoaG1tYy0+TW1jQ2FyZC5Mb2dCbG9ja05icikpCiAgICAgewogICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfQUREUl9PVVRfT0ZfUkFOR0U7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KIAorICAgIC8qIENoZWNrIHRoZSBjYXNlIG9mIDRrQiBibG9ja3MgKGZpZWxkIERBVEEgU0VDVE9SIFNJWkUgb2YgZXh0ZW5kZWQgQ1NEIHJlZ2lzdGVyKSAqLworICAgIGlmICgoKGhtbWMtPkV4dF9DU0RbKE1NQ19FWFRfQ1NEX0RBVEFfU0VDX1NJWkVfSU5ERVggLyA0KV0gPj4gTU1DX0VYVF9DU0RfREFUQV9TRUNfU0laRV9QT1MpICYgMHgwMDAwMDBGRlUpICE9IDB4MFUpCisgICAgeworICAgICAgaWYgKChOdW1iZXJPZkJsb2NrcyAlIDhVKSAhPSAwVSkKKyAgICAgIHsKKyAgICAgICAgLyogVGhlIG51bWJlciBvZiBibG9ja3Mgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgOCBzZWN0b3JzIG9mIDUxMiBieXRlcyA9IDQgS0J5dGVzICovCisgICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0JMT0NLX0xFTl9FUlI7CisgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICB9CisKKyAgICAgIGlmICgoQmxvY2tBZGQgJSA4VSkgIT0gMFUpCisgICAgICB7CisgICAgICAgIC8qIFRoZSBhZGRyZXNzIHNob3VsZCBiZSBhbGlnbmVkIHRvIDggKGNvcnJlc3BvbmRpbmcgdG8gNCBLQnl0ZXMgYmxvY2tzKSAqLworICAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9BRERSX01JU0FMSUdORUQ7CisgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICB9CisgICAgfQorCiAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX0JVU1k7CiAKICAgICAvKiBJbml0aWFsaXplIGRhdGEgY29udHJvbCByZWdpc3RlciAqLwpAQCAtOTY5LDEwICsxMDM3LDEwIEBACiAgICAgY29uZmlnLlRyYW5zZmVyTW9kZSAgPSBTRE1NQ19UUkFOU0ZFUl9NT0RFX0JMT0NLOwogICAgIGNvbmZpZy5EUFNNICAgICAgICAgID0gU0RNTUNfRFBTTV9ESVNBQkxFOwogICAgICh2b2lkKVNETU1DX0NvbmZpZ0RhdGEoaG1tYy0+SW5zdGFuY2UsICZjb25maWcpOwotICAgIF9fU0RNTUNfQ01EVFJBTlNfRU5BQkxFKCBobW1jLT5JbnN0YW5jZSk7CisgICAgX19TRE1NQ19DTURUUkFOU19FTkFCTEUoaG1tYy0+SW5zdGFuY2UpOwogCiAgICAgLyogUmVhZCBCbG9ja3MgaW4gSVQgbW9kZSAqLwotICAgIGlmKE51bWJlck9mQmxvY2tzID4gMVUpCisgICAgaWYgKE51bWJlck9mQmxvY2tzID4gMVUpCiAgICAgewogICAgICAgaG1tYy0+Q29udGV4dCA9IChNTUNfQ09OVEVYVF9SRUFEX01VTFRJUExFX0JMT0NLIHwgTU1DX0NPTlRFWFRfSVQpOwogCkBAIC05ODcsNyArMTA1NSw3IEBACiAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kUmVhZFNpbmdsZUJsb2NrKGhtbWMtPkluc3RhbmNlLCBhZGQpOwogICAgIH0KIAotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTk5Niw3ICsxMDY0LDggQEAKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogCi0gICAgX19IQUxfTU1DX0VOQUJMRV9JVChobW1jLCAoU0RNTUNfSVRfRENSQ0ZBSUwgfCBTRE1NQ19JVF9EVElNRU9VVCB8IFNETU1DX0lUX1JYT1ZFUlIgfCBTRE1NQ19JVF9EQVRBRU5EIHwgU0RNTUNfRkxBR19SWEZJRk9IRikpOworICAgIF9fSEFMX01NQ19FTkFCTEVfSVQoaG1tYywgKFNETU1DX0lUX0RDUkNGQUlMIHwgU0RNTUNfSVRfRFRJTUVPVVQgfCBTRE1NQ19JVF9SWE9WRVJSIHwgU0RNTUNfSVRfREFUQUVORCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfRkxBR19SWEZJRk9IRikpOwogCiAgICAgcmV0dXJuIEhBTF9PSzsKICAgfQpAQCAtMTAxOSwyOCArMTA4OCw0NyBAQAogICAqIEBwYXJhbSAgTnVtYmVyT2ZCbG9ja3M6IE51bWJlciBvZiBibG9ja3MgdG8gd3JpdGUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfV3JpdGVCbG9ja3NfSVQoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBCbG9ja0FkZCwgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX1dyaXRlQmxvY2tzX0lUKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50OF90ICpwRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQmxvY2tBZGQsIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKQogewogICBTRE1NQ19EYXRhSW5pdFR5cGVEZWYgY29uZmlnOwogICB1aW50MzJfdCBlcnJvcnN0YXRlOwogICB1aW50MzJfdCBhZGQgPSBCbG9ja0FkZDsKIAotICBpZihOVUxMID09IHBEYXRhKQorICBpZiAoTlVMTCA9PSBwRGF0YSkKICAgewogICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX1BBUkFNOwogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAotICBpZihobW1jLT5TdGF0ZSA9PSBIQUxfTU1DX1NUQVRFX1JFQURZKQorICBpZiAoaG1tYy0+U3RhdGUgPT0gSEFMX01NQ19TVEFURV9SRUFEWSkKICAgewogICAgIGhtbWMtPkVycm9yQ29kZSA9IEhBTF9NTUNfRVJST1JfTk9ORTsKIAotICAgIGlmKChCbG9ja0FkZCArIE51bWJlck9mQmxvY2tzKSA+IChobW1jLT5NbWNDYXJkLkxvZ0Jsb2NrTmJyKSkKKyAgICBpZiAoKEJsb2NrQWRkICsgTnVtYmVyT2ZCbG9ja3MpID4gKGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tOYnIpKQogICAgIHsKICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0FERFJfT1VUX09GX1JBTkdFOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CiAKKyAgICAvKiBDaGVjayB0aGUgY2FzZSBvZiA0a0IgYmxvY2tzIChmaWVsZCBEQVRBIFNFQ1RPUiBTSVpFIG9mIGV4dGVuZGVkIENTRCByZWdpc3RlcikgKi8KKyAgICBpZiAoKChobW1jLT5FeHRfQ1NEWyhNTUNfRVhUX0NTRF9EQVRBX1NFQ19TSVpFX0lOREVYIC8gNCldID4+IE1NQ19FWFRfQ1NEX0RBVEFfU0VDX1NJWkVfUE9TKSAmIDB4MDAwMDAwRkZVKSAhPSAweDBVKQorICAgIHsKKyAgICAgIGlmICgoTnVtYmVyT2ZCbG9ja3MgJSA4VSkgIT0gMFUpCisgICAgICB7CisgICAgICAgIC8qIFRoZSBudW1iZXIgb2YgYmxvY2tzIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIDggc2VjdG9ycyBvZiA1MTIgYnl0ZXMgPSA0IEtCeXRlcyAqLworICAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9CTE9DS19MRU5fRVJSOworICAgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgfQorCisgICAgICBpZiAoKEJsb2NrQWRkICUgOFUpICE9IDBVKQorICAgICAgeworICAgICAgICAvKiBUaGUgYWRkcmVzcyBzaG91bGQgYmUgYWxpZ25lZCB0byA4IChjb3JyZXNwb25kaW5nIHRvIDQgS0J5dGVzIGJsb2NrcykgKi8KKyAgICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfQUREUl9NSVNBTElHTkVEOworICAgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgfQorICAgIH0KKwogICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9CVVNZOwogCiAgICAgLyogSW5pdGlhbGl6ZSBkYXRhIGNvbnRyb2wgcmVnaXN0ZXIgKi8KQEAgLTEwNjMsMTIgKzExNTEsMTIgQEAKICAgICBjb25maWcuRFBTTSAgICAgICAgICA9IFNETU1DX0RQU01fRElTQUJMRTsKICAgICAodm9pZClTRE1NQ19Db25maWdEYXRhKGhtbWMtPkluc3RhbmNlLCAmY29uZmlnKTsKIAotICAgIF9fU0RNTUNfQ01EVFJBTlNfRU5BQkxFKCBobW1jLT5JbnN0YW5jZSk7CisgICAgX19TRE1NQ19DTURUUkFOU19FTkFCTEUoaG1tYy0+SW5zdGFuY2UpOwogCiAgICAgLyogV3JpdGUgQmxvY2tzIGluIFBvbGxpbmcgbW9kZSAqLwotICAgIGlmKE51bWJlck9mQmxvY2tzID4gMVUpCisgICAgaWYgKE51bWJlck9mQmxvY2tzID4gMVUpCiAgICAgewotICAgICAgaG1tYy0+Q29udGV4dCA9IChNTUNfQ09OVEVYVF9XUklURV9NVUxUSVBMRV9CTE9DS3wgTU1DX0NPTlRFWFRfSVQpOworICAgICAgaG1tYy0+Q29udGV4dCA9IChNTUNfQ09OVEVYVF9XUklURV9NVUxUSVBMRV9CTE9DSyB8IE1NQ19DT05URVhUX0lUKTsKIAogICAgICAgLyogV3JpdGUgTXVsdGkgQmxvY2sgY29tbWFuZCAqLwogICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFdyaXRlTXVsdGlCbG9jayhobW1jLT5JbnN0YW5jZSwgYWRkKTsKQEAgLTEwODAsNyArMTE2OCw3IEBACiAgICAgICAvKiBXcml0ZSBTaW5nbGUgQmxvY2sgY29tbWFuZCAqLwogICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFdyaXRlU2luZ2xlQmxvY2soaG1tYy0+SW5zdGFuY2UsIGFkZCk7CiAgICAgfQotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTEwOTAsNyArMTE3OCw4IEBACiAgICAgfQogCiAgICAgLyogRW5hYmxlIHRyYW5zZmVyIGludGVycnVwdHMgKi8KLSAgICBfX0hBTF9NTUNfRU5BQkxFX0lUKGhtbWMsIChTRE1NQ19JVF9EQ1JDRkFJTCB8IFNETU1DX0lUX0RUSU1FT1VUIHwgU0RNTUNfSVRfVFhVTkRFUlIgfCBTRE1NQ19JVF9EQVRBRU5EIHwgU0RNTUNfRkxBR19UWEZJRk9IRSkpOworICAgIF9fSEFMX01NQ19FTkFCTEVfSVQoaG1tYywgKFNETU1DX0lUX0RDUkNGQUlMIHwgU0RNTUNfSVRfRFRJTUVPVVQgfCBTRE1NQ19JVF9UWFVOREVSUiB8IFNETU1DX0lUX0RBVEFFTkQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNETU1DX0ZMQUdfVFhGSUZPSEUpKTsKIAogICAgIHJldHVybiBIQUxfT0s7CiAgIH0KQEAgLTExMTMsMjggKzEyMDIsNDcgQEAKICAgKiBAcGFyYW0gIE51bWJlck9mQmxvY2tzOiBOdW1iZXIgb2YgYmxvY2tzIHRvIHJlYWQuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX1JlYWRCbG9ja3NfRE1BKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgQmxvY2tBZGQsIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19SZWFkQmxvY2tzX0RNQShNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDhfdCAqcERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJsb2NrQWRkLCB1aW50MzJfdCBOdW1iZXJPZkJsb2NrcykKIHsKICAgU0RNTUNfRGF0YUluaXRUeXBlRGVmIGNvbmZpZzsKICAgdWludDMyX3QgZXJyb3JzdGF0ZTsKICAgdWludDMyX3QgYWRkID0gQmxvY2tBZGQ7CiAKLSAgaWYoTlVMTCA9PSBwRGF0YSkKKyAgaWYgKE5VTEwgPT0gcERhdGEpCiAgIHsKICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9QQVJBTTsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKLSAgaWYoaG1tYy0+U3RhdGUgPT0gSEFMX01NQ19TVEFURV9SRUFEWSkKKyAgaWYgKGhtbWMtPlN0YXRlID09IEhBTF9NTUNfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBobW1jLT5FcnJvckNvZGUgPSBIQUxfRE1BX0VSUk9SX05PTkU7CiAKLSAgICBpZigoQmxvY2tBZGQgKyBOdW1iZXJPZkJsb2NrcykgPiAoaG1tYy0+TW1jQ2FyZC5Mb2dCbG9ja05icikpCisgICAgaWYgKChCbG9ja0FkZCArIE51bWJlck9mQmxvY2tzKSA+IChobW1jLT5NbWNDYXJkLkxvZ0Jsb2NrTmJyKSkKICAgICB7CiAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9BRERSX09VVF9PRl9SQU5HRTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogCisgICAgLyogQ2hlY2sgdGhlIGNhc2Ugb2YgNGtCIGJsb2NrcyAoZmllbGQgREFUQSBTRUNUT1IgU0laRSBvZiBleHRlbmRlZCBDU0QgcmVnaXN0ZXIpICovCisgICAgaWYgKCgoaG1tYy0+RXh0X0NTRFsoTU1DX0VYVF9DU0RfREFUQV9TRUNfU0laRV9JTkRFWCAvIDQpXSA+PiBNTUNfRVhUX0NTRF9EQVRBX1NFQ19TSVpFX1BPUykgJiAweDAwMDAwMEZGVSkgIT0gMHgwVSkKKyAgICB7CisgICAgICBpZiAoKE51bWJlck9mQmxvY2tzICUgOFUpICE9IDBVKQorICAgICAgeworICAgICAgICAvKiBUaGUgbnVtYmVyIG9mIGJsb2NrcyBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiA4IHNlY3RvcnMgb2YgNTEyIGJ5dGVzID0gNCBLQnl0ZXMgKi8KKyAgICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfQkxPQ0tfTEVOX0VSUjsKKyAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIH0KKworICAgICAgaWYgKChCbG9ja0FkZCAlIDhVKSAhPSAwVSkKKyAgICAgIHsKKyAgICAgICAgLyogVGhlIGFkZHJlc3Mgc2hvdWxkIGJlIGFsaWduZWQgdG8gOCAoY29ycmVzcG9uZGluZyB0byA0IEtCeXRlcyBibG9ja3MpICovCisgICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0FERFJfTUlTQUxJR05FRDsKKyAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIH0KKyAgICB9CisKICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfQlVTWTsKIAogICAgIC8qIEluaXRpYWxpemUgZGF0YSBjb250cm9sIHJlZ2lzdGVyICovCkBAIC0xMTU3LDEyICsxMjY1LDEyIEBACiAgICAgY29uZmlnLkRQU00gICAgICAgICAgPSBTRE1NQ19EUFNNX0RJU0FCTEU7CiAgICAgKHZvaWQpU0RNTUNfQ29uZmlnRGF0YShobW1jLT5JbnN0YW5jZSwgJmNvbmZpZyk7CiAKLSAgICBfX1NETU1DX0NNRFRSQU5TX0VOQUJMRSggaG1tYy0+SW5zdGFuY2UpOworICAgIF9fU0RNTUNfQ01EVFJBTlNfRU5BQkxFKGhtbWMtPkluc3RhbmNlKTsKICAgICBobW1jLT5JbnN0YW5jZS0+SURNQUJBU0UwID0gKHVpbnQzMl90KSBwRGF0YSA7CiAgICAgaG1tYy0+SW5zdGFuY2UtPklETUFDVFJMICA9IFNETU1DX0VOQUJMRV9JRE1BX1NJTkdMRV9CVUZGOwogCiAgICAgLyogUmVhZCBCbG9ja3MgaW4gRE1BIG1vZGUgKi8KLSAgICBpZihOdW1iZXJPZkJsb2NrcyA+IDFVKQorICAgIGlmIChOdW1iZXJPZkJsb2NrcyA+IDFVKQogICAgIHsKICAgICAgIGhtbWMtPkNvbnRleHQgPSAoTU1DX0NPTlRFWFRfUkVBRF9NVUxUSVBMRV9CTE9DSyB8IE1NQ19DT05URVhUX0RNQSk7CiAKQEAgLTExNzYsNyArMTI4NCw3IEBACiAgICAgICAvKiBSZWFkIFNpbmdsZSBCbG9jayBjb21tYW5kICovCiAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kUmVhZFNpbmdsZUJsb2NrKGhtbWMtPkluc3RhbmNlLCBhZGQpOwogICAgIH0KLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNETU1DX1NUQVRJQ19GTEFHUyk7CkBAIC0xMjA5LDI4ICsxMzE3LDQ3IEBACiAgICogQHBhcmFtICBOdW1iZXJPZkJsb2NrczogTnVtYmVyIG9mIGJsb2NrcyB0byB3cml0ZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19Xcml0ZUJsb2Nrc19ETUEoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBCbG9ja0FkZCwgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX1dyaXRlQmxvY2tzX0RNQShNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDhfdCAqcERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBCbG9ja0FkZCwgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MpCiB7CiAgIFNETU1DX0RhdGFJbml0VHlwZURlZiBjb25maWc7CiAgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIHVpbnQzMl90IGFkZCA9IEJsb2NrQWRkOwogCi0gIGlmKE5VTEwgPT0gcERhdGEpCisgIGlmIChOVUxMID09IHBEYXRhKQogICB7CiAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfUEFSQU07CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCi0gIGlmKGhtbWMtPlN0YXRlID09IEhBTF9NTUNfU1RBVEVfUkVBRFkpCisgIGlmIChobW1jLT5TdGF0ZSA9PSBIQUxfTU1DX1NUQVRFX1JFQURZKQogICB7CiAgICAgaG1tYy0+RXJyb3JDb2RlID0gSEFMX01NQ19FUlJPUl9OT05FOwogCi0gICAgaWYoKEJsb2NrQWRkICsgTnVtYmVyT2ZCbG9ja3MpID4gKGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tOYnIpKQorICAgIGlmICgoQmxvY2tBZGQgKyBOdW1iZXJPZkJsb2NrcykgPiAoaG1tYy0+TW1jQ2FyZC5Mb2dCbG9ja05icikpCiAgICAgewogICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfQUREUl9PVVRfT0ZfUkFOR0U7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KIAorICAgIC8qIENoZWNrIHRoZSBjYXNlIG9mIDRrQiBibG9ja3MgKGZpZWxkIERBVEEgU0VDVE9SIFNJWkUgb2YgZXh0ZW5kZWQgQ1NEIHJlZ2lzdGVyKSAqLworICAgIGlmICgoKGhtbWMtPkV4dF9DU0RbKE1NQ19FWFRfQ1NEX0RBVEFfU0VDX1NJWkVfSU5ERVggLyA0KV0gPj4gTU1DX0VYVF9DU0RfREFUQV9TRUNfU0laRV9QT1MpICYgMHgwMDAwMDBGRlUpICE9IDB4MFUpCisgICAgeworICAgICAgaWYgKChOdW1iZXJPZkJsb2NrcyAlIDhVKSAhPSAwVSkKKyAgICAgIHsKKyAgICAgICAgLyogVGhlIG51bWJlciBvZiBibG9ja3Mgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgOCBzZWN0b3JzIG9mIDUxMiBieXRlcyA9IDQgS0J5dGVzICovCisgICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0JMT0NLX0xFTl9FUlI7CisgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICB9CisKKyAgICAgIGlmICgoQmxvY2tBZGQgJSA4VSkgIT0gMFUpCisgICAgICB7CisgICAgICAgIC8qIFRoZSBhZGRyZXNzIHNob3VsZCBiZSBhbGlnbmVkIHRvIDggKGNvcnJlc3BvbmRpbmcgdG8gNCBLQnl0ZXMgYmxvY2tzKSAqLworICAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9BRERSX01JU0FMSUdORUQ7CisgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICB9CisgICAgfQorCiAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX0JVU1k7CiAKICAgICAvKiBJbml0aWFsaXplIGRhdGEgY29udHJvbCByZWdpc3RlciAqLwpAQCAtMTI1MywxMyArMTM4MCwxMyBAQAogICAgIGNvbmZpZy5EUFNNICAgICAgICAgID0gU0RNTUNfRFBTTV9ESVNBQkxFOwogICAgICh2b2lkKVNETU1DX0NvbmZpZ0RhdGEoaG1tYy0+SW5zdGFuY2UsICZjb25maWcpOwogCi0gICAgX19TRE1NQ19DTURUUkFOU19FTkFCTEUoIGhtbWMtPkluc3RhbmNlKTsKKyAgICBfX1NETU1DX0NNRFRSQU5TX0VOQUJMRShobW1jLT5JbnN0YW5jZSk7CiAKICAgICBobW1jLT5JbnN0YW5jZS0+SURNQUJBU0UwID0gKHVpbnQzMl90KSBwRGF0YSA7CiAgICAgaG1tYy0+SW5zdGFuY2UtPklETUFDVFJMICA9IFNETU1DX0VOQUJMRV9JRE1BX1NJTkdMRV9CVUZGOwogCiAgICAgLyogV3JpdGUgQmxvY2tzIGluIFBvbGxpbmcgbW9kZSAqLwotICAgIGlmKE51bWJlck9mQmxvY2tzID4gMVUpCisgICAgaWYgKE51bWJlck9mQmxvY2tzID4gMVUpCiAgICAgewogICAgICAgaG1tYy0+Q29udGV4dCA9IChNTUNfQ09OVEVYVF9XUklURV9NVUxUSVBMRV9CTE9DSyB8IE1NQ19DT05URVhUX0RNQSk7CiAKQEAgLTEyNzMsNyArMTQwMCw3IEBACiAgICAgICAvKiBXcml0ZSBTaW5nbGUgQmxvY2sgY29tbWFuZCAqLwogICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFdyaXRlU2luZ2xlQmxvY2soaG1tYy0+SW5zdGFuY2UsIGFkZCk7CiAgICAgfQotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTEzMDgsMjYgKzE0MzUsMzcgQEAKICAgdWludDMyX3Qgc3RhcnRfYWRkID0gQmxvY2tTdGFydEFkZDsKICAgdWludDMyX3QgZW5kX2FkZCA9IEJsb2NrRW5kQWRkOwogCi0gIGlmKGhtbWMtPlN0YXRlID09IEhBTF9NTUNfU1RBVEVfUkVBRFkpCisgIGlmIChobW1jLT5TdGF0ZSA9PSBIQUxfTU1DX1NUQVRFX1JFQURZKQogICB7CiAgICAgaG1tYy0+RXJyb3JDb2RlID0gSEFMX01NQ19FUlJPUl9OT05FOwogCi0gICAgaWYoZW5kX2FkZCA8IHN0YXJ0X2FkZCkKKyAgICBpZiAoZW5kX2FkZCA8IHN0YXJ0X2FkZCkKICAgICB7CiAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9QQVJBTTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogCi0gICAgaWYoZW5kX2FkZCA+IChobW1jLT5NbWNDYXJkLkxvZ0Jsb2NrTmJyKSkKKyAgICBpZiAoZW5kX2FkZCA+IChobW1jLT5NbWNDYXJkLkxvZ0Jsb2NrTmJyKSkKICAgICB7CiAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9BRERSX09VVF9PRl9SQU5HRTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogCisgICAgLyogQ2hlY2sgdGhlIGNhc2Ugb2YgNGtCIGJsb2NrcyAoZmllbGQgREFUQSBTRUNUT1IgU0laRSBvZiBleHRlbmRlZCBDU0QgcmVnaXN0ZXIpICovCisgICAgaWYgKCgoaG1tYy0+RXh0X0NTRFsoTU1DX0VYVF9DU0RfREFUQV9TRUNfU0laRV9JTkRFWCAvIDQpXSA+PiBNTUNfRVhUX0NTRF9EQVRBX1NFQ19TSVpFX1BPUykgJiAweDAwMDAwMEZGVSkgIT0gMHgwVSkKKyAgICB7CisgICAgICBpZiAoKChzdGFydF9hZGQgJSA4VSkgIT0gMFUpIHx8ICgoZW5kX2FkZCAlIDhVKSAhPSAwVSkpCisgICAgICB7CisgICAgICAgIC8qIFRoZSBhZGRyZXNzIHNob3VsZCBiZSBhbGlnbmVkIHRvIDggKGNvcnJlc3BvbmRpbmcgdG8gNCBLQnl0ZXMgYmxvY2tzKSAqLworICAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9BRERSX01JU0FMSUdORUQ7CisgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICB9CisgICAgfQorCiAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX0JVU1k7CiAKICAgICAvKiBDaGVjayBpZiB0aGUgY2FyZCBjb21tYW5kIGNsYXNzIHN1cHBvcnRzIGVyYXNlIGNvbW1hbmQgKi8KLSAgICBpZigoKGhtbWMtPk1tY0NhcmQuQ2xhc3MpICYgU0RNTUNfQ0NDQ19FUkFTRSkgPT0gMFUpCisgICAgaWYgKCgoaG1tYy0+TW1jQ2FyZC5DbGFzcykgJiBTRE1NQ19DQ0NDX0VSQVNFKSA9PSAwVSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTEzMzYsNyArMTQ3NCw3IEBACiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KIAotICAgIGlmKChTRE1NQ19HZXRSZXNwb25zZShobW1jLT5JbnN0YW5jZSwgU0RNTUNfUkVTUDEpICYgU0RNTUNfQ0FSRF9MT0NLRUQpID09IFNETU1DX0NBUkRfTE9DS0VEKQorICAgIGlmICgoU0RNTUNfR2V0UmVzcG9uc2UoaG1tYy0+SW5zdGFuY2UsIFNETU1DX1JFU1AxKSAmIFNETU1DX0NBUkRfTE9DS0VEKSA9PSBTRE1NQ19DQVJEX0xPQ0tFRCkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTEzNTMsNyArMTQ5MSw3IEBACiAKICAgICAvKiBTZW5kIENNRDM1IE1NQ19FUkFTRV9HUlBfU1RBUlQgd2l0aCBhcmd1bWVudCBhcyBhZGRyICAqLwogICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRFcmFzZVN0YXJ0QWRkKGhtbWMtPkluc3RhbmNlLCBzdGFydF9hZGQpOwotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTEzNjQsNyArMTUwMiw3IEBACiAKICAgICAvKiBTZW5kIENNRDM2IE1NQ19FUkFTRV9HUlBfRU5EIHdpdGggYXJndW1lbnQgYXMgYWRkciAgKi8KICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kRXJhc2VFbmRBZGQoaG1tYy0+SW5zdGFuY2UsIGVuZF9hZGQpOwotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTEzNzUsNyArMTUxMyw3IEBACiAKICAgICAvKiBTZW5kIENNRDM4IEVSQVNFICovCiAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEVyYXNlKGhtbWMtPkluc3RhbmNlLCAwVUwpOwotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTE0MDUsMzMgKzE1NDMsMzMgQEAKICAgdWludDMyX3QgY29udGV4dCA9IGhtbWMtPkNvbnRleHQ7CiAKICAgLyogQ2hlY2sgZm9yIFNETU1DIGludGVycnVwdCBmbGFncyAqLwotICBpZigoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0ZMQUdfUlhGSUZPSEYpICE9IFJFU0VUKSAmJiAoKGNvbnRleHQgJiBNTUNfQ09OVEVYVF9JVCkgIT0gMFUpKQorICBpZiAoKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX1JYRklGT0hGKSAhPSBSRVNFVCkgJiYgKChjb250ZXh0ICYgTU1DX0NPTlRFWFRfSVQpICE9IDBVKSkKICAgewogICAgIE1NQ19SZWFkX0lUKGhtbWMpOwogICB9CiAKLSAgZWxzZSBpZihfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19EQVRBRU5EKSAhPSBSRVNFVCkKKyAgZWxzZSBpZiAoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0ZMQUdfREFUQUVORCkgIT0gUkVTRVQpCiAgIHsKICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19GTEFHX0RBVEFFTkQpOwogCi0gICAgX19IQUxfTU1DX0RJU0FCTEVfSVQoaG1tYywgU0RNTUNfSVRfREFUQUVORCAgfCBTRE1NQ19JVF9EQ1JDRkFJTCB8IFNETU1DX0lUX0RUSU1FT1VUIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfSVRfVFhVTkRFUlIgfCBTRE1NQ19JVF9SWE9WRVJSICB8IFNETU1DX0lUX1RYRklGT0hFIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfSVRfUlhGSUZPSEYpOworICAgIF9fSEFMX01NQ19ESVNBQkxFX0lUKGhtbWMsIFNETU1DX0lUX0RBVEFFTkQgIHwgU0RNTUNfSVRfRENSQ0ZBSUwgfCBTRE1NQ19JVF9EVElNRU9VVCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19JVF9UWFVOREVSUiB8IFNETU1DX0lUX1JYT1ZFUlIgIHwgU0RNTUNfSVRfVFhGSUZPSEUgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfSVRfUlhGSUZPSEYpOwogCiAgICAgX19IQUxfTU1DX0RJU0FCTEVfSVQoaG1tYywgU0RNTUNfSVRfSURNQUJUQyk7Ci0gICAgX19TRE1NQ19DTURUUkFOU19ESVNBQkxFKCBobW1jLT5JbnN0YW5jZSk7CisgICAgX19TRE1NQ19DTURUUkFOU19ESVNBQkxFKGhtbWMtPkluc3RhbmNlKTsKIAotICAgIGlmKChjb250ZXh0ICYgTU1DX0NPTlRFWFRfRE1BKSAhPSAwVSkKKyAgICBpZiAoKGNvbnRleHQgJiBNTUNfQ09OVEVYVF9ETUEpICE9IDBVKQogICAgIHsKICAgICAgIGhtbWMtPkluc3RhbmNlLT5ETEVOID0gMDsKICAgICAgIGhtbWMtPkluc3RhbmNlLT5EQ1RSTCA9IDA7CiAgICAgICBobW1jLT5JbnN0YW5jZS0+SURNQUNUUkwgPSBTRE1NQ19ESVNBQkxFX0lETUEgOwogCiAgICAgICAvKiBTdG9wIFRyYW5zZmVyIGZvciBXcml0ZSBNdWx0aSBibG9ja3Mgb3IgUmVhZCBNdWx0aSBibG9ja3MgKi8KLSAgICAgIGlmKCgoY29udGV4dCAmIE1NQ19DT05URVhUX1JFQURfTVVMVElQTEVfQkxPQ0spICE9IDBVKSB8fCAoKGNvbnRleHQgJiBNTUNfQ09OVEVYVF9XUklURV9NVUxUSVBMRV9CTE9DSykgIT0gMFUpKQorICAgICAgaWYgKCgoY29udGV4dCAmIE1NQ19DT05URVhUX1JFQURfTVVMVElQTEVfQkxPQ0spICE9IDBVKSB8fCAoKGNvbnRleHQgJiBNTUNfQ09OVEVYVF9XUklURV9NVUxUSVBMRV9CTE9DSykgIT0gMFUpKQogICAgICAgewogICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3RvcFRyYW5zZmVyKGhtbWMtPkluc3RhbmNlKTsKLSAgICAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICAgICAgewogICAgICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwogI2lmIGRlZmluZWQgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKQEAgLTE0NDYsNyArMTU4NCw3IEBACiAgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfREFUQV9GTEFHUyk7CiAKICAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKLSAgICAgIGlmKCgoY29udGV4dCAmIE1NQ19DT05URVhUX1dSSVRFX1NJTkdMRV9CTE9DSykgIT0gMFUpIHx8ICgoY29udGV4dCAmIE1NQ19DT05URVhUX1dSSVRFX01VTFRJUExFX0JMT0NLKSAhPSAwVSkpCisgICAgICBpZiAoKChjb250ZXh0ICYgTU1DX0NPTlRFWFRfV1JJVEVfU0lOR0xFX0JMT0NLKSAhPSAwVSkgfHwgKChjb250ZXh0ICYgTU1DX0NPTlRFWFRfV1JJVEVfTVVMVElQTEVfQkxPQ0spICE9IDBVKSkKICAgICAgIHsKICNpZiBkZWZpbmVkIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCiAgICAgICAgIGhtbWMtPlR4Q3BsdENhbGxiYWNrKGhtbWMpOwpAQCAtMTQ1NCw3ICsxNTkyLDcgQEAKICAgICAgICAgSEFMX01NQ19UeENwbHRDYWxsYmFjayhobW1jKTsKICNlbmRpZgogICAgICAgfQotICAgICAgaWYoKChjb250ZXh0ICYgTU1DX0NPTlRFWFRfUkVBRF9TSU5HTEVfQkxPQ0spICE9IDBVKSB8fCAoKGNvbnRleHQgJiBNTUNfQ09OVEVYVF9SRUFEX01VTFRJUExFX0JMT0NLKSAhPSAwVSkpCisgICAgICBpZiAoKChjb250ZXh0ICYgTU1DX0NPTlRFWFRfUkVBRF9TSU5HTEVfQkxPQ0spICE9IDBVKSB8fCAoKGNvbnRleHQgJiBNTUNfQ09OVEVYVF9SRUFEX01VTFRJUExFX0JMT0NLKSAhPSAwVSkpCiAgICAgICB7CiAjaWYgZGVmaW5lZCAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTKSAmJiAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogICAgICAgICBobW1jLT5SeENwbHRDYWxsYmFjayhobW1jKTsKQEAgLTE0NjMsMTMgKzE2MDEsMTMgQEAKICNlbmRpZgogICAgICAgfQogICAgIH0KLSAgICBlbHNlIGlmKChjb250ZXh0ICYgTU1DX0NPTlRFWFRfSVQpICE9IDBVKQorICAgIGVsc2UgaWYgKChjb250ZXh0ICYgTU1DX0NPTlRFWFRfSVQpICE9IDBVKQogICAgIHsKICAgICAgIC8qIFN0b3AgVHJhbnNmZXIgZm9yIFdyaXRlIE11bHRpIGJsb2NrcyBvciBSZWFkIE11bHRpIGJsb2NrcyAqLwotICAgICAgaWYoKChjb250ZXh0ICYgTU1DX0NPTlRFWFRfUkVBRF9NVUxUSVBMRV9CTE9DSykgIT0gMFUpIHx8ICgoY29udGV4dCAmIE1NQ19DT05URVhUX1dSSVRFX01VTFRJUExFX0JMT0NLKSAhPSAwVSkpCisgICAgICBpZiAoKChjb250ZXh0ICYgTU1DX0NPTlRFWFRfUkVBRF9NVUxUSVBMRV9CTE9DSykgIT0gMFUpIHx8ICgoY29udGV4dCAmIE1NQ19DT05URVhUX1dSSVRFX01VTFRJUExFX0JMT0NLKSAhPSAwVSkpCiAgICAgICB7CiAgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTdG9wVHJhbnNmZXIoaG1tYy0+SW5zdGFuY2UpOwotICAgICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICAgICAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQogICAgICAgICB7CiAgICAgICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CiAjaWYgZGVmaW5lZCAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTKSAmJiAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQpAQCAtMTQ4NCw3ICsxNjIyLDcgQEAKICAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNETU1DX1NUQVRJQ19EQVRBX0ZMQUdTKTsKIAogICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwotICAgICAgaWYoKChjb250ZXh0ICYgTU1DX0NPTlRFWFRfUkVBRF9TSU5HTEVfQkxPQ0spICE9IDBVKSB8fCAoKGNvbnRleHQgJiBNTUNfQ09OVEVYVF9SRUFEX01VTFRJUExFX0JMT0NLKSAhPSAwVSkpCisgICAgICBpZiAoKChjb250ZXh0ICYgTU1DX0NPTlRFWFRfUkVBRF9TSU5HTEVfQkxPQ0spICE9IDBVKSB8fCAoKGNvbnRleHQgJiBNTUNfQ09OVEVYVF9SRUFEX01VTFRJUExFX0JMT0NLKSAhPSAwVSkpCiAgICAgICB7CiAjaWYgZGVmaW5lZCAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTKSAmJiAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogICAgICAgICBobW1jLT5SeENwbHRDYWxsYmFjayhobW1jKTsKQEAgLTE1MDcsMjcgKzE2NDUsMjggQEAKICAgICB9CiAgIH0KIAotICBlbHNlIGlmKChfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19UWEZJRk9IRSkgIT0gUkVTRVQpICYmICgoY29udGV4dCAmIE1NQ19DT05URVhUX0lUKSAhPSAwVSkpCisgIGVsc2UgaWYgKChfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19UWEZJRk9IRSkgIT0gUkVTRVQpICYmICgoY29udGV4dCAmIE1NQ19DT05URVhUX0lUKSAhPSAwVSkpCiAgIHsKICAgICBNTUNfV3JpdGVfSVQoaG1tYyk7CiAgIH0KIAotICBlbHNlIGlmIChfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19EQ1JDRkFJTHwgU0RNTUNfRkxBR19EVElNRU9VVCB8IFNETU1DX0ZMQUdfUlhPVkVSUiB8IFNETU1DX0ZMQUdfVFhVTkRFUlIpICE9IFJFU0VUKQorICBlbHNlIGlmIChfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19EQ1JDRkFJTCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19GTEFHX0RUSU1FT1VUIHwgU0RNTUNfRkxBR19SWE9WRVJSIHwgU0RNTUNfRkxBR19UWFVOREVSUikgIT0gUkVTRVQpCiAgIHsKICAgICAvKiBTZXQgRXJyb3IgY29kZSAqLwotICAgIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19JVF9EQ1JDRkFJTCkgIT0gUkVTRVQpCisgICAgaWYgKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19JVF9EQ1JDRkFJTCkgIT0gUkVTRVQpCiAgICAgewogICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfREFUQV9DUkNfRkFJTDsKICAgICB9Ci0gICAgaWYoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0lUX0RUSU1FT1VUKSAhPSBSRVNFVCkKKyAgICBpZiAoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0lUX0RUSU1FT1VUKSAhPSBSRVNFVCkKICAgICB7CiAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9EQVRBX1RJTUVPVVQ7CiAgICAgfQotICAgIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19JVF9SWE9WRVJSKSAhPSBSRVNFVCkKKyAgICBpZiAoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0lUX1JYT1ZFUlIpICE9IFJFU0VUKQogICAgIHsKICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX1JYX09WRVJSVU47CiAgICAgfQotICAgIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19JVF9UWFVOREVSUikgIT0gUkVTRVQpCisgICAgaWYgKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19JVF9UWFVOREVSUikgIT0gUkVTRVQpCiAgICAgewogICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfVFhfVU5ERVJSVU47CiAgICAgfQpAQCAtMTUzNiwxNyArMTY3NSwxNyBAQAogICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNETU1DX1NUQVRJQ19EQVRBX0ZMQUdTKTsKIAogICAgIC8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KLSAgICBfX0hBTF9NTUNfRElTQUJMRV9JVChobW1jLCBTRE1NQ19JVF9EQVRBRU5EIHwgU0RNTUNfSVRfRENSQ0ZBSUwgfCBTRE1NQ19JVF9EVElNRU9VVHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfSVRfVFhVTkRFUlJ8IFNETU1DX0lUX1JYT1ZFUlIpOworICAgIF9fSEFMX01NQ19ESVNBQkxFX0lUKGhtbWMsIFNETU1DX0lUX0RBVEFFTkQgfCBTRE1NQ19JVF9EQ1JDRkFJTCB8IFNETU1DX0lUX0RUSU1FT1VUIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIFNETU1DX0lUX1RYVU5ERVJSIHwgU0RNTUNfSVRfUlhPVkVSUik7CiAKLSAgICBfX1NETU1DX0NNRFRSQU5TX0RJU0FCTEUoIGhtbWMtPkluc3RhbmNlKTsKKyAgICBfX1NETU1DX0NNRFRSQU5TX0RJU0FCTEUoaG1tYy0+SW5zdGFuY2UpOwogICAgIGhtbWMtPkluc3RhbmNlLT5EQ1RSTCB8PSBTRE1NQ19EQ1RSTF9GSUZPUlNUOwogICAgIGhtbWMtPkluc3RhbmNlLT5DTUQgfD0gU0RNTUNfQ01EX0NNRFNUT1A7CiAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IFNETU1DX0NtZFN0b3BUcmFuc2ZlcihobW1jLT5JbnN0YW5jZSk7CiAgICAgaG1tYy0+SW5zdGFuY2UtPkNNRCAmPSB+KFNETU1DX0NNRF9DTURTVE9QKTsKICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19GTEFHX0RBQk9SVCk7CiAKLSAgICBpZigoY29udGV4dCAmIE1NQ19DT05URVhUX0lUKSAhPSAwVSkKKyAgICBpZiAoKGNvbnRleHQgJiBNTUNfQ09OVEVYVF9JVCkgIT0gMFUpCiAgICAgewogICAgICAgLyogU2V0IHRoZSBNTUMgc3RhdGUgdG8gcmVhZHkgdG8gYmUgYWJsZSB0byBzdGFydCBhZ2FpbiB0aGUgcHJvY2VzcyAqLwogICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwpAQCAtMTU1Niw5ICsxNjk1LDkgQEAKICAgICAgIEhBTF9NTUNfRXJyb3JDYWxsYmFjayhobW1jKTsKICNlbmRpZiAvKiBVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KICAgICB9Ci0gICAgZWxzZSBpZigoY29udGV4dCAmIE1NQ19DT05URVhUX0RNQSkgIT0gMFUpCisgICAgZWxzZSBpZiAoKGNvbnRleHQgJiBNTUNfQ09OVEVYVF9ETUEpICE9IDBVKQogICAgIHsKLSAgICAgIGlmKGhtbWMtPkVycm9yQ29kZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgICBpZiAoaG1tYy0+RXJyb3JDb2RlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICAgIHsKICAgICAgICAgLyogRGlzYWJsZSBJbnRlcm5hbCBETUEgKi8KICAgICAgICAgX19IQUxfTU1DX0RJU0FCTEVfSVQoaG1tYywgU0RNTUNfSVRfSURNQUJUQyk7CkBAIC0xNTc5LDEzICsxNzE4LDEzIEBACiAgICAgfQogICB9CiAKLSAgZWxzZSBpZihfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19JRE1BQlRDKSAhPSBSRVNFVCkKKyAgZWxzZSBpZiAoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0ZMQUdfSURNQUJUQykgIT0gUkVTRVQpCiAgIHsKICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19JVF9JRE1BQlRDKTsKLSAgICBpZihSRUFEX0JJVChobW1jLT5JbnN0YW5jZS0+SURNQUNUUkwsIFNETU1DX0lETUFfSURNQUJBQ1QpID09IDBVKQorICAgIGlmIChSRUFEX0JJVChobW1jLT5JbnN0YW5jZS0+SURNQUNUUkwsIFNETU1DX0lETUFfSURNQUJBQ1QpID09IDBVKQogICAgIHsKICAgICAgIC8qIEN1cnJlbnQgYnVmZmVyIGlzIGJ1ZmZlcjAsIFRyYW5zZmVyIGNvbXBsZXRlIGZvciBidWZmZXIxICovCi0gICAgICBpZigoY29udGV4dCAmIE1NQ19DT05URVhUX1dSSVRFX01VTFRJUExFX0JMT0NLKSAhPSAwVSkKKyAgICAgIGlmICgoY29udGV4dCAmIE1NQ19DT05URVhUX1dSSVRFX01VTFRJUExFX0JMT0NLKSAhPSAwVSkKICAgICAgIHsKICNpZiBkZWZpbmVkIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCiAgICAgICAgIGhtbWMtPldyaXRlX0RNQURibEJ1ZjFDcGx0Q2FsbGJhY2soaG1tYyk7CkBAIC0xNjA1LDcgKzE3NDQsNyBAQAogICAgIGVsc2UgLyogTU1DX0RNQV9CVUZGRVIxICovCiAgICAgewogICAgICAgLyogQ3VycmVudCBidWZmZXIgaXMgYnVmZmVyMSwgVHJhbnNmZXIgY29tcGxldGUgZm9yIGJ1ZmZlcjAgKi8KLSAgICAgIGlmKChjb250ZXh0ICYgTU1DX0NPTlRFWFRfV1JJVEVfTVVMVElQTEVfQkxPQ0spICE9IDBVKQorICAgICAgaWYgKChjb250ZXh0ICYgTU1DX0NPTlRFWFRfV1JJVEVfTVVMVElQTEVfQkxPQ0spICE9IDBVKQogICAgICAgewogI2lmIGRlZmluZWQgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKICAgICAgICAgaG1tYy0+V3JpdGVfRE1BRGJsQnVmMENwbHRDYWxsYmFjayhobW1jKTsKQEAgLTE2NDEsMTEgKzE3ODAsMTEgQEAKIH0KIAogLyoqCi0qIEBicmllZiAgUmV0dXJuIHRoZSBNTUMgZXJyb3IgY29kZQotKiBAcGFyYW0gIGhtbWMgOiBQb2ludGVyIHRvIGEgTU1DX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiBAYnJpZWYgIFJldHVybiB0aGUgTU1DIGVycm9yIGNvZGUKKyAgKiBAcGFyYW0gIGhtbWMgOiBQb2ludGVyIHRvIGEgTU1DX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCi0qIEByZXR2YWwgTU1DIEVycm9yIENvZGUKLSovCisgICogQHJldHZhbCBNTUMgRXJyb3IgQ29kZQorICAqLwogdWludDMyX3QgSEFMX01NQ19HZXRFcnJvcihNTUNfSGFuZGxlVHlwZURlZiAqaG1tYykKIHsKICAgcmV0dXJuIGhtbWMtPkVycm9yQ29kZTsKQEAgLTE3MzEsMTEgKzE4NzAsMTIgQEAKICAgKiBAcGFyYW0gcENhbGxiYWNrIDogcG9pbnRlciB0byB0aGUgQ2FsbGJhY2sgZnVuY3Rpb24KICAgKiBAcmV0dmFsIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19SZWdpc3RlckNhbGxiYWNrKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCBIQUxfTU1DX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSWQsIHBNTUNfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjaykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfUmVnaXN0ZXJDYWxsYmFjayhNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgSEFMX01NQ19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBNTUNfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjaykKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCi0gIGlmKHBDYWxsYmFjayA9PSBOVUxMKQorICBpZiAocENhbGxiYWNrID09IE5VTEwpCiAgIHsKICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOwpAQCAtMTc0NSw2NCArMTg4NSw2NCBAQAogICAvKiBQcm9jZXNzIGxvY2tlZCAqLwogICBfX0hBTF9MT0NLKGhtbWMpOwogCi0gIGlmKGhtbWMtPlN0YXRlID09IEhBTF9NTUNfU1RBVEVfUkVBRFkpCisgIGlmIChobW1jLT5TdGF0ZSA9PSBIQUxfTU1DX1NUQVRFX1JFQURZKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lkKQogICAgIHsKLSAgICBjYXNlIEhBTF9NTUNfVFhfQ1BMVF9DQl9JRCA6Ci0gICAgICBobW1jLT5UeENwbHRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSEFMX01NQ19SWF9DUExUX0NCX0lEIDoKLSAgICAgIGhtbWMtPlJ4Q3BsdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfTU1DX0VSUk9SX0NCX0lEIDoKLSAgICAgIGhtbWMtPkVycm9yQ2FsbGJhY2sgPSBwQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9NTUNfQUJPUlRfQ0JfSUQgOgotICAgICAgaG1tYy0+QWJvcnRDcGx0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9NTUNfUkVBRF9ETUFfREJMX0JVRjBfQ1BMVF9DQl9JRCA6Ci0gICAgICBobW1jLT5SZWFkX0RNQURibEJ1ZjBDcGx0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9NTUNfUkVBRF9ETUFfREJMX0JVRjFfQ1BMVF9DQl9JRCA6Ci0gICAgICBobW1jLT5SZWFkX0RNQURibEJ1ZjFDcGx0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9NTUNfV1JJVEVfRE1BX0RCTF9CVUYwX0NQTFRfQ0JfSUQgOgotICAgICAgaG1tYy0+V3JpdGVfRE1BRGJsQnVmMENwbHRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSEFMX01NQ19XUklURV9ETUFfREJMX0JVRjFfQ1BMVF9DQl9JRCA6Ci0gICAgICBobW1jLT5Xcml0ZV9ETUFEYmxCdWYxQ3BsdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfTU1DX01TUF9JTklUX0NCX0lEIDoKLSAgICAgIGhtbWMtPk1zcEluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSEFMX01NQ19NU1BfREVJTklUX0NCX0lEIDoKLSAgICAgIGhtbWMtPk1zcERlSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdCA6Ci0gICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7Ci0gICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLwotICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfTU1DX1RYX0NQTFRfQ0JfSUQgOgorICAgICAgICBobW1jLT5UeENwbHRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9NTUNfUlhfQ1BMVF9DQl9JRCA6CisgICAgICAgIGhtbWMtPlJ4Q3BsdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX01NQ19FUlJPUl9DQl9JRCA6CisgICAgICAgIGhtbWMtPkVycm9yQ2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfTU1DX0FCT1JUX0NCX0lEIDoKKyAgICAgICAgaG1tYy0+QWJvcnRDcGx0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfTU1DX1JFQURfRE1BX0RCTF9CVUYwX0NQTFRfQ0JfSUQgOgorICAgICAgICBobW1jLT5SZWFkX0RNQURibEJ1ZjBDcGx0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfTU1DX1JFQURfRE1BX0RCTF9CVUYxX0NQTFRfQ0JfSUQgOgorICAgICAgICBobW1jLT5SZWFkX0RNQURibEJ1ZjFDcGx0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfTU1DX1dSSVRFX0RNQV9EQkxfQlVGMF9DUExUX0NCX0lEIDoKKyAgICAgICAgaG1tYy0+V3JpdGVfRE1BRGJsQnVmMENwbHRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9NTUNfV1JJVEVfRE1BX0RCTF9CVUYxX0NQTFRfQ0JfSUQgOgorICAgICAgICBobW1jLT5Xcml0ZV9ETUFEYmxCdWYxQ3BsdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX01NQ19NU1BfSU5JVF9DQl9JRCA6CisgICAgICAgIGhtbWMtPk1zcEluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9NTUNfTVNQX0RFSU5JVF9DQl9JRCA6CisgICAgICAgIGhtbWMtPk1zcERlSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKKyAgICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAgIGVsc2UgaWYgKGhtbWMtPlN0YXRlID09IEhBTF9NTUNfU1RBVEVfUkVTRVQpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSWQpCiAgICAgewotICAgIGNhc2UgSEFMX01NQ19NU1BfSU5JVF9DQl9JRCA6Ci0gICAgICBobW1jLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9NTUNfTVNQX0RFSU5JVF9DQl9JRCA6Ci0gICAgICBobW1jLT5Nc3BEZUluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQgOgotICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOwotICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KLSAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX01NQ19NU1BfSU5JVF9DQl9JRCA6CisgICAgICAgIGhtbWMtPk1zcEluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9NTUNfTVNQX0RFSU5JVF9DQl9JRCA6CisgICAgICAgIGhtbWMtPk1zcERlSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKKyAgICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAgIGVsc2UKQEAgLTE4NDMsNjQgKzE5ODMsNjQgQEAKICAgLyogUHJvY2VzcyBsb2NrZWQgKi8KICAgX19IQUxfTE9DSyhobW1jKTsKIAotICBpZihobW1jLT5TdGF0ZSA9PSBIQUxfTU1DX1NUQVRFX1JFQURZKQorICBpZiAoaG1tYy0+U3RhdGUgPT0gSEFMX01NQ19TVEFURV9SRUFEWSkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJZCkKICAgICB7Ci0gICAgY2FzZSBIQUxfTU1DX1RYX0NQTFRfQ0JfSUQgOgotICAgICAgaG1tYy0+VHhDcGx0Q2FsbGJhY2sgPSBIQUxfTU1DX1R4Q3BsdENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfTU1DX1JYX0NQTFRfQ0JfSUQgOgotICAgICAgaG1tYy0+UnhDcGx0Q2FsbGJhY2sgPSBIQUxfTU1DX1J4Q3BsdENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfTU1DX0VSUk9SX0NCX0lEIDoKLSAgICAgIGhtbWMtPkVycm9yQ2FsbGJhY2sgPSBIQUxfTU1DX0Vycm9yQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9NTUNfQUJPUlRfQ0JfSUQgOgotICAgICAgaG1tYy0+QWJvcnRDcGx0Q2FsbGJhY2sgPSBIQUxfTU1DX0Fib3J0Q2FsbGJhY2s7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9NTUNfUkVBRF9ETUFfREJMX0JVRjBfQ1BMVF9DQl9JRCA6Ci0gICAgICBobW1jLT5SZWFkX0RNQURibEJ1ZjBDcGx0Q2FsbGJhY2sgPSBIQUxfTU1DRXhfUmVhZF9ETUFEb3VibGVCdWYwQ3BsdENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfTU1DX1JFQURfRE1BX0RCTF9CVUYxX0NQTFRfQ0JfSUQgOgotICAgICAgaG1tYy0+UmVhZF9ETUFEYmxCdWYxQ3BsdENhbGxiYWNrID0gSEFMX01NQ0V4X1JlYWRfRE1BRG91YmxlQnVmMUNwbHRDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSEFMX01NQ19XUklURV9ETUFfREJMX0JVRjBfQ1BMVF9DQl9JRCA6Ci0gICAgICBobW1jLT5Xcml0ZV9ETUFEYmxCdWYwQ3BsdENhbGxiYWNrID0gSEFMX01NQ0V4X1dyaXRlX0RNQURvdWJsZUJ1ZjBDcGx0Q2FsbGJhY2s7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9NTUNfV1JJVEVfRE1BX0RCTF9CVUYxX0NQTFRfQ0JfSUQgOgotICAgICAgaG1tYy0+V3JpdGVfRE1BRGJsQnVmMUNwbHRDYWxsYmFjayA9IEhBTF9NTUNFeF9Xcml0ZV9ETUFEb3VibGVCdWYxQ3BsdENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfTU1DX01TUF9JTklUX0NCX0lEIDoKLSAgICAgIGhtbWMtPk1zcEluaXRDYWxsYmFjayA9IEhBTF9NTUNfTXNwSW5pdDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSEFMX01NQ19NU1BfREVJTklUX0NCX0lEIDoKLSAgICAgIGhtbWMtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX01NQ19Nc3BEZUluaXQ7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0IDoKLSAgICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLwotICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKLSAgICAgIC8qIHVwZGF0ZSByZXR1cm4gc3RhdHVzICovCi0gICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9NTUNfVFhfQ1BMVF9DQl9JRCA6CisgICAgICAgIGhtbWMtPlR4Q3BsdENhbGxiYWNrID0gSEFMX01NQ19UeENwbHRDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9NTUNfUlhfQ1BMVF9DQl9JRCA6CisgICAgICAgIGhtbWMtPlJ4Q3BsdENhbGxiYWNrID0gSEFMX01NQ19SeENwbHRDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9NTUNfRVJST1JfQ0JfSUQgOgorICAgICAgICBobW1jLT5FcnJvckNhbGxiYWNrID0gSEFMX01NQ19FcnJvckNhbGxiYWNrOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX01NQ19BQk9SVF9DQl9JRCA6CisgICAgICAgIGhtbWMtPkFib3J0Q3BsdENhbGxiYWNrID0gSEFMX01NQ19BYm9ydENhbGxiYWNrOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX01NQ19SRUFEX0RNQV9EQkxfQlVGMF9DUExUX0NCX0lEIDoKKyAgICAgICAgaG1tYy0+UmVhZF9ETUFEYmxCdWYwQ3BsdENhbGxiYWNrID0gSEFMX01NQ0V4X1JlYWRfRE1BRG91YmxlQnVmMENwbHRDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9NTUNfUkVBRF9ETUFfREJMX0JVRjFfQ1BMVF9DQl9JRCA6CisgICAgICAgIGhtbWMtPlJlYWRfRE1BRGJsQnVmMUNwbHRDYWxsYmFjayA9IEhBTF9NTUNFeF9SZWFkX0RNQURvdWJsZUJ1ZjFDcGx0Q2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfTU1DX1dSSVRFX0RNQV9EQkxfQlVGMF9DUExUX0NCX0lEIDoKKyAgICAgICAgaG1tYy0+V3JpdGVfRE1BRGJsQnVmMENwbHRDYWxsYmFjayA9IEhBTF9NTUNFeF9Xcml0ZV9ETUFEb3VibGVCdWYwQ3BsdENhbGxiYWNrOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX01NQ19XUklURV9ETUFfREJMX0JVRjFfQ1BMVF9DQl9JRCA6CisgICAgICAgIGhtbWMtPldyaXRlX0RNQURibEJ1ZjFDcGx0Q2FsbGJhY2sgPSBIQUxfTU1DRXhfV3JpdGVfRE1BRG91YmxlQnVmMUNwbHRDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9NTUNfTVNQX0lOSVRfQ0JfSUQgOgorICAgICAgICBobW1jLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfTU1DX01zcEluaXQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfTU1DX01TUF9ERUlOSVRfQ0JfSUQgOgorICAgICAgICBobW1jLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9NTUNfTXNwRGVJbml0OworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKKyAgICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAgIGVsc2UgaWYgKGhtbWMtPlN0YXRlID09IEhBTF9NTUNfU1RBVEVfUkVTRVQpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSWQpCiAgICAgewotICAgIGNhc2UgSEFMX01NQ19NU1BfSU5JVF9DQl9JRCA6Ci0gICAgICBobW1jLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfTU1DX01zcEluaXQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9NTUNfTVNQX0RFSU5JVF9DQl9JRCA6Ci0gICAgICBobW1jLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9NTUNfTXNwRGVJbml0OwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdCA6Ci0gICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7Ci0gICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLwotICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfTU1DX01TUF9JTklUX0NCX0lEIDoKKyAgICAgICAgaG1tYy0+TXNwSW5pdENhbGxiYWNrID0gSEFMX01NQ19Nc3BJbml0OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX01NQ19NU1BfREVJTklUX0NCX0lEIDoKKyAgICAgICAgaG1tYy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfTU1DX01zcERlSW5pdDsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0IDoKKyAgICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCisgICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CisgICAgICAgIC8qIHVwZGF0ZSByZXR1cm4gc3RhdHVzICovCisgICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQogICBlbHNlCkBAIC0xOTIyLDggKzIwNjIsOCBAQAogICAqLwogCiAvKiogQGFkZHRvZ3JvdXAgTU1DX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMKLSAqICBAYnJpZWYgICBtYW5hZ2VtZW50IGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgbWFuYWdlbWVudCBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICMjIyMjIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMgIyMjIyMKQEAgLTIwMDcsMTIgKzIxNDcsMTIgQEAKIAogICBwQ1NELT5SZXNlcnZlZDIgPSAwVTsgLyohPCBSZXNlcnZlZCAqLwogCi0gIGlmKE1NQ19SZWFkRXh0Q1NEKGhtbWMsICZibG9ja19uYnIsIDIxMiwgMHgwRkZGRkZGRlUpICE9IEhBTF9PSykgLyogRmllbGQgU0VDX0NPVU5UIFsyMTU6MjEyXSAqLworICBpZiAoTU1DX1JlYWRFeHRDU0QoaG1tYywgJmJsb2NrX25iciwgMjEyLCAweDBGRkZGRkZGVSkgIT0gSEFMX09LKSAvKiBGaWVsZCBTRUNfQ09VTlQgWzIxNToyMTJdICovCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKLSAgaWYoaG1tYy0+TW1jQ2FyZC5DYXJkVHlwZSA9PSBNTUNfTE9XX0NBUEFDSVRZX0NBUkQpCisgIGlmIChobW1jLT5NbWNDYXJkLkNhcmRUeXBlID09IE1NQ19MT1dfQ0FQQUNJVFlfQ0FSRCkKICAgewogICAgIHBDU0QtPkRldmljZVNpemUgPSAoKChobW1jLT5DU0RbMV0gJiAweDAwMDAwM0ZGVSkgPDwgMlUpIHwgKChobW1jLT5DU0RbMl0gJiAweEMwMDAwMDAwVSkgPj4gMzBVKSk7CiAKQEAgLTIwMzAsMTAgKzIxNzAsMTAgQEAKICAgICBobW1jLT5NbWNDYXJkLkJsb2NrTmJyICo9ICgxVUwgPDwgKChwQ1NELT5EZXZpY2VTaXplTXVsICYgMHgwN1UpICsgMlUpKTsKICAgICBobW1jLT5NbWNDYXJkLkJsb2NrU2l6ZSA9ICgxVUwgPDwgKHBDU0QtPlJkQmxvY2tMZW4gJiAweDBGVSkpOwogCi0gICAgaG1tYy0+TW1jQ2FyZC5Mb2dCbG9ja05iciA9ICAoaG1tYy0+TW1jQ2FyZC5CbG9ja05icikgKiAoKGhtbWMtPk1tY0NhcmQuQmxvY2tTaXplKSAvIDUxMlUpOworICAgIGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tOYnIgPSAoaG1tYy0+TW1jQ2FyZC5CbG9ja05icikgKiAoKGhtbWMtPk1tY0NhcmQuQmxvY2tTaXplKSAvIDUxMlUpOwogICAgIGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tTaXplID0gNTEyVTsKICAgfQotICBlbHNlIGlmKGhtbWMtPk1tY0NhcmQuQ2FyZFR5cGUgPT0gTU1DX0hJR0hfQ0FQQUNJVFlfQ0FSRCkKKyAgZWxzZSBpZiAoaG1tYy0+TW1jQ2FyZC5DYXJkVHlwZSA9PSBNTUNfSElHSF9DQVBBQ0lUWV9DQVJEKQogICB7CiAgICAgaG1tYy0+TW1jQ2FyZC5CbG9ja05iciA9IGJsb2NrX25icjsKICAgICBobW1jLT5NbWNDYXJkLkxvZ0Jsb2NrTmJyID0gaG1tYy0+TW1jQ2FyZC5CbG9ja05icjsKQEAgLTIwNjEsNyArMjIwMSw3IEBACiAKICAgcENTRC0+V3JTcGVlZEZhY3QgPSAodWludDhfdCkoKGhtbWMtPkNTRFszXSAmIDB4MUMwMDAwMDBVKSA+PiAyNlUpOwogCi0gIHBDU0QtPk1heFdyQmxvY2tMZW49ICh1aW50OF90KSgoaG1tYy0+Q1NEWzNdICYgMHgwM0MwMDAwMFUpID4+IDIyVSk7CisgIHBDU0QtPk1heFdyQmxvY2tMZW4gPSAodWludDhfdCkoKGhtbWMtPkNTRFszXSAmIDB4MDNDMDAwMDBVKSA+PiAyMlUpOwogCiAgIHBDU0QtPldyaXRlQmxvY2tQYVBhcnRpYWwgPSAodWludDhfdCkoKGhtbWMtPkNTRFszXSAmIDB4MDAyMDAwMDBVKSA+PiAyMVUpOwogCkBAIC0yMDc5LDcgKzIyMTksNyBAQAogCiAgIHBDU0QtPkZpbGVGb3JtYXQgPSAodWludDhfdCkoKGhtbWMtPkNTRFszXSAmIDB4MDAwMDBDMDBVKSA+PiAxMFUpOwogCi0gIHBDU0QtPkVDQz0gKHVpbnQ4X3QpKChobW1jLT5DU0RbM10gJiAweDAwMDAwMzAwVSkgPj4gOFUpOworICBwQ1NELT5FQ0MgPSAodWludDhfdCkoKGhtbWMtPkNTRFszXSAmIDB4MDAwMDAzMDBVKSA+PiA4VSk7CiAKICAgcENTRC0+Q1NEX0NSQyA9ICh1aW50OF90KSgoaG1tYy0+Q1NEWzNdICYgMHgwMDAwMDBGRVUpID4+IDFVKTsKIApAQCAtMjExMiw3ICsyMjUyLDcgQEAKICAgKiBAYnJpZWYgIFJldHVybnMgaW5mb3JtYXRpb24gdGhlIGluZm9ybWF0aW9uIG9mIHRoZSBjYXJkIHdoaWNoIGFyZSBzdG9yZWQgb24KICAgKiAgICAgICAgIHRoZSBFeHRlbmRlZCBDU0QgcmVnaXN0ZXIuCiAgICogQHBhcmFtICBobW1jIFBvaW50ZXIgdG8gTU1DIGhhbmRsZQotICAqIEBwYXJhbSAgcEV4dENTRCBQb2ludGVyIHRvIGEgbWVtb3J5IGFyZWEgKDUxMiBieXRlcykgdGhhdCBjb250YWlucyBhbGwgCisgICogQHBhcmFtICBwRXh0Q1NEIFBvaW50ZXIgdG8gYSBtZW1vcnkgYXJlYSAoNTEyIGJ5dGVzKSB0aGF0IGNvbnRhaW5zIGFsbAogICAqICAgICAgICAgRXh0ZW5kZWQgQ1NEIHJlZ2lzdGVyIHBhcmFtZXRlcnMKICAgKiBAcGFyYW0gIFRpbWVvdXQgU3BlY2lmeSB0aW1lb3V0IHZhbHVlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCkBAIC0yMTI1LDEzICsyMjY1LDEzIEBACiAgIHVpbnQzMl90IGNvdW50OwogICB1aW50MzJfdCAqdG1wX2J1ZjsKIAotICBpZihOVUxMID09IHBFeHRDU0QpCisgIGlmIChOVUxMID09IHBFeHRDU0QpCiAgIHsKICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9QQVJBTTsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKLSAgaWYoaG1tYy0+U3RhdGUgPT0gSEFMX01NQ19TVEFURV9SRUFEWSkKKyAgaWYgKGhtbWMtPlN0YXRlID09IEhBTF9NTUNfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBobW1jLT5FcnJvckNvZGUgPSBIQUxfTU1DX0VSUk9SX05PTkU7CiAKQEAgLTIxNTEsMTEgKzIyOTEsMTEgQEAKICAgICBjb25maWcuVHJhbnNmZXJNb2RlICA9IFNETU1DX1RSQU5TRkVSX01PREVfQkxPQ0s7CiAgICAgY29uZmlnLkRQU00gICAgICAgICAgPSBTRE1NQ19EUFNNX0RJU0FCTEU7CiAgICAgKHZvaWQpU0RNTUNfQ29uZmlnRGF0YShobW1jLT5JbnN0YW5jZSwgJmNvbmZpZyk7Ci0gICAgX19TRE1NQ19DTURUUkFOU19FTkFCTEUoIGhtbWMtPkluc3RhbmNlKTsKKyAgICBfX1NETU1DX0NNRFRSQU5TX0VOQUJMRShobW1jLT5JbnN0YW5jZSk7CiAKICAgICAvKiBTZW5kIEV4dENTRCBSZWFkIGNvbW1hbmQgdG8gQ2FyZCAqLwogICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kRVhUQ1NEKGhtbWMtPkluc3RhbmNlLCAwKTsKLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNETU1DX1NUQVRJQ19GTEFHUyk7CkBAIC0yMTY1LDMyICsyMzA1LDMzIEBACiAgICAgfQogCiAgICAgLyogUG9sbCBvbiBTRE1NQyBmbGFncyAqLwotICAgIHdoaWxlKCFfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19SWE9WRVJSIHwgU0RNTUNfRkxBR19EQ1JDRkFJTCB8IFNETU1DX0ZMQUdfRFRJTUVPVVQgfCBTRE1NQ19GTEFHX0RBVEFFTkQpKQorICAgIHdoaWxlICghX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0ZMQUdfUlhPVkVSUiB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfRkxBR19EQ1JDRkFJTCB8IFNETU1DX0ZMQUdfRFRJTUVPVVQgfCBTRE1NQ19GTEFHX0RBVEFFTkQpKQogICAgIHsKLSAgICAgIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX1JYRklGT0hGKSkKKyAgICAgIGlmIChfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19SWEZJRk9IRikpCiAgICAgICB7CiAgICAgICAgIC8qIFJlYWQgZGF0YSBmcm9tIFNETU1DIFJ4IEZJRk8gKi8KLSAgICAgICAgZm9yKGNvdW50ID0gMFU7IGNvdW50IDwgOFU7IGNvdW50KyspCisgICAgICAgIGZvciAoY291bnQgPSAwVTsgY291bnQgPCA4VTsgY291bnQrKykKICAgICAgICAgewogICAgICAgICAgICp0bXBfYnVmID0gU0RNTUNfUmVhZEZJRk8oaG1tYy0+SW5zdGFuY2UpOwogICAgICAgICAgIHRtcF9idWYrKzsKICAgICAgICAgfQogICAgICAgfQogCi0gICAgICBpZigoKEhBTF9HZXRUaWNrKCktdGlja3N0YXJ0KSA+PSAgVGltZW91dCkgfHwgKFRpbWVvdXQgPT0gMFUpKQorICAgICAgaWYgKCgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPj0gIFRpbWVvdXQpIHx8IChUaW1lb3V0ID09IDBVKSkKICAgICAgIHsKICAgICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKICAgICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfVElNRU9VVDsKLSAgICAgICAgaG1tYy0+U3RhdGU9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CisgICAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICAgICAgfQogICAgIH0KIAotICAgIF9fU0RNTUNfQ01EVFJBTlNfRElTQUJMRSggaG1tYy0+SW5zdGFuY2UpOworICAgIF9fU0RNTUNfQ01EVFJBTlNfRElTQUJMRShobW1jLT5JbnN0YW5jZSk7CiAKICAgICAvKiBHZXQgZXJyb3Igc3RhdGUgKi8KLSAgICBpZihfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19EVElNRU9VVCkpCisgICAgaWYgKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX0RUSU1FT1VUKSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTIxOTgsNyArMjMzOSw3IEBACiAgICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICBlbHNlIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX0RDUkNGQUlMKSkKKyAgICBlbHNlIGlmIChfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19EQ1JDRkFJTCkpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNETU1DX1NUQVRJQ19GTEFHUyk7CkBAIC0yMjA2LDcgKzIzNDcsNyBAQAogICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgZWxzZSBpZihfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19SWE9WRVJSKSkKKyAgICBlbHNlIGlmIChfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19SWE9WRVJSKSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTIyNjgsMTcgKzI0MDksMTcgQEAKICAgICBlcnJvcnN0YXRlID0gTU1DX1B3ckNsYXNzVXBkYXRlKGhtbWMsIFdpZGVNb2RlLCBTRE1NQ19TUEVFRF9NT0RFX0RFRkFVTFQpOwogICB9CiAKLSAgaWYoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCisgIGlmIChlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgewotICAgIGlmKFdpZGVNb2RlID09IFNETU1DX0JVU19XSURFXzhCKQorICAgIGlmIChXaWRlTW9kZSA9PSBTRE1NQ19CVVNfV0lERV84QikKICAgICB7CiAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3dpdGNoKGhtbWMtPkluc3RhbmNlLCAweDAzQjcwMjAwVSk7CiAgICAgfQotICAgIGVsc2UgaWYoV2lkZU1vZGUgPT0gU0RNTUNfQlVTX1dJREVfNEIpCisgICAgZWxzZSBpZiAoV2lkZU1vZGUgPT0gU0RNTUNfQlVTX1dJREVfNEIpCiAgICAgewogICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFN3aXRjaChobW1jLT5JbnN0YW5jZSwgMHgwM0I3MDEwMFUpOwogICAgIH0KLSAgICBlbHNlIGlmKFdpZGVNb2RlID09IFNETU1DX0JVU19XSURFXzFCKQorICAgIGVsc2UgaWYgKFdpZGVNb2RlID09IFNETU1DX0JVU19XSURFXzFCKQogICAgIHsKICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTd2l0Y2goaG1tYy0+SW5zdGFuY2UsIDB4MDNCNzAwMDBVKTsKICAgICB9CkBAIC0yMjg5LDE0ICsyNDMwLDE0IEBACiAgICAgfQogCiAgICAgLyogQ2hlY2sgZm9yIHN3aXRjaCBlcnJvciBhbmQgdmlvbGF0aW9uIG9mIHRoZSB0cmlhbCBudW1iZXIgb2Ygc2VuZGluZyBDTUQgMTMgKi8KLSAgICBpZihlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICBpZiAoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogV2hpbGUgY2FyZCBpcyBub3QgcmVhZHkgZm9yIGRhdGEgYW5kIHRyaWFsIG51bWJlciBmb3Igc2VuZGluZyBDTUQxMyBpcyBub3QgZXhjZWVkZWQgKi8KICAgICAgIGNvdW50ID0gU0RNTUNfTUFYX1RSSUFMOwogICAgICAgZG8KICAgICAgIHsKICAgICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNlbmRTdGF0dXMoaG1tYy0+SW5zdGFuY2UsICh1aW50MzJfdCkoKCh1aW50MzJfdClobW1jLT5NbWNDYXJkLlJlbENhcmRBZGQpIDw8IDE2VSkpOwotICAgICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICAgICAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQogICAgICAgICB7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIzMDQsNyArMjQ0NSw3IEBACiAgICAgICAgIC8qIEdldCBjb21tYW5kIHJlc3BvbnNlICovCiAgICAgICAgIHJlc3BvbnNlID0gU0RNTUNfR2V0UmVzcG9uc2UoaG1tYy0+SW5zdGFuY2UsIFNETU1DX1JFU1AxKTsKICAgICAgICAgY291bnQtLTsKLSAgICAgIH13aGlsZSgoKHJlc3BvbnNlICYgMHgxMDBVKSA9PSAwVSkgJiYgKGNvdW50ICE9IDBVKSk7CisgICAgICB9IHdoaWxlICgoKHJlc3BvbnNlICYgMHgxMDBVKSA9PSAwVSkgJiYgKGNvdW50ICE9IDBVKSk7CiAKICAgICAgIC8qIENoZWNrIHRoZSBzdGF0dXMgYWZ0ZXIgdGhlIHN3aXRjaCBjb21tYW5kIGV4ZWN1dGlvbiAqLwogICAgICAgaWYgKChjb3VudCAhPSAwVSkgJiYgKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKSkKQEAgLTIzMzYsNyArMjQ3Nyw3IEBACiAgIC8qIENoYW5nZSBTdGF0ZSAqLwogICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CiAKLSAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgewogICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCiAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTIzODMsMTYgKzI1MjQsMjAgQEAKICAgICAgIHsKICAgICAgICAgLyogSGlnaCBTcGVlZCBERFIgbW9kZSBhbGxvd2VkICovCiAgICAgICAgIGVycm9yc3RhdGUgPSBNTUNfSGlnaFNwZWVkKGhtbWMsIEVOQUJMRSk7Ci0gICAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgICAgICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgICAgIHsKICAgICAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICBlcnJvcnN0YXRlID0gTU1DX0REUl9Nb2RlKGhtbWMsIEVOQUJMRSk7Ci0gICAgICAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgICAgICAgaWYgKChobW1jLT5JbnN0YW5jZS0+Q0xLQ1IgJiBTRE1NQ19DTEtDUl9DTEtESVYpICE9IDBVKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOworICAgICAgICAgICAgLyogRERSIG1vZGUgbm90IHN1cHBvcnRlZCB3aXRoIENMS0RJViA9IDAgKi8KKyAgICAgICAgICAgIGVycm9yc3RhdGUgPSBNTUNfRERSX01vZGUoaG1tYywgRU5BQkxFKTsKKyAgICAgICAgICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CkBAIC0yNDAwLDcgKzI1NDUsNyBAQAogICAgICAgewogICAgICAgICAvKiBIaWdoIFNwZWVkIG1vZGUgYWxsb3dlZCAqLwogICAgICAgICBlcnJvcnN0YXRlID0gTU1DX0hpZ2hTcGVlZChobW1jLCBFTkFCTEUpOwotICAgICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICAgICAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQogICAgICAgICB7CiAgICAgICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CiAgICAgICAgIH0KQEAgLTI0MTcsMTYgKzI1NjIsMjAgQEAKICAgICAgIHsKICAgICAgICAgLyogSGlnaCBTcGVlZCBERFIgbW9kZSBhbGxvd2VkICovCiAgICAgICAgIGVycm9yc3RhdGUgPSBNTUNfSGlnaFNwZWVkKGhtbWMsIEVOQUJMRSk7Ci0gICAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgICAgICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgICAgIHsKICAgICAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICBlcnJvcnN0YXRlID0gTU1DX0REUl9Nb2RlKGhtbWMsIEVOQUJMRSk7Ci0gICAgICAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgICAgICAgaWYgKChobW1jLT5JbnN0YW5jZS0+Q0xLQ1IgJiBTRE1NQ19DTEtDUl9DTEtESVYpICE9IDBVKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOworICAgICAgICAgICAgLyogRERSIG1vZGUgbm90IHN1cHBvcnRlZCB3aXRoIENMS0RJViA9IDAgKi8KKyAgICAgICAgICAgIGVycm9yc3RhdGUgPSBNTUNfRERSX01vZGUoaG1tYywgRU5BQkxFKTsKKyAgICAgICAgICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CkBAIC0yNDQ0LDcgKzI1OTMsNyBAQAogICAgICAgewogICAgICAgICAvKiBIaWdoIFNwZWVkIG1vZGUgYWxsb3dlZCAqLwogICAgICAgICBlcnJvcnN0YXRlID0gTU1DX0hpZ2hTcGVlZChobW1jLCBFTkFCTEUpOwotICAgICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICAgICAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQogICAgICAgICB7CiAgICAgICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CiAgICAgICAgIH0KQEAgLTI0NjMsNyArMjYxMiw3IEBACiAgICAgICB7CiAgICAgICAgIC8qIEhpZ2ggU3BlZWQgRERSIG1vZGUgYWN0aXZhdGVkICovCiAgICAgICAgIGVycm9yc3RhdGUgPSBNTUNfRERSX01vZGUoaG1tYywgRElTQUJMRSk7Ci0gICAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgICAgICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgICAgIHsKICAgICAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKICAgICAgICAgfQpAQCAtMjQ3Miw3ICsyNjIxLDcgQEAKICAgICAgIHsKICAgICAgICAgLyogSGlnaCBTcGVlZCBtb2RlIGFjdGl2YXRlZCAqLwogICAgICAgICBlcnJvcnN0YXRlID0gTU1DX0hpZ2hTcGVlZChobW1jLCBESVNBQkxFKTsKLSAgICAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICAgICAgewogICAgICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwogICAgICAgICB9CkBAIC0yNTE0LDcgKzI2NjMsNyBAQAogICB1aW50MzJfdCByZXNwMSA9IDBVOwogCiAgIGVycm9yc3RhdGUgPSBNTUNfU2VuZFN0YXR1cyhobW1jLCAmcmVzcDEpOwotICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQogICB7CiAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CiAgIH0KQEAgLTI1MzUsOCArMjY4NCw4IEBACiAgIEhBTF9NTUNfQ2FyZFN0YXRlVHlwZURlZiBDYXJkU3RhdGU7CiAKICAgLyogRElzYWJsZSBBbGwgaW50ZXJydXB0cyAqLwotICBfX0hBTF9NTUNfRElTQUJMRV9JVChobW1jLCBTRE1NQ19JVF9EQVRBRU5EIHwgU0RNTUNfSVRfRENSQ0ZBSUwgfCBTRE1NQ19JVF9EVElNRU9VVHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19JVF9UWFVOREVSUnwgU0RNTUNfSVRfUlhPVkVSUik7CisgIF9fSEFMX01NQ19ESVNBQkxFX0lUKGhtbWMsIFNETU1DX0lUX0RBVEFFTkQgfCBTRE1NQ19JVF9EQ1JDRkFJTCB8IFNETU1DX0lUX0RUSU1FT1VUIHwgXAorICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19JVF9UWFVOREVSUiB8IFNETU1DX0lUX1JYT1ZFUlIpOwogCiAgIC8qIENsZWFyIEFsbCBmbGFncyAqLwogICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfREFUQV9GTEFHUyk7CkBAIC0yNTUwLDExICsyNjk5LDExIEBACiAgIGhtbWMtPkNvbnRleHQgPSBNTUNfQ09OVEVYVF9OT05FOwogCiAgIENhcmRTdGF0ZSA9IEhBTF9NTUNfR2V0Q2FyZFN0YXRlKGhtbWMpOwotICBpZigoQ2FyZFN0YXRlID09IEhBTF9NTUNfQ0FSRF9SRUNFSVZJTkcpIHx8IChDYXJkU3RhdGUgPT0gSEFMX01NQ19DQVJEX1NFTkRJTkcpKQorICBpZiAoKENhcmRTdGF0ZSA9PSBIQUxfTU1DX0NBUkRfUkVDRUlWSU5HKSB8fCAoQ2FyZFN0YXRlID09IEhBTF9NTUNfQ0FSRF9TRU5ESU5HKSkKICAgewogICAgIGhtbWMtPkVycm9yQ29kZSA9IFNETU1DX0NtZFN0b3BUcmFuc2ZlcihobW1jLT5JbnN0YW5jZSk7CiAgIH0KLSAgaWYoaG1tYy0+RXJyb3JDb2RlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgaWYgKGhtbWMtPkVycm9yQ29kZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC0yNTcyLDggKzI3MjEsOCBAQAogICBIQUxfTU1DX0NhcmRTdGF0ZVR5cGVEZWYgQ2FyZFN0YXRlOwogCiAgIC8qIERJc2FibGUgQWxsIGludGVycnVwdHMgKi8KLSAgX19IQUxfTU1DX0RJU0FCTEVfSVQoaG1tYywgU0RNTUNfSVRfREFUQUVORCB8IFNETU1DX0lUX0RDUkNGQUlMIHwgU0RNTUNfSVRfRFRJTUVPVVR8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfSVRfVFhVTkRFUlJ8IFNETU1DX0lUX1JYT1ZFUlIpOworICBfX0hBTF9NTUNfRElTQUJMRV9JVChobW1jLCBTRE1NQ19JVF9EQVRBRU5EIHwgU0RNTUNfSVRfRENSQ0ZBSUwgfCBTRE1NQ19JVF9EVElNRU9VVCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfSVRfVFhVTkRFUlIgfCBTRE1NQ19JVF9SWE9WRVJSKTsKIAogICAvKiBJZiBJRE1BIENvbnRleHQsIGRpc2FibGUgSW50ZXJuYWwgRE1BICovCiAgIGhtbWMtPkluc3RhbmNlLT5JRE1BQ1RSTCA9IFNETU1DX0RJU0FCTEVfSURNQTsKQEAgLTI1ODQsMTEgKzI3MzMsMTEgQEAKICAgQ2FyZFN0YXRlID0gSEFMX01NQ19HZXRDYXJkU3RhdGUoaG1tYyk7CiAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKIAotICBpZigoQ2FyZFN0YXRlID09IEhBTF9NTUNfQ0FSRF9SRUNFSVZJTkcpIHx8IChDYXJkU3RhdGUgPT0gSEFMX01NQ19DQVJEX1NFTkRJTkcpKQorICBpZiAoKENhcmRTdGF0ZSA9PSBIQUxfTU1DX0NBUkRfUkVDRUlWSU5HKSB8fCAoQ2FyZFN0YXRlID09IEhBTF9NTUNfQ0FSRF9TRU5ESU5HKSkKICAgewogICAgIGhtbWMtPkVycm9yQ29kZSA9IFNETU1DX0NtZFN0b3BUcmFuc2ZlcihobW1jLT5JbnN0YW5jZSk7CiAgIH0KLSAgaWYoaG1tYy0+RXJyb3JDb2RlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgaWYgKGhtbWMtPkVycm9yQ29kZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC0yNjExLDE3ICsyNzYwLDIwIEBACiAgICogQHBhcmFtICBobW1jIFBvaW50ZXIgdG8gTU1DIGhhbmRsZQogICAqIEBwYXJhbSAgRXJhc2VUeXBlIFNwZWNpZmllcyB0aGUgdHlwZSBvZiBlcmFzZSB0byBiZSBwZXJmb3JtZWQKICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgICAgQGFyZyBIQUxfTU1DX0VSQVNFIEVyYXNlIHRoZSBlcmFzZSBncm91cHMgaWRlbnRpZmllZCBieSBDTUQzNSAmIDM2Ci0gICogICAgICAgICAgICBAYXJnIEhBTF9NTUNfVFJJTSBFcmFzZSB0aGUgd3JpdGUgYmxvY2tzIGlkZW50aWZpZWQgYnkgQ01EMzUgJiAzNgotICAqICAgICAgICAgICAgQGFyZyBIQUxfTU1DX0RJU0NBUkQgRGlzY2FyZCB0aGUgd3JpdGUgYmxvY2tzIGlkZW50aWZpZWQgYnkgQ01EMzUgJiAzNgotICAqICAgICAgICAgICAgQGFyZyBIQUxfTU1DX1NFQ1VSRV9FUkFTRSBQZXJmb3JtIGEgc2VjdXJlIHB1cmdlIGFjY29yZGluZyBTUlQgb24gdGhlIGVyYXNlIGdyb3VwcyBpZGVudGlmaWVkIGJ5IENNRDM1ICYgMzYKLSAgKiAgICAgICAgICAgIEBhcmcgSEFMX01NQ19TRUNVUkVfVFJJTV9TVEVQMSBNYXJrIHRoZSB3cml0ZSBibG9ja3MgaWRlbnRpZmllZCBieSBDTUQzNSAmIDM2IGZvciBzZWN1cmUgZXJhc2UKLSAgKiAgICAgICAgICAgIEBhcmcgSEFMX01NQ19TRUNVUkVfVFJJTV9TVEVQMiBQZXJmb3JtIGEgc2VjdXJlIHB1cmdlIGFjY29yZGluZyBTUlQgb24gdGhlIHdyaXRlIGJsb2NrcyBwcmV2aW91c2x5IGlkZW50aWZpZWQKKyAgKiAgICAgICAgICAgICBAYXJnIEhBTF9NTUNfVFJJTSBFcmFzZSB0aGUgd3JpdGUgYmxvY2tzIGlkZW50aWZpZWQgYnkgQ01EMzUgJiAzNgorICAqICAgICAgICAgICAgIEBhcmcgSEFMX01NQ19FUkFTRSBFcmFzZSB0aGUgZXJhc2UgZ3JvdXBzIGlkZW50aWZpZWQgYnkgQ01EMzUgJiAzNgorICAqICAgICAgICAgICAgIEBhcmcgSEFMX01NQ19ESVNDQVJEIERpc2NhcmQgdGhlIHdyaXRlIGJsb2NrcyBpZGVudGlmaWVkIGJ5IENNRDM1ICYgMzYKKyAgKiAgICAgICAgICAgICBAYXJnIEhBTF9NTUNfU0VDVVJFX0VSQVNFIFBlcmZvcm0gYSBzZWN1cmUgcHVyZ2UgYWNjb3JkaW5nIFNSVCBvbiB0aGUgZXJhc2UgZ3JvdXBzIGlkZW50aWZpZWQKKyAgKiAgICAgICAgICAgICAgICAgIGJ5IENNRDM1ICYgMzYKKyAgKiAgICAgICAgICAgICBAYXJnIEhBTF9NTUNfU0VDVVJFX1RSSU1fU1RFUDEgTWFyayB0aGUgd3JpdGUgYmxvY2tzIGlkZW50aWZpZWQgYnkgQ01EMzUgJiAzNiBmb3Igc2VjdXJlIGVyYXNlCisgICogICAgICAgICAgICAgQGFyZyBIQUxfTU1DX1NFQ1VSRV9UUklNX1NURVAyIFBlcmZvcm0gYSBzZWN1cmUgcHVyZ2UgYWNjb3JkaW5nIFNSVCBvbiB0aGUgd3JpdGUgYmxvY2tzCisgICogICAgICAgICAgICAgICAgICBwcmV2aW91c2x5IGlkZW50aWZpZWQKICAgKiBAcGFyYW0gIEJsb2NrU3RhcnRBZGQgU3RhcnQgQmxvY2sgYWRkcmVzcwogICAqIEBwYXJhbSAgQmxvY2tFbmRBZGQgRW5kIEJsb2NrIGFkZHJlc3MKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfRXJhc2VTZXF1ZW5jZShNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDMyX3QgRXJhc2VUeXBlLCB1aW50MzJfdCBCbG9ja1N0YXJ0QWRkLCB1aW50MzJfdCBCbG9ja0VuZEFkZCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfRXJhc2VTZXF1ZW5jZShNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDMyX3QgRXJhc2VUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJsb2NrU3RhcnRBZGQsIHVpbnQzMl90IEJsb2NrRW5kQWRkKQogewogICB1aW50MzJfdCBlcnJvcnN0YXRlOwogICB1aW50MzJfdCBzdGFydF9hZGQgPSBCbG9ja1N0YXJ0QWRkOwpAQCAtMjYzMiwzNCArMjc4NCw0NSBAQAogICBhc3NlcnRfcGFyYW0oSVNfTU1DX0VSQVNFX1RZUEUoRXJhc2VUeXBlKSk7CiAKICAgLyogQ2hlY2sgdGhlIGNvaGVyZW5jZSBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgYWRkcmVzcyAqLwotICBpZihlbmRfYWRkIDwgc3RhcnRfYWRkKQorICBpZiAoZW5kX2FkZCA8IHN0YXJ0X2FkZCkKICAgewogICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX1BBUkFNOwogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAogICAvKiBDaGVjayB0aGF0IHRoZSBlbmQgYWRkcmVzcyBpcyBub3Qgb3V0IG9mIHJhbmdlIG9mIGRldmljZSBtZW1vcnkgKi8KLSAgaWYoZW5kX2FkZCA+IChobW1jLT5NbWNDYXJkLkxvZ0Jsb2NrTmJyKSkKKyAgaWYgKGVuZF9hZGQgPiAoaG1tYy0+TW1jQ2FyZC5Mb2dCbG9ja05icikpCiAgIHsKICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9BRERSX09VVF9PRl9SQU5HRTsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKKyAgLyogQ2hlY2sgdGhlIGNhc2Ugb2YgNGtCIGJsb2NrcyAoZmllbGQgREFUQSBTRUNUT1IgU0laRSBvZiBleHRlbmRlZCBDU0QgcmVnaXN0ZXIpICovCisgIGlmICgoKGhtbWMtPkV4dF9DU0RbKE1NQ19FWFRfQ1NEX0RBVEFfU0VDX1NJWkVfSU5ERVggLyA0KV0gPj4gTU1DX0VYVF9DU0RfREFUQV9TRUNfU0laRV9QT1MpICYgMHgwMDAwMDBGRlUpICE9IDB4MFUpCisgIHsKKyAgICBpZiAoKChzdGFydF9hZGQgJSA4VSkgIT0gMFUpIHx8ICgoZW5kX2FkZCAlIDhVKSAhPSAwVSkpCisgICAgeworICAgICAgLyogVGhlIGFkZHJlc3Mgc2hvdWxkIGJlIGFsaWduZWQgdG8gOCAoY29ycmVzcG9uZGluZyB0byA0IEtCeXRlcyBibG9ja3MpICovCisgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9BRERSX01JU0FMSUdORUQ7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKyAgfQorCiAgIC8qIENoZWNrIGlmIHRoZSBjYXJkIGNvbW1hbmQgY2xhc3Mgc3VwcG9ydHMgZXJhc2UgY29tbWFuZCAqLwotICBpZigoKGhtbWMtPk1tY0NhcmQuQ2xhc3MpICYgU0RNTUNfQ0NDQ19FUkFTRSkgPT0gMFUpCisgIGlmICgoKGhtbWMtPk1tY0NhcmQuQ2xhc3MpICYgU0RNTUNfQ0NDQ19FUkFTRSkgPT0gMFUpCiAgIHsKICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9SRVFVRVNUX05PVF9BUFBMSUNBQkxFOwogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAogICAvKiBDaGVjayB0aGUgc3RhdGUgb2YgdGhlIGRyaXZlciAqLwotICBpZihobW1jLT5TdGF0ZSA9PSBIQUxfTU1DX1NUQVRFX1JFQURZKQorICBpZiAoaG1tYy0+U3RhdGUgPT0gSEFMX01NQ19TVEFURV9SRUFEWSkKICAgewogICAgIC8qIENoYW5nZSBTdGF0ZSAqLwogICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9CVVNZOwogCiAgICAgLyogQ2hlY2sgdGhhdCB0aGUgY2FyZCBpcyBub3QgbG9ja2VkICovCi0gICAgaWYoKFNETU1DX0dldFJlc3BvbnNlKGhtbWMtPkluc3RhbmNlLCBTRE1NQ19SRVNQMSkgJiBTRE1NQ19DQVJEX0xPQ0tFRCkgPT0gU0RNTUNfQ0FSRF9MT0NLRUQpCisgICAgaWYgKChTRE1NQ19HZXRSZXNwb25zZShobW1jLT5JbnN0YW5jZSwgU0RNTUNfUkVTUDEpICYgU0RNTUNfQ0FSRF9MT0NLRUQpID09IFNETU1DX0NBUkRfTE9DS0VEKQogICAgIHsKICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0xPQ0tfVU5MT0NLX0ZBSUxFRDsKICAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKQEAgLTI2NzUsMjIgKzI4MzgsMjIgQEAKIAogICAgIC8qIFNlbmQgQ01EMzUgTU1DX0VSQVNFX0dSUF9TVEFSVCB3aXRoIHN0YXJ0IGFkZHJlc3MgYXMgYXJndW1lbnQgKi8KICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kRXJhc2VTdGFydEFkZChobW1jLT5JbnN0YW5jZSwgc3RhcnRfYWRkKTsKLSAgICBpZihlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICBpZiAoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogU2VuZCBDTUQzNiBNTUNfRVJBU0VfR1JQX0VORCB3aXRoIGVuZCBhZGRyZXNzIGFzIGFyZ3VtZW50ICovCiAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kRXJhc2VFbmRBZGQoaG1tYy0+SW5zdGFuY2UsIGVuZF9hZGQpOwotICAgICAgaWYoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgICBpZiAoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgICB7CiAgICAgICAgIC8qIFNlbmQgQ01EMzggRVJBU0Ugd2l0aCBlcmFzZSB0eXBlIGFzIGFyZ3VtZW50ICovCiAgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRFcmFzZShobW1jLT5JbnN0YW5jZSwgRXJhc2VUeXBlKTsKLSAgICAgICAgaWYoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgICAgIGlmIChlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICAgICAgewogICAgICAgICAgIGlmICgoRXJhc2VUeXBlID09IEhBTF9NTUNfU0VDVVJFX0VSQVNFKSB8fCAoRXJhc2VUeXBlID09IEhBTF9NTUNfU0VDVVJFX1RSSU1fU1RFUDIpKQogICAgICAgICAgIHsKICAgICAgICAgICAgIC8qIFdhaXQgdGhhdCB0aGUgZGV2aWNlIGlzIHJlYWR5IGJ5IGNoZWNraW5nIHRoZSBEMCBsaW5lICovCi0gICAgICAgICAgICB3aGlsZSgoIV9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX0JVU1lEMEVORCkpICYmIChlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkpCisgICAgICAgICAgICB3aGlsZSAoKCFfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19CVVNZRDBFTkQpKSAmJiAoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZigoSEFMX0dldFRpY2soKS10aWNrc3RhcnQpID49IFNETU1DX01BWEVSQVNFVElNRU9VVCkKKyAgICAgICAgICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+PSBTRE1NQ19NQVhFUkFTRVRJTUVPVVQpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBlcnJvcnN0YXRlID0gSEFMX01NQ19FUlJPUl9USU1FT1VUOwogICAgICAgICAgICAgICB9CkBAIC0yNzA3LDEzICsyODcwLDEzIEBACiAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwogCiAgICAgLyogTWFuYWdlIGVycm9ycyAqLwotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwogCi0gICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfVElNRU9VVCkKKyAgICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfVElNRU9VVCkKICAgICAgIHsKICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KQEAgLTI3NDYsMTkgKzI5MDksMTkgQEAKICAgdWludDMyX3QgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKIAogICAvKiBDaGVjayB0aGUgc3RhdGUgb2YgdGhlIGRyaXZlciAqLwotICBpZihobW1jLT5TdGF0ZSA9PSBIQUxfTU1DX1NUQVRFX1JFQURZKQorICBpZiAoaG1tYy0+U3RhdGUgPT0gSEFMX01NQ19TVEFURV9SRUFEWSkKICAgewogICAgIC8qIENoYW5nZSBTdGF0ZSAqLwogICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9CVVNZOwogCiAgICAgLyogSW5kZXggOiAxNjUgLSBWYWx1ZSA6IDB4MDEgKi8KICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3dpdGNoKGhtbWMtPkluc3RhbmNlLCAweDAzQTUwMTAwVSk7Ci0gICAgaWYoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgaWYgKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKQogICAgIHsKICAgICAgIC8qIFdhaXQgdGhhdCB0aGUgZGV2aWNlIGlzIHJlYWR5IGJ5IGNoZWNraW5nIHRoZSBEMCBsaW5lICovCi0gICAgICB3aGlsZSgoIV9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX0JVU1lEMEVORCkpICYmIChlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkpCisgICAgICB3aGlsZSAoKCFfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19CVVNZRDBFTkQpKSAmJiAoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpKQogICAgICAgewotICAgICAgICBpZigoSEFMX0dldFRpY2soKS10aWNrc3RhcnQpID49IFNETU1DX01BWEVSQVNFVElNRU9VVCkKKyAgICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+PSBTRE1NQ19NQVhFUkFTRVRJTUVPVVQpCiAgICAgICAgIHsKICAgICAgICAgICBlcnJvcnN0YXRlID0gSEFMX01NQ19FUlJPUl9USU1FT1VUOwogICAgICAgICB9CkBAIC0yNzY3LDE0ICsyOTMwLDE0IEBACiAgICAgICAvKiBDbGVhciB0aGUgZmxhZyBjb3JyZXNwb25kaW5nIHRvIGVuZCBEMCBidXMgbGluZSAqLwogICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19CVVNZRDBFTkQpOwogCi0gICAgICBpZihlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICAgIGlmIChlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICAgIHsKICAgICAgICAgLyogV2hpbGUgY2FyZCBpcyBub3QgcmVhZHkgZm9yIGRhdGEgYW5kIHRyaWFsIG51bWJlciBmb3Igc2VuZGluZyBDTUQxMyBpcyBub3QgZXhjZWVkZWQgKi8KICAgICAgICAgY291bnQgPSBTRE1NQ19NQVhfVFJJQUw7CiAgICAgICAgIGRvCiAgICAgICAgIHsKICAgICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU2VuZFN0YXR1cyhobW1jLT5JbnN0YW5jZSwgKHVpbnQzMl90KSgoKHVpbnQzMl90KWhtbWMtPk1tY0NhcmQuUmVsQ2FyZEFkZCkgPDwgMTZVKSk7Ci0gICAgICAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgICAgICAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQogICAgICAgICAgIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIH0KQEAgLTI3ODIsNyArMjk0NSw3IEBACiAgICAgICAgICAgLyogR2V0IGNvbW1hbmQgcmVzcG9uc2UgKi8KICAgICAgICAgICByZXNwb25zZSA9IFNETU1DX0dldFJlc3BvbnNlKGhtbWMtPkluc3RhbmNlLCBTRE1NQ19SRVNQMSk7CiAgICAgICAgICAgY291bnQtLTsKLSAgICAgICAgfXdoaWxlKCgocmVzcG9uc2UgJiAweDEwMFUpID09IDBVKSAmJiAoY291bnQgIT0gMFUpKTsKKyAgICAgICAgfSB3aGlsZSAoKChyZXNwb25zZSAmIDB4MTAwVSkgPT0gMFUpICYmIChjb3VudCAhPSAwVSkpOwogCiAgICAgICAgIC8qIENoZWNrIHRoZSBzdGF0dXMgYWZ0ZXIgdGhlIHN3aXRjaCBjb21tYW5kIGV4ZWN1dGlvbiAqLwogICAgICAgICBpZiAoKGNvdW50ICE9IDBVKSAmJiAoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpKQpAQCAtMjgwOCwxMyArMjk3MSwxMyBAQAogICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKIAogICAgIC8qIE1hbmFnZSBlcnJvcnMgKi8KLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNETU1DX1NUQVRJQ19GTEFHUyk7CiAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKIAotICAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX1RJTUVPVVQpCisgICAgICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX1RJTUVPVVQpCiAgICAgICB7CiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CkBAIC0yODQyLDggKzMwMDUsMTAgQEAKICAgKiBAcGFyYW0gIFNSVE1vZGUgU3BlY2lmaWVzIHRoZSB0eXBlIG9mIGVyYXNlIHRvIGJlIHBlcmZvcm1lZAogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIEhBTF9NTUNfU1JUX0VSQVNFIEluZm9ybWF0aW9uIHJlbW92ZWQgYnkgYW4gZXJhc2UKLSAgKiAgICAgICAgICAgIEBhcmcgSEFMX01NQ19TUlRfV1JJVEVfQ0hBUl9FUkFTRSBJbmZvcm1hdGlvbiByZW1vdmVkIGJ5IGFuIG92ZXJ3cml0aW5nIHdpdGggYSBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgYW4gZXJhc2UKLSAgKiAgICAgICAgICAgIEBhcmcgSEFMX01NQ19TUlRfV1JJVEVfQ0hBUl9DT01QTF9SQU5ET00gSW5mb3JtYXRpb24gcmVtb3ZlZCBieSBhbiBvdmVyd3JpdGluZyB3aXRoIGEgY2hhcmFjdGVyLCBpdHMgY29tcGxlbWVudCB0aGVuIGEgcmFuZG9tIGNoYXJhY3RlcgorICAqICAgICAgICAgICAgQGFyZyBIQUxfTU1DX1NSVF9XUklURV9DSEFSX0VSQVNFIEluZm9ybWF0aW9uIHJlbW92ZWQgYnkgYW4gb3ZlcndyaXRpbmcgd2l0aCBhIGNoYXJhY3RlcgorICAqICAgICAgICAgICAgICAgICBmb2xsb3dlZCBieSBhbiBlcmFzZQorICAqICAgICAgICAgICAgQGFyZyBIQUxfTU1DX1NSVF9XUklURV9DSEFSX0NPTVBMX1JBTkRPTSBJbmZvcm1hdGlvbiByZW1vdmVkIGJ5IGFuIG92ZXJ3cml0aW5nIHdpdGggYSBjaGFyYWN0ZXIsCisgICogICAgICAgICAgICAgICAgIGl0cyBjb21wbGVtZW50IHRoZW4gYSByYW5kb20gY2hhcmFjdGVyCiAgICogICAgICAgICAgICBAYXJnIEhBTF9NTUNfU1JUX1ZFTkRPUl9ERUZJTkVEIEluZm9ybWF0aW9uIHJlbW92ZWQgdXNpbmcgYSB2ZW5kb3IgZGVmaW5lZAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwpAQCAtMjg1NSwyOCArMzAyMCwyOCBAQAogICBhc3NlcnRfcGFyYW0oSVNfTU1DX1NSVF9UWVBFKFNSVE1vZGUpKTsKIAogICAvKiBDaGVjayB0aGUgc3RhdGUgb2YgdGhlIGRyaXZlciAqLwotICBpZihobW1jLT5TdGF0ZSA9PSBIQUxfTU1DX1NUQVRFX1JFQURZKQorICBpZiAoaG1tYy0+U3RhdGUgPT0gSEFMX01NQ19TVEFURV9SRUFEWSkKICAgewogICAgIC8qIEdldCB0aGUgc3VwcG9ydGVkIHZhbHVlcyBieSB0aGUgZGV2aWNlICovCi0gICAgaWYoSEFMX01NQ19HZXRTdXBwb3J0ZWRTZWNSZW1vdmFsVHlwZShobW1jLCAmc3J0KSA9PSBIQUxfT0spCisgICAgaWYgKEhBTF9NTUNfR2V0U3VwcG9ydGVkU2VjUmVtb3ZhbFR5cGUoaG1tYywgJnNydCkgPT0gSEFMX09LKQogICAgIHsKICAgICAgIC8qIENoYW5nZSBTdGF0ZSAqLwogICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX0JVU1k7CiAKICAgICAgIC8qIENoZWNrIHRoZSB2YWx1ZSBwYXNzZWQgYXMgcGFyYW1ldGVyIGlzIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlICovCi0gICAgICBpZigoU1JUTW9kZSAmIHNydCkgIT0gMFUpCisgICAgICBpZiAoKFNSVE1vZGUgJiBzcnQpICE9IDBVKQogICAgICAgewogICAgICAgICAvKiBJbmRleCA6IDE2IC0gVmFsdWUgOiBTUlRNb2RlICovCiAgICAgICAgIHNydCB8PSAoKFBPU0lUSU9OX1ZBTChTUlRNb2RlKSkgPDwgNFUpOwogICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3dpdGNoKGhtbWMtPkluc3RhbmNlLCAoMHgwMzEwMDAwMFUgfCAoc3J0IDw8IDhVKSkpOwotICAgICAgICBpZihlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICAgICAgaWYgKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKQogICAgICAgICB7CiAgICAgICAgICAgLyogV2hpbGUgY2FyZCBpcyBub3QgcmVhZHkgZm9yIGRhdGEgYW5kIHRyaWFsIG51bWJlciBmb3Igc2VuZGluZyBDTUQxMyBpcyBub3QgZXhjZWVkZWQgKi8KICAgICAgICAgICBjb3VudCA9IFNETU1DX01BWF9UUklBTDsKICAgICAgICAgICBkbwogICAgICAgICAgIHsKICAgICAgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kU3RhdHVzKGhtbWMtPkluc3RhbmNlLCAodWludDMyX3QpKCgodWludDMyX3QpaG1tYy0+TW1jQ2FyZC5SZWxDYXJkQWRkKSA8PCAxNlUpKTsKLSAgICAgICAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgICAgICAgICAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTI4ODQsNyArMzA0OSw3IEBACiAgICAgICAgICAgICAvKiBHZXQgY29tbWFuZCByZXNwb25zZSAqLwogICAgICAgICAgICAgcmVzcG9uc2UgPSBTRE1NQ19HZXRSZXNwb25zZShobW1jLT5JbnN0YW5jZSwgU0RNTUNfUkVTUDEpOwogICAgICAgICAgICAgY291bnQtLTsKLSAgICAgICAgICB9d2hpbGUoKChyZXNwb25zZSAmIDB4MTAwVSkgPT0gMFUpICYmIChjb3VudCAhPSAwVSkpOworICAgICAgICAgIH0gd2hpbGUgKCgocmVzcG9uc2UgJiAweDEwMFUpID09IDBVKSAmJiAoY291bnQgIT0gMFUpKTsKIAogICAgICAgICAgIC8qIENoZWNrIHRoZSBzdGF0dXMgYWZ0ZXIgdGhlIHN3aXRjaCBjb21tYW5kIGV4ZWN1dGlvbiAqLwogICAgICAgICAgIGlmICgoY291bnQgIT0gMFUpICYmIChlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkpCkBAIC0yOTE5LDcgKzMwODQsNyBAQAogICAgIH0KIAogICAgIC8qIE1hbmFnZSBlcnJvcnMgKi8KLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNETU1DX1NUQVRJQ19GTEFHUyk7CkBAIC0yOTQzLDE1ICszMTA4LDE3IEBACiAgICogQHBhcmFtICBTdXBwb3J0ZWRTUlQgcG9pbnRlciBmb3Igc3VwcG9ydGVkIFNSVCB2YWx1ZQogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIGEgYml0IGZpZWxkIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBIQUxfTU1DX1NSVF9FUkFTRSBJbmZvcm1hdGlvbiByZW1vdmVkIGJ5IGFuIGVyYXNlCi0gICogICAgICAgICAgICBAYXJnIEhBTF9NTUNfU1JUX1dSSVRFX0NIQVJfRVJBU0UgSW5mb3JtYXRpb24gcmVtb3ZlZCBieSBhbiBvdmVyd3JpdGluZyB3aXRoIGEgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IGFuIGVyYXNlCi0gICogICAgICAgICAgICBAYXJnIEhBTF9NTUNfU1JUX1dSSVRFX0NIQVJfQ09NUExfUkFORE9NIEluZm9ybWF0aW9uIHJlbW92ZWQgYnkgYW4gb3ZlcndyaXRpbmcgd2l0aCBhIGNoYXJhY3RlciwgaXRzIGNvbXBsZW1lbnQgdGhlbiBhIHJhbmRvbSBjaGFyYWN0ZXIKKyAgKiAgICAgICAgICAgIEBhcmcgSEFMX01NQ19TUlRfV1JJVEVfQ0hBUl9FUkFTRSBJbmZvcm1hdGlvbiByZW1vdmVkIGJ5IGFuIG92ZXJ3cml0aW5nIHdpdGggYSBjaGFyYWN0ZXIgZm9sbG93ZWQKKyAgKiAgICAgICAgICAgICAgICAgIGJ5IGFuIGVyYXNlCisgICogICAgICAgICAgICBAYXJnIEhBTF9NTUNfU1JUX1dSSVRFX0NIQVJfQ09NUExfUkFORE9NIEluZm9ybWF0aW9uIHJlbW92ZWQgYnkgYW4gb3ZlcndyaXRpbmcgd2l0aCBhIGNoYXJhY3RlciwKKyAgKiAgICAgICAgICAgICAgICAgaXRzIGNvbXBsZW1lbnQgdGhlbiBhIHJhbmRvbSBjaGFyYWN0ZXIKICAgKiAgICAgICAgICAgIEBhcmcgSEFMX01NQ19TUlRfVkVORE9SX0RFRklORUQgSW5mb3JtYXRpb24gcmVtb3ZlZCB1c2luZyBhIHZlbmRvciBkZWZpbmVkCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX0dldFN1cHBvcnRlZFNlY1JlbW92YWxUeXBlKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50MzJfdCAqU3VwcG9ydGVkU1JUKQogewogICAvKiBDaGVjayB0aGUgc3RhdGUgb2YgdGhlIGRyaXZlciAqLwotICBpZihobW1jLT5TdGF0ZSA9PSBIQUxfTU1DX1NUQVRFX1JFQURZKQorICBpZiAoaG1tYy0+U3RhdGUgPT0gSEFMX01NQ19TVEFURV9SRUFEWSkKICAgewogICAgIC8qIENoYW5nZSBTdGF0ZSAqLwogICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9CVVNZOwpAQCAtMjk5Nyw3ICszMTY0LDcgQEAKICAgTU1DX0luaXRUeXBlRGVmIEluaXQ7CiAKICAgLyogQ2hlY2sgdGhlIHBvd2VyIFN0YXRlICovCi0gIGlmKFNETU1DX0dldFBvd2VyU3RhdGUoaG1tYy0+SW5zdGFuY2UpID09IDBVKQorICBpZiAoU0RNTUNfR2V0UG93ZXJTdGF0ZShobW1jLT5JbnN0YW5jZSkgPT0gMFUpCiAgIHsKICAgICAvKiBQb3dlciBvZmYgKi8KICAgICByZXR1cm4gSEFMX01NQ19FUlJPUl9SRVFVRVNUX05PVF9BUFBMSUNBQkxFOwpAQCAtMzAwNSw3ICszMTcyLDcgQEAKIAogICAvKiBTZW5kIENNRDIgQUxMX1NFTkRfQ0lEICovCiAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kQ0lEKGhtbWMtPkluc3RhbmNlKTsKLSAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgewogICAgIHJldHVybiBlcnJvcnN0YXRlOwogICB9CkBAIC0zMDIxLDcgKzMxODgsNyBAQAogICAvKiBTZW5kIENNRDMgU0VUX1JFTF9BRERSIHdpdGggUkNBID0gMiAoc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAxKSAqLwogICAvKiBNTUMgQ2FyZCBwdWJsaXNoZXMgaXRzIFJDQS4gKi8KICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNldFJlbEFkZE1tYyhobW1jLT5JbnN0YW5jZSwgbW1jX3JjYSk7Ci0gIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgIHsKICAgICByZXR1cm4gZXJyb3JzdGF0ZTsKICAgfQpAQCAtMzAzMSw3ICszMTk4LDcgQEAKIAogICAvKiBTZW5kIENNRDkgU0VORF9DU0Qgd2l0aCBhcmd1bWVudCBhcyBjYXJkJ3MgUkNBICovCiAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kQ1NEKGhtbWMtPkluc3RhbmNlLCAodWludDMyX3QpKGhtbWMtPk1tY0NhcmQuUmVsQ2FyZEFkZCA8PCAxNlUpKTsKLSAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgewogICAgIHJldHVybiBlcnJvcnN0YXRlOwogICB9CkBAIC0zMDQ3LDkgKzMyMTQsOSBAQAogICAvKiBHZXQgdGhlIENhcmQgQ2xhc3MgKi8KICAgaG1tYy0+TW1jQ2FyZC5DbGFzcyA9IChTRE1NQ19HZXRSZXNwb25zZShobW1jLT5JbnN0YW5jZSwgU0RNTUNfUkVTUDIpID4+IDIwVSk7CiAKLSAgIC8qIFNlbGVjdCB0aGUgQ2FyZCAqLworICAvKiBTZWxlY3QgdGhlIENhcmQgKi8KICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNlbERlc2VsKGhtbWMtPkluc3RhbmNlLCAodWludDMyX3QpKCgodWludDMyX3QpaG1tYy0+TW1jQ2FyZC5SZWxDYXJkQWRkKSA8PCAxNlUpKTsKLSAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgewogICAgIHJldHVybiBlcnJvcnN0YXRlOwogICB9CkBAIC0zMDYyLDEyICszMjI5LDEyIEBACiAKICAgLyogV2hpbGUgY2FyZCBpcyBub3QgcmVhZHkgZm9yIGRhdGEgYW5kIHRyaWFsIG51bWJlciBmb3Igc2VuZGluZyBDTUQxMyBpcyBub3QgZXhjZWVkZWQgKi8KICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNlbmRTdGF0dXMoaG1tYy0+SW5zdGFuY2UsICh1aW50MzJfdCkoKCh1aW50MzJfdClobW1jLT5NbWNDYXJkLlJlbENhcmRBZGQpIDw8IDE2VSkpOwotICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQogICB7CiAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CiAgIH0KIAotICAKKwogICAvKiBHZXQgRXh0ZW5kZWQgQ1NEIHBhcmFtZXRlcnMgKi8KICAgaWYgKEhBTF9NTUNfR2V0Q2FyZEV4dENTRChobW1jLCBobW1jLT5FeHRfQ1NELCBTRE1NQ19EQVRBVElNRU9VVCkgIT0gSEFMX09LKQogICB7CkBAIC0zMDc2LDcgKzMyNDMsNyBAQAogCiAgIC8qIFdoaWxlIGNhcmQgaXMgbm90IHJlYWR5IGZvciBkYXRhIGFuZCB0cmlhbCBudW1iZXIgZm9yIHNlbmRpbmcgQ01EMTMgaXMgbm90IGV4Y2VlZGVkICovCiAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kU3RhdHVzKGhtbWMtPkluc3RhbmNlLCAodWludDMyX3QpKCgodWludDMyX3QpaG1tYy0+TW1jQ2FyZC5SZWxDYXJkQWRkKSA8PCAxNlUpKTsKLSAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgewogICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwogICB9CkBAIC0zMTA1LDIxICszMjcyLDIxIEBACiAKICAgLyogQ01EMDogR09fSURMRV9TVEFURSAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kR29JZGxlU3RhdGUoaG1tYy0+SW5zdGFuY2UpOwotICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQogICB7CiAgICAgcmV0dXJuIGVycm9yc3RhdGU7CiAgIH0KIAotICB3aGlsZSh2YWxpZHZvbHRhZ2UgPT0gMFUpCisgIHdoaWxlICh2YWxpZHZvbHRhZ2UgPT0gMFUpCiAgIHsKLSAgICBpZihjb3VudCsrID09IFNETU1DX01BWF9WT0xUX1RSSUFMKQorICAgIGlmIChjb3VudCsrID09IFNETU1DX01BWF9WT0xUX1RSSUFMKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfTU1DX0VSUk9SX0lOVkFMSURfVk9MVFJBTkdFOwogICAgIH0KIAogICAgIC8qIFNFTkQgQ01EMSBBUFBfQ01EIHdpdGggdm9sdGFnZSByYW5nZSBhcyBhcmd1bWVudCAqLwogICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRPcENvbmRpdGlvbihobW1jLT5JbnN0YW5jZSwgTU1DX1ZPTFRBR0VfUkFOR0UpOwotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX01NQ19FUlJPUl9VTlNVUFBPUlRFRF9GRUFUVVJFOwogICAgIH0KQEAgLTMxNjYsMTQgKzMzMzMsMTQgQEAKIHsKICAgdWludDMyX3QgZXJyb3JzdGF0ZTsKIAotICBpZihwQ2FyZFN0YXR1cyA9PSBOVUxMKQorICBpZiAocENhcmRTdGF0dXMgPT0gTlVMTCkKICAgewogICAgIHJldHVybiBIQUxfTU1DX0VSUk9SX1BBUkFNOwogICB9CiAKICAgLyogU2VuZCBTdGF0dXMgY29tbWFuZCAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU2VuZFN0YXR1cyhobW1jLT5JbnN0YW5jZSwgKHVpbnQzMl90KShobW1jLT5NbWNDYXJkLlJlbENhcmRBZGQgPDwgMTZVKSk7Ci0gIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgIHsKICAgICByZXR1cm4gZXJyb3JzdGF0ZTsKICAgfQpAQCAtMzE5Miw3ICszMzU5LDggQEAKICAgKiBAcGFyYW0gIFRpbWVvdXQ6IFNwZWNpZnkgdGltZW91dCB2YWx1ZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIE1NQ19SZWFkRXh0Q1NEKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50MzJfdCAqcEZpZWxkRGF0YSwgdWludDE2X3QgRmllbGRJbmRleCwgdWludDMyX3QgVGltZW91dCkKK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBNTUNfUmVhZEV4dENTRChNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDMyX3QgKnBGaWVsZERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgRmllbGRJbmRleCwgdWludDMyX3QgVGltZW91dCkKIHsKICAgU0RNTUNfRGF0YUluaXRUeXBlRGVmIGNvbmZpZzsKICAgdWludDMyX3QgZXJyb3JzdGF0ZTsKQEAgLTMyMTcsNyArMzM4NSw3IEBACiAKICAgLyogU2V0IEJsb2NrIFNpemUgZm9yIENhcmQgKi8KICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNlbmRFWFRDU0QoaG1tYy0+SW5zdGFuY2UsIDApOwotICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQogICB7CiAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwpAQCAtMzIyNywxNyArMzM5NSwxNyBAQAogICB9CiAKICAgLyogUG9sbCBvbiBTRE1NQyBmbGFncyAqLwotICB3aGlsZSghX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0ZMQUdfUlhPVkVSUiB8IFNETU1DX0ZMQUdfRENSQ0ZBSUwgfCBTRE1NQ19GTEFHX0RUSU1FT1VUIHwgU0RNTUNfRkxBR19EQVRBRU5EKSkKKyAgd2hpbGUgKCFfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19SWE9WRVJSIHwgU0RNTUNfRkxBR19EQ1JDRkFJTCB8IFNETU1DX0ZMQUdfRFRJTUVPVVQgfCBTRE1NQ19GTEFHX0RBVEFFTkQpKQogICB7Ci0gICAgaWYoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0ZMQUdfUlhGSUZPSEYpKQorICAgIGlmIChfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19SWEZJRk9IRikpCiAgICAgewogICAgICAgLyogUmVhZCBkYXRhIGZyb20gU0RNTUMgUnggRklGTyAqLwotICAgICAgZm9yKGNvdW50ID0gMFU7IGNvdW50IDwgOFU7IGNvdW50KyspCisgICAgICBmb3IgKGNvdW50ID0gMFU7IGNvdW50IDwgOFU7IGNvdW50KyspCiAgICAgICB7CiAgICAgICAgIHRtcF9kYXRhID0gU0RNTUNfUmVhZEZJRk8oaG1tYy0+SW5zdGFuY2UpOwotCQkvKiBlZyA6IFNFQ19DT1VOVCAgIDogRmllbGRJbmRleCA9IDIxMiA9PiBpK2NvdW50ID0gNTMgKi8KLQkJLyogICAgICBERVZJQ0VfVFlQRSA6IEZpZWxkSW5kZXggPSAxOTYgPT4gaStjb3VudCA9IDQ5ICovCi0gICAgICAgIGlmICgoaSArIGNvdW50KSA9PSAoKHVpbnQzMl90KUZpZWxkSW5kZXgvNFUpKQorICAgICAgICAvKiBlZyA6IFNFQ19DT1VOVCAgIDogRmllbGRJbmRleCA9IDIxMiA9PiBpK2NvdW50ID0gNTMgKi8KKyAgICAgICAgLyogICAgICBERVZJQ0VfVFlQRSA6IEZpZWxkSW5kZXggPSAxOTYgPT4gaStjb3VudCA9IDQ5ICovCisgICAgICAgIGlmICgoaSArIGNvdW50KSA9PSAoKHVpbnQzMl90KUZpZWxkSW5kZXggLyA0VSkpCiAgICAgICAgIHsKICAgICAgICAgICAqcEZpZWxkRGF0YSA9IHRtcF9kYXRhOwogICAgICAgICB9CkBAIC0zMjQ1LDE4ICszNDEzLDE4IEBACiAgICAgICBpICs9IDhVOwogICAgIH0KIAotICAgIGlmKCgoSEFMX0dldFRpY2soKS10aWNrc3RhcnQpID49ICBUaW1lb3V0KSB8fCAoVGltZW91dCA9PSAwVSkpCisgICAgaWYgKCgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPj0gIFRpbWVvdXQpIHx8IChUaW1lb3V0ID09IDBVKSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX1RJTUVPVVQ7Ci0gICAgICBobW1jLT5TdGF0ZT0gSEFMX01NQ19TVEFURV9SRUFEWTsKKyAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICB9CiAgIH0KIAogICAvKiBHZXQgZXJyb3Igc3RhdGUgKi8KLSAgaWYoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0ZMQUdfRFRJTUVPVVQpKQorICBpZiAoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0ZMQUdfRFRJTUVPVVQpKQogICB7CiAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwpAQCAtMzI2NCw3ICszNDMyLDcgQEAKICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQotICBlbHNlIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX0RDUkNGQUlMKSkKKyAgZWxzZSBpZiAoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0ZMQUdfRENSQ0ZBSUwpKQogICB7CiAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwpAQCAtMzI3Miw3ICszNDQwLDcgQEAKICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQotICBlbHNlIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX1JYT1ZFUlIpKQorICBlbHNlIGlmIChfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19SWE9WRVJSKSkKICAgewogICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCiAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTMyODcsNyArMzQ1NSw3IEBACiAKICAgLyogV2hpbGUgY2FyZCBpcyBub3QgcmVhZHkgZm9yIGRhdGEgYW5kIHRyaWFsIG51bWJlciBmb3Igc2VuZGluZyBDTUQxMyBpcyBub3QgZXhjZWVkZWQgKi8KICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNlbmRTdGF0dXMoaG1tYy0+SW5zdGFuY2UsICh1aW50MzJfdCkoKCh1aW50MzJfdClobW1jLT5NbWNDYXJkLlJlbENhcmRBZGQpIDw8IDE2KSk7Ci0gIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgIHsKICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKICAgfQpAQCAtMzMwOSwxNCArMzQ3NywxNCBAQAogc3RhdGljIHZvaWQgTU1DX1JlYWRfSVQoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpCiB7CiAgIHVpbnQzMl90IGNvdW50LCBkYXRhOwotICB1aW50OF90KiB0bXA7CisgIHVpbnQ4X3QgKnRtcDsKIAogICB0bXAgPSBobW1jLT5wUnhCdWZmUHRyOwogCiAgIGlmIChobW1jLT5SeFhmZXJTaXplID49IDMyVSkKICAgewogICAgIC8qIFJlYWQgZGF0YSBmcm9tIFNETU1DIFJ4IEZJRk8gKi8KLSAgICBmb3IoY291bnQgPSAwVTsgY291bnQgPCA4VTsgY291bnQrKykKKyAgICBmb3IgKGNvdW50ID0gMFU7IGNvdW50IDwgOFU7IGNvdW50KyspCiAgICAgewogICAgICAgZGF0YSA9IFNETU1DX1JlYWRGSUZPKGhtbWMtPkluc3RhbmNlKTsKICAgICAgICp0bXAgPSAodWludDhfdCkoZGF0YSAmIDB4RkZVKTsKQEAgLTMzNDMsMTQgKzM1MTEsMTQgQEAKIHN0YXRpYyB2b2lkIE1NQ19Xcml0ZV9JVChNTUNfSGFuZGxlVHlwZURlZiAqaG1tYykKIHsKICAgdWludDMyX3QgY291bnQsIGRhdGE7Ci0gIHVpbnQ4X3QqIHRtcDsKKyAgdWludDhfdCAqdG1wOwogCiAgIHRtcCA9IGhtbWMtPnBUeEJ1ZmZQdHI7CiAKICAgaWYgKGhtbWMtPlR4WGZlclNpemUgPj0gMzJVKQogICB7CiAgICAgLyogV3JpdGUgZGF0YSB0byBTRE1NQyBUeCBGSUZPICovCi0gICAgZm9yKGNvdW50ID0gMFU7IGNvdW50IDwgOFU7IGNvdW50KyspCisgICAgZm9yIChjb3VudCA9IDBVOyBjb3VudCA8IDhVOyBjb3VudCsrKQogICAgIHsKICAgICAgIGRhdGEgPSAodWludDMyX3QpKCp0bXApOwogICAgICAgdG1wKys7CkBAIC0zMzc4LDM2ICszNTQ2LDM3IEBACiB7CiAgIHVpbnQzMl90IGVycm9yc3RhdGUgPSBIQUxfTU1DX0VSUk9SX05PTkU7CiAgIHVpbnQzMl90IHJlc3BvbnNlID0gMFUsIGNvdW50OworICB1aW50MzJfdCBzZG1tY19jbGs7CiAgIFNETU1DX0luaXRUeXBlRGVmIEluaXQ7CiAKICAgaWYgKCgoaG1tYy0+SW5zdGFuY2UtPkNMS0NSICYgU0RNTUNfQ0xLQ1JfQlVTU1BFRUQpICE9IDBVKSAmJiAoc3RhdGUgPT0gRElTQUJMRSkpCiAgIHsKICAgICBlcnJvcnN0YXRlID0gTU1DX1B3ckNsYXNzVXBkYXRlKGhtbWMsIChobW1jLT5JbnN0YW5jZS0+Q0xLQ1IgJiBTRE1NQ19DTEtDUl9XSURCVVMpLCBTRE1NQ19TUEVFRF9NT0RFX0RFRkFVTFQpOwotICAgIGlmKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgIGlmIChlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICAvKiBJbmRleCA6IDE4NSAtIFZhbHVlIDogMCAqLwogICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFN3aXRjaChobW1jLT5JbnN0YW5jZSwgMHgwM0I5MDAwMFUpOwogICAgIH0KICAgfQotICAKKwogICBpZiAoKChobW1jLT5JbnN0YW5jZS0+Q0xLQ1IgJiBTRE1NQ19DTEtDUl9CVVNTUEVFRCkgPT0gMFUpICYmIChzdGF0ZSAhPSBESVNBQkxFKSkKICAgewogICAgIGVycm9yc3RhdGUgPSBNTUNfUHdyQ2xhc3NVcGRhdGUoaG1tYywgKGhtbWMtPkluc3RhbmNlLT5DTEtDUiAmIFNETU1DX0NMS0NSX1dJREJVUyksIFNETU1DX1NQRUVEX01PREVfSElHSCk7Ci0gICAgaWYoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgaWYgKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKQogICAgIHsKICAgICAgIC8qIEluZGV4IDogMTg1IC0gVmFsdWUgOiAxICovCiAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3dpdGNoKGhtbWMtPkluc3RhbmNlLCAweDAzQjkwMTAwVSk7CiAgICAgfQogICB9CiAKLSAgaWYoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCisgIGlmIChlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgewogICAgIC8qIFdoaWxlIGNhcmQgaXMgbm90IHJlYWR5IGZvciBkYXRhIGFuZCB0cmlhbCBudW1iZXIgZm9yIHNlbmRpbmcgQ01EMTMgaXMgbm90IGV4Y2VlZGVkICovCiAgICAgY291bnQgPSBTRE1NQ19NQVhfVFJJQUw7CiAgICAgZG8KICAgICB7CiAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU2VuZFN0YXR1cyhobW1jLT5JbnN0YW5jZSwgKHVpbnQzMl90KSgoKHVpbnQzMl90KWhtbWMtPk1tY0NhcmQuUmVsQ2FyZEFkZCkgPDwgMTZVKSk7Ci0gICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICAgIHsKICAgICAgICAgYnJlYWs7CiAgICAgICB9CkBAIC0zNDE1LDcgKzM1ODQsNyBAQAogICAgICAgLyogR2V0IGNvbW1hbmQgcmVzcG9uc2UgKi8KICAgICAgIHJlc3BvbnNlID0gU0RNTUNfR2V0UmVzcG9uc2UoaG1tYy0+SW5zdGFuY2UsIFNETU1DX1JFU1AxKTsKICAgICAgIGNvdW50LS07Ci0gICAgfXdoaWxlKCgocmVzcG9uc2UgJiAweDEwMFUpID09IDBVKSAmJiAoY291bnQgIT0gMFUpKTsKKyAgICB9IHdoaWxlICgoKHJlc3BvbnNlICYgMHgxMDBVKSA9PSAwVSkgJiYgKGNvdW50ICE9IDBVKSk7CiAKICAgICAvKiBDaGVjayB0aGUgc3RhdHVzIGFmdGVyIHRoZSBzd2l0Y2ggY29tbWFuZCBleGVjdXRpb24gKi8KICAgICBpZiAoKGNvdW50ICE9IDBVKSAmJiAoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpKQpAQCAtMzQzNywxNSArMzYwNiwyNCBAQAogICAgICAgICB7CiAgICAgICAgICAgSW5pdC5DbG9ja0RpdiA9IGhtbWMtPkluaXQuQ2xvY2tEaXY7CiAgICAgICAgICAgKHZvaWQpU0RNTUNfSW5pdChobW1jLT5JbnN0YW5jZSwgSW5pdCk7Ci0gICAgICAgICAgCisKICAgICAgICAgICBDTEVBUl9CSVQoaG1tYy0+SW5zdGFuY2UtPkNMS0NSLCBTRE1NQ19DTEtDUl9CVVNTUEVFRCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgSW5pdC5DbG9ja0RpdiA9IFNETU1DX0hTcGVlZF9DTEtfRElWOwotICAgICAgICAgICh2b2lkKVNETU1DX0luaXQoaG1tYy0+SW5zdGFuY2UsIEluaXQpOwotICAgICAgICAgIAotICAgICAgICAgIFNFVF9CSVQoaG1tYy0+SW5zdGFuY2UtPkNMS0NSLCBTRE1NQ19DTEtDUl9CVVNTUEVFRCk7CisgICAgICAgICAgLyogSGlnaCBTcGVlZCBDbG9jayBzaG91bGQgYmUgbGVzcyBvciBlcXVhbCB0byA1Mk1IeiovCisgICAgICAgICAgc2RtbWNfY2xrID0gSEFMX1JDQ0V4X0dldFBlcmlwaENMS0ZyZXEoUkNDX1BFUklQSENMS19TRE1NQzEpOworICAgICAgICAgIGlmIChzZG1tY19jbGsgPT0gMFUpCisgICAgICAgICAgeworICAgICAgICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgSW5pdC5DbG9ja0RpdiA9IHNkbW1jX2NsayAvICgyVSAqIE1NQ19ISUdIX1NQRUVEX0ZSRVEpOworICAgICAgICAgICAgKHZvaWQpU0RNTUNfSW5pdChobW1jLT5JbnN0YW5jZSwgSW5pdCk7CisKKyAgICAgICAgICAgIFNFVF9CSVQoaG1tYy0+SW5zdGFuY2UtPkNMS0NSLCBTRE1NQ19DTEtDUl9CVVNTUEVFRCk7CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtMzQ3OCw3ICszNjU2LDcgQEAKICAgICBpZiAoKGhtbWMtPkluc3RhbmNlLT5DTEtDUiAmIFNETU1DX0NMS0NSX1dJREJVU18wKSAhPSAwVSkKICAgICB7CiAgICAgICBlcnJvcnN0YXRlID0gTU1DX1B3ckNsYXNzVXBkYXRlKGhtbWMsIFNETU1DX0JVU19XSURFXzRCLCBTRE1NQ19TUEVFRF9NT0RFX0hJR0gpOwotICAgICAgaWYoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgICBpZiAoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgICB7CiAgICAgICAgIC8qIEluZGV4IDogMTgzIC0gVmFsdWUgOiAxICovCiAgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTd2l0Y2goaG1tYy0+SW5zdGFuY2UsIDB4MDNCNzAxMDBVKTsKQEAgLTM0ODcsNyArMzY2NSw3IEBACiAgICAgZWxzZQogICAgIHsKICAgICAgIGVycm9yc3RhdGUgPSBNTUNfUHdyQ2xhc3NVcGRhdGUoaG1tYywgU0RNTUNfQlVTX1dJREVfOEIsIFNETU1DX1NQRUVEX01PREVfSElHSCk7Ci0gICAgICBpZihlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICAgIGlmIChlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICAgIHsKICAgICAgICAgLyogSW5kZXggOiAxODMgLSBWYWx1ZSA6IDIgKi8KICAgICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFN3aXRjaChobW1jLT5JbnN0YW5jZSwgMHgwM0I3MDIwMFUpOwpAQCAtMzUwMCw3ICszNjc4LDcgQEAKICAgICBpZiAoKGhtbWMtPkluc3RhbmNlLT5DTEtDUiAmIFNETU1DX0NMS0NSX1dJREJVU18wKSAhPSAwVSkKICAgICB7CiAgICAgICBlcnJvcnN0YXRlID0gTU1DX1B3ckNsYXNzVXBkYXRlKGhtbWMsIFNETU1DX0JVU19XSURFXzRCLCBTRE1NQ19TUEVFRF9NT0RFX0REUik7Ci0gICAgICBpZihlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICAgIGlmIChlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICAgIHsKICAgICAgICAgLyogSW5kZXggOiAxODMgLSBWYWx1ZSA6IDUgKi8KICAgICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFN3aXRjaChobW1jLT5JbnN0YW5jZSwgMHgwM0I3MDUwMFUpOwpAQCAtMzUwOSw3ICszNjg3LDcgQEAKICAgICBlbHNlCiAgICAgewogICAgICAgZXJyb3JzdGF0ZSA9IE1NQ19Qd3JDbGFzc1VwZGF0ZShobW1jLCBTRE1NQ19CVVNfV0lERV84QiwgU0RNTUNfU1BFRURfTU9ERV9ERFIpOwotICAgICAgaWYoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgICBpZiAoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgICB7CiAgICAgICAgIC8qIEluZGV4IDogMTgzIC0gVmFsdWUgOiA2ICovCiAgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTd2l0Y2goaG1tYy0+SW5zdGFuY2UsIDB4MDNCNzA2MDBVKTsKQEAgLTM1MTcsMTQgKzM2OTUsMTQgQEAKICAgICB9CiAgIH0KIAotICBpZihlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgaWYgKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKQogICB7CiAgICAgLyogV2hpbGUgY2FyZCBpcyBub3QgcmVhZHkgZm9yIGRhdGEgYW5kIHRyaWFsIG51bWJlciBmb3Igc2VuZGluZyBDTUQxMyBpcyBub3QgZXhjZWVkZWQgKi8KICAgICBjb3VudCA9IFNETU1DX01BWF9UUklBTDsKICAgICBkbwogICAgIHsKICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kU3RhdHVzKGhtbWMtPkluc3RhbmNlLCAodWludDMyX3QpKCgodWludDMyX3QpaG1tYy0+TW1jQ2FyZC5SZWxDYXJkQWRkKSA8PCAxNlUpKTsKLSAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgICAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQogICAgICAgewogICAgICAgICBicmVhazsKICAgICAgIH0KQEAgLTM1MzIsNyArMzcxMCw3IEBACiAgICAgICAvKiBHZXQgY29tbWFuZCByZXNwb25zZSAqLwogICAgICAgcmVzcG9uc2UgPSBTRE1NQ19HZXRSZXNwb25zZShobW1jLT5JbnN0YW5jZSwgU0RNTUNfUkVTUDEpOwogICAgICAgY291bnQtLTsKLSAgICB9d2hpbGUoKChyZXNwb25zZSAmIDB4MTAwVSkgPT0gMFUpICYmIChjb3VudCAhPSAwVSkpOworICAgIH0gd2hpbGUgKCgocmVzcG9uc2UgJiAweDEwMFUpID09IDBVKSAmJiAoY291bnQgIT0gMFUpKTsKIAogICAgIC8qIENoZWNrIHRoZSBzdGF0dXMgYWZ0ZXIgdGhlIHN3aXRjaCBjb21tYW5kIGV4ZWN1dGlvbiAqLwogICAgIGlmICgoY291bnQgIT0gMFUpICYmIChlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkpCkBAIC0zNTgyLDEyICszNzYwLDEyIEBACiAgIHVpbnQzMl90IGVycm9yc3RhdGUgPSBIQUxfTU1DX0VSUk9SX05PTkU7CiAgIHVpbnQzMl90IHBvd2VyX2NsYXNzLCBzdXBwb3J0ZWRfcHdyX2NsYXNzOwogCi0gIGlmKChXaWRlID09IFNETU1DX0JVU19XSURFXzhCKSB8fCAoV2lkZSA9PSBTRE1NQ19CVVNfV0lERV80QikpCisgIGlmICgoV2lkZSA9PSBTRE1NQ19CVVNfV0lERV84QikgfHwgKFdpZGUgPT0gU0RNTUNfQlVTX1dJREVfNEIpKQogICB7CiAgICAgcG93ZXJfY2xhc3MgPSAwVTsgLyogRGVmYXVsdCB2YWx1ZSBhZnRlciBwb3dlci1vbiBvciBzb2Z0d2FyZSByZXNldCAqLwogCiAgICAgLyogUmVhZCB0aGUgUG93ZXJDbGFzcyBmaWVsZCBvZiB0aGUgRXh0ZW5kZWQgQ1NEIHJlZ2lzdGVyICovCi0gICAgaWYoTU1DX1JlYWRFeHRDU0QoaG1tYywgJnBvd2VyX2NsYXNzLCAxODcsIFNETU1DX0RBVEFUSU1FT1VUKSAhPSBIQUxfT0spIC8qIEZpZWxkIFBPV0VSX0NMQVNTIFsxODddICovCisgICAgaWYgKE1NQ19SZWFkRXh0Q1NEKGhtbWMsICZwb3dlcl9jbGFzcywgMTg3LCBTRE1NQ19EQVRBVElNRU9VVCkgIT0gSEFMX09LKSAvKiBGaWVsZCBQT1dFUl9DTEFTUyBbMTg3XSAqLwogICAgIHsKICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9HRU5FUkFMX1VOS05PV05fRVJSOwogICAgIH0KQEAgLTM2MDAsMjQgKzM3NzgsMjcgQEAKICAgICBpZiAoU3BlZWQgPT0gU0RNTUNfU1BFRURfTU9ERV9ERFIpCiAgICAgewogICAgICAgLyogRmllbGQgUFdSX0NMX0REUl81Ml94eHggWzIzOCBvciAyMzldICovCi0gICAgICBzdXBwb3J0ZWRfcHdyX2NsYXNzID0gKChobW1jLT5FeHRfQ1NEWyhNTUNfRVhUX0NTRF9QV1JfQ0xfRERSXzUyX0lOREVYLzQpXSA+PiBNTUNfRVhUX0NTRF9QV1JfQ0xfRERSXzUyX1BPUykgJiAweDAwMDAwMEZGVSk7CisgICAgICBzdXBwb3J0ZWRfcHdyX2NsYXNzID0gKChobW1jLT5FeHRfQ1NEWyhNTUNfRVhUX0NTRF9QV1JfQ0xfRERSXzUyX0lOREVYIC8gNCldID4+IE1NQ19FWFRfQ1NEX1BXUl9DTF9ERFJfNTJfUE9TKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkZVKTsKICAgICB9CiAgICAgZWxzZSBpZiAoU3BlZWQgPT0gU0RNTUNfU1BFRURfTU9ERV9ISUdIKQogICAgIHsKICAgICAgIC8qIEZpZWxkIFBXUl9DTF81Ml94eHggWzIwMCBvciAyMDJdICovCi0gICAgICBzdXBwb3J0ZWRfcHdyX2NsYXNzID0gKChobW1jLT5FeHRfQ1NEWyhNTUNfRVhUX0NTRF9QV1JfQ0xfNTJfSU5ERVgvNCldID4+IE1NQ19FWFRfQ1NEX1BXUl9DTF81Ml9QT1MpICYgMHgwMDAwMDBGRlUpOworICAgICAgc3VwcG9ydGVkX3B3cl9jbGFzcyA9ICgoaG1tYy0+RXh0X0NTRFsoTU1DX0VYVF9DU0RfUFdSX0NMXzUyX0lOREVYIC8gNCldID4+IE1NQ19FWFRfQ1NEX1BXUl9DTF81Ml9QT1MpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRlUpOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgLyogRmllbGQgUFdSX0NMXzI2X3h4eCBbMjAxIG9yIDIwM10gKi8KLSAgICAgIHN1cHBvcnRlZF9wd3JfY2xhc3MgPSAoKGhtbWMtPkV4dF9DU0RbKE1NQ19FWFRfQ1NEX1BXUl9DTF8yNl9JTkRFWC80KV0gPj4gTU1DX0VYVF9DU0RfUFdSX0NMXzI2X1BPUykgJiAweDAwMDAwMEZGVSk7CisgICAgICBzdXBwb3J0ZWRfcHdyX2NsYXNzID0gKChobW1jLT5FeHRfQ1NEWyhNTUNfRVhUX0NTRF9QV1JfQ0xfMjZfSU5ERVggLyA0KV0gPj4gTU1DX0VYVF9DU0RfUFdSX0NMXzI2X1BPUykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGVSk7CiAgICAgfQogCi0gICAgaWYoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgaWYgKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKQogICAgIHsKLSAgICAgIGlmKFdpZGUgPT0gU0RNTUNfQlVTX1dJREVfOEIpCisgICAgICBpZiAoV2lkZSA9PSBTRE1NQ19CVVNfV0lERV84QikKICAgICAgIHsKLSAgICAgICAgLyogQml0IFs3OjRdIDogcG93ZXIgY2xhc3MgZm9yIDgtYml0cyBidXMgY29uZmlndXJhdGlvbiAtIEJpdCBbMzowXSA6IHBvd2VyIGNsYXNzIGZvciA0LWJpdHMgYnVzIGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgLyogQml0IFs3OjRdOiBwb3dlciBjbGFzcyBmb3IgOC1iaXRzIGJ1cyBjb25maWd1cmF0aW9uIC0gQml0IFszOjBdOiBwb3dlciBjbGFzcyBmb3IgNC1iaXRzIGJ1cyBjb25maWd1cmF0aW9uICovCiAgICAgICAgIHN1cHBvcnRlZF9wd3JfY2xhc3MgPSAoc3VwcG9ydGVkX3B3cl9jbGFzcyA+PiA0VSk7CiAgICAgICB9CiAKQEAgLTM2MjYsMTQgKzM4MDcsMTQgQEAKICAgICAgICAgLyogTmVlZCB0byBjaGFuZ2UgY3VycmVudCBwb3dlciBjbGFzcyAqLwogICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3dpdGNoKGhtbWMtPkluc3RhbmNlLCAoMHgwM0JCMDAwMFUgfCAoKHN1cHBvcnRlZF9wd3JfY2xhc3MgJiAweDBGVSkgPDwgOFUpKSk7CiAKLSAgICAgICAgaWYoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgICAgIGlmIChlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICAgICAgewogICAgICAgICAgIC8qIFdoaWxlIGNhcmQgaXMgbm90IHJlYWR5IGZvciBkYXRhIGFuZCB0cmlhbCBudW1iZXIgZm9yIHNlbmRpbmcgQ01EMTMgaXMgbm90IGV4Y2VlZGVkICovCiAgICAgICAgICAgY291bnQgPSBTRE1NQ19NQVhfVFJJQUw7CiAgICAgICAgICAgZG8KICAgICAgICAgICB7CiAgICAgICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU2VuZFN0YXR1cyhobW1jLT5JbnN0YW5jZSwgKHVpbnQzMl90KSgoKHVpbnQzMl90KWhtbWMtPk1tY0NhcmQuUmVsQ2FyZEFkZCkgPDwgMTZVKSk7Ci0gICAgICAgICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICAgICAgICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zNjQxLDcgKzM4MjIsNyBAQAogICAgICAgICAgICAgLyogR2V0IGNvbW1hbmQgcmVzcG9uc2UgKi8KICAgICAgICAgICAgIHJlc3BvbnNlID0gU0RNTUNfR2V0UmVzcG9uc2UoaG1tYy0+SW5zdGFuY2UsIFNETU1DX1JFU1AxKTsKICAgICAgICAgICAgIGNvdW50LS07Ci0gICAgICAgICAgfXdoaWxlKCgocmVzcG9uc2UgJiAweDEwMFUpID09IDBVKSAmJiAoY291bnQgIT0gMFUpKTsKKyAgICAgICAgICB9IHdoaWxlICgoKHJlc3BvbnNlICYgMHgxMDBVKSA9PSAwVSkgJiYgKGNvdW50ICE9IDBVKSk7CiAKICAgICAgICAgICAvKiBDaGVjayB0aGUgc3RhdHVzIGFmdGVyIHRoZSBzd2l0Y2ggY29tbWFuZCBleGVjdXRpb24gKi8KICAgICAgICAgICBpZiAoKGNvdW50ICE9IDBVKSAmJiAoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpKQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDV4eF9oYWxfbW1jX2V4LmMgYi9TcmMvc3RtMzJsNXh4X2hhbF9tbWNfZXguYwppbmRleCBiOGZkOGYyLi4wZjQwMjkxIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNXh4X2hhbF9tbWNfZXguYworKysgYi9TcmMvc3RtMzJsNXh4X2hhbF9tbWNfZXguYwpAQCAtMTUsNyArMTUsOCBAQAogICAgVGhlIE1NQyBFeHRlbnNpb24gSEFMIGRyaXZlciBjYW4gYmUgdXNlZCBhcyBmb2xsb3dzOgogICAgKCspIENvbmZpZ3VyZSBCdWZmZXIwIGFuZCBCdWZmZXIxIHN0YXJ0IGFkZHJlc3MgYW5kIEJ1ZmZlciBzaXplIHVzaW5nIEhBTF9NTUNFeF9Db25maWdETUFNdWx0aUJ1ZmZlcigpIGZ1bmN0aW9uLgogCi0gICAoKykgU3RhcnQgUmVhZCBhbmQgV3JpdGUgZm9yIG11bHRpYnVmZmVyIG1vZGUgdXNpbmcgSEFMX01NQ0V4X1JlYWRCbG9ja3NETUFNdWx0aUJ1ZmZlcigpIGFuZCBIQUxfTU1DRXhfV3JpdGVCbG9ja3NETUFNdWx0aUJ1ZmZlcigpIGZ1bmN0aW9ucy4KKyAgICgrKSBTdGFydCBSZWFkIGFuZCBXcml0ZSBmb3IgbXVsdGlidWZmZXIgbW9kZSB1c2luZyBIQUxfTU1DRXhfUmVhZEJsb2Nrc0RNQU11bHRpQnVmZmVyKCkgYW5kCisgICAgICAgSEFMX01NQ0V4X1dyaXRlQmxvY2tzRE1BTXVsdGlCdWZmZXIoKSBmdW5jdGlvbnMuCiAKICAgQGVuZHZlcmJhdGltCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjAsOCArNjEsOCBAQAogCiAKIC8qKiBAYWRkdG9ncm91cCBNTUNFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxCi0gKiAgQGJyaWVmICAgTXVsdGlidWZmZXIgZnVuY3Rpb25zCi0gKgorICAqICBAYnJpZWYgICBNdWx0aWJ1ZmZlciBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICMjIyMjIE11bHRpYnVmZmVyIGZ1bmN0aW9ucyAjIyMjIwpAQCAtODIsMTMgKzgzLDE0IEBACiAgICogQHBhcmFtICBCdWZmZXJTaXplOiBTaXplIG9mIEJ1ZmZlcjAgaW4gQmxvY2tzLiBCdWZmZXIwIGFuZCBCdWZmZXIxIG11c3QgaGF2ZSB0aGUgc2FtZSBzaXplLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ0V4X0NvbmZpZ0RNQU11bHRpQnVmZmVyKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50MzJfdCAqIHBEYXRhQnVmZmVyMCwgdWludDMyX3QgKiBwRGF0YUJ1ZmZlcjEsIHVpbnQzMl90IEJ1ZmZlclNpemUpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DRXhfQ29uZmlnRE1BTXVsdGlCdWZmZXIoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQzMl90ICpwRGF0YUJ1ZmZlcjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnBEYXRhQnVmZmVyMSwgdWludDMyX3QgQnVmZmVyU2l6ZSkKIHsKLSAgaWYoaG1tYy0+U3RhdGUgPT0gSEFMX01NQ19TVEFURV9SRUFEWSkKKyAgaWYgKGhtbWMtPlN0YXRlID09IEhBTF9NTUNfU1RBVEVfUkVBRFkpCiAgIHsKLSAgICBobW1jLT5JbnN0YW5jZS0+SURNQUJBU0UwPSAodWludDMyX3QpIHBEYXRhQnVmZmVyMCA7Ci0gICAgaG1tYy0+SW5zdGFuY2UtPklETUFCQVNFMT0gKHVpbnQzMl90KSBwRGF0YUJ1ZmZlcjEgOwotICAgIGhtbWMtPkluc3RhbmNlLT5JRE1BQlNJWkU9ICh1aW50MzJfdCkgKE1NQ19CTE9DS1NJWkUgKiBCdWZmZXJTaXplKTsKKyAgICBobW1jLT5JbnN0YW5jZS0+SURNQUJBU0UwID0gKHVpbnQzMl90KSBwRGF0YUJ1ZmZlcjAgOworICAgIGhtbWMtPkluc3RhbmNlLT5JRE1BQkFTRTEgPSAodWludDMyX3QpIHBEYXRhQnVmZmVyMSA7CisgICAgaG1tYy0+SW5zdGFuY2UtPklETUFCU0laRSA9ICh1aW50MzJfdCkoTU1DX0JMT0NLU0laRSAqIEJ1ZmZlclNpemUpOwogCiAgICAgcmV0dXJuIEhBTF9PSzsKICAgfQpAQCAtMTAwLDI3ICsxMDIsNDggQEAKIAogLyoqCiAgICogQGJyaWVmICBSZWFkcyBibG9jayhzKSBmcm9tIGEgc3BlY2lmaWVkIGFkZHJlc3MgaW4gYSBjYXJkLiBUaGUgcmVjZWl2ZWQgRGF0YSB3aWxsIGJlIHN0b3JlZCBpbiBCdWZmZXIwIGFuZCBCdWZmZXIxLgotICAqICAgICAgICAgQnVmZmVyMCwgQnVmZmVyMSBhbmQgQnVmZmVyU2l6ZSBuZWVkIHRvIGJlIGNvbmZpZ3VyZWQgYnkgZnVuY3Rpb24gSEFMX01NQ0V4X0NvbmZpZ0RNQU11bHRpQnVmZmVyIGJlZm9yZSBjYWxsIHRoaXMgZnVuY3Rpb24uCisgICogICAgICAgICBCdWZmZXIwLCBCdWZmZXIxIGFuZCBCdWZmZXJTaXplIG5lZWQgdG8gYmUgY29uZmlndXJlZCBieSBmdW5jdGlvbiBIQUxfTU1DRXhfQ29uZmlnRE1BTXVsdGlCdWZmZXIgYmVmb3JlCisgICogICAgICAgICBjYWxsIHRoaXMgZnVuY3Rpb24uCiAgICogQHBhcmFtICBobW1jOiBNTUMgaGFuZGxlCiAgICogQHBhcmFtICBCbG9ja0FkZDogQmxvY2sgQWRkcmVzcyBmcm9tIHdoZXJlIGRhdGEgaXMgdG8gYmUgcmVhZAogICAqIEBwYXJhbSAgTnVtYmVyT2ZCbG9ja3M6IFRvdGFsIG51bWJlciBvZiBibG9ja3MgdG8gcmVhZAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ0V4X1JlYWRCbG9ja3NETUFNdWx0aUJ1ZmZlcihNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDMyX3QgQmxvY2tBZGQsIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ0V4X1JlYWRCbG9ja3NETUFNdWx0aUJ1ZmZlcihNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDMyX3QgQmxvY2tBZGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKQogewogICBTRE1NQ19EYXRhSW5pdFR5cGVEZWYgY29uZmlnOwotICB1aW50MzJfdCBEbWFCYXNlMF9yZWcsIERtYUJhc2UxX3JlZzsKKyAgdWludDMyX3QgRG1hQmFzZTBfcmVnOworICB1aW50MzJfdCBEbWFCYXNlMV9yZWc7CiAgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIHVpbnQzMl90IGFkZCA9IEJsb2NrQWRkOwogCi0gIGlmKGhtbWMtPlN0YXRlID09IEhBTF9NTUNfU1RBVEVfUkVBRFkpCisgIGlmIChobW1jLT5TdGF0ZSA9PSBIQUxfTU1DX1NUQVRFX1JFQURZKQogICB7Ci0gICAgaWYoKEJsb2NrQWRkICsgTnVtYmVyT2ZCbG9ja3MpID4gKGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tOYnIpKQorICAgIGlmICgoQmxvY2tBZGQgKyBOdW1iZXJPZkJsb2NrcykgPiAoaG1tYy0+TW1jQ2FyZC5Mb2dCbG9ja05icikpCiAgICAgewogICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfQUREUl9PVVRfT0ZfUkFOR0U7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KIAorICAgIC8qIENoZWNrIHRoZSBjYXNlIG9mIDRrQiBibG9ja3MgKGZpZWxkIERBVEEgU0VDVE9SIFNJWkUgb2YgZXh0ZW5kZWQgQ1NEIHJlZ2lzdGVyKSAqLworICAgIGlmICgoKGhtbWMtPkV4dF9DU0RbKE1NQ19FWFRfQ1NEX0RBVEFfU0VDX1NJWkVfSU5ERVggLyA0KV0gPj4gTU1DX0VYVF9DU0RfREFUQV9TRUNfU0laRV9QT1MpICYgMHgwMDAwMDBGRlUpICE9IDB4MFUpCisgICAgeworICAgICAgaWYgKChOdW1iZXJPZkJsb2NrcyAlIDhVKSAhPSAwVSkKKyAgICAgIHsKKyAgICAgICAgLyogVGhlIG51bWJlciBvZiBibG9ja3Mgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgOCBzZWN0b3JzIG9mIDUxMiBieXRlcyA9IDQgS0J5dGVzICovCisgICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0JMT0NLX0xFTl9FUlI7CisgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICB9CisKKyAgICAgIGlmICgoQmxvY2tBZGQgJSA4VSkgIT0gMFUpCisgICAgICB7CisgICAgICAgIC8qIFRoZSBhZGRyZXNzIHNob3VsZCBiZSBhbGlnbmVkIHRvIDggKGNvcnJlc3BvbmRpbmcgdG8gNCBLQnl0ZXMgYmxvY2tzKSAqLworICAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9BRERSX01JU0FMSUdORUQ7CisgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICB9CisgICAgfQorCiAgICAgRG1hQmFzZTBfcmVnID0gaG1tYy0+SW5zdGFuY2UtPklETUFCQVNFMDsKICAgICBEbWFCYXNlMV9yZWcgPSBobW1jLT5JbnN0YW5jZS0+SURNQUJBU0UxOwogCkBAIC0xNTIsNyArMTc1LDcgQEAKIAogICAgIGhtbWMtPkluc3RhbmNlLT5EQ1RSTCB8PSBTRE1NQ19EQ1RSTF9GSUZPUlNUOwogCi0gICAgX19TRE1NQ19DTURUUkFOU19FTkFCTEUoIGhtbWMtPkluc3RhbmNlKTsKKyAgICBfX1NETU1DX0NNRFRSQU5TX0VOQUJMRShobW1jLT5JbnN0YW5jZSk7CiAKICAgICBobW1jLT5JbnN0YW5jZS0+SURNQUNUUkwgPSBTRE1NQ19FTkFCTEVfSURNQV9ET1VCTEVfQlVGRjA7CiAKQEAgLTE2MSwxNCArMTg0LDE1IEBACiAKICAgICAvKiBSZWFkIE11bHRpIEJsb2NrIGNvbW1hbmQgKi8KICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kUmVhZE11bHRpQmxvY2soaG1tYy0+SW5zdGFuY2UsIGFkZCk7Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQogICAgIHsKICAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CiAKLSAgICBfX0hBTF9NTUNfRU5BQkxFX0lUKGhtbWMsIChTRE1NQ19JVF9EQ1JDRkFJTCB8IFNETU1DX0lUX0RUSU1FT1VUIHwgU0RNTUNfSVRfUlhPVkVSUiB8IFNETU1DX0lUX0RBVEFFTkQgfCBTRE1NQ19GTEFHX0lETUFURSB8IFNETU1DX0ZMQUdfSURNQUJUQykpOworICAgIF9fSEFMX01NQ19FTkFCTEVfSVQoaG1tYywgKFNETU1DX0lUX0RDUkNGQUlMIHwgU0RNTUNfSVRfRFRJTUVPVVQgfCBTRE1NQ19JVF9SWE9WRVJSIHwgU0RNTUNfSVRfREFUQUVORCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfRkxBR19JRE1BVEUgfCBTRE1NQ19GTEFHX0lETUFCVEMpKTsKIAogICAgIHJldHVybiBIQUxfT0s7CiAgIH0KQEAgLTE4MSwyNyArMjA1LDQ4IEBACiAKIC8qKgogICAqIEBicmllZiAgV3JpdGUgYmxvY2socykgdG8gYSBzcGVjaWZpZWQgYWRkcmVzcyBpbiBhIGNhcmQuIFRoZSB0cmFuc2ZlcnJlZCBEYXRhIGFyZSBzdG9yZWQgaW4gQnVmZmVyMCBhbmQgQnVmZmVyMS4KLSAgKiAgICAgICAgIEJ1ZmZlcjAsIEJ1ZmZlcjEgYW5kIEJ1ZmZlclNpemUgbmVlZCB0byBiZSBjb25maWd1cmVkIGJ5IGZ1bmN0aW9uIEhBTF9NTUNFeF9Db25maWdETUFNdWx0aUJ1ZmZlciBiZWZvcmUgY2FsbCB0aGlzIGZ1bmN0aW9uLgorICAqICAgICAgICAgQnVmZmVyMCwgQnVmZmVyMSBhbmQgQnVmZmVyU2l6ZSBuZWVkIHRvIGJlIGNvbmZpZ3VyZWQgYnkgZnVuY3Rpb24gSEFMX01NQ0V4X0NvbmZpZ0RNQU11bHRpQnVmZmVyIGJlZm9yZQorICAqICAgICAgICAgY2FsbCB0aGlzIGZ1bmN0aW9uLgogICAqIEBwYXJhbSAgaG1tYzogTU1DIGhhbmRsZQogICAqIEBwYXJhbSAgQmxvY2tBZGQ6IEJsb2NrIEFkZHJlc3MgZnJvbSB3aGVyZSBkYXRhIGlzIHRvIGJlIHJlYWQKICAgKiBAcGFyYW0gIE51bWJlck9mQmxvY2tzOiBUb3RhbCBudW1iZXIgb2YgYmxvY2tzIHRvIHJlYWQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKLSovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DRXhfV3JpdGVCbG9ja3NETUFNdWx0aUJ1ZmZlcihNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDMyX3QgQmxvY2tBZGQsIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKQorICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ0V4X1dyaXRlQmxvY2tzRE1BTXVsdGlCdWZmZXIoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQzMl90IEJsb2NrQWRkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MpCiB7CiAgIFNETU1DX0RhdGFJbml0VHlwZURlZiBjb25maWc7CiAgIHVpbnQzMl90IGVycm9yc3RhdGU7Ci0gIHVpbnQzMl90IERtYUJhc2UwX3JlZywgRG1hQmFzZTFfcmVnOworICB1aW50MzJfdCBEbWFCYXNlMF9yZWc7CisgIHVpbnQzMl90IERtYUJhc2UxX3JlZzsKICAgdWludDMyX3QgYWRkID0gQmxvY2tBZGQ7CiAKLSAgaWYoaG1tYy0+U3RhdGUgPT0gSEFMX01NQ19TVEFURV9SRUFEWSkKKyAgaWYgKGhtbWMtPlN0YXRlID09IEhBTF9NTUNfU1RBVEVfUkVBRFkpCiAgIHsKLSAgICBpZigoQmxvY2tBZGQgKyBOdW1iZXJPZkJsb2NrcykgPiAoaG1tYy0+TW1jQ2FyZC5Mb2dCbG9ja05icikpCisgICAgaWYgKChCbG9ja0FkZCArIE51bWJlck9mQmxvY2tzKSA+IChobW1jLT5NbWNDYXJkLkxvZ0Jsb2NrTmJyKSkKICAgICB7CiAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9BRERSX09VVF9PRl9SQU5HRTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogCisgICAgLyogQ2hlY2sgdGhlIGNhc2Ugb2YgNGtCIGJsb2NrcyAoZmllbGQgREFUQSBTRUNUT1IgU0laRSBvZiBleHRlbmRlZCBDU0QgcmVnaXN0ZXIpICovCisgICAgaWYgKCgoaG1tYy0+RXh0X0NTRFsoTU1DX0VYVF9DU0RfREFUQV9TRUNfU0laRV9JTkRFWCAvIDQpXSA+PiBNTUNfRVhUX0NTRF9EQVRBX1NFQ19TSVpFX1BPUykgJiAweDAwMDAwMEZGVSkgIT0gMHgwVSkKKyAgICB7CisgICAgICBpZiAoKE51bWJlck9mQmxvY2tzICUgOFUpICE9IDBVKQorICAgICAgeworICAgICAgICAvKiBUaGUgbnVtYmVyIG9mIGJsb2NrcyBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiA4IHNlY3RvcnMgb2YgNTEyIGJ5dGVzID0gNCBLQnl0ZXMgKi8KKyAgICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfQkxPQ0tfTEVOX0VSUjsKKyAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIH0KKworICAgICAgaWYgKChCbG9ja0FkZCAlIDhVKSAhPSAwVSkKKyAgICAgIHsKKyAgICAgICAgLyogVGhlIGFkZHJlc3Mgc2hvdWxkIGJlIGFsaWduZWQgdG8gOCAoY29ycmVzcG9uZGluZyB0byA0IEtCeXRlcyBibG9ja3MpICovCisgICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0FERFJfTUlTQUxJR05FRDsKKyAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIH0KKyAgICB9CisKICAgICBEbWFCYXNlMF9yZWcgPSBobW1jLT5JbnN0YW5jZS0+SURNQUJBU0UwOwogICAgIERtYUJhc2UxX3JlZyA9IGhtbWMtPkluc3RhbmNlLT5JRE1BQkFTRTE7CiAKQEAgLTIzMiw3ICsyNzcsNyBAQAogICAgIGNvbmZpZy5EUFNNICAgICAgICAgID0gU0RNTUNfRFBTTV9ESVNBQkxFOwogICAgICh2b2lkKVNETU1DX0NvbmZpZ0RhdGEoaG1tYy0+SW5zdGFuY2UsICZjb25maWcpOwogCi0gICAgX19TRE1NQ19DTURUUkFOU19FTkFCTEUoIGhtbWMtPkluc3RhbmNlKTsKKyAgICBfX1NETU1DX0NNRFRSQU5TX0VOQUJMRShobW1jLT5JbnN0YW5jZSk7CiAKICAgICBobW1jLT5JbnN0YW5jZS0+SURNQUNUUkwgPSBTRE1NQ19FTkFCTEVfSURNQV9ET1VCTEVfQlVGRjA7CiAKQEAgLTI0MSwxNCArMjg2LDE1IEBACiAKICAgICAvKiBXcml0ZSBNdWx0aSBCbG9jayBjb21tYW5kICovCiAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFdyaXRlTXVsdGlCbG9jayhobW1jLT5JbnN0YW5jZSwgYWRkKTsKLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwogICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KIAotICAgIF9fSEFMX01NQ19FTkFCTEVfSVQoaG1tYywgKFNETU1DX0lUX0RDUkNGQUlMIHwgU0RNTUNfSVRfRFRJTUVPVVQgfCBTRE1NQ19JVF9UWFVOREVSUiB8IFNETU1DX0lUX0RBVEFFTkQgfCBTRE1NQ19GTEFHX0lETUFURSB8IFNETU1DX0ZMQUdfSURNQUJUQykpOworICAgIF9fSEFMX01NQ19FTkFCTEVfSVQoaG1tYywgKFNETU1DX0lUX0RDUkNGQUlMIHwgU0RNTUNfSVRfRFRJTUVPVVQgfCBTRE1NQ19JVF9UWFVOREVSUiB8IFNETU1DX0lUX0RBVEFFTkQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNETU1DX0ZMQUdfSURNQVRFIHwgU0RNTUNfRkxBR19JRE1BQlRDKSk7CiAKICAgICByZXR1cm4gSEFMX09LOwogICB9CkBAIC0yNzAsOSArMzE2LDEwIEBACiAgICogICAgICAgICB0cmFuc2ZlciB1c2UgQlVGRkVSMC4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNFeF9DaGFuZ2VETUFCdWZmZXIoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIEhBTF9NTUNFeF9ETUFCdWZmZXJfTWVtb3J5VHlwZURlZiBCdWZmZXIsIHVpbnQzMl90ICpwRGF0YUJ1ZmZlcikKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNFeF9DaGFuZ2VETUFCdWZmZXIoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIEhBTF9NTUNFeF9ETUFCdWZmZXJfTWVtb3J5VHlwZURlZiBCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwRGF0YUJ1ZmZlcikKIHsKLSAgaWYoQnVmZmVyID09IE1NQ19ETUFfQlVGRkVSMCkKKyAgaWYgKEJ1ZmZlciA9PSBNTUNfRE1BX0JVRkZFUjApCiAgIHsKICAgICAvKiBjaGFuZ2UgdGhlIGJ1ZmZlcjAgYWRkcmVzcyAqLwogICAgIGhtbWMtPkluc3RhbmNlLT5JRE1BQkFTRTAgPSAodWludDMyX3QpcERhdGFCdWZmZXI7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNXh4X2hhbF9uYW5kLmMgYi9TcmMvc3RtMzJsNXh4X2hhbF9uYW5kLmMKaW5kZXggMTlhNWZiOC4uYTE2OWExOSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDV4eF9oYWxfbmFuZC5jCisrKyBiL1NyYy9zdG0zMmw1eHhfaGFsX25hbmQuYwpAQCAtMTgxLDcgKzE4MSw3IEBACiAjZWxzZQogICAgIC8qIEluaXRpYWxpemUgdGhlIGxvdyBsZXZlbCBoYXJkd2FyZSAoTVNQKSAqLwogICAgIEhBTF9OQU5EX01zcEluaXQoaG5hbmQpOwotI2VuZGlmCisjZW5kaWYgLyogKFVTRV9IQUxfTkFORF9SRUdJU1RFUl9DQUxMQkFDS1MpICovCiAgIH0KIAogICAvKiBJbml0aWFsaXplIE5BTkQgY29udHJvbCBJbnRlcmZhY2UgKi8KQEAgLTIyMSw3ICsyMjEsNyBAQAogI2Vsc2UKICAgLyogSW5pdGlhbGl6ZSB0aGUgbG93IGxldmVsIGhhcmR3YXJlIChNU1ApICovCiAgIEhBTF9OQU5EX01zcERlSW5pdChobmFuZCk7Ci0jZW5kaWYKKyNlbmRpZiAvKiAoVVNFX0hBTF9OQU5EX1JFR0lTVEVSX0NBTExCQUNLUykgKi8KIAogICAvKiBDb25maWd1cmUgdGhlIE5BTkQgcmVnaXN0ZXJzIHdpdGggdGhlaXIgcmVzZXQgdmFsdWVzICovCiAgICh2b2lkKUZNQ19OQU5EX0RlSW5pdChobmFuZC0+SW5zdGFuY2UsIGhuYW5kLT5Jbml0Lk5hbmRCYW5rKTsKQEAgLTI4NCw3ICsyODQsNyBAQAogICAgIGhuYW5kLT5JdENhbGxiYWNrKGhuYW5kKTsKICNlbHNlCiAgICAgSEFMX05BTkRfSVRDYWxsYmFjayhobmFuZCk7Ci0jZW5kaWYKKyNlbmRpZiAvKiAoVVNFX0hBTF9OQU5EX1JFR0lTVEVSX0NBTExCQUNLUykgKi8KIAogICAgIC8qIENsZWFyIE5BTkQgaW50ZXJydXB0IFJpc2luZyBlZGdlIHBlbmRpbmcgYml0ICovCiAgICAgX19GTUNfTkFORF9DTEVBUl9GTEFHKGhuYW5kLT5JbnN0YW5jZSwgRk1DX0ZMQUdfUklTSU5HX0VER0UpOwpAQCAtMjk4LDcgKzI5OCw3IEBACiAgICAgaG5hbmQtPkl0Q2FsbGJhY2soaG5hbmQpOwogI2Vsc2UKICAgICBIQUxfTkFORF9JVENhbGxiYWNrKGhuYW5kKTsKLSNlbmRpZgorI2VuZGlmIC8qIChVU0VfSEFMX05BTkRfUkVHSVNURVJfQ0FMTEJBQ0tTKSAqLwogCiAgICAgLyogQ2xlYXIgTkFORCBpbnRlcnJ1cHQgTGV2ZWwgcGVuZGluZyBiaXQgKi8KICAgICBfX0ZNQ19OQU5EX0NMRUFSX0ZMQUcoaG5hbmQtPkluc3RhbmNlLCBGTUNfRkxBR19MRVZFTCk7CkBAIC0zMTIsNyArMzEyLDcgQEAKICAgICBobmFuZC0+SXRDYWxsYmFjayhobmFuZCk7CiAjZWxzZQogICAgIEhBTF9OQU5EX0lUQ2FsbGJhY2soaG5hbmQpOwotI2VuZGlmCisjZW5kaWYgLyogKFVTRV9IQUxfTkFORF9SRUdJU1RFUl9DQUxMQkFDS1MpICovCiAKICAgICAvKiBDbGVhciBOQU5EIGludGVycnVwdCBGYWxsaW5nIGVkZ2UgcGVuZGluZyBiaXQgKi8KICAgICBfX0ZNQ19OQU5EX0NMRUFSX0ZMQUcoaG5hbmQtPkluc3RhbmNlLCBGTUNfRkxBR19GQUxMSU5HX0VER0UpOwpAQCAtMzI2LDcgKzMyNiw3IEBACiAgICAgaG5hbmQtPkl0Q2FsbGJhY2soaG5hbmQpOwogI2Vsc2UKICAgICBIQUxfTkFORF9JVENhbGxiYWNrKGhuYW5kKTsKLSNlbmRpZgorI2VuZGlmIC8qIChVU0VfSEFMX05BTkRfUkVHSVNURVJfQ0FMTEJBQ0tTKSAqLwogCiAgICAgLyogQ2xlYXIgTkFORCBpbnRlcnJ1cHQgRklGTyBlbXB0eSBwZW5kaW5nIGJpdCAqLwogICAgIF9fRk1DX05BTkRfQ0xFQVJfRkxBRyhobmFuZC0+SW5zdGFuY2UsIEZNQ19GTEFHX0ZFTVBUKTsKQEAgLTM4MCw3ICszODAsNyBAQAogewogICBfX0lPIHVpbnQzMl90IGRhdGEgPSAwOwogICBfX0lPIHVpbnQzMl90IGRhdGExID0gMDsKLSAgdWludDMyX3QgZGV2aWNlQWRkcmVzczsKKyAgdWludDMyX3QgZGV2aWNlYWRkcmVzczsKIAogICAvKiBDaGVjayB0aGUgTkFORCBjb250cm9sbGVyIHN0YXRlICovCiAgIGlmIChobmFuZC0+U3RhdGUgPT0gSEFMX05BTkRfU1RBVEVfQlVTWSkKQEAgLTM5NiwxOCArMzk2LDE4IEBACiAgICAgaG5hbmQtPlN0YXRlID0gSEFMX05BTkRfU1RBVEVfQlVTWTsKIAogICAgIC8qIElkZW50aWZ5IHRoZSBkZXZpY2UgYWRkcmVzcyAqLwotICAgIGRldmljZUFkZHJlc3MgPSBOQU5EX0RFVklDRTsKKyAgICBkZXZpY2VhZGRyZXNzID0gTkFORF9ERVZJQ0U7CiAKICAgICAvKiBTZW5kIFJlYWQgSUQgY29tbWFuZCBzZXF1ZW5jZSAqLwotICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IENNRF9BUkVBKSkgID0gTkFORF9DTURfUkVBRElEOworICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IENNRF9BUkVBKSkgID0gTkFORF9DTURfUkVBRElEOwogICAgIF9fRFNCKCk7Ci0gICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwOworICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gMHgwMDsKICAgICBfX0RTQigpOwogCiAgICAgLyogUmVhZCB0aGUgZWxlY3Ryb25pYyBzaWduYXR1cmUgZnJvbSBOQU5EIGZsYXNoICovCiAgICAgaWYgKGhuYW5kLT5Jbml0Lk1lbW9yeURhdGFXaWR0aCA9PSBGTUNfTkFORF9NRU1fQlVTX1dJRFRIXzgpCiAgICAgewotICAgICAgZGF0YSA9ICooX19JTyB1aW50MzJfdCAqKWRldmljZUFkZHJlc3M7CisgICAgICBkYXRhID0gKihfX0lPIHVpbnQzMl90ICopZGV2aWNlYWRkcmVzczsKIAogICAgICAgLyogUmV0dXJuIHRoZSBkYXRhIHJlYWQgKi8KICAgICAgIHBOQU5EX0lELT5NYWtlcl9JZCAgID0gQUREUl8xU1RfQ1lDTEUoZGF0YSk7CkBAIC00MTcsOCArNDE3LDggQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIGRhdGEgPSAqKF9fSU8gdWludDMyX3QgKilkZXZpY2VBZGRyZXNzOwotICAgICAgZGF0YTEgPSAqKChfX0lPIHVpbnQzMl90ICopZGV2aWNlQWRkcmVzcyArIDQpOworICAgICAgZGF0YSA9ICooX19JTyB1aW50MzJfdCAqKWRldmljZWFkZHJlc3M7CisgICAgICBkYXRhMSA9ICooKF9fSU8gdWludDMyX3QgKilkZXZpY2VhZGRyZXNzICsgNCk7CiAKICAgICAgIC8qIFJldHVybiB0aGUgZGF0YSByZWFkICovCiAgICAgICBwTkFORF9JRC0+TWFrZXJfSWQgICA9IEFERFJfMVNUX0NZQ0xFKGRhdGEpOwpAQCAtNDQ5LDcgKzQ0OSw3IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9SZXNldChOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kKQogewotICB1aW50MzJfdCBkZXZpY2VBZGRyZXNzOworICB1aW50MzJfdCBkZXZpY2VhZGRyZXNzOwogCiAgIC8qIENoZWNrIHRoZSBOQU5EIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgaWYgKGhuYW5kLT5TdGF0ZSA9PSBIQUxfTkFORF9TVEFURV9CVVNZKQpAQCAtNDY1LDEwICs0NjUsMTAgQEAKICAgICBobmFuZC0+U3RhdGUgPSBIQUxfTkFORF9TVEFURV9CVVNZOwogCiAgICAgLyogSWRlbnRpZnkgdGhlIGRldmljZSBhZGRyZXNzICovCi0gICAgZGV2aWNlQWRkcmVzcyA9IE5BTkRfREVWSUNFOworICAgIGRldmljZWFkZHJlc3MgPSBOQU5EX0RFVklDRTsKIAogICAgIC8qIFNlbmQgTkFORCByZXNldCBjb21tYW5kICovCi0gICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQ01EX0FSRUEpKSA9IDB4RkY7CisgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQ01EX0FSRUEpKSA9IDB4RkY7CiAKICAgICAvKiBVcGRhdGUgdGhlIE5BTkQgY29udHJvbGxlciBzdGF0ZSAqLwogICAgIGhuYW5kLT5TdGF0ZSA9IEhBTF9OQU5EX1NUQVRFX1JFQURZOwpAQCAtNTE5LDcgKzUxOSwxMCBAQAogewogICB1aW50MzJfdCBpbmRleDsKICAgdWludDMyX3QgdGlja3N0YXJ0OwotICB1aW50MzJfdCBkZXZpY2VBZGRyZXNzLCBudW1QYWdlc1JlYWQgPSAwVSwgbmFuZEFkZHJlc3MsIG5icGFnZXMgPSBOdW1QYWdlVG9SZWFkOworICB1aW50MzJfdCBkZXZpY2VhZGRyZXNzOworICB1aW50MzJfdCBudW1wYWdlc3JlYWQgPSAwVTsKKyAgdWludDMyX3QgbmFuZGFkZHJlc3M7CisgIHVpbnQzMl90IG5icGFnZXMgPSBOdW1QYWdlVG9SZWFkOwogICB1aW50OF90ICpidWZmID0gcEJ1ZmZlcjsKIAogICAvKiBDaGVjayB0aGUgTkFORCBjb250cm9sbGVyIHN0YXRlICovCkBAIC01MzYsMTYgKzUzOSwxNiBAQAogICAgIGhuYW5kLT5TdGF0ZSA9IEhBTF9OQU5EX1NUQVRFX0JVU1k7CiAKICAgICAvKiBJZGVudGlmeSB0aGUgZGV2aWNlIGFkZHJlc3MgKi8KLSAgICBkZXZpY2VBZGRyZXNzID0gTkFORF9ERVZJQ0U7CisgICAgZGV2aWNlYWRkcmVzcyA9IE5BTkRfREVWSUNFOwogCiAgICAgLyogTkFORCByYXcgYWRkcmVzcyBjYWxjdWxhdGlvbiAqLwotICAgIG5hbmRBZGRyZXNzID0gQVJSQVlfQUREUkVTUyhwQWRkcmVzcywgaG5hbmQpOworICAgIG5hbmRhZGRyZXNzID0gQVJSQVlfQUREUkVTUyhwQWRkcmVzcywgaG5hbmQpOwogCiAgICAgLyogUGFnZShzKSByZWFkIGxvb3AgKi8KLSAgICB3aGlsZSAoKG5icGFnZXMgIT0gMFUpICYmIChuYW5kQWRkcmVzcyA8ICgoaG5hbmQtPkNvbmZpZy5CbG9ja1NpemUpICogKGhuYW5kLT5Db25maWcuQmxvY2tOYnIpKSkpCisgICAgd2hpbGUgKChuYnBhZ2VzICE9IDBVKSAmJiAobmFuZGFkZHJlc3MgPCAoKGhuYW5kLT5Db25maWcuQmxvY2tTaXplKSAqIChobmFuZC0+Q29uZmlnLkJsb2NrTmJyKSkpKQogICAgIHsKICAgICAgIC8qIFNlbmQgcmVhZCBwYWdlIGNvbW1hbmQgc2VxdWVuY2UgKi8KLSAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IENNRF9BUkVBKSkgPSBOQU5EX0NNRF9BUkVBX0E7CisgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBDTURfQVJFQSkpID0gTkFORF9DTURfQVJFQV9BOwogICAgICAgX19EU0IoKTsKIAogICAgICAgLyogQ2FyZHMgd2l0aCBwYWdlIHNpemUgPD0gNTEyIGJ5dGVzICovCkBAIC01NTMsMjIgKzU1NiwyMiBAQAogICAgICAgewogICAgICAgICBpZiAoKChobmFuZC0+Q29uZmlnLkJsb2NrU2l6ZSkgKiAoaG5hbmQtPkNvbmZpZy5CbG9ja05icikpIDw9IDY1NTM1VSkKICAgICAgICAgewotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gMHgwMFU7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIC8qICgoaG5hbmQtPkNvbmZpZy5CbG9ja1NpemUpKihobmFuZC0+Q29uZmlnLkJsb2NrTmJyKSkgPiA2NTUzNSAqLwogICAgICAgICB7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8zUkRfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8zUkRfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTU3NiwzMSArNTc5LDMxIEBACiAgICAgICB7CiAgICAgICAgIGlmICgoKGhuYW5kLT5Db25maWcuQmxvY2tTaXplKSAqIChobmFuZC0+Q29uZmlnLkJsb2NrTmJyKSkgPD0gNjU1MzVVKQogICAgICAgICB7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgLyogKChobmFuZC0+Q29uZmlnLkJsb2NrU2l6ZSkqKGhuYW5kLT5Db25maWcuQmxvY2tOYnIpKSA+IDY1NTM1ICovCiAgICAgICAgIHsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gMHgwMFU7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gMHgwMFU7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMVNUX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMVNUX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8yTkRfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8yTkRfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzNSRF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzNSRF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKICAgICAgICAgfQogICAgICAgfQogCi0gICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBDTURfQVJFQSkpICA9IE5BTkRfQ01EX0FSRUFfVFJVRTE7CisgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBDTURfQVJFQSkpICA9IE5BTkRfQ01EX0FSRUFfVFJVRTE7CiAgICAgICBfX0RTQigpOwogCiAKQEAgLTYyNSwyNSArNjI4LDI1IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiBHbyBiYWNrIHRvIHJlYWQgbW9kZSAqLwotICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBDTURfQVJFQSkpID0gKCh1aW50OF90KTB4MDBVKTsKKyAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQ01EX0FSRUEpKSA9ICgodWludDhfdCkweDAwKTsKICAgICAgICAgX19EU0IoKTsKICAgICAgIH0KIAogICAgICAgLyogR2V0IERhdGEgaW50byBCdWZmZXIgKi8KICAgICAgIGZvciAoaW5kZXggPSAwVTsgaW5kZXggPCBobmFuZC0+Q29uZmlnLlBhZ2VTaXplOyBpbmRleCsrKQogICAgICAgewotICAgICAgICAqYnVmZiA9ICoodWludDhfdCAqKWRldmljZUFkZHJlc3M7CisgICAgICAgICpidWZmID0gKih1aW50OF90ICopZGV2aWNlYWRkcmVzczsKICAgICAgICAgYnVmZisrOwogICAgICAgfQogCiAgICAgICAvKiBJbmNyZW1lbnQgcmVhZCBwYWdlcyBudW1iZXIgKi8KLSAgICAgIG51bVBhZ2VzUmVhZCsrOworICAgICAgbnVtcGFnZXNyZWFkKys7CiAKICAgICAgIC8qIERlY3JlbWVudCBwYWdlcyB0byByZWFkICovCiAgICAgICBuYnBhZ2VzLS07CiAKICAgICAgIC8qIEluY3JlbWVudCB0aGUgTkFORCBhZGRyZXNzICovCi0gICAgICBuYW5kQWRkcmVzcyA9ICh1aW50MzJfdCkobmFuZEFkZHJlc3MgKyAxVSk7CisgICAgICBuYW5kYWRkcmVzcyA9ICh1aW50MzJfdCkobmFuZGFkZHJlc3MgKyAxVSk7CiAgICAgfQogCiAgICAgLyogVXBkYXRlIHRoZSBOQU5EIGNvbnRyb2xsZXIgc3RhdGUgKi8KQEAgLTY3NCw3ICs2NzcsMTAgQEAKIHsKICAgdWludDMyX3QgaW5kZXg7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKLSAgdWludDMyX3QgZGV2aWNlQWRkcmVzcywgbnVtUGFnZXNSZWFkID0gMCwgbmFuZEFkZHJlc3MsIG5icGFnZXMgPSBOdW1QYWdlVG9SZWFkOworICB1aW50MzJfdCBkZXZpY2VhZGRyZXNzOworICB1aW50MzJfdCBudW1wYWdlc3JlYWQgPSAwVTsKKyAgdWludDMyX3QgbmFuZGFkZHJlc3M7CisgIHVpbnQzMl90IG5icGFnZXMgPSBOdW1QYWdlVG9SZWFkOwogICB1aW50MTZfdCAqYnVmZiA9IHBCdWZmZXI7CiAKICAgLyogQ2hlY2sgdGhlIE5BTkQgY29udHJvbGxlciBzdGF0ZSAqLwpAQCAtNjkxLDE2ICs2OTcsMTYgQEAKICAgICBobmFuZC0+U3RhdGUgPSBIQUxfTkFORF9TVEFURV9CVVNZOwogCiAgICAgLyogSWRlbnRpZnkgdGhlIGRldmljZSBhZGRyZXNzICovCi0gICAgZGV2aWNlQWRkcmVzcyA9IE5BTkRfREVWSUNFOworICAgIGRldmljZWFkZHJlc3MgPSBOQU5EX0RFVklDRTsKIAogICAgIC8qIE5BTkQgcmF3IGFkZHJlc3MgY2FsY3VsYXRpb24gKi8KLSAgICBuYW5kQWRkcmVzcyA9IEFSUkFZX0FERFJFU1MocEFkZHJlc3MsIGhuYW5kKTsKKyAgICBuYW5kYWRkcmVzcyA9IEFSUkFZX0FERFJFU1MocEFkZHJlc3MsIGhuYW5kKTsKIAogICAgIC8qIFBhZ2UocykgcmVhZCBsb29wICovCi0gICAgd2hpbGUgKChuYnBhZ2VzICE9IDBVKSAmJiAobmFuZEFkZHJlc3MgPCAoKGhuYW5kLT5Db25maWcuQmxvY2tTaXplKSAqIChobmFuZC0+Q29uZmlnLkJsb2NrTmJyKSkpKQorICAgIHdoaWxlICgobmJwYWdlcyAhPSAwVSkgJiYgKG5hbmRhZGRyZXNzIDwgKChobmFuZC0+Q29uZmlnLkJsb2NrU2l6ZSkgKiAoaG5hbmQtPkNvbmZpZy5CbG9ja05icikpKSkKICAgICB7CiAgICAgICAvKiBTZW5kIHJlYWQgcGFnZSBjb21tYW5kIHNlcXVlbmNlICovCi0gICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBDTURfQVJFQSkpID0gTkFORF9DTURfQVJFQV9BOworICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQ01EX0FSRUEpKSA9IE5BTkRfQ01EX0FSRUFfQTsKICAgICAgIF9fRFNCKCk7CiAKICAgICAgIC8qIENhcmRzIHdpdGggcGFnZSBzaXplIDw9IDUxMiBieXRlcyAqLwpAQCAtNzA4LDIyICs3MTQsMjIgQEAKICAgICAgIHsKICAgICAgICAgaWYgKCgoaG5hbmQtPkNvbmZpZy5CbG9ja1NpemUpICogKGhuYW5kLT5Db25maWcuQmxvY2tOYnIpKSA8PSA2NTUzNVUpCiAgICAgICAgIHsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gMHgwMFU7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMVNUX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMVNUX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8yTkRfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8yTkRfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSAvKiAoKGhuYW5kLT5Db25maWcuQmxvY2tTaXplKSooaG5hbmQtPkNvbmZpZy5CbG9ja05icikpID4gNjU1MzUgKi8KICAgICAgICAgewotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gMHgwMFU7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfM1JEX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfM1JEX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwogICAgICAgICB9CiAgICAgICB9CkBAIC03MzEsMzEgKzczNywzMSBAQAogICAgICAgewogICAgICAgICBpZiAoKChobmFuZC0+Q29uZmlnLkJsb2NrU2l6ZSkgKiAoaG5hbmQtPkNvbmZpZy5CbG9ja05icikpIDw9IDY1NTM1VSkKICAgICAgICAgewotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gMHgwMFU7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gMHgwMFU7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIC8qICgoaG5hbmQtPkNvbmZpZy5CbG9ja1NpemUpKihobmFuZC0+Q29uZmlnLkJsb2NrTmJyKSkgPiA2NTUzNSAqLwogICAgICAgICB7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8zUkRfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8zUkRfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7CiAgICAgICAgIH0KICAgICAgIH0KIAotICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQ01EX0FSRUEpKSAgPSBOQU5EX0NNRF9BUkVBX1RSVUUxOworICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQ01EX0FSRUEpKSAgPSBOQU5EX0NNRF9BUkVBX1RSVUUxOwogICAgICAgX19EU0IoKTsKIAogICAgICAgaWYgKGhuYW5kLT5Db25maWcuRXh0cmFDb21tYW5kRW5hYmxlID09IEVOQUJMRSkKQEAgLTc3OSwyNSArNzg1LDM2IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiBHbyBiYWNrIHRvIHJlYWQgbW9kZSAqLwotICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBDTURfQVJFQSkpID0gKCh1aW50OF90KTB4MDBVKTsKKyAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQ01EX0FSRUEpKSA9ICgodWludDhfdCkweDAwKTsKICAgICAgICAgX19EU0IoKTsKICAgICAgIH0KIAorICAgICAgLyogQ2FsY3VsYXRlIFBhZ2VTaXplICovCisgICAgICBpZiAoaG5hbmQtPkluaXQuTWVtb3J5RGF0YVdpZHRoID09IEZNQ19OQU5EX01FTV9CVVNfV0lEVEhfOCkKKyAgICAgIHsKKyAgICAgICAgaG5hbmQtPkNvbmZpZy5QYWdlU2l6ZSA9IGhuYW5kLT5Db25maWcuUGFnZVNpemUgLyAyVTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogRG8gbm90aGluZyAqLworICAgICAgICAvKiBLZWVwIHRoZSBzYW1lIFBhZ2VTaXplIGZvciBGTUNfTkFORF9NRU1fQlVTX1dJRFRIXzE2Ki8KKyAgICAgIH0KKwogICAgICAgLyogR2V0IERhdGEgaW50byBCdWZmZXIgKi8KICAgICAgIGZvciAoaW5kZXggPSAwVTsgaW5kZXggPCBobmFuZC0+Q29uZmlnLlBhZ2VTaXplOyBpbmRleCsrKQogICAgICAgewotICAgICAgICAqYnVmZiA9ICoodWludDE2X3QgKilkZXZpY2VBZGRyZXNzOworICAgICAgICAqYnVmZiA9ICoodWludDE2X3QgKilkZXZpY2VhZGRyZXNzOwogICAgICAgICBidWZmKys7CiAgICAgICB9CiAKICAgICAgIC8qIEluY3JlbWVudCByZWFkIHBhZ2VzIG51bWJlciAqLwotICAgICAgbnVtUGFnZXNSZWFkKys7CisgICAgICBudW1wYWdlc3JlYWQrKzsKIAogICAgICAgLyogRGVjcmVtZW50IHBhZ2VzIHRvIHJlYWQgKi8KICAgICAgIG5icGFnZXMtLTsKIAogICAgICAgLyogSW5jcmVtZW50IHRoZSBOQU5EIGFkZHJlc3MgKi8KLSAgICAgIG5hbmRBZGRyZXNzID0gKHVpbnQzMl90KShuYW5kQWRkcmVzcyArIDFVKTsKKyAgICAgIG5hbmRhZGRyZXNzID0gKHVpbnQzMl90KShuYW5kYWRkcmVzcyArIDFVKTsKICAgICB9CiAKICAgICAvKiBVcGRhdGUgdGhlIE5BTkQgY29udHJvbGxlciBzdGF0ZSAqLwpAQCAtODI4LDcgKzg0NSwxMCBAQAogewogICB1aW50MzJfdCBpbmRleDsKICAgdWludDMyX3QgdGlja3N0YXJ0OwotICB1aW50MzJfdCBkZXZpY2VBZGRyZXNzLCBudW1QYWdlc1dyaXR0ZW4gPSAwLCBuYW5kQWRkcmVzcywgbmJwYWdlcyA9IE51bVBhZ2VUb1dyaXRlOworICB1aW50MzJfdCBkZXZpY2VhZGRyZXNzOworICB1aW50MzJfdCBudW1wYWdlc3dyaXR0ZW4gPSAwVTsKKyAgdWludDMyX3QgbmFuZGFkZHJlc3M7CisgIHVpbnQzMl90IG5icGFnZXMgPSBOdW1QYWdlVG9Xcml0ZTsKICAgdWludDhfdCAqYnVmZiA9IHBCdWZmZXI7CiAKICAgLyogQ2hlY2sgdGhlIE5BTkQgY29udHJvbGxlciBzdGF0ZSAqLwpAQCAtODQ1LDE4ICs4NjUsMTggQEAKICAgICBobmFuZC0+U3RhdGUgPSBIQUxfTkFORF9TVEFURV9CVVNZOwogCiAgICAgLyogSWRlbnRpZnkgdGhlIGRldmljZSBhZGRyZXNzICovCi0gICAgZGV2aWNlQWRkcmVzcyA9IE5BTkRfREVWSUNFOworICAgIGRldmljZWFkZHJlc3MgPSBOQU5EX0RFVklDRTsKIAogICAgIC8qIE5BTkQgcmF3IGFkZHJlc3MgY2FsY3VsYXRpb24gKi8KLSAgICBuYW5kQWRkcmVzcyA9IEFSUkFZX0FERFJFU1MocEFkZHJlc3MsIGhuYW5kKTsKKyAgICBuYW5kYWRkcmVzcyA9IEFSUkFZX0FERFJFU1MocEFkZHJlc3MsIGhuYW5kKTsKIAogICAgIC8qIFBhZ2Uocykgd3JpdGUgbG9vcCAqLwotICAgIHdoaWxlICgobmJwYWdlcyAhPSAwVSkgJiYgKG5hbmRBZGRyZXNzIDwgKChobmFuZC0+Q29uZmlnLkJsb2NrU2l6ZSkgKiAoaG5hbmQtPkNvbmZpZy5CbG9ja05icikpKSkKKyAgICB3aGlsZSAoKG5icGFnZXMgIT0gMFUpICYmIChuYW5kYWRkcmVzcyA8ICgoaG5hbmQtPkNvbmZpZy5CbG9ja1NpemUpICogKGhuYW5kLT5Db25maWcuQmxvY2tOYnIpKSkpCiAgICAgewogICAgICAgLyogU2VuZCB3cml0ZSBwYWdlIGNvbW1hbmQgc2VxdWVuY2UgKi8KLSAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IENNRF9BUkVBKSkgPSBOQU5EX0NNRF9BUkVBX0E7CisgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBDTURfQVJFQSkpID0gTkFORF9DTURfQVJFQV9BOwogICAgICAgX19EU0IoKTsKLSAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IENNRF9BUkVBKSkgPSBOQU5EX0NNRF9XUklURTA7CisgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBDTURfQVJFQSkpID0gTkFORF9DTURfV1JJVEUwOwogICAgICAgX19EU0IoKTsKIAogICAgICAgLyogQ2FyZHMgd2l0aCBwYWdlIHNpemUgPD0gNTEyIGJ5dGVzICovCkBAIC04NjQsMjIgKzg4NCwyMiBAQAogICAgICAgewogICAgICAgICBpZiAoKChobmFuZC0+Q29uZmlnLkJsb2NrU2l6ZSkgKiAoaG5hbmQtPkNvbmZpZy5CbG9ja05icikpIDw9IDY1NTM1VSkKICAgICAgICAgewotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gMHgwMFU7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIC8qICgoaG5hbmQtPkNvbmZpZy5CbG9ja1NpemUpKihobmFuZC0+Q29uZmlnLkJsb2NrTmJyKSkgPiA2NTUzNSAqLwogICAgICAgICB7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8zUkRfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8zUkRfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTg4NywyNiArOTA3LDI2IEBACiAgICAgICB7CiAgICAgICAgIGlmICgoKGhuYW5kLT5Db25maWcuQmxvY2tTaXplKSAqIChobmFuZC0+Q29uZmlnLkJsb2NrTmJyKSkgPD0gNjU1MzVVKQogICAgICAgICB7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgLyogKChobmFuZC0+Q29uZmlnLkJsb2NrU2l6ZSkqKGhuYW5kLT5Db25maWcuQmxvY2tOYnIpKSA+IDY1NTM1ICovCiAgICAgICAgIHsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gMHgwMFU7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gMHgwMFU7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMVNUX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMVNUX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8yTkRfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8yTkRfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzNSRF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzNSRF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKICAgICAgICAgfQogICAgICAgfQpAQCAtOTE0LDEyICs5MzQsMTIgQEAKICAgICAgIC8qIFdyaXRlIGRhdGEgdG8gbWVtb3J5ICovCiAgICAgICBmb3IgKGluZGV4ID0gMFU7IGluZGV4IDwgaG5hbmQtPkNvbmZpZy5QYWdlU2l6ZTsgaW5kZXgrKykKICAgICAgIHsKLSAgICAgICAgKihfX0lPIHVpbnQ4X3QgKilkZXZpY2VBZGRyZXNzID0gKmJ1ZmY7CisgICAgICAgICooX19JTyB1aW50OF90ICopZGV2aWNlYWRkcmVzcyA9ICpidWZmOwogICAgICAgICBidWZmKys7CiAgICAgICAgIF9fRFNCKCk7CiAgICAgICB9CiAKLSAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IENNRF9BUkVBKSkgPSBOQU5EX0NNRF9XUklURV9UUlVFMTsKKyAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IENNRF9BUkVBKSkgPSBOQU5EX0NNRF9XUklURV9UUlVFMTsKICAgICAgIF9fRFNCKCk7CiAKICAgICAgIC8qIEdldCB0aWNrICovCkBAIC05NDEsMTMgKzk2MSwxMyBAQAogICAgICAgfQogCiAgICAgICAvKiBJbmNyZW1lbnQgd3JpdHRlbiBwYWdlcyBudW1iZXIgKi8KLSAgICAgIG51bVBhZ2VzV3JpdHRlbisrOworICAgICAgbnVtcGFnZXN3cml0dGVuKys7CiAKICAgICAgIC8qIERlY3JlbWVudCBwYWdlcyB0byB3cml0ZSAqLwogICAgICAgbmJwYWdlcy0tOwogCiAgICAgICAvKiBJbmNyZW1lbnQgdGhlIE5BTkQgYWRkcmVzcyAqLwotICAgICAgbmFuZEFkZHJlc3MgPSAodWludDMyX3QpKG5hbmRBZGRyZXNzICsgMVUpOworICAgICAgbmFuZGFkZHJlc3MgPSAodWludDMyX3QpKG5hbmRhZGRyZXNzICsgMVUpOwogICAgIH0KIAogICAgIC8qIFVwZGF0ZSB0aGUgTkFORCBjb250cm9sbGVyIHN0YXRlICovCkBAIC05NzgsNyArOTk4LDEwIEBACiB7CiAgIHVpbnQzMl90IGluZGV4OwogICB1aW50MzJfdCB0aWNrc3RhcnQ7Ci0gIHVpbnQzMl90IGRldmljZUFkZHJlc3MsIG51bVBhZ2VzV3JpdHRlbiA9IDAsIG5hbmRBZGRyZXNzLCBuYnBhZ2VzID0gTnVtUGFnZVRvV3JpdGU7CisgIHVpbnQzMl90IGRldmljZWFkZHJlc3M7CisgIHVpbnQzMl90IG51bXBhZ2Vzd3JpdHRlbiA9IDBVOworICB1aW50MzJfdCBuYW5kYWRkcmVzczsKKyAgdWludDMyX3QgbmJwYWdlcyA9IE51bVBhZ2VUb1dyaXRlOwogICB1aW50MTZfdCAqYnVmZiA9IHBCdWZmZXI7CiAKICAgLyogQ2hlY2sgdGhlIE5BTkQgY29udHJvbGxlciBzdGF0ZSAqLwpAQCAtOTk1LDE4ICsxMDE4LDE4IEBACiAgICAgaG5hbmQtPlN0YXRlID0gSEFMX05BTkRfU1RBVEVfQlVTWTsKIAogICAgIC8qIElkZW50aWZ5IHRoZSBkZXZpY2UgYWRkcmVzcyAqLwotICAgIGRldmljZUFkZHJlc3MgPSBOQU5EX0RFVklDRTsKKyAgICBkZXZpY2VhZGRyZXNzID0gTkFORF9ERVZJQ0U7CiAKICAgICAvKiBOQU5EIHJhdyBhZGRyZXNzIGNhbGN1bGF0aW9uICovCi0gICAgbmFuZEFkZHJlc3MgPSBBUlJBWV9BRERSRVNTKHBBZGRyZXNzLCBobmFuZCk7CisgICAgbmFuZGFkZHJlc3MgPSBBUlJBWV9BRERSRVNTKHBBZGRyZXNzLCBobmFuZCk7CiAKICAgICAvKiBQYWdlKHMpIHdyaXRlIGxvb3AgKi8KLSAgICB3aGlsZSAoKG5icGFnZXMgIT0gMFUpICYmIChuYW5kQWRkcmVzcyA8ICgoaG5hbmQtPkNvbmZpZy5CbG9ja1NpemUpICogKGhuYW5kLT5Db25maWcuQmxvY2tOYnIpKSkpCisgICAgd2hpbGUgKChuYnBhZ2VzICE9IDBVKSAmJiAobmFuZGFkZHJlc3MgPCAoKGhuYW5kLT5Db25maWcuQmxvY2tTaXplKSAqIChobmFuZC0+Q29uZmlnLkJsb2NrTmJyKSkpKQogICAgIHsKICAgICAgIC8qIFNlbmQgd3JpdGUgcGFnZSBjb21tYW5kIHNlcXVlbmNlICovCi0gICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBDTURfQVJFQSkpID0gTkFORF9DTURfQVJFQV9BOworICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQ01EX0FSRUEpKSA9IE5BTkRfQ01EX0FSRUFfQTsKICAgICAgIF9fRFNCKCk7Ci0gICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBDTURfQVJFQSkpID0gTkFORF9DTURfV1JJVEUwOworICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQ01EX0FSRUEpKSA9IE5BTkRfQ01EX1dSSVRFMDsKICAgICAgIF9fRFNCKCk7CiAKICAgICAgIC8qIENhcmRzIHdpdGggcGFnZSBzaXplIDw9IDUxMiBieXRlcyAqLwpAQCAtMTAxNCwyMiArMTAzNywyMiBAQAogICAgICAgewogICAgICAgICBpZiAoKChobmFuZC0+Q29uZmlnLkJsb2NrU2l6ZSkgKiAoaG5hbmQtPkNvbmZpZy5CbG9ja05icikpIDw9IDY1NTM1VSkKICAgICAgICAgewotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gMHgwMFU7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIC8qICgoaG5hbmQtPkNvbmZpZy5CbG9ja1NpemUpKihobmFuZC0+Q29uZmlnLkJsb2NrTmJyKSkgPiA2NTUzNSAqLwogICAgICAgICB7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8zUkRfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8zUkRfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTEwMzcsMzkgKzEwNjAsNTAgQEAKICAgICAgIHsKICAgICAgICAgaWYgKCgoaG5hbmQtPkNvbmZpZy5CbG9ja1NpemUpICogKGhuYW5kLT5Db25maWcuQmxvY2tOYnIpKSA8PSA2NTUzNVUpCiAgICAgICAgIHsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gMHgwMFU7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gMHgwMFU7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMVNUX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMVNUX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8yTkRfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8yTkRfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSAvKiAoKGhuYW5kLT5Db25maWcuQmxvY2tTaXplKSooaG5hbmQtPkNvbmZpZy5CbG9ja05icikpID4gNjU1MzUgKi8KICAgICAgICAgewotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gMHgwMFU7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gMHgwMFU7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfM1JEX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfM1JEX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwogICAgICAgICB9CiAgICAgICB9CiAKKyAgICAgIC8qIENhbGN1bGF0ZSBQYWdlU2l6ZSAqLworICAgICAgaWYgKGhuYW5kLT5Jbml0Lk1lbW9yeURhdGFXaWR0aCA9PSBGTUNfTkFORF9NRU1fQlVTX1dJRFRIXzgpCisgICAgICB7CisgICAgICAgIGhuYW5kLT5Db25maWcuUGFnZVNpemUgPSBobmFuZC0+Q29uZmlnLlBhZ2VTaXplIC8gMlU7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIERvIG5vdGhpbmcgKi8KKyAgICAgICAgLyogS2VlcCB0aGUgc2FtZSBQYWdlU2l6ZSBmb3IgRk1DX05BTkRfTUVNX0JVU19XSURUSF8xNiovCisgICAgICB9CisKICAgICAgIC8qIFdyaXRlIGRhdGEgdG8gbWVtb3J5ICovCiAgICAgICBmb3IgKGluZGV4ID0gMFU7IGluZGV4IDwgaG5hbmQtPkNvbmZpZy5QYWdlU2l6ZTsgaW5kZXgrKykKICAgICAgIHsKLSAgICAgICAgKihfX0lPIHVpbnQxNl90ICopZGV2aWNlQWRkcmVzcyA9ICpidWZmOworICAgICAgICAqKF9fSU8gdWludDE2X3QgKilkZXZpY2VhZGRyZXNzID0gKmJ1ZmY7CiAgICAgICAgIGJ1ZmYrKzsKICAgICAgICAgX19EU0IoKTsKICAgICAgIH0KIAotICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQ01EX0FSRUEpKSA9IE5BTkRfQ01EX1dSSVRFX1RSVUUxOworICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQ01EX0FSRUEpKSA9IE5BTkRfQ01EX1dSSVRFX1RSVUUxOwogICAgICAgX19EU0IoKTsKIAogICAgICAgLyogR2V0IHRpY2sgKi8KQEAgLTEwOTEsMTMgKzExMjUsMTMgQEAKICAgICAgIH0KIAogICAgICAgLyogSW5jcmVtZW50IHdyaXR0ZW4gcGFnZXMgbnVtYmVyICovCi0gICAgICBudW1QYWdlc1dyaXR0ZW4rKzsKKyAgICAgIG51bXBhZ2Vzd3JpdHRlbisrOwogCiAgICAgICAvKiBEZWNyZW1lbnQgcGFnZXMgdG8gd3JpdGUgKi8KICAgICAgIG5icGFnZXMtLTsKIAogICAgICAgLyogSW5jcmVtZW50IHRoZSBOQU5EIGFkZHJlc3MgKi8KLSAgICAgIG5hbmRBZGRyZXNzID0gKHVpbnQzMl90KShuYW5kQWRkcmVzcyArIDFVKTsKKyAgICAgIG5hbmRhZGRyZXNzID0gKHVpbnQzMl90KShuYW5kYWRkcmVzcyArIDFVKTsKICAgICB9CiAKICAgICAvKiBVcGRhdGUgdGhlIE5BTkQgY29udHJvbGxlciBzdGF0ZSAqLwpAQCAtMTEyOCw3ICsxMTYyLDExIEBACiB7CiAgIHVpbnQzMl90IGluZGV4OwogICB1aW50MzJfdCB0aWNrc3RhcnQ7Ci0gIHVpbnQzMl90IGRldmljZUFkZHJlc3MsIG51bVNwYXJlQXJlYVJlYWQgPSAwLCBuYW5kQWRkcmVzcywgY29sdW1uQWRkcmVzcywgbmJzcGFyZSA9IE51bVNwYXJlQXJlYVRvUmVhZDsKKyAgdWludDMyX3QgZGV2aWNlYWRkcmVzczsKKyAgdWludDMyX3QgbnVtc3BhcmVhcmVhcmVhZCA9IDBVOworICB1aW50MzJfdCBuYW5kYWRkcmVzczsKKyAgdWludDMyX3QgY29sdW1uYWRkcmVzczsKKyAgdWludDMyX3QgbmJzcGFyZSA9IE51bVNwYXJlQXJlYVRvUmVhZDsKICAgdWludDhfdCAqYnVmZiA9IHBCdWZmZXI7CiAKICAgLyogQ2hlY2sgdGhlIE5BTkQgY29udHJvbGxlciBzdGF0ZSAqLwpAQCAtMTE0NSw3OCArMTE4Myw3OCBAQAogICAgIGhuYW5kLT5TdGF0ZSA9IEhBTF9OQU5EX1NUQVRFX0JVU1k7CiAKICAgICAvKiBJZGVudGlmeSB0aGUgZGV2aWNlIGFkZHJlc3MgKi8KLSAgICBkZXZpY2VBZGRyZXNzID0gTkFORF9ERVZJQ0U7CisgICAgZGV2aWNlYWRkcmVzcyA9IE5BTkRfREVWSUNFOwogCiAgICAgLyogTkFORCByYXcgYWRkcmVzcyBjYWxjdWxhdGlvbiAqLwotICAgIG5hbmRBZGRyZXNzID0gQVJSQVlfQUREUkVTUyhwQWRkcmVzcywgaG5hbmQpOworICAgIG5hbmRhZGRyZXNzID0gQVJSQVlfQUREUkVTUyhwQWRkcmVzcywgaG5hbmQpOwogCiAgICAgLyogQ29sdW1uIGluIHBhZ2UgYWRkcmVzcyAqLwotICAgIGNvbHVtbkFkZHJlc3MgPSBDT0xVTU5fQUREUkVTUyhobmFuZCk7CisgICAgY29sdW1uYWRkcmVzcyA9IENPTFVNTl9BRERSRVNTKGhuYW5kKTsKIAogICAgIC8qIFNwYXJlIGFyZWEocykgcmVhZCBsb29wICovCi0gICAgd2hpbGUgKChuYnNwYXJlICE9IDBVKSAmJiAobmFuZEFkZHJlc3MgPCAoKGhuYW5kLT5Db25maWcuQmxvY2tTaXplKSAqIChobmFuZC0+Q29uZmlnLkJsb2NrTmJyKSkpKQorICAgIHdoaWxlICgobmJzcGFyZSAhPSAwVSkgJiYgKG5hbmRhZGRyZXNzIDwgKChobmFuZC0+Q29uZmlnLkJsb2NrU2l6ZSkgKiAoaG5hbmQtPkNvbmZpZy5CbG9ja05icikpKSkKICAgICB7CiAgICAgICAvKiBDYXJkcyB3aXRoIHBhZ2Ugc2l6ZSA8PSA1MTIgYnl0ZXMgKi8KICAgICAgIGlmICgoaG5hbmQtPkNvbmZpZy5QYWdlU2l6ZSkgPD0gNTEyVSkKICAgICAgIHsKICAgICAgICAgLyogU2VuZCByZWFkIHNwYXJlIGFyZWEgY29tbWFuZCBzZXF1ZW5jZSAqLwotICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBDTURfQVJFQSkpID0gTkFORF9DTURfQVJFQV9DOworICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBDTURfQVJFQSkpID0gTkFORF9DTURfQVJFQV9DOwogICAgICAgICBfX0RTQigpOwogCiAgICAgICAgIGlmICgoKGhuYW5kLT5Db25maWcuQmxvY2tTaXplKSAqIChobmFuZC0+Q29uZmlnLkJsb2NrTmJyKSkgPD0gNjU1MzVVKQogICAgICAgICB7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgLyogKChobmFuZC0+Q29uZmlnLkJsb2NrU2l6ZSkqKGhuYW5kLT5Db25maWcuQmxvY2tOYnIpKSA+IDY1NTM1ICovCiAgICAgICAgIHsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gMHgwMFU7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMVNUX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMVNUX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8yTkRfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8yTkRfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzNSRF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzNSRF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKICAgICAgICAgfQogICAgICAgfQogICAgICAgZWxzZSAvKiAoaG5hbmQtPkNvbmZpZy5QYWdlU2l6ZSkgPiA1MTIgKi8KICAgICAgIHsKICAgICAgICAgLyogU2VuZCByZWFkIHNwYXJlIGFyZWEgY29tbWFuZCBzZXF1ZW5jZSAqLwotICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBDTURfQVJFQSkpID0gTkFORF9DTURfQVJFQV9BOworICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBDTURfQVJFQSkpID0gTkFORF9DTURfQVJFQV9BOwogICAgICAgICBfX0RTQigpOwogCiAgICAgICAgIGlmICgoKGhuYW5kLT5Db25maWcuQmxvY2tTaXplKSAqIChobmFuZC0+Q29uZmlnLkJsb2NrTmJyKSkgPD0gNjU1MzVVKQogICAgICAgICB7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBDT0xVTU5fMVNUX0NZQ0xFKGNvbHVtbkFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQ09MVU1OXzFTVF9DWUNMRShjb2x1bW5hZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQ09MVU1OXzJORF9DWUNMRShjb2x1bW5BZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IENPTFVNTl8yTkRfQ1lDTEUoY29sdW1uYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMVNUX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMVNUX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8yTkRfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8yTkRfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSAvKiAoKGhuYW5kLT5Db25maWcuQmxvY2tTaXplKSooaG5hbmQtPkNvbmZpZy5CbG9ja05icikpID4gNjU1MzUgKi8KICAgICAgICAgewotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQ09MVU1OXzFTVF9DWUNMRShjb2x1bW5BZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IENPTFVNTl8xU1RfQ1lDTEUoY29sdW1uYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IENPTFVNTl8yTkRfQ1lDTEUoY29sdW1uQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBDT0xVTU5fMk5EX0NZQ0xFKGNvbHVtbmFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8zUkRfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8zUkRfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7CiAgICAgICAgIH0KICAgICAgIH0KIAotICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQ01EX0FSRUEpKSA9IE5BTkRfQ01EX0FSRUFfVFJVRTE7CisgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBDTURfQVJFQSkpID0gTkFORF9DTURfQVJFQV9UUlVFMTsKICAgICAgIF9fRFNCKCk7CiAKICAgICAgIGlmIChobmFuZC0+Q29uZmlnLkV4dHJhQ29tbWFuZEVuYWJsZSA9PSBFTkFCTEUpCkBAIC0xMjQwLDI1ICsxMjc4LDI1IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiBHbyBiYWNrIHRvIHJlYWQgbW9kZSAqLwotICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBDTURfQVJFQSkpID0gKCh1aW50OF90KTB4MDBVKTsKKyAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQ01EX0FSRUEpKSA9ICgodWludDhfdCkweDAwKTsKICAgICAgICAgX19EU0IoKTsKICAgICAgIH0KIAogICAgICAgLyogR2V0IERhdGEgaW50byBCdWZmZXIgKi8KICAgICAgIGZvciAoaW5kZXggPSAwVTsgaW5kZXggPCBobmFuZC0+Q29uZmlnLlNwYXJlQXJlYVNpemU7IGluZGV4KyspCiAgICAgICB7Ci0gICAgICAgICpidWZmID0gKih1aW50OF90ICopZGV2aWNlQWRkcmVzczsKKyAgICAgICAgKmJ1ZmYgPSAqKHVpbnQ4X3QgKilkZXZpY2VhZGRyZXNzOwogICAgICAgICBidWZmKys7CiAgICAgICB9CiAKICAgICAgIC8qIEluY3JlbWVudCByZWFkIHNwYXJlIGFyZWFzIG51bWJlciAqLwotICAgICAgbnVtU3BhcmVBcmVhUmVhZCsrOworICAgICAgbnVtc3BhcmVhcmVhcmVhZCsrOwogCiAgICAgICAvKiBEZWNyZW1lbnQgc3BhcmUgYXJlYXMgdG8gcmVhZCAqLwogICAgICAgbmJzcGFyZS0tOwogCiAgICAgICAvKiBJbmNyZW1lbnQgdGhlIE5BTkQgYWRkcmVzcyAqLwotICAgICAgbmFuZEFkZHJlc3MgPSAodWludDMyX3QpKG5hbmRBZGRyZXNzICsgMVUpOworICAgICAgbmFuZGFkZHJlc3MgPSAodWludDMyX3QpKG5hbmRhZGRyZXNzICsgMVUpOwogICAgIH0KIAogICAgIC8qIFVwZGF0ZSB0aGUgTkFORCBjb250cm9sbGVyIHN0YXRlICovCkBAIC0xMjg5LDcgKzEzMjcsMTEgQEAKIHsKICAgdWludDMyX3QgaW5kZXg7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKLSAgdWludDMyX3QgZGV2aWNlQWRkcmVzcywgbnVtU3BhcmVBcmVhUmVhZCA9IDAsIG5hbmRBZGRyZXNzLCBjb2x1bW5BZGRyZXNzLCBuYnNwYXJlID0gTnVtU3BhcmVBcmVhVG9SZWFkOworICB1aW50MzJfdCBkZXZpY2VhZGRyZXNzOworICB1aW50MzJfdCBudW1zcGFyZWFyZWFyZWFkID0gMFU7CisgIHVpbnQzMl90IG5hbmRhZGRyZXNzOworICB1aW50MzJfdCBjb2x1bW5hZGRyZXNzOworICB1aW50MzJfdCBuYnNwYXJlID0gTnVtU3BhcmVBcmVhVG9SZWFkOwogICB1aW50MTZfdCAqYnVmZiA9IHBCdWZmZXI7CiAKICAgLyogQ2hlY2sgdGhlIE5BTkQgY29udHJvbGxlciBzdGF0ZSAqLwpAQCAtMTMwNiw3OCArMTM0OCw3OCBAQAogICAgIGhuYW5kLT5TdGF0ZSA9IEhBTF9OQU5EX1NUQVRFX0JVU1k7CiAKICAgICAvKiBJZGVudGlmeSB0aGUgZGV2aWNlIGFkZHJlc3MgKi8KLSAgICBkZXZpY2VBZGRyZXNzID0gTkFORF9ERVZJQ0U7CisgICAgZGV2aWNlYWRkcmVzcyA9IE5BTkRfREVWSUNFOwogCiAgICAgLyogTkFORCByYXcgYWRkcmVzcyBjYWxjdWxhdGlvbiAqLwotICAgIG5hbmRBZGRyZXNzID0gQVJSQVlfQUREUkVTUyhwQWRkcmVzcywgaG5hbmQpOworICAgIG5hbmRhZGRyZXNzID0gQVJSQVlfQUREUkVTUyhwQWRkcmVzcywgaG5hbmQpOwogCiAgICAgLyogQ29sdW1uIGluIHBhZ2UgYWRkcmVzcyAqLwotICAgIGNvbHVtbkFkZHJlc3MgPSAodWludDMyX3QpKENPTFVNTl9BRERSRVNTKGhuYW5kKSAqIDJVKTsKKyAgICBjb2x1bW5hZGRyZXNzID0gKHVpbnQzMl90KShDT0xVTU5fQUREUkVTUyhobmFuZCkpOwogCiAgICAgLyogU3BhcmUgYXJlYShzKSByZWFkIGxvb3AgKi8KLSAgICB3aGlsZSAoKG5ic3BhcmUgIT0gMFUpICYmIChuYW5kQWRkcmVzcyA8ICgoaG5hbmQtPkNvbmZpZy5CbG9ja1NpemUpICogKGhuYW5kLT5Db25maWcuQmxvY2tOYnIpKSkpCisgICAgd2hpbGUgKChuYnNwYXJlICE9IDBVKSAmJiAobmFuZGFkZHJlc3MgPCAoKGhuYW5kLT5Db25maWcuQmxvY2tTaXplKSAqIChobmFuZC0+Q29uZmlnLkJsb2NrTmJyKSkpKQogICAgIHsKICAgICAgIC8qIENhcmRzIHdpdGggcGFnZSBzaXplIDw9IDUxMiBieXRlcyAqLwogICAgICAgaWYgKChobmFuZC0+Q29uZmlnLlBhZ2VTaXplKSA8PSA1MTJVKQogICAgICAgewogICAgICAgICAvKiBTZW5kIHJlYWQgc3BhcmUgYXJlYSBjb21tYW5kIHNlcXVlbmNlICovCi0gICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IENNRF9BUkVBKSkgPSBOQU5EX0NNRF9BUkVBX0M7CisgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IENNRF9BUkVBKSkgPSBOQU5EX0NNRF9BUkVBX0M7CiAgICAgICAgIF9fRFNCKCk7CiAKICAgICAgICAgaWYgKCgoaG5hbmQtPkNvbmZpZy5CbG9ja1NpemUpICogKGhuYW5kLT5Db25maWcuQmxvY2tOYnIpKSA8PSA2NTUzNVUpCiAgICAgICAgIHsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gMHgwMFU7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMVNUX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMVNUX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8yTkRfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8yTkRfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSAvKiAoKGhuYW5kLT5Db25maWcuQmxvY2tTaXplKSooaG5hbmQtPkNvbmZpZy5CbG9ja05icikpID4gNjU1MzUgKi8KICAgICAgICAgewotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gMHgwMFU7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfM1JEX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfM1JEX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgICBlbHNlIC8qIChobmFuZC0+Q29uZmlnLlBhZ2VTaXplKSA+IDUxMiAqLwogICAgICAgewogICAgICAgICAvKiBTZW5kIHJlYWQgc3BhcmUgYXJlYSBjb21tYW5kIHNlcXVlbmNlICovCi0gICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IENNRF9BUkVBKSkgPSBOQU5EX0NNRF9BUkVBX0E7CisgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IENNRF9BUkVBKSkgPSBOQU5EX0NNRF9BUkVBX0E7CiAgICAgICAgIF9fRFNCKCk7CiAKICAgICAgICAgaWYgKCgoaG5hbmQtPkNvbmZpZy5CbG9ja1NpemUpICogKGhuYW5kLT5Db25maWcuQmxvY2tOYnIpKSA8PSA2NTUzNVUpCiAgICAgICAgIHsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IENPTFVNTl8xU1RfQ1lDTEUoY29sdW1uQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBDT0xVTU5fMVNUX0NZQ0xFKGNvbHVtbmFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBDT0xVTU5fMk5EX0NZQ0xFKGNvbHVtbkFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQ09MVU1OXzJORF9DWUNMRShjb2x1bW5hZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIC8qICgoaG5hbmQtPkNvbmZpZy5CbG9ja1NpemUpKihobmFuZC0+Q29uZmlnLkJsb2NrTmJyKSkgPiA2NTUzNSAqLwogICAgICAgICB7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBDT0xVTU5fMVNUX0NZQ0xFKGNvbHVtbkFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQ09MVU1OXzFTVF9DWUNMRShjb2x1bW5hZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQ09MVU1OXzJORF9DWUNMRShjb2x1bW5BZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IENPTFVNTl8yTkRfQ1lDTEUoY29sdW1uYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMVNUX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMVNUX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8yTkRfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8yTkRfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzNSRF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzNSRF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKICAgICAgICAgfQogICAgICAgfQogCi0gICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBDTURfQVJFQSkpID0gTkFORF9DTURfQVJFQV9UUlVFMTsKKyAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IENNRF9BUkVBKSkgPSBOQU5EX0NNRF9BUkVBX1RSVUUxOwogICAgICAgX19EU0IoKTsKIAogICAgICAgaWYgKGhuYW5kLT5Db25maWcuRXh0cmFDb21tYW5kRW5hYmxlID09IEVOQUJMRSkKQEAgLTE0MDEsMjUgKzE0NDMsMjUgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qIEdvIGJhY2sgdG8gcmVhZCBtb2RlICovCi0gICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IENNRF9BUkVBKSkgPSAoKHVpbnQ4X3QpMHgwMFUpOworICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBDTURfQVJFQSkpID0gKCh1aW50OF90KTB4MDApOwogICAgICAgICBfX0RTQigpOwogICAgICAgfQogCiAgICAgICAvKiBHZXQgRGF0YSBpbnRvIEJ1ZmZlciAqLwogICAgICAgZm9yIChpbmRleCA9IDBVOyBpbmRleCA8IGhuYW5kLT5Db25maWcuU3BhcmVBcmVhU2l6ZTsgaW5kZXgrKykKICAgICAgIHsKLSAgICAgICAgKmJ1ZmYgPSAqKHVpbnQxNl90ICopZGV2aWNlQWRkcmVzczsKKyAgICAgICAgKmJ1ZmYgPSAqKHVpbnQxNl90ICopZGV2aWNlYWRkcmVzczsKICAgICAgICAgYnVmZisrOwogICAgICAgfQogCiAgICAgICAvKiBJbmNyZW1lbnQgcmVhZCBzcGFyZSBhcmVhcyBudW1iZXIgKi8KLSAgICAgIG51bVNwYXJlQXJlYVJlYWQrKzsKKyAgICAgIG51bXNwYXJlYXJlYXJlYWQrKzsKIAogICAgICAgLyogRGVjcmVtZW50IHNwYXJlIGFyZWFzIHRvIHJlYWQgKi8KICAgICAgIG5ic3BhcmUtLTsKIAogICAgICAgLyogSW5jcmVtZW50IHRoZSBOQU5EIGFkZHJlc3MgKi8KLSAgICAgIG5hbmRBZGRyZXNzID0gKHVpbnQzMl90KShuYW5kQWRkcmVzcyArIDFVKTsKKyAgICAgIG5hbmRhZGRyZXNzID0gKHVpbnQzMl90KShuYW5kYWRkcmVzcyArIDFVKTsKICAgICB9CiAKICAgICAvKiBVcGRhdGUgdGhlIE5BTkQgY29udHJvbGxlciBzdGF0ZSAqLwpAQCAtMTQ1MCw3ICsxNDkyLDExIEBACiB7CiAgIHVpbnQzMl90IGluZGV4OwogICB1aW50MzJfdCB0aWNrc3RhcnQ7Ci0gIHVpbnQzMl90IGRldmljZUFkZHJlc3MsIG51bVNwYXJlQXJlYVdyaXR0ZW4gPSAwLCBuYW5kQWRkcmVzcywgY29sdW1uQWRkcmVzcywgbmJzcGFyZSA9IE51bVNwYXJlQXJlYVRvd3JpdGU7CisgIHVpbnQzMl90IGRldmljZWFkZHJlc3M7CisgIHVpbnQzMl90IG51bXNwYXJlYXJlYXdyaXR0ZW4gPSAwVTsKKyAgdWludDMyX3QgbmFuZGFkZHJlc3M7CisgIHVpbnQzMl90IGNvbHVtbmFkZHJlc3M7CisgIHVpbnQzMl90IG5ic3BhcmUgPSBOdW1TcGFyZUFyZWFUb3dyaXRlOwogICB1aW50OF90ICpidWZmID0gcEJ1ZmZlcjsKIAogICAvKiBDaGVjayB0aGUgTkFORCBjb250cm9sbGVyIHN0YXRlICovCkBAIC0xNDY3LDc3ICsxNTEzLDc3IEBACiAgICAgaG5hbmQtPlN0YXRlID0gSEFMX05BTkRfU1RBVEVfQlVTWTsKIAogICAgIC8qIElkZW50aWZ5IHRoZSBkZXZpY2UgYWRkcmVzcyAqLwotICAgIGRldmljZUFkZHJlc3MgPSBOQU5EX0RFVklDRTsKKyAgICBkZXZpY2VhZGRyZXNzID0gTkFORF9ERVZJQ0U7CiAKICAgICAvKiBQYWdlIGFkZHJlc3MgY2FsY3VsYXRpb24gKi8KLSAgICBuYW5kQWRkcmVzcyA9IEFSUkFZX0FERFJFU1MocEFkZHJlc3MsIGhuYW5kKTsKKyAgICBuYW5kYWRkcmVzcyA9IEFSUkFZX0FERFJFU1MocEFkZHJlc3MsIGhuYW5kKTsKIAogICAgIC8qIENvbHVtbiBpbiBwYWdlIGFkZHJlc3MgKi8KLSAgICBjb2x1bW5BZGRyZXNzID0gQ09MVU1OX0FERFJFU1MoaG5hbmQpOworICAgIGNvbHVtbmFkZHJlc3MgPSBDT0xVTU5fQUREUkVTUyhobmFuZCk7CiAKICAgICAvKiBTcGFyZSBhcmVhKHMpIHdyaXRlIGxvb3AgKi8KLSAgICB3aGlsZSAoKG5ic3BhcmUgIT0gMFUpICYmIChuYW5kQWRkcmVzcyA8ICgoaG5hbmQtPkNvbmZpZy5CbG9ja1NpemUpICogKGhuYW5kLT5Db25maWcuQmxvY2tOYnIpKSkpCisgICAgd2hpbGUgKChuYnNwYXJlICE9IDBVKSAmJiAobmFuZGFkZHJlc3MgPCAoKGhuYW5kLT5Db25maWcuQmxvY2tTaXplKSAqIChobmFuZC0+Q29uZmlnLkJsb2NrTmJyKSkpKQogICAgIHsKICAgICAgIC8qIENhcmRzIHdpdGggcGFnZSBzaXplIDw9IDUxMiBieXRlcyAqLwogICAgICAgaWYgKChobmFuZC0+Q29uZmlnLlBhZ2VTaXplKSA8PSA1MTJVKQogICAgICAgewogICAgICAgICAvKiBTZW5kIHdyaXRlIFNwYXJlIGFyZWEgY29tbWFuZCBzZXF1ZW5jZSAqLwotICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBDTURfQVJFQSkpID0gTkFORF9DTURfQVJFQV9DOworICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBDTURfQVJFQSkpID0gTkFORF9DTURfQVJFQV9DOwogICAgICAgICBfX0RTQigpOwotICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBDTURfQVJFQSkpID0gTkFORF9DTURfV1JJVEUwOworICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBDTURfQVJFQSkpID0gTkFORF9DTURfV1JJVEUwOwogICAgICAgICBfX0RTQigpOwogCiAgICAgICAgIGlmICgoKGhuYW5kLT5Db25maWcuQmxvY2tTaXplKSAqIChobmFuZC0+Q29uZmlnLkJsb2NrTmJyKSkgPD0gNjU1MzVVKQogICAgICAgICB7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgLyogKChobmFuZC0+Q29uZmlnLkJsb2NrU2l6ZSkqKGhuYW5kLT5Db25maWcuQmxvY2tOYnIpKSA+IDY1NTM1ICovCiAgICAgICAgIHsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gMHgwMFU7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMVNUX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMVNUX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8yTkRfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8yTkRfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzNSRF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzNSRF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKICAgICAgICAgfQogICAgICAgfQogICAgICAgZWxzZSAvKiAoaG5hbmQtPkNvbmZpZy5QYWdlU2l6ZSkgPiA1MTIgKi8KICAgICAgIHsKICAgICAgICAgLyogU2VuZCB3cml0ZSBTcGFyZSBhcmVhIGNvbW1hbmQgc2VxdWVuY2UgKi8KLSAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQ01EX0FSRUEpKSA9IE5BTkRfQ01EX0FSRUFfQTsKKyAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQ01EX0FSRUEpKSA9IE5BTkRfQ01EX0FSRUFfQTsKICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQ01EX0FSRUEpKSA9IE5BTkRfQ01EX1dSSVRFMDsKKyAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQ01EX0FSRUEpKSA9IE5BTkRfQ01EX1dSSVRFMDsKICAgICAgICAgX19EU0IoKTsKIAogICAgICAgICBpZiAoKChobmFuZC0+Q29uZmlnLkJsb2NrU2l6ZSkgKiAoaG5hbmQtPkNvbmZpZy5CbG9ja05icikpIDw9IDY1NTM1VSkKICAgICAgICAgewotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQ09MVU1OXzFTVF9DWUNMRShjb2x1bW5BZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IENPTFVNTl8xU1RfQ1lDTEUoY29sdW1uYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IENPTFVNTl8yTkRfQ1lDTEUoY29sdW1uQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBDT0xVTU5fMk5EX0NZQ0xFKGNvbHVtbmFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgLyogKChobmFuZC0+Q29uZmlnLkJsb2NrU2l6ZSkqKGhuYW5kLT5Db25maWcuQmxvY2tOYnIpKSA+IDY1NTM1ICovCiAgICAgICAgIHsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IENPTFVNTl8xU1RfQ1lDTEUoY29sdW1uQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBDT0xVTU5fMVNUX0NZQ0xFKGNvbHVtbmFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBDT0xVTU5fMk5EX0NZQ0xFKGNvbHVtbkFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQ09MVU1OXzJORF9DWUNMRShjb2x1bW5hZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfM1JEX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfM1JEX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwogICAgICAgICB9CiAgICAgICB9CkBAIC0xNTQ1LDEyICsxNTkxLDEyIEBACiAgICAgICAvKiBXcml0ZSBkYXRhIHRvIG1lbW9yeSAqLwogICAgICAgZm9yIChpbmRleCA9IDBVOyBpbmRleCA8IGhuYW5kLT5Db25maWcuU3BhcmVBcmVhU2l6ZTsgaW5kZXgrKykKICAgICAgIHsKLSAgICAgICAgKihfX0lPIHVpbnQ4X3QgKilkZXZpY2VBZGRyZXNzID0gKmJ1ZmY7CisgICAgICAgICooX19JTyB1aW50OF90ICopZGV2aWNlYWRkcmVzcyA9ICpidWZmOwogICAgICAgICBidWZmKys7CiAgICAgICAgIF9fRFNCKCk7CiAgICAgICB9CiAKLSAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IENNRF9BUkVBKSkgPSBOQU5EX0NNRF9XUklURV9UUlVFMTsKKyAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IENNRF9BUkVBKSkgPSBOQU5EX0NNRF9XUklURV9UUlVFMTsKICAgICAgIF9fRFNCKCk7CiAKICAgICAgIC8qIEdldCB0aWNrICovCkBAIC0xNTcyLDEzICsxNjE4LDEzIEBACiAgICAgICB9CiAKICAgICAgIC8qIEluY3JlbWVudCB3cml0dGVuIHNwYXJlIGFyZWFzIG51bWJlciAqLwotICAgICAgbnVtU3BhcmVBcmVhV3JpdHRlbisrOworICAgICAgbnVtc3BhcmVhcmVhd3JpdHRlbisrOwogCiAgICAgICAvKiBEZWNyZW1lbnQgc3BhcmUgYXJlYXMgdG8gd3JpdGUgKi8KICAgICAgIG5ic3BhcmUtLTsKIAogICAgICAgLyogSW5jcmVtZW50IHRoZSBOQU5EIGFkZHJlc3MgKi8KLSAgICAgIG5hbmRBZGRyZXNzID0gKHVpbnQzMl90KShuYW5kQWRkcmVzcyArIDFVKTsKKyAgICAgIG5hbmRhZGRyZXNzID0gKHVpbnQzMl90KShuYW5kYWRkcmVzcyArIDFVKTsKICAgICB9CiAKICAgICAvKiBVcGRhdGUgdGhlIE5BTkQgY29udHJvbGxlciBzdGF0ZSAqLwpAQCAtMTYwOSw3ICsxNjU1LDExIEBACiB7CiAgIHVpbnQzMl90IGluZGV4OwogICB1aW50MzJfdCB0aWNrc3RhcnQ7Ci0gIHVpbnQzMl90IGRldmljZUFkZHJlc3MsIG51bVNwYXJlQXJlYVdyaXR0ZW4gPSAwLCBuYW5kQWRkcmVzcywgY29sdW1uQWRkcmVzcywgbmJzcGFyZSA9IE51bVNwYXJlQXJlYVRvd3JpdGU7CisgIHVpbnQzMl90IGRldmljZWFkZHJlc3M7CisgIHVpbnQzMl90IG51bXNwYXJlYXJlYXdyaXR0ZW4gPSAwVTsKKyAgdWludDMyX3QgbmFuZGFkZHJlc3M7CisgIHVpbnQzMl90IGNvbHVtbmFkZHJlc3M7CisgIHVpbnQzMl90IG5ic3BhcmUgPSBOdW1TcGFyZUFyZWFUb3dyaXRlOwogICB1aW50MTZfdCAqYnVmZiA9IHBCdWZmZXI7CiAKICAgLyogQ2hlY2sgdGhlIE5BTkQgY29udHJvbGxlciBzdGF0ZSAqLwpAQCAtMTYyNiw3NyArMTY3Niw3NyBAQAogICAgIGhuYW5kLT5TdGF0ZSA9IEhBTF9OQU5EX1NUQVRFX0JVU1k7CiAKICAgICAvKiBJZGVudGlmeSB0aGUgZGV2aWNlIGFkZHJlc3MgKi8KLSAgICBkZXZpY2VBZGRyZXNzID0gTkFORF9ERVZJQ0U7CisgICAgZGV2aWNlYWRkcmVzcyA9IE5BTkRfREVWSUNFOwogCiAgICAgLyogTkFORCByYXcgYWRkcmVzcyBjYWxjdWxhdGlvbiAqLwotICAgIG5hbmRBZGRyZXNzID0gQVJSQVlfQUREUkVTUyhwQWRkcmVzcywgaG5hbmQpOworICAgIG5hbmRhZGRyZXNzID0gQVJSQVlfQUREUkVTUyhwQWRkcmVzcywgaG5hbmQpOwogCiAgICAgLyogQ29sdW1uIGluIHBhZ2UgYWRkcmVzcyAqLwotICAgIGNvbHVtbkFkZHJlc3MgPSAodWludDMyX3QpKENPTFVNTl9BRERSRVNTKGhuYW5kKSAqIDJVKTsKKyAgICBjb2x1bW5hZGRyZXNzID0gKHVpbnQzMl90KShDT0xVTU5fQUREUkVTUyhobmFuZCkpOwogCiAgICAgLyogU3BhcmUgYXJlYShzKSB3cml0ZSBsb29wICovCi0gICAgd2hpbGUgKChuYnNwYXJlICE9IDBVKSAmJiAobmFuZEFkZHJlc3MgPCAoKGhuYW5kLT5Db25maWcuQmxvY2tTaXplKSAqIChobmFuZC0+Q29uZmlnLkJsb2NrTmJyKSkpKQorICAgIHdoaWxlICgobmJzcGFyZSAhPSAwVSkgJiYgKG5hbmRhZGRyZXNzIDwgKChobmFuZC0+Q29uZmlnLkJsb2NrU2l6ZSkgKiAoaG5hbmQtPkNvbmZpZy5CbG9ja05icikpKSkKICAgICB7CiAgICAgICAvKiBDYXJkcyB3aXRoIHBhZ2Ugc2l6ZSA8PSA1MTIgYnl0ZXMgKi8KICAgICAgIGlmICgoaG5hbmQtPkNvbmZpZy5QYWdlU2l6ZSkgPD0gNTEyVSkKICAgICAgIHsKICAgICAgICAgLyogU2VuZCB3cml0ZSBTcGFyZSBhcmVhIGNvbW1hbmQgc2VxdWVuY2UgKi8KLSAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQ01EX0FSRUEpKSA9IE5BTkRfQ01EX0FSRUFfQzsKKyAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQ01EX0FSRUEpKSA9IE5BTkRfQ01EX0FSRUFfQzsKICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQ01EX0FSRUEpKSA9IE5BTkRfQ01EX1dSSVRFMDsKKyAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQ01EX0FSRUEpKSA9IE5BTkRfQ01EX1dSSVRFMDsKICAgICAgICAgX19EU0IoKTsKIAogICAgICAgICBpZiAoKChobmFuZC0+Q29uZmlnLkJsb2NrU2l6ZSkgKiAoaG5hbmQtPkNvbmZpZy5CbG9ja05icikpIDw9IDY1NTM1VSkKICAgICAgICAgewotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gMHgwMFU7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIC8qICgoaG5hbmQtPkNvbmZpZy5CbG9ja1NpemUpKihobmFuZC0+Q29uZmlnLkJsb2NrTmJyKSkgPiA2NTUzNSAqLwogICAgICAgICB7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSAweDAwVTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IDB4MDBVOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8zUkRfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8zUkRfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7CiAgICAgICAgIH0KICAgICAgIH0KICAgICAgIGVsc2UgLyogKGhuYW5kLT5Db25maWcuUGFnZVNpemUpID4gNTEyICovCiAgICAgICB7CiAgICAgICAgIC8qIFNlbmQgd3JpdGUgU3BhcmUgYXJlYSBjb21tYW5kIHNlcXVlbmNlICovCi0gICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IENNRF9BUkVBKSkgPSBOQU5EX0NNRF9BUkVBX0E7CisgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IENNRF9BUkVBKSkgPSBOQU5EX0NNRF9BUkVBX0E7CiAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IENNRF9BUkVBKSkgPSBOQU5EX0NNRF9XUklURTA7CisgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IENNRF9BUkVBKSkgPSBOQU5EX0NNRF9XUklURTA7CiAgICAgICAgIF9fRFNCKCk7CiAKICAgICAgICAgaWYgKCgoaG5hbmQtPkNvbmZpZy5CbG9ja1NpemUpICogKGhuYW5kLT5Db25maWcuQmxvY2tOYnIpKSA8PSA2NTUzNVUpCiAgICAgICAgIHsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IENPTFVNTl8xU1RfQ1lDTEUoY29sdW1uQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBDT0xVTU5fMVNUX0NZQ0xFKGNvbHVtbmFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBDT0xVTU5fMk5EX0NZQ0xFKGNvbHVtbkFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQ09MVU1OXzJORF9DWUNMRShjb2x1bW5hZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzJORF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIC8qICgoaG5hbmQtPkNvbmZpZy5CbG9ja1NpemUpKihobmFuZC0+Q29uZmlnLkJsb2NrTmJyKSkgPiA2NTUzNSAqLwogICAgICAgICB7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBDT0xVTU5fMVNUX0NZQ0xFKGNvbHVtbkFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQ09MVU1OXzFTVF9DWUNMRShjb2x1bW5hZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQ09MVU1OXzJORF9DWUNMRShjb2x1bW5BZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IENPTFVNTl8yTkRfQ1lDTEUoY29sdW1uYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKLSAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMVNUX0NZQ0xFKG5hbmRBZGRyZXNzKTsKKyAgICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMVNUX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgICAgICBfX0RTQigpOwotICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8yTkRfQ1lDTEUobmFuZEFkZHJlc3MpOworICAgICAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8yTkRfQ1lDTEUobmFuZGFkZHJlc3MpOwogICAgICAgICAgIF9fRFNCKCk7Ci0gICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzNSRF9DWUNMRShuYW5kQWRkcmVzcyk7CisgICAgICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzNSRF9DWUNMRShuYW5kYWRkcmVzcyk7CiAgICAgICAgICAgX19EU0IoKTsKICAgICAgICAgfQogICAgICAgfQpAQCAtMTcwNCwxMiArMTc1NCwxMiBAQAogICAgICAgLyogV3JpdGUgZGF0YSB0byBtZW1vcnkgKi8KICAgICAgIGZvciAoaW5kZXggPSAwVTsgaW5kZXggPCBobmFuZC0+Q29uZmlnLlNwYXJlQXJlYVNpemU7IGluZGV4KyspCiAgICAgICB7Ci0gICAgICAgICooX19JTyB1aW50MTZfdCAqKWRldmljZUFkZHJlc3MgPSAqYnVmZjsKKyAgICAgICAgKihfX0lPIHVpbnQxNl90ICopZGV2aWNlYWRkcmVzcyA9ICpidWZmOwogICAgICAgICBidWZmKys7CiAgICAgICAgIF9fRFNCKCk7CiAgICAgICB9CiAKLSAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlQWRkcmVzcyB8IENNRF9BUkVBKSkgPSBOQU5EX0NNRF9XUklURV9UUlVFMTsKKyAgICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IENNRF9BUkVBKSkgPSBOQU5EX0NNRF9XUklURV9UUlVFMTsKICAgICAgIF9fRFNCKCk7CiAKICAgICAgIC8qIEdldCB0aWNrICovCkBAIC0xNzMxLDEzICsxNzgxLDEzIEBACiAgICAgICB9CiAKICAgICAgIC8qIEluY3JlbWVudCB3cml0dGVuIHNwYXJlIGFyZWFzIG51bWJlciAqLwotICAgICAgbnVtU3BhcmVBcmVhV3JpdHRlbisrOworICAgICAgbnVtc3BhcmVhcmVhd3JpdHRlbisrOwogCiAgICAgICAvKiBEZWNyZW1lbnQgc3BhcmUgYXJlYXMgdG8gd3JpdGUgKi8KICAgICAgIG5ic3BhcmUtLTsKIAogICAgICAgLyogSW5jcmVtZW50IHRoZSBOQU5EIGFkZHJlc3MgKi8KLSAgICAgIG5hbmRBZGRyZXNzID0gKHVpbnQzMl90KShuYW5kQWRkcmVzcyArIDFVKTsKKyAgICAgIG5hbmRhZGRyZXNzID0gKHVpbnQzMl90KShuYW5kYWRkcmVzcyArIDFVKTsKICAgICB9CiAKICAgICAvKiBVcGRhdGUgdGhlIE5BTkQgY29udHJvbGxlciBzdGF0ZSAqLwpAQCAtMTc2Myw3ICsxODEzLDcgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX0VyYXNlX0Jsb2NrKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzKQogewotICB1aW50MzJfdCBEZXZpY2VBZGRyZXNzOworICB1aW50MzJfdCBkZXZpY2VhZGRyZXNzOwogCiAgIC8qIENoZWNrIHRoZSBOQU5EIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgaWYgKGhuYW5kLT5TdGF0ZSA9PSBIQUxfTkFORF9TVEFURV9CVVNZKQpAQCAtMTc3OSwxOSArMTgyOSwxOSBAQAogICAgIGhuYW5kLT5TdGF0ZSA9IEhBTF9OQU5EX1NUQVRFX0JVU1k7CiAKICAgICAvKiBJZGVudGlmeSB0aGUgZGV2aWNlIGFkZHJlc3MgKi8KLSAgICBEZXZpY2VBZGRyZXNzID0gTkFORF9ERVZJQ0U7CisgICAgZGV2aWNlYWRkcmVzcyA9IE5BTkRfREVWSUNFOwogCiAgICAgLyogU2VuZCBFcmFzZSBibG9jayBjb21tYW5kIHNlcXVlbmNlICovCi0gICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShEZXZpY2VBZGRyZXNzIHwgQ01EX0FSRUEpKSA9IE5BTkRfQ01EX0VSQVNFMDsKKyAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBDTURfQVJFQSkpID0gTkFORF9DTURfRVJBU0UwOwogICAgIF9fRFNCKCk7Ci0gICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShEZXZpY2VBZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzFTVF9DWUNMRShBUlJBWV9BRERSRVNTKHBBZGRyZXNzLCBobmFuZCkpOworICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8xU1RfQ1lDTEUoQVJSQVlfQUREUkVTUyhwQWRkcmVzcywgaG5hbmQpKTsKICAgICBfX0RTQigpOwotICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoRGV2aWNlQWRkcmVzcyB8IEFERFJfQVJFQSkpID0gQUREUl8yTkRfQ1lDTEUoQVJSQVlfQUREUkVTUyhwQWRkcmVzcywgaG5hbmQpKTsKKyAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfMk5EX0NZQ0xFKEFSUkFZX0FERFJFU1MocEFkZHJlc3MsIGhuYW5kKSk7CiAgICAgX19EU0IoKTsKLSAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKERldmljZUFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfM1JEX0NZQ0xFKEFSUkFZX0FERFJFU1MocEFkZHJlc3MsIGhuYW5kKSk7CisgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQUREUl9BUkVBKSkgPSBBRERSXzNSRF9DWUNMRShBUlJBWV9BRERSRVNTKHBBZGRyZXNzLCBobmFuZCkpOwogICAgIF9fRFNCKCk7CiAKLSAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKERldmljZUFkZHJlc3MgfCBDTURfQVJFQSkpID0gTkFORF9DTURfRVJBU0UxOworICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IENNRF9BUkVBKSkgPSBOQU5EX0NNRF9FUkFTRTE7CiAgICAgX19EU0IoKTsKIAogICAgIC8qIFVwZGF0ZSB0aGUgTkFORCBjb250cm9sbGVyIHN0YXRlICovCkBAIC0xOTgwLDcgKzIwMzAsNyBAQAogICBfX0hBTF9VTkxPQ0soaG5hbmQpOwogICByZXR1cm4gc3RhdHVzOwogfQotI2VuZGlmCisjZW5kaWYgLyogVVNFX0hBTF9OQU5EX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCiAvKioKICAgKiBAfQpAQCAtMjE0MiwxNyArMjE5MiwxNyBAQAogdWludDMyX3QgSEFMX05BTkRfUmVhZF9TdGF0dXMoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCkKIHsKICAgdWludDMyX3QgZGF0YTsKLSAgdWludDMyX3QgRGV2aWNlQWRkcmVzczsKKyAgdWludDMyX3QgZGV2aWNlYWRkcmVzczsKICAgVU5VU0VEKGhuYW5kKTsKIAogICAvKiBJZGVudGlmeSB0aGUgZGV2aWNlIGFkZHJlc3MgKi8KLSAgRGV2aWNlQWRkcmVzcyA9IE5BTkRfREVWSUNFOworICBkZXZpY2VhZGRyZXNzID0gTkFORF9ERVZJQ0U7CiAKICAgLyogU2VuZCBSZWFkIHN0YXR1cyBvcGVyYXRpb24gY29tbWFuZCAqLwotICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKERldmljZUFkZHJlc3MgfCBDTURfQVJFQSkpID0gTkFORF9DTURfU1RBVFVTOworICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBDTURfQVJFQSkpID0gTkFORF9DTURfU1RBVFVTOwogCiAgIC8qIFJlYWQgc3RhdHVzIHJlZ2lzdGVyIGRhdGEgKi8KLSAgZGF0YSA9ICooX19JTyB1aW50OF90ICopRGV2aWNlQWRkcmVzczsKKyAgZGF0YSA9ICooX19JTyB1aW50OF90ICopZGV2aWNlYWRkcmVzczsKIAogICAvKiBSZXR1cm4gdGhlIHN0YXR1cyAqLwogICBpZiAoKGRhdGEgJiBOQU5EX0VSUk9SKSA9PSBOQU5EX0VSUk9SKQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDV4eF9oYWxfbm9yLmMgYi9TcmMvc3RtMzJsNXh4X2hhbF9ub3IuYwppbmRleCA5YmNiZmQ1Li4zZTA1Y2I4IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNXh4X2hhbF9ub3IuYworKysgYi9TcmMvc3RtMzJsNXh4X2hhbF9ub3IuYwpAQCAtNDcyLDkgKzQ3MiwxMiBAQAogICAgIHsKICAgICAgIC8qIFJlYWQgdGhlIE5PUiBJRHMgKi8KICAgICAgIHBOT1JfSUQtPk1hbnVmYWN0dXJlcl9Db2RlID0gKihfX0lPIHVpbnQxNl90ICopIE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBNQ19BRERSRVNTKTsKLSAgICAgIHBOT1JfSUQtPkRldmljZV9Db2RlMSAgICAgID0gKihfX0lPIHVpbnQxNl90ICopIE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBERVZJQ0VfQ09ERTFfQUREUik7Ci0gICAgICBwTk9SX0lELT5EZXZpY2VfQ29kZTIgICAgICA9ICooX19JTyB1aW50MTZfdCAqKSBOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgREVWSUNFX0NPREUyX0FERFIpOwotICAgICAgcE5PUl9JRC0+RGV2aWNlX0NvZGUzICAgICAgPSAqKF9fSU8gdWludDE2X3QgKikgTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIERFVklDRV9DT0RFM19BRERSKTsKKyAgICAgIHBOT1JfSUQtPkRldmljZV9Db2RlMSAgICAgID0gKihfX0lPIHVpbnQxNl90ICopIE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVWSUNFX0NPREUxX0FERFIpOworICAgICAgcE5PUl9JRC0+RGV2aWNlX0NvZGUyICAgICAgPSAqKF9fSU8gdWludDE2X3QgKikgTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERVZJQ0VfQ09ERTJfQUREUik7CisgICAgICBwTk9SX0lELT5EZXZpY2VfQ29kZTMgICAgICA9ICooX19JTyB1aW50MTZfdCAqKSBOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFVklDRV9DT0RFM19BRERSKTsKICAgICB9CiAKICAgICAvKiBDaGVjayB0aGUgTk9SIGNvbnRyb2xsZXIgc3RhdGUgKi8KQEAgLTczOSw3ICs3NDIsOSBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05PUl9SZWFkQnVmZmVyKE5PUl9IYW5kbGVUeXBlRGVmICpobm9yLCB1aW50MzJfdCB1d0FkZHJlc3MsIHVpbnQxNl90ICpwRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1d0J1ZmZlclNpemUpCiB7Ci0gIHVpbnQzMl90IGRldmljZWFkZHJlc3MsIHNpemUgPSB1d0J1ZmZlclNpemUsIGFkZHJlc3MgPSB1d0FkZHJlc3M7CisgIHVpbnQzMl90IGRldmljZWFkZHJlc3M7CisgIHVpbnQzMl90IHNpemUgPSB1d0J1ZmZlclNpemU7CisgIHVpbnQzMl90IGFkZHJlc3MgPSB1d0FkZHJlc3M7CiAgIHVpbnQxNl90ICpkYXRhID0gcERhdGE7CiAgIEhBTF9OT1JfU3RhdGVUeXBlRGVmIHN0YXRlOwogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CkBAIC04NzAsNyArODc1LDcgQEAKIAogICAgIC8qIEluaXRpYWxpemUgdmFyaWFibGVzICovCiAgICAgcF9jdXJyZW50YWRkcmVzcyAgPSAodWludDE2X3QgKikoZGV2aWNlYWRkcmVzcyArIHV3QWRkcmVzcyk7Ci0gICAgcF9lbmRhZGRyZXNzICAgICAgPSAodWludDE2X3QgKikoZGV2aWNlYWRkcmVzcyArIHV3QWRkcmVzcyArICgyVSoodXdCdWZmZXJTaXplIC0gMVUpKSk7CisgICAgcF9lbmRhZGRyZXNzICAgICAgPSAodWludDE2X3QgKikoZGV2aWNlYWRkcmVzcyArIHV3QWRkcmVzcyArICgyVSAqICh1d0J1ZmZlclNpemUgLSAxVSkpKTsKIAogICAgIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9BTURfRlVKSVRTVV9DT01NQU5EX1NFVCkKICAgICB7CkBAIC05MDAsNyArOTA1LDcgQEAKICAgICAgIHdoaWxlIChwX2N1cnJlbnRhZGRyZXNzIDw9IHBfZW5kYWRkcmVzcykKICAgICAgIHsKICAgICAgICAgTk9SX1dSSVRFKHBfY3VycmVudGFkZHJlc3MsICpkYXRhKTsKLSAgICAgICAgCisKICAgICAgICAgZGF0YSsrOwogICAgICAgICBwX2N1cnJlbnRhZGRyZXNzICsrOwogICAgICAgfQpAQCAtMTM4OSw3ICsxMzk0LDggQEAKIEhBTF9OT1JfU3RhdHVzVHlwZURlZiBIQUxfTk9SX0dldFN0YXR1cyhOT1JfSGFuZGxlVHlwZURlZiAqaG5vciwgdWludDMyX3QgQWRkcmVzcywgdWludDMyX3QgVGltZW91dCkKIHsKICAgSEFMX05PUl9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9OT1JfU1RBVFVTX09OR09JTkc7Ci0gIHVpbnQxNl90IHRtcFNSMSwgdG1wU1IyOworICB1aW50MTZfdCB0bXBzcjE7CisgIHVpbnQxNl90IHRtcHNyMjsKICAgdWludDMyX3QgdGlja3N0YXJ0OwogCiAgIC8qIFBvbGwgb24gTk9SIG1lbW9yeSBSZWFkeS9CdXN5IHNpZ25hbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTQxNCwyOSArMTQyMCwyOSBAQAogICAgICAgfQogCiAgICAgICAvKiBSZWFkIE5PUiBzdGF0dXMgcmVnaXN0ZXIgKERRNiBhbmQgRFE1KSAqLwotICAgICAgdG1wU1IxID0gKihfX0lPIHVpbnQxNl90ICopQWRkcmVzczsKLSAgICAgIHRtcFNSMiA9ICooX19JTyB1aW50MTZfdCAqKUFkZHJlc3M7CisgICAgICB0bXBzcjEgPSAqKF9fSU8gdWludDE2X3QgKilBZGRyZXNzOworICAgICAgdG1wc3IyID0gKihfX0lPIHVpbnQxNl90ICopQWRkcmVzczsKIAogICAgICAgLyogSWYgRFE2IGRpZCBub3QgdG9nZ2xlIGJldHdlZW4gdGhlIHR3byByZWFkcyB0aGVuIHJldHVybiBIQUxfTk9SX1NUQVRVU19TVUNDRVNTICAqLwotICAgICAgaWYgKCh0bXBTUjEgJiBOT1JfTUFTS19TVEFUVVNfRFE2KSA9PSAodG1wU1IyICYgTk9SX01BU0tfU1RBVFVTX0RRNikpCisgICAgICBpZiAoKHRtcHNyMSAmIE5PUl9NQVNLX1NUQVRVU19EUTYpID09ICh0bXBzcjIgJiBOT1JfTUFTS19TVEFUVVNfRFE2KSkKICAgICAgIHsKICAgICAgICAgcmV0dXJuIEhBTF9OT1JfU1RBVFVTX1NVQ0NFU1MgOwogICAgICAgfQogCi0gICAgICBpZiAoKHRtcFNSMSAmIE5PUl9NQVNLX1NUQVRVU19EUTUpID09IE5PUl9NQVNLX1NUQVRVU19EUTUpCisgICAgICBpZiAoKHRtcHNyMSAmIE5PUl9NQVNLX1NUQVRVU19EUTUpID09IE5PUl9NQVNLX1NUQVRVU19EUTUpCiAgICAgICB7CiAgICAgICAgIHN0YXR1cyA9IEhBTF9OT1JfU1RBVFVTX09OR09JTkc7CiAgICAgICB9CiAKLSAgICAgIHRtcFNSMSA9ICooX19JTyB1aW50MTZfdCAqKUFkZHJlc3M7Ci0gICAgICB0bXBTUjIgPSAqKF9fSU8gdWludDE2X3QgKilBZGRyZXNzOworICAgICAgdG1wc3IxID0gKihfX0lPIHVpbnQxNl90ICopQWRkcmVzczsKKyAgICAgIHRtcHNyMiA9ICooX19JTyB1aW50MTZfdCAqKUFkZHJlc3M7CiAKICAgICAgIC8qIElmIERRNiBkaWQgbm90IHRvZ2dsZSBiZXR3ZWVuIHRoZSB0d28gcmVhZHMgdGhlbiByZXR1cm4gSEFMX05PUl9TVEFUVVNfU1VDQ0VTUyAgKi8KLSAgICAgIGlmICgodG1wU1IxICYgTk9SX01BU0tfU1RBVFVTX0RRNikgPT0gKHRtcFNSMiAmIE5PUl9NQVNLX1NUQVRVU19EUTYpKQorICAgICAgaWYgKCh0bXBzcjEgJiBOT1JfTUFTS19TVEFUVVNfRFE2KSA9PSAodG1wc3IyICYgTk9SX01BU0tfU1RBVFVTX0RRNikpCiAgICAgICB7CiAgICAgICAgIHJldHVybiBIQUxfTk9SX1NUQVRVU19TVUNDRVNTOwogICAgICAgfQotICAgICAgaWYgKCh0bXBTUjEgJiBOT1JfTUFTS19TVEFUVVNfRFE1KSA9PSBOT1JfTUFTS19TVEFUVVNfRFE1KQorICAgICAgaWYgKCh0bXBzcjEgJiBOT1JfTUFTS19TVEFUVVNfRFE1KSA9PSBOT1JfTUFTS19TVEFUVVNfRFE1KQogICAgICAgewogICAgICAgICByZXR1cm4gSEFMX05PUl9TVEFUVVNfRVJST1I7CiAgICAgICB9CkBAIC0xNDQ3LDIxICsxNDUzLDIxIEBACiAgICAgZG8KICAgICB7CiAgICAgICBOT1JfV1JJVEUoQWRkcmVzcywgTk9SX0NNRF9SRUFEX1NUQVRVU19SRUcpOwotICAgICAgdG1wU1IyID0gKihfX0lPIHVpbnQxNl90KikoQWRkcmVzcyk7CisgICAgICB0bXBzcjIgPSAqKF9fSU8gdWludDE2X3QgKikoQWRkcmVzcyk7CiAKICAgICAgIC8qIENoZWNrIGZvciB0aGUgVGltZW91dCAqLwotICAgICAgaWYoVGltZW91dCAhPSBIQUxfTUFYX0RFTEFZKQorICAgICAgaWYgKFRpbWVvdXQgIT0gSEFMX01BWF9ERUxBWSkKICAgICAgIHsKICAgICAgICAgaWYgKCgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBUaW1lb3V0KSB8fCAoVGltZW91dCA9PSAwVSkpCiAgICAgICAgIHsKICAgICAgICAgICByZXR1cm4gSEFMX05PUl9TVEFUVVNfVElNRU9VVDsKICAgICAgICAgfQogICAgICAgfQotICAgIH0gd2hpbGUgKCh0bXBTUjIgJiBOT1JfTUFTS19TVEFUVVNfRFE3KSA9PSAwVSk7CisgICAgfSB3aGlsZSAoKHRtcHNyMiAmIE5PUl9NQVNLX1NUQVRVU19EUTcpID09IDBVKTsKIAogICAgIE5PUl9XUklURShBZGRyZXNzLCBOT1JfQ01EX1JFQURfU1RBVFVTX1JFRyk7Ci0gICAgdG1wU1IxID0gKihfX0lPIHVpbnQxNl90KikoQWRkcmVzcyk7Ci0gICAgaWYoKHRtcFNSMSAgJiAoTk9SX01BU0tfU1RBVFVTX0RRNSB8IE5PUl9NQVNLX1NUQVRVU19EUTQpKSAhPSAwVSkKKyAgICB0bXBzcjEgPSAqKF9fSU8gdWludDE2X3QgKikoQWRkcmVzcyk7CisgICAgaWYgKCh0bXBzcjEgICYgKE5PUl9NQVNLX1NUQVRVU19EUTUgfCBOT1JfTUFTS19TVEFUVVNfRFE0KSkgIT0gMFUpCiAgICAgewogICAgICAgLyogQ2xlYXIgdGhlIFN0YXR1cyBSZWdpc3RlciAgKi8KICAgICAgIE5PUl9XUklURShBZGRyZXNzLCBOT1JfQ01EX1JFQURfU1RBVFVTX1JFRyk7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNXh4X2hhbF9vcGFtcC5jIGIvU3JjL3N0bTMybDV4eF9oYWxfb3BhbXAuYwppbmRleCA3NzMzZWUwLi5hOGI4YzY4IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNXh4X2hhbF9vcGFtcC5jCisrKyBiL1NyYy9zdG0zMmw1eHhfaGFsX29wYW1wLmMKQEAgLTExNTQsMTEgKzExNTQsNiBAQAogCiAjZW5kaWYgLyogVVNFX0hBTF9PUEFNUF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAotCi0vKioKLSAgKiBAfQotICAqLwotICAKICAgLyoqCiAgICogQH0KICAgKi8gCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNXh4X2hhbF9vcGFtcF9leC5jIGIvU3JjL3N0bTMybDV4eF9oYWxfb3BhbXBfZXguYwppbmRleCBlNTk1Njk0Li4wMmY3MTZjIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNXh4X2hhbF9vcGFtcF9leC5jCisrKyBiL1NyYy9zdG0zMmw1eHhfaGFsX29wYW1wX2V4LmMKQEAgLTQ1LDExICs0NSwxMSBAQAogLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qKiBAZGVmZ3JvdXAgT1BBTVBfRXhwb3J0ZWRfRnVuY3Rpb25zIE9QQU1QIEV4cG9ydGVkIEZ1bmN0aW9ucworLyoqIEBkZWZncm91cCBPUEFNUEV4X0V4cG9ydGVkX0Z1bmN0aW9ucyBPUEFNUEV4IEV4dGVuZGVkIEV4cG9ydGVkIEZ1bmN0aW9ucwogICAqIEB7CiAgICovCiAKLS8qKiBAYWRkdG9ncm91cCBPUEFNUEV4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEKKy8qKiBAZGVmZ3JvdXAgT1BBTVBFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxIEV4dGVuZGVkIG9wZXJhdGlvbiBmdW5jdGlvbnMKICAgKiBAYnJpZWYgICAgRXh0ZW5kZWQgb3BlcmF0aW9uIGZ1bmN0aW9ucwogICAqCiBAdmVyYmF0aW0KQEAgLTM2NSw3ICszNjUsNyBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgT1BBTVBFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKKy8qKiBAZGVmZ3JvdXAgT1BBTVBFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyIEV4dGVuZGVkIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKICAqICBAYnJpZWYgICBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCiAgKgogQHZlcmJhdGltCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNXh4X2hhbF9wY2QuYyBiL1NyYy9zdG0zMmw1eHhfaGFsX3BjZC5jCmluZGV4IDY0MzQ5MjguLmNiMzUzODkgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw1eHhfaGFsX3BjZC5jCisrKyBiL1NyYy9zdG0zMmw1eHhfaGFsX3BjZC5jCkBAIC0yMDYsNyArMjA2LDcgQEAKICAgewogICAgICh2b2lkKUhBTF9QQ0RFeF9BY3RpdmF0ZUxQTShocGNkKTsKICAgfQotICAKKwogICByZXR1cm4gSEFMX09LOwogfQogCkBAIC0yOTgsNyArMjk4LDkgQEAKICAgKiBAcGFyYW0gIHBDYWxsYmFjayBwb2ludGVyIHRvIHRoZSBDYWxsYmFjayBmdW5jdGlvbgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9SZWdpc3RlckNhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCBIQUxfUENEX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsIHBQQ0RfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjaykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfUmVnaXN0ZXJDYWxsYmFjayhQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQUxfUENEX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFBDRF9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKQogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKQEAgLTUwOCw3ICs1MTAsOCBAQAogICAqIEBwYXJhbSAgcENhbGxiYWNrIHBvaW50ZXIgdG8gdGhlIFVTQiBQQ0QgRGF0YSBPVVQgU3RhZ2UgQ2FsbGJhY2sgZnVuY3Rpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfUmVnaXN0ZXJEYXRhT3V0U3RhZ2VDYWxsYmFjayhQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgcFBDRF9EYXRhT3V0U3RhZ2VDYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9SZWdpc3RlckRhdGFPdXRTdGFnZUNhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBQQ0RfRGF0YU91dFN0YWdlQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjaykKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCkBAIC01ODEsNyArNTg0LDggQEAKICAgKiBAcGFyYW0gIHBDYWxsYmFjayBwb2ludGVyIHRvIHRoZSBVU0IgUENEIERhdGEgSU4gU3RhZ2UgQ2FsbGJhY2sgZnVuY3Rpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfUmVnaXN0ZXJEYXRhSW5TdGFnZUNhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCBwUENEX0RhdGFJblN0YWdlQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjaykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfUmVnaXN0ZXJEYXRhSW5TdGFnZUNhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFBDRF9EYXRhSW5TdGFnZUNhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIApAQCAtNjU0LDcgKzY1OCw4IEBACiAgICogQHBhcmFtICBwQ2FsbGJhY2sgcG9pbnRlciB0byB0aGUgVVNCIFBDRCBJc28gT1VUIGluY29tcGxldGUgQ2FsbGJhY2sgZnVuY3Rpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfUmVnaXN0ZXJJc29PdXRJbmNwbHRDYWxsYmFjayhQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgcFBDRF9Jc29PdXRJbmNwbHRDYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9SZWdpc3Rlcklzb091dEluY3BsdENhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBQQ0RfSXNvT3V0SW5jcGx0Q2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjaykKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCkBAIC03MjcsNyArNzMyLDggQEAKICAgKiBAcGFyYW0gIHBDYWxsYmFjayBwb2ludGVyIHRvIHRoZSBVU0IgUENEIElzbyBJTiBpbmNvbXBsZXRlIENhbGxiYWNrIGZ1bmN0aW9uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX1JlZ2lzdGVySXNvSW5JbmNwbHRDYWxsYmFjayhQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgcFBDRF9Jc29JbkluY3BsdENhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX1JlZ2lzdGVySXNvSW5JbmNwbHRDYWxsYmFjayhQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBQQ0RfSXNvSW5JbmNwbHRDYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKQogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKQEAgLTEzNTcsNyArMTM2Myw4IEBACiAgICogQHBhcmFtICBlcF90eXBlIGVuZHBvaW50IHR5cGUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRVBfT3BlbihQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyLCB1aW50MTZfdCBlcF9tcHMsIHVpbnQ4X3QgZXBfdHlwZSkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRVBfT3BlbihQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGVwX21wcywgdWludDhfdCBlcF90eXBlKQogewogICBIQUxfU3RhdHVzVHlwZURlZiAgcmV0ID0gSEFMX09LOwogICBQQ0RfRVBUeXBlRGVmICplcDsKQEAgLTE1MzQsMTAgKzE1NDEsNyBAQAogICBfX0hBTF9MT0NLKGhwY2QpOwogCiAgICh2b2lkKVVTQl9FUFNldFN0YWxsKGhwY2QtPkluc3RhbmNlLCBlcCk7Ci0gIGlmICgoZXBfYWRkciAmIEVQX0FERFJfTVNLKSA9PSAwVSkKLSAgewotICAgICh2b2lkKVVTQl9FUDBfT3V0U3RhcnQoaHBjZC0+SW5zdGFuY2UsICh1aW50OF90ICopaHBjZC0+U2V0dXApOwotICB9CisKICAgX19IQUxfVU5MT0NLKGhwY2QpOwogCiAgIHJldHVybiBIQUxfT0s7CkBAIC0xNjcyLDYgKzE2NzYsNyBAQAogICB3aGlsZSAoKGhwY2QtPkluc3RhbmNlLT5JU1RSICYgVVNCX0lTVFJfQ1RSKSAhPSAwVSkKICAgewogICAgIHdJc3RyID0gaHBjZC0+SW5zdGFuY2UtPklTVFI7CisKICAgICAvKiBleHRyYWN0IGhpZ2hlc3QgcHJpb3JpdHkgZW5kcG9pbnQgbnVtYmVyICovCiAgICAgZXBpbmRleCA9ICh1aW50OF90KSh3SXN0ciAmIFVTQl9JU1RSX0VQX0lEKTsKIApAQCAtMTc1NCw4ICsxNzU5LDExIEBACiAjZW5kaWYgLyogVVNFX0hBTF9QQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAgICAgICAgICAgfQogCi0gICAgICAgICAgUENEX1NFVF9FUF9SWF9DTlQoaHBjZC0+SW5zdGFuY2UsIFBDRF9FTkRQMCwgZXAtPm1heHBhY2tldCk7Ci0gICAgICAgICAgUENEX1NFVF9FUF9SWF9TVEFUVVMoaHBjZC0+SW5zdGFuY2UsIFBDRF9FTkRQMCwgVVNCX0VQX1JYX1ZBTElEKTsKKyAgICAgICAgICBpZiAoKFBDRF9HRVRfRU5EUE9JTlQoaHBjZC0+SW5zdGFuY2UsIFBDRF9FTkRQMCkgJiBVU0JfRVBfU0VUVVApID09IDBVKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIFBDRF9TRVRfRVBfUlhfQ05UKGhwY2QtPkluc3RhbmNlLCBQQ0RfRU5EUDAsIGVwLT5tYXhwYWNrZXQpOworICAgICAgICAgICAgUENEX1NFVF9FUF9SWF9TVEFUVVMoaHBjZC0+SW5zdGFuY2UsIFBDRF9FTkRQMCwgVVNCX0VQX1JYX1ZBTElEKTsKKyAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CkBAIC0xODQyLDkgKzE4NTAsOCBAQAogICAgICAgICAvKiBjbGVhciBpbnQgZmxhZyAqLwogICAgICAgICBQQ0RfQ0xFQVJfVFhfRVBfQ1RSKGhwY2QtPkluc3RhbmNlLCBlcGluZGV4KTsKIAotICAgICAgICAvKiBNYW5hZ2UgYWxsIG5vbiBidWxrIHRyYW5zYWN0aW9uIG9yIEJ1bGsgU2luZ2xlIEJ1ZmZlciBUcmFuc2FjdGlvbiAqLwotICAgICAgICBpZiAoKGVwLT50eXBlICE9IEVQX1RZUEVfQlVMSykgfHwKLSAgICAgICAgICAgICgoZXAtPnR5cGUgPT0gRVBfVFlQRV9CVUxLKSAmJiAoKHdFUFZhbCAmIFVTQl9FUF9LSU5EKSA9PSAwVSkpKQorICAgICAgICAvKiBNYW5hZ2UgQnVsayBTaW5nbGUgQnVmZmVyIFRyYW5zYWN0aW9uICovCisgICAgICAgIGlmICgoZXAtPnR5cGUgPT0gRVBfVFlQRV9CVUxLKSAmJiAoKHdFUFZhbCAmIFVTQl9FUF9LSU5EKSA9PSAwVSkpCiAgICAgICAgIHsKICAgICAgICAgICAvKiBtdWx0aS1wYWNrZXQgb24gdGhlIE5PTiBjb250cm9sIElOIGVuZHBvaW50ICovCiAgICAgICAgICAgVHhCeXRlTmJyZSA9ICh1aW50MTZfdClQQ0RfR0VUX0VQX1RYX0NOVChocGNkLT5JbnN0YW5jZSwgZXAtPm51bSk7CkBAIC0xODc2LDcgKzE4ODMsNyBAQAogICAgICAgICAgICAgKHZvaWQpVVNCX0VQU3RhcnRYZmVyKGhwY2QtPkluc3RhbmNlLCBlcCk7CiAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIC8qIGJ1bGsgaW4gZG91YmxlIGJ1ZmZlciBlbmFibGUgaW4gY2FzZSBvZiB0cmFuc2Zlckxlbj4gRXBfTXBzICovCisgICAgICAgIC8qIERvdWJsZSBCdWZmZXIgSXNvL2J1bGsgSU4gKGJ1bGsgdHJhbnNmZXIgTGVuID4gRXBfTXBzKSAqLwogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICAodm9pZClIQUxfUENEX0VQX0RCX1RyYW5zbWl0KGhwY2QsIGVwLCB3RVBWYWwpOwpAQCAtMTkyMiw3ICsxOTI5LDcgQEAKICAgICAgIFBDRF9TRVRfRVBfUlhfU1RBVFVTKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtLCBVU0JfRVBfUlhfTkFLKTsKICAgICB9CiAKLSAgICAvKiBDaGVjayBpZiBCdWZmZXIxIGlzIGluIGJsb2NrZWQgc2F0ZSB3aGljaCByZXF1aXJlcyB0byB0b2dnbGUgKi8KKyAgICAvKiBDaGVjayBpZiBCdWZmZXIxIGlzIGluIGJsb2NrZWQgc3RhdGUgd2hpY2ggcmVxdWlyZXMgdG8gdG9nZ2xlICovCiAgICAgaWYgKCh3RVBWYWwgJiBVU0JfRVBfRFRPR19UWCkgIT0gMFUpCiAgICAgewogICAgICAgUENEX0ZyZWVVc2VyQnVmZmVyKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtLCAwVSk7CkBAIC0yMDAwLDYgKzIwMDcsOSBAQAogICAgIC8qIFRyYW5zZmVyIGlzIGNvbXBsZXRlZCAqLwogICAgIGlmIChlcC0+eGZlcl9sZW4gPT0gMFUpCiAgICAgeworICAgICAgUENEX1NFVF9FUF9EQlVGMF9DTlQoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0sIGVwLT5pc19pbiwgMFUpOworICAgICAgUENEX1NFVF9FUF9EQlVGMV9DTlQoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0sIGVwLT5pc19pbiwgMFUpOworCiAgICAgICAvKiBUWCBDT01QTEVURSAqLwogI2lmIChVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCiAgICAgICBocGNkLT5EYXRhSW5TdGFnZUNhbGxiYWNrKGhwY2QsIGVwLT5udW0pOwpAQCAtMjA3MCw2ICsyMDgwLDkgQEAKICAgICAvKiBUcmFuc2ZlciBpcyBjb21wbGV0ZWQgKi8KICAgICBpZiAoZXAtPnhmZXJfbGVuID09IDBVKQogICAgIHsKKyAgICAgIFBDRF9TRVRfRVBfREJVRjBfQ05UKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtLCBlcC0+aXNfaW4sIDBVKTsKKyAgICAgIFBDRF9TRVRfRVBfREJVRjFfQ05UKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtLCBlcC0+aXNfaW4sIDBVKTsKKwogICAgICAgLyogVFggQ09NUExFVEUgKi8KICNpZiAoVVNFX0hBTF9QQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogICAgICAgaHBjZC0+RGF0YUluU3RhZ2VDYWxsYmFjayhocGNkLCBlcC0+bnVtKTsKQEAgLTIwNzcsNyArMjA5MCw3IEBACiAgICAgICBIQUxfUENEX0RhdGFJblN0YWdlQ2FsbGJhY2soaHBjZCwgZXAtPm51bSk7CiAjZW5kaWYgLyogVVNFX0hBTF9QQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKLSAgICAgIC8qbmVlZCB0byBGcmVlIFVTQiBCdWZmKi8KKyAgICAgIC8qIG5lZWQgdG8gRnJlZSBVU0IgQnVmZiAqLwogICAgICAgaWYgKCh3RVBWYWwgJiBVU0JfRVBfRFRPR19SWCkgPT0gMFUpCiAgICAgICB7CiAgICAgICAgIFBDRF9GcmVlVXNlckJ1ZmZlcihocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgMVUpOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDV4eF9oYWxfcGNkX2V4LmMgYi9TcmMvc3RtMzJsNXh4X2hhbF9wY2RfZXguYwppbmRleCAzZjdlNTAwLi4wMDM1OTIwIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNXh4X2hhbF9wY2RfZXguYworKysgYi9TcmMvc3RtMzJsNXh4X2hhbF9wY2RfZXguYwpAQCAtNzgsMTAgKzc4LDggQEAKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIAotSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9QQ0RFeF9QTUFDb25maWcoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBlcF9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgZXBfa2luZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHBtYWFkcmVzcykKK0hBTF9TdGF0dXNUeXBlRGVmICBIQUxfUENERXhfUE1BQ29uZmlnKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50MTZfdCBlcF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgZXBfa2luZCwgdWludDMyX3QgcG1hYWRyZXNzKQogewogICBQQ0RfRVBUeXBlRGVmICplcDsKIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDV4eF9oYWxfcmNjLmMgYi9TcmMvc3RtMzJsNXh4X2hhbF9yY2MuYwppbmRleCA2OTY2MDZhLi5iYWI1MTljIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNXh4X2hhbF9yY2MuYworKysgYi9TcmMvc3RtMzJsNXh4X2hhbF9yY2MuYwpAQCAtNjUsOCArNjUsOCBAQAogLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGRlZmdyb3VwIFJDQ19Qcml2YXRlX0NvbnN0YW50cyBSQ0MgUHJpdmF0ZSBDb25zdGFudHMKLSAqIEB7Ci0gKi8KKyAgKiBAeworICAqLwogI2RlZmluZSBMU0lfVElNRU9VVF9WQUxVRSAgICAgICAgICA3VUwgICAgIC8qIDcgbXMgKG1heGltdW0gNm1zICsgMSkgKi8KICNkZWZpbmUgSFNJNDhfVElNRU9VVF9WQUxVRSAgICAgICAgMlVMICAgICAvKiAyIG1zIChtaW5pbXVtIFRpY2sgKyAxKSAqLwogI2RlZmluZSBQTExfVElNRU9VVF9WQUxVRSAgICAgICAgICAyVUwgICAgIC8qIDIgbXMgKG1pbmltdW0gVGljayArIDEpICovCkBAIC0yNTUsNyArMjU1LDExIEBACiAgIHsKICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gTVNJX1RJTUVPVVRfVkFMVUUpCiAgICAgewotICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgLyogTmV3IGNoZWNrIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbiAqLworICAgICAgaWYgKFJFQURfQklUKFJDQy0+Q1IsIFJDQ19DUl9NU0lSRFkpID09IDBVKQorICAgICAgeworICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICB9CiAgICAgfQogICB9CiAKQEAgLTI4MywxMiArMjg3LDE3IEBACiAgIHsKICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gQ0xPQ0tTV0lUQ0hfVElNRU9VVF9WQUxVRSkKICAgICB7Ci0gICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAvKiBOZXcgY2hlY2sgdG8gYXZvaWQgZmFsc2UgdGltZW91dCBkZXRlY3Rpb24gaW4gY2FzZSBvZiBwcmVlbXB0aW9uICovCisgICAgICBpZiAoUkVBRF9CSVQoUkNDLT5DRkdSLCBSQ0NfQ0ZHUl9TV1MpICE9IFJDQ19TWVNDTEtTT1VSQ0VfU1RBVFVTX01TSSkKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgfQogICAgIH0KICAgfQogCiAgIC8qIFJlc2V0IEhTSU9OLCBIU0lLRVJPTiwgSFNJQVNGUywgSFNFT04sIEhTRUNTU09OLCBQTExPTiwgUExMU0FJeE9OIGJpdHMgKi8KLSAgQ0xFQVJfQklUKFJDQy0+Q1IsIFJDQ19DUl9DU1NPTiB8IFJDQ19DUl9IU0VPTiB8IFJDQ19DUl9IU0lPTiB8IFJDQ19DUl9IU0lLRVJPTiB8IFJDQ19DUl9IU0lBU0ZTIHwgUkNDX0NSX1BMTE9OIHwgUkNDX0NSX1BMTFNBSTFPTiB8IFJDQ19DUl9QTExTQUkyT04pOworICBDTEVBUl9CSVQoUkNDLT5DUiwgUkNDX0NSX0NTU09OIHwgUkNDX0NSX0hTRU9OIHwgUkNDX0NSX0hTSU9OIHwgUkNDX0NSX0hTSUtFUk9OIHwgUkNDX0NSX0hTSUFTRlMgfCBSQ0NfQ1JfUExMT04gfAorICAgICAgICAgICAgUkNDX0NSX1BMTFNBSTFPTiB8IFJDQ19DUl9QTExTQUkyT04pOwogCiAgIC8qIEluc3VyZSBQTExSRFksIFBMTFNBSTFSRFkgYW5kIFBMTFNBSTJSRFkgKGlmIHByZXNlbnQpIGFyZSByZXNldCAqLwogICAvKiBHZXQgc3RhcnQgdGljayAqLwpAQCAtMjk3LDE5ICszMDYsMzMgQEAKICNpZiBkZWZpbmVkKFJDQ19QTExTQUkyX1NVUFBPUlQpCiAKICAgd2hpbGUgKFJFQURfQklUKFJDQy0+Q1IsIFJDQ19DUl9QTExSRFkgfCBSQ0NfQ1JfUExMU0FJMVJEWSB8IFJDQ19DUl9QTExTQUkyUkRZKSAhPSAwVSkKKyAgeworICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBQTExfVElNRU9VVF9WQUxVRSkKKyAgICB7CisgICAgICAvKiBOZXcgY2hlY2sgdG8gYXZvaWQgZmFsc2UgdGltZW91dCBkZXRlY3Rpb24gaW4gY2FzZSBvZiBwcmVlbXB0aW9uICovCisgICAgICBpZiAoUkVBRF9CSVQoUkNDLT5DUiwgUkNDX0NSX1BMTFJEWSB8IFJDQ19DUl9QTExTQUkxUkRZIHwgUkNDX0NSX1BMTFNBSTJSRFkpICE9IDBVKQorICAgICAgeworICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICB9CisgICAgfQorICB9CiAKICNlbHNlCiAKICAgd2hpbGUgKFJFQURfQklUKFJDQy0+Q1IsIFJDQ19DUl9QTExSRFkgfCBSQ0NfQ1JfUExMU0FJMVJEWSkgIT0gMFUpCi0KLSNlbmRpZgogICB7CiAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFBMTF9USU1FT1VUX1ZBTFVFKQogICAgIHsKLSAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgIGlmIChSRUFEX0JJVChSQ0MtPkNSLCBSQ0NfQ1JfUExMUkRZIHwgUkNDX0NSX1BMTFNBSTFSRFkpICE9IDBVKQorICAgICAgeworICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICB9CiAgICAgfQogICB9CiAKKyNlbmRpZiAvKiBSQ0NfUExMU0FJMl9TVVBQT1JUICovCisKICAgLyogUmVzZXQgUExMQ0ZHUiByZWdpc3RlciAqLwogICBDTEVBUl9SRUcoUkNDLT5QTExDRkdSKTsKICAgU0VUX0JJVChSQ0MtPlBMTENGR1IsIFJDQ19QTExDRkdSX1BMTE5fNCk7CkBAIC0zMzQsNyArMzU3LDExIEBACiAgIHsKICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gTFNJX1RJTUVPVVRfVkFMVUUpCiAgICAgewotICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgLyogTmV3IGNoZWNrIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbiAqLworICAgICAgaWYgKFJFQURfQklUKFJDQy0+Q1NSLCBSQ0NfQ1NSX0xTSVJEWSkgIT0gMFUpCisgICAgICB7CisgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgIH0KICAgICB9CiAgIH0KIApAQCAtNTAwLDcgKzUyNywxMSBAQAogICAgICAgICB7CiAgICAgICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IE1TSV9USU1FT1VUX1ZBTFVFKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgICAgICAgIGlmIChSRUFEX0JJVChSQ0MtPkNSLCBSQ0NfQ1JfTVNJUkRZKSA9PSAwVSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAvKiBTZWxlY3RzIHRoZSBNdWx0aXBsZSBTcGVlZCBvc2NpbGxhdG9yIChNU0kpIGNsb2NrIHJhbmdlIC4qLwpAQCAtNTIyLDcgKzU1MywxMSBAQAogICAgICAgICB7CiAgICAgICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IE1TSV9USU1FT1VUX1ZBTFVFKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgICAgICAgIGlmIChSRUFEX0JJVChSQ0MtPkNSLCBSQ0NfQ1JfTVNJUkRZKSAhPSAwVSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQpAQCAtNTU5LDcgKzU5NCwxMSBAQAogICAgICAgICB7CiAgICAgICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IEhTRV9USU1FT1VUX1ZBTFVFKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgICAgICAgIGlmIChSRUFEX0JJVChSQ0MtPkNSLCBSQ0NfQ1JfSFNFUkRZKSA9PSAwVSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQpAQCAtNTczLDcgKzYxMiwxMSBAQAogICAgICAgICB7CiAgICAgICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IEhTRV9USU1FT1VUX1ZBTFVFKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgICAgICAgIGlmIChSRUFEX0JJVChSQ0MtPkNSLCBSQ0NfQ1JfSFNFUkRZKSAhPSAwVSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQpAQCAtNjE4LDcgKzY2MSwxMSBAQAogICAgICAgICB7CiAgICAgICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IEhTSV9USU1FT1VUX1ZBTFVFKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgICAgICAgIGlmIChSRUFEX0JJVChSQ0MtPkNSLCBSQ0NfQ1JfSFNJUkRZKSA9PSAwVSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC02MzgsNyArNjg1LDExIEBACiAgICAgICAgIHsKICAgICAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gSFNJX1RJTUVPVVRfVkFMVUUpCiAgICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAgICAgLyogTmV3IGNoZWNrIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbiAqLworICAgICAgICAgICAgaWYgKFJFQURfQklUKFJDQy0+Q1IsIFJDQ19DUl9IU0lSRFkpICE9IDBVKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CkBAIC02NzQsNyArNzI1LDExIEBACiAgICAgICB7CiAgICAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBMU0lfVElNRU9VVF9WQUxVRSkKICAgICAgICAgewotICAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgICAvKiBOZXcgY2hlY2sgdG8gYXZvaWQgZmFsc2UgdGltZW91dCBkZXRlY3Rpb24gaW4gY2FzZSBvZiBwcmVlbXB0aW9uICovCisgICAgICAgICAgaWYgKFJFQURfQklUKFJDQy0+Q1NSLCBSQ0NfQ1NSX0xTSVJEWSkgPT0gMFUpCisgICAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQogICAgIH0KQEAgLTY5MSw3ICs3NDYsMTEgQEAKICAgICAgIHsKICAgICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IExTSV9USU1FT1VUX1ZBTFVFKQogICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgICAgICBpZiAoUkVBRF9CSVQoUkNDLT5DU1IsIFJDQ19DU1JfTFNJUkRZKSAhPSAwVSkKKyAgICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtNzI0LDcgKzc4MywxMSBAQAogICAgICAgewogICAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUkNDX0RCUF9USU1FT1VUX1ZBTFVFKQogICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgICAgICBpZiAoSEFMX0lTX0JJVF9DTFIoUFdSLT5DUjEsIFBXUl9DUjFfREJQKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtNzYxLDcgKzgyNCwxMSBAQAogICAgICAgewogICAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUkNDX0xTRV9USU1FT1VUX1ZBTFVFKQogICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgICAgICBpZiAoUkVBRF9CSVQoUkNDLT5CRENSLCBSQ0NfQkRDUl9MU0VSRFkpID09IDBVKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KIApAQCAtNzc1LDcgKzg0MiwxMSBAQAogICAgICAgICB7CiAgICAgICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFJDQ19MU0VfVElNRU9VVF9WQUxVRSkKICAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgICAgICAvKiBOZXcgY2hlY2sgdG8gYXZvaWQgZmFsc2UgdGltZW91dCBkZXRlY3Rpb24gaW4gY2FzZSBvZiBwcmVlbXB0aW9uICovCisgICAgICAgICAgICBpZiAoUkVBRF9CSVQoUkNDLT5CRENSLCBSQ0NfQkRDUl9MU0VTWVNSRFkpID09IDBVKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CkBAIC03ODksNyArODYwLDExIEBACiAgICAgICAgIHsKICAgICAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUkNDX0xTRV9USU1FT1VUX1ZBTFVFKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgICAgICAgIGlmIChSRUFEX0JJVChSQ0MtPkJEQ1IsIFJDQ19CRENSX0xTRVNZU1JEWSkgIT0gMFUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTgwNCw3ICs4NzksMTEgQEAKICAgICAgIHsKICAgICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFJDQ19MU0VfVElNRU9VVF9WQUxVRSkKICAgICAgICAgewotICAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgICAvKiBOZXcgY2hlY2sgdG8gYXZvaWQgZmFsc2UgdGltZW91dCBkZXRlY3Rpb24gaW4gY2FzZSBvZiBwcmVlbXB0aW9uICovCisgICAgICAgICAgaWYgKFJFQURfQklUKFJDQy0+QkRDUiwgUkNDX0JEQ1JfTFNFUkRZKSAhPSAwVSkKKyAgICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CiAKQEAgLTgxOCw3ICs4OTcsMTEgQEAKICAgICAgICAgewogICAgICAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBSQ0NfTFNFX1RJTUVPVVRfVkFMVUUpCiAgICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAgICAgLyogTmV3IGNoZWNrIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbiAqLworICAgICAgICAgICAgaWYgKFJFQURfQklUKFJDQy0+QkRDUiwgUkNDX0JEQ1JfTFNFU1lTUkRZKSAhPSAwVSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQpAQCAtODUwLDcgKzkzMywxMSBAQAogICAgICAgewogICAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gSFNJNDhfVElNRU9VVF9WQUxVRSkKICAgICAgICAgewotICAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgICAvKiBOZXcgY2hlY2sgdG8gYXZvaWQgZmFsc2UgdGltZW91dCBkZXRlY3Rpb24gaW4gY2FzZSBvZiBwcmVlbXB0aW9uICovCisgICAgICAgICAgaWYgKFJFQURfQklUKFJDQy0+Q1JSQ1IsIFJDQ19DUlJDUl9IU0k0OFJEWSkgPT0gMFUpCisgICAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQogICAgIH0KQEAgLTg2Nyw3ICs5NTQsMTEgQEAKICAgICAgIHsKICAgICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IEhTSTQ4X1RJTUVPVVRfVkFMVUUpCiAgICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgICAgLyogTmV3IGNoZWNrIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbiAqLworICAgICAgICAgIGlmIChSRUFEX0JJVChSQ0MtPkNSUkNSLCBSQ0NfQ1JSQ1JfSFNJNDhSRFkpICE9IDBVKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CkBAIC05MDIsNyArOTkzLDExIEBACiAgICAgICAgIHsKICAgICAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUExMX1RJTUVPVVRfVkFMVUUpCiAgICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAgICAgLyogTmV3IGNoZWNrIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbiAqLworICAgICAgICAgICAgaWYgKFJFQURfQklUKFJDQy0+Q1IsIFJDQ19DUl9QTExSRFkpICE9IDBVKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTkyOCw3ICsxMDIzLDExIEBACiAgICAgICAgIHsKICAgICAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUExMX1RJTUVPVVRfVkFMVUUpCiAgICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAgICAgLyogTmV3IGNoZWNrIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbiAqLworICAgICAgICAgICAgaWYgKFJFQURfQklUKFJDQy0+Q1IsIFJDQ19DUl9QTExSRFkpID09IDBVKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CkBAIC05NTMsNyArMTA1MiwxMSBAQAogICAgICAgICB7CiAgICAgICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFBMTF9USU1FT1VUX1ZBTFVFKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgICAgICAgIGlmIChSRUFEX0JJVChSQ0MtPkNSLCBSQ0NfQ1JfUExMUkRZKSAhPSAwVSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQpAQCAtMTE2Miw3ICsxMjY1LDExIEBACiAgICAgewogICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IENMT0NLU1dJVENIX1RJTUVPVVRfVkFMVUUpCiAgICAgICB7Ci0gICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgLyogTmV3IGNoZWNrIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbiAqLworICAgICAgICBpZiAoX19IQUxfUkNDX0dFVF9TWVNDTEtfU09VUkNFKCkgIT0gKFJDQ19DbGtJbml0U3RydWN0LT5TWVNDTEtTb3VyY2UgPDwgUkNDX0NGR1JfU1dTX1BvcykpCisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTEyMjIsOCArMTMyOSw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgUkNDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDIgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucwotICogIEBicmllZiAgIFJDQyBjbG9ja3MgY29udHJvbCBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgIFJDQyBjbG9ja3MgY29udHJvbCBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICMjIyMjIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMgIyMjIyMKQEAgLTE2NDcsOCArMTc1NCw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgUkNDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMgQXR0cmlidXRlcyBtYW5hZ2VtZW50IGZ1bmN0aW9ucwotICogIEBicmllZiBBdHRyaWJ1dGVzIG1hbmFnZW1lbnQgZnVuY3Rpb25zLgotICoKKyAgKiAgQGJyaWVmIEF0dHJpYnV0ZXMgbWFuYWdlbWVudCBmdW5jdGlvbnMuCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgUkNDIGF0dHJpYnV0ZXMgZnVuY3Rpb25zICMjIyMjCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNXh4X2hhbF9yY2NfZXguYyBiL1NyYy9zdG0zMmw1eHhfaGFsX3JjY19leC5jCmluZGV4IDMyYzcwODMuLjU4NGVlNDUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw1eHhfaGFsX3JjY19leC5jCisrKyBiL1NyYy9zdG0zMmw1eHhfaGFsX3JjY19leC5jCkBAIC00MCw4ICs0MCw4IEBACiAvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBkZWZpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qKiBAZGVmZ3JvdXAgUkNDRXhfUHJpdmF0ZV9Db25zdGFudHMgUkNDRXggUHJpdmF0ZSBDb25zdGFudHMKLSAqIEB7Ci0gKi8KKyAgKiBAeworICAqLwogI2RlZmluZSBQTExTQUkxX1RJTUVPVVRfVkFMVUUgICAgKCh1aW50MzJfdCkyVSkgICAgLyogMiBtcyAobWluaW11bSBUaWNrICsgMSkgKi8KICNkZWZpbmUgUExMU0FJMl9USU1FT1VUX1ZBTFVFICAgICgodWludDMyX3QpMlUpICAgIC8qIDIgbXMgKG1pbmltdW0gVGljayArIDEpICovCiAjZGVmaW5lIFBMTF9USU1FT1VUX1ZBTFVFICAgICAgICAoKHVpbnQzMl90KTJVKSAgICAvKiAyIG1zIChtaW5pbXVtIFRpY2sgKyAxKSAqLwpAQCAtNzEsOCArNzEsOCBAQAogLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGRlZmdyb3VwIFJDQ0V4X1ByaXZhdGVfRnVuY3Rpb25zIFJDQ0V4IFByaXZhdGUgRnVuY3Rpb25zCi0gKiBAewotICovCisgICogQHsKKyAgKi8KIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBSQ0NFeF9QTExTb3VyY2VfRW5hYmxlKHVpbnQzMl90IFBsbFNvdXJjZSk7CiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgUkNDRXhfUExMU0FJMV9Db25maWcoUkNDX1BMTFNBSTFJbml0VHlwZURlZiAqcFBsbFNhaTEsIHVpbnQzMl90IERpdmlkZXIpOwogc3RhdGljIHVpbnQzMl90ICAgICAgICAgIFJDQ0V4X1BMTFNBSTFfR2V0VkNPRnJlcSh2b2lkKTsKQEAgLTkxLDggKzkxLDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBSQ0NFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxIEV4dGVuZGVkIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKLSAqICBAYnJpZWYgIEV4dGVuZGVkIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgRXh0ZW5kZWQgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgIyMjIyMgRXh0ZW5kZWQgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucyAgIyMjIyMKQEAgLTI3Niw3ICsyNzYsMTEgQEAKICAgICB7CiAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUkNDX0RCUF9USU1FT1VUX1ZBTFVFKQogICAgICAgewotICAgICAgICByZXQgPSBIQUxfVElNRU9VVDsKKyAgICAgICAgLyogTmV3IGNoZWNrIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbiAqLworICAgICAgICBpZiAoKFBXUi0+Q1IxICYgUFdSX0NSMV9EQlApID09IDBVKQorICAgICAgICB7CisgICAgICAgICAgcmV0ID0gSEFMX1RJTUVPVVQ7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgfQpAQCAtMzA4LDcgKzMxMiwxMSBAQAogICAgICAgICB7CiAgICAgICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFJDQ19MU0VfVElNRU9VVF9WQUxVRSkKICAgICAgICAgICB7Ci0gICAgICAgICAgICByZXQgPSBIQUxfVElNRU9VVDsKKyAgICAgICAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgICAgICAgIGlmIChSRUFEX0JJVChSQ0MtPkJEQ1IsIFJDQ19CRENSX0xTRVJEWSkgPT0gMFUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHJldCA9IEhBTF9USU1FT1VUOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgfQogICAgICAgICB9CkBAIC02NjEsNyArNjY5LDcgQEAKIAogICAgIC8qIENvbmZpZ3VyZSB0aGUgT2N0b1NQSSBjbG9jayBzb3VyY2UgKi8KICAgICBfX0hBTF9SQ0NfT1NQSV9DT05GSUcoUGVyaXBoQ2xrSW5pdC0+T3NwaUNsb2NrU2VsZWN0aW9uKTsKLSAgICAKKwogICAgIGlmIChQZXJpcGhDbGtJbml0LT5Pc3BpQ2xvY2tTZWxlY3Rpb24gPT0gUkNDX09TUElDTEtTT1VSQ0VfUExMKQogICAgIHsKICAgICAgIC8qIEVuYWJsZSBQTEw0OE0xQ0xLIG91dHB1dCBjbG9jayAqLwpAQCAtMTU5Nyw4ICsxNjA1LDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBSQ0NFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyIEV4dGVuZGVkIENsb2NrIG1hbmFnZW1lbnQgZnVuY3Rpb25zCi0gKiAgQGJyaWVmICBFeHRlbmRlZCBDbG9jayBtYW5hZ2VtZW50IGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICBFeHRlbmRlZCBDbG9jayBtYW5hZ2VtZW50IGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgIyMjIyMgRXh0ZW5kZWQgY2xvY2sgbWFuYWdlbWVudCBmdW5jdGlvbnMgICMjIyMjCkBAIC0xNjQyLDcgKzE2NTAsMTEgQEAKICAgewogICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBQTExTQUkxX1RJTUVPVVRfVkFMVUUpCiAgICAgewotICAgICAgc3RhdHVzID0gSEFMX1RJTUVPVVQ7CisgICAgICAvKiBOZXcgY2hlY2sgdG8gYXZvaWQgZmFsc2UgdGltZW91dCBkZXRlY3Rpb24gaW4gY2FzZSBvZiBwcmVlbXB0aW9uICovCisgICAgICBpZiAoUkVBRF9CSVQoUkNDLT5DUiwgUkNDX0NSX1BMTFNBSTFSRFkpICE9IDBVKQorICAgICAgeworICAgICAgICBzdGF0dXMgPSBIQUxfVElNRU9VVDsKKyAgICAgIH0KICAgICAgIGJyZWFrOwogICAgIH0KICAgfQpAQCAtMTY3Miw3ICsxNjg0LDExIEBACiAgICAgICB7CiAgICAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBQTExTQUkxX1RJTUVPVVRfVkFMVUUpCiAgICAgICAgIHsKLSAgICAgICAgICBzdGF0dXMgPSBIQUxfVElNRU9VVDsKKyAgICAgICAgICAvKiBOZXcgY2hlY2sgdG8gYXZvaWQgZmFsc2UgdGltZW91dCBkZXRlY3Rpb24gaW4gY2FzZSBvZiBwcmVlbXB0aW9uICovCisgICAgICAgICAgaWYgKFJFQURfQklUKFJDQy0+Q1IsIFJDQ19DUl9QTExTQUkxUkRZKSA9PSAwVSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBIQUxfVElNRU9VVDsKKyAgICAgICAgICB9CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTE3MDIsNyArMTcxOCwxMSBAQAogICB7CiAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFBMTFNBSTFfVElNRU9VVF9WQUxVRSkKICAgICB7Ci0gICAgICBzdGF0dXMgPSBIQUxfVElNRU9VVDsKKyAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgIGlmIChSRUFEX0JJVChSQ0MtPkNSLCBSQ0NfQ1JfUExMU0FJMVJEWSkgIT0gMFUpCisgICAgICB7CisgICAgICAgIHN0YXR1cyA9IEhBTF9USU1FT1VUOworICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgfQogICB9CkBAIC0xNzQzLDcgKzE3NjMsMTEgQEAKICAgewogICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBQTExTQUkyX1RJTUVPVVRfVkFMVUUpCiAgICAgewotICAgICAgc3RhdHVzID0gSEFMX1RJTUVPVVQ7CisgICAgICAvKiBOZXcgY2hlY2sgdG8gYXZvaWQgZmFsc2UgdGltZW91dCBkZXRlY3Rpb24gaW4gY2FzZSBvZiBwcmVlbXB0aW9uICovCisgICAgICBpZiAoUkVBRF9CSVQoUkNDLT5DUiwgUkNDX0NSX1BMTFNBSTJSRFkpICE9IDBVKQorICAgICAgeworICAgICAgICBzdGF0dXMgPSBIQUxfVElNRU9VVDsKKyAgICAgIH0KICAgICAgIGJyZWFrOwogICAgIH0KICAgfQpAQCAtMTc3Myw3ICsxNzk3LDExIEBACiAgICAgICB7CiAgICAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBQTExTQUkyX1RJTUVPVVRfVkFMVUUpCiAgICAgICAgIHsKLSAgICAgICAgICBzdGF0dXMgPSBIQUxfVElNRU9VVDsKKyAgICAgICAgICAvKiBOZXcgY2hlY2sgdG8gYXZvaWQgZmFsc2UgdGltZW91dCBkZXRlY3Rpb24gaW4gY2FzZSBvZiBwcmVlbXB0aW9uICovCisgICAgICAgICAgaWYgKFJFQURfQklUKFJDQy0+Q1IsIFJDQ19DUl9QTExTQUkyUkRZKSA9PSAwVSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBIQUxfVElNRU9VVDsKKyAgICAgICAgICB9CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTE4MDMsNyArMTgzMSwxMSBAQAogICB7CiAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFBMTFNBSTJfVElNRU9VVF9WQUxVRSkKICAgICB7Ci0gICAgICBzdGF0dXMgPSBIQUxfVElNRU9VVDsKKyAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgIGlmIChSRUFEX0JJVChSQ0MtPkNSLCBSQ0NfQ1JfUExMU0FJMlJEWSkgIT0gMFUpCisgICAgICB7CisgICAgICAgIHN0YXR1cyA9IEhBTF9USU1FT1VUOworICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgfQogICB9CkBAIC0yMDEzLDggKzIwNDUsOCBAQAogI2lmIGRlZmluZWQoQ1JTKQogCiAvKiogQGRlZmdyb3VwIFJDQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMgRXh0ZW5kZWQgQ2xvY2sgUmVjb3ZlcnkgU3lzdGVtIENvbnRyb2wgZnVuY3Rpb25zCi0gKiAgQGJyaWVmICBFeHRlbmRlZCBDbG9jayBSZWNvdmVyeSBTeXN0ZW0gQ29udHJvbCBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgRXh0ZW5kZWQgQ2xvY2sgUmVjb3ZlcnkgU3lzdGVtIENvbnRyb2wgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAjIyMjIyBFeHRlbmRlZCBDbG9jayBSZWNvdmVyeSBTeXN0ZW0gQ29udHJvbCBmdW5jdGlvbnMgICMjIyMjCkBAIC0yMDMxLDcgKzIwNjMsNyBAQAogICAgICAgICAgICAgICAoKysrKSBEZWZhdWx0IHZhbHVlcyBjYW4gYmUgc2V0IGZvciBmcmVxdWVuY3kgRXJyb3IgTWVhc3VyZW1lbnQgKHJlbG9hZCBhbmQgZXJyb3IgbGltaXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYWxzbyBIU0k0OCBvc2NpbGxhdG9yIHNtb290aCB0cmltbWluZy4KICAgICAgICAgICAgICAgKCsrKykgTWFjcm8gX19IQUxfUkNDX0NSU19SRUxPQURWQUxVRV9DQUxDVUxBVEUgY2FuIGJlIGFsc28gdXNlZCB0byBjYWxjdWxhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IHJlbG9hZCB2YWx1ZSB3aXRoIHRhcmdldCBhbmQgc3ljaHJvbml6YXRpb24gZnJlcXVlbmNpZXMgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSByZWxvYWQgdmFsdWUgd2l0aCB0YXJnZXQgYW5kIHN5bmNocm9uaXphdGlvbiBmcmVxdWVuY2llcyB2YWx1ZXMKICAgICAgICAgICAoIyMpIENhbGwgZnVuY3Rpb24gSEFMX1JDQ0V4X0NSU0NvbmZpZyB3aGljaAogICAgICAgICAgICAgICAoKysrKSBSZXNldHMgQ1JTIHJlZ2lzdGVycyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KICAgICAgICAgICAgICAgKCsrKykgQ29uZmlndXJlcyBDUlMgcmVnaXN0ZXJzIHdpdGggc3luY2hyb25pemF0aW9uIGNvbmZpZ3VyYXRpb24KQEAgLTIwNzMsOCArMjEwNSw4IEBACiAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIEhBTF9SQ0NFeF9DUlNDb25maWcgKGZvciBpbnN0YW5jZSBpbiBTeXN0aWNrIGhhbmRsZXIpCiAKIEBlbmR2ZXJiYXRpbQotICogQHsKLSAqLworICAqIEB7CisgICovCiAKIC8qKgogICAqIEBicmllZiAgU3RhcnQgYXV0b21hdGljIHN5bmNocm9uaXphdGlvbiBmb3IgcG9sbGluZyBtb2RlLgpAQCAtMjE1MiwyNCArMjE4NCwyNSBAQAogfQogCiAvKioKLSogQGJyaWVmIFdhaXQgZm9yIENSUyBTeW5jaHJvbml6YXRpb24gc3RhdHVzLgotKiBAcGFyYW0gVGltZW91dCAgRHVyYXRpb24gb2YgdGhlIHRpbWVvdXQKLSogQG5vdGUgIFRpbWVvdXQgaXMgYmFzZWQgb24gdGhlIG1heGltdW0gdGltZSB0byByZWNlaXZlIGEgU1lOQyBldmVudCBiYXNlZCBvbiBzeW5jaHJvbml6YXRpb24KLSogICAgICAgIGZyZXF1ZW5jeS4KLSogQG5vdGUgICAgSWYgVGltZW91dCBzZXQgdG8gSEFMX01BWF9ERUxBWSwgSEFMX1RJTUVPVVQgd2lsbCBiZSBuZXZlciByZXR1cm5lZC4KLSogQHJldHZhbCBDb21iaW5hdGlvbiBvZiBTeW5jaHJvbml6YXRpb24gc3RhdHVzCi0qICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfQ1JTX1RJTUVPVVQKLSogICAgICAgICAgICBAYXJnIEByZWYgUkNDX0NSU19TWU5DT0sKLSogICAgICAgICAgICBAYXJnIEByZWYgUkNDX0NSU19TWU5DV0FSTgotKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfQ1JTX1NZTkNFUlIKLSogICAgICAgICAgICBAYXJnIEByZWYgUkNDX0NSU19TWU5DTUlTUwotKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfQ1JTX1RSSU1PVkYKLSovCisgICogQGJyaWVmIFdhaXQgZm9yIENSUyBTeW5jaHJvbml6YXRpb24gc3RhdHVzLgorICAqIEBwYXJhbSBUaW1lb3V0ICBEdXJhdGlvbiBvZiB0aGUgdGltZW91dAorICAqIEBub3RlICBUaW1lb3V0IGlzIGJhc2VkIG9uIHRoZSBtYXhpbXVtIHRpbWUgdG8gcmVjZWl2ZSBhIFNZTkMgZXZlbnQgYmFzZWQgb24gc3luY2hyb25pemF0aW9uCisgICogICAgICAgIGZyZXF1ZW5jeS4KKyAgKiBAbm90ZSAgICBJZiBUaW1lb3V0IHNldCB0byBIQUxfTUFYX0RFTEFZLCBIQUxfVElNRU9VVCB3aWxsIGJlIG5ldmVyIHJldHVybmVkLgorICAqIEByZXR2YWwgQ29tYmluYXRpb24gb2YgU3luY2hyb25pemF0aW9uIHN0YXR1cworICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19DUlNfVElNRU9VVAorICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19DUlNfU1lOQ09LCisgICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX0NSU19TWU5DV0FSTgorICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19DUlNfU1lOQ0VSUgorICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19DUlNfU1lOQ01JU1MKKyAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfQ1JTX1RSSU1PVkYKKyAgKi8KIHVpbnQzMl90IEhBTF9SQ0NFeF9DUlNXYWl0U3luY2hyb25pemF0aW9uKHVpbnQzMl90IFRpbWVvdXQpCiB7CiAgIHVpbnQzMl90IGNyc3N0YXR1cyA9IFJDQ19DUlNfTk9ORTsKICAgdWludDMyX3QgdGlja3N0YXJ0OworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKICAgLyogR2V0IHRpbWVvdXQgKi8KICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKQEAgLTIxODEsNyArMjIxNCw3IEBACiAgICAgewogICAgICAgaWYgKCgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBUaW1lb3V0KSB8fCAoVGltZW91dCA9PSAwVSkpCiAgICAgICB7Ci0gICAgICAgIGNyc3N0YXR1cyA9IFJDQ19DUlNfVElNRU9VVDsKKyAgICAgICAgc3RhdHVzID0gSEFMX1RJTUVPVVQ7CiAgICAgICB9CiAgICAgfQogICAgIC8qIENoZWNrIENSUyBTWU5DT0sgZmxhZyAgKi8KQEAgLTIyNDAsOSArMjI3MywxMyBAQAogICAgICAgLyogZnJlcXVlbmN5IGVycm9yIGNvdW50ZXIgcmVhY2hlZCBhIHplcm8gdmFsdWUgKi8KICAgICAgIF9fSEFMX1JDQ19DUlNfQ0xFQVJfRkxBRyhSQ0NfQ1JTX0ZMQUdfRVNZTkMpOwogICAgIH0KLSAgfQotICB3aGlsZSAoUkNDX0NSU19OT05FID09IGNyc3N0YXR1cyk7CisgIH0gd2hpbGUgKChjcnNzdGF0dXMgPT0gUkNDX0NSU19OT05FKSAmJiAoc3RhdHVzID09IEhBTF9PSykpOwogCisgIGlmIChjcnNzdGF0dXMgPT0gUkNDX0NSU19OT05FKQorICB7CisgICAgY3Jzc3RhdHVzID0gUkNDX0NSU19USU1FT1VUOworICB9CisgIAogICByZXR1cm4gY3Jzc3RhdHVzOwogfQogCkBAIC0yMzc0LDggKzI0MTEsOCBAQAogICAqLwogCiAvKiogQGFkZHRvZ3JvdXAgUkNDRXhfUHJpdmF0ZV9GdW5jdGlvbnMKLSAqIEB7Ci0gKi8KKyAgKiBAeworICAqLwogCiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgUkNDRXhfUExMU291cmNlX0VuYWJsZSh1aW50MzJfdCBQbGxTb3VyY2UpCiB7CkBAIC0yMzk5LDcgKzI0MzYsMTEgQEAKICAgICAgICAgewogICAgICAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBNU0lfVElNRU9VVF9WQUxVRSkKICAgICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBIQUxfVElNRU9VVDsKKyAgICAgICAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgICAgICAgIGlmIChSRUFEX0JJVChSQ0MtPkNSLCBSQ0NfQ1JfTVNJUkRZKSA9PSAwVSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RhdHVzID0gSEFMX1RJTUVPVVQ7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI0MjEsNyArMjQ2MiwxMSBAQAogICAgICAgICB7CiAgICAgICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IEhTSV9USU1FT1VUX1ZBTFVFKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IEhBTF9USU1FT1VUOworICAgICAgICAgICAgLyogTmV3IGNoZWNrIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbiAqLworICAgICAgICAgICAgaWYgKFJFQURfQklUKFJDQy0+Q1IsIFJDQ19DUl9IU0lSRFkpID09IDBVKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdGF0dXMgPSBIQUxfVElNRU9VVDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQ0Myw3ICsyNDg4LDExIEBACiAgICAgICAgIHsKICAgICAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gSFNFX1RJTUVPVVRfVkFMVUUpCiAgICAgICAgICAgewotICAgICAgICAgICAgc3RhdHVzID0gSEFMX1RJTUVPVVQ7CisgICAgICAgICAgICAvKiBOZXcgY2hlY2sgdG8gYXZvaWQgZmFsc2UgdGltZW91dCBkZXRlY3Rpb24gaW4gY2FzZSBvZiBwcmVlbXB0aW9uICovCisgICAgICAgICAgICBpZiAoUkVBRF9CSVQoUkNDLT5DUiwgUkNDX0NSX0hTRVJEWSkgPT0gMFUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0YXR1cyA9IEhBTF9USU1FT1VUOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNTIzLDcgKzI1NzIsMTEgQEAKICAgICB7CiAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUExMU0FJMV9USU1FT1VUX1ZBTFVFKQogICAgICAgewotICAgICAgICBzdGF0dXMgPSBIQUxfVElNRU9VVDsKKyAgICAgICAgLyogTmV3IGNoZWNrIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbiAqLworICAgICAgICBpZiAoUkVBRF9CSVQoUkNDLT5DUiwgUkNDX0NSX1BMTFNBSTFSRFkpICE9IDBVKQorICAgICAgICB7CisgICAgICAgICAgc3RhdHVzID0gSEFMX1RJTUVPVVQ7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgfQpAQCAtMjU3OCw3ICsyNjMxLDExIEBACiAgICAgICB7CiAgICAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBQTExTQUkxX1RJTUVPVVRfVkFMVUUpCiAgICAgICAgIHsKLSAgICAgICAgICBzdGF0dXMgPSBIQUxfVElNRU9VVDsKKyAgICAgICAgICAvKiBOZXcgY2hlY2sgdG8gYXZvaWQgZmFsc2UgdGltZW91dCBkZXRlY3Rpb24gaW4gY2FzZSBvZiBwcmVlbXB0aW9uICovCisgICAgICAgICAgaWYgKFJFQURfQklUKFJDQy0+Q1IsIFJDQ19DUl9QTExTQUkxUkRZKSA9PSAwVSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBIQUxfVElNRU9VVDsKKyAgICAgICAgICB9CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTI2NTUsNyArMjcxMiwxMSBAQAogICAgIHsKICAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBQTExTQUkyX1RJTUVPVVRfVkFMVUUpCiAgICAgICB7Ci0gICAgICAgIHN0YXR1cyA9IEhBTF9USU1FT1VUOworICAgICAgICAvKiBOZXcgY2hlY2sgdG8gYXZvaWQgZmFsc2UgdGltZW91dCBkZXRlY3Rpb24gaW4gY2FzZSBvZiBwcmVlbXB0aW9uICovCisgICAgICAgIGlmIChSRUFEX0JJVChSQ0MtPkNSLCBSQ0NfQ1JfUExMU0FJMlJEWSkgIT0gMFUpCisgICAgICAgIHsKKyAgICAgICAgICBzdGF0dXMgPSBIQUxfVElNRU9VVDsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICB9CkBAIC0yNjg3LDcgKzI3NDgsMTEgQEAKICAgICAgIHsKICAgICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFBMTFNBSTJfVElNRU9VVF9WQUxVRSkKICAgICAgICAgewotICAgICAgICAgIHN0YXR1cyA9IEhBTF9USU1FT1VUOworICAgICAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgICAgICBpZiAoUkVBRF9CSVQoUkNDLT5DUiwgUkNDX0NSX1BMTFNBSTJSRFkpID09IDBVKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IEhBTF9USU1FT1VUOworICAgICAgICAgIH0KICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgfQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDV4eF9oYWxfcm5nLmMgYi9TcmMvc3RtMzJsNXh4X2hhbF9ybmcuYwppbmRleCBjMDA5YTU4Li5iM2NjMTdmIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNXh4X2hhbF9ybmcuYworKysgYi9TcmMvc3RtMzJsNXh4X2hhbF9ybmcuYwpAQCAtMTE1LDExICsxMTUsNyBAQAogICAqLwogLyogIEhlYWx0aCB0ZXN0IGNvbnRyb2wgcmVnaXN0ZXIgaW5mb3JtYXRpb24gdG8gdXNlIGluIENDTSBhbGdvcml0aG0gKi8KICNkZWZpbmUgUk5HX0hUQ0ZHXzEgICAweDE3NTkwQUJDVSAvKiE8IE1hZ2ljIG51bWJlciAqLwotI2lmIGRlZmluZWQoUk5HX1ZFUl8zXzEpIHx8IGRlZmluZWQoUk5HX1ZFUl8zXzApCi0jZGVmaW5lIFJOR19IVENGRyAgICAgMHgwMDBDQUE3NFUgLyohPCBGb3IgYmVzdCBsYXRlbmN5IGFuZCB0byBiZSBjb21wbGlhbnQgd2l0aCBOSVNUICovCi0jZWxzZSAvKiBSTkdfVkVSXzNfMiAqLwotI2RlZmluZSBSTkdfSFRDRkcgICAgIDB4MDAwMDcyNzRVIC8qITwgRm9yIGJlc3QgbGF0ZW5jeSBhbmQgdG8gYmUgY29tcGxpYW50IHdpdGggTklTVCAqLwotI2VuZGlmIC8qIFJOR19WRVJfM18wIHx8IFJOR19WRVJfM18xICAqLworI2RlZmluZSBSTkdfSFRDRkcgICAgIDB4MDAwMEEyQjNVIC8qITwgUmVjb21tZW5kZWQgdmFsdWUgZm9yIE5JU1QgY29tcGxpYW5jeSAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTEzNCwxNCArMTMwLDYgQEAKICAgKi8KIC8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGZ1bmN0aW9ucyBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoqIEBhZGR0b2dyb3VwIFJOR19Qcml2YXRlX0Z1bmN0aW9ucwotICAqIEB7Ci0gICovCi1IQUxfU3RhdHVzVHlwZURlZiBSTkdfUmVjb3ZlclNlZWRFcnJvcihSTkdfSGFuZGxlVHlwZURlZiAqaHJuZyk7Ci0KLS8qKgotICAqIEB9Ci0gICovCiAvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiogQGFkZHRvZ3JvdXAgUk5HX0V4cG9ydGVkX0Z1bmN0aW9ucwpAQCAtMjM5LDkgKzIyNywxMyBAQAogICB7CiAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFJOR19USU1FT1VUX1ZBTFVFKQogICAgIHsKLSAgICAgIGhybmctPlN0YXRlID0gSEFMX1JOR19TVEFURV9SRUFEWTsKLSAgICAgIGhybmctPkVycm9yQ29kZSA9IEhBTF9STkdfRVJST1JfVElNRU9VVDsKLSAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICAvKiBOZXcgY2hlY2sgdG8gYXZvaWQgZmFsc2UgdGltZW91dCBkZXRlY3Rpb24gaW4gY2FzZSBvZiBwcmVlbXB0aW9uICovCisgICAgICBpZiAoSEFMX0lTX0JJVF9TRVQoaHJuZy0+SW5zdGFuY2UtPkNSLCBSTkdfQ1JfQ09ORFJTVCkpCisgICAgICB7CisgICAgICAgIGhybmctPlN0YXRlID0gSEFMX1JOR19TVEFURV9SRUFEWTsKKyAgICAgICAgaHJuZy0+RXJyb3JDb2RlID0gSEFMX1JOR19FUlJPUl9USU1FT1VUOworICAgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgfQogICAgIH0KICAgfQogCkBAIC0yNjEsOSArMjUzLDEzIEBACiAgIHsKICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUk5HX1RJTUVPVVRfVkFMVUUpCiAgICAgewotICAgICAgaHJuZy0+U3RhdGUgPSBIQUxfUk5HX1NUQVRFX0VSUk9SOwotICAgICAgaHJuZy0+RXJyb3JDb2RlID0gSEFMX1JOR19FUlJPUl9USU1FT1VUOwotICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgIGlmIChfX0hBTF9STkdfR0VUX0ZMQUcoaHJuZywgUk5HX0ZMQUdfU0VDUykgIT0gUkVTRVQpCisgICAgICB7CisgICAgICAgIGhybmctPlN0YXRlID0gSEFMX1JOR19TVEFURV9FUlJPUjsKKyAgICAgICAgaHJuZy0+RXJyb3JDb2RlID0gSEFMX1JOR19FUlJPUl9USU1FT1VUOworICAgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgfQogICAgIH0KICAgfQogCkBAIC0zMDcsMTEgKzMwMywxNSBAQAogICB7CiAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFJOR19USU1FT1VUX1ZBTFVFKQogICAgIHsKLSAgICAgIGhybmctPlN0YXRlID0gSEFMX1JOR19TVEFURV9SRUFEWTsKLSAgICAgIGhybmctPkVycm9yQ29kZSA9IEhBTF9STkdfRVJST1JfVElNRU9VVDsKLSAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgICAgIF9fSEFMX1VOTE9DSyhocm5nKTsKLSAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICAvKiBOZXcgY2hlY2sgdG8gYXZvaWQgZmFsc2UgdGltZW91dCBkZXRlY3Rpb24gaW4gY2FzZSBvZiBwcmVlbXB0aW9uICovCisgICAgICBpZiAoSEFMX0lTX0JJVF9TRVQoaHJuZy0+SW5zdGFuY2UtPkNSLCBSTkdfQ1JfQ09ORFJTVCkpCisgICAgICB7CisgICAgICAgIGhybmctPlN0YXRlID0gSEFMX1JOR19TVEFURV9SRUFEWTsKKyAgICAgICAgaHJuZy0+RXJyb3JDb2RlID0gSEFMX1JOR19FUlJPUl9USU1FT1VUOworICAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgICAgICAgIF9fSEFMX1VOTE9DSyhocm5nKTsKKyAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIH0KICAgICB9CiAgIH0KIApAQCAtNjc3LDExICs2NzcsMTUgQEAKICAgICB7CiAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUk5HX1RJTUVPVVRfVkFMVUUpCiAgICAgICB7Ci0gICAgICAgIGhybmctPlN0YXRlID0gSEFMX1JOR19TVEFURV9SRUFEWTsKLSAgICAgICAgaHJuZy0+RXJyb3JDb2RlID0gSEFMX1JOR19FUlJPUl9USU1FT1VUOwotICAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gICAgICAgIF9fSEFMX1VOTE9DSyhocm5nKTsKLSAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgICAgLyogTmV3IGNoZWNrIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbiAqLworICAgICAgICBpZiAoX19IQUxfUk5HX0dFVF9GTEFHKGhybmcsIFJOR19GTEFHX0RSRFkpID09IFJFU0VUKQorICAgICAgICB7CisgICAgICAgICAgaHJuZy0+U3RhdGUgPSBIQUxfUk5HX1NUQVRFX1JFQURZOworICAgICAgICAgIGhybmctPkVycm9yQ29kZSA9IEhBTF9STkdfRVJST1JfVElNRU9VVDsKKyAgICAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgICAgICAgICAgX19IQUxfVU5MT0NLKGhybmcpOworICAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw1eHhfaGFsX3JuZ19leC5jIGIvU3JjL3N0bTMybDV4eF9oYWxfcm5nX2V4LmMKaW5kZXggNzE4NzIxYi4uYjZlYTIwYSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDV4eF9oYWxfcm5nX2V4LmMKKysrIGIvU3JjL3N0bTMybDV4eF9oYWxfcm5nX2V4LmMKQEAgLTQ0LDEyICs0NCw4IEBACiAgICogQHsKICAgKi8KIC8qICBIZWFsdGggdGVzdCBjb250cm9sIHJlZ2lzdGVyIGluZm9ybWF0aW9uIHRvIHVzZSBpbiBDQ00gYWxnb3JpdGhtICovCi0jZGVmaW5lIFJOR19IVENGR18xICAgMHgxNzU5MEFCQ1UgLyohPCBtYWdpYyBudW1iZXIgKi8KLSNpZiBkZWZpbmVkKFJOR19WRVJfM18xKSB8fCBkZWZpbmVkKFJOR19WRVJfM18wKQotI2RlZmluZSBSTkdfSFRDRkcgICAgIDB4MDAwQ0FBNzRVIC8qITwgZm9yIGJlc3QgbGF0ZW5jeSBhbmQgVG8gYmUgY29tcGxpYW50IHdpdGggTklTVCAqLwotI2Vsc2UgLyogUk5HX1ZFUl8zXzIgKi8KLSNkZWZpbmUgUk5HX0hUQ0ZHICAgICAweDAwMDA3Mjc0VSAvKiE8IGZvciBiZXN0IGxhdGVuY3kgYW5kIFRvIGJlIGNvbXBsaWFudCB3aXRoIE5JU1QgKi8KLSNlbmRpZiAvKiBSTkdfVkVSXzNfMSB8fCBSTkdfVkVSXzNfMCAqLworI2RlZmluZSBSTkdfSFRDRkdfMSAgIDB4MTc1OTBBQkNVIC8qITwgTWFnaWMgbnVtYmVyICovCisjZGVmaW5lIFJOR19IVENGRyAgICAgMHgwMDAwQTJCM1UgLyohPCBSZWNvbW1lbmRlZCB2YWx1ZSBmb3IgTklTVCBjb21wbGlhbmN5ICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtNjQsMTQgKzYwLDYgQEAKICAgKi8KIC8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGZ1bmN0aW9ucyBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoqIEBhZGR0b2dyb3VwIFJOR19Qcml2YXRlX0Z1bmN0aW9ucwotICAqIEB7Ci0gICovCi1IQUxfU3RhdHVzVHlwZURlZiBSTkdfUmVjb3ZlclNlZWRFcnJvcihSTkdfSGFuZGxlVHlwZURlZiAqaHJuZyk7Ci0KLS8qKgotICAqIEB9Ci0gICovCiAvKiBQcml2YXRlIGZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTY0LDkgKzE1MiwxMyBAQAogICAgIHsKICAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBSTkdfVElNRU9VVF9WQUxVRSkKICAgICAgIHsKLSAgICAgICAgaHJuZy0+U3RhdGUgPSBIQUxfUk5HX1NUQVRFX1JFQURZOwotICAgICAgICBocm5nLT5FcnJvckNvZGUgPSBIQUxfUk5HX0VSUk9SX1RJTUVPVVQ7Ci0gICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZW1lbXB0aW9uICovCisgICAgICAgIGlmIChIQUxfSVNfQklUX1NFVChocm5nLT5JbnN0YW5jZS0+Q1IsIFJOR19DUl9DT05EUlNUKSkKKyAgICAgICAgeworICAgICAgICAgIGhybmctPlN0YXRlID0gSEFMX1JOR19TVEFURV9SRUFEWTsKKyAgICAgICAgICBocm5nLT5FcnJvckNvZGUgPSBIQUxfUk5HX0VSUk9SX1RJTUVPVVQ7CisgICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgICAgfQogICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDV4eF9oYWxfcnRjLmMgYi9TcmMvc3RtMzJsNXh4X2hhbF9ydGMuYwppbmRleCAzNzg0YmM0Li5iZjgzZDQ3IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNXh4X2hhbF9ydGMuYworKysgYi9TcmMvc3RtMzJsNXh4X2hhbF9ydGMuYwpAQCAtODcyLDEwICs4NzIsMTAgQEAKICAgICAvKiBTZXQgdGhlIFJUQ19UUiByZWdpc3RlciAqLwogICAgIFdSSVRFX1JFRyhSVEMtPlRSLCAodG1wcmVnICYgUlRDX1RSX1JFU0VSVkVEX01BU0spKTsKIAotICAgIC8qIENsZWFyIHRoZSBiaXRzIHRvIGJlIGNvbmZpZ3VyZWQgKi8KKyAgICAvKiBUaGlzIGludGVyZmFjZSBpcyBkZXByZWNhdGVkLiBUbyBtYW5hZ2UgRGF5bGlnaHQgU2F2aW5nIFRpbWUsIHBsZWFzZSB1c2UgSEFMX1JUQ19EU1RfeHh4IGZ1bmN0aW9ucyAqLwogICAgIENMRUFSX0JJVChSVEMtPkNSLCBSVENfQ1JfQktQKTsKIAotICAgIC8qIENvbmZpZ3VyZSB0aGUgUlRDX0NSIHJlZ2lzdGVyICovCisgICAgLyogVGhpcyBpbnRlcmZhY2UgaXMgZGVwcmVjYXRlZC4gVG8gbWFuYWdlIERheWxpZ2h0IFNhdmluZyBUaW1lLCBwbGVhc2UgdXNlIEhBTF9SVENfRFNUX3h4eCBmdW5jdGlvbnMgKi8KICAgICBTRVRfQklUKFJUQy0+Q1IsIChzVGltZS0+RGF5TGlnaHRTYXZpbmcgfCBzVGltZS0+U3RvcmVPcGVyYXRpb24pKTsKIAogICAgIC8qIEV4aXQgSW5pdGlhbGl6YXRpb24gbW9kZSAqLwpAQCAtMTA3NSw2ICsxMDc1LDczIEBACiB9CiAKIC8qKgorICAqIEBicmllZiAgRGF5bGlnaHQgU2F2aW5nIFRpbWUsIEFkZCBvbmUgaG91ciB0byB0aGUgY2FsZW5kYXIgaW4gb25lIHNpbmdsZSBvcGVyYXRpb24KKyAgKiAgICAgICAgIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VkdXJlLgorICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQHJldHZhbCBOb25lCisgICovCit2b2lkIEhBTF9SVENfRFNUX0FkZDFIb3VyKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQoreworICBVTlVTRUQoaHJ0Yyk7CisgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShocnRjKTsKKyAgU0VUX0JJVChSVEMtPkNSLCBSVENfQ1JfQUREMUgpOworICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKK30KKworLyoqCisgICogQGJyaWVmICBEYXlsaWdodCBTYXZpbmcgVGltZSwgU3Vic3RyYWN0IG9uZSBob3VyIGZyb20gdGhlIGNhbGVuZGFyIGluIG9uZQorICAqICAgICAgICAgc2luZ2xlIG9wZXJhdGlvbiB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhlIGluaXRpYWxpemF0aW9uIHByb2NlZHVyZS4KKyAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQorICAqIEByZXR2YWwgTm9uZQorICAqLwordm9pZCBIQUxfUlRDX0RTVF9TdWIxSG91cihSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKK3sKKyAgVU5VU0VEKGhydGMpOworICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoaHJ0Yyk7CisgIFNFVF9CSVQoUlRDLT5DUiwgUlRDX0NSX1NVQjFIKTsKKyAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGF5bGlnaHQgU2F2aW5nIFRpbWUsIFNldCB0aGUgc3RvcmUgb3BlcmF0aW9uIGJpdC4KKyAgKiBAbm90ZSAgIEl0IGNhbiBiZSB1c2VkIGJ5IHRoZSBzb2Z0d2FyZSBpbiBvcmRlciB0byBtZW1vcml6ZSB0aGUgRFNUIHN0YXR1cy4KKyAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQorICAqIEByZXR2YWwgTm9uZQorICAqLwordm9pZCBIQUxfUlRDX0RTVF9TZXRTdG9yZU9wZXJhdGlvbihSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKK3sKKyAgVU5VU0VEKGhydGMpOworICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoaHJ0Yyk7CisgIFNFVF9CSVQoUlRDLT5DUiwgUlRDX0NSX0JLUCk7CisgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOworfQorCisvKioKKyAgKiBAYnJpZWYgIERheWxpZ2h0IFNhdmluZyBUaW1lLCBDbGVhciB0aGUgc3RvcmUgb3BlcmF0aW9uIGJpdC4KKyAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQorICAqIEByZXR2YWwgTm9uZQorICAqLwordm9pZCBIQUxfUlRDX0RTVF9DbGVhclN0b3JlT3BlcmF0aW9uKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQoreworICBVTlVTRUQoaHJ0Yyk7CisgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShocnRjKTsKKyAgQ0xFQVJfQklUKFJUQy0+Q1IsIFJUQ19DUl9CS1ApOworICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKK30KKworLyoqCisgICogQGJyaWVmICBEYXlsaWdodCBTYXZpbmcgVGltZSwgUmVhZCB0aGUgc3RvcmUgb3BlcmF0aW9uIGJpdC4KKyAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQorICAqIEByZXR2YWwgb3BlcmF0aW9uIHNlZSBSVENfU3RvcmVPcGVyYXRpb25fRGVmaW5pdGlvbnMKKyAgKi8KK3VpbnQzMl90IEhBTF9SVENfRFNUX1JlYWRTdG9yZU9wZXJhdGlvbihSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKK3sKKyAgVU5VU0VEKGhydGMpOworICByZXR1cm4gUkVBRF9CSVQoUlRDLT5DUiwgUlRDX0NSX0JLUCk7Cit9CisKKworLyoqCiAgICogQH0KICAgKi8KIApAQCAtMTE4Niw3ICsxMjUzLDcgQEAKICAgfQogCiAgIC8qIENvbmZpZ3VyZSB0aGUgQWxhcm0gQSBvciBBbGFybSBCIFN1YiBTZWNvbmQgcmVnaXN0ZXJzICovCi0gIHN1YnNlY29uZHRtcHJlZyA9ICh1aW50MzJfdCkoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtVGltZS5TdWJTZWNvbmRzKSB8ICh1aW50MzJfdCkoc0FsYXJtLT5BbGFybVN1YlNlY29uZE1hc2spKTsKKyAgc3Vic2Vjb25kdG1wcmVnID0gKHVpbnQzMl90KSgoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtVGltZS5TdWJTZWNvbmRzKSAmIFJUQ19BTFJNQlNTUl9TU19Nc2spIHwgKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtU3ViU2Vjb25kTWFzaykpOwogCiAgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwpAQCAtMTMzMCw3ICsxMzk3LDcgQEAKICAgICAgICAgICAgICAgKCh1aW50MzJfdClzQWxhcm0tPkFsYXJtTWFzaykpOwogICB9CiAgIC8qIENvbmZpZ3VyZSB0aGUgQWxhcm0gQSBvciBBbGFybSBCIFN1YiBTZWNvbmQgcmVnaXN0ZXJzICovCi0gIHN1YnNlY29uZHRtcHJlZyA9ICh1aW50MzJfdCkoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtVGltZS5TdWJTZWNvbmRzKSB8ICh1aW50MzJfdCkoc0FsYXJtLT5BbGFybVN1YlNlY29uZE1hc2spKTsKKyAgc3Vic2Vjb25kdG1wcmVnID0gKHVpbnQzMl90KSgoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtVGltZS5TdWJTZWNvbmRzKSAmIFJUQ19BTFJNQlNTUl9TU19Nc2spIHwgKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtU3ViU2Vjb25kTWFzaykpOwogCiAgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwpAQCAtMTY1Nyw3ICsxNzI0LDcgQEAKIAogICBVTlVTRUQoaHJ0Yyk7CiAgIC8qIENsZWFyIFJTRiBmbGFnICovCi0gIFNFVF9CSVQoUlRDLT5JQ1NSLCBSVENfUlNGX01BU0spOworICBDTEVBUl9CSVQoUlRDLT5JQ1NSLCBSVENfSUNTUl9SU0YpOwogCiAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw1eHhfaGFsX3J0Y19leC5jIGIvU3JjL3N0bTMybDV4eF9oYWxfcnRjX2V4LmMKaW5kZXggYjM5NzE1YS4uY2MzYTgwNiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDV4eF9oYWxfcnRjX2V4LmMKKysrIGIvU3JjL3N0bTMybDV4eF9oYWxfcnRjX2V4LmMKQEAgLTIzMywxNSArMjMzLDEyIEBACiAKICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0JVU1k7CiAKLSAgLyogUlRDIHRpbWVzdGFtcCBJbnRlcnJ1cHQgQ29uZmlndXJhdGlvbjogRVhUSSBjb25maWd1cmF0aW9uICovCi0gIF9fSEFMX1JUQ19USU1FU1RBTVBfRVhUSV9FTkFCTEVfSVQoKTsKLQotICAvKiBHZXQgdGhlIFJUQ19DUiByZWdpc3RlciBhbmQgY2xlYXIgdGhlIGJpdHMgdG8gYmUgY29uZmlndXJlZCAqLwotICBDTEVBUl9CSVQoUlRDLT5DUiwgKFJUQ19DUl9UU0VER0UgfCBSVENfQ1JfVFNFKSk7Ci0KICAgLyogRGlzYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwogICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoaHJ0Yyk7CiAKKyAgLyogR2V0IHRoZSBSVENfQ1IgcmVnaXN0ZXIgYW5kIGNsZWFyIHRoZSBiaXRzIHRvIGJlIGNvbmZpZ3VyZWQgKi8KKyAgQ0xFQVJfQklUKFJUQy0+Q1IsIChSVENfQ1JfVFNFREdFIHwgUlRDX0NSX1RTRSB8IFJUQ19DUl9UU0lFKSk7CisKICAgLyogQ29uZmlndXJlIHRoZSBUaW1lIFN0YW1wIFRTRURHRSBiZWZvcmUgRW5hYmxlIGJpdCB0byBhdm9pZCB1bndhbnRlZCBUU0Ygc2V0dGluZy4gKi8KICAgU0VUX0JJVChSVEMtPkNSLCAodWludDMyX3QpVGltZVN0YW1wRWRnZSk7CiAKQEAgLTI1MSw2ICsyNDgsOSBAQAogICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CiAKKyAgLyogUlRDIHRpbWVzdGFtcCBJbnRlcnJ1cHQgQ29uZmlndXJhdGlvbjogRVhUSSBjb25maWd1cmF0aW9uICovCisgIF9fSEFMX1JUQ19USU1FU1RBTVBfRVhUSV9FTkFCTEVfSVQoKTsKKwogICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7CiAKICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwpAQCAtMTUyNSwzMiArMTUyNSwyOSBAQAogICBhc3NlcnRfcGFyYW0oSVNfUlRDX1RBTVBFUl9UUklHR0VSKHNUYW1wZXItPlRyaWdnZXIpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19UQU1QRVJfRVJBU0VfTU9ERShzVGFtcGVyLT5Ob0VyYXNlKSk7CiAgIGFzc2VydF9wYXJhbShJU19SVENfVEFNUEVSX01BU0tGTEFHX1NUQVRFKHNUYW1wZXItPk1hc2tGbGFnKSk7CisgIGFzc2VydF9wYXJhbShJU19SVENfVEFNUEVSX1RJTUVTVEFNUE9OVEFNUEVSX0RFVEVDVElPTihzVGFtcGVyLT5UaW1lU3RhbXBPblRhbXBlckRldGVjdGlvbikpOworICAvKiBNYXNrIGZsYWcgb25seSBzdXBwb3J0ZWQgYnkgVEFNUEVSIDEsIDIgYW5kIDMgKi8KKyAgYXNzZXJ0X3BhcmFtKCEoKHNUYW1wZXItPk1hc2tGbGFnICE9IFJUQ19UQU1QRVJNQVNLX0ZMQUdfRElTQUJMRSkgJiYgKHNUYW1wZXItPlRhbXBlciA+IFJUQ19UQU1QRVJfMykpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19UQU1QRVJfRklMVEVSKHNUYW1wZXItPkZpbHRlcikpOwogICBhc3NlcnRfcGFyYW0oSVNfUlRDX1RBTVBFUl9TQU1QTElOR19GUkVRKHNUYW1wZXItPlNhbXBsaW5nRnJlcXVlbmN5KSk7CiAgIGFzc2VydF9wYXJhbShJU19SVENfVEFNUEVSX1BSRUNIQVJHRV9EVVJBVElPTihzVGFtcGVyLT5QcmVjaGFyZ2VEdXJhdGlvbikpOwogICBhc3NlcnRfcGFyYW0oSVNfUlRDX1RBTVBFUl9QVUxMVVBfU1RBVEUoc1RhbXBlci0+VGFtcGVyUHVsbFVwKSk7Ci0gIGFzc2VydF9wYXJhbShJU19SVENfVEFNUEVSX1RJTUVTVEFNUE9OVEFNUEVSX0RFVEVDVElPTihzVGFtcGVyLT5UaW1lU3RhbXBPblRhbXBlckRldGVjdGlvbikpOworICAvKiBUcmlnZ2VyIGFuZCBGaWx0ZXIgaGF2ZSBleGNsdXNpdmUgY29uZmlndXJhdGlvbnMgKi8KKyAgYXNzZXJ0X3BhcmFtKCgoc1RhbXBlci0+RmlsdGVyICE9IFJUQ19UQU1QRVJGSUxURVJfRElTQUJMRSkgJiYgKChzVGFtcGVyLT5UcmlnZ2VyID09IFJUQ19UQU1QRVJUUklHR0VSX0xPV0xFVkVMKSB8fCAoc1RhbXBlci0+VHJpZ2dlciA9PSBSVENfVEFNUEVSVFJJR0dFUl9ISUdITEVWRUwpKSkKKyAgICAgICAgICAgICAgIHx8ICgoc1RhbXBlci0+RmlsdGVyID09IFJUQ19UQU1QRVJGSUxURVJfRElTQUJMRSkgJiYgKChzVGFtcGVyLT5UcmlnZ2VyID09IFJUQ19UQU1QRVJUUklHR0VSX1JJU0lOR0VER0UpIHx8IChzVGFtcGVyLT5UcmlnZ2VyID09IFJUQ19UQU1QRVJUUklHR0VSX0ZBTExJTkdFREdFKSkpKTsKIAogICAvKiBDb25maWd1cmF0aW9uIHJlZ2lzdGVyIDIgKi8KICAgdG1wcmVnID0gUkVBRF9SRUcoVEFNUC0+Q1IyKTsKICAgdG1wcmVnICY9IH4oKHNUYW1wZXItPlRhbXBlciA8PCBUQU1QX0NSMl9UQU1QMVRSR19Qb3MpIHwgKHNUYW1wZXItPlRhbXBlciA8PCBUQU1QX0NSMl9UQU1QMU1TS19Qb3MpIHwgKHNUYW1wZXItPlRhbXBlciA8PCBUQU1QX0NSMl9UQU1QMU5PRVJBU0VfUG9zKSk7CiAKLSAgaWYgKHNUYW1wZXItPlRyaWdnZXIgIT0gUlRDX1RBTVBFUlRSSUdHRVJfUklTSU5HRURHRSkKKyAgaWYgKChzVGFtcGVyLT5UcmlnZ2VyID09IFJUQ19UQU1QRVJUUklHR0VSX0hJR0hMRVZFTCkgfHwgKHNUYW1wZXItPlRyaWdnZXIgPT0gUlRDX1RBTVBFUlRSSUdHRVJfRkFMTElOR0VER0UpKQogICB7CiAgICAgdG1wcmVnIHw9IChzVGFtcGVyLT5UYW1wZXIgPDwgVEFNUF9DUjJfVEFNUDFUUkdfUG9zKTsKICAgfQogCiAgIGlmIChzVGFtcGVyLT5NYXNrRmxhZyAhPSBSVENfVEFNUEVSTUFTS19GTEFHX0RJU0FCTEUpCiAgIHsKLSAgICAvKiBGZWF0dXJlIG9ubHkgc3VwcG9ydGVkIGJ5IFRBTVBFUiAxLCAyIGFuZCAzICovCi0gICAgaWYgKHNUYW1wZXItPlRhbXBlciA8IFJUQ19UQU1QRVJfNCkKLSAgICB7Ci0gICAgICB0bXByZWcgfD0gKHNUYW1wZXItPlRhbXBlciA8PCBUQU1QX0NSMl9UQU1QMU1TS19Qb3MpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgICB9CisgICAgdG1wcmVnIHw9IChzVGFtcGVyLT5UYW1wZXIgPDwgVEFNUF9DUjJfVEFNUDFNU0tfUG9zKTsKICAgfQogCiAgIGlmIChzVGFtcGVyLT5Ob0VyYXNlICE9IFJUQ19UQU1QRVJfRVJBU0VfQkFDS1VQX0VOQUJMRSkKQEAgLTE2MzMsNyArMTYzMCw3IEBACiAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19UQU1QRVJfRVJBU0VfTU9ERShzQWxsVGFtcGVyLT5UYW1wSW5wdXRbaV0uTm9FcmFzZSkpOwogICAgIGFzc2VydF9wYXJhbShJU19SVENfVEFNUEVSX01BU0tGTEFHX1NUQVRFKHNBbGxUYW1wZXItPlRhbXBJbnB1dFtpXS5NYXNrRmxhZykpOwogICAgIC8qIE1hc2sgZmxhZyBvbmx5IHN1cHBvcnRlZCBieSBUQU1QRVIgMSwgMiBhbmQgMyAqLwotICAgIGFzc2VydF9wYXJhbSghKChzQWxsVGFtcGVyLT5UYW1wSW5wdXRbaV0uTWFza0ZsYWcgIT0gUlRDX1RBTVBFUk1BU0tfRkxBR19ESVNBQkxFKSAmJiAoaSA+IFJUQ19UQU1QRVJfMykpKTsKKyAgICBhc3NlcnRfcGFyYW0oISgoc0FsbFRhbXBlci0+VGFtcElucHV0W2ldLk1hc2tGbGFnID09IFJUQ19UQU1QRVJNQVNLX0ZMQUdfRU5BQkxFKSAmJiAoaSA+PSBSVENfVEFNUEVSX01BU0tBQkxFX05CKSkpOwogICB9CiAgIGFzc2VydF9wYXJhbShJU19SVENfVEFNUEVSX1RJTUVTVEFNUE9OVEFNUEVSX0RFVEVDVElPTihzQWxsVGFtcGVyLT5UaW1lU3RhbXBPblRhbXBlckRldGVjdGlvbikpOwogI2VuZGlmIC8qICNpZmRlZiAgVVNFX0ZVTExfQVNTRVJUICovCkBAIC0xNzc1LDEyICsxNzcyLDEzIEBACiAgIFVOVVNFRChocnRjKTsKICAgLyogRGlzYWJsZSBhbGwgYWN0aXZlcyB0YW1wZXJzIGJ1dCBub3QgcGFzc2l2ZXMgdGFtcGVycyAqLwogICBDTEVBUl9CSVQoVEFNUC0+Q1IxLCBBVGFtcF9tYXNrKTsKLSAgLyogRGlzYWJsZSBubyBlcmFzZSBhbmQgbWFzayAqLwotICBDTEVBUl9CSVQoVEFNUC0+Q1IyLCAoQVRhbXBfbWFzayB8ICgoQVRhbXBfbWFzayAmIChUQU1QX0FUQ1IxX1RBTVAxQU0gfCBUQU1QX0FUQ1IxX1RBTVAyQU0gfCBUQU1QX0FUQ1IxX1RBTVAzQU0pKSA8PCBUQU1QX0NSMl9UQU1QMU1TS19Qb3MpKSk7CiAKICAgLyogQ2xlYXIgdGFtcGVyIGludGVycnVwdCBhbmQgZXZlbnQgZmxhZ3MgKFdPIHJlZ2lzdGVyKSBvZiBhbGwgYWN0aXZlcyB0YW1wZXJzIGJ1dCBub3QgcGFzc2l2ZXMgdGFtcGVycyAqLwogICBXUklURV9SRUcoVEFNUC0+U0NSLCBBVGFtcF9tYXNrKTsKIAorICAvKiBEaXNhYmxlIG5vIGVyYXNlIGFuZCBtYXNrICovCisgIENMRUFSX0JJVChUQU1QLT5DUjIsIChBVGFtcF9tYXNrIHwgKChBVGFtcF9tYXNrICYgKFRBTVBfQVRDUjFfVEFNUDFBTSB8IFRBTVBfQVRDUjFfVEFNUDJBTSB8IFRBTVBfQVRDUjFfVEFNUDNBTSkpIDw8IFRBTVBfQ1IyX1RBTVAxTVNLX1BvcykpKTsKKwogICAvKiBDbGVhciBhbGwgYWN0aXZlIHRhbXBlcnMgaW50ZXJydXB0IG1vZGUgY29uZmlndXJhdGlvbiBidXQgbm90IHBhc3NpdmVzIHRhbXBlcnMgKi8KICAgQ0xFQVJfQklUKFRBTVAtPklFUiwgQVRhbXBfbWFzayk7CiAKQEAgLTI1MTYsNiArMjUxNCw4MiBAQAogICAgICAgICAgICAgdGhlIEhBTF9SVENFeF9JbnRlcm5hbFRhbXBlcjhFdmVudENhbGxiYWNrIGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKICAgICovCiB9CisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIFRlbXBlcmF0dXJlIE1vbml0b3JpbmcuCisgICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK3ZvaWQgSEFMX1JUQ0V4X0VuYWJsZVRlbXBlcmF0dXJlTW9uaXRvcmluZyhSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKK3sKKyAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLworICBVTlVTRUQoaHJ0Yyk7CisgIFNFVF9CSVQoVEFNUC0+Q0ZHUiwgVEFNUF9DRkdSX1RNT05FTik7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBUZW1wZXJhdHVyZSBNb25pdG9yaW5nLgorICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQHJldHZhbCBOb25lCisgICovCit2b2lkIEhBTF9SVENFeF9EaXNhYmxlVGVtcGVyYXR1cmVNb25pdG9yaW5nKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQoreworICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCisgIFVOVVNFRChocnRjKTsKKyAgQ0xFQVJfQklUKFRBTVAtPkNGR1IsIFRBTVBfQ0ZHUl9UTU9ORU4pOworfQorCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSBWb2x0YWdlIE1vbml0b3JpbmcuCisgICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK3ZvaWQgSEFMX1JUQ0V4X0VuYWJsZVZvbHRhZ2VNb25pdG9yaW5nKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQoreworICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCisgIFVOVVNFRChocnRjKTsKKyAgU0VUX0JJVChUQU1QLT5DRkdSLCBUQU1QX0NGR1JfVk1PTkVOKTsKK30KKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIFZvbHRhZ2UgTW9uaXRvcmluZy4KKyAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQorICAqIEByZXR2YWwgTm9uZQorICAqLwordm9pZCBIQUxfUlRDRXhfRGlzYWJsZVZvbHRhZ2VNb25pdG9yaW5nKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQoreworICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCisgIFVOVVNFRChocnRjKTsKKyAgQ0xFQVJfQklUKFRBTVAtPkNGR1IsIFRBTVBfQ0ZHUl9WTU9ORU4pOworfQorCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSBXVVQgTW9uaXRvcmluZy4KKyAgKiBAbm90ZSAgIFZvbHRhZ2UgYW5kIHRlbXBlcmF0dXJlIG1vbml0b3IgcGVyaW9kaWMgZW5hYmxlIGJ5IFJUQyBXYWtlVXAgVGltZXIgKFdVVCkuCisgICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK3ZvaWQgSEFMX1JUQ0V4X0VuYWJsZVdVVE1vbml0b3JpbmcoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpCit7CisgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KKyAgVU5VU0VEKGhydGMpOworICBTRVRfQklUKFRBTVAtPkNGR1IsIFRBTVBfQ0ZHUl9XVVRNT05FTik7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBXVVQgTW9uaXRvcmluZy4KKyAgKiBAbm90ZSAgIFZvbHRhZ2UgYW5kIHRlbXBlcmF0dXJlIG1vbml0b3IgcGVyaW9kaWMgRGlzYWJsZSBieSBSVEMgV2FrZVVwIFRpbWVyIChXVVQpLgorICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQHJldHZhbCBOb25lCisgICovCit2b2lkIEhBTF9SVENFeF9EaXNhYmxlV1VUTW9uaXRvcmluZyhSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKK3sKKyAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLworICBVTlVTRUQoaHJ0Yyk7CisgIENMRUFSX0JJVChUQU1QLT5DRkdSLCBUQU1QX0NGR1JfV1VUTU9ORU4pOworfQorCisKIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNXh4X2hhbF9zZC5jIGIvU3JjL3N0bTMybDV4eF9oYWxfc2QuYwppbmRleCAyNzg5NTExLi4wNmQyZjU5IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNXh4X2hhbF9zZC5jCisrKyBiL1NyYy9zdG0zMmw1eHhfaGFsX3NkLmMKQEAgLTI2OCwzOCArMjY4LDQyIEBACiAvKiogQGFkZHRvZ3JvdXAgU0RfUHJpdmF0ZV9EZWZpbmVzCiAgICogQHsKICAgKi8KKy8qIEZyZXF1ZW5jaWVzIHVzZWQgaW4gdGhlIGRyaXZlciBmb3IgY2xvY2sgZGl2aWRlciBjYWxjdWxhdGlvbiAqLworI2RlZmluZSBTRF9JTklUX0ZSRVEgICAgICAgICAgICAgICAgICAgNDAwMDAwVSAgIC8qIEluaXRhbGl6YXRpb24gcGhhc2UgOiA0MDAga0h6IG1heCAqLworI2RlZmluZSBTRF9OT1JNQUxfU1BFRURfRlJFUSAgICAgICAgICAgMjUwMDAwMDBVIC8qIE5vcm1hbCBzcGVlZCBwaGFzZSA6IDI1IE1IeiBtYXggKi8KKyNkZWZpbmUgU0RfSElHSF9TUEVFRF9GUkVRICAgICAgICAgICAgIDUwMDAwMDAwVSAvKiBIaWdoIHNwZWVkIHBoYXNlIDogNTAgTUh6IG1heCAqLworLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiBkZWZpbmVkIChETFlCX1NETU1DMSkgJiYgZGVmaW5lZCAoRExZQl9TRE1NQzIpCisjZGVmaW5lIFNEX0dFVF9ETFlCX0lOU1RBTkNFKFNETU1DX0lOU1RBTkNFKSAoKChTRE1NQ19JTlNUQU5DRSkgPT0gU0RNTUMxKT8gIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETFlCX1NETU1DMSA6IERMWUJfU0RNTUMyICkKKyNlbGlmIGRlZmluZWQgKERMWUJfU0RNTUMxKQorI2RlZmluZSBTRF9HRVRfRExZQl9JTlNUQU5DRShTRE1NQ19JTlNUQU5DRSkgKCBETFlCX1NETU1DMSApCisjZW5kaWYgLyogKERMWUJfU0RNTUMxKSAmJiBkZWZpbmVkIChETFlCX1NETU1DMikgKi8KIAogLyoqCiAgICogQH0KICAgKi8KIAotLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNpZiBkZWZpbmVkIChETFlCX1NETU1DMSkgJiYgZGVmaW5lZCAoRExZQl9TRE1NQzIpCi0jZGVmaW5lIFNEX0dFVF9ETFlCX0lOU1RBTkNFKFNETU1DX0lOU1RBTkNFKSAoKChTRE1NQ19JTlNUQU5DRSkgPT0gU0RNTUMxKT8gIFwKLSAgICAgICAgICAgICAgIERMWUJfU0RNTUMxIDogRExZQl9TRE1NQzIgKQotI2VsaWYgZGVmaW5lZCAoRExZQl9TRE1NQzEpCi0jZGVmaW5lIFNEX0dFVF9ETFlCX0lOU1RBTkNFKFNETU1DX0lOU1RBTkNFKSAoIERMWUJfU0RNTUMxICkKLSNlbmRpZgogLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBkZWZncm91cCBTRF9Qcml2YXRlX0Z1bmN0aW9ucyBTRCBQcml2YXRlIEZ1bmN0aW9ucwogICAqIEB7CiAgICovCi1zdGF0aWMgdWludDMyX3QgU0RfSW5pdENhcmQgICAgICAgKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7Ci1zdGF0aWMgdWludDMyX3QgU0RfUG93ZXJPTiAgICAgICAgKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7Ci1zdGF0aWMgdWludDMyX3QgU0RfU2VuZFNEU3RhdHVzICAgKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgdWludDMyX3QgKnBTRHN0YXR1cyk7Ci1zdGF0aWMgdWludDMyX3QgU0RfU2VuZFN0YXR1cyAgICAgKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgdWludDMyX3QgKnBDYXJkU3RhdHVzKTsKLXN0YXRpYyB1aW50MzJfdCBTRF9XaWRlQnVzX0VuYWJsZSAoU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKK3N0YXRpYyB1aW50MzJfdCBTRF9Jbml0Q2FyZChTRF9IYW5kbGVUeXBlRGVmICpoc2QpOworc3RhdGljIHVpbnQzMl90IFNEX1Bvd2VyT04oU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKK3N0YXRpYyB1aW50MzJfdCBTRF9TZW5kU0RTdGF0dXMoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50MzJfdCAqcFNEc3RhdHVzKTsKK3N0YXRpYyB1aW50MzJfdCBTRF9TZW5kU3RhdHVzKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgdWludDMyX3QgKnBDYXJkU3RhdHVzKTsKK3N0YXRpYyB1aW50MzJfdCBTRF9XaWRlQnVzX0VuYWJsZShTRF9IYW5kbGVUeXBlRGVmICpoc2QpOwogc3RhdGljIHVpbnQzMl90IFNEX1dpZGVCdXNfRGlzYWJsZShTRF9IYW5kbGVUeXBlRGVmICpoc2QpOwotc3RhdGljIHVpbnQzMl90IFNEX0ZpbmRTQ1IgICAgICAgIChTRF9IYW5kbGVUeXBlRGVmICpoc2QsIHVpbnQzMl90ICpwU0NSKTsKLXN0YXRpYyB2b2lkICAgICBTRF9Qb3dlck9GRiAgICAgICAoU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKLXN0YXRpYyB2b2lkICAgICBTRF9Xcml0ZV9JVCAgICAgICAoU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKLXN0YXRpYyB2b2lkICAgICBTRF9SZWFkX0lUICAgICAgICAoU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKLXN0YXRpYyB1aW50MzJfdCBTRF9IaWdoU3BlZWQgICAgICAoU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKK3N0YXRpYyB1aW50MzJfdCBTRF9GaW5kU0NSKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgdWludDMyX3QgKnBTQ1IpOworc3RhdGljIHZvaWQgICAgIFNEX1Bvd2VyT0ZGKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7CitzdGF0aWMgdm9pZCAgICAgU0RfV3JpdGVfSVQoU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKK3N0YXRpYyB2b2lkICAgICBTRF9SZWFkX0lUKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7CitzdGF0aWMgdWludDMyX3QgU0RfSGlnaFNwZWVkKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7CiAjaWYgKFVTRV9TRF9UUkFOU0NFSVZFUiAhPSAwVSkKLXN0YXRpYyB1aW50MzJfdCBTRF9VbHRyYUhpZ2hTcGVlZCAoU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKLXN0YXRpYyB1aW50MzJfdCBTRF9ERFJfTW9kZSAgICAgICAoU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKK3N0YXRpYyB1aW50MzJfdCBTRF9VbHRyYUhpZ2hTcGVlZChTRF9IYW5kbGVUeXBlRGVmICpoc2QpOworc3RhdGljIHVpbnQzMl90IFNEX0REUl9Nb2RlKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7CiAjZW5kaWYgLyogVVNFX1NEX1RSQU5TQ0VJVkVSICovCiAvKioKICAgKiBAfQpAQCAtMzExLDggKzMxNSw4IEBACiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBTRF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxCi0gKiAgQGJyaWVmICAgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgIyMjIyMgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAjIyMjIwpAQCAtMzM0LDExICszMzgsMTIgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9Jbml0KFNEX0hhbmRsZVR5cGVEZWYgKmhzZCkKIHsKICAgSEFMX1NEX0NhcmRTdGF0dXNUeXBlRGVmIENhcmRTdGF0dXM7Ci0gIHVpbnQzMl90IHNwZWVkZ3JhZGUsIHVuaXRzaXplOworICB1aW50MzJfdCBzcGVlZGdyYWRlOworICB1aW50MzJfdCB1bml0c2l6ZTsKICAgdWludDMyX3QgdGlja3N0YXJ0OwogCiAgIC8qIENoZWNrIHRoZSBTRCBoYW5kbGUgYWxsb2NhdGlvbiAqLwotICBpZihoc2QgPT0gTlVMTCkKKyAgaWYgKGhzZCA9PSBOVUxMKQogICB7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQpAQCAtMzUxLDcgKzM1Niw3IEBACiAgIGFzc2VydF9wYXJhbShJU19TRE1NQ19IQVJEV0FSRV9GTE9XX0NPTlRST0woaHNkLT5Jbml0LkhhcmR3YXJlRmxvd0NvbnRyb2wpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1NETU1DX0NMS0RJVihoc2QtPkluaXQuQ2xvY2tEaXYpKTsKIAotICBpZihoc2QtPlN0YXRlID09IEhBTF9TRF9TVEFURV9SRVNFVCkKKyAgaWYgKGhzZC0+U3RhdGUgPT0gSEFMX1NEX1NUQVRFX1JFU0VUKQogICB7CiAgICAgLyogQWxsb2NhdGUgbG9jayByZXNvdXJjZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLwogICAgIGhzZC0+TG9jayA9IEhBTF9VTkxPQ0tFRDsKQEAgLTM2Miw3ICszNjcsNyBAQAogICAgIHsKICAgICAgIGhzZC0+SW5pdC5UcmFuY2VpdmVyUHJlc2VudCA9IFNETU1DX1RSQU5TQ0VJVkVSX1BSRVNFTlQ7CiAgICAgfQotI2VuZGlmCisjZW5kaWYgLypVU0VfU0RfVFJBTlNDRUlWRVIgKi8KICNpZiBkZWZpbmVkIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogICAgIC8qIFJlc2V0IENhbGxiYWNrIHBvaW50ZXJzIGluIEhBTF9TRF9TVEFURV9SRVNFVCBvbmx5ICovCiAgICAgaHNkLT5UeENwbHRDYWxsYmFjayAgICA9IEhBTF9TRF9UeENwbHRDYWxsYmFjazsKQEAgLTM4MCw3ICszODUsNyBAQAogICAgIH0KICNlbmRpZiAvKiBVU0VfU0RfVFJBTlNDRUlWRVIgKi8KIAotICAgIGlmKGhzZC0+TXNwSW5pdENhbGxiYWNrID09IE5VTEwpCisgICAgaWYgKGhzZC0+TXNwSW5pdENhbGxiYWNrID09IE5VTEwpCiAgICAgewogICAgICAgaHNkLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfU0RfTXNwSW5pdDsKICAgICB9CkBAIC00MDEsNyArNDA2LDcgQEAKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKLSAgaWYoIEhBTF9TRF9HZXRDYXJkU3RhdHVzKGhzZCwgJkNhcmRTdGF0dXMpICE9IEhBTF9PSykKKyAgaWYgKEhBTF9TRF9HZXRDYXJkU3RhdHVzKGhzZCwgJkNhcmRTdGF0dXMpICE9IEhBTF9PSykKICAgewogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KQEAgLTQyNSwxOSArNDMwLDE5IEBACiAKICAgfQogICAvKiBDb25maWd1cmUgdGhlIGJ1cyB3aWRlICovCi0gIGlmKEhBTF9TRF9Db25maWdXaWRlQnVzT3BlcmF0aW9uKGhzZCwgaHNkLT5Jbml0LkJ1c1dpZGUpICE9IEhBTF9PSykKKyAgaWYgKEhBTF9TRF9Db25maWdXaWRlQnVzT3BlcmF0aW9uKGhzZCwgaHNkLT5Jbml0LkJ1c1dpZGUpICE9IEhBTF9PSykKICAgewogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAogICAvKiBWZXJpZnkgdGhhdCBTRCBjYXJkIGlzIHJlYWR5IHRvIHVzZSBhZnRlciBJbml0aWFsaXphdGlvbiAqLwogICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwotICB3aGlsZSgoSEFMX1NEX0dldENhcmRTdGF0ZShoc2QpICE9IEhBTF9TRF9DQVJEX1RSQU5TRkVSKSkKKyAgd2hpbGUgKChIQUxfU0RfR2V0Q2FyZFN0YXRlKGhzZCkgIT0gSEFMX1NEX0NBUkRfVFJBTlNGRVIpKQogICB7Ci0gICAgaWYoKEhBTF9HZXRUaWNrKCktdGlja3N0YXJ0KSA+PSAgU0RNTUNfREFUQVRJTUVPVVQpCisgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+PSAgU0RNTUNfREFUQVRJTUVPVVQpCiAgICAgewogICAgICAgaHNkLT5FcnJvckNvZGUgPSBIQUxfU0RfRVJST1JfVElNRU9VVDsKLSAgICAgIGhzZC0+U3RhdGU9IEhBTF9TRF9TVEFURV9SRUFEWTsKKyAgICAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfUkVBRFk7CiAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgfQogICB9CkBAIC00NzcsMjEgKzQ4MiwyMyBAQAogICBzZG1tY19jbGsgICAgID0gSEFMX1JDQ0V4X0dldFBlcmlwaENMS0ZyZXEoUkNDX1BFUklQSENMS19TRE1NQzEpOwogICBpZiAoc2RtbWNfY2xrID09IDBVKQogICB7Ci0gICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOwotICAgICAgaHNkLT5FcnJvckNvZGUgPSBTRE1NQ19FUlJPUl9JTlZBTElEX1BBUkFNRVRFUjsKLSAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKKyAgICBoc2QtPkVycm9yQ29kZSA9IFNETU1DX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSOworICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KLSAgSW5pdC5DbG9ja0RpdiA9IHNkbW1jX2Nsay8oMlUqNDAwMDAwVSk7CisgIEluaXQuQ2xvY2tEaXYgPSBzZG1tY19jbGsgLyAoMlUgKiBTRF9JTklUX0ZSRVEpOwogCiAjaWYgKFVTRV9TRF9UUkFOU0NFSVZFUiAhPSAwVSkKKyAgSW5pdC5UcmFuY2VpdmVyUHJlc2VudCA9IGhzZC0+SW5pdC5UcmFuY2VpdmVyUHJlc2VudDsKKwogICBpZiAoaHNkLT5Jbml0LlRyYW5jZWl2ZXJQcmVzZW50ID09IFNETU1DX1RSQU5TQ0VJVkVSX1BSRVNFTlQpCiAgIHsKICAgICAvKiBTZXQgVHJhbnNjZWl2ZXIgcG9sYXJpdHkgKi8KICAgICBoc2QtPkluc3RhbmNlLT5QT1dFUiB8PSBTRE1NQ19QT1dFUl9ESVJQT0w7CiAgIH0KICNlbGlmIGRlZmluZWQgKFVTRV9TRF9ESVJQT0wpCi0gICAgLyogU2V0IFRyYW5zY2VpdmVyIHBvbGFyaXR5ICovCi0gICAgaHNkLT5JbnN0YW5jZS0+UE9XRVIgfD0gU0RNTUNfUE9XRVJfRElSUE9MOworICAvKiBTZXQgVHJhbnNjZWl2ZXIgcG9sYXJpdHkgKi8KKyAgaHNkLT5JbnN0YW5jZS0+UE9XRVIgfD0gU0RNTUNfUE9XRVJfRElSUE9MOwogI2VuZGlmIC8qIFVTRV9TRF9UUkFOU0NFSVZFUiAgKi8KIAogICAvKiBJbml0aWFsaXplIFNETU1DIHBlcmlwaGVyYWwgaW50ZXJmYWNlIHdpdGggZGVmYXVsdCBjb25maWd1cmF0aW9uICovCkBAIC01MDIsMTIgKzUwOSwxMiBAQAogCiAgIC8qIHdhaXQgNzQgQ3ljbGVzOiByZXF1aXJlZCBwb3dlciB1cCB3YWl0aW5nIHRpbWUgYmVmb3JlIHN0YXJ0aW5nCiAgICAgIHRoZSBTRCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSAqLwotICBzZG1tY19jbGsgPSBzZG1tY19jbGsvKDJVKkluaXQuQ2xvY2tEaXYpOwotICBIQUxfRGVsYXkoMVUrICg3NFUqMTAwMFUvKHNkbW1jX2NsaykpKTsKKyAgc2RtbWNfY2xrID0gc2RtbWNfY2xrIC8gKDJVICogSW5pdC5DbG9ja0Rpdik7CisgIEhBTF9EZWxheSgxVSArICg3NFUgKiAxMDAwVSAvIChzZG1tY19jbGspKSk7CiAKICAgLyogSWRlbnRpZnkgY2FyZCBvcGVyYXRpbmcgdm9sdGFnZSAqLwogICBlcnJvcnN0YXRlID0gU0RfUG93ZXJPTihoc2QpOwotICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgewogICAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfUkVBRFk7CiAgICAgaHNkLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKQEAgLTUxNiw3ICs1MjMsNyBAQAogCiAgIC8qIENhcmQgaW5pdGlhbGl6YXRpb24gKi8KICAgZXJyb3JzdGF0ZSA9IFNEX0luaXRDYXJkKGhzZCk7Ci0gIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICB7CiAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKICAgICBoc2QtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwpAQCAtNTI1LDcgKzUzMiw3IEBACiAKICAgLyogU2V0IEJsb2NrIFNpemUgZm9yIENhcmQgKi8KICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEJsb2NrTGVuZ3RoKGhzZC0+SW5zdGFuY2UsIEJMT0NLU0laRSk7Ci0gIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICB7CiAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTU0NSw3ICs1NTIsNyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NEX0RlSW5pdChTRF9IYW5kbGVUeXBlRGVmICpoc2QpCiB7CiAgIC8qIENoZWNrIHRoZSBTRCBoYW5kbGUgYWxsb2NhdGlvbiAqLwotICBpZihoc2QgPT0gTlVMTCkKKyAgaWYgKGhzZCA9PSBOVUxMKQogICB7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQpAQCAtNTYwLDcgKzU2Nyw3IEBACiAgIGlmIChoc2QtPkluaXQuVHJhbmNlaXZlclByZXNlbnQgPT0gU0RNTUNfVFJBTlNDRUlWRVJfUFJFU0VOVCkKICAgewogI2lmIGRlZmluZWQgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTKSAmJiAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCi0gICAgaWYoaHNkLT5Ecml2ZVRyYW5zY2VpdmVyXzFfOFZfQ2FsbGJhY2sgPT0gTlVMTCkKKyAgICBpZiAoaHNkLT5Ecml2ZVRyYW5zY2VpdmVyXzFfOFZfQ2FsbGJhY2sgPT0gTlVMTCkKICAgICB7CiAgICAgICBoc2QtPkRyaXZlVHJhbnNjZWl2ZXJfMV84Vl9DYWxsYmFjayA9IEhBTF9TRF9Ecml2ZVRyYW5zY2VpdmVyXzFfOFZfQ2FsbGJhY2s7CiAgICAgfQpAQCAtNTc1LDcgKzU4Miw3IEBACiAgIFNEX1Bvd2VyT0ZGKGhzZCk7CiAKICNpZiBkZWZpbmVkIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQotICBpZihoc2QtPk1zcERlSW5pdENhbGxiYWNrID09IE5VTEwpCisgIGlmIChoc2QtPk1zcERlSW5pdENhbGxiYWNrID09IE5VTEwpCiAgIHsKICAgICBoc2QtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX1NEX01zcERlSW5pdDsKICAgfQpAQCAtNjI5LDggKzYzNiw4IEBACiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBTRF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyCi0gKiAgQGJyaWVmICAgRGF0YSB0cmFuc2ZlciBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgIERhdGEgdHJhbnNmZXIgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMgIyMjIyMKQEAgLTY1NSwyNiArNjYyLDI5IEBACiAgICogQHBhcmFtICBUaW1lb3V0OiBTcGVjaWZ5IHRpbWVvdXQgdmFsdWUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9SZWFkQmxvY2tzKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgdWludDhfdCAqcERhdGEsIHVpbnQzMl90IEJsb2NrQWRkLCB1aW50MzJfdCBOdW1iZXJPZkJsb2NrcywgdWludDMyX3QgVGltZW91dCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9SZWFkQmxvY2tzKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgdWludDhfdCAqcERhdGEsIHVpbnQzMl90IEJsb2NrQWRkLCB1aW50MzJfdCBOdW1iZXJPZkJsb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFRpbWVvdXQpCiB7CiAgIFNETU1DX0RhdGFJbml0VHlwZURlZiBjb25maWc7CiAgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIHVpbnQzMl90IHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7Ci0gIHVpbnQzMl90IGNvdW50LCBkYXRhLCBkYXRhcmVtYWluaW5nOworICB1aW50MzJfdCBjb3VudDsKKyAgdWludDMyX3QgZGF0YTsKKyAgdWludDMyX3QgZGF0YXJlbWFpbmluZzsKICAgdWludDMyX3QgYWRkID0gQmxvY2tBZGQ7CiAgIHVpbnQ4X3QgKnRlbXBidWZmID0gcERhdGE7CiAKLSAgaWYoTlVMTCA9PSBwRGF0YSkKKyAgaWYgKE5VTEwgPT0gcERhdGEpCiAgIHsKICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfUEFSQU07CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCi0gIGlmKGhzZC0+U3RhdGUgPT0gSEFMX1NEX1NUQVRFX1JFQURZKQorICBpZiAoaHNkLT5TdGF0ZSA9PSBIQUxfU0RfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBoc2QtPkVycm9yQ29kZSA9IEhBTF9TRF9FUlJPUl9OT05FOwogCi0gICAgaWYoKGFkZCArIE51bWJlck9mQmxvY2tzKSA+IChoc2QtPlNkQ2FyZC5Mb2dCbG9ja05icikpCisgICAgaWYgKChhZGQgKyBOdW1iZXJPZkJsb2NrcykgPiAoaHNkLT5TZENhcmQuTG9nQmxvY2tOYnIpKQogICAgIHsKICAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9BRERSX09VVF9PRl9SQU5HRTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC02ODUsNyArNjk1LDcgQEAKICAgICAvKiBJbml0aWFsaXplIGRhdGEgY29udHJvbCByZWdpc3RlciAqLwogICAgIGhzZC0+SW5zdGFuY2UtPkRDVFJMID0gMFU7CiAKLSAgICBpZihoc2QtPlNkQ2FyZC5DYXJkVHlwZSAhPSBDQVJEX1NESENfU0RYQykKKyAgICBpZiAoaHNkLT5TZENhcmQuQ2FyZFR5cGUgIT0gQ0FSRF9TREhDX1NEWEMpCiAgICAgewogICAgICAgYWRkICo9IDUxMlU7CiAgICAgfQpAQCAtNjk4LDEwICs3MDgsMTAgQEAKICAgICBjb25maWcuVHJhbnNmZXJNb2RlICA9IFNETU1DX1RSQU5TRkVSX01PREVfQkxPQ0s7CiAgICAgY29uZmlnLkRQU00gICAgICAgICAgPSBTRE1NQ19EUFNNX0RJU0FCTEU7CiAgICAgKHZvaWQpU0RNTUNfQ29uZmlnRGF0YShoc2QtPkluc3RhbmNlLCAmY29uZmlnKTsKLSAgICBfX1NETU1DX0NNRFRSQU5TX0VOQUJMRSggaHNkLT5JbnN0YW5jZSk7CisgICAgX19TRE1NQ19DTURUUkFOU19FTkFCTEUoaHNkLT5JbnN0YW5jZSk7CiAKICAgICAvKiBSZWFkIGJsb2NrKHMpIGluIHBvbGxpbmcgbW9kZSAqLwotICAgIGlmKE51bWJlck9mQmxvY2tzID4gMVUpCisgICAgaWYgKE51bWJlck9mQmxvY2tzID4gMVUpCiAgICAgewogICAgICAgaHNkLT5Db250ZXh0ID0gU0RfQ09OVEVYVF9SRUFEX01VTFRJUExFX0JMT0NLOwogCkBAIC03MTUsNyArNzI1LDcgQEAKICAgICAgIC8qIFJlYWQgU2luZ2xlIEJsb2NrIGNvbW1hbmQgKi8KICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRSZWFkU2luZ2xlQmxvY2soaHNkLT5JbnN0YW5jZSwgYWRkKTsKICAgICB9Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKKyAgICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNETU1DX1NUQVRJQ19GTEFHUyk7CkBAIC03MjcsMTIgKzczNywxMiBAQAogCiAgICAgLyogUG9sbCBvbiBTRE1NQyBmbGFncyAqLwogICAgIGRhdGFyZW1haW5pbmcgPSBjb25maWcuRGF0YUxlbmd0aDsKLSAgICB3aGlsZSghX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX1JYT1ZFUlIgfCBTRE1NQ19GTEFHX0RDUkNGQUlMIHwgU0RNTUNfRkxBR19EVElNRU9VVCB8IFNETU1DX0ZMQUdfREFUQUVORCkpCisgICAgd2hpbGUgKCFfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfUlhPVkVSUiB8IFNETU1DX0ZMQUdfRENSQ0ZBSUwgfCBTRE1NQ19GTEFHX0RUSU1FT1VUIHwgU0RNTUNfRkxBR19EQVRBRU5EKSkKICAgICB7Ci0gICAgICBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfUlhGSUZPSEYpICYmIChkYXRhcmVtYWluaW5nID49IDMyVSkpCisgICAgICBpZiAoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX1JYRklGT0hGKSAmJiAoZGF0YXJlbWFpbmluZyA+PSAzMlUpKQogICAgICAgewogICAgICAgICAvKiBSZWFkIGRhdGEgZnJvbSBTRE1NQyBSeCBGSUZPICovCi0gICAgICAgIGZvcihjb3VudCA9IDBVOyBjb3VudCA8IDhVOyBjb3VudCsrKQorICAgICAgICBmb3IgKGNvdW50ID0gMFU7IGNvdW50IDwgOFU7IGNvdW50KyspCiAgICAgICAgIHsKICAgICAgICAgICBkYXRhID0gU0RNTUNfUmVhZEZJRk8oaHNkLT5JbnN0YW5jZSk7CiAgICAgICAgICAgKnRlbXBidWZmID0gKHVpbnQ4X3QpKGRhdGEgJiAweEZGVSk7CkBAIC03NDcsMjYgKzc1NywyNiBAQAogICAgICAgICBkYXRhcmVtYWluaW5nIC09IDMyVTsKICAgICAgIH0KIAotICAgICAgaWYoKChIQUxfR2V0VGljaygpLXRpY2tzdGFydCkgPj0gIFRpbWVvdXQpIHx8IChUaW1lb3V0ID09IDBVKSkKKyAgICAgIGlmICgoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID49ICBUaW1lb3V0KSB8fCAoVGltZW91dCA9PSAwVSkpCiAgICAgICB7CiAgICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCiAgICAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwogICAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfVElNRU9VVDsKLSAgICAgICAgaHNkLT5TdGF0ZT0gSEFMX1NEX1NUQVRFX1JFQURZOworICAgICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOwogICAgICAgICBoc2QtPkNvbnRleHQgPSBTRF9DT05URVhUX05PTkU7CiAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICAgIH0KICAgICB9Ci0gICAgX19TRE1NQ19DTURUUkFOU19ESVNBQkxFKCBoc2QtPkluc3RhbmNlKTsKKyAgICBfX1NETU1DX0NNRFRSQU5TX0RJU0FCTEUoaHNkLT5JbnN0YW5jZSk7CiAKICAgICAvKiBTZW5kIHN0b3AgdHJhbnNtaXNzaW9uIGNvbW1hbmQgaW4gY2FzZSBvZiBtdWx0aWJsb2NrIHJlYWQgKi8KLSAgICBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfREFUQUVORCkgJiYgKE51bWJlck9mQmxvY2tzID4gMVUpKQorICAgIGlmIChfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfREFUQUVORCkgJiYgKE51bWJlck9mQmxvY2tzID4gMVUpKQogICAgIHsKLSAgICAgIGlmKGhzZC0+U2RDYXJkLkNhcmRUeXBlICE9IENBUkRfU0VDVVJFRCkKKyAgICAgIGlmIChoc2QtPlNkQ2FyZC5DYXJkVHlwZSAhPSBDQVJEX1NFQ1VSRUQpCiAgICAgICB7CiAgICAgICAgIC8qIFNlbmQgc3RvcCB0cmFuc21pc3Npb24gY29tbWFuZCAqLwogICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3RvcFRyYW5zZmVyKGhzZC0+SW5zdGFuY2UpOwotICAgICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICAgICAgICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgICAgICAgewogICAgICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCiAgICAgICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNETU1DX1NUQVRJQ19GTEFHUyk7CkBAIC03NzksNyArNzg5LDcgQEAKICAgICB9CiAKICAgICAvKiBHZXQgZXJyb3Igc3RhdGUgKi8KLSAgICBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfRFRJTUVPVVQpKQorICAgIGlmIChfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfRFRJTUVPVVQpKQogICAgIHsKICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCiAgICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTc4OCw3ICs3OTgsNyBAQAogICAgICAgaHNkLT5Db250ZXh0ID0gU0RfQ09OVEVYVF9OT05FOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgZWxzZSBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfRENSQ0ZBSUwpKQorICAgIGVsc2UgaWYgKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RNTUNfRkxBR19EQ1JDRkFJTCkpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwpAQCAtNzk3LDcgKzgwNyw3IEBACiAgICAgICBoc2QtPkNvbnRleHQgPSBTRF9DT05URVhUX05PTkU7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICBlbHNlIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RNTUNfRkxBR19SWE9WRVJSKSkKKyAgICBlbHNlIGlmIChfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfUlhPVkVSUikpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwpAQCAtODM3LDI2ICs4NDcsMjkgQEAKICAgKiBAcGFyYW0gIFRpbWVvdXQ6IFNwZWNpZnkgdGltZW91dCB2YWx1ZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NEX1dyaXRlQmxvY2tzKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgdWludDhfdCAqcERhdGEsIHVpbnQzMl90IEJsb2NrQWRkLCB1aW50MzJfdCBOdW1iZXJPZkJsb2NrcywgdWludDMyX3QgVGltZW91dCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9Xcml0ZUJsb2NrcyhTRF9IYW5kbGVUeXBlRGVmICpoc2QsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBCbG9ja0FkZCwgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCkKIHsKICAgU0RNTUNfRGF0YUluaXRUeXBlRGVmIGNvbmZpZzsKICAgdWludDMyX3QgZXJyb3JzdGF0ZTsKICAgdWludDMyX3QgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKLSAgdWludDMyX3QgY291bnQsIGRhdGEsIGRhdGFyZW1haW5pbmc7CisgIHVpbnQzMl90IGNvdW50OworICB1aW50MzJfdCBkYXRhOworICB1aW50MzJfdCBkYXRhcmVtYWluaW5nOwogICB1aW50MzJfdCBhZGQgPSBCbG9ja0FkZDsKICAgdWludDhfdCAqdGVtcGJ1ZmYgPSBwRGF0YTsKIAotICBpZihOVUxMID09IHBEYXRhKQorICBpZiAoTlVMTCA9PSBwRGF0YSkKICAgewogICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9QQVJBTTsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKLSAgaWYoaHNkLT5TdGF0ZSA9PSBIQUxfU0RfU1RBVEVfUkVBRFkpCisgIGlmIChoc2QtPlN0YXRlID09IEhBTF9TRF9TVEFURV9SRUFEWSkKICAgewogICAgIGhzZC0+RXJyb3JDb2RlID0gSEFMX1NEX0VSUk9SX05PTkU7CiAKLSAgICBpZigoYWRkICsgTnVtYmVyT2ZCbG9ja3MpID4gKGhzZC0+U2RDYXJkLkxvZ0Jsb2NrTmJyKSkKKyAgICBpZiAoKGFkZCArIE51bWJlck9mQmxvY2tzKSA+IChoc2QtPlNkQ2FyZC5Mb2dCbG9ja05icikpCiAgICAgewogICAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX0FERFJfT1VUX09GX1JBTkdFOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTg2Nyw3ICs4ODAsNyBAQAogICAgIC8qIEluaXRpYWxpemUgZGF0YSBjb250cm9sIHJlZ2lzdGVyICovCiAgICAgaHNkLT5JbnN0YW5jZS0+RENUUkwgPSAwVTsKIAotICAgIGlmKGhzZC0+U2RDYXJkLkNhcmRUeXBlICE9IENBUkRfU0RIQ19TRFhDKQorICAgIGlmIChoc2QtPlNkQ2FyZC5DYXJkVHlwZSAhPSBDQVJEX1NESENfU0RYQykKICAgICB7CiAgICAgICBhZGQgKj0gNTEyVTsKICAgICB9CkBAIC04ODAsMTAgKzg5MywxMCBAQAogICAgIGNvbmZpZy5UcmFuc2Zlck1vZGUgID0gU0RNTUNfVFJBTlNGRVJfTU9ERV9CTE9DSzsKICAgICBjb25maWcuRFBTTSAgICAgICAgICA9IFNETU1DX0RQU01fRElTQUJMRTsKICAgICAodm9pZClTRE1NQ19Db25maWdEYXRhKGhzZC0+SW5zdGFuY2UsICZjb25maWcpOwotICAgIF9fU0RNTUNfQ01EVFJBTlNfRU5BQkxFKCBoc2QtPkluc3RhbmNlKTsKKyAgICBfX1NETU1DX0NNRFRSQU5TX0VOQUJMRShoc2QtPkluc3RhbmNlKTsKIAogICAgIC8qIFdyaXRlIEJsb2NrcyBpbiBQb2xsaW5nIG1vZGUgKi8KLSAgICBpZihOdW1iZXJPZkJsb2NrcyA+IDFVKQorICAgIGlmIChOdW1iZXJPZkJsb2NrcyA+IDFVKQogICAgIHsKICAgICAgIGhzZC0+Q29udGV4dCA9IFNEX0NPTlRFWFRfV1JJVEVfTVVMVElQTEVfQkxPQ0s7CiAKQEAgLTg5Nyw3ICs5MTAsNyBAQAogICAgICAgLyogV3JpdGUgU2luZ2xlIEJsb2NrIGNvbW1hbmQgKi8KICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRXcml0ZVNpbmdsZUJsb2NrKGhzZC0+SW5zdGFuY2UsIGFkZCk7CiAgICAgfQotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgICAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwpAQCAtOTA5LDEyICs5MjIsMTMgQEAKIAogICAgIC8qIFdyaXRlIGJsb2NrKHMpIGluIHBvbGxpbmcgbW9kZSAqLwogICAgIGRhdGFyZW1haW5pbmcgPSBjb25maWcuRGF0YUxlbmd0aDsKLSAgICB3aGlsZSghX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX1RYVU5ERVJSIHwgU0RNTUNfRkxBR19EQ1JDRkFJTCB8IFNETU1DX0ZMQUdfRFRJTUVPVVQgfCBTRE1NQ19GTEFHX0RBVEFFTkQpKQorICAgIHdoaWxlICghX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX1RYVU5ERVJSIHwgU0RNTUNfRkxBR19EQ1JDRkFJTCB8IFNETU1DX0ZMQUdfRFRJTUVPVVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfRkxBR19EQVRBRU5EKSkKICAgICB7Ci0gICAgICBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfVFhGSUZPSEUpICYmIChkYXRhcmVtYWluaW5nID49IDMyVSkpCisgICAgICBpZiAoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX1RYRklGT0hFKSAmJiAoZGF0YXJlbWFpbmluZyA+PSAzMlUpKQogICAgICAgewogICAgICAgICAvKiBXcml0ZSBkYXRhIHRvIFNETU1DIFR4IEZJRk8gKi8KLSAgICAgICAgZm9yKGNvdW50ID0gMFU7IGNvdW50IDwgOFU7IGNvdW50KyspCisgICAgICAgIGZvciAoY291bnQgPSAwVTsgY291bnQgPCA4VTsgY291bnQrKykKICAgICAgICAgewogICAgICAgICAgIGRhdGEgPSAodWludDMyX3QpKCp0ZW1wYnVmZik7CiAgICAgICAgICAgdGVtcGJ1ZmYrKzsKQEAgLTkyOSw3ICs5NDMsNyBAQAogICAgICAgICBkYXRhcmVtYWluaW5nIC09IDMyVTsKICAgICAgIH0KIAotICAgICAgaWYoKChIQUxfR2V0VGljaygpLXRpY2tzdGFydCkgPj0gIFRpbWVvdXQpIHx8IChUaW1lb3V0ID09IDBVKSkKKyAgICAgIGlmICgoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID49ICBUaW1lb3V0KSB8fCAoVGltZW91dCA9PSAwVSkpCiAgICAgICB7CiAgICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCiAgICAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwpAQCAtOTM5LDE2ICs5NTMsMTYgQEAKICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICAgICAgfQogICAgIH0KLSAgICBfX1NETU1DX0NNRFRSQU5TX0RJU0FCTEUoIGhzZC0+SW5zdGFuY2UpOworICAgIF9fU0RNTUNfQ01EVFJBTlNfRElTQUJMRShoc2QtPkluc3RhbmNlKTsKIAogICAgIC8qIFNlbmQgc3RvcCB0cmFuc21pc3Npb24gY29tbWFuZCBpbiBjYXNlIG9mIG11bHRpYmxvY2sgd3JpdGUgKi8KLSAgICBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfREFUQUVORCkgJiYgKE51bWJlck9mQmxvY2tzID4gMVUpKQorICAgIGlmIChfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfREFUQUVORCkgJiYgKE51bWJlck9mQmxvY2tzID4gMVUpKQogICAgIHsKLSAgICAgIGlmKGhzZC0+U2RDYXJkLkNhcmRUeXBlICE9IENBUkRfU0VDVVJFRCkKKyAgICAgIGlmIChoc2QtPlNkQ2FyZC5DYXJkVHlwZSAhPSBDQVJEX1NFQ1VSRUQpCiAgICAgICB7CiAgICAgICAgIC8qIFNlbmQgc3RvcCB0cmFuc21pc3Npb24gY29tbWFuZCAqLwogICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3RvcFRyYW5zZmVyKGhzZC0+SW5zdGFuY2UpOwotICAgICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICAgICAgICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgICAgICAgewogICAgICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCiAgICAgICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNETU1DX1NUQVRJQ19GTEFHUyk7CkBAIC05NjEsNyArOTc1LDcgQEAKICAgICB9CiAKICAgICAvKiBHZXQgZXJyb3Igc3RhdGUgKi8KLSAgICBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfRFRJTUVPVVQpKQorICAgIGlmIChfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfRFRJTUVPVVQpKQogICAgIHsKICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCiAgICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTk3MCw3ICs5ODQsNyBAQAogICAgICAgaHNkLT5Db250ZXh0ID0gU0RfQ09OVEVYVF9OT05FOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgZWxzZSBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfRENSQ0ZBSUwpKQorICAgIGVsc2UgaWYgKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RNTUNfRkxBR19EQ1JDRkFJTCkpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwpAQCAtOTc5LDcgKzk5Myw3IEBACiAgICAgICBoc2QtPkNvbnRleHQgPSBTRF9DT05URVhUX05PTkU7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICBlbHNlIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RNTUNfRkxBR19UWFVOREVSUikpCisgICAgZWxzZSBpZiAoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX1RYVU5ERVJSKSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNETU1DX1NUQVRJQ19GTEFHUyk7CkBAIC0xMDIwLDIzICsxMDM0LDI0IEBACiAgICogQHBhcmFtICBOdW1iZXJPZkJsb2NrczogTnVtYmVyIG9mIGJsb2NrcyB0byByZWFkLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NEX1JlYWRCbG9ja3NfSVQoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgQmxvY2tBZGQsIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NEX1JlYWRCbG9ja3NfSVQoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgQmxvY2tBZGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBOdW1iZXJPZkJsb2NrcykKIHsKICAgU0RNTUNfRGF0YUluaXRUeXBlRGVmIGNvbmZpZzsKICAgdWludDMyX3QgZXJyb3JzdGF0ZTsKICAgdWludDMyX3QgYWRkID0gQmxvY2tBZGQ7CiAKLSAgaWYoTlVMTCA9PSBwRGF0YSkKKyAgaWYgKE5VTEwgPT0gcERhdGEpCiAgIHsKICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfUEFSQU07CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCi0gIGlmKGhzZC0+U3RhdGUgPT0gSEFMX1NEX1NUQVRFX1JFQURZKQorICBpZiAoaHNkLT5TdGF0ZSA9PSBIQUxfU0RfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBoc2QtPkVycm9yQ29kZSA9IEhBTF9TRF9FUlJPUl9OT05FOwogCi0gICAgaWYoKGFkZCArIE51bWJlck9mQmxvY2tzKSA+IChoc2QtPlNkQ2FyZC5Mb2dCbG9ja05icikpCisgICAgaWYgKChhZGQgKyBOdW1iZXJPZkJsb2NrcykgPiAoaHNkLT5TZENhcmQuTG9nQmxvY2tOYnIpKQogICAgIHsKICAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9BRERSX09VVF9PRl9SQU5HRTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC0xMDUwLDcgKzEwNjUsNyBAQAogICAgIGhzZC0+cFJ4QnVmZlB0ciA9IHBEYXRhOwogICAgIGhzZC0+UnhYZmVyU2l6ZSA9IEJMT0NLU0laRSAqIE51bWJlck9mQmxvY2tzOwogCi0gICAgaWYoaHNkLT5TZENhcmQuQ2FyZFR5cGUgIT0gQ0FSRF9TREhDX1NEWEMpCisgICAgaWYgKGhzZC0+U2RDYXJkLkNhcmRUeXBlICE9IENBUkRfU0RIQ19TRFhDKQogICAgIHsKICAgICAgIGFkZCAqPSA1MTJVOwogICAgIH0KQEAgLTEwNjMsMTAgKzEwNzgsMTAgQEAKICAgICBjb25maWcuVHJhbnNmZXJNb2RlICA9IFNETU1DX1RSQU5TRkVSX01PREVfQkxPQ0s7CiAgICAgY29uZmlnLkRQU00gICAgICAgICAgPSBTRE1NQ19EUFNNX0RJU0FCTEU7CiAgICAgKHZvaWQpU0RNTUNfQ29uZmlnRGF0YShoc2QtPkluc3RhbmNlLCAmY29uZmlnKTsKLSAgICBfX1NETU1DX0NNRFRSQU5TX0VOQUJMRSggaHNkLT5JbnN0YW5jZSk7CisgICAgX19TRE1NQ19DTURUUkFOU19FTkFCTEUoaHNkLT5JbnN0YW5jZSk7CiAKICAgICAvKiBSZWFkIEJsb2NrcyBpbiBJVCBtb2RlICovCi0gICAgaWYoTnVtYmVyT2ZCbG9ja3MgPiAxVSkKKyAgICBpZiAoTnVtYmVyT2ZCbG9ja3MgPiAxVSkKICAgICB7CiAgICAgICBoc2QtPkNvbnRleHQgPSAoU0RfQ09OVEVYVF9SRUFEX01VTFRJUExFX0JMT0NLIHwgU0RfQ09OVEVYVF9JVCk7CiAKQEAgLTEwODAsNyArMTA5NSw3IEBACiAgICAgICAvKiBSZWFkIFNpbmdsZSBCbG9jayBjb21tYW5kICovCiAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kUmVhZFNpbmdsZUJsb2NrKGhzZC0+SW5zdGFuY2UsIGFkZCk7CiAgICAgfQotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgICAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwpAQCAtMTA5MCw3ICsxMTA1LDggQEAKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogCi0gICAgX19IQUxfU0RfRU5BQkxFX0lUKGhzZCwgKFNETU1DX0lUX0RDUkNGQUlMIHwgU0RNTUNfSVRfRFRJTUVPVVQgfCBTRE1NQ19JVF9SWE9WRVJSIHwgU0RNTUNfSVRfREFUQUVORCB8IFNETU1DX0ZMQUdfUlhGSUZPSEYpKTsKKyAgICBfX0hBTF9TRF9FTkFCTEVfSVQoaHNkLCAoU0RNTUNfSVRfRENSQ0ZBSUwgfCBTRE1NQ19JVF9EVElNRU9VVCB8IFNETU1DX0lUX1JYT1ZFUlIgfCBTRE1NQ19JVF9EQVRBRU5EIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfRkxBR19SWEZJRk9IRikpOwogCiAgICAgcmV0dXJuIEhBTF9PSzsKICAgfQpAQCAtMTExMywyMyArMTEyOSwyNCBAQAogICAqIEBwYXJhbSAgTnVtYmVyT2ZCbG9ja3M6IE51bWJlciBvZiBibG9ja3MgdG8gd3JpdGUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9Xcml0ZUJsb2Nrc19JVChTRF9IYW5kbGVUeXBlRGVmICpoc2QsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBCbG9ja0FkZCwgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RfV3JpdGVCbG9ja3NfSVQoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgQmxvY2tBZGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MpCiB7CiAgIFNETU1DX0RhdGFJbml0VHlwZURlZiBjb25maWc7CiAgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIHVpbnQzMl90IGFkZCA9IEJsb2NrQWRkOwogCi0gIGlmKE5VTEwgPT0gcERhdGEpCisgIGlmIChOVUxMID09IHBEYXRhKQogICB7CiAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX1BBUkFNOwogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAotICBpZihoc2QtPlN0YXRlID09IEhBTF9TRF9TVEFURV9SRUFEWSkKKyAgaWYgKGhzZC0+U3RhdGUgPT0gSEFMX1NEX1NUQVRFX1JFQURZKQogICB7CiAgICAgaHNkLT5FcnJvckNvZGUgPSBIQUxfU0RfRVJST1JfTk9ORTsKIAotICAgIGlmKChhZGQgKyBOdW1iZXJPZkJsb2NrcykgPiAoaHNkLT5TZENhcmQuTG9nQmxvY2tOYnIpKQorICAgIGlmICgoYWRkICsgTnVtYmVyT2ZCbG9ja3MpID4gKGhzZC0+U2RDYXJkLkxvZ0Jsb2NrTmJyKSkKICAgICB7CiAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfQUREUl9PVVRfT0ZfUkFOR0U7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtMTE0Myw3ICsxMTYwLDcgQEAKICAgICBoc2QtPnBUeEJ1ZmZQdHIgPSBwRGF0YTsKICAgICBoc2QtPlR4WGZlclNpemUgPSBCTE9DS1NJWkUgKiBOdW1iZXJPZkJsb2NrczsKIAotICAgIGlmKGhzZC0+U2RDYXJkLkNhcmRUeXBlICE9IENBUkRfU0RIQ19TRFhDKQorICAgIGlmIChoc2QtPlNkQ2FyZC5DYXJkVHlwZSAhPSBDQVJEX1NESENfU0RYQykKICAgICB7CiAgICAgICBhZGQgKj0gNTEyVTsKICAgICB9CkBAIC0xMTU3LDEyICsxMTc0LDEyIEBACiAgICAgY29uZmlnLkRQU00gICAgICAgICAgPSBTRE1NQ19EUFNNX0RJU0FCTEU7CiAgICAgKHZvaWQpU0RNTUNfQ29uZmlnRGF0YShoc2QtPkluc3RhbmNlLCAmY29uZmlnKTsKIAotICAgIF9fU0RNTUNfQ01EVFJBTlNfRU5BQkxFKCBoc2QtPkluc3RhbmNlKTsKKyAgICBfX1NETU1DX0NNRFRSQU5TX0VOQUJMRShoc2QtPkluc3RhbmNlKTsKIAogICAgIC8qIFdyaXRlIEJsb2NrcyBpbiBQb2xsaW5nIG1vZGUgKi8KLSAgICBpZihOdW1iZXJPZkJsb2NrcyA+IDFVKQorICAgIGlmIChOdW1iZXJPZkJsb2NrcyA+IDFVKQogICAgIHsKLSAgICAgIGhzZC0+Q29udGV4dCA9IChTRF9DT05URVhUX1dSSVRFX01VTFRJUExFX0JMT0NLfCBTRF9DT05URVhUX0lUKTsKKyAgICAgIGhzZC0+Q29udGV4dCA9IChTRF9DT05URVhUX1dSSVRFX01VTFRJUExFX0JMT0NLIHwgU0RfQ09OVEVYVF9JVCk7CiAKICAgICAgIC8qIFdyaXRlIE11bHRpIEJsb2NrIGNvbW1hbmQgKi8KICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRXcml0ZU11bHRpQmxvY2soaHNkLT5JbnN0YW5jZSwgYWRkKTsKQEAgLTExNzQsNyArMTE5MSw3IEBACiAgICAgICAvKiBXcml0ZSBTaW5nbGUgQmxvY2sgY29tbWFuZCAqLwogICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFdyaXRlU2luZ2xlQmxvY2soaHNkLT5JbnN0YW5jZSwgYWRkKTsKICAgICB9Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKKyAgICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNETU1DX1NUQVRJQ19GTEFHUyk7CkBAIC0xMTg1LDcgKzEyMDIsOCBAQAogICAgIH0KIAogICAgIC8qIEVuYWJsZSB0cmFuc2ZlciBpbnRlcnJ1cHRzICovCi0gICAgX19IQUxfU0RfRU5BQkxFX0lUKGhzZCwgKFNETU1DX0lUX0RDUkNGQUlMIHwgU0RNTUNfSVRfRFRJTUVPVVQgfCBTRE1NQ19JVF9UWFVOREVSUiB8IFNETU1DX0lUX0RBVEFFTkQgfCBTRE1NQ19GTEFHX1RYRklGT0hFKSk7CisgICAgX19IQUxfU0RfRU5BQkxFX0lUKGhzZCwgKFNETU1DX0lUX0RDUkNGQUlMIHwgU0RNTUNfSVRfRFRJTUVPVVQgfCBTRE1NQ19JVF9UWFVOREVSUiB8IFNETU1DX0lUX0RBVEFFTkQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19GTEFHX1RYRklGT0hFKSk7CiAKICAgICByZXR1cm4gSEFMX09LOwogICB9CkBAIC0xMjA4LDIzICsxMjI2LDI0IEBACiAgICogQHBhcmFtICBOdW1iZXJPZkJsb2NrczogTnVtYmVyIG9mIGJsb2NrcyB0byByZWFkLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NEX1JlYWRCbG9ja3NfRE1BKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgdWludDhfdCAqcERhdGEsIHVpbnQzMl90IEJsb2NrQWRkLCB1aW50MzJfdCBOdW1iZXJPZkJsb2NrcykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9SZWFkQmxvY2tzX0RNQShTRF9IYW5kbGVUeXBlRGVmICpoc2QsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBCbG9ja0FkZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBOdW1iZXJPZkJsb2NrcykKIHsKICAgU0RNTUNfRGF0YUluaXRUeXBlRGVmIGNvbmZpZzsKICAgdWludDMyX3QgZXJyb3JzdGF0ZTsKICAgdWludDMyX3QgYWRkID0gQmxvY2tBZGQ7CiAKLSAgaWYoTlVMTCA9PSBwRGF0YSkKKyAgaWYgKE5VTEwgPT0gcERhdGEpCiAgIHsKICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfUEFSQU07CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCi0gIGlmKGhzZC0+U3RhdGUgPT0gSEFMX1NEX1NUQVRFX1JFQURZKQorICBpZiAoaHNkLT5TdGF0ZSA9PSBIQUxfU0RfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBoc2QtPkVycm9yQ29kZSA9IEhBTF9TRF9FUlJPUl9OT05FOwogCi0gICAgaWYoKGFkZCArIE51bWJlck9mQmxvY2tzKSA+IChoc2QtPlNkQ2FyZC5Mb2dCbG9ja05icikpCisgICAgaWYgKChhZGQgKyBOdW1iZXJPZkJsb2NrcykgPiAoaHNkLT5TZENhcmQuTG9nQmxvY2tOYnIpKQogICAgIHsKICAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9BRERSX09VVF9PRl9SQU5HRTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC0xMjM4LDcgKzEyNTcsNyBAQAogICAgIGhzZC0+cFJ4QnVmZlB0ciA9IHBEYXRhOwogICAgIGhzZC0+UnhYZmVyU2l6ZSA9IEJMT0NLU0laRSAqIE51bWJlck9mQmxvY2tzOwogCi0gICAgaWYoaHNkLT5TZENhcmQuQ2FyZFR5cGUgIT0gQ0FSRF9TREhDX1NEWEMpCisgICAgaWYgKGhzZC0+U2RDYXJkLkNhcmRUeXBlICE9IENBUkRfU0RIQ19TRFhDKQogICAgIHsKICAgICAgIGFkZCAqPSA1MTJVOwogICAgIH0KQEAgLTEyNTIsMTIgKzEyNzEsMTIgQEAKICAgICBjb25maWcuRFBTTSAgICAgICAgICA9IFNETU1DX0RQU01fRElTQUJMRTsKICAgICAodm9pZClTRE1NQ19Db25maWdEYXRhKGhzZC0+SW5zdGFuY2UsICZjb25maWcpOwogCi0gICAgX19TRE1NQ19DTURUUkFOU19FTkFCTEUoIGhzZC0+SW5zdGFuY2UpOworICAgIF9fU0RNTUNfQ01EVFJBTlNfRU5BQkxFKGhzZC0+SW5zdGFuY2UpOwogICAgIGhzZC0+SW5zdGFuY2UtPklETUFCQVNFMCA9ICh1aW50MzJfdCkgcERhdGEgOwogICAgIGhzZC0+SW5zdGFuY2UtPklETUFDVFJMICA9IFNETU1DX0VOQUJMRV9JRE1BX1NJTkdMRV9CVUZGOwogCiAgICAgLyogUmVhZCBCbG9ja3MgaW4gRE1BIG1vZGUgKi8KLSAgICBpZihOdW1iZXJPZkJsb2NrcyA+IDFVKQorICAgIGlmIChOdW1iZXJPZkJsb2NrcyA+IDFVKQogICAgIHsKICAgICAgIGhzZC0+Q29udGV4dCA9IChTRF9DT05URVhUX1JFQURfTVVMVElQTEVfQkxPQ0sgfCBTRF9DT05URVhUX0RNQSk7CiAKQEAgLTEyNzEsNyArMTI5MCw3IEBACiAgICAgICAvKiBSZWFkIFNpbmdsZSBCbG9jayBjb21tYW5kICovCiAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kUmVhZFNpbmdsZUJsb2NrKGhzZC0+SW5zdGFuY2UsIGFkZCk7CiAgICAgfQotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgICAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwpAQCAtMTMwNiwyMyArMTMyNSwyNCBAQAogICAqIEBwYXJhbSAgTnVtYmVyT2ZCbG9ja3M6IE51bWJlciBvZiBibG9ja3MgdG8gd3JpdGUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9Xcml0ZUJsb2Nrc19ETUEoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgQmxvY2tBZGQsIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NEX1dyaXRlQmxvY2tzX0RNQShTRF9IYW5kbGVUeXBlRGVmICpoc2QsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBCbG9ja0FkZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MpCiB7CiAgIFNETU1DX0RhdGFJbml0VHlwZURlZiBjb25maWc7CiAgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIHVpbnQzMl90IGFkZCA9IEJsb2NrQWRkOwogCi0gIGlmKE5VTEwgPT0gcERhdGEpCisgIGlmIChOVUxMID09IHBEYXRhKQogICB7CiAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX1BBUkFNOwogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAotICBpZihoc2QtPlN0YXRlID09IEhBTF9TRF9TVEFURV9SRUFEWSkKKyAgaWYgKGhzZC0+U3RhdGUgPT0gSEFMX1NEX1NUQVRFX1JFQURZKQogICB7CiAgICAgaHNkLT5FcnJvckNvZGUgPSBIQUxfU0RfRVJST1JfTk9ORTsKIAotICAgIGlmKChhZGQgKyBOdW1iZXJPZkJsb2NrcykgPiAoaHNkLT5TZENhcmQuTG9nQmxvY2tOYnIpKQorICAgIGlmICgoYWRkICsgTnVtYmVyT2ZCbG9ja3MpID4gKGhzZC0+U2RDYXJkLkxvZ0Jsb2NrTmJyKSkKICAgICB7CiAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfQUREUl9PVVRfT0ZfUkFOR0U7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtMTMzNiw3ICsxMzU2LDcgQEAKICAgICBoc2QtPnBUeEJ1ZmZQdHIgPSBwRGF0YTsKICAgICBoc2QtPlR4WGZlclNpemUgPSBCTE9DS1NJWkUgKiBOdW1iZXJPZkJsb2NrczsKIAotICAgIGlmKGhzZC0+U2RDYXJkLkNhcmRUeXBlICE9IENBUkRfU0RIQ19TRFhDKQorICAgIGlmIChoc2QtPlNkQ2FyZC5DYXJkVHlwZSAhPSBDQVJEX1NESENfU0RYQykKICAgICB7CiAgICAgICBhZGQgKj0gNTEyVTsKICAgICB9CkBAIC0xMzUxLDEzICsxMzcxLDEzIEBACiAgICAgKHZvaWQpU0RNTUNfQ29uZmlnRGF0YShoc2QtPkluc3RhbmNlLCAmY29uZmlnKTsKIAogCi0gICAgX19TRE1NQ19DTURUUkFOU19FTkFCTEUoIGhzZC0+SW5zdGFuY2UpOworICAgIF9fU0RNTUNfQ01EVFJBTlNfRU5BQkxFKGhzZC0+SW5zdGFuY2UpOwogCiAgICAgaHNkLT5JbnN0YW5jZS0+SURNQUJBU0UwID0gKHVpbnQzMl90KSBwRGF0YSA7CiAgICAgaHNkLT5JbnN0YW5jZS0+SURNQUNUUkwgID0gU0RNTUNfRU5BQkxFX0lETUFfU0lOR0xFX0JVRkY7CiAKICAgICAvKiBXcml0ZSBCbG9ja3MgaW4gUG9sbGluZyBtb2RlICovCi0gICAgaWYoTnVtYmVyT2ZCbG9ja3MgPiAxVSkKKyAgICBpZiAoTnVtYmVyT2ZCbG9ja3MgPiAxVSkKICAgICB7CiAgICAgICBoc2QtPkNvbnRleHQgPSAoU0RfQ09OVEVYVF9XUklURV9NVUxUSVBMRV9CTE9DSyB8IFNEX0NPTlRFWFRfRE1BKTsKIApAQCAtMTM3MSw3ICsxMzkxLDcgQEAKICAgICAgIC8qIFdyaXRlIFNpbmdsZSBCbG9jayBjb21tYW5kICovCiAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kV3JpdGVTaW5nbGVCbG9jayhoc2QtPkluc3RhbmNlLCBhZGQpOwogICAgIH0KLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICAgIHsKICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCiAgICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTE0MDcsMTcgKzE0MjcsMTcgQEAKICAgdWludDMyX3Qgc3RhcnRfYWRkID0gQmxvY2tTdGFydEFkZDsKICAgdWludDMyX3QgZW5kX2FkZCA9IEJsb2NrRW5kQWRkOwogCi0gIGlmKGhzZC0+U3RhdGUgPT0gSEFMX1NEX1NUQVRFX1JFQURZKQorICBpZiAoaHNkLT5TdGF0ZSA9PSBIQUxfU0RfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBoc2QtPkVycm9yQ29kZSA9IEhBTF9TRF9FUlJPUl9OT05FOwogCi0gICAgaWYoZW5kX2FkZCA8IHN0YXJ0X2FkZCkKKyAgICBpZiAoZW5kX2FkZCA8IHN0YXJ0X2FkZCkKICAgICB7CiAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfUEFSQU07CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KIAotICAgIGlmKGVuZF9hZGQgPiAoaHNkLT5TZENhcmQuTG9nQmxvY2tOYnIpKQorICAgIGlmIChlbmRfYWRkID4gKGhzZC0+U2RDYXJkLkxvZ0Jsb2NrTmJyKSkKICAgICB7CiAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfQUREUl9PVVRfT0ZfUkFOR0U7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtMTQyNiw3ICsxNDQ2LDcgQEAKICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX0JVU1k7CiAKICAgICAvKiBDaGVjayBpZiB0aGUgY2FyZCBjb21tYW5kIGNsYXNzIHN1cHBvcnRzIGVyYXNlIGNvbW1hbmQgKi8KLSAgICBpZigoKGhzZC0+U2RDYXJkLkNsYXNzKSAmIFNETU1DX0NDQ0NfRVJBU0UpID09IDBVKQorICAgIGlmICgoKGhzZC0+U2RDYXJkLkNsYXNzKSAmIFNETU1DX0NDQ0NfRVJBU0UpID09IDBVKQogICAgIHsKICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCiAgICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTE0MzUsNyArMTQ1NSw3IEBACiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KIAotICAgIGlmKChTRE1NQ19HZXRSZXNwb25zZShoc2QtPkluc3RhbmNlLCBTRE1NQ19SRVNQMSkgJiBTRE1NQ19DQVJEX0xPQ0tFRCkgPT0gU0RNTUNfQ0FSRF9MT0NLRUQpCisgICAgaWYgKChTRE1NQ19HZXRSZXNwb25zZShoc2QtPkluc3RhbmNlLCBTRE1NQ19SRVNQMSkgJiBTRE1NQ19DQVJEX0xPQ0tFRCkgPT0gU0RNTUNfQ0FSRF9MT0NLRUQpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwpAQCAtMTQ0NSwxOCArMTQ2NSwxOCBAQAogICAgIH0KIAogICAgIC8qIEdldCBzdGFydCBhbmQgZW5kIGJsb2NrIGZvciBoaWdoIGNhcGFjaXR5IGNhcmRzICovCi0gICAgaWYoaHNkLT5TZENhcmQuQ2FyZFR5cGUgIT0gQ0FSRF9TREhDX1NEWEMpCisgICAgaWYgKGhzZC0+U2RDYXJkLkNhcmRUeXBlICE9IENBUkRfU0RIQ19TRFhDKQogICAgIHsKICAgICAgIHN0YXJ0X2FkZCAqPSA1MTJVOwogICAgICAgZW5kX2FkZCAgICo9IDUxMlU7CiAgICAgfQogCiAgICAgLyogQWNjb3JkaW5nIHRvIHNkLWNhcmQgc3BlYyAxLjAgRVJBU0VfR1JPVVBfU1RBUlQgKENNRDMyKSBhbmQgZXJhc2VfZ3JvdXBfZW5kKENNRDMzKSAqLwotICAgIGlmKGhzZC0+U2RDYXJkLkNhcmRUeXBlICE9IENBUkRfU0VDVVJFRCkKKyAgICBpZiAoaHNkLT5TZENhcmQuQ2FyZFR5cGUgIT0gQ0FSRF9TRUNVUkVEKQogICAgIHsKICAgICAgIC8qIFNlbmQgQ01EMzIgU0RfRVJBU0VfR1JQX1NUQVJUIHdpdGggYXJndW1lbnQgYXMgYWRkciAgKi8KICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTREVyYXNlU3RhcnRBZGQoaHNkLT5JbnN0YW5jZSwgc3RhcnRfYWRkKTsKLSAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgICAgICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgICAgIHsKICAgICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNETU1DX1NUQVRJQ19GTEFHUyk7CkBAIC0xNDY3LDcgKzE0ODcsNyBAQAogCiAgICAgICAvKiBTZW5kIENNRDMzIFNEX0VSQVNFX0dSUF9FTkQgd2l0aCBhcmd1bWVudCBhcyBhZGRyICAqLwogICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNERXJhc2VFbmRBZGQoaHNkLT5JbnN0YW5jZSwgZW5kX2FkZCk7Ci0gICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICAgICAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgICAgICB7CiAgICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCiAgICAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwpAQCAtMTQ3OSw3ICsxNDk5LDcgQEAKIAogICAgIC8qIFNlbmQgQ01EMzggRVJBU0UgKi8KICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kRXJhc2UoaHNkLT5JbnN0YW5jZSwgMFVMKTsKLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICAgIHsKICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCiAgICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RNTUNfU1RBVElDX0ZMQUdTKTsKQEAgLTE1MDksMjggKzE1MjksMjggQEAKICAgdWludDMyX3QgY29udGV4dCA9IGhzZC0+Q29udGV4dDsKIAogICAvKiBDaGVjayBmb3IgU0RNTUMgaW50ZXJydXB0IGZsYWdzICovCi0gIGlmKChfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfUlhGSUZPSEYpICE9IFJFU0VUKSAmJiAoKGNvbnRleHQgJiBTRF9DT05URVhUX0lUKSAhPSAwVSkpCisgIGlmICgoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX1JYRklGT0hGKSAhPSBSRVNFVCkgJiYgKChjb250ZXh0ICYgU0RfQ09OVEVYVF9JVCkgIT0gMFUpKQogICB7CiAgICAgU0RfUmVhZF9JVChoc2QpOwogICB9CiAKLSAgZWxzZSBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfREFUQUVORCkgIT0gUkVTRVQpCisgIGVsc2UgaWYgKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RNTUNfRkxBR19EQVRBRU5EKSAhPSBSRVNFVCkKICAgewogICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX0RBVEFFTkQpOwogCi0gICAgX19IQUxfU0RfRElTQUJMRV9JVChoc2QsIFNETU1DX0lUX0RBVEFFTkQgIHwgU0RNTUNfSVRfRENSQ0ZBSUwgfCBTRE1NQ19JVF9EVElNRU9VVCB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19JVF9UWFVOREVSUiB8IFNETU1DX0lUX1JYT1ZFUlIgIHwgU0RNTUNfSVRfVFhGSUZPSEUgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfSVRfUlhGSUZPSEYpOworICAgIF9fSEFMX1NEX0RJU0FCTEVfSVQoaHNkLCBTRE1NQ19JVF9EQVRBRU5EICB8IFNETU1DX0lUX0RDUkNGQUlMIHwgU0RNTUNfSVRfRFRJTUVPVVQgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19JVF9UWFVOREVSUiB8IFNETU1DX0lUX1JYT1ZFUlIgIHwgU0RNTUNfSVRfVFhGSUZPSEUgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19JVF9SWEZJRk9IRik7CiAKICAgICBfX0hBTF9TRF9ESVNBQkxFX0lUKGhzZCwgU0RNTUNfSVRfSURNQUJUQyk7Ci0gICAgX19TRE1NQ19DTURUUkFOU19ESVNBQkxFKCBoc2QtPkluc3RhbmNlKTsKKyAgICBfX1NETU1DX0NNRFRSQU5TX0RJU0FCTEUoaHNkLT5JbnN0YW5jZSk7CiAKLSAgICBpZigoY29udGV4dCAmIFNEX0NPTlRFWFRfSVQpICE9IDBVKQorICAgIGlmICgoY29udGV4dCAmIFNEX0NPTlRFWFRfSVQpICE9IDBVKQogICAgIHsKLSAgICAgIGlmKCgoY29udGV4dCAmIFNEX0NPTlRFWFRfUkVBRF9NVUxUSVBMRV9CTE9DSykgIT0gMFUpIHx8ICgoY29udGV4dCAmIFNEX0NPTlRFWFRfV1JJVEVfTVVMVElQTEVfQkxPQ0spICE9IDBVKSkKKyAgICAgIGlmICgoKGNvbnRleHQgJiBTRF9DT05URVhUX1JFQURfTVVMVElQTEVfQkxPQ0spICE9IDBVKSB8fCAoKGNvbnRleHQgJiBTRF9DT05URVhUX1dSSVRFX01VTFRJUExFX0JMT0NLKSAhPSAwVSkpCiAgICAgICB7CiAgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTdG9wVHJhbnNmZXIoaHNkLT5JbnN0YW5jZSk7Ci0gICAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgICAgICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICAgICAgICB7CiAgICAgICAgICAgaHNkLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKICNpZiBkZWZpbmVkIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQpAQCAtMTU0Niw3ICsxNTY2LDcgQEAKIAogICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKICAgICAgIGhzZC0+Q29udGV4dCA9IFNEX0NPTlRFWFRfTk9ORTsKLSAgICAgIGlmKCgoY29udGV4dCAmIFNEX0NPTlRFWFRfUkVBRF9TSU5HTEVfQkxPQ0spICE9IDBVKSB8fCAoKGNvbnRleHQgJiBTRF9DT05URVhUX1JFQURfTVVMVElQTEVfQkxPQ0spICE9IDBVKSkKKyAgICAgIGlmICgoKGNvbnRleHQgJiBTRF9DT05URVhUX1JFQURfU0lOR0xFX0JMT0NLKSAhPSAwVSkgfHwgKChjb250ZXh0ICYgU0RfQ09OVEVYVF9SRUFEX01VTFRJUExFX0JMT0NLKSAhPSAwVSkpCiAgICAgICB7CiAjaWYgZGVmaW5lZCAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKICAgICAgICAgaHNkLT5SeENwbHRDYWxsYmFjayhoc2QpOwpAQCAtMTU2MywxNyArMTU4MywxNyBAQAogI2VuZGlmIC8qIFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYoKGNvbnRleHQgJiBTRF9DT05URVhUX0RNQSkgIT0gMFUpCisgICAgZWxzZSBpZiAoKGNvbnRleHQgJiBTRF9DT05URVhUX0RNQSkgIT0gMFUpCiAgICAgewogICAgICAgaHNkLT5JbnN0YW5jZS0+RExFTiA9IDA7CiAgICAgICBoc2QtPkluc3RhbmNlLT5EQ1RSTCA9IDA7CiAgICAgICBoc2QtPkluc3RhbmNlLT5JRE1BQ1RSTCA9IFNETU1DX0RJU0FCTEVfSURNQTsKIAogICAgICAgLyogU3RvcCBUcmFuc2ZlciBmb3IgV3JpdGUgTXVsdGkgYmxvY2tzIG9yIFJlYWQgTXVsdGkgYmxvY2tzICovCi0gICAgICBpZigoKGNvbnRleHQgJiBTRF9DT05URVhUX1JFQURfTVVMVElQTEVfQkxPQ0spICE9IDBVKSB8fCAoKGNvbnRleHQgJiBTRF9DT05URVhUX1dSSVRFX01VTFRJUExFX0JMT0NLKSAhPSAwVSkpCisgICAgICBpZiAoKChjb250ZXh0ICYgU0RfQ09OVEVYVF9SRUFEX01VTFRJUExFX0JMT0NLKSAhPSAwVSkgfHwgKChjb250ZXh0ICYgU0RfQ09OVEVYVF9XUklURV9NVUxUSVBMRV9CTE9DSykgIT0gMFUpKQogICAgICAgewogICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3RvcFRyYW5zZmVyKGhzZC0+SW5zdGFuY2UpOwotICAgICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICAgICAgICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgICAgICAgewogICAgICAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CiAjaWYgZGVmaW5lZCAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKQEAgLTE1ODYsNyArMTYwNiw3IEBACiAKICAgICAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfUkVBRFk7CiAgICAgICBoc2QtPkNvbnRleHQgPSBTRF9DT05URVhUX05PTkU7Ci0gICAgICBpZigoKGNvbnRleHQgJiBTRF9DT05URVhUX1dSSVRFX1NJTkdMRV9CTE9DSykgIT0gMFUpIHx8ICgoY29udGV4dCAmIFNEX0NPTlRFWFRfV1JJVEVfTVVMVElQTEVfQkxPQ0spICE9IDBVKSkKKyAgICAgIGlmICgoKGNvbnRleHQgJiBTRF9DT05URVhUX1dSSVRFX1NJTkdMRV9CTE9DSykgIT0gMFUpIHx8ICgoY29udGV4dCAmIFNEX0NPTlRFWFRfV1JJVEVfTVVMVElQTEVfQkxPQ0spICE9IDBVKSkKICAgICAgIHsKICNpZiBkZWZpbmVkIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogICAgICAgICBoc2QtPlR4Q3BsdENhbGxiYWNrKGhzZCk7CkBAIC0xNTk0LDcgKzE2MTQsNyBAQAogICAgICAgICBIQUxfU0RfVHhDcGx0Q2FsbGJhY2soaHNkKTsKICNlbmRpZiAvKiBVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogICAgICAgfQotICAgICAgaWYoKChjb250ZXh0ICYgU0RfQ09OVEVYVF9SRUFEX1NJTkdMRV9CTE9DSykgIT0gMFUpIHx8ICgoY29udGV4dCAmIFNEX0NPTlRFWFRfUkVBRF9NVUxUSVBMRV9CTE9DSykgIT0gMFUpKQorICAgICAgaWYgKCgoY29udGV4dCAmIFNEX0NPTlRFWFRfUkVBRF9TSU5HTEVfQkxPQ0spICE9IDBVKSB8fCAoKGNvbnRleHQgJiBTRF9DT05URVhUX1JFQURfTVVMVElQTEVfQkxPQ0spICE9IDBVKSkKICAgICAgIHsKICNpZiBkZWZpbmVkIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogICAgICAgICBoc2QtPlJ4Q3BsdENhbGxiYWNrKGhzZCk7CkBAIC0xNjA5LDI3ICsxNjI5LDI4IEBACiAgICAgfQogICB9CiAKLSAgZWxzZSBpZigoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX1RYRklGT0hFKSAhPSBSRVNFVCkgJiYgKChjb250ZXh0ICYgU0RfQ09OVEVYVF9JVCkgIT0gMFUpKQorICBlbHNlIGlmICgoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX1RYRklGT0hFKSAhPSBSRVNFVCkgJiYgKChjb250ZXh0ICYgU0RfQ09OVEVYVF9JVCkgIT0gMFUpKQogICB7CiAgICAgU0RfV3JpdGVfSVQoaHNkKTsKICAgfQogCi0gIGVsc2UgaWYoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX0RDUkNGQUlMIHwgU0RNTUNfRkxBR19EVElNRU9VVCB8IFNETU1DX0ZMQUdfUlhPVkVSUiB8IFNETU1DX0ZMQUdfVFhVTkRFUlIpICE9IFJFU0VUKQorICBlbHNlIGlmIChfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfRENSQ0ZBSUwgfCBTRE1NQ19GTEFHX0RUSU1FT1VUIHwgU0RNTUNfRkxBR19SWE9WRVJSIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfRkxBR19UWFVOREVSUikgIT0gUkVTRVQpCiAgIHsKICAgICAvKiBTZXQgRXJyb3IgY29kZSAqLwotICAgIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RNTUNfSVRfRENSQ0ZBSUwpICE9IFJFU0VUKQorICAgIGlmIChfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0lUX0RDUkNGQUlMKSAhPSBSRVNFVCkKICAgICB7CiAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfREFUQV9DUkNfRkFJTDsKICAgICB9Ci0gICAgaWYoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19JVF9EVElNRU9VVCkgIT0gUkVTRVQpCisgICAgaWYgKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RNTUNfSVRfRFRJTUVPVVQpICE9IFJFU0VUKQogICAgIHsKICAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9EQVRBX1RJTUVPVVQ7CiAgICAgfQotICAgIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RNTUNfSVRfUlhPVkVSUikgIT0gUkVTRVQpCisgICAgaWYgKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RNTUNfSVRfUlhPVkVSUikgIT0gUkVTRVQpCiAgICAgewogICAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX1JYX09WRVJSVU47CiAgICAgfQotICAgIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RNTUNfSVRfVFhVTkRFUlIpICE9IFJFU0VUKQorICAgIGlmIChfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0lUX1RYVU5ERVJSKSAhPSBSRVNFVCkKICAgICB7CiAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfVFhfVU5ERVJSVU47CiAgICAgfQpAQCAtMTYzOCwxNyArMTY1OSwxNyBAQAogICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRE1NQ19TVEFUSUNfREFUQV9GTEFHUyk7CiAKICAgICAvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCi0gICAgX19IQUxfU0RfRElTQUJMRV9JVChoc2QsIFNETU1DX0lUX0RBVEFFTkQgfCBTRE1NQ19JVF9EQ1JDRkFJTCB8IFNETU1DX0lUX0RUSU1FT1VUfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfSVRfVFhVTkRFUlJ8IFNETU1DX0lUX1JYT1ZFUlIpOworICAgIF9fSEFMX1NEX0RJU0FCTEVfSVQoaHNkLCBTRE1NQ19JVF9EQVRBRU5EIHwgU0RNTUNfSVRfRENSQ0ZBSUwgfCBTRE1NQ19JVF9EVElNRU9VVCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNETU1DX0lUX1RYVU5ERVJSIHwgU0RNTUNfSVRfUlhPVkVSUik7CiAKLSAgICBfX1NETU1DX0NNRFRSQU5TX0RJU0FCTEUoIGhzZC0+SW5zdGFuY2UpOworICAgIF9fU0RNTUNfQ01EVFJBTlNfRElTQUJMRShoc2QtPkluc3RhbmNlKTsKICAgICBoc2QtPkluc3RhbmNlLT5EQ1RSTCB8PSBTRE1NQ19EQ1RSTF9GSUZPUlNUOwogICAgIGhzZC0+SW5zdGFuY2UtPkNNRCB8PSBTRE1NQ19DTURfQ01EU1RPUDsKICAgICBoc2QtPkVycm9yQ29kZSB8PSBTRE1NQ19DbWRTdG9wVHJhbnNmZXIoaHNkLT5JbnN0YW5jZSk7CiAgICAgaHNkLT5JbnN0YW5jZS0+Q01EICY9IH4oU0RNTUNfQ01EX0NNRFNUT1ApOwogICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX0RBQk9SVCk7CiAKLSAgICBpZigoY29udGV4dCAmIFNEX0NPTlRFWFRfSVQpICE9IDBVKQorICAgIGlmICgoY29udGV4dCAmIFNEX0NPTlRFWFRfSVQpICE9IDBVKQogICAgIHsKICAgICAgIC8qIFNldCB0aGUgU0Qgc3RhdGUgdG8gcmVhZHkgdG8gYmUgYWJsZSB0byBzdGFydCBhZ2FpbiB0aGUgcHJvY2VzcyAqLwogICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKQEAgLTE2NTksOSArMTY4MCw5IEBACiAgICAgICBIQUxfU0RfRXJyb3JDYWxsYmFjayhoc2QpOwogI2VuZGlmIC8qIFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAgICAgfQotICAgIGVsc2UgaWYoKGNvbnRleHQgJiBTRF9DT05URVhUX0RNQSkgIT0gMFUpCisgICAgZWxzZSBpZiAoKGNvbnRleHQgJiBTRF9DT05URVhUX0RNQSkgIT0gMFUpCiAgICAgewotICAgICAgaWYoaHNkLT5FcnJvckNvZGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgICAgICBpZiAoaHNkLT5FcnJvckNvZGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgICAgICB7CiAgICAgICAgIC8qIERpc2FibGUgSW50ZXJuYWwgRE1BICovCiAgICAgICAgIF9fSEFMX1NEX0RJU0FCTEVfSVQoaHNkLCBTRE1NQ19JVF9JRE1BQlRDKTsKQEAgLTE2ODIsMTMgKzE3MDMsMTMgQEAKICAgICB9CiAgIH0KIAotICBlbHNlIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RNTUNfRkxBR19JRE1BQlRDKSAhPSBSRVNFVCkKKyAgZWxzZSBpZiAoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX0lETUFCVEMpICE9IFJFU0VUKQogICB7CiAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNETU1DX0ZMQUdfSURNQUJUQyk7Ci0gICAgaWYoUkVBRF9CSVQoaHNkLT5JbnN0YW5jZS0+SURNQUNUUkwsIFNETU1DX0lETUFfSURNQUJBQ1QpID09IDBVKQorICAgIGlmIChSRUFEX0JJVChoc2QtPkluc3RhbmNlLT5JRE1BQ1RSTCwgU0RNTUNfSURNQV9JRE1BQkFDVCkgPT0gMFUpCiAgICAgewogICAgICAgLyogQ3VycmVudCBidWZmZXIgaXMgYnVmZmVyMCwgVHJhbnNmZXIgY29tcGxldGUgZm9yIGJ1ZmZlcjEgKi8KLSAgICAgIGlmKChjb250ZXh0ICYgU0RfQ09OVEVYVF9XUklURV9NVUxUSVBMRV9CTE9DSykgIT0gMFUpCisgICAgICBpZiAoKGNvbnRleHQgJiBTRF9DT05URVhUX1dSSVRFX01VTFRJUExFX0JMT0NLKSAhPSAwVSkKICAgICAgIHsKICNpZiBkZWZpbmVkIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogICAgICAgICBoc2QtPldyaXRlX0RNQURibEJ1ZjFDcGx0Q2FsbGJhY2soaHNkKTsKQEAgLTE3MDgsNyArMTcyOSw3IEBACiAgICAgZWxzZSAvKiBTRF9ETUFfQlVGRkVSMSAqLwogICAgIHsKICAgICAgIC8qIEN1cnJlbnQgYnVmZmVyIGlzIGJ1ZmZlcjEsIFRyYW5zZmVyIGNvbXBsZXRlIGZvciBidWZmZXIwICovCi0gICAgICBpZigoY29udGV4dCAmIFNEX0NPTlRFWFRfV1JJVEVfTVVMVElQTEVfQkxPQ0spICE9IDBVKQorICAgICAgaWYgKChjb250ZXh0ICYgU0RfQ09OVEVYVF9XUklURV9NVUxUSVBMRV9CTE9DSykgIT0gMFUpCiAgICAgICB7CiAjaWYgZGVmaW5lZCAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKICAgICAgICAgaHNkLT5Xcml0ZV9ETUFEYmxCdWYwQ3BsdENhbGxiYWNrKGhzZCk7CkBAIC0xNzQzLDExICsxNzY0LDExIEBACiB9CiAKIC8qKgotKiBAYnJpZWYgIFJldHVybiB0aGUgU0QgZXJyb3IgY29kZQotKiBAcGFyYW0gIGhzZCA6IFBvaW50ZXIgdG8gYSBTRF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogQGJyaWVmICBSZXR1cm4gdGhlIFNEIGVycm9yIGNvZGUKKyAgKiBAcGFyYW0gIGhzZCA6IFBvaW50ZXIgdG8gYSBTRF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotKiBAcmV0dmFsIFNEIEVycm9yIENvZGUKLSovCisgICogQHJldHZhbCBTRCBFcnJvciBDb2RlCisgICovCiB1aW50MzJfdCBIQUxfU0RfR2V0RXJyb3IoU0RfSGFuZGxlVHlwZURlZiAqaHNkKQogewogICByZXR1cm4gaHNkLT5FcnJvckNvZGU7CkBAIC0xODQ5LDExICsxODcwLDEyIEBACiAgICogQHBhcmFtIHBDYWxsYmFjayA6IHBvaW50ZXIgdG8gdGhlIENhbGxiYWNrIGZ1bmN0aW9uCiAgICogQHJldHZhbCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9SZWdpc3RlckNhbGxiYWNrKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgSEFMX1NEX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsIHBTRF9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NEX1JlZ2lzdGVyQ2FsbGJhY2soU0RfSGFuZGxlVHlwZURlZiAqaHNkLCBIQUxfU0RfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBTRF9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKQogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKLSAgaWYocENhbGxiYWNrID09IE5VTEwpCisgIGlmIChwQ2FsbGJhY2sgPT0gTlVMTCkKICAgewogICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLwogICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9JTlZBTElEX0NBTExCQUNLOwpAQCAtMTg2Myw2NCArMTg4NSw2NCBAQAogICAvKiBQcm9jZXNzIGxvY2tlZCAqLwogICBfX0hBTF9MT0NLKGhzZCk7CiAKLSAgaWYoaHNkLT5TdGF0ZSA9PSBIQUxfU0RfU1RBVEVfUkVBRFkpCisgIGlmIChoc2QtPlN0YXRlID09IEhBTF9TRF9TVEFURV9SRUFEWSkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKICAgICB7Ci0gICAgY2FzZSBIQUxfU0RfVFhfQ1BMVF9DQl9JRCA6Ci0gICAgICBoc2QtPlR4Q3BsdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfU0RfUlhfQ1BMVF9DQl9JRCA6Ci0gICAgICBoc2QtPlJ4Q3BsdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfU0RfRVJST1JfQ0JfSUQgOgotICAgICAgaHNkLT5FcnJvckNhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfU0RfQUJPUlRfQ0JfSUQgOgotICAgICAgaHNkLT5BYm9ydENwbHRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSEFMX1NEX1JFQURfRE1BX0RCTF9CVUYwX0NQTFRfQ0JfSUQgOgotICAgICAgaHNkLT5SZWFkX0RNQURibEJ1ZjBDcGx0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9TRF9SRUFEX0RNQV9EQkxfQlVGMV9DUExUX0NCX0lEIDoKLSAgICAgIGhzZC0+UmVhZF9ETUFEYmxCdWYxQ3BsdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfU0RfV1JJVEVfRE1BX0RCTF9CVUYwX0NQTFRfQ0JfSUQgOgotICAgICAgaHNkLT5Xcml0ZV9ETUFEYmxCdWYwQ3BsdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfU0RfV1JJVEVfRE1BX0RCTF9CVUYxX0NQTFRfQ0JfSUQgOgotICAgICAgaHNkLT5Xcml0ZV9ETUFEYmxCdWYxQ3BsdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfU0RfTVNQX0lOSVRfQ0JfSUQgOgotICAgICAgaHNkLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9TRF9NU1BfREVJTklUX0NCX0lEIDoKLSAgICAgIGhzZC0+TXNwRGVJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0IDoKLSAgICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLwotICAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7Ci0gICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLwotICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfU0RfVFhfQ1BMVF9DQl9JRCA6CisgICAgICAgIGhzZC0+VHhDcGx0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfU0RfUlhfQ1BMVF9DQl9JRCA6CisgICAgICAgIGhzZC0+UnhDcGx0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfU0RfRVJST1JfQ0JfSUQgOgorICAgICAgICBoc2QtPkVycm9yQ2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfU0RfQUJPUlRfQ0JfSUQgOgorICAgICAgICBoc2QtPkFib3J0Q3BsdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX1NEX1JFQURfRE1BX0RCTF9CVUYwX0NQTFRfQ0JfSUQgOgorICAgICAgICBoc2QtPlJlYWRfRE1BRGJsQnVmMENwbHRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9TRF9SRUFEX0RNQV9EQkxfQlVGMV9DUExUX0NCX0lEIDoKKyAgICAgICAgaHNkLT5SZWFkX0RNQURibEJ1ZjFDcGx0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfU0RfV1JJVEVfRE1BX0RCTF9CVUYwX0NQTFRfQ0JfSUQgOgorICAgICAgICBoc2QtPldyaXRlX0RNQURibEJ1ZjBDcGx0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfU0RfV1JJVEVfRE1BX0RCTF9CVUYxX0NQTFRfQ0JfSUQgOgorICAgICAgICBoc2QtPldyaXRlX0RNQURibEJ1ZjFDcGx0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfU0RfTVNQX0lOSVRfQ0JfSUQgOgorICAgICAgICBoc2QtPk1zcEluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9TRF9NU1BfREVJTklUX0NCX0lEIDoKKyAgICAgICAgaHNkLT5Nc3BEZUluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0IDoKKyAgICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCisgICAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9JTlZBTElEX0NBTExCQUNLOworICAgICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLworICAgICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOworICAgICAgICBicmVhazsKICAgICB9CiAgIH0KICAgZWxzZSBpZiAoaHNkLT5TdGF0ZSA9PSBIQUxfU0RfU1RBVEVfUkVTRVQpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCiAgICAgewotICAgIGNhc2UgSEFMX1NEX01TUF9JTklUX0NCX0lEIDoKLSAgICAgIGhzZC0+TXNwSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfU0RfTVNQX0RFSU5JVF9DQl9JRCA6Ci0gICAgICBoc2QtPk1zcERlSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdCA6Ci0gICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9JTlZBTElEX0NBTExCQUNLOwotICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KLSAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX1NEX01TUF9JTklUX0NCX0lEIDoKKyAgICAgICAgaHNkLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfU0RfTVNQX0RFSU5JVF9DQl9JRCA6CisgICAgICAgIGhzZC0+TXNwRGVJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdCA6CisgICAgICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLworICAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKKyAgICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAgIGVsc2UKQEAgLTE5NjEsNjQgKzE5ODMsNjQgQEAKICAgLyogUHJvY2VzcyBsb2NrZWQgKi8KICAgX19IQUxfTE9DSyhoc2QpOwogCi0gIGlmKGhzZC0+U3RhdGUgPT0gSEFMX1NEX1NUQVRFX1JFQURZKQorICBpZiAoaHNkLT5TdGF0ZSA9PSBIQUxfU0RfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCiAgICAgewotICAgIGNhc2UgSEFMX1NEX1RYX0NQTFRfQ0JfSUQgOgotICAgICAgaHNkLT5UeENwbHRDYWxsYmFjayA9IEhBTF9TRF9UeENwbHRDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSEFMX1NEX1JYX0NQTFRfQ0JfSUQgOgotICAgICAgaHNkLT5SeENwbHRDYWxsYmFjayA9IEhBTF9TRF9SeENwbHRDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSEFMX1NEX0VSUk9SX0NCX0lEIDoKLSAgICAgIGhzZC0+RXJyb3JDYWxsYmFjayA9IEhBTF9TRF9FcnJvckNhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfU0RfQUJPUlRfQ0JfSUQgOgotICAgICAgaHNkLT5BYm9ydENwbHRDYWxsYmFjayA9IEhBTF9TRF9BYm9ydENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfU0RfUkVBRF9ETUFfREJMX0JVRjBfQ1BMVF9DQl9JRCA6Ci0gICAgICBoc2QtPlJlYWRfRE1BRGJsQnVmMENwbHRDYWxsYmFjayA9IEhBTF9TREV4X1JlYWRfRE1BRG91YmxlQnVmMENwbHRDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSEFMX1NEX1JFQURfRE1BX0RCTF9CVUYxX0NQTFRfQ0JfSUQgOgotICAgICAgaHNkLT5SZWFkX0RNQURibEJ1ZjFDcGx0Q2FsbGJhY2sgPSBIQUxfU0RFeF9SZWFkX0RNQURvdWJsZUJ1ZjFDcGx0Q2FsbGJhY2s7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9TRF9XUklURV9ETUFfREJMX0JVRjBfQ1BMVF9DQl9JRCA6Ci0gICAgICBoc2QtPldyaXRlX0RNQURibEJ1ZjBDcGx0Q2FsbGJhY2sgPSBIQUxfU0RFeF9Xcml0ZV9ETUFEb3VibGVCdWYwQ3BsdENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfU0RfV1JJVEVfRE1BX0RCTF9CVUYxX0NQTFRfQ0JfSUQgOgotICAgICAgaHNkLT5Xcml0ZV9ETUFEYmxCdWYxQ3BsdENhbGxiYWNrID0gSEFMX1NERXhfV3JpdGVfRE1BRG91YmxlQnVmMUNwbHRDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSEFMX1NEX01TUF9JTklUX0NCX0lEIDoKLSAgICAgIGhzZC0+TXNwSW5pdENhbGxiYWNrID0gSEFMX1NEX01zcEluaXQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9TRF9NU1BfREVJTklUX0NCX0lEIDoKLSAgICAgIGhzZC0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfU0RfTXNwRGVJbml0OwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdCA6Ci0gICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9JTlZBTElEX0NBTExCQUNLOwotICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KLSAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX1NEX1RYX0NQTFRfQ0JfSUQgOgorICAgICAgICBoc2QtPlR4Q3BsdENhbGxiYWNrID0gSEFMX1NEX1R4Q3BsdENhbGxiYWNrOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX1NEX1JYX0NQTFRfQ0JfSUQgOgorICAgICAgICBoc2QtPlJ4Q3BsdENhbGxiYWNrID0gSEFMX1NEX1J4Q3BsdENhbGxiYWNrOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX1NEX0VSUk9SX0NCX0lEIDoKKyAgICAgICAgaHNkLT5FcnJvckNhbGxiYWNrID0gSEFMX1NEX0Vycm9yQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfU0RfQUJPUlRfQ0JfSUQgOgorICAgICAgICBoc2QtPkFib3J0Q3BsdENhbGxiYWNrID0gSEFMX1NEX0Fib3J0Q2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfU0RfUkVBRF9ETUFfREJMX0JVRjBfQ1BMVF9DQl9JRCA6CisgICAgICAgIGhzZC0+UmVhZF9ETUFEYmxCdWYwQ3BsdENhbGxiYWNrID0gSEFMX1NERXhfUmVhZF9ETUFEb3VibGVCdWYwQ3BsdENhbGxiYWNrOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX1NEX1JFQURfRE1BX0RCTF9CVUYxX0NQTFRfQ0JfSUQgOgorICAgICAgICBoc2QtPlJlYWRfRE1BRGJsQnVmMUNwbHRDYWxsYmFjayA9IEhBTF9TREV4X1JlYWRfRE1BRG91YmxlQnVmMUNwbHRDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9TRF9XUklURV9ETUFfREJMX0JVRjBfQ1BMVF9DQl9JRCA6CisgICAgICAgIGhzZC0+V3JpdGVfRE1BRGJsQnVmMENwbHRDYWxsYmFjayA9IEhBTF9TREV4X1dyaXRlX0RNQURvdWJsZUJ1ZjBDcGx0Q2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfU0RfV1JJVEVfRE1BX0RCTF9CVUYxX0NQTFRfQ0JfSUQgOgorICAgICAgICBoc2QtPldyaXRlX0RNQURibEJ1ZjFDcGx0Q2FsbGJhY2sgPSBIQUxfU0RFeF9Xcml0ZV9ETUFEb3VibGVCdWYxQ3BsdENhbGxiYWNrOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX1NEX01TUF9JTklUX0NCX0lEIDoKKyAgICAgICAgaHNkLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfU0RfTXNwSW5pdDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9TRF9NU1BfREVJTklUX0NCX0lEIDoKKyAgICAgICAgaHNkLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9TRF9Nc3BEZUluaXQ7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdCA6CisgICAgICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLworICAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKKyAgICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAgIGVsc2UgaWYgKGhzZC0+U3RhdGUgPT0gSEFMX1NEX1NUQVRFX1JFU0VUKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQogICAgIHsKLSAgICBjYXNlIEhBTF9TRF9NU1BfSU5JVF9DQl9JRCA6Ci0gICAgICBoc2QtPk1zcEluaXRDYWxsYmFjayA9IEhBTF9TRF9Nc3BJbml0OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfU0RfTVNQX0RFSU5JVF9DQl9JRCA6Ci0gICAgICBoc2QtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX1NEX01zcERlSW5pdDsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQgOgotICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKLSAgICAgIC8qIHVwZGF0ZSByZXR1cm4gc3RhdHVzICovCi0gICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9TRF9NU1BfSU5JVF9DQl9JRCA6CisgICAgICAgIGhzZC0+TXNwSW5pdENhbGxiYWNrID0gSEFMX1NEX01zcEluaXQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfU0RfTVNQX0RFSU5JVF9DQl9JRCA6CisgICAgICAgIGhzZC0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfU0RfTXNwRGVJbml0OworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CisgICAgICAgIC8qIHVwZGF0ZSByZXR1cm4gc3RhdHVzICovCisgICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQogICBlbHNlCkBAIC0yMDQ2LDcgKzIwNjgsNyBAQAogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKLSAgaWYocENhbGxiYWNrID09IE5VTEwpCisgIGlmIChwQ2FsbGJhY2sgPT0gTlVMTCkKICAgewogICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLwogICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9JTlZBTElEX0NBTExCQUNLOwpAQCAtMjA1Niw3ICsyMDc4LDcgQEAKICAgLyogUHJvY2VzcyBsb2NrZWQgKi8KICAgX19IQUxfTE9DSyhoc2QpOwogCi0gIGlmKGhzZC0+U3RhdGUgPT0gSEFMX1NEX1NUQVRFX1JFQURZKQorICBpZiAoaHNkLT5TdGF0ZSA9PSBIQUxfU0RfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBoc2QtPkRyaXZlVHJhbnNjZWl2ZXJfMV84Vl9DYWxsYmFjayA9IHBDYWxsYmFjazsKICAgfQpAQCAtMjA4Niw3ICsyMTA4LDcgQEAKICAgLyogUHJvY2VzcyBsb2NrZWQgKi8KICAgX19IQUxfTE9DSyhoc2QpOwogCi0gIGlmKGhzZC0+U3RhdGUgPT0gSEFMX1NEX1NUQVRFX1JFQURZKQorICBpZiAoaHNkLT5TdGF0ZSA9PSBIQUxfU0RfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBoc2QtPkRyaXZlVHJhbnNjZWl2ZXJfMV84Vl9DYWxsYmFjayA9IEhBTF9TRF9Ecml2ZVRyYW5zY2VpdmVyXzFfOFZfQ2FsbGJhY2s7CiAgIH0KQEAgLTIxMTAsOCArMjEzMiw4IEBACiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBTRF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzCi0gKiAgQGJyaWVmICAgbWFuYWdlbWVudCBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgIG1hbmFnZW1lbnQgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zICMjIyMjCkBAIC0yMTkzLDcgKzIyMTUsNyBAQAogCiAgIHBDU0QtPlJlc2VydmVkMiA9IDBVOyAvKiE8IFJlc2VydmVkICovCiAKLSAgaWYoaHNkLT5TZENhcmQuQ2FyZFR5cGUgPT0gQ0FSRF9TRFNDKQorICBpZiAoaHNkLT5TZENhcmQuQ2FyZFR5cGUgPT0gQ0FSRF9TRFNDKQogICB7CiAgICAgcENTRC0+RGV2aWNlU2l6ZSA9ICgoKGhzZC0+Q1NEWzFdICYgMHgwMDAwMDNGRlUpIDw8IDJVKSB8ICgoaHNkLT5DU0RbMl0gJiAweEMwMDAwMDAwVSkgPj4gMzBVKSk7CiAKQEAgLTIyMTEsMTAgKzIyMzMsMTAgQEAKICAgICBoc2QtPlNkQ2FyZC5CbG9ja05iciAqPSAoMVVMIDw8ICgocENTRC0+RGV2aWNlU2l6ZU11bCAmIDB4MDdVKSArIDJVKSk7CiAgICAgaHNkLT5TZENhcmQuQmxvY2tTaXplID0gKDFVTCA8PCAocENTRC0+UmRCbG9ja0xlbiAmIDB4MEZVKSk7CiAKLSAgICBoc2QtPlNkQ2FyZC5Mb2dCbG9ja05iciA9ICAoaHNkLT5TZENhcmQuQmxvY2tOYnIpICogKChoc2QtPlNkQ2FyZC5CbG9ja1NpemUpIC8gNTEyVSk7CisgICAgaHNkLT5TZENhcmQuTG9nQmxvY2tOYnIgPSAoaHNkLT5TZENhcmQuQmxvY2tOYnIpICogKChoc2QtPlNkQ2FyZC5CbG9ja1NpemUpIC8gNTEyVSk7CiAgICAgaHNkLT5TZENhcmQuTG9nQmxvY2tTaXplID0gNTEyVTsKICAgfQotICBlbHNlIGlmKGhzZC0+U2RDYXJkLkNhcmRUeXBlID09IENBUkRfU0RIQ19TRFhDKQorICBlbHNlIGlmIChoc2QtPlNkQ2FyZC5DYXJkVHlwZSA9PSBDQVJEX1NESENfU0RYQykKICAgewogICAgIC8qIEJ5dGUgNyAqLwogICAgIHBDU0QtPkRldmljZVNpemUgPSAoKChoc2QtPkNTRFsxXSAmIDB4MDAwMDAwM0ZVKSA8PCAxNlUpIHwgKChoc2QtPkNTRFsyXSAmIDB4RkZGRjAwMDBVKSA+PiAxNlUpKTsKQEAgLTIyNDUsNyArMjI2Nyw3IEBACiAKICAgcENTRC0+V3JTcGVlZEZhY3QgPSAodWludDhfdCkoKGhzZC0+Q1NEWzNdICYgMHgxQzAwMDAwMFUpID4+IDI2VSk7CiAKLSAgcENTRC0+TWF4V3JCbG9ja0xlbj0gKHVpbnQ4X3QpKChoc2QtPkNTRFszXSAmIDB4MDNDMDAwMDBVKSA+PiAyMlUpOworICBwQ1NELT5NYXhXckJsb2NrTGVuID0gKHVpbnQ4X3QpKChoc2QtPkNTRFszXSAmIDB4MDNDMDAwMDBVKSA+PiAyMlUpOwogCiAgIHBDU0QtPldyaXRlQmxvY2tQYVBhcnRpYWwgPSAodWludDhfdCkoKGhzZC0+Q1NEWzNdICYgMHgwMDIwMDAwMFUpID4+IDIxVSk7CiAKQEAgLTIyNjMsNyArMjI4NSw3IEBACiAKICAgcENTRC0+RmlsZUZvcm1hdCA9ICh1aW50OF90KSgoaHNkLT5DU0RbM10gJiAweDAwMDAwQzAwVSkgPj4gMTBVKTsKIAotICBwQ1NELT5FQ0M9ICh1aW50OF90KSgoaHNkLT5DU0RbM10gJiAweDAwMDAwMzAwVSkgPj4gOFUpOworICBwQ1NELT5FQ0MgPSAodWludDhfdCkoKGhzZC0+Q1NEWzNdICYgMHgwMDAwMDMwMFUpID4+IDhVKTsKIAogICBwQ1NELT5DU0RfQ1JDID0gKHVpbnQ4X3QpKChoc2QtPkNTRFszXSAmIDB4MDAwMDAwRkVVKSA+PiAxVSk7CiAKQEAgLTIyODYsNyArMjMwOCw3IEBACiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAogICBlcnJvcnN0YXRlID0gU0RfU2VuZFNEU3RhdHVzKGhzZCwgc2Rfc3RhdHVzKTsKLSAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKKyAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgIHsKICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwpAQCAtMjMyNCw3ICsyMzQ2LDcgQEAKIAogICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQmxvY2tMZW5ndGgoaHNkLT5JbnN0YW5jZSwgQkxPQ0tTSVpFKTsKLSAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKKyAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgIHsKICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwpAQCAtMjM3Miw2ICsyMzk0LDcgQEAKIHsKICAgU0RNTUNfSW5pdFR5cGVEZWYgSW5pdDsKICAgdWludDMyX3QgZXJyb3JzdGF0ZTsKKyAgdWludDMyX3Qgc2RtbWNfY2xrOwogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KQEAgLTIzODAsMTkgKzI0MDMsMTkgQEAKICAgLyogQ2hhbmdlIFN0YXRlICovCiAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfQlVTWTsKIAotICBpZihoc2QtPlNkQ2FyZC5DYXJkVHlwZSAhPSBDQVJEX1NFQ1VSRUQpCisgIGlmIChoc2QtPlNkQ2FyZC5DYXJkVHlwZSAhPSBDQVJEX1NFQ1VSRUQpCiAgIHsKLSAgICBpZihXaWRlTW9kZSA9PSBTRE1NQ19CVVNfV0lERV84QikKKyAgICBpZiAoV2lkZU1vZGUgPT0gU0RNTUNfQlVTX1dJREVfOEIpCiAgICAgewogICAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX1VOU1VQUE9SVEVEX0ZFQVRVUkU7CiAgICAgfQotICAgIGVsc2UgaWYoV2lkZU1vZGUgPT0gU0RNTUNfQlVTX1dJREVfNEIpCisgICAgZWxzZSBpZiAoV2lkZU1vZGUgPT0gU0RNTUNfQlVTX1dJREVfNEIpCiAgICAgewogICAgICAgZXJyb3JzdGF0ZSA9IFNEX1dpZGVCdXNfRW5hYmxlKGhzZCk7CiAKICAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CiAgICAgfQotICAgIGVsc2UgaWYoV2lkZU1vZGUgPT0gU0RNTUNfQlVTX1dJREVfMUIpCisgICAgZWxzZSBpZiAoV2lkZU1vZGUgPT0gU0RNTUNfQlVTX1dJREVfMUIpCiAgICAgewogICAgICAgZXJyb3JzdGF0ZSA9IFNEX1dpZGVCdXNfRGlzYWJsZShoc2QpOwogCkBAIC0yNDEwLDcgKzI0MzMsNyBAQAogICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9VTlNVUFBPUlRFRF9GRUFUVVJFOwogICB9CiAKLSAgaWYoaHNkLT5FcnJvckNvZGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgIGlmIChoc2QtPkVycm9yQ29kZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgewogICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCiAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNETU1DX1NUQVRJQ19GTEFHUyk7CkBAIC0yNDE4LDM5ICsyNDQxLDk0IEBACiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogQ29uZmlndXJlIHRoZSBTRE1NQyBwZXJpcGhlcmFsICovCi0gICAgSW5pdC5DbG9ja0VkZ2UgICAgICAgICAgID0gaHNkLT5Jbml0LkNsb2NrRWRnZTsKLSAgICBJbml0LkNsb2NrUG93ZXJTYXZlICAgICAgPSBoc2QtPkluaXQuQ2xvY2tQb3dlclNhdmU7Ci0gICAgSW5pdC5CdXNXaWRlICAgICAgICAgICAgID0gV2lkZU1vZGU7Ci0gICAgSW5pdC5IYXJkd2FyZUZsb3dDb250cm9sID0gaHNkLT5Jbml0LkhhcmR3YXJlRmxvd0NvbnRyb2w7CisgICAgc2RtbWNfY2xrID0gSEFMX1JDQ0V4X0dldFBlcmlwaENMS0ZyZXEoUkNDX1BFUklQSENMS19TRE1NQzEpOworICAgIGlmIChzZG1tY19jbGsgIT0gMFUpCisgICAgeworICAgICAgLyogQ29uZmlndXJlIHRoZSBTRE1NQyBwZXJpcGhlcmFsICovCisgICAgICBJbml0LkNsb2NrRWRnZSAgICAgICAgICAgPSBoc2QtPkluaXQuQ2xvY2tFZGdlOworICAgICAgSW5pdC5DbG9ja1Bvd2VyU2F2ZSAgICAgID0gaHNkLT5Jbml0LkNsb2NrUG93ZXJTYXZlOworICAgICAgSW5pdC5CdXNXaWRlICAgICAgICAgICAgID0gV2lkZU1vZGU7CisgICAgICBJbml0LkhhcmR3YXJlRmxvd0NvbnRyb2wgPSBoc2QtPkluaXQuSGFyZHdhcmVGbG93Q29udHJvbDsKIAotICAgIC8qIENoZWNrIGlmIHVzZXIgQ2xvY2sgZGl2IDwgTm9ybWFsIHNwZWVkIDI1TWh6LCBubyBjaGFuZ2UgaW4gQ2xvY2tkaXYgKi8KLSAgICBpZihoc2QtPkluaXQuQ2xvY2tEaXYgPj0gU0RNTUNfTlNwZWVkX0NMS19ESVYpCi0gICAgewotICAgICAgSW5pdC5DbG9ja0RpdiA9IGhzZC0+SW5pdC5DbG9ja0RpdjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoaHNkLT5TZENhcmQuQ2FyZFNwZWVkID09IENBUkRfVUxUUkFfSElHSF9TUEVFRCkKLSAgICB7Ci0gICAgICAvKiBVbHRyYUhpZ2ggc3BlZWQgU0QgY2FyZCx1c2VyIENsb2NrIGRpdiAqLwotICAgICAgSW5pdC5DbG9ja0RpdiA9IGhzZC0+SW5pdC5DbG9ja0RpdjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoaHNkLT5TZENhcmQuQ2FyZFNwZWVkID09IENBUkRfSElHSF9TUEVFRCkKLSAgICB7Ci0gICAgICAvKiBIaWdoIHNwZWVkIFNEIGNhcmQsIE1heCBGcmVxdWVuY3kgPSA1ME1oeiAqLwotICAgICAgSW5pdC5DbG9ja0RpdiA9IFNETU1DX0hTcGVlZF9DTEtfRElWOworICAgICAgLyogQ2hlY2sgaWYgdXNlciBDbG9jayBkaXYgPCBOb3JtYWwgc3BlZWQgMjVNaHosIG5vIGNoYW5nZSBpbiBDbG9ja2RpdiAqLworICAgICAgaWYgKGhzZC0+SW5pdC5DbG9ja0RpdiA+PSAoc2RtbWNfY2xrIC8gKDJVICogU0RfTk9STUFMX1NQRUVEX0ZSRVEpKSkKKyAgICAgIHsKKyAgICAgICAgSW5pdC5DbG9ja0RpdiA9IGhzZC0+SW5pdC5DbG9ja0RpdjsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGhzZC0+U2RDYXJkLkNhcmRTcGVlZCA9PSBDQVJEX1VMVFJBX0hJR0hfU1BFRUQpCisgICAgICB7CisgICAgICAgIC8qIFVsdHJhSGlnaCBzcGVlZCBTRCBjYXJkLHVzZXIgQ2xvY2sgZGl2ICovCisgICAgICAgIEluaXQuQ2xvY2tEaXYgPSBoc2QtPkluaXQuQ2xvY2tEaXY7CisgICAgICB9CisgICAgICBlbHNlIGlmIChoc2QtPlNkQ2FyZC5DYXJkU3BlZWQgPT0gQ0FSRF9ISUdIX1NQRUVEKQorICAgICAgeworICAgICAgICAvKiBIaWdoIHNwZWVkIFNEIGNhcmQsIE1heCBGcmVxdWVuY3kgPSA1ME1oeiAqLworICAgICAgICBpZiAoaHNkLT5Jbml0LkNsb2NrRGl2ID09IDBVKQorICAgICAgICB7CisgICAgICAgICAgaWYgKHNkbW1jX2NsayA+IFNEX0hJR0hfU1BFRURfRlJFUSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBJbml0LkNsb2NrRGl2ID0gc2RtbWNfY2xrIC8gKDJVICogU0RfSElHSF9TUEVFRF9GUkVRKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEluaXQuQ2xvY2tEaXYgPSBoc2QtPkluaXQuQ2xvY2tEaXY7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGlmICgoc2RtbWNfY2xrLygyVSAqIGhzZC0+SW5pdC5DbG9ja0RpdikpID4gU0RfSElHSF9TUEVFRF9GUkVRKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEluaXQuQ2xvY2tEaXYgPSBzZG1tY19jbGsgLyAoMlUgKiBTRF9ISUdIX1NQRUVEX0ZSRVEpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgSW5pdC5DbG9ja0RpdiA9IGhzZC0+SW5pdC5DbG9ja0RpdjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogTm8gSGlnaCBzcGVlZCBTRCBjYXJkLCBNYXggRnJlcXVlbmN5ID0gMjVNaHogKi8KKyAgICAgICAgaWYgKGhzZC0+SW5pdC5DbG9ja0RpdiA9PSAwVSkKKyAgICAgICAgeworICAgICAgICAgIGlmIChzZG1tY19jbGsgPiBTRF9OT1JNQUxfU1BFRURfRlJFUSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBJbml0LkNsb2NrRGl2ID0gc2RtbWNfY2xrIC8gKDJVICogU0RfTk9STUFMX1NQRUVEX0ZSRVEpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgSW5pdC5DbG9ja0RpdiA9IGhzZC0+SW5pdC5DbG9ja0RpdjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgaWYgKChzZG1tY19jbGsvKDJVICogaHNkLT5Jbml0LkNsb2NrRGl2KSkgPiBTRF9OT1JNQUxfU1BFRURfRlJFUSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBJbml0LkNsb2NrRGl2ID0gc2RtbWNfY2xrIC8gKDJVICogU0RfTk9STUFMX1NQRUVEX0ZSRVEpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgSW5pdC5DbG9ja0RpdiA9IGhzZC0+SW5pdC5DbG9ja0RpdjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworI2lmIChVU0VfU0RfVFJBTlNDRUlWRVIgIT0gMFUpCisgICAgICBJbml0LlRyYW5jZWl2ZXJQcmVzZW50ID0gaHNkLT5Jbml0LlRyYW5jZWl2ZXJQcmVzZW50OworI2VuZGlmIC8qIFVTRV9TRF9UUkFOU0NFSVZFUiAqLworCisgICAgICAodm9pZClTRE1NQ19Jbml0KGhzZC0+SW5zdGFuY2UsIEluaXQpOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgLyogTm8gSGlnaCBzcGVlZCBTRCBjYXJkLCBNYXggRnJlcXVlbmN5ID0gMjVNaHogKi8KLSAgICAgIEluaXQuQ2xvY2tEaXYgPSBTRE1NQ19OU3BlZWRfQ0xLX0RJVjsKKyAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IFNETU1DX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSOworICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgIH0KLQotICAgICh2b2lkKVNETU1DX0luaXQoaHNkLT5JbnN0YW5jZSwgSW5pdCk7CiAgIH0KIAogICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQmxvY2tMZW5ndGgoaHNkLT5JbnN0YW5jZSwgQkxPQ0tTSVpFKTsKLSAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKKyAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgIHsKICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwpAQCAtMjQ5Miw3ICsyNTcwLDcgQEAKICAgewogICAgIHN3aXRjaCAoU3BlZWRNb2RlKQogICAgIHsKLSAgICBjYXNlIFNETU1DX1NQRUVEX01PREVfQVVUTzoKKyAgICAgIGNhc2UgU0RNTUNfU1BFRURfTU9ERV9BVVRPOgogICAgICAgewogICAgICAgICBpZiAoKGhzZC0+U2RDYXJkLkNhcmRTcGVlZCAgPT0gQ0FSRF9VTFRSQV9ISUdIX1NQRUVEKSB8fAogICAgICAgICAgICAgKGhzZC0+U2RDYXJkLkNhcmRUeXBlID09IENBUkRfU0RIQ19TRFhDKSkKQEAgLTI1MjMsNyArMjYwMSw3IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICB9Ci0gICAgY2FzZSBTRE1NQ19TUEVFRF9NT0RFX1VMVFJBOgorICAgICAgY2FzZSBTRE1NQ19TUEVFRF9NT0RFX1VMVFJBOgogICAgICAgewogICAgICAgICBpZiAoKGhzZC0+U2RDYXJkLkNhcmRTcGVlZCAgPT0gQ0FSRF9VTFRSQV9ISUdIX1NQRUVEKSB8fAogICAgICAgICAgICAgKGhzZC0+U2RDYXJkLkNhcmRUeXBlID09IENBUkRfU0RIQ19TRFhDKSkKQEAgLTI1NDMsNyArMjYyMSw3IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICB9Ci0gICAgY2FzZSBTRE1NQ19TUEVFRF9NT0RFX0REUjoKKyAgICAgIGNhc2UgU0RNTUNfU1BFRURfTU9ERV9ERFI6CiAgICAgICB7CiAgICAgICAgIGlmICgoaHNkLT5TZENhcmQuQ2FyZFNwZWVkICA9PSBDQVJEX1VMVFJBX0hJR0hfU1BFRUQpIHx8CiAgICAgICAgICAgICAoaHNkLT5TZENhcmQuQ2FyZFR5cGUgPT0gQ0FSRF9TREhDX1NEWEMpKQpAQCAtMjU2MywxMSArMjY0MSwxMSBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgfQotICAgIGNhc2UgU0RNTUNfU1BFRURfTU9ERV9ISUdIOgorICAgICAgY2FzZSBTRE1NQ19TUEVFRF9NT0RFX0hJR0g6CiAgICAgICB7CiAgICAgICAgIGlmICgoaHNkLT5TZENhcmQuQ2FyZFNwZWVkICA9PSBDQVJEX1VMVFJBX0hJR0hfU1BFRUQpIHx8CiAgICAgICAgICAgICAoaHNkLT5TZENhcmQuQ2FyZFNwZWVkICA9PSBDQVJEX0hJR0hfU1BFRUQpIHx8Ci0gICAgICAgICAgICAgIChoc2QtPlNkQ2FyZC5DYXJkVHlwZSA9PSBDQVJEX1NESENfU0RYQykpCisgICAgICAgICAgICAoaHNkLT5TZENhcmQuQ2FyZFR5cGUgPT0gQ0FSRF9TREhDX1NEWEMpKQogICAgICAgICB7CiAgICAgICAgICAgLyogRW5hYmxlIEhpZ2ggU3BlZWQgKi8KICAgICAgICAgICBpZiAoU0RfSGlnaFNwZWVkKGhzZCkgIT0gSEFMX1NEX0VSUk9SX05PTkUpCkBAIC0yNTgzLDIzICsyNjYxLDIzIEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICB9Ci0gICAgY2FzZSBTRE1NQ19TUEVFRF9NT0RFX0RFRkFVTFQ6Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX1BBUkFNOwotICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNETU1DX1NQRUVEX01PREVfREVGQVVMVDoKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfUEFSQU07CisgICAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAgIGVsc2UKICAgewogICAgIHN3aXRjaCAoU3BlZWRNb2RlKQogICAgIHsKLSAgICBjYXNlIFNETU1DX1NQRUVEX01PREVfQVVUTzoKKyAgICAgIGNhc2UgU0RNTUNfU1BFRURfTU9ERV9BVVRPOgogICAgICAgewogICAgICAgICBpZiAoKGhzZC0+U2RDYXJkLkNhcmRTcGVlZCAgPT0gQ0FSRF9VTFRSQV9ISUdIX1NQRUVEKSB8fAogICAgICAgICAgICAgKGhzZC0+U2RDYXJkLkNhcmRTcGVlZCAgPT0gQ0FSRF9ISUdIX1NQRUVEKSB8fAotICAgICAgICAgICAgICAoaHNkLT5TZENhcmQuQ2FyZFR5cGUgPT0gQ0FSRF9TREhDX1NEWEMpKQorICAgICAgICAgICAgKGhzZC0+U2RDYXJkLkNhcmRUeXBlID09IENBUkRfU0RIQ19TRFhDKSkKICAgICAgICAgewogICAgICAgICAgIC8qIEVuYWJsZSBIaWdoIFNwZWVkICovCiAgICAgICAgICAgaWYgKFNEX0hpZ2hTcGVlZChoc2QpICE9IEhBTF9TRF9FUlJPUl9OT05FKQpAQCAtMjYxNCwxMSArMjY5MiwxMSBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgfQotICAgIGNhc2UgU0RNTUNfU1BFRURfTU9ERV9ISUdIOgorICAgICAgY2FzZSBTRE1NQ19TUEVFRF9NT0RFX0hJR0g6CiAgICAgICB7CiAgICAgICAgIGlmICgoaHNkLT5TZENhcmQuQ2FyZFNwZWVkICA9PSBDQVJEX1VMVFJBX0hJR0hfU1BFRUQpIHx8CiAgICAgICAgICAgICAoaHNkLT5TZENhcmQuQ2FyZFNwZWVkICA9PSBDQVJEX0hJR0hfU1BFRUQpIHx8Ci0gICAgICAgICAgICAgIChoc2QtPlNkQ2FyZC5DYXJkVHlwZSA9PSBDQVJEX1NESENfU0RYQykpCisgICAgICAgICAgICAoaHNkLT5TZENhcmQuQ2FyZFR5cGUgPT0gQ0FSRF9TREhDX1NEWEMpKQogICAgICAgICB7CiAgICAgICAgICAgLyogRW5hYmxlIEhpZ2ggU3BlZWQgKi8KICAgICAgICAgICBpZiAoU0RfSGlnaFNwZWVkKGhzZCkgIT0gSEFMX1NEX0VSUk9SX05PTkUpCkBAIC0yNjM0LDIzICsyNzEyLDIzIEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICB9Ci0gICAgY2FzZSBTRE1NQ19TUEVFRF9NT0RFX0RFRkFVTFQ6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNETU1DX1NQRUVEX01PREVfVUxUUkE6IC8qbm90IHZhbGlkIHdpdGhvdXQgdHJhbnNjZWl2ZXIqLwotICAgIGRlZmF1bHQ6Ci0gICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfUEFSQU07Ci0gICAgICBzdGF0dXMgPSBIQUxfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgU0RNTUNfU1BFRURfTU9ERV9ERUZBVUxUOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0RNTUNfU1BFRURfTU9ERV9VTFRSQTogLypub3QgdmFsaWQgd2l0aG91dCB0cmFuc2NlaXZlciovCisgICAgICBkZWZhdWx0OgorICAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfUEFSQU07CisgICAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAjZWxzZQogICBzd2l0Y2ggKFNwZWVkTW9kZSkKICAgewotICBjYXNlIFNETU1DX1NQRUVEX01PREVfQVVUTzoKKyAgICBjYXNlIFNETU1DX1NQRUVEX01PREVfQVVUTzoKICAgICB7CiAgICAgICBpZiAoKGhzZC0+U2RDYXJkLkNhcmRTcGVlZCAgPT0gQ0FSRF9VTFRSQV9ISUdIX1NQRUVEKSB8fAogICAgICAgICAgIChoc2QtPlNkQ2FyZC5DYXJkU3BlZWQgID09IENBUkRfSElHSF9TUEVFRCkgfHwKLSAgICAgICAgICAgIChoc2QtPlNkQ2FyZC5DYXJkVHlwZSA9PSBDQVJEX1NESENfU0RYQykpCisgICAgICAgICAgKGhzZC0+U2RDYXJkLkNhcmRUeXBlID09IENBUkRfU0RIQ19TRFhDKSkKICAgICAgIHsKICAgICAgICAgLyogRW5hYmxlIEhpZ2ggU3BlZWQgKi8KICAgICAgICAgaWYgKFNEX0hpZ2hTcGVlZChoc2QpICE9IEhBTF9TRF9FUlJPUl9OT05FKQpAQCAtMjY2NSwxMSArMjc0MywxMSBAQAogICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgfQotICBjYXNlIFNETU1DX1NQRUVEX01PREVfSElHSDoKKyAgICBjYXNlIFNETU1DX1NQRUVEX01PREVfSElHSDoKICAgICB7CiAgICAgICBpZiAoKGhzZC0+U2RDYXJkLkNhcmRTcGVlZCAgPT0gQ0FSRF9VTFRSQV9ISUdIX1NQRUVEKSB8fAogICAgICAgICAgIChoc2QtPlNkQ2FyZC5DYXJkU3BlZWQgID09IENBUkRfSElHSF9TUEVFRCkgfHwKLSAgICAgICAgICAgIChoc2QtPlNkQ2FyZC5DYXJkVHlwZSA9PSBDQVJEX1NESENfU0RYQykpCisgICAgICAgICAgKGhzZC0+U2RDYXJkLkNhcmRUeXBlID09IENBUkRfU0RIQ19TRFhDKSkKICAgICAgIHsKICAgICAgICAgLyogRW5hYmxlIEhpZ2ggU3BlZWQgKi8KICAgICAgICAgaWYgKFNEX0hpZ2hTcGVlZChoc2QpICE9IEhBTF9TRF9FUlJPUl9OT05FKQpAQCAtMjY4NSwxMyArMjc2MywxMyBAQAogICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgfQotICBjYXNlIFNETU1DX1NQRUVEX01PREVfREVGQVVMVDoKLSAgICBicmVhazsKLSAgY2FzZSBTRE1NQ19TUEVFRF9NT0RFX1VMVFJBOiAvKm5vdCB2YWxpZCB3aXRob3V0IHRyYW5zY2VpdmVyKi8KLSAgZGVmYXVsdDoKLSAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfUEFSQU07Ci0gICAgc3RhdHVzID0gSEFMX0VSUk9SOwotICAgIGJyZWFrOworICAgIGNhc2UgU0RNTUNfU1BFRURfTU9ERV9ERUZBVUxUOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBTRE1NQ19TUEVFRF9NT0RFX1VMVFJBOiAvKm5vdCB2YWxpZCB3aXRob3V0IHRyYW5zY2VpdmVyKi8KKyAgICBkZWZhdWx0OgorICAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX1BBUkFNOworICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOworICAgICAgYnJlYWs7CiAgIH0KICNlbmRpZiAvKiBVU0VfU0RfVFJBTlNDRUlWRVIgKi8KIApAQCAtMjcwOSw3ICsyNzg3LDcgQEAKIAogICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQmxvY2tMZW5ndGgoaHNkLT5JbnN0YW5jZSwgQkxPQ0tTSVpFKTsKLSAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKKyAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgIHsKICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRE1NQ19TVEFUSUNfRkxBR1MpOwpAQCAtMjczNCw3ICsyODEyLDcgQEAKICAgdWludDMyX3QgcmVzcDEgPSAwOwogCiAgIGVycm9yc3RhdGUgPSBTRF9TZW5kU3RhdHVzKGhzZCwgJnJlc3AxKTsKLSAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKKyAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgIHsKICAgICBoc2QtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwogICB9CkBAIC0yNzU1LDggKzI4MzMsOCBAQAogICBIQUxfU0RfQ2FyZFN0YXRlVHlwZURlZiBDYXJkU3RhdGU7CiAKICAgLyogRElzYWJsZSBBbGwgaW50ZXJydXB0cyAqLwotICBfX0hBTF9TRF9ESVNBQkxFX0lUKGhzZCwgU0RNTUNfSVRfREFUQUVORCB8IFNETU1DX0lUX0RDUkNGQUlMIHwgU0RNTUNfSVRfRFRJTUVPVVR8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfSVRfVFhVTkRFUlJ8IFNETU1DX0lUX1JYT1ZFUlIpOworICBfX0hBTF9TRF9ESVNBQkxFX0lUKGhzZCwgU0RNTUNfSVRfREFUQUVORCB8IFNETU1DX0lUX0RDUkNGQUlMIHwgU0RNTUNfSVRfRFRJTUVPVVQgfCBcCisgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfSVRfVFhVTkRFUlIgfCBTRE1NQ19JVF9SWE9WRVJSKTsKIAogICAvKiBDbGVhciBBbGwgZmxhZ3MgKi8KICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNETU1DX1NUQVRJQ19EQVRBX0ZMQUdTKTsKQEAgLTI3NzAsMTEgKzI4NDgsMTEgQEAKICAgaHNkLT5Db250ZXh0ID0gU0RfQ09OVEVYVF9OT05FOwogCiAgIENhcmRTdGF0ZSA9IEhBTF9TRF9HZXRDYXJkU3RhdGUoaHNkKTsKLSAgaWYoKENhcmRTdGF0ZSA9PSBIQUxfU0RfQ0FSRF9SRUNFSVZJTkcpIHx8IChDYXJkU3RhdGUgPT0gSEFMX1NEX0NBUkRfU0VORElORykpCisgIGlmICgoQ2FyZFN0YXRlID09IEhBTF9TRF9DQVJEX1JFQ0VJVklORykgfHwgKENhcmRTdGF0ZSA9PSBIQUxfU0RfQ0FSRF9TRU5ESU5HKSkKICAgewogICAgIGhzZC0+RXJyb3JDb2RlID0gU0RNTUNfQ21kU3RvcFRyYW5zZmVyKGhzZC0+SW5zdGFuY2UpOwogICB9Ci0gIGlmKGhzZC0+RXJyb3JDb2RlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICBpZiAoaHNkLT5FcnJvckNvZGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC0yNzkyLDggKzI4NzAsOCBAQAogICBIQUxfU0RfQ2FyZFN0YXRlVHlwZURlZiBDYXJkU3RhdGU7CiAKICAgLyogRGlzYWJsZSBBbGwgaW50ZXJydXB0cyAqLwotICBfX0hBTF9TRF9ESVNBQkxFX0lUKGhzZCwgU0RNTUNfSVRfREFUQUVORCB8IFNETU1DX0lUX0RDUkNGQUlMIHwgU0RNTUNfSVRfRFRJTUVPVVR8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfSVRfVFhVTkRFUlJ8IFNETU1DX0lUX1JYT1ZFUlIpOworICBfX0hBTF9TRF9ESVNBQkxFX0lUKGhzZCwgU0RNTUNfSVRfREFUQUVORCB8IFNETU1DX0lUX0RDUkNGQUlMIHwgU0RNTUNfSVRfRFRJTUVPVVQgfCBcCisgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfSVRfVFhVTkRFUlIgfCBTRE1NQ19JVF9SWE9WRVJSKTsKIAogICAvKiBJZiBJRE1BIENvbnRleHQsIGRpc2FibGUgSW50ZXJuYWwgRE1BICovCiAgIGhzZC0+SW5zdGFuY2UtPklETUFDVFJMID0gU0RNTUNfRElTQUJMRV9JRE1BOwpAQCAtMjgwNCwxMiArMjg4MiwxMiBAQAogICBDYXJkU3RhdGUgPSBIQUxfU0RfR2V0Q2FyZFN0YXRlKGhzZCk7CiAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfUkVBRFk7CiAKLSAgaWYoKENhcmRTdGF0ZSA9PSBIQUxfU0RfQ0FSRF9SRUNFSVZJTkcpIHx8IChDYXJkU3RhdGUgPT0gSEFMX1NEX0NBUkRfU0VORElORykpCisgIGlmICgoQ2FyZFN0YXRlID09IEhBTF9TRF9DQVJEX1JFQ0VJVklORykgfHwgKENhcmRTdGF0ZSA9PSBIQUxfU0RfQ0FSRF9TRU5ESU5HKSkKICAgewogICAgIGhzZC0+RXJyb3JDb2RlID0gU0RNTUNfQ21kU3RvcFRyYW5zZmVyKGhzZC0+SW5zdGFuY2UpOwogICB9CiAKLSAgaWYoaHNkLT5FcnJvckNvZGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgIGlmIChoc2QtPkVycm9yQ29kZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgewogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KQEAgLTI4NTEsMTcgKzI5MjksMTcgQEAKICAgdWludDE2X3Qgc2RfcmNhID0gMVU7CiAKICAgLyogQ2hlY2sgdGhlIHBvd2VyIFN0YXRlICovCi0gIGlmKFNETU1DX0dldFBvd2VyU3RhdGUoaHNkLT5JbnN0YW5jZSkgPT0gMFUpCisgIGlmIChTRE1NQ19HZXRQb3dlclN0YXRlKGhzZC0+SW5zdGFuY2UpID09IDBVKQogICB7CiAgICAgLyogUG93ZXIgb2ZmICovCiAgICAgcmV0dXJuIEhBTF9TRF9FUlJPUl9SRVFVRVNUX05PVF9BUFBMSUNBQkxFOwogICB9CiAKLSAgaWYoaHNkLT5TZENhcmQuQ2FyZFR5cGUgIT0gQ0FSRF9TRUNVUkVEKQorICBpZiAoaHNkLT5TZENhcmQuQ2FyZFR5cGUgIT0gQ0FSRF9TRUNVUkVEKQogICB7CiAgICAgLyogU2VuZCBDTUQyIEFMTF9TRU5EX0NJRCAqLwogICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kQ0lEKGhzZC0+SW5zdGFuY2UpOwotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgICAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgcmV0dXJuIGVycm9yc3RhdGU7CiAgICAgfQpAQCAtMjg3NSwyNCArMjk1MywyNCBAQAogICAgIH0KICAgfQogCi0gIGlmKGhzZC0+U2RDYXJkLkNhcmRUeXBlICE9IENBUkRfU0VDVVJFRCkKKyAgaWYgKGhzZC0+U2RDYXJkLkNhcmRUeXBlICE9IENBUkRfU0VDVVJFRCkKICAgewogICAgIC8qIFNlbmQgQ01EMyBTRVRfUkVMX0FERFIgd2l0aCBhcmd1bWVudCAwICovCiAgICAgLyogU0QgQ2FyZCBwdWJsaXNoZXMgaXRzIFJDQS4gKi8KICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU2V0UmVsQWRkKGhzZC0+SW5zdGFuY2UsICZzZF9yY2EpOwotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgICAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgcmV0dXJuIGVycm9yc3RhdGU7CiAgICAgfQogICB9Ci0gIGlmKGhzZC0+U2RDYXJkLkNhcmRUeXBlICE9IENBUkRfU0VDVVJFRCkKKyAgaWYgKGhzZC0+U2RDYXJkLkNhcmRUeXBlICE9IENBUkRfU0VDVVJFRCkKICAgewogICAgIC8qIEdldCB0aGUgU0QgY2FyZCBSQ0EgKi8KICAgICBoc2QtPlNkQ2FyZC5SZWxDYXJkQWRkID0gc2RfcmNhOwogCiAgICAgLyogU2VuZCBDTUQ5IFNFTkRfQ1NEIHdpdGggYXJndW1lbnQgYXMgY2FyZCdzIFJDQSAqLwogICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kQ1NEKGhzZC0+SW5zdGFuY2UsICh1aW50MzJfdCkoaHNkLT5TZENhcmQuUmVsQ2FyZEFkZCA8PCAxNlUpKTsKLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICAgIHsKICAgICAgIHJldHVybiBlcnJvcnN0YXRlOwogICAgIH0KQEAgLTI5MTcsNyArMjk5NSw3IEBACiAKICAgLyogU2VsZWN0IHRoZSBDYXJkICovCiAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZWxEZXNlbChoc2QtPkluc3RhbmNlLCAodWludDMyX3QpKCgodWludDMyX3QpaHNkLT5TZENhcmQuUmVsQ2FyZEFkZCkgPDwgMTZVKSk7Ci0gIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICB7CiAgICAgcmV0dXJuIGVycm9yc3RhdGU7CiAgIH0KQEAgLTI5MzYsNyArMzAxNCw4IEBACiBzdGF0aWMgdWludDMyX3QgU0RfUG93ZXJPTihTRF9IYW5kbGVUeXBlRGVmICpoc2QpCiB7CiAgIF9fSU8gdWludDMyX3QgY291bnQgPSAwVTsKLSAgdWludDMyX3QgcmVzcG9uc2UgPSAwVSwgdmFsaWR2b2x0YWdlID0gMFU7CisgIHVpbnQzMl90IHJlc3BvbnNlID0gMFU7CisgIHVpbnQzMl90IHZhbGlkdm9sdGFnZSA9IDBVOwogICB1aW50MzJfdCBlcnJvcnN0YXRlOwogI2lmIChVU0VfU0RfVFJBTlNDRUlWRVIgIT0gMFUpCiAgIHVpbnQzMl90IHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CkBAIC0yOTQ0LDE5ICszMDIzLDE5IEBACiAKICAgLyogQ01EMDogR09fSURMRV9TVEFURSAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kR29JZGxlU3RhdGUoaHNkLT5JbnN0YW5jZSk7Ci0gIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICB7CiAgICAgcmV0dXJuIGVycm9yc3RhdGU7CiAgIH0KIAogICAvKiBDTUQ4OiBTRU5EX0lGX0NPTkQ6IENvbW1hbmQgYXZhaWxhYmxlIG9ubHkgb24gVjIuMCBjYXJkcyAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kT3BlckNvbmQoaHNkLT5JbnN0YW5jZSk7Ci0gIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICB7CiAgICAgaHNkLT5TZENhcmQuQ2FyZFZlcnNpb24gPSBDQVJEX1YxX1g7CiAgICAgLyogQ01EMDogR09fSURMRV9TVEFURSAqLwogICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRHb0lkbGVTdGF0ZShoc2QtPkluc3RhbmNlKTsKLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICAgIHsKICAgICAgIHJldHVybiBlcnJvcnN0YXRlOwogICAgIH0KQEAgLTI5NjcsMjkgKzMwNDYsMzAgQEAKICAgICBoc2QtPlNkQ2FyZC5DYXJkVmVyc2lvbiA9IENBUkRfVjJfWDsKICAgfQogCi0gIGlmKCBoc2QtPlNkQ2FyZC5DYXJkVmVyc2lvbiA9PSBDQVJEX1YyX1gpCisgIGlmIChoc2QtPlNkQ2FyZC5DYXJkVmVyc2lvbiA9PSBDQVJEX1YyX1gpCiAgIHsKICAgICAvKiBTRU5EIENNRDU1IEFQUF9DTUQgd2l0aCBSQ0EgYXMgMCAqLwogICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRBcHBDb21tYW5kKGhzZC0+SW5zdGFuY2UsIDApOwotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgICAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9TRF9FUlJPUl9VTlNVUFBPUlRFRF9GRUFUVVJFOwogICAgIH0KICAgfQogICAvKiBTRCBDQVJEICovCiAgIC8qIFNlbmQgQUNNRDQxIFNEX0FQUF9PUF9DT05EIHdpdGggQXJndW1lbnQgMHg4MDEwMDAwMCAqLwotICB3aGlsZSgoY291bnQgPCBTRE1NQ19NQVhfVk9MVF9UUklBTCkgJiYgKHZhbGlkdm9sdGFnZSA9PSAwVSkpCisgIHdoaWxlICgoY291bnQgPCBTRE1NQ19NQVhfVk9MVF9UUklBTCkgJiYgKHZhbGlkdm9sdGFnZSA9PSAwVSkpCiAgIHsKICAgICAvKiBTRU5EIENNRDU1IEFQUF9DTUQgd2l0aCBSQ0EgYXMgMCAqLwogICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRBcHBDb21tYW5kKGhzZC0+SW5zdGFuY2UsIDApOwotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgICAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgcmV0dXJuIGVycm9yc3RhdGU7CiAgICAgfQogCiAgICAgLyogU2VuZCBDTUQ0MSAqLwotICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRBcHBPcGVyQ29tbWFuZChoc2QtPkluc3RhbmNlLCBTRE1NQ19WT0xUQUdFX1dJTkRPV19TRCB8IFNETU1DX0hJR0hfQ0FQQUNJVFkgfCBTRF9TV0lUQ0hfMV84Vl9DQVBBQ0lUWSk7Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKKyAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQXBwT3BlckNvbW1hbmQoaHNkLT5JbnN0YW5jZSwgU0RNTUNfVk9MVEFHRV9XSU5ET1dfU0QgfCBTRE1NQ19ISUdIX0NBUEFDSVRZIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RfU1dJVENIXzFfOFZfQ0FQQUNJVFkpOworICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfU0RfRVJST1JfVU5TVVBQT1JURURfRkVBVFVSRTsKICAgICB9CkBAIC0zMDAzLDE4ICszMDgzLDE4IEBACiAgICAgY291bnQrKzsKICAgfQogCi0gIGlmKGNvdW50ID49IFNETU1DX01BWF9WT0xUX1RSSUFMKQorICBpZiAoY291bnQgPj0gU0RNTUNfTUFYX1ZPTFRfVFJJQUwpCiAgIHsKICAgICByZXR1cm4gSEFMX1NEX0VSUk9SX0lOVkFMSURfVk9MVFJBTkdFOwogICB9CiAKLSAgaWYoKHJlc3BvbnNlICYgU0RNTUNfSElHSF9DQVBBQ0lUWSkgPT0gU0RNTUNfSElHSF9DQVBBQ0lUWSkgLyogKHJlc3BvbnNlICY9IFNEX0hJR0hfQ0FQQUNJVFkpICovCisgIGlmICgocmVzcG9uc2UgJiBTRE1NQ19ISUdIX0NBUEFDSVRZKSA9PSBTRE1NQ19ISUdIX0NBUEFDSVRZKSAvKiAocmVzcG9uc2UgJj0gU0RfSElHSF9DQVBBQ0lUWSkgKi8KICAgewogICAgIGhzZC0+U2RDYXJkLkNhcmRUeXBlID0gQ0FSRF9TREhDX1NEWEM7CiAjaWYgKFVTRV9TRF9UUkFOU0NFSVZFUiAhPSAwVSkKICAgICBpZiAoaHNkLT5Jbml0LlRyYW5jZWl2ZXJQcmVzZW50ID09IFNETU1DX1RSQU5TQ0VJVkVSX1BSRVNFTlQpCiAgICAgewotICAgICAgaWYoKHJlc3BvbnNlICYgU0RfU1dJVENIXzFfOFZfQ0FQQUNJVFkpID09IFNEX1NXSVRDSF8xXzhWX0NBUEFDSVRZKQorICAgICAgaWYgKChyZXNwb25zZSAmIFNEX1NXSVRDSF8xXzhWX0NBUEFDSVRZKSA9PSBTRF9TV0lUQ0hfMV84Vl9DQVBBQ0lUWSkKICAgICAgIHsKICAgICAgICAgaHNkLT5TZENhcmQuQ2FyZFNwZWVkID0gQ0FSRF9VTFRSQV9ISUdIX1NQRUVEOwogCkBAIC0zMDIzLDE1ICszMTAzLDE1IEBACiAKICAgICAgICAgLyogU2VuZCBDTUQxMSB0byBzd2l0Y2ggMS44ViBtb2RlICovCiAgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRWb2x0YWdlU3dpdGNoKGhzZC0+SW5zdGFuY2UpOwotICAgICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICAgICAgICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgICAgICAgewogICAgICAgICAgIHJldHVybiBlcnJvcnN0YXRlOwogICAgICAgICB9CiAKICAgICAgICAgLyogQ2hlY2sgdG8gQ0tTVE9QICovCi0gICAgICAgIHdoaWxlKCggaHNkLT5JbnN0YW5jZS0+U1RBICYgU0RNTUNfRkxBR19DS1NUT1ApICE9IFNETU1DX0ZMQUdfQ0tTVE9QKQorICAgICAgICB3aGlsZSAoKGhzZC0+SW5zdGFuY2UtPlNUQSAmIFNETU1DX0ZMQUdfQ0tTVE9QKSAhPSBTRE1NQ19GTEFHX0NLU1RPUCkKICAgICAgICAgewotICAgICAgICAgIGlmKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+PSAgU0RNTUNfREFUQVRJTUVPVVQpCisgICAgICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+PSAgU0RNTUNfREFUQVRJTUVPVVQpCiAgICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEhBTF9TRF9FUlJPUl9USU1FT1VUOwogICAgICAgICAgIH0KQEAgLTMwNDEsNyArMzEyMSw3IEBACiAgICAgICAgIGhzZC0+SW5zdGFuY2UtPklDUiA9IFNETU1DX0ZMQUdfQ0tTVE9QOwogCiAgICAgICAgIC8qIENoZWNrIHRvIEJ1c3lEMCAqLwotICAgICAgICBpZigoIGhzZC0+SW5zdGFuY2UtPlNUQSAmIFNETU1DX0ZMQUdfQlVTWUQwKSAhPSBTRE1NQ19GTEFHX0JVU1lEMCkKKyAgICAgICAgaWYgKChoc2QtPkluc3RhbmNlLT5TVEEgJiBTRE1NQ19GTEFHX0JVU1lEMCkgIT0gU0RNTUNfRkxBR19CVVNZRDApCiAgICAgICAgIHsKICAgICAgICAgICAvKiBFcnJvciB3aGVuIGFjdGl2YXRlIFZvbHRhZ2UgU3dpdGNoIGluIFNETU1DIFBlcmlwaGVyYWwgKi8KICAgICAgICAgICByZXR1cm4gU0RNTUNfRVJST1JfVU5TVVBQT1JURURfRkVBVFVSRTsKQEAgLTMwNTksOSArMzEzOSw5IEBACiAgICAgICAgICAgaHNkLT5JbnN0YW5jZS0+UE9XRVIgfD0gU0RNTUNfUE9XRVJfVlNXSVRDSDsKIAogICAgICAgICAgIC8qIENoZWNrIFZTV0VORCBGbGFnICovCi0gICAgICAgICAgd2hpbGUoKCBoc2QtPkluc3RhbmNlLT5TVEEgJiBTRE1NQ19GTEFHX1ZTV0VORCkgIT0gU0RNTUNfRkxBR19WU1dFTkQpCisgICAgICAgICAgd2hpbGUgKChoc2QtPkluc3RhbmNlLT5TVEEgJiBTRE1NQ19GTEFHX1ZTV0VORCkgIT0gU0RNTUNfRkxBR19WU1dFTkQpCiAgICAgICAgICAgewotICAgICAgICAgICAgaWYoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID49ICBTRE1NQ19EQVRBVElNRU9VVCkKKyAgICAgICAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPj0gIFNETU1DX0RBVEFUSU1FT1VUKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICByZXR1cm4gSEFMX1NEX0VSUk9SX1RJTUVPVVQ7CiAgICAgICAgICAgICB9CkBAIC0zMDcxLDcgKzMxNTEsNyBAQAogICAgICAgICAgIGhzZC0+SW5zdGFuY2UtPklDUiA9IFNETU1DX0ZMQUdfVlNXRU5EOwogCiAgICAgICAgICAgLyogQ2hlY2sgQnVzeUQwIHN0YXR1cyAqLwotICAgICAgICAgIGlmKCggaHNkLT5JbnN0YW5jZS0+U1RBICYgU0RNTUNfRkxBR19CVVNZRDApID09IFNETU1DX0ZMQUdfQlVTWUQwKQorICAgICAgICAgIGlmICgoaHNkLT5JbnN0YW5jZS0+U1RBICYgU0RNTUNfRkxBR19CVVNZRDApID09IFNETU1DX0ZMQUdfQlVTWUQwKQogICAgICAgICAgIHsKICAgICAgICAgICAgIC8qIEVycm9yIHdoZW4gZW5hYmxpbmcgMS44ViBtb2RlICovCiAgICAgICAgICAgICByZXR1cm4gSEFMX1NEX0VSUk9SX0lOVkFMSURfVk9MVFJBTkdFOwpAQCAtMzExOSwxNCArMzE5OSwxNCBAQAogICB1aW50MzJfdCAqcERhdGEgPSBwU0RzdGF0dXM7CiAKICAgLyogQ2hlY2sgU0QgcmVzcG9uc2UgKi8KLSAgaWYoKFNETU1DX0dldFJlc3BvbnNlKGhzZC0+SW5zdGFuY2UsIFNETU1DX1JFU1AxKSAmIFNETU1DX0NBUkRfTE9DS0VEKSA9PSBTRE1NQ19DQVJEX0xPQ0tFRCkKKyAgaWYgKChTRE1NQ19HZXRSZXNwb25zZShoc2QtPkluc3RhbmNlLCBTRE1NQ19SRVNQMSkgJiBTRE1NQ19DQVJEX0xPQ0tFRCkgPT0gU0RNTUNfQ0FSRF9MT0NLRUQpCiAgIHsKICAgICByZXR1cm4gSEFMX1NEX0VSUk9SX0xPQ0tfVU5MT0NLX0ZBSUxFRDsKICAgfQogCiAgIC8qIFNldCBibG9jayBzaXplIGZvciBjYXJkIGlmIGl0IGlzIG5vdCBlcXVhbCB0byBjdXJyZW50IGJsb2NrIHNpemUgZm9yIGNhcmQgKi8KICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEJsb2NrTGVuZ3RoKGhzZC0+SW5zdGFuY2UsIDY0VSk7Ci0gIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICB7CiAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX05PTkU7CiAgICAgcmV0dXJuIGVycm9yc3RhdGU7CkBAIC0zMTM0LDcgKzMyMTQsNyBAQAogCiAgIC8qIFNlbmQgQ01ENTUgKi8KICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEFwcENvbW1hbmQoaHNkLT5JbnN0YW5jZSwgKHVpbnQzMl90KShoc2QtPlNkQ2FyZC5SZWxDYXJkQWRkIDw8IDE2VSkpOwotICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgewogICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9OT05FOwogICAgIHJldHVybiBlcnJvcnN0YXRlOwpAQCAtMzE1MSwzOSArMzIzMSwzOSBAQAogCiAgIC8qIFNlbmQgQUNNRDEzIChTRF9BUFBfU1RBVVMpICB3aXRoIGFyZ3VtZW50IGFzIGNhcmQncyBSQ0EgKi8KICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFN0YXR1c1JlZ2lzdGVyKGhzZC0+SW5zdGFuY2UpOwotICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgewogICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9OT05FOwogICAgIHJldHVybiBlcnJvcnN0YXRlOwogICB9CiAKICAgLyogR2V0IHN0YXR1cyBkYXRhICovCi0gIHdoaWxlKCFfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfUlhPVkVSUiB8IFNETU1DX0ZMQUdfRENSQ0ZBSUwgfCBTRE1NQ19GTEFHX0RUSU1FT1VUIHwgU0RNTUNfRkxBR19EQVRBRU5EKSkKKyAgd2hpbGUgKCFfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfUlhPVkVSUiB8IFNETU1DX0ZMQUdfRENSQ0ZBSUwgfCBTRE1NQ19GTEFHX0RUSU1FT1VUIHwgU0RNTUNfRkxBR19EQVRBRU5EKSkKICAgewotICAgIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RNTUNfRkxBR19SWEZJRk9IRikpCisgICAgaWYgKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RNTUNfRkxBR19SWEZJRk9IRikpCiAgICAgewotICAgICAgZm9yKGNvdW50ID0gMFU7IGNvdW50IDwgOFU7IGNvdW50KyspCisgICAgICBmb3IgKGNvdW50ID0gMFU7IGNvdW50IDwgOFU7IGNvdW50KyspCiAgICAgICB7CiAgICAgICAgICpwRGF0YSA9IFNETU1DX1JlYWRGSUZPKGhzZC0+SW5zdGFuY2UpOwogICAgICAgICBwRGF0YSsrOwogICAgICAgfQogICAgIH0KIAotICAgIGlmKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+PSAgU0RNTUNfREFUQVRJTUVPVVQpCisgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+PSAgU0RNTUNfREFUQVRJTUVPVVQpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9TRF9FUlJPUl9USU1FT1VUOwogICAgIH0KICAgfQogCi0gIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RNTUNfRkxBR19EVElNRU9VVCkpCisgIGlmIChfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfRFRJTUVPVVQpKQogICB7CiAgICAgcmV0dXJuIEhBTF9TRF9FUlJPUl9EQVRBX1RJTUVPVVQ7CiAgIH0KLSAgZWxzZSBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfRENSQ0ZBSUwpKQorICBlbHNlIGlmIChfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfRENSQ0ZBSUwpKQogICB7CiAgICAgcmV0dXJuIEhBTF9TRF9FUlJPUl9EQVRBX0NSQ19GQUlMOwogICB9Ci0gIGVsc2UgaWYoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX1JYT1ZFUlIpKQorICBlbHNlIGlmIChfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfUlhPVkVSUikpCiAgIHsKICAgICByZXR1cm4gSEFMX1NEX0VSUk9SX1JYX09WRVJSVU47CiAgIH0KQEAgLTMxOTcsNyArMzI3Nyw3IEBACiAgICAgKnBEYXRhID0gU0RNTUNfUmVhZEZJRk8oaHNkLT5JbnN0YW5jZSk7CiAgICAgcERhdGErKzsKIAotICAgIGlmKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+PSAgU0RNTUNfREFUQVRJTUVPVVQpCisgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+PSAgU0RNTUNfREFUQVRJTUVPVVQpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9TRF9FUlJPUl9USU1FT1VUOwogICAgIH0KQEAgLTMyMjAsMTQgKzMzMDAsMTQgQEAKIHsKICAgdWludDMyX3QgZXJyb3JzdGF0ZTsKIAotICBpZihwQ2FyZFN0YXR1cyA9PSBOVUxMKQorICBpZiAocENhcmRTdGF0dXMgPT0gTlVMTCkKICAgewogICAgIHJldHVybiBIQUxfU0RfRVJST1JfUEFSQU07CiAgIH0KIAogICAvKiBTZW5kIFN0YXR1cyBjb21tYW5kICovCiAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kU3RhdHVzKGhzZC0+SW5zdGFuY2UsICh1aW50MzJfdCkoaHNkLT5TZENhcmQuUmVsQ2FyZEFkZCA8PCAxNlUpKTsKLSAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKKyAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgIHsKICAgICByZXR1cm4gZXJyb3JzdGF0ZTsKICAgfQpAQCAtMzI0OCwzMSArMzMyOCwzMSBAQAogICB1aW50MzJfdCBzY3JbMlVdID0gezBVTCwgMFVMfTsKICAgdWludDMyX3QgZXJyb3JzdGF0ZTsKIAotICBpZigoU0RNTUNfR2V0UmVzcG9uc2UoaHNkLT5JbnN0YW5jZSwgU0RNTUNfUkVTUDEpICYgU0RNTUNfQ0FSRF9MT0NLRUQpID09IFNETU1DX0NBUkRfTE9DS0VEKQorICBpZiAoKFNETU1DX0dldFJlc3BvbnNlKGhzZC0+SW5zdGFuY2UsIFNETU1DX1JFU1AxKSAmIFNETU1DX0NBUkRfTE9DS0VEKSA9PSBTRE1NQ19DQVJEX0xPQ0tFRCkKICAgewogICAgIHJldHVybiBIQUxfU0RfRVJST1JfTE9DS19VTkxPQ0tfRkFJTEVEOwogICB9CiAKICAgLyogR2V0IFNDUiBSZWdpc3RlciAqLwogICBlcnJvcnN0YXRlID0gU0RfRmluZFNDUihoc2QsIHNjcik7Ci0gIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICB7CiAgICAgcmV0dXJuIGVycm9yc3RhdGU7CiAgIH0KIAogICAvKiBJZiByZXF1ZXN0ZWQgY2FyZCBzdXBwb3J0cyB3aWRlIGJ1cyBvcGVyYXRpb24gKi8KLSAgaWYoKHNjclsxVV0gJiBTRE1NQ19XSURFX0JVU19TVVBQT1JUKSAhPSBTRE1NQ19BTExaRVJPKQorICBpZiAoKHNjclsxVV0gJiBTRE1NQ19XSURFX0JVU19TVVBQT1JUKSAhPSBTRE1NQ19BTExaRVJPKQogICB7CiAgICAgLyogU2VuZCBDTUQ1NSBBUFBfQ01EIHdpdGggYXJndW1lbnQgYXMgY2FyZCdzIFJDQS4qLwogICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRBcHBDb21tYW5kKGhzZC0+SW5zdGFuY2UsICh1aW50MzJfdCkoaHNkLT5TZENhcmQuUmVsQ2FyZEFkZCA8PCAxNlUpKTsKLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICAgIHsKICAgICAgIHJldHVybiBlcnJvcnN0YXRlOwogICAgIH0KIAogICAgIC8qIFNlbmQgQUNNRDYgQVBQX0NNRCB3aXRoIGFyZ3VtZW50IGFzIDIgZm9yIHdpZGUgYnVzIG1vZGUgKi8KICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQnVzV2lkdGgoaHNkLT5JbnN0YW5jZSwgMlUpOwotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgICAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgcmV0dXJuIGVycm9yc3RhdGU7CiAgICAgfQpAQCAtMzI5NSwzMSArMzM3NSwzMSBAQAogICB1aW50MzJfdCBzY3JbMlVdID0gezBVTCwgMFVMfTsKICAgdWludDMyX3QgZXJyb3JzdGF0ZTsKIAotICBpZigoU0RNTUNfR2V0UmVzcG9uc2UoaHNkLT5JbnN0YW5jZSwgU0RNTUNfUkVTUDEpICYgU0RNTUNfQ0FSRF9MT0NLRUQpID09IFNETU1DX0NBUkRfTE9DS0VEKQorICBpZiAoKFNETU1DX0dldFJlc3BvbnNlKGhzZC0+SW5zdGFuY2UsIFNETU1DX1JFU1AxKSAmIFNETU1DX0NBUkRfTE9DS0VEKSA9PSBTRE1NQ19DQVJEX0xPQ0tFRCkKICAgewogICAgIHJldHVybiBIQUxfU0RfRVJST1JfTE9DS19VTkxPQ0tfRkFJTEVEOwogICB9CiAKICAgLyogR2V0IFNDUiBSZWdpc3RlciAqLwogICBlcnJvcnN0YXRlID0gU0RfRmluZFNDUihoc2QsIHNjcik7Ci0gIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICB7CiAgICAgcmV0dXJuIGVycm9yc3RhdGU7CiAgIH0KIAogICAvKiBJZiByZXF1ZXN0ZWQgY2FyZCBzdXBwb3J0cyAxIGJpdCBtb2RlIG9wZXJhdGlvbiAqLwotICBpZigoc2NyWzFVXSAmIFNETU1DX1NJTkdMRV9CVVNfU1VQUE9SVCkgIT0gU0RNTUNfQUxMWkVSTykKKyAgaWYgKChzY3JbMVVdICYgU0RNTUNfU0lOR0xFX0JVU19TVVBQT1JUKSAhPSBTRE1NQ19BTExaRVJPKQogICB7CiAgICAgLyogU2VuZCBDTUQ1NSBBUFBfQ01EIHdpdGggYXJndW1lbnQgYXMgY2FyZCdzIFJDQSAqLwogICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRBcHBDb21tYW5kKGhzZC0+SW5zdGFuY2UsICh1aW50MzJfdCkoaHNkLT5TZENhcmQuUmVsQ2FyZEFkZCA8PCAxNlUpKTsKLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICAgIHsKICAgICAgIHJldHVybiBlcnJvcnN0YXRlOwogICAgIH0KIAogICAgIC8qIFNlbmQgQUNNRDYgQVBQX0NNRCB3aXRoIGFyZ3VtZW50IGFzIDAgZm9yIHNpbmdsZSBidXMgbW9kZSAqLwogICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRCdXNXaWR0aChoc2QtPkluc3RhbmNlLCAwVSk7Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKKyAgICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICByZXR1cm4gZXJyb3JzdGF0ZTsKICAgICB9CkBAIC0zMzUwLDE0ICszNDMwLDE0IEBACiAKICAgLyogU2V0IEJsb2NrIFNpemUgVG8gOCBCeXRlcyAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQmxvY2tMZW5ndGgoaHNkLT5JbnN0YW5jZSwgOFUpOwotICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgewogICAgIHJldHVybiBlcnJvcnN0YXRlOwogICB9CiAKICAgLyogU2VuZCBDTUQ1NSBBUFBfQ01EIHdpdGggYXJndW1lbnQgYXMgY2FyZCdzIFJDQSAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQXBwQ29tbWFuZChoc2QtPkluc3RhbmNlLCAodWludDMyX3QpKChoc2QtPlNkQ2FyZC5SZWxDYXJkQWRkKSA8PCAxNlUpKTsKLSAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKKyAgaWYgKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgIHsKICAgICByZXR1cm4gZXJyb3JzdGF0ZTsKICAgfQpAQCAtMzM3MiwxNCArMzQ1MiwxNSBAQAogCiAgIC8qIFNlbmQgQUNNRDUxIFNEX0FQUF9TRU5EX1NDUiB3aXRoIGFyZ3VtZW50IGFzIDAgKi8KICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNlbmRTQ1IoaHNkLT5JbnN0YW5jZSk7Ci0gIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICB7CiAgICAgcmV0dXJuIGVycm9yc3RhdGU7CiAgIH0KIAotICB3aGlsZSghX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX1JYT1ZFUlIgfCBTRE1NQ19GTEFHX0RDUkNGQUlMIHwgU0RNTUNfRkxBR19EVElNRU9VVCB8IFNETU1DX0ZMQUdfREJDS0VORCB8IFNETU1DX0ZMQUdfREFUQUVORCkpCisgIHdoaWxlICghX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX1JYT1ZFUlIgfCBTRE1NQ19GTEFHX0RDUkNGQUlMIHwgU0RNTUNfRkxBR19EVElNRU9VVCB8IFNETU1DX0ZMQUdfREJDS0VORCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfRkxBR19EQVRBRU5EKSkKICAgewotICAgIGlmKCghX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX1JYRklGT0UpKSAmJiAoaW5kZXggPT0gMFUpKQorICAgIGlmICgoIV9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RNTUNfRkxBR19SWEZJRk9FKSkgJiYgKGluZGV4ID09IDBVKSkKICAgICB7CiAgICAgICB0ZW1wc2NyWzBdID0gU0RNTUNfUmVhZEZJRk8oaHNkLT5JbnN0YW5jZSk7CiAgICAgICB0ZW1wc2NyWzFdID0gU0RNTUNfUmVhZEZJRk8oaHNkLT5JbnN0YW5jZSk7CkBAIC0zMzg3LDI1ICszNDY4LDI1IEBACiAgICAgfQogCiAKLSAgICBpZigoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPj0gIFNETU1DX0RBVEFUSU1FT1VUKQorICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPj0gIFNETU1DX0RBVEFUSU1FT1VUKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfU0RfRVJST1JfVElNRU9VVDsKICAgICB9CiAgIH0KIAotICBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfRFRJTUVPVVQpKQorICBpZiAoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX0RUSU1FT1VUKSkKICAgewogICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX0RUSU1FT1VUKTsKIAogICAgIHJldHVybiBIQUxfU0RfRVJST1JfREFUQV9USU1FT1VUOwogICB9Ci0gIGVsc2UgaWYoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX0RDUkNGQUlMKSkKKyAgZWxzZSBpZiAoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX0RDUkNGQUlMKSkKICAgewogICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX0RDUkNGQUlMKTsKIAogICAgIHJldHVybiBIQUxfU0RfRVJST1JfREFUQV9DUkNfRkFJTDsKICAgfQotICBlbHNlIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RNTUNfRkxBR19SWE9WRVJSKSkKKyAgZWxzZSBpZiAoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX1JYT1ZFUlIpKQogICB7CiAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNETU1DX0ZMQUdfUlhPVkVSUik7CiAKQEAgLTM0MTcsMTAgKzM0OTgsMTAgQEAKICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRE1NQ19TVEFUSUNfREFUQV9GTEFHUyk7CiAKLSAgICAqc2NyID0gKCgodGVtcHNjclsxXSAmIFNETU1DXzBUTzdCSVRTKSA8PCAyNCkgIHwgKCh0ZW1wc2NyWzFdICYgU0RNTUNfOFRPMTVCSVRTKSA8PCA4KSB8XAorICAgICpzY3IgPSAoKCh0ZW1wc2NyWzFdICYgU0RNTUNfMFRPN0JJVFMpIDw8IDI0KSAgfCAoKHRlbXBzY3JbMV0gJiBTRE1NQ184VE8xNUJJVFMpIDw8IDgpIHwgXAogICAgICAgICAgICAgKCh0ZW1wc2NyWzFdICYgU0RNTUNfMTZUTzIzQklUUykgPj4gOCkgfCAoKHRlbXBzY3JbMV0gJiBTRE1NQ18yNFRPMzFCSVRTKSA+PiAyNCkpOwogICAgIHNjcisrOwotICAgICpzY3IgPSAoKCh0ZW1wc2NyWzBdICYgU0RNTUNfMFRPN0JJVFMpIDw8IDI0KSAgfCAoKHRlbXBzY3JbMF0gJiBTRE1NQ184VE8xNUJJVFMpIDw8IDgpIHxcCisgICAgKnNjciA9ICgoKHRlbXBzY3JbMF0gJiBTRE1NQ18wVE83QklUUykgPDwgMjQpICB8ICgodGVtcHNjclswXSAmIFNETU1DXzhUTzE1QklUUykgPDwgOCkgfCBcCiAgICAgICAgICAgICAoKHRlbXBzY3JbMF0gJiBTRE1NQ18xNlRPMjNCSVRTKSA+PiA4KSB8ICgodGVtcHNjclswXSAmIFNETU1DXzI0VE8zMUJJVFMpID4+IDI0KSk7CiAKICAgfQpAQCAtMzQzNiwxNSArMzUxNywxNiBAQAogICAqLwogc3RhdGljIHZvaWQgU0RfUmVhZF9JVChTRF9IYW5kbGVUeXBlRGVmICpoc2QpCiB7Ci0gIHVpbnQzMl90IGNvdW50LCBkYXRhOwotICB1aW50OF90KiB0bXA7CisgIHVpbnQzMl90IGNvdW50OworICB1aW50MzJfdCBkYXRhOworICB1aW50OF90ICp0bXA7CiAKICAgdG1wID0gaHNkLT5wUnhCdWZmUHRyOwogCiAgIGlmIChoc2QtPlJ4WGZlclNpemUgPj0gMzJVKQogICB7CiAgICAgLyogUmVhZCBkYXRhIGZyb20gU0RNTUMgUnggRklGTyAqLwotICAgIGZvcihjb3VudCA9IDBVOyBjb3VudCA8IDhVOyBjb3VudCsrKQorICAgIGZvciAoY291bnQgPSAwVTsgY291bnQgPCA4VTsgY291bnQrKykKICAgICB7CiAgICAgICBkYXRhID0gU0RNTUNfUmVhZEZJRk8oaHNkLT5JbnN0YW5jZSk7CiAgICAgICAqdG1wID0gKHVpbnQ4X3QpKGRhdGEgJiAweEZGVSk7CkBAIC0zNDcwLDE1ICszNTUyLDE2IEBACiAgICovCiBzdGF0aWMgdm9pZCBTRF9Xcml0ZV9JVChTRF9IYW5kbGVUeXBlRGVmICpoc2QpCiB7Ci0gIHVpbnQzMl90IGNvdW50LCBkYXRhOwotICB1aW50OF90KiB0bXA7CisgIHVpbnQzMl90IGNvdW50OworICB1aW50MzJfdCBkYXRhOworICB1aW50OF90ICp0bXA7CiAKICAgdG1wID0gaHNkLT5wVHhCdWZmUHRyOwogCiAgIGlmIChoc2QtPlR4WGZlclNpemUgPj0gMzJVKQogICB7CiAgICAgLyogV3JpdGUgZGF0YSB0byBTRE1NQyBUeCBGSUZPICovCi0gICAgZm9yKGNvdW50ID0gMFU7IGNvdW50IDwgOFU7IGNvdW50KyspCisgICAgZm9yIChjb3VudCA9IDBVOyBjb3VudCA8IDhVOyBjb3VudCsrKQogICAgIHsKICAgICAgIGRhdGEgPSAodWludDMyX3QpKCp0bXApOwogICAgICAgdG1wKys7CkBAIC0zNTA5LDE2ICszNTkyLDE3IEBACiAgIHVpbnQzMl90IGVycm9yc3RhdGUgPSBIQUxfU0RfRVJST1JfTk9ORTsKICAgU0RNTUNfRGF0YUluaXRUeXBlRGVmIHNkbW1jX2RhdGFpbml0c3RydWN0dXJlOwogICB1aW50MzJfdCBTRF9oc1sxNl0gID0gezB9OwotICB1aW50MzJfdCBjb3VudCwgbG9vcCA9IDAgOworICB1aW50MzJfdCBjb3VudDsKKyAgdWludDMyX3QgbG9vcCA9IDAgOwogICB1aW50MzJfdCBUaW1lb3V0ID0gSEFMX0dldFRpY2soKTsKIAotICBpZihoc2QtPlNkQ2FyZC5DYXJkU3BlZWQgPT0gQ0FSRF9OT1JNQUxfU1BFRUQpCisgIGlmIChoc2QtPlNkQ2FyZC5DYXJkU3BlZWQgPT0gQ0FSRF9OT1JNQUxfU1BFRUQpCiAgIHsKLSAgICAgLyogU3RhbmRhcmQgU3BlZWQgQ2FyZCA8PSAxMi41TWh6ICAqLwotICAgICByZXR1cm4gSEFMX1NEX0VSUk9SX1JFUVVFU1RfTk9UX0FQUExJQ0FCTEU7CisgICAgLyogU3RhbmRhcmQgU3BlZWQgQ2FyZCA8PSAxMi41TWh6ICAqLworICAgIHJldHVybiBIQUxfU0RfRVJST1JfUkVRVUVTVF9OT1RfQVBQTElDQUJMRTsKICAgfQogCi0gIGlmKGhzZC0+U2RDYXJkLkNhcmRTcGVlZCA9PSBDQVJEX0hJR0hfU1BFRUQpCisgIGlmIChoc2QtPlNkQ2FyZC5DYXJkU3BlZWQgPT0gQ0FSRF9ISUdIX1NQRUVEKQogICB7CiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgRGF0YSBjb250cm9sIHJlZ2lzdGVyICovCiAgICAgaHNkLT5JbnN0YW5jZS0+RENUUkwgPSAwOwpAQCAtMzU0MCwyNyArMzYyNCwyOCBAQAogICAgICh2b2lkKVNETU1DX0NvbmZpZ0RhdGEoaHNkLT5JbnN0YW5jZSwgJnNkbW1jX2RhdGFpbml0c3RydWN0dXJlKTsKIAogCi0gICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFN3aXRjaChoc2QtPkluc3RhbmNlLFNETU1DX1NEUjI1X1NXSVRDSF9QQVRURVJOKTsKLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTd2l0Y2goaHNkLT5JbnN0YW5jZSwgU0RNTUNfU0RSMjVfU1dJVENIX1BBVFRFUk4pOworICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICAgIHsKICAgICAgIHJldHVybiBlcnJvcnN0YXRlOwogICAgIH0KIAotICAgIHdoaWxlKCFfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfUlhPVkVSUiB8IFNETU1DX0ZMQUdfRENSQ0ZBSUwgfCBTRE1NQ19GTEFHX0RUSU1FT1VUIHwgU0RNTUNfRkxBR19EQkNLRU5EfCBTRE1NQ19GTEFHX0RBVEFFTkQgKSkKKyAgICB3aGlsZSAoIV9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RNTUNfRkxBR19SWE9WRVJSIHwgU0RNTUNfRkxBR19EQ1JDRkFJTCB8IFNETU1DX0ZMQUdfRFRJTUVPVVQgfCBTRE1NQ19GTEFHX0RCQ0tFTkQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfRkxBR19EQVRBRU5EKSkKICAgICB7CiAgICAgICBpZiAoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX1JYRklGT0hGKSkKICAgICAgIHsKICAgICAgICAgZm9yIChjb3VudCA9IDBVOyBjb3VudCA8IDhVOyBjb3VudCsrKQogICAgICAgICB7Ci0gICAgICAgICAgU0RfaHNbKDhVKmxvb3ApK2NvdW50XSAgPSBTRE1NQ19SZWFkRklGTyhoc2QtPkluc3RhbmNlKTsKKyAgICAgICAgICBTRF9oc1soOFUgKiBsb29wKSArIGNvdW50XSAgPSBTRE1NQ19SZWFkRklGTyhoc2QtPkluc3RhbmNlKTsKICAgICAgICAgfQogICAgICAgICBsb29wICsrOwogICAgICAgfQogCi0gICAgICBpZigoSEFMX0dldFRpY2soKS1UaW1lb3V0KSA+PSAgU0RNTUNfREFUQVRJTUVPVVQpCisgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSBUaW1lb3V0KSA+PSAgU0RNTUNfREFUQVRJTUVPVVQpCiAgICAgICB7CiAgICAgICAgIGhzZC0+RXJyb3JDb2RlID0gSEFMX1NEX0VSUk9SX1RJTUVPVVQ7Ci0gICAgICAgIGhzZC0+U3RhdGU9IEhBTF9TRF9TVEFURV9SRUFEWTsKKyAgICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKICAgICAgICAgcmV0dXJuIEhBTF9TRF9FUlJPUl9USU1FT1VUOwogICAgICAgfQogICAgIH0KQEAgLTM1OTYsNyArMzY4MSw3IEBACiAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNETU1DX1NUQVRJQ19EQVRBX0ZMQUdTKTsKIAogICAgIC8qIFRlc3QgaWYgdGhlIHN3aXRjaCBtb2RlIEhTIGlzIG9rICovCi0gICAgaWYgKCgoKHVpbnQ4X3QqKVNEX2hzKVsxM10gJiAyVSkgIT0gMlUpCisgICAgaWYgKCgoKHVpbnQ4X3QgKilTRF9ocylbMTNdICYgMlUpICE9IDJVKQogICAgIHsKICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9VTlNVUFBPUlRFRF9GRUFUVVJFOwogICAgIH0KQEAgLTM2MjAsMTYgKzM3MDUsMTcgQEAKICAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IEhBTF9TRF9FUlJPUl9OT05FOwogICBTRE1NQ19EYXRhSW5pdFR5cGVEZWYgc2RtbWNfZGF0YWluaXRzdHJ1Y3R1cmU7CiAgIHVpbnQzMl90IFNEX2hzWzE2XSAgPSB7MH07Ci0gIHVpbnQzMl90IGNvdW50LCBsb29wID0gMCA7CisgIHVpbnQzMl90IGNvdW50OworICB1aW50MzJfdCBsb29wID0gMCA7CiAgIHVpbnQzMl90IFRpbWVvdXQgPSBIQUxfR2V0VGljaygpOwogCi0gIGlmKGhzZC0+U2RDYXJkLkNhcmRTcGVlZCA9PSBDQVJEX05PUk1BTF9TUEVFRCkKKyAgaWYgKGhzZC0+U2RDYXJkLkNhcmRTcGVlZCA9PSBDQVJEX05PUk1BTF9TUEVFRCkKICAgewotICAgICAvKiBTdGFuZGFyZCBTcGVlZCBDYXJkIDw9IDEyLjVNaHogICovCi0gICAgIHJldHVybiBIQUxfU0RfRVJST1JfUkVRVUVTVF9OT1RfQVBQTElDQUJMRTsKKyAgICAvKiBTdGFuZGFyZCBTcGVlZCBDYXJkIDw9IDEyLjVNaHogICovCisgICAgcmV0dXJuIEhBTF9TRF9FUlJPUl9SRVFVRVNUX05PVF9BUFBMSUNBQkxFOwogICB9CiAKLSAgaWYoaHNkLT5TZENhcmQuQ2FyZFNwZWVkID09IENBUkRfVUxUUkFfSElHSF9TUEVFRCkKKyAgaWYgKGhzZC0+U2RDYXJkLkNhcmRTcGVlZCA9PSBDQVJEX1VMVFJBX0hJR0hfU1BFRUQpCiAgIHsKICAgICAvKiBJbml0aWFsaXplIHRoZSBEYXRhIGNvbnRyb2wgcmVnaXN0ZXIgKi8KICAgICBoc2QtPkluc3RhbmNlLT5EQ1RSTCA9IDA7CkBAIC0zNjQ4LDMyICszNzM0LDMzIEBACiAgICAgc2RtbWNfZGF0YWluaXRzdHJ1Y3R1cmUuVHJhbnNmZXJNb2RlICA9IFNETU1DX1RSQU5TRkVSX01PREVfQkxPQ0s7CiAgICAgc2RtbWNfZGF0YWluaXRzdHJ1Y3R1cmUuRFBTTSAgICAgICAgICA9IFNETU1DX0RQU01fRU5BQkxFOwogCi0gICAgaWYgKCBTRE1NQ19Db25maWdEYXRhKGhzZC0+SW5zdGFuY2UsICZzZG1tY19kYXRhaW5pdHN0cnVjdHVyZSkgIT0gSEFMX09LKQorICAgIGlmIChTRE1NQ19Db25maWdEYXRhKGhzZC0+SW5zdGFuY2UsICZzZG1tY19kYXRhaW5pdHN0cnVjdHVyZSkgIT0gSEFMX09LKQogICAgIHsKICAgICAgIHJldHVybiAoSEFMX1NEX0VSUk9SX0dFTkVSQUxfVU5LTk9XTl9FUlIpOwogICAgIH0KIAogICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTd2l0Y2goaHNkLT5JbnN0YW5jZSwgU0RNTUNfU0RSMTA0X1NXSVRDSF9QQVRURVJOKTsKLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICAgIHsKICAgICAgIHJldHVybiBlcnJvcnN0YXRlOwogICAgIH0KIAotICAgIHdoaWxlKCFfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfUlhPVkVSUiB8IFNETU1DX0ZMQUdfRENSQ0ZBSUwgfCBTRE1NQ19GTEFHX0RUSU1FT1VUIHwgU0RNTUNfRkxBR19EQkNLRU5EfCBTRE1NQ19GTEFHX0RBVEFFTkQgKSkKKyAgICB3aGlsZSAoIV9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RNTUNfRkxBR19SWE9WRVJSIHwgU0RNTUNfRkxBR19EQ1JDRkFJTCB8IFNETU1DX0ZMQUdfRFRJTUVPVVQgfCBTRE1NQ19GTEFHX0RCQ0tFTkQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfRkxBR19EQVRBRU5EKSkKICAgICB7CiAgICAgICBpZiAoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX1JYRklGT0hGKSkKICAgICAgIHsKICAgICAgICAgZm9yIChjb3VudCA9IDBVOyBjb3VudCA8IDhVOyBjb3VudCsrKQogICAgICAgICB7Ci0gICAgICAgICAgU0RfaHNbKDhVKmxvb3ApK2NvdW50XSAgPSBTRE1NQ19SZWFkRklGTyhoc2QtPkluc3RhbmNlKTsKKyAgICAgICAgICBTRF9oc1soOFUgKiBsb29wKSArIGNvdW50XSAgPSBTRE1NQ19SZWFkRklGTyhoc2QtPkluc3RhbmNlKTsKICAgICAgICAgfQogICAgICAgICBsb29wICsrOwogICAgICAgfQogCi0gICAgICBpZigoSEFMX0dldFRpY2soKS1UaW1lb3V0KSA+PSAgU0RNTUNfREFUQVRJTUVPVVQpCisgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSBUaW1lb3V0KSA+PSAgU0RNTUNfREFUQVRJTUVPVVQpCiAgICAgICB7CiAgICAgICAgIGhzZC0+RXJyb3JDb2RlID0gSEFMX1NEX0VSUk9SX1RJTUVPVVQ7Ci0gICAgICAgIGhzZC0+U3RhdGU9IEhBTF9TRF9TVEFURV9SRUFEWTsKKyAgICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKICAgICAgICAgcmV0dXJuIEhBTF9TRF9FUlJPUl9USU1FT1VUOwogICAgICAgfQogICAgIH0KQEAgLTM3MDksNyArMzc5Niw3IEBACiAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNETU1DX1NUQVRJQ19EQVRBX0ZMQUdTKTsKIAogICAgIC8qIFRlc3QgaWYgdGhlIHN3aXRjaCBtb2RlIEhTIGlzIG9rICovCi0gICAgaWYgKCgoKHVpbnQ4X3QqKVNEX2hzKVsxM10gJiAyVSkgIT0gMlUpCisgICAgaWYgKCgoKHVpbnQ4X3QgKilTRF9ocylbMTNdICYgMlUpICE9IDJVKQogICAgIHsKICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9VTlNVUFBPUlRFRF9GRUFUVVJFOwogICAgIH0KQEAgLTM3MjMsNyArMzgxMCw3IEBACiAjaWYgZGVmaW5lZCAoRExZQl9TRE1NQzEpIHx8IGRlZmluZWQgKERMWUJfU0RNTUMyKQogICAgICAgLyogRW5hYmxlIERlbGF5QmxvY2sgUGVyaXBoZXJhbCAqLwogICAgICAgLyogU0RNTUNfRkJfQ0xLIHR1bmVkIGZlZWRiYWNrIGNsb2NrIHNlbGVjdGVkIGFzIHJlY2VpdmUgY2xvY2ssIGZvciBTRFIxMDQgKi8KLSAgICAgIE1PRElGWV9SRUcoaHNkLT5JbnN0YW5jZS0+Q0xLQ1IsIFNETU1DX0NMS0NSX1NFTENMS1JYLFNETU1DX0NMS0NSX1NFTENMS1JYXzEpOworICAgICAgTU9ESUZZX1JFRyhoc2QtPkluc3RhbmNlLT5DTEtDUiwgU0RNTUNfQ0xLQ1JfU0VMQ0xLUlgsIFNETU1DX0NMS0NSX1NFTENMS1JYXzEpOwogICAgICAgaWYgKERlbGF5QmxvY2tfRW5hYmxlKFNEX0dFVF9ETFlCX0lOU1RBTkNFKGhzZC0+SW5zdGFuY2UpKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIHJldHVybiAoSEFMX1NEX0VSUk9SX0dFTkVSQUxfVU5LTk9XTl9FUlIpOwpAQCAtMzc0OCwxNiArMzgzNSwxNyBAQAogICB1aW50MzJfdCBlcnJvcnN0YXRlID0gSEFMX1NEX0VSUk9SX05PTkU7CiAgIFNETU1DX0RhdGFJbml0VHlwZURlZiBzZG1tY19kYXRhaW5pdHN0cnVjdHVyZTsKICAgdWludDMyX3QgU0RfaHNbMTZdICA9IHswfTsKLSAgdWludDMyX3QgY291bnQsIGxvb3AgPSAwIDsKKyAgdWludDMyX3QgY291bnQ7CisgIHVpbnQzMl90IGxvb3AgPSAwIDsKICAgdWludDMyX3QgVGltZW91dCA9IEhBTF9HZXRUaWNrKCk7CiAKLSAgaWYoaHNkLT5TZENhcmQuQ2FyZFNwZWVkID09IENBUkRfTk9STUFMX1NQRUVEKQorICBpZiAoaHNkLT5TZENhcmQuQ2FyZFNwZWVkID09IENBUkRfTk9STUFMX1NQRUVEKQogICB7Ci0gICAgIC8qIFN0YW5kYXJkIFNwZWVkIENhcmQgPD0gMTIuNU1oeiAgKi8KLSAgICAgcmV0dXJuIEhBTF9TRF9FUlJPUl9SRVFVRVNUX05PVF9BUFBMSUNBQkxFOworICAgIC8qIFN0YW5kYXJkIFNwZWVkIENhcmQgPD0gMTIuNU1oeiAgKi8KKyAgICByZXR1cm4gSEFMX1NEX0VSUk9SX1JFUVVFU1RfTk9UX0FQUExJQ0FCTEU7CiAgIH0KIAotICBpZihoc2QtPlNkQ2FyZC5DYXJkU3BlZWQgPT0gQ0FSRF9VTFRSQV9ISUdIX1NQRUVEKQorICBpZiAoaHNkLT5TZENhcmQuQ2FyZFNwZWVkID09IENBUkRfVUxUUkFfSElHSF9TUEVFRCkKICAgewogICAgIC8qIEluaXRpYWxpemUgdGhlIERhdGEgY29udHJvbCByZWdpc3RlciAqLwogICAgIGhzZC0+SW5zdGFuY2UtPkRDVFJMID0gMDsKQEAgLTM3NzYsMzIgKzM4NjQsMzMgQEAKICAgICBzZG1tY19kYXRhaW5pdHN0cnVjdHVyZS5UcmFuc2Zlck1vZGUgID0gU0RNTUNfVFJBTlNGRVJfTU9ERV9CTE9DSzsKICAgICBzZG1tY19kYXRhaW5pdHN0cnVjdHVyZS5EUFNNICAgICAgICAgID0gU0RNTUNfRFBTTV9FTkFCTEU7CiAKLSAgICBpZiAoIFNETU1DX0NvbmZpZ0RhdGEoaHNkLT5JbnN0YW5jZSwgJnNkbW1jX2RhdGFpbml0c3RydWN0dXJlKSAhPSBIQUxfT0spCisgICAgaWYgKFNETU1DX0NvbmZpZ0RhdGEoaHNkLT5JbnN0YW5jZSwgJnNkbW1jX2RhdGFpbml0c3RydWN0dXJlKSAhPSBIQUxfT0spCiAgICAgewogICAgICAgcmV0dXJuIChIQUxfU0RfRVJST1JfR0VORVJBTF9VTktOT1dOX0VSUik7CiAgICAgfQogCiAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFN3aXRjaChoc2QtPkluc3RhbmNlLCBTRE1NQ19ERFI1MF9TV0lUQ0hfUEFUVEVSTik7Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKKyAgICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICByZXR1cm4gZXJyb3JzdGF0ZTsKICAgICB9CiAKLSAgICB3aGlsZSghX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRE1NQ19GTEFHX1JYT1ZFUlIgfCBTRE1NQ19GTEFHX0RDUkNGQUlMIHwgU0RNTUNfRkxBR19EVElNRU9VVCB8IFNETU1DX0ZMQUdfREJDS0VORHwgU0RNTUNfRkxBR19EQVRBRU5EICkpCisgICAgd2hpbGUgKCFfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNETU1DX0ZMQUdfUlhPVkVSUiB8IFNETU1DX0ZMQUdfRENSQ0ZBSUwgfCBTRE1NQ19GTEFHX0RUSU1FT1VUIHwgU0RNTUNfRkxBR19EQkNLRU5EIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNETU1DX0ZMQUdfREFUQUVORCkpCiAgICAgewogICAgICAgaWYgKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RNTUNfRkxBR19SWEZJRk9IRikpCiAgICAgICB7CiAgICAgICAgIGZvciAoY291bnQgPSAwVTsgY291bnQgPCA4VTsgY291bnQrKykKICAgICAgICAgewotICAgICAgICAgIFNEX2hzWyg4VSpsb29wKStjb3VudF0gID0gU0RNTUNfUmVhZEZJRk8oaHNkLT5JbnN0YW5jZSk7CisgICAgICAgICAgU0RfaHNbKDhVICogbG9vcCkgKyBjb3VudF0gID0gU0RNTUNfUmVhZEZJRk8oaHNkLT5JbnN0YW5jZSk7CiAgICAgICAgIH0KICAgICAgICAgbG9vcCArKzsKICAgICAgIH0KIAotICAgICAgaWYoKEhBTF9HZXRUaWNrKCktVGltZW91dCkgPj0gIFNETU1DX0RBVEFUSU1FT1VUKQorICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gVGltZW91dCkgPj0gIFNETU1DX0RBVEFUSU1FT1VUKQogICAgICAgewogICAgICAgICBoc2QtPkVycm9yQ29kZSA9IEhBTF9TRF9FUlJPUl9USU1FT1VUOwotICAgICAgICBoc2QtPlN0YXRlPSBIQUxfU0RfU1RBVEVfUkVBRFk7CisgICAgICAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfUkVBRFk7CiAgICAgICAgIHJldHVybiBIQUxfU0RfRVJST1JfVElNRU9VVDsKICAgICAgIH0KICAgICB9CkBAIC0zODM3LDcgKzM5MjYsNyBAQAogICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRE1NQ19TVEFUSUNfREFUQV9GTEFHUyk7CiAKICAgICAvKiBUZXN0IGlmIHRoZSBzd2l0Y2ggbW9kZSAgaXMgb2sgKi8KLSAgICBpZiAoKCgodWludDhfdCopU0RfaHMpWzEzXSAmIDJVKSAhPSAyVSkKKyAgICBpZiAoKCgodWludDhfdCAqKVNEX2hzKVsxM10gJiAyVSkgIT0gMlUpCiAgICAgewogICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX1VOU1VQUE9SVEVEX0ZFQVRVUkU7CiAgICAgfQpAQCAtMzg1MSw3ICszOTQwLDcgQEAKICNpZiBkZWZpbmVkIChETFlCX1NETU1DMSkgfHwgZGVmaW5lZCAoRExZQl9TRE1NQzIpCiAgICAgICAvKiBFbmFibGUgRGVsYXlCbG9jayBQZXJpcGhlcmFsICovCiAgICAgICAvKiBTRE1NQ19DS2luIGZlZWRiYWNrIGNsb2NrIHNlbGVjdGVkIGFzIHJlY2VpdmUgY2xvY2ssIGZvciBERFI1MCAqLwotICAgICAgTU9ESUZZX1JFRyhoc2QtPkluc3RhbmNlLT5DTEtDUiwgU0RNTUNfQ0xLQ1JfU0VMQ0xLUlgsU0RNTUNfQ0xLQ1JfU0VMQ0xLUlhfMCk7CisgICAgICBNT0RJRllfUkVHKGhzZC0+SW5zdGFuY2UtPkNMS0NSLCBTRE1NQ19DTEtDUl9TRUxDTEtSWCwgU0RNTUNfQ0xLQ1JfU0VMQ0xLUlhfMCk7CiAgICAgICBpZiAoRGVsYXlCbG9ja19FbmFibGUoU0RfR0VUX0RMWUJfSU5TVEFOQ0UoaHNkLT5JbnN0YW5jZSkpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgcmV0dXJuIChIQUxfU0RfRVJST1JfR0VORVJBTF9VTktOT1dOX0VSUik7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNXh4X2hhbF9zZF9leC5jIGIvU3JjL3N0bTMybDV4eF9oYWxfc2RfZXguYwppbmRleCBlZjI5MWIyLi41NmQ4ZmE0IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNXh4X2hhbF9zZF9leC5jCisrKyBiL1NyYy9zdG0zMmw1eHhfaGFsX3NkX2V4LmMKQEAgLTE0LDcgKzE0LDggQEAKICAgWy4uXQogICAgVGhlIFNEIEV4dGVuc2lvbiBIQUwgZHJpdmVyIGNhbiBiZSB1c2VkIGFzIGZvbGxvd3M6CiAgICAoKykgQ29uZmlndXJlIEJ1ZmZlcjAgYW5kIEJ1ZmZlcjEgc3RhcnQgYWRkcmVzcyBhbmQgQnVmZmVyIHNpemUgdXNpbmcgSEFMX1NERXhfQ29uZmlnRE1BTXVsdGlCdWZmZXIoKSBmdW5jdGlvbi4KLSAgICgrKSBTdGFydCBSZWFkIGFuZCBXcml0ZSBmb3IgbXVsdGlidWZmZXIgbW9kZSB1c2luZyBIQUxfU0RFeF9SZWFkQmxvY2tzRE1BTXVsdGlCdWZmZXIoKSBhbmQgSEFMX1NERXhfV3JpdGVCbG9ja3NETUFNdWx0aUJ1ZmZlcigpIGZ1bmN0aW9ucy4KKyAgICgrKSBTdGFydCBSZWFkIGFuZCBXcml0ZSBmb3IgbXVsdGlidWZmZXIgbW9kZSB1c2luZyBIQUxfU0RFeF9SZWFkQmxvY2tzRE1BTXVsdGlCdWZmZXIoKQorICAgICAgIGFuZCBIQUxfU0RFeF9Xcml0ZUJsb2Nrc0RNQU11bHRpQnVmZmVyKCkgZnVuY3Rpb25zLgogCiAgIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTU3LDggKzU4LDggQEAKICAgKi8KIAogLyoqIEBhZGR0b2dyb3VwIFNERXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMQotICogIEBicmllZiAgIE11bHRpYnVmZmVyIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgTXVsdGlidWZmZXIgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAjIyMjIyBNdWx0aWJ1ZmZlciBmdW5jdGlvbnMgIyMjIyMKQEAgLTc5LDEzICs4MCwxNCBAQAogICAqIEBwYXJhbSAgQnVmZmVyU2l6ZTogU2l6ZSBvZiBCdWZmZXIwIGluIEJsb2Nrcy4gQnVmZmVyMCBhbmQgQnVmZmVyMSBtdXN0IGhhdmUgdGhlIHNhbWUgc2l6ZS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TREV4X0NvbmZpZ0RNQU11bHRpQnVmZmVyKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgdWludDMyX3QgKnBEYXRhQnVmZmVyMCwgdWludDMyX3QgKnBEYXRhQnVmZmVyMSwgdWludDMyX3QgQnVmZmVyU2l6ZSkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TREV4X0NvbmZpZ0RNQU11bHRpQnVmZmVyKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgdWludDMyX3QgKnBEYXRhQnVmZmVyMCwgdWludDMyX3QgKnBEYXRhQnVmZmVyMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1ZmZlclNpemUpCiB7Ci0gIGlmKGhzZC0+U3RhdGUgPT0gSEFMX1NEX1NUQVRFX1JFQURZKQorICBpZiAoaHNkLT5TdGF0ZSA9PSBIQUxfU0RfU1RBVEVfUkVBRFkpCiAgIHsKLSAgICBoc2QtPkluc3RhbmNlLT5JRE1BQkFTRTA9ICh1aW50MzJfdCkgcERhdGFCdWZmZXIwOwotICAgIGhzZC0+SW5zdGFuY2UtPklETUFCQVNFMT0gKHVpbnQzMl90KSBwRGF0YUJ1ZmZlcjE7Ci0gICAgaHNkLT5JbnN0YW5jZS0+SURNQUJTSVpFPSAodWludDMyX3QpIChCTE9DS1NJWkUgKiBCdWZmZXJTaXplKTsKKyAgICBoc2QtPkluc3RhbmNlLT5JRE1BQkFTRTAgPSAodWludDMyX3QpIHBEYXRhQnVmZmVyMDsKKyAgICBoc2QtPkluc3RhbmNlLT5JRE1BQkFTRTEgPSAodWludDMyX3QpIHBEYXRhQnVmZmVyMTsKKyAgICBoc2QtPkluc3RhbmNlLT5JRE1BQlNJWkUgPSAodWludDMyX3QpKEJMT0NLU0laRSAqIEJ1ZmZlclNpemUpOwogCiAgICAgcmV0dXJuIEhBTF9PSzsKICAgfQpAQCAtOTcsNyArOTksOCBAQAogCiAvKioKICAgKiBAYnJpZWYgIFJlYWRzIGJsb2NrKHMpIGZyb20gYSBzcGVjaWZpZWQgYWRkcmVzcyBpbiBhIGNhcmQuIFRoZSByZWNlaXZlZCBEYXRhIHdpbGwgYmUgc3RvcmVkIGluIEJ1ZmZlcjAgYW5kIEJ1ZmZlcjEuCi0gICogICAgICAgICBCdWZmZXIwLCBCdWZmZXIxIGFuZCBCdWZmZXJTaXplIG5lZWQgdG8gYmUgY29uZmlndXJlZCBieSBmdW5jdGlvbiBIQUxfU0RFeF9Db25maWdETUFNdWx0aUJ1ZmZlciBiZWZvcmUgY2FsbCB0aGlzIGZ1bmN0aW9uLgorICAqICAgICAgICAgQnVmZmVyMCwgQnVmZmVyMSBhbmQgQnVmZmVyU2l6ZSBuZWVkIHRvIGJlIGNvbmZpZ3VyZWQgYnkgZnVuY3Rpb24gSEFMX1NERXhfQ29uZmlnRE1BTXVsdGlCdWZmZXIgYmVmb3JlCisgICogICAgICAgICBjYWxsIHRoaXMgZnVuY3Rpb24uCiAgICogQHBhcmFtICBoc2Q6IFNEIGhhbmRsZQogICAqIEBwYXJhbSAgQmxvY2tBZGQ6IEJsb2NrIEFkZHJlc3MgZnJvbSB3aGVyZSBkYXRhIGlzIHRvIGJlIHJlYWQKICAgKiBAcGFyYW0gIE51bWJlck9mQmxvY2tzOiBUb3RhbCBudW1iZXIgb2YgYmxvY2tzIHRvIHJlYWQKQEAgLTEwNywxMiArMTEwLDEzIEBACiB7CiAgIFNETU1DX0RhdGFJbml0VHlwZURlZiBjb25maWc7CiAgIHVpbnQzMl90IGVycm9yc3RhdGU7Ci0gIHVpbnQzMl90IERtYUJhc2UwX3JlZywgRG1hQmFzZTFfcmVnOworICB1aW50MzJfdCBEbWFCYXNlMF9yZWc7CisgIHVpbnQzMl90IERtYUJhc2UxX3JlZzsKICAgdWludDMyX3QgYWRkID0gQmxvY2tBZGQ7CiAKLSAgaWYoaHNkLT5TdGF0ZSA9PSBIQUxfU0RfU1RBVEVfUkVBRFkpCisgIGlmIChoc2QtPlN0YXRlID09IEhBTF9TRF9TVEFURV9SRUFEWSkKICAgewotICAgIGlmKChhZGQgKyBOdW1iZXJPZkJsb2NrcykgPiAoaHNkLT5TZENhcmQuTG9nQmxvY2tOYnIpKQorICAgIGlmICgoYWRkICsgTnVtYmVyT2ZCbG9ja3MpID4gKGhzZC0+U2RDYXJkLkxvZ0Jsb2NrTmJyKSkKICAgICB7CiAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfQUREUl9PVVRfT0ZfUkFOR0U7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtMTM1LDcgKzEzOSw3IEBACiAgICAgaHNkLT5FcnJvckNvZGUgPSBIQUxfU0RfRVJST1JfTk9ORTsKICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX0JVU1k7CiAKLSAgICBpZihoc2QtPlNkQ2FyZC5DYXJkVHlwZSAhPSBDQVJEX1NESENfU0RYQykKKyAgICBpZiAoaHNkLT5TZENhcmQuQ2FyZFR5cGUgIT0gQ0FSRF9TREhDX1NEWEMpCiAgICAgewogICAgICAgYWRkICo9IDUxMlU7CiAgICAgfQpAQCAtMTUxLDcgKzE1NSw3IEBACiAKICAgICBoc2QtPkluc3RhbmNlLT5EQ1RSTCB8PSBTRE1NQ19EQ1RSTF9GSUZPUlNUOwogCi0gICAgX19TRE1NQ19DTURUUkFOU19FTkFCTEUoIGhzZC0+SW5zdGFuY2UpOworICAgIF9fU0RNTUNfQ01EVFJBTlNfRU5BQkxFKGhzZC0+SW5zdGFuY2UpOwogCiAgICAgaHNkLT5JbnN0YW5jZS0+SURNQUNUUkwgPSBTRE1NQ19FTkFCTEVfSURNQV9ET1VCTEVfQlVGRjA7CiAKQEAgLTE2MCwxNCArMTY0LDE1IEBACiAKICAgICAvKiBSZWFkIE11bHRpIEJsb2NrIGNvbW1hbmQgKi8KICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kUmVhZE11bHRpQmxvY2soaHNkLT5JbnN0YW5jZSwgYWRkKTsKLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICAgIGlmIChlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICAgIHsKICAgICAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfUkVBRFk7CiAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CiAKLSAgICBfX0hBTF9TRF9FTkFCTEVfSVQoaHNkLCAoU0RNTUNfSVRfRENSQ0ZBSUwgfCBTRE1NQ19JVF9EVElNRU9VVCB8IFNETU1DX0lUX1JYT1ZFUlIgfCBTRE1NQ19JVF9EQVRBRU5EIHwgU0RNTUNfSVRfSURNQUJUQykpOworICAgIF9fSEFMX1NEX0VOQUJMRV9JVChoc2QsIChTRE1NQ19JVF9EQ1JDRkFJTCB8IFNETU1DX0lUX0RUSU1FT1VUIHwgU0RNTUNfSVRfUlhPVkVSUiB8IFNETU1DX0lUX0RBVEFFTkQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19JVF9JRE1BQlRDKSk7CiAKICAgICByZXR1cm4gSEFMX09LOwogICB9CkBAIC0xODAsMjIgKzE4NSwyNCBAQAogCiAvKioKICAgKiBAYnJpZWYgIFdyaXRlIGJsb2NrKHMpIHRvIGEgc3BlY2lmaWVkIGFkZHJlc3MgaW4gYSBjYXJkLiBUaGUgdHJhbnNmZXJyZWQgRGF0YSBhcmUgc3RvcmVkIGluIEJ1ZmZlcjAgYW5kIEJ1ZmZlcjEuCi0gICogICAgICAgICBCdWZmZXIwLCBCdWZmZXIxIGFuZCBCdWZmZXJTaXplIG5lZWQgdG8gYmUgY29uZmlndXJlZCBieSBmdW5jdGlvbiBIQUxfU0RFeF9Db25maWdETUFNdWx0aUJ1ZmZlciBiZWZvcmUgY2FsbCB0aGlzIGZ1bmN0aW9uLgorICAqICAgICAgICAgQnVmZmVyMCwgQnVmZmVyMSBhbmQgQnVmZmVyU2l6ZSBuZWVkIHRvIGJlIGNvbmZpZ3VyZWQgYnkgZnVuY3Rpb24gSEFMX1NERXhfQ29uZmlnRE1BTXVsdGlCdWZmZXIgYmVmb3JlCisgICogICBjYWxsIHRoaXMgZnVuY3Rpb24uCiAgICogQHBhcmFtICBoc2Q6IFNEIGhhbmRsZQogICAqIEBwYXJhbSAgQmxvY2tBZGQ6IEJsb2NrIEFkZHJlc3MgZnJvbSB3aGVyZSBkYXRhIGlzIHRvIGJlIHJlYWQKICAgKiBAcGFyYW0gIE51bWJlck9mQmxvY2tzOiBUb3RhbCBudW1iZXIgb2YgYmxvY2tzIHRvIHJlYWQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKLSovCisgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RFeF9Xcml0ZUJsb2Nrc0RNQU11bHRpQnVmZmVyKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgdWludDMyX3QgQmxvY2tBZGQsIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKQogewogICBTRE1NQ19EYXRhSW5pdFR5cGVEZWYgY29uZmlnOwogICB1aW50MzJfdCBlcnJvcnN0YXRlOwotICB1aW50MzJfdCBEbWFCYXNlMF9yZWcsIERtYUJhc2UxX3JlZzsKKyAgdWludDMyX3QgRG1hQmFzZTBfcmVnOworICB1aW50MzJfdCBEbWFCYXNlMV9yZWc7CiAgIHVpbnQzMl90IGFkZCA9IEJsb2NrQWRkOwogCi0gIGlmKGhzZC0+U3RhdGUgPT0gSEFMX1NEX1NUQVRFX1JFQURZKQorICBpZiAoaHNkLT5TdGF0ZSA9PSBIQUxfU0RfU1RBVEVfUkVBRFkpCiAgIHsKLSAgICBpZigoYWRkICsgTnVtYmVyT2ZCbG9ja3MpID4gKGhzZC0+U2RDYXJkLkxvZ0Jsb2NrTmJyKSkKKyAgICBpZiAoKGFkZCArIE51bWJlck9mQmxvY2tzKSA+IChoc2QtPlNkQ2FyZC5Mb2dCbG9ja05icikpCiAgICAgewogICAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX0FERFJfT1VUX09GX1JBTkdFOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTIxNiw3ICsyMjMsNyBAQAogCiAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9CVVNZOwogCi0gICAgaWYoaHNkLT5TZENhcmQuQ2FyZFR5cGUgIT0gQ0FSRF9TREhDX1NEWEMpCisgICAgaWYgKGhzZC0+U2RDYXJkLkNhcmRUeXBlICE9IENBUkRfU0RIQ19TRFhDKQogICAgIHsKICAgICAgIGFkZCAqPSA1MTJVOwogICAgIH0KQEAgLTIzMCw3ICsyMzcsNyBAQAogICAgIGNvbmZpZy5EUFNNICAgICAgICAgID0gU0RNTUNfRFBTTV9ESVNBQkxFOwogICAgICh2b2lkKVNETU1DX0NvbmZpZ0RhdGEoaHNkLT5JbnN0YW5jZSwgJmNvbmZpZyk7CiAKLSAgICBfX1NETU1DX0NNRFRSQU5TX0VOQUJMRSggaHNkLT5JbnN0YW5jZSk7CisgICAgX19TRE1NQ19DTURUUkFOU19FTkFCTEUoaHNkLT5JbnN0YW5jZSk7CiAKICAgICBoc2QtPkluc3RhbmNlLT5JRE1BQ1RSTCA9IFNETU1DX0VOQUJMRV9JRE1BX0RPVUJMRV9CVUZGMDsKIApAQCAtMjM5LDE0ICsyNDYsMTUgQEAKIAogICAgIC8qIFdyaXRlIE11bHRpIEJsb2NrIGNvbW1hbmQgKi8KICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kV3JpdGVNdWx0aUJsb2NrKGhzZC0+SW5zdGFuY2UsIGFkZCk7Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKKyAgICBpZiAoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOwogICAgICAgaHNkLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogCi0gICAgX19IQUxfU0RfRU5BQkxFX0lUKGhzZCwgKFNETU1DX0lUX0RDUkNGQUlMIHwgU0RNTUNfSVRfRFRJTUVPVVQgfCBTRE1NQ19JVF9UWFVOREVSUiB8IFNETU1DX0lUX0RBVEFFTkQgfCBTRE1NQ19JVF9JRE1BQlRDKSk7CisgICAgX19IQUxfU0RfRU5BQkxFX0lUKGhzZCwgKFNETU1DX0lUX0RDUkNGQUlMIHwgU0RNTUNfSVRfRFRJTUVPVVQgfCBTRE1NQ19JVF9UWFVOREVSUiB8IFNETU1DX0lUX0RBVEFFTkQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19JVF9JRE1BQlRDKSk7CiAKICAgICByZXR1cm4gSEFMX09LOwogICB9CkBAIC0yNjgsOSArMjc2LDEwIEBACiAgICogICAgICAgICB0cmFuc2ZlciB1c2UgQlVGRkVSMC4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TREV4X0NoYW5nZURNQUJ1ZmZlcihTRF9IYW5kbGVUeXBlRGVmICpoc2QsIEhBTF9TREV4X0RNQUJ1ZmZlcl9NZW1vcnlUeXBlRGVmIEJ1ZmZlciwgdWludDMyX3QgKnBEYXRhQnVmZmVyKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NERXhfQ2hhbmdlRE1BQnVmZmVyKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgSEFMX1NERXhfRE1BQnVmZmVyX01lbW9yeVR5cGVEZWYgQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwRGF0YUJ1ZmZlcikKIHsKLSAgaWYoQnVmZmVyID09IFNEX0RNQV9CVUZGRVIwKQorICBpZiAoQnVmZmVyID09IFNEX0RNQV9CVUZGRVIwKQogICB7CiAgICAgLyogY2hhbmdlIHRoZSBidWZmZXIwIGFkZHJlc3MgKi8KICAgICBoc2QtPkluc3RhbmNlLT5JRE1BQkFTRTAgPSAodWludDMyX3QpcERhdGFCdWZmZXI7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNXh4X2hhbF9zbWFydGNhcmQuYyBiL1NyYy9zdG0zMmw1eHhfaGFsX3NtYXJ0Y2FyZC5jCmluZGV4IDc1YTY3NzcuLjFlYjY4NTggMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw1eHhfaGFsX3NtYXJ0Y2FyZC5jCisrKyBiL1NyYy9zdG0zMmw1eHhfaGFsX3NtYXJ0Y2FyZC5jCkBAIC0yMzQ1LDcgKzIzNDUsNyBAQAogICB1aW50MzJfdCB0bXByZWc7CiAgIFNNQVJUQ0FSRF9DbG9ja1NvdXJjZVR5cGVEZWYgY2xvY2tzb3VyY2U7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHJldCA9IEhBTF9PSzsKLSAgY29uc3QgdWludDE2X3QgU01BUlRDQVJEUHJlc2NUYWJsZVsxMl0gPSB7MVUsIDJVLCA0VSwgNlUsIDhVLCAxMFUsIDEyVSwgMTZVLCAzMlUsIDY0VSwgMTI4VSwgMjU2VX07CisgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBTTUFSVENBUkRQcmVzY1RhYmxlWzEyXSA9IHsxVSwgMlUsIDRVLCA2VSwgOFUsIDEwVSwgMTJVLCAxNlUsIDMyVSwgNjRVLCAxMjhVLCAyNTZVfTsKICAgdWludDMyX3QgcGNsazsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwpAQCAtMjM3MCw4ICsyMzcwLDcgQEAKICAgICogQ29uZmlndXJlIHRoZSBQYXJpdHkgYW5kIE1vZGU6CiAgICAqICBzZXQgUFMgYml0IGFjY29yZGluZyB0byBoc21hcnRjYXJkLT5Jbml0LlBhcml0eSB2YWx1ZQogICAgKiAgc2V0IFRFIGFuZCBSRSBiaXRzIGFjY29yZGluZyB0byBoc21hcnRjYXJkLT5Jbml0Lk1vZGUgdmFsdWUgKi8KLSAgdG1wcmVnID0gKHVpbnQzMl90KSBoc21hcnRjYXJkLT5Jbml0LlBhcml0eSB8IGhzbWFydGNhcmQtPkluaXQuTW9kZTsKLSAgdG1wcmVnIHw9ICh1aW50MzJfdCkgaHNtYXJ0Y2FyZC0+SW5pdC5Xb3JkTGVuZ3RoIHwgaHNtYXJ0Y2FyZC0+Rmlmb01vZGU7CisgIHRtcHJlZyA9ICgodWludDMyX3QpKGhzbWFydGNhcmQtPkluaXQuUGFyaXR5KSkgfCAoKHVpbnQzMl90KShoc21hcnRjYXJkLT5Jbml0Lk1vZGUpKSB8ICgodWludDMyX3QpKGhzbWFydGNhcmQtPkluaXQuV29yZExlbmd0aCkpOwogICBNT0RJRllfUkVHKGhzbWFydGNhcmQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9GSUVMRFMsIHRtcHJlZyk7CiAKICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBVU0FSVCBDUjIgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNXh4X2hhbF9zbWFydGNhcmRfZXguYyBiL1NyYy9zdG0zMmw1eHhfaGFsX3NtYXJ0Y2FyZF9leC5jCmluZGV4IGM3ZDMxMDAuLjkwMTdkYzUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw1eHhfaGFsX3NtYXJ0Y2FyZF9leC5jCisrKyBiL1NyYy9zdG0zMmw1eHhfaGFsX3NtYXJ0Y2FyZF9leC5jCkBAIC00NTgsOCArNDU4LDggQEAKICAgdWludDhfdCByeF9maWZvX3RocmVzaG9sZDsKICAgdWludDhfdCB0eF9maWZvX3RocmVzaG9sZDsKICAgLyogMiAwVS8xVSBhZGRlZCBmb3IgTUlTUkFDMjAxMi1SdWxlLTE4LjFfYiBhbmQgTUlTUkFDMjAxMi1SdWxlLTE4LjFfZCAqLwotICB1aW50OF90IG51bWVyYXRvcltdICAgPSB7MVUsIDFVLCAxVSwgM1UsIDdVLCAxVSwgMFUsIDBVfTsKLSAgdWludDhfdCBkZW5vbWluYXRvcltdID0gezhVLCA0VSwgMlUsIDRVLCA4VSwgMVUsIDFVLCAxVX07CisgIHN0YXRpYyBjb25zdCB1aW50OF90IG51bWVyYXRvcltdICAgPSB7MVUsIDFVLCAxVSwgM1UsIDdVLCAxVSwgMFUsIDBVfTsKKyAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgZGVub21pbmF0b3JbXSA9IHs4VSwgNFUsIDJVLCA0VSwgOFUsIDFVLCAxVSwgMVV9OwogCiAgIGlmIChoc21hcnRjYXJkLT5GaWZvTW9kZSA9PSBTTUFSVENBUkRfRklGT01PREVfRElTQUJMRSkKICAgewpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDV4eF9oYWxfc21idXNfZXguYyBiL1NyYy9zdG0zMmw1eHhfaGFsX3NtYnVzX2V4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY2MjM3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NyYy9zdG0zMmw1eHhfaGFsX3NtYnVzX2V4LmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBAZmlsZSAgICBzdG0zMmw1eHhfaGFsX3NtYnVzX2V4LmMKKyAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQorICAqIEBicmllZiAgIFNNQlVTIEV4dGVuZGVkIEhBTCBtb2R1bGUgZHJpdmVyLgorICAqICAgICAgICAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcKKyAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgU01CVVMgRXh0ZW5kZWQgcGVyaXBoZXJhbDoKKyAgKiAgICAgICAgICAgKyBFeHRlbmRlZCBmZWF0dXJlcyBmdW5jdGlvbnMKKyAgKgorICBAdmVyYmF0aW0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgICAgICAgICAjIyMjIyBTTUJVUyBwZXJpcGhlcmFsIEV4dGVuZGVkIGZlYXR1cmVzICAjIyMjIworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBbLi5dIENvbXBhcmluZyB0byBvdGhlciBwcmV2aW91cyBkZXZpY2VzLCB0aGUgU01CVVMgaW50ZXJmYWNlIGZvciBTVE0zMkw1eHgKKyAgICAgICBkZXZpY2VzIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBmZWF0dXJlcworCisgICAgICAgKCspIERpc2FibGUgb3IgZW5hYmxlIEZhc3QgTW9kZSBQbHVzCisKKyAgICAgICAgICAgICAgICAgICAgICMjIyMjIEhvdyB0byB1c2UgdGhpcyBkcml2ZXIgIyMjIyMKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgKCMpIENvbmZpZ3VyZSB0aGUgZW5hYmxlIG9yIGRpc2FibGUgb2YgZmFzdCBtb2RlIHBsdXMgZHJpdmluZyBjYXBhYmlsaXR5IHVzaW5nIHRoZSBmdW5jdGlvbnMgOgorICAgICAgICAgICgrKykgSEFMX1NNQlVTRXhfRW5hYmxlRmFzdE1vZGVQbHVzKCkKKyAgICAgICAgICAoKyspIEhBTF9TTUJVU0V4X0Rpc2FibGVGYXN0TW9kZVBsdXMoKQorICBAZW5kdmVyYmF0aW0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQGF0dGVudGlvbgorICAqCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgorICAqCisgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCisgICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQorICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQorICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqLworCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2luY2x1ZGUgInN0bTMybDV4eF9oYWwuaCIKKworLyoqIEBhZGR0b2dyb3VwIFNUTTMyTDV4eF9IQUxfRHJpdmVyCisgICogQHsKKyAgKi8KKworLyoqIEBkZWZncm91cCBTTUJVU0V4IFNNQlVTRXgKKyAgKiBAYnJpZWYgU01CVVMgRXh0ZW5kZWQgSEFMIG1vZHVsZSBkcml2ZXIKKyAgKiBAeworICAqLworCisjaWZkZWYgSEFMX1NNQlVTX01PRFVMRV9FTkFCTEVECisKKy8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcml2YXRlIGRlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJpdmF0ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqIEBkZWZncm91cCBTTUJVU0V4X0V4cG9ydGVkX0Z1bmN0aW9ucyBTTUJVUyBFeHRlbmRlZCBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgKiBAeworICAqLworCisvKiogQGRlZmdyb3VwIFNNQlVTRXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBFeHRlbmRlZCBmZWF0dXJlcyBmdW5jdGlvbnMKKyAgKiBAYnJpZWYgICAgRXh0ZW5kZWQgZmVhdHVyZXMgZnVuY3Rpb25zCisgKgorQHZlcmJhdGltCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAgICAgICAgICAgICAgICMjIyMjIEV4dGVuZGVkIGZlYXR1cmVzIGZ1bmN0aW9ucyAjIyMjIworID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBbLi5dIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG86CisKKyAgICAgICgrKSBDb25maWd1cmUgRmFzdCBNb2RlIFBsdXMKKworQGVuZHZlcmJhdGltCisgICogQHsKKyAgKi8KKworLyoqCisgICogQGJyaWVmIEVuYWJsZSB0aGUgU01CVVMgZmFzdCBtb2RlIHBsdXMgZHJpdmluZyBjYXBhYmlsaXR5LgorICAqIEBwYXJhbSBDb25maWdGYXN0TW9kZVBsdXMgU2VsZWN0cyB0aGUgcGluLgorICAqICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgQHJlZiBTTUJVU0V4X0Zhc3RNb2RlUGx1cyB2YWx1ZXMKKyAgKiBAbm90ZSAgRm9yIEkyQzEsIGZhc3QgbW9kZSBwbHVzIGRyaXZpbmcgY2FwYWJpbGl0eSBjYW4gYmUgZW5hYmxlZCBvbiBhbGwgc2VsZWN0ZWQKKyAgKiAgICAgICAgSTJDMSBwaW5zIHVzaW5nIEkyQ19GQVNUTU9ERVBMVVNfSTJDMSBwYXJhbWV0ZXIgb3IgaW5kZXBlbmRlbnRseQorICAqICAgICAgICBvbiBlYWNoIG9uZSBvZiB0aGUgZm9sbG93aW5nIHBpbnMgUEI2LCBQQjcsIFBCOCBhbmQgUEI5LgorICAqIEBub3RlICBGb3IgcmVtYWluaW5nIEkyQzEgcGlucyAoUEExNCwgUEExNS4uLikgZmFzdCBtb2RlIHBsdXMgZHJpdmluZyBjYXBhYmlsaXR5CisgICogICAgICAgIGNhbiBiZSBlbmFibGVkIG9ubHkgYnkgdXNpbmcgSTJDX0ZBU1RNT0RFUExVU19JMkMxIHBhcmFtZXRlci4KKyAgKiBAbm90ZSAgRm9yIGFsbCBJMkMyIHBpbnMgZmFzdCBtb2RlIHBsdXMgZHJpdmluZyBjYXBhYmlsaXR5IGNhbiBiZSBlbmFibGVkCisgICogICAgICAgIG9ubHkgYnkgdXNpbmcgSTJDX0ZBU1RNT0RFUExVU19JMkMyIHBhcmFtZXRlci4KKyAgKiBAbm90ZSAgRm9yIGFsbCBJMkMzIHBpbnMgZmFzdCBtb2RlIHBsdXMgZHJpdmluZyBjYXBhYmlsaXR5IGNhbiBiZSBlbmFibGVkCisgICogICAgICAgIG9ubHkgYnkgdXNpbmcgSTJDX0ZBU1RNT0RFUExVU19JMkMzIHBhcmFtZXRlci4KKyAgKiBAbm90ZSAgRm9yIGFsbCBJMkM0IHBpbnMgZmFzdCBtb2RlIHBsdXMgZHJpdmluZyBjYXBhYmlsaXR5IGNhbiBiZSBlbmFibGVkCisgICogICAgICAgIG9ubHkgYnkgdXNpbmcgSTJDX0ZBU1RNT0RFUExVU19JMkM0IHBhcmFtZXRlci4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK3ZvaWQgSEFMX1NNQlVTRXhfRW5hYmxlRmFzdE1vZGVQbHVzKHVpbnQzMl90IENvbmZpZ0Zhc3RNb2RlUGx1cykKK3sKKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlciAqLworICBhc3NlcnRfcGFyYW0oSVNfU01CVVNfRkFTVE1PREVQTFVTKENvbmZpZ0Zhc3RNb2RlUGx1cykpOworCisgIC8qIEVuYWJsZSBTWVNDRkcgY2xvY2sgKi8KKyAgX19IQUxfUkNDX1NZU0NGR19DTEtfRU5BQkxFKCk7CisKKyAgLyogRW5hYmxlIGZhc3QgbW9kZSBwbHVzIGRyaXZpbmcgY2FwYWJpbGl0eSBmb3Igc2VsZWN0ZWQgcGluICovCisgIFNFVF9CSVQoU1lTQ0ZHLT5DRkdSMSwgKHVpbnQzMl90KUNvbmZpZ0Zhc3RNb2RlUGx1cyk7Cit9CisKKy8qKgorICAqIEBicmllZiBEaXNhYmxlIHRoZSBTTUJVUyBmYXN0IG1vZGUgcGx1cyBkcml2aW5nIGNhcGFiaWxpdHkuCisgICogQHBhcmFtIENvbmZpZ0Zhc3RNb2RlUGx1cyBTZWxlY3RzIHRoZSBwaW4uCisgICogICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBAcmVmIFNNQlVTRXhfRmFzdE1vZGVQbHVzIHZhbHVlcworICAqIEBub3RlICBGb3IgSTJDMSwgZmFzdCBtb2RlIHBsdXMgZHJpdmluZyBjYXBhYmlsaXR5IGNhbiBiZSBkaXNhYmxlZCBvbiBhbGwgc2VsZWN0ZWQKKyAgKiAgICAgICAgSTJDMSBwaW5zIHVzaW5nIEkyQ19GQVNUTU9ERVBMVVNfSTJDMSBwYXJhbWV0ZXIgb3IgaW5kZXBlbmRlbnRseQorICAqICAgICAgICBvbiBlYWNoIG9uZSBvZiB0aGUgZm9sbG93aW5nIHBpbnMgUEI2LCBQQjcsIFBCOCBhbmQgUEI5LgorICAqIEBub3RlICBGb3IgcmVtYWluaW5nIEkyQzEgcGlucyAoUEExNCwgUEExNS4uLikgZmFzdCBtb2RlIHBsdXMgZHJpdmluZyBjYXBhYmlsaXR5CisgICogICAgICAgIGNhbiBiZSBkaXNhYmxlZCBvbmx5IGJ5IHVzaW5nIEkyQ19GQVNUTU9ERVBMVVNfSTJDMSBwYXJhbWV0ZXIuCisgICogQG5vdGUgIEZvciBhbGwgSTJDMiBwaW5zIGZhc3QgbW9kZSBwbHVzIGRyaXZpbmcgY2FwYWJpbGl0eSBjYW4gYmUgZGlzYWJsZWQKKyAgKiAgICAgICAgb25seSBieSB1c2luZyBJMkNfRkFTVE1PREVQTFVTX0kyQzIgcGFyYW1ldGVyLgorICAqIEBub3RlICBGb3IgYWxsIEkyQzMgcGlucyBmYXN0IG1vZGUgcGx1cyBkcml2aW5nIGNhcGFiaWxpdHkgY2FuIGJlIGRpc2FibGVkCisgICogICAgICAgIG9ubHkgYnkgdXNpbmcgSTJDX0ZBU1RNT0RFUExVU19JMkMzIHBhcmFtZXRlci4KKyAgKiBAbm90ZSAgRm9yIGFsbCBJMkM0IHBpbnMgZmFzdCBtb2RlIHBsdXMgZHJpdmluZyBjYXBhYmlsaXR5IGNhbiBiZSBkaXNhYmxlZAorICAqICAgICAgICBvbmx5IGJ5IHVzaW5nIEkyQ19GQVNUTU9ERVBMVVNfSTJDNCBwYXJhbWV0ZXIuCisgICogQHJldHZhbCBOb25lCisgICovCit2b2lkIEhBTF9TTUJVU0V4X0Rpc2FibGVGYXN0TW9kZVBsdXModWludDMyX3QgQ29uZmlnRmFzdE1vZGVQbHVzKQoreworICAvKiBDaGVjayB0aGUgcGFyYW1ldGVyICovCisgIGFzc2VydF9wYXJhbShJU19TTUJVU19GQVNUTU9ERVBMVVMoQ29uZmlnRmFzdE1vZGVQbHVzKSk7CisKKyAgLyogRW5hYmxlIFNZU0NGRyBjbG9jayAqLworICBfX0hBTF9SQ0NfU1lTQ0ZHX0NMS19FTkFCTEUoKTsKKworICAvKiBEaXNhYmxlIGZhc3QgbW9kZSBwbHVzIGRyaXZpbmcgY2FwYWJpbGl0eSBmb3Igc2VsZWN0ZWQgcGluICovCisgIENMRUFSX0JJVChTWVNDRkctPkNGR1IxLCAodWludDMyX3QpQ29uZmlnRmFzdE1vZGVQbHVzKTsKK30KKworCisvKioKKyAgKiBAfQorICAqLworCisvKioKKyAgKiBAfQorICAqLworCisjZW5kaWYgLyogSEFMX1NNQlVTX01PRFVMRV9FTkFCTEVEICovCisvKioKKyAgKiBAfQorICAqLworCisvKioKKyAgKiBAfQorICAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDV4eF9oYWxfc3BpLmMgYi9TcmMvc3RtMzJsNXh4X2hhbF9zcGkuYwppbmRleCA5ZmQ4OWNhLi40MDZhNmI3IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNXh4X2hhbF9zcGkuYworKysgYi9TcmMvc3RtMzJsNXh4X2hhbF9zcGkuYwpAQCAtMTAwNyw2ICsxMDA3LDkgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUElfUmVjZWl2ZShTUElfSGFuZGxlVHlwZURlZiAqaHNwaSwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpCiB7CisjaWYgKFVTRV9TUElfQ1JDICE9IDBVKQorICBfX0lPIHVpbnQzMl90IHRtcHJlZyA9IDBVOworI2VuZGlmIC8qIFVTRV9TUElfQ1JDICovCiAgIHVpbnQzMl90IHRpY2tzdGFydDsKICAgSEFMX1N0YXR1c1R5cGVEZWYgZXJyb3Jjb2RlID0gSEFMX09LOwogCkBAIC0xMTczLDEyICsxMTc2LDE2IEBACiAgICAgaWYgKGhzcGktPkluaXQuRGF0YVNpemUgPT0gU1BJX0RBVEFTSVpFXzE2QklUKQogICAgIHsKICAgICAgIC8qIFJlYWQgMTZiaXQgQ1JDICovCi0gICAgICBSRUFEX1JFRyhoc3BpLT5JbnN0YW5jZS0+RFIpOworICAgICAgdG1wcmVnID0gUkVBRF9SRUcoaHNwaS0+SW5zdGFuY2UtPkRSKTsKKyAgICAgIC8qIFRvIGF2b2lkIEdDQyB3YXJuaW5nICovCisgICAgICBVTlVTRUQodG1wcmVnKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgIC8qIFJlYWQgOGJpdCBDUkMgKi8KLSAgICAgIFJFQURfUkVHKCooX19JTyB1aW50OF90ICopJmhzcGktPkluc3RhbmNlLT5EUik7CisgICAgICB0bXByZWcgPSBSRUFEX1JFRygqKF9fSU8gdWludDhfdCAqKSZoc3BpLT5JbnN0YW5jZS0+RFIpOworICAgICAgLyogVG8gYXZvaWQgR0NDIHdhcm5pbmcgKi8KKyAgICAgIFVOVVNFRCh0bXByZWcpOwogCiAgICAgICBpZiAoKGhzcGktPkluaXQuRGF0YVNpemUgPT0gU1BJX0RBVEFTSVpFXzhCSVQpICYmIChoc3BpLT5Jbml0LkNSQ0xlbmd0aCA9PSBTUElfQ1JDX0xFTkdUSF8xNkJJVCkpCiAgICAgICB7CkBAIC0xMTkwLDcgKzExOTcsOSBAQAogICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgLyogUmVhZCA4Yml0IENSQyBhZ2FpbiBpbiBjYXNlIG9mIDE2Yml0IENSQyBpbiA4Yml0IERhdGEgbW9kZSAqLwotICAgICAgICBSRUFEX1JFRygqKF9fSU8gdWludDhfdCAqKSZoc3BpLT5JbnN0YW5jZS0+RFIpOworICAgICAgICB0bXByZWcgPSBSRUFEX1JFRygqKF9fSU8gdWludDhfdCAqKSZoc3BpLT5JbnN0YW5jZS0+RFIpOworICAgICAgICAvKiBUbyBhdm9pZCBHQ0Mgd2FybmluZyAqLworICAgICAgICBVTlVTRUQodG1wcmVnKTsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTEyMzUsNiArMTI0NCw5IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU1BJX1RyYW5zbWl0UmVjZWl2ZShTUElfSGFuZGxlVHlwZURlZiAqaHNwaSwgdWludDhfdCAqcFR4RGF0YSwgdWludDhfdCAqcFJ4RGF0YSwgdWludDE2X3QgU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFRpbWVvdXQpCiB7CisjaWYgKFVTRV9TUElfQ1JDICE9IDBVKQorICBfX0lPIHVpbnQzMl90IHRtcHJlZyA9IDBVOworI2VuZGlmIC8qIFVTRV9TUElfQ1JDICovCiAgIHVpbnQxNl90ICAgICAgICAgICAgIGluaXRpYWxfVHhYZmVyQ291bnQ7CiAgIHVpbnQxNl90ICAgICAgICAgICAgIGluaXRpYWxfUnhYZmVyQ291bnQ7CiAgIHVpbnQzMl90ICAgICAgICAgICAgIHRtcF9tb2RlOwpAQCAtMTQ3NiwxMiArMTQ4OCwxNiBAQAogICAgIGlmIChoc3BpLT5Jbml0LkRhdGFTaXplID09IFNQSV9EQVRBU0laRV8xNkJJVCkKICAgICB7CiAgICAgICAvKiBSZWFkIDE2Yml0IENSQyAqLwotICAgICAgUkVBRF9SRUcoaHNwaS0+SW5zdGFuY2UtPkRSKTsKKyAgICAgIHRtcHJlZyA9IFJFQURfUkVHKGhzcGktPkluc3RhbmNlLT5EUik7CisgICAgICAvKiBUbyBhdm9pZCBHQ0Mgd2FybmluZyAqLworICAgICAgVU5VU0VEKHRtcHJlZyk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAgICAgICAvKiBSZWFkIDhiaXQgQ1JDICovCi0gICAgICBSRUFEX1JFRygqKF9fSU8gdWludDhfdCAqKSZoc3BpLT5JbnN0YW5jZS0+RFIpOworICAgICAgdG1wcmVnID0gUkVBRF9SRUcoKihfX0lPIHVpbnQ4X3QgKikmaHNwaS0+SW5zdGFuY2UtPkRSKTsKKyAgICAgIC8qIFRvIGF2b2lkIEdDQyB3YXJuaW5nICovCisgICAgICBVTlVTRUQodG1wcmVnKTsKIAogICAgICAgaWYgKGhzcGktPkluaXQuQ1JDTGVuZ3RoID09IFNQSV9DUkNfTEVOR1RIXzE2QklUKQogICAgICAgewpAQCAtMTQ5Myw3ICsxNTA5LDkgQEAKICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgICAgIC8qIFJlYWQgOGJpdCBDUkMgYWdhaW4gaW4gY2FzZSBvZiAxNmJpdCBDUkMgaW4gOGJpdCBEYXRhIG1vZGUgKi8KLSAgICAgICAgUkVBRF9SRUcoKihfX0lPIHVpbnQ4X3QgKikmaHNwaS0+SW5zdGFuY2UtPkRSKTsKKyAgICAgICAgdG1wcmVnID0gUkVBRF9SRUcoKihfX0lPIHVpbnQ4X3QgKikmaHNwaS0+SW5zdGFuY2UtPkRSKTsKKyAgICAgICAgLyogVG8gYXZvaWQgR0NDIHdhcm5pbmcgKi8KKyAgICAgICAgVU5VU0VEKHRtcHJlZyk7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC0zMDQ4LDYgKzMwNjYsOSBAQAogewogICBTUElfSGFuZGxlVHlwZURlZiAqaHNwaSA9IChTUElfSGFuZGxlVHlwZURlZiAqKSgoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudCk7IC8qIERlcm9nYXRpb24gTUlTUkFDMjAxMi1SdWxlLTExLjUgKi8KICAgdWludDMyX3QgdGlja3N0YXJ0OworI2lmIChVU0VfU1BJX0NSQyAhPSAwVSkKKyAgX19JTyB1aW50MzJfdCB0bXByZWcgPSAwVTsKKyNlbmRpZiAvKiBVU0VfU1BJX0NSQyAqLwogCiAgIC8qIEluaXQgdGlja3N0YXJ0IGZvciB0aW1lb3V0IG1hbmFnZW1lbnQqLwogICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwpAQCAtMzA3MiwxMiArMzA5MywxNiBAQAogICAgICAgaWYgKGhzcGktPkluaXQuRGF0YVNpemUgPiBTUElfREFUQVNJWkVfOEJJVCkKICAgICAgIHsKICAgICAgICAgLyogUmVhZCAxNmJpdCBDUkMgKi8KLSAgICAgICAgUkVBRF9SRUcoaHNwaS0+SW5zdGFuY2UtPkRSKTsKKyAgICAgICAgdG1wcmVnID0gUkVBRF9SRUcoaHNwaS0+SW5zdGFuY2UtPkRSKTsKKyAgICAgICAgLyogVG8gYXZvaWQgR0NDIHdhcm5pbmcgKi8KKyAgICAgICAgVU5VU0VEKHRtcHJlZyk7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7CiAgICAgICAgIC8qIFJlYWQgOGJpdCBDUkMgKi8KLSAgICAgICAgUkVBRF9SRUcoKihfX0lPIHVpbnQ4X3QgKikmaHNwaS0+SW5zdGFuY2UtPkRSKTsKKyAgICAgICAgdG1wcmVnID0gUkVBRF9SRUcoKihfX0lPIHVpbnQ4X3QgKikmaHNwaS0+SW5zdGFuY2UtPkRSKTsKKyAgICAgICAgLyogVG8gYXZvaWQgR0NDIHdhcm5pbmcgKi8KKyAgICAgICAgVU5VU0VEKHRtcHJlZyk7CiAKICAgICAgICAgaWYgKGhzcGktPkluaXQuQ1JDTGVuZ3RoID09IFNQSV9DUkNfTEVOR1RIXzE2QklUKQogICAgICAgICB7CkBAIC0zMDg3LDcgKzMxMTIsOSBAQAogICAgICAgICAgICAgU0VUX0JJVChoc3BpLT5FcnJvckNvZGUsIEhBTF9TUElfRVJST1JfQ1JDKTsKICAgICAgICAgICB9CiAgICAgICAgICAgLyogUmVhZCA4Yml0IENSQyBhZ2FpbiBpbiBjYXNlIG9mIDE2Yml0IENSQyBpbiA4Yml0IERhdGEgbW9kZSAqLwotICAgICAgICAgIFJFQURfUkVHKCooX19JTyB1aW50OF90ICopJmhzcGktPkluc3RhbmNlLT5EUik7CisgICAgICAgICAgdG1wcmVnID0gUkVBRF9SRUcoKihfX0lPIHVpbnQ4X3QgKikmaHNwaS0+SW5zdGFuY2UtPkRSKTsKKyAgICAgICAgICAvKiBUbyBhdm9pZCBHQ0Mgd2FybmluZyAqLworICAgICAgICAgIFVOVVNFRCh0bXByZWcpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtMzE1Miw2ICszMTc5LDkgQEAKIHsKICAgU1BJX0hhbmRsZVR5cGVEZWYgKmhzcGkgPSAoU1BJX0hhbmRsZVR5cGVEZWYgKikoKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQpOyAvKiBEZXJvZ2F0aW9uIE1JU1JBQzIwMTItUnVsZS0xMS41ICovCiAgIHVpbnQzMl90IHRpY2tzdGFydDsKKyNpZiAoVVNFX1NQSV9DUkMgIT0gMFUpCisgIF9fSU8gdWludDMyX3QgdG1wcmVnID0gMFU7CisjZW5kaWYgLyogVVNFX1NQSV9DUkMgKi8KIAogICAvKiBJbml0IHRpY2tzdGFydCBmb3IgdGltZW91dCBtYW5hZ2VtZW50Ki8KICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKQEAgLTMxNzUsNyArMzIwNSw5IEBACiAgICAgICAgICAgU0VUX0JJVChoc3BpLT5FcnJvckNvZGUsIEhBTF9TUElfRVJST1JfQ1JDKTsKICAgICAgICAgfQogICAgICAgICAvKiBSZWFkIENSQyB0byBGbHVzaCBEUiBhbmQgUlhORSBmbGFnICovCi0gICAgICAgIFJFQURfUkVHKCooX19JTyB1aW50OF90ICopJmhzcGktPkluc3RhbmNlLT5EUik7CisgICAgICAgIHRtcHJlZyA9IFJFQURfUkVHKCooX19JTyB1aW50OF90ICopJmhzcGktPkluc3RhbmNlLT5EUik7CisgICAgICAgIC8qIFRvIGF2b2lkIEdDQyB3YXJuaW5nICovCisgICAgICAgIFVOVVNFRCh0bXByZWcpOwogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewpAQCAtMzE4NSw3ICszMjE3LDkgQEAKICAgICAgICAgICBTRVRfQklUKGhzcGktPkVycm9yQ29kZSwgSEFMX1NQSV9FUlJPUl9DUkMpOwogICAgICAgICB9CiAgICAgICAgIC8qIFJlYWQgQ1JDIHRvIEZsdXNoIERSIGFuZCBSWE5FIGZsYWcgKi8KLSAgICAgICAgUkVBRF9SRUcoaHNwaS0+SW5zdGFuY2UtPkRSKTsKKyAgICAgICAgdG1wcmVnID0gUkVBRF9SRUcoaHNwaS0+SW5zdGFuY2UtPkRSKTsKKyAgICAgICAgLyogVG8gYXZvaWQgR0NDIHdhcm5pbmcgKi8KKyAgICAgICAgVU5VU0VEKHRtcHJlZyk7CiAgICAgICB9CiAgICAgfQogI2VuZGlmIC8qIFVTRV9TUElfQ1JDICovCkBAIC0zNTIwLDggKzM1NTQsMTIgQEAKICAgKi8KIHN0YXRpYyB2b2lkIFNQSV8ybGluZXNSeElTUl84QklUQ1JDKHN0cnVjdCBfX1NQSV9IYW5kbGVUeXBlRGVmICpoc3BpKQogeworICBfX0lPIHVpbnQzMl90IHRtcHJlZyA9IDBVOworCiAgIC8qIFJlYWQgOGJpdCBDUkMgdG8gZmx1c2ggRGF0YSBSZWdpc3RlciAqLwotICBSRUFEX1JFRygqKF9fSU8gdWludDhfdCAqKSZoc3BpLT5JbnN0YW5jZS0+RFIpOworICB0bXByZWcgPSBSRUFEX1JFRygqKF9fSU8gdWludDhfdCAqKSZoc3BpLT5JbnN0YW5jZS0+RFIpOworICAvKiBUbyBhdm9pZCBHQ0Mgd2FybmluZyAqLworICBVTlVTRUQodG1wcmVnKTsKIAogICBoc3BpLT5DUkNTaXplLS07CiAKQEAgLTM2MjgsOCArMzY2NiwxMiBAQAogICAqLwogc3RhdGljIHZvaWQgU1BJXzJsaW5lc1J4SVNSXzE2QklUQ1JDKHN0cnVjdCBfX1NQSV9IYW5kbGVUeXBlRGVmICpoc3BpKQogeworICBfX0lPIHVpbnQzMl90IHRtcHJlZyA9IDBVOworCiAgIC8qIFJlYWQgMTZiaXQgQ1JDIHRvIGZsdXNoIERhdGEgUmVnaXN0ZXIgKi8KLSAgUkVBRF9SRUcoaHNwaS0+SW5zdGFuY2UtPkRSKTsKKyAgdG1wcmVnID0gUkVBRF9SRUcoaHNwaS0+SW5zdGFuY2UtPkRSKTsKKyAgLyogVG8gYXZvaWQgR0NDIHdhcm5pbmcgKi8KKyAgVU5VU0VEKHRtcHJlZyk7ICAKIAogICAvKiBEaXNhYmxlIFJYTkUgaW50ZXJydXB0ICovCiAgIF9fSEFMX1NQSV9ESVNBQkxFX0lUKGhzcGksIFNQSV9JVF9SWE5FKTsKQEAgLTM2ODQsOCArMzcyNiwxMiBAQAogICAqLwogc3RhdGljIHZvaWQgU1BJX1J4SVNSXzhCSVRDUkMoc3RydWN0IF9fU1BJX0hhbmRsZVR5cGVEZWYgKmhzcGkpCiB7CisgIF9fSU8gdWludDMyX3QgdG1wcmVnID0gMFU7CisKICAgLyogUmVhZCA4Yml0IENSQyB0byBmbHVzaCBEYXRhIFJlZ2lzdGVyICovCi0gIFJFQURfUkVHKCooX19JTyB1aW50OF90ICopJmhzcGktPkluc3RhbmNlLT5EUik7CisgIHRtcHJlZyA9IFJFQURfUkVHKCooX19JTyB1aW50OF90ICopJmhzcGktPkluc3RhbmNlLT5EUik7CisgIC8qIFRvIGF2b2lkIEdDQyB3YXJuaW5nICovCisgIFVOVVNFRCh0bXByZWcpOwogCiAgIGhzcGktPkNSQ1NpemUtLTsKIApAQCAtMzczOCw4ICszNzg0LDEyIEBACiAgICovCiBzdGF0aWMgdm9pZCBTUElfUnhJU1JfMTZCSVRDUkMoc3RydWN0IF9fU1BJX0hhbmRsZVR5cGVEZWYgKmhzcGkpCiB7CisgIF9fSU8gdWludDMyX3QgdG1wcmVnID0gMFU7CisKICAgLyogUmVhZCAxNmJpdCBDUkMgdG8gZmx1c2ggRGF0YSBSZWdpc3RlciAqLwotICBSRUFEX1JFRyhoc3BpLT5JbnN0YW5jZS0+RFIpOworICB0bXByZWcgPSBSRUFEX1JFRyhoc3BpLT5JbnN0YW5jZS0+RFIpOworICAvKiBUbyBhdm9pZCBHQ0Mgd2FybmluZyAqLworICBVTlVTRUQodG1wcmVnKTsKIAogICAvKiBEaXNhYmxlIFJYTkUgYW5kIEVSUiBpbnRlcnJ1cHQgKi8KICAgX19IQUxfU1BJX0RJU0FCTEVfSVQoaHNwaSwgKFNQSV9JVF9SWE5FIHwgU1BJX0lUX0VSUikpOwpAQCAtMzkxNCw2ICszOTY0LDcgQEAKIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBTUElfV2FpdEZpZm9TdGF0ZVVudGlsVGltZW91dChTUElfSGFuZGxlVHlwZURlZiAqaHNwaSwgdWludDMyX3QgRmlmbywgdWludDMyX3QgU3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCwgdWludDMyX3QgVGlja3N0YXJ0KQogeworICBfX0lPIHVpbnQzMl90IHRtcHJlZzsKICAgX19JTyB1aW50MzJfdCBjb3VudDsKICAgdWludDMyX3QgdG1wX3RpbWVvdXQ7CiAgIHVpbnQzMl90IHRtcF90aWNrc3RhcnQ7CkBAIC0zOTI5LDggKzM5ODAsMTAgQEAKICAgewogICAgIGlmICgoRmlmbyA9PSBTUElfU1JfRlJMVkwpICYmIChTdGF0ZSA9PSBTUElfRlJMVkxfRU1QVFkpKQogICAgIHsKLSAgICAgIC8qIFJlYWQgOGJpdCBDUkMgdG8gZmx1c2ggRGF0YSBSZWdpc3RlciAqLwotICAgICAgUkVBRF9SRUcoKigoX19JTyB1aW50OF90ICopJmhzcGktPkluc3RhbmNlLT5EUikpOworICAgICAgLyogRmx1c2ggRGF0YSBSZWdpc3RlciBieSBhIGJsYW5rIHJlYWQgKi8KKyAgICAgIHRtcHJlZyA9IFJFQURfUkVHKCooKF9fSU8gdWludDhfdCAqKSZoc3BpLT5JbnN0YW5jZS0+RFIpKTsKKyAgICAgIC8qIFRvIGF2b2lkIEdDQyB3YXJuaW5nICovCisgICAgICBVTlVTRUQodG1wcmVnKTsKICAgICB9CiAKICAgICBpZiAoVGltZW91dCAhPSBIQUxfTUFYX0RFTEFZKQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDV4eF9oYWxfc3JhbS5jIGIvU3JjL3N0bTMybDV4eF9oYWxfc3JhbS5jCmluZGV4IGIzY2E1MjAuLmQ2YTEwZGIgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw1eHhfaGFsX3NyYW0uYworKysgYi9TcmMvc3RtMzJsNXh4X2hhbF9zcmFtLmMKQEAgLTEyNyw5ICsxMjcsNiBAQAogICAqIEB7CiAgICovCiAKLS8qKgotICBAY29uZCAwCi0gICovCiAvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xMzgsOSArMTM1LDYgQEAKIHN0YXRpYyB2b2lkIFNSQU1fRE1BQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiBzdGF0aWMgdm9pZCBTUkFNX0RNQUNwbHRQcm90KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKIHN0YXRpYyB2b2lkIFNSQU1fRE1BRXJyb3IoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwotLyoqCi0gIEBlbmRjb25kCi0gICovCiAKIC8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTE5Nyw3ICsxOTEsNyBAQAogI2Vsc2UKICAgICAvKiBJbml0aWFsaXplIHRoZSBsb3cgbGV2ZWwgaGFyZHdhcmUgKE1TUCkgKi8KICAgICBIQUxfU1JBTV9Nc3BJbml0KGhzcmFtKTsKLSNlbmRpZgorI2VuZGlmIC8qIFVTRV9IQUxfU1JBTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KICAgfQogCiAgIC8qIEluaXRpYWxpemUgU1JBTSBjb250cm9sIEludGVyZmFjZSAqLwpAQCAtMjA4LDcgKzIwMiw3IEBACiAKICAgLyogSW5pdGlhbGl6ZSBTUkFNIGV4dGVuZGVkIG1vZGUgdGltaW5nIEludGVyZmFjZSAqLwogICAodm9pZClGTUNfTk9SU1JBTV9FeHRlbmRlZF9UaW1pbmdfSW5pdChoc3JhbS0+RXh0ZW5kZWQsIEV4dFRpbWluZywgaHNyYW0tPkluaXQuTlNCYW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoc3JhbS0+SW5pdC5FeHRlbmRlZE1vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoc3JhbS0+SW5pdC5FeHRlbmRlZE1vZGUpOwogCiAgIC8qIEVuYWJsZSB0aGUgTk9SU1JBTSBkZXZpY2UgKi8KICAgX19GTUNfTk9SU1JBTV9FTkFCTEUoaHNyYW0tPkluc3RhbmNlLCBoc3JhbS0+SW5pdC5OU0JhbmspOwpAQCAtMjM4LDcgKzIzMiw3IEBACiAjZWxzZQogICAvKiBEZS1Jbml0aWFsaXplIHRoZSBsb3cgbGV2ZWwgaGFyZHdhcmUgKE1TUCkgKi8KICAgSEFMX1NSQU1fTXNwRGVJbml0KGhzcmFtKTsKLSNlbmRpZgorI2VuZGlmIC8qIFVTRV9IQUxfU1JBTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAogICAvKiBDb25maWd1cmUgdGhlIFNSQU0gcmVnaXN0ZXJzIHdpdGggdGhlaXIgcmVzZXQgdmFsdWVzICovCiAgICh2b2lkKUZNQ19OT1JTUkFNX0RlSW5pdChoc3JhbS0+SW5zdGFuY2UsIGhzcmFtLT5FeHRlbmRlZCwgaHNyYW0tPkluaXQuTlNCYW5rKTsKQEAgLTY4Niw3ICs2ODAsNyBAQAogICB9CiAgIGVsc2UKICAgewotICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICB9CiAKICAgcmV0dXJuIHN0YXR1czsKQEAgLTcyNyw3ICs3MjEsNyBAQAogICB9CiAgIGVsc2UKICAgewotICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICB9CiAKICAgcmV0dXJuIHN0YXR1czsKQEAgLTkwOSw3ICs5MDMsNyBAQAogICBfX0hBTF9VTkxPQ0soaHNyYW0pOwogICByZXR1cm4gc3RhdHVzOwogfQotI2VuZGlmCisjZW5kaWYgLyogVVNFX0hBTF9TUkFNX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCiAvKioKICAgKiBAfQpAQCAtMTAzNyw5ICsxMDMxLDYgQEAKICAgKi8KIAogLyoqCi0gIEBjb25kIDAKLSAgKi8KLS8qKgogICAqIEBicmllZiAgRE1BIFNSQU0gcHJvY2VzcyBjb21wbGV0ZSBjYWxsYmFjay4KICAgKiBAcGFyYW0gIGhkbWEgOiBETUEgaGFuZGxlCiAgICogQHJldHZhbCBOb25lCkBAIC0xMDU4LDcgKzEwNDksNyBAQAogICBoc3JhbS0+RG1hWGZlckNwbHRDYWxsYmFjayhoZG1hKTsKICNlbHNlCiAgIEhBTF9TUkFNX0RNQV9YZmVyQ3BsdENhbGxiYWNrKGhkbWEpOwotI2VuZGlmCisjZW5kaWYgLyogVVNFX0hBTF9TUkFNX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogfQogCiAvKioKQEAgLTEwODAsNyArMTA3MSw3IEBACiAgIGhzcmFtLT5EbWFYZmVyQ3BsdENhbGxiYWNrKGhkbWEpOwogI2Vsc2UKICAgSEFMX1NSQU1fRE1BX1hmZXJDcGx0Q2FsbGJhY2soaGRtYSk7Ci0jZW5kaWYKKyNlbmRpZiAvKiBVU0VfSEFMX1NSQU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCiB9CiAKIC8qKgpAQCAtMTEwMiwxMSArMTA5Myw4IEBACiAgIGhzcmFtLT5EbWFYZmVyRXJyb3JDYWxsYmFjayhoZG1hKTsKICNlbHNlCiAgIEhBTF9TUkFNX0RNQV9YZmVyRXJyb3JDYWxsYmFjayhoZG1hKTsKLSNlbmRpZgorI2VuZGlmIC8qIFVTRV9IQUxfU1JBTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIH0KLS8qKgotICBAZW5kY29uZAotICAqLwogCiAvKioKICAgKiBAfQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDV4eF9oYWxfdGltLmMgYi9TcmMvc3RtMzJsNXh4X2hhbF90aW0uYwppbmRleCBmZWFiYmE0Li4zNmQ3MmM2IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNXh4X2hhbF90aW0uYworKysgYi9TcmMvc3RtMzJsNXh4X2hhbF90aW0uYwpAQCAtNTA0LDcgKzUwNCw3IEBACiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKLSAgCisKICAgLyogRGlzYWJsZSB0aGUgVElNIFVwZGF0ZSBpbnRlcnJ1cHQgKi8KICAgX19IQUxfVElNX0RJU0FCTEVfSVQoaHRpbSwgVElNX0lUX1VQREFURSk7CiAKQEAgLTU2Myw2ICs1NjMsNyBAQAogICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9VUERBVEVdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkFSUiwgTGVuZ3RoKSAhPSBIQUxfT0spCiAgIHsKKyAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCkBAIC0xMDc5LDYgKzEwODAsNyBAQAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMSwgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KIApAQCAtMTA5OSw2ICsxMTAxLDcgQEAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjIsIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAKQEAgLTExMTksNiArMTEyMiw3IEBACiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IzLCBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKKyAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQogICAgICAgLyogRW5hYmxlIHRoZSBUSU0gQ2FwdHVyZS9Db21wYXJlIDMgRE1BIHJlcXVlc3QgKi8KQEAgLTExMzgsNiArMTE0Miw3IEBACiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1I0LCBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKKyAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQogICAgICAgLyogRW5hYmxlIHRoZSBUSU0gQ2FwdHVyZS9Db21wYXJlIDQgRE1BIHJlcXVlc3QgKi8KQEAgLTE3MTUsNiArMTcyMCw3IEBACiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IxLCBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKKyAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQogCkBAIC0xNzM1LDYgKzE3NDEsNyBAQAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMiwgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIC8qIEVuYWJsZSB0aGUgVElNIENhcHR1cmUvQ29tcGFyZSAyIERNQSByZXF1ZXN0ICovCkBAIC0xNzU0LDYgKzE3NjEsNyBAQAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMywgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIC8qIEVuYWJsZSB0aGUgVElNIE91dHB1dCBDYXB0dXJlL0NvbXBhcmUgMyByZXF1ZXN0ICovCkBAIC0xNzczLDYgKzE3ODEsNyBAQAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSNCwgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIC8qIEVuYWJsZSB0aGUgVElNIENhcHR1cmUvQ29tcGFyZSA0IERNQSByZXF1ZXN0ICovCkBAIC0yMDY4LDcgKzIwNzcsNyBAQAogCiAgIC8qIENoZWNrIHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLwogICBpZiAoKGNoYW5uZWxfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQotICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQogICB7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQpAQCAtMjE1MCw3ICsyMTU5LDcgQEAKIAogICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KICAgaWYgKChjaGFubmVsX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKLSAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKICAgewogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KQEAgLTIzMDIsMTIgKzIzMTEsMTIgQEAKIAogICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCiAgIGlmICgoY2hhbm5lbF9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkKLSAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpKQorICAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkpCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KICAgZWxzZSBpZiAoKGNoYW5uZWxfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQotICAgICAgICAmJiAoY29tcGxlbWVudGFyeV9jaGFubmVsX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgICAgICAgICAgICYmIChjb21wbGVtZW50YXJ5X2NoYW5uZWxfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKICAgewogICAgIGlmICgocERhdGEgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKICAgICB7CkBAIC0yMzI0LDYgKzIzMzMsMjMgQEAKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKKyAgLyogRW5hYmxlIHRoZSBJbnB1dCBDYXB0dXJlIGNoYW5uZWwgKi8KKyAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRU5BQkxFKTsKKworICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KKyAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgIHsKKyAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICB7CisgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICB9CisKICAgc3dpdGNoIChDaGFubmVsKQogICB7CiAgICAgY2FzZSBUSU1fQ0hBTk5FTF8xOgpAQCAtMjMzOCw2ICsyMzY0LDcgQEAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IxLCAodWludDMyX3QpcERhdGEsIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICAvKiBFbmFibGUgdGhlIFRJTSBDYXB0dXJlL0NvbXBhcmUgMSBETUEgcmVxdWVzdCAqLwpAQCAtMjM1Nyw2ICsyMzg0LDcgQEAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IyLCAodWludDMyX3QpcERhdGEsIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICAvKiBFbmFibGUgdGhlIFRJTSBDYXB0dXJlL0NvbXBhcmUgMiAgRE1BIHJlcXVlc3QgKi8KQEAgLTIzNzYsNiArMjQwNCw3IEBACiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMywgKHVpbnQzMl90KXBEYXRhLCBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKKyAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQogICAgICAgLyogRW5hYmxlIHRoZSBUSU0gQ2FwdHVyZS9Db21wYXJlIDMgIERNQSByZXF1ZXN0ICovCkBAIC0yMzk1LDYgKzI0MjQsNyBAQAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjQsICh1aW50MzJfdClwRGF0YSwgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIC8qIEVuYWJsZSB0aGUgVElNIENhcHR1cmUvQ29tcGFyZSA0ICBETUEgcmVxdWVzdCAqLwpAQCAtMjQwNiwyMyArMjQzNiw2IEBACiAgICAgICBicmVhazsKICAgfQogCi0gIC8qIEVuYWJsZSB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVsICovCi0gIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4X0VOQUJMRSk7Ci0KLSAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCi0gIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQotICB7Ci0gICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOwotICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCi0gICAgewotICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKLSAgICB9Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKLSAgfQotCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTI2NzcsMTEgKzI2OTAsMTIgQEAKIAogLyoqCiAgICogQGJyaWVmICBTdGFydHMgdGhlIFRJTSBPbmUgUHVsc2Ugc2lnbmFsIGdlbmVyYXRpb24uCisgICogQG5vdGUgVGhvdWdoIE91dHB1dENoYW5uZWwgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgYW5kIGlnbm9yZWQgYnkgdGhlIGZ1bmN0aW9uCisgICogICAgICAgIGl0IGhhcyBiZWVuIGtlcHQgdG8gYXZvaWQgSEFMX1RJTSBBUEkgY29tcGF0aWJpbGl0eSBicmVhay4KKyAgKiBAbm90ZSBUaGUgcHVsc2Ugb3V0cHV0IGNoYW5uZWwgaXMgZGV0ZXJtaW5lZCB3aGVuIGNhbGxpbmcgCisgICogICAgICAgQHJlZiBIQUxfVElNX09uZVB1bHNlX0NvbmZpZ0NoYW5uZWwoKS4gCiAgICogQHBhcmFtICBodGltIFRJTSBPbmUgUHVsc2UgaGFuZGxlCi0gICogQHBhcmFtICBPdXRwdXRDaGFubmVsIFRJTSBDaGFubmVscyB0byBiZSBlbmFibGVkCi0gICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMTogVElNIENoYW5uZWwgMSBzZWxlY3RlZAotICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8yOiBUSU0gQ2hhbm5lbCAyIHNlbGVjdGVkCisgICogQHBhcmFtICBPdXRwdXRDaGFubmVsIFNlZSBub3RlIGFib3ZlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX09uZVB1bHNlX1N0YXJ0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBPdXRwdXRDaGFubmVsKQpAQCAtMjY5Niw5ICsyNzEwLDkgQEAKIAogICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCiAgIGlmICgoY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKLSAgIHx8IChjaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQotICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKLSAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICAgICAgfHwgKGNoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC0yNzEzLDcgKzI3MjcsNyBAQAogICAgIChpbiB0aGUgT1BNIE1vZGUgdGhlIHR3byBwb3NzaWJsZSBjaGFubmVscyB0aGF0IGNhbiBiZSB1c2VkIGFyZSBUSU1fQ0hBTk5FTF8xIGFuZCBUSU1fQ0hBTk5FTF8yKQogICAgIGlmIFRJTV9DSEFOTkVMXzEgaXMgdXNlZCBhcyBvdXRwdXQsIHRoZSBUSU1fQ0hBTk5FTF8yIHdpbGwgYmUgdXNlZCBhcyBpbnB1dCBhbmQKICAgICBpZiBUSU1fQ0hBTk5FTF8xIGlzIHVzZWQgYXMgaW5wdXQsIHRoZSBUSU1fQ0hBTk5FTF8yIHdpbGwgYmUgdXNlZCBhcyBvdXRwdXQKLSAgICBpbiBhbGwgY29tYmluYXRpb25zLCB0aGUgVElNX0NIQU5ORUxfMSBhbmQgVElNX0NIQU5ORUxfMiBzaG91bGQgYmUgZW5hYmxlZCB0b2dldGhlcgorICAgIHdoYXRldmVyIHRoZSBjb21iaW5hdGlvbiwgdGhlIFRJTV9DSEFOTkVMXzEgYW5kIFRJTV9DSEFOTkVMXzIgc2hvdWxkIGJlIGVuYWJsZWQgdG9nZXRoZXIKIAogICAgIE5vIG5lZWQgdG8gZW5hYmxlIHRoZSBjb3VudGVyLCBpdCdzIGVuYWJsZWQgYXV0b21hdGljYWxseSBieSBoYXJkd2FyZQogICAgICh0aGUgY291bnRlciBzdGFydHMgaW4gcmVzcG9uc2UgdG8gYSBzdGltdWx1cyBhbmQgZ2VuZXJhdGUgYSBwdWxzZSAqLwpAQCAtMjczMywxMSArMjc0NywxMiBAQAogCiAvKioKICAgKiBAYnJpZWYgIFN0b3BzIHRoZSBUSU0gT25lIFB1bHNlIHNpZ25hbCBnZW5lcmF0aW9uLgorICAqIEBub3RlIFRob3VnaCBPdXRwdXRDaGFubmVsIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIGFuZCBpZ25vcmVkIGJ5IHRoZSBmdW5jdGlvbgorICAqICAgICAgICBpdCBoYXMgYmVlbiBrZXB0IHRvIGF2b2lkIEhBTF9USU0gQVBJIGNvbXBhdGliaWxpdHkgYnJlYWsuCisgICogQG5vdGUgVGhlIHB1bHNlIG91dHB1dCBjaGFubmVsIGlzIGRldGVybWluZWQgd2hlbiBjYWxsaW5nIAorICAqICAgICAgIEByZWYgSEFMX1RJTV9PbmVQdWxzZV9Db25maWdDaGFubmVsKCkuIAogICAqIEBwYXJhbSAgaHRpbSBUSU0gT25lIFB1bHNlIGhhbmRsZQotICAqIEBwYXJhbSAgT3V0cHV0Q2hhbm5lbCBUSU0gQ2hhbm5lbHMgdG8gYmUgZGlzYWJsZQotICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzE6IFRJTSBDaGFubmVsIDEgc2VsZWN0ZWQKLSAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMjogVElNIENoYW5uZWwgMiBzZWxlY3RlZAorICAqIEBwYXJhbSAgT3V0cHV0Q2hhbm5lbCBTZWUgbm90ZSBhYm92ZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9PbmVQdWxzZV9TdG9wKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBPdXRwdXRDaGFubmVsKQpAQCAtMjc0OSw3ICsyNzY0LDcgQEAKICAgKGluIHRoZSBPUE0gTW9kZSB0aGUgdHdvIHBvc3NpYmxlIGNoYW5uZWxzIHRoYXQgY2FuIGJlIHVzZWQgYXJlIFRJTV9DSEFOTkVMXzEgYW5kIFRJTV9DSEFOTkVMXzIpCiAgIGlmIFRJTV9DSEFOTkVMXzEgaXMgdXNlZCBhcyBvdXRwdXQsIHRoZSBUSU1fQ0hBTk5FTF8yIHdpbGwgYmUgdXNlZCBhcyBpbnB1dCBhbmQKICAgaWYgVElNX0NIQU5ORUxfMSBpcyB1c2VkIGFzIGlucHV0LCB0aGUgVElNX0NIQU5ORUxfMiB3aWxsIGJlIHVzZWQgYXMgb3V0cHV0Ci0gIGluIGFsbCBjb21iaW5hdGlvbnMsIHRoZSBUSU1fQ0hBTk5FTF8xIGFuZCBUSU1fQ0hBTk5FTF8yIHNob3VsZCBiZSBkaXNhYmxlZCB0b2dldGhlciAqLworICB3aGF0ZXZlciB0aGUgY29tYmluYXRpb24sIHRoZSBUSU1fQ0hBTk5FTF8xIGFuZCBUSU1fQ0hBTk5FTF8yIHNob3VsZCBiZSBkaXNhYmxlZCB0b2dldGhlciAqLwogCiAgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBUSU1fQ0hBTk5FTF8xLCBUSU1fQ0N4X0RJU0FCTEUpOwogICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgVElNX0NIQU5ORUxfMiwgVElNX0NDeF9ESVNBQkxFKTsKQEAgLTI3NzUsMTEgKzI3OTAsMTIgQEAKIAogLyoqCiAgICogQGJyaWVmICBTdGFydHMgdGhlIFRJTSBPbmUgUHVsc2Ugc2lnbmFsIGdlbmVyYXRpb24gaW4gaW50ZXJydXB0IG1vZGUuCisgICogQG5vdGUgVGhvdWdoIE91dHB1dENoYW5uZWwgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgYW5kIGlnbm9yZWQgYnkgdGhlIGZ1bmN0aW9uCisgICogICAgICAgIGl0IGhhcyBiZWVuIGtlcHQgdG8gYXZvaWQgSEFMX1RJTSBBUEkgY29tcGF0aWJpbGl0eSBicmVhay4KKyAgKiBAbm90ZSBUaGUgcHVsc2Ugb3V0cHV0IGNoYW5uZWwgaXMgZGV0ZXJtaW5lZCB3aGVuIGNhbGxpbmcgCisgICogICAgICAgQHJlZiBIQUxfVElNX09uZVB1bHNlX0NvbmZpZ0NoYW5uZWwoKS4gCiAgICogQHBhcmFtICBodGltIFRJTSBPbmUgUHVsc2UgaGFuZGxlCi0gICogQHBhcmFtICBPdXRwdXRDaGFubmVsIFRJTSBDaGFubmVscyB0byBiZSBlbmFibGVkCi0gICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMTogVElNIENoYW5uZWwgMSBzZWxlY3RlZAotICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8yOiBUSU0gQ2hhbm5lbCAyIHNlbGVjdGVkCisgICogQHBhcmFtICBPdXRwdXRDaGFubmVsIFNlZSBub3RlIGFib3ZlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX09uZVB1bHNlX1N0YXJ0X0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBPdXRwdXRDaGFubmVsKQpAQCAtMjc5NCw5ICsyODEwLDkgQEAKIAogICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCiAgIGlmICgoY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKLSAgIHx8IChjaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQotICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKLSAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICAgICAgfHwgKGNoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC0yODExLDcgKzI4MjcsNyBAQAogICAgIChpbiB0aGUgT1BNIE1vZGUgdGhlIHR3byBwb3NzaWJsZSBjaGFubmVscyB0aGF0IGNhbiBiZSB1c2VkIGFyZSBUSU1fQ0hBTk5FTF8xIGFuZCBUSU1fQ0hBTk5FTF8yKQogICAgIGlmIFRJTV9DSEFOTkVMXzEgaXMgdXNlZCBhcyBvdXRwdXQsIHRoZSBUSU1fQ0hBTk5FTF8yIHdpbGwgYmUgdXNlZCBhcyBpbnB1dCBhbmQKICAgICBpZiBUSU1fQ0hBTk5FTF8xIGlzIHVzZWQgYXMgaW5wdXQsIHRoZSBUSU1fQ0hBTk5FTF8yIHdpbGwgYmUgdXNlZCBhcyBvdXRwdXQKLSAgICBpbiBhbGwgY29tYmluYXRpb25zLCB0aGUgVElNX0NIQU5ORUxfMSBhbmQgVElNX0NIQU5ORUxfMiBzaG91bGQgYmUgZW5hYmxlZCB0b2dldGhlcgorICAgIHdoYXRldmVyIHRoZSBjb21iaW5hdGlvbiwgdGhlIFRJTV9DSEFOTkVMXzEgYW5kIFRJTV9DSEFOTkVMXzIgc2hvdWxkIGJlIGVuYWJsZWQgdG9nZXRoZXIKIAogICAgIE5vIG5lZWQgdG8gZW5hYmxlIHRoZSBjb3VudGVyLCBpdCdzIGVuYWJsZWQgYXV0b21hdGljYWxseSBieSBoYXJkd2FyZQogICAgICh0aGUgY291bnRlciBzdGFydHMgaW4gcmVzcG9uc2UgdG8gYSBzdGltdWx1cyBhbmQgZ2VuZXJhdGUgYSBwdWxzZSAqLwpAQCAtMjgzNywxMSArMjg1MywxMiBAQAogCiAvKioKICAgKiBAYnJpZWYgIFN0b3BzIHRoZSBUSU0gT25lIFB1bHNlIHNpZ25hbCBnZW5lcmF0aW9uIGluIGludGVycnVwdCBtb2RlLgorICAqIEBub3RlIFRob3VnaCBPdXRwdXRDaGFubmVsIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIGFuZCBpZ25vcmVkIGJ5IHRoZSBmdW5jdGlvbgorICAqICAgICAgICBpdCBoYXMgYmVlbiBrZXB0IHRvIGF2b2lkIEhBTF9USU0gQVBJIGNvbXBhdGliaWxpdHkgYnJlYWsuCisgICogQG5vdGUgVGhlIHB1bHNlIG91dHB1dCBjaGFubmVsIGlzIGRldGVybWluZWQgd2hlbiBjYWxsaW5nIAorICAqICAgICAgIEByZWYgSEFMX1RJTV9PbmVQdWxzZV9Db25maWdDaGFubmVsKCkuIAogICAqIEBwYXJhbSAgaHRpbSBUSU0gT25lIFB1bHNlIGhhbmRsZQotICAqIEBwYXJhbSAgT3V0cHV0Q2hhbm5lbCBUSU0gQ2hhbm5lbHMgdG8gYmUgZW5hYmxlZAotICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzE6IFRJTSBDaGFubmVsIDEgc2VsZWN0ZWQKLSAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMjogVElNIENoYW5uZWwgMiBzZWxlY3RlZAorICAqIEBwYXJhbSAgT3V0cHV0Q2hhbm5lbCBTZWUgbm90ZSBhYm92ZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9PbmVQdWxzZV9TdG9wX0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBPdXRwdXRDaGFubmVsKQpAQCAtMjg1OSw3ICsyODc2LDcgQEAKICAgKGluIHRoZSBPUE0gTW9kZSB0aGUgdHdvIHBvc3NpYmxlIGNoYW5uZWxzIHRoYXQgY2FuIGJlIHVzZWQgYXJlIFRJTV9DSEFOTkVMXzEgYW5kIFRJTV9DSEFOTkVMXzIpCiAgIGlmIFRJTV9DSEFOTkVMXzEgaXMgdXNlZCBhcyBvdXRwdXQsIHRoZSBUSU1fQ0hBTk5FTF8yIHdpbGwgYmUgdXNlZCBhcyBpbnB1dCBhbmQKICAgaWYgVElNX0NIQU5ORUxfMSBpcyB1c2VkIGFzIGlucHV0LCB0aGUgVElNX0NIQU5ORUxfMiB3aWxsIGJlIHVzZWQgYXMgb3V0cHV0Ci0gIGluIGFsbCBjb21iaW5hdGlvbnMsIHRoZSBUSU1fQ0hBTk5FTF8xIGFuZCBUSU1fQ0hBTk5FTF8yIHNob3VsZCBiZSBkaXNhYmxlZCB0b2dldGhlciAqLworICB3aGF0ZXZlciB0aGUgY29tYmluYXRpb24sIHRoZSBUSU1fQ0hBTk5FTF8xIGFuZCBUSU1fQ0hBTk5FTF8yIHNob3VsZCBiZSBkaXNhYmxlZCB0b2dldGhlciAqLwogICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgVElNX0NIQU5ORUxfMSwgVElNX0NDeF9ESVNBQkxFKTsKICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIFRJTV9DSEFOTkVMXzIsIFRJTV9DQ3hfRElTQUJMRSk7CiAKQEAgLTMxMzEsNyArMzE0OCw3IEBACiAgIGlmIChDaGFubmVsID09IFRJTV9DSEFOTkVMXzEpCiAgIHsKICAgICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCi0gICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICAgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KQEAgLTMxNDQsNyArMzE2MSw3IEBACiAgIGVsc2UgaWYgKENoYW5uZWwgPT0gVElNX0NIQU5ORUxfMikKICAgewogICAgIGlmICgoY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKLSAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgICAgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQpAQCAtMzE1Nyw5ICszMTc0LDkgQEAKICAgZWxzZQogICB7CiAgICAgaWYgKChjaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQotICAgICB8fCAoY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKLSAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKLSAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgICAgICAgIHx8IChjaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KQEAgLTMyNDksNyArMzI2Niw3IEBACiAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CiAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKICAgfQotICBlbHNlIAorICBlbHNlCiAgIHsKICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKQEAgLTMyODUsNyArMzMwMiw3IEBACiAgIGlmIChDaGFubmVsID09IFRJTV9DSEFOTkVMXzEpCiAgIHsKICAgICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCi0gICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICAgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KQEAgLTMyOTgsNyArMzMxNSw3IEBACiAgIGVsc2UgaWYgKENoYW5uZWwgPT0gVElNX0NIQU5ORUxfMikKICAgewogICAgIGlmICgoY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKLSAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgICAgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQpAQCAtMzMxMSw5ICszMzI4LDkgQEAKICAgZWxzZQogICB7CiAgICAgaWYgKChjaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQotICAgICB8fCAoY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKLSAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKLSAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgICAgICAgIHx8IChjaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KQEAgLTM0MTEsNyArMzQyOCw3IEBACiAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CiAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKICAgfQotICBlbHNlIAorICBlbHNlCiAgIHsKICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKQEAgLTM0NTEsMTIgKzM0NjgsMTIgQEAKICAgaWYgKENoYW5uZWwgPT0gVElNX0NIQU5ORUxfMSkKICAgewogICAgIGlmICgoY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKQotICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpKQorICAgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfQlVTWTsKICAgICB9CiAgICAgZWxzZSBpZiAoKGNoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCi0gICAgICAgICAgJiYgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgICAgICAgICAgICAgJiYgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCiAgICAgewogICAgICAgaWYgKChwRGF0YTEgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKICAgICAgIHsKQEAgLTM0NzYsMTIgKzM0OTMsMTIgQEAKICAgZWxzZSBpZiAoQ2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8yKQogICB7CiAgICAgaWYgKChjaGFubmVsXzJfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpCi0gICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkpCisgICAgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9CVVNZOwogICAgIH0KICAgICBlbHNlIGlmICgoY2hhbm5lbF8yX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKLSAgICAgICAgICAmJiAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgICAgICAgICAgICAmJiAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKICAgICB7CiAgICAgICBpZiAoKHBEYXRhMiA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQogICAgICAgewpAQCAtMzUwMSwxNiArMzUxOCwxNiBAQAogICBlbHNlCiAgIHsKICAgICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkKLSAgICAgfHwgKGNoYW5uZWxfMl9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkKLSAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKQotICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpKQorICAgICAgICB8fCAoY2hhbm5lbF8yX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKQorICAgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpCisgICAgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9CVVNZOwogICAgIH0KICAgICBlbHNlIGlmICgoY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKLSAgICAgICAgICAmJiAoY2hhbm5lbF8yX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKLSAgICAgICAgICAmJiAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQotICAgICAgICAgICYmIChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICAgICAgICAgICAgICYmIChjaGFubmVsXzJfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgICAgICAgICYmIChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICAgICAgICAgJiYgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCiAgICAgewogICAgICAgaWYgKCgoKHBEYXRhMSA9PSBOVUxMKSB8fCAocERhdGEyID09IE5VTEwpKSkgJiYgKExlbmd0aCA+IDBVKSkKICAgICAgIHsKQEAgLTM1NDQsNiArMzU2MSw3IEBACiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMSwgKHVpbnQzMl90KXBEYXRhMSwgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIC8qIEVuYWJsZSB0aGUgVElNIElucHV0IENhcHR1cmUgRE1BIHJlcXVlc3QgKi8KQEAgLTM1NjgsNiArMzU4Niw3IEBACiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMiwgKHVpbnQzMl90KXBEYXRhMiwgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIC8qIEVuYWJsZSB0aGUgVElNIElucHV0IENhcHR1cmUgIERNQSByZXF1ZXN0ICovCkBAIC0zNTkzLDYgKzM2MTIsNyBAQAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjEsICh1aW50MzJfdClwRGF0YTEsIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAKQEAgLTM2MDYsNiArMzYyNiw3IEBACiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMiwgKHVpbnQzMl90KXBEYXRhMiwgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwpAQCAtMzY4NCw3ICszNzA1LDcgQEAKICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwogICB9Ci0gIGVsc2UgCisgIGVsc2UKICAgewogICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwogICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwpAQCAtNDUyMyw4ICs0NTQ0LDkgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX1VQREFURV0sICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsIERhdGFMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIGJyZWFrOwpAQCAtNDU0MCw4ICs0NTYyLDkgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0sICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsIERhdGFMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIGJyZWFrOwpAQCAtNDU1Nyw4ICs0NTgwLDkgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0sICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsIERhdGFMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIGJyZWFrOwpAQCAtNDU3NCw4ICs0NTk4LDkgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10sICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsIERhdGFMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIGJyZWFrOwpAQCAtNDU5MSw4ICs0NjE2LDkgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0sICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsIERhdGFMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIGJyZWFrOwpAQCAtNDYwOCw4ICs0NjM0LDkgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NPTU1VVEFUSU9OXSwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsIERhdGFMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKKyAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQogICAgICAgYnJlYWs7CkBAIC00NjI1LDggKzQ2NTIsOSBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfVFJJR0dFUl0sICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsIERhdGFMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIGJyZWFrOwpAQCAtNDg0Niw4ICs0ODc0LDkgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX1VQREFURV0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIGJyZWFrOwpAQCAtNDg2Myw4ICs0ODkyLDkgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIGJyZWFrOwpAQCAtNDg4MCw4ICs0OTEwLDkgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIGJyZWFrOwpAQCAtNDg5Nyw4ICs0OTI4LDkgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIGJyZWFrOwpAQCAtNDkxNCw4ICs0OTQ2LDkgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIGJyZWFrOwpAQCAtNDkzMSw4ICs0OTY0LDkgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NPTU1VVEFUSU9OXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKKyAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQogICAgICAgYnJlYWs7CkBAIC00OTQ4LDggKzQ5ODIsOSBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfVFJJR0dFUl0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIGJyZWFrOwpAQCAtNjMzNywxMiArNjM3MiwxMiBAQAogSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIEhBTF9USU1fR2V0Q2hhbm5lbFN0YXRlKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCAgdWludDMyX3QgQ2hhbm5lbCkKIHsKICAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfc3RhdGU7Ci0gIAorCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKICAgY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKTsKLSAgICAKKwogICByZXR1cm4gY2hhbm5lbF9zdGF0ZTsKIH0KIApAQCAtNjM1NSw3ICs2MzkwLDcgQEAKIHsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFCVVJTVF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwotICAKKwogICByZXR1cm4gaHRpbS0+RE1BQnVyc3RTdGF0ZTsKIH0KIApAQCAtNjQxOSwxNCArNjQ1NCwxNCBAQAogICAqIEBwYXJhbSAgaGRtYSBwb2ludGVyIHRvIERNQSBoYW5kbGUuCiAgICogQHJldHZhbCBOb25lCiAgICovCi12b2lkIFRJTV9ETUFEZWxheVB1bHNlQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkKK3N0YXRpYyB2b2lkIFRJTV9ETUFEZWxheVB1bHNlQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkKIHsKICAgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0gPSAoVElNX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKIAogICBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzE7Ci0gICAgCisKICAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCiAgICAgewogICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CkBAIC02NDM1LDcgKzY0NzAsNyBAQAogICBlbHNlIGlmIChoZG1hID09IGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdKQogICB7CiAgICAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfMjsKLSAgICAKKwogICAgIGlmIChoZG1hLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkKICAgICB7CiAgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKQEAgLTY0NDQsNyArNjQ3OSw3IEBACiAgIGVsc2UgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10pCiAgIHsKICAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8zOwotICAgIAorCiAgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQogICAgIHsKICAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8zLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwpAQCAtNjQ1Myw3ICs2NDg4LDcgQEAKICAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzQ7Ci0gICAgCisKICAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCiAgICAgewogICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzQsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CkBAIC02NTI0LDcgKzY1NTksNyBAQAogICBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzE7Ci0gICAgCisKICAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCiAgICAgewogICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CkBAIC02NTM0LDcgKzY1NjksNyBAQAogICBlbHNlIGlmIChoZG1hID09IGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdKQogICB7CiAgICAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfMjsKLSAgICAKKwogICAgIGlmIChoZG1hLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkKICAgICB7CiAgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKQEAgLTY1NDQsNyArNjU3OSw3IEBACiAgIGVsc2UgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10pCiAgIHsKICAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8zOwotICAgIAorCiAgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQogICAgIHsKICAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8zLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwpAQCAtNjU1NCw3ICs2NTg5LDcgQEAKICAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzQ7Ci0gICAgCisKICAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCiAgICAgewogICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzQsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNXh4X2hhbF90aW1fZXguYyBiL1NyYy9zdG0zMmw1eHhfaGFsX3RpbV9leC5jCmluZGV4IGY5OGI2NGIuLmUxN2U1NWEgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw1eHhfaGFsX3RpbV9leC5jCisrKyBiL1NyYy9zdG0zMmw1eHhfaGFsX3RpbV9leC5jCkBAIC0zMzMsOSArMzMzLDkgQEAKIAogICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCiAgIGlmICgoY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKLSAgIHx8IChjaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQotICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKLSAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICAgICAgfHwgKGNoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC0zNDUsNyArMzQ1LDcgQEAKICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOwogICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7Ci0gIAorCiAgIC8qIEVuYWJsZSB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVsIDEKICAgKGluIHRoZSBIYWxsIFNlbnNvciBJbnRlcmZhY2UgdGhlIHRocmVlIHBvc3NpYmxlIGNoYW5uZWxzIHRoYXQgY2FuIGJlIHVzZWQgYXJlIFRJTV9DSEFOTkVMXzEsIFRJTV9DSEFOTkVMXzIgYW5kIFRJTV9DSEFOTkVMXzMpICovCiAgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBUSU1fQ0hBTk5FTF8xLCBUSU1fQ0N4X0VOQUJMRSk7CkBAIC00MTMsOSArNDEzLDkgQEAKIAogICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCiAgIGlmICgoY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKLSAgIHx8IChjaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQotICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKLSAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICAgICAgfHwgKGNoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC00OTksMTIgKzQ5OSwxMiBAQAogCiAgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KICAgaWYgKChjaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpCi0gICAgfHwoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpKQorICAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKSkKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQogICBlbHNlIGlmICgoY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKLSAgICAgICAgJiYgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgICAgICAgICAgICYmIChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQogICB7CiAgICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQogICAgIHsKQEAgLTUzNCw2ICs1MzQsNyBAQAogICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsIGZvciBDYXB0dXJlIDEqLwogICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMSwgKHVpbnQzMl90KXBEYXRhLCBMZW5ndGgpICE9IEhBTF9PSykKICAgeworICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAgIC8qIEVuYWJsZSB0aGUgY2FwdHVyZSBjb21wYXJlIDEgSW50ZXJydXB0ICovCkBAIC02MzUsNyArNjM2LDcgQEAKICAgewogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KLSAgCisKICAgLyogU2V0IHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCiAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKIApAQCAtODk5LDYgKzkwMCw3IEBACiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IxLCBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKKyAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQogICAgICAgLyogRW5hYmxlIHRoZSBUSU0gT3V0cHV0IENvbXBhcmUgRE1BIHJlcXVlc3QgKi8KQEAgLTkxOCw2ICs5MjAsNyBAQAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMiwgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIC8qIEVuYWJsZSB0aGUgVElNIE91dHB1dCBDb21wYXJlIERNQSByZXF1ZXN0ICovCkBAIC05MzcsNiArOTQwLDcgQEAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjMsIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICAvKiBFbmFibGUgdGhlIFRJTSBPdXRwdXQgQ29tcGFyZSBETUEgcmVxdWVzdCAqLwpAQCAtMTM1Myw2ICsxMzU3LDcgQEAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjEsIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICAvKiBFbmFibGUgdGhlIFRJTSBDYXB0dXJlL0NvbXBhcmUgMSBETUEgcmVxdWVzdCAqLwpAQCAtMTM3Miw2ICsxMzc3LDcgQEAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjIsIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICAvKiBFbmFibGUgdGhlIFRJTSBDYXB0dXJlL0NvbXBhcmUgMiBETUEgcmVxdWVzdCAqLwpAQCAtMTM5MSw2ICsxMzk3LDcgQEAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjMsIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICAvKiBFbmFibGUgdGhlIFRJTSBDYXB0dXJlL0NvbXBhcmUgMyBETUEgcmVxdWVzdCAqLwpAQCAtMTUxMyw4ICsxNTIwLDEwIEBACiAvKioKICAgKiBAYnJpZWYgIFN0YXJ0cyB0aGUgVElNIE9uZSBQdWxzZSBzaWduYWwgZ2VuZXJhdGlvbiBvbiB0aGUgY29tcGxlbWVudGFyeQogICAqICAgICAgICAgb3V0cHV0LgorICAqIEBub3RlIE91dHB1dENoYW5uZWwgbXVzdCBtYXRjaCB0aGUgcHVsc2Ugb3V0cHV0IGNoYW5uZWwgY2hvc2VuIHdoZW4gY2FsbGluZyAKKyAgKiAgICAgICBAcmVmIEhBTF9USU1fT25lUHVsc2VfQ29uZmlnQ2hhbm5lbCgpLiAKICAgKiBAcGFyYW0gIGh0aW0gVElNIE9uZSBQdWxzZSBoYW5kbGUKLSAgKiBAcGFyYW0gIE91dHB1dENoYW5uZWwgVElNIENoYW5uZWwgdG8gYmUgZW5hYmxlZAorICAqIEBwYXJhbSAgT3V0cHV0Q2hhbm5lbCBwdWxzZSBvdXRwdXQgY2hhbm5lbCB0byBlbmFibGUKICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8xOiBUSU0gQ2hhbm5lbCAxIHNlbGVjdGVkCiAgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzI6IFRJTSBDaGFubmVsIDIgc2VsZWN0ZWQKQEAgLTE1MjMsMjIgKzE1MzIsMjggQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9PbmVQdWxzZU5fU3RhcnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IE91dHB1dENoYW5uZWwpCiB7CiAgIHVpbnQzMl90IGlucHV0X2NoYW5uZWwgPSAoT3V0cHV0Q2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8xKSA/IFRJTV9DSEFOTkVMXzIgOiBUSU1fQ0hBTk5FTF8xOwotICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgaW5wdXRfY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBpbnB1dF9jaGFubmVsKTsKLSAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIG91dHB1dF9jaGFubmVsX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgT3V0cHV0Q2hhbm5lbCk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWE5fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIE91dHB1dENoYW5uZWwpKTsKIAogICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCi0gIGlmICgob3V0cHV0X2NoYW5uZWxfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQotICAgfHwgKGlucHV0X2NoYW5uZWxfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgIGlmICgoY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgIHx8IChjaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQogICB7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCiAgIC8qIFNldCB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCi0gIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIE91dHB1dENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKLSAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIGlucHV0X2NoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CiAKICAgLyogRW5hYmxlIHRoZSBjb21wbGVtZW50YXJ5IE9uZSBQdWxzZSBvdXRwdXQgY2hhbm5lbCBhbmQgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbCAqLwogICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIE91dHB1dENoYW5uZWwsIFRJTV9DQ3hOX0VOQUJMRSk7CkBAIC0xNTU0LDggKzE1NjksMTAgQEAKIC8qKgogICAqIEBicmllZiAgU3RvcHMgdGhlIFRJTSBPbmUgUHVsc2Ugc2lnbmFsIGdlbmVyYXRpb24gb24gdGhlIGNvbXBsZW1lbnRhcnkKICAgKiAgICAgICAgIG91dHB1dC4KKyAgKiBAbm90ZSBPdXRwdXRDaGFubmVsIG11c3QgbWF0Y2ggdGhlIHB1bHNlIG91dHB1dCBjaGFubmVsIGNob3NlbiB3aGVuIGNhbGxpbmcgCisgICogICAgICAgQHJlZiBIQUxfVElNX09uZVB1bHNlX0NvbmZpZ0NoYW5uZWwoKS4gCiAgICogQHBhcmFtICBodGltIFRJTSBPbmUgUHVsc2UgaGFuZGxlCi0gICogQHBhcmFtICBPdXRwdXRDaGFubmVsIFRJTSBDaGFubmVsIHRvIGJlIGRpc2FibGVkCisgICogQHBhcmFtICBPdXRwdXRDaGFubmVsIHB1bHNlIG91dHB1dCBjaGFubmVsIHRvIGRpc2FibGUKICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8xOiBUSU0gQ2hhbm5lbCAxIHNlbGVjdGVkCiAgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzI6IFRJTSBDaGFubmVsIDIgc2VsZWN0ZWQKQEAgLTE1NzksOCArMTU5NiwxMCBAQAogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAogICAvKiBTZXQgdGhlIFRJTSAgY2hhbm5lbHMgc3RhdGUgKi8KLSAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgT3V0cHV0Q2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKLSAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIGlucHV0X2NoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CkBAIC0xNTg5LDggKzE2MDgsMTAgQEAKIC8qKgogICAqIEBicmllZiAgU3RhcnRzIHRoZSBUSU0gT25lIFB1bHNlIHNpZ25hbCBnZW5lcmF0aW9uIGluIGludGVycnVwdCBtb2RlIG9uIHRoZQogICAqICAgICAgICAgY29tcGxlbWVudGFyeSBjaGFubmVsLgorICAqIEBub3RlIE91dHB1dENoYW5uZWwgbXVzdCBtYXRjaCB0aGUgcHVsc2Ugb3V0cHV0IGNoYW5uZWwgY2hvc2VuIHdoZW4gY2FsbGluZyAKKyAgKiAgICAgICBAcmVmIEhBTF9USU1fT25lUHVsc2VfQ29uZmlnQ2hhbm5lbCgpLiAKICAgKiBAcGFyYW0gIGh0aW0gVElNIE9uZSBQdWxzZSBoYW5kbGUKLSAgKiBAcGFyYW0gIE91dHB1dENoYW5uZWwgVElNIENoYW5uZWwgdG8gYmUgZW5hYmxlZAorICAqIEBwYXJhbSAgT3V0cHV0Q2hhbm5lbCBwdWxzZSBvdXRwdXQgY2hhbm5lbCB0byBlbmFibGUKICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8xOiBUSU0gQ2hhbm5lbCAxIHNlbGVjdGVkCiAgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzI6IFRJTSBDaGFubmVsIDIgc2VsZWN0ZWQKQEAgLTE1OTksMjIgKzE2MjAsMjggQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9PbmVQdWxzZU5fU3RhcnRfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IE91dHB1dENoYW5uZWwpCiB7CiAgIHVpbnQzMl90IGlucHV0X2NoYW5uZWwgPSAoT3V0cHV0Q2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8xKSA/IFRJTV9DSEFOTkVMXzIgOiBUSU1fQ0hBTk5FTF8xOwotICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgaW5wdXRfY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBpbnB1dF9jaGFubmVsKTsKLSAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIG91dHB1dF9jaGFubmVsX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgT3V0cHV0Q2hhbm5lbCk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWE5fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIE91dHB1dENoYW5uZWwpKTsKIAogICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCi0gIGlmICgob3V0cHV0X2NoYW5uZWxfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQotICAgfHwgKGlucHV0X2NoYW5uZWxfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgIGlmICgoY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgIHx8IChjaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQogICB7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCiAgIC8qIFNldCB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCi0gIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIE91dHB1dENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKLSAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIGlucHV0X2NoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CiAKICAgLyogRW5hYmxlIHRoZSBUSU0gQ2FwdHVyZS9Db21wYXJlIDEgaW50ZXJydXB0ICovCiAgIF9fSEFMX1RJTV9FTkFCTEVfSVQoaHRpbSwgVElNX0lUX0NDMSk7CkBAIC0xNjM2LDggKzE2NjMsMTAgQEAKIC8qKgogICAqIEBicmllZiAgU3RvcHMgdGhlIFRJTSBPbmUgUHVsc2Ugc2lnbmFsIGdlbmVyYXRpb24gaW4gaW50ZXJydXB0IG1vZGUgb24gdGhlCiAgICogICAgICAgICBjb21wbGVtZW50YXJ5IGNoYW5uZWwuCisgICogQG5vdGUgT3V0cHV0Q2hhbm5lbCBtdXN0IG1hdGNoIHRoZSBwdWxzZSBvdXRwdXQgY2hhbm5lbCBjaG9zZW4gd2hlbiBjYWxsaW5nIAorICAqICAgICAgIEByZWYgSEFMX1RJTV9PbmVQdWxzZV9Db25maWdDaGFubmVsKCkuIAogICAqIEBwYXJhbSAgaHRpbSBUSU0gT25lIFB1bHNlIGhhbmRsZQotICAqIEBwYXJhbSAgT3V0cHV0Q2hhbm5lbCBUSU0gQ2hhbm5lbCB0byBiZSBkaXNhYmxlZAorICAqIEBwYXJhbSAgT3V0cHV0Q2hhbm5lbCBwdWxzZSBvdXRwdXQgY2hhbm5lbCB0byBkaXNhYmxlCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMTogVElNIENoYW5uZWwgMSBzZWxlY3RlZAogICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8yOiBUSU0gQ2hhbm5lbCAyIHNlbGVjdGVkCkBAIC0xNjY3LDggKzE2OTYsMTAgQEAKICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKICAgLyogU2V0IHRoZSBUSU0gIGNoYW5uZWxzIHN0YXRlICovCi0gIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIE91dHB1dENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7Ci0gIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBpbnB1dF9jaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwpAQCAtMjM5OSwxNSArMjQzMCwxNyBAQAogICAgICAgICAvKiBCcmVhayBpbnB1dCBCUksgaXMgcmUtYXJtZWQgYXV0b21hdGljYWxseSBieSBoYXJkd2FyZS4gUG9sbCB0byBjaGVjayB3aGV0aGVyIGZhdWx0IGNvbmRpdGlvbiBkaXNhcHBlYXJlZCAqLwogICAgICAgICAvKiBJbml0IHRpY2tzdGFydCBmb3IgdGltZW91dCBtYW5hZ2VtZW50ICovCiAgICAgICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7Ci0gICAgICAgIGRvCisgICAgICAgIHdoaWxlIChSRUFEX0JJVChodGltLT5JbnN0YW5jZS0+QkRUUiwgVElNX0JEVFJfQktEU1JNKSAhPSAwVUwpCiAgICAgICAgIHsKLSAgICAgICAgICBpZiAoUkVBRF9CSVQoaHRpbS0+SW5zdGFuY2UtPkJEVFIsIFRJTV9CRFRSX0JLRFNSTSkgIT0gVElNX0JEVFJfQktEU1JNKQorICAgICAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBUSU1fQlJFQUtJTlBVVF9SRUFSTV9USU1FT1VUKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBIQUxfT0s7CisgICAgICAgICAgICAvKiBOZXcgY2hlY2sgdG8gYXZvaWQgZmFsc2UgdGltZW91dCBkZXRlY3Rpb24gaW4gY2FzZSBvZiBwcmVlbXB0aW9uICovCisgICAgICAgICAgICBpZiAoUkVBRF9CSVQoaHRpbS0+SW5zdGFuY2UtPkJEVFIsIFRJTV9CRFRSX0JLRFNSTSkgIT0gMFVMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgICAgICB9CiAgICAgICAgICAgfQotICAgICAgICB9IHdoaWxlICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPD0gVElNX0JSRUFLSU5QVVRfUkVBUk1fVElNRU9VVCk7Ci0KLSAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICB9CiAgICAgICB9CiAgICAgICBicmVhazsKICAgICB9CkBAIC0yNDIwLDE1ICsyNDUzLDE3IEBACiAgICAgICAgIC8qIEJyZWFrIGlucHV0IEJSSzIgaXMgcmUtYXJtZWQgYXV0b21hdGljYWxseSBieSBoYXJkd2FyZS4gUG9sbCB0byBjaGVjayB3aGV0aGVyIGZhdWx0IGNvbmRpdGlvbiBkaXNhcHBlYXJlZCAqLwogICAgICAgICAvKiBJbml0IHRpY2tzdGFydCBmb3IgdGltZW91dCBtYW5hZ2VtZW50ICovCiAgICAgICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7Ci0gICAgICAgIGRvCisgICAgICAgIHdoaWxlIChSRUFEX0JJVChodGltLT5JbnN0YW5jZS0+QkRUUiwgVElNX0JEVFJfQksyRFNSTSkgIT0gMFVMKQogICAgICAgICB7Ci0gICAgICAgICAgaWYgKFJFQURfQklUKGh0aW0tPkluc3RhbmNlLT5CRFRSLCBUSU1fQkRUUl9CSzJEU1JNKSAhPSBUSU1fQkRUUl9CSzJEU1JNKQorICAgICAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBUSU1fQlJFQUtJTlBVVF9SRUFSTV9USU1FT1VUKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBIQUxfT0s7CisgICAgICAgICAgICAvKiBOZXcgY2hlY2sgdG8gYXZvaWQgZmFsc2UgdGltZW91dCBkZXRlY3Rpb24gaW4gY2FzZSBvZiBwcmVlbXB0aW9uICovCisgICAgICAgICAgICBpZiAoUkVBRF9CSVQoaHRpbS0+SW5zdGFuY2UtPkJEVFIsIFRJTV9CRFRSX0JLMkRTUk0pICE9IDBVTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAgICAgfQogICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpIDw9IFRJTV9CUkVBS0lOUFVUX1JFQVJNX1RJTUVPVVQpOwotCi0gICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgfQogICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjU1OSwxMiArMjU5NCwxMiBAQAogSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIEhBTF9USU1FeF9HZXRDaGFubmVsTlN0YXRlKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCAgdWludDMyX3QgQ2hhbm5lbE4pCiB7CiAgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsX3N0YXRlOwotICAKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWE5fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWxOKSk7CiAKICAgY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWxOKTsKLSAgICAKKwogICByZXR1cm4gY2hhbm5lbF9zdGF0ZTsKIH0KIC8qKgpAQCAtMjYzMSw3ICsyNjY2LDcgQEAKICAgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0pCiAgIHsKICAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8xOwotICAgIAorCiAgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQogICAgIHsKICAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CkBAIC0yNjQwLDcgKzI2NzUsNyBAQAogICBlbHNlIGlmIChoZG1hID09IGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdKQogICB7CiAgICAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfMjsKLSAgICAKKwogICAgIGlmIChoZG1hLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkKICAgICB7CiAgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwpAQCAtMjY0OSw3ICsyNjg0LDcgQEAKICAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzM7Ci0gICAgCisKICAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCiAgICAgewogICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMywgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKQEAgLTI2NTgsNyArMjY5Myw3IEBACiAgIGVsc2UgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0pCiAgIHsKICAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF80OwotICAgIAorCiAgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQogICAgIHsKICAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzQsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CkBAIC0yNjgzLDcgKzI3MTgsNyBAQAogICAqIEBwYXJhbSAgaGRtYSBwb2ludGVyIHRvIERNQSBoYW5kbGUuCiAgICogQHJldHZhbCBOb25lCiAgICovCi12b2lkIFRJTV9ETUFFcnJvckNDeE4oRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpCitzdGF0aWMgdm9pZCBUSU1fRE1BRXJyb3JDQ3hOKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQogewogICBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSA9IChUSU1fSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OwogCkBAIC0yNzA2LDEzICsyNzQxLDEzIEBACiAgIHsKICAgICAvKiBub3RoaW5nIHRvIGRvICovCiAgIH0KLSAgCisKICNpZiAoVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIGh0aW0tPkVycm9yQ2FsbGJhY2soaHRpbSk7CiAjZWxzZQogICBIQUxfVElNX0Vycm9yQ2FsbGJhY2soaHRpbSk7CiAjZW5kaWYgLyogVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCi0gIAorCiAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMX0NMRUFSRUQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw1eHhfaGFsX3RpbWViYXNlX3J0Y193YWtldXBfdGVtcGxhdGUuYyBiL1NyYy9zdG0zMmw1eHhfaGFsX3RpbWViYXNlX3J0Y193YWtldXBfdGVtcGxhdGUuYwppbmRleCBjYzdhMDMzLi45ZTQ4N2YyIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNXh4X2hhbF90aW1lYmFzZV9ydGNfd2FrZXVwX3RlbXBsYXRlLmMKKysrIGIvU3JjL3N0bTMybDV4eF9oYWxfdGltZWJhc2VfcnRjX3dha2V1cF90ZW1wbGF0ZS5jCkBAIC03LDggKzcsOCBAQAogICAqICAgICAgICAgIFRoaXMgZmlsZSBvdmVycmlkZXMgdGhlIG5hdGl2ZSBIQUwgdGltZSBiYXNlIGZ1bmN0aW9ucyAoZGVmaW5lZCBhcyB3ZWFrKQogICAqICAgICAgICAgIHRvIHVzZSB0aGUgUlRDIFdBS0VVUCBmb3IgdGhlIHRpbWUgYmFzZSBnZW5lcmF0aW9uOgogICAqICAgICAgICAgICArIEluaXRpYWxpemVzIHRoZSBSVEMgcGVyaXBoZXJhbCBhbmQgY29uZmlndXJlcyB0aGUgd2FrZXVwIHRpbWVyIHRvIGJlCi0gICogICAgICAgICAgICAgaW5jcmVtZW50ZWQgZWFjaCAxbXMKLSAgKiAgICAgICAgICAgKyBUaGUgd2FrZXVwIGZlYXR1cmUgaXMgY29uZmlndXJlZCB0byBhc3NlcnQgYW4gaW50ZXJydXB0IGVhY2ggMW1zCisgICogICAgICAgICAgICAgaW5jcmVtZW50ZWQgZWFjaCAxbXMgd2hlbiB1d1RpY2tGcmVxIGlzIHNldCB0byBkZWZhdWx0IHZhbHVlLCBlbHNlCisgICogICAgICAgICAgICAgIDEwIG1zIG9yIDEwMCBtcywgZGVwZW5kaW5nIG9mIGFib3ZlIGdsb2JhbCB2YXJpYWJsZSB2YWx1ZS4KICAgKiAgICAgICAgICAgKyBIQUxfSW5jVGljayBpcyBjYWxsZWQgaW5zaWRlIHRoZSBIQUxfUlRDRXhfV2FrZVVwVGltZXJFdmVudENhbGxiYWNrCiAgICogICAgICAgICAgICsgSFNFIChkZWZhdWx0KSwgTFNFIG9yIExTSSBjYW4gYmUgc2VsZWN0ZWQgYXMgUlRDIGNsb2NrIHNvdXJjZQogIEB2ZXJiYXRpbQpAQCAtMjEsMTQgKzIxLDYgQEAKICAgICAoIykgQWRkIHRoaXMgZmlsZSBhbmQgdGhlIFJUQyBIQUwgZHJpdmVycyB0byB5b3VyIHByb2plY3QgYW5kIHVuY29tbWVudAogICAgICAgIEhBTF9SVENfTU9EVUxFX0VOQUJMRUQgZGVmaW5lIGluIHN0bTMybDV4eF9oYWxfY29uZi5oCiAKLSAgICBbLi5dCi0gICAgKEApIEhBTCBSVEMgYWxhcm0gYW5kIEhBTCBSVEMgd2FrZXVwIGRyaXZlcnMgY2FuknQgYmUgdXNlZCB3aXRoIGxvdyBwb3dlciBtb2RlczoKLSAgICAgICAgVGhlIHdha2UgdXAgY2FwYWJpbGl0eSBvZiB0aGUgUlRDIG1heSBiZSBpbnRydXNpdmUgaW4gY2FzZSBvZiBwcmlvciBsb3cgcG93ZXIgbW9kZQotICAgICAgICBjb25maWd1cmF0aW9uIHJlcXVpcmluZyBkaWZmZXJlbnQgd2FrZSB1cCBzb3VyY2VzLgotICAgICAgICBBcHBsaWNhdGlvbi9FeGFtcGxlIGJlaGF2aW9yIGlzIG5vIG1vcmUgZ3VhcmFudGVlZAotICAgIChAKSBUaGUgc3RtMzJsNXh4X2hhbF90aW1lYmFzZV90aW0gdXNlIGlzIHJlY29tbWVuZGVkIGZvciB0aGUgQXBwbGljYXRpb25zL0V4YW1wbGVzCi0gICAgICAgICAgcmVxdWlyaW5nIGxvdyBwb3dlciBtb2RlcwotCiAgIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCkBAIC03OSw3ICs3MSw3IEBACiAKIC8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotUlRDX0hhbmRsZVR5cGVEZWYgaFJUQ19IYW5kbGU7CitSVENfSGFuZGxlVHlwZURlZiBoUlRDX0hhbmRsZSA9IHsuSW5pdCA9IHswfX07CiAKIC8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiB2b2lkIFJUQ19JUlFIYW5kbGVyKHZvaWQpOwpAQCAtMTAxLDEyMiArOTMsMTQ3IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSW5pdFRpY2sodWludDMyX3QgVGlja1ByaW9yaXR5KQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAgIF9fSU8gdWludDMyX3QgY291bnRlciA9IDBVOwogCiAgIFJDQ19Pc2NJbml0VHlwZURlZiAgICAgICAgUkNDX09zY0luaXRTdHJ1Y3Q7CiAgIFJDQ19QZXJpcGhDTEtJbml0VHlwZURlZiAgUGVyaXBoQ2xrSW5pdFN0cnVjdDsKIAorCisgIC8qIENoZWNrIHV3VGlja0ZyZXEgZm9yIE1pc3JhQyAyMDEyIChldmVuIGlmIHV3VGlja0ZyZXEgaXMgYSBlbnVtIHR5cGUgdGhhdCBkb24ndCB0YWtlIHRoZSB2YWx1ZSB6ZXJvKSovCisgIGlmICgodWludDMyX3QpdXdUaWNrRnJlcSAhPSAwVSkKKyAgewogI2lmZGVmIFJUQ19DTE9DS19TT1VSQ0VfTFNFCi0gIC8qIENvbmZpZ3VlIExTRSBhcyBSVEMgY2xvY2sgc291Y3JlICovCi0gIFJDQ19Pc2NJbml0U3RydWN0Lk9zY2lsbGF0b3JUeXBlID0gUkNDX09TQ0lMTEFUT1JUWVBFX0xTRTsKLSAgUkNDX09zY0luaXRTdHJ1Y3QuTFNFU3RhdGUgPSBSQ0NfTFNFX09OX1JUQ19PTkxZOwotICBSQ0NfT3NjSW5pdFN0cnVjdC5QTEwuUExMU3RhdGUgPSBSQ0NfUExMX05PTkU7CisgICAgLyogQ29uZmlndWUgTFNFIGFzIFJUQyBjbG9jayBzb3VyY2UgKi8KKyAgICBSQ0NfT3NjSW5pdFN0cnVjdC5Pc2NpbGxhdG9yVHlwZSA9IFJDQ19PU0NJTExBVE9SVFlQRV9MU0U7CisgICAgUkNDX09zY0luaXRTdHJ1Y3QuTFNFU3RhdGUgPSBSQ0NfTFNFX09OX1JUQ19PTkxZOworICAgIFJDQ19Pc2NJbml0U3RydWN0LlBMTC5QTExTdGF0ZSA9IFJDQ19QTExfTk9ORTsKIAotICBQZXJpcGhDbGtJbml0U3RydWN0LlJUQ0Nsb2NrU2VsZWN0aW9uID0gUkNDX1JUQ0NMS1NPVVJDRV9MU0U7CisgICAgUGVyaXBoQ2xrSW5pdFN0cnVjdC5SVENDbG9ja1NlbGVjdGlvbiA9IFJDQ19SVENDTEtTT1VSQ0VfTFNFOwogI2VsaWYgZGVmaW5lZCAoUlRDX0NMT0NLX1NPVVJDRV9MU0kpCi0gIC8qIENvbmZpZ3VlIExTSSBhcyBSVEMgY2xvY2sgc291Y3JlICovCi0gIFJDQ19Pc2NJbml0U3RydWN0Lk9zY2lsbGF0b3JUeXBlID0gUkNDX09TQ0lMTEFUT1JUWVBFX0xTSTsKLSAgUkNDX09zY0luaXRTdHJ1Y3QuTFNJU3RhdGUgPSBSQ0NfTFNJX09OOwotICBSQ0NfT3NjSW5pdFN0cnVjdC5MU0lEaXYgPSBSQ0NfTFNJX0RJVjE7Ci0gIFJDQ19Pc2NJbml0U3RydWN0LlBMTC5QTExTdGF0ZSA9IFJDQ19QTExfTk9ORTsKKyAgICAvKiBDb25maWd1ZSBMU0kgYXMgUlRDIGNsb2NrIHNvdXJjZSAqLworICAgIFJDQ19Pc2NJbml0U3RydWN0Lk9zY2lsbGF0b3JUeXBlID0gUkNDX09TQ0lMTEFUT1JUWVBFX0xTSTsKKyAgICBSQ0NfT3NjSW5pdFN0cnVjdC5MU0lTdGF0ZSA9IFJDQ19MU0lfT047CisgICAgUkNDX09zY0luaXRTdHJ1Y3QuTFNJRGl2ID0gUkNDX0xTSV9ESVYxOworICAgIFJDQ19Pc2NJbml0U3RydWN0LlBMTC5QTExTdGF0ZSA9IFJDQ19QTExfTk9ORTsKIAotICBQZXJpcGhDbGtJbml0U3RydWN0LlJUQ0Nsb2NrU2VsZWN0aW9uID0gUkNDX1JUQ0NMS1NPVVJDRV9MU0k7CisgICAgUGVyaXBoQ2xrSW5pdFN0cnVjdC5SVENDbG9ja1NlbGVjdGlvbiA9IFJDQ19SVENDTEtTT1VSQ0VfTFNJOwogI2VsaWYgZGVmaW5lZCAoUlRDX0NMT0NLX1NPVVJDRV9IU0UpCi0gIC8qIENvbmZpZ3VlIEhTRSBhcyBSVEMgY2xvY2sgc291Y3JlICovCi0gIFJDQ19Pc2NJbml0U3RydWN0Lk9zY2lsbGF0b3JUeXBlID0gUkNDX09TQ0lMTEFUT1JUWVBFX0hTRTsKLSAgUkNDX09zY0luaXRTdHJ1Y3QuSFNFU3RhdGUgPSBSQ0NfSFNFX09OOwotICBSQ0NfT3NjSW5pdFN0cnVjdC5QTEwuUExMU3RhdGUgPSBSQ0NfUExMX05PTkU7CisgICAgLyogQ29uZmlndWUgSFNFIGFzIFJUQyBjbG9jayBzb3VyY2UgKi8KKyAgICBSQ0NfT3NjSW5pdFN0cnVjdC5Pc2NpbGxhdG9yVHlwZSA9IFJDQ19PU0NJTExBVE9SVFlQRV9IU0U7CisgICAgUkNDX09zY0luaXRTdHJ1Y3QuSFNFU3RhdGUgPSBSQ0NfSFNFX09OOworICAgIFJDQ19Pc2NJbml0U3RydWN0LlBMTC5QTExTdGF0ZSA9IFJDQ19QTExfTk9ORTsKIAotICBQZXJpcGhDbGtJbml0U3RydWN0LlJUQ0Nsb2NrU2VsZWN0aW9uID0gUkNDX1JUQ0NMS1NPVVJDRV9IU0VfRElWMzI7CisgICAgUGVyaXBoQ2xrSW5pdFN0cnVjdC5SVENDbG9ja1NlbGVjdGlvbiA9IFJDQ19SVENDTEtTT1VSQ0VfSFNFX0RJVjMyOwogI2Vsc2UKICNlcnJvciBQbGVhc2Ugc2VsZWN0IHRoZSBSVEMgQ2xvY2sgc291cmNlCiAjZW5kaWYgLyogUlRDX0NMT0NLX1NPVVJDRV9MU0UgKi8KIAotICBpZihIQUxfUkNDX09zY0NvbmZpZygmUkNDX09zY0luaXRTdHJ1Y3QpID09IEhBTF9PSykKLSAgewotICAgIFBlcmlwaENsa0luaXRTdHJ1Y3QuUGVyaXBoQ2xvY2tTZWxlY3Rpb24gPSBSQ0NfUEVSSVBIQ0xLX1JUQzsKLSAgICBpZihIQUxfUkNDRXhfUGVyaXBoQ0xLQ29uZmlnKCZQZXJpcGhDbGtJbml0U3RydWN0KSA9PSBIQUxfT0spCisgICAgc3RhdHVzID0gSEFMX1JDQ19Pc2NDb25maWcoJlJDQ19Pc2NJbml0U3RydWN0KTsKKyAgICBpZihzdGF0dXMgPT0gSEFMX09LKQogICAgIHsKKyAgICAgIFBlcmlwaENsa0luaXRTdHJ1Y3QuUGVyaXBoQ2xvY2tTZWxlY3Rpb24gPSBSQ0NfUEVSSVBIQ0xLX1JUQzsKKyAgICAgIHN0YXR1cyA9IEhBTF9SQ0NFeF9QZXJpcGhDTEtDb25maWcoJlBlcmlwaENsa0luaXRTdHJ1Y3QpOworCiAgICAgICAvKiBFbmFibGUgUlRDIENsb2NrICovCi0gICAgICBfX0hBTF9SQ0NfUlRDX0VOQUJMRSgpOwotICAgICAgX19IQUxfUkNDX1JUQ0FQQl9DTEtfRU5BQkxFKCk7Ci0KLSAgICAgIC8qIFRoZSB0aW1lIGJhc2Ugc2hvdWxkIGJlIDFtcwotICAgICAgICAgVGltZSBiYXNlID0gKChSVENfQVNZTkNIX1BSRURJViArIDEpICogKFJUQ19TWU5DSF9QUkVESVYgKyAxKSkgLyBSVENfQ0xPQ0sKLSAgICAgICAgIEhTRSBhcyBSVEMgY2xvY2sKLSAgICAgICAgICAgVGltZSBiYXNlID0gKCg5OSArIDEpICogKDQgKyAxKSkgLyA1MDBrSHoKLSAgICAgICAgICAgICAgICAgICAgID0gMW1zCi0gICAgICAgICBMU0UgYXMgUlRDIGNsb2NrCi0gICAgICAgICAgIFRpbWUgYmFzZSA9ICgoMzEgKyAxKSAqICgwICsgMSkpIC8gMzIuNzY4a0h6Ci0gICAgICAgICAgICAgICAgICAgICA9IH4xbXMKLSAgICAgICAgIExTSSBhcyBSVEMgY2xvY2sKLSAgICAgICAgICAgVGltZSBiYXNlID0gKCgzMSArIDEpICogKDAgKyAxKSkgLyAzMmtIegotICAgICAgICAgICAgICAgICAgICAgPSAxbXMKLSAgICAgICovCi0gICAgICBoUlRDX0hhbmRsZS5JbnN0YW5jZSA9IFJUQzsKLSAgICAgIGhSVENfSGFuZGxlLkluaXQuSG91ckZvcm1hdCA9IFJUQ19IT1VSRk9STUFUXzI0OwotICAgICAgaFJUQ19IYW5kbGUuSW5pdC5Bc3luY2hQcmVkaXYgPSBSVENfQVNZTkNIX1BSRURJVjsKLSAgICAgIGhSVENfSGFuZGxlLkluaXQuU3luY2hQcmVkaXYgPSBSVENfU1lOQ0hfUFJFRElWOwotICAgICAgaFJUQ19IYW5kbGUuSW5pdC5PdXRQdXQgPSBSVENfT1VUUFVUX0RJU0FCTEU7Ci0gICAgICBoUlRDX0hhbmRsZS5Jbml0Lk91dFB1dFBvbGFyaXR5ID0gUlRDX09VVFBVVF9QT0xBUklUWV9ISUdIOwotICAgICAgaFJUQ19IYW5kbGUuSW5pdC5PdXRQdXRUeXBlID0gUlRDX09VVFBVVF9UWVBFX09QRU5EUkFJTjsKLSAgICAgIGlmIChIQUxfUlRDX0luaXQoJmhSVENfSGFuZGxlKSAhPSBIQUxfT0spCisgICAgICBpZihzdGF0dXMgPT0gSEFMX09LKQogICAgICAgewotICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgICAgfQorICAgICAgICAvKiBFbmFibGUgUlRDIENsb2NrICovCisgICAgICAgIF9fSEFMX1JDQ19SVENfRU5BQkxFKCk7CisgICAgICAgIF9fSEFMX1JDQ19SVENBUEJfQ0xLX0VOQUJMRSgpOwogCi0gICAgICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoJmhSVENfSGFuZGxlKTsKLQotICAgICAgLyogRGlzYWJsZSB0aGUgV2FrZS11cCBUaW1lciAqLwotICAgICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0RJU0FCTEUoJmhSVENfSGFuZGxlKTsKLQotICAgICAgLyogSW4gY2FzZSBvZiBpbnRlcnJ1cHQgbW9kZSBpcyB1c2VkLCB0aGUgaW50ZXJydXB0IHNvdXJjZSBtdXN0IGRpc2FibGVkICovCi0gICAgICBfX0hBTF9SVENfV0FLRVVQVElNRVJfRElTQUJMRV9JVCgmaFJUQ19IYW5kbGUsUlRDX0lUX1dVVCk7Ci0KLSAgICAgIC8qIFdhaXQgdGlsbCBSVEMgV1VUV0YgZmxhZyBpcyBzZXQgICovCi0gICAgICB3aGlsZShfX0hBTF9SVENfV0FLRVVQVElNRVJfR0VUX0ZMQUcoJmhSVENfSGFuZGxlLCBSVENfRkxBR19XVVRXRikgPT0gMFUpCi0gICAgICB7Ci0gICAgICAgIGlmKGNvdW50ZXIrKyA9PSAoU3lzdGVtQ29yZUNsb2NrIC8gNTZVKSkKKyAgICAgICAgLyogVGhlIHRpbWUgYmFzZSBzaG91bGQgYmUgMW1zCisgICAgICAgICAgIFRpbWUgYmFzZSA9ICgoUlRDX0FTWU5DSF9QUkVESVYgKyAxKSAqIChSVENfU1lOQ0hfUFJFRElWICsgMSkpIC8gUlRDX0NMT0NLCisgICAgICAgICAgIEhTRSBhcyBSVEMgY2xvY2sKKyAgICAgICAgICAgICBUaW1lIGJhc2UgPSAoKDk5ICsgMSkgKiAoNCArIDEpKSAvIDUwMGtIegorICAgICAgICAgICAgICAgICAgICAgICA9IDFtcworICAgICAgICAgICBMU0UgYXMgUlRDIGNsb2NrCisgICAgICAgICAgICAgVGltZSBiYXNlID0gKCgzMSArIDEpICogKDAgKyAxKSkgLyAzMi43NjhrSHoKKyAgICAgICAgICAgICAgICAgICAgICAgPSB+MW1zCisgICAgICAgICAgIExTSSBhcyBSVEMgY2xvY2sKKyAgICAgICAgICAgICBUaW1lIGJhc2UgPSAoKDMxICsgMSkgKiAoMCArIDEpKSAvIDMya0h6CisgICAgICAgICAgICAgICAgICAgICAgID0gMW1zCisgICAgICAgICovCisgICAgICAgIGhSVENfSGFuZGxlLkluc3RhbmNlID0gUlRDOworICAgICAgICBoUlRDX0hhbmRsZS5Jbml0LkhvdXJGb3JtYXQgPSBSVENfSE9VUkZPUk1BVF8yNDsKKyAgICAgICAgaFJUQ19IYW5kbGUuSW5pdC5Bc3luY2hQcmVkaXYgPSBSVENfQVNZTkNIX1BSRURJVjsKKyAgICAgICAgaFJUQ19IYW5kbGUuSW5pdC5TeW5jaFByZWRpdiA9IFJUQ19TWU5DSF9QUkVESVY7CisgICAgICAgIGhSVENfSGFuZGxlLkluaXQuT3V0UHV0ID0gUlRDX09VVFBVVF9ESVNBQkxFOworICAgICAgICBoUlRDX0hhbmRsZS5Jbml0Lk91dFB1dFBvbGFyaXR5ID0gUlRDX09VVFBVVF9QT0xBUklUWV9ISUdIOworICAgICAgICBoUlRDX0hhbmRsZS5Jbml0Lk91dFB1dFR5cGUgPSBSVENfT1VUUFVUX1RZUEVfT1BFTkRSQUlOOworICAgICAgICBzdGF0dXMgPSBIQUxfUlRDX0luaXQoJmhSVENfSGFuZGxlKTsKKyAgICAgICAgaWYoc3RhdHVzID09IEhBTF9PSykKICAgICAgICAgewotICAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICAgICAgLyogRGlzYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLworICAgICAgICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRSgmaFJUQ19IYW5kbGUpOworCisgICAgICAgICAgLyogRGlzYWJsZSB0aGUgV2FrZS11cCBUaW1lciAqLworICAgICAgICAgIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9ESVNBQkxFKCZoUlRDX0hhbmRsZSk7CisKKyAgICAgICAgICAvKiBJbiBjYXNlIG9mIGludGVycnVwdCBtb2RlIGlzIHVzZWQsIHRoZSBpbnRlcnJ1cHQgc291cmNlIG11c3QgZGlzYWJsZWQgKi8KKyAgICAgICAgICBfX0hBTF9SVENfV0FLRVVQVElNRVJfRElTQUJMRV9JVCgmaFJUQ19IYW5kbGUsIFJUQ19JVF9XVVQpOworCisgICAgICAgICAgLyogV2FpdCB0aWxsIFJUQyBXVVRXRiBmbGFnIGlzIHNldCAgKi8KKyAgICAgICAgICB3aGlsZSAoX19IQUxfUlRDX1dBS0VVUFRJTUVSX0dFVF9GTEFHKCZoUlRDX0hhbmRsZSwgUlRDX0ZMQUdfV1VUV0YpID09IDBVKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb3VudGVyKysgPT0gKFN5c3RlbUNvcmVDbG9jayAvIDU2VSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYoc3RhdHVzID09IEhBTF9PSykKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBDbGVhciBQV1Igd2FrZSB1cCBGbGFnICovCisgICAgICAgICAgICBfX0hBTF9QV1JfQ0xFQVJfRkxBRyhQV1JfRkxBR19XVSk7CisKKyAgICAgICAgICAgIC8qIENsZWFyIFJUQyBXYWtlIFVwIHRpbWVyIEZsYWcgKi8KKyAgICAgICAgICAgIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9DTEVBUl9GTEFHKCZoUlRDX0hhbmRsZSwgUlRDX0ZMQUdfV1VURik7CisKKyAgICAgICAgICAgIC8qIENvbmZpZ3VyZSB0aGUgV2FrZS11cCBUaW1lciBjb3VudGVyICovCisgICAgICAgICAgICBoUlRDX0hhbmRsZS5JbnN0YW5jZS0+V1VUUiA9IDBVOworCisgICAgICAgICAgICAvKiBDbGVhciB0aGUgV2FrZS11cCBUaW1lciBjbG9jayBzb3VyY2UgYml0cyBpbiBDUiByZWdpc3RlciAqLworICAgICAgICAgICAgaFJUQ19IYW5kbGUuSW5zdGFuY2UtPkNSICY9ICh1aW50MzJfdCl+UlRDX0NSX1dVQ0tTRUw7CisKKyAgICAgICAgICAgIC8qIENvbmZpZ3VyZSB0aGUgY2xvY2sgc291cmNlICovCisgICAgICAgICAgICBoUlRDX0hhbmRsZS5JbnN0YW5jZS0+Q1IgfD0gKHVpbnQzMl90KVJUQ19XQUtFVVBDTE9DS19DS19TUFJFXzE2QklUUzsKKworICAgICAgICAgICAgLyogUlRDIFdha2VVcFRpbWVyIEludGVycnVwdCBDb25maWd1cmF0aW9uOiBFWFRJIGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgICAgIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0VOQUJMRV9JVCgpOworCisgICAgICAgICAgICAvKiBDb25maWd1cmUgdGhlIEludGVycnVwdCBpbiB0aGUgUlRDX0NSIHJlZ2lzdGVyICovCisgICAgICAgICAgICBfX0hBTF9SVENfV0FLRVVQVElNRVJfRU5BQkxFX0lUKCZoUlRDX0hhbmRsZSwgUlRDX0lUX1dVVCk7CisKKyAgICAgICAgICAgIC8qIEVuYWJsZSB0aGUgV2FrZS11cCBUaW1lciAqLworICAgICAgICAgICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VOQUJMRSgmaFJUQ19IYW5kbGUpOworCisgICAgICAgICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KKyAgICAgICAgICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKCZoUlRDX0hhbmRsZSk7CisKKyAgICAgICAgICAgIEhBTF9OVklDX0VuYWJsZUlSUShSVENfSVJRbik7CisKKyAgICAgICAgICAgIC8qIENvbmZpZ3VyZSB0aGUgU3lzVGljayBJUlEgcHJpb3JpdHkgKi8KKyAgICAgICAgICAgIGlmIChUaWNrUHJpb3JpdHkgPCAoMVVMIDw8IF9fTlZJQ19QUklPX0JJVFMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBIQUxfTlZJQ19TZXRQcmlvcml0eShSVENfSVJRbiwgVGlja1ByaW9yaXR5LCAwVSk7CisgICAgICAgICAgICAgIHV3VGlja1ByaW8gPSBUaWNrUHJpb3JpdHk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KLQotICAgICAgLyogQ2xlYXIgUFdSIHdha2UgdXAgRmxhZyAqLwotICAgICAgX19IQUxfUFdSX0NMRUFSX0ZMQUcoUFdSX0ZMQUdfV1UpOwotCi0gICAgICAvKiBDbGVhciBSVEMgV2FrZSBVcCB0aW1lciBGbGFnICovCi0gICAgICBfX0hBTF9SVENfV0FLRVVQVElNRVJfQ0xFQVJfRkxBRygmaFJUQ19IYW5kbGUsIFJUQ19GTEFHX1dVVEYpOwotCi0gICAgICAvKiBDb25maWd1cmUgdGhlIFdha2UtdXAgVGltZXIgY291bnRlciAqLwotICAgICAgaFJUQ19IYW5kbGUuSW5zdGFuY2UtPldVVFIgPSAwVTsKLQotICAgICAgLyogQ2xlYXIgdGhlIFdha2UtdXAgVGltZXIgY2xvY2sgc291cmNlIGJpdHMgaW4gQ1IgcmVnaXN0ZXIgKi8KLSAgICAgIGhSVENfSGFuZGxlLkluc3RhbmNlLT5DUiAmPSAodWludDMyX3QpflJUQ19DUl9XVUNLU0VMOwotCi0gICAgICAvKiBDb25maWd1cmUgdGhlIGNsb2NrIHNvdXJjZSAqLwotICAgICAgaFJUQ19IYW5kbGUuSW5zdGFuY2UtPkNSIHw9ICh1aW50MzJfdClSVENfV0FLRVVQQ0xPQ0tfQ0tfU1BSRV8xNkJJVFM7Ci0KLSAgICAgIC8qIFJUQyBXYWtlVXBUaW1lciBJbnRlcnJ1cHQgQ29uZmlndXJhdGlvbjogRVhUSSBjb25maWd1cmF0aW9uICovCi0gICAgICBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9FTkFCTEVfSVQoKTsKLQotICAgICAgLyogQ29uZmlndXJlIHRoZSBJbnRlcnJ1cHQgaW4gdGhlIFJUQ19DUiByZWdpc3RlciAqLwotICAgICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VOQUJMRV9JVCgmaFJUQ19IYW5kbGUsUlRDX0lUX1dVVCk7Ci0KLSAgICAgIC8qIEVuYWJsZSB0aGUgV2FrZS11cCBUaW1lciAqLwotICAgICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VOQUJMRSgmaFJUQ19IYW5kbGUpOwotCi0gICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKCZoUlRDX0hhbmRsZSk7Ci0KLSAgICAgIEhBTF9OVklDX1NldFByaW9yaXR5KFJUQ19JUlFuLCBUaWNrUHJpb3JpdHksIDBVKTsKLSAgICAgIEhBTF9OVklDX0VuYWJsZUlSUShSVENfSVJRbik7Ci0KLSAgICAgIHJldHVybiBIQUxfT0s7CiAgICAgfQogICB9Ci0gIHJldHVybiBIQUxfRVJST1I7CisgIGVsc2UKKyAgeworICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKKyAgfQorICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw1eHhfaGFsX3RpbWViYXNlX3RpbV90ZW1wbGF0ZS5jIGIvU3JjL3N0bTMybDV4eF9oYWxfdGltZWJhc2VfdGltX3RlbXBsYXRlLmMKaW5kZXggMGUwZjM4ZC4uN2RlYWQwZSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDV4eF9oYWxfdGltZWJhc2VfdGltX3RlbXBsYXRlLmMKKysrIGIvU3JjL3N0bTMybDV4eF9oYWxfdGltZWJhc2VfdGltX3RlbXBsYXRlLmMKQEAgLTQsOSArNCw5IEBACiAgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KICAgKiBAYnJpZWYgICBUZW1wbGF0ZSBmb3IgSEFMIHRpbWUgYmFzZSBiYXNlZCBvbiB0aGUgcGVyaXBoZXJhbCBoYXJkd2FyZSBUSU02LgogICAqCi0gICogICAgICAgICAgVGhpcyBmaWxlIG92ZXJyaWRlIHRoZSBuYXRpdmUgSEFMIHRpbWUgYmFzZSBmdW5jdGlvbnMgKGRlZmluZWQgYXMgd2VhaykKKyAgKiAgICAgICAgICBUaGlzIGZpbGUgb3ZlcnJpZGVzIHRoZSBuYXRpdmUgSEFMIHRpbWUgYmFzZSBmdW5jdGlvbnMgKGRlZmluZWQgYXMgd2VhaykKICAgKiAgICAgICAgICB0aGUgVElNIHRpbWUgYmFzZToKLSAgKiAgICAgICAgICAgKyBJbml0aWFsaXplcyB0aGUgVElNNiBwZXJpcGhlcmFsIHRvIGdlbmVyYXRlIGEgUGVyaW9kIGVsYXBzZWQgRXZlbnQgZWFjaCAxbXMKKyAgKiAgICAgICAgICAgKyBJbml0aWFsaXplcyB0aGUgVElNIHBlcmlwaGVyYWwgdG8gZ2VuZXJhdGUgYSBQZXJpb2QgZWxhcHNlZCBFdmVudCBlYWNoIDFtcwogICAqICAgICAgICAgICArIEhBTF9JbmNUaWNrIGlzIGNhbGxlZCBpbnNpZGUgSEFMX1RJTV9QZXJpb2RFbGFwc2VkQ2FsbGJhY2sgaWUgZWFjaCAxbXMKICAgKgogIEB2ZXJiYXRpbQpAQCAtNjQsNyArNjQsNyBAQAogICAqICAgICAgICAgVGljayBpbnRlcnJ1cHQgcHJpb3JpdHkuCiAgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCAgYXV0b21hdGljYWxseSBhdCB0aGUgYmVnaW5uaW5nIG9mIHByb2dyYW0gYWZ0ZXIKICAgKiAgICAgICAgIHJlc2V0IGJ5IEhBTF9Jbml0KCkgb3IgYXQgYW55IHRpbWUgd2hlbiBjbG9jayBpcyBjb25maWd1cmVkLCBieSBIQUxfUkNDX0Nsb2NrQ29uZmlnKCkuCi0gICogQHBhcmFtICBUaWNrUHJpb3JpdHk6IFRpY2sgaW50ZXJydXB0IHByaW9yaXR5LgorICAqIEBwYXJhbSAgVGlja1ByaW9yaXR5IFRpY2sgaW50ZXJydXB0IHByaW9yaXR5LgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0luaXRUaWNrKHVpbnQzMl90IFRpY2tQcmlvcml0eSkKQEAgLTczLDU3ICs3Myw4NCBAQAogICB1aW50MzJfdCAgICAgICAgICAgICAgdXdUaW1jbG9jaywgdXdBUEIxUHJlc2NhbGVyOwogICB1aW50MzJfdCAgICAgICAgICAgICAgdXdQcmVzY2FsZXJWYWx1ZTsKICAgdWludDMyX3QgICAgICAgICAgICAgIHBGTGF0ZW5jeTsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgICAgIHN0YXR1cyA9IEhBTF9PSzsKIAotICAvKiBDb25maWd1cmUgdGhlIFRJTTYgSVJRIHByaW9yaXR5ICovCi0gIEhBTF9OVklDX1NldFByaW9yaXR5KFRJTTZfSVJRbiwgVGlja1ByaW9yaXR5LCAwVSk7Ci0KLSAgLyogRW5hYmxlIHRoZSBUSU02IGdsb2JhbCBJbnRlcnJ1cHQgKi8KLSAgSEFMX05WSUNfRW5hYmxlSVJRKFRJTTZfSVJRbik7Ci0KLSAgLyogRW5hYmxlIFRJTTYgY2xvY2sgKi8KLSAgX19IQUxfUkNDX1RJTTZfQ0xLX0VOQUJMRSgpOwotCi0gIC8qIEdldCBjbG9jayBjb25maWd1cmF0aW9uICovCi0gIEhBTF9SQ0NfR2V0Q2xvY2tDb25maWcoJmNsa2NvbmZpZywgJnBGTGF0ZW5jeSk7Ci0KLSAgLyogR2V0IEFQQjEgcHJlc2NhbGVyICovCi0gIHV3QVBCMVByZXNjYWxlciA9IGNsa2NvbmZpZy5BUEIxQ0xLRGl2aWRlcjsKLQotICAvKiBDb21wdXRlIFRJTTYgY2xvY2sgKi8KLSAgaWYgKHV3QVBCMVByZXNjYWxlciA9PSBSQ0NfSENMS19ESVYxKQorICAvKiBDaGVjayB1d1RpY2tGcmVxIGZvciBNaXNyYUMgMjAxMiAoZXZlbiBpZiB1d1RpY2tGcmVxIGlzIGEgZW51bSB0eXBlIHRoYXQgZG9uJ3QgdGFrZSB0aGUgdmFsdWUgemVybykqLworICBpZiAoKHVpbnQzMl90KXV3VGlja0ZyZXEgIT0gMFUpCiAgIHsKLSAgICB1d1RpbWNsb2NrID0gSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKTsKKyAgICAvKiBFbmFibGUgVElNNiBjbG9jayAqLworICAgIF9fSEFMX1JDQ19USU02X0NMS19FTkFCTEUoKTsKKworICAgIC8qIEdldCBjbG9jayBjb25maWd1cmF0aW9uICovCisgICAgSEFMX1JDQ19HZXRDbG9ja0NvbmZpZygmY2xrY29uZmlnLCAmcEZMYXRlbmN5KTsKKworICAgIC8qIEdldCBBUEIxIHByZXNjYWxlciAqLworICAgIHV3QVBCMVByZXNjYWxlciA9IGNsa2NvbmZpZy5BUEIxQ0xLRGl2aWRlcjsKKworICAgIC8qIENvbXB1dGUgVElNNiBjbG9jayAqLworICAgIGlmICh1d0FQQjFQcmVzY2FsZXIgPT0gUkNDX0hDTEtfRElWMSkKKyAgICB7CisgICAgICB1d1RpbWNsb2NrID0gSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHV3VGltY2xvY2sgPSAyVSAqIEhBTF9SQ0NfR2V0UENMSzFGcmVxKCk7CisgICAgfQorCisgICAgLyogQ29tcHV0ZSB0aGUgcHJlc2NhbGVyIHZhbHVlIHRvIGhhdmUgVElNNiBjb3VudGVyIGNsb2NrIGVxdWFsIHRvIDFNSHogKi8KKyAgICB1d1ByZXNjYWxlclZhbHVlID0gKHVpbnQzMl90KSgodXdUaW1jbG9jayAvIDEwMDAwMDBVKSAtIDFVKTsKKworICAgIC8qIEluaXRpYWxpemUgVElNNiAqLworICAgIFRpbUhhbmRsZS5JbnN0YW5jZSA9IFRJTTY7CisKKyAgICAvKiBJbml0aWFsaXplIFRJTXggcGVyaXBoZXJhbCBhcyBmb2xsb3dzOgorICAgICsgUGVyaW9kID0gWyhUSU02Q0xLLzEwMDApIC0gMV0uIHRvIGhhdmUgYSAoMS8xMDAwKSBzIHRpbWUgYmFzZS4KKyAgICArIFByZXNjYWxlciA9ICh1d1RpbWNsb2NrLzEwMDAwMDAgLSAxKSB0byBoYXZlIGEgMU1IeiBjb3VudGVyIGNsb2NrLgorICAgICsgQ2xvY2tEaXZpc2lvbiA9IDAKKyAgICArIENvdW50ZXIgZGlyZWN0aW9uID0gVXAKKyAgICAqLworICAgIFRpbUhhbmRsZS5Jbml0LlBlcmlvZCA9ICgxMDAwMDAwVSAvIDEwMDBVKSAtIDFVOworICAgIFRpbUhhbmRsZS5Jbml0LlByZXNjYWxlciA9IHV3UHJlc2NhbGVyVmFsdWU7CisgICAgVGltSGFuZGxlLkluaXQuQ2xvY2tEaXZpc2lvbiA9IDA7CisgICAgVGltSGFuZGxlLkluaXQuQ291bnRlck1vZGUgPSBUSU1fQ09VTlRFUk1PREVfVVA7CisgICAgVGltSGFuZGxlLkluaXQuQXV0b1JlbG9hZFByZWxvYWQgPSBUSU1fQVVUT1JFTE9BRF9QUkVMT0FEX0RJU0FCTEU7CisgICAgaWYgKEhBTF9USU1fQmFzZV9Jbml0KCZUaW1IYW5kbGUpID09IEhBTF9PSykKKyAgICB7CisgICAgICAvKiBTdGFydCB0aGUgVElNIHRpbWUgQmFzZSBnZW5lcmF0aW9uIGluIGludGVycnVwdCBtb2RlICovCisgICAgICBpZiAoSEFMX1RJTV9CYXNlX1N0YXJ0X0lUKCZUaW1IYW5kbGUpID09IEhBTF9PSykKKyAgICAgIHsKKyAgICAgICAgLyogRW5hYmxlIHRoZSBUSU02IGdsb2JhbCBJbnRlcnJ1cHQgKi8KKyAgICAgICAgSEFMX05WSUNfRW5hYmxlSVJRKFRJTTZfSVJRbik7CisKKyAgICAgICAgLyogQ29uZmlndXJlIHRoZSBTeXNUaWNrIElSUSBwcmlvcml0eSAqLworICAgICAgICBpZiAoVGlja1ByaW9yaXR5IDwgKDFVTCA8PCBfX05WSUNfUFJJT19CSVRTKSkKKyAgICAgICAgeworICAgICAgICAgIC8qQ29uZmlndXJlIHRoZSBUSU02IElSUSBwcmlvcml0eSAqLworICAgICAgICAgIEhBTF9OVklDX1NldFByaW9yaXR5KFRJTTZfSVJRbiwgVGlja1ByaW9yaXR5ICwwVSk7CisgICAgICAgICAgdXdUaWNrUHJpbyA9IFRpY2tQcmlvcml0eTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOworICAgIH0KICAgfQogICBlbHNlCiAgIHsKLSAgICB1d1RpbWNsb2NrID0gMlUqSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKTsKLSAgfQotCi0gIC8qIENvbXB1dGUgdGhlIHByZXNjYWxlciB2YWx1ZSB0byBoYXZlIFRJTTYgY291bnRlciBjbG9jayBlcXVhbCB0byAxTUh6ICovCi0gIHV3UHJlc2NhbGVyVmFsdWUgPSAodWludDMyX3QpICgodXdUaW1jbG9jayAvIDEwMDAwMDBVKSAtIDFVKTsKLQotICAvKiBJbml0aWFsaXplIFRJTTYgKi8KLSAgVGltSGFuZGxlLkluc3RhbmNlID0gVElNNjsKLQotICAvKiBJbml0aWFsaXplIFRJTXggcGVyaXBoZXJhbCBhcyBmb2xsb3c6Ci0gICsgUGVyaW9kID0gWyhUSU02Q0xLLzEwMDApIC0gMV0uIHRvIGhhdmUgYSAoMS8xMDAwKSBzIHRpbWUgYmFzZS4KLSAgKyBQcmVzY2FsZXIgPSAodXdUaW1jbG9jay8xMDAwMDAwIC0gMSkgdG8gaGF2ZSBhIDFNSHogY291bnRlciBjbG9jay4KLSAgKyBDbG9ja0RpdmlzaW9uID0gMAotICArIENvdW50ZXIgZGlyZWN0aW9uID0gVXAKLSAgKi8KLSAgVGltSGFuZGxlLkluaXQuUGVyaW9kID0gKDEwMDAwMDBVIC8gMTAwMFUpIC0gMVU7Ci0gIFRpbUhhbmRsZS5Jbml0LlByZXNjYWxlciA9IHV3UHJlc2NhbGVyVmFsdWU7Ci0gIFRpbUhhbmRsZS5Jbml0LkNsb2NrRGl2aXNpb24gPSAwOwotICBUaW1IYW5kbGUuSW5pdC5Db3VudGVyTW9kZSA9IFRJTV9DT1VOVEVSTU9ERV9VUDsKLSAgVGltSGFuZGxlLkluaXQuQXV0b1JlbG9hZFByZWxvYWQgPSBUSU1fQVVUT1JFTE9BRF9QUkVMT0FEX0RJU0FCTEU7Ci0gIGlmKEhBTF9USU1fQmFzZV9Jbml0KCZUaW1IYW5kbGUpID09IEhBTF9PSykKLSAgewotICAgIC8qIFN0YXJ0IHRoZSBUSU0gdGltZSBCYXNlIGdlbmVyYXRpb24gaW4gaW50ZXJydXB0IG1vZGUgKi8KLSAgICByZXR1cm4gSEFMX1RJTV9CYXNlX1N0YXJ0X0lUKCZUaW1IYW5kbGUpOworICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgfQogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC0xNTEsNyArMTc4LDcgQEAKIC8qKgogICAqIEBicmllZiAgUGVyaW9kIGVsYXBzZWQgY2FsbGJhY2sgaW4gbm9uIGJsb2NraW5nIG1vZGUKICAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkICB3aGVuIFRJTTYgaW50ZXJydXB0IHRvb2sgcGxhY2UsIGluc2lkZQotICAqIEhBTF9USU02X0lSUUhhbmRsZXIoKS4gSXQgbWFrZXMgYSBkaXJlY3QgY2FsbCB0byBIQUxfSW5jVGljaygpIHRvIGluY3JlbWVudAorICAqIEhBTF9USU1fSVJRSGFuZGxlcigpLiBJdCBtYWtlcyBhIGRpcmVjdCBjYWxsIHRvIEhBTF9JbmNUaWNrKCkgdG8gaW5jcmVtZW50CiAgICogYSBnbG9iYWwgdmFyaWFibGUgInV3VGljayIgdXNlZCBhcyBhcHBsaWNhdGlvbiB0aW1lIGJhc2UuCiAgICogQHBhcmFtICBodGltIFRJTSBoYW5kbGUKICAgKiBAcmV0dmFsIE5vbmUKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw1eHhfaGFsX3RzYy5jIGIvU3JjL3N0bTMybDV4eF9oYWxfdHNjLmMKaW5kZXggZTNkYjRmYi4uMTdlZGMyMCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDV4eF9oYWxfdHNjLmMKKysrIGIvU3JjL3N0bTMybDV4eF9oYWxfdHNjLmMKQEAgLTI1Nyw2ICsyNTcsNyBAQAogICBhc3NlcnRfcGFyYW0oSVNfVFNDX1NTRChodHNjLT5Jbml0LlNwcmVhZFNwZWN0cnVtRGV2aWF0aW9uKSk7CiAgIGFzc2VydF9wYXJhbShJU19UU0NfU1NfUFJFU0MoaHRzYy0+SW5pdC5TcHJlYWRTcGVjdHJ1bVByZXNjYWxlcikpOwogICBhc3NlcnRfcGFyYW0oSVNfVFNDX1BHX1BSRVNDKGh0c2MtPkluaXQuUHVsc2VHZW5lcmF0b3JQcmVzY2FsZXIpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RTQ19QR19QUkVTQ19WU19DVFBMKGh0c2MtPkluaXQuUHVsc2VHZW5lcmF0b3JQcmVzY2FsZXIsIGh0c2MtPkluaXQuQ1RQdWxzZUxvd0xlbmd0aCkpOwogICBhc3NlcnRfcGFyYW0oSVNfVFNDX01DVihodHNjLT5Jbml0Lk1heENvdW50VmFsdWUpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RTQ19JT0RFRihodHNjLT5Jbml0LklPRGVmYXVsdE1vZGUpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RTQ19TWU5DX1BPTChodHNjLT5Jbml0LlN5bmNocm9QaW5Qb2xhcml0eSkpOwpAQCAtNDMwLDcgKzQzMSw4IEBACiAgICogQHBhcmFtICBwQ2FsbGJhY2sgcG9pbnRlciB0byB0aGUgQ2FsbGJhY2sgZnVuY3Rpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9UU0NfUmVnaXN0ZXJDYWxsYmFjayhUU0NfSGFuZGxlVHlwZURlZiAqaHRzYywgSEFMX1RTQ19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELCBwVFNDX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfVFNDX1JlZ2lzdGVyQ2FsbGJhY2soVFNDX0hhbmRsZVR5cGVEZWYgKmh0c2MsIEhBTF9UU0NfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwVFNDX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDV4eF9oYWxfdWFydC5jIGIvU3JjL3N0bTMybDV4eF9oYWxfdWFydC5jCmluZGV4IGQ2ZTdmZWMuLmU4MjYxNDQgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw1eHhfaGFsX3VhcnQuYworKysgYi9TcmMvc3RtMzJsNXh4X2hhbF91YXJ0LmMKQEAgLTEzNzAsNiArMTM3MCwxNiBAQAogICAgIC8qIFNldCBSZWNlcHRpb24gdHlwZSB0byBTdGFuZGFyZCByZWNlcHRpb24gKi8KICAgICBodWFydC0+UmVjZXB0aW9uVHlwZSA9IEhBTF9VQVJUX1JFQ0VQVElPTl9TVEFOREFSRDsKIAorICAgIGlmICghKElTX0xQVUFSVF9JTlNUQU5DRShodWFydC0+SW5zdGFuY2UpKSkKKyAgICB7CisgICAgICAvKiBDaGVjayB0aGF0IFVTQVJUIFJUT0VOIGJpdCBpcyBzZXQgKi8KKyAgICAgIGlmKFJFQURfQklUKGh1YXJ0LT5JbnN0YW5jZS0+Q1IyLCBVU0FSVF9DUjJfUlRPRU4pICE9IDBVKQorICAgICAgeworICAgICAgICAvKiBFbmFibGUgdGhlIFVBUlQgUmVjZWl2ZXIgVGltZW91dCBJbnRlcnJ1cHQgKi8KKyAgICAgICAgU0VUX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1JUT0lFKTsKKyAgICAgIH0KKyAgICB9CisKICAgICByZXR1cm4oVUFSVF9TdGFydF9SZWNlaXZlX0lUKGh1YXJ0LCBwRGF0YSwgU2l6ZSkpOwogICB9CiAgIGVsc2UKQEAgLTE0NzksNiArMTQ4OSwxNiBAQAogICAgIC8qIFNldCBSZWNlcHRpb24gdHlwZSB0byBTdGFuZGFyZCByZWNlcHRpb24gKi8KICAgICBodWFydC0+UmVjZXB0aW9uVHlwZSA9IEhBTF9VQVJUX1JFQ0VQVElPTl9TVEFOREFSRDsKIAorICAgIGlmICghKElTX0xQVUFSVF9JTlNUQU5DRShodWFydC0+SW5zdGFuY2UpKSkKKyAgICB7CisgICAgICAvKiBDaGVjayB0aGF0IFVTQVJUIFJUT0VOIGJpdCBpcyBzZXQgKi8KKyAgICAgIGlmKFJFQURfQklUKGh1YXJ0LT5JbnN0YW5jZS0+Q1IyLCBVU0FSVF9DUjJfUlRPRU4pICE9IDBVKQorICAgICAgeworICAgICAgICAvKiBFbmFibGUgdGhlIFVBUlQgUmVjZWl2ZXIgVGltZW91dCBJbnRlcnJ1cHQgKi8KKyAgICAgICAgU0VUX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1JUT0lFKTsKKyAgICAgIH0KKyAgICB9CisKICAgICByZXR1cm4oVUFSVF9TdGFydF9SZWNlaXZlX0RNQShodWFydCwgcERhdGEsIFNpemUpKTsKICAgfQogICBlbHNlCkBAIC0zMDEyLDcgKzMwMzIsNiBAQAogICAqICBzZXQgVEUgYW5kIFJFIGJpdHMgYWNjb3JkaW5nIHRvIGh1YXJ0LT5Jbml0Lk1vZGUgdmFsdWUKICAgKiAgc2V0IE9WRVI4IGJpdCBhY2NvcmRpbmcgdG8gaHVhcnQtPkluaXQuT3ZlclNhbXBsaW5nIHZhbHVlICovCiAgIHRtcHJlZyA9ICh1aW50MzJfdClodWFydC0+SW5pdC5Xb3JkTGVuZ3RoIHwgaHVhcnQtPkluaXQuUGFyaXR5IHwgaHVhcnQtPkluaXQuTW9kZSB8IGh1YXJ0LT5Jbml0Lk92ZXJTYW1wbGluZyA7Ci0gIHRtcHJlZyB8PSAodWludDMyX3QpaHVhcnQtPkZpZm9Nb2RlOwogICBNT0RJRllfUkVHKGh1YXJ0LT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfRklFTERTLCB0bXByZWcpOwogCiAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVVNBUlQgQ1IyIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDV4eF9oYWxfdWFydF9leC5jIGIvU3JjL3N0bTMybDV4eF9oYWxfdWFydF9leC5jCmluZGV4IGFhNzU1OTEuLmQ1MWUwZWEgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw1eHhfaGFsX3VhcnRfZXguYworKysgYi9TcmMvc3RtMzJsNXh4X2hhbF91YXJ0X2V4LmMKQEAgLTk3Nyw4ICs5NzcsOCBAQAogICB1aW50OF90IHR4X2ZpZm9fZGVwdGg7CiAgIHVpbnQ4X3QgcnhfZmlmb190aHJlc2hvbGQ7CiAgIHVpbnQ4X3QgdHhfZmlmb190aHJlc2hvbGQ7Ci0gIHVpbnQ4X3QgbnVtZXJhdG9yW10gPSB7MVUsIDFVLCAxVSwgM1UsIDdVLCAxVSwgMFUsIDBVfTsKLSAgdWludDhfdCBkZW5vbWluYXRvcltdID0gezhVLCA0VSwgMlUsIDRVLCA4VSwgMVUsIDFVLCAxVX07CisgIHN0YXRpYyBjb25zdCB1aW50OF90IG51bWVyYXRvcltdID0gezFVLCAxVSwgMVUsIDNVLCA3VSwgMVUsIDBVLCAwVX07CisgIHN0YXRpYyBjb25zdCB1aW50OF90IGRlbm9taW5hdG9yW10gPSB7OFUsIDRVLCAyVSwgNFUsIDhVLCAxVSwgMVUsIDFVfTsKIAogICBpZiAoaHVhcnQtPkZpZm9Nb2RlID09IFVBUlRfRklGT01PREVfRElTQUJMRSkKICAgewpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDV4eF9oYWxfdXNhcnRfZXguYyBiL1NyYy9zdG0zMmw1eHhfaGFsX3VzYXJ0X2V4LmMKaW5kZXggNTk3Y2RlZS4uYThkNTY0NSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDV4eF9oYWxfdXNhcnRfZXguYworKysgYi9TcmMvc3RtMzJsNXh4X2hhbF91c2FydF9leC5jCkBAIC01MDMsOCArNTAzLDggQEAKICAgdWludDhfdCByeF9maWZvX3RocmVzaG9sZDsKICAgdWludDhfdCB0eF9maWZvX3RocmVzaG9sZDsKICAgLyogMiAwVS8xVSBhZGRlZCBmb3IgTUlTUkFDMjAxMi1SdWxlLTE4LjFfYiBhbmQgTUlTUkFDMjAxMi1SdWxlLTE4LjFfZCAqLwotICB1aW50OF90IG51bWVyYXRvcltdICAgPSB7MVUsIDFVLCAxVSwgM1UsIDdVLCAxVSwgMFUsIDBVfTsKLSAgdWludDhfdCBkZW5vbWluYXRvcltdID0gezhVLCA0VSwgMlUsIDRVLCA4VSwgMVUsIDFVLCAxVX07CisgIHN0YXRpYyBjb25zdCB1aW50OF90IG51bWVyYXRvcltdICAgPSB7MVUsIDFVLCAxVSwgM1UsIDdVLCAxVSwgMFUsIDBVfTsKKyAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgZGVub21pbmF0b3JbXSA9IHs4VSwgNFUsIDJVLCA0VSwgOFUsIDFVLCAxVSwgMVV9OwogCiAgIGlmIChodXNhcnQtPkZpZm9Nb2RlID09IFVTQVJUX0ZJRk9NT0RFX0RJU0FCTEUpCiAgIHsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw1eHhfbGxfYWRjLmMgYi9TcmMvc3RtMzJsNXh4X2xsX2FkYy5jCmluZGV4IDE5NTU1OGUuLmFjYTExMGUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw1eHhfbGxfYWRjLmMKKysrIGIvU3JjL3N0bTMybDV4eF9sbF9hZGMuYwpAQCAtODI1LDYgKzgyNSwxMSBAQAogICBpZiAoQURDX1JFR19Jbml0U3RydWN0LT5TZXF1ZW5jZXJMZW5ndGggIT0gTExfQURDX1JFR19TRVFfU0NBTl9ESVNBQkxFKQogICB7CiAgICAgYXNzZXJ0X3BhcmFtKElTX0xMX0FEQ19SRUdfU0VRX1NDQU5fRElTQ09OVF9NT0RFKEFEQ19SRUdfSW5pdFN0cnVjdC0+U2VxdWVuY2VyRGlzY29udCkpOworCisgICAgLyogQURDIGdyb3VwIHJlZ3VsYXIgY29udGludW91cyBtb2RlIGFuZCBkaXNjb250aW51b3VzIG1vZGUgICAgICAgICAgICAgICAgICovCisgICAgLyogY2FuIG5vdCBiZSBlbmFibGVkIHNpbXVsdGVuYWVvdXNseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgYXNzZXJ0X3BhcmFtKChBRENfUkVHX0luaXRTdHJ1Y3QtPkNvbnRpbnVvdXNNb2RlID09IExMX0FEQ19SRUdfQ09OVl9TSU5HTEUpCisgICAgICAgICAgICAgICAgIHx8IChBRENfUkVHX0luaXRTdHJ1Y3QtPlNlcXVlbmNlckRpc2NvbnQgPT0gTExfQURDX1JFR19TRVFfRElTQ09OVF9ESVNBQkxFKSk7CiAgIH0KICAgYXNzZXJ0X3BhcmFtKElTX0xMX0FEQ19SRUdfQ09OVElOVU9VU19NT0RFKEFEQ19SRUdfSW5pdFN0cnVjdC0+Q29udGludW91c01vZGUpKTsKICAgYXNzZXJ0X3BhcmFtKElTX0xMX0FEQ19SRUdfRE1BX1RSQU5TRkVSKEFEQ19SRUdfSW5pdFN0cnVjdC0+RE1BVHJhbnNmZXIpKTsKQEAgLTk0MSw2ICs5NDYsMTIgQEAKICAgKiAgICAgICAgICAgIFJlZmVyIHRvIGZ1bmN0aW9uIEByZWYgTExfQURDX0lOSl9TZXRTZXF1ZW5jZXJSYW5rcygpLgogICAqICAgICAgICAgIC0gU2V0IEFEQyBjaGFubmVsIHNhbXBsaW5nIHRpbWUKICAgKiAgICAgICAgICAgIFJlZmVyIHRvIGZ1bmN0aW9uIExMX0FEQ19TZXRDaGFubmVsU2FtcGxpbmdUaW1lKCk7CisgICogQG5vdGUgICBDYXV0aW9uIGlmIGZlYXR1cmUgQURDIGdyb3VwIGluamVjdGVkIGNvbnRleHRzIHF1ZXVlIGlzIGVuYWJsZWQKKyAgKiAgICAgICAgIChyZWZlciB0byB3aXRoIGZ1bmN0aW9uIEByZWYgTExfQURDX0lOSl9TZXRRdWV1ZU1vZGUoKSApOgorICAqICAgICAgICAgdXNpbmcgc3VjY2Vzc2l2ZWx5IHNldmVyYWwgdGltZXMgdGhpcyBmdW5jdGlvbiB3aWxsIGFwcGVhciBhcworICAqICAgICAgICAgaGF2aW5nIG5vIGVmZmVjdC4KKyAgKiAgICAgICAgIFRvIHNldCBzZXZlcmFsIGZlYXR1cmVzIG9mIEFEQyBncm91cCBpbmplY3RlZCwgdXNlCisgICogICAgICAgICBmdW5jdGlvbiBAcmVmIExMX0FEQ19JTkpfQ29uZmlnUXVldWVDb250ZXh0KCkuCiAgICogQHBhcmFtICBBREN4IEFEQyBpbnN0YW5jZQogICAqIEBwYXJhbSAgQURDX0lOSl9Jbml0U3RydWN0IFBvaW50ZXIgdG8gYSBAcmVmIExMX0FEQ19JTkpfSW5pdFR5cGVEZWYgc3RydWN0dXJlCiAgICogQHJldHZhbCBBbiBFcnJvclN0YXR1cyBlbnVtZXJhdGlvbiB2YWx1ZToKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw1eHhfbGxfZm1jLmMgYi9TcmMvc3RtMzJsNXh4X2xsX2ZtYy5jCmluZGV4IDIyMDIxMGYuLjFiNWYwYjQgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw1eHhfbGxfZm1jLmMKKysrIGIvU3JjL3N0bTMybDV4eF9sbF9mbWMuYwpAQCAtNTgsNyArNTgsNyBAQAogLyoqIEBhZGR0b2dyb3VwIFNUTTMyTDV4eF9IQUxfRHJpdmVyCiAgICogQHsKICAgKi8KLSNpZiAoKGRlZmluZWQgSEFMX05PUl9NT0RVTEVfRU5BQkxFRCB8fCBkZWZpbmVkIEhBTF9TUkFNX01PRFVMRV9FTkFCTEVEKSB8fCBkZWZpbmVkIEhBTF9OQU5EX01PRFVMRV9FTkFCTEVEICkKKyNpZiBkZWZpbmVkKEhBTF9OT1JfTU9EVUxFX0VOQUJMRUQpIHx8IGRlZmluZWQoSEFMX1NSQU1fTU9EVUxFX0VOQUJMRUQpIHx8IGRlZmluZWQoSEFMX05BTkRfTU9EVUxFX0VOQUJMRUQpCiAKIC8qKiBAZGVmZ3JvdXAgRk1DX0xMICBGTUMgTG93IExheWVyCiAgICogQGJyaWVmIEZNQyBkcml2ZXIgbW9kdWxlcwpAQCAtODYsMTUgKzg2LDkgQEAKIAogLyogLS0tIEJXVFIgUmVnaXN0ZXIgLS0tKi8KIC8qIEJXVFIgcmVnaXN0ZXIgY2xlYXIgbWFzayAqLwotI2lmIGRlZmluZWQoRk1DX0JXVFJ4X0JVU1RVUk4pCiAjZGVmaW5lIEJXVFJfQ0xFQVJfTUFTSyAgICgodWludDMyX3QpKEZNQ19CV1RSeF9BRERTRVQgfCBGTUNfQldUUnhfQURESExEICB8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTUNfQldUUnhfREFUQVNUIHwgRk1DX0JXVFJ4X0JVU1RVUk4gfFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1DX0JXVFJ4X0FDQ01PRCB8IEZNQ19CV1RSeF9EQVRBSExEKSkKLSNlbHNlCi0jZGVmaW5lIEJXVFJfQ0xFQVJfTUFTSyAgICgodWludDMyX3QpKEZNQ19CV1RSeF9BRERTRVQgfCBGTUNfQldUUnhfQURESExEICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTUNfQldUUnhfREFUQVNUIHwgRk1DX0JXVFJ4X0FDQ01PRCAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1DX0JXVFJ4X0RBVEFITEQpKQotI2VuZGlmIC8qIEZNQ19CV1RSeF9CVVNUVVJOICovCiAKIC8qIC0tLSBQQ1IgUmVnaXN0ZXIgLS0tKi8KIC8qIFBDUiByZWdpc3RlciBjbGVhciBtYXNrICovCkBAIC0xNzYsNyArMTcwLDcgQEAKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmICBGTUNfTk9SU1JBTV9Jbml0KEZNQ19OT1JTUkFNX1R5cGVEZWYgKkRldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZNQ19OT1JTUkFNX0luaXRUeXBlRGVmICpJbml0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1DX05PUlNSQU1fSW5pdFR5cGVEZWYgKkluaXQpCiB7CiAgIHVpbnQzMl90IGZsYXNoYWNjZXNzOwogICB1aW50MzJfdCBidGNyX3JlZzsKQEAgLTI5MCwxMSArMjg0LDggQEAKICAgICAgICAgU0VUX0JJVChEZXZpY2UtPlBDU0NOVFIsIEZNQ19QQ1NDTlRSX0NOVEIzRU4pOwogICAgICAgICBicmVhazsKIAotICAgICAgY2FzZSBGTUNfTk9SU1JBTV9CQU5LNCA6Ci0gICAgICAgIFNFVF9CSVQoRGV2aWNlLT5QQ1NDTlRSLCBGTUNfUENTQ05UUl9DTlRCNEVOKTsKLSAgICAgICAgYnJlYWs7Ci0KICAgICAgIGRlZmF1bHQgOgorICAgICAgICBTRVRfQklUKERldmljZS0+UENTQ05UUiwgRk1DX1BDU0NOVFJfQ05UQjRFTik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQpAQCAtMzEwLDcgKzMwMSw3IEBACiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBGTUNfTk9SU1JBTV9EZUluaXQoRk1DX05PUlNSQU1fVHlwZURlZiAqRGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZNQ19OT1JTUkFNX0VYVEVOREVEX1R5cGVEZWYgKkV4RGV2aWNlLCB1aW50MzJfdCBCYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZNQ19OT1JTUkFNX0VYVEVOREVEX1R5cGVEZWYgKkV4RGV2aWNlLCB1aW50MzJfdCBCYW5rKQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfRk1DX05PUlNSQU1fREVWSUNFKERldmljZSkpOwpAQCAtMzUwLDExICszNDEsOCBAQAogICAgICAgQ0xFQVJfQklUKERldmljZS0+UENTQ05UUiwgRk1DX1BDU0NOVFJfQ05UQjNFTik7CiAgICAgICBicmVhazsKIAotICAgIGNhc2UgRk1DX05PUlNSQU1fQkFOSzQgOgotICAgICAgQ0xFQVJfQklUKERldmljZS0+UENTQ05UUiwgRk1DX1BDU0NOVFJfQ05UQjRFTik7Ci0gICAgICBicmVhazsKLQogICAgIGRlZmF1bHQgOgorICAgICAgQ0xFQVJfQklUKERldmljZS0+UENTQ05UUiwgRk1DX1BDU0NOVFJfQ05UQjRFTik7CiAgICAgICBicmVhazsKICAgfQogCkBAIC0zNzAsNyArMzU4LDcgQEAKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEZNQ19OT1JTUkFNX1RpbWluZ19Jbml0KEZNQ19OT1JTUkFNX1R5cGVEZWYgKkRldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZNQ19OT1JTUkFNX1RpbWluZ1R5cGVEZWYgKlRpbWluZywgdWludDMyX3QgQmFuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZNQ19OT1JTUkFNX1RpbWluZ1R5cGVEZWYgKlRpbWluZywgdWludDMyX3QgQmFuaykKIHsKICAgdWludDMyX3QgdG1wcjsKIApAQCAtMzk5LDcgKzM4Nyw3IEBACiAgIC8qIENvbmZpZ3VyZSBDbG9jayBkaXZpc2lvbiB2YWx1ZSAoaW4gTk9SU1JBTSBiYW5rIDEpIHdoZW4gY29udGludW91cyBjbG9jayBpcyBlbmFibGVkICovCiAgIGlmIChIQUxfSVNfQklUX1NFVChEZXZpY2UtPkJUQ1JbRk1DX05PUlNSQU1fQkFOSzFdLCBGTUNfQkNSMV9DQ0xLRU4pKQogICB7Ci0gICAgdG1wciA9ICh1aW50MzJfdCkoRGV2aWNlLT5CVENSW0ZNQ19OT1JTUkFNX0JBTksxICsgMVVdICYgfigoKHVpbnQzMl90KTB4MEYpIDw8IEZNQ19CVFJ4X0NMS0RJVl9Qb3MpKTsKKyAgICB0bXByID0gKHVpbnQzMl90KShEZXZpY2UtPkJUQ1JbRk1DX05PUlNSQU1fQkFOSzEgKyAxVV0gJiB+KCgweDBGVSkgPDwgRk1DX0JUUnhfQ0xLRElWX1BvcykpOwogICAgIHRtcHIgfD0gKHVpbnQzMl90KSgoKFRpbWluZy0+Q0xLRGl2aXNpb24pIC0gMVUpIDw8IEZNQ19CVFJ4X0NMS0RJVl9Qb3MpOwogICAgIE1PRElGWV9SRUcoRGV2aWNlLT5CVENSW0ZNQ19OT1JTUkFNX0JBTksxICsgMVVdLCBGTUNfQlRSeF9DTEtESVYsIHRtcHIpOwogICB9CkBAIC00MjAsNyArNDA4LDggQEAKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEZNQ19OT1JTUkFNX0V4dGVuZGVkX1RpbWluZ19Jbml0KEZNQ19OT1JTUkFNX0VYVEVOREVEX1R5cGVEZWYgKkRldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZNQ19OT1JTUkFNX1RpbWluZ1R5cGVEZWYgKlRpbWluZywgdWludDMyX3QgQmFuaywgdWludDMyX3QgRXh0ZW5kZWRNb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1DX05PUlNSQU1fVGltaW5nVHlwZURlZiAqVGltaW5nLCB1aW50MzJfdCBCYW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgRXh0ZW5kZWRNb2RlKQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfRk1DX0VYVEVOREVEX01PREUoRXh0ZW5kZWRNb2RlKSk7CkBAIC00MzQsOSArNDIzLDcgQEAKICAgICBhc3NlcnRfcGFyYW0oSVNfRk1DX0FERFJFU1NfSE9MRF9USU1FKFRpbWluZy0+QWRkcmVzc0hvbGRUaW1lKSk7CiAgICAgYXNzZXJ0X3BhcmFtKElTX0ZNQ19EQVRBU0VUVVBfVElNRShUaW1pbmctPkRhdGFTZXR1cFRpbWUpKTsKICAgICBhc3NlcnRfcGFyYW0oSVNfRk1DX0RBVEFIT0xEX0RVUkFUSU9OKFRpbWluZy0+RGF0YUhvbGRUaW1lKSk7Ci0jaWYgZGVmaW5lZChGTUNfQldUUnhfQlVTVFVSTikKICAgICBhc3NlcnRfcGFyYW0oSVNfRk1DX1RVUk5BUk9VTkRfVElNRShUaW1pbmctPkJ1c1R1cm5Bcm91bmREdXJhdGlvbikpOwotI2VuZGlmIC8qIEZNQ19CV1RSeF9CVVNUVVJOICovCiAgICAgYXNzZXJ0X3BhcmFtKElTX0ZNQ19BQ0NFU1NfTU9ERShUaW1pbmctPkFjY2Vzc01vZGUpKTsKICAgICBhc3NlcnRfcGFyYW0oSVNfRk1DX05PUlNSQU1fQkFOSyhCYW5rKSk7CiAKQEAgLTQ0NSwxMiArNDMyLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUaW1pbmctPkFkZHJlc3NIb2xkVGltZSkgICAgICAgIDw8IEZNQ19CV1RSeF9BRERITERfUG9zKSAgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRpbWluZy0+RGF0YVNldHVwVGltZSkgICAgICAgICAgPDwgRk1DX0JXVFJ4X0RBVEFTVF9Qb3MpICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVGltaW5nLT5EYXRhSG9sZFRpbWUpICAgICAgICAgICA8PCBGTUNfQldUUnhfREFUQUhMRF9Qb3MpIHwKLSNpZiBkZWZpbmVkKEZNQ19CV1RSeF9CVVNUVVJOKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1pbmctPkFjY2Vzc01vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVGltaW5nLT5CdXNUdXJuQXJvdW5kRHVyYXRpb24pICA8PCBGTUNfQldUUnhfQlVTVFVSTl9Qb3MpKSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1pbmctPkFjY2Vzc01vZGUpKTsKLSNlbmRpZiAvKiBGTUNfQldUUnhfQlVTVFVSTiAqLwogICB9CiAgIGVsc2UKICAgewpAQCAtNjA1LDcgKzU4OCw3IEBACiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBGTUNfTkFORF9Db21tb25TcGFjZV9UaW1pbmdfSW5pdChGTUNfTkFORF9UeXBlRGVmICpEZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTUNfTkFORF9QQ0NfVGltaW5nVHlwZURlZiAqVGltaW5nLCB1aW50MzJfdCBCYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1DX05BTkRfUENDX1RpbWluZ1R5cGVEZWYgKlRpbWluZywgdWludDMyX3QgQmFuaykKIHsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0ZNQ19OQU5EX0RFVklDRShEZXZpY2UpKTsKQEAgLTYzNiw3ICs2MTksNyBAQAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgRk1DX05BTkRfQXR0cmlidXRlU3BhY2VfVGltaW5nX0luaXQoRk1DX05BTkRfVHlwZURlZiAqRGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1DX05BTkRfUENDX1RpbWluZ1R5cGVEZWYgKlRpbWluZywgdWludDMyX3QgQmFuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZNQ19OQU5EX1BDQ19UaW1pbmdUeXBlRGVmICpUaW1pbmcsIHVpbnQzMl90IEJhbmspCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19GTUNfTkFORF9ERVZJQ0UoRGV2aWNlKSk7CkBAIC03NTgsNyArNzQxLDcgQEAKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEZNQ19OQU5EX0dldEVDQyhGTUNfTkFORF9UeXBlRGVmICpEZXZpY2UsIHVpbnQzMl90ICpFQ0N2YWwsIHVpbnQzMl90IEJhbmssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0KQogewogICB1aW50MzJfdCB0aWNrc3RhcnQ7CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw1eHhfbGxfaWNhY2hlLmMgYi9TcmMvc3RtMzJsNXh4X2xsX2ljYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MWJjZjkKLS0tIC9kZXYvbnVsbAorKysgYi9TcmMvc3RtMzJsNXh4X2xsX2ljYWNoZS5jCkBAIC0wLDAgKzEsMTM5IEBACisvKioKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQGZpbGUgICAgc3RtMzJsNXh4X2xsX2ljYWNoZS5jCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KKyAgKiBAYnJpZWYgICBJQ0FDSEUgTEwgbW9kdWxlIGRyaXZlci4KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQGF0dGVudGlvbgorICAqCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgorICAqCisgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCisgICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQorICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQorICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqLworI2lmIGRlZmluZWQoVVNFX0ZVTExfTExfRFJJVkVSKQorCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2luY2x1ZGUgInN0bTMybDV4eF9sbF9pY2FjaGUuaCIKKyNpZmRlZiAgVVNFX0ZVTExfQVNTRVJUCisjaW5jbHVkZSAic3RtMzJfYXNzZXJ0LmgiCisjZWxzZQorI2RlZmluZSBhc3NlcnRfcGFyYW0oZXhwcikgKCh2b2lkKTBVKQorI2VuZGlmIC8qIFVTRV9GVUxMX0FTU0VSVCAqLworCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJMNXh4X0xMX0RyaXZlcgorICAqIEB7CisgICovCisKKyNpZiBkZWZpbmVkKElDQUNIRSkKKworLyoqIEBkZWZncm91cCBJQ0FDSEVfTEwgSUNBQ0hFCisgICogQHsKKyAgKi8KKworLyogUHJpdmF0ZSB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcml2YXRlIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJpdmF0ZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAZGVmZ3JvdXAgSUNBQ0hFX0xMX1ByaXZhdGVfTWFjcm9zIElDQUNIRSBQcml2YXRlIE1hY3JvcworICAqIEB7CisgICovCisKKyNkZWZpbmUgSVNfTExfSUNBQ0hFX1JFR0lPTihfX1ZBTFVFX18pICAgICgoKF9fVkFMVUVfXykgPT0gTExfSUNBQ0hFX1JFR0lPTl8wKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1ZBTFVFX18pID09IExMX0lDQUNIRV9SRUdJT05fMSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA9PSBMTF9JQ0FDSEVfUkVHSU9OXzIpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVkFMVUVfXykgPT0gTExfSUNBQ0hFX1JFR0lPTl8zKSkKKworI2RlZmluZSBJU19MTF9JQ0FDSEVfUkVHSU9OX1NJWkUoX19WQUxVRV9fKSAoKChfX1ZBTFVFX18pID09IExMX0lDQUNIRV9SRUdJT05TSVpFXzJNQikgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA9PSBMTF9JQ0FDSEVfUkVHSU9OU0laRV80TUIpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVkFMVUVfXykgPT0gTExfSUNBQ0hFX1JFR0lPTlNJWkVfOE1CKSAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1ZBTFVFX18pID09IExMX0lDQUNIRV9SRUdJT05TSVpFXzE2TUIpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA9PSBMTF9JQ0FDSEVfUkVHSU9OU0laRV8zMk1CKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVkFMVUVfXykgPT0gTExfSUNBQ0hFX1JFR0lPTlNJWkVfNjRNQikgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1ZBTFVFX18pID09IExMX0lDQUNIRV9SRUdJT05TSVpFXzEyOE1CKSkKKworI2RlZmluZSBJU19MTF9JQ0FDSEVfTUFTVEVSX1BPUlQoX19WQUxVRV9fKSAoKChfX1ZBTFVFX18pID09IExMX0lDQUNIRV9NQVNURVIxX1BPUlQpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA9PSBMTF9JQ0FDSEVfTUFTVEVSMl9QT1JUKSkKKworI2RlZmluZSBJU19MTF9JQ0FDSEVfT1VUUFVUX0JVUlNUKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9JQ0FDSEVfT1VUUFVUX0JVUlNUX1dSQVApIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVkFMVUVfXykgPT0gTExfSUNBQ0hFX09VVFBVVF9CVVJTVF9JTkNSKSkKKworLyoqCisgICogQH0KKyAgKi8KKworLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAYWRkdG9ncm91cCBJQ0FDSEVfTExfRXhwb3J0ZWRfRnVuY3Rpb25zCisgICogQHsKKyAgKi8KKworLyoqIEBhZGR0b2dyb3VwIElDQUNIRV9MTF9FRl9SRUdJT05fSW5pdAorICAqIEB7CisgICovCisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIGFuZCBlbmFibGUgdGhlIG1lbW9yeSByZW1hcHBlZCByZWdpb24uCisgICogQG5vdGUgICBUaGUgSW5zdHJ1Y3Rpb24gQ2FjaGUgYW5kIGNvcnJlc3BvbmRpbmcgcmVnaW9uIG11c3QgYmUgZGlzYWJsZWQuCisgICogQHBhcmFtICBSZWdpb24gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzAKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JQ0FDSEVfUkVHSU9OXzMKKyAgKiBAcGFyYW0gIElDQUNIRV9SZWdpb25TdHJ1Y3QgcG9pbnRlciB0byBhIEByZWYgTExfSUNBQ0hFX1JlZ2lvblR5cGVEZWYgc3RydWN0dXJlLgorICAqIEByZXR2YWwgTm9uZQorICAqLwordm9pZCBMTF9JQ0FDSEVfQ29uZmlnUmVnaW9uKHVpbnQzMl90IFJlZ2lvbiwgTExfSUNBQ0hFX1JlZ2lvblR5cGVEZWYgKklDQUNIRV9SZWdpb25TdHJ1Y3QpCit7CisgIF9fSU8gdWludDMyX3QgKnJlZzsKKyAgdWludDMyX3QgdmFsdWU7CisKKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX0xMX0lDQUNIRV9SRUdJT04oUmVnaW9uKSk7CisgIGFzc2VydF9wYXJhbShJU19MTF9JQ0FDSEVfUkVHSU9OX1NJWkUoSUNBQ0hFX1JlZ2lvblN0cnVjdC0+U2l6ZSkpOworICBhc3NlcnRfcGFyYW0oSVNfTExfSUNBQ0hFX01BU1RFUl9QT1JUKElDQUNIRV9SZWdpb25TdHJ1Y3QtPlRyYWZmaWNSb3V0ZSkpOworICBhc3NlcnRfcGFyYW0oSVNfTExfSUNBQ0hFX09VVFBVVF9CVVJTVChJQ0FDSEVfUmVnaW9uU3RydWN0LT5PdXRwdXRCdXJzdFR5cGUpKTsKKworICAvKiBHZXQgcmVnaW9uIGNvbnRyb2wgcmVnaXN0ZXIgYWRkcmVzcyAqLworICByZWcgPSAmKElDQUNIRS0+Q1JSMCkgKyAoMVUgKiBSZWdpb24pOworCisgIC8qIFJlZ2lvbiAyTUI6ICAgQmFzZUFkZHJlc3Mgc2l6ZSA4IGJpdHMsIFJlbWFwQWRkcmVzcyBzaXplIDExIGJpdHMgKi8KKyAgLyogUmVnaW9uIDRNQjogICBCYXNlQWRkcmVzcyBzaXplIDcgYml0cywgUmVtYXBBZGRyZXNzIHNpemUgMTAgYml0cyAqLworICAvKiBSZWdpb24gOE1COiAgIEJhc2VBZGRyZXNzIHNpemUgNiBiaXRzLCBSZW1hcEFkZHJlc3Mgc2l6ZSA5IGJpdHMgICovCisgIC8qIFJlZ2lvbiAxNk1COiAgQmFzZUFkZHJlc3Mgc2l6ZSA1IGJpdHMsIFJlbWFwQWRkcmVzcyBzaXplIDggYml0cyAgKi8KKyAgLyogUmVnaW9uIDMyTUI6ICBCYXNlQWRkcmVzcyBzaXplIDQgYml0cywgUmVtYXBBZGRyZXNzIHNpemUgNyBiaXRzICAqLworICAvKiBSZWdpb24gNjRNQjogIEJhc2VBZGRyZXNzIHNpemUgMyBiaXRzLCBSZW1hcEFkZHJlc3Mgc2l6ZSA2IGJpdHMgICovCisgIC8qIFJlZ2lvbiAxMjhNQjogQmFzZUFkZHJlc3Mgc2l6ZSAyIGJpdHMsIFJlbWFwQWRkcmVzcyBzaXplIDUgYml0cyAgKi8KKyAgdmFsdWUgID0gKChJQ0FDSEVfUmVnaW9uU3RydWN0LT5CYXNlQWRkcmVzcyAmIDB4MUZGRkZGRkZVKSA+PiAyMVUpICYgKDB4RkZVICYgfihJQ0FDSEVfUmVnaW9uU3RydWN0LT5TaXplIC0gMVUpKTsKKyAgdmFsdWUgfD0gKChJQ0FDSEVfUmVnaW9uU3RydWN0LT5SZW1hcEFkZHJlc3MgPj4gNVUpICYgKCh1aW50MzJfdCkoMHg3RkZVICYgfihJQ0FDSEVfUmVnaW9uU3RydWN0LT5TaXplIC0gMVUpKSA8PCBJQ0FDSEVfQ1JSeF9SRU1BUEFERFJfUG9zKSk7CisgIHZhbHVlIHw9IChJQ0FDSEVfUmVnaW9uU3RydWN0LT5TaXplIDw8IElDQUNIRV9DUlJ4X1JTSVpFX1BvcykgfCBJQ0FDSEVfUmVnaW9uU3RydWN0LT5UcmFmZmljUm91dGUgfCBJQ0FDSEVfUmVnaW9uU3RydWN0LT5PdXRwdXRCdXJzdFR5cGU7CisgICpyZWcgPSAodmFsdWUgfCBJQ0FDSEVfQ1JSeF9SRU4pOyAgLyogQ29uZmlndXJlIGFuZCBlbmFibGUgcmVnaW9uICovCit9CisKKy8qKgorICAqIEB9CisgICovCisKKy8qKgorICAqIEB9CisgICovCisKKy8qKgorICAqIEB9CisgICovCisKKyNlbmRpZiAvKiBJQ0FDSEUgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworI2VuZGlmIC8qIFVTRV9GVUxMX0xMX0RSSVZFUiAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDV4eF9sbF9scHRpbS5jIGIvU3JjL3N0bTMybDV4eF9sbF9scHRpbS5jCmluZGV4IGM2YzAwZjIuLmU4NWM4YzkgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw1eHhfbGxfbHB0aW0uYworKysgYi9TcmMvc3RtMzJsNXh4X2xsX2xwdGltLmMKQEAgLTQ4LDIyICs0OCwyMiBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lIElTX0xMX0xQVElNX0NMT0NLX1NPVVJDRShfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfTFBUSU1fQ0xLX1NPVVJDRV9JTlRFUk5BTCkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0xQVElNX0NMS19TT1VSQ0VfRVhURVJOQUwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0xQVElNX0NMS19TT1VSQ0VfRVhURVJOQUwpKQogCiAjZGVmaW5lIElTX0xMX0xQVElNX0NMT0NLX1BSRVNDQUxFUihfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfTFBUSU1fUFJFU0NBTEVSX0RJVjEpICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0xQVElNX1BSRVNDQUxFUl9ESVYyKSAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9MUFRJTV9QUkVTQ0FMRVJfRElWNCkgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfTFBUSU1fUFJFU0NBTEVSX0RJVjgpICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0xQVElNX1BSRVNDQUxFUl9ESVYxNikgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9MUFRJTV9QUkVTQ0FMRVJfRElWMzIpICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfTFBUSU1fUFJFU0NBTEVSX0RJVjY0KSAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0xQVElNX1BSRVNDQUxFUl9ESVYxMjgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0xQVElNX1BSRVNDQUxFUl9ESVYyKSAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9MUFRJTV9QUkVTQ0FMRVJfRElWNCkgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfTFBUSU1fUFJFU0NBTEVSX0RJVjgpICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0xQVElNX1BSRVNDQUxFUl9ESVYxNikgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9MUFRJTV9QUkVTQ0FMRVJfRElWMzIpICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfTFBUSU1fUFJFU0NBTEVSX0RJVjY0KSAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0xQVElNX1BSRVNDQUxFUl9ESVYxMjgpKQogCiAjZGVmaW5lIElTX0xMX0xQVElNX1dBVkVGT1JNKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9MUFRJTV9PVVRQVVRfV0FWRUZPUk1fUFdNKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9MUFRJTV9PVVRQVVRfV0FWRUZPUk1fU0VUT05DRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9MUFRJTV9PVVRQVVRfV0FWRUZPUk1fU0VUT05DRSkpCiAKICNkZWZpbmUgSVNfTExfTFBUSU1fT1VUUFVUX1BPTEFSSVRZKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9MUFRJTV9PVVRQVVRfUE9MQVJJVFlfUkVHVUxBUikgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0xQVElNX09VVFBVVF9QT0xBUklUWV9JTlZFUlNFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9MUFRJTV9PVVRQVVRfUE9MQVJJVFlfSU5WRVJTRSkpCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjY2LDggKzI2Niw3IEBACiAgICAgICBkbwogICAgICAgewogICAgICAgICByY2NfY2xvY2suU1lTQ0xLX0ZyZXF1ZW5jeS0tOyAvKiBVc2VkIGZvciB0aW1lb3V0ICovCi0gICAgICB9Ci0gICAgICB3aGlsZSAoKChMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfQ01QT0soTFBUSU14KSAhPSAxVUwpKSAmJiAoKHJjY19jbG9jay5TWVNDTEtfRnJlcXVlbmN5KSA+IDBVTCkpOworICAgICAgfSB3aGlsZSAoKChMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfQ01QT0soTFBUSU14KSAhPSAxVUwpKSAmJiAoKHJjY19jbG9jay5TWVNDTEtfRnJlcXVlbmN5KSA+IDBVTCkpOwogCiAgICAgICBMTF9MUFRJTV9DbGVhckZsYWdfQ01QT0soTFBUSU14KTsKICAgICB9CkBAIC0yOTgsOCArMjk3LDcgQEAKICAgICAgIGRvCiAgICAgICB7CiAgICAgICAgIHJjY19jbG9jay5TWVNDTEtfRnJlcXVlbmN5LS07IC8qIFVzZWQgZm9yIHRpbWVvdXQgKi8KLSAgICAgIH0KLSAgICAgIHdoaWxlICgoKExMX0xQVElNX0lzQWN0aXZlRmxhZ19SRVBPSyhMUFRJTXgpICE9IDFVTCkpICYmICgocmNjX2Nsb2NrLlNZU0NMS19GcmVxdWVuY3kpID4gMFVMKSk7CisgICAgICB9IHdoaWxlICgoKExMX0xQVElNX0lzQWN0aXZlRmxhZ19SRVBPSyhMUFRJTXgpICE9IDFVTCkpICYmICgocmNjX2Nsb2NrLlNZU0NMS19GcmVxdWVuY3kpID4gMFVMKSk7CiAKICAgICAgIExMX0xQVElNX0NsZWFyRmxhZ19SRVBPSyhMUFRJTXgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw1eHhfbGxfcmNjLmMgYi9TcmMvc3RtMzJsNXh4X2xsX3JjYy5jCmluZGV4IDFmYzA5OTAuLjY3NDJhMTQgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw1eHhfbGxfcmNjLmMKKysrIGIvU3JjL3N0bTMybDV4eF9sbF9yY2MuYwpAQCAtMjQsNyArMjQsOCBAQAogI2luY2x1ZGUgInN0bTMyX2Fzc2VydC5oIgogI2Vsc2UKICNkZWZpbmUgYXNzZXJ0X3BhcmFtKGV4cHIpICgodm9pZCkwVSkKLSNlbmRpZgorI2VuZGlmIC8qIFVTRV9GVUxMX0FTU0VSVCAqLworCiAvKiogQGFkZHRvZ3JvdXAgU1RNMzJMNXh4X0xMX0RyaXZlcgogICAqIEB7CiAgICovCkBAIC00MywyNSArNDQsMjUgQEAKICAgKiBAewogICAqLwogI2RlZmluZSBJU19MTF9SQ0NfVVNBUlRfQ0xLU09VUkNFKF9fVkFMVUVfXykgICgoKF9fVkFMVUVfXykgPT0gTExfUkNDX1VTQVJUMV9DTEtTT1VSQ0UpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1JDQ19VU0FSVDJfQ0xLU09VUkNFKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9SQ0NfVVNBUlQzX0NMS1NPVVJDRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9SQ0NfVVNBUlQyX0NMS1NPVVJDRSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUkNDX1VTQVJUM19DTEtTT1VSQ0UpKQogCiAjZGVmaW5lIElTX0xMX1JDQ19VQVJUX0NMS1NPVVJDRShfX1ZBTFVFX18pICAgICgoKF9fVkFMVUVfXykgPT0gTExfUkNDX1VBUlQ0X0NMS1NPVVJDRSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1JDQ19VQVJUNV9DTEtTT1VSQ0UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1JDQ19VQVJUNV9DTEtTT1VSQ0UpKQogCiAjZGVmaW5lIElTX0xMX1JDQ19MUFVBUlRfQ0xLU09VUkNFKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9SQ0NfTFBVQVJUMV9DTEtTT1VSQ0UpKQogCiAjZGVmaW5lIElTX0xMX1JDQ19JMkNfQ0xLU09VUkNFKF9fVkFMVUVfXykgICAgKCgoX19WQUxVRV9fKSA9PSBMTF9SQ0NfSTJDMV9DTEtTT1VSQ0UpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1JDQ19JMkMyX0NMS1NPVVJDRSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUkNDX0kyQzNfQ0xLU09VUkNFKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9SQ0NfSTJDNF9DTEtTT1VSQ0UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUkNDX0kyQzJfQ0xLU09VUkNFKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9SQ0NfSTJDM19DTEtTT1VSQ0UpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1JDQ19JMkM0X0NMS1NPVVJDRSkpCiAKICNkZWZpbmUgSVNfTExfUkNDX0xQVElNX0NMS1NPVVJDRShfX1ZBTFVFX18pICAoKChfX1ZBTFVFX18pID09IExMX1JDQ19MUFRJTTFfQ0xLU09VUkNFKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9SQ0NfTFBUSU0yX0NMS1NPVVJDRSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUkNDX0xQVElNM19DTEtTT1VSQ0UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUkNDX0xQVElNMl9DTEtTT1VSQ0UpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1JDQ19MUFRJTTNfQ0xLU09VUkNFKSkKIAogI2RlZmluZSBJU19MTF9SQ0NfU0FJX0NMS1NPVVJDRShfX1ZBTFVFX18pICAgICgoKF9fVkFMVUVfXykgPT0gTExfUkNDX1NBSTFfQ0xLU09VUkNFKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9SQ0NfU0FJMl9DTEtTT1VSQ0UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUkNDX1NBSTJfQ0xLU09VUkNFKSkKIAogI2RlZmluZSBJU19MTF9SQ0NfU0RNTUNfS0VSTkVMQ0xLU09VUkNFKF9fVkFMVUVfXykgICgoKF9fVkFMVUVfXykgPT0gTExfUkNDX1NETU1DMV9LRVJORUxDTEtTT1VSQ0UpKQogCkBAIC04OSwxNyArOTAsMTcgQEAKIC8qKiBAZGVmZ3JvdXAgUkNDX0xMX1ByaXZhdGVfRnVuY3Rpb25zIFJDQyBQcml2YXRlIEZ1bmN0aW9ucwogICAqIEB7CiAgICovCi11aW50MzJfdCBSQ0NfR2V0U3lzdGVtQ2xvY2tGcmVxKHZvaWQpOwotdWludDMyX3QgUkNDX0dldEhDTEtDbG9ja0ZyZXEodWludDMyX3QgU1lTQ0xLX0ZyZXF1ZW5jeSk7Ci11aW50MzJfdCBSQ0NfR2V0UENMSzFDbG9ja0ZyZXEodWludDMyX3QgSENMS19GcmVxdWVuY3kpOwotdWludDMyX3QgUkNDX0dldFBDTEsyQ2xvY2tGcmVxKHVpbnQzMl90IEhDTEtfRnJlcXVlbmN5KTsKLXVpbnQzMl90IFJDQ19QTExfR2V0RnJlcURvbWFpbl9TWVModm9pZCk7Ci11aW50MzJfdCBSQ0NfUExMX0dldEZyZXFEb21haW5fU0FJKHZvaWQpOwotdWludDMyX3QgUkNDX1BMTF9HZXRGcmVxRG9tYWluXzQ4TSh2b2lkKTsKLXVpbnQzMl90IFJDQ19QTExTQUkxX0dldEZyZXFEb21haW5fU0FJKHZvaWQpOwotdWludDMyX3QgUkNDX1BMTFNBSTFfR2V0RnJlcURvbWFpbl80OE0odm9pZCk7Ci11aW50MzJfdCBSQ0NfUExMU0FJMV9HZXRGcmVxRG9tYWluX0FEQyh2b2lkKTsKLXVpbnQzMl90IFJDQ19QTExTQUkyX0dldEZyZXFEb21haW5fU0FJKHZvaWQpOworc3RhdGljIHVpbnQzMl90IFJDQ19HZXRTeXN0ZW1DbG9ja0ZyZXEodm9pZCk7CitzdGF0aWMgdWludDMyX3QgUkNDX0dldEhDTEtDbG9ja0ZyZXEodWludDMyX3QgU1lTQ0xLX0ZyZXF1ZW5jeSk7CitzdGF0aWMgdWludDMyX3QgUkNDX0dldFBDTEsxQ2xvY2tGcmVxKHVpbnQzMl90IEhDTEtfRnJlcXVlbmN5KTsKK3N0YXRpYyB1aW50MzJfdCBSQ0NfR2V0UENMSzJDbG9ja0ZyZXEodWludDMyX3QgSENMS19GcmVxdWVuY3kpOworc3RhdGljIHVpbnQzMl90IFJDQ19QTExfR2V0RnJlcURvbWFpbl9TWVModm9pZCk7CitzdGF0aWMgdWludDMyX3QgUkNDX1BMTF9HZXRGcmVxRG9tYWluX1NBSSh2b2lkKTsKK3N0YXRpYyB1aW50MzJfdCBSQ0NfUExMX0dldEZyZXFEb21haW5fNDhNKHZvaWQpOworc3RhdGljIHVpbnQzMl90IFJDQ19QTExTQUkxX0dldEZyZXFEb21haW5fU0FJKHZvaWQpOworc3RhdGljIHVpbnQzMl90IFJDQ19QTExTQUkxX0dldEZyZXFEb21haW5fNDhNKHZvaWQpOworc3RhdGljIHVpbnQzMl90IFJDQ19QTExTQUkxX0dldEZyZXFEb21haW5fQURDKHZvaWQpOworc3RhdGljIHVpbnQzMl90IFJDQ19QTExTQUkyX0dldEZyZXFEb21haW5fU0FJKHZvaWQpOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTEyODQsNyArMTI4NSw3IEBACiAgICogQGJyaWVmICBSZXR1cm4gU1lTVEVNIGNsb2NrIGZyZXF1ZW5jeQogICAqIEByZXR2YWwgU1lTVEVNIGNsb2NrIGZyZXF1ZW5jeSAoaW4gSHopCiAgICovCi11aW50MzJfdCBSQ0NfR2V0U3lzdGVtQ2xvY2tGcmVxKHZvaWQpCitzdGF0aWMgdWludDMyX3QgUkNDX0dldFN5c3RlbUNsb2NrRnJlcSh2b2lkKQogewogICB1aW50MzJfdCBmcmVxdWVuY3k7CiAKQEAgLTEzMjYsNyArMTMyNyw3IEBACiAgICogQHBhcmFtICBTWVNDTEtfRnJlcXVlbmN5IFNZU0NMSyBjbG9jayBmcmVxdWVuY3kKICAgKiBAcmV0dmFsIEhDTEsgY2xvY2sgZnJlcXVlbmN5IChpbiBIeikKICAgKi8KLXVpbnQzMl90IFJDQ19HZXRIQ0xLQ2xvY2tGcmVxKHVpbnQzMl90IFNZU0NMS19GcmVxdWVuY3kpCitzdGF0aWMgdWludDMyX3QgUkNDX0dldEhDTEtDbG9ja0ZyZXEodWludDMyX3QgU1lTQ0xLX0ZyZXF1ZW5jeSkKIHsKICAgLyogSENMSyBjbG9jayBmcmVxdWVuY3kgKi8KICAgcmV0dXJuIF9fTExfUkNDX0NBTENfSENMS19GUkVRKFNZU0NMS19GcmVxdWVuY3ksIExMX1JDQ19HZXRBSEJQcmVzY2FsZXIoKSk7CkBAIC0xMzM3LDcgKzEzMzgsNyBAQAogICAqIEBwYXJhbSAgSENMS19GcmVxdWVuY3kgSENMSyBjbG9jayBmcmVxdWVuY3kKICAgKiBAcmV0dmFsIFBDTEsxIGNsb2NrIGZyZXF1ZW5jeSAoaW4gSHopCiAgICovCi11aW50MzJfdCBSQ0NfR2V0UENMSzFDbG9ja0ZyZXEodWludDMyX3QgSENMS19GcmVxdWVuY3kpCitzdGF0aWMgdWludDMyX3QgUkNDX0dldFBDTEsxQ2xvY2tGcmVxKHVpbnQzMl90IEhDTEtfRnJlcXVlbmN5KQogewogICAvKiBQQ0xLMSBjbG9jayBmcmVxdWVuY3kgKi8KICAgcmV0dXJuIF9fTExfUkNDX0NBTENfUENMSzFfRlJFUShIQ0xLX0ZyZXF1ZW5jeSwgTExfUkNDX0dldEFQQjFQcmVzY2FsZXIoKSk7CkBAIC0xMzQ4LDcgKzEzNDksNyBAQAogICAqIEBwYXJhbSAgSENMS19GcmVxdWVuY3kgSENMSyBjbG9jayBmcmVxdWVuY3kKICAgKiBAcmV0dmFsIFBDTEsyIGNsb2NrIGZyZXF1ZW5jeSAoaW4gSHopCiAgICovCi11aW50MzJfdCBSQ0NfR2V0UENMSzJDbG9ja0ZyZXEodWludDMyX3QgSENMS19GcmVxdWVuY3kpCitzdGF0aWMgdWludDMyX3QgUkNDX0dldFBDTEsyQ2xvY2tGcmVxKHVpbnQzMl90IEhDTEtfRnJlcXVlbmN5KQogewogICAvKiBQQ0xLMiBjbG9jayBmcmVxdWVuY3kgKi8KICAgcmV0dXJuIF9fTExfUkNDX0NBTENfUENMSzJfRlJFUShIQ0xLX0ZyZXF1ZW5jeSwgTExfUkNDX0dldEFQQjJQcmVzY2FsZXIoKSk7CkBAIC0xMzU4LDcgKzEzNTksNyBAQAogICAqIEBicmllZiAgUmV0dXJuIFBMTCBjbG9jayBmcmVxdWVuY3kgdXNlZCBmb3Igc3lzdGVtIGRvbWFpbgogICAqIEByZXR2YWwgUExMIGNsb2NrIGZyZXF1ZW5jeSAoaW4gSHopCiAgICovCi11aW50MzJfdCBSQ0NfUExMX0dldEZyZXFEb21haW5fU1lTKHZvaWQpCitzdGF0aWMgdWludDMyX3QgUkNDX1BMTF9HZXRGcmVxRG9tYWluX1NZUyh2b2lkKQogewogICB1aW50MzJfdCBwbGxpbnB1dGZyZXEsIHBsbHNvdXJjZTsKIApAQCAtMTM5OCw3ICsxMzk5LDcgQEAKICAgKiBAYnJpZWYgIFJldHVybiBQTEwgY2xvY2sgZnJlcXVlbmN5IHVzZWQgZm9yIFNBSSBkb21haW4KICAgKiBAcmV0dmFsIFBMTCBjbG9jayBmcmVxdWVuY3kgKGluIEh6KQogICAqLwotdWludDMyX3QgUkNDX1BMTF9HZXRGcmVxRG9tYWluX1NBSSh2b2lkKQorc3RhdGljIHVpbnQzMl90IFJDQ19QTExfR2V0RnJlcURvbWFpbl9TQUkodm9pZCkKIHsKICAgdWludDMyX3QgcGxsaW5wdXRmcmVxLCBwbGxvdXRwdXRmcmVxLCBwbGxzb3VyY2U7CiAgIHVpbnQzMl90IHBsbG4sIHBsbHBkaXY7CkBAIC0xNDUxLDcgKzE0NTIsNyBAQAogICAqIEBicmllZiAgUmV0dXJuIFBMTCBjbG9jayBmcmVxdWVuY3kgdXNlZCBmb3IgNDggTUh6IGRvbWFpbgogICAqIEByZXR2YWwgUExMIGNsb2NrIGZyZXF1ZW5jeSAoaW4gSHopCiAgICovCi11aW50MzJfdCBSQ0NfUExMX0dldEZyZXFEb21haW5fNDhNKHZvaWQpCitzdGF0aWMgdWludDMyX3QgUkNDX1BMTF9HZXRGcmVxRG9tYWluXzQ4TSh2b2lkKQogewogICB1aW50MzJfdCBwbGxpbnB1dGZyZXEsIHBsbHNvdXJjZTsKIApAQCAtMTQ5Miw3ICsxNDkzLDcgQEAKICAgKiBAYnJpZWYgIFJldHVybiBQTExTQUkxIGNsb2NrIGZyZXF1ZW5jeSB1c2VkIGZvciBTQUkgZG9tYWluCiAgICogQHJldHZhbCBQTExTQUkxIGNsb2NrIGZyZXF1ZW5jeSAoaW4gSHopCiAgICovCi11aW50MzJfdCBSQ0NfUExMU0FJMV9HZXRGcmVxRG9tYWluX1NBSSh2b2lkKQorc3RhdGljIHVpbnQzMl90IFJDQ19QTExTQUkxX0dldEZyZXFEb21haW5fU0FJKHZvaWQpCiB7CiAgIHVpbnQzMl90IHBsbGlucHV0ZnJlcSwgcGxsb3V0cHV0ZnJlcSwgcGxsc291cmNlOwogICB1aW50MzJfdCBwbGxuLCBwbGxwZGl2OwpAQCAtMTU0NCw3ICsxNTQ1LDcgQEAKICAgKiBAYnJpZWYgIFJldHVybiBQTExTQUkxIGNsb2NrIGZyZXF1ZW5jeSB1c2VkIGZvciA0OE1oeiBkb21haW4KICAgKiBAcmV0dmFsIFBMTFNBSTEgY2xvY2sgZnJlcXVlbmN5IChpbiBIeikKICAgKi8KLXVpbnQzMl90IFJDQ19QTExTQUkxX0dldEZyZXFEb21haW5fNDhNKHZvaWQpCitzdGF0aWMgdWludDMyX3QgUkNDX1BMTFNBSTFfR2V0RnJlcURvbWFpbl80OE0odm9pZCkKIHsKICAgdWludDMyX3QgcGxsaW5wdXRmcmVxLCBwbGxzb3VyY2U7CiAKQEAgLTE1ODQsNyArMTU4NSw3IEBACiAgICogQGJyaWVmICBSZXR1cm4gUExMU0FJMSBjbG9jayBmcmVxdWVuY3kgdXNlZCBmb3IgQURDIGRvbWFpbgogICAqIEByZXR2YWwgUExMU0FJMSBjbG9jayBmcmVxdWVuY3kgKGluIEh6KQogICAqLwotdWludDMyX3QgUkNDX1BMTFNBSTFfR2V0RnJlcURvbWFpbl9BREModm9pZCkKK3N0YXRpYyB1aW50MzJfdCBSQ0NfUExMU0FJMV9HZXRGcmVxRG9tYWluX0FEQyh2b2lkKQogewogICB1aW50MzJfdCBwbGxpbnB1dGZyZXEsIHBsbHNvdXJjZTsKIApAQCAtMTYyNCw3ICsxNjI1LDcgQEAKICAgKiBAYnJpZWYgIFJldHVybiBQTExTQUkyIGNsb2NrIGZyZXF1ZW5jeSB1c2VkIGZvciBTQUkgZG9tYWluCiAgICogQHJldHZhbCBQTExTQUkyIGNsb2NrIGZyZXF1ZW5jeSAoaW4gSHopCiAgICovCi11aW50MzJfdCBSQ0NfUExMU0FJMl9HZXRGcmVxRG9tYWluX1NBSSh2b2lkKQorc3RhdGljIHVpbnQzMl90IFJDQ19QTExTQUkyX0dldEZyZXFEb21haW5fU0FJKHZvaWQpCiB7CiAgIHVpbnQzMl90IHBsbGlucHV0ZnJlcSwgcGxsb3V0cHV0ZnJlcSwgcGxsc291cmNlOwogICB1aW50MzJfdCBwbGxuLCBwbGxwZGl2OwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDV4eF9sbF9ybmcuYyBiL1NyYy9zdG0zMmw1eHhfbGxfcm5nLmMKaW5kZXggYTliOTczOS4uMTkzYTczNiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDV4eF9sbF9ybmcuYworKysgYi9TcmMvc3RtMzJsNXh4X2xsX3JuZy5jCkBAIC00Miw3ICs0Miw3IEBACiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiogQGFkZHRvZ3JvdXAgUk5HX0xMX1ByaXZhdGVfTWFjcm9zCisvKiogQGRlZmdyb3VwIFJOR19MTF9Qcml2YXRlX01hY3JvcyBSTkcgUHJpdmF0ZSBNYWNyb3MKICAgKiBAewogICAqLwogI2RlZmluZSBJU19MTF9STkdfQ0VEKF9fTU9ERV9fKSAoKChfX01PREVfXykgPT0gTExfUk5HX0NFRF9FTkFCTEUpIHx8IFwKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw1eHhfbGxfc2RtbWMuYyBiL1NyYy9zdG0zMmw1eHhfbGxfc2RtbWMuYwppbmRleCA3OTc1ZjkxLi5hZmQzMmZkIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNXh4X2xsX3NkbW1jLmMKKysrIGIvU3JjL3N0bTMybDV4eF9sbF9zZG1tYy5jCkBAIC0xNzgsOCArMTc4LDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBIQUxfU0RNTUNfTExfR3JvdXAxIEluaXRpYWxpemF0aW9uIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwotICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAjIyMjIyBJbml0aWFsaXphdGlvbi9kZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgIyMjIyMKQEAgLTIxMCwxMiArMjEwLDEyIEBACiAgIGFzc2VydF9wYXJhbShJU19TRE1NQ19DTEtESVYoSW5pdC5DbG9ja0RpdikpOwogCiAgIC8qIFNldCBTRE1NQyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgKi8KLSAgdG1wcmVnIHw9IChJbml0LkNsb2NrRWRnZSAgICAgICAgICAgfFwKLSAgICAgICAgICAgICBJbml0LkNsb2NrUG93ZXJTYXZlICAgICAgfFwKLSAgICAgICAgICAgICBJbml0LkJ1c1dpZGUgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICBJbml0LkhhcmR3YXJlRmxvd0NvbnRyb2wgfFwKKyAgdG1wcmVnIHw9IChJbml0LkNsb2NrRWRnZSAgICAgICAgICAgfCBcCisgICAgICAgICAgICAgSW5pdC5DbG9ja1Bvd2VyU2F2ZSAgICAgIHwgXAorICAgICAgICAgICAgIEluaXQuQnVzV2lkZSAgICAgICAgICAgICB8IFwKKyAgICAgICAgICAgICBJbml0LkhhcmR3YXJlRmxvd0NvbnRyb2wgfCBcCiAgICAgICAgICAgICAgSW5pdC5DbG9ja0RpdgotICAgICAgICAgICAgICk7CisgICAgICAgICAgICApOwogCiAgIC8qIFdyaXRlIHRvIFNETU1DIENMS0NSICovCiAgIE1PRElGWV9SRUcoU0RNTUN4LT5DTEtDUiwgQ0xLQ1JfQ0xFQVJfTUFTSywgdG1wcmVnKTsKQEAgLTIyOSw4ICsyMjksOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIEhBTF9TRE1NQ19MTF9Hcm91cDIgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucwotICogIEBicmllZiAgIERhdGEgdHJhbnNmZXJzIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgRGF0YSB0cmFuc2ZlcnMgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBJL08gb3BlcmF0aW9uIGZ1bmN0aW9ucyAjIyMjIwpAQCAtMjczLDggKzI3Myw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgSEFMX1NETU1DX0xMX0dyb3VwMyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgbWFuYWdlbWVudCBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgIG1hbmFnZW1lbnQgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zICMjIyMjCkBAIC0zNjIsOSArMzYyLDkgQEAKICAgU0RNTUN4LT5BUkcgPSBDb21tYW5kLT5Bcmd1bWVudDsKIAogICAvKiBTZXQgU0RNTUMgY29tbWFuZCBwYXJhbWV0ZXJzICovCi0gIHRtcHJlZyB8PSAodWludDMyX3QpKENvbW1hbmQtPkNtZEluZGV4ICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZC0+UmVzcG9uc2UgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kLT5XYWl0Rm9ySW50ZXJydXB0IHxcCisgIHRtcHJlZyB8PSAodWludDMyX3QpKENvbW1hbmQtPkNtZEluZGV4ICAgICAgICAgfCBcCisgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmQtPlJlc3BvbnNlICAgICAgICAgfCBcCisgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmQtPldhaXRGb3JJbnRlcnJ1cHQgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmQtPkNQU00pOwogCiAgIC8qIFdyaXRlIHRvIFNETU1DIENNRCByZWdpc3RlciAqLwpAQCAtNDE2LDcgKzQxNiw3IEBACiAgICogICAgICAgICB0aGF0IGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgU0RNTUMgZGF0YS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIFNETU1DX0NvbmZpZ0RhdGEoU0RNTUNfVHlwZURlZiAqU0RNTUN4LCBTRE1NQ19EYXRhSW5pdFR5cGVEZWYqIERhdGEpCitIQUxfU3RhdHVzVHlwZURlZiBTRE1NQ19Db25maWdEYXRhKFNETU1DX1R5cGVEZWYgKlNETU1DeCwgU0RNTUNfRGF0YUluaXRUeXBlRGVmICpEYXRhKQogewogICB1aW50MzJfdCB0bXByZWcgPSAwOwogCkBAIC00MzQsOSArNDM0LDkgQEAKICAgU0RNTUN4LT5ETEVOID0gRGF0YS0+RGF0YUxlbmd0aDsKIAogICAvKiBTZXQgdGhlIFNETU1DIGRhdGEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovCi0gIHRtcHJlZyB8PSAodWludDMyX3QpKERhdGEtPkRhdGFCbG9ja1NpemUgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgRGF0YS0+VHJhbnNmZXJEaXIgICB8XAotICAgICAgICAgICAgICAgICAgICAgICBEYXRhLT5UcmFuc2Zlck1vZGUgIHxcCisgIHRtcHJlZyB8PSAodWludDMyX3QpKERhdGEtPkRhdGFCbG9ja1NpemUgfCBcCisgICAgICAgICAgICAgICAgICAgICAgIERhdGEtPlRyYW5zZmVyRGlyICAgfCBcCisgICAgICAgICAgICAgICAgICAgICAgIERhdGEtPlRyYW5zZmVyTW9kZSAgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEtPkRQU00pOwogCiAgIC8qIFdyaXRlIHRvIFNETU1DIERDVFJMICovCkBAIC00OTIsOCArNDkyLDggQEAKIAogCiAvKiogQGRlZmdyb3VwIEhBTF9TRE1NQ19MTF9Hcm91cDQgQ29tbWFuZCBtYW5hZ2VtZW50IGZ1bmN0aW9ucwotICogIEBicmllZiAgIERhdGEgdHJhbnNmZXJzIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgRGF0YSB0cmFuc2ZlcnMgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAjIyMjIyBDb21tYW5kcyBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAjIyMjIwpAQCAtNzg4LDcgKzc4OCw3IEBACiAgICogQHBhcmFtICBhZGRyOiBBZGRyZXNzIG9mIHRoZSBjYXJkIHRvIGJlIHNlbGVjdGVkCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi11aW50MzJfdCBTRE1NQ19DbWRTZWxEZXNlbChTRE1NQ19UeXBlRGVmICpTRE1NQ3gsIHVpbnQ2NF90IEFkZHIpCit1aW50MzJfdCBTRE1NQ19DbWRTZWxEZXNlbChTRE1NQ19UeXBlRGVmICpTRE1NQ3gsIHVpbnQzMl90IEFkZHIpCiB7CiAgIFNETU1DX0NtZEluaXRUeXBlRGVmICBzZG1tY19jbWRpbml0OwogICB1aW50MzJfdCBlcnJvcnN0YXRlOwpAQCAtMTIwMSw3ICsxMjAxLDcgQEAKICAgKHZvaWQpU0RNTUNfU2VuZENvbW1hbmQoU0RNTUN4LCAmc2RtbWNfY21kaW5pdCk7CiAKICAgLyogQ2hlY2sgZm9yIGVycm9yIGNvbmRpdGlvbnMgKi8KLSAgZXJyb3JzdGF0ZSA9IFNETU1DX0dldENtZFJlc3AxKFNETU1DeCwgU0RNTUNfQ01EX0hTX1NFTkRfRVhUX0NTRCxTRE1NQ19DTURUSU1FT1VUKTsKKyAgZXJyb3JzdGF0ZSA9IFNETU1DX0dldENtZFJlc3AxKFNETU1DeCwgU0RNTUNfQ01EX0hTX1NFTkRfRVhUX0NTRCwgU0RNTUNfQ01EVElNRU9VVCk7CiAKICAgcmV0dXJuIGVycm9yc3RhdGU7CiB9CkBAIC0xMjEyLDggKzEyMTIsOCBAQAogCiAKIC8qKiBAZGVmZ3JvdXAgSEFMX1NETU1DX0xMX0dyb3VwNSBSZXNwb25zZXMgbWFuYWdlbWVudCBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICBSZXNwb25zZXMgZnVuY3Rpb25zCi0gKgorICAqICBAYnJpZWYgICBSZXNwb25zZXMgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAjIyMjIyBSZXNwb25zZXMgbWFuYWdlbWVudCBmdW5jdGlvbnMgIyMjIyMKQEAgLTEyMzcsNyArMTIzNyw3IEBACiAKICAgLyogOCBpcyB0aGUgbnVtYmVyIG9mIHJlcXVpcmVkIGluc3RydWN0aW9ucyBjeWNsZXMgZm9yIHRoZSBiZWxvdyBsb29wIHN0YXRlbWVudC4KICAgVGhlIFRpbWVvdXQgaXMgZXhwcmVzc2VkIGluIG1zICovCi0gIHVpbnQzMl90IGNvdW50ID0gVGltZW91dCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyA4VSAvMTAwMFUpOworICB1aW50MzJfdCBjb3VudCA9IFRpbWVvdXQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gOFUgLyAxMDAwVSk7CiAKICAgZG8KICAgewpAQCAtMTI0NiwxNiArMTI0NiwxNiBAQAogICAgICAgcmV0dXJuIFNETU1DX0VSUk9SX1RJTUVPVVQ7CiAgICAgfQogICAgIHN0YV9yZWcgPSBTRE1NQ3gtPlNUQTsKLSAgfXdoaWxlKCgoc3RhX3JlZyAmIChTRE1NQ19GTEFHX0NDUkNGQUlMIHwgU0RNTUNfRkxBR19DTURSRU5EIHwgU0RNTUNfRkxBR19DVElNRU9VVCB8IFNETU1DX0ZMQUdfQlVTWUQwRU5EKSkgPT0gMFUpIHx8Ci0gICAgICAgICAoKHN0YV9yZWcgJiBTRE1NQ19GTEFHX0NNREFDVCkgIT0gMFUgKSk7CisgIH0gd2hpbGUgKCgoc3RhX3JlZyAmIChTRE1NQ19GTEFHX0NDUkNGQUlMIHwgU0RNTUNfRkxBR19DTURSRU5EIHwgU0RNTUNfRkxBR19DVElNRU9VVCB8CisgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19GTEFHX0JVU1lEMEVORCkpID09IDBVKSB8fCAoKHN0YV9yZWcgJiBTRE1NQ19GTEFHX0NNREFDVCkgIT0gMFUpKTsKIAotICBpZihfX1NETU1DX0dFVF9GTEFHKFNETU1DeCwgU0RNTUNfRkxBR19DVElNRU9VVCkpCisgIGlmIChfX1NETU1DX0dFVF9GTEFHKFNETU1DeCwgU0RNTUNfRkxBR19DVElNRU9VVCkpCiAgIHsKICAgICBfX1NETU1DX0NMRUFSX0ZMQUcoU0RNTUN4LCBTRE1NQ19GTEFHX0NUSU1FT1VUKTsKIAogICAgIHJldHVybiBTRE1NQ19FUlJPUl9DTURfUlNQX1RJTUVPVVQ7CiAgIH0KLSAgZWxzZSBpZihfX1NETU1DX0dFVF9GTEFHKFNETU1DeCwgU0RNTUNfRkxBR19DQ1JDRkFJTCkpCisgIGVsc2UgaWYgKF9fU0RNTUNfR0VUX0ZMQUcoU0RNTUN4LCBTRE1NQ19GTEFHX0NDUkNGQUlMKSkKICAgewogICAgIF9fU0RNTUNfQ0xFQVJfRkxBRyhTRE1NQ3gsIFNETU1DX0ZMQUdfQ0NSQ0ZBSUwpOwogCkBAIC0xMjcwLDcgKzEyNzAsNyBAQAogICBfX1NETU1DX0NMRUFSX0ZMQUcoU0RNTUN4LCBTRE1NQ19TVEFUSUNfQ01EX0ZMQUdTKTsKIAogICAvKiBDaGVjayByZXNwb25zZSByZWNlaXZlZCBpcyBvZiBkZXNpcmVkIGNvbW1hbmQgKi8KLSAgaWYoU0RNTUNfR2V0Q29tbWFuZFJlc3BvbnNlKFNETU1DeCkgIT0gU0RfQ01EKQorICBpZiAoU0RNTUNfR2V0Q29tbWFuZFJlc3BvbnNlKFNETU1DeCkgIT0gU0RfQ01EKQogICB7CiAgICAgcmV0dXJuIFNETU1DX0VSUk9SX0NNRF9DUkNfRkFJTDsKICAgfQpAQCAtMTI3OCw3OSArMTI3OCw3OSBAQAogICAvKiBXZSBoYXZlIHJlY2VpdmVkIHJlc3BvbnNlLCByZXRyaWV2ZSBpdCBmb3IgYW5hbHlzaXMgICovCiAgIHJlc3BvbnNlX3IxID0gU0RNTUNfR2V0UmVzcG9uc2UoU0RNTUN4LCBTRE1NQ19SRVNQMSk7CiAKLSAgaWYoKHJlc3BvbnNlX3IxICYgU0RNTUNfT0NSX0VSUk9SQklUUykgPT0gU0RNTUNfQUxMWkVSTykKKyAgaWYgKChyZXNwb25zZV9yMSAmIFNETU1DX09DUl9FUlJPUkJJVFMpID09IFNETU1DX0FMTFpFUk8pCiAgIHsKICAgICByZXR1cm4gU0RNTUNfRVJST1JfTk9ORTsKICAgfQotICBlbHNlIGlmKChyZXNwb25zZV9yMSAmIFNETU1DX09DUl9BRERSX09VVF9PRl9SQU5HRSkgPT0gU0RNTUNfT0NSX0FERFJfT1VUX09GX1JBTkdFKQorICBlbHNlIGlmICgocmVzcG9uc2VfcjEgJiBTRE1NQ19PQ1JfQUREUl9PVVRfT0ZfUkFOR0UpID09IFNETU1DX09DUl9BRERSX09VVF9PRl9SQU5HRSkKICAgewogICAgIHJldHVybiBTRE1NQ19FUlJPUl9BRERSX09VVF9PRl9SQU5HRTsKICAgfQotICBlbHNlIGlmKChyZXNwb25zZV9yMSAmIFNETU1DX09DUl9BRERSX01JU0FMSUdORUQpID09IFNETU1DX09DUl9BRERSX01JU0FMSUdORUQpCisgIGVsc2UgaWYgKChyZXNwb25zZV9yMSAmIFNETU1DX09DUl9BRERSX01JU0FMSUdORUQpID09IFNETU1DX09DUl9BRERSX01JU0FMSUdORUQpCiAgIHsKICAgICByZXR1cm4gU0RNTUNfRVJST1JfQUREUl9NSVNBTElHTkVEOwogICB9Ci0gIGVsc2UgaWYoKHJlc3BvbnNlX3IxICYgU0RNTUNfT0NSX0JMT0NLX0xFTl9FUlIpID09IFNETU1DX09DUl9CTE9DS19MRU5fRVJSKQorICBlbHNlIGlmICgocmVzcG9uc2VfcjEgJiBTRE1NQ19PQ1JfQkxPQ0tfTEVOX0VSUikgPT0gU0RNTUNfT0NSX0JMT0NLX0xFTl9FUlIpCiAgIHsKICAgICByZXR1cm4gU0RNTUNfRVJST1JfQkxPQ0tfTEVOX0VSUjsKICAgfQotICBlbHNlIGlmKChyZXNwb25zZV9yMSAmIFNETU1DX09DUl9FUkFTRV9TRVFfRVJSKSA9PSBTRE1NQ19PQ1JfRVJBU0VfU0VRX0VSUikKKyAgZWxzZSBpZiAoKHJlc3BvbnNlX3IxICYgU0RNTUNfT0NSX0VSQVNFX1NFUV9FUlIpID09IFNETU1DX09DUl9FUkFTRV9TRVFfRVJSKQogICB7CiAgICAgcmV0dXJuIFNETU1DX0VSUk9SX0VSQVNFX1NFUV9FUlI7CiAgIH0KLSAgZWxzZSBpZigocmVzcG9uc2VfcjEgJiBTRE1NQ19PQ1JfQkFEX0VSQVNFX1BBUkFNKSA9PSBTRE1NQ19PQ1JfQkFEX0VSQVNFX1BBUkFNKQorICBlbHNlIGlmICgocmVzcG9uc2VfcjEgJiBTRE1NQ19PQ1JfQkFEX0VSQVNFX1BBUkFNKSA9PSBTRE1NQ19PQ1JfQkFEX0VSQVNFX1BBUkFNKQogICB7CiAgICAgcmV0dXJuIFNETU1DX0VSUk9SX0JBRF9FUkFTRV9QQVJBTTsKICAgfQotICBlbHNlIGlmKChyZXNwb25zZV9yMSAmIFNETU1DX09DUl9XUklURV9QUk9UX1ZJT0xBVElPTikgPT0gU0RNTUNfT0NSX1dSSVRFX1BST1RfVklPTEFUSU9OKQorICBlbHNlIGlmICgocmVzcG9uc2VfcjEgJiBTRE1NQ19PQ1JfV1JJVEVfUFJPVF9WSU9MQVRJT04pID09IFNETU1DX09DUl9XUklURV9QUk9UX1ZJT0xBVElPTikKICAgewogICAgIHJldHVybiBTRE1NQ19FUlJPUl9XUklURV9QUk9UX1ZJT0xBVElPTjsKICAgfQotICBlbHNlIGlmKChyZXNwb25zZV9yMSAmIFNETU1DX09DUl9MT0NLX1VOTE9DS19GQUlMRUQpID09IFNETU1DX09DUl9MT0NLX1VOTE9DS19GQUlMRUQpCisgIGVsc2UgaWYgKChyZXNwb25zZV9yMSAmIFNETU1DX09DUl9MT0NLX1VOTE9DS19GQUlMRUQpID09IFNETU1DX09DUl9MT0NLX1VOTE9DS19GQUlMRUQpCiAgIHsKICAgICByZXR1cm4gU0RNTUNfRVJST1JfTE9DS19VTkxPQ0tfRkFJTEVEOwogICB9Ci0gIGVsc2UgaWYoKHJlc3BvbnNlX3IxICYgU0RNTUNfT0NSX0NPTV9DUkNfRkFJTEVEKSA9PSBTRE1NQ19PQ1JfQ09NX0NSQ19GQUlMRUQpCisgIGVsc2UgaWYgKChyZXNwb25zZV9yMSAmIFNETU1DX09DUl9DT01fQ1JDX0ZBSUxFRCkgPT0gU0RNTUNfT0NSX0NPTV9DUkNfRkFJTEVEKQogICB7CiAgICAgcmV0dXJuIFNETU1DX0VSUk9SX0NPTV9DUkNfRkFJTEVEOwogICB9Ci0gIGVsc2UgaWYoKHJlc3BvbnNlX3IxICYgU0RNTUNfT0NSX0lMTEVHQUxfQ01EKSA9PSBTRE1NQ19PQ1JfSUxMRUdBTF9DTUQpCisgIGVsc2UgaWYgKChyZXNwb25zZV9yMSAmIFNETU1DX09DUl9JTExFR0FMX0NNRCkgPT0gU0RNTUNfT0NSX0lMTEVHQUxfQ01EKQogICB7CiAgICAgcmV0dXJuIFNETU1DX0VSUk9SX0lMTEVHQUxfQ01EOwogICB9Ci0gIGVsc2UgaWYoKHJlc3BvbnNlX3IxICYgU0RNTUNfT0NSX0NBUkRfRUNDX0ZBSUxFRCkgPT0gU0RNTUNfT0NSX0NBUkRfRUNDX0ZBSUxFRCkKKyAgZWxzZSBpZiAoKHJlc3BvbnNlX3IxICYgU0RNTUNfT0NSX0NBUkRfRUNDX0ZBSUxFRCkgPT0gU0RNTUNfT0NSX0NBUkRfRUNDX0ZBSUxFRCkKICAgewogICAgIHJldHVybiBTRE1NQ19FUlJPUl9DQVJEX0VDQ19GQUlMRUQ7CiAgIH0KLSAgZWxzZSBpZigocmVzcG9uc2VfcjEgJiBTRE1NQ19PQ1JfQ0NfRVJST1IpID09IFNETU1DX09DUl9DQ19FUlJPUikKKyAgZWxzZSBpZiAoKHJlc3BvbnNlX3IxICYgU0RNTUNfT0NSX0NDX0VSUk9SKSA9PSBTRE1NQ19PQ1JfQ0NfRVJST1IpCiAgIHsKICAgICByZXR1cm4gU0RNTUNfRVJST1JfQ0NfRVJSOwogICB9Ci0gIGVsc2UgaWYoKHJlc3BvbnNlX3IxICYgU0RNTUNfT0NSX1NUUkVBTV9SRUFEX1VOREVSUlVOKSA9PSBTRE1NQ19PQ1JfU1RSRUFNX1JFQURfVU5ERVJSVU4pCisgIGVsc2UgaWYgKChyZXNwb25zZV9yMSAmIFNETU1DX09DUl9TVFJFQU1fUkVBRF9VTkRFUlJVTikgPT0gU0RNTUNfT0NSX1NUUkVBTV9SRUFEX1VOREVSUlVOKQogICB7CiAgICAgcmV0dXJuIFNETU1DX0VSUk9SX1NUUkVBTV9SRUFEX1VOREVSUlVOOwogICB9Ci0gIGVsc2UgaWYoKHJlc3BvbnNlX3IxICYgU0RNTUNfT0NSX1NUUkVBTV9XUklURV9PVkVSUlVOKSA9PSBTRE1NQ19PQ1JfU1RSRUFNX1dSSVRFX09WRVJSVU4pCisgIGVsc2UgaWYgKChyZXNwb25zZV9yMSAmIFNETU1DX09DUl9TVFJFQU1fV1JJVEVfT1ZFUlJVTikgPT0gU0RNTUNfT0NSX1NUUkVBTV9XUklURV9PVkVSUlVOKQogICB7CiAgICAgcmV0dXJuIFNETU1DX0VSUk9SX1NUUkVBTV9XUklURV9PVkVSUlVOOwogICB9Ci0gIGVsc2UgaWYoKHJlc3BvbnNlX3IxICYgU0RNTUNfT0NSX0NJRF9DU0RfT1ZFUldSSVRFKSA9PSBTRE1NQ19PQ1JfQ0lEX0NTRF9PVkVSV1JJVEUpCisgIGVsc2UgaWYgKChyZXNwb25zZV9yMSAmIFNETU1DX09DUl9DSURfQ1NEX09WRVJXUklURSkgPT0gU0RNTUNfT0NSX0NJRF9DU0RfT1ZFUldSSVRFKQogICB7CiAgICAgcmV0dXJuIFNETU1DX0VSUk9SX0NJRF9DU0RfT1ZFUldSSVRFOwogICB9Ci0gIGVsc2UgaWYoKHJlc3BvbnNlX3IxICYgU0RNTUNfT0NSX1dQX0VSQVNFX1NLSVApID09IFNETU1DX09DUl9XUF9FUkFTRV9TS0lQKQorICBlbHNlIGlmICgocmVzcG9uc2VfcjEgJiBTRE1NQ19PQ1JfV1BfRVJBU0VfU0tJUCkgPT0gU0RNTUNfT0NSX1dQX0VSQVNFX1NLSVApCiAgIHsKICAgICByZXR1cm4gU0RNTUNfRVJST1JfV1BfRVJBU0VfU0tJUDsKICAgfQotICBlbHNlIGlmKChyZXNwb25zZV9yMSAmIFNETU1DX09DUl9DQVJEX0VDQ19ESVNBQkxFRCkgPT0gU0RNTUNfT0NSX0NBUkRfRUNDX0RJU0FCTEVEKQorICBlbHNlIGlmICgocmVzcG9uc2VfcjEgJiBTRE1NQ19PQ1JfQ0FSRF9FQ0NfRElTQUJMRUQpID09IFNETU1DX09DUl9DQVJEX0VDQ19ESVNBQkxFRCkKICAgewogICAgIHJldHVybiBTRE1NQ19FUlJPUl9DQVJEX0VDQ19ESVNBQkxFRDsKICAgfQotICBlbHNlIGlmKChyZXNwb25zZV9yMSAmIFNETU1DX09DUl9FUkFTRV9SRVNFVCkgPT0gU0RNTUNfT0NSX0VSQVNFX1JFU0VUKQorICBlbHNlIGlmICgocmVzcG9uc2VfcjEgJiBTRE1NQ19PQ1JfRVJBU0VfUkVTRVQpID09IFNETU1DX09DUl9FUkFTRV9SRVNFVCkKICAgewogICAgIHJldHVybiBTRE1NQ19FUlJPUl9FUkFTRV9SRVNFVDsKICAgfQotICBlbHNlIGlmKChyZXNwb25zZV9yMSAmIFNETU1DX09DUl9BS0VfU0VRX0VSUk9SKSA9PSBTRE1NQ19PQ1JfQUtFX1NFUV9FUlJPUikKKyAgZWxzZSBpZiAoKHJlc3BvbnNlX3IxICYgU0RNTUNfT0NSX0FLRV9TRVFfRVJST1IpID09IFNETU1DX09DUl9BS0VfU0VRX0VSUk9SKQogICB7CiAgICAgcmV0dXJuIFNETU1DX0VSUk9SX0FLRV9TRVFfRVJSOwogICB9CkBAIC0xMzcwLDcgKzEzNzAsNyBAQAogICB1aW50MzJfdCBzdGFfcmVnOwogICAvKiA4IGlzIHRoZSBudW1iZXIgb2YgcmVxdWlyZWQgaW5zdHJ1Y3Rpb25zIGN5Y2xlcyBmb3IgdGhlIGJlbG93IGxvb3Agc3RhdGVtZW50LgogICBUaGUgU0RNTUNfQ01EVElNRU9VVCBpcyBleHByZXNzZWQgaW4gbXMgKi8KLSAgdWludDMyX3QgY291bnQgPSBTRE1NQ19DTURUSU1FT1VUICogKFN5c3RlbUNvcmVDbG9jayAvIDhVIC8xMDAwVSk7CisgIHVpbnQzMl90IGNvdW50ID0gU0RNTUNfQ01EVElNRU9VVCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyA4VSAvIDEwMDBVKTsKIAogICBkbwogICB7CkBAIC0xMzc5LDggKzEzNzksOCBAQAogICAgICAgcmV0dXJuIFNETU1DX0VSUk9SX1RJTUVPVVQ7CiAgICAgfQogICAgIHN0YV9yZWcgPSBTRE1NQ3gtPlNUQTsKLSAgfXdoaWxlKCgoc3RhX3JlZyAmIChTRE1NQ19GTEFHX0NDUkNGQUlMIHwgU0RNTUNfRkxBR19DTURSRU5EIHwgU0RNTUNfRkxBR19DVElNRU9VVCkpID09IDBVKSB8fAotICAgICAgICAgKChzdGFfcmVnICYgU0RNTUNfRkxBR19DTURBQ1QpICE9IDBVICkpOworICB9IHdoaWxlICgoKHN0YV9yZWcgJiAoU0RNTUNfRkxBR19DQ1JDRkFJTCB8IFNETU1DX0ZMQUdfQ01EUkVORCB8IFNETU1DX0ZMQUdfQ1RJTUVPVVQpKSA9PSAwVSkgfHwKKyAgICAgICAgICAgKChzdGFfcmVnICYgU0RNTUNfRkxBR19DTURBQ1QpICE9IDBVKSk7CiAKICAgaWYgKF9fU0RNTUNfR0VUX0ZMQUcoU0RNTUN4LCBTRE1NQ19GTEFHX0NUSU1FT1VUKSkKICAgewpAQCAtMTQxNCw3ICsxNDE0LDcgQEAKICAgdWludDMyX3Qgc3RhX3JlZzsKICAgLyogOCBpcyB0aGUgbnVtYmVyIG9mIHJlcXVpcmVkIGluc3RydWN0aW9ucyBjeWNsZXMgZm9yIHRoZSBiZWxvdyBsb29wIHN0YXRlbWVudC4KICAgVGhlIFNETU1DX0NNRFRJTUVPVVQgaXMgZXhwcmVzc2VkIGluIG1zICovCi0gIHVpbnQzMl90IGNvdW50ID0gU0RNTUNfQ01EVElNRU9VVCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyA4VSAvMTAwMFUpOworICB1aW50MzJfdCBjb3VudCA9IFNETU1DX0NNRFRJTUVPVVQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gOFUgLyAxMDAwVSk7CiAKICAgZG8KICAgewpAQCAtMTQyMywxMCArMTQyMywxMCBAQAogICAgICAgcmV0dXJuIFNETU1DX0VSUk9SX1RJTUVPVVQ7CiAgICAgfQogICAgIHN0YV9yZWcgPSBTRE1NQ3gtPlNUQTsKLSAgfXdoaWxlKCgoc3RhX3JlZyAmIChTRE1NQ19GTEFHX0NDUkNGQUlMIHwgU0RNTUNfRkxBR19DTURSRU5EIHwgU0RNTUNfRkxBR19DVElNRU9VVCkpID09IDBVKSB8fAotICAgICAgICAgKChzdGFfcmVnICYgU0RNTUNfRkxBR19DTURBQ1QpICE9IDBVICkpOworICB9IHdoaWxlICgoKHN0YV9yZWcgJiAoU0RNTUNfRkxBR19DQ1JDRkFJTCB8IFNETU1DX0ZMQUdfQ01EUkVORCB8IFNETU1DX0ZMQUdfQ1RJTUVPVVQpKSA9PSAwVSkgfHwKKyAgICAgICAgICAgKChzdGFfcmVnICYgU0RNTUNfRkxBR19DTURBQ1QpICE9IDBVKSk7CiAKLSAgaWYoX19TRE1NQ19HRVRfRkxBRyhTRE1NQ3gsIFNETU1DX0ZMQUdfQ1RJTUVPVVQpKQorICBpZiAoX19TRE1NQ19HRVRfRkxBRyhTRE1NQ3gsIFNETU1DX0ZMQUdfQ1RJTUVPVVQpKQogICB7CiAgICAgX19TRE1NQ19DTEVBUl9GTEFHKFNETU1DeCwgU0RNTUNfRkxBR19DVElNRU9VVCk7CiAKQEAgLTE0NTYsNyArMTQ1Niw3IEBACiAKICAgLyogOCBpcyB0aGUgbnVtYmVyIG9mIHJlcXVpcmVkIGluc3RydWN0aW9ucyBjeWNsZXMgZm9yIHRoZSBiZWxvdyBsb29wIHN0YXRlbWVudC4KICAgVGhlIFNETU1DX0NNRFRJTUVPVVQgaXMgZXhwcmVzc2VkIGluIG1zICovCi0gIHVpbnQzMl90IGNvdW50ID0gU0RNTUNfQ01EVElNRU9VVCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyA4VSAvMTAwMFUpOworICB1aW50MzJfdCBjb3VudCA9IFNETU1DX0NNRFRJTUVPVVQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gOFUgLyAxMDAwVSk7CiAKICAgZG8KICAgewpAQCAtMTQ2NSwxNiArMTQ2NSwxNiBAQAogICAgICAgcmV0dXJuIFNETU1DX0VSUk9SX1RJTUVPVVQ7CiAgICAgfQogICAgIHN0YV9yZWcgPSBTRE1NQ3gtPlNUQTsKLSAgfXdoaWxlKCgoc3RhX3JlZyAmIChTRE1NQ19GTEFHX0NDUkNGQUlMIHwgU0RNTUNfRkxBR19DTURSRU5EIHwgU0RNTUNfRkxBR19DVElNRU9VVCkpID09IDBVKSB8fAotICAgICAgICAgKChzdGFfcmVnICYgU0RNTUNfRkxBR19DTURBQ1QpICE9IDBVICkpOworICB9IHdoaWxlICgoKHN0YV9yZWcgJiAoU0RNTUNfRkxBR19DQ1JDRkFJTCB8IFNETU1DX0ZMQUdfQ01EUkVORCB8IFNETU1DX0ZMQUdfQ1RJTUVPVVQpKSA9PSAwVSkgfHwKKyAgICAgICAgICAgKChzdGFfcmVnICYgU0RNTUNfRkxBR19DTURBQ1QpICE9IDBVKSk7CiAKLSAgaWYoX19TRE1NQ19HRVRfRkxBRyhTRE1NQ3gsIFNETU1DX0ZMQUdfQ1RJTUVPVVQpKQorICBpZiAoX19TRE1NQ19HRVRfRkxBRyhTRE1NQ3gsIFNETU1DX0ZMQUdfQ1RJTUVPVVQpKQogICB7CiAgICAgX19TRE1NQ19DTEVBUl9GTEFHKFNETU1DeCwgU0RNTUNfRkxBR19DVElNRU9VVCk7CiAKICAgICByZXR1cm4gU0RNTUNfRVJST1JfQ01EX1JTUF9USU1FT1VUOwogICB9Ci0gIGVsc2UgaWYoX19TRE1NQ19HRVRfRkxBRyhTRE1NQ3gsIFNETU1DX0ZMQUdfQ0NSQ0ZBSUwpKQorICBlbHNlIGlmIChfX1NETU1DX0dFVF9GTEFHKFNETU1DeCwgU0RNTUNfRkxBR19DQ1JDRkFJTCkpCiAgIHsKICAgICBfX1NETU1DX0NMRUFSX0ZMQUcoU0RNTUN4LCBTRE1NQ19GTEFHX0NDUkNGQUlMKTsKIApAQCAtMTQ4Niw3ICsxNDg2LDcgQEAKICAgfQogCiAgIC8qIENoZWNrIHJlc3BvbnNlIHJlY2VpdmVkIGlzIG9mIGRlc2lyZWQgY29tbWFuZCAqLwotICBpZihTRE1NQ19HZXRDb21tYW5kUmVzcG9uc2UoU0RNTUN4KSAhPSBTRF9DTUQpCisgIGlmIChTRE1NQ19HZXRDb21tYW5kUmVzcG9uc2UoU0RNTUN4KSAhPSBTRF9DTUQpCiAgIHsKICAgICByZXR1cm4gU0RNTUNfRVJST1JfQ01EX0NSQ19GQUlMOwogICB9CkBAIC0xNDk3LDE3ICsxNDk3LDE4IEBACiAgIC8qIFdlIGhhdmUgcmVjZWl2ZWQgcmVzcG9uc2UsIHJldHJpZXZlIGl0LiAgKi8KICAgcmVzcG9uc2VfcjEgPSBTRE1NQ19HZXRSZXNwb25zZShTRE1NQ3gsIFNETU1DX1JFU1AxKTsKIAotICBpZigocmVzcG9uc2VfcjEgJiAoU0RNTUNfUjZfR0VORVJBTF9VTktOT1dOX0VSUk9SIHwgU0RNTUNfUjZfSUxMRUdBTF9DTUQgfCBTRE1NQ19SNl9DT01fQ1JDX0ZBSUxFRCkpID09IFNETU1DX0FMTFpFUk8pCisgIGlmICgocmVzcG9uc2VfcjEgJiAoU0RNTUNfUjZfR0VORVJBTF9VTktOT1dOX0VSUk9SIHwgU0RNTUNfUjZfSUxMRUdBTF9DTUQgfAorICAgICAgICAgICAgICAgICAgICAgIFNETU1DX1I2X0NPTV9DUkNfRkFJTEVEKSkgPT0gU0RNTUNfQUxMWkVSTykKICAgewotICAgICpwUkNBID0gKHVpbnQxNl90KSAocmVzcG9uc2VfcjEgPj4gMTYpOworICAgICpwUkNBID0gKHVpbnQxNl90KShyZXNwb25zZV9yMSA+PiAxNik7CiAKICAgICByZXR1cm4gU0RNTUNfRVJST1JfTk9ORTsKICAgfQotICBlbHNlIGlmKChyZXNwb25zZV9yMSAmIFNETU1DX1I2X0lMTEVHQUxfQ01EKSA9PSBTRE1NQ19SNl9JTExFR0FMX0NNRCkKKyAgZWxzZSBpZiAoKHJlc3BvbnNlX3IxICYgU0RNTUNfUjZfSUxMRUdBTF9DTUQpID09IFNETU1DX1I2X0lMTEVHQUxfQ01EKQogICB7CiAgICAgcmV0dXJuIFNETU1DX0VSUk9SX0lMTEVHQUxfQ01EOwogICB9Ci0gIGVsc2UgaWYoKHJlc3BvbnNlX3IxICYgU0RNTUNfUjZfQ09NX0NSQ19GQUlMRUQpID09IFNETU1DX1I2X0NPTV9DUkNfRkFJTEVEKQorICBlbHNlIGlmICgocmVzcG9uc2VfcjEgJiBTRE1NQ19SNl9DT01fQ1JDX0ZBSUxFRCkgPT0gU0RNTUNfUjZfQ09NX0NSQ19GQUlMRUQpCiAgIHsKICAgICByZXR1cm4gU0RNTUNfRVJST1JfQ09NX0NSQ19GQUlMRUQ7CiAgIH0KQEAgLTE1MjcsNyArMTUyOCw3IEBACiAgIHVpbnQzMl90IHN0YV9yZWc7CiAgIC8qIDggaXMgdGhlIG51bWJlciBvZiByZXF1aXJlZCBpbnN0cnVjdGlvbnMgY3ljbGVzIGZvciB0aGUgYmVsb3cgbG9vcCBzdGF0ZW1lbnQuCiAgIFRoZSBTRE1NQ19DTURUSU1FT1VUIGlzIGV4cHJlc3NlZCBpbiBtcyAqLwotICB1aW50MzJfdCBjb3VudCA9IFNETU1DX0NNRFRJTUVPVVQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gOFUgLzEwMDBVKTsKKyAgdWludDMyX3QgY291bnQgPSBTRE1NQ19DTURUSU1FT1VUICogKFN5c3RlbUNvcmVDbG9jayAvIDhVIC8gMTAwMFUpOwogCiAgIGRvCiAgIHsKQEAgLTE1MzYsMTAgKzE1MzcsMTAgQEAKICAgICAgIHJldHVybiBTRE1NQ19FUlJPUl9USU1FT1VUOwogICAgIH0KICAgICBzdGFfcmVnID0gU0RNTUN4LT5TVEE7Ci0gIH13aGlsZSgoKHN0YV9yZWcgJiAoU0RNTUNfRkxBR19DQ1JDRkFJTCB8IFNETU1DX0ZMQUdfQ01EUkVORCB8IFNETU1DX0ZMQUdfQ1RJTUVPVVQpKSA9PSAwVSkgfHwKLSAgICAgICAgICgoc3RhX3JlZyAmIFNETU1DX0ZMQUdfQ01EQUNUKSAhPSAwVSApKTsKKyAgfSB3aGlsZSAoKChzdGFfcmVnICYgKFNETU1DX0ZMQUdfQ0NSQ0ZBSUwgfCBTRE1NQ19GTEFHX0NNRFJFTkQgfCBTRE1NQ19GTEFHX0NUSU1FT1VUKSkgPT0gMFUpIHx8CisgICAgICAgICAgICgoc3RhX3JlZyAmIFNETU1DX0ZMQUdfQ01EQUNUKSAhPSAwVSkpOwogCi0gIGlmKF9fU0RNTUNfR0VUX0ZMQUcoU0RNTUN4LCBTRE1NQ19GTEFHX0NUSU1FT1VUKSkKKyAgaWYgKF9fU0RNTUNfR0VUX0ZMQUcoU0RNTUN4LCBTRE1NQ19GTEFHX0NUSU1FT1VUKSkKICAgewogICAgIC8qIENhcmQgaXMgU0QgVjIuMCBjb21wbGlhbnQgKi8KICAgICBfX1NETU1DX0NMRUFSX0ZMQUcoU0RNTUN4LCBTRE1NQ19GTEFHX0NUSU1FT1VUKTsKQEAgLTE1NDcsNyArMTU0OCw3IEBACiAgICAgcmV0dXJuIFNETU1DX0VSUk9SX0NNRF9SU1BfVElNRU9VVDsKICAgfQogCi0gIGVsc2UgaWYoX19TRE1NQ19HRVRfRkxBRyhTRE1NQ3gsIFNETU1DX0ZMQUdfQ0NSQ0ZBSUwpKQorICBlbHNlIGlmIChfX1NETU1DX0dFVF9GTEFHKFNETU1DeCwgU0RNTUNfRkxBR19DQ1JDRkFJTCkpCiAgIHsKICAgICAvKiBDYXJkIGlzIFNEIFYyLjAgY29tcGxpYW50ICovCiAgICAgX19TRE1NQ19DTEVBUl9GTEFHKFNETU1DeCwgU0RNTUNfRkxBR19DQ1JDRkFJTCk7CkBAIC0xNTU5LDcgKzE1NjAsNyBAQAogICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KICAgfQogCi0gIGlmKF9fU0RNTUNfR0VUX0ZMQUcoU0RNTUN4LCBTRE1NQ19GTEFHX0NNRFJFTkQpKQorICBpZiAoX19TRE1NQ19HRVRfRkxBRyhTRE1NQ3gsIFNETU1DX0ZMQUdfQ01EUkVORCkpCiAgIHsKICAgICAvKiBDYXJkIGlzIFNEIFYyLjAgY29tcGxpYW50ICovCiAgICAgX19TRE1NQ19DTEVBUl9GTEFHKFNETU1DeCwgU0RNTUNfRkxBR19DTURSRU5EKTsKQEAgLTE1ODcsNyArMTU4OCw3IEBACiB7CiAgIC8qIDggaXMgdGhlIG51bWJlciBvZiByZXF1aXJlZCBpbnN0cnVjdGlvbnMgY3ljbGVzIGZvciB0aGUgYmVsb3cgbG9vcCBzdGF0ZW1lbnQuCiAgIFRoZSBTRE1NQ19DTURUSU1FT1VUIGlzIGV4cHJlc3NlZCBpbiBtcyAqLwotICB1aW50MzJfdCBjb3VudCA9IFNETU1DX0NNRFRJTUVPVVQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gOFUgLzEwMDBVKTsKKyAgdWludDMyX3QgY291bnQgPSBTRE1NQ19DTURUSU1FT1VUICogKFN5c3RlbUNvcmVDbG9jayAvIDhVIC8gMTAwMFUpOwogCiAgIGRvCiAgIHsKQEAgLTE1OTYsNyArMTU5Nyw3IEBACiAgICAgICByZXR1cm4gU0RNTUNfRVJST1JfVElNRU9VVDsKICAgICB9CiAKLSAgfXdoaWxlKCFfX1NETU1DX0dFVF9GTEFHKFNETU1DeCwgU0RNTUNfRkxBR19DTURTRU5UKSk7CisgIH0gd2hpbGUgKCFfX1NETU1DX0dFVF9GTEFHKFNETU1DeCwgU0RNTUNfRkxBR19DTURTRU5UKSk7CiAKICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgX19TRE1NQ19DTEVBUl9GTEFHKFNETU1DeCwgU0RNTUNfU1RBVElDX0NNRF9GTEFHUyk7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNXh4X2xsX3NwaS5jIGIvU3JjL3N0bTMybDV4eF9sbF9zcGkuYwppbmRleCBlYjQwNmE1Li4wMGYxMTI0IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNXh4X2xsX3NwaS5jCisrKyBiL1NyYy9zdG0zMmw1eHhfbGxfc3BpLmMKQEAgLTIzMiw2ICsyMzIsMTIgQEAKICAgICAgICAgICAgICAgIFNQSV9DUjJfRFMgfCBTUElfQ1IyX1NTT0UsCiAgICAgICAgICAgICAgICBTUElfSW5pdFN0cnVjdC0+RGF0YVdpZHRoIHwgKFNQSV9Jbml0U3RydWN0LT5OU1MgPj4gMTZVKSk7CiAKKyAgICAvKiBTZXQgUnggRklGTyB0byBRdWFydGVyICgxIEJ5dGUpIGluIGNhc2Ugb2YgOCBCaXRzIG1vZGUuIE5vIERhdGFQYWNraW5nIGJ5IGRlZmF1bHQgKi8KKyAgICBpZiAoU1BJX0luaXRTdHJ1Y3QtPkRhdGFXaWR0aCA8IExMX1NQSV9EQVRBV0lEVEhfOUJJVCkKKyAgICB7CisgICAgICBMTF9TUElfU2V0UnhGSUZPVGhyZXNob2xkKFNQSXgsIExMX1NQSV9SWF9GSUZPX1RIX1FVQVJURVIpOworICAgIH0KKwogICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTUEl4IENSQ1BSIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAqIENvbmZpZ3VyZSBTUEl4IENSQ1BSIHdpdGggcGFyYW1ldGVyczoKICAgICAgKiAtIENSQ1BvbHk6ICAgICAgICAgICAgQ1JDUE9MWVsxNTowXSBiaXRzCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNXh4X2xsX3VzYXJ0LmMgYi9TcmMvc3RtMzJsNXh4X2xsX3VzYXJ0LmMKaW5kZXggMzYwMDFkMy4uMTRjMDlkMSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDV4eF9sbF91c2FydC5jCisrKyBiL1NyYy9zdG0zMmw1eHhfbGxfdXNhcnQuYwpAQCAtNjYsOSArNjYsNiBAQAogLyogX19WQUxVRV9fIEluIGNhc2Ugb2Ygb3ZlcnNhbXBsaW5nIGJ5IDE2IGFuZCA4LCBCUlIgY29udGVudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxNmQuICovCiAjZGVmaW5lIElTX0xMX1VTQVJUX0JSUl9NSU4oX19WQUxVRV9fKSAoKF9fVkFMVUVfXykgPj0gMTZVKQogCi0vKiBfX1ZBTFVFX18gQlJSIGNvbnRlbnQgbXVzdCBiZSBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIDB4RkZGRi4gKi8KLSNkZWZpbmUgSVNfTExfVVNBUlRfQlJSX01BWChfX1ZBTFVFX18pICgoX19WQUxVRV9fKSA8PSAweDAwMDBGRkZGVSkKLQogI2RlZmluZSBJU19MTF9VU0FSVF9ESVJFQ1RJT04oX19WQUxVRV9fKSAoKChfX1ZBTFVFX18pID09IExMX1VTQVJUX0RJUkVDVElPTl9OT05FKSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVVNBUlRfRElSRUNUSU9OX1JYKSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVVNBUlRfRElSRUNUSU9OX1RYKSBcCkBAIC0yOTAsOSArMjg3LDYgQEAKIAogICAgICAgLyogQ2hlY2sgQlJSIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxNmQgKi8KICAgICAgIGFzc2VydF9wYXJhbShJU19MTF9VU0FSVF9CUlJfTUlOKFVTQVJUeC0+QlJSKSk7Ci0KLSAgICAgIC8qIENoZWNrIEJSUiBpcyBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIDB4RkZGRiAqLwotICAgICAgYXNzZXJ0X3BhcmFtKElTX0xMX1VTQVJUX0JSUl9NQVgoVVNBUlR4LT5CUlIpKTsKICAgICB9CiAKICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVVNBUlQgUFJFU0MgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzUyLDM3ICszNDYsMjUgQEAKICAgICAgQ1J4IHJlZ2lzdGVycyAqLwogICBpZiAoTExfVVNBUlRfSXNFbmFibGVkKFVTQVJUeCkgPT0gMFUpCiAgIHsKLSAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVVNBUlQgQ1IyIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotICAgIC8qIElmIENsb2NrIHNpZ25hbCBoYXMgdG8gYmUgb3V0cHV0ICovCi0gICAgaWYgKFVTQVJUX0Nsb2NrSW5pdFN0cnVjdC0+Q2xvY2tPdXRwdXQgPT0gTExfVVNBUlRfQ0xPQ0tfRElTQUJMRSkKLSAgICB7Ci0gICAgICAvKiBEZWFjdGl2YXRlIENsb2NrIHNpZ25hbCBkZWxpdmVyeSA6Ci0gICAgICAgKiAtIERpc2FibGUgQ2xvY2sgT3V0cHV0OiAgICAgICAgVVNBUlRfQ1IyX0NMS0VOIGNsZWFyZWQKLSAgICAgICAqLwotICAgICAgTExfVVNBUlRfRGlzYWJsZVNDTEtPdXRwdXQoVVNBUlR4KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8qIEVuc3VyZSBVU0FSVCBpbnN0YW5jZSBpcyBVU0FSVCBjYXBhYmxlICovCi0gICAgICBhc3NlcnRfcGFyYW0oSVNfVVNBUlRfSU5TVEFOQ0UoVVNBUlR4KSk7CisgICAgLyogRW5zdXJlIFVTQVJUIGluc3RhbmNlIGlzIFVTQVJUIGNhcGFibGUgKi8KKyAgICBhc3NlcnRfcGFyYW0oSVNfVVNBUlRfSU5TVEFOQ0UoVVNBUlR4KSk7CiAKLSAgICAgIC8qIENoZWNrIGNsb2NrIHJlbGF0ZWQgcGFyYW1ldGVycyAqLwotICAgICAgYXNzZXJ0X3BhcmFtKElTX0xMX1VTQVJUX0NMT0NLUE9MQVJJVFkoVVNBUlRfQ2xvY2tJbml0U3RydWN0LT5DbG9ja1BvbGFyaXR5KSk7Ci0gICAgICBhc3NlcnRfcGFyYW0oSVNfTExfVVNBUlRfQ0xPQ0tQSEFTRShVU0FSVF9DbG9ja0luaXRTdHJ1Y3QtPkNsb2NrUGhhc2UpKTsKLSAgICAgIGFzc2VydF9wYXJhbShJU19MTF9VU0FSVF9MQVNUQklUQ0xLT1VUUFVUKFVTQVJUX0Nsb2NrSW5pdFN0cnVjdC0+TGFzdEJpdENsb2NrUHVsc2UpKTsKKyAgICAvKiBDaGVjayBjbG9jayByZWxhdGVkIHBhcmFtZXRlcnMgKi8KKyAgICBhc3NlcnRfcGFyYW0oSVNfTExfVVNBUlRfQ0xPQ0tQT0xBUklUWShVU0FSVF9DbG9ja0luaXRTdHJ1Y3QtPkNsb2NrUG9sYXJpdHkpKTsKKyAgICBhc3NlcnRfcGFyYW0oSVNfTExfVVNBUlRfQ0xPQ0tQSEFTRShVU0FSVF9DbG9ja0luaXRTdHJ1Y3QtPkNsb2NrUGhhc2UpKTsKKyAgICBhc3NlcnRfcGFyYW0oSVNfTExfVVNBUlRfTEFTVEJJVENMS09VVFBVVChVU0FSVF9DbG9ja0luaXRTdHJ1Y3QtPkxhc3RCaXRDbG9ja1B1bHNlKSk7CiAKLSAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBVU0FSVCBDUjIgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICogQ29uZmlndXJlIFVTQVJUeCBDUjIgKENsb2NrIHNpZ25hbCByZWxhdGVkIGJpdHMpIHdpdGggcGFyYW1ldGVyczoKLSAgICAgICAqIC0gRW5hYmxlIENsb2NrIE91dHB1dDogICAgICAgICBVU0FSVF9DUjJfQ0xLRU4gc2V0Ci0gICAgICAgKiAtIENsb2NrIFBvbGFyaXR5OiAgICAgICAgICAgICAgVVNBUlRfQ1IyX0NQT0wgYml0IGFjY29yZGluZyB0byBVU0FSVF9DbG9ja0luaXRTdHJ1Y3QtPkNsb2NrUG9sYXJpdHkgdmFsdWUKLSAgICAgICAqIC0gQ2xvY2sgUGhhc2U6ICAgICAgICAgICAgICAgICBVU0FSVF9DUjJfQ1BIQSBiaXQgYWNjb3JkaW5nIHRvIFVTQVJUX0Nsb2NrSW5pdFN0cnVjdC0+Q2xvY2tQaGFzZSB2YWx1ZQotICAgICAgICogLSBMYXN0IEJpdCBDbG9jayBQdWxzZSBPdXRwdXQ6IFVTQVJUX0NSMl9MQkNMIGJpdCBhY2NvcmRpbmcgdG8gVVNBUlRfQ2xvY2tJbml0U3RydWN0LT5MYXN0Qml0Q2xvY2tQdWxzZSB2YWx1ZS4KLSAgICAgICAqLwotICAgICAgTU9ESUZZX1JFRyhVU0FSVHgtPkNSMiwKLSAgICAgICAgICAgICAgICAgVVNBUlRfQ1IyX0NMS0VOIHwgVVNBUlRfQ1IyX0NQSEEgfCBVU0FSVF9DUjJfQ1BPTCB8IFVTQVJUX0NSMl9MQkNMLAotICAgICAgICAgICAgICAgICBVU0FSVF9DUjJfQ0xLRU4gfCBVU0FSVF9DbG9ja0luaXRTdHJ1Y3QtPkNsb2NrUG9sYXJpdHkgfAotICAgICAgICAgICAgICAgICBVU0FSVF9DbG9ja0luaXRTdHJ1Y3QtPkNsb2NrUGhhc2UgfCBVU0FSVF9DbG9ja0luaXRTdHJ1Y3QtPkxhc3RCaXRDbG9ja1B1bHNlKTsKLSAgICB9CisgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVTQVJUIENSMiBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogQ29uZmlndXJlIFVTQVJUeCBDUjIgKENsb2NrIHNpZ25hbCByZWxhdGVkIGJpdHMpIHdpdGggcGFyYW1ldGVyczoKKyAgICAgKiAtIENsb2NrIE91dHB1dDogICAgICAgICAgICAgICAgVVNBUlRfQ1IyX0NMS0VOIGJpdCBhY2NvcmRpbmcgdG8gVVNBUlRfQ2xvY2tJbml0U3RydWN0LT5DbG9ja091dHB1dCB2YWx1ZQorICAgICAqIC0gQ2xvY2sgUG9sYXJpdHk6ICAgICAgICAgICAgICBVU0FSVF9DUjJfQ1BPTCBiaXQgYWNjb3JkaW5nIHRvIFVTQVJUX0Nsb2NrSW5pdFN0cnVjdC0+Q2xvY2tQb2xhcml0eSB2YWx1ZQorICAgICAqIC0gQ2xvY2sgUGhhc2U6ICAgICAgICAgICAgICAgICBVU0FSVF9DUjJfQ1BIQSBiaXQgYWNjb3JkaW5nIHRvIFVTQVJUX0Nsb2NrSW5pdFN0cnVjdC0+Q2xvY2tQaGFzZSB2YWx1ZQorICAgICAqIC0gTGFzdCBCaXQgQ2xvY2sgUHVsc2UgT3V0cHV0OiBVU0FSVF9DUjJfTEJDTCBiaXQgYWNjb3JkaW5nIHRvIFVTQVJUX0Nsb2NrSW5pdFN0cnVjdC0+TGFzdEJpdENsb2NrUHVsc2UgdmFsdWUuCisgICAgICovCisgICAgTU9ESUZZX1JFRyhVU0FSVHgtPkNSMiwKKyAgICAgICAgICAgICAgIFVTQVJUX0NSMl9DTEtFTiB8IFVTQVJUX0NSMl9DUEhBIHwgVVNBUlRfQ1IyX0NQT0wgfCBVU0FSVF9DUjJfTEJDTCwKKyAgICAgICAgICAgICAgIFVTQVJUX0Nsb2NrSW5pdFN0cnVjdC0+Q2xvY2tPdXRwdXQgfCBVU0FSVF9DbG9ja0luaXRTdHJ1Y3QtPkNsb2NrUG9sYXJpdHkgfAorICAgICAgICAgICAgICAgVVNBUlRfQ2xvY2tJbml0U3RydWN0LT5DbG9ja1BoYXNlIHwgVVNBUlRfQ2xvY2tJbml0U3RydWN0LT5MYXN0Qml0Q2xvY2tQdWxzZSk7CiAgIH0KICAgLyogRWxzZSAoVVNBUlQgbm90IGluIERpc2FibGVkIHN0YXRlID0+IHJldHVybiBFUlJPUiAqLwogICBlbHNlCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNXh4X2xsX3VzYi5jIGIvU3JjL3N0bTMybDV4eF9sbF91c2IuYwppbmRleCBjNmE3NDhmLi4zNGUzM2QyIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNXh4X2xsX3VzYi5jCisrKyBiL1NyYy9zdG0zMmw1eHhfbGxfdXNiLmMKQEAgLTU2LDggKzU2LDggQEAKIAogLyoqCiAgICogQGJyaWVmICBJbml0aWFsaXplcyB0aGUgVVNCIENvcmUKLSAgKiBAcGFyYW0gIFVTQng6IFVTQiBJbnN0YW5jZQotICAqIEBwYXJhbSAgY2ZnIDogcG9pbnRlciB0byBhIFVTQl9DZmdUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogQHBhcmFtICBVU0J4IFVTQiBJbnN0YW5jZQorICAqIEBwYXJhbSAgY2ZnIHBvaW50ZXIgdG8gYSBVU0JfQ2ZnVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgVVNCeCBwZXJpcGhlcmFsLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwpAQCAtNzgsNyArNzgsNyBAQAogLyoqCiAgICogQGJyaWVmICBVU0JfRW5hYmxlR2xvYmFsSW50CiAgICogICAgICAgICBFbmFibGVzIHRoZSBjb250cm9sbGVyJ3MgR2xvYmFsIEludCBpbiB0aGUgQUhCIENvbmZpZyByZWcKLSAgKiBAcGFyYW0gIFVTQnggOiBTZWxlY3RlZCBkZXZpY2UKKyAgKiBAcGFyYW0gIFVTQnggU2VsZWN0ZWQgZGV2aWNlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfRW5hYmxlR2xvYmFsSW50KFVTQl9UeXBlRGVmICpVU0J4KQpAQCAtMTAzLDcgKzEwMyw3IEBACiAvKioKICAgKiBAYnJpZWYgIFVTQl9EaXNhYmxlR2xvYmFsSW50CiAgICogICAgICAgICBEaXNhYmxlIHRoZSBjb250cm9sbGVyJ3MgR2xvYmFsIEludCBpbiB0aGUgQUhCIENvbmZpZyByZWcKLSAgKiBAcGFyYW0gIFVTQnggOiBTZWxlY3RlZCBkZXZpY2UKKyAgKiBAcGFyYW0gIFVTQnggU2VsZWN0ZWQgZGV2aWNlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfRGlzYWJsZUdsb2JhbEludChVU0JfVHlwZURlZiAqVVNCeCkKQEAgLTEyMywxMSArMTIzLDExIEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgVVNCX1NldEN1cnJlbnRNb2RlIDogU2V0IGZ1bmN0aW9uYWwgbW9kZQotICAqIEBwYXJhbSAgVVNCeCA6IFNlbGVjdGVkIGRldmljZQotICAqIEBwYXJhbSAgbW9kZSA6ICBjdXJyZW50IGNvcmUgbW9kZQorICAqIEBicmllZiAgVVNCX1NldEN1cnJlbnRNb2RlIFNldCBmdW5jdGlvbmFsIG1vZGUKKyAgKiBAcGFyYW0gIFVTQnggU2VsZWN0ZWQgZGV2aWNlCisgICogQHBhcmFtICBtb2RlIGN1cnJlbnQgY29yZSBtb2RlCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgdGhlc2UgdmFsdWVzOgotICAqICAgICAgICAgICAgQGFyZyBVU0JfREVWSUNFX01PREU6IFBlcmlwaGVyYWwgbW9kZQorICAqICAgICAgICAgICAgQGFyZyBVU0JfREVWSUNFX01PREUgUGVyaXBoZXJhbCBtb2RlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfU2V0Q3VycmVudE1vZGUoVVNCX1R5cGVEZWYgKlVTQngsIFVTQl9Nb2RlVHlwZURlZiBtb2RlKQpAQCAtMTQ0LDEwICsxNDQsMTAgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBVU0JfRGV2SW5pdCA6IEluaXRpYWxpemVzIHRoZSBVU0IgY29udHJvbGxlciByZWdpc3RlcnMKKyAgKiBAYnJpZWYgIFVTQl9EZXZJbml0IEluaXRpYWxpemVzIHRoZSBVU0IgY29udHJvbGxlciByZWdpc3RlcnMKICAgKiAgICAgICAgIGZvciBkZXZpY2UgbW9kZQotICAqIEBwYXJhbSAgVVNCeCA6IFNlbGVjdGVkIGRldmljZQotICAqIEBwYXJhbSAgY2ZnICA6IHBvaW50ZXIgdG8gYSBVU0JfQ2ZnVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqIEBwYXJhbSAgVVNCeCBTZWxlY3RlZCBkZXZpY2UKKyAgKiBAcGFyYW0gIGNmZyAgcG9pbnRlciB0byBhIFVTQl9DZmdUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBVU0J4IHBlcmlwaGVyYWwuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCkBAIC0xNTcsMTMgKzE1NywxMyBAQAogICBVTlVTRUQoY2ZnKTsKIAogICAvKiBJbml0IERldmljZSAqLwotICAvKkNOVFJfRlJFUyA9IDEqLworICAvKiBDTlRSX0ZSRVMgPSAxICovCiAgIFVTQngtPkNOVFIgPSAodWludDE2X3QpVVNCX0NOVFJfRlJFUzsKIAotICAvKkNOVFJfRlJFUyA9IDAqLworICAvKiBDTlRSX0ZSRVMgPSAwICovCiAgIFVTQngtPkNOVFIgPSAwVTsKIAotICAvKkNsZWFyIHBlbmRpbmcgaW50ZXJydXB0cyovCisgIC8qIENsZWFyIHBlbmRpbmcgaW50ZXJydXB0cyAqLwogICBVU0J4LT5JU1RSID0gMFU7CiAKICAgLypTZXQgQnRhYmxlIEFkZHJlc3MqLwpAQCAtMTcyLDcxICsxNzIsMTEgQEAKICAgcmV0dXJuIEhBTF9PSzsKIH0KIAotLyoqCi0gICogQGJyaWVmICBVU0JfU2V0RGV2U3BlZWQgOkluaXRpYWxpemVzIHRoZSBkZXZpY2Ugc3BlZWQKLSAgKiAgICAgICAgIGRlcGVuZGluZyBvbiB0aGUgUEhZIHR5cGUgYW5kIHRoZSBlbnVtZXJhdGlvbiBzcGVlZCBvZiB0aGUgZGV2aWNlLgotICAqIEBwYXJhbSAgVVNCeCAgU2VsZWN0ZWQgZGV2aWNlCi0gICogQHBhcmFtICBzcGVlZCAgZGV2aWNlIHNwZWVkCi0gICogQHJldHZhbCAgSGFsIHN0YXR1cwotICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgVVNCX1NldERldlNwZWVkKFVTQl9UeXBlRGVmICpVU0J4LCB1aW50OF90IHNwZWVkKQotewotICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCi0gIFVOVVNFRChVU0J4KTsKLSAgVU5VU0VEKHNwZWVkKTsKLQotICAvKiBOT1RFIDogLSBUaGlzIGZ1bmN0aW9uIGlzIG5vdCByZXF1aXJlZCBieSBVU0IgRGV2aWNlIEZTIHBlcmlwaGVyYWwsIGl0IGlzIHVzZWQKLSAgICAgICAgICAgICAgb25seSBieSBVU0IgT1RHIEZTIHBlcmlwaGVyYWwuCi0gICAgICAgICAgICAtIFRoaXMgZnVuY3Rpb24gaXMgYWRkZWQgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgYWNyb3NzIHBsYXRmb3Jtcy4KLSAgICovCi0KLSAgcmV0dXJuIEhBTF9PSzsKLX0KLQotLyoqCi0gICogQGJyaWVmICBVU0JfRmx1c2hUeEZpZm8gOiBGbHVzaCBhIFR4IEZJRk8KLSAgKiBAcGFyYW0gIFVTQnggOiBTZWxlY3RlZCBkZXZpY2UKLSAgKiBAcGFyYW0gIG51bSA6IEZJRk8gbnVtYmVyCi0gICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBmcm9tIDEgdG8gMTUKLSAgICAgICAgICAgIDE1IG1lYW5zIEZsdXNoIGFsbCBUeCBGSUZPcwotICAqIEByZXR2YWwgSEFMIHN0YXR1cwotICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0ZsdXNoVHhGaWZvKFVTQl9UeXBlRGVmICpVU0J4LCB1aW50MzJfdCBudW0pCi17Ci0gIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KLSAgVU5VU0VEKFVTQngpOwotICBVTlVTRUQobnVtKTsKLQotICAvKiBOT1RFIDogLSBUaGlzIGZ1bmN0aW9uIGlzIG5vdCByZXF1aXJlZCBieSBVU0IgRGV2aWNlIEZTIHBlcmlwaGVyYWwsIGl0IGlzIHVzZWQKLSAgICAgICAgICAgICAgb25seSBieSBVU0IgT1RHIEZTIHBlcmlwaGVyYWwuCi0gICAgICAgICAgICAtIFRoaXMgZnVuY3Rpb24gaXMgYWRkZWQgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgYWNyb3NzIHBsYXRmb3Jtcy4KLSAgICovCi0KLSAgcmV0dXJuIEhBTF9PSzsKLX0KLQotLyoqCi0gICogQGJyaWVmICBVU0JfRmx1c2hSeEZpZm8gOiBGbHVzaCBSeCBGSUZPCi0gICogQHBhcmFtICBVU0J4IDogU2VsZWN0ZWQgZGV2aWNlCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCi0gICovCi1IQUxfU3RhdHVzVHlwZURlZiBVU0JfRmx1c2hSeEZpZm8oVVNCX1R5cGVEZWYgKlVTQngpCi17Ci0gIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KLSAgVU5VU0VEKFVTQngpOwotCi0gIC8qIE5PVEUgOiAtIFRoaXMgZnVuY3Rpb24gaXMgbm90IHJlcXVpcmVkIGJ5IFVTQiBEZXZpY2UgRlMgcGVyaXBoZXJhbCwgaXQgaXMgdXNlZAotICAgICAgICAgICAgICBvbmx5IGJ5IFVTQiBPVEcgRlMgcGVyaXBoZXJhbC4KLSAgICAgICAgICAgIC0gVGhpcyBmdW5jdGlvbiBpcyBhZGRlZCB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSBhY3Jvc3MgcGxhdGZvcm1zLgotICAgKi8KLQotICByZXR1cm4gSEFMX09LOwotfQotCisjaWYgZGVmaW5lZCAoSEFMX1BDRF9NT0RVTEVfRU5BQkxFRCkKIC8qKgogICAqIEBicmllZiAgQWN0aXZhdGUgYW5kIGNvbmZpZ3VyZSBhbiBlbmRwb2ludAotICAqIEBwYXJhbSAgVVNCeCA6IFNlbGVjdGVkIGRldmljZQotICAqIEBwYXJhbSAgZXA6IHBvaW50ZXIgdG8gZW5kcG9pbnQgc3RydWN0dXJlCisgICogQHBhcmFtICBVU0J4IFNlbGVjdGVkIGRldmljZQorICAqIEBwYXJhbSAgZXAgcG9pbnRlciB0byBlbmRwb2ludCBzdHJ1Y3R1cmUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9BY3RpdmF0ZUVuZHBvaW50KFVTQl9UeXBlRGVmICpVU0J4LCBVU0JfRVBUeXBlRGVmICplcCkKQEAgLTI5Nyw5ICsyMzcsMTEgQEAKICAgICB7CiAgICAgICAvKlNldCB0aGUgZW5kcG9pbnQgUmVjZWl2ZSBidWZmZXIgYWRkcmVzcyAqLwogICAgICAgUENEX1NFVF9FUF9SWF9BRERSRVNTKFVTQngsIGVwLT5udW0sIGVwLT5wbWFhZHJlc3MpOworCiAgICAgICAvKlNldCB0aGUgZW5kcG9pbnQgUmVjZWl2ZSBidWZmZXIgY291bnRlciovCiAgICAgICBQQ0RfU0VUX0VQX1JYX0NOVChVU0J4LCBlcC0+bnVtLCBlcC0+bWF4cGFja2V0KTsKICAgICAgIFBDRF9DTEVBUl9SWF9EVE9HKFVTQngsIGVwLT5udW0pOworCiAgICAgICAvKiBDb25maWd1cmUgVkFMSUQgc3RhdHVzIGZvciB0aGUgRW5kcG9pbnQqLwogICAgICAgUENEX1NFVF9FUF9SWF9TVEFUVVMoVVNCeCwgZXAtPm51bSwgVVNCX0VQX1JYX1ZBTElEKTsKICAgICB9CkBAIC0zMDksNiArMjUxLDcgQEAKICAgewogICAgIC8qIFNldCB0aGUgZW5kcG9pbnQgYXMgZG91YmxlIGJ1ZmZlcmVkICovCiAgICAgUENEX1NFVF9FUF9EQlVGKFVTQngsIGVwLT5udW0pOworCiAgICAgLyogU2V0IGJ1ZmZlciBhZGRyZXNzIGZvciBkb3VibGUgYnVmZmVyZWQgbW9kZSAqLwogICAgIFBDRF9TRVRfRVBfREJVRl9BRERSKFVTQngsIGVwLT5udW0sIGVwLT5wbWFhZGRyMCwgZXAtPnBtYWFkZHIxKTsKIApAQCAtMzI3LDcgKzI3MCw2IEBACiAgICAgICBQQ0RfQ0xFQVJfUlhfRFRPRyhVU0J4LCBlcC0+bnVtKTsKICAgICAgIFBDRF9DTEVBUl9UWF9EVE9HKFVTQngsIGVwLT5udW0pOwogCi0KICAgICAgIGlmIChlcC0+dHlwZSAhPSBFUF9UWVBFX0lTT0MpCiAgICAgICB7CiAgICAgICAgIC8qIENvbmZpZ3VyZSBOQUsgc3RhdHVzIGZvciB0aGUgRW5kcG9pbnQgKi8KQEAgLTM0OCw4ICsyOTAsOCBAQAogCiAvKioKICAgKiBAYnJpZWYgIERlLWFjdGl2YXRlIGFuZCBkZS1pbml0aWFsaXplIGFuIGVuZHBvaW50Ci0gICogQHBhcmFtICBVU0J4IDogU2VsZWN0ZWQgZGV2aWNlCi0gICogQHBhcmFtICBlcDogcG9pbnRlciB0byBlbmRwb2ludCBzdHJ1Y3R1cmUKKyAgKiBAcGFyYW0gIFVTQnggU2VsZWN0ZWQgZGV2aWNlCisgICogQHBhcmFtICBlcCBwb2ludGVyIHRvIGVuZHBvaW50IHN0cnVjdHVyZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0RlYWN0aXZhdGVFbmRwb2ludChVU0JfVHlwZURlZiAqVVNCeCwgVVNCX0VQVHlwZURlZiAqZXApCkBAIC0zNTksMTIgKzMwMSwxNCBAQAogICAgIGlmIChlcC0+aXNfaW4gIT0gMFUpCiAgICAgewogICAgICAgUENEX0NMRUFSX1RYX0RUT0coVVNCeCwgZXAtPm51bSk7CisKICAgICAgIC8qIENvbmZpZ3VyZSBESVNBQkxFIHN0YXR1cyBmb3IgdGhlIEVuZHBvaW50Ki8KICAgICAgIFBDRF9TRVRfRVBfVFhfU1RBVFVTKFVTQngsIGVwLT5udW0sIFVTQl9FUF9UWF9ESVMpOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgUENEX0NMRUFSX1JYX0RUT0coVVNCeCwgZXAtPm51bSk7CisKICAgICAgIC8qIENvbmZpZ3VyZSBESVNBQkxFIHN0YXR1cyBmb3IgdGhlIEVuZHBvaW50Ki8KICAgICAgIFBDRF9TRVRfRVBfUlhfU1RBVFVTKFVTQngsIGVwLT5udW0sIFVTQl9FUF9SWF9ESVMpOwogICAgIH0KQEAgLTM5MCw2ICszMzQsNyBAQAogICAgICAgUENEX0NMRUFSX1JYX0RUT0coVVNCeCwgZXAtPm51bSk7CiAgICAgICBQQ0RfQ0xFQVJfVFhfRFRPRyhVU0J4LCBlcC0+bnVtKTsKICAgICAgIFBDRF9SWF9EVE9HKFVTQngsIGVwLT5udW0pOworCiAgICAgICAvKiBDb25maWd1cmUgRElTQUJMRSBzdGF0dXMgZm9yIHRoZSBFbmRwb2ludCovCiAgICAgICBQQ0RfU0VUX0VQX1RYX1NUQVRVUyhVU0J4LCBlcC0+bnVtLCBVU0JfRVBfVFhfRElTKTsKICAgICAgIFBDRF9TRVRfRVBfUlhfU1RBVFVTKFVTQngsIGVwLT5udW0sIFVTQl9FUF9SWF9ESVMpOwpAQCAtNDAwLDIxICszNDUsMjEgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBVU0JfRVBTdGFydFhmZXIgOiBzZXR1cCBhbmQgc3RhcnRzIGEgdHJhbnNmZXIgb3ZlciBhbiBFUAotICAqIEBwYXJhbSAgVVNCeCA6IFNlbGVjdGVkIGRldmljZQotICAqIEBwYXJhbSAgZXA6IHBvaW50ZXIgdG8gZW5kcG9pbnQgc3RydWN0dXJlCisgICogQGJyaWVmICBVU0JfRVBTdGFydFhmZXIgc2V0dXAgYW5kIHN0YXJ0cyBhIHRyYW5zZmVyIG92ZXIgYW4gRVAKKyAgKiBAcGFyYW0gIFVTQnggU2VsZWN0ZWQgZGV2aWNlCisgICogQHBhcmFtICBlcCBwb2ludGVyIHRvIGVuZHBvaW50IHN0cnVjdHVyZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0VQU3RhcnRYZmVyKFVTQl9UeXBlRGVmICpVU0J4LCBVU0JfRVBUeXBlRGVmICplcCkKIHsKLSAgdWludDE2X3QgcG1hYnVmZmVyOwogICB1aW50MzJfdCBsZW47CisgIHVpbnQxNl90IHBtYWJ1ZmZlcjsKICAgdWludDE2X3Qgd0VQVmFsOwogCiAgIC8qIElOIGVuZHBvaW50ICovCiAgIGlmIChlcC0+aXNfaW4gPT0gMVUpCiAgIHsKLSAgICAvKiBNdWx0aSBwYWNrZXQgdHJhbnNmZXIgKi8KKyAgICAvKk11bHRpIHBhY2tldCB0cmFuc2ZlciovCiAgICAgaWYgKGVwLT54ZmVyX2xlbiA+IGVwLT5tYXhwYWNrZXQpCiAgICAgewogICAgICAgbGVuID0gZXAtPm1heHBhY2tldDsKQEAgLTQ5OSwxMCArNDQ0LDExIEBACiAgICAgICAgICAgICBVU0JfV3JpdGVQTUEoVVNCeCwgZXAtPnhmZXJfYnVmZiwgcG1hYnVmZmVyLCAodWludDE2X3QpbGVuKTsKICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgLyogYXV0byBTd2l0Y2ggdG8gc2luZ2xlIGJ1ZmZlciBtb2RlIHdoZW4gdHJhbnNmZXIgPE1wcyBubyBuZWVkIHRvIG1hbmFnZSBpbiBkb3VibGUgYnVmZmVyKi8KKyAgICAgICAgLyogYXV0byBTd2l0Y2ggdG8gc2luZ2xlIGJ1ZmZlciBtb2RlIHdoZW4gdHJhbnNmZXIgPE1wcyBubyBuZWVkIHRvIG1hbmFnZSBpbiBkb3VibGUgYnVmZmVyICovCiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgIGxlbiA9IGVwLT54ZmVyX2xlbl9kYjsKKwogICAgICAgICAgIC8qIGRpc2FibGUgZG91YmxlIGJ1ZmZlciBtb2RlICovCiAgICAgICAgICAgUENEX0NMRUFSX0VQX0RCVUYoVVNCeCwgZXAtPm51bSk7CiAKQEAgLTUxOCwyMSArNDY0LDczIEBACiAgICAgICAvKiBtYW5hZ2UgaXNvY2hyb25vdXMgZG91YmxlIGJ1ZmZlciBJTiBtb2RlICovCiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIC8qIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSBVU0IgZW5kcG9pbnQgKi8KKyAgICAgICAgLyogZW5hYmxlIGRvdWJsZSBidWZmZXIgKi8KKyAgICAgICAgUENEX1NFVF9FUF9EQlVGKFVTQngsIGVwLT5udW0pOworCisgICAgICAgIC8qIGVhY2ggVGltZSB0byB3cml0ZSBpbiBQTUEgeGZlcl9sZW5fZGIgd2lsbCAqLworICAgICAgICBlcC0+eGZlcl9sZW5fZGIgLT0gbGVuOworCisgICAgICAgIC8qIEZpbGwgdGhlIGRhdGEgYnVmZmVyICovCiAgICAgICAgIGlmICgoUENEX0dFVF9FTkRQT0lOVChVU0J4LCBlcC0+bnVtKSAmIFVTQl9FUF9EVE9HX1RYKSAhPSAwVSkKICAgICAgICAgewogICAgICAgICAgIC8qIFNldCB0aGUgRG91YmxlIGJ1ZmZlciBjb3VudGVyIGZvciBwbWFidWZmZXIxICovCiAgICAgICAgICAgUENEX1NFVF9FUF9EQlVGMV9DTlQoVVNCeCwgZXAtPm51bSwgZXAtPmlzX2luLCBsZW4pOwogICAgICAgICAgIHBtYWJ1ZmZlciA9IGVwLT5wbWFhZGRyMTsKKworICAgICAgICAgIC8qIFdyaXRlIHRoZSB1c2VyIGJ1ZmZlciB0byBVU0IgUE1BICovCisgICAgICAgICAgVVNCX1dyaXRlUE1BKFVTQngsIGVwLT54ZmVyX2J1ZmYsIHBtYWJ1ZmZlciwgKHVpbnQxNl90KWxlbik7CisgICAgICAgICAgZXAtPnhmZXJfYnVmZiArPSBsZW47CisKKyAgICAgICAgICBpZiAoZXAtPnhmZXJfbGVuX2RiID4gZXAtPm1heHBhY2tldCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBlcC0+eGZlcl9sZW5fZGIgLT0gbGVuOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgbGVuID0gZXAtPnhmZXJfbGVuX2RiOworICAgICAgICAgICAgZXAtPnhmZXJfbGVuX2RiID0gMFU7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKGxlbiA+IDBVKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFNldCB0aGUgRG91YmxlIGJ1ZmZlciBjb3VudGVyIGZvciBwbWFidWZmZXIwICovCisgICAgICAgICAgICBQQ0RfU0VUX0VQX0RCVUYwX0NOVChVU0J4LCBlcC0+bnVtLCBlcC0+aXNfaW4sIGxlbik7CisgICAgICAgICAgICBwbWFidWZmZXIgPSBlcC0+cG1hYWRkcjA7CisKKyAgICAgICAgICAgIC8qIFdyaXRlIHRoZSB1c2VyIGJ1ZmZlciB0byBVU0IgUE1BICovCisgICAgICAgICAgICBVU0JfV3JpdGVQTUEoVVNCeCwgZXAtPnhmZXJfYnVmZiwgcG1hYnVmZmVyLCAodWludDE2X3QpbGVuKTsKKyAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CiAgICAgICAgICAgLyogU2V0IHRoZSBEb3VibGUgYnVmZmVyIGNvdW50ZXIgZm9yIHBtYWJ1ZmZlcjAgKi8KICAgICAgICAgICBQQ0RfU0VUX0VQX0RCVUYwX0NOVChVU0J4LCBlcC0+bnVtLCBlcC0+aXNfaW4sIGxlbik7CiAgICAgICAgICAgcG1hYnVmZmVyID0gZXAtPnBtYWFkZHIwOworCisgICAgICAgICAgLyogV3JpdGUgdGhlIHVzZXIgYnVmZmVyIHRvIFVTQiBQTUEgKi8KKyAgICAgICAgICBVU0JfV3JpdGVQTUEoVVNCeCwgZXAtPnhmZXJfYnVmZiwgcG1hYnVmZmVyLCAodWludDE2X3QpbGVuKTsKKyAgICAgICAgICBlcC0+eGZlcl9idWZmICs9IGxlbjsKKworICAgICAgICAgIGlmIChlcC0+eGZlcl9sZW5fZGIgPiBlcC0+bWF4cGFja2V0KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGVwLT54ZmVyX2xlbl9kYiAtPSBsZW47CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBsZW4gPSBlcC0+eGZlcl9sZW5fZGI7CisgICAgICAgICAgICBlcC0+eGZlcl9sZW5fZGIgPSAwVTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAobGVuID4gMFUpCisgICAgICAgICAgeworICAgICAgICAgICAgLyogU2V0IHRoZSBEb3VibGUgYnVmZmVyIGNvdW50ZXIgZm9yIHBtYWJ1ZmZlcjEgKi8KKyAgICAgICAgICAgIFBDRF9TRVRfRVBfREJVRjFfQ05UKFVTQngsIGVwLT5udW0sIGVwLT5pc19pbiwgbGVuKTsKKyAgICAgICAgICAgIHBtYWJ1ZmZlciA9IGVwLT5wbWFhZGRyMTsKKworICAgICAgICAgICAgLyogV3JpdGUgdGhlIHVzZXIgYnVmZmVyIHRvIFVTQiBQTUEgKi8KKyAgICAgICAgICAgIFVTQl9Xcml0ZVBNQShVU0J4LCBlcC0+eGZlcl9idWZmLCBwbWFidWZmZXIsICh1aW50MTZfdClsZW4pOworICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBVU0JfV3JpdGVQTUEoVVNCeCwgZXAtPnhmZXJfYnVmZiwgcG1hYnVmZmVyLCAodWludDE2X3QpbGVuKTsKLSAgICAgICAgUENEX0ZyZWVVc2VyQnVmZmVyKFVTQngsIGVwLT5udW0sIGVwLT5pc19pbik7CiAgICAgICB9CiAgICAgfQogCkBAIC01NDIsNyArNTQwLDcgQEAKICAgewogICAgIGlmIChlcC0+ZG91YmxlYnVmZmVyID09IDBVKQogICAgIHsKLSAgICAgIC8qIE11bHRpIHBhY2tldCB0cmFuc2ZlciovCisgICAgICAvKiBNdWx0aSBwYWNrZXQgdHJhbnNmZXIgKi8KICAgICAgIGlmIChlcC0+eGZlcl9sZW4gPiBlcC0+bWF4cGFja2V0KQogICAgICAgewogICAgICAgICBsZW4gPSBlcC0+bWF4cGFja2V0OwpAQCAtNTU0LDIxICs1NTIsMjIgQEAKICAgICAgICAgZXAtPnhmZXJfbGVuID0gMFU7CiAgICAgICB9CiAgICAgICAvKiBjb25maWd1cmUgYW5kIHZhbGlkYXRlIFJ4IGVuZHBvaW50ICovCi0gICAgICAvKlNldCBSWCBidWZmZXIgY291bnQqLwogICAgICAgUENEX1NFVF9FUF9SWF9DTlQoVVNCeCwgZXAtPm51bSwgbGVuKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIC8qRmlyc3QgVHJhbnNmZXIgQ29taW5nIEZyb20gSEFMX1BDRF9FUF9SZWNlaXZlICYgRnJvbSBJU1IqLwotICAgICAgLypTZXQgdGhlIERvdWJsZSBidWZmZXIgY291bnRlciovCisgICAgICAvKiBGaXJzdCBUcmFuc2ZlciBDb21pbmcgRnJvbSBIQUxfUENEX0VQX1JlY2VpdmUgJiBGcm9tIElTUiAqLworICAgICAgLyogU2V0IHRoZSBEb3VibGUgYnVmZmVyIGNvdW50ZXIgKi8KICAgICAgIGlmIChlcC0+dHlwZSA9PSBFUF9UWVBFX0JVTEspCiAgICAgICB7CiAgICAgICAgIFBDRF9TRVRfRVBfREJVRl9DTlQoVVNCeCwgZXAtPm51bSwgZXAtPmlzX2luLCBlcC0+bWF4cGFja2V0KTsKLSAgICAgICAgLypDb21pbmcgZnJvbSBJU1IqLworCisgICAgICAgIC8qIENvbWluZyBmcm9tIElTUiAqLwogICAgICAgICBpZiAoZXAtPnhmZXJfY291bnQgIT0gMFUpCiAgICAgICAgIHsKLSAgICAgICAgICAvKiB1cGRhdGUgbGFzdCB2YWx1ZSB0byBjaGVjayBpZiB0aGVyZSBpcyBibG9ja2luZyBzdGF0ZSovCisgICAgICAgICAgLyogdXBkYXRlIGxhc3QgdmFsdWUgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYmxvY2tpbmcgc3RhdGUgKi8KICAgICAgICAgICB3RVBWYWwgPSBQQ0RfR0VUX0VORFBPSU5UKFVTQngsIGVwLT5udW0pOworCiAgICAgICAgICAgLypCbG9ja2luZyBTdGF0ZSAqLwogICAgICAgICAgIGlmICgoKCh3RVBWYWwgJiBVU0JfRVBfRFRPR19SWCkgIT0gMFUpICYmICgod0VQVmFsICYgVVNCX0VQX0RUT0dfVFgpICE9IDBVKSkgfHwKICAgICAgICAgICAgICAgKCgod0VQVmFsICYgVVNCX0VQX0RUT0dfUlgpID09IDBVKSAmJiAoKHdFUFZhbCAmIFVTQl9FUF9EVE9HX1RYKSA9PSAwVSkpKQpAQCAtNTc3LDEwICs1NzYsMTAgQEAKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIC8qaXNvIG91dCBkb3VibGUgKi8KKyAgICAgIC8qIGlzbyBvdXQgZG91YmxlICovCiAgICAgICBlbHNlIGlmIChlcC0+dHlwZSA9PSBFUF9UWVBFX0lTT0MpCiAgICAgICB7Ci0gICAgICAgIC8qIE11bHRpIHBhY2tldCB0cmFuc2ZlciovCisgICAgICAgIC8qIE11bHRpIHBhY2tldCB0cmFuc2ZlciAqLwogICAgICAgICBpZiAoZXAtPnhmZXJfbGVuID4gZXAtPm1heHBhY2tldCkKICAgICAgICAgewogICAgICAgICAgIGxlbiA9IGVwLT5tYXhwYWNrZXQ7CkBAIC02MDUsNTQgKzYwNCwxMSBAQAogICByZXR1cm4gSEFMX09LOwogfQogCi0vKioKLSAgKiBAYnJpZWYgIFVTQl9Xcml0ZVBhY2tldCA6IFdyaXRlcyBhIHBhY2tldCBpbnRvIHRoZSBUeCBGSUZPIGFzc29jaWF0ZWQKLSAgKiAgICAgICAgIHdpdGggdGhlIEVQL2NoYW5uZWwKLSAgKiBAcGFyYW0gIFVTQnggOiBTZWxlY3RlZCBkZXZpY2UKLSAgKiBAcGFyYW0gIHNyYyA6ICBwb2ludGVyIHRvIHNvdXJjZSBidWZmZXIKLSAgKiBAcGFyYW0gIGNoX2VwX251bSA6IGVuZHBvaW50IG9yIGhvc3QgY2hhbm5lbCBudW1iZXIKLSAgKiBAcGFyYW0gIGxlbiA6IE51bWJlciBvZiBieXRlcyB0byB3cml0ZQotICAqIEByZXR2YWwgSEFMIHN0YXR1cwotICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgVVNCX1dyaXRlUGFja2V0KFVTQl9UeXBlRGVmICpVU0J4LCB1aW50OF90ICpzcmMsIHVpbnQ4X3QgY2hfZXBfbnVtLCB1aW50MTZfdCBsZW4pCi17Ci0gIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KLSAgVU5VU0VEKFVTQngpOwotICBVTlVTRUQoc3JjKTsKLSAgVU5VU0VEKGNoX2VwX251bSk7Ci0gIFVOVVNFRChsZW4pOwotICAvKiBOT1RFIDogLSBUaGlzIGZ1bmN0aW9uIGlzIG5vdCByZXF1aXJlZCBieSBVU0IgRGV2aWNlIEZTIHBlcmlwaGVyYWwsIGl0IGlzIHVzZWQKLSAgICAgICAgICAgICAgb25seSBieSBVU0IgT1RHIEZTIHBlcmlwaGVyYWwuCi0gICAgICAgICAgICAtIFRoaXMgZnVuY3Rpb24gaXMgYWRkZWQgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgYWNyb3NzIHBsYXRmb3Jtcy4KLSAgICovCi0gIHJldHVybiBIQUxfT0s7Ci19CiAKIC8qKgotICAqIEBicmllZiAgVVNCX1JlYWRQYWNrZXQgOiByZWFkIGEgcGFja2V0IGZyb20gdGhlIFR4IEZJRk8gYXNzb2NpYXRlZAotICAqICAgICAgICAgd2l0aCB0aGUgRVAvY2hhbm5lbAotICAqIEBwYXJhbSAgVVNCeCA6IFNlbGVjdGVkIGRldmljZQotICAqIEBwYXJhbSAgZGVzdCA6IGRlc3RpbmF0aW9uIHBvaW50ZXIKLSAgKiBAcGFyYW0gIGxlbiA6IE51bWJlciBvZiBieXRlcyB0byByZWFkCi0gICogQHJldHZhbCBwb2ludGVyIHRvIGRlc3RpbmF0aW9uIGJ1ZmZlcgotICAqLwotdm9pZCAqVVNCX1JlYWRQYWNrZXQoVVNCX1R5cGVEZWYgKlVTQngsIHVpbnQ4X3QgKmRlc3QsIHVpbnQxNl90IGxlbikKLXsKLSAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwotICBVTlVTRUQoVVNCeCk7Ci0gIFVOVVNFRChkZXN0KTsKLSAgVU5VU0VEKGxlbik7Ci0gIC8qIE5PVEUgOiAtIFRoaXMgZnVuY3Rpb24gaXMgbm90IHJlcXVpcmVkIGJ5IFVTQiBEZXZpY2UgRlMgcGVyaXBoZXJhbCwgaXQgaXMgdXNlZAotICAgICAgICAgICAgICBvbmx5IGJ5IFVTQiBPVEcgRlMgcGVyaXBoZXJhbC4KLSAgICAgICAgICAgIC0gVGhpcyBmdW5jdGlvbiBpcyBhZGRlZCB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSBhY3Jvc3MgcGxhdGZvcm1zLgotICAgKi8KLSAgcmV0dXJuICgodm9pZCAqKU5VTEwpOwotfQotCi0vKioKLSAgKiBAYnJpZWYgIFVTQl9FUFNldFN0YWxsIDogc2V0IGEgc3RhbGwgY29uZGl0aW9uIG92ZXIgYW4gRVAKLSAgKiBAcGFyYW0gIFVTQnggOiBTZWxlY3RlZCBkZXZpY2UKLSAgKiBAcGFyYW0gIGVwOiBwb2ludGVyIHRvIGVuZHBvaW50IHN0cnVjdHVyZQorICAqIEBicmllZiAgVVNCX0VQU2V0U3RhbGwgc2V0IGEgc3RhbGwgY29uZGl0aW9uIG92ZXIgYW4gRVAKKyAgKiBAcGFyYW0gIFVTQnggU2VsZWN0ZWQgZGV2aWNlCisgICogQHBhcmFtICBlcCBwb2ludGVyIHRvIGVuZHBvaW50IHN0cnVjdHVyZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0VQU2V0U3RhbGwoVVNCX1R5cGVEZWYgKlVTQngsIFVTQl9FUFR5cGVEZWYgKmVwKQpAQCAtNjcwLDkgKzYyNiw5IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgVVNCX0VQQ2xlYXJTdGFsbCA6IENsZWFyIGEgc3RhbGwgY29uZGl0aW9uIG92ZXIgYW4gRVAKLSAgKiBAcGFyYW0gIFVTQnggOiBTZWxlY3RlZCBkZXZpY2UKLSAgKiBAcGFyYW0gIGVwOiBwb2ludGVyIHRvIGVuZHBvaW50IHN0cnVjdHVyZQorICAqIEBicmllZiAgVVNCX0VQQ2xlYXJTdGFsbCBDbGVhciBhIHN0YWxsIGNvbmRpdGlvbiBvdmVyIGFuIEVQCisgICogQHBhcmFtICBVU0J4IFNlbGVjdGVkIGRldmljZQorICAqIEBwYXJhbSAgZXAgcG9pbnRlciB0byBlbmRwb2ludCBzdHJ1Y3R1cmUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9FUENsZWFyU3RhbGwoVVNCX1R5cGVEZWYgKlVTQngsIFVTQl9FUFR5cGVEZWYgKmVwKQpAQCAtNjkzLDE3ICs2NDksMTggQEAKICAgICB7CiAgICAgICBQQ0RfQ0xFQVJfUlhfRFRPRyhVU0J4LCBlcC0+bnVtKTsKIAotICAgICAgLyogQ29uZmlndXJlIFZBTElEIHN0YXR1cyBmb3IgdGhlIEVuZHBvaW50Ki8KKyAgICAgIC8qIENvbmZpZ3VyZSBWQUxJRCBzdGF0dXMgZm9yIHRoZSBFbmRwb2ludCAqLwogICAgICAgUENEX1NFVF9FUF9SWF9TVEFUVVMoVVNCeCwgZXAtPm51bSwgVVNCX0VQX1JYX1ZBTElEKTsKICAgICB9CiAgIH0KIAogICByZXR1cm4gSEFMX09LOwogfQorI2VuZGlmCiAKIC8qKgotICAqIEBicmllZiAgVVNCX1N0b3BEZXZpY2UgOiBTdG9wIHRoZSB1c2IgZGV2aWNlIG1vZGUKLSAgKiBAcGFyYW0gIFVTQnggOiBTZWxlY3RlZCBkZXZpY2UKKyAgKiBAYnJpZWYgIFVTQl9TdG9wRGV2aWNlIFN0b3AgdGhlIHVzYiBkZXZpY2UgbW9kZQorICAqIEBwYXJhbSAgVVNCeCBTZWxlY3RlZCBkZXZpY2UKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9TdG9wRGV2aWNlKFVTQl9UeXBlRGVmICpVU0J4KQpAQCAtNzIxLDkgKzY3OCw5IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgVVNCX1NldERldkFkZHJlc3MgOiBTdG9wIHRoZSB1c2IgZGV2aWNlIG1vZGUKLSAgKiBAcGFyYW0gIFVTQnggOiBTZWxlY3RlZCBkZXZpY2UKLSAgKiBAcGFyYW0gIGFkZHJlc3MgOiBuZXcgZGV2aWNlIGFkZHJlc3MgdG8gYmUgYXNzaWduZWQKKyAgKiBAYnJpZWYgIFVTQl9TZXREZXZBZGRyZXNzIFN0b3AgdGhlIHVzYiBkZXZpY2UgbW9kZQorICAqIEBwYXJhbSAgVVNCeCBTZWxlY3RlZCBkZXZpY2UKKyAgKiBAcGFyYW0gIGFkZHJlc3MgbmV3IGRldmljZSBhZGRyZXNzIHRvIGJlIGFzc2lnbmVkCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgZnJvbSAwIHRvIDI1NQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwpAQCAtNzM5LDggKzY5Niw4IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgVVNCX0RldkNvbm5lY3QgOiBDb25uZWN0IHRoZSBVU0IgZGV2aWNlIGJ5IGVuYWJsaW5nIHRoZSBwdWxsLXVwL3B1bGwtZG93bgotICAqIEBwYXJhbSAgVVNCeCA6IFNlbGVjdGVkIGRldmljZQorICAqIEBicmllZiAgVVNCX0RldkNvbm5lY3QgQ29ubmVjdCB0aGUgVVNCIGRldmljZSBieSBlbmFibGluZyB0aGUgcHVsbC11cC9wdWxsLWRvd24KKyAgKiBAcGFyYW0gIFVTQnggU2VsZWN0ZWQgZGV2aWNlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiAgVVNCX0RldkNvbm5lY3QoVVNCX1R5cGVEZWYgKlVTQngpCkBAIC03NTIsOCArNzA5LDggQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBVU0JfRGV2RGlzY29ubmVjdCA6IERpc2Nvbm5lY3QgdGhlIFVTQiBkZXZpY2UgYnkgZGlzYWJsaW5nIHRoZSBwdWxsLXVwL3B1bGwtZG93bgotICAqIEBwYXJhbSAgVVNCeCA6IFNlbGVjdGVkIGRldmljZQorICAqIEBicmllZiAgVVNCX0RldkRpc2Nvbm5lY3QgRGlzY29ubmVjdCB0aGUgVVNCIGRldmljZSBieSBkaXNhYmxpbmcgdGhlIHB1bGwtdXAvcHVsbC1kb3duCisgICogQHBhcmFtICBVU0J4IFNlbGVjdGVkIGRldmljZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgIFVTQl9EZXZEaXNjb25uZWN0KFVTQl9UeXBlRGVmICpVU0J4KQpAQCAtNzY1LDggKzcyMiw4IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgVVNCX1JlYWRJbnRlcnJ1cHRzOiByZXR1cm4gdGhlIGdsb2JhbCBVU0IgaW50ZXJydXB0IHN0YXR1cwotICAqIEBwYXJhbSAgVVNCeCA6IFNlbGVjdGVkIGRldmljZQorICAqIEBicmllZiAgVVNCX1JlYWRJbnRlcnJ1cHRzIHJldHVybiB0aGUgZ2xvYmFsIFVTQiBpbnRlcnJ1cHQgc3RhdHVzCisgICogQHBhcmFtICBVU0J4IFNlbGVjdGVkIGRldmljZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogdWludDMyX3QgIFVTQl9SZWFkSW50ZXJydXB0cyhVU0JfVHlwZURlZiAqVVNCeCkKQEAgLTc3OCwxMTMgKzczNSw4IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgVVNCX1JlYWREZXZBbGxPdXRFcEludGVycnVwdDogcmV0dXJuIHRoZSBVU0IgZGV2aWNlIE9VVCBlbmRwb2ludHMgaW50ZXJydXB0IHN0YXR1cwotICAqIEBwYXJhbSAgVVNCeCA6IFNlbGVjdGVkIGRldmljZQotICAqIEByZXR2YWwgSEFMIHN0YXR1cwotICAqLwotdWludDMyX3QgVVNCX1JlYWREZXZBbGxPdXRFcEludGVycnVwdChVU0JfVHlwZURlZiAqVVNCeCkKLXsKLSAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwotICBVTlVTRUQoVVNCeCk7Ci0gIC8qIE5PVEUgOiAtIFRoaXMgZnVuY3Rpb24gaXMgbm90IHJlcXVpcmVkIGJ5IFVTQiBEZXZpY2UgRlMgcGVyaXBoZXJhbCwgaXQgaXMgdXNlZAotICAgICAgICAgICAgICBvbmx5IGJ5IFVTQiBPVEcgRlMgcGVyaXBoZXJhbC4KLSAgICAgICAgICAgIC0gVGhpcyBmdW5jdGlvbiBpcyBhZGRlZCB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSBhY3Jvc3MgcGxhdGZvcm1zLgotICAgKi8KLSAgcmV0dXJuICgwKTsKLX0KLQotLyoqCi0gICogQGJyaWVmICBVU0JfUmVhZERldkFsbEluRXBJbnRlcnJ1cHQ6IHJldHVybiB0aGUgVVNCIGRldmljZSBJTiBlbmRwb2ludHMgaW50ZXJydXB0IHN0YXR1cwotICAqIEBwYXJhbSAgVVNCeCA6IFNlbGVjdGVkIGRldmljZQotICAqIEByZXR2YWwgSEFMIHN0YXR1cwotICAqLwotdWludDMyX3QgVVNCX1JlYWREZXZBbGxJbkVwSW50ZXJydXB0KFVTQl9UeXBlRGVmICpVU0J4KQotewotICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCi0gIFVOVVNFRChVU0J4KTsKLSAgLyogTk9URSA6IC0gVGhpcyBmdW5jdGlvbiBpcyBub3QgcmVxdWlyZWQgYnkgVVNCIERldmljZSBGUyBwZXJpcGhlcmFsLCBpdCBpcyB1c2VkCi0gICAgICAgICAgICAgIG9ubHkgYnkgVVNCIE9URyBGUyBwZXJpcGhlcmFsLgotICAgICAgICAgICAgLSBUaGlzIGZ1bmN0aW9uIGlzIGFkZGVkIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5IGFjcm9zcyBwbGF0Zm9ybXMuCi0gICAqLwotICByZXR1cm4gKDApOwotfQotCi0vKioKLSAgKiBAYnJpZWYgIFJldHVybnMgRGV2aWNlIE9VVCBFUCBJbnRlcnJ1cHQgcmVnaXN0ZXIKLSAgKiBAcGFyYW0gIFVTQnggOiBTZWxlY3RlZCBkZXZpY2UKLSAgKiBAcGFyYW0gIGVwbnVtIDogZW5kcG9pbnQgbnVtYmVyCi0gICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgZnJvbSAwIHRvIDE1Ci0gICogQHJldHZhbCBEZXZpY2UgT1VUIEVQIEludGVycnVwdCByZWdpc3RlcgotICAqLwotdWludDMyX3QgVVNCX1JlYWREZXZPdXRFUEludGVycnVwdChVU0JfVHlwZURlZiAqVVNCeCwgdWludDhfdCBlcG51bSkKLXsKLSAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwotICBVTlVTRUQoVVNCeCk7Ci0gIFVOVVNFRChlcG51bSk7Ci0gIC8qIE5PVEUgOiAtIFRoaXMgZnVuY3Rpb24gaXMgbm90IHJlcXVpcmVkIGJ5IFVTQiBEZXZpY2UgRlMgcGVyaXBoZXJhbCwgaXQgaXMgdXNlZAotICAgICAgICAgICAgICBvbmx5IGJ5IFVTQiBPVEcgRlMgcGVyaXBoZXJhbC4KLSAgICAgICAgICAgIC0gVGhpcyBmdW5jdGlvbiBpcyBhZGRlZCB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSBhY3Jvc3MgcGxhdGZvcm1zLgotICAgKi8KLSAgcmV0dXJuICgwKTsKLX0KLQotLyoqCi0gICogQGJyaWVmICBSZXR1cm5zIERldmljZSBJTiBFUCBJbnRlcnJ1cHQgcmVnaXN0ZXIKLSAgKiBAcGFyYW0gIFVTQnggOiBTZWxlY3RlZCBkZXZpY2UKLSAgKiBAcGFyYW0gIGVwbnVtIDogZW5kcG9pbnQgbnVtYmVyCi0gICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgZnJvbSAwIHRvIDE1Ci0gICogQHJldHZhbCBEZXZpY2UgSU4gRVAgSW50ZXJydXB0IHJlZ2lzdGVyCi0gICovCi11aW50MzJfdCBVU0JfUmVhZERldkluRVBJbnRlcnJ1cHQoVVNCX1R5cGVEZWYgKlVTQngsIHVpbnQ4X3QgZXBudW0pCi17Ci0gIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KLSAgVU5VU0VEKFVTQngpOwotICBVTlVTRUQoZXBudW0pOwotICAvKiBOT1RFIDogLSBUaGlzIGZ1bmN0aW9uIGlzIG5vdCByZXF1aXJlZCBieSBVU0IgRGV2aWNlIEZTIHBlcmlwaGVyYWwsIGl0IGlzIHVzZWQKLSAgICAgICAgICAgICAgb25seSBieSBVU0IgT1RHIEZTIHBlcmlwaGVyYWwuCi0gICAgICAgICAgICAtIFRoaXMgZnVuY3Rpb24gaXMgYWRkZWQgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgYWNyb3NzIHBsYXRmb3Jtcy4KLSAgICovCi0gIHJldHVybiAoMCk7Ci19Ci0KLS8qKgotICAqIEBicmllZiAgVVNCX0NsZWFySW50ZXJydXB0czogY2xlYXIgYSBVU0IgaW50ZXJydXB0Ci0gICogQHBhcmFtICBVU0J4ICBTZWxlY3RlZCBkZXZpY2UKLSAgKiBAcGFyYW0gIGludGVycnVwdCAgZmxhZwotICAqIEByZXR2YWwgTm9uZQotICAqLwotdm9pZCAgVVNCX0NsZWFySW50ZXJydXB0cyhVU0JfVHlwZURlZiAqVVNCeCwgdWludDMyX3QgaW50ZXJydXB0KQotewotICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCi0gIFVOVVNFRChVU0J4KTsKLSAgVU5VU0VEKGludGVycnVwdCk7Ci0gIC8qIE5PVEUgOiAtIFRoaXMgZnVuY3Rpb24gaXMgbm90IHJlcXVpcmVkIGJ5IFVTQiBEZXZpY2UgRlMgcGVyaXBoZXJhbCwgaXQgaXMgdXNlZAotICAgICAgICAgICAgICBvbmx5IGJ5IFVTQiBPVEcgRlMgcGVyaXBoZXJhbC4KLSAgICAgICAgICAgIC0gVGhpcyBmdW5jdGlvbiBpcyBhZGRlZCB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSBhY3Jvc3MgcGxhdGZvcm1zLgotICAgKi8KLX0KLQotLyoqCi0gICogQGJyaWVmICBQcmVwYXJlIHRoZSBFUDAgdG8gc3RhcnQgdGhlIGZpcnN0IGNvbnRyb2wgc2V0dXAKLSAgKiBAcGFyYW0gIFVTQnggIFNlbGVjdGVkIGRldmljZQotICAqIEBwYXJhbSAgcHNldHVwICBwb2ludGVyIHRvIHNldHVwIHBhY2tldAotICAqIEByZXR2YWwgSEFMIHN0YXR1cwotICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0VQMF9PdXRTdGFydChVU0JfVHlwZURlZiAqVVNCeCwgdWludDhfdCAqcHNldHVwKQotewotICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCi0gIFVOVVNFRChVU0J4KTsKLSAgVU5VU0VEKHBzZXR1cCk7Ci0gIC8qIE5PVEUgOiAtIFRoaXMgZnVuY3Rpb24gaXMgbm90IHJlcXVpcmVkIGJ5IFVTQiBEZXZpY2UgRlMgcGVyaXBoZXJhbCwgaXQgaXMgdXNlZAotICAgICAgICAgICAgICBvbmx5IGJ5IFVTQiBPVEcgRlMgcGVyaXBoZXJhbC4KLSAgICAgICAgICAgIC0gVGhpcyBmdW5jdGlvbiBpcyBhZGRlZCB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSBhY3Jvc3MgcGxhdGZvcm1zLgotICAgKi8KLSAgcmV0dXJuIEhBTF9PSzsKLX0KLQotLyoqCiAgICogQGJyaWVmICBVU0JfQWN0aXZhdGVSZW1vdGVXYWtldXAgOiBhY3RpdmUgcmVtb3RlIHdha2V1cCBzaWduYWxsaW5nCi0gICogQHBhcmFtICBVU0J4ICBTZWxlY3RlZCBkZXZpY2UKKyAgKiBAcGFyYW0gIFVTQnggU2VsZWN0ZWQgZGV2aWNlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfQWN0aXZhdGVSZW1vdGVXYWtldXAoVVNCX1R5cGVEZWYgKlVTQngpCkBAIC04OTUsMTMgKzc0NywxNCBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIFVTQl9EZUFjdGl2YXRlUmVtb3RlV2FrZXVwIDogZGUtYWN0aXZlIHJlbW90ZSB3YWtldXAgc2lnbmFsbGluZwotICAqIEBwYXJhbSAgVVNCeCAgU2VsZWN0ZWQgZGV2aWNlCisgICogQGJyaWVmICBVU0JfRGVBY3RpdmF0ZVJlbW90ZVdha2V1cCBkZS1hY3RpdmUgcmVtb3RlIHdha2V1cCBzaWduYWxsaW5nCisgICogQHBhcmFtICBVU0J4IFNlbGVjdGVkIGRldmljZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0RlQWN0aXZhdGVSZW1vdGVXYWtldXAoVVNCX1R5cGVEZWYgKlVTQngpCiB7CiAgIFVTQngtPkNOVFIgJj0gKHVpbnQxNl90KSh+VVNCX0NOVFJfUkVTVU1FKTsKKwogICByZXR1cm4gSEFMX09LOwogfQogCkBAIC05MTAsNyArNzYzLDcgQEAKICAgKiBAcGFyYW0gICBVU0J4IFVTQiBwZXJpcGhlcmFsIGluc3RhbmNlIHJlZ2lzdGVyIGFkZHJlc3MuCiAgICogQHBhcmFtICAgcGJVc3JCdWYgcG9pbnRlciB0byB1c2VyIG1lbW9yeSBhcmVhLgogICAqIEBwYXJhbSAgIHdQTUFCdWZBZGRyIGFkZHJlc3MgaW50byBQTUEuCi0gICogQHBhcmFtICAgd05CeXRlczogbm8uIG9mIGJ5dGVzIHRvIGJlIGNvcGllZC4KKyAgKiBAcGFyYW0gICB3TkJ5dGVzIG5vLiBvZiBieXRlcyB0byBiZSBjb3BpZWQuCiAgICogQHJldHZhbCBOb25lCiAgICovCiB2b2lkIFVTQl9Xcml0ZVBNQShVU0JfVHlwZURlZiAqVVNCeCwgdWludDhfdCAqcGJVc3JCdWYsIHVpbnQxNl90IHdQTUFCdWZBZGRyLCB1aW50MTZfdCB3TkJ5dGVzKQpAQCAtOTQxLDEwICs3OTQsMTAgQEAKIAogLyoqCiAgICogQGJyaWVmIENvcHkgZGF0YSBmcm9tIHBhY2tldCBtZW1vcnkgYXJlYSAoUE1BKSB0byB1c2VyIG1lbW9yeSBidWZmZXIKLSAgKiBAcGFyYW0gICBVU0J4OiBVU0IgcGVyaXBoZXJhbCBpbnN0YW5jZSByZWdpc3RlciBhZGRyZXNzLgorICAqIEBwYXJhbSAgIFVTQnggVVNCIHBlcmlwaGVyYWwgaW5zdGFuY2UgcmVnaXN0ZXIgYWRkcmVzcy4KICAgKiBAcGFyYW0gICBwYlVzckJ1ZiBwb2ludGVyIHRvIHVzZXIgbWVtb3J5IGFyZWEuCiAgICogQHBhcmFtICAgd1BNQUJ1ZkFkZHIgYWRkcmVzcyBpbnRvIFBNQS4KLSAgKiBAcGFyYW0gICB3TkJ5dGVzOiBuby4gb2YgYnl0ZXMgdG8gYmUgY29waWVkLgorICAqIEBwYXJhbSAgIHdOQnl0ZXMgbm8uIG9mIGJ5dGVzIHRvIGJlIGNvcGllZC4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIHZvaWQgVVNCX1JlYWRQTUEoVVNCX1R5cGVEZWYgKlVTQngsIHVpbnQ4X3QgKnBiVXNyQnVmLCB1aW50MTZfdCB3UE1BQnVmQWRkciwgdWludDE2X3Qgd05CeXRlcykKZGlmZiAtLWdpdCBhL19odG1yZXNjL0FkZCBidXR0b24uc3ZnIGIvX2h0bXJlc2MvQWRkIGJ1dHRvbi5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIxMTU0NQotLS0gL2Rldi9udWxsCisrKyBiL19odG1yZXNjL0FkZCBidXR0b24uc3ZnCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMjAwIDIwMCI+PGcgZmlsbD0iIzEzMjU0YSI+PHBhdGggZD0iTTEwMCAuMjEyQzQ0Ljg2OC4yMTIgMCA0NC44ODkgMCA5OS43ODhjMCA1NS4xMzIgNDQuODY4IDEwMCAxMDAgMTAwczEwMC00NC44NjggMTAwLTEwMEMyMDAgNDQuODg5IDE1NS4xMzIuMjEyIDEwMCAuMjEyem0wIDE4MS4xNjRjLTQ0Ljk3NCAwLTgxLjU4Ny0zNi42MTQtODEuNTg3LTgxLjU4NyAwLTQ0Ljc2MiAzNi42MTQtODEuMTY0IDgxLjU4Ny04MS4xNjQgNDQuOTk1IDAgODEuNTg3IDM2LjQwMiA4MS41ODcgODEuMTY0IDAgNDQuOTczLTM2LjU5MiA4MS41ODctODEuNTg3IDgxLjU4N3oiIHN0eWxlPSJmaWxsOiAjZTYwMDdlOyIvPjxwYXRoIGQ9Ik0xNDEuMSA4OC4xMjdoLTI5LjQzOVY1OC42ODhjMC02LjM5Mi01LjE4NS0xMS41OTgtMTEuNTk4LTExLjU5OC02LjQxMyAwLTExLjYxOSA1LjIwNi0xMS42MTkgMTEuNTk4djI5LjQzOUg1OC40NzZjLTYuMzkyIDAtMTEuNTk4IDUuMTg1LTExLjU5OCAxMS41OTggMCA2LjQxMyA1LjIwNiAxMS42MTkgMTEuNTk4IDExLjYxOWgyOS45Njh2MjkuOTY4YzAgNi4zOTIgNS4yMDYgMTEuNTk4IDExLjYxOSAxMS41OTggNi40MTMgMCAxMS41OTgtNS4yMDYgMTEuNTk4LTExLjU5OHYtMjkuOTY4SDE0MS4xYzYuMzkyIDAgMTEuNTk4LTUuMjA2IDExLjU5OC0xMS42MTkgMC02LjQxMy01LjIwNi0xMS41OTgtMTEuNTk4LTExLjU5OHoiIHN0eWxlPSJmaWxsOiAjZTYwMDdlOyIvPjwvZz48L3N2Zz4KZGlmZiAtLWdpdCBhL19odG1yZXNjL1VwZGF0ZS5zdmcgYi9faHRtcmVzYy9VcGRhdGUuc3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ODM4MWYKLS0tIC9kZXYvbnVsbAorKysgYi9faHRtcmVzYy9VcGRhdGUuc3ZnCkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMjAwIDIwMCI+PGcgZmlsbD0iIzAzMjM0YiI+PHBhdGggZD0iTTE3MC45MzQgNjQuNTY5bC0uMDQtLjA1NS0yOS4wNDkgNDAuMDM4LS4wNTcuMDc5aDE0Ljg2N2E1OS4zNjYgNTkuMzY2IDAgMCAxLTEuNDg4IDE1LjYxNWMtMS4xNTggNS4zMTgtMy44MDcgMTMuNDQ4LTkuODQ4IDIxLjk3Ny0yLjc2NiA0LjExOC02LjM3NSA3LjcyNi05LjIwOCAxMC40MDgtMy40MjYgMi44NTctNy40NjEgNi4wOTUtMTIgOC4zNzYtOC4xMjEgNC41NjgtMTcuODgxIDcuMTM4LTI4LjIyNSA3LjQzMi0xMC45MDcuMjQ4LTIwLjIwMS0yLjYxLTI2LjA3Mi01LjA1Mi04LjI4My0zLjQ3OS0xNC4xMTEtNy44MDctMTYuODUtMTAuMDc4LTEuMjU0LS45NTYtMi4yNS0xLjkwNy0zLjA1Ny0yLjY3NmEyOC42NjIgMjguNjYyIDAgMCAwLTEuMTU3LTEuMDY5IDE1OC44NzQgMTU4Ljg3NCAwIDAgMC0xLjQ3OS0xLjM2MmwtNC40MzUtMy45NTYgMy41NjkgNC44MS4xODMuMjQzYy4yLjI2My41NDguNzIyIDEuMDQ4IDEuMzg5LjI3Ni4zMzQuNTc5Ljc0Ny45MyAxLjIyNmwuMDA4LjAxYy42ODkuOTM5IDEuNTQ2IDIuMTA3IDIuNjY0IDMuMzIyIDMgMy41MzYgOC4xNzggOC44MDEgMTUuODA4IDEzLjgwMSA1Ljk2OSAzLjg2NiAxNS42NzIgOC45MDEgMjguMDAxIDEwLjkzNWE3OS4wNSA3OS4wNSAwIDAgMCAxMi40ODUuOTk4YzcuOTcgMCAxNS42NTEtMS4yMjggMjIuODI4LTMuNjQ5IDYuMzY2LTEuODc3IDEyLjE5Mi00Ljk4MSAxNy4wNTMtNy43NzEgNi4xNi0zLjkzNiAxMC44MTctNy41ODYgMTQuNjU0LTExLjQ4OCA4LjA4NC03Ljg5OSAxNC44ODQtMTcuOTEzIDE5LjE1LTI4LjE5OSAzLjI1OS03LjU5NCA1LjQ1Ni0xNS43MjcgNi41MjktMjQuMTc1bC4wNTUtLjQyNS4wODMtLjY0MUgyMDBsLTI5LjA2Ni00MC4wNjN6TTU4LjE1OSA5OS4yMzJsLTEyLjY1NS41NjNjLS4wOTctLjg4MS0uMTU5LTEuOTg2LS4yMjctMy40NzRhNTkuMTg0IDU5LjE4NCAwIDAgMSAxLjQ0Ni0xNi41NmMxLjE1Ny01LjMxNiAzLjgwNC0xMy40NDQgOS44NDgtMjEuOTc3IDIuMTY4LTMuMjI4IDUuMDA5LTYuNDQgOS4yMDgtMTAuNDE1IDMuNDEtMi44NDkgNy40MzItNi4wOCAxMi4wMDUtOC4zNzUgOC4xMTQtNC41NjggMTcuODctNy4xMzggMjguMjEzLTcuNDMyIDEwLjktLjI1IDIwLjE5NiAyLjYwNyAyNi4wNzIgNS4wNDUgOC4yNTggMy40NzMgMTQuMTA1IDcuODEyIDE2Ljg1NyAxMC4wOTEgMS4yNTcuOTUxIDIuMjUzIDEuOTA0IDMuMDU3IDIuNjczbC4wMTcuMDE2Yy40My40MTEuODAxLjc2NiAxLjEzNiAxLjA1MS40NzUuNDM4Ljg0MS43NzcgMS4wOTEgMS4wMWwuMTM4LjEyOC4yNDguMjI5IDQuMDQgMy42MTMtMy4xNjUtNC40NTZjLS4wNTgtLjA4My0uMzEyLS40MTctLjczLS45NzFsLS41MDctLjY3YTI4LjkyMiAyOC45MjIgMCAwIDEtLjkwMS0xLjE5MmwtLjAyLS4wMjdjLS42OS0uOTQ1LTEuNTQ4LTIuMTIxLTIuNjc3LTMuMzQ2LTMuMDAyLTMuNTM3LTguMTgyLTguODAzLTE1LjgxMy0xMy44MDEtNS45NjQtMy44NjUtMTUuNjYyLTguOS0yNy45OTctMTAuOTM1LTguNDg0LTEuMzYzLTIxLjQ5Ni0yLjAwOS0zNS4zMTMgMi42NTEtNi4zNTUgMS44OC0xMi4xODYgNC45ODMtMTcuMDU0IDcuNzcyLTYuMTYzIDMuOTQ0LTEwLjgyIDcuNTk1LTE0LjY1NCAxMS40ODgtOC4wNzkgNy44OTQtMTQuODgyIDE3LjkwOS0xOS4xNTUgMjguMi0zLjI2OCA3LjYyNC01LjQ2MyAxNS43NTctNi41MjMgMjQuMTczLS40MzYgMy4yODEtLjY0MiA1LjQyMS0uNjY0IDYuOTI2TDAgMTAxLjgzMWwzMC42ODMgMzguNzI3LjA0Mi4wNTMgMjcuMzgtNDEuMjk4LjA1NC0uMDgxeiIgc3R5bGU9ImZpbGw6ICNlNjAwN2U7Ii8+PC9nPjwvc3ZnPgpkaWZmIC0tZ2l0IGEvX2h0bXJlc2MvZmF2aWNvbi5wbmcgYi9faHRtcmVzYy9mYXZpY29uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjcxM2VlCi0tLSAvZGV2L251bGwKKysrIGIvX2h0bXJlc2MvZmF2aWNvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvX2h0bXJlc2MvbWluaS1zdF8yMDIwLmNzcyBiL19odG1yZXNjL21pbmktc3RfMjAyMC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg2ZjRkNAotLS0gL2Rldi9udWxsCisrKyBiL19odG1yZXNjL21pbmktc3RfMjAyMC5jc3MKQEAgLTAsMCArMSwxNzExIEBACitAY2hhcnNldCAiVVRGLTgiOworLyoKKyAgRmxhdm9yIG5hbWU6IEN1c3RvbSAobWluaS1jdXN0b20pCisgIEdlbmVyYXRlZCBvbmxpbmUgLSBodHRwczovL21pbmljc3Mub3JnL2ZsYXZvcnMKKyAgbWluaS5jc3MgdmVyc2lvbjogdjMuMC4xCisqLworLyoKKyAgQnJvd3NlcnMgcmVzZXRzIGFuZCBiYXNlIHR5cG9ncmFwaHkuCisqLworLyogQ29yZSBtb2R1bGUgQ1NTIHZhcmlhYmxlIGRlZmluaXRpb25zICovCis6cm9vdCB7CisgIC0tZm9yZS1jb2xvcjogIzAzMjM0YjsKKyAgLS1zZWNvbmRhcnktZm9yZS1jb2xvcjogIzAzMjM0YjsKKyAgLS1iYWNrLWNvbG9yOiAjZmZmZmZmOworICAtLXNlY29uZGFyeS1iYWNrLWNvbG9yOiAjZmZmZmZmOworICAtLWJsb2NrcXVvdGUtY29sb3I6ICNlNjAwN2U7CisgIC0tcHJlLWNvbG9yOiAjZTYwMDdlOworICAtLWJvcmRlci1jb2xvcjogIzNjYjRlNjsKKyAgLS1zZWNvbmRhcnktYm9yZGVyLWNvbG9yOiAjM2NiNGU2OworICAtLWhlYWRpbmctcmF0aW86IDEuMjsKKyAgLS11bml2ZXJzYWwtbWFyZ2luOiAwLjVyZW07CisgIC0tdW5pdmVyc2FsLXBhZGRpbmc6IDAuMjVyZW07CisgIC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXM6IDAuMDc1cmVtOworICAtLWJhY2tncm91bmQtbWFyZ2luOiAxLjUlOworICAtLWEtbGluay1jb2xvcjogIzNjYjRlNjsKKyAgLS1hLXZpc2l0ZWQtY29sb3I6ICM4YzAwNzg7IH0KKworaHRtbCB7CisgIGZvbnQtc2l6ZTogMTMuNXB4OyB9CisKK2EsIGIsIGRlbCwgZW0sIGksIGlucywgcSwgc3Bhbiwgc3Ryb25nLCB1IHsKKyAgZm9udC1zaXplOiAxZW07IH0KKworaHRtbCwgKiB7CisgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIEhlbHZldGljYSwgYXJpYWwsIHNhbnMtc2VyaWY7CisgIGxpbmUtaGVpZ2h0OiAxLjI1OworICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IH0KKworKiB7CisgIGZvbnQtc2l6ZTogMXJlbTsgfQorCitib2R5IHsKKyAgbWFyZ2luOiAwOworICBjb2xvcjogdmFyKC0tZm9yZS1jb2xvcik7CisgIEBiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrLWNvbG9yKTsKKyAgYmFja2dyb3VuZDogdmFyKC0tYmFjay1jb2xvcikgbGluZWFyLWdyYWRpZW50KCNmZmQyMDAsICNmZmQyMDApIHJlcGVhdC15IGxlZnQgdG9wOworICBiYWNrZ3JvdW5kLXNpemU6IHZhcigtLWJhY2tncm91bmQtbWFyZ2luKTsKKyAgfQorCitkZXRhaWxzIHsKKyAgZGlzcGxheTogYmxvY2s7IH0KKworc3VtbWFyeSB7CisgIGRpc3BsYXk6IGxpc3QtaXRlbTsgfQorCithYmJyW3RpdGxlXSB7CisgIGJvcmRlci1ib3R0b206IG5vbmU7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDsgfQorCitpbnB1dCB7CisgIG92ZXJmbG93OiB2aXNpYmxlOyB9CisKK2ltZyB7CisgIG1heC13aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiBhdXRvOyB9CisKK2gxLCBoMiwgaDMsIGg0LCBoNSwgaDYgeworICBsaW5lLWhlaWdodDogMS4yNTsKKyAgbWFyZ2luOiBjYWxjKDEuNSAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKSB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsKKyAgZm9udC13ZWlnaHQ6IDQwMDsgfQorICBoMSBzbWFsbCwgaDIgc21hbGwsIGgzIHNtYWxsLCBoNCBzbWFsbCwgaDUgc21hbGwsIGg2IHNtYWxsIHsKKyAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LWZvcmUtY29sb3IpOworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIG1hcmdpbi10b3A6IC0wLjI1cmVtOyB9CisKK2gxIHsKKyAgZm9udC1zaXplOiBjYWxjKDFyZW0gKiB2YXIoLS1oZWFkaW5nLXJhdGlvKSAqIHZhcigtLWhlYWRpbmctcmF0aW8pICogdmFyKC0taGVhZGluZy1yYXRpbykpOyB9CisKK2gyIHsKKyAgZm9udC1zaXplOiBjYWxjKDFyZW0gKiB2YXIoLS1oZWFkaW5nLXJhdGlvKSAqIHZhcigtLWhlYWRpbmctcmF0aW8pICk7CisgIGJvcmRlci1zdHlsZTogbm9uZSBub25lIHNvbGlkIG5vbmUgOyAKKyAgYm9yZGVyLXdpZHRoOiB0aGluOworICBib3JkZXItY29sb3I6IHZhcigtLWJvcmRlci1jb2xvcik7IH0KK2gzIHsKKyAgZm9udC1zaXplOiBjYWxjKDFyZW0gKiB2YXIoLS1oZWFkaW5nLXJhdGlvKSApOyB9CisKK2g0IHsKKyAgZm9udC1zaXplOiBjYWxjKDFyZW0gKiB2YXIoLS1oZWFkaW5nLXJhdGlvKSk7IH0KKworaDUgeworICBmb250LXNpemU6IDFyZW07IH0KKworaDYgeworICBmb250LXNpemU6IGNhbGMoMXJlbSAvIHZhcigtLWhlYWRpbmctcmF0aW8pKTsgfQorCitwIHsKKyAgbWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsgfQorCitvbCwgdWwgeworICBtYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOworICBwYWRkaW5nLWxlZnQ6IGNhbGMoMyAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKTsgfQorCitiLCBzdHJvbmcgeworICBmb250LXdlaWdodDogNzAwOyB9CisKK2hyIHsKKyAgYm94LXNpemluZzogY29udGVudC1ib3g7CisgIGJvcmRlcjogMDsKKyAgbGluZS1oZWlnaHQ6IDEuMjVlbTsKKyAgbWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsKKyAgaGVpZ2h0OiAwLjA3MTQyODU3MTRyZW07CisgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQsIHZhcigtLWJvcmRlci1jb2xvcikgMjAlLCB2YXIoLS1ib3JkZXItY29sb3IpIDgwJSwgdHJhbnNwYXJlbnQpOyB9CisKK2Jsb2NrcXVvdGUgeworICBkaXNwbGF5OiBibG9jazsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBmb250LXN0eWxlOiBpdGFsaWM7CisgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktZm9yZS1jb2xvcik7CisgIG1hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7CisgIHBhZGRpbmc6IGNhbGMoMyAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7CisgIGJvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLXNlY29uZGFyeS1ib3JkZXItY29sb3IpOworICBib3JkZXItbGVmdDogMC4zcmVtIHNvbGlkIHZhcigtLWJsb2NrcXVvdGUtY29sb3IpOworICBib3JkZXItcmFkaXVzOiAwIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykgMDsgfQorICBibG9ja3F1b3RlOmJlZm9yZSB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogY2FsYygwcmVtIC0gdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTsKKyAgICBsZWZ0OiAwOworICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOworICAgIGZvbnQtc2l6ZTogMnJlbTsKKyAgICBmb250LXdlaWdodDogODAwOworICAgIGNvbnRlbnQ6ICJcMjAxYyI7CisgICAgY29sb3I6IHZhcigtLWJsb2NrcXVvdGUtY29sb3IpOyB9CisgIGJsb2NrcXVvdGVbY2l0ZV06YWZ0ZXIgeworICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKKyAgICBmb250LXNpemU6IDAuNzVlbTsKKyAgICBmb250LXdlaWdodDogNzAwOworICAgIGNvbnRlbnQ6ICJcYeKAlCAgIiBhdHRyKGNpdGUpOworICAgIHdoaXRlLXNwYWNlOiBwcmU7IH0KKworY29kZSwga2JkLCBwcmUsIHNhbXAgeworICBmb250LWZhbWlseTogTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogMC44NWVtOyB9CisKK2NvZGUgeworICBiYWNrZ3JvdW5kOiB2YXIoLS1zZWNvbmRhcnktYmFjay1jb2xvcik7CisgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsKKyAgcGFkZGluZzogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyA0KSBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpOyB9CisKK2tiZCB7CisgIGJhY2tncm91bmQ6IHZhcigtLWZvcmUtY29sb3IpOworICBjb2xvcjogdmFyKC0tYmFjay1jb2xvcik7CisgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsKKyAgcGFkZGluZzogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyA0KSBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpOyB9CisKK3ByZSB7CisgIG92ZXJmbG93OiBhdXRvOworICBiYWNrZ3JvdW5kOiB2YXIoLS1zZWNvbmRhcnktYmFjay1jb2xvcik7CisgIHBhZGRpbmc6IGNhbGMoMS41ICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTsKKyAgbWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsKKyAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CisgIGJvcmRlci1sZWZ0OiAwLjI4NTcxNDI4NTdyZW0gc29saWQgdmFyKC0tcHJlLWNvbG9yKTsKKyAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykgdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpIDA7IH0KKworc3VwLCBzdWIsIGNvZGUsIGtiZCB7CisgIGxpbmUtaGVpZ2h0OiAwOworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsgfQorCitzbWFsbCwgc3VwLCBzdWIsIGZpZ2NhcHRpb24geworICBmb250LXNpemU6IDAuNzVlbTsgfQorCitzdXAgeworICB0b3A6IC0wLjVlbTsgfQorCitzdWIgeworICBib3R0b206IC0wLjI1ZW07IH0KKworZmlndXJlIHsKKyAgbWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsgfQorCitmaWdjYXB0aW9uIHsKKyAgY29sb3I6IHZhcigtLXNlY29uZGFyeS1mb3JlLWNvbG9yKTsgfQorCithIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9CisgIGE6bGluayB7CisgICAgY29sb3I6IHZhcigtLWEtbGluay1jb2xvcik7IH0KKyAgYTp2aXNpdGVkIHsKKyAgICBjb2xvcjogdmFyKC0tYS12aXNpdGVkLWNvbG9yKTsgfQorICBhOmhvdmVyLCBhOmZvY3VzIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfQorCisvKgorICBEZWZpbml0aW9ucyBmb3IgdGhlIGdyaWQgc3lzdGVtLCBjYXJkcyBhbmQgY29udGFpbmVycy4KKyovCisuY29udGFpbmVyIHsKKyAgbWFyZ2luOiAwIGF1dG87CisgIHBhZGRpbmc6IDAgY2FsYygxLjUgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpOyB9CisKKy5yb3cgeworICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICBkaXNwbGF5OiBmbGV4OworICBmbGV4OiAwIDEgYXV0bzsKKyAgZmxleC1mbG93OiByb3cgd3JhcDsKKyAgbWFyZ2luOiAwIDAgMCB2YXIoLS1iYWNrZ3JvdW5kLW1hcmdpbik7IH0KKworLmNvbC1zbSwKK1tjbGFzc149J2NvbC1zbS0nXSwKK1tjbGFzc149J2NvbC1zbS1vZmZzZXQtJ10sCisucm93W2NsYXNzKj0nY29scy1zbS0nXSA+ICogeworICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICBmbGV4OiAwIDAgYXV0bzsKKyAgcGFkZGluZzogMCBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpOyB9CisKKy5jb2wtc20sCisucm93LmNvbHMtc20gPiAqIHsKKyAgbWF4LXdpZHRoOiAxMDAlOworICBmbGV4LWdyb3c6IDE7CisgIGZsZXgtYmFzaXM6IDA7IH0KKworLmNvbC1zbS0xLAorLnJvdy5jb2xzLXNtLTEgPiAqIHsKKyAgbWF4LXdpZHRoOiA4LjMzMzMzMzMzMzMlOworICBmbGV4LWJhc2lzOiA4LjMzMzMzMzMzMzMlOyB9CisKKy5jb2wtc20tb2Zmc2V0LTAgeworICBtYXJnaW4tbGVmdDogMDsgfQorCisuY29sLXNtLTIsCisucm93LmNvbHMtc20tMiA+ICogeworICBtYXgtd2lkdGg6IDE2LjY2NjY2NjY2NjclOworICBmbGV4LWJhc2lzOiAxNi42NjY2NjY2NjY3JTsgfQorCisuY29sLXNtLW9mZnNldC0xIHsKKyAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMzMyU7IH0KKworLmNvbC1zbS0zLAorLnJvdy5jb2xzLXNtLTMgPiAqIHsKKyAgbWF4LXdpZHRoOiAyNSU7CisgIGZsZXgtYmFzaXM6IDI1JTsgfQorCisuY29sLXNtLW9mZnNldC0yIHsKKyAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NjY2NjclOyB9CisKKy5jb2wtc20tNCwKKy5yb3cuY29scy1zbS00ID4gKiB7CisgIG1heC13aWR0aDogMzMuMzMzMzMzMzMzMyU7CisgIGZsZXgtYmFzaXM6IDMzLjMzMzMzMzMzMzMlOyB9CisKKy5jb2wtc20tb2Zmc2V0LTMgeworICBtYXJnaW4tbGVmdDogMjUlOyB9CisKKy5jb2wtc20tNSwKKy5yb3cuY29scy1zbS01ID4gKiB7CisgIG1heC13aWR0aDogNDEuNjY2NjY2NjY2NyU7CisgIGZsZXgtYmFzaXM6IDQxLjY2NjY2NjY2NjclOyB9CisKKy5jb2wtc20tb2Zmc2V0LTQgeworICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMzMyU7IH0KKworLmNvbC1zbS02LAorLnJvdy5jb2xzLXNtLTYgPiAqIHsKKyAgbWF4LXdpZHRoOiA1MCU7CisgIGZsZXgtYmFzaXM6IDUwJTsgfQorCisuY29sLXNtLW9mZnNldC01IHsKKyAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY2NjclOyB9CisKKy5jb2wtc20tNywKKy5yb3cuY29scy1zbS03ID4gKiB7CisgIG1heC13aWR0aDogNTguMzMzMzMzMzMzMyU7CisgIGZsZXgtYmFzaXM6IDU4LjMzMzMzMzMzMzMlOyB9CisKKy5jb2wtc20tb2Zmc2V0LTYgeworICBtYXJnaW4tbGVmdDogNTAlOyB9CisKKy5jb2wtc20tOCwKKy5yb3cuY29scy1zbS04ID4gKiB7CisgIG1heC13aWR0aDogNjYuNjY2NjY2NjY2NyU7CisgIGZsZXgtYmFzaXM6IDY2LjY2NjY2NjY2NjclOyB9CisKKy5jb2wtc20tb2Zmc2V0LTcgeworICBtYXJnaW4tbGVmdDogNTguMzMzMzMzMzMzMyU7IH0KKworLmNvbC1zbS05LAorLnJvdy5jb2xzLXNtLTkgPiAqIHsKKyAgbWF4LXdpZHRoOiA3NSU7CisgIGZsZXgtYmFzaXM6IDc1JTsgfQorCisuY29sLXNtLW9mZnNldC04IHsKKyAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NjY2NjclOyB9CisKKy5jb2wtc20tMTAsCisucm93LmNvbHMtc20tMTAgPiAqIHsKKyAgbWF4LXdpZHRoOiA4My4zMzMzMzMzMzMzJTsKKyAgZmxleC1iYXNpczogODMuMzMzMzMzMzMzMyU7IH0KKworLmNvbC1zbS1vZmZzZXQtOSB7CisgIG1hcmdpbi1sZWZ0OiA3NSU7IH0KKworLmNvbC1zbS0xMSwKKy5yb3cuY29scy1zbS0xMSA+ICogeworICBtYXgtd2lkdGg6IDkxLjY2NjY2NjY2NjclOworICBmbGV4LWJhc2lzOiA5MS42NjY2NjY2NjY3JTsgfQorCisuY29sLXNtLW9mZnNldC0xMCB7CisgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMzMzMzJTsgfQorCisuY29sLXNtLTEyLAorLnJvdy5jb2xzLXNtLTEyID4gKiB7CisgIG1heC13aWR0aDogMTAwJTsKKyAgZmxleC1iYXNpczogMTAwJTsgfQorCisuY29sLXNtLW9mZnNldC0xMSB7CisgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NjY3JTsgfQorCisuY29sLXNtLW5vcm1hbCB7CisgIG9yZGVyOiBpbml0aWFsOyB9CisKKy5jb2wtc20tZmlyc3QgeworICBvcmRlcjogLTk5OTsgfQorCisuY29sLXNtLWxhc3QgeworICBvcmRlcjogOTk5OyB9CisKK0BtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDUwMHB4KSB7CisgIC5jb2wtbWQsCisgIFtjbGFzc149J2NvbC1tZC0nXSwKKyAgW2NsYXNzXj0nY29sLW1kLW9mZnNldC0nXSwKKyAgLnJvd1tjbGFzcyo9J2NvbHMtbWQtJ10gPiAqIHsKKyAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIGZsZXg6IDAgMCBhdXRvOworICAgIHBhZGRpbmc6IDAgY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyAyKTsgfQorCisgIC5jb2wtbWQsCisgIC5yb3cuY29scy1tZCA+ICogeworICAgIG1heC13aWR0aDogMTAwJTsKKyAgICBmbGV4LWdyb3c6IDE7CisgICAgZmxleC1iYXNpczogMDsgfQorCisgIC5jb2wtbWQtMSwKKyAgLnJvdy5jb2xzLW1kLTEgPiAqIHsKKyAgICBtYXgtd2lkdGg6IDguMzMzMzMzMzMzMyU7CisgICAgZmxleC1iYXNpczogOC4zMzMzMzMzMzMzJTsgfQorCisgIC5jb2wtbWQtb2Zmc2V0LTAgeworICAgIG1hcmdpbi1sZWZ0OiAwOyB9CisKKyAgLmNvbC1tZC0yLAorICAucm93LmNvbHMtbWQtMiA+ICogeworICAgIG1heC13aWR0aDogMTYuNjY2NjY2NjY2NyU7CisgICAgZmxleC1iYXNpczogMTYuNjY2NjY2NjY2NyU7IH0KKworICAuY29sLW1kLW9mZnNldC0xIHsKKyAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMzMzMzJTsgfQorCisgIC5jb2wtbWQtMywKKyAgLnJvdy5jb2xzLW1kLTMgPiAqIHsKKyAgICBtYXgtd2lkdGg6IDI1JTsKKyAgICBmbGV4LWJhc2lzOiAyNSU7IH0KKworICAuY29sLW1kLW9mZnNldC0yIHsKKyAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjY2NjY2NyU7IH0KKworICAuY29sLW1kLTQsCisgIC5yb3cuY29scy1tZC00ID4gKiB7CisgICAgbWF4LXdpZHRoOiAzMy4zMzMzMzMzMzMzJTsKKyAgICBmbGV4LWJhc2lzOiAzMy4zMzMzMzMzMzMzJTsgfQorCisgIC5jb2wtbWQtb2Zmc2V0LTMgeworICAgIG1hcmdpbi1sZWZ0OiAyNSU7IH0KKworICAuY29sLW1kLTUsCisgIC5yb3cuY29scy1tZC01ID4gKiB7CisgICAgbWF4LXdpZHRoOiA0MS42NjY2NjY2NjY3JTsKKyAgICBmbGV4LWJhc2lzOiA0MS42NjY2NjY2NjY3JTsgfQorCisgIC5jb2wtbWQtb2Zmc2V0LTQgeworICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMzMzMzJTsgfQorCisgIC5jb2wtbWQtNiwKKyAgLnJvdy5jb2xzLW1kLTYgPiAqIHsKKyAgICBtYXgtd2lkdGg6IDUwJTsKKyAgICBmbGV4LWJhc2lzOiA1MCU7IH0KKworICAuY29sLW1kLW9mZnNldC01IHsKKyAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjY2NjY2NyU7IH0KKworICAuY29sLW1kLTcsCisgIC5yb3cuY29scy1tZC03ID4gKiB7CisgICAgbWF4LXdpZHRoOiA1OC4zMzMzMzMzMzMzJTsKKyAgICBmbGV4LWJhc2lzOiA1OC4zMzMzMzMzMzMzJTsgfQorCisgIC5jb2wtbWQtb2Zmc2V0LTYgeworICAgIG1hcmdpbi1sZWZ0OiA1MCU7IH0KKworICAuY29sLW1kLTgsCisgIC5yb3cuY29scy1tZC04ID4gKiB7CisgICAgbWF4LXdpZHRoOiA2Ni42NjY2NjY2NjY3JTsKKyAgICBmbGV4LWJhc2lzOiA2Ni42NjY2NjY2NjY3JTsgfQorCisgIC5jb2wtbWQtb2Zmc2V0LTcgeworICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMzMzJTsgfQorCisgIC5jb2wtbWQtOSwKKyAgLnJvdy5jb2xzLW1kLTkgPiAqIHsKKyAgICBtYXgtd2lkdGg6IDc1JTsKKyAgICBmbGV4LWJhc2lzOiA3NSU7IH0KKworICAuY29sLW1kLW9mZnNldC04IHsKKyAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjY2NjY2NyU7IH0KKworICAuY29sLW1kLTEwLAorICAucm93LmNvbHMtbWQtMTAgPiAqIHsKKyAgICBtYXgtd2lkdGg6IDgzLjMzMzMzMzMzMzMlOworICAgIGZsZXgtYmFzaXM6IDgzLjMzMzMzMzMzMzMlOyB9CisKKyAgLmNvbC1tZC1vZmZzZXQtOSB7CisgICAgbWFyZ2luLWxlZnQ6IDc1JTsgfQorCisgIC5jb2wtbWQtMTEsCisgIC5yb3cuY29scy1tZC0xMSA+ICogeworICAgIG1heC13aWR0aDogOTEuNjY2NjY2NjY2NyU7CisgICAgZmxleC1iYXNpczogOTEuNjY2NjY2NjY2NyU7IH0KKworICAuY29sLW1kLW9mZnNldC0xMCB7CisgICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzMzMlOyB9CisKKyAgLmNvbC1tZC0xMiwKKyAgLnJvdy5jb2xzLW1kLTEyID4gKiB7CisgICAgbWF4LXdpZHRoOiAxMDAlOworICAgIGZsZXgtYmFzaXM6IDEwMCU7IH0KKworICAuY29sLW1kLW9mZnNldC0xMSB7CisgICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NjY2NjclOyB9CisKKyAgLmNvbC1tZC1ub3JtYWwgeworICAgIG9yZGVyOiBpbml0aWFsOyB9CisKKyAgLmNvbC1tZC1maXJzdCB7CisgICAgb3JkZXI6IC05OTk7IH0KKworICAuY29sLW1kLWxhc3QgeworICAgIG9yZGVyOiA5OTk7IH0gfQorQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTI4MHB4KSB7CisgIC5jb2wtbGcsCisgIFtjbGFzc149J2NvbC1sZy0nXSwKKyAgW2NsYXNzXj0nY29sLWxnLW9mZnNldC0nXSwKKyAgLnJvd1tjbGFzcyo9J2NvbHMtbGctJ10gPiAqIHsKKyAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIGZsZXg6IDAgMCBhdXRvOworICAgIHBhZGRpbmc6IDAgY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyAyKTsgfQorCisgIC5jb2wtbGcsCisgIC5yb3cuY29scy1sZyA+ICogeworICAgIG1heC13aWR0aDogMTAwJTsKKyAgICBmbGV4LWdyb3c6IDE7CisgICAgZmxleC1iYXNpczogMDsgfQorCisgIC5jb2wtbGctMSwKKyAgLnJvdy5jb2xzLWxnLTEgPiAqIHsKKyAgICBtYXgtd2lkdGg6IDguMzMzMzMzMzMzMyU7CisgICAgZmxleC1iYXNpczogOC4zMzMzMzMzMzMzJTsgfQorCisgIC5jb2wtbGctb2Zmc2V0LTAgeworICAgIG1hcmdpbi1sZWZ0OiAwOyB9CisKKyAgLmNvbC1sZy0yLAorICAucm93LmNvbHMtbGctMiA+ICogeworICAgIG1heC13aWR0aDogMTYuNjY2NjY2NjY2NyU7CisgICAgZmxleC1iYXNpczogMTYuNjY2NjY2NjY2NyU7IH0KKworICAuY29sLWxnLW9mZnNldC0xIHsKKyAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMzMzMzJTsgfQorCisgIC5jb2wtbGctMywKKyAgLnJvdy5jb2xzLWxnLTMgPiAqIHsKKyAgICBtYXgtd2lkdGg6IDI1JTsKKyAgICBmbGV4LWJhc2lzOiAyNSU7IH0KKworICAuY29sLWxnLW9mZnNldC0yIHsKKyAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjY2NjY2NyU7IH0KKworICAuY29sLWxnLTQsCisgIC5yb3cuY29scy1sZy00ID4gKiB7CisgICAgbWF4LXdpZHRoOiAzMy4zMzMzMzMzMzMzJTsKKyAgICBmbGV4LWJhc2lzOiAzMy4zMzMzMzMzMzMzJTsgfQorCisgIC5jb2wtbGctb2Zmc2V0LTMgeworICAgIG1hcmdpbi1sZWZ0OiAyNSU7IH0KKworICAuY29sLWxnLTUsCisgIC5yb3cuY29scy1sZy01ID4gKiB7CisgICAgbWF4LXdpZHRoOiA0MS42NjY2NjY2NjY3JTsKKyAgICBmbGV4LWJhc2lzOiA0MS42NjY2NjY2NjY3JTsgfQorCisgIC5jb2wtbGctb2Zmc2V0LTQgeworICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMzMzMzJTsgfQorCisgIC5jb2wtbGctNiwKKyAgLnJvdy5jb2xzLWxnLTYgPiAqIHsKKyAgICBtYXgtd2lkdGg6IDUwJTsKKyAgICBmbGV4LWJhc2lzOiA1MCU7IH0KKworICAuY29sLWxnLW9mZnNldC01IHsKKyAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjY2NjY2NyU7IH0KKworICAuY29sLWxnLTcsCisgIC5yb3cuY29scy1sZy03ID4gKiB7CisgICAgbWF4LXdpZHRoOiA1OC4zMzMzMzMzMzMzJTsKKyAgICBmbGV4LWJhc2lzOiA1OC4zMzMzMzMzMzMzJTsgfQorCisgIC5jb2wtbGctb2Zmc2V0LTYgeworICAgIG1hcmdpbi1sZWZ0OiA1MCU7IH0KKworICAuY29sLWxnLTgsCisgIC5yb3cuY29scy1sZy04ID4gKiB7CisgICAgbWF4LXdpZHRoOiA2Ni42NjY2NjY2NjY3JTsKKyAgICBmbGV4LWJhc2lzOiA2Ni42NjY2NjY2NjY3JTsgfQorCisgIC5jb2wtbGctb2Zmc2V0LTcgeworICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMzMzJTsgfQorCisgIC5jb2wtbGctOSwKKyAgLnJvdy5jb2xzLWxnLTkgPiAqIHsKKyAgICBtYXgtd2lkdGg6IDc1JTsKKyAgICBmbGV4LWJhc2lzOiA3NSU7IH0KKworICAuY29sLWxnLW9mZnNldC04IHsKKyAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjY2NjY2NyU7IH0KKworICAuY29sLWxnLTEwLAorICAucm93LmNvbHMtbGctMTAgPiAqIHsKKyAgICBtYXgtd2lkdGg6IDgzLjMzMzMzMzMzMzMlOworICAgIGZsZXgtYmFzaXM6IDgzLjMzMzMzMzMzMzMlOyB9CisKKyAgLmNvbC1sZy1vZmZzZXQtOSB7CisgICAgbWFyZ2luLWxlZnQ6IDc1JTsgfQorCisgIC5jb2wtbGctMTEsCisgIC5yb3cuY29scy1sZy0xMSA+ICogeworICAgIG1heC13aWR0aDogOTEuNjY2NjY2NjY2NyU7CisgICAgZmxleC1iYXNpczogOTEuNjY2NjY2NjY2NyU7IH0KKworICAuY29sLWxnLW9mZnNldC0xMCB7CisgICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzMzMlOyB9CisKKyAgLmNvbC1sZy0xMiwKKyAgLnJvdy5jb2xzLWxnLTEyID4gKiB7CisgICAgbWF4LXdpZHRoOiAxMDAlOworICAgIGZsZXgtYmFzaXM6IDEwMCU7IH0KKworICAuY29sLWxnLW9mZnNldC0xMSB7CisgICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NjY2NjclOyB9CisKKyAgLmNvbC1sZy1ub3JtYWwgeworICAgIG9yZGVyOiBpbml0aWFsOyB9CisKKyAgLmNvbC1sZy1maXJzdCB7CisgICAgb3JkZXI6IC05OTk7IH0KKworICAuY29sLWxnLWxhc3QgeworICAgIG9yZGVyOiA5OTk7IH0gfQorLyogQ2FyZCBjb21wb25lbnQgQ1NTIHZhcmlhYmxlIGRlZmluaXRpb25zICovCis6cm9vdCB7CisgIC0tY2FyZC1iYWNrLWNvbG9yOiAjM2NiNGU2OworICAtLWNhcmQtZm9yZS1jb2xvcjogIzAzMjM0YjsKKyAgLS1jYXJkLWJvcmRlci1jb2xvcjogIzAzMjM0YjsgfQorCisuY2FyZCB7CisgIGRpc3BsYXk6IGZsZXg7CisgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CisgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKKyAgYWxpZ24tc2VsZjogY2VudGVyOworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIHdpZHRoOiAxMDAlOworICBiYWNrZ3JvdW5kOiB2YXIoLS1jYXJkLWJhY2stY29sb3IpOworICBjb2xvcjogdmFyKC0tY2FyZC1mb3JlLWNvbG9yKTsKKyAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tY2FyZC1ib3JkZXItY29sb3IpOworICBib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7CisgIG1hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7CisgIG92ZXJmbG93OiBoaWRkZW47IH0KKyAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMzIwcHgpIHsKKyAgICAuY2FyZCB7CisgICAgICBtYXgtd2lkdGg6IDMyMHB4OyB9IH0KKyAgLmNhcmQgPiAuc2VjdGlvbmUgeworICAgIGJhY2tncm91bmQ6IHZhcigtLWNhcmQtYmFjay1jb2xvcik7CisgICAgY29sb3I6IHZhcigtLWNhcmQtZm9yZS1jb2xvcik7CisgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICBtYXJnaW46IDA7CisgICAgYm9yZGVyOiAwOworICAgIGJvcmRlci1yYWRpdXM6IDA7CisgICAgYm9yZGVyLWJvdHRvbTogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWNhcmQtYm9yZGVyLWNvbG9yKTsKKyAgICBwYWRkaW5nOiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZyk7CisgICAgd2lkdGg6IDEwMCU7IH0KKyAgICAuY2FyZCA+IC5zZWN0aW9uZS5tZWRpYSB7CisgICAgICBoZWlnaHQ6IDIwMHB4OworICAgICAgcGFkZGluZzogMDsKKyAgICAgIC1vLW9iamVjdC1maXQ6IGNvdmVyOworICAgICAgb2JqZWN0LWZpdDogY292ZXI7IH0KKyAgLmNhcmQgPiAuc2VjdGlvbmU6bGFzdC1jaGlsZCB7CisgICAgYm9yZGVyLWJvdHRvbTogMDsgfQorCisvKgorICBDdXN0b20gZWxlbWVudHMgZm9yIGNhcmQgZWxlbWVudHMuCisqLworQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMjQwcHgpIHsKKyAgLmNhcmQuc21hbGwgeworICAgIG1heC13aWR0aDogMjQwcHg7IH0gfQorQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDgwcHgpIHsKKyAgLmNhcmQubGFyZ2UgeworICAgIG1heC13aWR0aDogNDgwcHg7IH0gfQorLmNhcmQuZmx1aWQgeworICBtYXgtd2lkdGg6IDEwMCU7CisgIHdpZHRoOiBhdXRvOyB9CisKKy5jYXJkLndhcm5pbmcgeworICAtLWNhcmQtYmFjay1jb2xvcjogI2U1YjhiNzsKKyAgLS1jYXJkLWZvcmUtY29sb3I6ICMzYjIzNGI7CisgIC0tY2FyZC1ib3JkZXItY29sb3I6ICM4YzAwNzg7IH0KKworLmNhcmQuZXJyb3IgeworICAtLWNhcmQtYmFjay1jb2xvcjogIzQ2NDY1MDsKKyAgLS1jYXJkLWZvcmUtY29sb3I6ICNmZmZmZmY7CisgIC0tY2FyZC1ib3JkZXItY29sb3I6ICM4YzAwNzg7IH0KKworLmNhcmQgPiAuc2VjdGlvbmUuZGFyayB7CisgIC0tY2FyZC1iYWNrLWNvbG9yOiAjM2IyMzRiOworICAtLWNhcmQtZm9yZS1jb2xvcjogI2ZmZmZmZjsgfQorCisuY2FyZCA+IC5zZWN0aW9uZS5kb3VibGUtcGFkZGVkIHsKKyAgcGFkZGluZzogY2FsYygxLjUgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpOyB9CisKKy8qCisgIERlZmluaXRpb25zIGZvciBmb3JtcyBhbmQgaW5wdXQgZWxlbWVudHMuCisqLworLyogSW5wdXRfY29udHJvbCBtb2R1bGUgQ1NTIHZhcmlhYmxlIGRlZmluaXRpb25zICovCis6cm9vdCB7CisgIC0tZm9ybS1iYWNrLWNvbG9yOiAjZmZlOTdmOworICAtLWZvcm0tZm9yZS1jb2xvcjogIzAzMjM0YjsKKyAgLS1mb3JtLWJvcmRlci1jb2xvcjogIzNjYjRlNjsKKyAgLS1pbnB1dC1iYWNrLWNvbG9yOiAjZmZmZmZmOworICAtLWlucHV0LWZvcmUtY29sb3I6ICMwMzIzNGI7CisgIC0taW5wdXQtYm9yZGVyLWNvbG9yOiAjM2NiNGU2OworICAtLWlucHV0LWZvY3VzLWNvbG9yOiAjMDI4OGQxOworICAtLWlucHV0LWludmFsaWQtY29sb3I6ICNkMzJmMmY7CisgIC0tYnV0dG9uLWJhY2stY29sb3I6ICNlMmUyZTI7CisgIC0tYnV0dG9uLWhvdmVyLWJhY2stY29sb3I6ICNkY2RjZGM7CisgIC0tYnV0dG9uLWZvcmUtY29sb3I6ICMyMTIxMjE7CisgIC0tYnV0dG9uLWJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIC0tYnV0dG9uLWhvdmVyLWJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIC0tYnV0dG9uLWdyb3VwLWJvcmRlci1jb2xvcjogcmdiYSgxMjQsIDEyNCwgMTI0LCAwLjU0KTsgfQorCitmb3JtIHsKKyAgYmFja2dyb3VuZDogdmFyKC0tZm9ybS1iYWNrLWNvbG9yKTsKKyAgY29sb3I6IHZhcigtLWZvcm0tZm9yZS1jb2xvcik7CisgIGJvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWZvcm0tYm9yZGVyLWNvbG9yKTsKKyAgYm9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpOworICBtYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOworICBwYWRkaW5nOiBjYWxjKDIgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTsgfQorCitmaWVsZHNldCB7CisgIGJvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWZvcm0tYm9yZGVyLWNvbG9yKTsKKyAgYm9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpOworICBtYXJnaW46IGNhbGModmFyKC0tdW5pdmVyc2FsLW1hcmdpbikgLyA0KTsKKyAgcGFkZGluZzogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpOyB9CisKK2xlZ2VuZCB7CisgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgIGRpc3BsYXk6IHRhYmxlOworICBtYXgtd2lkdGg6IDEwMCU7CisgIHdoaXRlLXNwYWNlOiBub3JtYWw7CisgIGZvbnQtd2VpZ2h0OiA1MDA7CisgIHBhZGRpbmc6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMik7IH0KKworbGFiZWwgeworICBwYWRkaW5nOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTsgfQorCisuaW5wdXQtZ3JvdXAgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH0KKyAgLmlucHV0LWdyb3VwLmZsdWlkIHsKKyAgICBkaXNwbGF5OiBmbGV4OworICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CisgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IH0KKyAgICAuaW5wdXQtZ3JvdXAuZmx1aWQgPiBpbnB1dCB7CisgICAgICBtYXgtd2lkdGg6IDEwMCU7CisgICAgICBmbGV4LWdyb3c6IDE7CisgICAgICBmbGV4LWJhc2lzOiAwcHg7IH0KKyAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0OTlweCkgeworICAgICAgLmlucHV0LWdyb3VwLmZsdWlkIHsKKyAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CisgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH0gfQorICAuaW5wdXQtZ3JvdXAudmVydGljYWwgeworICAgIGRpc3BsYXk6IGZsZXg7CisgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CisgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfQorICAgIC5pbnB1dC1ncm91cC52ZXJ0aWNhbCA+IGlucHV0IHsKKyAgICAgIG1heC13aWR0aDogMTAwJTsKKyAgICAgIGZsZXgtZ3JvdzogMTsKKyAgICAgIGZsZXgtYmFzaXM6IDBweDsgfQorCitbdHlwZT0ibnVtYmVyIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sIFt0eXBlPSJudW1iZXIiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7CisgIGhlaWdodDogYXV0bzsgfQorCitbdHlwZT0ic2VhcmNoIl0geworICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDsKKyAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7IH0KKworW3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLAorW3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHsKKyAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOyB9CisKK2lucHV0Om5vdChbdHlwZV0pLCBbdHlwZT0idGV4dCJdLCBbdHlwZT0iZW1haWwiXSwgW3R5cGU9Im51bWJlciJdLCBbdHlwZT0ic2VhcmNoIl0sCitbdHlwZT0icGFzc3dvcmQiXSwgW3R5cGU9InVybCJdLCBbdHlwZT0idGVsIl0sIFt0eXBlPSJjaGVja2JveCJdLCBbdHlwZT0icmFkaW8iXSwgdGV4dGFyZWEsIHNlbGVjdCB7CisgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgIGJhY2tncm91bmQ6IHZhcigtLWlucHV0LWJhY2stY29sb3IpOworICBjb2xvcjogdmFyKC0taW5wdXQtZm9yZS1jb2xvcik7CisgIGJvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWlucHV0LWJvcmRlci1jb2xvcik7CisgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsKKyAgbWFyZ2luOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pIC8gMik7CisgIHBhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSBjYWxjKDEuNSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7IH0KKworaW5wdXQ6bm90KFt0eXBlPSJidXR0b24iXSk6bm90KFt0eXBlPSJzdWJtaXQiXSk6bm90KFt0eXBlPSJyZXNldCJdKTpob3ZlciwgaW5wdXQ6bm90KFt0eXBlPSJidXR0b24iXSk6bm90KFt0eXBlPSJzdWJtaXQiXSk6bm90KFt0eXBlPSJyZXNldCJdKTpmb2N1cywgdGV4dGFyZWE6aG92ZXIsIHRleHRhcmVhOmZvY3VzLCBzZWxlY3Q6aG92ZXIsIHNlbGVjdDpmb2N1cyB7CisgIGJvcmRlci1jb2xvcjogdmFyKC0taW5wdXQtZm9jdXMtY29sb3IpOworICBib3gtc2hhZG93OiBub25lOyB9CitpbnB1dDpub3QoW3R5cGU9ImJ1dHRvbiJdKTpub3QoW3R5cGU9InN1Ym1pdCJdKTpub3QoW3R5cGU9InJlc2V0Il0pOmludmFsaWQsIGlucHV0Om5vdChbdHlwZT0iYnV0dG9uIl0pOm5vdChbdHlwZT0ic3VibWl0Il0pOm5vdChbdHlwZT0icmVzZXQiXSk6Zm9jdXM6aW52YWxpZCwgdGV4dGFyZWE6aW52YWxpZCwgdGV4dGFyZWE6Zm9jdXM6aW52YWxpZCwgc2VsZWN0OmludmFsaWQsIHNlbGVjdDpmb2N1czppbnZhbGlkIHsKKyAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pbnB1dC1pbnZhbGlkLWNvbG9yKTsKKyAgYm94LXNoYWRvdzogbm9uZTsgfQoraW5wdXQ6bm90KFt0eXBlPSJidXR0b24iXSk6bm90KFt0eXBlPSJzdWJtaXQiXSk6bm90KFt0eXBlPSJyZXNldCJdKVtyZWFkb25seV0sIHRleHRhcmVhW3JlYWRvbmx5XSwgc2VsZWN0W3JlYWRvbmx5XSB7CisgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrLWNvbG9yKTsgfQorCitzZWxlY3QgeworICBtYXgtd2lkdGg6IDEwMCU7IH0KKworb3B0aW9uIHsKKyAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IH0KKworW3R5cGU9ImNoZWNrYm94Il0sIFt0eXBlPSJyYWRpbyJdIHsKKyAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7CisgIGFwcGVhcmFuY2U6IG5vbmU7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgaGVpZ2h0OiBjYWxjKDFyZW0gKyB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyAyKTsKKyAgd2lkdGg6IGNhbGMoMXJlbSArIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpOworICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207CisgIHBhZGRpbmc6IDA7CisgIGZsZXgtYmFzaXM6IGNhbGMoMXJlbSArIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpICFpbXBvcnRhbnQ7CisgIGZsZXgtZ3JvdzogMCAhaW1wb3J0YW50OyB9CisgIFt0eXBlPSJjaGVja2JveCJdOmNoZWNrZWQ6YmVmb3JlLCBbdHlwZT0icmFkaW8iXTpjaGVja2VkOmJlZm9yZSB7CisgICAgcG9zaXRpb246IGFic29sdXRlOyB9CisKK1t0eXBlPSJjaGVja2JveCJdOmNoZWNrZWQ6YmVmb3JlIHsKKyAgY29udGVudDogJ1wyNzEzJzsKKyAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CisgIGZvbnQtc2l6ZTogY2FsYygxcmVtICsgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMik7CisgIHRvcDogY2FsYygwcmVtIC0gdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTsKKyAgbGVmdDogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyA0KTsgfQorCitbdHlwZT0icmFkaW8iXSB7CisgIGJvcmRlci1yYWRpdXM6IDEwMCU7IH0KKyAgW3R5cGU9InJhZGlvIl06Y2hlY2tlZDpiZWZvcmUgeworICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CisgICAgY29udGVudDogJyc7CisgICAgdG9wOiBjYWxjKDAuMDcxNDI4NTcxNHJlbSArIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpOworICAgIGxlZnQ6IGNhbGMoMC4wNzE0Mjg1NzE0cmVtICsgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMik7CisgICAgYmFja2dyb3VuZDogdmFyKC0taW5wdXQtZm9yZS1jb2xvcik7CisgICAgd2lkdGg6IDAuNXJlbTsKKyAgICBoZWlnaHQ6IDAuNXJlbTsgfQorCis6cGxhY2Vob2xkZXItc2hvd24geworICBjb2xvcjogdmFyKC0taW5wdXQtZm9yZS1jb2xvcik7IH0KKworOjotbXMtcGxhY2Vob2xkZXIgeworICBjb2xvcjogdmFyKC0taW5wdXQtZm9yZS1jb2xvcik7CisgIG9wYWNpdHk6IDAuNTQ7IH0KKworYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLCBbdHlwZT0iYnV0dG9uIl06Oi1tb3otZm9jdXMtaW5uZXIsIFt0eXBlPSJyZXNldCJdOjotbW96LWZvY3VzLWlubmVyLCBbdHlwZT0ic3VibWl0Il06Oi1tb3otZm9jdXMtaW5uZXIgeworICBib3JkZXItc3R5bGU6IG5vbmU7CisgIHBhZGRpbmc6IDA7IH0KKworYnV0dG9uLCBodG1sIFt0eXBlPSJidXR0b24iXSwgW3R5cGU9InJlc2V0Il0sIFt0eXBlPSJzdWJtaXQiXSB7CisgIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uOyB9CisKK2J1dHRvbiB7CisgIG92ZXJmbG93OiB2aXNpYmxlOworICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgfQorCitidXR0b24sIFt0eXBlPSJidXR0b24iXSwgW3R5cGU9InN1Ym1pdCJdLCBbdHlwZT0icmVzZXQiXSwKK2EuYnV0dG9uLCBsYWJlbC5idXR0b24sIC5idXR0b24sCithW3JvbGU9ImJ1dHRvbiJdLCBsYWJlbFtyb2xlPSJidXR0b24iXSwgW3JvbGU9ImJ1dHRvbiJdIHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBiYWNrZ3JvdW5kOiB2YXIoLS1idXR0b24tYmFjay1jb2xvcik7CisgIGNvbG9yOiB2YXIoLS1idXR0b24tZm9yZS1jb2xvcik7CisgIGJvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWJ1dHRvbi1ib3JkZXItY29sb3IpOworICBib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7CisgIHBhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSBjYWxjKDEuNSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7CisgIG1hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgY3Vyc29yOiBwb2ludGVyOworICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuM3M7IH0KKyAgYnV0dG9uOmhvdmVyLCBidXR0b246Zm9jdXMsIFt0eXBlPSJidXR0b24iXTpob3ZlciwgW3R5cGU9ImJ1dHRvbiJdOmZvY3VzLCBbdHlwZT0ic3VibWl0Il06aG92ZXIsIFt0eXBlPSJzdWJtaXQiXTpmb2N1cywgW3R5cGU9InJlc2V0Il06aG92ZXIsIFt0eXBlPSJyZXNldCJdOmZvY3VzLAorICBhLmJ1dHRvbjpob3ZlciwKKyAgYS5idXR0b246Zm9jdXMsIGxhYmVsLmJ1dHRvbjpob3ZlciwgbGFiZWwuYnV0dG9uOmZvY3VzLCAuYnV0dG9uOmhvdmVyLCAuYnV0dG9uOmZvY3VzLAorICBhW3JvbGU9ImJ1dHRvbiJdOmhvdmVyLAorICBhW3JvbGU9ImJ1dHRvbiJdOmZvY3VzLCBsYWJlbFtyb2xlPSJidXR0b24iXTpob3ZlciwgbGFiZWxbcm9sZT0iYnV0dG9uIl06Zm9jdXMsIFtyb2xlPSJidXR0b24iXTpob3ZlciwgW3JvbGU9ImJ1dHRvbiJdOmZvY3VzIHsKKyAgICBiYWNrZ3JvdW5kOiB2YXIoLS1idXR0b24taG92ZXItYmFjay1jb2xvcik7CisgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1idXR0b24taG92ZXItYm9yZGVyLWNvbG9yKTsgfQorCitpbnB1dDpkaXNhYmxlZCwgaW5wdXRbZGlzYWJsZWRdLCB0ZXh0YXJlYTpkaXNhYmxlZCwgdGV4dGFyZWFbZGlzYWJsZWRdLCBzZWxlY3Q6ZGlzYWJsZWQsIHNlbGVjdFtkaXNhYmxlZF0sIGJ1dHRvbjpkaXNhYmxlZCwgYnV0dG9uW2Rpc2FibGVkXSwgLmJ1dHRvbjpkaXNhYmxlZCwgLmJ1dHRvbltkaXNhYmxlZF0sIFtyb2xlPSJidXR0b24iXTpkaXNhYmxlZCwgW3JvbGU9ImJ1dHRvbiJdW2Rpc2FibGVkXSB7CisgIGN1cnNvcjogbm90LWFsbG93ZWQ7CisgIG9wYWNpdHk6IDAuNzU7IH0KKworLmJ1dHRvbi1ncm91cCB7CisgIGRpc3BsYXk6IGZsZXg7CisgIGJvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWJ1dHRvbi1ncm91cC1ib3JkZXItY29sb3IpOworICBib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7CisgIG1hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7IH0KKyAgLmJ1dHRvbi1ncm91cCA+IGJ1dHRvbiwgLmJ1dHRvbi1ncm91cCBbdHlwZT0iYnV0dG9uIl0sIC5idXR0b24tZ3JvdXAgPiBbdHlwZT0ic3VibWl0Il0sIC5idXR0b24tZ3JvdXAgPiBbdHlwZT0icmVzZXQiXSwgLmJ1dHRvbi1ncm91cCA+IC5idXR0b24sIC5idXR0b24tZ3JvdXAgPiBbcm9sZT0iYnV0dG9uIl0geworICAgIG1hcmdpbjogMDsKKyAgICBtYXgtd2lkdGg6IDEwMCU7CisgICAgZmxleDogMSAxIGF1dG87CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIGJvcmRlcjogMDsKKyAgICBib3JkZXItcmFkaXVzOiAwOworICAgIGJveC1zaGFkb3c6IG5vbmU7IH0KKyAgLmJ1dHRvbi1ncm91cCA+IDpub3QoOmZpcnN0LWNoaWxkKSB7CisgICAgYm9yZGVyLWxlZnQ6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1idXR0b24tZ3JvdXAtYm9yZGVyLWNvbG9yKTsgfQorICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0OTlweCkgeworICAgIC5idXR0b24tZ3JvdXAgeworICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfQorICAgICAgLmJ1dHRvbi1ncm91cCA+IDpub3QoOmZpcnN0LWNoaWxkKSB7CisgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgYm9yZGVyLXRvcDogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWJ1dHRvbi1ncm91cC1ib3JkZXItY29sb3IpOyB9IH0KKworLyoKKyAgQ3VzdG9tIGVsZW1lbnRzIGZvciBmb3JtcyBhbmQgaW5wdXQgZWxlbWVudHMuCisqLworYnV0dG9uLnByaW1hcnksIFt0eXBlPSJidXR0b24iXS5wcmltYXJ5LCBbdHlwZT0ic3VibWl0Il0ucHJpbWFyeSwgW3R5cGU9InJlc2V0Il0ucHJpbWFyeSwgLmJ1dHRvbi5wcmltYXJ5LCBbcm9sZT0iYnV0dG9uIl0ucHJpbWFyeSB7CisgIC0tYnV0dG9uLWJhY2stY29sb3I6ICMxOTc2ZDI7CisgIC0tYnV0dG9uLWZvcmUtY29sb3I6ICNmOGY4Zjg7IH0KKyAgYnV0dG9uLnByaW1hcnk6aG92ZXIsIGJ1dHRvbi5wcmltYXJ5OmZvY3VzLCBbdHlwZT0iYnV0dG9uIl0ucHJpbWFyeTpob3ZlciwgW3R5cGU9ImJ1dHRvbiJdLnByaW1hcnk6Zm9jdXMsIFt0eXBlPSJzdWJtaXQiXS5wcmltYXJ5OmhvdmVyLCBbdHlwZT0ic3VibWl0Il0ucHJpbWFyeTpmb2N1cywgW3R5cGU9InJlc2V0Il0ucHJpbWFyeTpob3ZlciwgW3R5cGU9InJlc2V0Il0ucHJpbWFyeTpmb2N1cywgLmJ1dHRvbi5wcmltYXJ5OmhvdmVyLCAuYnV0dG9uLnByaW1hcnk6Zm9jdXMsIFtyb2xlPSJidXR0b24iXS5wcmltYXJ5OmhvdmVyLCBbcm9sZT0iYnV0dG9uIl0ucHJpbWFyeTpmb2N1cyB7CisgICAgLS1idXR0b24taG92ZXItYmFjay1jb2xvcjogIzE1NjVjMDsgfQorCitidXR0b24uc2Vjb25kYXJ5LCBbdHlwZT0iYnV0dG9uIl0uc2Vjb25kYXJ5LCBbdHlwZT0ic3VibWl0Il0uc2Vjb25kYXJ5LCBbdHlwZT0icmVzZXQiXS5zZWNvbmRhcnksIC5idXR0b24uc2Vjb25kYXJ5LCBbcm9sZT0iYnV0dG9uIl0uc2Vjb25kYXJ5IHsKKyAgLS1idXR0b24tYmFjay1jb2xvcjogI2QzMmYyZjsKKyAgLS1idXR0b24tZm9yZS1jb2xvcjogI2Y4ZjhmODsgfQorICBidXR0b24uc2Vjb25kYXJ5OmhvdmVyLCBidXR0b24uc2Vjb25kYXJ5OmZvY3VzLCBbdHlwZT0iYnV0dG9uIl0uc2Vjb25kYXJ5OmhvdmVyLCBbdHlwZT0iYnV0dG9uIl0uc2Vjb25kYXJ5OmZvY3VzLCBbdHlwZT0ic3VibWl0Il0uc2Vjb25kYXJ5OmhvdmVyLCBbdHlwZT0ic3VibWl0Il0uc2Vjb25kYXJ5OmZvY3VzLCBbdHlwZT0icmVzZXQiXS5zZWNvbmRhcnk6aG92ZXIsIFt0eXBlPSJyZXNldCJdLnNlY29uZGFyeTpmb2N1cywgLmJ1dHRvbi5zZWNvbmRhcnk6aG92ZXIsIC5idXR0b24uc2Vjb25kYXJ5OmZvY3VzLCBbcm9sZT0iYnV0dG9uIl0uc2Vjb25kYXJ5OmhvdmVyLCBbcm9sZT0iYnV0dG9uIl0uc2Vjb25kYXJ5OmZvY3VzIHsKKyAgICAtLWJ1dHRvbi1ob3Zlci1iYWNrLWNvbG9yOiAjYzYyODI4OyB9CisKK2J1dHRvbi50ZXJ0aWFyeSwgW3R5cGU9ImJ1dHRvbiJdLnRlcnRpYXJ5LCBbdHlwZT0ic3VibWl0Il0udGVydGlhcnksIFt0eXBlPSJyZXNldCJdLnRlcnRpYXJ5LCAuYnV0dG9uLnRlcnRpYXJ5LCBbcm9sZT0iYnV0dG9uIl0udGVydGlhcnkgeworICAtLWJ1dHRvbi1iYWNrLWNvbG9yOiAjMzA4NzMyOworICAtLWJ1dHRvbi1mb3JlLWNvbG9yOiAjZjhmOGY4OyB9CisgIGJ1dHRvbi50ZXJ0aWFyeTpob3ZlciwgYnV0dG9uLnRlcnRpYXJ5OmZvY3VzLCBbdHlwZT0iYnV0dG9uIl0udGVydGlhcnk6aG92ZXIsIFt0eXBlPSJidXR0b24iXS50ZXJ0aWFyeTpmb2N1cywgW3R5cGU9InN1Ym1pdCJdLnRlcnRpYXJ5OmhvdmVyLCBbdHlwZT0ic3VibWl0Il0udGVydGlhcnk6Zm9jdXMsIFt0eXBlPSJyZXNldCJdLnRlcnRpYXJ5OmhvdmVyLCBbdHlwZT0icmVzZXQiXS50ZXJ0aWFyeTpmb2N1cywgLmJ1dHRvbi50ZXJ0aWFyeTpob3ZlciwgLmJ1dHRvbi50ZXJ0aWFyeTpmb2N1cywgW3JvbGU9ImJ1dHRvbiJdLnRlcnRpYXJ5OmhvdmVyLCBbcm9sZT0iYnV0dG9uIl0udGVydGlhcnk6Zm9jdXMgeworICAgIC0tYnV0dG9uLWhvdmVyLWJhY2stY29sb3I6ICMyNzc1Mjk7IH0KKworYnV0dG9uLmludmVyc2UsIFt0eXBlPSJidXR0b24iXS5pbnZlcnNlLCBbdHlwZT0ic3VibWl0Il0uaW52ZXJzZSwgW3R5cGU9InJlc2V0Il0uaW52ZXJzZSwgLmJ1dHRvbi5pbnZlcnNlLCBbcm9sZT0iYnV0dG9uIl0uaW52ZXJzZSB7CisgIC0tYnV0dG9uLWJhY2stY29sb3I6ICMyMTIxMjE7CisgIC0tYnV0dG9uLWZvcmUtY29sb3I6ICNmOGY4Zjg7IH0KKyAgYnV0dG9uLmludmVyc2U6aG92ZXIsIGJ1dHRvbi5pbnZlcnNlOmZvY3VzLCBbdHlwZT0iYnV0dG9uIl0uaW52ZXJzZTpob3ZlciwgW3R5cGU9ImJ1dHRvbiJdLmludmVyc2U6Zm9jdXMsIFt0eXBlPSJzdWJtaXQiXS5pbnZlcnNlOmhvdmVyLCBbdHlwZT0ic3VibWl0Il0uaW52ZXJzZTpmb2N1cywgW3R5cGU9InJlc2V0Il0uaW52ZXJzZTpob3ZlciwgW3R5cGU9InJlc2V0Il0uaW52ZXJzZTpmb2N1cywgLmJ1dHRvbi5pbnZlcnNlOmhvdmVyLCAuYnV0dG9uLmludmVyc2U6Zm9jdXMsIFtyb2xlPSJidXR0b24iXS5pbnZlcnNlOmhvdmVyLCBbcm9sZT0iYnV0dG9uIl0uaW52ZXJzZTpmb2N1cyB7CisgICAgLS1idXR0b24taG92ZXItYmFjay1jb2xvcjogIzExMTsgfQorCitidXR0b24uc21hbGwsIFt0eXBlPSJidXR0b24iXS5zbWFsbCwgW3R5cGU9InN1Ym1pdCJdLnNtYWxsLCBbdHlwZT0icmVzZXQiXS5zbWFsbCwgLmJ1dHRvbi5zbWFsbCwgW3JvbGU9ImJ1dHRvbiJdLnNtYWxsIHsKKyAgcGFkZGluZzogY2FsYygwLjUgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpIGNhbGMoMC43NSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7CisgIG1hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7IH0KKworYnV0dG9uLmxhcmdlLCBbdHlwZT0iYnV0dG9uIl0ubGFyZ2UsIFt0eXBlPSJzdWJtaXQiXS5sYXJnZSwgW3R5cGU9InJlc2V0Il0ubGFyZ2UsIC5idXR0b24ubGFyZ2UsIFtyb2xlPSJidXR0b24iXS5sYXJnZSB7CisgIHBhZGRpbmc6IGNhbGMoMS41ICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKSBjYWxjKDIgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpOworICBtYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOyB9CisKKy8qCisgIERlZmluaXRpb25zIGZvciBuYXZpZ2F0aW9uIGVsZW1lbnRzLgorKi8KKy8qIE5hdmlnYXRpb24gbW9kdWxlIENTUyB2YXJpYWJsZSBkZWZpbml0aW9ucyAqLworOnJvb3QgeworICAtLWhlYWRlci1iYWNrLWNvbG9yOiAjMDMyMzRiOworICAtLWhlYWRlci1ob3Zlci1iYWNrLWNvbG9yOiAjZmZkMjAwOworICAtLWhlYWRlci1mb3JlLWNvbG9yOiAjZmZmZmZmOworICAtLWhlYWRlci1ib3JkZXItY29sb3I6ICMzY2I0ZTY7CisgIC0tbmF2LWJhY2stY29sb3I6ICNmZmZmZmY7CisgIC0tbmF2LWhvdmVyLWJhY2stY29sb3I6ICNmZmU5N2Y7CisgIC0tbmF2LWZvcmUtY29sb3I6ICNlNjAwN2U7CisgIC0tbmF2LWJvcmRlci1jb2xvcjogIzNjYjRlNjsKKyAgLS1uYXYtbGluay1jb2xvcjogIzNjYjRlNjsKKyAgLS1mb290ZXItZm9yZS1jb2xvcjogI2ZmZmZmZjsKKyAgLS1mb290ZXItYmFjay1jb2xvcjogIzAzMjM0YjsKKyAgLS1mb290ZXItYm9yZGVyLWNvbG9yOiAjM2NiNGU2OworICAtLWZvb3Rlci1saW5rLWNvbG9yOiAjM2NiNGU2OworICAtLWRyYXdlci1iYWNrLWNvbG9yOiAjZmZmZmZmOworICAtLWRyYXdlci1ob3Zlci1iYWNrLWNvbG9yOiAjZmZlOTdmOworICAtLWRyYXdlci1ib3JkZXItY29sb3I6ICMzY2I0ZTY7CisgIC0tZHJhd2VyLWNsb3NlLWNvbG9yOiAjZTYwMDdlOyB9CisKK2hlYWRlciB7CisgIGhlaWdodDogMi43NXJlbTsKKyAgYmFja2dyb3VuZDogdmFyKC0taGVhZGVyLWJhY2stY29sb3IpOworICBjb2xvcjogdmFyKC0taGVhZGVyLWZvcmUtY29sb3IpOworICBib3JkZXItYm90dG9tOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0taGVhZGVyLWJvcmRlci1jb2xvcik7CisgIHBhZGRpbmc6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gNCkgMDsKKyAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgb3ZlcmZsb3cteDogYXV0bzsKKyAgb3ZlcmZsb3cteTogaGlkZGVuOyB9CisgIGhlYWRlci5yb3cgeworICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyB9CisgIGhlYWRlciAubG9nbyB7CisgICAgY29sb3I6IHZhcigtLWhlYWRlci1mb3JlLWNvbG9yKTsKKyAgICBmb250LXNpemU6IDEuNzVyZW07CisgICAgcGFkZGluZzogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9CisgIGhlYWRlciBidXR0b24sIGhlYWRlciBbdHlwZT0iYnV0dG9uIl0sIGhlYWRlciAuYnV0dG9uLCBoZWFkZXIgW3JvbGU9ImJ1dHRvbiJdIHsKKyAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICB0b3A6IGNhbGMoMHJlbSAtIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDQpOworICAgIGhlaWdodDogY2FsYygzLjE4NzVyZW0gKyB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyAyKTsKKyAgICBiYWNrZ3JvdW5kOiB2YXIoLS1oZWFkZXItYmFjay1jb2xvcik7CisgICAgbGluZS1oZWlnaHQ6IGNhbGMoMy4xODc1cmVtIC0gdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpICogMS41KTsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgY29sb3I6IHZhcigtLWhlYWRlci1mb3JlLWNvbG9yKTsKKyAgICBib3JkZXI6IDA7CisgICAgYm9yZGVyLXJhZGl1czogMDsKKyAgICBtYXJnaW46IDA7CisgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfQorICAgIGhlYWRlciBidXR0b246aG92ZXIsIGhlYWRlciBidXR0b246Zm9jdXMsIGhlYWRlciBbdHlwZT0iYnV0dG9uIl06aG92ZXIsIGhlYWRlciBbdHlwZT0iYnV0dG9uIl06Zm9jdXMsIGhlYWRlciAuYnV0dG9uOmhvdmVyLCBoZWFkZXIgLmJ1dHRvbjpmb2N1cywgaGVhZGVyIFtyb2xlPSJidXR0b24iXTpob3ZlciwgaGVhZGVyIFtyb2xlPSJidXR0b24iXTpmb2N1cyB7CisgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1oZWFkZXItaG92ZXItYmFjay1jb2xvcik7IH0KKworbmF2IHsKKyAgYmFja2dyb3VuZDogdmFyKC0tbmF2LWJhY2stY29sb3IpOworICBjb2xvcjogdmFyKC0tbmF2LWZvcmUtY29sb3IpOworICBib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1uYXYtYm9yZGVyLWNvbG9yKTsKKyAgYm9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpOworICBtYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOyB9CisgIG5hdiAqIHsKKyAgICBwYWRkaW5nOiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgY2FsYygxLjUgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpOyB9CisgIG5hdiBhLCBuYXYgYTp2aXNpdGVkIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBjb2xvcjogdmFyKC0tbmF2LWxpbmstY29sb3IpOworICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsKKyAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuM3M7IH0KKyAgICBuYXYgYTpob3ZlciwgbmF2IGE6Zm9jdXMsIG5hdiBhOnZpc2l0ZWQ6aG92ZXIsIG5hdiBhOnZpc2l0ZWQ6Zm9jdXMgeworICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgICAgYmFja2dyb3VuZDogdmFyKC0tbmF2LWhvdmVyLWJhY2stY29sb3IpOyB9CisgIG5hdiAuc3VibGluay0xIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgbWFyZ2luLWxlZnQ6IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7IH0KKyAgICBuYXYgLnN1YmxpbmstMTpiZWZvcmUgeworICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgbGVmdDogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLSAxICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTsKKyAgICAgIHRvcDogLTAuMDcxNDI4NTcxNHJlbTsKKyAgICAgIGNvbnRlbnQ6ICcnOworICAgICAgaGVpZ2h0OiAxMDAlOworICAgICAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tbmF2LWJvcmRlci1jb2xvcik7CisgICAgICBib3JkZXItbGVmdDogMDsgfQorICBuYXYgLnN1YmxpbmstMiB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIG1hcmdpbi1sZWZ0OiBjYWxjKDQgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpOyB9CisgICAgbmF2IC5zdWJsaW5rLTI6YmVmb3JlIHsKKyAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgIGxlZnQ6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC0gMyAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7CisgICAgICB0b3A6IC0wLjA3MTQyODU3MTRyZW07CisgICAgICBjb250ZW50OiAnJzsKKyAgICAgIGhlaWdodDogMTAwJTsKKyAgICAgIGJvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLW5hdi1ib3JkZXItY29sb3IpOworICAgICAgYm9yZGVyLWxlZnQ6IDA7IH0KKworZm9vdGVyIHsKKyAgYmFja2dyb3VuZDogdmFyKC0tZm9vdGVyLWJhY2stY29sb3IpOworICBjb2xvcjogdmFyKC0tZm9vdGVyLWZvcmUtY29sb3IpOworICBib3JkZXItdG9wOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tZm9vdGVyLWJvcmRlci1jb2xvcik7CisgIHBhZGRpbmc6IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSkgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpOworICBmb250LXNpemU6IDAuODc1cmVtOyB9CisgIGZvb3RlciBhLCBmb290ZXIgYTp2aXNpdGVkIHsKKyAgICBjb2xvcjogdmFyKC0tZm9vdGVyLWxpbmstY29sb3IpOyB9CisKK2hlYWRlci5zdGlja3kgeworICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7CisgIHBvc2l0aW9uOiBzdGlja3k7CisgIHotaW5kZXg6IDExMDE7CisgIHRvcDogMDsgfQorCitmb290ZXIuc3RpY2t5IHsKKyAgcG9zaXRpb246IC13ZWJraXQtc3RpY2t5OworICBwb3NpdGlvbjogc3RpY2t5OworICB6LWluZGV4OiAxMTAxOworICBib3R0b206IDA7IH0KKworLmRyYXdlci10b2dnbGU6YmVmb3JlIHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIHZlcnRpY2FsLWFsaWduOiBib3R0b207CisgIGNvbnRlbnQ6ICdcMDBhMFwyMjYxXDAwYTAnOworICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKKyAgZm9udC1zaXplOiAxLjVlbTsgfQorQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTAwcHgpIHsKKyAgLmRyYXdlci10b2dnbGU6bm90KC5wZXJzaXN0ZW50KSB7CisgICAgZGlzcGxheTogbm9uZTsgfSB9CisKK1t0eXBlPSJjaGVja2JveCJdLmRyYXdlciB7CisgIGhlaWdodDogMXB4OworICB3aWR0aDogMXB4OworICBtYXJnaW46IC0xcHg7CisgIG92ZXJmbG93OiBoaWRkZW47CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgY2xpcDogcmVjdCgwIDAgMCAwKTsKKyAgLXdlYmtpdC1jbGlwLXBhdGg6IGluc2V0KDEwMCUpOworICBjbGlwLXBhdGg6IGluc2V0KDEwMCUpOyB9CisgIFt0eXBlPSJjaGVja2JveCJdLmRyYXdlciArICogeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgcG9zaXRpb246IGZpeGVkOworICAgIHRvcDogMDsKKyAgICB3aWR0aDogMzIwcHg7CisgICAgaGVpZ2h0OiAxMDB2aDsKKyAgICBvdmVyZmxvdy15OiBhdXRvOworICAgIGJhY2tncm91bmQ6IHZhcigtLWRyYXdlci1iYWNrLWNvbG9yKTsKKyAgICBib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1kcmF3ZXItYm9yZGVyLWNvbG9yKTsKKyAgICBib3JkZXItcmFkaXVzOiAwOworICAgIG1hcmdpbjogMDsKKyAgICB6LWluZGV4OiAxMTEwOworICAgIHJpZ2h0OiAtMzIwcHg7CisgICAgdHJhbnNpdGlvbjogcmlnaHQgMC4zczsgfQorICAgIFt0eXBlPSJjaGVja2JveCJdLmRyYXdlciArICogLmRyYXdlci1jbG9zZSB7CisgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICB0b3A6IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOworICAgICAgcmlnaHQ6IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOworICAgICAgei1pbmRleDogMTExMTsKKyAgICAgIHdpZHRoOiAycmVtOworICAgICAgaGVpZ2h0OiAycmVtOworICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpOworICAgICAgcGFkZGluZzogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpOworICAgICAgbWFyZ2luOiAwOworICAgICAgY3Vyc29yOiBwb2ludGVyOworICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjNzOyB9CisgICAgICBbdHlwZT0iY2hlY2tib3giXS5kcmF3ZXIgKyAqIC5kcmF3ZXItY2xvc2U6YmVmb3JlIHsKKyAgICAgICAgZGlzcGxheTogYmxvY2s7CisgICAgICAgIGNvbnRlbnQ6ICdcMDBENyc7CisgICAgICAgIGNvbG9yOiB2YXIoLS1kcmF3ZXItY2xvc2UtY29sb3IpOworICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOworICAgICAgICBmb250LXNpemU6IDJyZW07CisgICAgICAgIGxpbmUtaGVpZ2h0OiAxOworICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgICAgIFt0eXBlPSJjaGVja2JveCJdLmRyYXdlciArICogLmRyYXdlci1jbG9zZTpob3ZlciwgW3R5cGU9ImNoZWNrYm94Il0uZHJhd2VyICsgKiAuZHJhd2VyLWNsb3NlOmZvY3VzIHsKKyAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tZHJhd2VyLWhvdmVyLWJhY2stY29sb3IpOyB9CisgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzIwcHgpIHsKKyAgICAgIFt0eXBlPSJjaGVja2JveCJdLmRyYXdlciArICogeworICAgICAgICB3aWR0aDogMTAwJTsgfSB9CisgIFt0eXBlPSJjaGVja2JveCJdLmRyYXdlcjpjaGVja2VkICsgKiB7CisgICAgcmlnaHQ6IDA7IH0KKyAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTAwcHgpIHsKKyAgICBbdHlwZT0iY2hlY2tib3giXS5kcmF3ZXI6bm90KC5wZXJzaXN0ZW50KSArICogeworICAgICAgcG9zaXRpb246IHN0YXRpYzsKKyAgICAgIGhlaWdodDogMTAwJTsKKyAgICAgIHotaW5kZXg6IDExMDA7IH0KKyAgICAgIFt0eXBlPSJjaGVja2JveCJdLmRyYXdlcjpub3QoLnBlcnNpc3RlbnQpICsgKiAuZHJhd2VyLWNsb3NlIHsKKyAgICAgICAgZGlzcGxheTogbm9uZTsgfSB9CisKKy8qCisgIERlZmluaXRpb25zIGZvciB0aGUgcmVzcG9uc2l2ZSB0YWJsZSBjb21wb25lbnQuCisqLworLyogVGFibGUgbW9kdWxlIENTUyB2YXJpYWJsZSBkZWZpbml0aW9ucy4gKi8KKzpyb290IHsKKyAgLS10YWJsZS1ib3JkZXItY29sb3I6ICMwMzIzNGI7CisgIC0tdGFibGUtYm9yZGVyLXNlcGFyYXRvci1jb2xvcjogIzAzMjM0YjsKKyAgLS10YWJsZS1oZWFkLWJhY2stY29sb3I6ICMwMzIzNGI7CisgIC0tdGFibGUtaGVhZC1mb3JlLWNvbG9yOiAjZmZmZmZmOworICAtLXRhYmxlLWJvZHktYmFjay1jb2xvcjogI2ZmZmZmZjsKKyAgLS10YWJsZS1ib2R5LWZvcmUtY29sb3I6ICMwMzIzNGI7CisgIC0tdGFibGUtYm9keS1hbHQtYmFjay1jb2xvcjogI2Y0ZjRmNDsgfQorCit0YWJsZSB7CisgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgIGJvcmRlci1zcGFjaW5nOiAwOworICBtYXJnaW46IDA7CisgIGRpc3BsYXk6IGZsZXg7CisgIGZsZXg6IDAgMSBhdXRvOworICBmbGV4LWZsb3c6IHJvdyB3cmFwOworICBwYWRkaW5nOiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZyk7CisgIHBhZGRpbmctdG9wOiAwOyB9CisgIHRhYmxlIGNhcHRpb24geworICAgIGZvbnQtc2l6ZTogMXJlbTsKKyAgICBtYXJnaW46IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKSAwOworICAgIG1heC13aWR0aDogMTAwJTsKKyAgICBmbGV4OiAwIDAgMTAwJTsgfQorICB0YWJsZSB0aGVhZCwgdGFibGUgdGJvZHkgeworICAgIGRpc3BsYXk6IGZsZXg7CisgICAgZmxleC1mbG93OiByb3cgd3JhcDsKKyAgICBib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpOyB9CisgIHRhYmxlIHRoZWFkIHsKKyAgICB6LWluZGV4OiA5OTk7CisgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSAwIDA7CisgICAgYm9yZGVyLWJvdHRvbTogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLXRhYmxlLWJvcmRlci1zZXBhcmF0b3ItY29sb3IpOyB9CisgIHRhYmxlIHRib2R5IHsKKyAgICBib3JkZXItdG9wOiAwOworICAgIG1hcmdpbi10b3A6IGNhbGMoMCAtIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKTsKKyAgICBib3JkZXItcmFkaXVzOiAwIDAgdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsgfQorICB0YWJsZSB0ciB7CisgICAgZGlzcGxheTogZmxleDsKKyAgICBwYWRkaW5nOiAwOyB9CisgIHRhYmxlIHRoLCB0YWJsZSB0ZCB7CisgICAgcGFkZGluZzogY2FsYygwLjUgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpOworCQlmb250LXNpemU6IDAuOXJlbTsgfQorICB0YWJsZSB0aCB7CisgICAgdGV4dC1hbGlnbjogbGVmdDsKKyAgICBiYWNrZ3JvdW5kOiB2YXIoLS10YWJsZS1oZWFkLWJhY2stY29sb3IpOworICAgIGNvbG9yOiB2YXIoLS10YWJsZS1oZWFkLWZvcmUtY29sb3IpOyB9CisgIHRhYmxlIHRkIHsKKyAgICBiYWNrZ3JvdW5kOiB2YXIoLS10YWJsZS1ib2R5LWJhY2stY29sb3IpOworICAgIGNvbG9yOiB2YXIoLS10YWJsZS1ib2R5LWZvcmUtY29sb3IpOworICAgIGJvcmRlci10b3A6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpOyB9CisKK3RhYmxlOm5vdCguaG9yaXpvbnRhbCkgeworICBvdmVyZmxvdzogYXV0bzsKKyAgbWF4LWhlaWdodDogMTAwJTsgfQorICB0YWJsZTpub3QoLmhvcml6b250YWwpIHRoZWFkLCB0YWJsZTpub3QoLmhvcml6b250YWwpIHRib2R5IHsKKyAgICBtYXgtd2lkdGg6IDEwMCU7CisgICAgZmxleDogMCAwIDEwMCU7IH0KKyAgdGFibGU6bm90KC5ob3Jpem9udGFsKSB0ciB7CisgICAgZmxleC1mbG93OiByb3cgd3JhcDsKKyAgICBmbGV4OiAwIDAgMTAwJTsgfQorICB0YWJsZTpub3QoLmhvcml6b250YWwpIHRoLCB0YWJsZTpub3QoLmhvcml6b250YWwpIHRkIHsKKyAgICBmbGV4OiAxIDAgMCU7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgfQorICB0YWJsZTpub3QoLmhvcml6b250YWwpIHRoZWFkIHsKKyAgICBwb3NpdGlvbjogc3RpY2t5OworICAgIHRvcDogMDsgfQorICB0YWJsZTpub3QoLmhvcml6b250YWwpIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkIHsKKyAgICBib3JkZXItdG9wOiAwOyB9CisKK3RhYmxlLmhvcml6b250YWwgeworICBib3JkZXI6IDA7IH0KKyAgdGFibGUuaG9yaXpvbnRhbCB0aGVhZCwgdGFibGUuaG9yaXpvbnRhbCB0Ym9keSB7CisgICAgYm9yZGVyOiAwOworICAgIGZsZXg6IC4yIDAgMDsKKyAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7IH0KKyAgdGFibGUuaG9yaXpvbnRhbCB0Ym9keSB7CisgICAgb3ZlcmZsb3c6IGF1dG87CisgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOworICAgIGZsZXg6IC44IDAgMDsKKyAgICBtYXJnaW4tbGVmdDogMDsKKyAgICBwYWRkaW5nLWJvdHRvbTogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyA0KTsgfQorICB0YWJsZS5ob3Jpem9udGFsIHRyIHsKKyAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOworICAgIGZsZXg6IDEgMCBhdXRvOyB9CisgIHRhYmxlLmhvcml6b250YWwgdGgsIHRhYmxlLmhvcml6b250YWwgdGQgeworICAgIHdpZHRoOiBhdXRvOworICAgIGJvcmRlcjogMDsKKyAgICBib3JkZXItYm90dG9tOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsgfQorICAgIHRhYmxlLmhvcml6b250YWwgdGg6bm90KDpmaXJzdC1jaGlsZCksIHRhYmxlLmhvcml6b250YWwgdGQ6bm90KDpmaXJzdC1jaGlsZCkgeworICAgICAgYm9yZGVyLXRvcDogMDsgfQorICB0YWJsZS5ob3Jpem9udGFsIHRoIHsKKyAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICBib3JkZXItbGVmdDogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLXRhYmxlLWJvcmRlci1jb2xvcik7CisgICAgYm9yZGVyLXJpZ2h0OiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLXNlcGFyYXRvci1jb2xvcik7IH0KKyAgdGFibGUuaG9yaXpvbnRhbCB0aGVhZCB0cjpmaXJzdC1jaGlsZCB7CisgICAgcGFkZGluZy1sZWZ0OiAwOyB9CisgIHRhYmxlLmhvcml6b250YWwgdGg6Zmlyc3QtY2hpbGQsIHRhYmxlLmhvcml6b250YWwgdGQ6Zmlyc3QtY2hpbGQgeworICAgIGJvcmRlci10b3A6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpOyB9CisgIHRhYmxlLmhvcml6b250YWwgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZCB7CisgICAgYm9yZGVyLXJpZ2h0OiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsgfQorICAgIHRhYmxlLmhvcml6b250YWwgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCB7CisgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4yNXJlbTsgfQorICAgIHRhYmxlLmhvcml6b250YWwgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkIHsKKyAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjI1cmVtOyB9CisgIHRhYmxlLmhvcml6b250YWwgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQgeworICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07IH0KKyAgdGFibGUuaG9yaXpvbnRhbCB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkIHsKKyAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjI1cmVtOyB9CisKK0BtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ5OXB4KSB7CisgIHRhYmxlLCB0YWJsZS5ob3Jpem9udGFsIHsKKyAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworICAgIGJvcmRlcjogMDsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBkaXNwbGF5OiB0YWJsZTsgfQorICAgIHRhYmxlIHRoZWFkLCB0YWJsZSB0aCwgdGFibGUuaG9yaXpvbnRhbCB0aGVhZCwgdGFibGUuaG9yaXpvbnRhbCB0aCB7CisgICAgICBib3JkZXI6IDA7CisgICAgICBoZWlnaHQ6IDFweDsKKyAgICAgIHdpZHRoOiAxcHg7CisgICAgICBtYXJnaW46IC0xcHg7CisgICAgICBvdmVyZmxvdzogaGlkZGVuOworICAgICAgcGFkZGluZzogMDsKKyAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgIGNsaXA6IHJlY3QoMCAwIDAgMCk7CisgICAgICAtd2Via2l0LWNsaXAtcGF0aDogaW5zZXQoMTAwJSk7CisgICAgICBjbGlwLXBhdGg6IGluc2V0KDEwMCUpOyB9CisgICAgdGFibGUgdGJvZHksIHRhYmxlLmhvcml6b250YWwgdGJvZHkgeworICAgICAgYm9yZGVyOiAwOworICAgICAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwOyB9CisgICAgdGFibGUgdHIsIHRhYmxlLmhvcml6b250YWwgdHIgeworICAgICAgZGlzcGxheTogYmxvY2s7CisgICAgICBib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpOworICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpOworICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjsKKyAgICAgIHBhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTsKKyAgICAgIG1hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7CisgICAgICBtYXJnaW4tYm90dG9tOiBjYWxjKDEgKiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSk7IH0KKyAgICB0YWJsZSB0aCwgdGFibGUgdGQsIHRhYmxlLmhvcml6b250YWwgdGgsIHRhYmxlLmhvcml6b250YWwgdGQgeworICAgICAgd2lkdGg6IGF1dG87IH0KKyAgICB0YWJsZSB0ZCwgdGFibGUuaG9yaXpvbnRhbCB0ZCB7CisgICAgICBkaXNwbGF5OiBibG9jazsKKyAgICAgIGJvcmRlcjogMDsKKyAgICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9CisgICAgdGFibGUgdGQ6YmVmb3JlLCB0YWJsZS5ob3Jpem9udGFsIHRkOmJlZm9yZSB7CisgICAgICBjb250ZW50OiBhdHRyKGRhdGEtbGFiZWwpOworICAgICAgZmxvYXQ6IGxlZnQ7CisgICAgICBmb250LXdlaWdodDogNjAwOyB9CisgICAgdGFibGUgdGg6Zmlyc3QtY2hpbGQsIHRhYmxlIHRkOmZpcnN0LWNoaWxkLCB0YWJsZS5ob3Jpem9udGFsIHRoOmZpcnN0LWNoaWxkLCB0YWJsZS5ob3Jpem9udGFsIHRkOmZpcnN0LWNoaWxkIHsKKyAgICAgIGJvcmRlci10b3A6IDA7IH0KKyAgICB0YWJsZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkLCB0YWJsZS5ob3Jpem9udGFsIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQgeworICAgICAgYm9yZGVyLXJpZ2h0OiAwOyB9IH0KK3RhYmxlIHRyOm50aC1vZi10eXBlKDJuKSA+IHRkIHsKKyAgYmFja2dyb3VuZDogdmFyKC0tdGFibGUtYm9keS1hbHQtYmFjay1jb2xvcik7IH0KKworQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNTAwcHgpIHsKKyAgdGFibGUgdHI6bnRoLW9mLXR5cGUoMm4pIHsKKyAgICBiYWNrZ3JvdW5kOiB2YXIoLS10YWJsZS1ib2R5LWFsdC1iYWNrLWNvbG9yKTsgfSB9Cis6cm9vdCB7CisgIC0tdGFibGUtYm9keS1ob3Zlci1iYWNrLWNvbG9yOiAjOTBjYWY5OyB9CisKK3RhYmxlLmhvdmVyYWJsZSB0cjpob3ZlciwgdGFibGUuaG92ZXJhYmxlIHRyOmhvdmVyID4gdGQsIHRhYmxlLmhvdmVyYWJsZSB0cjpmb2N1cywgdGFibGUuaG92ZXJhYmxlIHRyOmZvY3VzID4gdGQgeworICBiYWNrZ3JvdW5kOiB2YXIoLS10YWJsZS1ib2R5LWhvdmVyLWJhY2stY29sb3IpOyB9CisKK0BtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDUwMHB4KSB7CisgIHRhYmxlLmhvdmVyYWJsZSB0cjpob3ZlciwgdGFibGUuaG92ZXJhYmxlIHRyOmhvdmVyID4gdGQsIHRhYmxlLmhvdmVyYWJsZSB0cjpmb2N1cywgdGFibGUuaG92ZXJhYmxlIHRyOmZvY3VzID4gdGQgeworICAgIGJhY2tncm91bmQ6IHZhcigtLXRhYmxlLWJvZHktaG92ZXItYmFjay1jb2xvcik7IH0gfQorLyoKKyAgRGVmaW5pdGlvbnMgZm9yIGNvbnRleHR1YWwgYmFja2dyb3VuZCBlbGVtZW50cywgdG9hc3RzIGFuZCB0b29sdGlwcy4KKyovCisvKiBDb250ZXh0dWFsIG1vZHVsZSBDU1MgdmFyaWFibGUgZGVmaW5pdGlvbnMgKi8KKzpyb290IHsKKyAgLS1tYXJrLWJhY2stY29sb3I6ICMzY2I0ZTY7CisgIC0tbWFyay1mb3JlLWNvbG9yOiAjZmZmZmZmOyB9CisKK21hcmsgeworICBiYWNrZ3JvdW5kOiB2YXIoLS1tYXJrLWJhY2stY29sb3IpOworICBjb2xvcjogdmFyKC0tbWFyay1mb3JlLWNvbG9yKTsKKyAgZm9udC1zaXplOiAwLjk1ZW07CisgIGxpbmUtaGVpZ2h0OiAxZW07CisgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsKKyAgcGFkZGluZzogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyA0KSB2YXIoLS11bml2ZXJzYWwtcGFkZGluZyk7IH0KKyAgbWFyay5pbmxpbmUtYmxvY2sgeworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICBmb250LXNpemU6IDFlbTsKKyAgICBsaW5lLWhlaWdodDogMS40OworICAgIHBhZGRpbmc6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMikgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpOyB9CisKKzpyb290IHsKKyAgLS10b2FzdC1iYWNrLWNvbG9yOiAjNDI0MjQyOworICAtLXRvYXN0LWZvcmUtY29sb3I6ICNmYWZhZmE7IH0KKworLnRvYXN0IHsKKyAgcG9zaXRpb246IGZpeGVkOworICBib3R0b206IGNhbGModmFyKC0tdW5pdmVyc2FsLW1hcmdpbikgKiAzKTsKKyAgbGVmdDogNTAlOworICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKKyAgei1pbmRleDogMTExMTsKKyAgY29sb3I6IHZhcigtLXRvYXN0LWZvcmUtY29sb3IpOworICBiYWNrZ3JvdW5kOiB2YXIoLS10b2FzdC1iYWNrLWNvbG9yKTsKKyAgYm9yZGVyLXJhZGl1czogY2FsYyh2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykgKiAxNik7CisgIHBhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAqIDMpOyB9CisKKzpyb290IHsKKyAgLS10b29sdGlwLWJhY2stY29sb3I6ICMyMTIxMjE7CisgIC0tdG9vbHRpcC1mb3JlLWNvbG9yOiAjZmFmYWZhOyB9CisKKy50b29sdGlwIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH0KKyAgLnRvb2x0aXA6YmVmb3JlLCAudG9vbHRpcDphZnRlciB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIG9wYWNpdHk6IDA7CisgICAgY2xpcDogcmVjdCgwIDAgMCAwKTsKKyAgICAtd2Via2l0LWNsaXAtcGF0aDogaW5zZXQoMTAwJSk7CisgICAgY2xpcC1wYXRoOiBpbnNldCgxMDAlKTsKKyAgICB0cmFuc2l0aW9uOiBhbGwgMC4zczsKKyAgICB6LWluZGV4OiAxMDEwOworICAgIGxlZnQ6IDUwJTsgfQorICAudG9vbHRpcDpub3QoLmJvdHRvbSk6YmVmb3JlLCAudG9vbHRpcDpub3QoLmJvdHRvbSk6YWZ0ZXIgeworICAgIGJvdHRvbTogNzUlOyB9CisgIC50b29sdGlwLmJvdHRvbTpiZWZvcmUsIC50b29sdGlwLmJvdHRvbTphZnRlciB7CisgICAgdG9wOiA3NSU7IH0KKyAgLnRvb2x0aXA6aG92ZXI6YmVmb3JlLCAudG9vbHRpcDpob3ZlcjphZnRlciwgLnRvb2x0aXA6Zm9jdXM6YmVmb3JlLCAudG9vbHRpcDpmb2N1czphZnRlciB7CisgICAgb3BhY2l0eTogMTsKKyAgICBjbGlwOiBhdXRvOworICAgIC13ZWJraXQtY2xpcC1wYXRoOiBpbnNldCgwJSk7CisgICAgY2xpcC1wYXRoOiBpbnNldCgwJSk7IH0KKyAgLnRvb2x0aXA6YmVmb3JlIHsKKyAgICBjb250ZW50OiAnJzsKKyAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKKyAgICBib3JkZXI6IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pIHNvbGlkIHRyYW5zcGFyZW50OworICAgIGxlZnQ6IGNhbGMoNTAlIC0gdmFyKC0tdW5pdmVyc2FsLW1hcmdpbikpOyB9CisgIC50b29sdGlwOm5vdCguYm90dG9tKTpiZWZvcmUgeworICAgIGJvcmRlci10b3AtY29sb3I6ICMyMTIxMjE7IH0KKyAgLnRvb2x0aXAuYm90dG9tOmJlZm9yZSB7CisgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzIxMjEyMTsgfQorICAudG9vbHRpcDphZnRlciB7CisgICAgY29udGVudDogYXR0cihhcmlhLWxhYmVsKTsKKyAgICBjb2xvcjogdmFyKC0tdG9vbHRpcC1mb3JlLWNvbG9yKTsKKyAgICBiYWNrZ3JvdW5kOiB2YXIoLS10b29sdGlwLWJhY2stY29sb3IpOworICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsKKyAgICBwYWRkaW5nOiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZyk7CisgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7IH0KKyAgLnRvb2x0aXA6bm90KC5ib3R0b20pOmFmdGVyIHsKKyAgICBtYXJnaW4tYm90dG9tOiBjYWxjKDIgKiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSk7IH0KKyAgLnRvb2x0aXAuYm90dG9tOmFmdGVyIHsKKyAgICBtYXJnaW4tdG9wOiBjYWxjKDIgKiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSk7IH0KKworOnJvb3QgeworICAtLW1vZGFsLW92ZXJsYXktY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40NSk7CisgIC0tbW9kYWwtY2xvc2UtY29sb3I6ICNlNjAwN2U7CisgIC0tbW9kYWwtY2xvc2UtaG92ZXItY29sb3I6ICNmZmU5N2Y7IH0KKworW3R5cGU9ImNoZWNrYm94Il0ubW9kYWwgeworICBoZWlnaHQ6IDFweDsKKyAgd2lkdGg6IDFweDsKKyAgbWFyZ2luOiAtMXB4OworICBvdmVyZmxvdzogaGlkZGVuOworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGNsaXA6IHJlY3QoMCAwIDAgMCk7CisgIC13ZWJraXQtY2xpcC1wYXRoOiBpbnNldCgxMDAlKTsKKyAgY2xpcC1wYXRoOiBpbnNldCgxMDAlKTsgfQorICBbdHlwZT0iY2hlY2tib3giXS5tb2RhbCArIGRpdiB7CisgICAgcG9zaXRpb246IGZpeGVkOworICAgIHRvcDogMDsKKyAgICBsZWZ0OiAwOworICAgIGRpc3BsYXk6IG5vbmU7CisgICAgd2lkdGg6IDEwMHZ3OworICAgIGhlaWdodDogMTAwdmg7CisgICAgYmFja2dyb3VuZDogdmFyKC0tbW9kYWwtb3ZlcmxheS1jb2xvcik7IH0KKyAgICBbdHlwZT0iY2hlY2tib3giXS5tb2RhbCArIGRpdiAuY2FyZCB7CisgICAgICBtYXJnaW46IDAgYXV0bzsKKyAgICAgIG1heC1oZWlnaHQ6IDUwdmg7CisgICAgICBvdmVyZmxvdzogYXV0bzsgfQorICAgICAgW3R5cGU9ImNoZWNrYm94Il0ubW9kYWwgKyBkaXYgLmNhcmQgLm1vZGFsLWNsb3NlIHsKKyAgICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgICB0b3A6IDA7CisgICAgICAgIHJpZ2h0OiAwOworICAgICAgICB3aWR0aDogMS43NXJlbTsKKyAgICAgICAgaGVpZ2h0OiAxLjc1cmVtOworICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7CisgICAgICAgIHBhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTsKKyAgICAgICAgbWFyZ2luOiAwOworICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CisgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4zczsgfQorICAgICAgICBbdHlwZT0iY2hlY2tib3giXS5tb2RhbCArIGRpdiAuY2FyZCAubW9kYWwtY2xvc2U6YmVmb3JlIHsKKyAgICAgICAgICBkaXNwbGF5OiBibG9jazsKKyAgICAgICAgICBjb250ZW50OiAnXDAwRDcnOworICAgICAgICAgIGNvbG9yOiB2YXIoLS1tb2RhbC1jbG9zZS1jb2xvcik7CisgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgICAgICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOworICAgICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsKKyAgICAgICAgICBsaW5lLWhlaWdodDogMTsKKyAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgICAgICAgW3R5cGU9ImNoZWNrYm94Il0ubW9kYWwgKyBkaXYgLmNhcmQgLm1vZGFsLWNsb3NlOmhvdmVyLCBbdHlwZT0iY2hlY2tib3giXS5tb2RhbCArIGRpdiAuY2FyZCAubW9kYWwtY2xvc2U6Zm9jdXMgeworICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLW1vZGFsLWNsb3NlLWhvdmVyLWNvbG9yKTsgfQorICBbdHlwZT0iY2hlY2tib3giXS5tb2RhbDpjaGVja2VkICsgZGl2IHsKKyAgICBkaXNwbGF5OiBmbGV4OworICAgIGZsZXg6IDAgMSBhdXRvOworICAgIHotaW5kZXg6IDEyMDA7IH0KKyAgICBbdHlwZT0iY2hlY2tib3giXS5tb2RhbDpjaGVja2VkICsgZGl2IC5jYXJkIC5tb2RhbC1jbG9zZSB7CisgICAgICB6LWluZGV4OiAxMjExOyB9CisKKzpyb290IHsKKyAgLS1jb2xsYXBzZS1sYWJlbC1iYWNrLWNvbG9yOiAjMDMyMzRiOworICAtLWNvbGxhcHNlLWxhYmVsLWZvcmUtY29sb3I6ICNmZmZmZmY7CisgIC0tY29sbGFwc2UtbGFiZWwtaG92ZXItYmFjay1jb2xvcjogIzNjYjRlNjsKKyAgLS1jb2xsYXBzZS1zZWxlY3RlZC1sYWJlbC1iYWNrLWNvbG9yOiAjM2NiNGU2OworICAtLWNvbGxhcHNlLWJvcmRlci1jb2xvcjogdmFyKC0tY29sbGFwc2UtbGFiZWwtYmFjay1jb2xvcik7CisgIC0tY29sbGFwc2Utc2VsZWN0ZWQtYm9yZGVyLWNvbG9yOiAjY2VlY2Y4OworICAtLWNvbGxhcHNlLWNvbnRlbnQtYmFjay1jb2xvcjogI2ZmZmZmZjsKKyAgLS1jb2xsYXBzZS1zZWxlY3RlZC1sYWJlbC1ib3JkZXItY29sb3I6ICMzY2I0ZTY7IH0KKworLmNvbGxhcHNlIHsKKyAgd2lkdGg6IGNhbGMoMTAwJSAtIDIgKiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSk7CisgIG9wYWNpdHk6IDE7CisgIGRpc3BsYXk6IGZsZXg7CisgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CisgIG1hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7CisgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsgfQorICAuY29sbGFwc2UgPiBbdHlwZT0icmFkaW8iXSwgLmNvbGxhcHNlID4gW3R5cGU9ImNoZWNrYm94Il0geworICAgIGhlaWdodDogMXB4OworICAgIHdpZHRoOiAxcHg7CisgICAgbWFyZ2luOiAtMXB4OworICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGNsaXA6IHJlY3QoMCAwIDAgMCk7CisgICAgLXdlYmtpdC1jbGlwLXBhdGg6IGluc2V0KDEwMCUpOworICAgIGNsaXAtcGF0aDogaW5zZXQoMTAwJSk7IH0KKyAgLmNvbGxhcHNlID4gbGFiZWwgeworICAgIGZsZXgtZ3JvdzogMTsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICAgaGVpZ2h0OiAxLjI1cmVtOworICAgIGN1cnNvcjogcG9pbnRlcjsKKyAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7CisgICAgY29sb3I6IHZhcigtLWNvbGxhcHNlLWxhYmVsLWZvcmUtY29sb3IpOworICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbGxhcHNlLWxhYmVsLWJhY2stY29sb3IpOworICAgIGJvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWNvbGxhcHNlLXNlbGVjdGVkLWJvcmRlci1jb2xvcik7CisgICAgcGFkZGluZzogY2FsYygxLjI1ICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTsgfQorICAgIC5jb2xsYXBzZSA+IGxhYmVsOmhvdmVyLCAuY29sbGFwc2UgPiBsYWJlbDpmb2N1cyB7CisgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xsYXBzZS1sYWJlbC1ob3Zlci1iYWNrLWNvbG9yKTsgfQorICAgIC5jb2xsYXBzZSA+IGxhYmVsICsgZGl2IHsKKyAgICAgIGZsZXgtYmFzaXM6IGF1dG87CisgICAgICBoZWlnaHQ6IDFweDsKKyAgICAgIHdpZHRoOiAxcHg7CisgICAgICBtYXJnaW46IC0xcHg7CisgICAgICBvdmVyZmxvdzogaGlkZGVuOworICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgY2xpcDogcmVjdCgwIDAgMCAwKTsKKyAgICAgIC13ZWJraXQtY2xpcC1wYXRoOiBpbnNldCgxMDAlKTsKKyAgICAgIGNsaXAtcGF0aDogaW5zZXQoMTAwJSk7CisgICAgICB0cmFuc2l0aW9uOiBtYXgtaGVpZ2h0IDAuM3M7CisgICAgICBtYXgtaGVpZ2h0OiAxcHg7IH0KKyAgLmNvbGxhcHNlID4gOmNoZWNrZWQgKyBsYWJlbCB7CisgICAgYmFja2dyb3VuZDogdmFyKC0tY29sbGFwc2Utc2VsZWN0ZWQtbGFiZWwtYmFjay1jb2xvcik7CisgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xsYXBzZS1zZWxlY3RlZC1sYWJlbC1ib3JkZXItY29sb3IpOyB9CisgICAgLmNvbGxhcHNlID4gOmNoZWNrZWQgKyBsYWJlbCArIGRpdiB7CisgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgICAgd2lkdGg6IDEwMCU7CisgICAgICBoZWlnaHQ6IGF1dG87CisgICAgICBvdmVyZmxvdzogYXV0bzsKKyAgICAgIG1hcmdpbjogMDsKKyAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbGxhcHNlLWNvbnRlbnQtYmFjay1jb2xvcik7CisgICAgICBib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1jb2xsYXBzZS1zZWxlY3RlZC1ib3JkZXItY29sb3IpOworICAgICAgYm9yZGVyLXRvcDogMDsKKyAgICAgIHBhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTsKKyAgICAgIGNsaXA6IGF1dG87CisgICAgICAtd2Via2l0LWNsaXAtcGF0aDogaW5zZXQoMCUpOworICAgICAgY2xpcC1wYXRoOiBpbnNldCgwJSk7CisgICAgICBtYXgtaGVpZ2h0OiAxMDAlOyB9CisgIC5jb2xsYXBzZSA+IGxhYmVsOm5vdCg6Zmlyc3Qtb2YtdHlwZSkgeworICAgIGJvcmRlci10b3A6IDA7IH0KKyAgLmNvbGxhcHNlID4gbGFiZWw6Zmlyc3Qtb2YtdHlwZSB7CisgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSAwIDA7IH0KKyAgLmNvbGxhcHNlID4gbGFiZWw6bGFzdC1vZi10eXBlOm5vdCg6Zmlyc3Qtb2YtdHlwZSkgeworICAgIGJvcmRlci1yYWRpdXM6IDAgMCB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykgdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpOyB9CisgIC5jb2xsYXBzZSA+IGxhYmVsOmxhc3Qtb2YtdHlwZTpmaXJzdC1vZi10eXBlIHsKKyAgICBib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7IH0KKyAgLmNvbGxhcHNlID4gOmNoZWNrZWQ6bGFzdC1vZi10eXBlOm5vdCg6Zmlyc3Qtb2YtdHlwZSkgKyBsYWJlbCB7CisgICAgYm9yZGVyLXJhZGl1czogMDsgfQorICAuY29sbGFwc2UgPiA6Y2hlY2tlZDpsYXN0LW9mLXR5cGUgKyBsYWJlbCArIGRpdiB7CisgICAgYm9yZGVyLXJhZGl1czogMCAwIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7IH0KKworLyoKKyAgQ3VzdG9tIGVsZW1lbnRzIGZvciBjb250ZXh0dWFsIGJhY2tncm91bmQgZWxlbWVudHMsIHRvYXN0cyBhbmQgdG9vbHRpcHMuCisqLworbWFyay50ZXJ0aWFyeSB7CisgIC0tbWFyay1iYWNrLWNvbG9yOiAjM2NiNGU2OyB9CisKK21hcmsudGFnIHsKKyAgcGFkZGluZzogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykvMikgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpOworICBib3JkZXItcmFkaXVzOiAxZW07IH0KKworLyoKKyAgRGVmaW5pdGlvbnMgZm9yIHByb2dyZXNzIGVsZW1lbnRzIGFuZCBzcGlubmVycy4KKyovCisvKiBQcm9ncmVzcyBtb2R1bGUgQ1NTIHZhcmlhYmxlIGRlZmluaXRpb25zICovCis6cm9vdCB7CisgIC0tcHJvZ3Jlc3MtYmFjay1jb2xvcjogIzNjYjRlNjsKKyAgLS1wcm9ncmVzcy1mb3JlLWNvbG9yOiAjNTU1OyB9CisKK3Byb2dyZXNzIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7CisgIGFwcGVhcmFuY2U6IG5vbmU7CisgIGhlaWdodDogMC43NXJlbTsKKyAgd2lkdGg6IGNhbGMoMTAwJSAtIDIgKiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSk7CisgIG1hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7CisgIGJvcmRlcjogMDsKKyAgYm9yZGVyLXJhZGl1czogY2FsYygyICogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpKTsKKyAgYmFja2dyb3VuZDogdmFyKC0tcHJvZ3Jlc3MtYmFjay1jb2xvcik7CisgIGNvbG9yOiB2YXIoLS1wcm9ncmVzcy1mb3JlLWNvbG9yKTsgfQorICBwcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZSB7CisgICAgYmFja2dyb3VuZDogdmFyKC0tcHJvZ3Jlc3MtZm9yZS1jb2xvcik7CisgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogY2FsYygyICogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpKTsKKyAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiBjYWxjKDIgKiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykpOyB9CisgIHByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLWJhciB7CisgICAgYmFja2dyb3VuZDogdmFyKC0tcHJvZ3Jlc3MtYmFjay1jb2xvcik7IH0KKyAgcHJvZ3Jlc3M6Oi1tb3otcHJvZ3Jlc3MtYmFyIHsKKyAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcm9ncmVzcy1mb3JlLWNvbG9yKTsKKyAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBjYWxjKDIgKiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykpOworICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSk7IH0KKyAgcHJvZ3Jlc3NbdmFsdWU9IjEwMDAiXTo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZSB7CisgICAgYm9yZGVyLXJhZGl1czogY2FsYygyICogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpKTsgfQorICBwcm9ncmVzc1t2YWx1ZT0iMTAwMCJdOjotbW96LXByb2dyZXNzLWJhciB7CisgICAgYm9yZGVyLXJhZGl1czogY2FsYygyICogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpKTsgfQorICBwcm9ncmVzcy5pbmxpbmUgeworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworICAgIHdpZHRoOiA2MCU7IH0KKworOnJvb3QgeworICAtLXNwaW5uZXItYmFjay1jb2xvcjogI2RkZDsKKyAgLS1zcGlubmVyLWZvcmUtY29sb3I6ICM1NTU7IH0KKworQGtleWZyYW1lcyBzcGlubmVyLWRvbnV0LWFuaW0geworICAwJSB7CisgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH0KKyAgMTAwJSB7CisgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfSB9Cisuc3Bpbm5lciB7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgbWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsKKyAgYm9yZGVyOiAwLjI1cmVtIHNvbGlkIHZhcigtLXNwaW5uZXItYmFjay1jb2xvcik7CisgIGJvcmRlci1sZWZ0OiAwLjI1cmVtIHNvbGlkIHZhcigtLXNwaW5uZXItZm9yZS1jb2xvcik7CisgIGJvcmRlci1yYWRpdXM6IDUwJTsKKyAgd2lkdGg6IDEuMjVyZW07CisgIGhlaWdodDogMS4yNXJlbTsKKyAgYW5pbWF0aW9uOiBzcGlubmVyLWRvbnV0LWFuaW0gMS4ycyBsaW5lYXIgaW5maW5pdGU7IH0KKworLyoKKyAgQ3VzdG9tIGVsZW1lbnRzIGZvciBwcm9ncmVzcyBiYXJzIGFuZCBzcGlubmVycy4KKyovCitwcm9ncmVzcy5wcmltYXJ5IHsKKyAgLS1wcm9ncmVzcy1mb3JlLWNvbG9yOiAjMTk3NmQyOyB9CisKK3Byb2dyZXNzLnNlY29uZGFyeSB7CisgIC0tcHJvZ3Jlc3MtZm9yZS1jb2xvcjogI2QzMmYyZjsgfQorCitwcm9ncmVzcy50ZXJ0aWFyeSB7CisgIC0tcHJvZ3Jlc3MtZm9yZS1jb2xvcjogIzMwODczMjsgfQorCisuc3Bpbm5lci5wcmltYXJ5IHsKKyAgLS1zcGlubmVyLWZvcmUtY29sb3I6ICMxOTc2ZDI7IH0KKworLnNwaW5uZXIuc2Vjb25kYXJ5IHsKKyAgLS1zcGlubmVyLWZvcmUtY29sb3I6ICNkMzJmMmY7IH0KKworLnNwaW5uZXIudGVydGlhcnkgeworICAtLXNwaW5uZXItZm9yZS1jb2xvcjogIzMwODczMjsgfQorCisvKgorICBEZWZpbml0aW9ucyBmb3IgaWNvbnMgLSBwb3dlcmVkIGJ5IEZlYXRoZXIgKGh0dHBzOi8vZmVhdGhlcmljb25zLmNvbS8pLgorKi8KK3NwYW5bY2xhc3NePSdpY29uLSddIHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBoZWlnaHQ6IDFlbTsKKyAgd2lkdGg6IDFlbTsKKyAgdmVydGljYWwtYWxpZ246IC0wLjEyNWVtOworICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47CisgIG1hcmdpbjogMCBjYWxjKHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pIC8gNCk7IH0KKyAgc3BhbltjbGFzc149J2ljb24tJ10uc2Vjb25kYXJ5IHsKKyAgICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDI1JSk7CisgICAgZmlsdGVyOiBpbnZlcnQoMjUlKTsgfQorICBzcGFuW2NsYXNzXj0naWNvbi0nXS5pbnZlcnNlIHsKKyAgICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDEwMCUpOworICAgIGZpbHRlcjogaW52ZXJ0KDEwMCUpOyB9CisKK3NwYW4uaWNvbi1hbGVydCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPScxMCclM0UlM0MvY2lyY2xlJTNFJTNDbGluZSB4MT0nMTInIHkxPSc4JyB4Mj0nMTInIHkyPScxMiclM0UlM0MvbGluZSUzRSUzQ2xpbmUgeDE9JzEyJyB5MT0nMTYnIHgyPScxMicgeTI9JzE2JyUzRSUzQy9saW5lJTNFJTNDL3N2ZyUzRSIpOyB9CitzcGFuLmljb24tYm9va21hcmsgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTE5IDIxbC03LTUtNyA1VjVhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAyeiclM0UlM0MvcGF0aCUzRSUzQy9zdmclM0UiKTsgfQorc3Bhbi5pY29uLWNhbGVuZGFyIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NyZWN0IHg9JzMnIHk9JzQnIHdpZHRoPScxOCcgaGVpZ2h0PScxOCcgcng9JzInIHJ5PScyJyUzRSUzQy9yZWN0JTNFJTNDbGluZSB4MT0nMTYnIHkxPScyJyB4Mj0nMTYnIHkyPSc2JyUzRSUzQy9saW5lJTNFJTNDbGluZSB4MT0nOCcgeTE9JzInIHgyPSc4JyB5Mj0nNiclM0UlM0MvbGluZSUzRSUzQ2xpbmUgeDE9JzMnIHkxPScxMCcgeDI9JzIxJyB5Mj0nMTAnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KK3NwYW4uaWNvbi1jcmVkaXQgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3JlY3QgeD0nMScgeT0nNCcgd2lkdGg9JzIyJyBoZWlnaHQ9JzE2JyByeD0nMicgcnk9JzInJTNFJTNDL3JlY3QlM0UlM0NsaW5lIHgxPScxJyB5MT0nMTAnIHgyPScyMycgeTI9JzEwJyUzRSUzQy9saW5lJTNFJTNDL3N2ZyUzRSIpOyB9CitzcGFuLmljb24tZWRpdCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNMjAgMTQuNjZWMjBhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDUuMzQnJTNFJTNDL3BhdGglM0UlM0Nwb2x5Z29uIHBvaW50cz0nMTggMiAyMiA2IDEyIDE2IDggMTYgOCAxMiAxOCAyJyUzRSUzQy9wb2x5Z29uJTNFJTNDL3N2ZyUzRSIpOyB9CitzcGFuLmljb24tbGluayB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNMTggMTN2NmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoNiclM0UlM0MvcGF0aCUzRSUzQ3BvbHlsaW5lIHBvaW50cz0nMTUgMyAyMSAzIDIxIDknJTNFJTNDL3BvbHlsaW5lJTNFJTNDbGluZSB4MT0nMTAnIHkxPScxNCcgeDI9JzIxJyB5Mj0nMyclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQorc3Bhbi5pY29uLWhlbHAgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTkuMDkgOWEzIDMgMCAwIDEgNS44MyAxYzAgMi0zIDMtMyAzJyUzRSUzQy9wYXRoJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPScxMCclM0UlM0MvY2lyY2xlJTNFJTNDbGluZSB4MT0nMTInIHkxPScxNycgeDI9JzEyJyB5Mj0nMTcnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KK3NwYW4uaWNvbi1ob21lIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00zIDlsOS03IDkgN3YxMWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnonJTNFJTNDL3BhdGglM0UlM0Nwb2x5bGluZSBwb2ludHM9JzkgMjIgOSAxMiAxNSAxMiAxNSAyMiclM0UlM0MvcG9seWxpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KK3NwYW4uaWNvbi1pbmZvIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzEwJyUzRSUzQy9jaXJjbGUlM0UlM0NsaW5lIHgxPScxMicgeTE9JzE2JyB4Mj0nMTInIHkyPScxMiclM0UlM0MvbGluZSUzRSUzQ2xpbmUgeDE9JzEyJyB5MT0nOCcgeDI9JzEyJyB5Mj0nOCclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQorc3Bhbi5pY29uLWxvY2sgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3JlY3QgeD0nMycgeT0nMTEnIHdpZHRoPScxOCcgaGVpZ2h0PScxMScgcng9JzInIHJ5PScyJyUzRSUzQy9yZWN0JTNFJTNDcGF0aCBkPSdNNyAxMVY3YTUgNSAwIDAgMSAxMCAwdjQnJTNFJTNDL3BhdGglM0UlM0Mvc3ZnJTNFIik7IH0KK3NwYW4uaWNvbi1tYWlsIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J000IDRoMTZjMS4xIDAgMiAuOSAyIDJ2MTJjMCAxLjEtLjkgMi0yIDJINGMtMS4xIDAtMi0uOS0yLTJWNmMwLTEuMS45LTIgMi0yeiclM0UlM0MvcGF0aCUzRSUzQ3BvbHlsaW5lIHBvaW50cz0nMjIsNiAxMiwxMyAyLDYnJTNFJTNDL3BvbHlsaW5lJTNFJTNDL3N2ZyUzRSIpOyB9CitzcGFuLmljb24tbG9jYXRpb24geworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTIxIDEwYzAgNy05IDEzLTkgMTNzLTktNi05LTEzYTkgOSAwIDAgMSAxOCAweiclM0UlM0MvcGF0aCUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMCcgcj0nMyclM0UlM0MvY2lyY2xlJTNFJTNDL3N2ZyUzRSIpOyB9CitzcGFuLmljb24tcGhvbmUgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTIyIDE2LjkydjNhMiAyIDAgMCAxLTIuMTggMiAxOS43OSAxOS43OSAwIDAgMS04LjYzLTMuMDcgMTkuNSAxOS41IDAgMCAxLTYtNiAxOS43OSAxOS43OSAwIDAgMS0zLjA3LTguNjdBMiAyIDAgMCAxIDQuMTEgMmgzYTIgMiAwIDAgMSAyIDEuNzIgMTIuODQgMTIuODQgMCAwIDAgLjcgMi44MSAyIDIgMCAwIDEtLjQ1IDIuMTFMOC4wOSA5LjkxYTE2IDE2IDAgMCAwIDYgNmwxLjI3LTEuMjdhMiAyIDAgMCAxIDIuMTEtLjQ1IDEyLjg0IDEyLjg0IDAgMCAwIDIuODEuN0EyIDIgMCAwIDEgMjIgMTYuOTJ6JyUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRSIpOyB9CitzcGFuLmljb24tcnNzIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J000IDExYTkgOSAwIDAgMSA5IDknJTNFJTNDL3BhdGglM0UlM0NwYXRoIGQ9J000IDRhMTYgMTYgMCAwIDEgMTYgMTYnJTNFJTNDL3BhdGglM0UlM0NjaXJjbGUgY3g9JzUnIGN5PScxOScgcj0nMSclM0UlM0MvY2lyY2xlJTNFJTNDL3N2ZyUzRSIpOyB9CitzcGFuLmljb24tc2VhcmNoIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzExJyBjeT0nMTEnIHI9JzgnJTNFJTNDL2NpcmNsZSUzRSUzQ2xpbmUgeDE9JzIxJyB5MT0nMjEnIHgyPScxNi42NScgeTI9JzE2LjY1JyUzRSUzQy9saW5lJTNFJTNDL3N2ZyUzRSIpOyB9CitzcGFuLmljb24tc2V0dGluZ3MgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMicgcj0nMyclM0UlM0MvY2lyY2xlJTNFJTNDcGF0aCBkPSdNMTkuNCAxNWExLjY1IDEuNjUgMCAwIDAgLjMzIDEuODJsLjA2LjA2YTIgMiAwIDAgMSAwIDIuODMgMiAyIDAgMCAxLTIuODMgMGwtLjA2LS4wNmExLjY1IDEuNjUgMCAwIDAtMS44Mi0uMzMgMS42NSAxLjY1IDAgMCAwLTEgMS41MVYyMWEyIDIgMCAwIDEtMiAyIDIgMiAwIDAgMS0yLTJ2LS4wOUExLjY1IDEuNjUgMCAwIDAgOSAxOS40YTEuNjUgMS42NSAwIDAgMC0xLjgyLjMzbC0uMDYuMDZhMiAyIDAgMCAxLTIuODMgMCAyIDIgMCAwIDEgMC0yLjgzbC4wNi0uMDZhMS42NSAxLjY1IDAgMCAwIC4zMy0xLjgyIDEuNjUgMS42NSAwIDAgMC0xLjUxLTFIM2EyIDIgMCAwIDEtMi0yIDIgMiAwIDAgMSAyLTJoLjA5QTEuNjUgMS42NSAwIDAgMCA0LjYgOWExLjY1IDEuNjUgMCAwIDAtLjMzLTEuODJsLS4wNi0uMDZhMiAyIDAgMCAxIDAtMi44MyAyIDIgMCAwIDEgMi44MyAwbC4wNi4wNmExLjY1IDEuNjUgMCAwIDAgMS44Mi4zM0g5YTEuNjUgMS42NSAwIDAgMCAxLTEuNTFWM2EyIDIgMCAwIDEgMi0yIDIgMiAwIDAgMSAyIDJ2LjA5YTEuNjUgMS42NSAwIDAgMCAxIDEuNTEgMS42NSAxLjY1IDAgMCAwIDEuODItLjMzbC4wNi0uMDZhMiAyIDAgMCAxIDIuODMgMCAyIDIgMCAwIDEgMCAyLjgzbC0uMDYuMDZhMS42NSAxLjY1IDAgMCAwLS4zMyAxLjgyVjlhMS42NSAxLjY1IDAgMCAwIDEuNTEgMUgyMWEyIDIgMCAwIDEgMiAyIDIgMiAwIDAgMS0yIDJoLS4wOWExLjY1IDEuNjUgMCAwIDAtMS41MSAxeiclM0UlM0MvcGF0aCUzRSUzQy9zdmclM0UiKTsgfQorc3Bhbi5pY29uLXNoYXJlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzE4JyBjeT0nNScgcj0nMyclM0UlM0MvY2lyY2xlJTNFJTNDY2lyY2xlIGN4PSc2JyBjeT0nMTInIHI9JzMnJTNFJTNDL2NpcmNsZSUzRSUzQ2NpcmNsZSBjeD0nMTgnIGN5PScxOScgcj0nMyclM0UlM0MvY2lyY2xlJTNFJTNDbGluZSB4MT0nOC41OScgeTE9JzEzLjUxJyB4Mj0nMTUuNDInIHkyPScxNy40OSclM0UlM0MvbGluZSUzRSUzQ2xpbmUgeDE9JzE1LjQxJyB5MT0nNi41MScgeDI9JzguNTknIHkyPScxMC40OSclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQorc3Bhbi5pY29uLWNhcnQgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ2NpcmNsZSBjeD0nOScgY3k9JzIxJyByPScxJyUzRSUzQy9jaXJjbGUlM0UlM0NjaXJjbGUgY3g9JzIwJyBjeT0nMjEnIHI9JzEnJTNFJTNDL2NpcmNsZSUzRSUzQ3BhdGggZD0nTTEgMWg0bDIuNjggMTMuMzlhMiAyIDAgMCAwIDIgMS42MWg5LjcyYTIgMiAwIDAgMCAyLTEuNjFMMjMgNkg2JyUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRSIpOyB9CitzcGFuLmljb24tdXBsb2FkIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00JyUzRSUzQy9wYXRoJTNFJTNDcG9seWxpbmUgcG9pbnRzPScxNyA4IDEyIDMgNyA4JyUzRSUzQy9wb2x5bGluZSUzRSUzQ2xpbmUgeDE9JzEyJyB5MT0nMycgeDI9JzEyJyB5Mj0nMTUnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KK3NwYW4uaWNvbi11c2VyIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00yMCAyMXYtMmE0IDQgMCAwIDAtNC00SDhhNCA0IDAgMCAwLTQgNHYyJyUzRSUzQy9wYXRoJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzcnIHI9JzQnJTNFJTNDL2NpcmNsZSUzRSUzQy9zdmclM0UiKTsgfQorCisvKgorICBEZWZpbml0aW9ucyBmb3IgU1RNaWNyb2VsZWN0cm9uaWNzIGljb25zIChodHRwczovL2JyYW5kcG9ydGFsLnN0LmNvbS9kb2N1bWVudC8yNikuCisqLworc3Bhbi5pY29uLXN0LXVwZGF0ZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiVXBkYXRlLnN2ZyIpOyB9CitzcGFuLmljb24tc3QtYWRkIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJBZGQgYnV0dG9uLnN2ZyIpOyB9CisKKy8qCisgIERlZmluaXRpb25zIGZvciB1dGlsaXRpZXMgYW5kIGhlbHBlciBjbGFzc2VzLgorKi8KKy8qIFV0aWxpdHkgbW9kdWxlIENTUyB2YXJpYWJsZSBkZWZpbml0aW9ucyAqLworOnJvb3QgeworICAtLWdlbmVyaWMtYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMyk7CisgIC0tZ2VuZXJpYy1ib3gtc2hhZG93OiAwIDAuMjg1NzE0Mjg1N3JlbSAwLjI4NTcxNDI4NTdyZW0gMCByZ2JhKDAsIDAsIDAsIDAuMTI1KSwgMCAwLjE0Mjg1NzE0MjlyZW0gMC4xNDI4NTcxNDI5cmVtIC0wLjE0Mjg1NzE0MjlyZW0gcmdiYSgwLCAwLCAwLCAwLjEyNSk7IH0KKworLmhpZGRlbiB7CisgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfQorCisudmlzdWFsbHktaGlkZGVuIHsKKyAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7CisgIHdpZHRoOiAxcHggIWltcG9ydGFudDsKKyAgaGVpZ2h0OiAxcHggIWltcG9ydGFudDsKKyAgbWFyZ2luOiAtMXB4ICFpbXBvcnRhbnQ7CisgIGJvcmRlcjogMCAhaW1wb3J0YW50OworICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CisgIGNsaXA6IHJlY3QoMCAwIDAgMCkgIWltcG9ydGFudDsKKyAgLXdlYmtpdC1jbGlwLXBhdGg6IGluc2V0KDEwMCUpICFpbXBvcnRhbnQ7CisgIGNsaXAtcGF0aDogaW5zZXQoMTAwJSkgIWltcG9ydGFudDsKKyAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OyB9CisKKy5ib3JkZXJlZCB7CisgIGJvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWdlbmVyaWMtYm9yZGVyLWNvbG9yKSAhaW1wb3J0YW50OyB9CisKKy5yb3VuZGVkIHsKKyAgYm9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpICFpbXBvcnRhbnQ7IH0KKworLmNpcmN1bGFyIHsKKyAgYm9yZGVyLXJhZGl1czogNTAlICFpbXBvcnRhbnQ7IH0KKworLnNoYWRvd2VkIHsKKyAgYm94LXNoYWRvdzogdmFyKC0tZ2VuZXJpYy1ib3gtc2hhZG93KSAhaW1wb3J0YW50OyB9CisKKy5yZXNwb25zaXZlLW1hcmdpbiB7CisgIG1hcmdpbjogY2FsYyh2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSAvIDQpICFpbXBvcnRhbnQ7IH0KKyAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTAwcHgpIHsKKyAgICAucmVzcG9uc2l2ZS1tYXJnaW4geworICAgICAgbWFyZ2luOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pIC8gMikgIWltcG9ydGFudDsgfSB9CisgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEyODBweCkgeworICAgIC5yZXNwb25zaXZlLW1hcmdpbiB7CisgICAgICBtYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pICFpbXBvcnRhbnQ7IH0gfQorCisucmVzcG9uc2l2ZS1wYWRkaW5nIHsKKyAgcGFkZGluZzogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyA0KSAhaW1wb3J0YW50OyB9CisgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDUwMHB4KSB7CisgICAgLnJlc3BvbnNpdmUtcGFkZGluZyB7CisgICAgICBwYWRkaW5nOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpICFpbXBvcnRhbnQ7IH0gfQorICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpIHsKKyAgICAucmVzcG9uc2l2ZS1wYWRkaW5nIHsKKyAgICAgIHBhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAhaW1wb3J0YW50OyB9IH0KKworQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDk5cHgpIHsKKyAgLmhpZGRlbi1zbSB7CisgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9IH0KK0BtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDUwMHB4KSBhbmQgKG1heC13aWR0aDogMTI3OXB4KSB7CisgIC5oaWRkZW4tbWQgeworICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfSB9CitAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpIHsKKyAgLmhpZGRlbi1sZyB7CisgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9IH0KK0BtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ5OXB4KSB7CisgIC52aXN1YWxseS1oaWRkZW4tc20geworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OworICAgIHdpZHRoOiAxcHggIWltcG9ydGFudDsKKyAgICBoZWlnaHQ6IDFweCAhaW1wb3J0YW50OworICAgIG1hcmdpbjogLTFweCAhaW1wb3J0YW50OworICAgIGJvcmRlcjogMCAhaW1wb3J0YW50OworICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKKyAgICBjbGlwOiByZWN0KDAgMCAwIDApICFpbXBvcnRhbnQ7CisgICAgLXdlYmtpdC1jbGlwLXBhdGg6IGluc2V0KDEwMCUpICFpbXBvcnRhbnQ7CisgICAgY2xpcC1wYXRoOiBpbnNldCgxMDAlKSAhaW1wb3J0YW50OworICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDsgfSB9CitAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1MDBweCkgYW5kIChtYXgtd2lkdGg6IDEyNzlweCkgeworICAudmlzdWFsbHktaGlkZGVuLW1kIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKKyAgICB3aWR0aDogMXB4ICFpbXBvcnRhbnQ7CisgICAgaGVpZ2h0OiAxcHggIWltcG9ydGFudDsKKyAgICBtYXJnaW46IC0xcHggIWltcG9ydGFudDsKKyAgICBib3JkZXI6IDAgIWltcG9ydGFudDsKKyAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CisgICAgY2xpcDogcmVjdCgwIDAgMCAwKSAhaW1wb3J0YW50OworICAgIC13ZWJraXQtY2xpcC1wYXRoOiBpbnNldCgxMDAlKSAhaW1wb3J0YW50OworICAgIGNsaXAtcGF0aDogaW5zZXQoMTAwJSkgIWltcG9ydGFudDsKKyAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7IH0gfQorQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTI4MHB4KSB7CisgIC52aXN1YWxseS1oaWRkZW4tbGcgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OworICAgIHdpZHRoOiAxcHggIWltcG9ydGFudDsKKyAgICBoZWlnaHQ6IDFweCAhaW1wb3J0YW50OworICAgIG1hcmdpbjogLTFweCAhaW1wb3J0YW50OworICAgIGJvcmRlcjogMCAhaW1wb3J0YW50OworICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKKyAgICBjbGlwOiByZWN0KDAgMCAwIDApICFpbXBvcnRhbnQ7CisgICAgLXdlYmtpdC1jbGlwLXBhdGg6IGluc2V0KDEwMCUpICFpbXBvcnRhbnQ7CisgICAgY2xpcC1wYXRoOiBpbnNldCgxMDAlKSAhaW1wb3J0YW50OworICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDsgfSB9CisKKy8qIyBzb3VyY2VNYXBwaW5nVVJMPW1pbmktY3VzdG9tLmNzcy5tYXAgKi8KKworaW1nW2FsdD0iU1QgbG9nbyJdIHsgZGlzcGxheTogYmxvY2s7IG1hcmdpbjogYXV0bzsgd2lkdGg6IDc1JTsgbWF4LXdpZHRoOiAyNTBweDsgbWluLXdpZHRoOiA3MXB4OyB9CitpbWdbYWx0PSJDdWJlIGxvZ28iXSB7IGZsb2F0OiByaWdodDsgd2lkdGg6IDMwJTsgbWF4LXdpZHRoOiAxMHJlbTsgbWluLXdpZHRoOiA4cmVtOyBwYWRkaW5nLXJpZ2h0OiAxcmVtO30KKworLmZpZ3VyZSB7CisgIGRpc3BsYXk6IGJsb2NrOworICBtYXJnaW4tbGVmdDogYXV0bzsKKyAgbWFyZ2luLXJpZ2h0OiBhdXRvOworICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvX2h0bXJlc2Mvc3RfbG9nb18yMDIwLnBuZyBiL19odG1yZXNjL3N0X2xvZ29fMjAyMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZjZWJiNQotLS0gL2Rldi9udWxsCisrKyBiL19odG1yZXNjL3N0X2xvZ29fMjAyMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgo=