From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC 6/8] drm/i915: Routines for inserting OA capture commands in the ringbuffer Date: Mon, 22 Jun 2015 17:55:52 +0200 Message-ID: <20150622155552.GC25769@phenom.ffwll.local> References: <1434966619-3979-1-git-send-email-sourab.gupta@intel.com> <1434966619-3979-7-git-send-email-sourab.gupta@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f169.google.com (mail-wi0-f169.google.com [209.85.212.169]) by gabe.freedesktop.org (Postfix) with ESMTP id 43D5B6E812 for ; Mon, 22 Jun 2015 08:53:05 -0700 (PDT) Received: by wiga1 with SMTP id a1so81125371wig.0 for ; Mon, 22 Jun 2015 08:53:04 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1434966619-3979-7-git-send-email-sourab.gupta@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: sourab.gupta@intel.com Cc: intel-gfx@lists.freedesktop.org, Insoo Woo , Peter Zijlstra , Jabin Wu List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBKdW4gMjIsIDIwMTUgYXQgMDM6MjA6MTdQTSArMDUzMCwgc291cmFiLmd1cHRhQGlu dGVsLmNvbSB3cm90ZToKPiBGcm9tOiBTb3VyYWIgR3VwdGEgPHNvdXJhYi5ndXB0YUBpbnRlbC5j b20+Cj4gCj4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSByb3V0aW5lcyB3aGljaCBpbnNlcnQg Y29tbWFuZHMgZm9yIGNhcHR1cmluZyBPQQo+IHNuYXBzaG90cywgaW50byB0aGUgcmluZ2J1ZmZl ciBmb3IgUkNTIGVuZ2luZS4KPiBUaGUgY29tbWFuZCBNSV9SRVBPUlRfUEVSRl9DT1VOVCBjYW4g YmUgdXNlZCB0byBjYXB0dXJlCXNuYXBzaG90cyBvZiBPQQo+IGNvdW50ZXJzLiBUaGUgcm91dGlu ZXMgaW50cm9kdWNlZCBpbiB0aGlzIHBhdGNoIGNhbiBiZSBjYWxsZWQgdG8gaW5zZXJ0IHRoZXNl Cj4gY29tbWFuZHMgYXQgYXBwcm9wcmlhdGUgcG9pbnRzIGR1cmluZyB3b3JrbG9hZCBzdWJtaXNz aW9uCj4gCj4gU2lnbmVkLW9mZi1ieTogU291cmFiIEd1cHRhIDxzb3VyYWIuZ3VwdGFAaW50ZWwu Y29tPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jICAgICB8ICAxICsK PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgfCAgMyArKwo+ICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X29hX3BlcmYuYyB8IDg2ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKPiAgMyBmaWxlcyBjaGFuZ2VkLCA5MCBpbnNlcnRpb25zKCspCj4gCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2RtYS5jCj4gaW5kZXggMDU1M2YyMC4uZjEyZmVhYSAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kbWEuYwo+IEBAIC04MjEsNiArODIxLDcgQEAgaW50IGk5MTVfZHJpdmVy X2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKPiAgCS8q IE11c3QgYXQgbGVhc3QgYmUgcmVnaXN0ZXJlZCBiZWZvcmUgdHJ5aW5nIHRvIHBpbiBhbnkgY29u dGV4dAo+ICAJICogb3RoZXJ3aXNlIGk5MTVfb2FfY29udGV4dF9waW5fbm90aWZ5KCkgd2lsbCBs b2NrIGFuIHVuLWluaXRpYWxpemVkCj4gIAkgKiBzcGlubG9jaywgdXBzZXR0aW5nIGxvY2tkZXAg Y2hlY2tzICovCj4gKwlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPnByb2ZpbGVfY21kKTsKPiAg CWk5MTVfb2FfcG11X3JlZ2lzdGVyKGRldik7Cj4gIAo+ICAJaW50ZWxfcG1fc2V0dXAoZGV2KTsK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCA1NDUzODQyLi43OThkYTQ5IDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAgLTE5ODIsNiArMTk4Miw4IEBAIHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlIHsKPiAgCQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya19ldmVudF9zdG9wOwo+ ICAJCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRlOwo+ICAJfSBvYV9wbXU7Cj4gKwo+ICsJc3Ry dWN0IGxpc3RfaGVhZCBwcm9maWxlX2NtZDsKCkFkZGluZyBhIGxpc3QgZm9yIGp1c3Qgb25lIGVu dHJ5IChvciBtYXliZSAyLTMpIGlzIGltbyB0b3RhbCBvdmVya2lsbCwgYnV0CndoYXQgaXQgYWNo aWV2ZXMgaXMgbWFraW5nIHRoZSBjb2RlIG11Y2ggaGFyZGVyIHRvIHJlYWQuIFBsZWFzZSByZW1v dmUuCgpBbHNvIHBsZWFzZSBkb24ndCBzcGxpdCB1cCBwYXRjaGVzIGJ5IGZpcnN0IGFkZGluZyBk ZWFkIGNvZGUgd2hpY2ggaXNuJ3QKY2FsbGVkIGFueXdoZXJlIGFuZCB0aGVuIGEgMm5kIHBhdGNo IHdoaWNoIGp1c3QgYWRkcyAxLTIgcGxhY2VzIHRoYXQgY2FsbAp0aGUgbmV3IGZ1bmN0aW9ucy4g VW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGFuZCBwbGFjZSBvZiBhCmZ1bmN0aW9u IGlzIHZlcnkgaW1wb3J0YW50IHRvIGRvIHRoZSByZXZpZXcsIGJ5IHNwbGl0dGluZyB0aGluZ3Mg dXAgbGlrZQp0aGF0IHlvdSBmb3JjZSByZXZpZXdlcnMgdG8gcmVhZCBhaGVhZCBhbmQganVtcCBh cm91bmQgaW4gdGhlIHBhdGNoCnNlcmllcy4gV2hpY2ggaXMgaW5lZmZpY2llbnQuCgpJZiB0aGUg Y29kZSB3b3VsZCBvdGhlcndpc2UgYmUgdG9vIGxhcmdlIGZvciAxIHBhdGNoIChub3QgdGhlIGNh c2UgaGVyZSkKdGhlbiBhIGdvb2QgcHJhY3RpY2UgaXMgdG8gZmlyc3QgaW50cm9kdWNlIHRoZSBz Y2FmZm9sZGluZyBvZiBmdW5jdGlvbgpjYWxscyBhbmQgbGF0ZXIgb24gZmlsbCBvdXQgdGhlIGd1 dHMgb2YgZWFjaC4KLURhbmllbAoKPiAgI2VuZGlmCj4gIAo+ICAJLyogQWJzdHJhY3QgdGhlIHN1 Ym1pc3Npb24gbWVjaGFuaXNtIChsZWdhY3kgcmluZ2J1ZmZlciBvciBleGVjbGlzdHMpIGF3YXkg Ki8KPiBAQCAtMzE2Miw2ICszMTY0LDcgQEAgdm9pZCBpOTE1X29hX2NvbnRleHRfcGluX25vdGlm eShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAkJCQlzdHJ1Y3QgaW50ZWxf Y29udGV4dCAqY29udGV4dCk7Cj4gIHZvaWQgaTkxNV9vYV9jb250ZXh0X3VucGluX25vdGlmeShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAkJCQkgIHN0cnVjdCBpbnRlbF9j b250ZXh0ICpjb250ZXh0KTsKPiArdm9pZCBpOTE1X2luc2VydF9wcm9maWxpbmdfY21kKHN0cnVj dCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLCB1MzIgY3R4X2lkKTsKPiAgI2Vsc2UKPiAgc3Rh dGljIGlubGluZSB2b2lkCj4gIGk5MTVfb2FfY29udGV4dF9waW5fbm90aWZ5KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9vYV9wZXJmLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X29hX3BlcmYuYwo+ IGluZGV4IDVkNjNkYWIuLmIwMjg1MGMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9vYV9wZXJmLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X29hX3Bl cmYuYwo+IEBAIC0yNSw2ICsyNSw3NiBAQCBzdGF0aWMgaW50IGhzd19wZXJmX2Zvcm1hdF9zaXpl c1tdID0gewo+ICAJNjQgICAvKiBDNF9COF9IU1cgKi8KPiAgfTsKPiAgCj4gK3N0cnVjdCBkcm1f aTkxNV9pbnNlcnRfY21kIHsKPiArCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKPiArCXZvaWQgKCpp bnNlcnRfY21kKShzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiwgdTMyIGN0eF9pZCk7 Cj4gK307Cj4gKwo+ICt2b2lkIGk5MTVfaW5zZXJ0X3Byb2ZpbGluZ19jbWQoc3RydWN0IGludGVs X3JpbmdidWZmZXIgKnJpbmdidWYsIHUzMiBjdHhfaWQpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKnJpbmcgPSByaW5nYnVmLT5yaW5nOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gcmluZy0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBkcm1faTkx NV9pbnNlcnRfY21kICplbnRyeTsKPiArCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAm ZGV2X3ByaXYtPnByb2ZpbGVfY21kLCBsaXN0KQo+ICsJCWVudHJ5LT5pbnNlcnRfY21kKHJpbmdi dWYsIGN0eF9pZCk7Cj4gK30KPiArCj4gK3ZvaWQgaTkxNV9vYV9pbnNlcnRfY21kKHN0cnVjdCBp bnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLCB1MzIgY3R4X2lkKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICpyaW5nID0gcmluZ2J1Zi0+cmluZzsKPiArCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHJpbmctPmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfb2FfYXN5bmNfbm9kZV9pbmZvICpub2RlX2luZm8gPSBOVUxMOwo+ICsJc3RydWN0IGRy bV9pOTE1X29hX2FzeW5jX3F1ZXVlX2hlYWRlciAqcXVldWVfaGRyID0KPiArCQkJKHN0cnVjdCBk cm1faTkxNV9vYV9hc3luY19xdWV1ZV9oZWFkZXIgKikKPiArCQkJZGV2X3ByaXYtPm9hX3BtdS5v YV9hc3luY19idWZmZXIuYWRkcjsKPiArCXZvaWQgKmRhdGFfcHRyID0gKHU4ICopcXVldWVfaGRy ICsgcXVldWVfaGRyLT5kYXRhX29mZnNldDsKPiArCWludCBkYXRhX3NpemUgPQkocXVldWVfaGRy LT5zaXplX2luX2J5dGVzIC0gcXVldWVfaGRyLT5kYXRhX29mZnNldCk7Cj4gKwl1MzIgZGF0YV9v ZmZzZXQsIGFkZHIgPSAwOwo+ICsJaW50IHJldDsKPiArCj4gKwlzdHJ1Y3QgZHJtX2k5MTVfb2Ff YXN5bmNfbm9kZSAqbm9kZXMgPSBkYXRhX3B0cjsKPiArCWludCBudW1fbm9kZXMgPSAwOwo+ICsJ aW50IGluZGV4ID0gMDsKPiArCj4gKwkvKiBPQSBjb3VudGVycyBhcmUgb25seSBzdXBwb3J0ZWQg b24gdGhlIHJlbmRlciByaW5nICovCj4gKwlpZiAocmluZy0+aWQgIT0gUkNTKQo+ICsJCXJldHVy bjsKPiArCj4gKwludW1fbm9kZXMgPSBkYXRhX3NpemUgLyBzaXplb2YoKm5vZGVzKTsKPiArCWlu ZGV4ID0gcXVldWVfaGRyLT5ub2RlX2NvdW50ICUgbnVtX25vZGVzOwo+ICsKPiArCWRhdGFfb2Zm c2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGRybV9pOTE1X29hX2FzeW5jX25vZGUsIHJlcG9ydF9wZXJm KTsKPiArCj4gKwlhZGRyID0gaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KGRldl9wcml2LT5vYV9w bXUub2FfYXN5bmNfYnVmZmVyLm9iaikgKwo+ICsJCXF1ZXVlX2hkci0+ZGF0YV9vZmZzZXQgKwo+ ICsJCWluZGV4ICogc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9vYV9hc3luY19ub2RlKSArCj4gKwkJ ZGF0YV9vZmZzZXQ7Cj4gKwo+ICsJLyogYWRkciBzaG91bGQgYmUgNjQgYnl0ZSBhbGlnbmVkICov Cj4gKwlCVUdfT04oYWRkciAmIDB4M2YpOwo+ICsKPiArCXJldCA9IGludGVsX3JpbmdfYmVnaW4o cmluZywgNCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybjsKPiArCj4gKwlpbnRlbF9yaW5nX2Vt aXQocmluZywgTUlfUkVQT1JUX1BFUkZfQ09VTlQgfCAoMTw8MCkpOwo+ICsJaW50ZWxfcmluZ19l bWl0KHJpbmcsIGFkZHIgfCBNSV9SRVBPUlRfUEVSRl9DT1VOVF9HR1RUKTsKPiArCWludGVsX3Jp bmdfZW1pdChyaW5nLCByaW5nLT5vdXRzdGFuZGluZ19sYXp5X3JlcXVlc3QtPnNlcW5vKTsKPiAr CWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9OT09QKTsKPiArCWludGVsX3JpbmdfYWR2YW5jZShy aW5nKTsKPiArCj4gKwlub2RlX2luZm8gPSAmbm9kZXNbaW5kZXhdLm5vZGVfaW5mbzsKPiArCWk5 MTVfZ2VtX3JlcXVlc3RfYXNzaWduKCZub2RlX2luZm8tPnJlcSwKPiArCQkJCXJpbmctPm91dHN0 YW5kaW5nX2xhenlfcmVxdWVzdCk7Cj4gKwo+ICsJbm9kZV9pbmZvLT5waWQgPSBjdXJyZW50LT5w aWQ7Cj4gKwlub2RlX2luZm8tPmN0eF9pZCA9IGN0eF9pZDsKPiArCXF1ZXVlX2hkci0+bm9kZV9j b3VudCsrOwo+ICsJaWYgKHF1ZXVlX2hkci0+bm9kZV9jb3VudCA+IG51bV9ub2RlcykKPiArCQlx dWV1ZV9oZHItPndyYXBfY291bnQrKzsKPiArfQo+ICsKPiAgc3RhdGljIHZvaWQgaW5pdF9vYV9h c3luY19idWZfcXVldWUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICB7Cj4g IAlzdHJ1Y3QgZHJtX2k5MTVfb2FfYXN5bmNfcXVldWVfaGVhZGVyICpoZHIgPQo+IEBAIC04NjUs NiArOTM1LDcgQEAgdm9pZCBpOTE1X29hX2FzeW5jX3N0b3Bfd29ya19mbihzdHJ1Y3Qgd29ya19z dHJ1Y3QgKl9fd29yaykKPiAgCQljb250YWluZXJfb2YoX193b3JrLCB0eXBlb2YoKmRldl9wcml2 KSwKPiAgCQkJb2FfcG11LndvcmtfZXZlbnRfc3RvcCk7Cj4gIAlzdHJ1Y3QgcGVyZl9ldmVudCAq ZXZlbnQgPSBkZXZfcHJpdi0+b2FfcG11LmV4Y2x1c2l2ZV9ldmVudDsKPiArCXN0cnVjdCBkcm1f aTkxNV9pbnNlcnRfY21kICplbnRyeSwgKm5leHQ7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfb2FfYXN5 bmNfcXVldWVfaGVhZGVyICpoZHIgPQo+ICAJCShzdHJ1Y3QgZHJtX2k5MTVfb2FfYXN5bmNfcXVl dWVfaGVhZGVyICopCj4gIAkJZGV2X3ByaXYtPm9hX3BtdS5vYV9hc3luY19idWZmZXIuYWRkcjsK PiBAQCAtODgyLDYgKzk1MywxMyBAQCB2b2lkIGk5MTVfb2FfYXN5bmNfc3RvcF93b3JrX2ZuKHN0 cnVjdCB3b3JrX3N0cnVjdCAqX193b3JrKQo+ICAJaWYgKHJldCkKPiAgCQlyZXR1cm47Cj4gIAo+ ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuZXh0LCAmZGV2X3ByaXYtPnByb2Zp bGVfY21kLCBsaXN0KSB7Cj4gKwkJaWYgKGVudHJ5LT5pbnNlcnRfY21kID09IGk5MTVfb2FfaW5z ZXJ0X2NtZCkgewo+ICsJCQlsaXN0X2RlbCgmZW50cnktPmxpc3QpOwo+ICsJCQlrZnJlZShlbnRy eSk7Cj4gKwkJfQo+ICsJfQo+ICsKPiAgCWRldl9wcml2LT5vYV9wbXUuZXZlbnRfYWN0aXZlID0g ZmFsc2U7Cj4gIAo+ICAJaTkxNV9vYV9hc3luY193YWl0X2dwdShkZXZfcHJpdik7Cj4gQEAgLTky MCw4ICs5OTgsMTQgQEAgc3RhdGljIHZvaWQgaTkxNV9vYV9ldmVudF9zdGFydChzdHJ1Y3QgcGVy Zl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9Cj4gIAkJY29udGFpbmVyX29mKGV2ZW50LT5wbXUsIHR5cGVvZigqZGV2X3ByaXYp LCBvYV9wbXUucG11KTsKPiAgCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKPiArCXN0cnVjdCBk cm1faTkxNV9pbnNlcnRfY21kICplbnRyeTsKPiAgCXUzMiBvYXN0YXR1czEsIHRhaWw7Cj4gIAo+ ICsJZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfQVRPTUlDKTsKPiArCWlmICgh ZW50cnkpCj4gKwkJcmV0dXJuOwo+ICsJZW50cnktPmluc2VydF9jbWQgPSBpOTE1X29hX2luc2Vy dF9jbWQ7Cj4gKwo+ICAJaWYgKGRldl9wcml2LT5vYV9wbXUubWV0cmljc19zZXQgPT0gSTkxNV9P QV9NRVRSSUNTX1NFVF8zRCkgewo+ICAJCWNvbmZpZ19vYV9yZWdzKGRldl9wcml2LCBpOTE1X29h XzNkX211eF9jb25maWdfaHN3LAo+ICAJCQkJaTkxNV9vYV8zZF9tdXhfY29uZmlnX2hzd19sZW4p Owo+IEBAIC05NzYsNiArMTA2MCw4IEBAIHN0YXRpYyB2b2lkIGk5MTVfb2FfZXZlbnRfc3RhcnQo c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCj4gIAlkZXZfcHJpdi0+b2FfcG11 LmV2ZW50X2FjdGl2ZSA9IHRydWU7Cj4gIAl1cGRhdGVfb2Fjb250cm9sKGRldl9wcml2KTsKPiAg Cj4gKwlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGlzdCwgJmRldl9wcml2LT5wcm9maWxlX2NtZCk7 Cj4gKwo+ICAJLyogUmVzZXQgdGhlIGhlYWQgcHRyIHRvIGVuc3VyZSB3ZSBkb24ndCBmb3J3YXJk IHJlcG9ydHMgcmVsYXRpbmcKPiAgCSAqIHRvIGEgcHJldmlvdXMgcGVyZiBldmVudCAqLwo+ICAJ b2FzdGF0dXMxID0gSTkxNV9SRUFEKEdFTjdfT0FTVEFUVVMxKTsKPiAtLSAKPiAxLjguNS4xCj4g Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBJbnRl bC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0 dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKCi0t IApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRw Oi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeAo=