From mboxrd@z Thu Jan 1 00:00:00 1970 From: ville.syrjala@linux.intel.com Subject: [PATCH 01/14] drm/i915: Store the pipe pixel rate in the crtc state Date: Mon, 19 Dec 2016 19:28:27 +0200 Message-ID: <20161219172840.31842-2-ville.syrjala@linux.intel.com> References: <20161219172840.31842-1-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id CC0B26E394 for ; Mon, 19 Dec 2016 17:28:46 +0000 (UTC) In-Reply-To: <20161219172840.31842-1-ville.syrjala@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: Rodrigo Vivi List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KClJh dGhlciB0aGFuIHJlY29tcHR1aW5nIHRoZSBwaXBlIHBpeGVsIHJhdGUgb24gZGVtYW5kIGV2ZXJ3 aGVyZSwgbGV0J3MKanVzdCBzdGljayB0aGUgcHJlY29tcHV0ZWQgdmFsdWUgaW50byB0aGUgY3J0 YyBzdGF0ZS4KClNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBs aW51eC5pbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5j IHwgMzEgKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZHJ2LmggICAgIHwgIDIgKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Zi Yy5jICAgICB8ICAzICstLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyAgICAgIHwg MTQgKysrKysrKy0tLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgMTQg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlz cGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IDBiMGQ3 ZThiZTYzMC4uMWQ5NzkwNDFjNTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5j CkBAIC03MTc4LDcgKzcxNzgsNyBAQCBzdGF0aWMgYm9vbCBwaXBlX2NvbmZpZ19zdXBwb3J0c19p cHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCSAqCiAJICogU2hvdWxkIG1l YXN1cmUgd2hldGhlciB1c2luZyBhIGxvd2VyIGNkY2xrIHcvbyBJUFMKIAkgKi8KLQlyZXR1cm4g aWxrX3BpcGVfcGl4ZWxfcmF0ZShwaXBlX2NvbmZpZykgPD0KKwlyZXR1cm4gcGlwZV9jb25maWct PnBpeGVsX3JhdGUgPD0KIAkJZGV2X3ByaXYtPm1heF9jZGNsa19mcmVxICogOTUgLyAxMDA7CiB9 CiAKQEAgLTcyMDIsNiArNzIwMiwxOSBAQCBzdGF0aWMgYm9vbCBpbnRlbF9jcnRjX3N1cHBvcnRz X2RvdWJsZV93aWRlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQogCQkoY3J0Yy0+cGlw ZSA9PSBQSVBFX0EgfHwgSVNfSTkxNUcoZGV2X3ByaXYpKTsKIH0KIAorc3RhdGljIHZvaWQgaW50 ZWxfY3J0Y19jb21wdXRlX3BpeGVsX3JhdGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShj cnRjX3N0YXRlLT5iYXNlLmNydGMtPmRldik7CisKKwlpZiAoSEFTX0dNQ0hfRElTUExBWShkZXZf cHJpdikpCisJCS8qIEZJWE1FIGNhbGN1bGF0ZSBwcm9wZXIgcGlwZSBwaXhlbCByYXRlIEdNQ0gg cGZpdCAqLworCQljcnRjX3N0YXRlLT5waXhlbF9yYXRlID0KKwkJCWNydGNfc3RhdGUtPmJhc2Uu YWRqdXN0ZWRfbW9kZS5jcnRjX2Nsb2NrOworCWVsc2UKKwkJY3J0Y19zdGF0ZS0+cGl4ZWxfcmF0 ZSA9CisJCQlpbGtfcGlwZV9waXhlbF9yYXRlKGNydGNfc3RhdGUpOworfQorCiBzdGF0aWMgaW50 IGludGVsX2NydGNfY29tcHV0ZV9jb25maWcoc3RydWN0IGludGVsX2NydGMgKmNydGMsCiAJCQkJ ICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCiB7CkBAIC03MjQ4LDYg KzcyNjEsOCBAQCBzdGF0aWMgaW50IGludGVsX2NydGNfY29tcHV0ZV9jb25maWcoc3RydWN0IGlu dGVsX2NydGMgKmNydGMsCiAJCWFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQgPT0gYWRq dXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpbnRlbF9j cnRjX2NvbXB1dGVfcGl4ZWxfcmF0ZShwaXBlX2NvbmZpZyk7CisKIAlpZiAoSEFTX0lQUyhkZXZf cHJpdikpCiAJCWhzd19jb21wdXRlX2lwc19jb25maWcoY3J0YywgcGlwZV9jb25maWcpOwogCkBA IC0xMDI5Nyw3ICsxMDMxMiw3IEBAIHN0YXRpYyBpbnQgaWxrX21heF9waXhlbF9yYXRlKHN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJcGl4ZWxf cmF0ZSA9IGlsa19waXBlX3BpeGVsX3JhdGUoY3J0Y19zdGF0ZSk7CisJCXBpeGVsX3JhdGUgPSBj cnRjX3N0YXRlLT5waXhlbF9yYXRlOwogCiAJCWlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYpIHx8 IElTX0dFTjkoZGV2X3ByaXYpKQogCQkJcGl4ZWxfcmF0ZSA9IGJkd19hZGp1c3RfbWluX3BpcGVf cGl4ZWxfcmF0ZShjcnRjX3N0YXRlLApAQCAtMTI4MDIsOSArMTI4MTcsMTAgQEAgc3RhdGljIHZv aWQgaW50ZWxfZHVtcF9waXBlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKIAlEUk1f REVCVUdfS01TKCJhZGp1c3RlZCBtb2RlOlxuIik7CiAJZHJtX21vZGVfZGVidWdfcHJpbnRtb2Rl bGluZSgmcGlwZV9jb25maWctPmJhc2UuYWRqdXN0ZWRfbW9kZSk7CiAJaW50ZWxfZHVtcF9jcnRj X3RpbWluZ3MoJnBpcGVfY29uZmlnLT5iYXNlLmFkanVzdGVkX21vZGUpOwotCURSTV9ERUJVR19L TVMoInBvcnQgY2xvY2s6ICVkLCBwaXBlIHNyYyBzaXplOiAlZHglZFxuIiwKKwlEUk1fREVCVUdf S01TKCJwb3J0IGNsb2NrOiAlZCwgcGlwZSBzcmMgc2l6ZTogJWR4JWQsIHBpeGVsIHJhdGUgJWRc biIsCiAJCSAgICAgIHBpcGVfY29uZmlnLT5wb3J0X2Nsb2NrLAotCQkgICAgICBwaXBlX2NvbmZp Zy0+cGlwZV9zcmNfdywgcGlwZV9jb25maWctPnBpcGVfc3JjX2gpOworCQkgICAgICBwaXBlX2Nv bmZpZy0+cGlwZV9zcmNfdywgcGlwZV9jb25maWctPnBpcGVfc3JjX2gsCisJCSAgICAgIHBpcGVf Y29uZmlnLT5waXhlbF9yYXRlKTsKIAogCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCiAJ CURSTV9ERUJVR19LTVMoIm51bV9zY2FsZXJzOiAlZCwgc2NhbGVyX3VzZXJzOiAweCV4LCBzY2Fs ZXJfaWQ6ICVkXG4iLApAQCAtMTM0MDksNiArMTM0MjUsNyBAQCBpbnRlbF9waXBlX2NvbmZpZ19j b21wYXJlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJfQogCiAJCVBJUEVf Q09ORl9DSEVDS19JKHNjYWxlcl9zdGF0ZS5zY2FsZXJfaWQpOworCQlQSVBFX0NPTkZfQ0hFQ0tf Q0xPQ0tfRlVaWlkocGl4ZWxfcmF0ZSk7CiAJfQogCiAJLyogQkRXKyBkb24ndCBleHBvc2UgYSBz eW5jaHJvbm91cyB3YXkgdG8gcmVhZCB0aGUgc3RhdGUgKi8KQEAgLTEzNzAwLDYgKzEzNzE3LDgg QEAgdmVyaWZ5X2NydGNfc3RhdGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQl9CiAJfQogCisJ aW50ZWxfY3J0Y19jb21wdXRlX3BpeGVsX3JhdGUocGlwZV9jb25maWcpOworCiAJaWYgKCFuZXdf Y3J0Y19zdGF0ZS0+YWN0aXZlKQogCQlyZXR1cm47CiAKQEAgLTE2OTE5LDcgKzE2OTM4LDcgQEAg c3RhdGljIHZvaWQgaW50ZWxfbW9kZXNldF9yZWFkb3V0X2h3X3N0YXRlKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCiAJCQlkZXZfcHJpdi0+YWN0aXZlX2NydGNzIHw9IDEgPDwgY3J0Yy0+cGlwZTsK IAogCQkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSB8fCBJU19CUk9BRFdFTEwoZGV2X3By aXYpKQotCQkJCXBpeGNsayA9IGlsa19waXBlX3BpeGVsX3JhdGUoY3J0Y19zdGF0ZSk7CisJCQkJ cGl4Y2xrID0gY3J0Y19zdGF0ZS0+cGl4ZWxfcmF0ZTsKIAkJCWVsc2UgaWYgKElTX1ZBTExFWVZJ RVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQogCQkJCXBpeGNsayA9IGNy dGNfc3RhdGUtPmJhc2UuYWRqdXN0ZWRfbW9kZS5jcnRjX2Nsb2NrOwogCQkJZWxzZQpAQCAtMTcw MzEsNiArMTcwNTAsOCBAQCBzdGF0aWMgdm9pZCBpbnRlbF9tb2Rlc2V0X3JlYWRvdXRfaHdfc3Rh dGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAkJCSAqLwogCQkJY3J0Yy0+YmFzZS5zdGF0ZS0+ bW9kZS5wcml2YXRlX2ZsYWdzID0gSTkxNV9NT0RFX0ZMQUdfSU5IRVJJVEVEOwogCisJCQlpbnRl bF9jcnRjX2NvbXB1dGVfcGl4ZWxfcmF0ZShjcnRjLT5jb25maWcpOworCiAJCQlkcm1fY2FsY190 aW1lc3RhbXBpbmdfY29uc3RhbnRzKCZjcnRjLT5iYXNlLCAmY3J0Yy0+YmFzZS5od21vZGUpOwog CQkJdXBkYXRlX3NjYW5saW5lX29mZnNldChjcnRjKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cnYuaAppbmRleCBmNjFlYTQzYzc1MzIuLjM5NjllNzg2ZDU2NiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZHJ2LmgKQEAgLTU0MSw2ICs1NDEsOCBAQCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSB7CiAJ ICogYW5kIGdldCBjbGlwcGVkIGF0IHRoZSBlZGdlcy4gKi8KIAlpbnQgcGlwZV9zcmNfdywgcGlw ZV9zcmNfaDsKIAorCXVuc2lnbmVkIGludCBwaXhlbF9yYXRlOworCiAJLyogV2hldGhlciB0byBz ZXQgdXAgdGhlIFBDSC9GREkuIE5vdGUgdGhhdCB3ZSBuZXZlciBhbGxvdyBzaGFyaW5nCiAJICog YmV0d2VlbiBwY2ggZW5jb2RlcnMgYW5kIGNwdSBlbmNvZGVycy4gKi8KIAlib29sIGhhc19wY2hf ZW5jb2RlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiYy5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJjLmMKaW5kZXggNjU5Y2ViYzNiZmQyLi40NjMw NTZkODBmOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiYy5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiYy5jCkBAIC03NDcsOCArNzQ3LDcgQEAg c3RhdGljIHZvaWQgaW50ZWxfZmJjX3VwZGF0ZV9zdGF0ZV9jYWNoZShzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YywKIAogCWNhY2hlLT5jcnRjLm1vZGVfZmxhZ3MgPSBjcnRjX3N0YXRlLT5iYXNlLmFk anVzdGVkX21vZGUuZmxhZ3M7CiAJaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpIHx8IElTX0JST0FE V0VMTChkZXZfcHJpdikpCi0JCWNhY2hlLT5jcnRjLmhzd19iZHdfcGl4ZWxfcmF0ZSA9Ci0JCQlp bGtfcGlwZV9waXhlbF9yYXRlKGNydGNfc3RhdGUpOworCQljYWNoZS0+Y3J0Yy5oc3dfYmR3X3Bp eGVsX3JhdGUgPSBjcnRjX3N0YXRlLT5waXhlbF9yYXRlOwogCiAJY2FjaGUtPnBsYW5lLnJvdGF0 aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247CiAJY2FjaGUtPnBsYW5lLnNyY193ID0g ZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT5iYXNlLnNyYykgPj4gMTY7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfcG0uYwppbmRleCA3Y2JkNjE4MWE2MTIuLjc5ZTJiZTQyMTZlNCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9wbS5jCkBAIC0xODA3LDEyICsxODA3LDEyIEBAIHN0YXRpYyB1aW50MzJfdCBpbGtf Y29tcHV0ZV9wcmlfd20oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKIAog CWNwcCA9IHBzdGF0ZS0+YmFzZS5mYi0+Zm9ybWF0LT5jcHBbMF07CiAKLQltZXRob2QxID0gaWxr X3dtX21ldGhvZDEoaWxrX3BpcGVfcGl4ZWxfcmF0ZShjc3RhdGUpLCBjcHAsIG1lbV92YWx1ZSk7 CisJbWV0aG9kMSA9IGlsa193bV9tZXRob2QxKGNzdGF0ZS0+cGl4ZWxfcmF0ZSwgY3BwLCBtZW1f dmFsdWUpOwogCiAJaWYgKCFpc19scCkKIAkJcmV0dXJuIG1ldGhvZDE7CiAKLQltZXRob2QyID0g aWxrX3dtX21ldGhvZDIoaWxrX3BpcGVfcGl4ZWxfcmF0ZShjc3RhdGUpLAorCW1ldGhvZDIgPSBp bGtfd21fbWV0aG9kMihjc3RhdGUtPnBpeGVsX3JhdGUsCiAJCQkJIGNzdGF0ZS0+YmFzZS5hZGp1 c3RlZF9tb2RlLmNydGNfaHRvdGFsLAogCQkJCSBkcm1fcmVjdF93aWR0aCgmcHN0YXRlLT5iYXNl LmRzdCksCiAJCQkJIGNwcCwgbWVtX3ZhbHVlKTsKQEAgLTE4MzYsOCArMTgzNiw4IEBAIHN0YXRp YyB1aW50MzJfdCBpbGtfY29tcHV0ZV9zcHJfd20oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNzdGF0ZSwKIAogCWNwcCA9IHBzdGF0ZS0+YmFzZS5mYi0+Zm9ybWF0LT5jcHBbMF07CiAK LQltZXRob2QxID0gaWxrX3dtX21ldGhvZDEoaWxrX3BpcGVfcGl4ZWxfcmF0ZShjc3RhdGUpLCBj cHAsIG1lbV92YWx1ZSk7Ci0JbWV0aG9kMiA9IGlsa193bV9tZXRob2QyKGlsa19waXBlX3BpeGVs X3JhdGUoY3N0YXRlKSwKKwltZXRob2QxID0gaWxrX3dtX21ldGhvZDEoY3N0YXRlLT5waXhlbF9y YXRlLCBjcHAsIG1lbV92YWx1ZSk7CisJbWV0aG9kMiA9IGlsa193bV9tZXRob2QyKGNzdGF0ZS0+ cGl4ZWxfcmF0ZSwKIAkJCQkgY3N0YXRlLT5iYXNlLmFkanVzdGVkX21vZGUuY3J0Y19odG90YWws CiAJCQkJIGRybV9yZWN0X3dpZHRoKCZwc3RhdGUtPmJhc2UuZHN0KSwKIAkJCQkgY3BwLCBtZW1f dmFsdWUpOwpAQCAtMTg2Myw3ICsxODYzLDcgQEAgc3RhdGljIHVpbnQzMl90IGlsa19jb21wdXRl X2N1cl93bShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAogCWlmICghY3N0 YXRlLT5iYXNlLmFjdGl2ZSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gaWxrX3dtX21ldGhvZDIo aWxrX3BpcGVfcGl4ZWxfcmF0ZShjc3RhdGUpLAorCXJldHVybiBpbGtfd21fbWV0aG9kMihjc3Rh dGUtPnBpeGVsX3JhdGUsCiAJCQkgICAgICBjc3RhdGUtPmJhc2UuYWRqdXN0ZWRfbW9kZS5jcnRj X2h0b3RhbCwKIAkJCSAgICAgIHdpZHRoLCBjcHAsIG1lbV92YWx1ZSk7CiB9CkBAIC0zNTQ3LDcg KzM1NDcsNyBAQCBzdGF0aWMgdWludDMyX3Qgc2tsX2FkanVzdGVkX3BsYW5lX3BpeGVsX3JhdGUo Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdAogCSAqIEFkanVzdGVkIHBsYW5lIHBp eGVsIHJhdGUgaXMganVzdCB0aGUgcGlwZSdzIGFkanVzdGVkIHBpeGVsIHJhdGUKIAkgKiB3aXRo IGFkZGl0aW9uYWwgYWRqdXN0bWVudHMgZm9yIHBsYW5lLXNwZWNpZmljIHNjYWxpbmcuCiAJICov Ci0JYWRqdXN0ZWRfcGl4ZWxfcmF0ZSA9IGlsa19waXBlX3BpeGVsX3JhdGUoY3N0YXRlKTsKKwlh ZGp1c3RlZF9waXhlbF9yYXRlID0gY3N0YXRlLT5waXhlbF9yYXRlOwogCWRvd25zY2FsZV9hbW91 bnQgPSBza2xfcGxhbmVfZG93bnNjYWxlX2Ftb3VudChwc3RhdGUpOwogCiAJcGl4ZWxfcmF0ZSA9 IGFkanVzdGVkX3BpeGVsX3JhdGUgKiBkb3duc2NhbGVfYW1vdW50ID4+IDE2OwpAQCAtMzc3NSw3 ICszNzc1LDcgQEAgc2tsX2NvbXB1dGVfbGluZXRpbWVfd20oc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNzdGF0ZSkKIAlpZiAoIWNzdGF0ZS0+YmFzZS5hY3RpdmUpCiAJCXJldHVybiAwOwogCi0J cGl4ZWxfcmF0ZSA9IGlsa19waXBlX3BpeGVsX3JhdGUoY3N0YXRlKTsKKwlwaXhlbF9yYXRlID0g Y3N0YXRlLT5waXhlbF9yYXRlOwogCiAJaWYgKFdBUk5fT04ocGl4ZWxfcmF0ZSA9PSAwKSkKIAkJ cmV0dXJuIDA7Ci0tIAoyLjEwLjIKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeAo=