|
||||||||||
|
New in This Group PHP uploadprogress12/5/2009 7:24:55 PM svn: /pecl/svn/trunk/ svn.c11/20/2009 7:20:54 AM svn: /pecl/rar/trunk/ rar.cpp11/19/2009 5:42:39 AM svn: /pecl/rar/trunk/ php_rar.h11/18/2009 9:22:00 PM svn: /pecl/rar/trunk/ config.m4 config.w32 php_rar.h rar.cpp tests/001.phpt tests/002.phpt tests/003.phpt11/18/2009 9:12:27 PM svn: /pecl/rar/trunk/unrar/ dll.cpp dll.hpp extract.cpp extract.hpp extractchunk.cpp os.hpp rdwrfn.cpp rdwrfn.hpp unpack.cpp unpack.hpp unpack15.cpp unpack20.cpp version.hpp11/18/2009 5:46:10 PM svn: /pecl/rar/trunk/ config.m411/18/2009 2:56:13 PM svn: /pecl/rar/trunk/ config.m4 rar.cpp11/18/2009 2:23:48 PM svn: /pecl/rar/trunk/ config.m4 config.w32 php_rar.h unrar/arccmt.cpp unrar/archive.cpp unrar/archive.hpp unrar/arcread.cpp unrar/array.hpp unrar/beosea.cpp unrar/cmddata.cpp unrar/cmddata.hpp unrar/c11/17/2009 7:26:03 PM svn: /pecl/rar/trunk/ config.w32 rar.cpp11/17/2009 4:12:40 PM |
svn: /pecl/dio/trunk/ config.m4 config.w32 dio.c dio_common.c dio_stream_wrappers.c package.xml php_dio.h php_dio_common.h php_dio_stream_wrappers.h tests/001.phpt tests/dio_raw_stream_001.phpt tests/
|
|||||||||
| Group: php.pecl.cvs |
Subscribe
|
Posted:11/29/2009 9:58:12 PM | Replies:0 | Views:24 | Items(0) |
|
--345a6ba7f55918e8e9a66e48b8d17a270406d57e
Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit cyberspice Sun, 29 Nov 2009 21:58:12 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=291457 Log: Initial check in of the stream wrapper code. The new code adds new stream protocols 'dio.raw' and 'dio.serial' together with functions to open streams (rather than using fopen) called 'dio_raw' and 'dio_serial'. The Win32 code is currently untested. Files modified by this commit: config.w32, config.m4, dio.c, php_dio.h, package.xml, tests/001.phpt Files added by this commit: dio_common.c, dio_stream_wrappers.c, php_dio_common.h, php_dio_stream_wrappers.h, tests/dio_raw_stream_001.phpt, tests/dio_raw_stream_002.phpt, tests/dio_raw_stream_003.phpt, tests/dio_raw_stream_004.phpt, tests/dio_raw_stream_005.phpt, tests/dio_raw_stream_006.phpt, tests/dio_raw_stream_007.phpt Changed paths: U pecl/dio/trunk/config.m4 U pecl/dio/trunk/config.w32 U pecl/dio/trunk/dio.c A pecl/dio/trunk/dio_common.c A pecl/dio/trunk/dio_stream_wrappers.c U pecl/dio/trunk/package.xml U pecl/dio/trunk/php_dio.h A pecl/dio/trunk/php_dio_common.h A pecl/dio/trunk/php_dio_stream_wrappers.h U pecl/dio/trunk/tests/001.phpt A pecl/dio/trunk/tests/dio_raw_stream_001.phpt A pecl/dio/trunk/tests/dio_raw_stream_002.phpt A pecl/dio/trunk/tests/dio_raw_stream_003.phpt A pecl/dio/trunk/tests/dio_raw_stream_004.phpt A pecl/dio/trunk/tests/dio_raw_stream_005.phpt A pecl/dio/trunk/tests/dio_raw_stream_006.phpt A pecl/dio/trunk/tests/dio_raw_stream_007.phpt --345a6ba7f55918e8e9a66e48b8d17a270406d57e Content-Type: text/x-diff; charset="utf-8" Content-Disposition: attachment; filename="svn-diffs-291457.txt" Content-Transfer-Encoding: base64 TW9kaWZpZWQ6IHBlY2wvZGlvL3RydW5rL2NvbmZpZy5tNAo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwZWNsL2Rpby90cnVu ay9jb25maWcubTQJMjAwOS0xMS0yOSAyMTowNDoxMiBVVEMgKHJldiAyOTE0NTYpCisrKyBwZWNsL2Rp by90cnVuay9jb25maWcubTQJMjAwOS0xMS0yOSAyMTo1ODoxMiBVVEMgKHJldiAyOTE0NTcpCkBAIC02 LDUgKzYsNSBAQAogWyAgLS1lbmFibGUtZGlvICAgICAgICAgICAgRW5hYmxlIGRpcmVjdCBJL08gc3Vw cG9ydF0pCgogaWYgdGVzdCAiJFBIUF9ESU8iICE9ICJubyI7IHRoZW4KLSAgUEhQX05FV19FWFRFTlNJ T04oZGlvLCBkaW8uYywgJGV4dF9zaGFyZWQpCisgIFBIUF9ORVdfRVhURU5TSU9OKGRpbywgZGlvLmMg ZGlvX3N0cmVhbV93cmFwcGVycy5jIGRpb19jb21tb24uYywgJGV4dF9zaGFyZWQpCiBmaQoKTW9kaWZp ZWQ6IHBlY2wvZGlvL3RydW5rL2NvbmZpZy53MzIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGVjbC9kaW8vdHJ1bmsvY29u ZmlnLnczMgkyMDA5LTExLTI5IDIxOjA0OjEyIFVUQyAocmV2IDI5MTQ1NikKKysrIHBlY2wvZGlvL3Ry dW5rL2NvbmZpZy53MzIJMjAwOS0xMS0yOSAyMTo1ODoxMiBVVEMgKHJldiAyOTE0NTcpCkBAIC00LDYg KzQsNiBAQAogQVJHX0VOQUJMRSgiZGlvIiwgIkVuYWJsZSB0aGUgZGlyZWN0IEkvTyBzdXBwb3J0Iiwg Im5vIik7CgogaWYgKFBIUF9ESU8gIT0gIm5vIikgewotCUVYVEVOU0lPTigiZGlvIiwgImRpby5jIik7 CisJRVhURU5TSU9OKCJkaW8iLCAiZGlvLmMgZGlvX2xlZ2FjeS5jIGRpb19zdHJlYW1fd3JhcHBlcnMu YyIpOwogCUFDX0RFRklORSgnSEFWRV9ESU8nLCAxLCAnZGlvIHN1cHBvcnQnKTsKIH0KCk1vZGlmaWVk OiBwZWNsL2Rpby90cnVuay9kaW8uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwZWNsL2Rpby90cnVuay9kaW8uYwkyMDA5 LTExLTI5IDIxOjA0OjEyIFVUQyAocmV2IDI5MTQ1NikKKysrIHBlY2wvZGlvL3RydW5rL2Rpby5jCTIw MDktMTEtMjkgMjE6NTg6MTIgVVRDIChyZXYgMjkxNDU3KQpAQCAtMiw3ICsyLDcgQEAKICAgICstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKwogICAgfCBQSFAgVmVyc2lvbiA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgQ29weXJpZ2h0IChj KSAxOTk3LTIwMDQgVGhlIFBIUCBHcm91cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAor ICAgfCBDb3B5cmlnaHQgKGMpIDE5OTctMjAwOSBUaGUgUEhQIEdyb3VwICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgVGhpcyBzb3VyY2UgZmlsZSBpcyBz dWJqZWN0IHRvIHZlcnNpb24gMy4wIG9mIHRoZSBQSFAgbGljZW5zZSwgICAgICAgfAogICAgfCB0aGF0 IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRSwgYW5kIGlzICAg ICAgICB8CkBAIC0xMyw2ICsxMyw3IEBACiAgICB8IGxpY2Vuc2VAcGhwLm5ldCBzbyB3ZSBjYW4gbWFp bCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LiAgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwog ICAgfCBBdXRob3I6IFN0ZXJsaW5nIEh1Z2hlcyA8c3RlcmxpbmdAcGhwLm5ldD4gICAgICAgICAgICAg ICAgICAgICAgICAgICB8CisgICB8IEF1dGhvcjogTWVsYW5pZSBSaGlhbm5hIExld2lzIDxjeWJlcnNw aWNlQHBocC5uZXQ+ICAgICAgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICovCgpAQCAt MjQsNiArMjUsNyBAQAogI2luY2x1ZGUgInBocF9pbmkuaCIKICNpbmNsdWRlICJleHQvc3RhbmRhcmQv aW5mby5oIgogI2luY2x1ZGUgInBocF9kaW8uaCIKKyNpbmNsdWRlICJwaHBfZGlvX3N0cmVhbV93cmFw cGVycy5oIgoKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgpAQCAt NDYsNDUgKzQ4LDI5IEBACiAjIGVuZGlmIC8qIENORVdfUlRTQ1RTICovCiAjZW5kaWYgLyogIUNSVFND VFMgKi8KCisvKgorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8ICAgICAgICAgICAgICAgICAgICAgICBERVBS RUNBVEVEIEZVTkNUSU9OQUxJVFkgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t KworICAgfCBUaGUgZnVuY3Rpb25zIGJlbG93IGFyZSBmcm9tIHRoZSBlYXJsaWVyIERJTyB2ZXJzaW9u cy4gIFRoZXkgd2lsbCAgICB8CisgICB8IGNvbnRpbnVlIHRvIGJlIG1haW50YWluZWQgYnV0IG5vdCBl eHRlbmRlZC4gIEl0IGlzIHRob3JvdWdobHkgICAgICAgIHwKKyAgIHwgcmVjb21tZW5kZWQgdGhhdCB5 b3Ugc2hvdWxkIHVzZSBlaXRoZXIgdGhlIHN0cmVhbSB3cmFwcGVycyBvciB0aGUgICAgfAorICAgfCBE SU8gY2xhc3NlcyBpbiBuZXcgY29kZS4gLSBNZWxhbmllICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqLworCiAjZGVmaW5lIGxlX2ZkX25hbWUgIkRpcmVj dCBJL08gRmlsZSBEZXNjcmlwdG9yIgogc3RhdGljIGludCBsZV9mZDsKCi1mdW5jdGlvbl9lbnRyeSBk aW9fZnVuY3Rpb25zW10gPSB7Ci0JUEhQX0ZFKGRpb19vcGVuLCAgICAgIE5VTEwpCi0jaWZuZGVmIFBI UF9XSU4zMgotCVBIUF9GRShkaW9fdHJ1bmNhdGUsICBOVUxMKQotI2VuZGlmCi0JUEhQX0ZFKGRpb19z dGF0LCAgICAgIE5VTEwpCi0JUEhQX0ZFKGRpb19zZWVrLCAgICAgIE5VTEwpCi0jaWZuZGVmIFBIUF9X SU4zMgotCVBIUF9GRShkaW9fZmNudGwsICAgICBOVUxMKQotI2VuZGlmCi0JUEhQX0ZFKGRpb19yZWFk LCAgICAgIE5VTEwpCi0JUEhQX0ZFKGRpb193cml0ZSwgICAgIE5VTEwpCi0JUEhQX0ZFKGRpb19jbG9z ZSwgICAgIE5VTEwpCi0jaWZuZGVmIFBIUF9XSU4zMgotCVBIUF9GRShkaW9fdGNzZXRhdHRyLCAgICAg TlVMTCkKLSNlbmRpZgotCXtOVUxMLCBOVUxMLCBOVUxMfQotfTsKK3N0YXRpYyBpbnQgbmV3X3BocF9m ZChwaHBfZmRfdCAqKmYsIGludCBmZCkKK3sKKwlpZiAoISgqZiA9IG1hbGxvYyhzaXplb2YocGhwX2Zk X3QpKSkpIHsKKwkJcmV0dXJuIDA7CisJfQorCSgqZiktPmZkID0gZmQ7CisJcmV0dXJuIDE7Cit9Cgot emVuZF9tb2R1bGVfZW50cnkgZGlvX21vZHVsZV9lbnRyeSA9IHsKLQlTVEFOREFSRF9NT0RVTEVfSEVB REVSLAotCSJkaW8iLAotCWRpb19mdW5jdGlvbnMsCi0JUEhQX01JTklUKGRpbyksCi0JTlVMTCwKLQlO VUxMLAotCU5VTEwsCi0JUEhQX01JTkZPKGRpbyksCi0JUEhQX0RJT19WRVJTSU9OLAotCVNUQU5EQVJE X01PRFVMRV9QUk9QRVJUSUVTCi19OwotCi0jaWZkZWYgQ09NUElMRV9ETF9ESU8KLVpFTkRfR0VUX01P RFVMRShkaW8pCi0jZW5kaWYKLQogc3RhdGljIHZvaWQgX2Rpb19jbG9zZV9mZCh6ZW5kX3JzcmNfbGlz dF9lbnRyeSAqcnNyYyBUU1JNTFNfREMpCiB7CiAJcGhwX2ZkX3QgKmYgPSAocGhwX2ZkX3QgKikgcnNy Yy0+cHRyOwpAQCAtOTQsODIgKzgwLDYgQEAKIAl9CiB9CgotI2RlZmluZSBSRElPQyhjKSBSRUdJU1RF Ul9MT05HX0NPTlNUQU5UKCNjLCBjLCBDT05TVF9DUyB8IENPTlNUX1BFUlNJU1RFTlQpCi0jZGVmaW5l IERJT19VTkRFRl9DT05TVCAtMQotCi1QSFBfTUlOSVRfRlVOQ1RJT04oZGlvKQotewotCWxlX2ZkID0g emVuZF9yZWdpc3Rlcl9saXN0X2Rlc3RydWN0b3JzX2V4KF9kaW9fY2xvc2VfZmQsIE5VTEwsIGxlX2Zk X25hbWUsIG1vZHVsZV9udW1iZXIpOwotCi0JUkRJT0MoT19SRE9OTFkpOwotCVJESU9DKE9fV1JPTkxZ KTsKLQlSRElPQyhPX1JEV1IpOwotCVJESU9DKE9fQ1JFQVQpOwotCVJESU9DKE9fRVhDTCk7Ci0JUkRJ T0MoT19UUlVOQyk7Ci0JUkRJT0MoT19BUFBFTkQpOwotI2lmZGVmIE9fTk9OQkxPQ0sKLQlSRElPQyhP X05PTkJMT0NLKTsKLSNlbmRpZgotI2lmZGVmIE9fTkRFTEFZCi0JUkRJT0MoT19OREVMQVkpOwotI2Vu ZGlmCi0jaWZkZWYgT19TWU5DCi0JUkRJT0MoT19TWU5DKTsKLSNlbmRpZgotI2lmZGVmIE9fQVNZTkMK LQlSRElPQyhPX0FTWU5DKTsKLSNlbmRpZgotI2lmZGVmIE9fTk9DVFRZCi0JUkRJT0MoT19OT0NUVFkp OwotI2VuZGlmCi0jaWZuZGVmIFBIUF9XSU4zMgotCVJESU9DKFNfSVJXWFUpOwotCVJESU9DKFNfSVJV U1IpOwotCVJESU9DKFNfSVdVU1IpOwotCVJESU9DKFNfSVhVU1IpOwotCVJESU9DKFNfSVJXWEcpOwot CVJESU9DKFNfSVJHUlApOwotCVJESU9DKFNfSVdHUlApOwotCVJESU9DKFNfSVhHUlApOwotCVJESU9D KFNfSVJXWE8pOwotCVJESU9DKFNfSVJPVEgpOwotCVJESU9DKFNfSVdPVEgpOwotCVJESU9DKFNfSVhP VEgpOwotCVJESU9DKEZfRFVQRkQpOwotCVJESU9DKEZfR0VURkQpOwotCVJESU9DKEZfR0VURkwpOwot CVJESU9DKEZfU0VURkwpOwotCVJESU9DKEZfR0VUTEspOwotCVJESU9DKEZfU0VUTEspOwotCVJESU9D KEZfU0VUTEtXKTsKLQlSRElPQyhGX1NFVE9XTik7Ci0JUkRJT0MoRl9HRVRPV04pOwotCVJESU9DKEZf VU5MQ0spOwotCVJESU9DKEZfUkRMQ0spOwotCVJESU9DKEZfV1JMQ0spOwotI2VuZGlmCi0KLQlyZXR1 cm4gU1VDQ0VTUzsKLX0KLQotUEhQX01JTkZPX0ZVTkNUSU9OKGRpbykKLXsKLQlwaHBfaW5mb19wcmlu dF90YWJsZV9zdGFydCgpOwotCXBocF9pbmZvX3ByaW50X3RhYmxlX2hlYWRlcigyLCAiZGlvIHN1cHBv cnQiLCAiZW5hYmxlZCIpOwotCXBocF9pbmZvX3ByaW50X3RhYmxlX3JvdygyLCAidmVyc2lvbiIsIFBI UF9ESU9fVkVSU0lPTik7Ci0JcGhwX2luZm9fcHJpbnRfdGFibGVfZW5kKCk7Ci19Ci0KLXN0YXRpYyBp bnQgbmV3X3BocF9mZChwaHBfZmRfdCAqKmYsIGludCBmZCkKLXsKLQlpZiAoISgqZiA9IG1hbGxvYyhz aXplb2YocGhwX2ZkX3QpKSkpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCSgqZiktPmZkID0gZmQ7Ci0JcmV0 dXJuIDE7Ci19Ci0KIC8qIHt7eyBwcm90byByZXNvdXJjZSBkaW9fb3BlbihzdHJpbmcgZmlsZW5hbWUs IGludCBmbGFnc1ssIGludCBtb2RlXSkKICAgIE9wZW4gYSBuZXcgZmlsZW5hbWUgd2l0aCBzcGVjaWZp ZWQgcGVybWlzc2lvbnMgb2YgZmxhZ3MgYW5kIGNyZWF0aW9uIHBlcm1pc3Npb25zIG9mIG1vZGUgKi8K IFBIUF9GVU5DVElPTihkaW9fb3BlbikKQEAgLTIwMCw3ICsxMTAsNyBAQAogCQlSRVRVUk5fRkFMU0U7 CiAJfQoKLQorCiAJaWYgKCFuZXdfcGhwX2ZkKCZmLCBmZCkpIHsKIAkJUkVUVVJOX0ZBTFNFOwogCX0K QEAgLTQyNSw3ICszMzUsNyBAQAogCQl9CiAJCWNhc2UgRl9HRVRMSzogewogCQkJc3RydWN0IGZsb2Nr IGxrID0gezB9OwotCisKIAkJCWZjbnRsKGYtPmZkLCBjbWQsICZsayk7CgogCQkJYXJyYXlfaW5pdChy ZXR1cm5fdmFsdWUpOwpAQCAtNDgwLDcgKzM5MCw3IEBACiAJaWYgKHplbmRfcGFyc2VfcGFyYW1ldGVy cyhaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0NDLCAicnoiLCAmcl9mZCwgJmFyZykgPT0gRkFJTFVSRSkg ewogCQlyZXR1cm47CiAJfQotCisKIAlaRU5EX0ZFVENIX1JFU09VUkNFKGYsIHBocF9mZF90ICosICZy X2ZkLCAtMSwgbGVfZmRfbmFtZSwgbGVfZmQpOwoKIAlpZiAoWl9UWVBFX1AoYXJnKSAhPSBJU19BUlJB WSkgewpAQCAtNTA2LDE3ICs0MTYsMTcgQEAKIAkJU3RvcF9CaXRzID0gMTsKIAl9IGVsc2UgewogCQlT dG9wX0JpdHMgPSBaX0xWQUxfUFAoZWxlbWVudCk7Ci0JfQorCX0KCiAJaWYgKHplbmRfaGFzaF9maW5k KGZoLCAicGFyaXR5Iiwgc2l6ZW9mKCJwYXJpdHkiKSwgKHZvaWQgKiopICZlbGVtZW50KSA9PSBGQUlM VVJFKSB7CiAJCVBhcml0eSA9IDA7CiAJfSBlbHNlIHsKIAkJUGFyaXR5ID0gWl9MVkFMX1BQKGVsZW1l bnQpOwotCX0KKwl9CgogCS8qIGFzc2lnbiB0byBjb3JyZWN0IHZhbHVlcy4uLiAqLwogCXN3aXRjaCAo QmF1ZF9SYXRlKSAgewotCQljYXNlIDM4NDAwOgorCQljYXNlIDM4NDAwOgogCQkJQkFVRCA9IEIzODQw MDsKIAkJCWJyZWFrOwogCQljYXNlIDE5MjAwOgpAQCAtNTgxLDcgKzQ5MSw3IEBACiAJCWRlZmF1bHQ6 CiAJCQlwaHBfZXJyb3JfZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX1dBUk5JTkcsICJpbnZhbGlkIGRh dGEgYml0cyAlZCIsIERhdGFfQml0cyk7CiAJCQlSRVRVUk5fRkFMU0U7Ci0JfQorCX0KIAlzd2l0Y2gg KFN0b3BfQml0cykgewogCQljYXNlIDE6CiAJCQlTVE9QQklUUyA9IDA7CkBAIC01OTIsMjUgKzUwMiwy NSBAQAogCQlkZWZhdWx0OgogCQkJcGhwX2Vycm9yX2RvY3JlZihOVUxMIFRTUk1MU19DQywgRV9XQVJO SU5HLCAiaW52YWxpZCBzdG9wIGJpdHMgJWQiLCBTdG9wX0JpdHMpOwogCQkJUkVUVVJOX0ZBTFNFOwot CX0KKwl9CgogCXN3aXRjaCAoUGFyaXR5KSB7Ci0JCWNhc2UgMDoKKwkJY2FzZSAwOgogCQkJUEFSSVRZ T04gPSAwOwogCQkJUEFSSVRZID0gMDsKIAkJCWJyZWFrOwotCQljYXNlIDE6CisJCWNhc2UgMToKIAkJ CVBBUklUWU9OID0gUEFSRU5COwogCQkJUEFSSVRZID0gUEFST0REOwogCQkJYnJlYWs7Ci0JCWNhc2Ug MjoKKwkJY2FzZSAyOgogCQkJUEFSSVRZT04gPSBQQVJFTkI7CiAJCQlQQVJJVFkgPSAwOwogCQkJYnJl YWs7CiAJCWRlZmF1bHQ6CiAJCQlwaHBfZXJyb3JfZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX1dBUk5J TkcsICJpbnZhbGlkIHBhcml0eSAlZCIsIFBhcml0eSk7CiAJCQlSRVRVUk5fRkFMU0U7Ci0JfQorCX0K CiAJbWVtc2V0KCZuZXd0aW8sIDAsIHNpemVvZihuZXd0aW8pKTsKIAl0Y2dldGF0dHIoZi0+ZmQsICZu ZXd0aW8pOwpAQCAtNjM0LDcgKzU0NCw3IEBACiB7CiAJenZhbCAgICAgKnJfZmQ7CiAJcGhwX2ZkX3Qg KmY7Ci0KKwogCWlmICh6ZW5kX3BhcnNlX3BhcmFtZXRlcnMoWkVORF9OVU1fQVJHUygpIFRTUk1MU19D QywgInIiLCAmcl9mZCkgPT0gRkFJTFVSRSkgewogCQlyZXR1cm47CiAJfQpAQCAtNjQ2LDYgKzU1Niwx NDAgQEAKIC8qIH19fSAqLwoKIC8qCisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgICAgICAgICAgICAgICAg ICAgRU5EIE9GIERFUFJFQ0FURUQgRlVOQ1RJT05BTElUWSAgICAgICAgICAgICAgICAgICAgfAorICAg Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rCisgKi8KKworZnVuY3Rpb25fZW50cnkgZGlvX2Z1bmN0aW9uc1tdID0geworCS8q IENsYXNzIGZ1bmN0aW9ucy4gKi8KKworCS8qIExlZ2FjeSBmdW5jdGlvbnMgKERlcHJlY2F0ZWQgLSBT ZWUgZGlvX2xlZ2FjeS5jKSAqLworCVBIUF9GRShkaW9fb3BlbiwgICAgICBOVUxMKQorI2lmbmRlZiBQ SFBfV0lOMzIKKwlQSFBfRkUoZGlvX3RydW5jYXRlLCAgTlVMTCkKKyNlbmRpZgorCVBIUF9GRShkaW9f c3RhdCwgICAgICBOVUxMKQorCVBIUF9GRShkaW9fc2VlaywgICAgICBOVUxMKQorI2lmbmRlZiBQSFBf V0lOMzIKKwlQSFBfRkUoZGlvX2ZjbnRsLCAgICAgTlVMTCkKKyNlbmRpZgorCVBIUF9GRShkaW9fcmVh ZCwgICAgICBOVUxMKQorCVBIUF9GRShkaW9fd3JpdGUsICAgICBOVUxMKQorCVBIUF9GRShkaW9fY2xv c2UsICAgICBOVUxMKQorI2lmbmRlZiBQSFBfV0lOMzIKKwlQSFBfRkUoZGlvX3Rjc2V0YXR0ciwgTlVM TCkKKyNlbmRpZgorCisJLyogU3RyZWFtIGZ1bmN0aW9ucyAqLworCVBIUF9GRShkaW9fcmF3LCBOVUxM KQorCVBIUF9GRShkaW9fc2VyaWFsLCBOVUxMKQorCisJLyogRW5kIG9mIGZ1bmN0aW9ucyAqLworCXtO VUxMLCBOVUxMLCBOVUxMfQorfTsKKworemVuZF9tb2R1bGVfZW50cnkgZGlvX21vZHVsZV9lbnRyeSA9 IHsKKwlTVEFOREFSRF9NT0RVTEVfSEVBREVSLAorCSJkaW8iLAorCWRpb19mdW5jdGlvbnMsCisJUEhQ X01JTklUKGRpbyksCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJUEhQX01JTkZPKGRpbyksCisJUEhQ X0RJT19WRVJTSU9OLAorCVNUQU5EQVJEX01PRFVMRV9QUk9QRVJUSUVTCit9OworCisjaWZkZWYgQ09N UElMRV9ETF9ESU8KK1pFTkRfR0VUX01PRFVMRShkaW8pCisjZW5kaWYKKworI2RlZmluZSBSRElPQyhj KSBSRUdJU1RFUl9MT05HX0NPTlNUQU5UKCNjLCBjLCBDT05TVF9DUyB8IENPTlNUX1BFUlNJU1RFTlQp CisjZGVmaW5lIERJT19VTkRFRl9DT05TVCAtMQorCisvKiB7e3sgUEhQX01JTklUX0ZVTkNUSU9OCisg Ki8KK1BIUF9NSU5JVF9GVU5DVElPTihkaW8pCit7CisJbGVfZmQgPSB6ZW5kX3JlZ2lzdGVyX2xpc3Rf ZGVzdHJ1Y3RvcnNfZXgoX2Rpb19jbG9zZV9mZCwgTlVMTCwgbGVfZmRfbmFtZSwgbW9kdWxlX251bWJl cik7CisKKwlSRElPQyhPX1JET05MWSk7CisJUkRJT0MoT19XUk9OTFkpOworCVJESU9DKE9fUkRXUik7 CisJUkRJT0MoT19DUkVBVCk7CisJUkRJT0MoT19FWENMKTsKKwlSRElPQyhPX1RSVU5DKTsKKwlSRElP QyhPX0FQUEVORCk7CisjaWZkZWYgT19OT05CTE9DSworCVJESU9DKE9fTk9OQkxPQ0spOworI2VuZGlm CisjaWZkZWYgT19OREVMQVkKKwlSRElPQyhPX05ERUxBWSk7CisjZW5kaWYKKyNpZmRlZiBPX1NZTkMK KwlSRElPQyhPX1NZTkMpOworI2VuZGlmCisjaWZkZWYgT19BU1lOQworCVJESU9DKE9fQVNZTkMpOwor I2VuZGlmCisjaWZkZWYgT19OT0NUVFkKKwlSRElPQyhPX05PQ1RUWSk7CisjZW5kaWYKKyNpZm5kZWYg UEhQX1dJTjMyCisJUkRJT0MoU19JUldYVSk7CisJUkRJT0MoU19JUlVTUik7CisJUkRJT0MoU19JV1VT Uik7CisJUkRJT0MoU19JWFVTUik7CisJUkRJT0MoU19JUldYRyk7CisJUkRJT0MoU19JUkdSUCk7CisJ UkRJT0MoU19JV0dSUCk7CisJUkRJT0MoU19JWEdSUCk7CisJUkRJT0MoU19JUldYTyk7CisJUkRJT0Mo U19JUk9USCk7CisJUkRJT0MoU19JV09USCk7CisJUkRJT0MoU19JWE9USCk7CisJUkRJT0MoRl9EVVBG RCk7CisJUkRJT0MoRl9HRVRGRCk7CisJUkRJT0MoRl9HRVRGTCk7CisJUkRJT0MoRl9TRVRGTCk7CisJ UkRJT0MoRl9HRVRMSyk7CisJUkRJT0MoRl9TRVRMSyk7CisJUkRJT0MoRl9TRVRMS1cpOworCVJESU9D KEZfU0VUT1dOKTsKKwlSRElPQyhGX0dFVE9XTik7CisJUkRJT0MoRl9VTkxDSyk7CisJUkRJT0MoRl9S RExDSyk7CisJUkRJT0MoRl9XUkxDSyk7CisjZW5kaWYKKworCXJldHVybiAocGhwX3JlZ2lzdGVyX3Vy bF9zdHJlYW1fd3JhcHBlcihESU9fUkFXX1NUUkVBTV9OQU1FLCAmcGhwX2Rpb19yYXdfc3RyZWFtX3dy YXBwZXIgVFNSTUxTX0NDKSA9PSBTVUNDRVNTICYmCisJCQlwaHBfcmVnaXN0ZXJfdXJsX3N0cmVhbV93 cmFwcGVyKERJT19TRVJJQUxfU1RSRUFNX05BTUUsICZwaHBfZGlvX3NlcmlhbF9zdHJlYW1fd3JhcHBl ciBUU1JNTFNfQ0MpID09IFNVQ0NFU1MpID8gU1VDQ0VTUyA6IEZBSUxVUkU7Cit9CisvKiB9fX0gKi8K KworLyoge3t7IFBIUF9NU0hVVERPV05fRlVOQ1RJT04KKyAqLworUEhQX01TSFVURE9XTl9GVU5DVElP TihkaW8pCit7CisJcmV0dXJuIChwaHBfdW5yZWdpc3Rlcl91cmxfc3RyZWFtX3dyYXBwZXIoRElPX1JB V19TVFJFQU1fTkFNRSBUU1JNTFNfQ0MpID09IFNVQ0NFU1MgJiYKKwkJCXBocF91bnJlZ2lzdGVyX3Vy bF9zdHJlYW1fd3JhcHBlcihESU9fU0VSSUFMX1NUUkVBTV9OQU1FIFRTUk1MU19DQykgPT0gU1VDQ0VT UykgPyBTVUNDRVNTIDogRkFJTFVSRTsKK30KKy8qIH19fSAqLworCisvKiB7e3sgUEhQX01JTkZPX0ZV TkNUSU9OCisgKi8KK1BIUF9NSU5GT19GVU5DVElPTihkaW8pCit7CisJcGhwX2luZm9fcHJpbnRfdGFi bGVfc3RhcnQoKTsKKwlwaHBfaW5mb19wcmludF90YWJsZV9oZWFkZXIoMiwgImRpbyBzdXBwb3J0Iiwg ImVuYWJsZWQiKTsKKwlwaHBfaW5mb19wcmludF90YWJsZV9yb3coMiwgInZlcnNpb24iLCBQSFBfRElP X1ZFUlNJT04pOworCXBocF9pbmZvX3ByaW50X3RhYmxlX2VuZCgpOworfQorLyogfX19ICovCisKKy8q CiAgKiBMb2NhbCB2YXJpYWJsZXM6CiAgKiBjLWJhc2ljLW9mZnNldDogNAogICogdGFiLXdpZHRoOiA0 CgpBZGRlZDogcGVjbC9kaW8vdHJ1bmsvZGlvX2NvbW1vbi5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBlY2wvZGlvL3Ry dW5rL2Rpb19jb21tb24uYwkgICAgICAgICAgICAgICAgICAgICAgICAocmV2IDApCisrKyBwZWNsL2Rp by90cnVuay9kaW9fY29tbW9uLmMJMjAwOS0xMS0yOSAyMTo1ODoxMiBVVEMgKHJldiAyOTE0NTcpCkBA IC0wLDAgKzEsNDg5IEBACisvKgorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IFBIUCBWZXJzaW9uIDUgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKworICAgfCBDb3B5cmlnaHQgKGMpIDIwMDkgTWVsYW5pZSBSaGlhbm5hIExld2lzICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgVGhpcyBzb3Vy Y2UgZmlsZSBpcyBzdWJqZWN0IHRvIHZlcnNpb24gMy4wIG9mIHRoZSBQSFAgbGljZW5zZSwgICAgICAg fAorICAgfCB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5T RSwgYW5kIGlzICAgICAgICB8CisgICB8IGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdl YiBhdCB0aGUgZm9sbG93aW5nIHVybDogICAgICAgICAgIHwKKyAgIHwgaHR0cDovL3d3dy5waHAubmV0 L2xpY2Vuc2UvM18wLnR4dC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCBJ ZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgUEhQIGxpY2Vuc2UgYW5kIGFyZSB1bmFi bGUgdG8gICB8CisgICB8IG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNl IHNlbmQgYSBub3RlIHRvICAgICAgICAgIHwKKyAgIHwgbGljZW5zZUBwaHAubmV0IHNvIHdlIGNhbiBt YWlsIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r CisgICB8IEF1dGhvcjogTWVsYW5pZSBSaGlhbm5hIExld2lzIDxjeWJlcnNwaWNlQHBocC5uZXQ+ICAg ICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICovCisKKyNpbmNsdWRlIDxzeXMvc3Rh dC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNpbmNs dWRlIDxzeXMvdGltZS5oPgorCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5o PgorI2VuZGlmCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNs dWRlICJwaHBfZGlvX2NvbW1vbi5oIgorCisvKiB7e3sgZGlvX2NvbnZlcnRfdG9fbG9uZworICogUmV0 dXJucyBhcyBhIGxvbmcsIHRoZSB2YWx1ZSBvZiB0aGUgenZhbCByZWdhcmRsZXNzIG9mIGl0cyB0eXBl LgorICovCitsb25nIGRpb19jb252ZXJ0X3RvX2xvbmcoenZhbCAqdmFsKSB7CisJenZhbCAqY29weXZh bDsKKwlsb25nICBsb25ndmFsOworCisJQUxMT0NfSU5JVF9aVkFMKGNvcHl2YWwpOworCSpjb3B5dmFs ID0gKnZhbDsKKwljb252ZXJ0X3RvX2xvbmcoY29weXZhbCk7CisJbG9uZ3ZhbCA9IFpfTFZBTF9QKGNv cHl2YWwpOworCXp2YWxfcHRyX2R0b3IoJmNvcHl2YWwpOworCisJcmV0dXJuIGxvbmd2YWw7Cit9Cisv KiB9fX0gKi8KKworLyoge3t7IGRpb19zdHJlYW1fbW9kZV90b19mbGFncworICogQ29udmVydCBhbiBm b3BlbigpIG1vZGUgc3RyaW5nIHRvIG9wZW4oKSBmbGFncworICovCitpbnQgZGlvX3N0cmVhbV9tb2Rl X3RvX2ZsYWdzKGNvbnN0IGNoYXIgKm1vZGUpIHsKKwlpbnQgIGZsYWdzID0gMCwgY2ggPSAwLCBiaW4g PSAxOworCisjaWZuZGVmIFBIUF9XSU4zMgorCXN3aXRjaChtb2RlW2NoKytdKSB7CisJCWNhc2UgJ3In OgorCQkJZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgJ3cnOgorCQkJZmxhZ3MgPSBPX1RSVU5D IHwgT19DUkVBVDsKKwkJCWJyZWFrOworCQljYXNlICdhJzoKKwkJCWZsYWdzID0gT19BUFBFTkQgfCBP X0NSRUFUOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJZmxhZ3MgPSBPX0VYQ0wgfCBPX0NSRUFU OworCQkJYnJlYWs7CisJfQorCisJaWYgKG1vZGVbY2hdICE9ICcrJykgeworCQliaW4gPSAobW9kZVtj aCsrXSA9PSAnYicpOworCX0KKworCWlmIChtb2RlW2NoXSA9PSAnKycpIHsKKwkJZmxhZ3MgfD0gT19S RFdSOworCX0gZWxzZSBpZiAoZmxhZ3MpIHsKKwkJZmxhZ3MgfD0gT19XUk9OTFk7CisJfSBlbHNlIHsK KwkJZmxhZ3MgfD0gT19SRE9OTFk7CisJfQorCisjaWYgZGVmaW5lZChfT19URVhUKSAmJiBkZWZpbmVk KE9fQklOQVJZKQorCWlmIChiaW4pIHsKKwkJZmxhZ3MgfD0gT19CSU5BUlk7CisJfSBlbHNlIHsKKwkJ ZmxhZ3MgfD0gX09fVEVYVDsKKwl9CisjZW5kaWYKKworI2Vsc2UKKwkvKiBUT0RPOiBXaW5kb3dzIHZl cnNpb24gKi8KKyNlbmRpZgorCisJcmV0dXJuIGZsYWdzOworfQorLyogfX19ICovCisKKyNpZm5kZWYg UEhQX1dJTjMyCisKKy8qIHt7eyBkaW9fZGF0YV9yYXRlX3RvX2RlZmluZQorICogQ29udmVydHMgYSBu dW1lcmljIGRhdGEgcmF0ZSB0byBhIHRlcm1pb3MgZGVmaW5lCisgKi8KK2ludCBkaW9fZGF0YV9yYXRl X3RvX2RlZmluZShsb25nIHJhdGUsIHNwZWVkX3QgKmRlZikgeworCXNwZWVkX3QgdmFsOworCisJc3dp dGNoIChyYXRlKSB7CisJCWNhc2UgMDoKKwkJCXZhbCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSA1MDoK KwkJCXZhbCA9IEI1MDsKKwkJCWJyZWFrOworCQljYXNlIDc1OgorCQkJdmFsID0gQjc1OworCQkJYnJl YWs7CisJCWNhc2UgMTEwOgorCQkJdmFsID0gQjExMDsKKwkJCWJyZWFrOworCQljYXNlIDEzNDoKKwkJ CXZhbCA9IEIxMzQ7CisJCQlicmVhazsKKwkJY2FzZSAxNTA6CisJCQl2YWwgPSBCMTUwOworCQkJYnJl YWs7CisJCWNhc2UgMjAwOgorCQkJdmFsID0gQjIwMDsKKwkJCWJyZWFrOworCQljYXNlIDMwMDoKKwkJ CXZhbCA9IEIzMDA7CisJCQlicmVhazsKKwkJY2FzZSA2MDA6CisJCQl2YWwgPSBCNjAwOworCQkJYnJl YWs7CisJCWNhc2UgMTIwMDoKKwkJCXZhbCA9IEIxMjAwOworCQkJYnJlYWs7CisJCWNhc2UgMTgwMDoK KwkJCXZhbCA9IEIxODAwOworCQkJYnJlYWs7CisJCWNhc2UgMjQwMDoKKwkJCXZhbCA9IEIyNDAwOwor CQkJYnJlYWs7CisJCWNhc2UgNDgwMDoKKwkJCXZhbCA9IEI0ODAwOworCQkJYnJlYWs7CisJCWNhc2Ug OTYwMDoKKwkJCXZhbCA9IEI5NjAwOworCQkJYnJlYWs7CisJCWNhc2UgMTkyMDA6CisJCQl2YWwgPSBC MTkyMDA7CisJCQlicmVhazsKKwkJY2FzZSAzODQwMDoKKwkJCXZhbCA9IEIzODQwMDsKKwkJCWJyZWFr OworI2lmZGVmIEI1NzYwMAorCQljYXNlIDU3NjAwOgorCQkJdmFsID0gQjU3NjAwOworCQkJYnJlYWs7 CisjZW5kaWYKKyNpZmRlZiBCMTE1MjAwCisJCWNhc2UgMTE1MjAwOgorCQkJdmFsID0gQjExNTIwMDsK KwkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQjIzMDQwMAorCQljYXNlIDIzMDQwMDoKKwkJCXZhbCA9 IEIyMzA0MDA7CisJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIEI0NjA4MDAKKwkJY2FzZSA0NjA4MDA6 CisJCQl2YWwgPSBCNDYwODAwOworCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCXJldHVy biAwOworCX0KKworCSpkZWYgPSB2YWw7CisJcmV0dXJuIDE7Cit9CisKKy8qIHt7eyBkaW9fZGF0YV9i aXRzX3RvX2RlZmluZQorICogQ29udmVydHMgYSBudW1iZXIgb2YgZGF0YSBiaXRzIHRvIGEgdGVybWlv cyBkZWZpbmUKKyAqLworaW50IGRpb19kYXRhX2JpdHNfdG9fZGVmaW5lKGludCBkYXRhX2JpdHMsIGlu dCAqZGVmKSB7CisJaW50IHZhbDsKKworCXN3aXRjaCAoZGF0YV9iaXRzKSB7CisJCWNhc2UgODoKKwkJ CXZhbCA9IENTODsKKwkJCWJyZWFrOworCQljYXNlIDc6CisJCQl2YWwgPSBDUzc7CisJCQlicmVhazsK KwkJY2FzZSA2OgorCQkJdmFsID0gQ1M2OworCQkJYnJlYWs7CisJCWNhc2UgNToKKwkJCXZhbCA9IENT NTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJfQorCisJKmRlZiA9IHZhbDsK KwlyZXR1cm4gMTsKK30KKy8qIH19fSAqLworCisvKiB7e3sgZGlvX3N0b3BfYml0c190b19kZWZpbmUK KyAqIENvbnZlcnRzIGEgbnVtYmVyIG9mIHN0b3AgYml0cyB0byBhIHRlcm1pb3MgZGVmaW5lCisgKi8K K2ludCBkaW9fc3RvcF9iaXRzX3RvX2RlZmluZShpbnQgc3RvcF9iaXRzLCBpbnQgKmRlZikgeworCWlu dCB2YWw7CisKKwlzd2l0Y2ggKHN0b3BfYml0cykgeworCQljYXNlIDE6CisJCQl2YWwgPSAwOworCQkJ YnJlYWs7CisJCWNhc2UgMjoKKwkJCXZhbCA9IENTVE9QQjsKKwkJCWJyZWFrOworCQlkZWZhdWx0Ogor CQkJcmV0dXJuIDA7CisJfQorCisJKmRlZiA9IHZhbDsKKwlyZXR1cm4gMTsKK30KKy8qIH19fSAqLwor CisvKiB7e3sgZGlvX3Bhcml0eV90b19kZWZpbmUKKyAqIENvbnZlcnRzIGEgcGFyaXR5IHR5cGUgdG8g YSB0ZXJtaW9zIGRlZmluZQorICovCitpbnQgZGlvX3Bhcml0eV90b19kZWZpbmUoaW50IHBhcml0eSwg aW50ICpkZWYpIHsKKwlpbnQgdmFsOworCisJc3dpdGNoIChwYXJpdHkpIHsKKwkJY2FzZSAwOgorCQkJ dmFsID0gMDsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQl2YWwgPSBQQVJFTkIgfCBQQVJPREQ7CisJ CQlicmVhazsKKwkJY2FzZSAyOgorCQkJdmFsID0gUEFSRU5COworCQkJYnJlYWs7CisJCWRlZmF1bHQ6 CisJCQlyZXR1cm4gMDsKKwl9CisKKwkqZGVmID0gdmFsOworCXJldHVybiAxOworfQorLyogfX19ICov CisKKyNlbmRpZgorCisvKiB7e3sgZGlvX2Fzc29jX2FycmF5X2dldF9iYXNpY19vcHRpb25zCisgKiBS ZXRyaXZlcyB0aGUgYmFzaWMgb3BlbiBvcHRpb24gdmFsdWVzIGZyb20gYW4gYXNzb2NpYXRpdmUgYXJy YXkKKyAqLworaW50IGRpb19hc3NvY19hcnJheV9nZXRfYmFzaWNfb3B0aW9ucyh6dmFsICpvcHRpb25z LCBwaHBfZGlvX3N0cmVhbV9kYXRhICpkYXRhKSB7CisJenZhbCAqKnRtcHp2YWw7CisJSGFzaFRhYmxl ICpvcHRoYXNoOworCisJb3B0aGFzaCA9IEhBU0hfT0Yob3B0aW9ucyk7CisKKwkvKiBUaGlzIGlzIHRo ZSBmaWxlIG1vZGUgZmxhZ3MgdXNlZCBieSBvcGVuKCkuICovCisJaWYgKHplbmRfaGFzaF9maW5kKG9w dGhhc2gsICJwZXJtcyIsIHNpemVvZigicGVybXMiKSwgKHZvaWQgKiopJnRtcHp2YWwpID09IFNVQ0NF U1MgJiYgdG1wenZhbCAmJiAqdG1wenZhbCkgeworCQlkYXRhLT5wZXJtcyA9IChtb2RlX3QpZGlvX2Nv bnZlcnRfdG9fbG9uZygqdG1wenZhbCk7CisJCWRhdGEtPmhhc19wZXJtcyA9IDE7CisJfQorCisjaWZk ZWYgT19OT05CTE9DSworCS8qIFRoaXMgc2V0cyB0aGUgdW5kZXJseWluZyBzdHJlYW0gdG8gYmUgYmxv Y2tpbmcvbm9uCisJICAgYmxvY2sgKGkuZS4gT19OT05CTE9DSykgKi8KKwlpZiAoemVuZF9oYXNoX2Zp bmQob3B0aGFzaCwgImlzX2Jsb2NraW5nIiwgc2l6ZW9mKCJpc19ibG9ja2luZyIpLCAodm9pZCAqKikm dG1wenZhbCkgPT0gU1VDQ0VTUyAmJiB0bXB6dmFsICYmICp0bXB6dmFsKSB7CisJCWRhdGEtPmlzX2Js b2NraW5nID0gZGlvX2NvbnZlcnRfdG9fbG9uZygqdG1wenZhbCkgPyAxIDogMDsKKwl9CisKKwkvKiBU aGlzIGlzIHRoZSB0aW1lb3V0IHZhbHVlIGZvciByZWFkcyBpbiBzZWNvbmRzLiAgT25seSBvbmUgb2YK KwkgICB0aW1lb3V0X3NlY3Mgb3IgdGltZW91dF91c2VjcyBuZWVkIGJlIGRlZmluZWQgdG8gZGVmaW5l IGEgdGltZW91dC4gKi8KKwlpZiAoemVuZF9oYXNoX2ZpbmQob3B0aGFzaCwgInRpbWVvdXRfc2VjcyIs IHNpemVvZigidGltZW91dF9zZWNzIiksICh2b2lkICoqKSZ0bXB6dmFsKSA9PSBTVUNDRVNTICYmIHRt cHp2YWwgJiYgKnRtcHp2YWwpIHsKKwkJZGF0YS0+dGltZW91dC50dl9zZWMgPSBkaW9fY29udmVydF90 b19sb25nKCp0bXB6dmFsKTsKKwl9CisKKwkvKiBUaGlzIGlzIHRoZSB0aW1lb3V0IHZhbHVlIGZvciBy ZWFkcyBpbiBtaWNyb3NlY29uZHMuICBPbmx5IG9uZSBvZgorCSAgIHRpbWVvdXRfc2VjcyBvciB0aW1l b3V0X3VzZWNzIG5lZWQgYmUgZGVmaW5lZCB0byBkZWZpbmUgYSB0aW1lb3V0LiAqLworCWlmICh6ZW5k X2hhc2hfZmluZChvcHRoYXNoLCAidGltZW91dF91c2VjcyIsIHNpemVvZigidGltZW91dF91c2VjcyIp LCAodm9pZCAqKikmdG1wenZhbCkgPT0gU1VDQ0VTUyAmJiB0bXB6dmFsICYmICp0bXB6dmFsKSB7CisJ CWRhdGEtPnRpbWVvdXQudHZfdXNlYyA9IGRpb19jb252ZXJ0X3RvX2xvbmcoKnRtcHp2YWwpOworCX0K KworCWRhdGEtPmhhc190aW1lb3V0ID0gKGRhdGEtPnRpbWVvdXQudHZfc2VjIHwgZGF0YS0+dGltZW91 dC50dl91c2VjKSA/IDEgOiAwOworI2VuZGlmCit9CisvKiB9fX0gKi8KKworLyoge3t7IGRpb19hc3Nv Y19hcnJheV9nZXRfc2VyaWFsX29wdGlvbnMKKyAqIFJldHJpdmVzIHRoZSBzZXJpYWwgb3BlbiBvcHRp b24gdmFsdWVzIGZyb20gYW4gYXNzb2NpYXRpdmUgYXJyYXkKKyAqLworaW50IGRpb19hc3NvY19hcnJh eV9nZXRfc2VyaWFsX29wdGlvbnMoenZhbCAqb3B0aW9ucywgcGhwX2Rpb19zdHJlYW1fZGF0YSAqZGF0 YSkgeworCXp2YWwgKip0bXB6dmFsOworCUhhc2hUYWJsZSAqb3B0aGFzaDsKKworCW9wdGhhc2ggPSBI QVNIX09GKG9wdGlvbnMpOworCisJaWYgKHplbmRfaGFzaF9maW5kKG9wdGhhc2gsICJkYXRhX3JhdGUi LCBzaXplb2YoImRhdGFfcmF0ZSIpLCAodm9pZCAqKikmdG1wenZhbCkgPT0gU1VDQ0VTUyAmJiB0bXB6 dmFsICYmICp0bXB6dmFsKSB7CisJCWRhdGEtPmRhdGFfcmF0ZSA9IGRpb19jb252ZXJ0X3RvX2xvbmco KnRtcHp2YWwpOworCX0KKworCWlmICh6ZW5kX2hhc2hfZmluZChvcHRoYXNoLCAiZGF0YV9iaXRzIiwg c2l6ZW9mKCJkYXRhX2JpdHMiKSwgKHZvaWQgKiopJnRtcHp2YWwpID09IFNVQ0NFU1MgJiYgdG1wenZh bCAmJiAqdG1wenZhbCkgeworCQlkYXRhLT5kYXRhX2JpdHMgPSAoaW50KWRpb19jb252ZXJ0X3RvX2xv bmcoKnRtcHp2YWwpOworCX0KKworCWlmICh6ZW5kX2hhc2hfZmluZChvcHRoYXNoLCAic3RvcF9iaXRz Iiwgc2l6ZW9mKCJzdG9wX2JpdHMiKSwgKHZvaWQgKiopJnRtcHp2YWwpID09IFNVQ0NFU1MgJiYgdG1w enZhbCAmJiAqdG1wenZhbCkgeworCQlkYXRhLT5zdG9wX2JpdHMgPSAoaW50KWRpb19jb252ZXJ0X3Rv X2xvbmcoKnRtcHp2YWwpOworCX0KKworCWlmICh6ZW5kX2hhc2hfZmluZChvcHRoYXNoLCAicGFyaXR5 Iiwgc2l6ZW9mKCJwYXJpdHkiKSwgKHZvaWQgKiopJnRtcHp2YWwpID09IFNVQ0NFU1MgJiYgdG1wenZh bCAmJiAqdG1wenZhbCkgeworCQlkYXRhLT5wYXJpdHkgPSAoaW50KWRpb19jb252ZXJ0X3RvX2xvbmco KnRtcHp2YWwpOworCX0KKworCWlmICh6ZW5kX2hhc2hfZmluZChvcHRoYXNoLCAicnRzY3RzIiwgc2l6 ZW9mKCJydHNjdHMiKSwgKHZvaWQgKiopJnRtcHp2YWwpID09IFNVQ0NFU1MgJiYgdG1wenZhbCAmJiAq dG1wenZhbCkgeworCQlkYXRhLT5ydHNjdHMgPSAoaW50KShkaW9fY29udmVydF90b19sb25nKCp0bXB6 dmFsKSA/IDEgOiAwKTsKKwl9Cit9CisvKiB9fX0gKi8KKworLyoge3t7IGRpb19jb21tb25fd3JpdGUK KyAqIFdyaXRlcyBjb3VudCBjaGFycyBmcm9tIHRoZSBidWZmZXIgdG8gdGhlIHN0cmVhbSBkZXNjcmli ZWQgYnkgdGhlIHN0cmVhbSBkYXRhLgorICovCitzaXplX3QgZGlvX2NvbW1vbl93cml0ZShwaHBfZGlv X3N0cmVhbV9kYXRhICpkYXRhLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkgeworCXNpemVf dCByZXQ7CisKKyNpZm5kZWYgUEhQX1dJTjMyCisJLyogQmxvY2tpbmcgd3JpdGVzIGNhbiBiZSBpbnRl cnJ1cHRlZCBieSBzaWduYWxzIGV0Yy4gSWYKKwkgKiBpbnRlcnJ1cHRlZCB0cnkgYWdhaW4uIE5vdCBz dXJlIGFib3V0IG5vbi1ibG9ja2luZworCSAqIHdyaXRlcyBidXQgaXQgZG9lc24ndCBodXJ0IHRvIGNo ZWNrLiAqLworCWRvIHsKKwkJcmV0ID0gd3JpdGUoZGF0YS0+ZmQsIGJ1ZiwgY291bnQpOworCQlpZiAo cmV0ID4gMCkgeworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0gd2hpbGUgKGVycm5vID09IEVJTlRSKTsK KwlyZXR1cm4gMDsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKy8qIH19fSAqLworCisjaWZk ZWYgT19OT05CTE9DSworLyoge3t7IGRpb190aW1ldmFsX3N1YnRyYWN0CisgKiBDYWxjdWxhdGVzIHRo ZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHRpbWV2YWxzIHJldHVybmluZyB0aGUgcmVzdWx0IGluIHRo ZQorICogc3RydWN0dXJlIHBvaW50ZWQgdG8gYnkgZGlmZnB0ci4gIFJldHVybnMgLTEgYXMgZXJyb3Ig aWYgbGF0ZSB0aW1lIGlzCisgKiBlYXJsaWVyIHRoYW4gZWFybHkgdGltZS4KKyAqLworc3RhdGljIGlu dCBkaW9fdGltZXZhbF9zdWJ0cmFjdChzdHJ1Y3QgdGltZXZhbCAqbGF0ZSwgc3RydWN0IHRpbWV2YWwg KmVhcmx5LCBzdHJ1Y3QgdGltZXZhbCAqZGlmZikgeworCXN0cnVjdCB0aW1ldmFsICp0bXA7CisKKwlp ZiAoKGxhdGUtPnR2X3NlYyA8IGVhcmx5LT50dl9zZWMpIHx8CisJCSgobGF0ZS0+dHZfdXNlYyA9PSBl YXJseS0+dHZfc2VjKSAmJiAobGF0ZS0+dHZfdXNlYyA8IGVhcmx5LT50dl91c2VjKSkpIHsKKwkJcmV0 dXJuIDE7CisJfQorCisJLyogSGFuZGxlIGFueSBjYXJyeS4gIElmIGxhdGVyIHVzZWMgaXMgc21hbGxl ciB0aGFuIGVhcmxpZXIgdXNlYyBzaW1wbGUKKwkgKiBzdWJ0cmFjdGlvbiB3aWxsIHJlc3VsdCBpbiBu ZWdhdGl2ZSB2YWx1ZS4gIFNpbmNlIHVzZWMgaGFzIGEgbWF4aW11bQorCSAqIG9mIG9uZSBzZWNvbmQg YnkgYWRkaW5nIGFub3RoZXIgc2Vjb25kIGJlZm9yZSB0aGUgc3VidHJhY3Rpb24gdGhlCisJICogcmVz dWx0IHdpbGwgYWx3YXlzIGJlIHBvc2l0aXZlLiAqLworCWlmIChsYXRlLT50dl91c2VjIDwgZWFybHkt PnR2X3VzZWMpIHsKKwkJbGF0ZS0+dHZfdXNlYyAgKz0gMTAwMDAwMDsKKwkJbGF0ZS0+dHZfc2VjLS07 CisJfQorCisJLyogT25jZSBhZGp1c3RlZCBjYW4ganVzdCBzdWJ0cmFjdCB2YWx1ZXMuICovCisJZGlm Zi0+dHZfc2VjICA9IGxhdGUtPnR2X3NlYyAgLSBlYXJseS0+dHZfc2VjOworCWRpZmYtPnR2X3VzZWMg PSBsYXRlLT50dl91c2VjIC0gZWFybHktPnR2X3VzZWM7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgor CisvKiB7e3sgZGlvX2NvbW1vbl9yZWFkCisgKiBSZWFkcyBjb3VudCBjaGFycyB0byB0aGUgYnVmZmVy IHRvIHRoZSBzdHJlYW0gZGVzY3JpYmVkIGJ5IHRoZSBzdHJlYW0gZGF0YS4KKyAqLworc2l6ZV90IGRp b19jb21tb25fcmVhZChwaHBfZGlvX3N0cmVhbV9kYXRhICpkYXRhLCBjb25zdCBjaGFyICpidWYsIHNp emVfdCBjb3VudCkgeworCXNpemVfdCByZXQsIHRvdGFsID0gMDsKKwljaGFyICpwdHIgPSAoY2hhciop YnVmOworCisjaWZuZGVmIFBIUF9XSU4zMgorCXN0cnVjdCB0aW1ldmFsIHRpbWVvdXQsIHRpbWVvdXR0 bXAsIGJlZm9yZSwgYWZ0ZXIsIGRpZmY7CisJZmRfc2V0IHJmZHM7CisKKwlpZiAoIWRhdGEtPmhhc190 aW1lb3V0KSB7CisJCS8qIEJsb2NraW5nIHJlYWRzIGNhbiBiZSBpbnRlcnJ1cHRlZCBieSBzaWduYWxz IGV0Yy4gSWYKKwkJICogaW50ZXJydXB0ZWQgdHJ5IGFnYWluLiBOb3Qgc3VyZSBhYm91dCBub24tYmxv Y2tpbmcKKwkJICogcmVhZHMgYnV0IGl0IGRvZXNuJ3QgaHVydCB0byBjaGVjay4gKi8KKwkJZG8gewor CQkJcmV0ID0gcmVhZChkYXRhLT5mZCwgKGNoYXIqKWJ1ZiwgY291bnQpOworCQkJaWYgKHJldCA+IDAp IHsKKwkJCQlyZXR1cm4gcmV0OworCQkJfSBlbHNlIGlmICghcmV0KSB7CisJCQkJZGF0YS0+ZW5kX29m X2ZpbGUgPSAxOworCQkJfQorCQl9IHdoaWxlICgoZXJybm8gPT0gRUlOVFIpICYmICFkYXRhLT5lbmRf b2ZfZmlsZSk7CisJCXJldHVybiAwOworCX0KKyNpZmRlZiBPX05PTkJMT0NLCisJZWxzZSB7CisJCS8q IFRoZSBpbml0aWFsIHRpbWVvdXQgdmFsdWUgKi8KKwkJdGltZW91dCA9IGRhdGEtPnRpbWVvdXQ7CisK KwkJZG8geworCQkJLyogVGhlIHN5bWFudGljcyBvZiBzZWxlY3QoKSBhcmUgdGhhdCB5b3UgY2Fubm90 IGd1YXJhbnRlZQorCQkJICogdGhhdCB0aGUgdGltZXZhbCBzdHJ1Y3R1cmUgcGFzc2VkIGluIGhhcyBu b3QgYmVlbiBjaGFuZ2VkIGJ5CisJCQkgKiB0aGUgc2VsZWN0IGNhbGwuICBTbyB5b3Uga2VlcCBhIGNv cHkuICovCisJCQl0aW1lb3V0dG1wID0gdGltZW91dDsKKworCQkJLyogVGhlIHRpbWUgYmVmb3JlIHdl IHdhaXQgZm9yIGRhdGEuICovCisJCQkodm9pZCkgZ2V0dGltZW9mZGF5KCZiZWZvcmUsIE5VTEwpOwor CisJCQkvKiBXYWl0IGZvciBhbiBldmVudCBvbiBvdXIgZmlsZSBkZXNjcmlwdG9yLiAqLworCQkJRkRf WkVSTygmcmZkcyk7CisJCQlGRF9TRVQoZGF0YS0+ZmQsICZyZmRzKTsKKworCQkJcmV0ID0gc2VsZWN0 KGRhdGEtPmZkICsgMSwgJnJmZHMsIE5VTEwsIE5VTEwsICZ0aW1lb3V0dG1wKTsKKwkJCS8qIEFuIGVy cm9yLiAqLworCQkJaWYgKChyZXQgPCAwKSAmJiAoZXJybm8gIT0gRUlOVFIpICYmIChlcnJubyAhPSBF QUdBSU4pKSB7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJCS8qIFdlIGhhdmUgZGF0YSB0byByZWFk LiAqLworCQkJaWYgKChyZXQgPiAwKSAmJiBGRF9JU1NFVChkYXRhLT5mZCwgJnJmZHMpKSB7CisJCQkJ cmV0ID0gcmVhZChkYXRhLT5mZCwgcHRyLCBjb3VudCk7CisJCQkJLyogQW5vdGhlciBlcnJvciAqLwor CQkJCWlmICgocmV0IDwgMCkgJiYgKGVycm5vICE9IEVJTlRSKSAmJiAoZXJybm8gIT0gRUFHQUlOKSkg eworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisKKwkJCQlpZiAocmV0ID4gMCkgeworCQkJCQkvKiBHb3Qg ZGF0YSwgYWRkIGl0IHRvIHRoZSBidWZmZXIuICovCisJCQkJCXB0ciAgICs9IHJldDsKKwkJCQkJdG90 YWwgKz0gcmV0OworCQkJCQljb3VudCAtPSByZXQ7CisJCQkJfSBlbHNlIGlmICghcmV0KSB7CisJCQkJ CS8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBzaW5jZSBob3cgY2FuIHdlIGhhdmUKKwkJCQkJICog ZGF0YSB0byByZWFkIGF0IGFuIGVuZCBvZiBmaWxlLCBidXQgc3RpbGwKKwkJCQkJICoganVzdCBpbiBj YXNlISAqLworCQkJCQlkYXRhLT5lbmRfb2ZfZmlsZSA9IDE7CisJCQkJfQorCQkJfQorCisJCQkvKiBJ ZiBub3QgdGltZWQgb3V0IGFuZCBub3QgZW5kIG9mIGZpbGUgY2FsY3VsYXRlIGhvdyBsb25nCisJCQkg KiBpdCB0b29rIHVzIGFuZCBsb29wIGlmIHdlIHN0aWxsIGhhdmUgdGltZSBvdXQgdGltZSBsZWZ0LiAq LworCQkJaWYgKHJldCkgeworCQkJCSh2b2lkKSBnZXR0aW1lb2ZkYXkoJmFmdGVyLCBOVUxMKTsKKwor CQkJCS8qIERpZmYgdGhlIHRpbWV2YWxzICovCisJCQkJKHZvaWQpIGRpb190aW1ldmFsX3N1YnRyYWN0 KCZhZnRlciwgJmJlZm9yZSwgJmRpZmYpOworCisJCQkJLyogTm93IGFkanVzdCB0aGUgdGltZW91dC4g IElmIGl0IGVycm9ycyB3ZSd2ZSBydW4gb3V0CisJCQkJICogb2YgdGltZS4gKi8KKwkJCQlpZiAoZGlv X3RpbWV2YWxfc3VidHJhY3QoJnRpbWVvdXQsICZkaWZmLCAmdGltZW91dCkpIHsKKwkJCQkJcmV0ID0g MDsKKwkJCQl9CisJCQl9CisJCX0gd2hpbGUgKHJldCk7IC8qIFVudGlsIHRpbWUgb3V0IG9yIGVuZCBv ZiBmaWxlLiAqLworCisJCXJldHVybiB0b3RhbDsKKwl9CisjZW5kaWYKKyNlbHNlCisJcmV0dXJuIDA7 CisjZW5kaWYKK30KKy8qIH19fSAqLworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1iYXNp Yy1vZmZzZXQ6IDQKKyAqIHRhYi13aWR0aDogNAorICogRW5kOgorICogdmltNjAwOiBmZG09bWFya2Vy CisgKiB2aW06IHN3PTQgdHM9NCBub2V0CisgKi8KKwoKQWRkZWQ6IHBlY2wvZGlvL3RydW5rL2Rpb19z dHJlYW1fd3JhcHBlcnMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwZWNsL2Rpby90cnVuay9kaW9fc3RyZWFtX3dyYXBw ZXJzLmMJICAgICAgICAgICAgICAgICAgICAgICAgKHJldiAwKQorKysgcGVjbC9kaW8vdHJ1bmsvZGlv X3N0cmVhbV93cmFwcGVycy5jCTIwMDktMTEtMjkgMjE6NTg6MTIgVVRDIChyZXYgMjkxNDU3KQpAQCAt MCwwICsxLDcxMiBAQAorLyoKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBQSFAgVmVyc2lvbiA1ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSsKKyAgIHwgQ29weXJpZ2h0IChjKSAyMDA5IE1lbGFuaWUgUmhpYW5uYSBMZXdpcyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IFRoaXMgc291cmNl IGZpbGUgaXMgc3ViamVjdCB0byB2ZXJzaW9uIDMuMCBvZiB0aGUgUEhQIGxpY2Vuc2UsICAgICAgIHwK KyAgIHwgdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0Us IGFuZCBpcyAgICAgICAgfAorICAgfCBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIg YXQgdGhlIGZvbGxvd2luZyB1cmw6ICAgICAgICAgICB8CisgICB8IGh0dHA6Ly93d3cucGhwLm5ldC9s aWNlbnNlLzNfMC50eHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgSWYg eW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIFBIUCBsaWNlbnNlIGFuZCBhcmUgdW5hYmxl IHRvICAgfAorICAgfCBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBz ZW5kIGEgbm90ZSB0byAgICAgICAgICB8CisgICB8IGxpY2Vuc2VAcGhwLm5ldCBzbyB3ZSBjYW4gbWFp bCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LiAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwor ICAgfCBBdXRob3I6IE1lbGFuaWUgUmhpYW5uYSBMZXdpcyA8Y3liZXJzcGljZUBwaHAubmV0PiAgICAg ICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdf SAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJwaHAuaCIKKyNpbmNsdWRl ICJleHQvc3RhbmRhcmQvdXJsLmgiCisKKyNpbmNsdWRlICJwaHBfZGlvLmgiCisjaW5jbHVkZSAicGhw X2Rpb19jb21tb24uaCIKKyNpbmNsdWRlICJwaHBfZGlvX3N0cmVhbV93cmFwcGVycy5oIgorCisjaWZk ZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxm Y250bC5oPgorI2lmbmRlZiBQSFBfV0lOMzIKKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjZW5kaWYKKwor Lyoge3t7IGRpb19zdHJlYW1fY29udGV4dF9nZXRfcmF3X29wdGlvbnMKKyAqIEV4dHJhY3RzIHRoZSBv cHRpb24gdmFsdWVzIGZvciBkaW8ucmF3IG1vZGUgZnJvbSBhIGNvbnRleHQKKyAqLworc3RhdGljIHZv aWQgZGlvX3N0cmVhbV9jb250ZXh0X2dldF9iYXNpY19vcHRpb25zKHBocF9zdHJlYW1fY29udGV4dCAq Y29udGV4dCwgcGhwX2Rpb19zdHJlYW1fZGF0YSAqZGF0YSkgeworCXp2YWwgKip0bXB6dmFsOworCisJ LyogVGhpcyBpcyB0aGUgZmlsZSBtb2RlIGZsYWdzIHVzZWQgYnkgb3BlbigpLiAqLworCWlmIChwaHBf c3RyZWFtX2NvbnRleHRfZ2V0X29wdGlvbihjb250ZXh0LCAiZGlvIiwgInBlcm1zIiwgJnRtcHp2YWwp ID09IFNVQ0NFU1MgJiYgdG1wenZhbCAmJiAqdG1wenZhbCkgeworCQlkYXRhLT5wZXJtcyA9IChtb2Rl X3QpZGlvX2NvbnZlcnRfdG9fbG9uZygqdG1wenZhbCk7CisJCWRhdGEtPmhhc19wZXJtcyA9IDE7CisJ fQorCisjaWZkZWYgT19OT05CTE9DSworCS8qIFRoaXMgc2V0cyB0aGUgdW5kZXJseWluZyBzdHJlYW0g dG8gYmUgYmxvY2tpbmcvbm9uCisJICAgYmxvY2sgKGkuZS4gT19OT05CTE9DSykgKi8KKwlpZiAocGhw X3N0cmVhbV9jb250ZXh0X2dldF9vcHRpb24oY29udGV4dCwgImRpbyIsICJpc19ibG9ja2luZyIsICZ0 bXB6dmFsKSA9PSBTVUNDRVNTICYmIHRtcHp2YWwgJiYgKnRtcHp2YWwpIHsKKwkJZGF0YS0+aXNfYmxv Y2tpbmcgPSBkaW9fY29udmVydF90b19sb25nKCp0bXB6dmFsKSA/IDEgOiAwOworCX0KKworCS8qIFRo aXMgaXMgdGhlIHRpbWVvdXQgdmFsdWUgZm9yIHJlYWRzIGluIHNlY29uZHMuICBPbmx5IG9uZSBvZgor CSAgIHRpbWVvdXRfc2VjcyBvciB0aW1lb3V0X3VzZWNzIG5lZWQgYmUgZGVmaW5lZCB0byBkZWZpbmUg YSB0aW1lb3V0LiAqLworCWlmIChwaHBfc3RyZWFtX2NvbnRleHRfZ2V0X29wdGlvbihjb250ZXh0LCAi ZGlvIiwgInRpbWVvdXRfc2VjcyIsICZ0bXB6dmFsKSA9PSBTVUNDRVNTICYmIHRtcHp2YWwgJiYgKnRt cHp2YWwpIHsKKwkJZGF0YS0+dGltZW91dC50dl9zZWMgPSBkaW9fY29udmVydF90b19sb25nKCp0bXB6 dmFsKTsKKwl9CisKKwkvKiBUaGlzIGlzIHRoZSB0aW1lb3V0IHZhbHVlIGZvciByZWFkcyBpbiBtaWNy b3NlY29uZHMuICBPbmx5IG9uZSBvZgorCSAgIHRpbWVvdXRfc2VjcyBvciB0aW1lb3V0X3VzZWNzIG5l ZWQgYmUgZGVmaW5lZCB0byBkZWZpbmUgYSB0aW1lb3V0LiAqLworCWlmIChwaHBfc3RyZWFtX2NvbnRl eHRfZ2V0X29wdGlvbihjb250ZXh0LCAiZGlvIiwgInRpbWVvdXRfdXNlY3MiLCAmdG1wenZhbCkgPT0g U1VDQ0VTUyAmJiB0bXB6dmFsICYmICp0bXB6dmFsKSB7CisJCWRhdGEtPnRpbWVvdXQudHZfdXNlYyA9 IGRpb19jb252ZXJ0X3RvX2xvbmcoKnRtcHp2YWwpOworCX0KKworCWRhdGEtPmhhc190aW1lb3V0ID0g KGRhdGEtPnRpbWVvdXQudHZfc2VjIHwgZGF0YS0+dGltZW91dC50dl91c2VjKSA/IDEgOiAwOworI2Vu ZGlmCit9CisvKiB9fX0gKi8KKworLyoge3t7IGRpb19zdHJlYW1fY29udGV4dF9nZXRfc2VyaWFsX29w dGlvbnMKKyAqIEV4dHJhY3RzIHRoZSBvcHRpb24gdmFsdWVzIGZvciBkaW8uc2VyaWFsIG1vZGUgZnJv bSBhIGNvbnRleHQKKyAqLworc3RhdGljIHZvaWQgZGlvX3N0cmVhbV9jb250ZXh0X2dldF9zZXJpYWxf b3B0aW9ucyhwaHBfc3RyZWFtX2NvbnRleHQgKmNvbnRleHQsIHBocF9kaW9fc3RyZWFtX2RhdGEgKmRh dGEpIHsKKwl6dmFsICoqdG1wenZhbDsKKworCWlmIChwaHBfc3RyZWFtX2NvbnRleHRfZ2V0X29wdGlv bihjb250ZXh0LCAiZGlvIiwgImRhdGFfcmF0ZSIsICZ0bXB6dmFsKSA9PSBTVUNDRVNTICYmIHRtcHp2 YWwgJiYgKnRtcHp2YWwpIHsKKwkJZGF0YS0+ZGF0YV9yYXRlID0gZGlvX2NvbnZlcnRfdG9fbG9uZygq dG1wenZhbCk7CisJfQorCisJaWYgKHBocF9zdHJlYW1fY29udGV4dF9nZXRfb3B0aW9uKGNvbnRleHQs ICJkaW8iLCAiZGF0YV9iaXRzIiwgJnRtcHp2YWwpID09IFNVQ0NFU1MgJiYgdG1wenZhbCAmJiAqdG1w enZhbCkgeworCQlkYXRhLT5kYXRhX2JpdHMgPSAoaW50KWRpb19jb252ZXJ0X3RvX2xvbmcoKnRtcHp2 YWwpOworCX0KKworCWlmIChwaHBfc3RyZWFtX2NvbnRleHRfZ2V0X29wdGlvbihjb250ZXh0LCAiZGlv IiwgInN0b3BfYml0cyIsICZ0bXB6dmFsKSA9PSBTVUNDRVNTICYmIHRtcHp2YWwgJiYgKnRtcHp2YWwp IHsKKwkJZGF0YS0+c3RvcF9iaXRzID0gKGludClkaW9fY29udmVydF90b19sb25nKCp0bXB6dmFsKTsK Kwl9CisKKwlpZiAocGhwX3N0cmVhbV9jb250ZXh0X2dldF9vcHRpb24oY29udGV4dCwgImRpbyIsICJw YXJpdHkiLCAmdG1wenZhbCkgPT0gU1VDQ0VTUyAmJiB0bXB6dmFsICYmICp0bXB6dmFsKSB7CisJCWRh dGEtPnBhcml0eSA9IChpbnQpZGlvX2NvbnZlcnRfdG9fbG9uZygqdG1wenZhbCk7CisJfQorCisJaWYg KHBocF9zdHJlYW1fY29udGV4dF9nZXRfb3B0aW9uKGNvbnRleHQsICJkaW8iLCAicnRzY3RzIiwgJnRt cHp2YWwpID09IFNVQ0NFU1MgJiYgdG1wenZhbCAmJiAqdG1wenZhbCkgeworCQlkYXRhLT5ydHNjdHMg PSAoaW50KShkaW9fY29udmVydF90b19sb25nKCp0bXB6dmFsKSA/IDEgOiAwKTsKKwl9Cit9CisvKiB9 fX0gKi8KKworLyoKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBSYXcgc3RyZWFtIGhhbmRsaW5nICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsKKyovCisKKy8qIHt7eyBkaW9fc3RyZWFtX3dyaXRlCisgKiBXcml0ZSB0byB0aGUgc3RyZWFtCisg Ki8KK3N0YXRpYyBzaXplX3QgZGlvX3N0cmVhbV93cml0ZShwaHBfc3RyZWFtICpzdHJlYW0sIGNvbnN0 IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50IFRTUk1MU19EQykKK3sKKwlyZXR1cm4gZGlvX2NvbW1vbl93 cml0ZSgocGhwX2Rpb19zdHJlYW1fZGF0YSopc3RyZWFtLT5hYnN0cmFjdCwgYnVmLCBjb3VudCk7Cit9 CisvKiB9fX0gKi8KKworLyoge3t7IGRpb19zdHJlYW1fcmVhZAorICogUmVhZCBmcm9tIHRoZSBzdHJl YW0KKyAqLworc3RhdGljIHNpemVfdCBkaW9fc3RyZWFtX3JlYWQocGhwX3N0cmVhbSAqc3RyZWFtLCBj aGFyICpidWYsIHNpemVfdCBjb3VudCBUU1JNTFNfREMpCit7CisJcmV0dXJuIGRpb19jb21tb25fcmVh ZCgocGhwX2Rpb19zdHJlYW1fZGF0YSopc3RyZWFtLT5hYnN0cmFjdCwgYnVmLCBjb3VudCk7Cit9Cisv KiB9fX0gKi8KKworLyoge3t7IGRpb19zdHJlYW1fY2xvc2UKKyAqIENsb3NlIHRoZSBzdHJlYW0KKyAq Lworc3RhdGljIGludCBkaW9fc3RyZWFtX2Nsb3NlKHBocF9zdHJlYW0gKnN0cmVhbSwgaW50IGNsb3Nl X2hhbmRsZSBUU1JNTFNfREMpCit7CisJcGhwX2Rpb19zdHJlYW1fZGF0YSAqYWJzdHJhY3QgPSAocGhw X2Rpb19zdHJlYW1fZGF0YSopc3RyZWFtLT5hYnN0cmFjdDsKKworCWlmIChjbG9zZShhYnN0cmFjdC0+ ZmQpIDwgMCkgeworCQlyZXR1cm4gMDsKKwl9CisKKwllZnJlZShhYnN0cmFjdCk7CisJcmV0dXJuIDE7 Cit9CisvKiB9fX0gKi8KKworLyoge3t7IGRpb19zdHJlYW1fZmx1c2gKKyAqIEZsdXNoIHRoZSBzdHJl YW0uICBGb3IgcmF3IHN0cmVhbXMgdGhpcyBkb2VzIG5vdGhpbmcuCisgKi8KK3N0YXRpYyBpbnQgZGlv X3N0cmVhbV9mbHVzaChwaHBfc3RyZWFtICpzdHJlYW0gVFNSTUxTX0RDKQoreworCXJldHVybiAxOwor fQorLyogfX19ICovCisKKy8qIHt7eyBkaW9fc3RyZWFtX3NldF9vcHRpb24KKyAqIFNldCB0aGUgc3Ry ZWFtIG9wdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQgZGlvX3N0cmVhbV9zZXRfb3B0aW9uKHBocF9zdHJl YW0gKnN0cmVhbSwgaW50IG9wdGlvbiwgaW50IHZhbHVlLCB2b2lkICpwdHJwYXJhbSBUU1JNTFNfREMp Cit7CisJcGhwX2Rpb19zdHJlYW1fZGF0YSAqYWJzdHJhY3QgPSAocGhwX2Rpb19zdHJlYW1fZGF0YSop c3RyZWFtLT5hYnN0cmFjdDsKKwlpbnQgb2xkX2lzX2Jsb2NraW5nOworCWludCBmbGFnczsKKworCXN3 aXRjaCAob3B0aW9uKSB7CisKKyNpZmRlZiBPX05PTkJMT0NLCisJCWNhc2UgUEhQX1NUUkVBTV9PUFRJ T05fUkVBRF9USU1FT1VUOgorCQkJaWYgKHB0cnBhcmFtKSB7CisJCQkJc3RydWN0IHRpbWV2YWwgKnR2 ID0gKHN0cnVjdCB0aW1ldmFsKilwdHJwYXJhbTsKKworCQkJCWZsYWdzID0gZmNudGwoYWJzdHJhY3Qt PmZkLCBGX0dFVEZMLCAwKTsKKworCQkJCS8qIEEgdGltZW91dCBvZiB6ZXJvIHNlY29uZHMgYW5kIHpl cm8gbWljcm8gc2Vjb25kcyBkaXNhYmxlcworCQkJCSAgIGFueSBleGlzdGluZyB0aW1lb3V0LiAqLwor CQkJCWlmICh0di0+dHZfc2VjIHx8IHR2LT50dl91c2VjKSB7CisJCQkJCWFic3RyYWN0LT50aW1lb3V0 LnR2X3NlYyA9IHR2LT50dl9zZWM7CisJCQkJCWFic3RyYWN0LT50aW1lb3V0LnR2X3VzZWMgPSB0di0+ dHZfdXNlYzsKKwkJCQkJYWJzdHJhY3QtPmhhc190aW1lb3V0ID0gLTE7CisJCQkJCSh2b2lkKSBmbmN0 bChhYnN0cmFjdC0+ZmQsIEZfU0VURkwsIGZsYWdzICYgfk9fTk9OQkxPQ0spOworCQkJCX0gZWxzZSB7 CisJCQkJCWFic3RyYWN0LT50aW1lb3V0LnR2X3NlYyA9IDA7CisJCQkJCWFic3RyYWN0LT50aW1lb3V0 LnR2X3VzZWMgPSAwOworCQkJCQlhYnN0cmFjdC0+aGFzX3RpbWVvdXQgPSAwOworCQkJCQkodm9pZCkg Zm5jdGwoYWJzdHJhY3QtPmZkLCBGX1NFVEZMLCBmbGFncyB8IE9fTk9OQkxPQ0spOworCQkJCX0KKwkJ CX0gZWxzZSB7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFBIUF9TVFJF QU1fT1BUSU9OX0JMT0NLSU5HOgorCQkJZmxhZ3MgPSBmY250bChhYnN0cmFjdC0+ZmQsIEZfR0VURkws IDApOworCQkJaWYgKHZhbHVlKSB7CisJCQkJZmxhZ3MgJj0gfk9fTk9OQkxPQ0s7CisJCQl9IGVsc2Ug eworCQkJCWZsYWdzIHw9IE9fTk9OQkxPQ0s7CisJCQl9CisJCQkodm9pZCkgZmNudGwoYWJzdHJhY3Qt PmZkLCBGX1NFVEZMLCBmbGFncyk7CisKKwkJCW9sZF9pc19ibG9ja2luZyA9IGFic3RyYWN0LT5pc19i bG9ja2luZzsKKwkJCWFic3RyYWN0LT5pc19ibG9ja2luZyA9IHZhbHVlOworCQkJcmV0dXJuIG9sZF9p c19ibG9ja2luZzsKKyNlbmRpZgorCisjaWYgUEhQX01BSk9SX1ZFUlNJT04gPj0gNQorCQljYXNlIFBI UF9TVFJFQU1fT1BUSU9OX0NIRUNLX0xJVkVORVNTOgorCQkJc3RyZWFtLT5lb2YgPSBhYnN0cmFjdC0+ ZW5kX29mX2ZpbGU7CisJCQlyZXR1cm4gc3RyZWFtLT5lb2Y7CisjZW5kaWYKKwl9CisKKwlyZXR1cm4g MTsKK30KKy8qIH19fSAqLworCitwaHBfc3RyZWFtX29wcyBkaW9fcmF3X3N0cmVhbV9vcHMgPSB7CisJ ZGlvX3N0cmVhbV93cml0ZSwKKwlkaW9fc3RyZWFtX3JlYWQsCisJZGlvX3N0cmVhbV9jbG9zZSwKKwlk aW9fc3RyZWFtX2ZsdXNoLAorCSJkaW8iLAorCU5VTEwsIC8qIHNlZWsgKi8KKwlOVUxMLCAvKiBjYXN0 ICovCisJTlVMTCwgLyogc3RhdCAqLworCWRpb19zdHJlYW1fc2V0X29wdGlvbiwKK307CisKKy8qIHt7 eyBkaW9fcmF3X29wZW5fc3RyZWFtCisgKiBPcGVucyB0aGUgcGhwX3N0cmVhbS4KKyAqLworc3RhdGlj IHBocF9zdHJlYW0gKmRpb19yYXdfb3Blbl9zdHJlYW0oY2hhciAqZmlsZW5hbWUsIGNoYXIgKm1vZGUs IHBocF9kaW9fc3RyZWFtX2RhdGEgKmRhdGEpIHsKKwlkYXRhLT5mbGFncyA9IGRpb19zdHJlYW1fbW9k ZV90b19mbGFncyhtb2RlKTsKKworI2lmZGVmIE9fTk9OQkxPQ0sKKwlpZiAoIWRhdGEtPmlzX2Jsb2Nr aW5nIHx8IGRhdGEtPmhhc190aW1lb3V0KSB7CisJCWRhdGEtPmZsYWdzIHw9IE9fTk9OQkxPQ0s7CisJ fQorI2VuZGlmCisKKwkvKiBPcGVuIHRoZSBmaWxlIGFuZCBoYW5kbGUgYW55IGVycm9ycy4gKi8KKwlp ZiAoZGF0YS0+aGFzX3Blcm1zKSB7CisJCWRhdGEtPmZkID0gb3BlbihmaWxlbmFtZSwgZGF0YS0+Zmxh Z3MsIGRhdGEtPnBlcm1zKTsKKwl9IGVsc2UgeworCQlkYXRhLT5mZCA9IG9wZW4oZmlsZW5hbWUsIGRh dGEtPmZsYWdzKTsKKwl9CisKKwlpZiAoZGF0YS0+ZmQgPCAwKSB7CisJCXN3aXRjaCAoZXJybm8pIHsK KwkJCWNhc2UgRUVYSVNUOgorCQkJCXBocF9lcnJvcl9kb2NyZWYoTlVMTCBUU1JNTFNfQ0MsIEVfV0FS TklORywgIkZpbGUgZXhpc3RzISIpOworCQkJCXJldHVybiBOVUxMOworCQkJZGVmYXVsdDoKKwkJCQly ZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCXJldHVybiBwaHBfc3RyZWFtX2FsbG9jKCZkaW9fcmF3X3N0 cmVhbV9vcHMsIGRhdGEsIDAsIG1vZGUpOworfQorLyogfX19ICovCisKKy8qIHt7eyBkaW9fcmF3X2Zv cGVuX3dyYXBwZXIKKyAqIGZvcGVuIGZvciB0aGUgZGlvLnJhdyBzdHJlYW0uCisgKi8KK3N0YXRpYyBw aHBfc3RyZWFtICpkaW9fcmF3X2ZvcGVuX3dyYXBwZXIocGhwX3N0cmVhbV93cmFwcGVyICp3cmFwcGVy LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwYXRoLCBjaGFy ICptb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0aW9u cywgY2hhciAqKm9wZW5lZF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwaHBfc3RyZWFtX2NvbnRleHQgKmNvbnRleHQgU1RSRUFNU19EQyBUU1JNTFNfREMpIHsKKwlw aHBfZGlvX3N0cmVhbV9kYXRhICpkYXRhOworCXBocF9zdHJlYW0gKnN0cmVhbTsKKwljaGFyICpmaWxl bmFtZTsKKworCS8qIENoZWNrIGl0IHdhcyBhY3R1YWxseSBmb3IgdXMgKG5vdCBhIGNvcnJ1cHRlZCBm dW5jdGlvbiBwb2ludGVyCisJICAgc29tZXdoZXJlISkuICovCisJaWYgKHN0cm5jbXAocGF0aCwgRElP X1JBV19TVFJFQU1fUFJPVE9DT0wsIHNpemVvZihESU9fUkFXX1NUUkVBTV9QUk9UT0NPTCkgLSAxKSkg eworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBHZXQgdGhlIGFjdHVhbGx5IGZpbGUgc3lzdGVtIG5h bWUvcGF0aC4gKi8KKwlmaWxlbmFtZSA9IHBhdGggKyBzaXplb2YoRElPX1JBV19TVFJFQU1fUFJPVE9D T0wpIC0gMTsKKworCS8qIENoZWNrIHdlIGNhbiBhY3R1YWxseSBhY2Nlc3MgaXQuICovCisJaWYgKHBo cF9jaGVja19vcGVuX2Jhc2VkaXIoZmlsZW5hbWUgVFNSTUxTX0NDKSB8fAorCQkoUEcoc2FmZV9tb2Rl KSAmJiAhcGhwX2NoZWNrdWlkKGZpbGVuYW1lLCBtb2RlLCBDSEVDS1VJRF9DSEVDS19NT0RFX1BBUkFN KSkpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogSW5pdGlhbGlzZSB0aGUgc3RyZWFtIGRhdGEg c3RydWN0dXJlLiAqLworCWRhdGEgPSBlbWFsbG9jKHNpemVvZihwaHBfZGlvX3N0cmVhbV9kYXRhKSk7 CisJZGF0YS0+aGFzX3Blcm1zID0gMDsKKwlkYXRhLT5wZXJtcyA9IDA7CisJZGF0YS0+ZW5kX29mX2Zp bGUgPSAwOworI2lmZGVmIE9fTk9OQkxPQ0s7CisJZGF0YS0+aXNfYmxvY2tpbmcgPSAxOworCWRhdGEt Pmhhc190aW1lb3V0ID0gMDsKKwlkYXRhLT50aW1lb3V0LnR2X3NlYyA9IDA7CisJZGF0YS0+dGltZW91 dC50dl91c2VjID0gMDsKKyNlbmRpZgorCisJLyogUGFyc2UgdGhlIGNvbnRleHQuICovCisJaWYgKGNv bnRleHQpIHsKKwkJZGlvX3N0cmVhbV9jb250ZXh0X2dldF9iYXNpY19vcHRpb25zKGNvbnRleHQsIGRh dGEpOworCX0KKworCS8qIFRyeSBhbmQgb3BlbiBhIHJhdyBzdHJlYW0uICovCisJc3RyZWFtID0gZGlv X3Jhd19vcGVuX3N0cmVhbShmaWxlbmFtZSwgbW9kZSwgZGF0YSk7CisJaWYgKCFzdHJlYW0pIHsKKwkJ ZWZyZWUoZGF0YSk7CisJfQorCisJcmV0dXJuIHN0cmVhbTsKK30KKy8qIH19fSAqLworCitzdGF0aWMg cGhwX3N0cmVhbV93cmFwcGVyX29wcyBkaW9fcmF3X3N0cmVhbV93b3BzID0geworCWRpb19yYXdfZm9w ZW5fd3JhcHBlciwKKwlOVUxMLCAvKiBzdHJlYW1fY2xvc2UgKi8KKwlOVUxMLCAvKiBzdGF0ICovCisJ TlVMTCwgLyogc3RhdF91cmwgKi8KKwlOVUxMLCAvKiBvcGVuZGlyICovCisJRElPX1JBV19TVFJFQU1f TkFNRQorfTsKKworcGhwX3N0cmVhbV93cmFwcGVyIHBocF9kaW9fcmF3X3N0cmVhbV93cmFwcGVyID0g eworCSZkaW9fcmF3X3N0cmVhbV93b3BzLAorCU5VTEwsCisJMAorfTsKKworLyoge3t7IHByb3RvIGRp b19yYXcoc3RyaW5nIGZpbGVuYW1lLCBzdHJpbmcgbW9kZVssIGFycmF5IG9wdGlvbnNdKQorICogT3Bl bnMgYSByYXcgZGlyZWN0IElPIHN0cmVhbS4KKyAqLworUEhQX0ZVTkNUSU9OKGRpb19yYXcpIHsKKwl6 dmFsICpvcHRpb25zID0gTlVMTDsKKwlwaHBfZGlvX3N0cmVhbV9kYXRhICpkYXRhOworCXBocF9zdHJl YW0gKnN0cmVhbTsKKwlIYXNoVGFibGUgKm9wdGhhc2g7CisKKwljaGFyICpmaWxlbmFtZTsKKwlpbnQg ICBmaWxlbmFtZV9sZW47CisJY2hhciAqbW9kZTsKKwlpbnQgICBtb2RlX2xlbjsKKworCWlmICh6ZW5k X3BhcnNlX3BhcmFtZXRlcnMoWkVORF9OVU1fQVJHUygpIFRTUk1MU19DQywgInNzfHoiLCAmZmlsZW5h bWUsICZmaWxlbmFtZV9sZW4sICZtb2RlLCAmbW9kZV9sZW4sICZvcHRpb25zKSA9PSBGQUlMVVJFKSB7 CisJCVJFVFVSTl9GQUxTRTsKKwl9CisKKwkvKiBDaGVjayB0aGUgdGhpcmQgYXJndW1lbnQgaXMgYW4g YXJyYXkuICovCisJaWYgKG9wdGlvbnMgJiYgKFpfVFlQRV9QKG9wdGlvbnMpICE9IElTX0FSUkFZKSkg eworCQlwaHBfZXJyb3JfZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX1dBUk5JTkcsImRpb19yYXcsIHRo ZSB0aGlyZCBhcmd1bWVudCBzaG91bGQgYmUgYW4gYXJyYXkgb2Ygb3B0aW9ucyIpOworCQlSRVRVUk5f RkFMU0U7CisJfQorCisJLyogQ2hlY2sgd2UgY2FuIGFjdHVhbGx5IGFjY2VzcyB0aGUgZmlsZS4gKi8K KwlpZiAocGhwX2NoZWNrX29wZW5fYmFzZWRpcihmaWxlbmFtZSBUU1JNTFNfQ0MpIHx8CisJCShQRyhz YWZlX21vZGUpICYmICFwaHBfY2hlY2t1aWQoZmlsZW5hbWUsIG1vZGUsIENIRUNLVUlEX0NIRUNLX01P REVfUEFSQU0pKSkgeworCQlSRVRVUk5fRkFMU0U7CisJfQorCisJLyogSW5pdGlhbGlzZSB0aGUgc3Ry ZWFtIGRhdGEgc3RydWN0dXJlLiAqLworCWRhdGEgPSBlbWFsbG9jKHNpemVvZihwaHBfZGlvX3N0cmVh bV9kYXRhKSk7CisJZGF0YS0+aGFzX3Blcm1zID0gMDsKKwlkYXRhLT5wZXJtcyA9IDA7CisJZGF0YS0+ ZW5kX29mX2ZpbGUgPSAwOworI2lmZGVmIE9fTk9OQkxPQ0sKKwlkYXRhLT5pc19ibG9ja2luZyA9IDE7 CisJZGF0YS0+aGFzX3RpbWVvdXQgPSAwOworCWRhdGEtPnRpbWVvdXQudHZfc2VjID0gMDsKKwlkYXRh LT50aW1lb3V0LnR2X3VzZWMgPSAwOworI2VuZGlmCisKKwlpZiAob3B0aW9ucykgeworCQlkaW9fYXNz b2NfYXJyYXlfZ2V0X2Jhc2ljX29wdGlvbnMob3B0aW9ucywgZGF0YSk7CisJfQorCisJLyogVHJ5IGFu ZCBvcGVuIGEgcmF3IHN0cmVhbS4gKi8KKwlzdHJlYW0gPSBkaW9fcmF3X29wZW5fc3RyZWFtKGZpbGVu YW1lLCBtb2RlLCBkYXRhKTsKKwlpZiAoIXN0cmVhbSkgeworCQllZnJlZShkYXRhKTsKKwkJUkVUVVJO X0ZBTFNFOworCX0KKworCXBocF9zdHJlYW1fdG9fenZhbChzdHJlYW0sIHJldHVybl92YWx1ZSk7Cit9 CisvKiB9fX0gKi8KKworLyoKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBTZXJpYWwgc3RyZWFtIGhhbmRs aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSsKKyovCisKKy8qIHt7eyBkaW9fc3RyZWFtX2ZsdXNoCisgKiBGbHVzaCB0aGUgc3RyZWFt LiAgSWYgdGhlIHN0cmVhbSBpcyByZWFkIG9ubHksIGl0IGZsdXNoZXMgdGhlIHJlYWQKKyAqIHN0cmVh bSwgaWYgaXQgaXMgd3JpdGUgb25seSBpdCBmbHVzaGVzIHRoZSB3cml0ZSwgb3RoZXJ3aXNlIGl0IGZs dXNoZXMKKyAqIGJvdGguCisgKi8KK3N0YXRpYyBpbnQgZGlvX3NlcmlhbF9zdHJlYW1fZmx1c2gocGhw X3N0cmVhbSAqc3RyZWFtIFRTUk1MU19EQykKK3sKKwlwaHBfZGlvX3N0cmVhbV9kYXRhICphYnN0cmFj dCA9IChwaHBfZGlvX3N0cmVhbV9kYXRhKilzdHJlYW0tPmFic3RyYWN0OworCWludCByZXQ7CisKKyNp Zm5kZWYgUEhQX1dJTjMyCisJaWYgKChhYnN0cmFjdC0+ZmxhZ3MgJiBPX1JEV1IpID09IE9fUkRXUikg eworCQlyZXQgPSB0Y2ZsdXNoKGFic3RyYWN0LT5mZCwgVENJT0ZMVVNIKTsKKwl9IGVsc2UgaWYgKChh YnN0cmFjdC0+ZmxhZ3MgJiBPX1dST05MWSkgPT0gT19XUk9OTFkpIHsKKwkJcmV0ID0gdGNmbHVzaChh YnN0cmFjdC0+ZmQsIFRDT0ZMVVNIKTsKKwl9IGVsc2UgaWYgKChhYnN0cmFjdC0+ZmxhZ3MgJiBPX1JE T05MWSkgPT0gT19SRE9OTFkpIHsKKwkJcmV0ID0gdGNmbHVzaChhYnN0cmFjdC0+ZmQsIFRDSUZMVVNI KTsKKwl9CisKKwlpZiAocmV0IDwgMCkgeworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKworCXJldHVy biAxOworfQorLyogfX19ICovCisKKy8qIHt7eyBkaW9fc3RyZWFtX2Nsb3NlCisgKiBDbG9zZSB0aGUg c3RyZWFtLiAgUmVzdG9yZXMgdGhlIHNlcmlhbCBzZXR0aW5ncyB0byB0aGVpciB2YWx1ZSBiZWZvcmUK KyAqIHRoZSBzdHJlYW0gd2FzIG9wZW4uCisgKi8KK3N0YXRpYyBpbnQgZGlvX3NlcmlhbF9zdHJlYW1f Y2xvc2UocGhwX3N0cmVhbSAqc3RyZWFtLCBpbnQgY2xvc2VfaGFuZGxlIFRTUk1MU19EQykKK3sKKwlw aHBfZGlvX3N0cmVhbV9kYXRhICphYnN0cmFjdCA9IChwaHBfZGlvX3N0cmVhbV9kYXRhKilzdHJlYW0t PmFic3RyYWN0OworCWludCByZXQ7CisKKyNpZm5kZWYgUEhQX1dJTjMyCisJZG8geworCQlyZXQgPSB0 Y3NldGF0dHIoYWJzdHJhY3QtPmZkLCBUQ1NBRkxVU0gsICYoYWJzdHJhY3QtPm9sZHRpbykpOworCX0g d2hpbGUgKChyZXQgPCAwKSAmJiAoZXJybm8gPT0gRUlOVFIpKTsKKyNlbmRpZgorCisJaWYgKGNsb3Nl KGFic3RyYWN0LT5mZCkgPCAwKSB7CisJCXJldHVybiAwOworCX0KKworCWVmcmVlKGFic3RyYWN0KTsK KwlyZXR1cm4gMTsKK30KKy8qIH19fSAqLworCitwaHBfc3RyZWFtX29wcyBkaW9fc2VyaWFsX3N0cmVh bV9vcHMgPSB7CisJZGlvX3N0cmVhbV93cml0ZSwKKwlkaW9fc3RyZWFtX3JlYWQsCisJZGlvX3Nlcmlh bF9zdHJlYW1fY2xvc2UsCisJZGlvX3NlcmlhbF9zdHJlYW1fZmx1c2gsCisJImRpbyIsCisJTlVMTCwg Lyogc2VlayAqLworCU5VTEwsIC8qIGNhc3QgKi8KKwlOVUxMLCAvKiBzdGF0ICovCisJZGlvX3N0cmVh bV9zZXRfb3B0aW9uLAorfTsKKworI2lmbmRlZiBQSFBfV0lOMzIKKworLyoge3t7IGRpb19zZXJpYWxf aW5pdAorICogSW5pdGlhbGlzZXMgdGhlIHNlcmlhbCBzZXR0aW5ncyBzdG9yaW5nIHRoZSBvcmlnaW5h bCBzZXR0aW5ncyBiZWZvcmUgaGFuZC4KKyAqLworc3RhdGljIGludCBkaW9fc2VyaWFsX2luaXQocGhw X2Rpb19zdHJlYW1fZGF0YSAqZGF0YSwgc3BlZWRfdCBkYXRhX3JhdGVfaW4sIHNwZWVkX3QgZGF0YV9y YXRlX291dCwKKwkJICAgICAgICAgICAgICAgICAgIGludCBkYXRhX2JpdHMsIGludCBzdG9wX2JpdHMs IGludCBwYXJpdHkpIHsKKwlzdHJ1Y3QgdGVybWlvcyB0aW87CisJaW50IHJldCA9IDA7CisKKwlyZXQg PSB0Y2dldGF0dHIoZGF0YS0+ZmQsICYoZGF0YS0+b2xkdGlvKSk7CisJaWYgKHJldCA8IDApIHsKKwkJ aWYgKChlcnJubyA9PSBFTk9UVFkpIHx8IChlcnJubyA9PSBFTk9ERVYpKSB7CisJCQlwaHBfZXJyb3Jf ZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX1dBUk5JTkcsICJOb3QgYSBzZXJpYWwgcG9ydCBvciB0ZXJt aW5hbCEiKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSB0Y2dldGF0dHIoZGF0YS0+ZmQs ICZ0aW8pOworCWlmIChyZXQgPCAwKSB7CisJCXJldHVybiAwOworCX0KKworCXRpby5jX2lzcGVlZCA9 IGRhdGFfcmF0ZV9pbjsKKwl0aW8uY19vc3BlZWQgPSBkYXRhX3JhdGVfb3V0OworCXRpby5jX2NmbGFn ICY9IH5DU0laRTsKKwl0aW8uY19jZmxhZyB8PSBkYXRhX2JpdHM7CisJdGlvLmNfY2ZsYWcgJj0gfkNT VE9QQjsKKwl0aW8uY19jZmxhZyB8PSBzdG9wX2JpdHM7CisJdGlvLmNfY2ZsYWcgJj0gfihQQVJFTkJ8 UEFST0REKTsKKwl0aW8uY19jZmxhZyB8PSBwYXJpdHk7CisKKwl0aW8uY19jZmxhZyAmPSB+Q1JUU0NU UzsKKwlpZiAoZGF0YS0+cnRzY3RzKSB7CisJCXRpby5jX2NmbGFnIHw9IENSVFNDVFM7CisJfQorCisJ cmV0ID0gdGNzZXRhdHRyKGRhdGEtPmZkLCBUQ1NBRkxVU0gsICZ0aW8pOworCWlmIChyZXQgPCAwKSB7 CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorLyogfX19ICovCisKKyNlbmRpZgorCisv KiB7e3sgZGlvX3Jhd19vcGVuX3N0cmVhbQorICogT3BlbnMgdGhlIHBocF9zdHJlYW0uCisgKi8KK3N0 YXRpYyBwaHBfc3RyZWFtICpkaW9fc2VyaWFsX29wZW5fc3RyZWFtKGNoYXIgKmZpbGVuYW1lLCBjaGFy ICptb2RlLCBwaHBfZGlvX3N0cmVhbV9kYXRhICpkYXRhKSB7CisJc3BlZWRfdCByYXRlX2RlZjsKKwlp bnQgZGF0YV9iaXRzX2RlZjsKKwlpbnQgc3RvcF9iaXRzX2RlZjsKKwlpbnQgcGFyaXR5X2RlZjsKKwor CWRhdGEtPmZsYWdzID0gZGlvX3N0cmVhbV9tb2RlX3RvX2ZsYWdzKG1vZGUpOworCisjaWZkZWYgT19O T05CTE9DSworCWlmICghZGF0YS0+aXNfYmxvY2tpbmcgfHwgZGF0YS0+aGFzX3RpbWVvdXQpIHsKKwkJ ZGF0YS0+ZmxhZ3MgfD0gT19OT05CTE9DSzsKKwl9CisjZW5kaWYKKworCWlmICghZGlvX2RhdGFfcmF0 ZV90b19kZWZpbmUoZGF0YS0+ZGF0YV9yYXRlLCAmcmF0ZV9kZWYpKSB7CisJCXBocF9lcnJvcl9kb2Ny ZWYoTlVMTCBUU1JNTFNfQ0MsIEVfV0FSTklORywgImludmFsaWQgZGF0YV9yYXRlIHZhbHVlICglbGQp IiwgZGF0YS0+ZGF0YV9yYXRlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKCFkaW9fZGF0YV9i aXRzX3RvX2RlZmluZShkYXRhLT5kYXRhX2JpdHMsICZkYXRhX2JpdHNfZGVmKSkgeworCQlwaHBfZXJy b3JfZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX1dBUk5JTkcsICJpbnZhbGlkIGRhdGFfYml0cyB2YWx1 ZSAoJWQpIiwgZGF0YS0+ZGF0YV9iaXRzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKCFkaW9f c3RvcF9iaXRzX3RvX2RlZmluZShkYXRhLT5zdG9wX2JpdHMsICZzdG9wX2JpdHNfZGVmKSkgeworCQlw aHBfZXJyb3JfZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX1dBUk5JTkcsICJpbnZhbGlkIHN0b3BfYml0 cyB2YWx1ZSAoJWQpIiwgZGF0YS0+c3RvcF9iaXRzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYg KCFkaW9fcGFyaXR5X3RvX2RlZmluZShkYXRhLT5wYXJpdHksICZwYXJpdHlfZGVmKSkgeworCQlwaHBf ZXJyb3JfZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX1dBUk5JTkcsICJpbnZhbGlkIHBhcml0eSB2YWx1 ZSAoJWQpIiwgZGF0YS0+cGFyaXR5KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogT3BlbiB0aGUg ZmlsZSBhbmQgaGFuZGxlIGFueSBlcnJvcnMuICovCisJaWYgKGRhdGEtPmhhc19wZXJtcykgeworCQlk YXRhLT5mZCA9IG9wZW4oZmlsZW5hbWUsIGRhdGEtPmZsYWdzLCBkYXRhLT5wZXJtcyk7CisJfSBlbHNl IHsKKwkJZGF0YS0+ZmQgPSBvcGVuKGZpbGVuYW1lLCBkYXRhLT5mbGFncyk7CisJfQorCisJaWYgKGRh dGEtPmZkIDwgMCkgeworCQlzd2l0Y2ggKGVycm5vKSB7CisJCQljYXNlIEVFWElTVDoKKwkJCQlwaHBf ZXJyb3JfZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX1dBUk5JTkcsICJGaWxlIGV4aXN0cyEiKTsKKwkJ CQlyZXR1cm4gTlVMTDsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKyNp Zm5kZWYgUEhQX1dJTjMyCisJaWYgKCFkaW9fc2VyaWFsX2luaXQoZGF0YSwgcmF0ZV9kZWYsIHJhdGVf ZGVmLCBkYXRhX2JpdHNfZGVmLCBzdG9wX2JpdHNfZGVmLCBwYXJpdHlfZGVmKSkgeworCQljbG9zZShk YXRhLT5mZCk7CisJCXJldHVybiBOVUxMOworCX0KKyNlbHNlCisJLyogVE9ETzogV2luZG93cyB2ZXJz aW9uICovCisJcmV0dXJuIE5VTEw7CisjZW5kaWYKKworCXJldHVybiBwaHBfc3RyZWFtX2FsbG9jKCZk aW9fc2VyaWFsX3N0cmVhbV9vcHMsIGRhdGEsIDAsIG1vZGUpOworfQorLyogfX19ICovCisKKy8qIHt7 eyBkaW9fcmF3X2ZvcGVuX3dyYXBwZXIKKyAqIGZvcGVuIGZvciB0aGUgZGlvLnJhdyBzdHJlYW0uCisg Ki8KK3N0YXRpYyBwaHBfc3RyZWFtICpkaW9fc2VyaWFsX2ZvcGVuX3dyYXBwZXIocGhwX3N0cmVhbV93 cmFwcGVyICp3cmFwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICpwYXRoLCBjaGFyICptb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgb3B0aW9ucywgY2hhciAqKm9wZW5lZF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwaHBfc3RyZWFtX2NvbnRleHQgKmNvbnRleHQgU1RSRUFNU19EQyBU U1JNTFNfREMpIHsKKwlwaHBfZGlvX3N0cmVhbV9kYXRhICpkYXRhOworCXBocF9zdHJlYW0gKnN0cmVh bTsKKwljaGFyICpmaWxlbmFtZTsKKworCS8qIENoZWNrIGl0IHdhcyBhY3R1YWxseSBmb3IgdXMgKG5v dCBhIGNvcnJ1cHRlZCBmdW5jdGlvbiBwb2ludGVyCisJICAgc29tZXdoZXJlISkuICovCisJaWYgKHN0 cm5jbXAocGF0aCwgRElPX1NFUklBTF9TVFJFQU1fUFJPVE9DT0wsIHNpemVvZihESU9fU0VSSUFMX1NU UkVBTV9QUk9UT0NPTCkgLSAxKSkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBHZXQgdGhlIGFj dHVhbGx5IGZpbGUgc3lzdGVtIG5hbWUvcGF0aC4gKi8KKwlmaWxlbmFtZSA9IHBhdGggKyBzaXplb2Yo RElPX1NFUklBTF9TVFJFQU1fUFJPVE9DT0wpIC0gMTsKKworCS8qIENoZWNrIHdlIGNhbiBhY3R1YWxs eSBhY2Nlc3MgaXQuICovCisJaWYgKHBocF9jaGVja19vcGVuX2Jhc2VkaXIoZmlsZW5hbWUgVFNSTUxT X0NDKSB8fAorCQkoUEcoc2FmZV9tb2RlKSAmJiAhcGhwX2NoZWNrdWlkKGZpbGVuYW1lLCBtb2RlLCBD SEVDS1VJRF9DSEVDS19NT0RFX1BBUkFNKSkpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogSW5p dGlhbGlzZSB0aGUgc3RyZWFtIGRhdGEgc3RydWN0dXJlLiAqLworCWRhdGEgPSBlbWFsbG9jKHNpemVv ZihwaHBfZGlvX3N0cmVhbV9kYXRhKSk7CisJZGF0YS0+aGFzX3Blcm1zID0gMDsKKwlkYXRhLT5wZXJt cyA9IDA7CisJZGF0YS0+ZW5kX29mX2ZpbGUgPSAwOworI2lmZGVmIE9fTk9OQkxPQ0sKKwlkYXRhLT5p c19ibG9ja2luZyA9IDE7CisJZGF0YS0+aGFzX3RpbWVvdXQgPSAwOworCWRhdGEtPnRpbWVvdXQudHZf c2VjID0gMDsKKwlkYXRhLT50aW1lb3V0LnR2X3VzZWMgPSAwOworI2VuZGlmCisJZGF0YS0+ZGF0YV9y YXRlID0gOTYwMDsKKwlkYXRhLT5kYXRhX2JpdHMgPSA4OworCWRhdGEtPnN0b3BfYml0cyA9IDE7CisJ ZGF0YS0+cGFyaXR5ID0gMDsKKwlkYXRhLT5ydHNjdHMgPSAxOworCisJLyogUGFyc2UgdGhlIGNvbnRl eHQuICovCisJaWYgKGNvbnRleHQpIHsKKwkJZGlvX3N0cmVhbV9jb250ZXh0X2dldF9iYXNpY19vcHRp b25zKGNvbnRleHQsIGRhdGEpOworCQlkaW9fc3RyZWFtX2NvbnRleHRfZ2V0X3NlcmlhbF9vcHRpb25z KGNvbnRleHQsIGRhdGEpOworCX0KKworCS8qIFRyeSBhbmQgb3BlbiBhIHJhdyBzdHJlYW0uICovCisJ c3RyZWFtID0gZGlvX3NlcmlhbF9vcGVuX3N0cmVhbShmaWxlbmFtZSwgbW9kZSwgZGF0YSk7CisJaWYg KCFzdHJlYW0pIHsKKwkJZWZyZWUoZGF0YSk7CisJfQorCisJcmV0dXJuIHN0cmVhbTsKK30KKy8qIH19 fSAqLworCitzdGF0aWMgcGhwX3N0cmVhbV93cmFwcGVyX29wcyBkaW9fc2VyaWFsX3N0cmVhbV93b3Bz ID0geworCWRpb19zZXJpYWxfZm9wZW5fd3JhcHBlciwKKwlOVUxMLCAvKiBzdHJlYW1fY2xvc2UgKi8K KwlOVUxMLCAvKiBzdGF0ICovCisJTlVMTCwgLyogc3RhdF91cmwgKi8KKwlOVUxMLCAvKiBvcGVuZGly ICovCisJRElPX1NFUklBTF9TVFJFQU1fTkFNRQorfTsKKworcGhwX3N0cmVhbV93cmFwcGVyIHBocF9k aW9fc2VyaWFsX3N0cmVhbV93cmFwcGVyID0geworCSZkaW9fc2VyaWFsX3N0cmVhbV93b3BzLAorCU5V TEwsCisJMAorfTsKKworLyoge3t7IHByb3RvIGRpb19zZXJpYWwoc3RyaW5nIGZpbGVuYW1lLCBzdHJp bmcgbW9kZVssIGFycmF5IG9wdGlvbnNdKQorICogT3BlbnMgYSBzZXJpYWwgZGlyZWN0IElPIHN0cmVh bS4KKyAqLworUEhQX0ZVTkNUSU9OKGRpb19zZXJpYWwpIHsKKwl6dmFsICpvcHRpb25zID0gTlVMTDsK KwlwaHBfZGlvX3N0cmVhbV9kYXRhICpkYXRhOworCXBocF9zdHJlYW0gKnN0cmVhbTsKKworCWNoYXIg KmZpbGVuYW1lOworCWludCAgIGZpbGVuYW1lX2xlbjsKKwljaGFyICptb2RlOworCWludCAgIG1vZGVf bGVuOworCisJaWYgKHplbmRfcGFyc2VfcGFyYW1ldGVycyhaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0ND LCAic3N8eiIsICZmaWxlbmFtZSwgJmZpbGVuYW1lX2xlbiwgJm1vZGUsICZtb2RlX2xlbiwgJm9wdGlv bnMpID09IEZBSUxVUkUpIHsKKwkJUkVUVVJOX0ZBTFNFOworCX0KKworCS8qIENoZWNrIHRoZSB0aGly ZCBhcmd1bWVudCBpcyBhbiBhcnJheS4gKi8KKwlpZiAob3B0aW9ucyAmJiAoWl9UWVBFX1Aob3B0aW9u cykgIT0gSVNfQVJSQVkpKSB7CisJCXBocF9lcnJvcl9kb2NyZWYoTlVMTCBUU1JNTFNfQ0MsIEVfV0FS TklORywiZGlvX3NlcmlhbCwgdGhlIHRoaXJkIGFyZ3VtZW50IHNob3VsZCBiZSBhbiBhcnJheSBvZiBv cHRpb25zIik7CisJCVJFVFVSTl9GQUxTRTsKKwl9CisKKwkvKiBDaGVjayB3ZSBjYW4gYWN0dWFsbHkg YWNjZXNzIHRoZSBmaWxlLiAqLworCWlmIChwaHBfY2hlY2tfb3Blbl9iYXNlZGlyKGZpbGVuYW1lIFRT Uk1MU19DQykgfHwKKwkJKFBHKHNhZmVfbW9kZSkgJiYgIXBocF9jaGVja3VpZChmaWxlbmFtZSwgbW9k ZSwgQ0hFQ0tVSURfQ0hFQ0tfTU9ERV9QQVJBTSkpKSB7CisJCVJFVFVSTl9GQUxTRTsKKwl9CisKKwkv KiBJbml0aWFsaXNlIHRoZSBzdHJlYW0gZGF0YSBzdHJ1Y3R1cmUuICovCisJZGF0YSA9IGVtYWxsb2Mo c2l6ZW9mKHBocF9kaW9fc3RyZWFtX2RhdGEpKTsKKwlkYXRhLT5oYXNfcGVybXMgPSAwOworCWRhdGEt PnBlcm1zID0gMDsKKwlkYXRhLT5lbmRfb2ZfZmlsZSA9IDA7CisjaWZkZWYgT19OT05CTE9DSworCWRh dGEtPmlzX2Jsb2NraW5nID0gMTsKKwlkYXRhLT5oYXNfdGltZW91dCA9IDA7CisJZGF0YS0+dGltZW91 dC50dl9zZWMgPSAwOworCWRhdGEtPnRpbWVvdXQudHZfdXNlYyA9IDA7CisjZW5kaWYKKwlkYXRhLT5k YXRhX3JhdGUgPSA5NjAwOworCWRhdGEtPmRhdGFfYml0cyA9IDg7CisJZGF0YS0+c3RvcF9iaXRzID0g MTsKKwlkYXRhLT5wYXJpdHkgPSAwOworCWRhdGEtPnJ0c2N0cyA9IDE7CisKKwlpZiAob3B0aW9ucykg eworCQlkaW9fYXNzb2NfYXJyYXlfZ2V0X2Jhc2ljX29wdGlvbnMob3B0aW9ucywgZGF0YSk7CisJCWRp b19hc3NvY19hcnJheV9nZXRfc2VyaWFsX29wdGlvbnMob3B0aW9ucywgZGF0YSk7CisJfQorCisJLyog VHJ5IGFuZCBvcGVuIGEgcmF3IHN0cmVhbS4gKi8KKwlzdHJlYW0gPSBkaW9fc2VyaWFsX29wZW5fc3Ry ZWFtKGZpbGVuYW1lLCBtb2RlLCBkYXRhKTsKKwlpZiAoIXN0cmVhbSkgeworCQllZnJlZShkYXRhKTsK KwkJUkVUVVJOX0ZBTFNFOworCX0KKworCXBocF9zdHJlYW1fdG9fenZhbChzdHJlYW0sIHJldHVybl92 YWx1ZSk7Cit9CisvKiB9fX0gKi8KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtYmFzaWMt b2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIEVuZDoKKyAqIHZpbTYwMDogZmRtPW1hcmtlcgor ICogdmltOiBzdz00IHRzPTQgbm9ldAorICovCgpNb2RpZmllZDogcGVjbC9kaW8vdHJ1bmsvcGFja2Fn ZS54bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gcGVjbC9kaW8vdHJ1bmsvcGFja2FnZS54bWwJMjAwOS0xMS0yOSAyMTow NDoxMiBVVEMgKHJldiAyOTE0NTYpCisrKyBwZWNsL2Rpby90cnVuay9wYWNrYWdlLnhtbAkyMDA5LTEx LTI5IDIxOjU4OjEyIFVUQyAocmV2IDI5MTQ1NykKQEAgLTE2LDIyICsxNiwxNiBAQAoKICA8L2Rlc2Ny aXB0aW9uPgogIDxsZWFkPgotICA8bmFtZT5TdGVybGluZyBIdWdoZXM8L25hbWU+Ci0gIDx1c2VyPnN0 ZXJsaW5nPC91c2VyPgotICA8ZW1haWw+c3RlcmxpbmdAcGhwLm5ldDwvZW1haWw+CisgIDxuYW1lPk1l bGFuaWUgUmhpYW5uYSBMZXdpczwvbmFtZT4KKyAgPHVzZXI+Y3liZXJzcGljZTwvdXNlcj4KKyAgPGVt YWlsPmN5YmVyc3BpY2VAcGhwLm5ldDwvZW1haWw+CiAgIDxhY3RpdmU+eWVzPC9hY3RpdmU+CiAgPC9s ZWFkPgotIDxsZWFkPgotICA8bmFtZT5BbGFuIEtub3dsZXM8L25hbWU+Ci0gIDx1c2VyPmFsYW5fazwv dXNlcj4KLSAgPGVtYWlsPmFsYW5fa0BwaHAubmV0PC9lbWFpbD4KLSAgPGFjdGl2ZT55ZXM8L2FjdGl2 ZT4KLSA8L2xlYWQ+CiAgPGRhdGU+MjAwOS0xMS0wNTwvZGF0ZT4KICA8dGltZT4xMjo1NjoxNjwvdGlt ZT4KICA8dmVyc2lvbj4KLSAgPHJlbGVhc2U+MC4wLjI8L3JlbGVhc2U+Ci0gIDxhcGk+MC4wLjI8L2Fw aT4KKyAgPHJlbGVhc2U+MC4wLjM8L3JlbGVhc2U+CisgIDxhcGk+MC4wLjM8L2FwaT4KICA8L3ZlcnNp b24+CiAgPHN0YWJpbGl0eT4KICAgPHJlbGVhc2U+YmV0YTwvcmVsZWFzZT4KCk1vZGlmaWVkOiBwZWNs L2Rpby90cnVuay9waHBfZGlvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGVjbC9kaW8vdHJ1bmsvcGhwX2Rpby5oCTIw MDktMTEtMjkgMjE6MDQ6MTIgVVRDIChyZXYgMjkxNDU2KQorKysgcGVjbC9kaW8vdHJ1bmsvcGhwX2Rp by5oCTIwMDktMTEtMjkgMjE6NTg6MTIgVVRDIChyZXYgMjkxNDU3KQpAQCAtMjAsNyArMjAsNyBAQAog ZXh0ZXJuIHplbmRfbW9kdWxlX2VudHJ5IGRpb19tb2R1bGVfZW50cnk7CiAjZGVmaW5lIHBocGV4dF9k aW9fcHRyICZkaW9fbW9kdWxlX2VudHJ5CgotI2RlZmluZSBQSFBfRElPX1ZFUlNJT04gIjAuMS4wLWRl diIKKyNkZWZpbmUgUEhQX0RJT19WRVJTSU9OICIwLjAuMy1kZXYiCgogI2lmZGVmIFBIUF9XSU4zMgog I2RlZmluZSBQSFBfRElPX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKQEAgLTMyLDEyICszMiwxNCBA QAogI2luY2x1ZGUgIlRTUk0uaCIKICNlbmRpZgoKKy8qIFN0YW5kYXJkIG1vZHVsZSBmdW5jdGlvbnMu ICovCiBQSFBfTUlOSVRfRlVOQ1RJT04oZGlvKTsKIFBIUF9NU0hVVERPV05fRlVOQ1RJT04oZGlvKTsK IFBIUF9SSU5JVF9GVU5DVElPTihkaW8pOwogUEhQX1JTSFVURE9XTl9GVU5DVElPTihkaW8pOwogUEhQ X01JTkZPX0ZVTkNUSU9OKGRpbyk7CgorLyogTGVnYWN5IGZ1bmN0aW9ucy4gKi8KIFBIUF9GVU5DVElP TihkaW9fb3Blbik7CiBQSFBfRlVOQ1RJT04oZGlvX3RydW5jYXRlKTsKIFBIUF9GVU5DVElPTihkaW9f c3RhdCk7CkBAIC01Miw2ICs1NCw5IEBACiAJaW50IGZkOwogfSBwaHBfZmRfdDsKCisjaW5jbHVkZSAi cGhwX2Rpb19jb21tb24uaCIKKyNpbmNsdWRlICJwaHBfZGlvX3N0cmVhbV93cmFwcGVycy5oIgorCiAj ZW5kaWYKCgoKQWRkZWQ6IHBlY2wvZGlvL3RydW5rL3BocF9kaW9fY29tbW9uLmgKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g cGVjbC9kaW8vdHJ1bmsvcGhwX2Rpb19jb21tb24uaAkgICAgICAgICAgICAgICAgICAgICAgICAocmV2 IDApCisrKyBwZWNsL2Rpby90cnVuay9waHBfZGlvX2NvbW1vbi5oCTIwMDktMTEtMjkgMjE6NTg6MTIg VVRDIChyZXYgMjkxNDU3KQpAQCAtMCwwICsxLDk0IEBACisvKgorICAgKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8 IFBIUCBWZXJzaW9uIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBDb3B5cmlnaHQgKGMpIDIwMDkgTWVsYW5p ZSBSaGlhbm5hIExld2lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsKKyAgIHwgVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHZlcnNpb24gMy4wIG9mIHRoZSBQ SFAgbGljZW5zZSwgICAgICAgfAorICAgfCB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2Ug aW4gdGhlIGZpbGUgTElDRU5TRSwgYW5kIGlzICAgICAgICB8CisgICB8IGF2YWlsYWJsZSB0aHJvdWdo IHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGUgZm9sbG93aW5nIHVybDogICAgICAgICAgIHwKKyAgIHwg aHR0cDovL3d3dy5waHAubmV0L2xpY2Vuc2UvM18wLnR4dC4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfAorICAgfCBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgUEhQIGxp Y2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8gICB8CisgICB8IG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3Js ZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYSBub3RlIHRvICAgICAgICAgIHwKKyAgIHwgbGljZW5zZUBw aHAubmV0IHNvIHdlIGNhbiBtYWlsIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuICAgICAgICAgICAgICAg fAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IEF1dGhvcjogTWVsYW5pZSBSaGlhbm5hIExld2lzIDxjeWJl cnNwaWNlQHBocC5uZXQ+ICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICovCisK KyNpZm5kZWYgUEhQX0RJT19DT01NT05fSF8KKyNkZWZpbmUgUEhQX0RJT19DT01NT05fSF8KKworI2lu Y2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3Rp bWUuaD4KKworI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgor CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpZm5kZWYgUEhQX1dJTjMyCisjaW5jbHVkZSA8dGVybWlvcy5o PgorI2VuZGlmCisKKyNpbmNsdWRlICJwaHAuaCIKKwordHlwZWRlZiBzdHJ1Y3QgX3BocF9kaW9fc3Ry ZWFtX2RhdGEgeworI2lmbmRlZiBQSFBfV0lOMzIKKwlpbnQgZmQ7CisjZWxzZQorCWludCBmaDsKKyNl bmRpZgorCWludCBmbGFnczsKKwlpbnQgZW5kX29mX2ZpbGU7CisJaW50IGhhc19wZXJtczsKKwltb2Rl X3QgcGVybXM7CisjaWZkZWYgT19OT05CTE9DSworCWludCBpc19ibG9ja2luZzsKKwlpbnQgaGFzX3Rp bWVvdXQ7CisJc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKyNlbmRpZgorCisJLyogU2VyaWFsIG9wdGlv bnMgKi8KKwlsb25nIGRhdGFfcmF0ZTsKKwlpbnQgZGF0YV9iaXRzOworCWludCBzdG9wX2JpdHM7CisJ aW50IHBhcml0eTsKKwlpbnQgcnRzY3RzOworI2lmbmRlZiBQSFBfV0lOMzIKKwlzdHJ1Y3QgdGVybWlv cyBvbGR0aW87CisjZW5kaWYKKworfSBwaHBfZGlvX3N0cmVhbV9kYXRhIDsKKworbG9uZyBkaW9fY29u dmVydF90b19sb25nKHp2YWwgKnZhbCk7CisKK2ludCBkaW9fZGF0YV9yYXRlX3RvX2RlZmluZShsb25n IHJhdGUsIHNwZWVkX3QgKmRlZik7CisKK2ludCBkaW9fZGF0YV9iaXRzX3RvX2RlZmluZShpbnQgYml0 cywgaW50ICpkZWYpOworCitpbnQgZGlvX3N0b3BfYml0c190b19kZWZpbmUoaW50IHN0b3BfYml0cywg aW50ICpkZWYpOworCitpbnQgZGlvX3Bhcml0eV90b19kZWZpbmUoaW50IHBhcml0eSwgaW50ICpkZWYp OworCitpbnQgZGlvX2Fzc29jX2FycmF5X2dldF9iYXNpY19vcHRpb25zKHp2YWwgKm9wdGlvbnMsIHBo cF9kaW9fc3RyZWFtX2RhdGEgKmRhdGEpOworCitpbnQgZGlvX2Fzc29jX2FycmF5X2dldF9zZXJpYWxf b3B0aW9ucyh6dmFsICpvcHRpb25zLCBwaHBfZGlvX3N0cmVhbV9kYXRhICpkYXRhKTsKKworaW50IGRp b19zdHJlYW1fbW9kZV90b19mbGFncyhjb25zdCBjaGFyICptb2RlKTsKKworc2l6ZV90IGRpb19jb21t b25fd3JpdGUocGhwX2Rpb19zdHJlYW1fZGF0YSAqZGF0YSwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qg Y291bnQpOworCitzaXplX3QgZGlvX2NvbW1vbl9yZWFkKHBocF9kaW9fc3RyZWFtX2RhdGEgKmRhdGEs IGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKKworI2VuZGlmIC8qIFBIUF9ESU9fQ09NTU9O X0hfICovCisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWJhc2ljLW9mZnNldDogNAorICog dGFiLXdpZHRoOiA0CisgKiBFbmQ6CisgKiB2aW02MDA6IGZkbT1tYXJrZXIKKyAqIHZpbTogc3c9NCB0 cz00IG5vZXQKKyAqLwoKQWRkZWQ6IHBlY2wvZGlvL3RydW5rL3BocF9kaW9fc3RyZWFtX3dyYXBwZXJz LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gcGVjbC9kaW8vdHJ1bmsvcGhwX2Rpb19zdHJlYW1fd3JhcHBlcnMuaAkgICAg ICAgICAgICAgICAgICAgICAgICAocmV2IDApCisrKyBwZWNsL2Rpby90cnVuay9waHBfZGlvX3N0cmVh bV93cmFwcGVycy5oCTIwMDktMTEtMjkgMjE6NTg6MTIgVVRDIChyZXYgMjkxNDU3KQpAQCAtMCwwICsx LDQ0IEBACisvKgorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IFBIUCBWZXJzaW9uIDUgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t KworICAgfCBDb3B5cmlnaHQgKGMpIDIwMDkgTWVsYW5pZSBSaGlhbm5hIExld2lzICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgVGhpcyBzb3VyY2UgZmlsZSBp cyBzdWJqZWN0IHRvIHZlcnNpb24gMy4wIG9mIHRoZSBQSFAgbGljZW5zZSwgICAgICAgfAorICAgfCB0 aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRSwgYW5kIGlz ICAgICAgICB8CisgICB8IGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGUg Zm9sbG93aW5nIHVybDogICAgICAgICAgIHwKKyAgIHwgaHR0cDovL3d3dy5waHAubmV0L2xpY2Vuc2Uv M18wLnR4dC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCBJZiB5b3UgZGlk IG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgUEhQIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8gICB8 CisgICB8IG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYSBu b3RlIHRvICAgICAgICAgIHwKKyAgIHwgbGljZW5zZUBwaHAubmV0IHNvIHdlIGNhbiBtYWlsIHlvdSBh IGNvcHkgaW1tZWRpYXRlbHkuICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IEF1 dGhvcjogTWVsYW5pZSBSaGlhbm5hIExld2lzIDxjeWJlcnNwaWNlQHBocC5uZXQ+ICAgICAgICAgICAg ICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICovCisKKyNpZm5kZWYgUEhQX0RJT19TVFJFQU1fV1JB UFBFUlNfSF8KKyNkZWZpbmUgUEhQX0RJT19TVFJFQU1fV1JBUFBFUlNfSF8KKworI2RlZmluZSBESU9f UkFXX1NUUkVBTV9OQU1FICAgICAgICAgImRpby5yYXciCisjZGVmaW5lIERJT19SQVdfU1RSRUFNX1BS T1RPQ09MICAgICAiZGlvLnJhdzovLyIKKyNkZWZpbmUgRElPX1NFUklBTF9TVFJFQU1fTkFNRSAgICAg ICJkaW8uc2VyaWFsIgorI2RlZmluZSBESU9fU0VSSUFMX1NUUkVBTV9QUk9UT0NPTCAgImRpby5zZXJp YWw6Ly8iCisKK2V4dGVybiBwaHBfc3RyZWFtX3dyYXBwZXIgcGhwX2Rpb19yYXdfc3RyZWFtX3dyYXBw ZXI7CisKK1BIUF9GVU5DVElPTihkaW9fcmF3KTsKKworZXh0ZXJuIHBocF9zdHJlYW1fd3JhcHBlciBw aHBfZGlvX3NlcmlhbF9zdHJlYW1fd3JhcHBlcjsKKworUEhQX0ZVTkNUSU9OKGRpb19zZXJpYWwpOwor CisjZW5kaWYgLyogUEhQX0RJT19TVFJFQU1fV1JBUFBFUlNfSF8gKi8KKworLyoKKyAqIExvY2FsIHZh cmlhYmxlczoKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIEVuZDoKKyAq IHZpbTYwMDogZmRtPW1hcmtlcgorICogdmltOiBzdz00IHRzPTQgbm9ldAorICovCgpNb2RpZmllZDog cGVjbC9kaW8vdHJ1bmsvdGVzdHMvMDAxLnBocHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGVjbC9kaW8vdHJ1bmsvdGVz dHMvMDAxLnBocHQJMjAwOS0xMS0yOSAyMTowNDoxMiBVVEMgKHJldiAyOTE0NTYpCisrKyBwZWNsL2Rp by90cnVuay90ZXN0cy8wMDEucGhwdAkyMDA5LTExLTI5IDIxOjU4OjEyIFVUQyAocmV2IDI5MTQ1NykK QEAgLTEsMjEgKzEsMTUgQEAKIC0tVEVTVC0tCi1DaGVjayBmb3IgZGlvIHByZXNlbmNlCitUZXN0IGRp byBsZWdhY3kgb3BlbgogLS1TS0lQSUYtLQogPD9waHAgaWYgKCFleHRlbnNpb25fbG9hZGVkKCJkaW8i KSkgcHJpbnQgInNraXAiOyA/PgogLS1GSUxFLS0KIDw/cGhwCi1lY2hvICJkaW8gZXh0ZW5zaW9uIGlz IGF2YWlsYWJsZSI7Ci0vKgotCXlvdSBjYW4gYWRkIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIHlvdXIgZXh0 ZW5zaW9uIGhlcmUKLQotICB0aGUgb3V0cHV0IG9mIHlvdXIgdGVzdCBjb2RlIGhhcyB0byBiZSBlcXVh bCB0byB0aGUKLSAgdGV4dCBpbiB0aGUgLS1FWFBFQ1QtLSBzZWN0aW9uIGJlbG93IGZvciB0aGUgdGVz dHMKLSAgdG8gcGFzcywgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgb3V0cHV0IGFuZCB0aGUKLSAgZXhw ZWN0ZWQgdGV4dCBhcmUgaW50ZXJwcmV0ZWQgYXMgZmFpbHVyZQotCi0Jc2VlIHBocDUvdGVzdHMvUkVB RE1FIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uCi0gIHdyaXRpbmcgcmVncmVzc2lvbiB0ZXN0cwot Ki8KKwkkZiA9IGRpb19vcGVuKCIvZGV2L251bGwiLE9fUkRPTkxZKTsKKwlpZiAoJGYpIHsKKwkJZWNo byAiTGVnYWN5IG9wZW4gcGFzc2VkIjsKKwl9IGVsc2UgeworCQllY2hvICJMZWdhY3kgb3BlbiBmYWls ZWQiOworCX0KID8+CiAtLUVYUEVDVC0tCi1kaW8gZXh0ZW5zaW9uIGlzIGF2YWlsYWJsZQpcIE5vIG5l d2xpbmUgYXQgZW5kIG9mIGZpbGUKK0xlZ2FjeSBvcGVuIHBhc3NlZAoKQWRkZWQ6IHBlY2wvZGlvL3Ry dW5rL3Rlc3RzL2Rpb19yYXdfc3RyZWFtXzAwMS5waHB0Cj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBlY2wvZGlvL3RydW5r L3Rlc3RzL2Rpb19yYXdfc3RyZWFtXzAwMS5waHB0CSAgICAgICAgICAgICAgICAgICAgICAgIChyZXYg MCkKKysrIHBlY2wvZGlvL3RydW5rL3Rlc3RzL2Rpb19yYXdfc3RyZWFtXzAwMS5waHB0CTIwMDktMTEt MjkgMjE6NTg6MTIgVVRDIChyZXYgMjkxNDU3KQpAQCAtMCwwICsxLDIzIEBACistLVRFU1QtLQorVGVz dCBkaW8gcmF3IHN0cmVhbSBvcGVuCistLVNLSVBJRi0tCis8P3BocCBpZiAoIWV4dGVuc2lvbl9sb2Fk ZWQoImRpbyIpKSBwcmludCAic2tpcCI7ID8+CistLUZJTEUtLQorPD9waHAKKwkkb3N0eXBlID0gIndp bmRvd3MiOworCWlmIChzaGVsbF9leGVjKCJ3aGljaCB1bmFtZSIpKSB7CisJCSRvc3R5cGUgPSBzaGVs bF9leGVjKCJ1bmFtZSIpOworCX0KKwlpZiAoJG9zdHlwZSAhPSAid2luZG93cyIpIHsKKwkJJGZpbGVu YW1lID0gImRpby5yYXc6Ly8vZGV2L251bGwiOworCX0gZWxzZSB7CisJCSRmaWxlbmFtZSA9ICJkaW8u cmF3Oi8vXFxEZXZpY2VcXE51bGwiOworCX0KKwkkZiA9IGZvcGVuKCRmaWxlbmFtZSwgInIrIik7CisJ aWYgKCRmKSB7CisJCWVjaG8gIlJhdyBvcGVuIHBhc3NlZCI7CisJCWZjbG9zZSgkZik7CisJfQorPz4K Ky0tRVhQRUNULS0KK1JhdyBvcGVuIHBhc3NlZAoKQWRkZWQ6IHBlY2wvZGlvL3RydW5rL3Rlc3RzL2Rp b19yYXdfc3RyZWFtXzAwMi5waHB0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBlY2wvZGlvL3RydW5rL3Rlc3RzL2Rpb19y YXdfc3RyZWFtXzAwMi5waHB0CSAgICAgICAgICAgICAgICAgICAgICAgIChyZXYgMCkKKysrIHBlY2wv ZGlvL3RydW5rL3Rlc3RzL2Rpb19yYXdfc3RyZWFtXzAwMi5waHB0CTIwMDktMTEtMjkgMjE6NTg6MTIg VVRDIChyZXYgMjkxNDU3KQpAQCAtMCwwICsxLDI0IEBACistLVRFU1QtLQorVGVzdCBkaW8gcmF3IHN0 cmVhbSBjbG9zZQorLS1TS0lQSUYtLQorPD9waHAgaWYgKCFleHRlbnNpb25fbG9hZGVkKCJkaW8iKSkg cHJpbnQgInNraXAiOyA/PgorLS1GSUxFLS0KKzw/cGhwCisJJG9zdHlwZSA9ICJ3aW5kb3dzIjsKKwlp ZiAoc2hlbGxfZXhlYygid2hpY2ggdW5hbWUiKSkgeworCQkkb3N0eXBlID0gc2hlbGxfZXhlYygidW5h bWUiKTsKKwl9CisJaWYgKCRvc3R5cGUgIT0gIndpbmRvd3MiKSB7CisJCSRmaWxlbmFtZSA9ICJkaW8u cmF3Oi8vL2Rldi9udWxsIjsKKwl9IGVsc2UgeworCQkkZmlsZW5hbWUgPSAiZGlvLnJhdzovL1xcRGV2 aWNlXFxOdWxsIjsKKwl9CisJJGYgPSBmb3BlbigkZmlsZW5hbWUsICJyKyIpOworCWlmICgkZikgewor CQlpZiAoZmNsb3NlKCRmKSkgeworCQkJZWNobyAiUmF3IGNsb3NlIHBhc3NlZCI7CisJCX0KKwl9Cis/ PgorLS1FWFBFQ1QtLQorUmF3IGNsb3NlIHBhc3NlZAoKQWRkZWQ6IHBlY2wvZGlvL3RydW5rL3Rlc3Rz L2Rpb19yYXdfc3RyZWFtXzAwMy5waHB0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBlY2wvZGlvL3RydW5rL3Rlc3RzL2Rp b19yYXdfc3RyZWFtXzAwMy5waHB0CSAgICAgICAgICAgICAgICAgICAgICAgIChyZXYgMCkKKysrIHBl Y2wvZGlvL3RydW5rL3Rlc3RzL2Rpb19yYXdfc3RyZWFtXzAwMy5waHB0CTIwMDktMTEtMjkgMjE6NTg6 MTIgVVRDIChyZXYgMjkxNDU3KQpAQCAtMCwwICsxLDI2IEBACistLVRFU1QtLQorVGVzdCBkaW8gcmF3 IHJlYWQKKy0tU0tJUElGLS0KKzw/cGhwIGlmICghZXh0ZW5zaW9uX2xvYWRlZCgiZGlvIikpIHByaW50 ICJza2lwIjsgPz4KKy0tRklMRS0tCis8P3BocAorCSRvc3R5cGUgPSAid2luZG93cyI7CisJaWYgKHNo ZWxsX2V4ZWMoIndoaWNoIHVuYW1lIikpIHsKKwkJJG9zdHlwZSA9IHNoZWxsX2V4ZWMoInVuYW1lIik7 CisJfQorCWlmICgkb3N0eXBlICE9ICJ3aW5kb3dzIikgeworCQkkZmlsZW5hbWUgPSAiZGlvLnJhdzov Ly9kZXYvemVybyI7CisJfSBlbHNlIHsKKwkJJGZpbGVuYW1lID0gImRpby5yYXc6Ly9cXERldmljZVxc TnVsbCI7CisJfQorCSRmID0gZm9wZW4oJGZpbGVuYW1lLCAicisiKTsKKwlpZiAoJGYpIHsKKwkJJGRh dGEgPSBmcmVhZCgkZiwgMjA0OCk7CisJCWlmICgkZGF0YSAmJiAoc3RybGVuKCRkYXRhKSA9PSAyMDQ4 KSkgeworCQkJZWNobyAiUmF3IHJlYWQgcGFzc2VkIjsKKwkJfQorCQlmY2xvc2UoJGYpOworCX0KKz8+ CistLUVYUEVDVC0tCitSYXcgcmVhZCBwYXNzZWQKCkFkZGVkOiBwZWNsL2Rpby90cnVuay90ZXN0cy9k aW9fcmF3X3N0cmVhbV8wMDQucGhwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwZWNsL2Rpby90cnVuay90ZXN0cy9kaW9f cmF3X3N0cmVhbV8wMDQucGhwdAkgICAgICAgICAgICAgICAgICAgICAgICAocmV2IDApCisrKyBwZWNs L2Rpby90cnVuay90ZXN0cy9kaW9fcmF3X3N0cmVhbV8wMDQucGhwdAkyMDA5LTExLTI5IDIxOjU4OjEy IFVUQyAocmV2IDI5MTQ1NykKQEAgLTAsMCArMSwyNiBAQAorLS1URVNULS0KK1Rlc3QgZGlvIHJhdyBz dHJlYW0gd3JpdGUKKy0tU0tJUElGLS0KKzw/cGhwIGlmICghZXh0ZW5zaW9uX2xvYWRlZCgiZGlvIikp IHByaW50ICJza2lwIjsgPz4KKy0tRklMRS0tCis8P3BocAorCSRvc3R5cGUgPSAid2luZG93cyI7CisJ aWYgKHNoZWxsX2V4ZWMoIndoaWNoIHVuYW1lIikpIHsKKwkJJG9zdHlwZSA9IHNoZWxsX2V4ZWMoInVu YW1lIik7CisJfQorCWlmICgkb3N0eXBlICE9ICJ3aW5kb3dzIikgeworCQkkZmlsZW5hbWUgPSAiZGlv LnJhdzovLy9kZXYvbnVsbCI7CisJfSBlbHNlIHsKKwkJJGZpbGVuYW1lID0gImRpby5yYXc6Ly9cXERl dmljZVxcTnVsbCI7CisJfQorCSRmID0gZm9wZW4oJGZpbGVuYW1lLCAicisiKTsKKwlpZiAoJGYpIHsK KwkJJGRhdGEgPSBzdHJfcmVwZWF0KCIrIiwgMjA0OCk7CisJCWlmIChmd3JpdGUoJGYsICRkYXRhKSkg eworCQkJZWNobyAiUmF3IHdyaXRlIHBhc3NlZCI7CisJCX0KKwkJZmNsb3NlKCRmKTsKKwl9Cis/Pgor LS1FWFBFQ1QtLQorUmF3IHdyaXRlIHBhc3NlZAoKQWRkZWQ6IHBlY2wvZGlvL3RydW5rL3Rlc3RzL2Rp b19yYXdfc3RyZWFtXzAwNS5waHB0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBlY2wvZGlvL3RydW5rL3Rlc3RzL2Rpb19y YXdfc3RyZWFtXzAwNS5waHB0CSAgICAgICAgICAgICAgICAgICAgICAgIChyZXYgMCkKKysrIHBlY2wv ZGlvL3RydW5rL3Rlc3RzL2Rpb19yYXdfc3RyZWFtXzAwNS5waHB0CTIwMDktMTEtMjkgMjE6NTg6MTIg VVRDIChyZXYgMjkxNDU3KQpAQCAtMCwwICsxLDI1IEBACistLVRFU1QtLQorVGVzdCBkaW8gcmF3IHN0 cmVhbSBlbmQgb2YgZmlsZQorLS1TS0lQSUYtLQorPD9waHAgaWYgKCFleHRlbnNpb25fbG9hZGVkKCJk aW8iKSkgcHJpbnQgInNraXAiOyA/PgorLS1GSUxFLS0KKzw/cGhwCisJJG9zdHlwZSA9ICJ3aW5kb3dz IjsKKwlpZiAoc2hlbGxfZXhlYygid2hpY2ggdW5hbWUiKSkgeworCQkkb3N0eXBlID0gc2hlbGxfZXhl YygidW5hbWUiKTsKKwl9CisJaWYgKCRvc3R5cGUgIT0gIndpbmRvd3MiKSB7CisJCSRmaWxlbmFtZSA9 ICJkaW8ucmF3Oi8vL2Rldi9udWxsIjsKKwl9IGVsc2UgeworCQkkZmlsZW5hbWUgPSAiZGlvLnJhdzov L1xcRGV2aWNlXFxOdWxsIjsKKwl9CisJJGYgPSBmb3BlbigkZmlsZW5hbWUsICJyKyIpOworCWlmICgk ZikgeworCQlpZiAoIWZlb2YoJGYpKSB7CisJCQllY2hvICJSYXcgZW5kIG9mIGZpbGUgcGFzc2VkIjsK KwkJfQorCQlmY2xvc2UoJGYpOworCX0KKz8+CistLUVYUEVDVC0tCitSYXcgZW5kIG9mIGZpbGUgcGFz c2VkCgpBZGRlZDogcGVjbC9kaW8vdHJ1bmsvdGVzdHMvZGlvX3Jhd19zdHJlYW1fMDA2LnBocHQKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gcGVjbC9kaW8vdHJ1bmsvdGVzdHMvZGlvX3Jhd19zdHJlYW1fMDA2LnBocHQJICAgICAg ICAgICAgICAgICAgICAgICAgKHJldiAwKQorKysgcGVjbC9kaW8vdHJ1bmsvdGVzdHMvZGlvX3Jhd19z dHJlYW1fMDA2LnBocHQJMjAwOS0xMS0yOSAyMTo1ODoxMiBVVEMgKHJldiAyOTE0NTcpCkBAIC0wLDAg KzEsMjUgQEAKKy0tVEVTVC0tCitUZXN0IGRpbyByYXcgc3RyZWFtIHNldCBibG9ja2luZworLS1TS0lQ SUYtLQorPD9waHAgaWYgKCFleHRlbnNpb25fbG9hZGVkKCJkaW8iKSkgcHJpbnQgInNraXAiOyA/Pgor LS1GSUxFLS0KKzw/cGhwCisJJG9zdHlwZSA9ICJ3aW5kb3dzIjsKKwlpZiAoc2hlbGxfZXhlYygid2hp Y2ggdW5hbWUiKSkgeworCQkkb3N0eXBlID0gc2hlbGxfZXhlYygidW5hbWUiKTsKKwl9CisJaWYgKCRv c3R5cGUgIT0gIndpbmRvd3MiKSB7CisJCSRmaWxlbmFtZSA9ICJkaW8ucmF3Oi8vL2Rldi9udWxsIjsK Kwl9IGVsc2UgeworCQkkZmlsZW5hbWUgPSAiZGlvLnJhdzovL1xcRGV2aWNlXFxOdWxsIjsKKwl9CisJ JGYgPSBmb3BlbigkZmlsZW5hbWUsICJyKyIpOworCWlmICgkZikgeworCQlpZiAoc3RyZWFtX3NldF9i bG9ja2luZygkZiwgMSkpIHsKKwkJCWVjaG8gIlNldCBibG9ja2luZyBwYXNzZWQiOworCQl9CisJCWZj bG9zZSgkZik7CisJfQorPz4KKy0tRVhQRUNULS0KK1NldCBibG9ja2luZyBwYXNzZWQKCkFkZGVkOiBw ZWNsL2Rpby90cnVuay90ZXN0cy9kaW9fcmF3X3N0cmVhbV8wMDcucGhwdAo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwZWNs L2Rpby90cnVuay90ZXN0cy9kaW9fcmF3X3N0cmVhbV8wMDcucGhwdAkgICAgICAgICAgICAgICAgICAg ICAgICAocmV2IDApCisrKyBwZWNsL2Rpby90cnVuay90ZXN0cy9kaW9fcmF3X3N0cmVhbV8wMDcucGhw dAkyMDA5LTExLTI5IDIxOjU4OjEyIFVUQyAocmV2IDI5MTQ1NykKQEAgLTAsMCArMSwyMyBAQAorLS1U RVNULS0KK1Rlc3QgZGlvX3JhdygpIGNhbGwKKy0tU0tJUElGLS0KKzw/cGhwIGlmICghZXh0ZW5zaW9u X2xvYWRlZCgiZGlvIikpIHByaW50ICJza2lwIjsgPz4KKy0tRklMRS0tCis8P3BocAorCSRvc3R5cGUg PSAid2luZG93cyI7CisJaWYgKHNoZWxsX2V4ZWMoIndoaWNoIHVuYW1lIikpIHsKKwkJJG9zdHlwZSA9 IHNoZWxsX2V4ZWMoInVuYW1lIik7CisJfQorCWlmICgkb3N0eXBlICE9ICJ3aW5kb3dzIikgeworCQkk ZmlsZW5hbWUgPSAiL2Rldi9udWxsIjsKKwl9IGVsc2UgeworCQkkZmlsZW5hbWUgPSAiXFxEZXZpY2Vc XE51bGwiOworCX0KKwkkZiA9IGRpb19yYXcoJGZpbGVuYW1lLCAicisiKTsKKwlpZiAoJGYpIHsKKwkJ ZWNobyAiZGlvX3JhdyBwYXNzZWQiOworCQlmY2xvc2UoJGYpOworCX0KKz8+CistLUVYUEVDVC0tCitk aW9fcmF3IHBhc3NlZAo= --345a6ba7f55918e8e9a66e48b8d17a270406d57e-- |
cybersp...@php.net (=?utf-8?q?Melanie_Rhianna_Lewis?=) 11/29/2009 9:58:12 PM |
note 97095 added to soapclient.soapclient
note 97094 added to function.sqlite-changes
note 97093 added to function.sqlite-changes
note 97092 added to ref.xmlrpc
note 97091 added to function.var-export