From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abdiel Janulgue Subject: [PATCH v2 1/5] drm/i915: Allow i915 to manage the vma offset nodes instead of drm core Date: Mon, 7 Oct 2019 11:48:41 +0300 Message-ID: <20191007084845.1554-1-abdiel.janulgue@linux.intel.com> References: <20190826122102.32400-1-abdiel.janulgue@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 58BC16E4DD for ; Mon, 7 Oct 2019 08:49:24 +0000 (UTC) In-Reply-To: <20190826122102.32400-1-abdiel.janulgue@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: intel-gfx@lists.freedesktop.org Cc: Matthew Auld List-Id: intel-gfx@lists.freedesktop.org SGF2ZSBpOTE1IHJlcGxhY2UgdGhlIGNvcmUgZHJtX2dlbV9tbWFwIGltcGxlbWVudGF0aW9uIHRv IG92ZXJjb21lIGl0cwpsaW1pdGF0aW9uIGluIGhhdmluZyBvbmx5IGEgc2luZ2xlIG1tYXAgb2Zm c2V0IG5vZGUgcGVyIGdlbSBvYmplY3QuClRoaXMgY2hhbmdlIGFsbG93cyB1cyB0byBoYXZlIG11 bHRpcGxlIG1tYXAgb2Zmc2V0cyBwZXIgb2JqZWN0IGFuZAplbmFibGVzIGEgbW1hcHBpbmcgaW5z dGFuY2UgdG8gdXNlIHVuaXF1ZSBmYXVsdC1oYW5kbGVycyBwZXIgdXNlciB2bWEuCgpUaGlzIGFs bG93cyBpOTE1IHRvIHN0b3JlIGV4dHJhIGRhdGEgd2l0aGluIHZtYS0+dm1fcHJpdmF0ZV9kYXRh IGFuZAphc3NpZ24gdGhlIHBhZ2VmYXVsdCBvcHMgZm9yIGVhY2ggbW1hcCBpbnN0YW5jZSBhbGxv d2luZyBvYmplY3RzIHRvIHVzZQptdWx0aXBsZSBmYXVsdCBoYW5kbGVycyBkZXBlbmRpbmcgb24g aXRzIGJhY2tpbmcgc3RvcmFnZS4KCnYyOgogLSBGaXggcmFjZSBjb25kaXRpb24gZXhwb3NlZCBi eSBnZW1fbW1hcF9ndHRAY2xvc2UtcmFjZS4gU2ltcGxpZnkKICAgbGlmZXRpbWUgbWFuYWdlbWVu dCBvZiB0aGUgbW1hcCBvZmZzZXQgb2JqZWN0cyBiZSBlbnN1cmluZyBpdCBpcwogICBvd25lZCBi eSB0aGUgcGFyZW50IGdlbSBvYmplY3QgaW5zdGVhZCBvZiByZWZjb3VudGluZy4KIC0gVHJhY2sg bW1vIHVzZWQgYnkgZmVuY2luZyB0byBBdm9pZCBsb2NraW5nIHdoZW4gcmV2b2tpbmcgbW1hcHMK ICAgZHVyaW5nIEdQVSByZXNldC4KIC0gUmViYXNlCgpTaWduZWQtb2ZmLWJ5OiBBYmRpZWwgSmFu dWxndWUgPGFiZGllbC5qYW51bGd1ZUBsaW51eC5pbnRlbC5jb20+CkNjOiBNYXR0aGV3IEF1bGQg PG1hdHRoZXcuYXVsZEBpbnRlbC5jb20+CkNjOiBKb29uYXMgTGFodGluZW4gPGpvb25hcy5sYWh0 aW5lbkBsaW51eC5pbnRlbC5jb20+CkNjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNv bi5jby51az4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZG9tYWluLmMg ICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9tbWFuLmMgICAg ICB8IDI0NSArKysrKysrKysrKysrKysrLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9vYmplY3QuYyAgICB8ICAxMyArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9n ZW1fb2JqZWN0LmggICAgfCAgIDkgKy0KIC4uLi9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29i amVjdF90eXBlcy5oICB8ICAyMyArKwogLi4uL2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9n ZW1fbW1hbi5jICAgIHwgIDEyICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNl dC5jICAgICAgICAgfCAgIDcgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAg ICAgICAgICAgICB8ICAxMCArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAg ICAgICAgICAgIHwgICAzICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAg ICAgICAgICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmMgICAgICAg ICAgICAgICB8ICAyNCArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuaCAgICAgICAg ICAgICAgIHwgICA0ICsKIDEyIGZpbGVzIGNoYW5nZWQsIDMwNSBpbnNlcnRpb25zKCspLCA0OSBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9n ZW1fZG9tYWluLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZG9tYWluLmMK aW5kZXggOTkzN2I0YzM0MWYxLi40MDc5MmQyMDE3YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9kb21haW4uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fZG9tYWluLmMKQEAgLTI1NCw3ICsyNTQsNyBAQCBpbnQgaTkxNV9nZW1f b2JqZWN0X3NldF9jYWNoZV9sZXZlbChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAog CQkJfQogCiAJCQlpZiAob2JqLT51c2VyZmF1bHRfY291bnQpCi0JCQkJX19pOTE1X2dlbV9vYmpl Y3RfcmVsZWFzZV9tbWFwKG9iaik7CisJCQkJX19pOTE1X2dlbV9vYmplY3RfcmVsZWFzZV9tbWFw X2d0dChvYmopOwogCiAJCQkvKgogCQkJICogQXMgd2Ugbm8gbG9uZ2VyIG5lZWQgYSBmZW5jZSBm b3IgR1RUIGFjY2VzcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9tbWFuLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5jCmlu ZGV4IGZkNDEyMmQ4YzBhOS4uYWY0Mzc3YTgwNTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9pOTE1X2dlbV9tbWFuLmMKQEAgLTIxOSw3ICsyMTksOCBAQCB2bV9mYXVsdF90IGk5MTVfZ2Vt X2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogewogI2RlZmluZSBNSU5fQ0hVTktfUEFHRVMg KFNaXzFNID4+IFBBR0VfU0hJRlQpCiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhID0gdm1m LT52bWE7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHRvX2ludGVsX2JvKGFy ZWEtPnZtX3ByaXZhdGVfZGF0YSk7CisJc3RydWN0IGk5MTVfbW1hcF9vZmZzZXQgKnByaXYgPSBh cmVhLT52bV9wcml2YXRlX2RhdGE7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9 IHByaXYtPm9iajsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsKIAlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUoZGV2KTsKIAlzdHJ1Y3QgaW50 ZWxfcnVudGltZV9wbSAqcnBtID0gJmk5MTUtPnJ1bnRpbWVfcG07CkBAIC0zMTIsNiArMzEzLDEy IEBAIHZtX2ZhdWx0X3QgaTkxNV9nZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJCWxp c3RfYWRkKCZvYmotPnVzZXJmYXVsdF9saW5rLCAmaTkxNS0+Z2d0dC51c2VyZmF1bHRfbGlzdCk7 CiAJbXV0ZXhfdW5sb2NrKCZpOTE1LT5nZ3R0LnZtLm11dGV4KTsKIAorCS8qIFRyYWNrIHRoZSBt bW8gYXNzb2NpYXRlZCB3aXRoIHRoZSBmZW5jZWQgdm1hICovCisJbXV0ZXhfbG9jaygmcHJpdi0+ dm1hX2xvY2spOworCXZtYS0+bW1vID0gcHJpdjsKKwlsaXN0X21vdmUoJnZtYS0+bW1vX2xpbmss ICZwcml2LT52bWFfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT52bWFfbG9jayk7CisKIAlp ZiAoQ09ORklHX0RSTV9JOTE1X1VTRVJGQVVMVF9BVVRPU1VTUEVORCkKIAkJaW50ZWxfd2FrZXJl Zl9hdXRvKCZpOTE1LT5nZ3R0LnVzZXJmYXVsdF93YWtlcmVmLAogCQkJCSAgIG1zZWNzX3RvX2pp ZmZpZXNfdGltZW91dChDT05GSUdfRFJNX0k5MTVfVVNFUkZBVUxUX0FVVE9TVVNQRU5EKSk7CkBA IC0zNTgsMjggKzM2NSwyOSBAQCB2bV9mYXVsdF90IGk5MTVfZ2VtX2ZhdWx0KHN0cnVjdCB2bV9m YXVsdCAqdm1mKQogCX0KIH0KIAotdm9pZCBfX2k5MTVfZ2VtX29iamVjdF9yZWxlYXNlX21tYXAo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3ZvaWQgX19pOTE1X2dlbV9vYmplY3Rf cmVsZWFzZV9tbWFwX2d0dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogewogCXN0 cnVjdCBpOTE1X3ZtYSAqdm1hOworCXN0cnVjdCBpOTE1X21tYXBfb2Zmc2V0ICptbW87CiAKIAlH RU1fQlVHX09OKCFvYmotPnVzZXJmYXVsdF9jb3VudCk7CiAKIAlvYmotPnVzZXJmYXVsdF9jb3Vu dCA9IDA7CiAJbGlzdF9kZWwoJm9iai0+dXNlcmZhdWx0X2xpbmspOwotCWRybV92bWFfbm9kZV91 bm1hcCgmb2JqLT5iYXNlLnZtYV9ub2RlLAotCQkJICAgb2JqLT5iYXNlLmRldi0+YW5vbl9pbm9k ZS0+aV9tYXBwaW5nKTsKKworCW11dGV4X2xvY2soJm9iai0+bW1vX2xvY2spOworCWxpc3RfZm9y X2VhY2hfZW50cnkobW1vLCAmb2JqLT5tbWFwX29mZnNldHMsIG9mZnNldCkgeworCQlpZiAobW1v LT5tbWFwX3R5cGUgPT0gSTkxNV9NTUFQX1RZUEVfR1RUKQorCQkJZHJtX3ZtYV9ub2RlX3VubWFw KCZtbW8tPnZtYV9ub2RlLAorCQkJCQkgICBvYmotPmJhc2UuZGV2LT5hbm9uX2lub2RlLT5pX21h cHBpbmcpOworCX0KKwltdXRleF91bmxvY2soJm9iai0+bW1vX2xvY2spOwogCiAJZm9yX2VhY2hf Z2d0dF92bWEodm1hLCBvYmopCiAJCWk5MTVfdm1hX3Vuc2V0X3VzZXJmYXVsdCh2bWEpOwogfQog CiAvKioKLSAqIGk5MTVfZ2VtX29iamVjdF9yZWxlYXNlX21tYXAgLSByZW1vdmUgcGh5c2ljYWwg cGFnZSBtYXBwaW5ncwotICogQG9iajogb2JqIGluIHF1ZXN0aW9uCi0gKgotICogUHJlc2VydmUg dGhlIHJlc2VydmF0aW9uIG9mIHRoZSBtbWFwcGluZyB3aXRoIHRoZSBEUk0gY29yZSBjb2RlLCBi dXQKLSAqIHJlbGlucXVpc2ggb3duZXJzaGlwIG9mIHRoZSBwYWdlcyBiYWNrIHRvIHRoZSBzeXN0 ZW0uCi0gKgogICogSXQgaXMgdml0YWwgdGhhdCB3ZSByZW1vdmUgdGhlIHBhZ2UgbWFwcGluZyBp ZiB3ZSBoYXZlIG1hcHBlZCBhIHRpbGVkCiAgKiBvYmplY3QgdGhyb3VnaCB0aGUgR1RUIGFuZCB0 aGVuIGxvc2UgdGhlIGZlbmNlIHJlZ2lzdGVyIGR1ZSB0bwogICogcmVzb3VyY2UgcHJlc3N1cmUu IFNpbWlsYXJseSBpZiB0aGUgb2JqZWN0IGhhcyBiZWVuIG1vdmVkIG91dCBvZiB0aGUKQEAgLTM4 Nyw3ICszOTUsNyBAQCB2b2lkIF9faTkxNV9nZW1fb2JqZWN0X3JlbGVhc2VfbW1hcChzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogICogbWFwcGluZyB3aWxsIHRoZW4gdHJpZ2dlciBh IHBhZ2UgZmF1bHQgb24gdGhlIG5leHQgdXNlciBhY2Nlc3MsIGFsbG93aW5nCiAgKiBmaXh1cCBi eSBpOTE1X2dlbV9mYXVsdCgpLgogICovCi12b2lkIGk5MTVfZ2VtX29iamVjdF9yZWxlYXNlX21t YXAoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3N0YXRpYyB2b2lkIGk5MTVfZ2Vt X29iamVjdF9yZWxlYXNlX21tYXBfZ3R0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmop CiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KG9iai0+YmFzZS5k ZXYpOwogCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwpAQCAtNDA2LDcgKzQxNCw3IEBAIHZvaWQg aTkxNV9nZW1fb2JqZWN0X3JlbGVhc2VfbW1hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqKQogCWlmICghb2JqLT51c2VyZmF1bHRfY291bnQpCiAJCWdvdG8gb3V0OwogCi0JX19pOTE1 X2dlbV9vYmplY3RfcmVsZWFzZV9tbWFwKG9iaik7CisJX19pOTE1X2dlbV9vYmplY3RfcmVsZWFz ZV9tbWFwX2d0dChvYmopOwogCiAJLyogRW5zdXJlIHRoYXQgdGhlIENQVSdzIFBURSBhcmUgcmV2 b2tlZCBhbmQgdGhlcmUgYXJlIG5vdCBvdXRzdGFuZGluZwogCSAqIG1lbW9yeSB0cmFuc2FjdGlv bnMgZnJvbSB1c2Vyc3BhY2UgYmVmb3JlIHdlIHJldHVybi4gVGhlIFRMQgpAQCAtNDIyLDE1ICs0 MzAsNjYgQEAgdm9pZCBpOTE1X2dlbV9vYmplY3RfcmVsZWFzZV9tbWFwKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopCiAJaW50ZWxfcnVudGltZV9wbV9wdXQoJmk5MTUtPnJ1bnRpbWVf cG0sIHdha2VyZWYpOwogfQogCi1zdGF0aWMgaW50IGNyZWF0ZV9tbWFwX29mZnNldChzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQorc3RhdGljIHZvaWQgaTkxNV9nZW1fb2JqZWN0X3Jl bGVhc2VfbW1hcF9vZmZzZXQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlz dHJ1Y3QgaTkxNV9tbWFwX29mZnNldCAqbW1vOworCisJbXV0ZXhfbG9jaygmb2JqLT5tbW9fbG9j ayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShtbW8sICZvYmotPm1tYXBfb2Zmc2V0cywgb2Zmc2V0 KSB7CisJCS8qIHZtYV9ub2RlX3VubWFwIGZvciBHVFQgbW1hcHMgaGFuZGxlZCBhbHJlYWR5IGlu CisJCSAqIF9faTkxNV9nZW1fb2JqZWN0X3JlbGVhc2VfbW1hcF9ndHQKKwkJICovCisJCWlmICht bW8tPm1tYXBfdHlwZSAhPSBJOTE1X01NQVBfVFlQRV9HVFQpCisJCQlkcm1fdm1hX25vZGVfdW5t YXAoJm1tby0+dm1hX25vZGUsCisJCQkJCSAgIG9iai0+YmFzZS5kZXYtPmFub25faW5vZGUtPmlf bWFwcGluZyk7CisJfQorCW11dGV4X3VubG9jaygmb2JqLT5tbW9fbG9jayk7Cit9CisKKy8qKgor ICogaTkxNV9nZW1fb2JqZWN0X3JlbGVhc2VfbW1hcCAtIHJlbW92ZSBwaHlzaWNhbCBwYWdlIG1h cHBpbmdzCisgKiBAb2JqOiBvYmogaW4gcXVlc3Rpb24KKyAqCisgKiBQcmVzZXJ2ZSB0aGUgcmVz ZXJ2YXRpb24gb2YgdGhlIG1tYXBwaW5nIHdpdGggdGhlIERSTSBjb3JlIGNvZGUsIGJ1dAorICog cmVsaW5xdWlzaCBvd25lcnNoaXAgb2YgdGhlIHBhZ2VzIGJhY2sgdG8gdGhlIHN5c3RlbS4KKyAq Lwordm9pZCBpOTE1X2dlbV9vYmplY3RfcmVsZWFzZV9tbWFwKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmopCit7CisJaTkxNV9nZW1fb2JqZWN0X3JlbGVhc2VfbW1hcF9ndHQob2JqKTsK KwlpOTE1X2dlbV9vYmplY3RfcmVsZWFzZV9tbWFwX29mZnNldChvYmopOworfQorCitzdGF0aWMg dm9pZCBpbml0X21tYXBfb2Zmc2V0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJ CQkgICAgIHN0cnVjdCBpOTE1X21tYXBfb2Zmc2V0ICptbW8pCit7CisJSU5JVF9MSVNUX0hFQUQo Jm1tby0+dm1hX2xpc3QpOworCW11dGV4X2luaXQoJm1tby0+dm1hX2xvY2spOworCisJbXV0ZXhf bG9jaygmb2JqLT5tbW9fbG9jayk7CisJbGlzdF9hZGQoJm1tby0+b2Zmc2V0LCAmb2JqLT5tbWFw X29mZnNldHMpOworCW11dGV4X3VubG9jaygmb2JqLT5tbW9fbG9jayk7CisKKwltbW8tPm9iaiA9 IG9iajsKKwltbW8tPmRldiA9IG9iai0+YmFzZS5kZXY7Cit9CisKK3N0YXRpYyBpbnQgY3JlYXRl X21tYXBfb2Zmc2V0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkgICAgICBz dHJ1Y3QgaTkxNV9tbWFwX29mZnNldCAqbW1vKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gdG9faTkxNShvYmotPmJhc2UuZGV2KTsKIAlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0g Jmk5MTUtPmd0OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2OwogCWlu dCBlcnI7CiAKLQllcnIgPSBkcm1fZ2VtX2NyZWF0ZV9tbWFwX29mZnNldCgmb2JqLT5iYXNlKTsK LQlpZiAobGlrZWx5KCFlcnIpKQorCWRybV92bWFfbm9kZV9yZXNldCgmbW1vLT52bWFfbm9kZSk7 CisJaWYgKG1tby0+ZmlsZSkKKwkJZHJtX3ZtYV9ub2RlX2FsbG93KCZtbW8tPnZtYV9ub2RlLCBt bW8tPmZpbGUpOworCWVyciA9IGRybV92bWFfb2Zmc2V0X2FkZChkZXYtPnZtYV9vZmZzZXRfbWFu YWdlciwgJm1tby0+dm1hX25vZGUsCisJCQkJIG9iai0+YmFzZS5zaXplIC8gUEFHRV9TSVpFKTsK KwlpZiAobGlrZWx5KCFlcnIpKSB7CisJCWluaXRfbW1hcF9vZmZzZXQob2JqLCBtbW8pOwogCQly ZXR1cm4gMDsKKwl9CiAKIAkvKiBBdHRlbXB0IHRvIHJlYXAgc29tZSBtbWFwIHNwYWNlIGZyb20g ZGVhZCBvYmplY3RzICovCiAJZXJyID0gaW50ZWxfZ3RfcmV0aXJlX3JlcXVlc3RzX3RpbWVvdXQo Z3QsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKQEAgLTQzOCwxNiArNDk3LDIzIEBAIHN0YXRpYyBp bnQgY3JlYXRlX21tYXBfb2Zmc2V0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJ CXJldHVybiBlcnI7CiAKIAlpOTE1X2dlbV9kcmFpbl9mcmVlZF9vYmplY3RzKGk5MTUpOwotCXJl dHVybiBkcm1fZ2VtX2NyZWF0ZV9tbWFwX29mZnNldCgmb2JqLT5iYXNlKTsKKwllcnIgPSBkcm1f dm1hX29mZnNldF9hZGQoZGV2LT52bWFfb2Zmc2V0X21hbmFnZXIsICZtbW8tPnZtYV9ub2RlLAor CQkJCSBvYmotPmJhc2Uuc2l6ZSAvIFBBR0VfU0laRSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVy cjsKKworCWluaXRfbW1hcF9vZmZzZXQob2JqLCBtbW8pOworCXJldHVybiAwOwogfQogCi1pbnQK LWk5MTVfZ2VtX21tYXBfZ3R0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKLQkJICBzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAotCQkgIHUzMiBoYW5kbGUsCi0JCSAgdTY0ICpvZmZzZXQpCitzdGF0aWMg aW50CitfX2Fzc2lnbl9nZW1fb2JqZWN0X21tYXBfZGF0YShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUs CisJCQkgICAgICB1MzIgaGFuZGxlLAorCQkJICAgICAgZW51bSBpOTE1X21tYXBfdHlwZSBtbWFw X3R5cGUsCisJCQkgICAgICB1NjQgKm9mZnNldCkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqOworCXN0cnVjdCBpOTE1X21tYXBfb2Zmc2V0ICptbW87CiAJaW50IHJldDsKIAog CW9iaiA9IGk5MTVfZ2VtX29iamVjdF9sb29rdXAoZmlsZSwgaGFuZGxlKTsKQEAgLTQ1OSwxMCAr NTI1LDIxIEBAIGk5MTVfZ2VtX21tYXBfZ3R0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKIAkJZ290 byBvdXQ7CiAJfQogCi0JcmV0ID0gY3JlYXRlX21tYXBfb2Zmc2V0KG9iaik7Ci0JaWYgKHJldCA9 PSAwKQotCQkqb2Zmc2V0ID0gZHJtX3ZtYV9ub2RlX29mZnNldF9hZGRyKCZvYmotPmJhc2Uudm1h X25vZGUpOworCW1tbyA9IGt6YWxsb2Moc2l6ZW9mKCptbW8pLCBHRlBfS0VSTkVMKTsKKwlpZiAo IW1tbykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwltbW8tPmZpbGUg PSBmaWxlOworCXJldCA9IGNyZWF0ZV9tbWFwX29mZnNldChvYmosIG1tbyk7CisJaWYgKHJldCkg eworCQlrZnJlZShtbW8pOworCQlnb3RvIG91dDsKKwl9CiAKKwltbW8tPm1tYXBfdHlwZSA9IG1t YXBfdHlwZTsKKwkqb2Zmc2V0ID0gZHJtX3ZtYV9ub2RlX29mZnNldF9hZGRyKCZtbW8tPnZtYV9u b2RlKTsKIG91dDoKIAlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CiAJcmV0dXJuIHJldDsKQEAg LTQ4OSw3ICs1NjYsMTI1IEBAIGk5MTVfZ2VtX21tYXBfZ3R0X2lvY3RsKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHZvaWQgKmRhdGEsCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwX2d0dCAq YXJncyA9IGRhdGE7CiAKLQlyZXR1cm4gaTkxNV9nZW1fbW1hcF9ndHQoZmlsZSwgZGV2LCBhcmdz LT5oYW5kbGUsICZhcmdzLT5vZmZzZXQpOworCXJldHVybiBfX2Fzc2lnbl9nZW1fb2JqZWN0X21t YXBfZGF0YShmaWxlLCBhcmdzLT5oYW5kbGUsCisJCQkJCSAgICAgSTkxNV9NTUFQX1RZUEVfR1RU LAorCQkJCQkgICAgICZhcmdzLT5vZmZzZXQpOworfQorCit2b2lkIGk5MTVfbW1hcF9vZmZzZXRf ZGVzdHJveShzdHJ1Y3QgaTkxNV9tbWFwX29mZnNldCAqbW1vLCBzdHJ1Y3QgbXV0ZXggKm11dGV4 KQoreworCXN0cnVjdCBpOTE1X3ZtYSAqdm1hLCAqdm47CisKKwlpZiAobW1vLT5maWxlKQorCQlk cm1fdm1hX25vZGVfcmV2b2tlKCZtbW8tPnZtYV9ub2RlLCBtbW8tPmZpbGUpOworCWRybV92bWFf b2Zmc2V0X3JlbW92ZShtbW8tPmRldi0+dm1hX29mZnNldF9tYW5hZ2VyLCAmbW1vLT52bWFfbm9k ZSk7CisKKwltdXRleF9sb2NrKG11dGV4KTsKKwlsaXN0X2RlbCgmbW1vLT5vZmZzZXQpOworCW11 dGV4X3VubG9jayhtdXRleCk7CisKKwltdXRleF9sb2NrKCZtbW8tPnZtYV9sb2NrKTsKKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5X3NhZmUodm1hLCB2biwgJm1tby0+dm1hX2xpc3QsIG1tb19saW5rKQor CQl2bWEtPm1tbyA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZtbW8tPnZtYV9sb2NrKTsKKworCWtm cmVlKG1tbyk7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfZ2VtX3ZtX29wZW4oc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGk5MTVfbW1hcF9vZmZzZXQgKm1tbyA9IHZtYS0+ dm1fcHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBtbW8t Pm9iajsKKworCUdFTV9CVUdfT04oIW9iaik7CisJaTkxNV9nZW1fb2JqZWN0X2dldChvYmopOwor fQorCitzdGF0aWMgdm9pZCBpOTE1X2dlbV92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSkKK3sKKwlzdHJ1Y3QgaTkxNV9tbWFwX29mZnNldCAqbW1vID0gdm1hLT52bV9wcml2YXRl X2RhdGE7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IG1tby0+b2JqOworCisJ R0VNX0JVR19PTighb2JqKTsKKwlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaTkxNV9nZW1fZ3R0X3ZtX29wcyA9 IHsKKwkuZmF1bHQgPSBpOTE1X2dlbV9mYXVsdCwKKwkub3BlbiA9IGk5MTVfZ2VtX3ZtX29wZW4s CisJLmNsb3NlID0gaTkxNV9nZW1fdm1fY2xvc2UsCit9OworCisvKiBUaGlzIG92ZXJjb21lcyB0 aGUgbGltaXRhdGlvbiBpbiBkcm1fZ2VtX21tYXAncyBhc3NpZ25tZW50IG9mIGEKKyAqIGRybV9n ZW1fb2JqZWN0IGFzIHRoZSB2bWEtPnZtX3ByaXZhdGVfZGF0YS4gU2luY2Ugd2UgbmVlZCB0bwor ICogYmUgYWJsZSB0byByZXNvbHZlIG11bHRpcGxlIG1tYXAgb2Zmc2V0cyB3aGljaCBjb3VsZCBi ZSB0aWVkCisgKiB0byBhIHNpbmdsZSBnZW0gb2JqZWN0LgorICovCitpbnQgaTkxNV9nZW1fbW1h cChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3Ry dWN0IGRybV92bWFfb2Zmc2V0X25vZGUgKm5vZGU7CisJc3RydWN0IGRybV9maWxlICpwcml2ID0g ZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwcml2LT5taW5v ci0+ZGV2OworCXN0cnVjdCBpOTE1X21tYXBfb2Zmc2V0ICptbW8gPSBOVUxMOworCXN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqID0gTlVMTDsKKworCWlmIChkcm1fZGV2X2lzX3VucGx1Z2dlZChk ZXYpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRybV92bWFfb2Zmc2V0X2xvY2tfbG9va3VwKGRl di0+dm1hX29mZnNldF9tYW5hZ2VyKTsKKwlub2RlID0gZHJtX3ZtYV9vZmZzZXRfZXhhY3RfbG9v a3VwX2xvY2tlZChkZXYtPnZtYV9vZmZzZXRfbWFuYWdlciwKKwkJCQkJCSAgdm1hLT52bV9wZ29m ZiwKKwkJCQkJCSAgdm1hX3BhZ2VzKHZtYSkpOworCWlmIChsaWtlbHkobm9kZSkpIHsKKwkJbW1v ID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBpOTE1X21tYXBfb2Zmc2V0LAorCQkJCSAgIHZt YV9ub2RlKTsKKwkJLyoKKwkJICogSW4gb3VyIGRlcGVuZGVuY3kgY2hhaW4sIHRoZSBkcm1fdm1h X29mZnNldF9ub2RlCisJCSAqIGRlcGVuZHMgb24gdGhlIHZhbGlkaXR5IG9mIHRoZSBtbW8sIHdo aWNoIGRlcGVuZHMgb24KKwkJICogdGhlIGdlbSBvYmplY3QuIEhvd2V2ZXIgdGhlIG9ubHkgcmVm ZXJlbmNlIHdlIGhhdmUKKwkJICogYXQgdGhpcyBwb2ludCBpcyB0aGUgbW1vIChhcyB0aGUgcGFy ZW50IG9mIHRoZSBub2RlKS4KKwkJICogVHJ5IHRvIGNoZWNrIGlmIHRoZSBnZW0gb2JqZWN0IHdh cyBhdCBsZWFzdCBjbGVhcmVkLgorCQkgKi8KKwkJaWYgKCFtbW8gfHwgIW1tby0+b2JqKSB7CisJ CQlkcm1fdm1hX29mZnNldF91bmxvY2tfbG9va3VwKGRldi0+dm1hX29mZnNldF9tYW5hZ2VyKTsK KwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCS8qCisJCSAqIFNraXAgMC1yZWZjbnRlZCBvYmpl Y3RzIGFzIGl0IGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nCisJCSAqIGRlc3Ryb3llZCBhbmQg d2lsbCBiZSBpbnZhbGlkIHdoZW4gdGhlIHZtYSBtYW5hZ2VyIGxvY2sKKwkJICogaXMgcmVsZWFz ZWQuCisJCSAqLworCQlvYmogPSAmbW1vLT5vYmotPmJhc2U7CisJCWlmICgha3JlZl9nZXRfdW5s ZXNzX3plcm8oJm9iai0+cmVmY291bnQpKQorCQkJb2JqID0gTlVMTDsKKworCX0KKwlkcm1fdm1h X29mZnNldF91bmxvY2tfbG9va3VwKGRldi0+dm1hX29mZnNldF9tYW5hZ2VyKTsKKworCWlmICgh b2JqKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghZHJtX3ZtYV9ub2RlX2lzX2FsbG93ZWQo bm9kZSwgcHJpdikpIHsKKwkJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKG9iaik7CisJCXJl dHVybiAtRUFDQ0VTOworCX0KKworCWlmICh0b19pbnRlbF9ibyhvYmopLT5yZWFkb25seSkgewor CQlpZiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSB7CisJCQlkcm1fZ2VtX29iamVjdF9wdXRf dW5sb2NrZWQob2JqKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXZtYS0+dm1fZmxhZ3Mg Jj0gflZNX01BWVdSSVRFOworCX0KKworCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUEZOTUFQIHwgVk1f RE9OVEVYUEFORCB8IFZNX0RPTlREVU1QOworCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X3dy aXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS0+dm1fZmxhZ3MpKTsKKwl2bWEtPnZtX3Bh Z2VfcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQodm1hLT52bV9wYWdlX3Byb3QpOworCXZtYS0+dm1f cHJpdmF0ZV9kYXRhID0gbW1vOworCisJdm1hLT52bV9vcHMgPSAmaTkxNV9nZW1fZ3R0X3ZtX29w czsKKworCXJldHVybiAwOwogfQogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVfU0VM RlRFU1QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2Jq ZWN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMKaW5kZXgg ZGJmOWJlOWE3OWY0Li44YWJjZDUyMDIzNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v aTkxNV9nZW1fb2JqZWN0LmMKQEAgLTU4LDYgKzU4LDkgQEAgdm9pZCBpOTE1X2dlbV9vYmplY3Rf aW5pdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCiAJSU5JVF9MSVNUX0hFQUQo Jm9iai0+bHV0X2xpc3QpOwogCisJbXV0ZXhfaW5pdCgmb2JqLT5tbW9fbG9jayk7CisJSU5JVF9M SVNUX0hFQUQoJm9iai0+bW1hcF9vZmZzZXRzKTsKKwogCWluaXRfcmN1X2hlYWQoJm9iai0+cmN1 KTsKIAogCW9iai0+b3BzID0gb3BzOwpAQCAtMTU1LDYgKzE1OCw4IEBAIHN0YXRpYyB2b2lkIF9f aTkxNV9nZW1fZnJlZV9vYmplY3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAogCiAJ d2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KCZpOTE1LT5ydW50aW1lX3BtKTsKIAlsbGlz dF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9iaiwgb24sIGZyZWVkLCBmcmVlZCkgeworCQlzdHJ1Y3Qg aTkxNV9tbWFwX29mZnNldCAqbW1vLCAqbW47CisKIAkJdHJhY2VfaTkxNV9nZW1fb2JqZWN0X2Rl c3Ryb3kob2JqKTsKIAogCQlpZiAoIWxpc3RfZW1wdHkoJm9iai0+dm1hLmxpc3QpKSB7CkBAIC0x ODAsNiArMTg1LDE0IEBAIHN0YXRpYyB2b2lkIF9faTkxNV9nZW1fZnJlZV9vYmplY3RzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1LAogCQkJc3Bpbl91bmxvY2soJm9iai0+dm1hLmxvY2sp OwogCQl9CiAKKwkJaTkxNV9nZW1fb2JqZWN0X3JlbGVhc2VfbW1hcChvYmopOworCisJCWxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShtbW8sIG1uLCAmb2JqLT5tbWFwX29mZnNldHMsIG9mZnNldCkg eworCQkJbW1vLT5vYmogPSBOVUxMOworCQkJaTkxNV9tbWFwX29mZnNldF9kZXN0cm95KG1tbywg Jm9iai0+bW1vX2xvY2spOworCQl9CisKKwkJR0VNX0JVR19PTighbGlzdF9lbXB0eSgmb2JqLT5t bWFwX29mZnNldHMpKTsKIAkJR0VNX0JVR19PTihhdG9taWNfcmVhZCgmb2JqLT5iaW5kX2NvdW50 KSk7CiAJCUdFTV9CVUdfT04ob2JqLT51c2VyZmF1bHRfY291bnQpOwogCQlHRU1fQlVHX09OKCFs aXN0X2VtcHR5KCZvYmotPmx1dF9saXN0KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkx NV9nZW1fb2JqZWN0LmgKaW5kZXggMDg2YTliZjVhZGNjLi42NDczYTg3NzMwY2UgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmgKQEAgLTEzMCwxMyArMTMwLDEz IEBAIHZvaWQgaTkxNV9nZW1fb2JqZWN0X3VubG9ja19mZW5jZShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAogc3RhdGljIGlubGluZSB2b2lkCiBpOTE1X2dlbV9vYmplY3Rfc2V0X3Jl YWRvbmx5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7Ci0Jb2JqLT5iYXNlLnZt YV9ub2RlLnJlYWRvbmx5ID0gdHJ1ZTsKKwlvYmotPnJlYWRvbmx5ID0gdHJ1ZTsKIH0KIAogc3Rh dGljIGlubGluZSBib29sCiBpOTE1X2dlbV9vYmplY3RfaXNfcmVhZG9ubHkoY29uc3Qgc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKLQlyZXR1cm4gb2JqLT5iYXNlLnZtYV9ub2Rl LnJlYWRvbmx5OworCXJldHVybiBvYmotPnJlYWRvbmx5OwogfQogCiBzdGF0aWMgaW5saW5lIGJv b2wKQEAgLTM1Niw3ICszNTYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9nZW1fb2JqZWN0 X3VucGluX21hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogCWk5MTVfZ2VtX29i amVjdF91bnBpbl9wYWdlcyhvYmopOwogfQogCi12b2lkIF9faTkxNV9nZW1fb2JqZWN0X3JlbGVh c2VfbW1hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKK3ZvaWQgX19pOTE1X2dl bV9vYmplY3RfcmVsZWFzZV9tbWFwX2d0dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq KTsKIHZvaWQgaTkxNV9nZW1fb2JqZWN0X3JlbGVhc2VfbW1hcChzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqKTsKIAogdm9pZApAQCAtNDQyLDYgKzQ0Miw5IEBAIGludCBpOTE1X2dlbV9v YmplY3Rfd2FpdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogaW50IGk5MTVfZ2Vt X29iamVjdF93YWl0X3ByaW9yaXR5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJ CQkJICB1bnNpZ25lZCBpbnQgZmxhZ3MsCiAJCQkJICBjb25zdCBzdHJ1Y3QgaTkxNV9zY2hlZF9h dHRyICphdHRyKTsKKwordm9pZCBpOTE1X21tYXBfb2Zmc2V0X2Rlc3Ryb3koc3RydWN0IGk5MTVf bW1hcF9vZmZzZXQgKm1tbywgc3RydWN0IG11dGV4ICptdXRleCk7CisKICNkZWZpbmUgSTkxNV9Q UklPUklUWV9ESVNQTEFZIEk5MTVfVVNFUl9QUklPUklUWShJOTE1X1BSSU9SSVRZX01BWCkKIAog I2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2Jq ZWN0X3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5 cGVzLmgKaW5kZXggYzAwYjRmMDc3ZjllLi43NDU0NGVjYTVlMmMgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfdHlwZXMuaAorKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgKQEAgLTYyLDYgKzYyLDI0 IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyB7CiAJdm9pZCAoKnJlbGVhc2UpKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOwogfTsKIAorZW51bSBpOTE1X21tYXBfdHlw ZSB7CisJSTkxNV9NTUFQX1RZUEVfR1RUID0gMCwKK307CisKK3N0cnVjdCBpOTE1X21tYXBfb2Zm c2V0IHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCXN0cnVjdCBkcm1fdm1hX29mZnNldF9u b2RlIHZtYV9ub2RlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0 IGRybV9maWxlICpmaWxlOworCWVudW0gaTkxNV9tbWFwX3R5cGUgbW1hcF90eXBlOworCisJc3Ry dWN0IGxpc3RfaGVhZCBvZmZzZXQ7CisJLyogbGlzdCBvZiBhY3RpdmUgVk1BIHVzaW5nIHRoaXMg bW1vIGZvciBmZW5jaW5nICovCisJc3RydWN0IGxpc3RfaGVhZCB2bWFfbGlzdDsKKwkvKiBwcm90 ZWN0cyB2bWEgbGlzdCAqLworCXN0cnVjdCBtdXRleCB2bWFfbG9jazsKK307CisKIHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0IHsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgYmFzZTsKIApAQCAt MTE3LDYgKzEzNSwxMSBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCB7CiAJdW5zaWduZWQg aW50IHVzZXJmYXVsdF9jb3VudDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHVzZXJmYXVsdF9saW5rOwog CisJLyogUHJvdGVjdHMgYWNjZXNzIHRvIG1tYXAgb2Zmc2V0cyAqLworCXN0cnVjdCBtdXRleCBt bW9fbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG1tYXBfb2Zmc2V0czsKKwlib29sIHJlYWRvbmx5 OjE7CisKIAlJOTE1X1NFTEZURVNUX0RFQ0xBUkUoc3RydWN0IGxpc3RfaGVhZCBzdF9saW5rKTsK IAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5 MTVfZ2VtX21tYW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9n ZW1fbW1hbi5jCmluZGV4IGNmYTUyYzUyNTY5MS4uMjNjMjM2M2RiYjJkIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21tYW4uYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21tYW4uYwpAQCAtNTU3 LDE1ICs1NTcsMjAgQEAgc3RhdGljIGJvb2wgYXNzZXJ0X21tYXBfb2Zmc2V0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1LAogCQkJICAgICAgIGludCBleHBlY3RlZCkKIHsKIAlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCS8qIE93bmVyc2hpcCB0cmFuc2ZlcnJlZCB0byBw YXJlbnQgZ2VtIG9iamVjdCBpbiBjcmVhdGVfbW1hcF9vZmZzZXQgKi8KKwlzdHJ1Y3QgaTkxNV9t bWFwX29mZnNldCAqbW1vID0ga3phbGxvYyhzaXplb2YoKm1tbyksIEdGUF9LRVJORUwpOwogCWlu dCBlcnI7CiAKIAlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2ludGVybmFsKGk5MTUsIHNp emUpOwogCWlmIChJU19FUlIob2JqKSkKIAkJcmV0dXJuIFBUUl9FUlIob2JqKTsKIAotCWVyciA9 IGNyZWF0ZV9tbWFwX29mZnNldChvYmopOworCWVyciA9IGNyZWF0ZV9tbWFwX29mZnNldChvYmos IG1tbyk7CisJaWYgKGVycikKKwkJa2ZyZWUobW1vKTsKIAlpOTE1X2dlbV9vYmplY3RfcHV0KG9i aik7CiAKKwogCXJldHVybiBlcnIgPT0gZXhwZWN0ZWQ7CiB9CiAKQEAgLTYwMSw2ICs2MDYsOCBA QCBzdGF0aWMgaW50IGlndF9tbWFwX29mZnNldF9leGhhdXN0aW9uKHZvaWQgKmFyZykKIAlzdHJ1 Y3QgZHJtX21tICptbSA9ICZpOTE1LT5kcm0udm1hX29mZnNldF9tYW5hZ2VyLT52bV9hZGRyX3Nw YWNlX21tOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAJc3RydWN0IGRybV9t bV9ub2RlIHJlc3YsICpob2xlOworCS8qIE93bmVyc2hpcCB0cmFuc2ZlcnJlZCB0byBwYXJlbnQg Z2VtIG9iamVjdCBpbiBjcmVhdGVfbW1hcF9vZmZzZXQgKi8KKwlzdHJ1Y3QgaTkxNV9tbWFwX29m ZnNldCAqbW1vID0ga3phbGxvYyhzaXplb2YoKm1tbyksIEdGUF9LRVJORUwpOwogCXU2NCBob2xl X3N0YXJ0LCBob2xlX2VuZDsKIAlpbnQgbG9vcCwgZXJyOwogCkBAIC02NDQsOSArNjUxLDEwIEBA IHN0YXRpYyBpbnQgaWd0X21tYXBfb2Zmc2V0X2V4aGF1c3Rpb24odm9pZCAqYXJnKQogCQlnb3Rv IG91dDsKIAl9CiAKLQllcnIgPSBjcmVhdGVfbW1hcF9vZmZzZXQob2JqKTsKKwllcnIgPSBjcmVh dGVfbW1hcF9vZmZzZXQob2JqLCBtbW8pOwogCWlmIChlcnIpIHsKIAkJcHJfZXJyKCJVbmFibGUg dG8gaW5zZXJ0IG9iamVjdCBpbnRvIHJlY2xhaW1lZCBob2xlXG4iKTsKKwkJa2ZyZWUobW1vKTsK IAkJZ290byBlcnJfb2JqOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfcmVzZXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jlc2V0LmMK aW5kZXggN2IzZDlkNDUxN2EwLi5kMTA5MGZjYjY4MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX3Jlc2V0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfcmVzZXQuYwpAQCAtNjY3LDggKzY2NywxMyBAQCBzdGF0aWMgdm9pZCByZXZva2VfbW1h cHMoc3RydWN0IGludGVsX2d0ICpndCkKIAkJCWNvbnRpbnVlOwogCiAJCUdFTV9CVUdfT04odm1h LT5mZW5jZSAhPSAmZ3QtPmdndHQtPmZlbmNlX3JlZ3NbaV0pOwotCQlub2RlID0gJnZtYS0+b2Jq LT5iYXNlLnZtYV9ub2RlOworCisJCWlmICghdm1hLT5tbW8pCisJCQljb250aW51ZTsKKworCQlu b2RlID0gJnZtYS0+bW1vLT52bWFfbm9kZTsKIAkJdm1hX29mZnNldCA9IHZtYS0+Z2d0dF92aWV3 LnBhcnRpYWwub2Zmc2V0IDw8IFBBR0VfU0hJRlQ7CisKIAkJdW5tYXBfbWFwcGluZ19yYW5nZShn dC0+aTkxNS0+ZHJtLmFub25faW5vZGUtPmlfbWFwcGluZywKIAkJCQkgICAgZHJtX3ZtYV9ub2Rl X29mZnNldF9hZGRyKG5vZGUpICsgdm1hX29mZnNldCwKIAkJCQkgICAgdm1hLT5zaXplLApkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggOTM1NDkyNDU3NmM0Li5jYzcwYWJhNmFjMjYgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtMjY0NCwxOCArMjY0NCwxMiBAQCBjb25zdCBzdHJ1Y3Qg ZGV2X3BtX29wcyBpOTE1X3BtX29wcyA9IHsKIAkucnVudGltZV9yZXN1bWUgPSBpbnRlbF9ydW50 aW1lX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1 Y3QgaTkxNV9nZW1fdm1fb3BzID0gewotCS5mYXVsdCA9IGk5MTVfZ2VtX2ZhdWx0LAotCS5vcGVu ID0gZHJtX2dlbV92bV9vcGVuLAotCS5jbG9zZSA9IGRybV9nZW1fdm1fY2xvc2UsCi19OwotCiBz dGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpOTE1X2RyaXZlcl9mb3BzID0gewog CS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gZHJtX29wZW4sCiAJLnJlbGVhc2UgPSBk cm1fcmVsZWFzZSwKIAkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCi0JLm1tYXAgPSBkcm1f Z2VtX21tYXAsCisJLm1tYXAgPSBpOTE1X2dlbV9tbWFwLAogCS5wb2xsID0gZHJtX3BvbGwsCiAJ LnJlYWQgPSBkcm1fcmVhZCwKIAkuY29tcGF0X2lvY3RsID0gaTkxNV9jb21wYXRfaW9jdGwsCkBA IC0yNzQ0LDcgKzI3MzgsNiBAQCBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyID0gewog CiAJLmdlbV9jbG9zZV9vYmplY3QgPSBpOTE1X2dlbV9jbG9zZV9vYmplY3QsCiAJLmdlbV9mcmVl X29iamVjdF91bmxvY2tlZCA9IGk5MTVfZ2VtX2ZyZWVfb2JqZWN0LAotCS5nZW1fdm1fb3BzID0g Jmk5MTVfZ2VtX3ZtX29wcywKIAogCS5wcmltZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1l X2hhbmRsZV90b19mZCwKIAkucHJpbWVfZmRfdG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90 b19oYW5kbGUsCkBAIC0yNzU1LDcgKzI3NDgsNiBAQCBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIg ZHJpdmVyID0gewogCS5nZXRfc2Nhbm91dF9wb3NpdGlvbiA9IGk5MTVfZ2V0X2NydGNfc2Nhbm91 dHBvcywKIAogCS5kdW1iX2NyZWF0ZSA9IGk5MTVfZ2VtX2R1bWJfY3JlYXRlLAotCS5kdW1iX21h cF9vZmZzZXQgPSBpOTE1X2dlbV9tbWFwX2d0dCwKIAkuaW9jdGxzID0gaTkxNV9pb2N0bHMsCiAJ Lm51bV9pb2N0bHMgPSBBUlJBWV9TSVpFKGk5MTVfaW9jdGxzKSwKIAkuZm9wcyA9ICZpOTE1X2Ry aXZlcl9mb3BzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggYjM2NzQ2N2IwM2MyLi5mYTZk ZDMwMWE3MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMjI3Niw4ICsyMjc2LDYgQEAg aTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIGlu dCBpOTE1X2dlbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAkJCSBz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAq YXJncyk7Ci1pbnQgaTkxNV9nZW1fbW1hcF9ndHQoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYs IHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCSAgICAgIHUzMiBoYW5kbGUsIHU2NCAqb2Zmc2V0 KTsKIGludCBpOTE1X2dlbV9tbWFwX2d0dF92ZXJzaW9uKHZvaWQpOwogCiBpbnQgX19tdXN0X2No ZWNrIGk5MTVfZ2VtX3NldF9nbG9iYWxfc2Vxbm8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMy IHNlcW5vKTsKQEAgLTIzMDIsNiArMjMwMCw3IEBAIHZvaWQgaTkxNV9nZW1fZHJpdmVyX3JlbGVh c2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIHZvaWQgaTkxNV9nZW1fc3Vz cGVuZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpOTE1X2dlbV9z dXNwZW5kX2xhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIHZvaWQgaTkx NV9nZW1fcmVzdW1lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CitpbnQgaTkx NV9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEp Owogdm1fZmF1bHRfdCBpOTE1X2dlbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7CiAKIGlu dCBpOTE1X2dlbV9vcGVuKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0u YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggMGRkYmQzYTVmYjhkLi5l NjBmZmFlNGIxMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtODUzLDcgKzg1Myw3IEBA IHZvaWQgaTkxNV9nZW1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1KQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9iaiwgb24sCiAJCQkJICZpOTE1LT5n Z3R0LnVzZXJmYXVsdF9saXN0LCB1c2VyZmF1bHRfbGluaykKLQkJX19pOTE1X2dlbV9vYmplY3Rf cmVsZWFzZV9tbWFwKG9iaik7CisJCV9faTkxNV9nZW1fb2JqZWN0X3JlbGVhc2VfbW1hcF9ndHQo b2JqKTsKIAogCS8qCiAJICogVGhlIGZlbmNlIHdpbGwgYmUgbG9zdCB3aGVuIHRoZSBkZXZpY2Ug cG93ZXJzIGRvd24uIElmIGFueSB3ZXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3ZtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuYwppbmRleCA5ZmRj ZDRlMmM3OTkuLmE5NWIyYjc5ZDgwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV92bWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5jCkBAIC0xMzAs NiArMTMwLDcgQEAgdm1hX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAog CX0KIAogCUlOSVRfTElTVF9IRUFEKCZ2bWEtPmNsb3NlZF9saW5rKTsKKwlJTklUX0xJU1RfSEVB RCgmdm1hLT5tbW9fbGluayk7CiAKIAlpZiAodmlldyAmJiB2aWV3LT50eXBlICE9IEk5MTVfR0dU VF9WSUVXX05PUk1BTCkgewogCQl2bWEtPmdndHRfdmlldyA9ICp2aWV3OwpAQCAtMTAwMiw2ICsx MDAzLDE0IEBAIHZvaWQgaTkxNV92bWFfZGVzdHJveShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKIAkJ c3Bpbl91bmxvY2soJm9iai0+dm1hLmxvY2spOwogCX0KIAorCWlmICh2bWEtPm1tbykgeworCQlz dHJ1Y3QgaTkxNV9tbWFwX29mZnNldCAqbW1vID0gdm1hLT5tbW87CisKKwkJbXV0ZXhfbG9jaygm bW1vLT52bWFfbG9jayk7CisJCWxpc3RfZGVsKCZ2bWEtPm1tb19saW5rKTsKKwkJbXV0ZXhfdW5s b2NrKCZtbW8tPnZtYV9sb2NrKTsKKwl9CisKIAlfX2k5MTVfdm1hX3JlbW92ZV9jbG9zZWQodm1h KTsKIAlpOTE1X3ZtX3B1dCh2bWEtPnZtKTsKIApAQCAtMTA1OCw3ICsxMDY3LDcgQEAgc3RhdGlj IHZvaWQgX19pOTE1X3ZtYV9pb3VubWFwKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQogCiB2b2lkIGk5 MTVfdm1hX3Jldm9rZV9tbWFwKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQogewotCXN0cnVjdCBkcm1f dm1hX29mZnNldF9ub2RlICpub2RlID0gJnZtYS0+b2JqLT5iYXNlLnZtYV9ub2RlOworCXN0cnVj dCBkcm1fdm1hX29mZnNldF9ub2RlICpub2RlOwogCXU2NCB2bWFfb2Zmc2V0OwogCiAJbG9ja2Rl cF9hc3NlcnRfaGVsZCgmdm1hLT52bS0+bXV0ZXgpOwpAQCAtMTA3MCwxMCArMTA3OSwxNSBAQCB2 b2lkIGk5MTVfdm1hX3Jldm9rZV9tbWFwKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQogCUdFTV9CVUdf T04oIXZtYS0+b2JqLT51c2VyZmF1bHRfY291bnQpOwogCiAJdm1hX29mZnNldCA9IHZtYS0+Z2d0 dF92aWV3LnBhcnRpYWwub2Zmc2V0IDw8IFBBR0VfU0hJRlQ7Ci0JdW5tYXBfbWFwcGluZ19yYW5n ZSh2bWEtPnZtLT5pOTE1LT5kcm0uYW5vbl9pbm9kZS0+aV9tYXBwaW5nLAotCQkJICAgIGRybV92 bWFfbm9kZV9vZmZzZXRfYWRkcihub2RlKSArIHZtYV9vZmZzZXQsCi0JCQkgICAgdm1hLT5zaXpl LAotCQkJICAgIDEpOworCisJaWYgKHZtYS0+bW1vKSB7CisJCW5vZGUgPSAmdm1hLT5tbW8tPnZt YV9ub2RlOworCisJCXVubWFwX21hcHBpbmdfcmFuZ2Uodm1hLT52bS0+aTkxNS0+ZHJtLmFub25f aW5vZGUtPmlfbWFwcGluZywKKwkJCQkgICAgZHJtX3ZtYV9ub2RlX29mZnNldF9hZGRyKG5vZGUp ICsgdm1hX29mZnNldCwKKwkJCQkgICAgdm1hLT5zaXplLAorCQkJCSAgICAxKTsKKwl9CiAKIAlp OTE1X3ZtYV91bnNldF91c2VyZmF1bHQodm1hKTsKIAlpZiAoIS0tdm1hLT5vYmotPnVzZXJmYXVs dF9jb3VudCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmggYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5oCmluZGV4IDg1ODkwOGUzZDFjYy4uMzRhZmQx YTU5ZWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5oCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmgKQEAgLTYzLDYgKzYzLDEwIEBAIHN0cnVj dCBpOTE1X3ZtYSB7CiAJdTY0IGRpc3BsYXlfYWxpZ25tZW50OwogCXN0cnVjdCBpOTE1X3BhZ2Vf c2l6ZXMgcGFnZV9zaXplczsKIAorCS8qIG1tYXAtb2Zmc2V0IGFzc29jaWF0ZWQgd2l0aCBmZW5j aW5nIGZvciB0aGlzIHZtYSAqLworCXN0cnVjdCBpOTE1X21tYXBfb2Zmc2V0CSptbW87CisJc3Ry dWN0IGxpc3RfaGVhZCBtbW9fbGluazsKKwogCXUzMiBmZW5jZV9zaXplOwogCXUzMiBmZW5jZV9h bGlnbm1lbnQ7CiAKLS0gCjIuMjMuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaW50ZWwtZ2Z4