From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ronald Rojas Subject: [PATCH RFC 11/59] Refactor to move towards benchmark "plans" and data analysis Date: Wed, 28 Dec 2016 20:14:04 -0500 Message-ID: <1482974092-15891-11-git-send-email-ronladred@gmail.com> References: <1482974092-15891-1-git-send-email-ronladred@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1482974092-15891-1-git-send-email-ronladred@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel , Ian Jackson , Wei Liu , George Dunlap , George Dunlap List-Id: xen-devel@lists.xenproject.org RnJvbTogR2VvcmdlIER1bmxhcCA8Z2VvcmdlLmR1bmxhcEBjaXRyaXguY29tPgoKQSBiaXQgb2Yg YSByb2xsLXVwIG9mIGxvdHMgb2YgYml0cy4KClNpZ25lZC1vZmYtYnk6IEdlb3JnZSBEdW5sYXAg PGdlb3JnZS5kdW5sYXBAY2l0cml4LmNvbT4KLS0tCiBNYWtlZmlsZSAgICAgfCAgIDQgKy0KIGJl bmNobWFyay5nbyB8IDI1NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogbWFpbi5nbyAgICAgIHwgMTk3ICsrKysrKysrKystLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAzMDIgaW5zZXJ0 aW9ucygrKSwgMTU1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGJlbmNobWFyay5n bwoKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggMTZhZjUyOC4uN2EzM2Nm YiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsMTAgKzEsMTAgQEAK LUJJTiA9IGNvbnRyb2xsZXIKK0JJTiA9IHNjaGVkYmVuY2gKIEJJTkFMTCA9ICQoQklOKQogCiAu UEhPTlk6IGFsbAogYWxsOiAkKEJJTikKIAotY29udHJvbGxlcjogbWFpbi5nbyBwcm9jZXNzd29y a2VyLmdvIHhlbndvcmtlci5nbworc2NoZWRiZW5jaDogbWFpbi5nbyBwcm9jZXNzd29ya2VyLmdv IHhlbndvcmtlci5nbyBiZW5jaG1hcmsuZ28KIAlnbyBidWlsZCAtbyAkQCAkXgogCiAuUEhPTlk6 IGNsZWFuCmRpZmYgLS1naXQgYS9iZW5jaG1hcmsuZ28gYi9iZW5jaG1hcmsuZ28KbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJiMjM5OQotLS0gL2Rldi9udWxsCisrKyBiL2Jl bmNobWFyay5nbwpAQCAtMCwwICsxLDI1NiBAQAorcGFja2FnZSBtYWluCisKK2ltcG9ydCAoCisJ ImZtdCIKKwkib3MiCisJIm9zL3NpZ25hbCIKKwkidGltZSIKKwkiaW8vaW91dGlsIgorCSJlbmNv ZGluZy9qc29uIgorKQorCit0eXBlIFdvcmtlclJlcG9ydCBzdHJ1Y3QgeworCUlkIGludAorCU5v dyBpbnQKKwlNb3BzIGludAorCU1heERlbHRhIGludAorfQorCit0eXBlIFdvcmtlclBhcmFtcyBz dHJ1Y3QgeworCUFyZ3MgW11zdHJpbmcKK30KKwordHlwZSBXb3JrZXJTZXQgc3RydWN0IHsKKwlQ YXJhbXMgV29ya2VyUGFyYW1zCisJQ291bnQgaW50Cit9CisKK3R5cGUgV29ya2VyIGludGVyZmFj ZSB7CisJU2V0SWQoaW50KQorCUluaXQoV29ya2VyUGFyYW1zKSBlcnJvcgorCVNodXRkb3duKCkK KwlQcm9jZXNzKGNoYW4gV29ya2VyUmVwb3J0LCBjaGFuIGJvb2wpCit9CisKK2NvbnN0ICgKKwlV U0VDID0gMTAwMAorCU1TRUMgPSBVU0VDICogMTAwMAorCVNFQyA9IE1TRUMgKiAxMDAwCispCisK K3R5cGUgV29ya2VyU3RhdGUgc3RydWN0IHsKKwl3IFdvcmtlcgorCUxhc3RSZXBvcnQgV29ya2Vy UmVwb3J0Cit9CisKK2Z1bmMgUmVwb3J0KHdzICpXb3JrZXJTdGF0ZSwgciBXb3JrZXJSZXBvcnQp IHsKKwkvL2ZtdC5QcmludGxuKHIpCisKKwlsciA6PSB3cy5MYXN0UmVwb3J0CisKKwlpZiAobHIu Tm93ID4gMCkgeworCQl0aW1lIDo9IGZsb2F0NjQoci5Ob3cgLSBsci5Ob3cpIC8gU0VDCisJCW1v cHMgOj0gci5Nb3BzIC0gbHIuTW9wcworCisJCXRwdXQgOj0gZmxvYXQ2NChtb3BzKSAvIHRpbWUK KworCQlmbXQuUHJpbnRmKCIlZCBUaW1lOiAlMi4zZiBNb3BzOiAlZCBUcHV0OiAlNC4yZlxuIiwg ci5JZCwgdGltZSwgbW9wcywgdHB1dCk7CisJfQorCisJd3MuTGFzdFJlcG9ydCA9IHIKK30KKwor dHlwZSBXb3JrZXJMaXN0IFtdV29ya2VyU3RhdGUKKworZnVuYyAod3MgKldvcmtlckxpc3QpIFN0 YXJ0KHJlcG9ydCBjaGFuIFdvcmtlclJlcG9ydCwgZG9uZSBjaGFuIGJvb2wpIChpIGludCkgewor CWkgPSAwCisJZm9yIGogOj0gcmFuZ2UgKndzIHsKKwkJZ28gKCp3cylbal0udy5Qcm9jZXNzKHJl cG9ydCwgZG9uZSkKKwkJaSsrCisJfQorCXJldHVybgorfQorCitmdW5jICh3cyAqV29ya2VyTGlz dCkgU3RvcCgpIHsKKwlmb3IgaSA6PSByYW5nZSAqd3MgeworCQkoKndzKVtpXS53LlNodXRkb3du KCkKKwl9Cit9CisKK2NvbnN0ICgKKwlXb3JrZXJQcm9jZXNzID0gaW90YQorCVdvcmtlclhlbiA9 IGlvdGEKKykKKworZnVuYyBOZXdXb3JrZXJMaXN0KHdvcmtlcnMgW11Xb3JrZXJTZXQsIHdvcmtl clR5cGUgaW50KSAod3MgV29ya2VyTGlzdCwgZXJyIGVycm9yKSB7CisJY291bnQgOj0gMAorCisJ Ly8gd3NpOiBXb3JrZXJTZXQgaW5kZXgKKwlmb3Igd3NpIDo9IHJhbmdlIHdvcmtlcnMgeworCQlj b3VudCArPSB3b3JrZXJzW3dzaV0uQ291bnQKKwl9CisKKwlmbXQuUHJpbnRsbigiTWFraW5nICIs IGNvdW50LCAiIHRvdGFsIHdvcmtlcnMiKQorCXdzID0gV29ya2VyTGlzdChtYWtlKFtdV29ya2Vy U3RhdGUsIGNvdW50KSkKKworCS8vIHdsaTogV29ya2VyTGlzdCBpbmRleAorCXdsaSA6PSAwCisJ Zm9yIHdzaSA6PSByYW5nZSB3b3JrZXJzIHsKKwkJZm9yIGkgOj0gMDsgaSA8IHdvcmtlcnNbd3Np XS5Db3VudDsgaSwgd2xpID0gaSsxLCB3bGkrMSB7CisJCQlzd2l0Y2ggd29ya2VyVHlwZSB7CisJ CQljYXNlIFdvcmtlclByb2Nlc3M6CisJCQkJd3Nbd2xpXS53ID0gJlByb2Nlc3NXb3JrZXJ7fQor CQkJY2FzZSBXb3JrZXJYZW46CisJCQkJd3Nbd2xpXS53ID0gJlhlbldvcmtlcnt9CisJCQlkZWZh dWx0OgorCQkJCWVyciA9IGZtdC5FcnJvcmYoIlVua25vd24gdHlwZTogJWQiLCB3b3JrZXJUeXBl KQorCQkJfQorCQkJd3Nbd2xpXS53LlNldElkKHdsaSkKKwkJCisJCQl3c1t3bGldLncuSW5pdCh3 b3JrZXJzW3dzaV0uUGFyYW1zKQorCQl9CisJfQorCXJldHVybgorfQorCit0eXBlIEJlbmNobWFy a1J1bkRhdGEgc3RydWN0IHsKKwlSYXcgW11Xb3JrZXJSZXBvcnQKK30KKwordHlwZSBCZW5jaG1h cmtSdW4gc3RydWN0IHsKKwlDb21wbGV0ZWQgYm9vbAorCUxhYmVsIHN0cmluZworCVdvcmtlcnMg W11Xb3JrZXJTZXQKKwlSdW50aW1lU2Vjb25kcyBpbnQKKwlSZXN1bHRzIEJlbmNobWFya1J1bkRh dGEgCit9CisKK2Z1bmMgKHJ1biAqQmVuY2htYXJrUnVuKSBSdW4oKSAoZXJyIGVycm9yKSB7CisJ V29ya2VycywgZXJyIDo9IE5ld1dvcmtlckxpc3QocnVuLldvcmtlcnMsIFdvcmtlclByb2Nlc3Mp CisJaWYgZXJyICE9IG5pbCB7CisJCWZtdC5QcmludGxuKCJFcnJvciBjcmVhdGluZyB3b3JrZXJz OiAldiIsIGVycikKKwkJcmV0dXJuCisJfQorCQorCXJlcG9ydCA6PSBtYWtlKGNoYW4gV29ya2Vy UmVwb3J0KQorCWRvbmUgOj0gbWFrZShjaGFuIGJvb2wpCisJc2lnbmFscyA6PSBtYWtlKGNoYW4g b3MuU2lnbmFsLCAxKQorCisJc2lnbmFsLk5vdGlmeShzaWduYWxzLCBvcy5JbnRlcnJ1cHQpCisJ CisJaSA6PSBXb3JrZXJzLlN0YXJ0KHJlcG9ydCwgZG9uZSkKKworCS8vIEZJWE1FOgorCS8vIDEu IE1ha2UgYSB6ZXJvIHRpbWVvdXQgbWVhbiAibmV2ZXIiCisJLy8gMi4gTWFrZSB0aGUgc2lnbmFs cyAvIHRpbWVvdXQgdGhpbmcgYSBiaXQgbW9yZSByYXRpb25hbDsgc2lnbmFsIHRoZW4gdGltZW91 dCBzaG91bGRuJ3QgaGFyZCBraWxsCisJdGltZW91dCA6PSB0aW1lLkFmdGVyKHRpbWUuRHVyYXRp b24ocnVuLlJ1bnRpbWVTZWNvbmRzKSAqIHRpbWUuU2Vjb25kKTsKKwlzdG9wcGVkIDo9IGZhbHNl CisJZm9yIGkgPiAwIHsKKwkJc2VsZWN0IHsKKwkJY2FzZSByIDo9IDwtcmVwb3J0OgorCQkJcnVu LlJlc3VsdHMuUmF3ID0gYXBwZW5kKHJ1bi5SZXN1bHRzLlJhdywgcikKKwkJCVJlcG9ydCgmV29y a2Vyc1tyLklkXSwgcikKKwkJY2FzZSA8LWRvbmU6CisJCQlpLS07CisJCQlmbXQuUHJpbnRsbihp LCAid29ya2VycyBsZWZ0Iik7CisJCWNhc2UgPC10aW1lb3V0OgorCQkJaWYgISBzdG9wcGVkIHsK KwkJCQlXb3JrZXJzLlN0b3AoKQorCQkJCXN0b3BwZWQgPSB0cnVlCisJCQkJcnVuLkNvbXBsZXRl ZCA9IHRydWUKKwkJCX0KKwkJY2FzZSA8LXNpZ25hbHM6CisJCQlpZiAhIHN0b3BwZWQgeworCQkJ CWZtdC5QcmludGxuKCJTSUdJTlQgcmVjZWlldmVkLCBzaHV0dGluZyBkb3duIHdvcmtlcnMiKQor CQkJCVdvcmtlcnMuU3RvcCgpCisJCQkJc3RvcHBlZCA9IHRydWUKKwkJCQlpZiBydW4uUnVudGlt ZVNlY29uZHMgPT0gMCB7CisJCQkJCXJ1bi5Db21wbGV0ZWQgPSB0cnVlCisJCQkJfQorCQkJCWVy ciA9IGZtdC5FcnJvcmYoIkludGVycnVwdGVkIikKKwkJCX0gZWxzZSB7CisJCQkJZXJyID0gZm10 LkVycm9yZigiSW50ZXJydXB0ZWQiKQorCQkJCWZtdC5QcmludGxuKCJTSUdJTlQgcmVjZWl2ZWQg YWZ0ZXIgc3RvcCwgZXhpdGluZyB3aXRob3V0IGNsZWFuaW5nIHVwIikKKwkJCQlyZXR1cm4KKwkJ CX0KKwkJfQorCX0KKwlyZXR1cm4KK30KKwordHlwZSBCZW5jaG1hcmtQbGFuIHN0cnVjdCB7CisJ ZmlsZW5hbWUgc3RyaW5nCisJUnVucyBbXUJlbmNobWFya1J1bgorfQorCitmdW5jIChwbGFuICpC ZW5jaG1hcmtQbGFuKSBSdW4oKSAoZXJyIGVycm9yKSB7CisJZm9yIGkgOj0gcmFuZ2UgcGxhbi5S dW5zIHsKKwkJaWYgISBwbGFuLlJ1bnNbaV0uQ29tcGxldGVkIHsKKwkJCWZtdC5QcmludGYoIlJ1 bm5pbmcgdGVzdCBbJWRdICVzXG4iLCBpLCBwbGFuLlJ1bnNbaV0uTGFiZWwpCisJCQllcnIgPSBw bGFuLlJ1bnNbaV0uUnVuKCkKKwkJCWlmIGVyciAhPSBuaWwgeworCQkJCXJldHVybgorCQkJfQor CQl9CisJCWZtdC5QcmludGYoIlRlc3QgWyVkXSAlcyBjb21wbGV0ZWRcbiIsIGksIHBsYW4uUnVu c1tpXS5MYWJlbCkKKwkJZXJyID0gcGxhbi5TYXZlKCkKKwkJaWYgZXJyICE9IG5pbCB7CisJCQlm bXQuUHJpbnRsbigiRXJyb3Igc2F2aW5nOiAiLCBlcnIpCisJCQlyZXR1cm4KKwkJfQorCX0KKwly ZXR1cm4KK30KKworZnVuYyBMb2FkQmVuY2htYXJrKGZpbGVuYW1lIHN0cmluZykgKHBsYW4gQmVu Y2htYXJrUGxhbiwgZXJyIGVycm9yKSB7CisJcGxhbi5maWxlbmFtZSA9IGZpbGVuYW1lCisJCisJ dmFyIGIgW11ieXRlCisJYiwgZXJyID0gaW91dGlsLlJlYWRGaWxlKGZpbGVuYW1lKQorCWlmIGVy ciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisJCisJZXJyID0ganNvbi5Vbm1hcnNoYWwoYiwgJnBs YW4pCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKworCXJldHVybgorfQorCitmdW5j IChwbGFuICpCZW5jaG1hcmtQbGFuKSBTYXZlKCkgKGVyciBlcnJvcikgeworCWlmIHBsYW4uZmls ZW5hbWUgPT0gIiIgeworCQllcnIgPSBmbXQuRXJyb3JmKCJJbnZhbGlkIGZpbGVuYW1lIikKKwkJ cmV0dXJuCisJfQorCQorCXZhciBiIFtdYnl0ZQorCWIsIGVyciA9IGpzb24uTWFyc2hhbCgqcGxh bikKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCisJYmFja3VwRmlsZW5hbWUgOj0g Zm10LlNwcmludGYoIi4lcy50bXAiLCBwbGFuLmZpbGVuYW1lKQorCWVyciA9IG9zLlJlbmFtZShw bGFuLmZpbGVuYW1lLCBiYWNrdXBGaWxlbmFtZSkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJaWYgb3Mu SXNOb3RFeGlzdChlcnIpIHsKKwkJCWJhY2t1cEZpbGVuYW1lID0gIiIKKwkJfSBlbHNlIHsKKwkJ CXJldHVybgorCQl9CisJfQorCisJZXJyID0gaW91dGlsLldyaXRlRmlsZShwbGFuLmZpbGVuYW1l LCBiLCAwNjY2KQorCWlmIGVyciAhPSBuaWwgeworCQlpZiBiYWNrdXBGaWxlbmFtZSAhPSAiIiB7 CisJCQlvcy5SZW5hbWUoYmFja3VwRmlsZW5hbWUsIHBsYW4uZmlsZW5hbWUpCisJCX0KKwkJcmV0 dXJuCisJfQorCisJaWYgYmFja3VwRmlsZW5hbWUgIT0gIiIgeworCQlvcy5SZW1vdmUoYmFja3Vw RmlsZW5hbWUpCisJfQorCXJldHVybgorfQpkaWZmIC0tZ2l0IGEvbWFpbi5nbyBiL21haW4uZ28K aW5kZXggN2ZiYjYwYS4uNGQ5NzAxYyAxMDA2NDQKLS0tIGEvbWFpbi5nbworKysgYi9tYWluLmdv CkBAIC0zLDE2MyArMyw1NCBAQCBwYWNrYWdlIG1haW4KIGltcG9ydCAoCiAJImZtdCIKIAkib3Mi Ci0JIm9zL3NpZ25hbCIKLQkidGltZSIKICkKIAotdHlwZSBXb3JrZXJSZXBvcnQgc3RydWN0IHsK LQlJZCBpbnQKLQlOb3cgaW50Ci0JTW9wcyBpbnQKLQlNYXhEZWx0YSBpbnQKLX0KLQotdHlwZSBX b3JrZXJQYXJhbXMgc3RydWN0IHsKLQlBcmdzIFtdc3RyaW5nCi19Ci0KLXR5cGUgV29ya2VyU2V0 IHN0cnVjdCB7Ci0JUGFyYW1zIFdvcmtlclBhcmFtcwotCUNvdW50IGludAotfQotCi10eXBlIEJl bmNobWFya1BhcmFtcyBzdHJ1Y3QgewotCVdvcmtlcnMgW11Xb3JrZXJTZXQKLQlSdW50aW1lU2Vj b25kcyBpbnQKLX0KLQotdHlwZSBXb3JrZXIgaW50ZXJmYWNlIHsKLQlTZXRJZChpbnQpCi0JSW5p dChXb3JrZXJQYXJhbXMpIGVycm9yCi0JU2h1dGRvd24oKQotCVByb2Nlc3MoY2hhbiBXb3JrZXJS ZXBvcnQsIGNoYW4gYm9vbCkKLX0KLQotY29uc3QgKAotCVVTRUMgPSAxMDAwCi0JTVNFQyA9IFVT RUMgKiAxMDAwCi0JU0VDID0gTVNFQyAqIDEwMDAKLSkKLQotdHlwZSBXb3JrZXJTdGF0ZSBzdHJ1 Y3QgewotCXcgV29ya2VyCi0JTGFzdFJlcG9ydCBXb3JrZXJSZXBvcnQKLX0KLQotZnVuYyBSZXBv cnQod3MgKldvcmtlclN0YXRlLCByIFdvcmtlclJlcG9ydCkgewotCS8vZm10LlByaW50bG4ocikK LQotCWxyIDo9IHdzLkxhc3RSZXBvcnQKLQotCWlmIChsci5Ob3cgPiAwKSB7Ci0JCXRpbWUgOj0g ZmxvYXQ2NChyLk5vdyAtIGxyLk5vdykgLyBTRUMKLQkJbW9wcyA6PSByLk1vcHMgLSBsci5Nb3Bz Ci0KLQkJdHB1dCA6PSBmbG9hdDY0KG1vcHMpIC8gdGltZQotCi0JCWZtdC5QcmludGYoIiVkIFRp bWU6ICUyLjNmIE1vcHM6ICVkIFRwdXQ6ICU0LjJmXG4iLCByLklkLCB0aW1lLCBtb3BzLCB0cHV0 KTsKLQl9Ci0KLQl3cy5MYXN0UmVwb3J0ID0gcgotfQotCi10eXBlIFdvcmtlckxpc3QgW11Xb3Jr ZXJTdGF0ZQotCi1mdW5jICh3cyAqV29ya2VyTGlzdCkgU3RhcnQocmVwb3J0IGNoYW4gV29ya2Vy UmVwb3J0LCBkb25lIGNoYW4gYm9vbCkgKGkgaW50KSB7Ci0JaSA9IDAKLQlmb3IgaiA6PSByYW5n ZSAqd3MgewotCQlnbyAoKndzKVtqXS53LlByb2Nlc3MocmVwb3J0LCBkb25lKQotCQlpKysKLQl9 Ci0JcmV0dXJuCi19Ci0KLWZ1bmMgKHdzICpXb3JrZXJMaXN0KSBTdG9wKCkgewotCWZvciBpIDo9 IHJhbmdlICp3cyB7Ci0JCSgqd3MpW2ldLncuU2h1dGRvd24oKQotCX0KLX0KLQotY29uc3QgKAot CVdvcmtlclByb2Nlc3MgPSBpb3RhCi0JV29ya2VyWGVuID0gaW90YQotKQotCi1mdW5jIE5ld1dv cmtlckxpc3Qod29ya2VycyBbXVdvcmtlclNldCwgd29ya2VyVHlwZSBpbnQpICh3cyBXb3JrZXJM aXN0LCBlcnIgZXJyb3IpIHsKLQljb3VudCA6PSAwCi0KLQkvLyB3c2k6IFdvcmtlclNldCBpbmRl eAotCWZvciB3c2kgOj0gcmFuZ2Ugd29ya2VycyB7Ci0JCWNvdW50ICs9IHdvcmtlcnNbd3NpXS5D b3VudAotCX0KLQotCWZtdC5QcmludGxuKCJNYWtpbmcgIiwgY291bnQsICIgdG90YWwgd29ya2Vy cyIpCi0Jd3MgPSBXb3JrZXJMaXN0KG1ha2UoW11Xb3JrZXJTdGF0ZSwgY291bnQpKQotCi0JLy8g d2xpOiBXb3JrZXJMaXN0IGluZGV4Ci0Jd2xpIDo9IDAKLQlmb3Igd3NpIDo9IHJhbmdlIHdvcmtl cnMgewotCQlmb3IgaSA6PSAwOyBpIDwgd29ya2Vyc1t3c2ldLkNvdW50OyBpLCB3bGkgPSBpKzEs IHdsaSsxIHsKLQkJCXN3aXRjaCB3b3JrZXJUeXBlIHsKLQkJCWNhc2UgV29ya2VyUHJvY2VzczoK LQkJCQl3c1t3bGldLncgPSAmUHJvY2Vzc1dvcmtlcnt9Ci0JCQljYXNlIFdvcmtlclhlbjoKLQkJ CQl3c1t3bGldLncgPSAmWGVuV29ya2Vye30KLQkJCWRlZmF1bHQ6Ci0JCQkJZXJyID0gZm10LkVy cm9yZigiVW5rbm93biB0eXBlOiAlZCIsIHdvcmtlclR5cGUpCi0JCQl9Ci0JCQl3c1t3bGldLncu U2V0SWQod2xpKQotCQkKLQkJCXdzW3dsaV0udy5Jbml0KHdvcmtlcnNbd3NpXS5QYXJhbXMpCi0J CX0KLQl9Ci0JcmV0dXJuCi19Ci0KIGZ1bmMgbWFpbigpIHsKLQlicCA6PSAgQmVuY2htYXJrUGFy YW1zewotCQlXb3JrZXJzOltdV29ya2VyU2V0ewotCQkJe1BhcmFtczpXb3JrZXJQYXJhbXN7W11z dHJpbmd7ImJ1cm53YWl0IiwgIjIwIiwgIjIwMDAwMDAwIn19LAotCQkJCUNvdW50OjJ9LAotCQkJ e1BhcmFtczpXb3JrZXJQYXJhbXN7W11zdHJpbmd7ImJ1cm53YWl0IiwgIjEwIiwgIjMwMDAwMDAw In19LAotCQkJIAlDb3VudDozfSwKLQkJfSwKLQkJUnVudGltZVNlY29uZHM6NSwKLQl9Ci0KLQlX b3JrZXJzLCBlcnIgOj0gTmV3V29ya2VyTGlzdChicC5Xb3JrZXJzLCBXb3JrZXJQcm9jZXNzKQot CWlmIGVyciAhPSBuaWwgewotCQlmbXQuUHJpbnRsbigiRXJyb3IgY3JlYXRpbmcgd29ya2Vyczog JXYiLCBlcnIpCi0JCXJldHVybgotCX0KLQkKLQlyZXBvcnQgOj0gbWFrZShjaGFuIFdvcmtlclJl cG9ydCkKLQlkb25lIDo9IG1ha2UoY2hhbiBib29sKQotCXNpZ25hbHMgOj0gbWFrZShjaGFuIG9z LlNpZ25hbCwgMSkKLQotCXNpZ25hbC5Ob3RpZnkoc2lnbmFscywgb3MuSW50ZXJydXB0KQorCWZp bGVuYW1lIDo9ICJ0ZXN0LmJlbmNoIgorCisJc3dpdGNoKG9zLkFyZ3NbMV0pIHsKKwljYXNlICJw bGFuIjoKKwkJcGxhbiA6PSAgQmVuY2htYXJrUGxhbnsKKwkJCWZpbGVuYW1lOmZpbGVuYW1lLAor CQkJUnVuczpbXUJlbmNobWFya1J1bnsKKwkJCQl7TGFiZWw6ImJhc2VsaW5lLWEiLAorCQkJCQlX b3JrZXJzOltdV29ya2VyU2V0eworCQkJCQkJe1BhcmFtczpXb3JrZXJQYXJhbXN7W11zdHJpbmd7 ImJ1cm53YWl0IiwgIjIwIiwgIjIwMDAwMDAwIn19LAorCQkJCQkJCUNvdW50OjF9fSwKKwkJCQkJ UnVudGltZVNlY29uZHM6NSx9LAorCQkJCXtMYWJlbDoiYmFzZWxpbmUtYiIsCisJCQkJCVdvcmtl cnM6W11Xb3JrZXJTZXR7CisJCQkJCQl7UGFyYW1zOldvcmtlclBhcmFtc3tbXXN0cmluZ3siYnVy bndhaXQiLCAiMTAiLCAiMjAwMDAwMDAifX0sCisJCQkJCQkJQ291bnQ6MX19LAorCQkJCQlSdW50 aW1lU2Vjb25kczo1LH0sCisJCQkJe0xhYmVsOiI0YSs0YiIsCisJCQkJCVdvcmtlcnM6W11Xb3Jr ZXJTZXR7CisJCQkJCQl7UGFyYW1zOldvcmtlclBhcmFtc3tbXXN0cmluZ3siYnVybndhaXQiLCAi MjAiLCAiMjAwMDAwMDAifX0sCisJCQkJCQkJQ291bnQ6NH0sCisJCQkJCQl7UGFyYW1zOldvcmtl clBhcmFtc3tbXXN0cmluZ3siYnVybndhaXQiLCAiMTAiLCAiMzAwMDAwMDAifX0sCisJCQkJCQkJ Q291bnQ6NH19LAorCQkJCQlSdW50aW1lU2Vjb25kczo1LH0sCisJCQl9fQorCQllcnIgOj0gcGxh bi5TYXZlKCkKKwkJaWYgZXJyICE9IG5pbCB7CisJCQlmbXQuUHJpbnRsbigiU2F2aW5nIHBsYW4g IiwgZmlsZW5hbWUsICIgIiwgZXJyKQorCQkJb3MuRXhpdCgxKQorCQl9CisJCWZtdC5QcmludGxu KCJDcmVhdGVkIHBsYW4gaW4gIiwgZmlsZW5hbWUpCisJY2FzZSAicnVuIjoKKwkJcGxhbiwgZXJy IDo9IExvYWRCZW5jaG1hcmsoZmlsZW5hbWUpCisJCWlmIGVyciAhPSBuaWwgeworCQkJZm10LlBy aW50bG4oIkxvYWRpbmcgYmVuY2htYXJrICIsIGZpbGVuYW1lLCAiICIsIGVycikKKwkJCW9zLkV4 aXQoMSkKKwkJfQogCQotCWkgOj0gV29ya2Vycy5TdGFydChyZXBvcnQsIGRvbmUpCi0KLQl0aW1l b3V0IDo9IHRpbWUuQWZ0ZXIodGltZS5EdXJhdGlvbihicC5SdW50aW1lU2Vjb25kcykgKiB0aW1l LlNlY29uZCk7Ci0Ja2lsbGVkIDo9IGZhbHNlCi0JZm9yIGkgPiAwIHsKLQkJc2VsZWN0IHsKLQkJ Y2FzZSByIDo9IDwtcmVwb3J0OgotCQkJUmVwb3J0KCZXb3JrZXJzW3IuSWRdLCByKQotCQljYXNl IDwtZG9uZToKLQkJCWktLTsKLQkJCWZtdC5QcmludGxuKGksICJ3b3JrZXJzIGxlZnQiKTsKLQkJ Y2FzZSA8LXNpZ25hbHM6Ci0JCWNhc2UgPC10aW1lb3V0OgotCQkJaWYgISBraWxsZWQgewotCQkJ CWZtdC5QcmludGxuKCJTSUdJTlQgcmVjZWlldmVkLCBzaHV0dGluZyBkb3duIHdvcmtlcnMiKQot CQkJCVdvcmtlcnMuU3RvcCgpCi0JCQkJa2lsbGVkID0gdHJ1ZQotCQkJfSBlbHNlIHsKLQkJCQlm bXQuUHJpbnRsbigiU2Vjb25kIFNJR0lOVCByZWNlaXZlZCwgZXhpdGluZyB3aXRob3V0IGNsZWFu aW5nIHVwIikKLQkJCQlvcy5FeGl0KDEpCi0JCQl9CisJCWVyciA9IHBsYW4uUnVuKCkKKwkJaWYg ZXJyICE9IG5pbCB7CisJCQlmbXQuUHJpbnRsbigiUnVubmluZyBiZW5jaG1hcmsgcnVuOiIsIGVy cikKKwkJCW9zLkV4aXQoMSkKIAkJfQorCWRlZmF1bHQ6CisJCWZtdC5QcmludGxuKCJVbmtub3du IGFyZ3VtZW50OiAiLCBvcy5BcmdzWzFdKQogCX0KIH0KKwotLSAKMi43LjQKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBs aXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2 ZWwK