From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= Subject: Re: [PATCH v5 4/7] video: add generic framebuffer eviction Date: Sat, 3 Sep 2016 14:06:52 +0200 Message-ID: References: <20160902082245.7119-1-dh.herrmann@gmail.com> <20160902082245.7119-5-dh.herrmann@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from smtp.domeneshop.no (smtp.domeneshop.no [194.63.252.55]) by gabe.freedesktop.org (Postfix) with ESMTPS id 787456E33F for ; Sat, 3 Sep 2016 12:08:01 +0000 (UTC) In-Reply-To: <20160902082245.7119-5-dh.herrmann@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: David Herrmann , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org CkRlbiAwMi4wOS4yMDE2IDEwOjIyLCBza3JldiBEYXZpZCBIZXJybWFubjoKPiBUaGVyZSBhcmUg c2V2ZXJhbCBzaXR1YXRpb25zIHdoZXJlIHdlIHdhbnQgaGFyZHdhcmUgaGFuZG92ZXIgZnJvbSBh biBlYXJseQo+IGJvb3QgR0ZYIGRyaXZlciAoZS5nLiwgdmdhY29uLCB2ZXNhZmIsIGVmaWZiLCBz aW1wbGVmYikgdG8gYSBmdWxsIGZsZXRjaGVkCj4gR0ZYIGRyaXZlciAoZS5nLiwgbW9zdCBEUk0g ZHJpdmVycykuIFNvIGZhciwgd2UgcmVsaWVkIG9uCj4gcmVtb3ZlX2NvbmZsaWN0aW5nX2ZyYW1l YnVmZmVycygpIHRvIGRvIHRoaXMgZm9yIHVzLCBob3dldmVyLCB0aGlzIGhhZCBhCj4gYnVuY2gg b2YgZG93bnNpZGVzOgo+Cj4gICAgbyBJdCBvbmx5IHJlbW92ZXMgY29uZmxpY3RpbmcgZmJkZXYg ZHJpdmVycy4gSXQgZG9lcyBub3QgZHJvcCB2Z2Fjb24sCj4gICAgICBlYXJseSBib290IGNvbnNv bGUgZHJpdmVycywgY29uZmxpY3RpbmcgRFJNIGRyaXZlcnMsIGV0Yy4KPgo+ICAgIG8gSXQgb25s eSB1bmxvYWRzIHRoZSBmYmRldiBkcml2ZXIsIGl0IGRvZXMgbm90IG1vZGlmeSB0aGUgdW5kZXJs eWluZwo+ICAgICAgZGV2aWNlIG9yIHJlc291cmNlcy4gSW4gY2FzZSBvZiAic2NyZWVuX2luZm8i IGRyaXZlcnMgKGUuZy4sIGVmaWZiKQo+ICAgICAgdGhpcyBpcyBmaW5lLCBzaW5jZSBubyByZXNv dXJjZXMgYXJlIHBpbm5lZC4gSG93ZXZlciwgaWYgdGhlIGRyaXZlcgo+ICAgICAgYmluZHMgdG8g YSBwbGF0Zm9ybS1kZXZpY2UgbGlrZSAic2ltcGxlLWZyYW1lYnVmZmVyIiwgd2UgbXVzdCBtYWtl Cj4gICAgICBzdXJlIHRvIHVucmVnaXN0ZXIgdGhhdCBkZXZpY2UgYXMgd2VsbC4gT3RoZXJ3aXNl LCBwaW5uZWQgcmVzb3VyY2VzCj4gICAgICBsaWtlIElPUkVTT1VSQ0VfTUVNIHN0YXkgYXJvdW5k LCB0cmlnZ2VyaW5nIFdBUk5fT05zIGlmIHRoZSBmb2xsb3dpbmcKPiAgICAgIGRyaXZlciByZXF1 ZXN0cyB0aG9zZSByZXNvdXJjZXMuCj4KPiAgICBvIEl0IGlzIG9ubHkgYXZhaWxhYmxlIGlmIENP TkZJR19GQiBpcyBzZWxlY3RlZC4KPgo+IFRoaXMgY29tbWl0IGFkZHMgYSBuZXcgaW5mcmFzdHJ1 Y3R1cmUgdGhhdCBtYW5hZ2VzIHN5c3RlbS1mcmFtZWJ1ZmZlcnMKPiAoc2hvcnQ6IHN5c2ZiKS4g VGhlIGluaXRpYWwgY29tbWl0IHByb3ZpZGVzIGNvbmZsaWN0LXJlc29sdXRpb24gZm9yCj4gc3lz dGVtLWZyYW1lYnVmZmVycy4gQXQgaXRzIGNvcmUgaXQgcHJvdmlkZXMgc3lzZmJfZXZpY3RfY29u ZmxpY3RzKCksCj4gd2hpY2ggaW1wbGVtZW50cyBjb25mbGljdCBkZXRlY3Rpb24gYW5kIHJlbW92 YWwgZm9yIGFsbCBrbm93biB0eXBlcyBvZgo+IEdGWCBkcml2ZXIgaGFuZC1vdmVycy4gU28gZmFy LCB0aGlzIGluY2x1ZGVzIHBsYXRmb3JtLWRldmljZSByZW1vdmFsLAo+IGZiZGV2LWZpcm13YXJl LWRldmljZSByZW1vdmFsLCB2Z2Fjb24gcmVtb3ZhbCBhbmQgVkJFIGRldGVjdGlvbi4gVG8KPiBm dXJ0aGVyIHNpbXBsaWZ5IHRoZSBjYWxsZXJzLCBpdCBhbHNvIHByb3ZpZGVzIGhlbHBlcnMgdG8g ZmlndXJlIG91dCB3aGF0Cj4gaGFuZC1vdmVyIHRvIGRvLCBiYXNlZCBvbiB0aGUgZGV2aWNlIHRo ZSBuZXcgZHJpdmVycyBiaW5kcyB0bzoKPgo+ICAgIG8gUENJIGRyaXZlcnMgY2FuIHVzZSBzeXNm Yl9ldmljdF9jb25mbGljdHNfcGNpKCksIHdoaWNoIHdpbGwgZmlndXJlIG91dAo+ICAgICAgdGhl IGFwZXJ0dXJlcyBhdXRvbWF0aWNhbGx5LCBhbmQgZG9lcyBWR0EvVkJFIGRldGVjdGlvbi4KPgo+ ICAgIG8gR2VuZXJpYyBmaXJtd2FyZSBkcml2ZXJzIHRoYXQgbWlnaHQgYmUgc2hhZG93ZWQgYXQg YW55IGFkZHJlc3MgaW4KPiAgICAgIG1lbW9yeSBjYW4gdXNlIHN5c2ZiX2V2aWN0X2NvbmZsaWN0 c19maXJtd2FyZSgpLCBiYXNpY2FsbHkgcmVtb3ZpbmcKPiAgICAgICphbGwqIGZpcm13YXJlIGZy YW1lYnVmZmVycyBpbiBlZmZlY3QuCj4KPiBUaGlzIG9ubHkgYWRkcyB0aGUgZ2VuZXJpYyBzeXNm YiBoZWxwZXJzLiBObyB1c2VycyBhcmUgY29udmVydGVkLCB5ZXQuCj4KPiBTaWduZWQtb2ZmLWJ5 OiBEYXZpZCBIZXJybWFubiA8ZGguaGVycm1hbm5AZ21haWwuY29tPgo+IC0tLQo+ICAgZHJpdmVy cy92aWRlby9LY29uZmlnICB8ICAgNCArCj4gICBkcml2ZXJzL3ZpZGVvL01ha2VmaWxlIHwgICAx ICsKPiAgIGRyaXZlcnMvdmlkZW8vc3lzZmIuYyAgfCAzMjcgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgaW5jbHVkZS9saW51eC9zeXNmYi5oICB8 ICAzNCArKysrKwo+ICAgNCBmaWxlcyBjaGFuZ2VkLCAzNjYgaW5zZXJ0aW9ucygrKQo+ICAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdmlkZW8vc3lzZmIuYwo+ICAgY3JlYXRlIG1vZGUgMTAw NjQ0IGluY2x1ZGUvbGludXgvc3lzZmIuaAo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8v S2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwo+IGluZGV4IDNjMjBhZjkuLjU2YTgyOTQg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCj4gKysrIGIvZHJpdmVycy92aWRl by9LY29uZmlnCj4gQEAgLTM2LDYgKzM2LDEwIEBAIGNvbmZpZyBWSURFT01PREVfSEVMUEVSUwo+ ICAgY29uZmlnIEhETUkKPiAgIAlib29sCj4gICAKPiArY29uZmlnIFNZU0ZCCj4gKwlib29sCj4g KwlzZWxlY3QgRFVNTVlfQ09OU09MRSBpZiBWVAo+ICsKPiAgIGlmIFZUCj4gICAJc291cmNlICJk cml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZyIKPiAgIGVuZGlmCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCj4gaW5kZXggOWFk M2MxNy4uZGY3YmQ3NSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCj4gKysr IGIvZHJpdmVycy92aWRlby9NYWtlZmlsZQo+IEBAIC0xLDUgKzEsNiBAQAo+ICAgb2JqLSQoQ09O RklHX1ZHQVNUQVRFKSAgICAgICAgICAgICs9IHZnYXN0YXRlLm8KPiAgIG9iai0kKENPTkZJR19I RE1JKSAgICAgICAgICAgICAgICArPSBoZG1pLm8KPiArb2JqLSQoQ09ORklHX1NZU0ZCKQkJICAr PSBzeXNmYi5vCj4gICAKPiAgIG9iai0kKENPTkZJR19WVCkJCSAgKz0gY29uc29sZS8KPiAgIG9i ai0kKENPTkZJR19MT0dPKQkJICArPSBsb2dvLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVv L3N5c2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3N5c2ZiLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAuLjAwNTg1YzkKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy92 aWRlby9zeXNmYi5jCj4gQEAgLTAsMCArMSwzMjcgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChD KSAyMDEzLTIwMTYgUmVkIEhhdCwgSW5jLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAo+ICsg KiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkgdGhlCj4gKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgo+ICsgKiBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKi8KPiArCj4gKyNkZWZpbmUgcHJfZm10KGZtdCkgInN5 c2ZiOiAiIGZtdAo+ICsjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L2V4cG9ydC5oPgo+ICsjaW5jbHVkZSA8bGludXgvZmIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lv cG9ydC5oPgo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9v Zi5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KPiArI2luY2x1ZGUgPGxpbnV4 L3BjaS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9zbGFiLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zeXNmYi5oPgo+ICsjaW5jbHVkZSA8 bGludXgvdnQuaD4KPiArCj4gK3N0YXRpYyBib29sIHN5c2ZiX2V2aWN0X21hdGNoX3Jlc291cmNl KHN0cnVjdCBzeXNmYl9ldmljdF9jdHggKmN0eCwKPiArCQkJCSAgICAgICBzdHJ1Y3QgcmVzb3Vy Y2UgKm1lbSkKPiArewo+ICsJc3RydWN0IGFwZXJ0dXJlICpnOwo+ICsJdW5zaWduZWQgaW50IGk7 Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGN0eC0+YXAtPmNvdW50OyArK2kpIHsKPiArCQlnID0g JmN0eC0+YXAtPnJhbmdlc1tpXTsKPiArCj4gKwkJaWYgKG1lbS0+c3RhcnQgPT0gZy0+YmFzZSkK PiArCQkJcmV0dXJuIHRydWU7Cj4gKwkJaWYgKG1lbS0+c3RhcnQgPj0gZy0+YmFzZSAmJiBtZW0t PmVuZCA8IGctPmJhc2UgKyBnLT5zaXplKQo+ICsJCQlyZXR1cm4gdHJ1ZTsKPiArCQlpZiAoKGN0 eC0+ZmxhZ3MgJiBTWVNGQl9FVklDVF9WQkUpICYmIG1lbS0+c3RhcnQgPT0gMHhBMDAwMCkKPiAr CQkJcmV0dXJuIHRydWU7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IHN5c2ZiX2V2aWN0X3BsYXRmb3JtX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYs IHZvaWQgKnVzZXJkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3Qgc3lzZmJfZXZpY3RfY3R4ICpjdHggPSB1 c2VyZGF0YTsKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9k ZXZpY2UoZGV2KTsKPiArCXN0cnVjdCByZXNvdXJjZSAqbWVtOwo+ICsKPiArCWlmICghcGRldi0+ bmFtZSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpZiAoIXN0cmNtcChwZGV2LT5uYW1lLCAic2lt cGxlLWZyYW1lYnVmZmVyIikpIHsKClRoaXMgZG9lc24ndCB3b3JrIGluIG15IGNhc2Ugd2hlcmUg dGhlIGRldmljZSBjb21lcyBmcm9tIERUIGFuZCB0aGUgbmFtZQphbHNvIGNvbnRhaW5zIHRoZSBh ZGRyZXNzOiBwZGV2LT5uYW1lPTFlODg3MDAwLmZyYW1lYnVmZmVyCgpUaGlzIGlzIG9uZSB3YXkg b2Ygc29sdmluZyBpdDoKCiAgICAgICAgaWYgKCFwZGV2LT5kZXYuZHJpdmVyIHx8ICFwZGV2LT5k ZXYuZHJpdmVyLT5uYW1lKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwoKICAgICAgICBpZiAo IXN0cmNtcChwZGV2LT5kZXYuZHJpdmVyLT5uYW1lLCAic2ltcGxlLWZyYW1lYnVmZmVyIikpIHsK CgpOb3JhbGYuCgo+ICsJCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09V UkNFX01FTSwgMCk7Cj4gKwkJaWYgKCFtZW0pCj4gKwkJCXJldHVybiAwOwo+ICsJCWlmICghc3lz ZmJfZXZpY3RfbWF0Y2hfcmVzb3VyY2UoY3R4LCBtZW0pKQo+ICsJCQlyZXR1cm4gMDsKPiArCj4g KyNpZmRlZiBDT05GSUdfT0ZfQUREUkVTUwo+ICsJCWlmIChkZXYtPm9mX25vZGUpCj4gKwkJCW9m X3BsYXRmb3JtX2RldmljZV9kZXN0cm95KGRldik7Cj4gKwkJZWxzZQo+ICsjZW5kaWYKPiArCQlp ZiAoZGV2X2dldF9wbGF0ZGF0YSgmcGRldi0+ZGV2KSkKPiArCQkJcGxhdGZvcm1fZGV2aWNlX2Rl bChwZGV2KTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBz eXNmYl9ldmljdF9wbGF0Zm9ybShzdHJ1Y3Qgc3lzZmJfZXZpY3RfY3R4ICpjdHgpCj4gK3sKPiAr CS8qCj4gKwkgKiBFYXJseS1ib290IGFyY2hpdGVjdHVyZSBzZXR1cCBhbmQgYm9vdC1sb2FyZGVy cyBzb21ldGltZXMgY3JlYXRlCj4gKwkgKiBwcmVsaW1pbmFyeSBwbGF0Zm9ybSBkZXZpY2VzIHdp dGggYSBnZW5lcmljIGZyYW1lYnVmZmVyIHNldHVwLiBUaGlzCj4gKwkgKiBhbGxvd3MgZ3JhcGhp Y3MgYWNjZXNzIGR1cmluZyBib290LXVwLCB3aXRob3V0IGEgcmVhbCBncmFwaGljcwo+ICsJICog ZHJpdmVyIGxvYWRlZC4gSG93ZXZlciwgb25jZSBhIHJlYWwgZ3JhcGhpY3MgZHJpdmVyIHRha2Vz IG92ZXIsIHdlCj4gKwkgKiBoYXZlIHRvIGRlc3Ryb3kgdGhvc2UgcGxhdGZvcm0gZGV2aWNlcy4g SW4gdGhlIGxlZ2FjeSBmYmRldiBjYXNlLCB3ZQo+ICsJICoganVzdCB1c2VkIHRvIHVubG9hZCB0 aGUgZmJkZXYgZHJpdmVyLiBIb3dldmVyLCB0byBtYWtlIHN1cmUgYW55IGtpbmQKPiArCSAqIG9m IGRyaXZlciBpcyB1bmxvYWRlZCwgdGhlIHBsYXRmb3JtLWV2aWN0aW9uIGNvZGUgaGVyZSBzaW1w bHkKPiArCSAqIHJlbW92ZXMgYW55IGNvbmZsaWN0aW5nIHBsYXRmb3JtIGRldmljZSBkaXJlY3Rs eS4gVGhpcyBjYXVzZXMgYW55Cj4gKwkgKiBib3VuZCBkcml2ZXIgdG8gYmUgZGV0YWNoZWQsIGFu ZCB0aGVuIHJlbW92ZXMgdGhlIGRldmljZSBlbnRpcmVseSBzbwo+ICsJICogaXQgY2Fubm90IGJl IGJvdW5kIHRvIGxhdGVyIG9uLgo+ICsJICoKPiArCSAqIFBsZWFzZSBub3RlIHRoYXQgYW55IHN1 Y2ggcGxhdGZvcm0gZGV2aWNlIG11c3QgYmUgcmVnaXN0ZXJlZCBieQo+ICsJICogZWFybHkgYXJj aGl0ZWN0dXJlIHNldHVwIGNvZGUuIElmIHRoZXkgYXJlIHJlZ2lzdGVyZWQgYWZ0ZXIgcmVndWxh cgo+ICsJICogR0ZYIGRyaXZlcnMsIHRoaXMgd2lsbCBmYWlsIGhvcnJpYmx5Lgo+ICsJICovCj4g Kwo+ICsJc3RhdGljIERFRklORV9NVVRFWChsb2NrKTsKPiArCWludCByZXQ7Cj4gKwo+ICsJLyoK PiArCSAqIEluIGNhc2Ugb2Ygc3RhdGljIHBsYXRmb3JtLWRldmljZXMsIHdlIG11c3QgaXRlcmF0 ZSB0aGUgYnVzIGFuZAo+ICsJICogcmVtb3ZlIHRoZW0gbWFudWFsbHkuIFdlIGtub3cgdGhhdCB3 ZSdyZSB0aGUgb25seSBjb2RlIHRoYXQgbWlnaHQKPiArCSAqIHJlbW92ZSB0aGVtLCBzbyBhIHNp bXBsZSBzdGF0aWMgbG9jayBzZXJpYWxpemVzIGFsbCBjYWxscyBoZXJlLgo+ICsJICovCj4gKwlt dXRleF9sb2NrKCZsb2NrKTsKPiArCXJldCA9IGJ1c19mb3JfZWFjaF9kZXYoJnBsYXRmb3JtX2J1 c190eXBlLCBOVUxMLCBjdHgsCj4gKwkJCSAgICAgICBzeXNmYl9ldmljdF9wbGF0Zm9ybV9kZXZp Y2UpOwo+ICsJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgc3lzZmJfZXZpY3RfZmJkZXYoc3RydWN0IHN5c2ZiX2V2aWN0X2N0eCAqY3R4 KQo+ICt7Cj4gKwkvKgo+ICsJICogVXN1YWxseSwgZXZpY3RpbmcgcGxhdGZvcm0gZGV2aWNlcyBz aG91bGQgYmUgZW5vdWdoIHRvIGFsc28gdHJpZ2dlcgo+ICsJICogZmJkZXYgdW5sb2FkaW5nLiBI b3dldmVyLCBzb21lIGxlZ2FjeSBkZXZpY2VzIChlLmcuLCB1dmVzYWZiKSBoYXZlCj4gKwkgKiBu byBwbGF0Zm9ybSBkZXZpY2VzIHRoYXQgY2FuIGJlIGV2aWN0ZWQsIHNvIHdlIHN0aWxsIGZhbGwg YmFjayB0bwo+ICsJICogdGhlIGxlZ2FjeSBmYmRldiByZW1vdmFsIGNvZGUuIE5vdGUgdGhhdCB0 aGlzIG9ubHkgcmVtb3ZlcyBmYmRldgo+ICsJICogZGV2aWNlcyBtYXJrZWQgYXMgRkJJTkZPX01J U0NfRklSTVdBUkUuIEFueXRoaW5nIGVsc2UgaXMgbGVmdAo+ICsJICogdW50b3VjaGVkLgo+ICsJ ICoKPiArCSAqIEFzIHVzdWFsLCB0aGlzIG9ubHkgd29ya3MgaWYgdGhlIGZiZGV2IGRldmljZSBp cyBwcm9iZWQgZWFybHksCj4gKwkgKiBiZWZvcmUgYW55IHJlYWwgR0ZYIGRyaXZlciB3YW50cyB0 byB0YWtlIG92ZXIuCj4gKwkgKi8KPiArCj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKyNpZmRlZiBD T05GSUdfRkIKPiArCXJldCA9IHJlbW92ZV9jb25mbGljdGluZ19mcmFtZWJ1ZmZlcnMoY3R4LT5h cCwgInN5c2ZiIiwKPiArCQkJCQkgICAgICBjdHgtPmZsYWdzICYgU1lTRkJfRVZJQ1RfVkJFKTsK PiArI2VuZGlmCj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBzeXNm Yl9ldmljdF92Z2Fjb24oc3RydWN0IHN5c2ZiX2V2aWN0X2N0eCAqY3R4KQo+ICt7Cj4gKwkvKgo+ ICsJICogVGhlIFZHQUNPTiBjb25zb2xlIGRyaXZlciBwb2tlcyBhdCBWR0EgcmVnaXN0ZXJzIHJh bmRvbWx5LiBJZiBhIEdGWAo+ICsJICogZHJpdmVyIGNhbm5vdCBrZWVwIHRoZSBWR0Egc3VwcG9y dCBhbGl2ZSwgaXQgYmV0dGVyIG1ha2VzIHN1cmUgdG8KPiArCSAqIHVubG9hZCBWR0FDT04gYmVm b3JlIHByb2JpbmcuCj4gKwkgKgo+ICsJICogVW5sb2FkaW5nIFZHQUNPTiByZXF1aXJlcyB1cyB0 byBmaXJzdCBmb3JjZSBkdW1teWNvbiB0byB0YWtlIG92ZXIKPiArCSAqIGZyb20gdmdhY29uIChi dXQgb25seSBpZiB2Z2Fjb24gaXMgcmVhbGx5IGluIHVzZSksIGZvbGxvd2VkIGJ5IGEKPiArCSAq IGRlcmVnaXN0cmF0aW9uIG9mIHZnYWNvbi4gTm90ZSB0aGF0IHRoaXMgcHJldmVudHMgdmdhY29u IGZyb20gYmVpbmcKPiArCSAqIHVzZWQgYWdhaW4gYWZ0ZXIgdGhlIEdGWCBkcml2ZXIgaXMgdW5s b2FkZWQuIEJ1dCB0aGF0IGlzIHVzdWFsbHkKPiArCSAqIGZpbmUsIHNpbmNlIFZHQSBzdGF0ZSBp cyByYXJlbHkgcmVzdG9yZWQgb24gZHJpdmVyLXVubG9hZCwgYW55d2F5Lgo+ICsJICoKPiArCSAq IE5vdGUgdGhhdCB3ZSByZWx5IG9uIFZHQUNPTiB0byBiZSBwcm9iZWQgaW4gZWFybHkgYm9vdCAo YWN0dWFsbHkKPiArCSAqIGRvbmUgYnkgQVJDSCBzZXR1cCBjb2RlKS4gSWYgaXQgaXMgcHJvYmVk IGFmdGVyIEdGWCBkcml2ZXJzLCB0aGlzCj4gKwkgKiB3aWxsIGZhaWwgaG9ycmlibHkuIFlvdSBi ZXR0ZXIgbWFrZSBzdXJlIFZHQUNPTiBpcyBwcm9iZWQgZWFybHkgYW5kCj4gKwkgKiBHRlggZHJp dmVycyBhcmUgcHJvYmVkIGFzIG5vcm1hbCBtb2R1bGVzLgo+ICsJICovCj4gKwo+ICsJaW50IHJl dCA9IDA7Cj4gKwo+ICsjaWZkZWYgQ09ORklHX1ZHQV9DT05TT0xFCj4gKwljb25zb2xlX2xvY2so KTsKPiArCWlmIChjb25faXNfYm91bmQoJnZnYV9jb24pKQo+ICsJCXJldCA9IGRvX3Rha2Vfb3Zl cl9jb25zb2xlKCZkdW1teV9jb24sIDAsCj4gKwkJCQkJICAgTUFYX05SX0NPTlNPTEVTIC0gMSwg MSk7Cj4gKwlpZiAocmV0ID09IDApIHsKPiArCQlyZXQgPSBkb191bnJlZ2lzdGVyX2Nvbl9kcml2 ZXIoJnZnYV9jb24pOwo+ICsJCWlmIChyZXQgPT0gLUVOT0RFVikgLyogaWdub3JlICJhbHJlYWR5 IHVucmVnaXN0ZXJlZCIgKi8KPiArCQkJcmV0ID0gMDsKPiArCX0KPiArCWNvbnNvbGVfdW5sb2Nr KCk7Cj4gKyNlbmRpZgo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBz eXNmYl9ldmljdF9jb25mbGljdHMgLSByZW1vdmUgYW55IGNvbmZsaWN0aW5nIHN5c3RlbS1mcmFt ZWJ1ZmZlcnMKPiArICogQGN0eDoJCWV2aWN0aW9uIGNvbnRleHQKPiArICoKPiArICogVGhpcyBm dW5jdGlvbiBldmljdHMgYW55IGNvbmZsaWN0aW5nIHN5c3RlbS1mcmFtZWJ1ZmZlcnMgYW5kIHRo ZWlyIGJvdW5kCj4gKyAqIGRyaXZlcnMsIGFjY29yZGluZyB0byB0aGUgZGF0YSBnaXZlbiBpbiBA Y3R4Lgo+ICsgKgo+ICsgKiBEZXBlbmRpbmcgb24gQGN0eC0+ZmxhZ3MsIHRoZSBmb2xsb3dpbmcg b3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkOgo+ICsgKgo+ICsgKiAgIFNZU0ZCX0VWSUNUX1BMQVRG T1JNOiBGaXJtd2FyZSBmcmFtZWJ1ZmZlciBwbGF0Zm9ybSBkZXZpY2VzIChlZy4sCj4gKyAqICAg ICAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUtZnJhbWVidWZmZXInKSB0aGF0IG92ZXJsYXAg QGN0eCBhcmUgcmVtb3ZlZAo+ICsgKiAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBz eXN0ZW0sIGNhdXNpbmcgZHJpdmVycyB0byBiZSB1bmJvdW5kLgo+ICsgKiAgICAgICAgICAgICAg ICAgICAgICAgICBJZiBTWVNGQl9FVklDVF9WQkUgaXMgZ2l2ZW4sIHRoaXMgYWxzbyBhZmZlY3Rz Cj4gKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZXMgdGhhdCBvd24gdGhlIFZHQSBy ZWdpb24uCj4gKyAqCj4gKyAqICAgU1lTRkJfRVZJQ1RfRkJERVY6IEFueSBmaXJtd2FyZSBmYmRl diBkcml2ZXJzIHRoYXQgb3ZlcmxhcCBAY3R4IGFyZQo+ICsgKiAgICAgICAgICAgICAgICAgICAg ICB1bmxvYWRlZC4KPiArICogICAgICAgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIGlmIFNZ U0ZCX0VWSUNUX1ZCRSBpcyBnaXZlbiBhcyB3ZWxsLCBhbnkKPiArICogICAgICAgICAgICAgICAg ICAgICAgZmJkZXYgZHJpdmVyIHRoYXQgbWFwcyB0aGUgVkdBIHJlZ2lvbiBpcyB1bmxvYWRlZC4K PiArICoKPiArICogICBTWVNGQl9FVklDVF9WR0FDT046IFRoZSB2Z2Fjb24gY29uc29sZSBkcml2 ZXIgaXMgdW5ib3VuZCBhbmQgdW5yZWdpc3RlcmVkLgo+ICsgKgo+ICsgKiBUaGlzIG1pZ2h0IGNh bGwgaW50byBmYmRldiBkcml2ZXIgdW5yZWdpc3RyYXRpb24sIG9yIGV2ZW4gZGV2aWNlX2RlbCgp IG9uCj4gKyAqIHNvbWUgYnVzZXMuIEhlbmNlLCBtYWtlIHN1cmUgeW91IGNhbGwgdGhpcyBmcm9t IHlvdXIgdG9wLWxldmVsCj4gKyAqIHByb2JlLWNhbGxiYWNrcywgcmF0aGVyIHRoYW4gd2l0aCBh bnkgZ2Z4LXN1YnN5c3RlbSBsb2NrcyBoZWxkLgo+ICsgKgo+ICsgKiBSRVRVUk5TOgo+ICsgKiAw IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiArICovCj4gK2lu dCBzeXNmYl9ldmljdF9jb25mbGljdHMoc3RydWN0IHN5c2ZiX2V2aWN0X2N0eCAqY3R4KQo+ICt7 Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmIChXQVJOX09OKCFjdHggfHwgIWN0eC0+YXApKQo+ICsJ CXJldHVybiAtRUlOVkFMOwo+ICsKPiArCXByX2luZm8oInJlbW92aW5nIGNvbmZsaWN0cyAoc3lz ZmIlcyVzJXMlcylcbiIsCj4gKwkJKGN0eC0+ZmxhZ3MgJiBTWVNGQl9FVklDVF9QTEFURk9STSkg PyAiLCBwbGF0Zm9ybSIgOiAiIiwKPiArCQkoY3R4LT5mbGFncyAmIFNZU0ZCX0VWSUNUX0ZCREVW KSA/ICIsIGZiZGV2IiA6ICIiLAo+ICsJCShjdHgtPmZsYWdzICYgU1lTRkJfRVZJQ1RfVkdBQ09O KSA/ICIsIHZnYWNvbiIgOiAiIiwKPiArCQkoY3R4LT5mbGFncyAmIFNZU0ZCX0VWSUNUX1ZCRSkg PyAiLCB2YmUiIDogIiIpOwo+ICsKPiArCWlmIChjdHgtPmZsYWdzICYgU1lTRkJfRVZJQ1RfUExB VEZPUk0pIHsKPiArCQlyZXQgPSBzeXNmYl9ldmljdF9wbGF0Zm9ybShjdHgpOwo+ICsJCWlmIChy ZXQgPCAwKQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWlmIChjdHgtPmZsYWdzICYg U1lTRkJfRVZJQ1RfRkJERVYpIHsKPiArCQlyZXQgPSBzeXNmYl9ldmljdF9mYmRldihjdHgpOwo+ ICsJCWlmIChyZXQgPCAwKQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWlmIChjdHgt PmZsYWdzICYgU1lTRkJfRVZJQ1RfVkdBQ09OKSB7Cj4gKwkJcmV0ID0gc3lzZmJfZXZpY3Rfdmdh Y29uKGN0eCk7Cj4gKwkJaWYgKHJldCA8IDApCj4gKwkJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChzeXNmYl9ldmljdF9jb25mbGljdHMp Owo+ICsKPiArLyoqCj4gKyAqIHN5c2ZiX2V2aWN0X2NvbmZsaWN0c19maXJtd2FyZSgpIC0gcmVt b3ZlIGFsbCBmaXJtd2FyZSBmcmFtZWJ1ZmZlcnMKPiArICoKPiArICogVGhpcyBpcyBzaW1pbGFy IHRvIHN5c2ZiX2V2aWN0X2NvbmZsaWN0cygpIGJ1dCB1c2VzIGEgZmFrZSBhcGVydHVyZSBzcGFu bmluZwo+ICsgKiB0aGUgZW50aXJlIGFkZHJlc3Mtc3BhY2UuIFRoaXMgaXMgc3VpdGFibGUgZm9y IGFueSBHRlggZHJpdmVyIHRoYXQganVzdAo+ICsgKiB3YW50cyB0byBnZXQgcmlkIG9mIGFsbCBh dmFpbGFibGUgZmlybXdhcmUgZnJhbWVidWZmZXJzLgo+ICsgKgo+ICsgKiBSRVRVUk5TOgo+ICsg KiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiArICovCj4g K2ludCBzeXNmYl9ldmljdF9jb25mbGljdHNfZmlybXdhcmUodm9pZCkKPiArewo+ICsJc3RydWN0 IHN5c2ZiX2V2aWN0X2N0eCBjdHggPSB7fTsKPiArCWludCByZXQ7Cj4gKwo+ICsJY3R4LmFwID0g YWxsb2NfYXBlcnR1cmVzKDEpOwo+ICsJaWYgKCFjdHguYXApCj4gKwkJcmV0dXJuIC1FTk9NRU07 Cj4gKwo+ICsJY3R4LmFwLT5yYW5nZXNbMF0uYmFzZSA9IDA7Cj4gKwljdHguYXAtPnJhbmdlc1sw XS5zaXplID0gfjA7Cj4gKwo+ICsJY3R4LmZsYWdzIHw9IFNZU0ZCX0VWSUNUX0ZCREVWIHwgU1lT RkJfRVZJQ1RfUExBVEZPUk07Cj4gKwlyZXQgPSBzeXNmYl9ldmljdF9jb25mbGljdHMoJmN0eCk7 Cj4gKwo+ICsJa2ZyZWUoY3R4LmFwKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArRVhQT1JUX1NZ TUJPTChzeXNmYl9ldmljdF9jb25mbGljdHNfZmlybXdhcmUpOwo+ICsKPiArI2lmZGVmIENPTkZJ R19QQ0kKPiArLyoqCj4gKyAqIHN5c2ZiX2V2aWN0X2NvbmZsaWN0c19wY2koKSAtIHJlbW92ZSBh bGwgc3lzdGVtIGZyYW1lYnVmZmVycyBjb25mbGljdGluZwo+ICsgKiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBwY2kgZGV2aWNlCj4gKyAqIEBwZGV2OgkJcGNp IGRldmljZQo+ICsgKgo+ICsgKiBUaGlzIGlzIHNpbWlsYXIgdG8gc3lzZmJfZXZpY3RfY29uZmxp Y3RzKCkgYnV0IGdlbmVyYXRlcyB0aGUgZXZpY3Rpb24KPiArICogY29udGV4dCBiYXNlZCBvbiB0 aGUgZ2l2ZW4gcGNpIGRldmljZSBAcGRldi4KPiArICoKPiArICogUkVUVVJOUzoKPiArICogMCBv biBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKyAqLwo+ICtpbnQg c3lzZmJfZXZpY3RfY29uZmxpY3RzX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGRldikKPiArewo+ICsJ c3RydWN0IHN5c2ZiX2V2aWN0X2N0eCBjdHggPSB7fTsKPiArCXNpemVfdCBpLCBuLCBvZmZzZXQ7 Cj4gKwlpbnQgcmV0Owo+ICsKPiArCS8qCj4gKwkgKiBJZiB0aGlzIGRldmljZSBpcyB1c2VkIGFz IHByaW1hcnkgVkdBIGRldmljZSwgaXQgaXMgc2hhZG93ZWQgYXQgdGhlCj4gKwkgKiBWQkUgYmFz ZSBhZGRyZXNzLCBzbyBtYWtlIHN1cmUgdG8gaW5jbHVkZSBpdCBpbiB0aGUgYXBlcnR1cmVzLgo+ ICsJICovCj4gKwlpZiAocGRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uZmxhZ3MgJiBJ T1JFU09VUkNFX1JPTV9TSEFET1cpCj4gKwkJY3R4LmZsYWdzIHw9IFNZU0ZCX0VWSUNUX1ZCRTsK PiArCj4gKwkvKgo+ICsJICogSWYgYSBkZXZpY2UgaXMgYSBWR0EgZGV2aWNlLCBtYWtlIHN1cmUg dG8ga2ljayBvdXQgdmdhY29uLiBXZSBjYW5ub3QKPiArCSAqIHJlbHkgb24gdGhlIElPUkVTT1VS Q0VfUk9NX1NIQURPVywgc2luY2UgdmdhY29uIGNhbiBzd2l0Y2ggYmV0d2Vlbgo+ICsJICogdmdh IGRldmljZXMgYXQgcnVudGltZS4gU28ga2ljayBvdXQgdmdhY29uIGFueXdheS4KPiArCSAqLwo+ ICsJaWYgKChwZGV2LT5jbGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfRElTUExBWV9WR0EpCj4gKwkJ Y3R4LmZsYWdzIHw9IFNZU0ZCX0VWSUNUX1ZHQUNPTjsKPiArCj4gKwkvKgo+ICsJICogQWxsb2Nh dGUgYXBlcnR1cmVzIGZvciBhbGwgc3RhbmRhcmQgUENJIHJlc291cmNlcy4gU2tpcCB0aGVtIGlu IGNhc2UKPiArCSAqIHRoZXkgYXJlIGVtcHR5Lgo+ICsJICovCj4gKwljdHguYXAgPSBhbGxvY19h cGVydHVyZXMoUENJX1NURF9SRVNPVVJDRV9FTkQgLSBQQ0lfU1REX1JFU09VUkNFUyArIDEpOwo+ ICsJaWYgKCFjdHguYXApCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJb2Zmc2V0ID0gUENJ X1NURF9SRVNPVVJDRVM7Cj4gKwlmb3IgKG4gPSAwLCBpID0gMDsgaSA8IGN0eC5hcC0+Y291bnQ7 ICsraSkgewo+ICsJCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIG9mZnNldCArIGkpIDwgMSkK PiArCQkJY29udGludWU7Cj4gKwo+ICsJCWN0eC5hcC0+cmFuZ2VzW25dLmJhc2UgPSBwY2lfcmVz b3VyY2Vfc3RhcnQocGRldiwgb2Zmc2V0ICsgaSk7Cj4gKwkJY3R4LmFwLT5yYW5nZXNbbl0uc2l6 ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgb2Zmc2V0ICsgaSk7Cj4gKwkJKytuOwo+ICsJfQo+ ICsJY3R4LmFwLT5jb3VudCA9IG47Cj4gKwo+ICsJLyoKPiArCSAqIEV2aWN0IGFsbCBtYXRjaGlu ZyBmYmRldiBkZXZpY2VzLCBWQkUgZGV2aWNlcyBpZiB0aGV5IHNoYWRvdyB0aGlzCj4gKwkgKiBk ZXZpY2UsIHZnYWNvbiBpZiB0aGlzIGlzIGEgdmdhIGRldmljZSwgYW5kIHBsYXRmb3JtIGRldmlj ZXMgaWYgdGhleQo+ICsJICogbWF0Y2guCj4gKwkgKi8KPiArCWN0eC5mbGFncyB8PSBTWVNGQl9F VklDVF9GQkRFViB8IFNZU0ZCX0VWSUNUX1BMQVRGT1JNOwo+ICsJcmV0ID0gc3lzZmJfZXZpY3Rf Y29uZmxpY3RzKCZjdHgpOwo+ICsKPiArCWtmcmVlKGN0eC5hcCk7Cj4gKwlyZXR1cm4gcmV0Owo+ ICt9Cj4gK0VYUE9SVF9TWU1CT0woc3lzZmJfZXZpY3RfY29uZmxpY3RzX3BjaSk7Cj4gKyNlbmRp ZiAvKiBDT05GSUdfUENJICovCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzZmIuaCBi L2luY2x1ZGUvbGludXgvc3lzZmIuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMC4uYjY3Yzc0YQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9pbmNsdWRlL2xpbnV4L3N5c2Zi LmgKPiBAQCAtMCwwICsxLDM0IEBACj4gKyNpZm5kZWYgX19MSU5VWF9TWVNGQl9ICj4gKyNkZWZp bmUgX19MSU5VWF9TWVNGQl9ICj4gKwo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx NiBSZWQgSGF0LCBJbmMuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cj4gKyAqIHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUKPiArICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCj4gKyAqIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsKPiAr c3RydWN0IGFwZXJ0dXJlc19zdHJ1Y3Q7Cj4gK3N0cnVjdCBwY2lfZGV2Owo+ICsKPiArZW51bSB7 Cj4gKwlTWVNGQl9FVklDVF9QTEFURk9STQkJCT0gKDFVIDw8ICAwKSwKPiArCVNZU0ZCX0VWSUNU X0ZCREVWCQkJPSAoMVUgPDwgIDEpLAo+ICsJU1lTRkJfRVZJQ1RfVkdBQ09OCQkJPSAoMVUgPDwg IDIpLAo+ICsJU1lTRkJfRVZJQ1RfVkJFCQkJCT0gKDFVIDw8ICAzKSwKPiArfTsKPiArCj4gK3N0 cnVjdCBzeXNmYl9ldmljdF9jdHggewo+ICsJc3RydWN0IGFwZXJ0dXJlc19zdHJ1Y3QgKmFwOwo+ ICsJdW5zaWduZWQgaW50IGZsYWdzOwo+ICt9Owo+ICsKPiAraW50IHN5c2ZiX2V2aWN0X2NvbmZs aWN0cyhzdHJ1Y3Qgc3lzZmJfZXZpY3RfY3R4ICpjdHgpOwo+ICtpbnQgc3lzZmJfZXZpY3RfY29u ZmxpY3RzX2Zpcm13YXJlKHZvaWQpOwo+ICtpbnQgc3lzZmJfZXZpY3RfY29uZmxpY3RzX3BjaShz dHJ1Y3QgcGNpX2RldiAqcGRldik7Cj4gKwo+ICsjZW5kaWYgLyogX19MSU5VWF9TWVNGQl9IICov CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2 ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK