From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: [PATCH v3 7/8] xen/arm: Rework the interface of p2m_lookup and use typesafe gfn and mfn Date: Tue, 21 Jun 2016 14:20:42 +0100 Message-ID: <1466515243-27264-8-git-send-email-julien.grall@arm.com> References: <1466515243-27264-1-git-send-email-julien.grall@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1466515243-27264-1-git-send-email-julien.grall@arm.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: Julien Grall , sstabellini@kernel.org List-Id: xen-devel@lists.xenproject.org VGhlIHByb3RvdHlwZSBhbmQgdGhlIGRlY2xhcmF0aW9uIG9mIHAybV9sb29rdXAgZGlzYWdyZWUg b24gaG93IHRoZQpmdW5jdGlvbiBzaG91bGQgYmUgdXNlZC4gT25lIGV4cGVjdCBhIGZyYW1lIG51 bWJlciB3aGlsc3QgdGhlIG90aGVyCmFuIGFkZHJlc3MuCgpUaGFua2Z1bGx5LCBldmVyeW9uZSBp cyB1c2luZyB3aXRoIGFuIGFkZHJlc3MgdG9kYXkuIEhvd2V2ZXIsIG1vc3Qgb2YKdGhlIGNhbGxl cnMgaGF2ZSB0byBjb252ZXJ0IGEgZ3Vlc3QgZnJhbWUgdG8gYW4gYWRkcmVzcy4gTW9kaWZ5CnRo ZSBpbnRlcmZhY2UgdG8gdGFrZSBhIGd1ZXN0IHBoeXNpY2FsIGZyYW1lIGluIHBhcmFtZXRlciBh bmQgcmV0dXJuCmEgbWFjaGluZSBmcmFtZS4KCldoaWxzdCBtb2RpZnlpbmcgdGhlIGludGVyZmFj ZSwgdXNlIHR5cGVzYWZlIGdmbiBhbmQgbWZuIGZvciBjbGFyaXR5CmFuZCBjYXRjaGluZyBwb3Nz aWJsZSBtaXN1c2FnZS4KClNpZ25lZC1vZmYtYnk6IEp1bGllbiBHcmFsbCA8anVsaWVuLmdyYWxs QGFybS5jb20+Ci0tLQogeGVuL2FyY2gvYXJtL3AybS5jICAgICAgICB8IDM3ICsrKysrKysrKysr KysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KIHhlbi9hcmNoL2FybS90cmFwcy5jICAgICAgfCAy MSArKysrKysrKysrKy0tLS0tLS0tLS0KIHhlbi9pbmNsdWRlL2FzbS1hcm0vcDJtLmggfCAgNyAr KystLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDM0IGluc2VydGlvbnMoKyksIDMxIGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9wMm0uYyBiL3hlbi9hcmNoL2FybS9wMm0uYwpp bmRleCA0N2NiMzgzLi5mMzMzMGRkIDEwMDY0NAotLS0gYS94ZW4vYXJjaC9hcm0vcDJtLmMKKysr IGIveGVuL2FyY2gvYXJtL3AybS5jCkBAIC0xNDAsMTQgKzE0MCwxNSBAQCB2b2lkIGZsdXNoX3Rs Yl9kb21haW4oc3RydWN0IGRvbWFpbiAqZCkKIH0KIAogLyoKLSAqIExvb2t1cCB0aGUgTUZOIGNv cnJlc3BvbmRpbmcgdG8gYSBkb21haW4ncyBQRk4uCisgKiBMb29rdXAgdGhlIE1GTiBjb3JyZXNw b25kaW5nIHRvIGEgZG9tYWluJ3MgR0ZOLgogICoKICAqIFRoZXJlIGFyZSBubyBwcm9jZXNzb3Ig ZnVuY3Rpb25zIHRvIGRvIGEgc3RhZ2UgMiBvbmx5IGxvb2t1cCB0aGVyZWZvcmUgd2UKICAqIGRv IGEgYSBzb2Z0d2FyZSB3YWxrLgogICovCi1zdGF0aWMgcGFkZHJfdCBfX3AybV9sb29rdXAoc3Ry dWN0IGRvbWFpbiAqZCwgcGFkZHJfdCBwYWRkciwgcDJtX3R5cGVfdCAqdCkKK3N0YXRpYyBtZm5f dCBfX3AybV9sb29rdXAoc3RydWN0IGRvbWFpbiAqZCwgZ2ZuX3QgZ2ZuLCBwMm1fdHlwZV90ICp0 KQogewogICAgIHN0cnVjdCBwMm1fZG9tYWluICpwMm0gPSAmZC0+YXJjaC5wMm07CisgICAgY29u c3QgcGFkZHJfdCBwYWRkciA9IHBmbl90b19wYWRkcihnZm5feChnZm4pKTsKICAgICBjb25zdCB1 bnNpZ25lZCBpbnQgb2Zmc2V0c1s0XSA9IHsKICAgICAgICAgemVyb2V0aF90YWJsZV9vZmZzZXQo cGFkZHIpLAogICAgICAgICBmaXJzdF90YWJsZV9vZmZzZXQocGFkZHIpLApAQCAtMTU4LDcgKzE1 OSw3IEBAIHN0YXRpYyBwYWRkcl90IF9fcDJtX2xvb2t1cChzdHJ1Y3QgZG9tYWluICpkLCBwYWRk cl90IHBhZGRyLCBwMm1fdHlwZV90ICp0KQogICAgICAgICBaRVJPRVRIX01BU0ssIEZJUlNUX01B U0ssIFNFQ09ORF9NQVNLLCBUSElSRF9NQVNLCiAgICAgfTsKICAgICBscGFlX3QgcHRlLCAqbWFw OwotICAgIHBhZGRyX3QgbWFkZHIgPSBJTlZBTElEX1BBRERSOworICAgIG1mbl90IG1mbiA9IF9t Zm4oSU5WQUxJRF9NRk4pOwogICAgIHBhZGRyX3QgbWFzayA9IDA7CiAgICAgcDJtX3R5cGVfdCBf dDsKICAgICB1bnNpZ25lZCBpbnQgbGV2ZWwsIHJvb3RfdGFibGU7CkBAIC0yMTYsMjEgKzIxNywy MiBAQCBzdGF0aWMgcGFkZHJfdCBfX3AybV9sb29rdXAoc3RydWN0IGRvbWFpbiAqZCwgcGFkZHJf dCBwYWRkciwgcDJtX3R5cGVfdCAqdCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtYXNrKTsKICAg ICAgICAgQVNTRVJUKHB0ZS5wMm0udHlwZSAhPSBwMm1faW52YWxpZCk7Ci0gICAgICAgIG1hZGRy ID0gKHB0ZS5iaXRzICYgUEFERFJfTUFTSyAmIG1hc2spIHwgKHBhZGRyICYgfm1hc2spOworICAg ICAgICBtZm4gPSBfbWZuKHBhZGRyX3RvX3BmbigocHRlLmJpdHMgJiBQQUREUl9NQVNLICYgbWFz aykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFkZHIgJiB+bWFzaykpKTsK ICAgICAgICAgKnQgPSBwdGUucDJtLnR5cGU7CiAgICAgfQogCiBlcnI6Ci0gICAgcmV0dXJuIG1h ZGRyOworICAgIHJldHVybiBtZm47CiB9CiAKLXBhZGRyX3QgcDJtX2xvb2t1cChzdHJ1Y3QgZG9t YWluICpkLCBwYWRkcl90IHBhZGRyLCBwMm1fdHlwZV90ICp0KQorbWZuX3QgcDJtX2xvb2t1cChz dHJ1Y3QgZG9tYWluICpkLCBnZm5fdCBnZm4sIHAybV90eXBlX3QgKnQpCiB7Ci0gICAgcGFkZHJf dCByZXQ7CisgICAgbWZuX3QgcmV0OwogICAgIHN0cnVjdCBwMm1fZG9tYWluICpwMm0gPSAmZC0+ YXJjaC5wMm07CiAKICAgICBzcGluX2xvY2soJnAybS0+bG9jayk7Ci0gICAgcmV0ID0gX19wMm1f bG9va3VwKGQsIHBhZGRyLCB0KTsKKyAgICByZXQgPSBfX3AybV9sb29rdXAoZCwgZ2ZuLCB0KTsK ICAgICBzcGluX3VubG9jaygmcDJtLT5sb2NrKTsKIAogICAgIHJldHVybiByZXQ7CkBAIC00OTMs OCArNDk1LDkgQEAgc3RhdGljIGludCBfX3AybV9nZXRfbWVtX2FjY2VzcyhzdHJ1Y3QgZG9tYWlu ICpkLCBnZm5fdCBnZm4sCiAgICAgICAgICAqIE5vIHNldHRpbmcgd2FzIGZvdW5kIGluIHRoZSBS YWRpeCB0cmVlLiBDaGVjayBpZiB0aGUKICAgICAgICAgICogZW50cnkgZXhpc3RzIGluIHRoZSBw YWdlLXRhYmxlcy4KICAgICAgICAgICovCi0gICAgICAgIHBhZGRyX3QgbWFkZHIgPSBfX3AybV9s b29rdXAoZCwgZ2ZuX3goZ2ZuKSA8PCBQQUdFX1NISUZULCBOVUxMKTsKLSAgICAgICAgaWYgKCBJ TlZBTElEX1BBRERSID09IG1hZGRyICkKKyAgICAgICAgbWZuX3QgbWZuID0gX19wMm1fbG9va3Vw KGQsIGdmbiwgTlVMTCk7CisKKyAgICAgICAgaWYgKCBtZm5feChtZm4pID09IElOVkFMSURfTUZO ICkKICAgICAgICAgICAgIHJldHVybiAtRVNSQ0g7CiAKICAgICAgICAgLyogSWYgZW50cnkgZXhp c3RzIHRoZW4gaXRzIHJ3eC4gKi8KQEAgLTE0ODMsOCArMTQ4Niw3IEBAIGludCBwMm1fY2FjaGVf Zmx1c2goc3RydWN0IGRvbWFpbiAqZCwgeGVuX3Bmbl90IHN0YXJ0X21mbiwgeGVuX3Bmbl90IGVu ZF9tZm4pCiAKIG1mbl90IGdmbl90b19tZm4oc3RydWN0IGRvbWFpbiAqZCwgZ2ZuX3QgZ2ZuKQog ewotICAgIHBhZGRyX3QgcCA9IHAybV9sb29rdXAoZCwgcGZuX3RvX3BhZGRyKGdmbl94KGdmbikp LCBOVUxMKTsKLSAgICByZXR1cm4gX21mbihwID4+IFBBR0VfU0hJRlQpOworICAgIHJldHVybiBw Mm1fbG9va3VwKGQsIGdmbiwgTlVMTCk7CiB9CiAKIC8qCkBAIC0xNDk4LDcgKzE1MDAsNyBAQCBw Mm1fbWVtX2FjY2Vzc19jaGVja19hbmRfZ2V0X3BhZ2UodmFkZHJfdCBndmEsIHVuc2lnbmVkIGxv bmcgZmxhZykKIHsKICAgICBsb25nIHJjOwogICAgIHBhZGRyX3QgaXBhOwotICAgIHVuc2lnbmVk IGxvbmcgbWFkZHI7CisgICAgZ2ZuX3QgZ2ZuOwogICAgIHVuc2lnbmVkIGxvbmcgbWZuOwogICAg IHhlbm1lbV9hY2Nlc3NfdCB4bWE7CiAgICAgcDJtX3R5cGVfdCB0OwpAQCAtMTUwOCwxMSArMTUx MCwxMyBAQCBwMm1fbWVtX2FjY2Vzc19jaGVja19hbmRfZ2V0X3BhZ2UodmFkZHJfdCBndmEsIHVu c2lnbmVkIGxvbmcgZmxhZykKICAgICBpZiAoIHJjIDwgMCApCiAgICAgICAgIGdvdG8gZXJyOwog CisgICAgZ2ZuID0gX2dmbihwYWRkcl90b19wZm4oaXBhKSk7CisKICAgICAvKgogICAgICAqIFdl IGRvIHRoaXMgZmlyc3QgYXMgdGhpcyBpcyBmYXN0ZXIgaW4gdGhlIGRlZmF1bHQgY2FzZSB3aGVu IG5vCiAgICAgICogcGVybWlzc2lvbiBpcyBzZXQgb24gdGhlIHBhZ2UuCiAgICAgICovCi0gICAg cmMgPSBfX3AybV9nZXRfbWVtX2FjY2VzcyhjdXJyZW50LT5kb21haW4sIF9nZm4ocGFkZHJfdG9f cGZuKGlwYSkpLCAmeG1hKTsKKyAgICByYyA9IF9fcDJtX2dldF9tZW1fYWNjZXNzKGN1cnJlbnQt PmRvbWFpbiwgZ2ZuLCAmeG1hKTsKICAgICBpZiAoIHJjIDwgMCApCiAgICAgICAgIGdvdG8gZXJy OwogCkBAIC0xNTYxLDExICsxNTY1LDEwIEBAIHAybV9tZW1fYWNjZXNzX2NoZWNrX2FuZF9nZXRf cGFnZSh2YWRkcl90IGd2YSwgdW5zaWduZWQgbG9uZyBmbGFnKQogICAgICAqIFdlIGhhZCBhIG1l bV9hY2Nlc3MgcGVybWlzc2lvbiBsaW1pdGluZyB0aGUgYWNjZXNzLCBidXQgdGhlIHBhZ2UgdHlw ZQogICAgICAqIGNvdWxkIGFsc28gYmUgbGltaXRpbmcsIHNvIHdlIG5lZWQgdG8gY2hlY2sgdGhh dCBhcyB3ZWxsLgogICAgICAqLwotICAgIG1hZGRyID0gX19wMm1fbG9va3VwKGN1cnJlbnQtPmRv bWFpbiwgaXBhLCAmdCk7Ci0gICAgaWYgKCBtYWRkciA9PSBJTlZBTElEX1BBRERSICkKKyAgICBt Zm4gPSBtZm5feChfX3AybV9sb29rdXAoY3VycmVudC0+ZG9tYWluLCBnZm4sICZ0KSk7CisgICAg aWYgKCBtZm4gPT0gSU5WQUxJRF9NRk4gKQogICAgICAgICBnb3RvIGVycjsKIAotICAgIG1mbiA9 IG1hZGRyID4+IFBBR0VfU0hJRlQ7CiAgICAgaWYgKCAhbWZuX3ZhbGlkKG1mbikgKQogICAgICAg ICBnb3RvIGVycjsKIApkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3RyYXBzLmMgYi94ZW4vYXJj aC9hcm0vdHJhcHMuYwppbmRleCA0NDkyNmNhLi4wMmZlMTE3IDEwMDY0NAotLS0gYS94ZW4vYXJj aC9hcm0vdHJhcHMuYworKysgYi94ZW4vYXJjaC9hcm0vdHJhcHMuYwpAQCAtMjMxOSwxNCArMjMx OSwxNiBAQCB2b2lkIGR1bXBfZ3Vlc3RfczFfd2FsayhzdHJ1Y3QgZG9tYWluICpkLCB2YWRkcl90 IGFkZHIpCiB7CiAgICAgcmVnaXN0ZXJfdCB0dGJjciA9IFJFQURfU1lTUkVHKFRDUl9FTDEpOwog ICAgIHVpbnQ2NF90IHR0YnIwID0gUkVBRF9TWVNSRUc2NChUVEJSMF9FTDEpOwotICAgIHBhZGRy X3QgcGFkZHI7CiAgICAgdWludDMyX3Qgb2Zmc2V0OwogICAgIHVpbnQzMl90ICpmaXJzdCA9IE5V TEwsICpzZWNvbmQgPSBOVUxMOworICAgIG1mbl90IG1mbjsKKworICAgIG1mbiA9IHAybV9sb29r dXAoZCwgX2dmbihwYWRkcl90b19wZm4odHRicjApKSwgTlVMTCk7CiAKICAgICBwcmludGsoImRv bSVkIFZBIDB4JTA4IlBSSXZhZGRyIlxuIiwgZC0+ZG9tYWluX2lkLCBhZGRyKTsKICAgICBwcmlu dGsoIiAgICBUVEJDUjogMHglMDgiUFJJcmVnaXN0ZXIiXG4iLCB0dGJjcik7CiAgICAgcHJpbnRr KCIgICAgVFRCUjA6IDB4JTAxNiJQUkl4NjQiID0gMHglIlBSSXBhZGRyIlxuIiwKLSAgICAgICAg ICAgdHRicjAsIHAybV9sb29rdXAoZCwgdHRicjAgJiBQQUdFX01BU0ssIE5VTEwpKTsKKyAgICAg ICAgICAgdHRicjAsIHBmbl90b19wYWRkcihtZm5feChtZm4pKSk7CiAKICAgICBpZiAoIHR0YmNy ICYgVFRCQ1JfRUFFICkKICAgICB7CkBAIC0yMzM5LDMyICsyMzQxLDMxIEBAIHZvaWQgZHVtcF9n dWVzdF9zMV93YWxrKHN0cnVjdCBkb21haW4gKmQsIHZhZGRyX3QgYWRkcikKICAgICAgICAgcmV0 dXJuOwogICAgIH0KIAotICAgIHBhZGRyID0gcDJtX2xvb2t1cChkLCB0dGJyMCAmIFBBR0VfTUFT SywgTlVMTCk7Ci0gICAgaWYgKCBwYWRkciA9PSBJTlZBTElEX1BBRERSICkKKyAgICBpZiAoIG1m bl94KG1mbikgPT0gSU5WQUxJRF9NRk4gKQogICAgIHsKICAgICAgICAgcHJpbnRrKCJGYWlsZWQg VFRCUjAgbWFkZHIgbG9va3VwXG4iKTsKICAgICAgICAgZ290byBkb25lOwogICAgIH0KLSAgICBm aXJzdCA9IG1hcF9kb21haW5fcGFnZShfbWZuKHBhZGRyX3RvX3BmbihwYWRkcikpKTsKKyAgICBm aXJzdCA9IG1hcF9kb21haW5fcGFnZShtZm4pOwogCiAgICAgb2Zmc2V0ID0gYWRkciA+PiAoMTIr MTApOwogICAgIHByaW50aygiMVNUWzB4JSJQUkl4MzIiXSAoMHglIlBSSXBhZGRyIikgPSAweCUw OCJQUkl4MzIiXG4iLAotICAgICAgICAgICBvZmZzZXQsIHBhZGRyLCBmaXJzdFtvZmZzZXRdKTsK KyAgICAgICAgICAgb2Zmc2V0LCBwZm5fdG9fcGFkZHIobWZuX3gobWZuKSksIGZpcnN0W29mZnNl dF0pOwogICAgIGlmICggIShmaXJzdFtvZmZzZXRdICYgMHgxKSB8fAogICAgICAgICAgIShmaXJz dFtvZmZzZXRdICYgMHgyKSApCiAgICAgICAgIGdvdG8gZG9uZTsKIAotICAgIHBhZGRyID0gcDJt X2xvb2t1cChkLCBmaXJzdFtvZmZzZXRdICYgUEFHRV9NQVNLLCBOVUxMKTsKKyAgICBtZm4gPSBw Mm1fbG9va3VwKGQsIF9nZm4ocGFkZHJfdG9fcGZuKGZpcnN0W29mZnNldF0pKSwgTlVMTCk7CiAK LSAgICBpZiAoIHBhZGRyID09IElOVkFMSURfUEFERFIgKQorICAgIGlmICggbWZuX3gobWZuKSA9 PSBJTlZBTElEX01GTiApCiAgICAgewogICAgICAgICBwcmludGsoIkZhaWxlZCBMMSBlbnRyeSBt YWRkciBsb29rdXBcbiIpOwogICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQotICAgIHNlY29uZCA9 IG1hcF9kb21haW5fcGFnZShfbWZuKHBhZGRyX3RvX3BmbihwYWRkcikpKTsKKyAgICBzZWNvbmQg PSBtYXBfZG9tYWluX3BhZ2UobWZuKTsKICAgICBvZmZzZXQgPSAoYWRkciA+PiAxMikgJiAweDNG RjsKICAgICBwcmludGsoIjJORFsweCUiUFJJeDMyIl0gKDB4JSJQUklwYWRkciIpID0gMHglMDgi UFJJeDMyIlxuIiwKLSAgICAgICAgICAgb2Zmc2V0LCBwYWRkciwgc2Vjb25kW29mZnNldF0pOwor ICAgICAgICAgICBvZmZzZXQsIHBmbl90b19wYWRkcihtZm5feChtZm4pKSwgc2Vjb25kW29mZnNl dF0pOwogCiBkb25lOgogICAgIGlmIChzZWNvbmQpIHVubWFwX2RvbWFpbl9wYWdlKHNlY29uZCk7 CmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL3AybS5oIGIveGVuL2luY2x1ZGUvYXNt LWFybS9wMm0uaAppbmRleCAwZDFlNjFlLi5mMjA0NDgyIDEwMDY0NAotLS0gYS94ZW4vaW5jbHVk ZS9hc20tYXJtL3AybS5oCisrKyBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vcDJtLmgKQEAgLTEzNSw4 ICsxMzUsOCBAQCB2b2lkIHAybV9yZXN0b3JlX3N0YXRlKHN0cnVjdCB2Y3B1ICpuKTsKIC8qIFBy aW50IGRlYnVnZ2luZy9zdGF0aXN0aWFsIGluZm8gYWJvdXQgYSBkb21haW4ncyBwMm0gKi8KIHZv aWQgcDJtX2R1bXBfaW5mbyhzdHJ1Y3QgZG9tYWluICpkKTsKIAotLyogTG9vayB1cCB0aGUgTUZO IGNvcnJlc3BvbmRpbmcgdG8gYSBkb21haW4ncyBQRk4uICovCi1wYWRkcl90IHAybV9sb29rdXAo c3RydWN0IGRvbWFpbiAqZCwgcGFkZHJfdCBncGZuLCBwMm1fdHlwZV90ICp0KTsKKy8qIExvb2sg dXAgdGhlIE1GTiBjb3JyZXNwb25kaW5nIHRvIGEgZG9tYWluJ3MgR0ZOLiAqLworbWZuX3QgcDJt X2xvb2t1cChzdHJ1Y3QgZG9tYWluICpkLCBnZm5fdCBnZm4sIHAybV90eXBlX3QgKnQpOwogCiAv KiBDbGVhbiAmIGludmFsaWRhdGUgY2FjaGVzIGNvcnJlc3BvbmRpbmcgdG8gYSByZWdpb24gb2Yg Z3Vlc3QgYWRkcmVzcyBzcGFjZSAqLwogaW50IHAybV9jYWNoZV9mbHVzaChzdHJ1Y3QgZG9tYWlu ICpkLCB4ZW5fcGZuX3Qgc3RhcnRfbWZuLCB4ZW5fcGZuX3QgZW5kX21mbik7CkBAIC0yMDEsOCAr MjAxLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9pbmZvICpnZXRfcGFnZV9mcm9tX2dm bigKIHsKICAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlOwogICAgIHAybV90eXBlX3QgcDJtdDsK LSAgICBwYWRkcl90IG1hZGRyID0gcDJtX2xvb2t1cChkLCBwZm5fdG9fcGFkZHIoZ2ZuKSwgJnAy bXQpOwotICAgIHVuc2lnbmVkIGxvbmcgbWZuID0gbWFkZHIgPj4gUEFHRV9TSElGVDsKKyAgICB1 bnNpZ25lZCBsb25nIG1mbiA9IG1mbl94KHAybV9sb29rdXAoZCwgX2dmbihnZm4pLCAmcDJtdCkp OwogCiAgICAgaWYgKHQpCiAgICAgICAgICp0ID0gcDJtdDsKLS0gCjEuOS4xCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcg bGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2 ZWwK