From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH igt] tools/intel_reg: Add reading and writing registers through engine Date: Mon, 08 Jan 2018 16:31:11 +0200 Message-ID: <87mv1o8lsg.fsf@intel.com> References: <151213877121.9425.7682275503076761140@mail.alporthouse.com> <20180108141202.8718-1-mika.kuoppala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 54DB989C5E for ; Mon, 8 Jan 2018 14:26:52 +0000 (UTC) In-Reply-To: <20180108141202.8718-1-mika.kuoppala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Mika Kuoppala , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCAwOCBKYW4gMjAxOCwgTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBsaW51eC5p bnRlbC5jb20+IHdyb3RlOgo+IEFkZCBvcHRpb24gdG8gc3BlY2lmeSBlbmdpbmUgZm9yIHJlZ2lz dGVyIHJlYWQvd3JpdGUgb3BlcmF0aW9uLgo+IElmIGVuZ2luZSBpcyBzcGVjaWZpZWQsIHVzZSBN SV9MT0FEX1JFR0lTVEVSX0lNTSBhbmQgTUlfU1RPUkVfUkVHSVNURVJfSU1NCj4gdG8gd3JpdGUg YW5kIHJlYWQgcmVnaXN0ZXIgdXNpbmcgYSBiYXRjaCB0YXJnZXRlZCBhdCB0aGF0IGVuZ2luZS4K CkNvcHktcGFzdGluZyBmcm9tIHRoZSBtYW4gcGFnZSwgd2UgYWxyZWFkeSBoYXZlIHRoZSBub3Rh dGlvbjoKCiJSZWdpc3RlcnMgYXJlIGRlZmluZWQgYXMgWyhQT1JUTkFNRXxQT1JUTlVNfE1NSU8t T0ZGU0VUKTpdKFJFR05BTUV8UkVHQUREUikuIgoKV2h5IGRvbid0IHdlIGFkZCB0aGlzIGFzIEVO R0lORTpSRUdOQU1FIG9yIHNvbWV0aGluZyBpbnN0ZWFkIG9mIGFuIGV4dHJhCi0tZW5naW5lIHBh cmFtZXRlcj8gQXMgYSAicG9ydCIuIFN1cmUsIGl0J3MgbW9yZSB3b3JrLCBidXQgSSByZWFsbHkg bGlrZQp0aGUgY3VycmVudCBwb3NzaWJpbGl0eSBvZiByZWFkaW5nIGFsbCB0eXBlcyBvZiByZWdp c3RlcnMgYXQgb25jZS4gTm93CnlvdSBwcmV2ZW50IGR1bXBzIHRoYXQgd291bGQgY29udGFpbiBi b3RoIG1taW8gYW5kIGJhdGNoIGJhc2VkIHJlYWRzLgoKQlIsCkphbmkuCgoKPgo+IHYyOiBubyBN SV9OT09QIGFmdGVyIEJCRSAoQ2hyaXMpCj4gdjM6IHVzZSBtb2Rlcm4gZW5naW5lIG5hbWVzIChD aHJpcyksIHVzZSBnbG9iYWwgZmQKPgo+IENjOiBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAaW50 ZWwuY29tPgo+IENjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiBD QzogSm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgo+IFNp Z25lZC1vZmYtYnk6IE1pa2EgS3VvcHBhbGEgPG1pa2Eua3VvcHBhbGFAbGludXguaW50ZWwuY29t Pgo+IC0tLQo+ICB0b29scy9pbnRlbF9yZWcuYyB8IDE1NiArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KPiAgMSBmaWxlIGNoYW5nZWQsIDE1NCBp bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2ludGVs X3JlZy5jIGIvdG9vbHMvaW50ZWxfcmVnLmMKPiBpbmRleCAwMGQyYTRhMS4uN2YzNDk0ZWYgMTAw NjQ0Cj4gLS0tIGEvdG9vbHMvaW50ZWxfcmVnLmMKPiArKysgYi90b29scy9pbnRlbF9yZWcuYwo+ IEBAIC0zMyw2ICszMyw3IEBACj4gICNpbmNsdWRlIDx1bmlzdGQuaD4KPiAgCj4gICNpbmNsdWRl ICJpZ3QuaCIKPiArI2luY2x1ZGUgImlndF9ndC5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfaW8uaCIK PiAgI2luY2x1ZGUgImludGVsX2NoaXBzZXQuaCIKPiAgCj4gQEAgLTczLDYgKzc0LDExIEBAIHN0 cnVjdCBjb25maWcgewo+ICAKPiAgCS8qIHJlZ2lzdGVyIHNwZWMgKi8KPiAgCWNoYXIgKnNwZWNm aWxlOwo+ICsKPiArCS8qIGVuZ2luZSB0byB1c2UgZm9yIGxyaSAod3JpdGUpIGFuZCBzcm0gKHJl YWQpICovCj4gKwljaGFyICplbmdpbmU7Cj4gKwlpbnQgZmQ7Cj4gKwo+ICAJc3RydWN0IHJlZyAq cmVnczsKPiAgCXNzaXplX3QgcmVnY291bnQ7Cj4gIAo+IEBAIC0yMzYsMTMgKzI0MiwxNDAgQEAg c3RhdGljIHZvaWQgZHVtcF9kZWNvZGUoc3RydWN0IGNvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgcmVn ICpyZWcsIHVpbnQzMl90IHZhbCkKPiAgCX0KPiAgfQo+ICAKPiArc3RhdGljIGNvbnN0IHN0cnVj dCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZmluZF9lbmdpbmUoY29uc3QgY2hhciAqbmFtZSwK PiArCQkJCQkJCSBib29sICpzZWN1cmUpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBpbnRlbF9leGVj dXRpb25fZW5naW5lMiAqZTsKPiArCj4gKwlpZiAoc3RybGVuKG5hbWUpIDwgMikKPiArCQlnb3Rv IG91dDsKPiArCj4gKwlpZiAobmFtZVswXSA9PSAnLScpIHsKPiArCQkqc2VjdXJlID0gZmFsc2U7 Cj4gKwkJbmFtZSsrOwo+ICsJfSBlbHNlIHsKPiArCQkqc2VjdXJlID0gdHJ1ZTsKPiArCX0KPiAr Cj4gKwlmb3IgKGUgPSBpbnRlbF9leGVjdXRpb25fZW5naW5lczI7IGUtPm5hbWU7IGUrKykgewo+ ICsJCWlmICghc3RyY21wKGUtPm5hbWUsIG5hbWUpKQo+ICsJCQlyZXR1cm4gZTsKPiArCX0KPiAr Cj4gK291dDoKPiArCWZwcmludGYoc3RkZXJyLCAibm8gc3VjaCBlbmdpbmUgYXMgJyVzJ1xuIiwg bmFtZSk7Cj4gKwo+ICsJZnByaW50ZihzdGRlcnIsICJ2YWxpZCBlbmdpbmVzOiIpOwo+ICsJZm9y IChlID0gaW50ZWxfZXhlY3V0aW9uX2VuZ2luZXMyOyBlLT5uYW1lOyBlKyspCj4gKwkJZnByaW50 ZihzdGRlcnIsICIgJXMiLCBlLT5uYW1lKTsKPiArCj4gKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7 Cj4gKwo+ICsJZXhpdChFWElUX0ZBSUxVUkUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJlZ2lz dGVyX3NybShzdHJ1Y3QgY29uZmlnICpjb25maWcsIHN0cnVjdCByZWcgKnJlZywKPiArCQkJdWlu dDMyX3QgKnZhbF9pbikKPiArewo+ICsJY29uc3QgaW50IGdlbiA9IGludGVsX2dlbihjb25maWct PmRldmlkKTsKPiArCWNvbnN0IGJvb2wgcjY0YiA9IGdlbiA+PSA4Owo+ICsJY29uc3QgdWludDMy X3QgY3R4ID0gMDsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9ialsyXTsK PiArCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvY1sxXTsKPiArCXN0 cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXVpbnQzMl90ICpiYXRj aCwgKnI7Cj4gKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmVuZ2luZTsK PiArCWJvb2wgc2VjdXJlOwo+ICsJaW50IGZkLCBpOwo+ICsJdWludDMyX3QgdmFsOwo+ICsKPiAr CWlmIChjb25maWctPmZkID09IC0xKSB7Cj4gKwkJY29uZmlnLT5mZCA9IF9fZHJtX29wZW5fZHJp dmVyKERSSVZFUl9JTlRFTCk7Cj4gKwkJaWYgKGNvbmZpZy0+ZmQgPT0gLTEpIHsKPiArCQkJZnBy aW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIGRyaXZlcjogJXMiLAo+ICsJCQkJc3RyZXJyb3Io ZXJybm8pKTsKPiArCQkJZXhpdChFWElUX0ZBSUxVUkUpOwo+ICsJCX0KPiArCX0KPiArCj4gKwlm ZCA9IGNvbmZpZy0+ZmQ7Cj4gKwllbmdpbmUgPSBmaW5kX2VuZ2luZShjb25maWctPmVuZ2luZSwg JnNlY3VyZSk7Cj4gKwo+ICsJbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKG9iaikpOwo+ICsJb2JqWzBd LmhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIDQwOTYpOwo+ICsJb2JqWzFdLmhhbmRsZSA9IGdlbV9j cmVhdGUoZmQsIDQwOTYpOwo+ICsJb2JqWzFdLnJlbG9jc19wdHIgPSB0b191c2VyX3BvaW50ZXIo cmVsb2MpOwo+ICsJb2JqWzFdLnJlbG9jYXRpb25fY291bnQgPSAxOwo+ICsKPiArCWJhdGNoID0g Z2VtX21tYXBfX2NwdShmZCwgb2JqWzFdLmhhbmRsZSwgMCwgNDA5NiwgUFJPVF9XUklURSk7Cj4g KwlnZW1fc2V0X2RvbWFpbihmZCwgb2JqWzFdLmhhbmRsZSwKPiArCQkgICAgICAgSTkxNV9HRU1f RE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQVSk7Cj4gKwo+ICsJaSA9IDA7Cj4gKwlpZiAo dmFsX2luKSB7Cj4gKwkJYmF0Y2hbaSsrXSA9IE1JX05PT1A7Cj4gKwkJYmF0Y2hbaSsrXSA9IE1J X05PT1A7Cj4gKwo+ICsJCWJhdGNoW2krK10gPSBNSV9MT0FEX1JFR0lTVEVSX0lNTTsKPiArCQli YXRjaFtpKytdID0gcmVnLT5hZGRyOwo+ICsJCWJhdGNoW2krK10gPSAqdmFsX2luOwo+ICsJCWJh dGNoW2krK10gPSBNSV9OT09QOwo+ICsJfQo+ICsKPiArCWJhdGNoW2krK10gPSAweDI0IDw8IDIz IHwgKDEgKyByNjRiKTsgLyogU1JNICovCj4gKwliYXRjaFtpKytdID0gcmVnLT5hZGRyOwo+ICsJ cmVsb2NbMF0udGFyZ2V0X2hhbmRsZSA9IG9ialswXS5oYW5kbGU7Cj4gKwlyZWxvY1swXS5wcmVz dW1lZF9vZmZzZXQgPSBvYmpbMF0ub2Zmc2V0Owo+ICsJcmVsb2NbMF0ub2Zmc2V0ID0gaSAqIHNp emVvZih1aW50MzJfdCk7Cj4gKwlyZWxvY1swXS5kZWx0YSA9IDA7Cj4gKwlyZWxvY1swXS5yZWFk X2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOwo+ICsJcmVsb2NbMF0ud3JpdGVfZG9t YWluID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRFUjsKPiArCWJhdGNoW2krK10gPSByZWxvY1swXS5k ZWx0YTsKPiArCWlmIChyNjRiKQo+ICsJCWJhdGNoW2krK10gPSAwOwo+ICsKPiArCWJhdGNoW2kr K10gPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsJbXVubWFwKGJhdGNoLCA0MDk2KTsKPiArCj4g KwltZW1zZXQoJmV4ZWNidWYsIDAsIHNpemVvZihleGVjYnVmKSk7Cj4gKwlleGVjYnVmLmJ1ZmZl cnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKG9iaik7Cj4gKwlleGVjYnVmLmJ1ZmZlcl9jb3VudCA9 IDI7Cj4gKwlleGVjYnVmLmZsYWdzID0gZ2VtX2NsYXNzX2luc3RhbmNlX3RvX2ViX2ZsYWdzKGZk LAo+ICsJCQkJCQkgICAgICAgZW5naW5lLT5jbGFzcywKPiArCQkJCQkJICAgICAgIGVuZ2luZS0+ aW5zdGFuY2UpOwo+ICsJaWYgKHNlY3VyZSkKPiArCQlleGVjYnVmLmZsYWdzIHw9IEk5MTVfRVhF Q19TRUNVUkU7Cj4gKwo+ICsJaWYgKGNvbmZpZy0+dmVyYm9zaXR5ID4gMCkKPiArCQlwcmludGYo IiVzOiB1c2luZyAlc3ByaXZpbGVnZWQgYmF0Y2hcbiIsCj4gKwkJICAgICAgIGVuZ2luZS0+bmFt ZSwKPiArCQkgICAgICAgc2VjdXJlID8gIiIgOiAibm9uLSIpOwo+ICsKPiArCWV4ZWNidWYucnN2 ZDEgPSBjdHg7Cj4gKwlnZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOwo+ICsJZ2VtX2Nsb3NlKGZk LCBvYmpbMV0uaGFuZGxlKTsKPiArCj4gKwlyID0gZ2VtX21tYXBfX2NwdShmZCwgb2JqWzBdLmhh bmRsZSwgMCwgNDA5NiwgUFJPVF9SRUFEKTsKPiArCWdlbV9zZXRfZG9tYWluKGZkLCBvYmpbMF0u aGFuZGxlLCBJOTE1X0dFTV9ET01BSU5fQ1BVLCAwKTsKPiArCj4gKwl2YWwgPSByWzBdOwo+ICsJ bXVubWFwKHIsIDQwOTYpOwo+ICsKPiArCWdlbV9jbG9zZShmZCwgb2JqWzBdLmhhbmRsZSk7Cj4g Kwo+ICsJcmV0dXJuIHZhbDsKPiArfQo+ICsKPiAgc3RhdGljIGludCByZWFkX3JlZ2lzdGVyKHN0 cnVjdCBjb25maWcgKmNvbmZpZywgc3RydWN0IHJlZyAqcmVnLCB1aW50MzJfdCAqdmFscCkKPiAg ewo+ICAJdWludDMyX3QgdmFsID0gMDsKPiAgCj4gIAlzd2l0Y2ggKHJlZy0+cG9ydF9kZXNjLnBv cnQpIHsKPiAgCWNhc2UgUE9SVF9NTUlPOgo+IC0JCXZhbCA9IElOUkVHKHJlZy0+bW1pb19vZmZz ZXQgKyByZWctPmFkZHIpOwo+ICsJCWlmIChjb25maWctPmVuZ2luZSkKPiArCQkJdmFsID0gcmVn aXN0ZXJfc3JtKGNvbmZpZywgcmVnLCBOVUxMKTsKPiArCQllbHNlCj4gKwkJCXZhbCA9IElOUkVH KHJlZy0+bW1pb19vZmZzZXQgKyByZWctPmFkZHIpOwo+ICAJCWJyZWFrOwo+ICAJY2FzZSBQT1JU X1BPUlRJT19WR0E6Cj4gIAkJaW9wbCgzKTsKPiBAQCAtMjk5LDcgKzQzMiwxMSBAQCBzdGF0aWMg aW50IHdyaXRlX3JlZ2lzdGVyKHN0cnVjdCBjb25maWcgKmNvbmZpZywgc3RydWN0IHJlZyAqcmVn LCB1aW50MzJfdCB2YWwpCj4gIAo+ICAJc3dpdGNoIChyZWctPnBvcnRfZGVzYy5wb3J0KSB7Cj4g IAljYXNlIFBPUlRfTU1JTzoKPiAtCQlPVVRSRUcocmVnLT5tbWlvX29mZnNldCArIHJlZy0+YWRk ciwgdmFsKTsKPiArCQlpZiAoY29uZmlnLT5lbmdpbmUpIHsKPiArCQkJcmVnaXN0ZXJfc3JtKGNv bmZpZywgcmVnLCAmdmFsKTsKPiArCQl9IGVsc2Ugewo+ICsJCQlPVVRSRUcocmVnLT5tbWlvX29m ZnNldCArIHJlZy0+YWRkciwgdmFsKTsKPiArCQl9Cj4gIAkJYnJlYWs7Cj4gIAljYXNlIFBPUlRf UE9SVElPX1ZHQToKPiAgCQlpZiAodmFsID4gMHhmZikgewo+IEBAIC02NDEsNiArNzc4LDcgQEAg c3RhdGljIGludCBpbnRlbF9yZWdfaGVscChzdHJ1Y3QgY29uZmlnICpjb25maWcsIGludCBhcmdj LCBjaGFyICphcmd2W10pCj4gIAlwcmludGYoIiAtLXNwZWM9UEFUSCAgICBSZWFkIHJlZ2lzdGVy IHNwZWMgZnJvbSBkaXJlY3Rvcnkgb3IgZmlsZVxuIik7Cj4gIAlwcmludGYoIiAtLW1taW89RklM RSAgICBVc2UgYW4gTU1JTyBzbmFwc2hvdFxuIik7Cj4gIAlwcmludGYoIiAtLWRldmlkPURFVklE ICBTcGVjaWZ5IFBDSSBkZXZpY2UgSUQgZm9yIC0tbW1pbz1GSUxFXG4iKTsKPiArCXByaW50Zigi IC0tZW5naW5lPVstXUVOR0lORSBVc2UgYSBzcGVjaWZpYyBlbmdpbmUgdG8gcmVhZC93cml0ZVxu Iik7Cj4gIAlwcmludGYoIiAtLWFsbCAgICAgICAgICBEZWNvZGUgcmVnaXN0ZXJzIGZvciBhbGwg a25vd24gcGxhdGZvcm1zXG4iKTsKPiAgCXByaW50ZigiIC0tYmluYXJ5ICAgICAgIEJpbmFyeSBk dW1wIHJlZ2lzdGVyc1xuIik7Cj4gIAlwcmludGYoIiAtLXZlcmJvc2UgICAgICBJbmNyZWFzZSB2 ZXJib3NpdHlcbiIpOwo+IEBAIC03NTgsNiArODk2LDcgQEAgZW51bSBvcHQgewo+ICAJT1BUX0FM TCwKPiAgCU9QVF9CSU5BUlksCj4gIAlPUFRfU1BFQywKPiArCU9QVF9FTkdJTkUsCj4gIAlPUFRf VkVSQk9TRSwKPiAgCU9QVF9RVUlFVCwKPiAgCU9QVF9IRUxQLAo+IEBAIC03NzEsMTEgKzkxMCwx MyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAJY29uc3Qgc3RydWN0IGNv bW1hbmQgKmNvbW1hbmQgPSBOVUxMOwo+ICAJc3RydWN0IGNvbmZpZyBjb25maWcgPSB7Cj4gIAkJ LmNvdW50ID0gMSwKPiArCQkuZmQgPSAtMSwKPiAgCX07Cj4gIAlib29sIGhlbHAgPSBmYWxzZTsK PiAgCj4gIAlzdGF0aWMgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7Cj4gIAkJLyogZ2xvYmFs IG9wdGlvbnMgKi8KPiArCQl7ICJlbmdpbmUiLAlyZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwJT1BU X0VOR0lORSB9LAo+ICAJCXsgInNwZWMiLAlyZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwJT1BUX1NQ RUMgfSwKPiAgCQl7ICJ2ZXJib3NlIiwJbm9fYXJndW1lbnQsCQlOVUxMLAlPUFRfVkVSQk9TRSB9 LAo+ICAJCXsgInF1aWV0IiwJbm9fYXJndW1lbnQsCQlOVUxMLAlPUFRfUVVJRVQgfSwKPiBAQCAt ODMwLDYgKzk3MSwxNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAJCQkJ cmV0dXJuIEVYSVRfRkFJTFVSRTsKPiAgCQkJfQo+ICAJCQlicmVhazsKPiArCQljYXNlIE9QVF9F TkdJTkU6Cj4gKwkJCWNvbmZpZy5lbmdpbmUgPSBzdHJkdXAob3B0YXJnKTsKPiArCQkJaWYgKCFj b25maWcuZW5naW5lKSB7Cj4gKwkJCQlmcHJpbnRmKHN0ZGVyciwgInN0cmR1cDogJXNcbiIsCj4g KwkJCQkJc3RyZXJyb3IoZXJybm8pKTsKPiArCQkJCXJldHVybiBFWElUX0ZBSUxVUkU7Cj4gKwkJ CX0KPiArCQkJYnJlYWs7Cj4gIAkJY2FzZSBPUFRfQUxMOgo+ICAJCQljb25maWcuYWxsX3BsYXRm b3JtcyA9IHRydWU7Cj4gIAkJCWJyZWFrOwo+IEBAIC04OTgsNSArMTA0Nyw4IEBAIGludCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gIAo+ICAJZnJlZShjb25maWcubW1pb2ZpbGUpOwo+ ICAKPiArCWlmIChjb25maWcuZmQgPj0gMCkKPiArCQljbG9zZShjb25maWcuZmQpOwo+ICsKPiAg CXJldHVybiByZXQ7Cj4gIH0KCi0tIApKYW5pIE5pa3VsYSwgSW50ZWwgT3BlbiBTb3VyY2UgVGVj aG5vbG9neSBDZW50ZXIKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4Cg==