From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH v2] tools/tests: add xenstore testing framework Date: Thu, 19 Jan 2017 08:18:53 +0100 Message-ID: <20170119071853.18623-1-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cU6zs-0006G9-Bb for xen-devel@lists.xenproject.org; Thu, 19 Jan 2017 07:19:00 +0000 List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Juergen Gross , wei.liu2@citrix.com, ian.jackson@eu.citrix.com List-Id: xen-devel@lists.xenproject.org QWRkIHRvb2xzL3Rlc3RzL3hlbnN0b3JlIGZvciBhIGZyYW1ld29yayB0byBkbyB0ZXN0cyBvZiB4 ZW5zdG9yZS4KVGhlIGFpbSBpcyB0byB0ZXN0IGZvciBjb3JyZWN0bmVzcyBhbmQgcGVyZm9ybWFu Y2UuCgpBZGQgYSB0ZXN0IHByb2dyYW0gY29udGFpbmluZyBzb21lIHRlc3RzIG1lYW50IHRvIGJl IHJ1biBhZ2FpbnN0IGFueQp4ZW5zdG9yZSBpbXBsZW1lbnRhdGlvbiAoeGVuc3RvcmVkLCBveGVu c3RvcmVkLCB4ZW5zdG9yZS1zdHViZG9tKS4KCkl0IGlzIHVzaW5nIGxpYnhlbnN0b3JlIGZvciBh Y2Nlc3MgdG8geGVuc3RvcmUgYW5kIHN1cHBvcnRzIG11bHRpcGxlCnRlc3RzIHRvIGJlIGVpdGhl ciBzZWxlY3RlZCBhbGwgb3IgaW5kaXZpZHVhbGx5LiBBbGwgdGVzdHMgYXJlIHVzaW5nCi9sb2Nh bC9kb21haW4vPG93bi1kb21pZD4veGVuc3RvcmUtdGVzdC88cGlkPiBhcyBiYXNlIGZvciBkb2lu ZyB0aGUKdGVzdHMuIFRoaXMgYWxsb3dzIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgcHJvZ3Jh bSB0byBydW4gaW4KcGFyYWxsZWwuCgpTaWduZWQtb2ZmLWJ5OiBKdWVyZ2VuIEdyb3NzIDxqZ3Jv c3NAc3VzZS5jb20+Ci0tLQpWMjogY29ycmVjdGVkIHJlYWQvd3JpdGUgMzAwMCB0ZXN0IHRhYmxl IGVudHJpZXMKICAgIGNvZGluZyBzdHlsZQogICAgcmVtb3ZlIHhlbnN0b3JlLXRlc3Qgbm9kZSBp ZiBlbXB0eSBhdCBleGl0Ci0tLQogLmdpdGlnbm9yZSAgICAgICAgICAgICAgICAgICAgIHwgICAx ICsKIHRvb2xzL3Rlc3RzL01ha2VmaWxlICAgICAgICAgICB8ICAgMSArCiB0b29scy90ZXN0cy94 ZW5zdG9yZS9NYWtlZmlsZSAgfCAgMjcgKysrCiB0b29scy90ZXN0cy94ZW5zdG9yZS94cy10ZXN0 LmMgfCA1MzYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDQgZmls ZXMgY2hhbmdlZCwgNTY1IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90 ZXN0cy94ZW5zdG9yZS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3RzL3hl bnN0b3JlL3hzLXRlc3QuYwoKZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmlu ZGV4IDc2ODk1OTYuLmQ5OTgyZjYgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGln bm9yZQpAQCAtMjEyLDYgKzIxMiw3IEBAIHRvb2xzL3Rlc3RzL3g4Nl9lbXVsYXRvci9ibG93Zmlz aC5oCiB0b29scy90ZXN0cy94ODZfZW11bGF0b3IvdGVzdF94ODZfZW11bGF0b3IKIHRvb2xzL3Rl c3RzL3g4Nl9lbXVsYXRvci94ODZfZW11bGF0ZQogdG9vbHMvdGVzdHMveGVuLWFjY2Vzcy94ZW4t YWNjZXNzCit0b29scy90ZXN0cy94ZW5zdG9yZS94cy10ZXN0CiB0b29scy90ZXN0cy9yZWdyZXNz aW9uL2luc3RhbGxlZC8qCiB0b29scy90ZXN0cy9yZWdyZXNzaW9uL2J1aWxkLyoKIHRvb2xzL3Rl c3RzL3JlZ3Jlc3Npb24vZG93bmxvYWRzLyoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RzL01ha2Vm aWxlIGIvdG9vbHMvdGVzdHMvTWFrZWZpbGUKaW5kZXggYWRlYjEyMC4uNjM5Nzc2MSAxMDA2NDQK LS0tIGEvdG9vbHMvdGVzdHMvTWFrZWZpbGUKKysrIGIvdG9vbHMvdGVzdHMvTWFrZWZpbGUKQEAg LTEyLDYgKzEyLDcgQEAgU1VCRElSUy15ICs9IHJlZ3Jlc3Npb24KIGVuZGlmCiBTVUJESVJTLSQo Q09ORklHX1g4NikgKz0geDg2X2VtdWxhdG9yCiBTVUJESVJTLXkgKz0geGVuLWFjY2VzcworU1VC RElSUy15ICs9IHhlbnN0b3JlCiAKIC5QSE9OWTogYWxsIGNsZWFuIGluc3RhbGwgZGlzdGNsZWFu CiBhbGwgY2xlYW4gZGlzdGNsZWFuOiAlOiBzdWJkaXJzLSUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rl c3RzL3hlbnN0b3JlL01ha2VmaWxlIGIvdG9vbHMvdGVzdHMveGVuc3RvcmUvTWFrZWZpbGUKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM4NWY5OAotLS0gL2Rldi9udWxsCisr KyBiL3Rvb2xzL3Rlc3RzL3hlbnN0b3JlL01ha2VmaWxlCkBAIC0wLDAgKzEsMjcgQEAKK1hFTl9S T09UPSQoQ1VSRElSKS8uLi8uLi8uLgoraW5jbHVkZSAkKFhFTl9ST09UKS90b29scy9SdWxlcy5t aworCitDRkxBR1MgKz0gLVdlcnJvcgorCitDRkxBR1MgKz0gJChDRkxBR1NfbGlieGVuc3RvcmUp CisKK1RBUkdFVFMteSA6PSB4cy10ZXN0CitUQVJHRVRTIDo9ICQoVEFSR0VUUy15KQorCisuUEhP Tlk6IGFsbAorYWxsOiBidWlsZAorCisuUEhPTlk6IGJ1aWxkCitidWlsZDogJChUQVJHRVRTKQor CisuUEhPTlk6IGNsZWFuCitjbGVhbjoKKwkkKFJNKSAqLm8gJChUQVJHRVRTKSAqfiAkKERFUFMp CisKKy5QSE9OWTogZGlzdGNsZWFuCitkaXN0Y2xlYW46IGNsZWFuCisKK3hzLXRlc3Q6IHhzLXRl c3QubyBNYWtlZmlsZQorCSQoQ0MpIC1vICRAICQ8ICQoTERGTEFHUykgJChMRExJQlNfbGlieGVu c3RvcmUpCisKKy1pbmNsdWRlICQoREVQUykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RzL3hlbnN0 b3JlL3hzLXRlc3QuYyBiL3Rvb2xzL3Rlc3RzL3hlbnN0b3JlL3hzLXRlc3QuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjVmZTU1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9v bHMvdGVzdHMveGVuc3RvcmUveHMtdGVzdC5jCkBAIC0wLDAgKzEsNTM2IEBACisvKgorICogeHMt dGVzdC5jCisgKgorICogRG8gWGVuc3RvcmUgdGVzdHMuCisgKgorICogQ29weXJpZ2h0IChDKSAy MDE2ICBKdWVyZ2VuIEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+LAorICogICAgICAgICAgICAgICAg ICAgICBTVVNFIExpbnV4IEdtYkgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl IHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu c2UsIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW07IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KKyAqLworCisjZGVmaW5lIF9HTlVfU09VUkNFCisjaW5jbHVkZSA8Z2V0b3B0Lmg+Cisj aW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3Rk aW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRl IDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8eGVuc3RvcmUuaD4KKwor I2RlZmluZSBURVNUX1BBVEggInhlbnN0b3JlLXRlc3QiCisjZGVmaW5lIEFSUkFZX1NJWkUoYSkg KHNpemVvZihhKSAvIHNpemVvZihhWzBdKSkKKyNkZWZpbmUgV1JJVEVfQlVGRkVSU19OICAgIDEw CisjZGVmaW5lIFdSSVRFX0JVRkZFUlNfU0laRSA0MDAwCisjZGVmaW5lIE1BWF9UQV9MT09QUyAg ICAgICAxMDAKKworc3RydWN0IHRlc3QgeworICAgIGNoYXIgKm5hbWU7CisgICAgaW50ICgqZnVu Y19pbml0KSh1aW50cHRyX3QgcGFyKTsKKyAgICBpbnQgKCpmdW5jKSh1aW50cHRyX3QgcGFyKTsK KyAgICBpbnQgKCpmdW5jX2RlaW5pdCkodWludHB0cl90IHBhcik7CisgICAgdWludHB0cl90IHBh cjsKKyAgICBjaGFyICpkZXNjcjsKK307CisKK3N0YXRpYyBzdHJ1Y3QgeHNfaGFuZGxlICp4c2g7 CitzdGF0aWMgY2hhciAqcGF0aDsKK3N0YXRpYyBjaGFyICpwYXRoc1tXUklURV9CVUZGRVJTX05d Oworc3RhdGljIGNoYXIgd3JpdGVfYnVmZmVyc1tXUklURV9CVUZGRVJTX05dW1dSSVRFX0JVRkZF UlNfU0laRV07CitzdGF0aWMgaW50IHRhX2xvb3BzOworCitzdGF0aWMgc3RydWN0IG9wdGlvbiBv cHRpb25zW10gPSB7CisgICAgeyAibGlzdC10ZXN0cyIsIDAsIE5VTEwsICdsJyB9LAorICAgIHsg InRlc3QiLCAxLCBOVUxMLCAndCcgfSwKKyAgICB7ICJyYW5kb20iLCAxLCBOVUxMLCAncicgfSwK KyAgICB7ICJoZWxwIiwgMCwgTlVMTCwgJ2gnIH0sCisgICAgeyAiaXRlcmF0aW9ucyIsIDEsIE5V TEwsICdpJyB9LAorICAgIHsgTlVMTCwgMCwgTlVMTCwgMCB9Cit9OworCitzdGF0aWMgaW50IGNh bGxfdGVzdChzdHJ1Y3QgdGVzdCAqdHN0LCBpbnQgaXRlcnMsIGJvb2wgbm9fY2xvY2spCit7Cisg ICAgY2hhciAqc3RhZ2UgPSAiPyI7CisgICAgc3RydWN0IHRpbWVzcGVjIHRwMSwgdHAyOworICAg IHVpbnQ2NF90IG5zZWMsIG5zZWNfbWluLCBuc2VjX21heCwgbnNlY19zdW07CisgICAgaW50IGks IHJldDsKKworICAgIG5zZWNfbWluID0gLTE7CisgICAgbnNlY19tYXggPSAwOworICAgIG5zZWNf c3VtID0gMDsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgaXRlcnM7IGkrKyApCisgICAgeworICAg ICAgICBzdGFnZSA9ICJwcmUtaW5pdCI7CisgICAgICAgIHhzX3JtKHhzaCwgWEJUX05VTEwsIHBh dGgpOworICAgICAgICBpZiAoICF4c193cml0ZSh4c2gsIFhCVF9OVUxMLCBwYXRoLCAiIiwgMCkg KQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBlcnJubzsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICB9CisgICAgICAgIHN0YWdlID0gImluaXQiOworICAgICAgICByZXQgPSB0c3Qt PmZ1bmNfaW5pdCh0c3QtPnBhcik7CisgICAgICAgIGlmICggcmV0ICkKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICBpZiAoIGNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cDEpICkK KyAgICAgICAgICAgIG5vX2Nsb2NrID0gdHJ1ZTsKKyAgICAgICAgc3RhZ2UgPSAicnVuIjsKKyAg ICAgICAgcmV0ID0gdHN0LT5mdW5jKHRzdC0+cGFyKTsKKyAgICAgICAgaWYgKCByZXQgKQorICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICggY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElN RSwgJnRwMikgKQorICAgICAgICAgICAgbm9fY2xvY2sgPSB0cnVlOworICAgICAgICBpZiAoICFu b19jbG9jayApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5zZWMgPSB0cDIudHZfc2VjICogMTAw MDAwMDAwMCArIHRwMi50dl9uc2VjIC0KKyAgICAgICAgICAgICAgICAgICB0cDEudHZfc2VjICog MTAwMDAwMDAwMCAtIHRwMS50dl9uc2VjOworICAgICAgICAgICAgaWYgKCBuc2VjIDwgbnNlY19t aW4gKQorICAgICAgICAgICAgICAgIG5zZWNfbWluID0gbnNlYzsKKyAgICAgICAgICAgIGlmICgg bnNlYyA+IG5zZWNfbWF4ICkKKyAgICAgICAgICAgICAgICBuc2VjX21heCA9IG5zZWM7CisgICAg ICAgICAgICBuc2VjX3N1bSArPSBuc2VjOworICAgICAgICB9CisgICAgICAgIHN0YWdlID0gImRl aW5pdCI7CisgICAgICAgIHJldCA9IHRzdC0+ZnVuY19kZWluaXQodHN0LT5wYXIpOworICAgICAg ICBpZiAoIHJldCApCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIHJldCAp CisgICAgICAgIHByaW50ZigiJS0xMHM6IGZhaWxlZCAocmV0ID0gJWQsIHN0YWdlICVzKVxuIiwg dHN0LT5uYW1lLCByZXQsIHN0YWdlKTsKKyAgICBlbHNlIGlmICggIW5vX2Nsb2NrICkKKyAgICB7 CisgICAgICAgIHByaW50ZigiJS0xMHM6IiwgdHN0LT5uYW1lKTsKKyAgICAgICAgaWYgKCBpdGVy cyA+IDEgKQorICAgICAgICAgICAgcHJpbnRmKCIgYXZnOiAlIlBSSXU2NCIgbnMgKCUiUFJJdTY0 IiBucyAuLiAlIlBSSXU2NCIgbnMpIiwKKyAgICAgICAgICAgICAgICAgICBuc2VjX3N1bSAvIGl0 ZXJzLCBuc2VjX21pbiwgbnNlY19tYXgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcmlu dGYoIiAlIlBSSXU2NCIgbnMiLCBuc2VjX3N1bSk7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAg ICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB1c2FnZShpbnQgcmV0KQor eworICAgIEZJTEUgKm91dDsKKworICAgIG91dCA9IHJldCA/IHN0ZGVyciA6IHN0ZG91dDsKKwor ICAgIGZwcmludGYob3V0LCAidXNhZ2U6IHhzLXRlc3QgWzxvcHRpb25zPl1cbiIpOworICAgIGZw cmludGYob3V0LCAiICA8b3B0aW9ucz4gYXJlOlxuIik7CisgICAgZnByaW50ZihvdXQsICIgIC1p fC0taXRlcmF0aW9ucyA8aT4gIHBlcmZvcm0gZWFjaCB0ZXN0IDxpPiB0aW1lcyAoZGVmYXVsdCAx KVxuIik7CisgICAgZnByaW50ZihvdXQsICIgIC1sfC0tbGlzdC10ZXN0cyAgICAgIGxpc3QgYXZh aWxhYmxlIHRlc3RzXG4iKTsKKyAgICBmcHJpbnRmKG91dCwgIiAgLXJ8LS1yYW5kb20gPHRpbWU+ ICAgcGVyZm9ybSByYW5kb20gdGVzdHMgZm9yIDx0aW1lPiBzZWNvbmRzXG4iKTsKKyAgICBmcHJp bnRmKG91dCwgIiAgLXR8LS10ZXN0IDx0ZXN0PiAgICAgcnVuIDx0ZXN0PiAoZGVmYXVsdCBpcyBh bGwgdGVzdHMpXG4iKTsKKyAgICBmcHJpbnRmKG91dCwgIiAgLWh8LS1oZWxwICAgICAgICAgICAg cHJpbnQgdGhpcyB1c2FnZSBpbmZvcm1hdGlvblxuIik7CisgICAgZXhpdChyZXQpOworfQorCitz dGF0aWMgaW50IHJldDAodWludHB0cl90IHBhcikKK3sKKyAgICByZXR1cm4gMDsKK30KKworc3Rh dGljIGludCB2ZXJpZnlfbm9kZShjaGFyICpub2RlLCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQg c2l6ZSkKK3sKKyAgICBjaGFyICpidWY7CisgICAgdW5zaWduZWQgaW50IGxlbjsKKyAgICBpbnQg cmV0OworCisgICAgYnVmID0geHNfcmVhZCh4c2gsIFhCVF9OVUxMLCBub2RlLCAmbGVuKTsKKyAg ICBpZiAoICFidWYgKQorICAgICAgICByZXR1cm4gZXJybm87CisKKyAgICByZXQgPSAobGVuID09 IHNpemUgJiYgIW1lbWNtcChidWYsIGRhdGEsIGxlbikpID8gMCA6IEVOT0RBVEE7CisgICAgZnJl ZShidWYpOworCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0ZXN0X3JlYWRfaW5p dCh1aW50cHRyX3QgcGFyKQoreworICAgIGlmICggcGFyID4gV1JJVEVfQlVGRkVSU19TSVpFICkK KyAgICAgICAgcmV0dXJuIEVGQklHOworICAgIHJldHVybiB4c193cml0ZSh4c2gsIFhCVF9OVUxM LCBwYXRoc1swXSwgd3JpdGVfYnVmZmVyc1swXSwgcGFyKSA/IDAgOiBlcnJubzsKK30KKworc3Rh dGljIGludCB0ZXN0X3JlYWQodWludHB0cl90IHBhcikKK3sKKyAgICBjaGFyICpidWY7CisgICAg dW5zaWduZWQgaW50IGxlbjsKKworICAgIGJ1ZiA9IHhzX3JlYWQoeHNoLCBYQlRfTlVMTCwgcGF0 aHNbMF0sICZsZW4pOworICAgIGlmICggIWJ1ZiApCisgICAgICAgIHJldHVybiBlcnJubzsKKyAg ICBmcmVlKGJ1Zik7CisgICAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgdGVzdF9yZWFkX2RlaW5p dCByZXQwCisKK3N0YXRpYyBpbnQgdGVzdF93cml0ZV9pbml0KHVpbnRwdHJfdCBwYXIpCit7Cisg ICAgcmV0dXJuIChwYXIgPiBXUklURV9CVUZGRVJTX1NJWkUpID8gRUZCSUcgOiAwOworfQorCitz dGF0aWMgaW50IHRlc3Rfd3JpdGUodWludHB0cl90IHBhcikKK3sKKyAgICByZXR1cm4geHNfd3Jp dGUoeHNoLCBYQlRfTlVMTCwgcGF0aHNbMF0sIHdyaXRlX2J1ZmZlcnNbMF0sIHBhcikgPyAwIDog ZXJybm87Cit9CisKK3N0YXRpYyBpbnQgdGVzdF93cml0ZV9kZWluaXQodWludHB0cl90IHBhcikK K3sKKyAgICByZXR1cm4gdmVyaWZ5X25vZGUocGF0aHNbMF0sIHdyaXRlX2J1ZmZlcnNbMF0sIHBh cik7Cit9CisKK3N0YXRpYyBpbnQgdGVzdF9kaXJfaW5pdCh1aW50cHRyX3QgcGFyKQoreworICAg IHVuc2lnbmVkIGludCBpOworCisgICAgZm9yICggaSA9IDA7IGkgPCBXUklURV9CVUZGRVJTX047 IGkrKyApCisgICAgICAgIGlmICggIXhzX3dyaXRlKHhzaCwgWEJUX05VTEwsIHBhdGhzW2ldLCB3 cml0ZV9idWZmZXJzW2ldLCAxKSApCisgICAgICAgICAgICByZXR1cm4gZXJybm87CisKKyAgICBy ZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZXN0X2Rpcih1aW50cHRyX3QgcGFyKQoreworICAg IGNoYXIgKipkaXI7CisgICAgdW5zaWduZWQgaW50IG51bTsKKworICAgIGRpciA9IHhzX2RpcmVj dG9yeSh4c2gsIFhCVF9OVUxMLCBwYXRoLCAmbnVtKTsKKyAgICBpZiAoICFkaXIgKQorICAgICAg ICByZXR1cm4gZXJybm87CisKKyAgICBmcmVlKGRpcik7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgdGVzdF9kaXJfZGVpbml0KHVpbnRwdHJfdCBwYXIpCit7CisgICAgY2hhciAqKmRp cjsKKyAgICB1bnNpZ25lZCBpbnQgaSwgaiwgbnVtOworICAgIGludCByYyA9IDA7CisKKyAgICBk aXIgPSB4c19kaXJlY3RvcnkoeHNoLCBYQlRfTlVMTCwgcGF0aCwgJm51bSk7CisgICAgaWYgKCAh ZGlyICkKKyAgICAgICAgcmV0dXJuIGVycm5vOworCisgICAgZm9yICggaiA9IDA7IGogPCBXUklU RV9CVUZGRVJTX047IGorKyApCisgICAgeworICAgICAgICBmb3IgKCBpID0gMDsgaSA8IG51bTsg aSsrICkKKyAgICAgICAgICAgIGlmICggZGlyW2ldWzBdID09ICdhJyArIGogJiYgZGlyW2ldWzFd ID09IDAgKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoIGkgPT0gbnVtICkK KyAgICAgICAgICAgIHJjID0gRU5PREFUQTsKKyAgICB9CisgICAgaWYgKCBudW0gIT0gV1JJVEVf QlVGRkVSU19OICkKKyAgICAgICAgICAgIHJjID0gRU5PREFUQTsKKyAgICBmcmVlKGRpcik7Cisg ICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHRlc3Rfcm1faW5pdCh1aW50cHRyX3QgcGFy KQoreworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgaWYgKCBwYXIgPiBXUklURV9CVUZGRVJT X04gKQorICAgICAgICByZXR1cm4gRUZCSUc7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IHBhcjsg aSsrICkKKyAgICAgICAgaWYgKCB4c193cml0ZSh4c2gsIFhCVF9OVUxMLCBwYXRoc1tpXSwgd3Jp dGVfYnVmZmVyc1tpXSwgMSkgKQorICAgICAgICAgICAgcmV0dXJuIGVycm5vOworCisgICAgcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGVzdF9ybSh1aW50cHRyX3QgcGFyKQoreworICAgIGlm ICggIXhzX3JtKHhzaCwgWEJUX05VTEwsIHBhdGgpICkKKyAgICAgICAgcmV0dXJuIGVycm5vOwor CisgICAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgdGVzdF9ybV9kZWluaXQgcmV0MAorCisjZGVm aW5lIHRlc3RfdGExX2luaXQgcmV0MAorCitzdGF0aWMgaW50IHRlc3RfdGExKHVpbnRwdHJfdCBw YXIpCit7CisgICAgeHNfdHJhbnNhY3Rpb25fdCB0OworICAgIGludCBsOworCisgICAgZm9yICgg bCA9IDA7IGwgPCBNQVhfVEFfTE9PUFM7IGwrKyApCisgICAgeworICAgICAgICB0ID0geHNfdHJh bnNhY3Rpb25fc3RhcnQoeHNoKTsKKyAgICAgICAgaWYgKCB0ID09IFhCVF9OVUxMICkKKyAgICAg ICAgICAgIHJldHVybiBlcnJubzsKKyAgICAgICAgaWYgKCB4c190cmFuc2FjdGlvbl9lbmQoeHNo LCB0LCBwYXIgPyB0cnVlIDogZmFsc2UpICkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg ICBpZiAoIGVycm5vICE9IEVBR0FJTiApCisgICAgICAgICAgICByZXR1cm4gZXJybm87CisgICAg fQorCisgICAgdGFfbG9vcHMrKzsKKyAgICByZXR1cm4gMDsKK30KKworI2RlZmluZSB0ZXN0X3Rh MV9kZWluaXQgcmV0MAorCitzdGF0aWMgaW50IHRlc3RfdGEyX2luaXQodWludHB0cl90IHBhcikK K3sKKyAgICByZXR1cm4geHNfd3JpdGUoeHNoLCBYQlRfTlVMTCwgcGF0aHNbMF0sIHdyaXRlX2J1 ZmZlcnNbMF0sIDEpID8gMCA6IGVycm5vOworfQorCitzdGF0aWMgaW50IHRlc3RfdGEyKHVpbnRw dHJfdCBwYXIpCit7CisgICAgeHNfdHJhbnNhY3Rpb25fdCB0OworICAgIGNoYXIgKmJ1ZjsKKyAg ICB1bnNpZ25lZCBpbnQgbGVuOworICAgIGludCByZXQ7CisgICAgaW50IGw7CisKKyAgICBmb3Ig KCBsID0gMDsgbCA8IE1BWF9UQV9MT09QUzsgbCsrICkKKyAgICB7CisgICAgICAgIHQgPSB4c190 cmFuc2FjdGlvbl9zdGFydCh4c2gpOworICAgICAgICBpZiAoIHQgPT0gWEJUX05VTEwgKQorICAg ICAgICAgICAgcmV0dXJuIGVycm5vOworICAgICAgICBidWYgPSB4c19yZWFkKHhzaCwgdCwgcGF0 aHNbMF0sICZsZW4pOworICAgICAgICBpZiAoICFidWYgKQorICAgICAgICAgICAgZ290byBvdXQ7 CisgICAgICAgIGZyZWUoYnVmKTsKKyAgICAgICAgaWYgKCAheHNfd3JpdGUoeHNoLCB0LCBwYXRo c1swXSwgImIiLCAxKSApCisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgYnVmID0geHNf cmVhZCh4c2gsIHQsIHBhdGhzWzBdLCAmbGVuKTsKKyAgICAgICAgaWYgKCAhYnVmICkKKyAgICAg ICAgICAgIGdvdG8gb3V0OworICAgICAgICBlcnJubyA9IChsZW4gPT0gMSAmJiBidWZbMF0gPT0g J2InKSA/IDAgOiBFTk9EQVRBOworICAgICAgICBmcmVlKGJ1Zik7CisgICAgICAgIGlmICggZXJy bm8gKQorICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIGJ1ZiA9IHhzX3JlYWQoeHNoLCBY QlRfTlVMTCwgcGF0aHNbMF0sICZsZW4pOworICAgICAgICBpZiAoICFidWYgKQorICAgICAgICAg ICAgZ290byBvdXQ7CisgICAgICAgIGVycm5vID0gKGxlbiA9PSAxICYmIGJ1ZlswXSA9PSAnYScp ID8gMCA6IEVOT0RBVEE7CisgICAgICAgIGZyZWUoYnVmKTsKKyAgICAgICAgaWYgKCBlcnJubyAp CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgaWYgKCB4c190cmFuc2FjdGlvbl9lbmQo eHNoLCB0LCBwYXIgPyB0cnVlIDogZmFsc2UpICkKKyAgICAgICAgICAgIHJldHVybiAwOworICAg ICAgICBpZiAoIGVycm5vICE9IEVBR0FJTiApCisgICAgICAgICAgICByZXR1cm4gZXJybm87Cisg ICAgfQorCisgICAgdGFfbG9vcHMrKzsKKyAgICByZXR1cm4gMDsKKworIG91dDoKKyAgICByZXQg PSBlcnJubzsKKyAgICB4c190cmFuc2FjdGlvbl9lbmQoeHNoLCB0LCB0cnVlKTsKKyAgICByZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50IHRlc3RfdGEyX2RlaW5pdCh1aW50cHRyX3QgcGFyKQor eworICAgIHJldHVybiB2ZXJpZnlfbm9kZShwYXRoc1swXSwgcGFyID8gImEiIDogImIiLCAxKTsK K30KKworc3RhdGljIGludCB0ZXN0X3RhM19pbml0KHVpbnRwdHJfdCBwYXIpCit7CisgICAgcmV0 dXJuIHhzX3dyaXRlKHhzaCwgWEJUX05VTEwsIHBhdGhzWzBdLCB3cml0ZV9idWZmZXJzWzBdLCAx KSA/IDAgOiBlcnJubzsKK30KKworc3RhdGljIGludCB0ZXN0X3RhMyh1aW50cHRyX3QgcGFyKQor eworICAgIHhzX3RyYW5zYWN0aW9uX3QgdDsKKyAgICBjaGFyICpidWY7CisgICAgdW5zaWduZWQg aW50IGxlbjsKKyAgICBpbnQgcmV0OworCisgICAgdCA9IHhzX3RyYW5zYWN0aW9uX3N0YXJ0KHhz aCk7CisgICAgaWYgKCB0ID09IFhCVF9OVUxMICkKKyAgICAgICAgcmV0dXJuIGVycm5vOworICAg IGJ1ZiA9IHhzX3JlYWQoeHNoLCB0LCBwYXRoc1swXSwgJmxlbik7CisgICAgaWYgKCAhYnVmICkK KyAgICAgICAgZ290byBvdXQ7CisgICAgZnJlZShidWYpOworICAgIGlmICggIXhzX3dyaXRlKHhz aCwgWEJUX05VTEwsIHBhdGhzWzBdLCAiYiIsIDEpICkKKyAgICAgICAgZ290byBvdXQ7CisgICAg YnVmID0geHNfcmVhZCh4c2gsIHQsIHBhdGhzWzBdLCAmbGVuKTsKKyAgICBpZiAoICFidWYgKQor ICAgICAgICBnb3RvIG91dDsKKyAgICBlcnJubyA9IChsZW4gPT0gMSAmJiBidWZbMF0gPT0gJ2En KSA/IDAgOiBFTk9EQVRBOworICAgIGZyZWUoYnVmKTsKKyAgICBpZiAoIGVycm5vICkKKyAgICAg ICAgZ290byBvdXQ7CisgICAgaWYgKCAheHNfd3JpdGUoeHNoLCB0LCBwYXRoc1swXSwgImMiLCAx KSApCisgICAgICAgIGdvdG8gb3V0OworICAgIGJ1ZiA9IHhzX3JlYWQoeHNoLCB0LCBwYXRoc1sw XSwgJmxlbik7CisgICAgaWYgKCAhYnVmICkKKyAgICAgICAgZ290byBvdXQ7CisgICAgZXJybm8g PSAobGVuID09IDEgJiYgYnVmWzBdID09ICdjJykgPyAwIDogRU5PREFUQTsKKyAgICBmcmVlKGJ1 Zik7CisgICAgaWYgKCBlcnJubyApCisgICAgICAgIGdvdG8gb3V0OworICAgIGlmICggeHNfdHJh bnNhY3Rpb25fZW5kKHhzaCwgdCwgZmFsc2UpIHx8IGVycm5vICE9IEVBR0FJTiApCisgICAgICAg IHJldHVybiBFTk9EQVRBOworICAgIHJldHVybiAwOworCisgb3V0OgorICAgIHJldCA9IGVycm5v OworICAgIHhzX3RyYW5zYWN0aW9uX2VuZCh4c2gsIHQsIHRydWUpOworICAgIHJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyBpbnQgdGVzdF90YTNfZGVpbml0KHVpbnRwdHJfdCBwYXIpCit7CisgICAg cmV0dXJuIHZlcmlmeV9ub2RlKHBhdGhzWzBdLCAiYiIsIDEpOworfQorCisjZGVmaW5lIFRFU1Qo cywgZiwgcCwgbCkgeyBzLCBmICMjIF9pbml0LCBmLCBmICMjIF9kZWluaXQsICh1aW50cHRyX3Qp KHApLCBsIH0KK3N0cnVjdCB0ZXN0IHRlc3RzW10gPSB7CitURVNUKCJyZWFkIDEiLCB0ZXN0X3Jl YWQsIDEsICJSZWFkIG5vZGUgd2l0aCAxIGJ5dGUgZGF0YSIpLAorVEVTVCgicmVhZCAzMDAwIiwg dGVzdF9yZWFkLCAzMDAwLCAiUmVhZCBub2RlIHdpdGggMzAwMCBieXRlcyBkYXRhIiksCitURVNU KCJ3cml0ZSAxIiwgdGVzdF93cml0ZSwgMSwgIldyaXRlIG5vZGUgd2l0aCAxIGJ5dGUgZGF0YSIp LAorVEVTVCgid3JpdGUgMzAwMCIsIHRlc3Rfd3JpdGUsIDMwMDAsICJXcml0ZSBub2RlIHdpdGgg MzAwMCBieXRlcyBkYXRhIiksCitURVNUKCJkaXIiLCB0ZXN0X2RpciwgMCwgIkxpc3QgZGlyZWN0 b3J5IiksCitURVNUKCJybSBub2RlIiwgdGVzdF9ybSwgMCwgIlJlbW92ZSBzaW5nbGUgbm9kZSIp LAorVEVTVCgicm0gZGlyIiwgdGVzdF9ybSwgV1JJVEVfQlVGRkVSU19OLCAiUmVtb3ZlIG5vZGUg d2l0aCBzdWItbm9kZXMiKSwKK1RFU1QoInRhIGVtcHR5IiwgdGVzdF90YTEsIDAsICJFbXB0eSB0 cmFuc2FjdGlvbiIpLAorVEVTVCgidGEgZW1wdHkgeCIsIHRlc3RfdGExLCAxLCAiRW1wdHkgdHJh bnNhY3Rpb24gYWJvcnQiKSwKK1RFU1QoInRhIHJtdyIsIHRlc3RfdGEyLCAwLCAiUmVhZC1tb2Rp Znktd3JpdGUgdHJhbnNhY3Rpb24iKSwKK1RFU1QoInRhIHJtdyB4IiwgdGVzdF90YTIsIDEsICJS ZWFkLW1vZGlmeS13cml0ZSB0cmFuc2FjdGlvbiBhYm9ydCIpLAorVEVTVCgidGEgZXJyIiwgdGVz dF90YTMsIDAsICJUcmFuc2FjdGlvbiB3aXRoIGNvbmZsaWN0IiksCit9OworCitzdGF0aWMgdm9p ZCBjbGVhbnVwKHZvaWQpCit7CisgICAgeHNfdHJhbnNhY3Rpb25fdCB0OworICAgIGNoYXIgKipk aXI7CisgICAgdW5zaWduZWQgaW50IG51bTsKKworICAgIHhzX3JtKHhzaCwgWEJUX05VTEwsIHBh dGgpOworCisgICAgd2hpbGUgKCB0cnVlICkKKyAgICB7CisgICAgICAgIHQgPSB4c190cmFuc2Fj dGlvbl9zdGFydCh4c2gpOworICAgICAgICBpZiAoIHQgPT0gWEJUX05VTEwgKQorICAgICAgICAg ICAgcmV0dXJuOworCisgICAgICAgIGRpciA9IHhzX2RpcmVjdG9yeSh4c2gsIHQsIFRFU1RfUEFU SCwgJm51bSk7CisgICAgICAgIGlmICggZGlyICYmICFudW0gKQorICAgICAgICAgICAgeHNfcm0o eHNoLCB0LCBURVNUX1BBVEgpOworICAgICAgICBmcmVlKGRpcik7CisKKyAgICAgICAgaWYgKCB4 c190cmFuc2FjdGlvbl9lbmQoeHNoLCB0LCBmYWxzZSkgfHwgZXJybm8gIT0gRUFHQUlOICkKKyAg ICAgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCit7CisgICAgaW50IG9wdCwgdCwgaXRlcnMgPSAxLCByZXQgPSAwLCByYW5kdGltZSA9 IDA7CisgICAgY2hhciAqdGVzdCA9IE5VTEw7CisgICAgYm9vbCBsaXN0ID0gZmFsc2U7CisgICAg dGltZV90IHN0b3A7CisKKyAgICB3aGlsZSAoIChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2 LCAibHI6dDpoaToiLCBvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V TEwpKSAhPSAtMSApCisgICAgeworICAgICAgICBzd2l0Y2ggKCBvcHQgKQorICAgICAgICB7Cisg ICAgICAgIGNhc2UgJ2knOgorICAgICAgICAgICAgaXRlcnMgPSBhdG9pKG9wdGFyZyk7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnbCc6CisgICAgICAgICAgICBsaXN0ID0gdHJ1 ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgIHJh bmR0aW1lID0gYXRvaShvcHRhcmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug J3QnOgorICAgICAgICAgICAgdGVzdCA9IG9wdGFyZzsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgIHVzYWdlKDApOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCBvcHRpbmQgIT0gYXJnYyApCisgICAgICAgIHVz YWdlKDEpOworCisgICAgaWYgKCBsaXN0ICkKKyAgICB7CisgICAgICAgIGZvciAoIHQgPSAwOyB0 IDwgQVJSQVlfU0laRSh0ZXN0cyk7IHQrKyApCisgICAgICAgICAgICBwcmludGYoIiUtMTBzOiAl c1xuIiwgdGVzdHNbdF0ubmFtZSwgdGVzdHNbdF0uZGVzY3IpOworICAgICAgICByZXR1cm4gMDsK KyAgICB9CisKKyAgICBhc3ByaW50ZigmcGF0aCwgIiVzLyV1IiwgVEVTVF9QQVRILCBnZXRwaWQo KSk7CisgICAgZm9yICggdCA9IDA7IHQgPCBXUklURV9CVUZGRVJTX047IHQrKyApCisgICAgewor ICAgICAgICBtZW1zZXQod3JpdGVfYnVmZmVyc1t0XSwgJ2EnICsgdCwgV1JJVEVfQlVGRkVSU19T SVpFKTsKKyAgICAgICAgYXNwcmludGYoJnBhdGhzW3RdLCAiJXMvJWMiLCBwYXRoLCAnYScgKyB0 KTsKKyAgICB9CisKKyAgICB4c2ggPSB4c19vcGVuKDApOworICAgIGlmICggIXhzaCApCisgICAg eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNvdWxkIG5vdCBjb25uZWN0IHRvIHhlbnN0b3Jl XG4iKTsKKyAgICAgICAgZXhpdCgyKTsKKyAgICB9CisKKyAgICBpZiAoIHJhbmR0aW1lICkKKyAg ICB7CisgICAgICAgIHN0b3AgPSB0aW1lKE5VTEwpICsgcmFuZHRpbWU7CisgICAgICAgIHNyYW5k b20oKHVuc2lnbmVkIGludClzdG9wKTsKKworICAgICAgICB3aGlsZSAoIHRpbWUoTlVMTCkgPCBz dG9wICkKKyAgICAgICAgeworICAgICAgICAgICAgdCA9IHJhbmRvbSgpICUgQVJSQVlfU0laRSh0 ZXN0cyk7CisgICAgICAgICAgICByZXQgPSBjYWxsX3Rlc3QodGVzdHMgKyB0LCBpdGVycywgdHJ1 ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgICAgICBmb3IgKCB0ID0gMDsgdCA8 IEFSUkFZX1NJWkUodGVzdHMpOyB0KysgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoICF0 ZXN0IHx8ICFzdHJjbXAodGVzdCwgdGVzdHNbdF0ubmFtZSkgKQorICAgICAgICAgICAgICAgIHJl dCA9IGNhbGxfdGVzdCh0ZXN0cyArIHQsIGl0ZXJzLCBmYWxzZSk7CisgICAgICAgIH0KKworICAg IGlmICggIXJldCApCisgICAgICAgIGNsZWFudXAoKTsKKworICAgIHhzX2Nsb3NlKHhzaCk7CisK KyAgICBpZiAoIHRhX2xvb3BzICkKKyAgICAgICAgcHJpbnRmKCJFeGhhdXN0aXZlIHRyYW5zYWN0 aW9uIHJldHJpZXMgKCVkKSBvY2N1cnJyZWQgJWQgdGltZXMuXG4iLAorICAgICAgICAgICAgICAg TUFYX1RBX0xPT1BTLCB0YV9sb29wcyk7CisKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIExv Y2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMt YmFzaWMtb2Zmc2V0OiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwot LSAKMi4xMC4yCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczov L2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==