From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ander Conselvan de Oliveira Subject: [PATCH 05/23] drm/i915: Allocate a drm_atomic_state for the legacy modeset code Date: Tue, 3 Mar 2015 15:21:59 +0200 Message-ID: <1425388937-1247-6-git-send-email-ander.conselvan.de.oliveira@intel.com> References: <1425388937-1247-1-git-send-email-ander.conselvan.de.oliveira@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 642016E5AB for ; Tue, 3 Mar 2015 05:22:34 -0800 (PST) In-Reply-To: <1425388937-1247-1-git-send-email-ander.conselvan.de.oliveira@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: Ander Conselvan de Oliveira List-Id: intel-gfx@lists.freedesktop.org Rm9yIHRoZSBhdG9taWMgY29udmVyc2lvbiwgdGhlIG1vZGUgc2V0IHBhdGhzIG5lZWQgdG8gYmUg Y2hhbmdlZCB0byByZWx5Cm9uIGFuIGF0b21pYyBzdGF0ZSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBz dGFnZWQgY29uZmlnLiBCeSB1c2luZyBhbgphdG9taWMgc3RhdGUgZm9yIHRoZSBsZWdhY3kgY29k ZSwgd2Ugd2lsbCBiZSBhYmxlIHRvIGNvbnZlcnQgdGhlIGNvZGUKYmFzZSBpbiBzbWFsbCBjaHVu a3MuCgpTaWduZWQtb2ZmLWJ5OiBBbmRlciBDb25zZWx2YW4gZGUgT2xpdmVpcmEgPGFuZGVyLmNv bnNlbHZhbi5kZS5vbGl2ZWlyYUBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZGlzcGxheS5jIHwgMTE4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t CiAxIGZpbGUgY2hhbmdlZCwgOTEgaW5zZXJ0aW9ucygrKSwgMjcgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IDc5OGRlN2IuLjk3ZDRkZjUgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRl IDxkcm0vaTkxNV9kcm0uaD4KICNpbmNsdWRlICJpOTE1X2Rydi5oIgogI2luY2x1ZGUgImk5MTVf dHJhY2UuaCIKKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgogI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljX2hlbHBlci5oPgogI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+CiAjaW5jbHVk ZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgpAQCAtMTAyOTAsMTAgKzEwMjkxLDIyIEBAIHN0YXRp YyBib29sIGNoZWNrX2RpZ2l0YWxfcG9ydF9jb25mbGljdHMoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICoK K3N0YXRpYyB2b2lkCitjbGVhcl9pbnRlbF9jcnRjX3N0YXRlKHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSB0bXBfc3RhdGU7CisK KwkvKiBDbGVhciBvbmx5IHRoZSBpbnRlbCBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBjcnRjIHN0YXRl ICovCisJdG1wX3N0YXRlID0gY3J0Y19zdGF0ZS0+YmFzZTsKKwltZW1zZXQoY3J0Y19zdGF0ZSwg MCwgc2l6ZW9mICpjcnRjX3N0YXRlKTsKKwljcnRjX3N0YXRlLT5iYXNlID0gdG1wX3N0YXRlOwor fQorCitzdGF0aWMgaW50CiBpbnRlbF9tb2Rlc2V0X3BpcGVfY29uZmlnKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywKIAkJCSAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCi0JCQkgIHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlKQorCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSwKKwkJCSAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQogewogCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7 CkBAIC0xMDMwMywxNyArMTAzMTYsMTkgQEAgaW50ZWxfbW9kZXNldF9waXBlX2NvbmZpZyhzdHJ1 Y3QgZHJtX2NydGMgKmNydGMsCiAKIAlpZiAoIWNoZWNrX2VuY29kZXJfY2xvbmluZyh0b19pbnRl bF9jcnRjKGNydGMpKSkgewogCQlEUk1fREVCVUdfS01TKCJyZWplY3RpbmcgaW52YWxpZCBjbG9u aW5nIGNvbmZpZ3VyYXRpb25cbiIpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKCFjaGVja19kaWdpdGFsX3BvcnRfY29uZmxpY3RzKGRl dikpIHsKIAkJRFJNX0RFQlVHX0tNUygicmVqZWN0aW5nIGNvbmZsaWN0aW5nIGRpZ2l0YWwgcG9y dCBjb25maWd1cmF0aW9uXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJCXJldHVy biAtRUlOVkFMOwogCX0KIAotCXBpcGVfY29uZmlnID0ga3phbGxvYyhzaXplb2YoKnBpcGVfY29u ZmlnKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwaXBlX2NvbmZpZykKLQkJcmV0dXJuIEVSUl9QVFIo LUVOT01FTSk7CisJcGlwZV9jb25maWcgPSBpbnRlbF9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3Rh dGUsIHRvX2ludGVsX2NydGMoY3J0YykpOworCWlmIChJU19FUlIocGlwZV9jb25maWcpKQorCQly ZXR1cm4gUFRSX0VSUihwaXBlX2NvbmZpZyk7CisKKwljbGVhcl9pbnRlbF9jcnRjX3N0YXRlKHBp cGVfY29uZmlnKTsKIAogCXBpcGVfY29uZmlnLT5iYXNlLmNydGMgPSBjcnRjOwogCWRybV9tb2Rl X2NvcHkoJnBpcGVfY29uZmlnLT5iYXNlLmFkanVzdGVkX21vZGUsIG1vZGUpOwpAQCAtMTA0MDgs MTAgKzEwNDIzLDkgQEAgZW5jb2Rlcl9yZXRyeToKIAlEUk1fREVCVUdfS01TKCJwbGFuZSBicHA6 ICVpLCBwaXBlIGJwcDogJWksIGRpdGhlcmluZzogJWlcbiIsCiAJCSAgICAgIHBsYW5lX2JwcCwg cGlwZV9jb25maWctPnBpcGVfYnBwLCBwaXBlX2NvbmZpZy0+ZGl0aGVyKTsKIAotCXJldHVybiBw aXBlX2NvbmZpZzsKKwlyZXR1cm4gMDsKIGZhaWw6Ci0Ja2ZyZWUocGlwZV9jb25maWcpOwotCXJl dHVybiBFUlJfUFRSKHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyogQ29tcHV0ZXMgd2hpY2gg Y3J0Y3MgYXJlIGFmZmVjdGVkIGFuZCBzZXRzIHRoZSByZWxldmFudCBiaXRzIGluIHRoZSBtYXNr LiBGb3IKQEAgLTExMDg5LDE3ICsxMTEwMywxOSBAQCBzdGF0aWMgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKgogaW50ZWxfbW9kZXNldF9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsCiAJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAogCQkJICAgICBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCSAgICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUg KnN0YXRlLAogCQkJICAgICB1bnNpZ25lZCAqbW9kZXNldF9waXBlcywKIAkJCSAgICAgdW5zaWdu ZWQgKnByZXBhcmVfcGlwZXMsCiAJCQkgICAgIHVuc2lnbmVkICpkaXNhYmxlX3BpcGVzKQogewog CXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyA9IE5VTEw7CisJaW50IHJldCA9 IDA7CiAKIAlpbnRlbF9tb2Rlc2V0X2FmZmVjdGVkX3BpcGVzKGNydGMsIG1vZGVzZXRfcGlwZXMs CiAJCQkJICAgICBwcmVwYXJlX3BpcGVzLCBkaXNhYmxlX3BpcGVzKTsKIAogCWlmICgoKm1vZGVz ZXRfcGlwZXMpID09IDApCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gTlVMTDsKIAogCS8qCiAJICog Tm90ZSB0aGlzIG5lZWRzIGNoYW5nZXMgd2hlbiB3ZSBzdGFydCB0cmFja2luZyBtdWx0aXBsZSBt b2RlcwpAQCAtMTExMDcsMTQgKzExMTIzLDE3IEBAIGludGVsX21vZGVzZXRfY29tcHV0ZV9jb25m aWcoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCSAqIChpLmUuIG9uZSBwaXBlX2NvbmZpZyBmb3Ig ZWFjaCBjcnRjKSByYXRoZXIgdGhhbiBqdXN0IHRoZSBvbmUKIAkgKiBmb3IgdGhpcyBjcnRjLgog CSAqLwotCXBpcGVfY29uZmlnID0gaW50ZWxfbW9kZXNldF9waXBlX2NvbmZpZyhjcnRjLCBmYiwg bW9kZSk7Ci0JaWYgKElTX0VSUihwaXBlX2NvbmZpZykpIHsKLQkJZ290byBvdXQ7Ci0JfQorCXJl dCA9IGludGVsX21vZGVzZXRfcGlwZV9jb25maWcoY3J0YywgZmIsIG1vZGUsIHN0YXRlKTsKKwlp ZiAocmV0KQorCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCisJcGlwZV9jb25maWcgPSBpbnRlbF9h dG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUsIHRvX2ludGVsX2NydGMoY3J0YykpOworCWlmIChJ U19FUlIocGlwZV9jb25maWcpKQorCQlyZXR1cm4gcGlwZV9jb25maWc7CisKIAlpbnRlbF9kdW1w X3BpcGVfY29uZmlnKHRvX2ludGVsX2NydGMoY3J0YyksIHBpcGVfY29uZmlnLAogCQkJICAgICAg ICJbbW9kZXNldF0iKTsKIAotb3V0OgogCXJldHVybiBwaXBlX2NvbmZpZzsKIH0KIApAQCAtMTEx NTksNiArMTExNzgsNyBAQCBzdGF0aWMgaW50IF9faW50ZWxfc2V0X21vZGUoc3RydWN0IGRybV9j cnRjICpjcnRjLAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqc2F2ZWRfbW9kZTsKKwlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZV9jb3B5ID0gTlVMTDsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YzsK IAlpbnQgcmV0ID0gMDsKIApAQCAtMTExNjYsNiArMTExODYsMTIgQEAgc3RhdGljIGludCBfX2lu dGVsX3NldF9tb2RlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAlpZiAoIXNhdmVkX21vZGUpCiAJ CXJldHVybiAtRU5PTUVNOwogCisJY3J0Y19zdGF0ZV9jb3B5ID0ga21hbGxvYyhzaXplb2YoKmNy dGNfc3RhdGVfY29weSksIEdGUF9LRVJORUwpOworCWlmICghY3J0Y19zdGF0ZV9jb3B5KSB7CisJ CXJldCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisKIAkqc2F2ZWRfbW9kZSA9IGNydGMt Pm1vZGU7CiAKIAlpZiAobW9kZXNldF9waXBlcykKQEAgLTExMjUyLDYgKzExMjc4LDE5IEBAIGRv bmU6CiAJaWYgKHJldCAmJiBjcnRjLT5zdGF0ZS0+ZW5hYmxlKQogCQljcnRjLT5tb2RlID0gKnNh dmVkX21vZGU7CiAKKwlpZiAocmV0ID09IDAgJiYgcGlwZV9jb25maWcpIHsKKwkJc3RydWN0IGlu dGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCisJCS8qIFRoZSBw aXBlX2NvbmZpZyB3aWxsIGJlIGZyZWVkIHdpdGggdGhlIGF0b21pYyBzdGF0ZSwgc28KKwkJICog bWFrZSBhIGNvcHkuICovCisJCW1lbWNweShjcnRjX3N0YXRlX2NvcHksIGludGVsX2NydGMtPmNv bmZpZywKKwkJICAgICAgIHNpemVvZiAqY3J0Y19zdGF0ZV9jb3B5KTsKKwkJaW50ZWxfY3J0Yy0+ Y29uZmlnID0gaW50ZWxfY3J0Yy0+bmV3X2NvbmZpZyA9IGNydGNfc3RhdGVfY29weTsKKwkJaW50 ZWxfY3J0Yy0+YmFzZS5zdGF0ZSA9ICZjcnRjX3N0YXRlX2NvcHktPmJhc2U7CisJfSBlbHNlIHsK KwkJa2ZyZWUoY3J0Y19zdGF0ZV9jb3B5KTsKKwl9CisKIAlrZnJlZShzYXZlZF9tb2RlKTsKIAly ZXR1cm4gcmV0OwogfQpAQCAtMTEyNzksMjAgKzExMzE4LDM3IEBAIHN0YXRpYyBpbnQgaW50ZWxf c2V0X21vZGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSwKIAkJCSAgaW50IHgsIGludCB5LCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YikKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBkcm1f YXRvbWljX3N0YXRlICpzdGF0ZTsKIAlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25m aWc7CiAJdW5zaWduZWQgbW9kZXNldF9waXBlcywgcHJlcGFyZV9waXBlcywgZGlzYWJsZV9waXBl czsKKwlpbnQgcmV0ID0gMDsKKworCXN0YXRlID0gZHJtX2F0b21pY19zdGF0ZV9hbGxvYyhkZXYp OworCWlmICghc3RhdGUpCisJCXJldHVybiAtRU5PTUVNOworCisJc3RhdGUtPmFjcXVpcmVfY3R4 ID0gZGV2LT5tb2RlX2NvbmZpZy5hY3F1aXJlX2N0eDsKIAotCXBpcGVfY29uZmlnID0gaW50ZWxf bW9kZXNldF9jb21wdXRlX2NvbmZpZyhjcnRjLCBtb2RlLCBmYiwKKwlwaXBlX2NvbmZpZyA9IGlu dGVsX21vZGVzZXRfY29tcHV0ZV9jb25maWcoY3J0YywgbW9kZSwgZmIsIHN0YXRlLAogCQkJCQkJ ICAgJm1vZGVzZXRfcGlwZXMsCiAJCQkJCQkgICAmcHJlcGFyZV9waXBlcywKIAkJCQkJCSAgICZk aXNhYmxlX3BpcGVzKTsKIAotCWlmIChJU19FUlIocGlwZV9jb25maWcpKQotCQlyZXR1cm4gUFRS X0VSUihwaXBlX2NvbmZpZyk7CisJaWYgKElTX0VSUihwaXBlX2NvbmZpZykpIHsKKwkJcmV0ID0g UFRSX0VSUihwaXBlX2NvbmZpZyk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGludGVsX3Nl dF9tb2RlX3BpcGVzKGNydGMsIG1vZGUsIHgsIHksIGZiLCBwaXBlX2NvbmZpZywKKwkJCQkgICBt b2Rlc2V0X3BpcGVzLCBwcmVwYXJlX3BpcGVzLAorCQkJCSAgIGRpc2FibGVfcGlwZXMpOworCWlm IChyZXQpCisJCWdvdG8gb3V0OwogCi0JcmV0dXJuIGludGVsX3NldF9tb2RlX3BpcGVzKGNydGMs IG1vZGUsIHgsIHksIGZiLCBwaXBlX2NvbmZpZywKLQkJCQkgICAgbW9kZXNldF9waXBlcywgcHJl cGFyZV9waXBlcywKLQkJCQkgICAgZGlzYWJsZV9waXBlcyk7CitvdXQ6CisJZHJtX2F0b21pY19z dGF0ZV9mcmVlKHN0YXRlKTsKKwlyZXR1cm4gcmV0OwogfQogCiB2b2lkIGludGVsX2NydGNfcmVz dG9yZV9tb2RlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKQEAgLTExNjIyLDYgKzExNjc4LDcgQEAg c3RhdGljIGludCBpbnRlbF9jcnRjX3NldF9jb25maWcoc3RydWN0IGRybV9tb2RlX3NldCAqc2V0 KQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CiAJc3RydWN0IGRybV9tb2RlX3NldCBzYXZl X3NldDsKKwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUgPSBOVUxMOwogCXN0cnVjdCBp bnRlbF9zZXRfY29uZmlnICpjb25maWc7CiAJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVf Y29uZmlnOwogCXVuc2lnbmVkIG1vZGVzZXRfcGlwZXMsIHByZXBhcmVfcGlwZXMsIGRpc2FibGVf cGlwZXM7CkBAIC0xMTY2NiwxMiArMTE3MjMsMjAgQEAgc3RhdGljIGludCBpbnRlbF9jcnRjX3Nl dF9jb25maWcoc3RydWN0IGRybV9tb2RlX3NldCAqc2V0KQogCSAqIHN1Y2ggY2FzZXMuICovCiAJ aW50ZWxfc2V0X2NvbmZpZ19jb21wdXRlX21vZGVfY2hhbmdlcyhzZXQsIGNvbmZpZyk7CiAKKwlz dGF0ZSA9IGRybV9hdG9taWNfc3RhdGVfYWxsb2MoZGV2KTsKKwlpZiAoIXN0YXRlKSB7CisJCXJl dCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2NvbmZpZzsKKwl9CisKKwlzdGF0ZS0+YWNxdWlyZV9j dHggPSBkZXYtPm1vZGVfY29uZmlnLmFjcXVpcmVfY3R4OworCiAJcmV0ID0gaW50ZWxfbW9kZXNl dF9zdGFnZV9vdXRwdXRfc3RhdGUoZGV2LCBzZXQsIGNvbmZpZyk7CiAJaWYgKHJldCkKIAkJZ290 byBmYWlsOwogCiAJcGlwZV9jb25maWcgPSBpbnRlbF9tb2Rlc2V0X2NvbXB1dGVfY29uZmlnKHNl dC0+Y3J0Yywgc2V0LT5tb2RlLAotCQkJCQkJICAgc2V0LT5mYiwKKwkJCQkJCSAgIHNldC0+ZmIs IHN0YXRlLAogCQkJCQkJICAgJm1vZGVzZXRfcGlwZXMsCiAJCQkJCQkgICAmcHJlcGFyZV9waXBl cywKIAkJCQkJCSAgICZkaXNhYmxlX3BpcGVzKTsKQEAgLTExNjkxLDEwICsxMTc1Niw2IEBAIHN0 YXRpYyBpbnQgaW50ZWxfY3J0Y19zZXRfY29uZmlnKHN0cnVjdCBkcm1fbW9kZV9zZXQgKnNldCkK IAkJICovCiAJfQogCi0JLyogc2V0X21vZGUgd2lsbCBmcmVlIGl0IGluIHRoZSBtb2RlX2NoYW5n ZWQgY2FzZSAqLwotCWlmICghY29uZmlnLT5tb2RlX2NoYW5nZWQpCi0JCWtmcmVlKHBpcGVfY29u ZmlnKTsKLQogCWludGVsX3VwZGF0ZV9waXBlX3NpemUodG9faW50ZWxfY3J0YyhzZXQtPmNydGMp KTsKIAogCWlmIChjb25maWctPm1vZGVfY2hhbmdlZCkgewpAQCAtMTE3NTcsNiArMTE4MTgsOSBA QCBmYWlsOgogCX0KIAogb3V0X2NvbmZpZzoKKwlpZiAoc3RhdGUpCisJCWRybV9hdG9taWNfc3Rh dGVfZnJlZShzdGF0ZSk7CisKIAlpbnRlbF9zZXRfY29uZmlnX2ZyZWUoY29uZmlnKTsKIAlyZXR1 cm4gcmV0OwogfQotLSAKMi4xLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aW50ZWwtZ2Z4Cg==