From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH i-g-t v4] scripts/trace.pl: Optimize event parsing and processing Date: Fri, 22 Dec 2017 09:16:18 +0000 Message-ID: <20171222091618.17123-1-tvrtko.ursulin@linux.intel.com> References: <68395a05-cce4-399a-2b04-a8673310f0be@Intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr0-x234.google.com (mail-wr0-x234.google.com [IPv6:2a00:1450:400c:c0c::234]) by gabe.freedesktop.org (Postfix) with ESMTPS id 77F1488FA8 for ; Fri, 22 Dec 2017 09:16:35 +0000 (UTC) Received: by mail-wr0-x234.google.com with SMTP id w107so1529938wrb.9 for ; Fri, 22 Dec 2017 01:16:35 -0800 (PST) In-Reply-To: <68395a05-cce4-399a-2b04-a8673310f0be@Intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkEgY291cGxl IG9mIHNtYWxsIG9wdGltaXphdGlvbnMgd2hpY2ggYWx0b2dldGhlciBicmluZyBhcm91bmQgMzAl CmltcHJvdmVtZW50IGluIG15IHRlc3RpbmcuCgoxLiBEbyBsZXNzIHN0cmluZyBwcm9jZXNzaW5n IG9uIHRyYWNlcG9pbnRzIG5hbWVzIGFuZCBwdXNoIG1vcmUgb2YgdGhlCiAgIGNoZWNrIGludG8g dGhlIGlmLWxhZGRlci4KCjIuIFB1bGwgb3V0IGNvbW1vbiBkYiBrZXkgYW5kIGN0eCBwcm9jZXNz aW5nIGFuZCBjYWNoZSBjb21tb24gdmFsdWVzIGluCiAgIGxvY2FsIHZhcnMuCgozLiBLZXkgdmFs dWUgcGFpciBwYXJzaW5nIGlzIGZhc3RlciB3aXRoIGEgcmVnZXhwLgoKNC4gQXZvaWQgc29ydGlu ZyB0aGUgZGIgaGFzaCBtdWx0aXBsZSB0aW1lcyBpZiBwb3NzaWJsZS4KCnYyOgogKiBVc2UgZmFz dGVyIGtleS12YWx1ZSBzcGxpdHRpbmcgbWV0aG9kLiAoSm9obiBIYXJyaXNvbikKCnYzOgogKiBG aXggZmxvYXRpbmctcG9pbnQgdG8gaW50IHRpbWUgY29udmVyc2lvbi4KCnY0OgogKiBGaXggcmVm YWN0b3JpbmcgYW5kIGxvZ2ljIGZhaWxzLiAoSm9obiBIYXJyaXNvbikKClNpZ25lZC1vZmYtYnk6 IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+CkNjOiBKb2huIEhhcnJp c29uIDxKb2huLkMuSGFycmlzb25AaW50ZWwuY29tPgotLS0KIHNjcmlwdHMvdHJhY2UucGwgfCAx MTcgKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogMSBmaWxlIGNoYW5nZWQsIDUyIGluc2VydGlvbnMoKyksIDY1IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3NjcmlwdHMvdHJhY2UucGwgYi9zY3JpcHRzL3RyYWNlLnBsCmluZGV4IGFkZTBh OTE1NGJkNy4uY2I5MzkwMGRkNjIwIDEwMDc1NQotLS0gYS9zY3JpcHRzL3RyYWNlLnBsCisrKyBi L3NjcmlwdHMvdHJhY2UucGwKQEAgLTM1NiwxMTAgKzM1Niw5NCBAQCBteSAkcHJldl9mcmVxID0g MDsKIG15ICRwcmV2X2ZyZXFfdHMgPSAwOwogd2hpbGUgKDw+KSB7CiAJbXkgQGZpZWxkczsKLQlt eSBAdG1wOwogCW15ICR0cF9uYW1lOwotCW15ICR0aW1lOwogCW15ICV0cDsKLQlteSAka2V5Owor CW15ICgkdGltZSwgJGN0eCwgJHJpbmcsICRzZXFubywgJG9yaWdfY3R4LCAka2V5KTsKIAogCWNo b21wOwogCUBmaWVsZHMgPSBzcGxpdCAnICc7CiAKKwljaG9wICRmaWVsZHNbM107CisJJHRpbWUg PSBpbnQoJGZpZWxkc1szXSAqIDEwMDAwMDAuMCArIDAuNSk7CisKIAkkdHBfbmFtZSA9ICRmaWVs ZHNbNF07Ci0JQHRtcCA9IHNwbGl0ICc6JywgJHRwX25hbWUsIDI7Ci0JbmV4dCB1bmxlc3MgJHRt cFswXSBlcSAnaTkxNSc7Ci0JJHRwX25hbWUgPSAkdG1wWzFdOwotCWNob3AgJHRwX25hbWU7CiAK LQljaG9wICRmaWVsZHNbM107Ci0JJHRpbWUgPSAkZmllbGRzWzNdICogMTAwMDAwMC4wOwogCXNw bGljZSBAZmllbGRzLCAwLCA1OwogCiAJZm9yZWFjaCBteSAkZiAoQGZpZWxkcykgewotCQlteSBA a3YgPSBzcGxpdCAnPXwsJywgJGY7CisJCW15ICgkaywgJHYpOwogCi0JCSRrdlswXSA9ICdnbG9i YWwnIGlmICRrdlswXSBlcSAnZ2xvYmFsX3NlcW5vJzsKLQotCQkkdHB7JGt2WzBdfSA9ICRrdlsx XTsKKwkJbmV4dCB1bmxlc3MgJGYgPX4gbS89LzsKKwkJKCRrLCAkdikgPSAoJGAsICQnKTsKKwkJ JGsgPSAnZ2xvYmFsJyBpZiAkayBlcSAnZ2xvYmFsX3NlcW5vJzsKKwkJY2hvcCAkdiBpZiBzdWJz dHIoJHYsIC0xLCAxKSBlcSAnLCc7CisJCSR0cHska30gPSAkdjsKIAl9CiAKIAluZXh0IGlmIGV4 aXN0cyAkdHB7J3JpbmcnfSBhbmQgZXhpc3RzICRpZ25vcmVfcmluZ3skdHB7J3JpbmcnfX07CiAK LQlpZiAoJHRwX25hbWUgZXEgJ2k5MTVfZ2VtX3JlcXVlc3Rfd2FpdF9iZWdpbicpIHsKLQkJbXkg JXJ3OworCWlmIChleGlzdHMgJHRweydyaW5nJ30gYW5kIGV4aXN0cyAkdHB7J3NlcW5vJ30pIHsK KwkJJHJpbmcgPSAkdHB7J3JpbmcnfTsKKwkJJHNlcW5vID0gJHRweydzZXFubyd9OwogCi0JCSR0 cHsnY3R4J30gPSBzYW5pdGl6ZV9jdHgoJHRweydjdHgnfSwgJHRweydyaW5nJ30pOwotCQkka2V5 ID0gZGJfa2V5KCR0cHsncmluZyd9LCAkdHB7J2N0eCd9LCAkdHB7J3NlcW5vJ30pOworCQlpZiAo ZXhpc3RzICR0cHsnY3R4J30pIHsKKwkJCSRjdHggPSAkdHB7J2N0eCd9OworCQkJJG9yaWdfY3R4 ID0gJGN0eDsKKwkJCSRjdHggPSBzYW5pdGl6ZV9jdHgoJGN0eCwgJHJpbmcpOworCQkJJGtleSA9 IGRiX2tleSgkcmluZywgJGN0eCwgJHNlcW5vKTsKKwkJfQorCX0KKworCWlmICgkdHBfbmFtZSBl cSAnaTkxNTppOTE1X2dlbV9yZXF1ZXN0X3dhaXRfYmVnaW46JykgeworCQlteSAlcnc7CiAKIAkJ bmV4dCBpZiBleGlzdHMgJHJlcXdhaXR7JGtleX07CiAKIAkJJHJ3eydrZXknfSA9ICRrZXk7Ci0J CSRyd3sncmluZyd9ID0gJHRweydyaW5nJ307Ci0JCSRyd3snc2Vxbm8nfSA9ICR0cHsnc2Vxbm8n fTsKLQkJJHJ3eydjdHgnfSA9ICR0cHsnY3R4J307CisJCSRyd3sncmluZyd9ID0gJHJpbmc7CisJ CSRyd3snc2Vxbm8nfSA9ICRzZXFubzsKKwkJJHJ3eydjdHgnfSA9ICRjdHg7CiAJCSRyd3snc3Rh cnQnfSA9ICR0aW1lOwogCQkkcmVxd2FpdHska2V5fSA9IFwlcnc7Ci0JCW5leHQ7Ci0JfSBlbHNp ZiAoJHRwX25hbWUgZXEgJ2k5MTVfZ2VtX3JlcXVlc3Rfd2FpdF9lbmQnKSB7Ci0JCSR0cHsnY3R4 J30gPSBzYW5pdGl6ZV9jdHgoJHRweydjdHgnfSwgJHRweydyaW5nJ30pOwotCQkka2V5ID0gZGJf a2V5KCR0cHsncmluZyd9LCAkdHB7J2N0eCd9LCAkdHB7J3NlcW5vJ30pOwotCisJfSBlbHNpZiAo JHRwX25hbWUgZXEgJ2k5MTU6aTkxNV9nZW1fcmVxdWVzdF93YWl0X2VuZDonKSB7CiAJCW5leHQg dW5sZXNzIGV4aXN0cyAkcmVxd2FpdHska2V5fTsKIAogCQkkcmVxd2FpdHska2V5fS0+eydlbmQn fSA9ICR0aW1lOwotCQluZXh0OwotCX0gZWxzaWYgKCR0cF9uYW1lIGVxICdpOTE1X2dlbV9yZXF1 ZXN0X2FkZCcpIHsKLQkJbXkgJG9yaWdfY3R4ID0gJHRweydjdHgnfTsKLQotCQkkdHB7J2N0eCd9 ID0gc2FuaXRpemVfY3R4KCR0cHsnY3R4J30sICR0cHsncmluZyd9KTsKLQkJJGtleSA9IGRiX2tl eSgkdHB7J3JpbmcnfSwgJHRweydjdHgnfSwgJHRweydzZXFubyd9KTsKLQorCX0gZWxzaWYgKCR0 cF9uYW1lIGVxICdpOTE1Omk5MTVfZ2VtX3JlcXVlc3RfYWRkOicpIHsKIAkJaWYgKGV4aXN0cyAk cXVldWV7JGtleX0pIHsKIAkJCSRjdHhkYnskb3JpZ19jdHh9Kys7Ci0JCQkkdHB7J2N0eCd9ID0g c2FuaXRpemVfY3R4KCRvcmlnX2N0eCwgJHRweydyaW5nJ30pOwotCQkJJGtleSA9IGRiX2tleSgk dHB7J3JpbmcnfSwgJHRweydjdHgnfSwgJHRweydzZXFubyd9KTsKKwkJCSRjdHggPSBzYW5pdGl6 ZV9jdHgoJG9yaWdfY3R4LCAkcmluZyk7CisJCQkka2V5ID0gZGJfa2V5KCRyaW5nLCAkY3R4LCAk c2Vxbm8pOwogCQl9CiAKIAkJJHF1ZXVleyRrZXl9ID0gJHRpbWU7Ci0JCW5leHQ7Ci0JfSBlbHNp ZiAoJHRwX25hbWUgZXEgJ2k5MTVfZ2VtX3JlcXVlc3Rfc3VibWl0JykgewotCQkkdHB7J2N0eCd9 ID0gc2FuaXRpemVfY3R4KCR0cHsnY3R4J30sICR0cHsncmluZyd9KTsKLQkJJGtleSA9IGRiX2tl eSgkdHB7J3JpbmcnfSwgJHRweydjdHgnfSwgJHRweydzZXFubyd9KTsKLQorCX0gZWxzaWYgKCR0 cF9uYW1lIGVxICdpOTE1Omk5MTVfZ2VtX3JlcXVlc3Rfc3VibWl0OicpIHsKIAkJZGllIGlmIGV4 aXN0cyAkc3VibWl0eyRrZXl9OwogCQlkaWUgdW5sZXNzIGV4aXN0cyAkcXVldWV7JGtleX07CiAK IAkJJHN1Ym1pdHska2V5fSA9ICR0aW1lOwotCQluZXh0OwotCX0gZWxzaWYgKCR0cF9uYW1lIGVx ICdpOTE1X2dlbV9yZXF1ZXN0X2luJykgeworCX0gZWxzaWYgKCR0cF9uYW1lIGVxICdpOTE1Omk5 MTVfZ2VtX3JlcXVlc3RfaW46JykgewogCQlteSAlcmVxOwogCi0JCSR0cHsnY3R4J30gPSBzYW5p dGl6ZV9jdHgoJHRweydjdHgnfSwgJHRweydyaW5nJ30pOwotCQkka2V5ID0gZGJfa2V5KCR0cHsn cmluZyd9LCAkdHB7J2N0eCd9LCAkdHB7J3NlcW5vJ30pOwotCiAJCWRpZSBpZiBleGlzdHMgJGRi eyRrZXl9OwogCQlkaWUgdW5sZXNzIGV4aXN0cyAkcXVldWV7JGtleX07CiAJCWRpZSB1bmxlc3Mg ZXhpc3RzICRzdWJtaXR7JGtleX07CiAKIAkJJHJlcXsnc3RhcnQnfSA9ICR0aW1lOwotCQkkcmVx eydyaW5nJ30gPSAkdHB7J3JpbmcnfTsKLQkJJHJlcXsnc2Vxbm8nfSA9ICR0cHsnc2Vxbm8nfTsK LQkJJHJlcXsnY3R4J30gPSAkdHB7J2N0eCd9OwotCQkkcmVxeyduYW1lJ30gPSAkdHB7J2N0eCd9 IC4gJy8nIC4gJHRweydzZXFubyd9OworCQkkcmVxeydyaW5nJ30gPSAkcmluZzsKKwkJJHJlcXsn c2Vxbm8nfSA9ICRzZXFubzsKKwkJJHJlcXsnY3R4J30gPSAkY3R4OworCQkkcmVxeyduYW1lJ30g PSAkY3R4IC4gJy8nIC4gJHNlcW5vOwogCQkkcmVxeydnbG9iYWwnfSA9ICR0cHsnZ2xvYmFsJ307 CiAJCSRyZXF7J3BvcnQnfSA9ICR0cHsncG9ydCd9OwogCQkkcmVxeydxdWV1ZSd9ID0gJHF1ZXVl eyRrZXl9OwogCQkkcmVxeydzdWJtaXQtZGVsYXknfSA9ICRzdWJtaXR7JGtleX0gLSAkcXVldWV7 JGtleX07CiAJCSRyZXF7J2V4ZWN1dGUtZGVsYXknfSA9ICRyZXF7J3N0YXJ0J30gLSAkc3VibWl0 eyRrZXl9OwotCQkkcmluZ3N7JHRweydyaW5nJ319ID0gJGdpZCsrIHVubGVzcyBleGlzdHMgJHJp bmdzeyR0cHsncmluZyd9fTsKLQkJJHJpbmdtYXB7JHJpbmdzeyR0cHsncmluZyd9fX0gPSAkdHB7 J3JpbmcnfTsKKwkJJHJpbmdzeyRyaW5nfSA9ICRnaWQrKyB1bmxlc3MgZXhpc3RzICRyaW5nc3sk cmluZ307CisJCSRyaW5nbWFweyRyaW5nc3skcmluZ319ID0gJHJpbmc7CiAJCSRkYnska2V5fSA9 IFwlcmVxOwotCQluZXh0OwotCX0gZWxzaWYgKCR0cF9uYW1lIGVxICdpOTE1X2dlbV9yZXF1ZXN0 X291dCcpIHsKLQkJbXkgJGdrZXkgPSBnbG9iYWxfa2V5KCR0cHsncmluZyd9LCAkdHB7J2dsb2Jh bCd9KTsKLQotCQkkdHB7J2N0eCd9ID0gc2FuaXRpemVfY3R4KCR0cHsnY3R4J30sICR0cHsncmlu Zyd9KTsKLQkJJGtleSA9IGRiX2tleSgkdHB7J3JpbmcnfSwgJHRweydjdHgnfSwgJHRweydzZXFu byd9KTsKKwl9IGVsc2lmICgkdHBfbmFtZSBlcSAnaTkxNTppOTE1X2dlbV9yZXF1ZXN0X291dDon KSB7CisJCW15ICRna2V5ID0gZ2xvYmFsX2tleSgkcmluZywgJHRweydnbG9iYWwnfSk7CiAKIAkJ ZGllIHVubGVzcyBleGlzdHMgJGRieyRrZXl9OwogCQlkaWUgdW5sZXNzIGV4aXN0cyAkZGJ7JGtl eX0tPnsnc3RhcnQnfTsKQEAgLTQ3NiwxNSArNDYwLDEyIEBAIHdoaWxlICg8PikgewogCQl9CiAJ CSRkYnska2V5fS0+eydkdXJhdGlvbid9ID0gJGRieyRrZXl9LT57J25vdGlmeSd9IC0gJGRieyRr ZXl9LT57J3N0YXJ0J307CiAJCSRkYnska2V5fS0+eydjb250ZXh0LWNvbXBsZXRlLWRlbGF5J30g PSAkZGJ7JGtleX0tPnsnZW5kJ30gLSAkZGJ7JGtleX0tPnsnbm90aWZ5J307Ci0JCW5leHQ7Ci0J fSBlbHNpZiAoJHRwX25hbWUgZXEgJ2ludGVsX2VuZ2luZV9ub3RpZnknKSB7Ci0JCSRub3RpZnl7 Z2xvYmFsX2tleSgkdHB7J3JpbmcnfSwgJHRweydzZXFubyd9KX0gPSAkdGltZTsKLQkJbmV4dDsK LQl9IGVsc2lmICgkdHBfbmFtZSBlcSAnaW50ZWxfZ3B1X2ZyZXFfY2hhbmdlJykgeworCX0gZWxz aWYgKCR0cF9uYW1lIGVxICdpOTE1OmludGVsX2VuZ2luZV9ub3RpZnk6JykgeworCQkkbm90aWZ5 e2dsb2JhbF9rZXkoJHJpbmcsICRzZXFubyl9ID0gJHRpbWU7CisJfSBlbHNpZiAoJHRwX25hbWUg ZXEgJ2k5MTU6aW50ZWxfZ3B1X2ZyZXFfY2hhbmdlOicpIHsKIAkJcHVzaCBAZnJlcXMsIFskcHJl dl9mcmVxX3RzLCAkdGltZSwgJHByZXZfZnJlcV0gaWYgJHByZXZfZnJlcTsKIAkJJHByZXZfZnJl cV90cyA9ICR0aW1lOwogCQkkcHJldl9mcmVxID0gJHRweyduZXdfZnJlcSd9OwotCQluZXh0Owog CX0KIH0KIApAQCAtNTU3LDcgKzUzOCwxMCBAQCBteSAoJXN1Ym1pdF9hdmcsICVleGVjdXRlX2F2 ZywgJWN0eHNhdmVfYXZnKTsKIG15ICRsYXN0X3RzID0gMDsKIG15ICRmaXJzdF90czsKIAotZm9y ZWFjaCBteSAka2V5IChzb3J0IHskZGJ7JGF9LT57J3N0YXJ0J30gPD0+ICRkYnskYn0tPnsnc3Rh cnQnfX0ga2V5cyAlZGIpIHsKK215IEBzb3J0ZWRfa2V5cyA9IHNvcnQgeyRkYnskYX0tPnsnc3Rh cnQnfSA8PT4gJGRieyRifS0+eydzdGFydCd9fSBrZXlzICVkYjsKK215ICRyZV9zb3J0ID0gMDsK KworZm9yZWFjaCBteSAka2V5IChAc29ydGVkX2tleXMpIHsKIAlteSAkcmluZyA9ICRkYnska2V5 fS0+eydyaW5nJ307CiAJbXkgJGVuZCA9ICRkYnska2V5fS0+eydlbmQnfTsKIApAQCAtNTg1LDYg KzU2OSw3IEBAIGZvcmVhY2ggbXkgJGtleSAoc29ydCB7JGRieyRhfS0+eydzdGFydCd9IDw9PiAk ZGJ7JGJ9LT57J3N0YXJ0J319IGtleXMgJWRiKSB7CiAKIAkJIyAyMHVzIHRvbGVyYW5jZQogCQlp ZiAoZXhpc3RzICRkYnskbmV4dF9rZXl9IGFuZCAkZGJ7JG5leHRfa2V5fS0+eydzdGFydCd9IDwg JHN0YXJ0ICsgMjApIHsKKwkJCSRyZV9zb3J0ID0gMTsKIAkJCSRkYnskbmV4dF9rZXl9LT57J3N0 YXJ0J30gPSAkc3RhcnQgKyAkZGJ7JGtleX0tPnsnZHVyYXRpb24nfTsKIAkJCSRkYnskbmV4dF9r ZXl9LT57J3N0YXJ0J30gPSAkZGJ7JG5leHRfa2V5fS0+eydlbmQnfSBpZiAkZGJ7JG5leHRfa2V5 fS0+eydzdGFydCd9ID4gJGRieyRuZXh0X2tleX0tPnsnZW5kJ307CiAJCQkkZGJ7JG5leHRfa2V5 fS0+eydkdXJhdGlvbid9ID0gJGRieyRuZXh0X2tleX0tPnsnbm90aWZ5J30gLSAkZGJ7JG5leHRf a2V5fS0+eydzdGFydCd9OwpAQCAtNjAxLDYgKzU4Niw4IEBAIGZvcmVhY2ggbXkgJGtleSAoc29y dCB7JGRieyRhfS0+eydzdGFydCd9IDw9PiAkZGJ7JGJ9LT57J3N0YXJ0J319IGtleXMgJWRiKSB7 CiAJJGN0eHNhdmVfYXZneyRyaW5nfSArPSAkZGJ7JGtleX0tPnsnZW5kJ30gLSAkZGJ7JGtleX0t Pnsnbm90aWZ5J307CiB9CiAKK0Bzb3J0ZWRfa2V5cyA9IHNvcnQgeyRkYnskYX0tPnsnc3RhcnQn fSA8PT4gJGRieyRifS0+eydzdGFydCd9fSBrZXlzICVkYiBpZiAkcmVfc29ydDsKKwogZm9yZWFj aCBteSAkcmluZyAoa2V5cyAlYmF0Y2hfYXZnKSB7CiAJJGJhdGNoX2F2Z3skcmluZ30gLz0gJGJh dGNoX2NvdW50eyRyaW5nfTsKIAkkYmF0Y2hfdG90YWxfYXZneyRyaW5nfSAvPSAkYmF0Y2hfY291 bnR7JHJpbmd9OwpAQCAtNjE2LDcgKzYwMyw3IEBAIGZvcmVhY2ggbXkgJGdpZCAoc29ydCBrZXlz ICVyaW5ncykgewogCW15IChAc18sIEBlXyk7CiAKIAkjIEV4dHJhY3QgYWxsIEdQVSBidXN5IGlu dGVydmFscyBhbmQgc29ydCB0aGVtLgotCWZvcmVhY2ggbXkgJGtleSAoc29ydCB7JGRieyRhfS0+ eydzdGFydCd9IDw9PiAkZGJ7JGJ9LT57J3N0YXJ0J319IGtleXMgJWRiKSB7CisJZm9yZWFjaCBt eSAka2V5IChAc29ydGVkX2tleXMpIHsKIAkJbmV4dCB1bmxlc3MgJGRieyRrZXl9LT57J3Jpbmcn fSA9PSAkcmluZzsKIAkJcHVzaCBAc18sICRkYnska2V5fS0+eydzdGFydCd9OwogCQlwdXNoIEBl XywgJGRieyRrZXl9LT57J2VuZCd9OwpAQCAtNjYwLDcgKzY0Nyw3IEBAIG15IEBncHVfaW50ZXJ2 YWxzOwogbXkgKEBzXywgQGVfKTsKIAogIyBFeHRyYWN0IGFsbCBHUFUgYnVzeSBpbnRlcnZhbHMg YW5kIHNvcnQgdGhlbS4KLWZvcmVhY2ggbXkgJGtleSAoc29ydCB7JGRieyRhfS0+eydzdGFydCd9 IDw9PiAkZGJ7JGJ9LT57J3N0YXJ0J319IGtleXMgJWRiKSB7Citmb3JlYWNoIG15ICRrZXkgKEBz b3J0ZWRfa2V5cykgewogCXB1c2ggQHNfLCAkZGJ7JGtleX0tPnsnc3RhcnQnfTsKIAlwdXNoIEBl XywgJGRieyRrZXl9LT57J2VuZCd9OwogCWRpZSBpZiAkZGJ7JGtleX0tPnsnc3RhcnQnfSA+ICRk Ynska2V5fS0+eydlbmQnfTsKLS0gCjIuMTQuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaW50ZWwtZ2Z4Cg==