From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 1/3] drm/i915: Fix command parser to validate multiple register access with the same command. Date: Mon, 15 Jun 2015 12:35:59 +0200 Message-ID: <20150615103559.GX8341@phenom.ffwll.local> References: <1432907055-8268-1-git-send-email-currojerez@riseup.net> <000901d09d17$99c5f380$cd51da80$@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wg0-f52.google.com (mail-wg0-f52.google.com [74.125.82.52]) by gabe.freedesktop.org (Postfix) with ESMTP id B58F26E72C for ; Mon, 15 Jun 2015 03:33:14 -0700 (PDT) Received: by wgez8 with SMTP id z8so65143071wge.0 for ; Mon, 15 Jun 2015 03:33:14 -0700 (PDT) Content-Disposition: inline In-Reply-To: <000901d09d17$99c5f380$cd51da80$@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: Zhigang Gong Cc: 'Brad Volkin' , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBKdW4gMDIsIDIwMTUgYXQgMDU6MzY6MjZQTSArMDgwMCwgWmhpZ2FuZyBHb25nIHdy b3RlOgo+IFRoZSBwYXRjaHNldCBMR1RNIGFuZCB3b3JrcyB3ZWxsIHdpdGggYmVpZ25ldC4gVGhl IDgwJSsgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiBpc3N1ZSBpbiBkYXJrdGFibGUgYWxzbyBoYXMg YmVlbiBmaXhlZAo+IGFmdGVyIHRoaXMgcGF0Y2hzZXQgYXBwbGllZCBhbmQgZW5hYmxlIHRoZSBh dG9taWMgaW4gTDMgYXQgYmVpZ25ldCBzaWRlLiBTbywKPiAKPiBSZXZpZXdlZC1ieTogWmhpZ2Fu ZyBHb25nIDx6aGlnYW5nLmdvbmdAbGludXguaW50ZWwuY29tPgoKQWxsIHRocmVlIG1lcmdlZC4g QXNpZGU6IERvbnQgd2UgbmVlZCBhbiBpbmNyZW1lbnQgZm9yIHRoZSBjbWQgcGFyc2VyCnZlcnNp b24gZm9yIHVzZXJzcGFjZSB0byBiZSBhYmxlIHRvIGRldGVjdCB0aGlzPwoKQW5kIHBsZWFzZSBm b2xsb3cgdXAgd2l0aCBhIGxpbmsgdG8gdGhlIGJlaWduZXQgcGF0Y2hlcyB1c2VkIHRvIHZhbGlk YXRlCnRoZXNlIGtlcm5lbCBwYXRjaGVzIGZvciByZWZlcmVuY2VzLgoKVGhhbmtzLCBEYW5pZWwK Cj4gCj4gVGhhbmtzLAo+IFpoaWdhbmcgR29uZy4KPiAKPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2Fn ZS0tLS0tCj4gPiBGcm9tOiBGcmFuY2lzY28gSmVyZXogW21haWx0bzpjdXJyb2plcmV6QHJpc2V1 cC5uZXRdCj4gPiBTZW50OiBGcmlkYXksIE1heSAyOSwgMjAxNSA5OjQ0IFBNCj4gPiBUbzogaW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gQ2M6IFZpbGxlIFN5cmrDpGzDpDsgWmhp Z2FuZyBHb25nOyBCcmFkIFZvbGtpbgo+ID4gU3ViamVjdDogW1BBVENIIDEvM10gZHJtL2k5MTU6 IEZpeCBjb21tYW5kIHBhcnNlciB0byB2YWxpZGF0ZSBtdWx0aXBsZQo+ID4gcmVnaXN0ZXIgYWNj ZXNzIHdpdGggdGhlIHNhbWUgY29tbWFuZC4KPiA+IAo+ID4gVW50aWwgbm93IHRoZSBzb2Z0d2Fy ZSBjb21tYW5kIGNoZWNrZXIgYXNzdW1lZCB0aGF0IGNvbW1hbmRzIGNvdWxkIHJlYWQKPiA+IG9y IHdyaXRlIGF0IG1vc3QgYSBzaW5nbGUgcmVnaXN0ZXIgcGVyIHBhY2tldC4gIFRoaXMgaXMgbm90 IG5lY2Vzc2FyaWx5IHRoZSBjYXNlLAo+ID4gTUlfTE9BRF9SRUdJU1RFUl9JTU0gZXhwZWN0cyBh IHZhcmlhYmxlLWxlbmd0aCBsaXN0IG9mIG9mZnNldC92YWx1ZSBwYWlycwo+ID4gYW5kIHdyaXRl cyB0aGVtIGluIHNlcXVlbmNlLiAgVGhlIHByZXZpb3VzIGNvZGUgd291bGQgb25seSBjaGVjayB3 aGV0aGVyCj4gPiB0aGUgZmlyc3QgZW50cnkgd2FzIHZhbGlkLCBlZmZlY3RpdmVseSBhbGxvd2lu ZyB1c2Vyc3BhY2UgdG8gd3JpdGUgdW5yZXN0cmljdGVkCj4gPiByZWdpc3RlcnMgb2YgdGhlIE1N SU8gc3BhY2UgYnkgc2VuZGluZyBhIG11bHRpLXJlZ2lzdGVyIHdyaXRlIHdpdGggYSBsZWdhbCBm aXJzdAo+ID4gcmVnaXN0ZXIsIHdpdGggcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBv biBHZW42IGFuZCA3IGhhcmR3YXJlLgo+ID4gCj4gPiBGaXggaXQgYnkgZXh0ZW5kaW5nIHRoZSBk cm1faTkxNV9jbWRfZGVzY3JpcHRvciB0YWJsZSB0byByZXByZXNlbnQKPiA+IG11bHRpLXJlZ2lz dGVyIGFjY2VzcyBhbmQgbWFraW5nIHZhbGlkYXRlX2NtZCgpIGl0ZXJhdGUgZm9yIGFsbCByZWdp c3RlciBvZmZzZXRzCj4gPiBwcmVzZW50IGluIHRoZSBjb21tYW5kIHBhY2tldC4KPiA+IAo+ID4g U2lnbmVkLW9mZi1ieTogRnJhbmNpc2NvIEplcmV6IDxjdXJyb2plcmV6QHJpc2V1cC5uZXQ+Cj4g PiAtLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2NtZF9wYXJzZXIuYyB8IDc0Cj4g PiArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCj4gPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaCAgICAgICAgfCAgNSArKysKPiA+ICAyIGZpbGVzIGNoYW5nZWQsIDQ4 IGluc2VydGlvbnMoKyksIDMxIGRlbGV0aW9ucygtKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRfcGFyc2VyLmMKPiA+IGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9jbWRfcGFyc2VyLmMKPiA+IGluZGV4IDYxYWU4ZmYuLmM0YTVmNzMgMTAwNjQ0 Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2NtZF9wYXJzZXIuYwo+ID4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRfcGFyc2VyLmMKPiA+IEBAIC0xMjMsNyAr MTIzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9jbWRfZGVzY3JpcHRvcgo+ID4g Y29tbW9uX2NtZHNbXSA9IHsKPiA+ICAJQ01EKCAgTUlfU0VNQVBIT1JFX01CT1gsICAgICAgICAg ICAgICAgIFNNSSwgICAhRiwgIDB4RkYsCj4gPiBSICApLAo+ID4gIAlDTUQoICBNSV9TVE9SRV9E V09SRF9JTkRFWCwgICAgICAgICAgICAgU01JLCAgICFGLCAgMHhGRiwKPiA+IFIgICksCj4gPiAg CUNNRCggIE1JX0xPQURfUkVHSVNURVJfSU1NKDEpLCAgICAgICAgICBTTUksICAgIUYsICAweEZG LAo+ID4gVywKPiA+IC0JICAgICAgLnJlZyA9IHsgLm9mZnNldCA9IDEsIC5tYXNrID0gMHgwMDdG RkZGQyB9ICAgICAgICAgICAgICAgKSwKPiA+ICsJICAgICAgLnJlZyA9IHsgLm9mZnNldCA9IDEs IC5tYXNrID0gMHgwMDdGRkZGQywgLnN0ZXAgPSAyIH0gICAgKSwKPiA+ICAJQ01EKCAgTUlfU1RP UkVfUkVHSVNURVJfTUVNKDEpLCAgICAgICAgIFNNSSwgICAhRiwgIDB4RkYsCj4gPiBXIHwgQiwK PiA+ICAJICAgICAgLnJlZyA9IHsgLm9mZnNldCA9IDEsIC5tYXNrID0gMHgwMDdGRkZGQyB9LAo+ ID4gIAkgICAgICAuYml0cyA9IHt7Cj4gPiBAQCAtOTM5LDcgKzkzOSw3IEBAIGJvb2wgaTkxNV9u ZWVkc19jbWRfcGFyc2VyKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MKPiA+ICpyaW5nKQo+ID4gCj4g PiAgc3RhdGljIGJvb2wgY2hlY2tfY21kKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJp bmcsCj4gPiAgCQkgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfY21kX2Rlc2NyaXB0b3IgKmRl c2MsCj4gPiAtCQkgICAgICBjb25zdCB1MzIgKmNtZCwKPiA+ICsJCSAgICAgIGNvbnN0IHUzMiAq Y21kLCB1MzIgbGVuZ3RoLAo+ID4gIAkJICAgICAgY29uc3QgYm9vbCBpc19tYXN0ZXIsCj4gPiAg CQkgICAgICBib29sICpvYWNvbnRyb2xfc2V0KQo+ID4gIHsKPiA+IEBAIC05NTUsMzggKzk1NSw0 OSBAQCBzdGF0aWMgYm9vbCBjaGVja19jbWQoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcwo+ ID4gKnJpbmcsCj4gPiAgCX0KPiA+IAo+ID4gIAlpZiAoZGVzYy0+ZmxhZ3MgJiBDTURfREVTQ19S RUdJU1RFUikgewo+ID4gLQkJdTMyIHJlZ19hZGRyID0gY21kW2Rlc2MtPnJlZy5vZmZzZXRdICYg ZGVzYy0+cmVnLm1hc2s7Cj4gPiAtCj4gPiAgCQkvKgo+ID4gLQkJICogT0FDT05UUk9MIHJlcXVp cmVzIHNvbWUgc3BlY2lhbCBoYW5kbGluZyBmb3Igd3JpdGVzLiBXZQo+ID4gLQkJICogd2FudCB0 byBtYWtlIHN1cmUgdGhhdCBhbnkgYmF0Y2ggd2hpY2ggZW5hYmxlcyBPQSBhbHNvCj4gPiAtCQkg KiBkaXNhYmxlcyBpdCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgYmF0Y2guIFRoZSBnb2FsIGlzIHRv Cj4gPiAtCQkgKiBwcmV2ZW50IG9uZSBwcm9jZXNzIGZyb20gc25vb3Bpbmcgb24gdGhlIHBlcmYg ZGF0YSBmcm9tCj4gPiAtCQkgKiBhbm90aGVyIHByb2Nlc3MuIFRvIGRvIHRoYXQsIHdlIG5lZWQg dG8gY2hlY2sgdGhlIHZhbHVlCj4gPiAtCQkgKiB0aGF0IHdpbGwgYmUgd3JpdHRlbiB0byB0aGUg cmVnaXN0ZXIuIEhlbmNlLCBsaW1pdAo+ID4gLQkJICogT0FDT05UUk9MIHdyaXRlcyB0byBvbmx5 IE1JX0xPQURfUkVHSVNURVJfSU1NCj4gPiBjb21tYW5kcy4KPiA+ICsJCSAqIEdldCB0aGUgZGlz dGFuY2UgYmV0d2VlbiBpbmRpdmlkdWFsIHJlZ2lzdGVyIG9mZnNldAo+ID4gKwkJICogZmllbGRz IGlmIHRoZSBjb21tYW5kIGNhbiBwZXJmb3JtIG1vcmUgdGhhbiBvbmUKPiA+ICsJCSAqIGFjY2Vz cyBhdCBhIHRpbWUuCj4gPiAgCQkgKi8KPiA+IC0JCWlmIChyZWdfYWRkciA9PSBPQUNPTlRST0wp IHsKPiA+IC0JCQlpZiAoZGVzYy0+Y21kLnZhbHVlID09IE1JX0xPQURfUkVHSVNURVJfTUVNKSB7 Cj4gPiAtCQkJCURSTV9ERUJVR19EUklWRVIoIkNNRDogUmVqZWN0ZWQgTFJNIHRvCj4gPiBPQUNP TlRST0xcbiIpOwo+ID4gLQkJCQlyZXR1cm4gZmFsc2U7Cj4gPiArCQljb25zdCB1MzIgc3RlcCA9 IGRlc2MtPnJlZy5zdGVwID8gZGVzYy0+cmVnLnN0ZXAgOiBsZW5ndGg7Cj4gPiArCQl1MzIgb2Zm c2V0Owo+ID4gKwo+ID4gKwkJZm9yIChvZmZzZXQgPSBkZXNjLT5yZWcub2Zmc2V0OyBvZmZzZXQg PCBsZW5ndGg7Cj4gPiArCQkgICAgIG9mZnNldCArPSBzdGVwKSB7Cj4gPiArCQkJY29uc3QgdTMy IHJlZ19hZGRyID0gY21kW29mZnNldF0gJiBkZXNjLT5yZWcubWFzazsKPiA+ICsKPiA+ICsJCQkv Kgo+ID4gKwkJCSAqIE9BQ09OVFJPTCByZXF1aXJlcyBzb21lIHNwZWNpYWwgaGFuZGxpbmcgZm9y Cj4gPiArCQkJICogd3JpdGVzLiBXZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IGFueSBiYXRjaCB3 aGljaAo+ID4gKwkJCSAqIGVuYWJsZXMgT0EgYWxzbyBkaXNhYmxlcyBpdCBiZWZvcmUgdGhlIGVu ZCBvZiB0aGUKPiA+ICsJCQkgKiBiYXRjaC4gVGhlIGdvYWwgaXMgdG8gcHJldmVudCBvbmUgcHJv Y2VzcyBmcm9tCj4gPiArCQkJICogc25vb3Bpbmcgb24gdGhlIHBlcmYgZGF0YSBmcm9tIGFub3Ro ZXIgcHJvY2Vzcy4gVG8gZG8KPiA+ICsJCQkgKiB0aGF0LCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSB2 YWx1ZSB0aGF0IHdpbGwgYmUgd3JpdHRlbgo+ID4gKwkJCSAqIHRvIHRoZSByZWdpc3Rlci4gSGVu Y2UsIGxpbWl0IE9BQ09OVFJPTCB3cml0ZXMgdG8KPiA+ICsJCQkgKiBvbmx5IE1JX0xPQURfUkVH SVNURVJfSU1NIGNvbW1hbmRzLgo+ID4gKwkJCSAqLwo+ID4gKwkJCWlmIChyZWdfYWRkciA9PSBP QUNPTlRST0wpIHsKPiA+ICsJCQkJaWYgKGRlc2MtPmNtZC52YWx1ZSA9PSBNSV9MT0FEX1JFR0lT VEVSX01FTSkgewo+ID4gKwkJCQkJRFJNX0RFQlVHX0RSSVZFUigiQ01EOiBSZWplY3RlZCBMUk0g dG8KPiA+IE9BQ09OVFJPTFxuIik7Cj4gPiArCQkJCQlyZXR1cm4gZmFsc2U7Cj4gPiArCQkJCX0K PiA+ICsKPiA+ICsJCQkJaWYgKGRlc2MtPmNtZC52YWx1ZSA9PSBNSV9MT0FEX1JFR0lTVEVSX0lN TSgxKSkKPiA+ICsJCQkJCSpvYWNvbnRyb2xfc2V0ID0gKGNtZFtvZmZzZXQgKyAxXSAhPSAwKTsK PiA+ICAJCQl9Cj4gPiAKPiA+IC0JCQlpZiAoZGVzYy0+Y21kLnZhbHVlID09IE1JX0xPQURfUkVH SVNURVJfSU1NKDEpKQo+ID4gLQkJCQkqb2Fjb250cm9sX3NldCA9IChjbWRbMl0gIT0gMCk7Cj4g PiAtCQl9Cj4gPiAtCj4gPiAtCQlpZiAoIXZhbGlkX3JlZyhyaW5nLT5yZWdfdGFibGUsCj4gPiAt CQkJICAgICAgIHJpbmctPnJlZ19jb3VudCwgcmVnX2FkZHIpKSB7Cj4gPiAtCQkJaWYgKCFpc19t YXN0ZXIgfHwKPiA+IC0JCQkgICAgIXZhbGlkX3JlZyhyaW5nLT5tYXN0ZXJfcmVnX3RhYmxlLAo+ ID4gLQkJCQkgICAgICAgcmluZy0+bWFzdGVyX3JlZ19jb3VudCwKPiA+IC0JCQkJICAgICAgIHJl Z19hZGRyKSkgewo+ID4gLQkJCQlEUk1fREVCVUdfRFJJVkVSKCJDTUQ6IFJlamVjdGVkIHJlZ2lz dGVyIDB4JTA4WCBpbgo+ID4gY29tbWFuZDogMHglMDhYIChyaW5nPSVkKVxuIiwKPiA+IC0JCQkJ CQkgcmVnX2FkZHIsCj4gPiAtCQkJCQkJICpjbWQsCj4gPiAtCQkJCQkJIHJpbmctPmlkKTsKPiA+ IC0JCQkJcmV0dXJuIGZhbHNlOwo+ID4gKwkJCWlmICghdmFsaWRfcmVnKHJpbmctPnJlZ190YWJs ZSwKPiA+ICsJCQkJICAgICAgIHJpbmctPnJlZ19jb3VudCwgcmVnX2FkZHIpKSB7Cj4gPiArCQkJ CWlmICghaXNfbWFzdGVyIHx8Cj4gPiArCQkJCSAgICAhdmFsaWRfcmVnKHJpbmctPm1hc3Rlcl9y ZWdfdGFibGUsCj4gPiArCQkJCQkgICAgICAgcmluZy0+bWFzdGVyX3JlZ19jb3VudCwKPiA+ICsJ CQkJCSAgICAgICByZWdfYWRkcikpIHsKPiA+ICsJCQkJCURSTV9ERUJVR19EUklWRVIoIkNNRDog UmVqZWN0ZWQgcmVnaXN0ZXIKPiA+IDB4JTA4WCBpbiBjb21tYW5kOiAweCUwOFggKHJpbmc9JWQp XG4iLAo+ID4gKwkJCQkJCQkgcmVnX2FkZHIsICpjbWQsCj4gPiArCQkJCQkJCSByaW5nLT5pZCk7 Cj4gPiArCQkJCQlyZXR1cm4gZmFsc2U7Cj4gPiArCQkJCX0KPiA+ICAJCQl9Cj4gPiAgCQl9Cj4g PiAgCX0KPiA+IEBAIC0xMTEwLDcgKzExMjEsOCBAQCBpbnQgaTkxNV9wYXJzZV9jbWRzKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gPiAgCQkJYnJlYWs7Cj4gPiAgCQl9Cj4gPiAKPiA+ IC0JCWlmICghY2hlY2tfY21kKHJpbmcsIGRlc2MsIGNtZCwgaXNfbWFzdGVyLCAmb2Fjb250cm9s X3NldCkpIHsKPiA+ICsJCWlmICghY2hlY2tfY21kKHJpbmcsIGRlc2MsIGNtZCwgbGVuZ3RoLCBp c19tYXN0ZXIsCj4gPiArCQkJICAgICAgICZvYWNvbnRyb2xfc2V0KSkgewo+ID4gIAkJCXJldCA9 IC1FSU5WQUw7Cj4gPiAgCQkJYnJlYWs7Cj4gPiAgCQl9Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmgKPiA+IGluZGV4IDhhZTZmN2YuLjM4NTAyODggMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCj4gPiBAQCAtMjIyOCwxMCArMjIyOCwxNSBAQCBzdHJ1Y3QgZHJtX2k5MTVfY21kX2Rl c2NyaXB0b3Igewo+ID4gIAkgKiBEZXNjcmliZXMgd2hlcmUgdG8gZmluZCBhIHJlZ2lzdGVyIGFk ZHJlc3MgaW4gdGhlIGNvbW1hbmQgdG8gY2hlY2sKPiA+ICAJICogYWdhaW5zdCB0aGUgcmluZydz IHJlZ2lzdGVyIHdoaXRlbGlzdC4gT25seSB2YWxpZCBpZiBmbGFncyBoYXMgdGhlCj4gPiAgCSAq IENNRF9ERVNDX1JFR0lTVEVSIGJpdCBzZXQuCj4gPiArCSAqCj4gPiArCSAqIEEgbm9uLXplcm8g c3RlcCB2YWx1ZSBpbXBsaWVzIHRoYXQgdGhlIGNvbW1hbmQgbWF5IGFjY2VzcyBtdWx0aXBsZQo+ ID4gKwkgKiByZWdpc3RlcnMgaW4gc2VxdWVuY2UgKGUuZy4gTFJJKSwgaW4gdGhhdCBjYXNlIHN0 ZXAgZ2l2ZXMgdGhlCj4gPiArCSAqIGRpc3RhbmNlIGluIGR3b3JkcyBiZXR3ZWVuIGluZGl2aWR1 YWwgb2Zmc2V0IGZpZWxkcy4KPiA+ICAJICovCj4gPiAgCXN0cnVjdCB7Cj4gPiAgCQl1MzIgb2Zm c2V0Owo+ID4gIAkJdTMyIG1hc2s7Cj4gPiArCQl1MzIgc3RlcDsKPiA+ICAJfSByZWc7Cj4gPiAK PiA+ICAjZGVmaW5lIE1BWF9DTURfREVTQ19CSVRNQVNLUyAzCj4gPiAtLQo+ID4gMi4zLjUKPiAK PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IEludGVs LWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0 cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAoKLS0g CkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6 Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4Cg==