LyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCiAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCiAqIHRoYXQgbWF5IGFwcGx5OgogKi8KLyoKICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKICogQ29weXJpZ2h0IKkgMjAwMyBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICovCgovKgogKiAgQ01VIGNvbXBhdGFiaWxpdHkgZGVmaW5pdGlvbnMgYW5kIHN0cnVjdHVyZXMuCiAqCiAqICAgIChzaW5jZSB0aGUgVUNEIHBhY2thZ2Ugc3BsaXQgZnJvbSB0aGUgQ01VIG9uZQogKiAgICAgYWJvdXQgOCB5ZWFycyBhZ28sIHRoYXQncyBwcm9iYWJseSBlbm91Z2ggdGltZQogKiAgICAgZm9yIHBlb3BsZSB0byBjb252ZXJ0IGFueSBvdXRzdGFuZGluZyBjb2RlISkKICovCgojaWZuZGVmIE5FVF9TTk1QX0NNVV9DT01QQVRfSAojZGVmaW5lIE5FVF9TTk1QX0NNVV9DT01QQVRfSAoKI2lmZGVmIF9fY3BsdXNwbHVzCmV4dGVybiAgICAgICAgICAiQyIgewojZW5kaWYKCiAgICAvKgogICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICogKgogICAgICogKiBFbnVtZXJhdGlvbnMgYW5kIGRlZmluaXRpb25zCiAgICAgKiAqCiAgICAgKiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCiAgICAgKi8KI2luY2x1ZGUgPG5ldC1zbm1wL2RlZmluaXRpb25zLmg+CiAgICAvKgogICAgICogRnJvbSBwYXJzZS5oIAogICAgICovCiNkZWZpbmUgQUNDRVNTX1JFQURPTkxZCQlNSUJfQUNDRVNTX1JFQURPTkxZCiNkZWZpbmUgQUNDRVNTX1JFQURXUklURQlNSUJfQUNDRVNTX1JFQURXUklURQojZGVmaW5lIEFDQ0VTU19XUklURU9OTFkJTUlCX0FDQ0VTU19XUklURU9OTFkKI2RlZmluZSBBQ0NFU1NfTk9BQ0NFU1MJCU1JQl9BQ0NFU1NfTk9BQ0NFU1MKI2RlZmluZSBBQ0NFU1NfTk9USUZZCQlNSUJfQUNDRVNTX05PVElGWQojZGVmaW5lIEFDQ0VTU19DUkVBVEUJCU1JQl9BQ0NFU1NfQ1JFQVRFCiNkZWZpbmUgU1RBVFVTX01BTkRBVE9SWQlNSUJfU1RBVFVTX01BTkRBVE9SWQojZGVmaW5lIFNUQVRVU19PUFRJT05BTAkJTUlCX1NUQVRVU19PUFRJT05BTAojZGVmaW5lIFNUQVRVU19PQlNPTEVURQkJTUlCX1NUQVRVU19PQlNPTEVURQojZGVmaW5lIFNUQVRVU19ERVBSRUNBVEVECU1JQl9TVEFUVVNfREVQUkVDQVRFRAojZGVmaW5lIFNUQVRVU19DVVJSRU5UCQlNSUJfU1RBVFVTX0NVUlJFTlQKICAgIC8qCiAgICAgKiBGcm9tIHNtbnBfaW1wbC5oIAogICAgICovCiNkZWZpbmUgSU5URUdFUgkgICAgQVNOX0lOVEVHRVIKI2RlZmluZSBTVFJJTkcJICAgIEFTTl9PQ1RFVF9TVFIKI2RlZmluZSBPQkpJRAkgICAgQVNOX09CSkVDVF9JRAojZGVmaW5lIE5VTExPQkoJICAgIEFTTl9OVUxMCiNkZWZpbmUgQklUU1RSSU5HICAgQVNOX0JJVF9TVFIgLyogSElTVE9SSUMgLSBkb24ndCB1c2UgKi8KI2RlZmluZSBJUEFERFJFU1MgICBBU05fSVBBRERSRVNTCiNkZWZpbmUgQ09VTlRFUgkgICAgQVNOX0NPVU5URVIKI2RlZmluZSBHQVVHRQkgICAgQVNOX0dBVUdFCiNkZWZpbmUgVU5TSUdORUQgICAgQVNOX1VOU0lHTkVECiNkZWZpbmUgVElNRVRJQ0tTICAgQVNOX1RJTUVUSUNLUwojZGVmaW5lIEFTTlRfT1BBUVVFIEFTTl9PUEFRVUUKI2RlZmluZSBOU0FQCSAgICBBU05fTlNBUAojZGVmaW5lIENPVU5URVI2NCAgIEFTTl9DT1VOVEVSNjQKI2RlZmluZSBVSU5URUdFUiAgICBBU05fVUlOVEVHRVIKICAgIC8qCiAgICAgKiBGcm9tIHNubXAuaCAKICAgICAqLwojZGVmaW5lIEdFVF9SRVFfTVNHCSAgICBTTk1QX01TR19HRVQKI2RlZmluZSBHRVRORVhUX1JFUV9NU0cJICAgIFNOTVBfTVNHX0dFVE5FWFQKI2RlZmluZSBHRVRfUlNQX01TRwkgICAgU05NUF9NU0dfUkVTUE9OU0UKI2RlZmluZSBTRVRfUkVRX01TRwkgICAgU05NUF9NU0dfU0VUCiNkZWZpbmUgVFJQX1JFUV9NU0cJICAgIFNOTVBfTVNHX1RSQVAKI2RlZmluZSBCVUxLX1JFUV9NU0cJICAgIFNOTVBfTVNHX0dFVEJVTEsKI2RlZmluZSBJTkZPUk1fUkVRX01TRwkgICAgU05NUF9NU0dfSU5GT1JNCiNkZWZpbmUgVFJQMl9SRVFfTVNHCSAgICBTTk1QX01TR19UUkFQMgojZGVmaW5lIFJFUE9SVF9SU1BfTVNHCSAgICBTTk1QX01TR19SRVBPUlQKICAgIC8qCiAgICAgKiBzaW5jZSBDTVUgVjEuNSAKICAgICAqLwojZGVmaW5lIFNOTVBfUERVX0dFVAkgICAgU05NUF9NU0dfR0VUCiNkZWZpbmUgU05NUF9QRFVfR0VUTkVYVCAgICBTTk1QX01TR19HRVRORVhUCiNkZWZpbmUgU05NUF9QRFVfUkVTUE9OU0UgICBTTk1QX01TR19SRVNQT05TRQojZGVmaW5lIFNOTVBfUERVX1NFVCAgICAgICAgU05NUF9NU0dfU0VUCiNkZWZpbmUgU05NUF9QRFVfR0VUQlVMSyAgICBTTk1QX01TR19HRVRCVUxLCiNkZWZpbmUgU05NUF9QRFVfSU5GT1JNICAgICBTTk1QX01TR19JTkZPUk0KI2RlZmluZSBTTk1QX1BEVV9WMlRSQVAgICAgIFNOTVBfTVNHX1RSQVAyCiNkZWZpbmUgU05NUF9QRFVfUkVQT1JUICAgICBTTk1QX01TR19SRVBPUlQKI2RlZmluZSBTTk1QX1RSQVBfQVVUSEVOVElDQVRJT05GQUlMVVJFIFNOTVBfVFJBUF9BVVRIRkFJTAojZGVmaW5lIFNNSV9JTlRFR0VSICAgICBBU05fSU5URUdFUgojZGVmaW5lIFNNSV9TVFJJTkcgICAgICBBU05fT0NURVRfU1RSCiNkZWZpbmUgU01JX09CSklEICAgICAgIEFTTl9PQkpFQ1RfSUQKI2RlZmluZSBTTUlfTlVMTE9CSiAgICAgQVNOX05VTEwKI2RlZmluZSBTTUlfSVBBRERSRVNTICAgQVNOX0lQQUREUkVTUwojZGVmaW5lIFNNSV9DT1VOVEVSMzIJQVNOX0NPVU5URVIKI2RlZmluZSBTTUlfR0FVR0UzMglBU05fR0FVR0UKI2RlZmluZSBTTUlfVU5TSUdORUQzMiAgU01JX0dBVUdFMzIKI2RlZmluZSBTTUlfVElNRVRJQ0tTICAgQVNOX1RJTUVUSUNLUwojZGVmaW5lIFNNSV9PUEFRVUUgICAgICBBU05fT1BBUVVFCiNkZWZpbmUgU01JX0NPVU5URVI2NCAgIEFTTl9DT1VOVEVSNjQKICAgIC8qCiAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgKiAqCiAgICAgKiAqICAgICBGdW5jdGlvbiBkZWNsYXJhdGlvbnMKICAgICAqICogICAgIGFuZCBnbG9iYWwgdmFyaWFibGVzCiAgICAgKiAqCiAgICAgKiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCiAgICAgKi8KZXh0ZXJuIGludCAgICAgIHNubXBfZHVtcF9wYWNrZXQ7ICAgICAgIC8qIGZyb20gc25tcF9hcGkuaCAqLwpleHRlcm4gaW50ICAgICAgcXVpY2tfcHJpbnQ7ICAgIC8qIGZyb20gc25tcF9hcGkuaCAqLwoKI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+ICAgICAvKiBmb3Igc25tcF9wZHUgJiBzbm1wX3Nlc3Npb24gKi8KCmludCAgICAgICAgICAgICBtaWJfVHh0VG9PaWQoY2hhciAqLCBvaWQgKiosIHNpemVfdCAqKTsgLyogZnJvbSBzbm1wLmggKi8KaW50ICAgICAgICAgICAgIG1pYl9PaWRUb1R4dChvaWQgKiwgc2l6ZV90LCBjaGFyICosIHNpemVfdCk7ICAgIC8qIGZyb20gc25tcC5oICovCnVfY2hhciAgICAgICAgICpjbXVfc25tcF9wYXJzZShuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLCBuZXRzbm1wX3BkdSAqcGR1LCB1X2NoYXIgKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsgICAgICAvKiBmcm9tIHNubXAuaCAqLwoKCgoKICAgICAgICAvKgogICAgICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgKiAqCiAgICAgICAgICogKiBNSUItSUkgZGF0YSBzdHJ1Y3R1cmVzCiAgICAgICAgICogKiAgICAoZnJvbSBtaWIuaCkgCiAgICAgICAgICogKgogICAgICAgICAqICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKICAgICAgICAgKi8KCgpzdHJ1Y3QgbWliX3N5c3RlbSB7CiAgICBjaGFyICAgICAgICAgICAgc3lzRGVzY3JbMzJdOyAgICAgICAvKiB0ZXh0dWFsIGRlc2NyaXB0aW9uICovCiAgICB1X2NoYXIgICAgICAgICAgc3lzT2JqZWN0SURbMTZdOyAgICAvKiBPQkpFQ1QgSURFTlRJRklFUiBvZiBzeXN0ZW0gKi8KICAgIHVfY2hhciAgICAgICAgICBPYmpJRExlbjsgICAvKiBsZW5ndGggb2Ygc3lzT2JqZWN0SUQgKi8KICAgIHVfaW50ICAgICAgICAgICBzeXNVcFRpbWU7ICAvKiBVcHRpbWUgaW4gMTAwL3Mgb2YgYSBzZWNvbmQgKi8KfTsKCnN0cnVjdCBtaWJfaW50ZXJmYWNlIHsKICAgIGludCAgICAgICAgICAgICBpZk51bWJlcjsgICAvKiBudW1iZXIgb2YgaW50ZXJmYWNlcyAqLwp9OwoKc3RydWN0IG1pYl9pZkVudHJ5IHsKICAgIGludCAgICAgICAgICAgICBpZkluZGV4OyAgICAvKiBpbmRleCBvZiB0aGlzIGludGVyZmFjZSAgKi8KICAgIGNoYXIgICAgICAgICAgICBpZkRlc2NyWzMyXTsgICAgICAgIC8qIGVuZ2xpc2ggZGVzY3JpcHRpb24gb2YgaW50ZXJmYWNlICovCiAgICBpbnQgICAgICAgICAgICAgaWZUeXBlOyAgICAgLyogbmV0d29yayB0eXBlIG9mIGRldmljZSAgICovCiAgICBpbnQgICAgICAgICAgICAgaWZNdHU7ICAgICAgLyogc2l6ZSBvZiBsYXJnZXN0IHBhY2tldCBpbiBieXRlcyAgKi8KICAgIHVfaW50ICAgICAgICAgICBpZlNwZWVkOyAgICAvKiBiYW5kd2lkdGggaW4gYml0cy9zZWMgICAgKi8KICAgIHVfY2hhciAgICAgICAgICBpZlBoeXNBZGRyZXNzWzExXTsgIC8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KICAgIHVfY2hhciAgICAgICAgICBQaHlzQWRkckxlbjsgICAgICAgIC8qIGxlbmd0aCBvZiBwaHlzQWRkciAqLwogICAgaW50ICAgICAgICAgICAgIGlmQWRtaW5TdGF0dXM7ICAgICAgLyogZGVzaXJlZCBzdGF0ZSBvZiBpbnRlcmZhY2UgKi8KICAgIGludCAgICAgICAgICAgICBpZk9wZXJTdGF0dXM7ICAgICAgIC8qIGN1cnJlbnQgb3BlcmF0aW9uYWwgc3RhdHVzICovCiAgICB1X2ludCAgICAgICAgICAgaWZMYXN0Q2hhbmdlOyAgICAgICAvKiB2YWx1ZSBvZiBzeXNVcFRpbWUgd2hlbiBjdXJyZW50IHN0YXRlIGVudGVyZWQgKi8KICAgIHVfaW50ICAgICAgICAgICBpZkluT2N0ZXRzOyAvKiBudW1iZXIgb2Ygb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwogICAgdV9pbnQgICAgICAgICAgIGlmSW5VY2FzdFBrdHM7ICAgICAgLyogbnVtYmVyIG9mIHVuaWNhc3QgcGFja2V0cyBkZWxpdmVyZWQgKi8KICAgIHVfaW50ICAgICAgICAgICBpZkluTlVjYXN0UGt0czsgICAgIC8qIG51bWJlciBvZiBicm9hZGNhc3RzIG9yIG11bHRpY2FzdHMgKi8KICAgIHVfaW50ICAgICAgICAgICBpZkluRGlzY2FyZHM7ICAgICAgIC8qIG51bWJlciBvZiBwYWNrZXRzIGRpc2NhcmRlZCB3aXRoIG5vIGVycm9yICovCiAgICB1X2ludCAgICAgICAgICAgaWZJbkVycm9yczsgLyogbnVtYmVyIG9mIHBhY2tldHMgY29udGFpbmluZyBlcnJvcnMgKi8KICAgIHVfaW50ICAgICAgICAgICBpZkluVW5rbm93blByb3RvczsgIC8qIG51bWJlciBvZiBwYWNrZXRzIHdpdGggdW5rbm93biBwcm90b2NvbCAqLwogICAgdV9pbnQgICAgICAgICAgIGlmT3V0T2N0ZXRzOyAgICAgICAgLyogbnVtYmVyIG9mIG9jdGV0cyB0cmFuc21pdHRlZCAqLwogICAgdV9pbnQgICAgICAgICAgIGlmT3V0VWNhc3RQa3RzOyAgICAgLyogbnVtYmVyIG9mIHVuaWNhc3QgcGFja2V0cyBzZW50ICovCiAgICB1X2ludCAgICAgICAgICAgaWZPdXROVWNhc3RQa3RzOyAgICAvKiBudW1iZXIgb2YgYnJvYWRjYXN0IG9yIG11bHRpY2FzdCBwa3RzICovCiAgICB1X2ludCAgICAgICAgICAgaWZPdXREaXNjYXJkczsgICAgICAvKiBudW1iZXIgb2YgcGFja2V0cyBkaXNjYXJkZWQgd2l0aCBubyBlcnJvciAqLwogICAgdV9pbnQgICAgICAgICAgIGlmT3V0RXJyb3JzOyAgICAgICAgLyogbnVtYmVyIG9mIHBrdHMgZGlzY2FyZGVkIHdpdGggYW4gZXJyb3IgKi8KICAgIHVfaW50ICAgICAgICAgICBpZk91dFFMZW47ICAvKiBudW1iZXIgb2YgcGFja2V0cyBpbiBvdXRwdXQgcXVldWUgKi8KfTsKCnN0cnVjdCBtaWJfYXRFbnRyeSB7CiAgICBpbnQgICAgICAgICAgICAgYXRJZkluZGV4OyAgLyogaW50ZXJmYWNlIG9uIHdoaWNoIHRoaXMgZW50cnkgbWFwcyAqLwogICAgdV9jaGFyICAgICAgICAgIGF0UGh5c0FkZHJlc3NbMTFdOyAgLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBkZXN0aW5hdGlvbiAqLwogICAgdV9jaGFyICAgICAgICAgIFBoeXNBZGRyZXNzTGVuOyAgICAgLyogbGVuZ3RoIG9mIGF0UGh5c0FkZHJlc3MgKi8KICAgIHVfaW50ICAgICAgICAgICBhdE5ldEFkZHJlc3M7ICAgICAgIC8qIElQIGFkZHJlc3Mgb2YgcGh5c2ljYWwgYWRkcmVzcyAqLwp9OwoKc3RydWN0IG1pYl9pcCB7CiAgICBpbnQgICAgICAgICAgICAgaXBGb3J3YXJkaW5nOyAgICAgICAvKiAxIGlmIGdhdGV3YXksIDIgaWYgaG9zdCAqLwogICAgaW50ICAgICAgICAgICAgIGlwRGVmYXVsdFRUTDsgICAgICAgLyogZGVmYXVsdCBUVEwgZm9yIHBrdHMgb3JpZ2luYXRpbmcgaGVyZSAqLwogICAgdV9pbnQgICAgICAgICAgIGlwSW5SZWNlaXZlczsgICAgICAgLyogbm8uIG9mIElQIHBhY2tldHMgcmVjZWl2ZWQgZnJvbSBpbnRlcmZhY2VzICovCiAgICB1X2ludCAgICAgICAgICAgaXBJbkhkckVycm9yczsgICAgICAvKiBudW1iZXIgb2YgcGt0cyBkaXNjYXJkZWQgZHVlIHRvIGhlYWRlciBlcnJvcnMgKi8KICAgIHVfaW50ICAgICAgICAgICBpcEluQWRkckVycm9yczsgICAgIC8qIG5vLiBvZiBwa3RzIGRpc2NhcmRlZCBkdWUgdG8gYmFkIGFkZHJlc3MgKi8KICAgIHVfaW50ICAgICAgICAgICBpcEZvcndEYXRhZ3JhbXM7ICAgIC8qIG51bWJlciBwZiBwa3RzIGZvcndhcmRlZCB0aHJvdWdoIHRoaXMgZW50aXR5ICovCiAgICB1X2ludCAgICAgICAgICAgaXBJblVua25vd25Qcm90b3M7ICAvKiBuby4gb2YgbG9jYWwtYWRkcmVzc2VkIHBrdHMgdy91bmtub3duIHByb3RvICovCiAgICB1X2ludCAgICAgICAgICAgaXBJbkRpc2NhcmRzOyAgICAgICAvKiBudW1iZXIgb2YgZXJyb3ItZnJlZSBwYWNrZXRzIGRpc2NhcmRlZCAqLwogICAgdV9pbnQgICAgICAgICAgIGlwSW5EZWxpdmVyczsgICAgICAgLyogbnVtYmVyIG9mIGRhdGFncmFtcyBkZWxpdmVyZWQgdG8gdXBwZXIgbGV2ZWwgKi8KICAgIHVfaW50ICAgICAgICAgICBpcE91dFJlcXVlc3RzOyAgICAgIC8qIG51bWJlciBvZiBJUCBkYXRhZ3JhbXMgb3JpZ2luYXRpbmcgbG9jYWxseSAqLwogICAgdV9pbnQgICAgICAgICAgIGlwT3V0RGlzY2FyZHM7ICAgICAgLyogbnVtYmVyIG9mIGVycm9yLWZyZWUgb3V0cHV0IElQIHBrdHMgZGlzY2FyZGVkICovCiAgICB1X2ludCAgICAgICAgICAgaXBPdXROb1JvdXRlczsgICAgICAvKiBudW1iZXIgb2YgSVAgcGt0cyBkaXNjYXJkZWQgZHVlIHRvIG5vIHJvdXRlICovCiAgICBpbnQgICAgICAgICAgICAgaXBSZWFzbVRpbWVvdXQ7ICAgICAvKiBzZWNvbmRzIGZyYWdtZW50IGlzIGhlbGQgYXdhaXRpbmcgcmVhc3NlbWJseSAqLwogICAgdV9pbnQgICAgICAgICAgIGlwUmVhc21SZXFkczsgICAgICAgLyogbm8uIG9mIGZyYWdtZW50cyBuZWVkaW5nIHJlYXNzZW1ibHkgKGhlcmUpICovCiAgICB1X2ludCAgICAgICAgICAgaXBSZWFzbU9LczsgLyogbnVtYmVyIG9mIGZyYWdtZW50cyByZWFzc2VtYmxlZCAqLwogICAgdV9pbnQgICAgICAgICAgIGlwUmVhc21GYWlsczsgICAgICAgLyogbnVtYmVyIG9mIGZhaWx1cmVzIGluIElQIHJlYXNzZW1ibHkgKi8KICAgIHVfaW50ICAgICAgICAgICBpcEZyYWdPS3M7ICAvKiBudW1iZXIgb2YgZGF0YWdyYW1zIGZyYWdtZW50ZWQgaGVyZSAqLwogICAgdV9pbnQgICAgICAgICAgIGlwRnJhZ0ZhaWxzOyAgICAgICAgLyogbm8uIHBrdHMgdW5hYmxlIHRvIGJlIGZyYWdtZW50ZWQgaGVyZSAqLwogICAgdV9pbnQgICAgICAgICAgIGlwRnJhZ0NyZWF0ZXM7ICAgICAgLyogbnVtYmVyIG9mIElQIGZyYWdtZW50cyBjcmVhdGVkIGhlcmUgKi8KfTsKCnN0cnVjdCBtaWJfaXBBZGRyRW50cnkgewogICAgdV9pbnQgICAgICAgICAgIGlwQWRFbnRBZGRyOyAgICAgICAgLyogSVAgYWRkcmVzcyBvZiB0aGlzIGVudHJ5ICovCiAgICBpbnQgICAgICAgICAgICAgaXBBZEVudElmSW5kZXg7ICAgICAvKiBJRiBmb3IgdGhpcyBlbnRyeSAqLwogICAgdV9pbnQgICAgICAgICAgIGlwQWRFbnROZXRNYXNrOyAgICAgLyogc3VibmV0IG1hc2sgb2YgdGhpcyBlbnRyeSAqLwogICAgaW50ICAgICAgICAgICAgIGlwQWRFbnRCY2FzdEFkZHI7ICAgLyogcmVhZCB0aGUgTUlCIGZvciB0aGlzIG9uZSAqLwogICAgaW50IAkgICAgaXBBZEVudFJlYXNtTWF4U2l6ZTsKCQkvKiBtYXggc2l6ZSBmb3IgZGcgcmVhc3NlbWJseSAgIHtpcEFkZHJFbnRyeSA1fSAqLwp9OwoKc3RydWN0IG1pYl9pcFJvdXRlRW50cnkgewogICAgdV9pbnQgICAgICAgICAgIGlwUm91dGVEZXN0OyAgICAgICAgLyogZGVzdGluYXRpb24gSVAgYWRkciBmb3IgdGhpcyByb3V0ZSAqLwogICAgaW50ICAgICAgICAgICAgIGlwUm91dGVJZkluZGV4OyAgICAgLyogaW5kZXggb2YgbG9jYWwgSUYgZm9yIHRoaXMgcm91dGUgKi8KICAgIGludCAgICAgICAgICAgICBpcFJvdXRlTWV0cmljMTsgICAgIC8qIFByaW1hcnkgcm91dGluZyBtZXRyaWMgKi8KICAgIGludCAgICAgICAgICAgICBpcFJvdXRlTWV0cmljMjsgICAgIC8qIEFsdGVybmF0ZSByb3V0aW5nIG1ldHJpYyAqLwogICAgaW50ICAgICAgICAgICAgIGlwUm91dGVNZXRyaWMzOyAgICAgLyogQWx0ZXJuYXRlIHJvdXRpbmcgbWV0cmljICovCiAgICBpbnQgICAgICAgICAgICAgaXBSb3V0ZU1ldHJpYzQ7ICAgICAvKiBBbHRlcm5hdGUgcm91dGluZyBtZXRyaWMgKi8KICAgIHVfaW50ICAgICAgICAgICBpcFJvdXRlTmV4dEhvcDsgICAgIC8qIElQIGFkZHIgb2YgbmV4dCBob3AgKi8KICAgIGludCAgICAgICAgICAgICBpcFJvdXRlVHlwZTsgICAgICAgIC8qIFR5cGUgb2YgdGhpcyByb3V0ZSAqLwogICAgaW50ICAgICAgICAgICAgIGlwUm91dGVQcm90bzsgICAgICAgLyogSG93IHRoaXMgcm91dGUgd2FzIGxlYXJuZWQgKi8KICAgIGludCAgICAgICAgICAgICBpcFJvdXRlQWdlOyAvKiBOby4gb2Ygc2Vjb25kcyBzaW5jZSB1cGRhdGluZyB0aGlzIHJvdXRlICovCn07CgpzdHJ1Y3QgbWliX2ljbXAgewogICAgdV9pbnQgICAgICAgICAgIGljbXBJbk1zZ3M7IC8qIFRvdGFsIG9mIElDTVAgbXNncyByZWNlaXZlZCAqLwogICAgdV9pbnQgICAgICAgICAgIGljbXBJbkVycm9yczsgICAgICAgLyogVG90YWwgb2YgSUNNUCBtc2dzIHJlY2VpdmVkIHdpdGggZXJyb3JzICovCiAgICB1X2ludCAgICAgICAgICAgaWNtcEluRGVzdFVucmVhY2hzOwogICAgdV9pbnQgICAgICAgICAgIGljbXBJblRpbWVFeGNkczsKICAgIHVfaW50ICAgICAgICAgICBpY21wSW5QYXJtUHJvYnM7CiAgICB1X2ludCAgICAgICAgICAgaWNtcEluU3JjUXVlbmNoczsKICAgIHVfaW50ICAgICAgICAgICBpY21wSW5SZWRpcmVjdHM7CiAgICB1X2ludCAgICAgICAgICAgaWNtcEluRWNob3M7CiAgICB1X2ludCAgICAgICAgICAgaWNtcEluRWNob1JlcHM7CiAgICB1X2ludCAgICAgICAgICAgaWNtcEluVGltZXN0YW1wczsKICAgIHVfaW50ICAgICAgICAgICBpY21wSW5UaW1lc3RhbXBSZXBzOwogICAgdV9pbnQgICAgICAgICAgIGljbXBJbkFkZHJNYXNrczsKICAgIHVfaW50ICAgICAgICAgICBpY21wSW5BZGRyTWFza1JlcHM7CiAgICB1X2ludCAgICAgICAgICAgaWNtcE91dE1zZ3M7CiAgICB1X2ludCAgICAgICAgICAgaWNtcE91dEVycm9yczsKICAgIHVfaW50ICAgICAgICAgICBpY21wT3V0RGVzdFVucmVhY2hzOwogICAgdV9pbnQgICAgICAgICAgIGljbXBPdXRUaW1lRXhjZHM7CiAgICB1X2ludCAgICAgICAgICAgaWNtcE91dFBhcm1Qcm9iczsKICAgIHVfaW50ICAgICAgICAgICBpY21wT3V0U3JjUXVlbmNoczsKICAgIHVfaW50ICAgICAgICAgICBpY21wT3V0UmVkaXJlY3RzOwogICAgdV9pbnQgICAgICAgICAgIGljbXBPdXRFY2hvczsKICAgIHVfaW50ICAgICAgICAgICBpY21wT3V0RWNob1JlcHM7CiAgICB1X2ludCAgICAgICAgICAgaWNtcE91dFRpbWVzdGFtcHM7CiAgICB1X2ludCAgICAgICAgICAgaWNtcE91dFRpbWVzdGFtcFJlcHM7CiAgICB1X2ludCAgICAgICAgICAgaWNtcE91dEFkZHJNYXNrczsKICAgIHVfaW50ICAgICAgICAgICBpY21wT3V0QWRkck1hc2tSZXBzOwp9OwoKc3RydWN0IG1pYl90Y3AgewogICAgaW50ICAgICAgICAgICAgIHRjcFJ0b0FsZ29yaXRobTsgICAgLyogcmV0cmFuc21pc3Npb24gdGltZW91dCBhbGdvcml0aG0gKi8KICAgIGludCAgICAgICAgICAgICB0Y3BSdG9NaW47ICAvKiBtaW5pbXVtIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgKG1TKSAqLwogICAgaW50ICAgICAgICAgICAgIHRjcFJ0b01heDsgIC8qIG1heGltdW0gcmV0cmFuc21pc3Npb24gdGltZW91dCAobVMpICovCiAgICBpbnQgICAgICAgICAgICAgdGNwTWF4Q29ubjsgLyogbWF4aW11bSB0Y3AgY29ubmVjdGlvbnMgcG9zc2libGUgKi8KICAgIHVfaW50ICAgICAgICAgICB0Y3BBY3RpdmVPcGVuczsgICAgIC8qIG51bWJlciBvZiBTWU4tU0VOVCAtPiBDTE9TRUQgdHJhbnNpdGlvbnMgKi8KICAgIHVfaW50ICAgICAgICAgICB0Y3BQYXNzaXZlT3BlbnM7ICAgIC8qIG51bWJlciBvZiBTWU4tUkNWRCAtPiBMSVNURU4gdHJhbnNpdGlvbnMgKi8KICAgIHVfaW50ICAgICAgICAgICB0Y3BBdHRlbXB0RmFpbHM7ICAgIC8qKFNZTi1TRU5ULFNZTi1SQ1ZEKS0+Q0xPU0VEIG9yIFNZTi1SQ1ZELT5MSVNURU4gKi8KICAgIHVfaW50ICAgICAgICAgICB0Y3BFc3RhYlJlc2V0czsgICAgIC8qIChFU1RBQkxJU0hFRCxDTE9TRS1XQUlUKSAtPiBDTE9TRUQgKi8KICAgIHVfaW50ICAgICAgICAgICB0Y3BDdXJyRXN0YWI7ICAgICAgIC8qIG51bWJlciBpbiBFU1RBQkxJU0hFRCBvciBDTE9TRS1XQUlUIHN0YXRlICovCiAgICB1X2ludCAgICAgICAgICAgdGNwSW5TZWdzOyAgLyogbnVtYmVyIG9mIHNlZ21lbnRzIHJlY2VpdmVkICovCiAgICB1X2ludCAgICAgICAgICAgdGNwT3V0U2VnczsgLyogbnVtYmVyIG9mIHNlZ21lbnRzIHNlbnQgKi8KICAgIHVfaW50ICAgICAgICAgICB0Y3BSZXRyYW5zU2VnczsgICAgIC8qIG51bWJlciBvZiByZXRyYW5zbWl0dGVkIHNlZ21lbnRzICovCn07CgpzdHJ1Y3QgbWliX3RjcENvbm5FbnRyeSB7CiAgICBpbnQgICAgICAgICAgICAgdGNwQ29ublN0YXRlOyAgICAgICAvKiBTdGF0ZSBvZiB0aGlzIGNvbm5lY3Rpb24gKi8KICAgIHVfaW50ICAgICAgICAgICB0Y3BDb25uTG9jYWxBZGRyZXNzOyAgICAgICAgLyogbG9jYWwgSVAgYWRkcmVzcyBmb3IgdGhpcyBjb25uZWN0aW9uICovCiAgICBpbnQgICAgICAgICAgICAgdGNwQ29ubkxvY2FsUG9ydDsgICAvKiBsb2NhbCBwb3J0IGZvciB0aGlzIGNvbm5lY3Rpb24gKi8KICAgIHVfaW50ICAgICAgICAgICB0Y3BDb25uUmVtQWRkcmVzczsgIC8qIHJlbW90ZSBJUCBhZGRyZXNzIGZvciB0aGlzIGNvbm5lY3Rpb24gKi8KICAgIGludCAgICAgICAgICAgICB0Y3BDb25uUmVtUG9ydDsgICAgIC8qIHJlbW90ZSBwb3J0IGZvciB0aGlzIGNvbm5lY3Rpb24gKi8KfTsKCnN0cnVjdCBtaWJfdWRwIHsKICAgIHVfaW50ICAgICAgICAgICB1ZHBJbkRhdGFncmFtczsgICAgIC8qIE5vLiBvZiBVRFAgZGF0YWdyYW1zIGRlbGl2ZXJlZCB0byB1c2VycyAqLwogICAgdV9pbnQgICAgICAgICAgIHVkcE5vUG9ydHM7IC8qIE5vLiBvZiBVRFAgZGF0YWdyYW1zIHRvIHBvcnQgd2l0aCBubyBsaXN0ZW5lciAqLwogICAgdV9pbnQgICAgICAgICAgIHVkcEluRXJyb3JzOyAgICAgICAgLyogTm8uIG9mIFVEUCBkYXRhZ3JhbXMgdW5hYmxlIHRvIGJlIGRlbGl2ZXJlZCAqLwogICAgdV9pbnQgICAgICAgICAgIHVkcE91dERhdGFncmFtczsgICAgLyogTm8uIG9mIFVEUCBkYXRhZ3JhbXMgc2VudCBmcm9tIHRoaXMgZW50aXR5ICovCn07CgpzdHJ1Y3QgbWliX2VncCB7CiAgICB1X2ludCAgICAgICAgICAgZWdwSW5Nc2dzOyAgLyogTm8uIG9mIEVHUCBtc2dzIHJlY2VpdmVkIHdpdGhvdXQgZXJyb3IgKi8KICAgIHVfaW50ICAgICAgICAgICBlZ3BJbkVycm9yczsgICAgICAgIC8qIE5vLiBvZiBFR1AgbXNncyByZWNlaXZlZCB3aXRoIGVycm9yICovCiAgICB1X2ludCAgICAgICAgICAgZWdwT3V0TXNnczsgLyogTm8uIG9mIEVHUCBtc2dzIHNlbnQgKi8KICAgIHVfaW50ICAgICAgICAgICBlZ3BPdXRFcnJvcnM7ICAgICAgIC8qIE5vLiBvZiAob3V0Z29pbmcpIEVHUCBtc2dzIGRyb3BwZWQgZHVlIHRvIGVycm9yICovCn07CgpzdHJ1Y3QgbWliX2VncE5laWdoRW50cnkgewogICAgaW50ICAgICAgICAgICAgIGVncE5laWdoU3RhdGU7ICAgICAgLyogbG9jYWwgRUdQIHN0YXRlIHdpdGggdGhpcyBlbnRyeSdzIG5laWdoYm9yICovCiAgICB1X2ludCAgICAgICAgICAgZWdwTmVpZ2hBZGRyOyAgICAgICAvKiBJUCBhZGRyZXNzIG9mIHRoaXMgZW50cnkncyBuZWlnaGJvciAqLwp9OwoKI2lmZGVmIF9fY3BsdXNwbHVzCn0KI2VuZGlmCiNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUX1NOTVBfQ01VX0NPTVBBVF9IICovCg==