From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chao Gao Subject: [PATCH v2 4/5] VT-d PI: Adding reference count to pi_desc Date: Thu, 11 May 2017 14:04:11 +0800 Message-ID: <1494482652-42356-5-git-send-email-chao.gao@intel.com> References: <1494482652-42356-1-git-send-email-chao.gao@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1494482652-42356-1-git-send-email-chao.gao@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Andrew Cooper , Kevin Tian , Jan Beulich , Jun Nakajima , Chao Gao List-Id: xen-devel@lists.xenproject.org VGhpcyBwYXRjaCBpbnRydWR1Y2VzIGEgJ3JlZmNudCcgZmllbGQgaW4gdm14X3BpX2Jsb2NraW5n IHRvIHRyYWNrCnRoZSByZWZlcmVuY2UgY291bnQgb2YgJ3BpX2Rlc2MnIG9mIHRoZSB2Q1BVLiBB bmQgY2hhbmdlIHRoaXMgZmllbGQKZXZlcnkgdGltZSB3ZSByZS1wcm9ncmFtIG9uZSBJUlRFLgoK U2lnbmVkLW9mZi1ieTogQ2hhbyBHYW8gPGNoYW8uZ2FvQGludGVsLmNvbT4KLS0tCiB4ZW4vYXJj aC94ODYvaHZtL3ZteC92bXguYyAgICAgICAgICAgICB8IDI5ICsrKysrKysrKysrKysrKysrKysr KysrKwogeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvaW8uYyAgICAgICAgICAgfCAgMiArLQogeGVu L2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL2ludHJlbWFwLmMgfCA0MSArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tCiB4ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9kb21haW4uaCAgICAg ICB8ICA2ICsrKysrCiB4ZW4vaW5jbHVkZS9hc20teDg2L2h2bS92bXgvdm1jcy5oICAgICB8ICAz ICsrKwogeGVuL2luY2x1ZGUvYXNtLXg4Ni9pb21tdS5oICAgICAgICAgICAgfCAgMiArLQogeGVu L2luY2x1ZGUvYXNtLXg4Ni9tc2kuaCAgICAgICAgICAgICAgfCAgMiArLQogNyBmaWxlcyBjaGFu Z2VkLCA4MCBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hlbi9h cmNoL3g4Ni9odm0vdm14L3ZteC5jIGIveGVuL2FyY2gveDg2L2h2bS92bXgvdm14LmMKaW5kZXgg YzBkMGI1OC4uNDVhMzcyZSAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L2h2bS92bXgvdm14LmMK KysrIGIveGVuL2FyY2gveDg2L2h2bS92bXgvdm14LmMKQEAgLTEwMCw2ICsxMDAsMjMgQEAgdm9p ZCB2bXhfcGlfcGVyX2NwdV9pbml0KHVuc2lnbmVkIGludCBjcHUpCiAgICAgc3Bpbl9sb2NrX2lu aXQoJnBlcl9jcHUodm14X3BpX2Jsb2NraW5nLCBjcHUpLmxvY2spOwogfQogCit2b2lkIHZteF9w aV9nZXRfcmVmKHN0cnVjdCB2Y3B1ICp2KQoreworICAgIEFTU0VSVChhdG9taWNfcmVhZCgmdi0+ YXJjaC5odm1fdm14LnBpX2Jsb2NraW5nLnJlZmNudCkgPj0gMCk7CisgICAgYXRvbWljX2luYygm di0+YXJjaC5odm1fdm14LnBpX2Jsb2NraW5nLnJlZmNudCk7Cit9CisKK3ZvaWQgdm14X3BpX3B1 dF9yZWYoc3RydWN0IHZjcHUgKnYpCit7CisgICAgYXRvbWljX2RlYygmdi0+YXJjaC5odm1fdm14 LnBpX2Jsb2NraW5nLnJlZmNudCk7CisgICAgQVNTRVJUKGF0b21pY19yZWFkKCZ2LT5hcmNoLmh2 bV92bXgucGlfYmxvY2tpbmcucmVmY250KSA+PSAwKTsKK30KKworYm9vbCB2bXhfcGlfaW5fdXNl KHN0cnVjdCB2Y3B1ICp2KQoreworICAgIHJldHVybiAhIWF0b21pY19yZWFkKCZ2LT5hcmNoLmh2 bV92bXgucGlfYmxvY2tpbmcucmVmY250KTsKK30KKwogLyoKICAqIENob29zZSBhbiBhcHByb3By aWF0ZSBwY3B1IHRvIHJlY2VpdmUgd2FrZXVwIGludGVycnVwdC4KICAqIEJ5IGRlZmF1bHQsIHRo ZSBsb2NhbCBwY3B1IGlzIGNob3NlbiBhcyB0aGUgZGVzdGluYXRpb24uIEJ1dCBpZiB0aGUKQEAg LTQyMiw2ICs0MzksOSBAQCB2b2lkIHZteF9waV9ob29rc19hc3NpZ24oc3RydWN0IGRvbWFpbiAq ZCkKIAogICAgIGQtPmFyY2guaHZtX2RvbWFpbi5waV9vcHMudmNwdV9ibG9jayA9IHZteF92Y3B1 X2Jsb2NrOwogICAgIGQtPmFyY2guaHZtX2RvbWFpbi5waV9vcHMuZG9fcmVzdW1lID0gdm14X3Bp X2RvX3Jlc3VtZTsKKyAgICBkLT5hcmNoLmh2bV9kb21haW4ucGlfb3BzLmdldF9yZWYgPSB2bXhf cGlfZ2V0X3JlZjsKKyAgICBkLT5hcmNoLmh2bV9kb21haW4ucGlfb3BzLnB1dF9yZWYgPSB2bXhf cGlfcHV0X3JlZjsKKyAgICBkLT5hcmNoLmh2bV9kb21haW4ucGlfb3BzLmluX3VzZSA9IHZteF9w aV9pbl91c2U7CiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gcGNpZGV2c19s b2NrIGlzIGhlbGQgKi8KQEAgLTQ2MCw2ICs0ODAsMTUgQEAgdm9pZCB2bXhfcGlfaG9va3NfZGVh c3NpZ24oc3RydWN0IGRvbWFpbiAqZCkKICAgICBkLT5hcmNoLmh2bV9kb21haW4ucGlfb3BzLnZj cHVfYmxvY2sgPSBOVUxMOwogICAgIGQtPmFyY2guaHZtX2RvbWFpbi5waV9vcHMuc3dpdGNoX2Zy b20gPSBOVUxMOwogICAgIGQtPmFyY2guaHZtX2RvbWFpbi5waV9vcHMuZG9fcmVzdW1lID0gTlVM TDsKKyAgICBkLT5hcmNoLmh2bV9kb21haW4ucGlfb3BzLmdldF9yZWYgPSBOVUxMOworICAgIGQt PmFyY2guaHZtX2RvbWFpbi5waV9vcHMucHV0X3JlZiA9IE5VTEw7CisgICAgZC0+YXJjaC5odm1f ZG9tYWluLnBpX29wcy5pbl91c2UgPSBOVUxMOworICAgIC8qCisgICAgICogSWYgZGV2aWNlIGlz IHN0aWxsIHVzaW5nIGJ5IGd1ZXN0LCBidXQgd2UgZm9yY2libHkgZGVhc3NpZ24gaXQsCisgICAg ICogdGhlbiB0aGUgJ3JlZmNudCcgaXMgbm90IHplcm8gaGVyZS4gQ2xlYXIgaXQgZm9yIHJlLWFz c2lnbm1lbnQuCisgICAgICovCisgICAgZm9yX2VhY2hfdmNwdSAoIGQsIHYgKQorICAgICAgICBh dG9taWNfc2V0KCZ2LT5hcmNoLmh2bV92bXgucGlfYmxvY2tpbmcucmVmY250LCAwKTsKIAogICAg IGZvcl9lYWNoX3ZjcHUgKCBkLCB2ICkKICAgICAgICAgdm14X3BpX3VuYmxvY2tfdmNwdSh2KTsK ZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2lvLmMgYi94ZW4vZHJpdmVycy9w YXNzdGhyb3VnaC9pby5jCmluZGV4IGU1YTQzZTUuLjk3OWJlNzcgMTAwNjQ0Ci0tLSBhL3hlbi9k cml2ZXJzL3Bhc3N0aHJvdWdoL2lvLmMKKysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvaW8u YwpAQCAtMzE5LDcgKzMxOSw3IEBAIGludCBwdF9pcnFfY3JlYXRlX2JpbmQoCiAgICAgewogICAg ICAgICB1aW50OF90IGRlc3QsIGRlc3RfbW9kZSwgZGVsaXZlcnlfbW9kZTsKICAgICAgICAgaW50 IGRlc3RfdmNwdV9pZDsKLSAgICAgICAgY29uc3Qgc3RydWN0IHZjcHUgKnZjcHU7CisgICAgICAg IHN0cnVjdCB2Y3B1ICp2Y3B1OwogCiAgICAgICAgIGlmICggIShwaXJxX2RwY2ktPmZsYWdzICYg SFZNX0lSUV9EUENJX01BUFBFRCkgKQogICAgICAgICB7CmRpZmYgLS1naXQgYS94ZW4vZHJpdmVy cy9wYXNzdGhyb3VnaC92dGQvaW50cmVtYXAuYyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0 ZC9pbnRyZW1hcC5jCmluZGV4IDFlMDMxN2MuLjk5ZjFjY2UgMTAwNjQ0Ci0tLSBhL3hlbi9kcml2 ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9pbnRyZW1hcC5jCisrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJv dWdoL3Z0ZC9pbnRyZW1hcC5jCkBAIC01OTYsNiArNTk2LDMyIEBAIHN0YXRpYyBpbnQgcmVtYXBf ZW50cnlfdG9fbXNpX21zZygKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcGlfZ2V0 X3JlZihzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYykKK3sKKyAgICBzdHJ1Y3QgdmNwdSAqdjsKKwor ICAgIGlmICggIXBpX2Rlc2MgKQorICAgICAgICByZXR1cm47CisKKyAgICB2ID0gcGlfZGVzY190 b192Y3B1KHBpX2Rlc2MpOworICAgIEFTU0VSVChpc19odm1fZG9tYWluKHYtPmRvbWFpbikpOwor ICAgIGlmICggdi0+ZG9tYWluLT5hcmNoLmh2bV9kb21haW4ucGlfb3BzLmdldF9yZWYgKQorICAg ICAgICB2LT5kb21haW4tPmFyY2guaHZtX2RvbWFpbi5waV9vcHMuZ2V0X3JlZih2KTsKK30KKwor c3RhdGljIHZvaWQgcGlfcHV0X3JlZihzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYykKK3sKKyAgICBz dHJ1Y3QgdmNwdSAqdjsKKworICAgIGlmICggIXBpX2Rlc2MgKQorICAgICAgICByZXR1cm47CisK KyAgICB2ID0gcGlfZGVzY190b192Y3B1KHBpX2Rlc2MpOworICAgIEFTU0VSVChpc19odm1fZG9t YWluKHYtPmRvbWFpbikpOworICAgIGlmICggdi0+ZG9tYWluLT5hcmNoLmh2bV9kb21haW4ucGlf b3BzLnB1dF9yZWYgKQorICAgICAgICB2LT5kb21haW4tPmFyY2guaHZtX2RvbWFpbi5waV9vcHMu cHV0X3JlZih2KTsKK30KKwogc3RhdGljIGludCBtc2lfbXNnX3RvX3JlbWFwX2VudHJ5KAogICAg IHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogICAgIHN0cnVjdCBt c2lfZGVzYyAqbXNpX2Rlc2MsIHN0cnVjdCBtc2lfbXNnICptc2cpCkBAIC02MTksNiArNjQ1LDcg QEAgc3RhdGljIGludCBtc2lfbXNnX3RvX3JlbWFwX2VudHJ5KAogICAgICAgICB7CiAgICAgICAg ICAgICBmcmVlX3JlbWFwX2VudHJ5KGlvbW11LCBtc2lfZGVzYy0+cmVtYXBfaW5kZXggKyBpKTsK ICAgICAgICAgICAgIG1zaV9kZXNjW2ldLmlydGVfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICAg ICAgICAgIHBpX3B1dF9yZWYobXNpX2Rlc2NbaV0ucGlfZGVzYyk7CiAgICAgICAgIH0KICAgICAg ICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJfY3RybC0+aXJlbWFwX2xvY2ssIGZsYWdzKTsK ICAgICAgICAgcmV0dXJuIDA7CkBAIC05NjIsMTEgKzk4OSwxMiBAQCB2b2lkIGlvbW11X2Rpc2Fi bGVfeDJhcGljX0lSKHZvaWQpCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdXBkYXRlIHRo ZSBJUlRFIGZvciBwb3N0ZWQtaW50ZXJydXB0CiAgKiB3aGVuIGd1ZXN0IGNoYW5nZXMgTVNJL01T SS1YIGluZm9ybWF0aW9uLgogICovCi1pbnQgcGlfdXBkYXRlX2lydGUoY29uc3Qgc3RydWN0IHBp X2Rlc2MgKnBpX2Rlc2MsIGNvbnN0IHN0cnVjdCBwaXJxICpwaXJxLAoraW50IHBpX3VwZGF0ZV9p cnRlKHN0cnVjdCBwaV9kZXNjICpwaV9kZXNjLCBjb25zdCBzdHJ1Y3QgcGlycSAqcGlycSwKICAg ICBjb25zdCB1aW50OF90IGd2ZWMpCiB7CiAgICAgc3RydWN0IGlycV9kZXNjICpkZXNjOwogICAg IHN0cnVjdCBtc2lfZGVzYyAqbXNpX2Rlc2M7CisgICAgc3RydWN0IHBpX2Rlc2MgKm9sZF9waV9k ZXNjOwogICAgIGludCByYzsKIAogICAgIGRlc2MgPSBwaXJxX3NwaW5fbG9ja19pcnFfZGVzYyhw aXJxLCBOVUxMKTsKQEAgLTk3OSwxMyArMTAwNywyMiBAQCBpbnQgcGlfdXBkYXRlX2lydGUoY29u c3Qgc3RydWN0IHBpX2Rlc2MgKnBpX2Rlc2MsIGNvbnN0IHN0cnVjdCBwaXJxICpwaXJxLAogICAg ICAgICByYyA9IC1FTk9ERVY7CiAgICAgICAgIGdvdG8gdW5sb2NrX291dDsKICAgICB9CisgICAg b2xkX3BpX2Rlc2MgPSBtc2lfZGVzYy0+cGlfZGVzYzsKKworICAgIHBpX2dldF9yZWYocGlfZGVz Yyk7CiAgICAgbXNpX2Rlc2MtPnBpX2Rlc2MgPSBwaV9kZXNjOwogICAgIG1zaV9kZXNjLT5ndmVj ID0gZ3ZlYzsKIAogICAgIHNwaW5fdW5sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAKICAgICBBU1NF UlQocGNpZGV2c19sb2NrZWQoKSk7Ci0gICAgcmV0dXJuIGlvbW11X3VwZGF0ZV9pcmVfZnJvbV9t c2kobXNpX2Rlc2MsICZtc2lfZGVzYy0+bXNnKTsKKyAgICByYyA9IGlvbW11X3VwZGF0ZV9pcmVf ZnJvbV9tc2kobXNpX2Rlc2MsICZtc2lfZGVzYy0+bXNnKTsKKyAgICBpZiAoICFyYyApCisgICAg ICAgIHBpX3B1dF9yZWYob2xkX3BpX2Rlc2MpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX1VO UkVBQ0hBQkxFKCk7CisKKyAgICByZXR1cm4gcmM7CiAKICB1bmxvY2tfb3V0OgogICAgIHNwaW5f dW5sb2NrX2lycSgmZGVzYy0+bG9jayk7CmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2 L2h2bS9kb21haW4uaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2RvbWFpbi5oCmluZGV4IGQy ODk5YzkuLjZmYzk3YzQgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2RvbWFp bi5oCisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2RvbWFpbi5oCkBAIC05OCw2ICs5OCwx MiBAQCBzdHJ1Y3QgaHZtX3BpX29wcyB7CiAKICAgICAvKiBIb29rIGludG8gdGhlIHZtZW50cnkg cGF0aC4gKi8KICAgICB2b2lkICgqZG9fcmVzdW1lKShzdHJ1Y3QgdmNwdSAqdik7CisKKyAgICAv KiBHZXQvUHV0IHJlZmNvdW50IG9mIFBJIGJsb2NraW5nIG9mIHRoaXMgdkNQVSAqLworICAgIHZv aWQgKCpnZXRfcmVmKShzdHJ1Y3QgdmNwdSAqdik7CisgICAgdm9pZCAoKnB1dF9yZWYpKHN0cnVj dCB2Y3B1ICp2KTsKKyAgICAvKiBJcyB0aGUgUEkgYmxvY2tpbmcgaXMgcmVmZXJyZWQgYnkgSVJU RXMgKi8KKyAgICBib29sICgqaW5fdXNlKShzdHJ1Y3QgdmNwdSAqdik7CiB9OwogCiBzdHJ1Y3Qg aHZtX2RvbWFpbiB7CmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS92bXgvdm1j cy5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vdm14L3ZtY3MuaAppbmRleCA5NTA3YmQyLi43 Y2IxYTkyIDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS92bXgvdm1jcy5oCisr KyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL3ZteC92bWNzLmgKQEAgLTg1LDYgKzg1LDcgQEAg c3RydWN0IHBpX2Rlc2Mgewogc3RydWN0IHBpX2Jsb2NraW5nX3ZjcHUgewogICAgIHN0cnVjdCBs aXN0X2hlYWQgICAgIGxpc3Q7CiAgICAgc3BpbmxvY2tfdCAgICAgICAgICAgKmxvY2s7CisgICAg YXRvbWljX3QgICAgICAgICAgICAgcmVmY250OyAgLyogSG93IG1hbnkgSVJURXMgcmVmZXIgdG8g dGhpcyB2Q1BVPyAqLwogfTsKIAogc3RydWN0IGFyY2hfdm14X3N0cnVjdCB7CkBAIC0xNjAsNiAr MTYxLDggQEAgc3RydWN0IGFyY2hfdm14X3N0cnVjdCB7CiAgICAgc3RydWN0IHBpX2Jsb2NraW5n X3ZjcHUgcGlfYmxvY2tpbmc7CiB9OwogCisjZGVmaW5lIHBpX2Rlc2NfdG9fdmNwdShhKSBjb250 YWluZXJfb2YoYSwgc3RydWN0IHZjcHUsIGFyY2guaHZtX3ZteC5waV9kZXNjKQorCiBpbnQgdm14 X2NyZWF0ZV92bWNzKHN0cnVjdCB2Y3B1ICp2KTsKIHZvaWQgdm14X2Rlc3Ryb3lfdm1jcyhzdHJ1 Y3QgdmNwdSAqdik7CiB2b2lkIHZteF92bWNzX2VudGVyKHN0cnVjdCB2Y3B1ICp2KTsKZGlmZiAt LWdpdCBhL3hlbi9pbmNsdWRlL2FzbS14ODYvaW9tbXUuaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYv aW9tbXUuaAppbmRleCAwNDMxMjMzLi5jZmEwMDU4IDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS9h c20teDg2L2lvbW11LmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9pb21tdS5oCkBAIC05Miw3 ICs5Miw3IEBAIGJvb2xfdCBpb21tdV9zdXBwb3J0c19laW0odm9pZCk7CiBpbnQgaW9tbXVfZW5h YmxlX3gyYXBpY19JUih2b2lkKTsKIHZvaWQgaW9tbXVfZGlzYWJsZV94MmFwaWNfSVIodm9pZCk7 CiAKLWludCBwaV91cGRhdGVfaXJ0ZShjb25zdCBzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgY29u c3Qgc3RydWN0IHBpcnEgKnBpcnEsCitpbnQgcGlfdXBkYXRlX2lydGUoc3RydWN0IHBpX2Rlc2Mg KnBpX2Rlc2MsIGNvbnN0IHN0cnVjdCBwaXJxICpwaXJxLAogICAgICAgICAgICAgICAgICAgIGNv bnN0IHVpbnQ4X3QgZ3ZlYyk7CiAKICNlbmRpZiAvKiAhX19BUkNIX1g4Nl9JT01NVV9IX18gKi8K ZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS14ODYvbXNpLmggYi94ZW4vaW5jbHVkZS9hc20t eDg2L21zaS5oCmluZGV4IGE1ZGU2YTEuLmZiZjE3OTMgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRl L2FzbS14ODYvbXNpLmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9tc2kuaApAQCAtMTA1LDcg KzEwNSw3IEBAIHN0cnVjdCBtc2lfZGVzYyB7CiAKIAlib29sIGlydGVfaW5pdGlhbGl6ZWQ7CiAJ dWludDhfdCBndmVjOwkJCS8qIGd1ZXN0IHZlY3Rvci4gdmFsaWQgd2hlbiBwaV9kZXNjIGlzbid0 IE5VTEwgKi8KLQljb25zdCBzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYzsJLyogcG9pbnRlciB0byBw b3N0ZWQgZGVzY3JpcHRvciAqLworCXN0cnVjdCBwaV9kZXNjICpwaV9kZXNjOwkvKiBwb2ludGVy IHRvIHBvc3RlZCBkZXNjcmlwdG9yICovCiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKLS0g CjEuOC4zLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8v bGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK