From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v8 10/19] drm/i915/dsc: Compute Rate Control parameters for DSC Date: Tue, 6 Nov 2018 19:00:50 +0200 Message-ID: <20181106170050.GC9144@intel.com> References: <20181102213138.301-1-manasi.d.navare@intel.com> <20181102213138.301-11-manasi.d.navare@intel.com> <20181106143338.GV9144@intel.com> <20181106165240.GC18274@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20181106165240.GC18274@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Manasi Navare Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBOb3YgMDYsIDIwMTggYXQgMDg6NTI6NDFBTSAtMDgwMCwgTWFuYXNpIE5hdmFyZSB3 cm90ZToKPiBPbiBUdWUsIE5vdiAwNiwgMjAxOCBhdCAwNDozMzozOFBNICswMjAwLCBWaWxsZSBT eXJqw6Rsw6Qgd3JvdGU6Cj4gPiBPbiBGcmksIE5vdiAwMiwgMjAxOCBhdCAwMjozMToyOVBNIC0w NzAwLCBNYW5hc2kgTmF2YXJlIHdyb3RlOgo+ID4gPiBGcm9tOiBHYXVyYXYgSyBTaW5naCA8Z2F1 cmF2Lmsuc2luZ2hAaW50ZWwuY29tPgo+ID4gPiAKPiA+ID4gVGhpcyBjb21wdXRhdGlvbiBvZiBS QyBwYXJhbXMgaGFwcGVucyBpbiB0aGUgYXRvbWljIGNvbW1pdCBwaGFzZQo+ID4gPiBkdXJpbmcg Y29tcHV0ZV9jb25maWcoKSB0byB2YWxpZGF0ZSBpZiBkaXNwbGF5IHN0cmVhbSBjb21wcmVzc2lv bgo+ID4gPiBjYW4gYmUgZW5hYmxlZCBmb3IgdGhlIHJlcXVlc3RlZCBtb2RlLgo+ID4gPiAKPiA+ ID4gdjcgKEZyb20gTWFuYXNpKToKPiA+ID4gKiBVc2UgRFJNX0RFQlVHIGluc3RlYWQgb2YgRFJN X0VSUk9SIChWaWxsZSkKPiA+ID4gKiBVc2UgRXJyb3IgbnVtYmVyaW5zdGVhZCBvZiAtMSAoVmls bGUpCj4gPiA+IHY2IChGcm9tIE1hbmFzaSk6Cj4gPiA+ICogVXNlIDkgaW5zdGVhZCBvZiAweDkg Zm9yIGNvbnNpc3RlbmN5IChBbnVzaGEpCj4gPiA+IAo+ID4gPiB2NSAoRnJvbSBNYW5hc2kpOgo+ ID4gPiAqIEZpeCBkaW0gY2hlY2twYXRjaCB3YXJuaW5ncy9jaGVja3MKPiA+ID4gdjQoRnJvbSBH YXVyYXYpOgo+ID4gPiAqIE5vIGNoYW5nZS5SZWJhc2Ugb24gZHJtLXRpcAo+ID4gPiAKPiA+ID4g djMgKEZyb20gR2F1cmF2KToKPiA+ID4gKiBSZWJhc2Ugb24gdG9wIG9mIE1hbmFzaSdzIGxhdGVz dCBzZXJpZXMKPiA+ID4gKiBSZXR1cm4gLXZlIHZhbHVlIGluIGNhc2Ugb2YgZmFpbHVyZSBzY2Vu YXJpb3MgKE1hbmFzaSkKPiA+ID4gCj4gPiA+IEZpeCByZXZpZXcgY29tbWVudHMgZnJvbSBWaWxs ZToKPiA+ID4gKiBSZW1vdmUgdW5uZWNlc3NhcnkgY29tbWVudHMKPiA+ID4gKiBSZW1vdmUgdW5u ZWNlc3NhcnkgcGFyYW50aGVzaXMKPiA+ID4gKiBBZGQgY29tbWVudHMgZm9yIGZldyBSQyBwYXJh bXMgY2FsY3VsYXRpb25zCj4gPiA+IAo+ID4gPiB2MiAoRnJvbSBNYW5hc2kpOgo+ID4gPiAqIFJl YmFzZSBHYXVyYXYncyBwYXRjaCBmcm9tIGludGVsLWdmeCB0byBnZngtaW50ZXJuYWwKPiA+ID4g KiBVc2Ugc3RydWN0IGRybV9kc2NfY2ZnIGluc3RlYWQgb2Ygc3RydWN0IGludGVsX2RwCj4gPiA+ IGFzIGEgcGFyYW1ldGVyCj4gPiA+IAo+ID4gPiBDYzogTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQu bmF2YXJlQGludGVsLmNvbT4KPiA+ID4gQ2M6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBsaW51 eC5pbnRlbC5jb20+Cj4gPiA+IENjOiBWaWxsZSBTeXJqYWxhIDx2aWxsZS5zeXJqYWxhQGxpbnV4 LmludGVsLmNvbT4KPiA+ID4gU2lnbmVkLW9mZi1ieTogR2F1cmF2IEsgU2luZ2ggPGdhdXJhdi5r LnNpbmdoQGludGVsLmNvbT4KPiA+ID4gU2lnbmVkLW9mZi1ieTogTWFuYXNpIE5hdmFyZSA8bWFu YXNpLmQubmF2YXJlQGludGVsLmNvbT4KPiA+ID4gUmV2aWV3ZWQtYnk6IEFudXNoYSBTcml2YXRz YSA8YW51c2hhLnNyaXZhdHNhQGludGVsLmNvbT4KPiA+ID4gLS0tCj4gPiA+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF92ZHNjLmMgfCAxMjcgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCj4gPiA+ICAxIGZpbGUgY2hhbmdlZCwgMTI3IGluc2VydGlvbnMoKykKPiA+ID4gCj4gPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF92ZHNjLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF92ZHNjLmMKPiA+ID4gaW5kZXggMGExOTE4ZjJmNjQzLi5hNzZm NzhiOWMwZWUgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Zk c2MuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF92ZHNjLmMKPiA+ID4g QEAgLTMxNyw2ICszMTcsMTMwIEBAIHN0YXRpYyBpbnQgZ2V0X2NvbHVtbl9pbmRleF9mb3JfcmNf cGFyYW1zKHU4IGJpdHNfcGVyX2NvbXBvbmVudCkKPiA+ID4gIAl9Cj4gPiA+ICB9Cj4gPiA+ICAK PiA+ID4gK3N0YXRpYyBpbnQgaW50ZWxfY29tcHV0ZV9yY19wYXJhbWV0ZXJzKHN0cnVjdCBkcm1f ZHNjX2NvbmZpZyAqdmRzY19jZmcpCj4gPiA+ICt7Cj4gPiA+ICsJdW5zaWduZWQgbG9uZyBncm91 cHNfcGVyX2xpbmUgPSAwOwo+ID4gPiArCXVuc2lnbmVkIGxvbmcgZ3JvdXBzX3RvdGFsID0gMDsK PiA+ID4gKwl1bnNpZ25lZCBsb25nIG51bV9leHRyYV9tdXhfYml0cyA9IDA7Cj4gPiA+ICsJdW5z aWduZWQgbG9uZyBzbGljZV9iaXRzID0gMDsKPiA+ID4gKwl1bnNpZ25lZCBsb25nIGhyZF9kZWxh eSA9IDA7Cj4gPiA+ICsJdW5zaWduZWQgbG9uZyBmaW5hbF9zY2FsZSA9IDA7Cj4gPiA+ICsJdW5z aWduZWQgbG9uZyByYnNfbWluID0gMDsKPiA+ID4gKwo+ID4gPiArCS8qIE51bWJlciBvZiBncm91 cHMgdXNlZCB0byBjb2RlIGVhY2ggbGluZSBvZiBhIHNsaWNlICovCj4gPiA+ICsJZ3JvdXBzX3Bl cl9saW5lID0gRElWX1JPVU5EX1VQKHZkc2NfY2ZnLT5zbGljZV93aWR0aCwKPiA+ID4gKwkJCQkg ICAgICAgRFNDX1JDX1BJWEVMU19QRVJfR1JPVVApOwo+ID4gPiArCj4gPiA+ICsJLyogY2h1bmtz aXplIGluIEJ5dGVzICovCj4gPiA+ICsJdmRzY19jZmctPnNsaWNlX2NodW5rX3NpemUgPSBESVZf Uk9VTkRfVVAodmRzY19jZmctPnNsaWNlX3dpZHRoICoKPiA+ID4gKwkJCQkJCSAgdmRzY19jZmct PmJpdHNfcGVyX3BpeGVsLAo+ID4gPiArCQkJCQkJICAoOCAqIDE2KSk7Cj4gPiA+ICsKPiA+ID4g KwlpZiAodmRzY19jZmctPmNvbnZlcnRfcmdiKQo+ID4gPiArCQludW1fZXh0cmFfbXV4X2JpdHMg PSAzICogKHZkc2NfY2ZnLT5tdXhfd29yZF9zaXplICsKPiA+ID4gKwkJCQkJICAoNCAqIHZkc2Nf Y2ZnLT5iaXRzX3Blcl9jb21wb25lbnQgKyA0KQo+ID4gPiArCQkJCQkgIC0gMik7Cj4gPiA+ICsJ ZWxzZQo+ID4gPiArCQludW1fZXh0cmFfbXV4X2JpdHMgPSAzICogdmRzY19jZmctPm11eF93b3Jk X3NpemUgKwo+ID4gPiArCQkJKDQgKiB2ZHNjX2NmZy0+Yml0c19wZXJfY29tcG9uZW50ICsgNCkg Kwo+ID4gPiArCQkJMiAqICg0ICogdmRzY19jZmctPmJpdHNfcGVyX2NvbXBvbmVudCkgLSAyOwo+ ID4gPiArCS8qIE51bWJlciBvZiBiaXRzIGluIG9uZSBTbGljZSAqLwo+ID4gPiArCXNsaWNlX2Jp dHMgPSA4ICogdmRzY19jZmctPnNsaWNlX2NodW5rX3NpemUgKiB2ZHNjX2NmZy0+c2xpY2VfaGVp Z2h0Owo+ID4gPiArCj4gPiA+ICsJd2hpbGUgKChudW1fZXh0cmFfbXV4X2JpdHMgPiAwKSAmJgo+ ID4gPiArCSAgICAgICAoKHNsaWNlX2JpdHMgLSBudW1fZXh0cmFfbXV4X2JpdHMpICUgdmRzY19j ZmctPm11eF93b3JkX3NpemUpKQo+ID4gPiArCQludW1fZXh0cmFfbXV4X2JpdHMtLTsKPiA+ID4g Kwo+ID4gPiArCWlmIChncm91cHNfcGVyX2xpbmUgPCB2ZHNjX2NmZy0+aW5pdGlhbF9zY2FsZV92 YWx1ZSAtIDgpCj4gPiA+ICsJCXZkc2NfY2ZnLT5pbml0aWFsX3NjYWxlX3ZhbHVlID0gZ3JvdXBz X3Blcl9saW5lICsgODsKPiA+ID4gKwo+ID4gPiArCS8qIHNjYWxlX2RlY3JlbWVudF9pbnRlcnZh bCBjYWxjdWxhdGlvbiBhY2NvcmRpbmcgdG8gRFNDIHNwZWMgMS4xMSAqLwo+ID4gPiArCWlmICh2 ZHNjX2NmZy0+aW5pdGlhbF9zY2FsZV92YWx1ZSA+IDgpCj4gPiA+ICsJCXZkc2NfY2ZnLT5zY2Fs ZV9kZWNyZW1lbnRfaW50ZXJ2YWwgPSBncm91cHNfcGVyX2xpbmUgLwo+ID4gPiArCQkJKHZkc2Nf Y2ZnLT5pbml0aWFsX3NjYWxlX3ZhbHVlIC0gOCk7Cj4gPiA+ICsJZWxzZQo+ID4gPiArCQl2ZHNj X2NmZy0+c2NhbGVfZGVjcmVtZW50X2ludGVydmFsID0gRFNDX1NDQUxFX0RFQ1JFTUVOVF9JTlRF UlZBTF9NQVg7Cj4gPiA+ICsKPiA+ID4gKwl2ZHNjX2NmZy0+ZmluYWxfb2Zmc2V0ID0gdmRzY19j ZmctPnJjX21vZGVsX3NpemUgLQo+ID4gPiArCQkodmRzY19jZmctPmluaXRpYWxfeG1pdF9kZWxh eSAqCj4gPiA+ICsJCSB2ZHNjX2NmZy0+Yml0c19wZXJfcGl4ZWwgKyA4KSAvIDE2ICsgbnVtX2V4 dHJhX211eF9iaXRzOwo+ID4gPiArCj4gPiA+ICsJaWYgKHZkc2NfY2ZnLT5maW5hbF9vZmZzZXQg Pj0gdmRzY19jZmctPnJjX21vZGVsX3NpemUpIHsKPiA+ID4gKwkJRFJNX0RFQlVHX0tNUygiRmlu YWxPZnMgPCBSY01vZGVsU3plIGZvciB0aGlzIEluaXRpYWxYbWl0RGVsYXlcbiIpOwo+ID4gPiAr CQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlmaW5hbF9zY2FsZSA9 ICh2ZHNjX2NmZy0+cmNfbW9kZWxfc2l6ZSAqIDgpIC8KPiA+ID4gKwkJKHZkc2NfY2ZnLT5yY19t b2RlbF9zaXplIC0gdmRzY19jZmctPmZpbmFsX29mZnNldCk7Cj4gPiA+ICsJaWYgKHZkc2NfY2Zn LT5zbGljZV9oZWlnaHQgPiAxKQo+ID4gPiArCQkvKgo+ID4gPiArCQkgKiBOZmxCcGdPZmZzZXQg aXMgMTYgYml0IHZhbHVlIHdpdGggMTEgZnJhY3Rpb25hbCBiaXRzCj4gPiA+ICsJCSAqIGhlbmNl IHdlIG11bHRpcGx5IGJ5IDJeMTEgZm9yIHByZXNlcnZpbmcgdGhlCj4gPiA+ICsJCSAqIGZyYWN0 aW9uYWwgcGFydAo+ID4gPiArCQkgKi8KPiA+ID4gKwkJdmRzY19jZmctPm5mbF9icGdfb2Zmc2V0 ID0gRElWX1JPVU5EX1VQKCh2ZHNjX2NmZy0+Zmlyc3RfbGluZV9icGdfb2Zmc2V0IDw8IDExKSwK PiA+ID4gKwkJCQkJCQkodmRzY19jZmctPnNsaWNlX2hlaWdodCAtIDEpKTsKPiA+ID4gKwllbHNl Cj4gPiA+ICsJCXZkc2NfY2ZnLT5uZmxfYnBnX29mZnNldCA9IDA7Cj4gPiA+ICsKPiA+ID4gKwkv KiAyXjE2IC0gMSAqLwo+ID4gPiArCWlmICh2ZHNjX2NmZy0+bmZsX2JwZ19vZmZzZXQgPiA2NTUz NSkgewo+ID4gPiArCQlEUk1fREVCVUdfS01TKCJOZmxCcGdPZmZzZXQgaXMgdG9vIGxhcmdlIGZv ciB0aGlzIHNsaWNlIGhlaWdodFxuIik7Cj4gPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gPiAr CX0KPiA+ID4gKwo+ID4gPiArCS8qIE51bWJlciBvZiBncm91cHMgdXNlZCB0byBjb2RlIHRoZSBl bnRpcmUgc2xpY2UgKi8KPiA+ID4gKwlncm91cHNfdG90YWwgPSBncm91cHNfcGVyX2xpbmUgKiB2 ZHNjX2NmZy0+c2xpY2VfaGVpZ2h0Owo+ID4gPiArCj4gPiA+ICsJLyogc2xpY2VfYnBnX29mZnNl dCBpcyAxNiBiaXQgdmFsdWUgd2l0aCAxMSBmcmFjdGlvbmFsIGJpdHMgKi8KPiA+ID4gKwl2ZHNj X2NmZy0+c2xpY2VfYnBnX29mZnNldCA9IERJVl9ST1VORF9VUCgoKHZkc2NfY2ZnLT5yY19tb2Rl bF9zaXplIC0KPiA+ID4gKwkJCQkJCSAgICB2ZHNjX2NmZy0+aW5pdGlhbF9vZmZzZXQgKwo+ID4g PiArCQkJCQkJICAgIG51bV9leHRyYV9tdXhfYml0cykgPDwgMTEpLAo+ID4gPiArCQkJCQkJICBn cm91cHNfdG90YWwpOwo+ID4gPiArCj4gPiA+ICsJaWYgKGZpbmFsX3NjYWxlID4gOSkgewo+ID4g PiArCQkvKgo+ID4gPiArCQkgKiBTY2FsZUluY3JlbWVudEludGVydmFsID0KPiA+ID4gKwkJICog ZmluYWxvZmZzZXQvKChOZmxCcGdPZmZzZXQgKyBTbGljZUJwZ09mZnNldCkqOChmaW5hbHNjYWxl IC0gMS4xMjUpKQo+ID4gPiArCQkgKiBhcyAoTmZsQnBnT2Zmc2V0ICsgU2xpY2VCcGdPZmZzZXQp IGhhcyAxMSBiaXQgZnJhY3Rpb25hbCB2YWx1ZSwKPiA+ID4gKwkJICogd2UgbmVlZCBkaXZpZGUg YnkgMl4xMSBmcm9tIHBzdERzY0NmZyB2YWx1ZXMKPiA+ID4gKwkJICovCj4gPiA+ICsJCXZkc2Nf Y2ZnLT5zY2FsZV9pbmNyZW1lbnRfaW50ZXJ2YWwgPQo+ID4gPiArCQkJCSh2ZHNjX2NmZy0+Zmlu YWxfb2Zmc2V0ICogKDEgPDwgMTEpKSAvCj4gPiA+ICsJCQkJKCh2ZHNjX2NmZy0+bmZsX2JwZ19v ZmZzZXQgKwo+ID4gPiArCQkJCXZkc2NfY2ZnLT5zbGljZV9icGdfb2Zmc2V0KSoKPiA+ID4gKwkJ CQkoZmluYWxfc2NhbGUgLSA5KSk7Cj4gPiA+ICsJfSBlbHNlIHsKPiA+ID4gKwkJLyoKPiA+ID4g KwkJICogSWYgZmluYWxTY2FsZVZhbHVlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byA5LCBhIHZh bHVlIG9mIDAgc2hvdWxkCj4gPiA+ICsJCSAqIGJlIHVzZWQgdG8gZGlzYWJsZSB0aGUgc2NhbGUg aW5jcmVtZW50IGF0IHRoZSBlbmQgb2YgdGhlIHNsaWNlCj4gPiA+ICsJCSAqLwo+ID4gPiArCQl2 ZHNjX2NmZy0+c2NhbGVfaW5jcmVtZW50X2ludGVydmFsID0gMDsKPiA+ID4gKwl9Cj4gPiA+ICsK PiA+ID4gKwlpZiAodmRzY19jZmctPnNjYWxlX2luY3JlbWVudF9pbnRlcnZhbCA+IDY1NTM1KSB7 Cj4gPiA+ICsJCURSTV9ERUJVR19LTVMoIlNjYWxlSW5jcmVtZW50SW50ZXJ2YWwgaXMgbGFyZ2Ug Zm9yIHNsaWNlIGhlaWdodFxuIik7Cj4gPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gPiArCX0K PiA+ID4gKwo+ID4gPiArCS8qCj4gPiA+ICsJICogRFNDIHNwZWMgbWVudGlvbnMgdGhhdCBiaXRz X3Blcl9waXhlbCBzcGVjaWZpZXMgdGhlIHRhcmdldAo+ID4gPiArCSAqIGJpdHMvcGl4ZWwgKGJw cCkgcmF0ZSB0aGF0IGlzIHVzZWQgYnkgdGhlIGVuY29kZXIsCj4gPiA+ICsJICogaW4gc3RlcHMg b2YgMS8xNiBvZiBhIGJpdCBwZXIgcGl4ZWwKPiA+ID4gKwkgKi8KPiA+ID4gKwlyYnNfbWluID0g dmRzY19jZmctPnJjX21vZGVsX3NpemUgLSB2ZHNjX2NmZy0+aW5pdGlhbF9vZmZzZXQgKwo+ID4g PiArCQlESVZfUk9VTkRfVVAodmRzY19jZmctPmluaXRpYWxfeG1pdF9kZWxheSAqCj4gPiA+ICsJ CQkgICAgIHZkc2NfY2ZnLT5iaXRzX3Blcl9waXhlbCwgMTYpICsKPiA+ID4gKwkJZ3JvdXBzX3Bl cl9saW5lICogdmRzY19jZmctPmZpcnN0X2xpbmVfYnBnX29mZnNldDsKPiA+ID4gKwo+ID4gPiAr CWhyZF9kZWxheSA9IERJVl9ST1VORF9VUCgocmJzX21pbiAqIDE2KSwgdmRzY19jZmctPmJpdHNf cGVyX3BpeGVsKTsKPiA+ID4gKwl2ZHNjX2NmZy0+cmNfYml0cyA9IChocmRfZGVsYXkgKiB2ZHNj X2NmZy0+Yml0c19wZXJfcGl4ZWwpIC8gMTY7Cj4gPiA+ICsJdmRzY19jZmctPmluaXRpYWxfZGVj X2RlbGF5ID0gaHJkX2RlbGF5IC0gdmRzY19jZmctPmluaXRpYWxfeG1pdF9kZWxheTsKPiA+ID4g Kwo+ID4gPiArCXJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICsKPiA+ID4gIGludCBp bnRlbF9kcF9jb21wdXRlX2RzY19wYXJhbXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiA+ ID4gIAkJCQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCj4gPiA+ICB7Cj4g PiA+IEBAIC00NTEsNSArNTc1LDggQEAgaW50IGludGVsX2RwX2NvbXB1dGVfZHNjX3BhcmFtcyhz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ID4gPiAgCXZkc2NfY2ZnLT5pbml0aWFsX3NjYWxl X3ZhbHVlID0gKHZkc2NfY2ZnLT5yY19tb2RlbF9zaXplIDw8IDMpIC8KPiA+ID4gIAkJKHZkc2Nf Y2ZnLT5yY19tb2RlbF9zaXplIC0gdmRzY19jZmctPmluaXRpYWxfb2Zmc2V0KTsKPiA+ID4gIAo+ ID4gPiArCWlmIChpbnRlbF9jb21wdXRlX3JjX3BhcmFtZXRlcnModmRzY19jZmcpIDwgMCkKPiA+ ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiAKPiA+IE9uZSBzaG91bGQgcHJldHR5IG11Y2ggYWx3 YXlzIHBhc3Mgb24gdGhlIGVycm5vIHJhdGhlciB0aGFuIGludmVudGluZyBhCj4gPiBuZXcgb25l IG9uIHRoZSBzcG90Lgo+IAo+IEJ1dCBjb21wdXRlX3JjX3BhcmFtZXRlcnMoKSBmdW5jdGlvbiBy ZXR1cm5zIEVJTlZBTCBldmVyeXdoZXJlIGZvciBlcnJvciBjYXNlcwoKV2h5IHNob3VsZCBJIGhh dmUgdG8ga25vdyB0aGF0PwoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbApfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK