LyoKICogKEMpIENvcHlyaWdodCAyMDAyCiAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZQogKgogKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogKiBwcm9qZWN0LgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAogKiBNQSAwMjExMS0xMzA3IFVTQQogKi8KCiNpZm5kZWYgX0FTTV9aSU1BR0VfSF8KI2RlZmluZSBfQVNNX1pJTUFHRV9IXwoKLyogbGludXggaTM4NiB6SW1hZ2UvYnpJbWFnZSBoZWFkZXIuIE9mZnNldHMgcmVsYXRpdmUgdG8KICogdGhlIHN0YXJ0IG9mIHRoZSBpbWFnZSAqLwoKI2RlZmluZSBDTURfTElORV9NQUdJQ19PRkYgIDB4MDIwIC8qIE1hZ2ljIDB4YTMzZiBpZiB0aGUgb2Zmc2V0IGJlbG93IGlzIHZhbGlkICovCiNkZWZpbmUgQ01EX0xJTkVfT0ZGU0VUX09GRiAweDAyMiAvKiBPZmZzZXQgdG8gY29tYW5kbGluZSAqLwojZGVmaW5lIFNFVFVQX1NFQ1RTX09GRiAgICAgMHgxRjEgLyogVGhlIHNpemUgb2YgdGhlIHNldHVwIGluIHNlY3RvcnMgKi8KI2RlZmluZSBST09UX0ZMQUdTX09GRiAgICAgIDB4MUYyIC8qIElmIHNldCwgdGhlIHJvb3QgaXMgbW91bnRlZCByZWFkb25seSAqLwojZGVmaW5lIFZJRF9NT0RFX09GRiAgICAgICAgMHgxRkEgLyogVmlkZW8gbW9kZSBjb250cm9sICovCiNkZWZpbmUgUk9PVF9ERVZfT0ZGICAgICAgICAweDFGQyAvKiBEZWZhdWx0IHJvb3QgZGV2aWNlIG51bWJlciAqLwojZGVmaW5lIEJPT1RfRkxBR19PRkYgICAgICAgMHgxRkUgLyogMHhBQTU1IG1hZ2ljIG51bWJlciAqLwojZGVmaW5lIEhFQURFUl9PRkYgICAgICAgICAgMHgyMDIgLyogTWFnaWMgc2lnbmF0dXJlICJIZHJTIiAqLwojZGVmaW5lIFZFUlNJT05fT0ZGICAgICAgICAgMHgyMDYgLyogQm9vdCBwcm90b2NvbCB2ZXJzaW9uIHN1cHBvcnRlZCAqLwojZGVmaW5lIFJFQUxNT0RFX1NXVENIX09GRiAgMHgyMDggLyogQm9vdCBsb2FkZXIgaG9vayAoc2VlIGJlbG93KSAqLwojZGVmaW5lIFNUQVJUX1NZU19PRkYgICAgICAgMHgyMEMgLyogUG9pbnRzIHRvIGtlcm5lbCB2ZXJzaW9uIHN0cmluZyAqLwojZGVmaW5lIFRZUEVfT0ZfTE9BREVSX09GRiAgMHgyMTAgLyogQm9vdCBsb2FkZXIgaWRlbnRpZmllciAqLwojZGVmaW5lIExPQURGTEFHU19PRkYgICAgICAgMHgyMTEgLyogQm9vdCBwcm90b2NvbCBvcHRpb24gZmxhZ3MgKi8KI2RlZmluZSBTRVRVUF9NT1ZFX1NJWkVfT0ZGIDB4MjEyIC8qIE1vdmUgdG8gaGlnaCBtZW1vcnkgc2l6ZSAodXNlZCB3aXRoIGhvb2tzKSAqLwojZGVmaW5lIENPREUzMl9TVEFSVF9PRkYgICAgMHgyMTQgLyogQm9vdCBsb2FkZXIgaG9vayAoc2VlIGJlbG93KSAqLwojZGVmaW5lIFJBTURJU0tfSU1BR0VfT0ZGICAgMHgyMTggLyogaW5pdHJkIGxvYWQgYWRkcmVzcyAoc2V0IGJ5IGJvb3QgbG9hZGVyKSAqLwojZGVmaW5lIFJBTURJU0tfU0laRV9PRkYgICAgMHgyMUMgLyogaW5pdHJkIHNpemUgKHNldCBieSBib290IGxvYWRlcikgKi8KI2RlZmluZSBIRUFQX0VORF9QVFJfT0ZGICAgIDB4MjI0IC8qIEZyZWUgbWVtb3J5IGFmdGVyIHNldHVwIGVuZCAqLwojZGVmaW5lIENNRF9MSU5FX1BUUl9PRkYgICAgMHgyMjggLyogMzItYml0IHBvaW50ZXIgdG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgKi8KCgojZGVmaW5lIEhFQVBfRkxBRyAgICAgICAgICAgMHg4MAojZGVmaW5lIEJJR19LRVJORUxfRkxBRyAgICAgMHgwMQoKLyogbWFnaWMgbnVtYmVycyAqLwojZGVmaW5lIEtFUk5FTF9NQUdJQyAgICAgICAgMHhhYTU1CiNkZWZpbmUgS0VSTkVMX1YyX01BR0lDICAgICAweDUzNzI2NDQ4CiNkZWZpbmUgQ09NTUFORF9MSU5FX01BR0lDICAweEEzM0YKCi8qIGxpbWl0cyAqLwojZGVmaW5lIEJaSU1BR0VfTUFYX1NJWkUgICAxNSoxMDI0KjEwMjQgICAgIC8qIDE1TUIgKi8KI2RlZmluZSBaSU1BR0VfTUFYX1NJWkUgICAgNTEyKjEwMjQgICAgICAgICAvKiA1MTJrICovCiNkZWZpbmUgU0VUVVBfTUFYX1NJWkUgICAgIDMyNzY4CgojZGVmaW5lIFNFVFVQX1NUQVJUX09GRlNFVCAweDIwMAojZGVmaW5lIEJaSU1BR0VfTE9BRF9BRERSICAweDEwMDAwMAojZGVmaW5lIFpJTUFHRV9MT0FEX0FERFIgICAweDEwMDAwCgp2b2lkICpsb2FkX3ppbWFnZShjaGFyICppbWFnZSwgdW5zaWduZWQgbG9uZyBrZXJuZWxfc2l6ZSwKCQkgIHVuc2lnbmVkIGxvbmcgaW5pdHJkX2FkZHIsIHVuc2lnbmVkIGxvbmcgaW5pdHJkX3NpemUsCgkJICBpbnQgYXV0b19ib290KTsKCnZvaWQgYm9vdF96aW1hZ2Uodm9pZCAqc2V0dXBfYmFzZSk7CgojZW5kaWYK