From mboxrd@z Thu Jan 1 00:00:00 1970 From: zhoucm1 Subject: Re: [PATCH 1/5] drm: introduce sync objects Date: Wed, 26 Apr 2017 14:35:39 +0800 Message-ID: <59003FBB.9070406@amd.com> References: <20170426032833.1455-1-airlied@gmail.com> <20170426032833.1455-2-airlied@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170426032833.1455-2-airlied-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: Dave Airlie , dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org CgpPbiAyMDE35bm0MDTmnIgyNuaXpSAxMToyOCwgRGF2ZSBBaXJsaWUgd3JvdGU6Cj4gRnJvbTog RGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KPgo+IFN5bmMgb2JqZWN0cyBhcmUgbmV3 IHRvcGxldmVsIGRybSBvYmplY3QsIHRoYXQgY29udGFpbiBhCj4gcG9pbnRlciB0byBhIGZlbmNl LiBUaGlzIGZlbmNlIGNhbiBiZSB1cGRhdGVkIHZpYSBjb21tYW5kCj4gc3VibWlzc2lvbiBpb2N0 bHMgdmlhIGRyaXZlcnMuCj4KPiBUaGVyZSBpcyBhbHNvIGEgZ2VuZXJpYyB3YWl0IG9iaiBBUEkg bW9kZWxsZWQgb24gdGhlIHZ1bGthbgo+IHdhaXQgQVBJICh3aXRoIGNvZGUgbW9kZWxsZWQgb24g c29tZSBhbWRncHUgY29kZSkuCj4KPiBUaGVzZSBvYmplY3RzIGNhbiBiZSBjb252ZXJ0ZWQgdG8g YW4gb3BhcXVlIGZkIHRoYXQgY2FuIGJlCj4gcGFzc2VzIGJldHdlZW4gcHJvY2Vzc2VzLgo+Cj4g VE9ETzogZGVmaW5lIHN5bmNfZmlsZSBpbnRlcmFjdGlvbi4KPgo+IFNpZ25lZC1vZmYtYnk6IERh dmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+Cj4gLS0tCj4gICBEb2N1bWVudGF0aW9uL2dw dS9kcm0taW50ZXJuYWxzLnJzdCB8ICAgMyArCj4gICBEb2N1bWVudGF0aW9uL2dwdS9kcm0tbW0u cnN0ICAgICAgICB8ICAgNiArCj4gICBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAg ICB8ICAgMiArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMgICAgICAgICAgfCAgIDgg Kwo+ICAgZHJpdmVycy9ncHUvZHJtL2RybV9pbnRlcm5hbC5oICAgICAgfCAgMTMgKysKPiAgIGRy aXZlcnMvZ3B1L2RybS9kcm1faW9jdGwuYyAgICAgICAgIHwgIDEyICsrCj4gICBkcml2ZXJzL2dw dS9kcm0vZHJtX3N5bmNvYmouYyAgICAgICB8IDM3NCArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKPiAgIGluY2x1ZGUvZHJtL2RybVAuaCAgICAgICAgICAgICAgICAgIHwgICA1 ICsKPiAgIGluY2x1ZGUvZHJtL2RybV9kcnYuaCAgICAgICAgICAgICAgIHwgICAxICsKPiAgIGlu Y2x1ZGUvZHJtL2RybV9zeW5jb2JqLmggICAgICAgICAgIHwgMTA0ICsrKysrKysrKysKPiAgIGlu Y2x1ZGUvdWFwaS9kcm0vZHJtLmggICAgICAgICAgICAgIHwgIDI1ICsrKwo+ICAgMTEgZmlsZXMg Y2hhbmdlZCwgNTUyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiAgIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZHJtX3N5bmNvYmouYwo+ICAgY3JlYXRlIG1vZGUgMTAw NjQ0IGluY2x1ZGUvZHJtL2RybV9zeW5jb2JqLmgKPgo+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0 aW9uL2dwdS9kcm0taW50ZXJuYWxzLnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1pbnRlcm5h bHMucnN0Cj4gaW5kZXggZTM1OTIwZC4uMmVhM2JjZSAxMDA2NDQKPiAtLS0gYS9Eb2N1bWVudGF0 aW9uL2dwdS9kcm0taW50ZXJuYWxzLnJzdAo+ICsrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1p bnRlcm5hbHMucnN0Cj4gQEAgLTk4LDYgKzk4LDkgQEAgRFJJVkVSX0FUT01JQwo+ICAgICAgIGlt cGxlbWVudCBhcHByb3ByaWF0ZSBvYmotPmF0b21pY19nZXRfcHJvcGVydHkoKSB2ZnVuY3MgZm9y IGFueQo+ICAgICAgIG1vZGVzZXQgb2JqZWN0cyB3aXRoIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0 aWVzLgo+ICAgCj4gK0RSSVZFUl9TWU5DT0JKCj4gKyAgICBEcml2ZXIgc3VwcG9ydCBkcm0gc3lu YyBvYmplY3RzLgo+ICsKPiAgIE1ham9yLCBNaW5vciBhbmQgUGF0Y2hsZXZlbAo+ICAgfn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+Cj4gICAKPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9n cHUvZHJtLW1tLnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1tbS5yc3QKPiBpbmRleCBmNTc2 MGIxLi4yOGFlYmU4IDEwMDY0NAo+IC0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1tbS5yc3QK PiArKysgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tbW0ucnN0Cj4gQEAgLTQ4MywzICs0ODMsOSBA QCBEUk0gQ2FjaGUgSGFuZGxpbmcKPiAgIAo+ICAgLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1 L2RybS9kcm1fY2FjaGUuYwo+ICAgICAgOmV4cG9ydDoKPiArCj4gK0RSTSBTeW5jIE9iamVjdHMK PiArPT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gKwo+ICsuLiBrZXJuZWwtZG9jOjogZHJp dmVycy9ncHUvZHJtL2RybV9zeW5jb2JqLmMKPiArICAgOmV4cG9ydDoKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gaW5k ZXggM2VlOTU3OS4uYjVlNTY1YyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZp bGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiBAQCAtMTYsNyArMTYsNyBAQCBk cm0teSAgICAgICA6PQlkcm1fYXV0aC5vIGRybV9idWZzLm8gZHJtX2NhY2hlLm8gXAo+ICAgCQlk cm1fZnJhbWVidWZmZXIubyBkcm1fY29ubmVjdG9yLm8gZHJtX2JsZW5kLm8gXAo+ICAgCQlkcm1f ZW5jb2Rlci5vIGRybV9tb2RlX29iamVjdC5vIGRybV9wcm9wZXJ0eS5vIFwKPiAgIAkJZHJtX3Bs YW5lLm8gZHJtX2NvbG9yX21nbXQubyBkcm1fcHJpbnQubyBcCj4gLQkJZHJtX2R1bWJfYnVmZmVy cy5vIGRybV9tb2RlX2NvbmZpZy5vCj4gKwkJZHJtX2R1bWJfYnVmZmVycy5vIGRybV9tb2RlX2Nv bmZpZy5vIGRybV9zeW5jb2JqLm8KPiAgIAo+ICAgZHJtLSQoQ09ORklHX0RSTV9MSUJfUkFORE9N KSArPSBsaWIvZHJtX3JhbmRvbS5vCj4gICBkcm0tJChDT05GSUdfRFJNX1ZNKSArPSBkcm1fdm0u bwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYyBiL2RyaXZlcnMvZ3B1 L2RybS9kcm1fZm9wcy5jCj4gaW5kZXggYWZkZjViMS4uOWE2MWRmMiAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9w cy5jCj4gQEAgLTIxOSw2ICsyMTksOSBAQCBzdGF0aWMgaW50IGRybV9vcGVuX2hlbHBlcihzdHJ1 Y3QgZmlsZSAqZmlscCwgc3RydWN0IGRybV9taW5vciAqbWlub3IpCj4gICAJaWYgKGRybV9jb3Jl X2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfR0VNKSkKPiAgIAkJZHJtX2dlbV9vcGVuKGRldiwg cHJpdik7Cj4gICAKPiArCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX1NZ TkNPQkopKQo+ICsJCWRybV9zeW5jb2JqX29wZW4ocHJpdik7Cj4gKwo+ICAgCWlmIChkcm1fY29y ZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX1BSSU1FKSkKPiAgIAkJZHJtX3ByaW1lX2luaXRf ZmlsZV9wcml2YXRlKCZwcml2LT5wcmltZSk7Cj4gICAKPiBAQCAtMjY2LDYgKzI2OSw4IEBAIHN0 YXRpYyBpbnQgZHJtX29wZW5faGVscGVyKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZHJtX21p bm9yICptaW5vcikKPiAgIG91dF9wcmltZV9kZXN0cm95Ogo+ICAgCWlmIChkcm1fY29yZV9jaGVj a19mZWF0dXJlKGRldiwgRFJJVkVSX1BSSU1FKSkKPiAgIAkJZHJtX3ByaW1lX2Rlc3Ryb3lfZmls ZV9wcml2YXRlKCZwcml2LT5wcmltZSk7Cj4gKwlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShk ZXYsIERSSVZFUl9TWU5DT0JKKSkKPiArCQlkcm1fc3luY29ial9yZWxlYXNlKHByaXYpOwo+ICAg CWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0dFTSkpCj4gICAJCWRybV9n ZW1fcmVsZWFzZShkZXYsIHByaXYpOwo+ICAgCXB1dF9waWQocHJpdi0+cGlkKTsKPiBAQCAtNDAw LDYgKzQwNSw5IEBAIGludCBkcm1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qg ZmlsZSAqZmlscCkKPiAgIAkJZHJtX3Byb3BlcnR5X2Rlc3Ryb3lfdXNlcl9ibG9icyhkZXYsIGZp bGVfcHJpdik7Cj4gICAJfQo+ICAgCj4gKwlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYs IERSSVZFUl9TWU5DT0JKKSkKPiArCQlkcm1fc3luY29ial9yZWxlYXNlKGZpbGVfcHJpdik7Cj4g Kwo+ICAgCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0dFTSkpCj4gICAJ CWRybV9nZW1fcmVsZWFzZShkZXYsIGZpbGVfcHJpdik7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2RybV9pbnRlcm5hbC5oIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pbnRlcm5h bC5oCj4gaW5kZXggZjM3Mzg4Yy4uNDRlZjkwMyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vZHJtX2ludGVybmFsLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ludGVybmFsLmgK PiBAQCAtMTQyLDQgKzE0MiwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBkcm1fZGVidWdmc19jcnRj X2NyY19hZGQoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICAgewo+ICAgCXJldHVybiAwOwo+ICAg fQo+ICsKPiAgICNlbmRpZgo+ICsKPiArLyogZHJtX3N5bmNvYmouYyAqLwo+ICt2b2lkIGRybV9z eW5jb2JqX29wZW4oc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUpOwo+ICt2b2lkIGRybV9z eW5jb2JqX3JlbGVhc2Uoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUpOwo+ICtpbnQgZHJt X3N5bmNvYmpfY3JlYXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEs Cj4gKwkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUpOwo+ICtpbnQgZHJtX3N5 bmNvYmpfZGVzdHJveV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSk7Cj4gK2ludCBkcm1fc3lu Y29ial9oYW5kbGVfdG9fZmRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0 YSwKPiArCQkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlKTsKPiAraW50IGRybV9z eW5jb2JqX2ZkX3RvX2hhbmRsZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLAo+ICsJCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUpOwo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvY3RsLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lv Y3RsLmMKPiBpbmRleCBhN2M2MWMyLi42ZGE3YWRjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9kcm1faW9jdGwuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW9jdGwuYwo+IEBA IC0yNDAsNiArMjQwLDkgQEAgc3RhdGljIGludCBkcm1fZ2V0Y2FwKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV8KPiAgIAkJcmVxLT52YWx1 ZSB8PSBkZXYtPmRyaXZlci0+cHJpbWVfZmRfdG9faGFuZGxlID8gRFJNX1BSSU1FX0NBUF9JTVBP UlQgOiAwOwo+ICAgCQlyZXEtPnZhbHVlIHw9IGRldi0+ZHJpdmVyLT5wcmltZV9oYW5kbGVfdG9f ZmQgPyBEUk1fUFJJTUVfQ0FQX0VYUE9SVCA6IDA7Cj4gICAJCXJldHVybiAwOwo+ICsJY2FzZSBE Uk1fQ0FQX1NZTkNPQko6Cj4gKwkJcmVxLT52YWx1ZSA9IGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUo ZGV2LCBEUklWRVJfU1lOQ09CSik7Cj4gKwkJcmV0dXJuIDA7Cj4gICAJfQo+ICAgCj4gICAJLyog T3RoZXIgY2FwcyBvbmx5IHdvcmsgd2l0aCBLTVMgZHJpdmVycyAqLwo+IEBAIC02NDEsNiArNjQ0 LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgZHJtX2lvY3Rsc1tdID0g ewo+ICAgCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfQVRPTUlDLCBkcm1fbW9kZV9hdG9t aWNfaW9jdGwsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1d8RFJNX1VOTE9DS0VEKSwKPiAg IAlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0NSRUFURVBST1BCTE9CLCBkcm1fbW9kZV9j cmVhdGVibG9iX2lvY3RsLCBEUk1fQ09OVFJPTF9BTExPV3xEUk1fVU5MT0NLRUQpLAo+ICAgCURS TV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfREVTVFJPWVBST1BCTE9CLCBkcm1fbW9kZV9kZXN0 cm95YmxvYl9pb2N0bCwgRFJNX0NPTlRST0xfQUxMT1d8RFJNX1VOTE9DS0VEKSwKPiArCj4gKwlE Uk1fSU9DVExfREVGKERSTV9JT0NUTF9TWU5DT0JKX0NSRUFURSwgZHJtX3N5bmNvYmpfY3JlYXRl X2lvY3RsLAo+ICsJCSAgICAgIERSTV9VTkxPQ0tFRHxEUk1fUkVOREVSX0FMTE9XKSwKPiArCURS TV9JT0NUTF9ERUYoRFJNX0lPQ1RMX1NZTkNPQkpfREVTVFJPWSwgZHJtX3N5bmNvYmpfZGVzdHJv eV9pb2N0bCwKPiArCQkgICAgICBEUk1fVU5MT0NLRUR8RFJNX1JFTkRFUl9BTExPVyksCj4gKwlE Uk1fSU9DVExfREVGKERSTV9JT0NUTF9TWU5DT0JKX0hBTkRMRV9UT19GRCwgZHJtX3N5bmNvYmpf aGFuZGxlX3RvX2ZkX2lvY3RsLAo+ICsJCSAgICAgIERSTV9VTkxPQ0tFRHxEUk1fUkVOREVSX0FM TE9XKSwKPiArCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX1NZTkNPQkpfRkRfVE9fSEFORExFLCBk cm1fc3luY29ial9mZF90b19oYW5kbGVfaW9jdGwsCj4gKwkJICAgICAgRFJNX1VOTE9DS0VEfERS TV9SRU5ERVJfQUxMT1cpLAo+ICAgfTsKPiAgIAo+ICAgI2RlZmluZSBEUk1fQ09SRV9JT0NUTF9D T1VOVAlBUlJBWV9TSVpFKCBkcm1faW9jdGxzICkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2RybV9zeW5jb2JqLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5bmNvYmouYwo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZTZhOTlkNAo+IC0tLSAvZGV2L251bGwK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5bmNvYmouYwo+IEBAIC0wLDAgKzEsMzc0IEBA Cj4gKy8qCj4gKyAqIENvcHlyaWdodCAyMDE3IFJlZCBIYXQKPiArICoKPiArICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1 cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4g KyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNs dWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBT b2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQg SE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZU V0FSRS4KPiArICoKPiArICogQXV0aG9yczoKPiArICoKPiArICovCj4gKwo+ICsvKioKPiArICog RE9DOiBPdmVydmlldwo+ICsgKgo+ICsgKiBEUk0gc3luY2hyb25pc2F0aW9uIG9iamVjdHMgKHN5 bmNvYmopIGFyZSBhIHBlcnNpc3RlbnQgb2JqZWN0cywKPiArICogdGhhdCBjb250YWluIGFuIG9w dGlvbmFsIGZlbmNlLiBUaGUgZmVuY2UgY2FuIGJlIHVwZGF0ZWQgd2l0aCBhIG5ldwo+ICsgKiBm ZW5jZSwgb3IgYmUgTlVMTC4KPiArICoKPiArICogc3luY29iaidzIGNhbiBiZSBleHBvcnQgdG8g ZmQncyBhbmQgYmFjaywgdGhlc2UgZmQncyBhcmUgb3BhcXVlIGFuZAo+ICsgKiBoYXZlIG5vIG90 aGVyIHVzZSBjYXNlLCBleGNlcHQgcGFzc2luZyB0aGUgc3luY29iaiBiZXR3ZWVuIHByb2Nlc3Nl cy4KPiArICoKPiArICogVE9ETzogc3luY19maWxlIGludGVyYWN0aW9ucywgd2FpdGluZwo+ICsg Kgo+ICsgKiBUaGVpciBwcmltYXJ5IHVzZS1jYXNlIGlzIHRvIGltcGxlbWVudCBWdWxrYW4gZmVu Y2VzIGFuZCBzZW1hcGhvcmVzLgo+ICsgKgo+ICsgKiBzeW5jb2JqIGhhdmUgYSBrcmVmIHJlZmVy ZW5jZSBjb3VudCwgYnV0IGFsc28gaGF2ZSBhbiBvcHRpb25hbCBmaWxlLgo+ICsgKiBUaGUgZmls ZSBpcyBvbmx5IGNyZWF0ZWQgb25jZSB0aGUgc3luY29iaiBpcyBleHBvcnRlZC4KPiArICogVGhl IGZpbGUgdGFrZXMgYSByZWZlcmVuY2Ugb24gdGhlIGtyZWYuCj4gKyAqLwo+ICsKPiArI2luY2x1 ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9mcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvYW5vbl9pbm9kZXMuaD4KPiArCj4gKyNpbmNs dWRlICJkcm1faW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgPGRybS9kcm1fc3luY29iai5oPgo+ICsK PiArc3RhdGljIHN0cnVjdCBkcm1fc3luY29iaiAqZHJtX3N5bmNvYmpfZ2V0KHN0cnVjdCBkcm1f ZmlsZSAqZmlsZV9wcml2YXRlLAo+ICsJCQkJCSAgIHUzMiBoYW5kbGUpCj4gK3sKPiArCXN0cnVj dCBkcm1fc3luY29iaiAqc3luY29iajsKPiArCj4gKwlzcGluX2xvY2soJmZpbGVfcHJpdmF0ZS0+ c3luY29ial90YWJsZV9sb2NrKTsKPiArCj4gKwkvKiBDaGVjayBpZiB3ZSBjdXJyZW50bHkgaGF2 ZSBhIHJlZmVyZW5jZSBvbiB0aGUgb2JqZWN0ICovCj4gKwlzeW5jb2JqID0gaWRyX2ZpbmQoJmZp bGVfcHJpdmF0ZS0+c3luY29ial9pZHIsIGhhbmRsZSk7Cj4gKwlpZiAoc3luY29iaikKPiArCQlk cm1fc3luY29ial9yZWZlcmVuY2Uoc3luY29iaik7Cj4gKwo+ICsJc3Bpbl91bmxvY2soJmZpbGVf cHJpdmF0ZS0+c3luY29ial90YWJsZV9sb2NrKTsKPiArCj4gKwlyZXR1cm4gc3luY29iajsKPiAr fQo+ICsKPiArLyoqCj4gKyAqIGRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2UgLSBsb29rdXAgYW5k IHJlcGxhY2UgZmVuY2UgaW4gYSBzeW5jIG9iamVjdC4KPiArICogQGZpbGVfcHJpdmF0ZSAtIGRy bSBmaWxlIHByaXZhdGUgcG9pbnRlci4KPiArICogQGhhbmRsZSAtIHN5bmNvYmogaGFuZGxlIHRv IGxvb2t1cAo+ICsgKiBAZmVuY2UgLSBmZW5jZSB0byBpbnN0YWxsIGluIHN5bmMgZmlsZS4KPiAr ICogUmV0dXJuczoKPiArICogMCBvbiBzdWNjZXNzLCBvciAtRUlOVkFMIHdoZW4gdGhlIGhhbmRs ZSBkb2Vzbid0IHBvaW50IGF0IGEgdmFsaWQgc2VtIGZpbGUuCj4gKyAqCj4gKyAqIFRoaXMgbG9v a3MgdXAgYSBzeW5jIG9iamVjdCBhbmQgcmVwbGFjZXMgdGhlIGZlbmNlIG9uIGl0LCBmcmVlaW5n Cj4gKyAqIHRoZSBvbGQgb25lLgo+ICsgKi8KPiAraW50IGRybV9zeW5jb2JqX3JlcGxhY2VfZmVu Y2Uoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUsCj4gKwkJCSAgICAgIHUzMiBoYW5kbGUs Cj4gKwkJCSAgICAgIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJt X3N5bmNvYmogKnN5bmNvYmogPSBkcm1fc3luY29ial9nZXQoZmlsZV9wcml2YXRlLCBoYW5kbGUp Owo+ICsJc3RydWN0IGRtYV9mZW5jZSAqb2xkX2ZlbmNlID0gTlVMTDsKPiArCj4gKwlpZiAoIXN5 bmNvYmopCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJaWYgKGZlbmNlKQo+ICsJCWRtYV9m ZW5jZV9nZXQoZmVuY2UpOwo+ICsJb2xkX2ZlbmNlID0geGNoZygmc3luY29iai0+ZmVuY2UsIGZl bmNlKTsKPiArCj4gKwlkbWFfZmVuY2VfcHV0KG9sZF9mZW5jZSk7Cj4gKwlkcm1fc3luY29ial91 bnJlZmVyZW5jZShzeW5jb2JqKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICtFWFBPUlRfU1lN Qk9MKGRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2UpOwo+ICsKPiAraW50IGRybV9zeW5jb2JqX2Zl bmNlX2dldChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSwKPiArCQkJICB1MzIgaGFuZGxl LAo+ICsJCQkgIHN0cnVjdCBkbWFfZmVuY2UgKipmZW5jZSkKPiArewo+ICsJc3RydWN0IGRybV9z eW5jb2JqICpzeW5jb2JqID0gZHJtX3N5bmNvYmpfZ2V0KGZpbGVfcHJpdmF0ZSwgaGFuZGxlKTsK PiArCWludCByZXQgPSAwOwo+ICsKPiArCWlmICghc3luY29iaikKPiArCQlyZXR1cm4gLUVJTlZB TDsKPiArCj4gKwkqZmVuY2UgPSBkbWFfZmVuY2VfZ2V0KHN5bmNvYmotPmZlbmNlKTsKPiArCWlm ICghKmZlbmNlKSB7Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArCX0KPiArCWRybV9zeW5jb2JqX3Vu cmVmZXJlbmNlKHN5bmNvYmopOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICtFWFBPUlRfU1lNQk9M KGRybV9zeW5jb2JqX2ZlbmNlX2dldCk7Cj4gKwo+ICt2b2lkIGRybV9zeW5jb2JqX2ZyZWUoc3Ry dWN0IGtyZWYgKmtyZWYpCj4gK3sKPiArCXN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiA9IGNv bnRhaW5lcl9vZihrcmVmLAo+ICsJCQkJCQkgICBzdHJ1Y3QgZHJtX3N5bmNvYmosCj4gKwkJCQkJ CSAgIHJlZmNvdW50KTsKaGVyZSBsb3N0cyBmZW5jZSBsZWFrLCBzaG91bGQgYmU6CmRybV9mZW5j ZV9wdXQoc3luY29iai0+ZmVuY2UpOwoKUmVnYXJkcywKRGF2aWQgWmhvdQo+ICsJa2ZyZWUoc3lu Y29iaik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHJtX3N5bmNvYmpfY3JlYXRlKHN0cnVjdCBk cm1fZmlsZSAqZmlsZV9wcml2YXRlLAo+ICsJCQkgICAgICB1MzIgKmhhbmRsZSkKPiArewo+ICsJ aW50IHJldDsKPiArCXN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iajsKPiArCj4gKwlzeW5jb2Jq ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRybV9zeW5jb2JqKSwgR0ZQX0tFUk5FTCk7Cj4gKwlp ZiAoIXN5bmNvYmopCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJbXV0ZXhfaW5pdCgmc3lu Y29iai0+ZmlsZV9sb2NrKTsKPiArCWtyZWZfaW5pdCgmc3luY29iai0+cmVmY291bnQpOwo+ICsK PiArCWlkcl9wcmVsb2FkKEdGUF9LRVJORUwpOwo+ICsJc3Bpbl9sb2NrKCZmaWxlX3ByaXZhdGUt PnN5bmNvYmpfdGFibGVfbG9jayk7Cj4gKwlyZXQgPSBpZHJfYWxsb2MoJmZpbGVfcHJpdmF0ZS0+ c3luY29ial9pZHIsIHN5bmNvYmosIDEsIDAsIEdGUF9OT1dBSVQpOwo+ICsJc3Bpbl91bmxvY2so JmZpbGVfcHJpdmF0ZS0+c3luY29ial90YWJsZV9sb2NrKTsKPiArCj4gKwlpZHJfcHJlbG9hZF9l bmQoKTsKPiArCj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRybV9zeW5jb2JqX3VucmVmZXJlbmNl KHN5bmNvYmopOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJKmhhbmRsZSA9IHJldDsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRybV9zeW5jb2JqX2Rlc3Ryb3ko c3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUsCj4gKwkJCSAgICAgICB1MzIgaGFuZGxlKQo+ ICt7Cj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmo7Cj4gKwo+ICsJc3Bpbl9sb2NrKCZm aWxlX3ByaXZhdGUtPnN5bmNvYmpfdGFibGVfbG9jayk7Cj4gKwlzeW5jb2JqID0gaWRyX3JlbW92 ZSgmZmlsZV9wcml2YXRlLT5zeW5jb2JqX2lkciwgaGFuZGxlKTsKPiArCXNwaW5fdW5sb2NrKCZm aWxlX3ByaXZhdGUtPnN5bmNvYmpfdGFibGVfbG9jayk7Cj4gKwo+ICsJaWYgKCFzeW5jb2JqKQo+ ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWRybV9zeW5jb2JqX3VucmVmZXJlbmNlKHN5bmNv YmopOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHJtX3N5bmNvYmpfZmls ZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmogPSBmaWxlLT5wcml2YXRlX2RhdGE7Cj4gKwo+ ICsJZHJtX3N5bmNvYmpfdW5yZWZlcmVuY2Uoc3luY29iaik7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHJtX3N5bmNvYmpfZmls ZV9mb3BzID0gewo+ICsJLnJlbGVhc2UgPSBkcm1fc3luY29ial9maWxlX3JlbGVhc2UsCj4gK307 Cj4gKwo+ICtzdGF0aWMgaW50IGRybV9zeW5jb2JqX2FsbG9jX2ZpbGVfbG9ja2VkKHN0cnVjdCBk cm1fc3luY29iaiAqc3luY29iaikKPiArewo+ICsJc3RydWN0IGZpbGUgKmZpbGUgPSBhbm9uX2lu b2RlX2dldGZpbGUoInN5bmNvYmpfZmlsZSIsCj4gKwkJCQkJICAgICAgICZkcm1fc3luY29ial9m aWxlX2ZvcHMsCj4gKwkJCQkJICAgICAgIHN5bmNvYmosIDApOwo+ICsJaWYgKElTX0VSUihmaWxl KSkKPiArCQlyZXR1cm4gUFRSX0VSUihmaWxlKTsKPiArCj4gKwkvKiB0aGUgZmlsZSBob2xkcyBh IHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0ICovCj4gKwlkcm1fc3luY29ial9yZWZlcmVuY2Uoc3lu Y29iaik7Cj4gKwlzeW5jb2JqLT5maWxlID0gZmlsZTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiArc3RhdGljIGludCBkcm1fc3luY29ial9oYW5kbGVfdG9fZmQoc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXZhdGUsCj4gKwkJCQkgICAgdTMyIGhhbmRsZSwgaW50ICpwX2ZkKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmogPSBkcm1fc3luY29ial9nZXQoZmlsZV9wcml2 YXRlLCBoYW5kbGUpOwo+ICsJaW50IHJldDsKPiArCWludCBmZDsKPiArCj4gKwlpZiAoIXN5bmNv YmopCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJZmQgPSBnZXRfdW51c2VkX2ZkX2ZsYWdz KE9fQ0xPRVhFQyk7Cj4gKwlpZiAoZmQgPCAwKSB7Cj4gKwkJZHJtX3N5bmNvYmpfdW5yZWZlcmVu Y2Uoc3luY29iaik7Cj4gKwkJcmV0dXJuIGZkOwo+ICsJfQo+ICsKPiArCW11dGV4X2xvY2soJnN5 bmNvYmotPmZpbGVfbG9jayk7Cj4gKwlpZiAoIXN5bmNvYmotPmZpbGUpIHsKPiArCQlyZXQgPSBk cm1fc3luY29ial9hbGxvY19maWxlX2xvY2tlZChzeW5jb2JqKTsKPiArCQlpZiAocmV0KQo+ICsJ CQlnb3RvIG91dF91bmxvY2s7Cj4gKwl9Cj4gKwlmZF9pbnN0YWxsKGZkLCBzeW5jb2JqLT5maWxl KTsKPiArCW11dGV4X3VubG9jaygmc3luY29iai0+ZmlsZV9sb2NrKTsKPiArCWRybV9zeW5jb2Jq X3VucmVmZXJlbmNlKHN5bmNvYmopOwo+ICsJKnBfZmQgPSBmZDsKPiArCXJldHVybiAwOwo+ICtv dXRfdW5sb2NrOgo+ICsJcHV0X3VudXNlZF9mZChmZCk7Cj4gKwltdXRleF91bmxvY2soJnN5bmNv YmotPmZpbGVfbG9jayk7Cj4gKwlkcm1fc3luY29ial91bnJlZmVyZW5jZShzeW5jb2JqKTsKPiAr CXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX3N5bmNvYmogKmRybV9z eW5jb2JqX2ZkZ2V0KGludCBmZCkKPiArewo+ICsJc3RydWN0IGZpbGUgKmZpbGUgPSBmZ2V0KGZk KTsKPiArCj4gKwlpZiAoIWZpbGUpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwlpZiAoZmlsZS0+Zl9v cCAhPSAmZHJtX3N5bmNvYmpfZmlsZV9mb3BzKQo+ICsJCWdvdG8gZXJyOwo+ICsKPiArCXJldHVy biBmaWxlLT5wcml2YXRlX2RhdGE7Cj4gK2VycjoKPiArCWZwdXQoZmlsZSk7Cj4gKwlyZXR1cm4g TlVMTDsKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgZHJtX3N5bmNvYmpfZmRfdG9faGFuZGxlKHN0 cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlLAo+ICsJCQkJICAgIGludCBmZCwgdTMyICpoYW5k bGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiA9IGRybV9zeW5jb2JqX2Zk Z2V0KGZkKTsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKCFzeW5jb2JqKQo+ICsJCXJldHVybiAt RUlOVkFMOwo+ICsKPiArCS8qIHRha2UgYSByZWZlcmVuY2UgdG8gcHV0IGluIHRoZSBpZHIgKi8K PiArCWRybV9zeW5jb2JqX3JlZmVyZW5jZShzeW5jb2JqKTsKPiArCj4gKwlpZHJfcHJlbG9hZChH RlBfS0VSTkVMKTsKPiArCXNwaW5fbG9jaygmZmlsZV9wcml2YXRlLT5zeW5jb2JqX3RhYmxlX2xv Y2spOwo+ICsJcmV0ID0gaWRyX2FsbG9jKCZmaWxlX3ByaXZhdGUtPnN5bmNvYmpfaWRyLCBzeW5j b2JqLCAxLCAwLCBHRlBfTk9XQUlUKTsKPiArCXNwaW5fdW5sb2NrKCZmaWxlX3ByaXZhdGUtPnN5 bmNvYmpfdGFibGVfbG9jayk7Cj4gKwlpZHJfcHJlbG9hZF9lbmQoKTsKPiArCj4gKwlpZiAocmV0 IDwgMCkgewo+ICsJCWZwdXQoc3luY29iai0+ZmlsZSk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0K PiArCSpoYW5kbGUgPSByZXQ7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGRy bV9zeW5jb2JqX29wZW4gLSBpbml0YWxpemVzIHN5bmNvYmogZmlsZS1wcml2YXRlIHN0cnVjdHVy ZXMgYXQgZGV2bm9kZSBvcGVuIHRpbWUKPiArICogQGRldjogZHJtX2RldmljZSB3aGljaCBpcyBi ZWluZyBvcGVuZWQgYnkgdXNlcnNwYWNlCj4gKyAqIEBmaWxlX3ByaXZhdGU6IGRybSBmaWxlLXBy aXZhdGUgc3RydWN0dXJlIHRvIHNldCB1cAo+ICsgKgo+ICsgKiBDYWxsZWQgYXQgZGV2aWNlIG9w ZW4gdGltZSwgc2V0cyB1cCB0aGUgc3RydWN0dXJlIGZvciBoYW5kbGluZyByZWZjb3VudGluZwo+ ICsgKiBvZiBzeW5jIG9iamVjdHMuCj4gKyAqLwo+ICt2b2lkCj4gK2RybV9zeW5jb2JqX29wZW4o c3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUpCj4gK3sKPiArCWlkcl9pbml0KCZmaWxlX3By aXZhdGUtPnN5bmNvYmpfaWRyKTsKPiArCXNwaW5fbG9ja19pbml0KCZmaWxlX3ByaXZhdGUtPnN5 bmNvYmpfdGFibGVfbG9jayk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQKPiArZHJtX3N5bmNvYmpf cmVsZWFzZV9oYW5kbGUoaW50IGlkLCB2b2lkICpwdHIsIHZvaWQgKmRhdGEpCj4gK3sKPiArCXN0 cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiA9IHB0cjsKPiArCj4gKwlkcm1fc3luY29ial91bnJl ZmVyZW5jZShzeW5jb2JqKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZHJt X3N5bmNvYmpfcmVsZWFzZSAtIHJlbGVhc2UgZmlsZS1wcml2YXRlIHN5bmMgb2JqZWN0IHJlc291 cmNlcwo+ICsgKiBAZGV2OiBkcm1fZGV2aWNlIHdoaWNoIGlzIGJlaW5nIGNsb3NlZCBieSB1c2Vy c3BhY2UKPiArICogQGZpbGVfcHJpdmF0ZTogZHJtIGZpbGUtcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8g Y2xlYW4gdXAKPiArICoKPiArICogQ2FsbGVkIGF0IGNsb3NlIHRpbWUgd2hlbiB0aGUgZmlscCBp cyBnb2luZyBhd2F5Lgo+ICsgKgo+ICsgKiBSZWxlYXNlcyBhbnkgcmVtYWluaW5nIHJlZmVyZW5j ZXMgb24gb2JqZWN0cyBieSB0aGlzIGZpbHAuCj4gKyAqLwo+ICt2b2lkCj4gK2RybV9zeW5jb2Jq X3JlbGVhc2Uoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUpCj4gK3sKPiArCWlkcl9mb3Jf ZWFjaCgmZmlsZV9wcml2YXRlLT5zeW5jb2JqX2lkciwKPiArCQkgICAgICZkcm1fc3luY29ial9y ZWxlYXNlX2hhbmRsZSwgZmlsZV9wcml2YXRlKTsKPiArCWlkcl9kZXN0cm95KCZmaWxlX3ByaXZh dGUtPnN5bmNvYmpfaWRyKTsKPiArfQo+ICsKPiAraW50Cj4gK2RybV9zeW5jb2JqX2NyZWF0ZV9p b2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICsJCQkgc3RydWN0IGRy bV9maWxlICpmaWxlX3ByaXZhdGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fc3luY29ial9jcmVhdGUg KmFyZ3MgPSBkYXRhOwo+ICsKPiArCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERS SVZFUl9TWU5DT0JKKSkKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwkvKiBubyB2YWxpZCBm bGFncyB5ZXQgKi8KPiArCWlmIChhcmdzLT5mbGFncykKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiAr Cj4gKwlyZXR1cm4gZHJtX3N5bmNvYmpfY3JlYXRlKGZpbGVfcHJpdmF0ZSwKPiArCQkJCSAgJmFy Z3MtPmhhbmRsZSk7Cj4gK30KPiArCj4gK2ludAo+ICtkcm1fc3luY29ial9kZXN0cm95X2lvY3Rs KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gKwkJCSAgc3RydWN0IGRybV9m aWxlICpmaWxlX3ByaXZhdGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fc3luY29ial9kZXN0cm95ICph cmdzID0gZGF0YTsKPiArCj4gKwlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklW RVJfU1lOQ09CSikpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJLyogbWFrZSBzdXJlIHBh ZGRpbmcgaXMgZW1wdHkgKi8KPiArCWlmIChhcmdzLT5wYWQpCj4gKwkJcmV0dXJuIC1FSU5WQUw7 Cj4gKwlyZXR1cm4gZHJtX3N5bmNvYmpfZGVzdHJveShmaWxlX3ByaXZhdGUsIGFyZ3MtPmhhbmRs ZSk7Cj4gK30KPiArCj4gK2ludAo+ICtkcm1fc3luY29ial9oYW5kbGVfdG9fZmRfaW9jdGwoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiArCQkJCSAgIHN0cnVjdCBkcm1fZmls ZSAqZmlsZV9wcml2YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfaGFuZGxlICphcmdz ID0gZGF0YTsKPiArCj4gKwlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJf U1lOQ09CSikpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJcmV0dXJuIGRybV9zeW5jb2Jq X2hhbmRsZV90b19mZChmaWxlX3ByaXZhdGUsIGFyZ3MtPmhhbmRsZSwKPiArCQkJCQkmYXJncy0+ ZmQpOwo+ICt9Cj4gKwo+ICtpbnQKPiArZHJtX3N5bmNvYmpfZmRfdG9faGFuZGxlX2lvY3RsKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gKwkJCQkgICBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdmF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9zeW5jb2JqX2hhbmRsZSAqYXJn cyA9IGRhdGE7Cj4gKwo+ICsJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVS X1NZTkNPQkopKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCXJldHVybiBkcm1fc3luY29i al9mZF90b19oYW5kbGUoZmlsZV9wcml2YXRlLCBhcmdzLT5mZCwKPiArCQkJCQkmYXJncy0+aGFu ZGxlKTsKPiArfQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1QLmggYi9pbmNsdWRlL2Ry bS9kcm1QLmgKPiBpbmRleCA2MTA1YzA1Li4xZDQ4ZjZmIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUv ZHJtL2RybVAuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybVAuaAo+IEBAIC00MDUsNiArNDA1LDEx IEBAIHN0cnVjdCBkcm1fZmlsZSB7Cj4gICAJLyoqIExvY2sgZm9yIHN5bmNocm9uaXphdGlvbiBv ZiBhY2Nlc3MgdG8gb2JqZWN0X2lkci4gKi8KPiAgIAlzcGlubG9ja190IHRhYmxlX2xvY2s7Cj4g ICAKPiArCS8qKiBNYXBwaW5nIG9mIHN5bmMgb2JqZWN0IGhhbmRsZXMgdG8gb2JqZWN0IHBvaW50 ZXJzLiAqLwo+ICsJc3RydWN0IGlkciBzeW5jb2JqX2lkcjsKPiArCS8qKiBMb2NrIGZvciBzeW5j aHJvbml6YXRpb24gb2YgYWNjZXNzIHRvIHN5bmNvYmpfaWRyLiAqLwo+ICsJc3BpbmxvY2tfdCBz eW5jb2JqX3RhYmxlX2xvY2s7Cj4gKwo+ICAgCXN0cnVjdCBmaWxlICpmaWxwOwo+ICAgCXZvaWQg KmRyaXZlcl9wcml2Owo+ICAgCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9kcnYuaCBi L2luY2x1ZGUvZHJtL2RybV9kcnYuaAo+IGluZGV4IDU2OTlmNDIuLjQ4ZmYwNmIgMTAwNjQ0Cj4g LS0tIGEvaW5jbHVkZS9kcm0vZHJtX2Rydi5oCj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2Rydi5o Cj4gQEAgLTUzLDYgKzUzLDcgQEAgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iOwo+ICAgI2Rl ZmluZSBEUklWRVJfUkVOREVSCQkJMHg4MDAwCj4gICAjZGVmaW5lIERSSVZFUl9BVE9NSUMJCQkw eDEwMDAwCj4gICAjZGVmaW5lIERSSVZFUl9LTVNfTEVHQUNZX0NPTlRFWFQJMHgyMDAwMAo+ICsj ZGVmaW5lIERSSVZFUl9TWU5DT0JKICAgICAgICAgICAgICAgICAgMHg0MDAwMAo+ICAgCj4gICAv KioKPiAgICAqIHN0cnVjdCBkcm1fZHJpdmVyIC0gRFJNIGRyaXZlciBzdHJ1Y3R1cmUKPiBkaWZm IC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3N5bmNvYmouaCBiL2luY2x1ZGUvZHJtL2RybV9zeW5j b2JqLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjNjYzQyYjcKPiAt LS0gL2Rldi9udWxsCj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX3N5bmNvYmouaAo+IEBAIC0wLDAg KzEsMTA0IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE3IFJlZCBIYXQKPiArICoKPiAr ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt aXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBz aGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBP UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBP VEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAq IElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICogQXV0aG9yczoKPiArICoKPiArICovCj4gKyNp Zm5kZWYgX19EUk1fU1lOQ09CSl9IX18KPiArI2RlZmluZSBfX0RSTV9TWU5DT0JKX0hfXwo+ICsK PiArI2luY2x1ZGUgImxpbnV4L2RtYS1mZW5jZS5oIgo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBk cm1fc3luY29iaiAtIHN5bmMgb2JqZWN0Lgo+ICsgKgo+ICsgKiBUaGlzIHN0cnVjdHVyZSBkZWZp bmVzIGEgZ2VuZXJpYyBzeW5jIG9iamVjdCB3aGljaCB3cmFwcyBhIGRtYSBmZW5jZS4KPiArICov Cj4gK3N0cnVjdCBkcm1fc3luY29iaiB7Cj4gKwkvKioKPiArCSAqIEByZWZjb3VudDoKPiArCSAq Cj4gKwkgKiBSZWZlcmVuY2UgY291bnQgb2YgdGhpcyBvYmplY3QuCj4gKwkgKi8KPiArCXN0cnVj dCBrcmVmIHJlZmNvdW50Owo+ICsJLyoqCj4gKwkgKiBAZmVuY2U6Cj4gKwkgKiBOVUxMIG9yIGEg cG9pbnRlciB0byB0aGUgZmVuY2UgYm91bmQgdG8gdGhpcyBvYmplY3QuCj4gKwkgKi8KPiArCXN0 cnVjdCBkbWFfZmVuY2UgKmZlbmNlOwo+ICsJLyoqCj4gKwkgKiBAZmlsZV9sb2NrCj4gKwkgKiBt dXRleCBwcm90ZWN0aW5nIHRoZSBzdHJ1Y3QgZmlsZSBwb2ludGVyLgo+ICsJICovCj4gKwlzdHJ1 Y3QgbXV0ZXggZmlsZV9sb2NrOwo+ICsJLyoqCj4gKwkgKiBAZmlsZQo+ICsJICogYSBmaWxlIGJh Y2tpbmcgZm9yIHRoaXMgc3luY29iai4KPiArCSAqLwo+ICsJc3RydWN0IGZpbGUgKmZpbGU7Cj4g K307Cj4gKwo+ICt2b2lkIGRybV9zeW5jb2JqX2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpOwo+ICsK PiArLyoqCj4gKyAqIGRybV9nZW1fb2JqZWN0X3JlZmVyZW5jZSAtIGFjcXVpcmUgYSBHRU0gQk8g cmVmZXJlbmNlCj4gKyAqIEBvYmo6IEdFTSBidWZmZXIgb2JqZWN0Cj4gKyAqCj4gKyAqIFRoaXMg YWNxdWlyZXMgYWRkaXRpb25hbCByZWZlcmVuY2UgdG8gQG9iai4gSXQgaXMgaWxsZWdhbCB0byBj YWxsIHRoaXMKPiArICogd2l0aG91dCBhbHJlYWR5IGhvbGRpbmcgYSByZWZlcmVuY2UuIE5vIGxv Y2tzIHJlcXVpcmVkLgo+ICsgKi8KPiArc3RhdGljIGlubGluZSB2b2lkCj4gK2RybV9zeW5jb2Jq X3JlZmVyZW5jZShzdHJ1Y3QgZHJtX3N5bmNvYmogKm9iaikKPiArewo+ICsJa3JlZl9nZXQoJm9i ai0+cmVmY291bnQpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogX19kcm1fZ2VtX29iamVjdF91bnJl ZmVyZW5jZSAtIHJhdyBmdW5jdGlvbiB0byByZWxlYXNlIGEgR0VNIEJPIHJlZmVyZW5jZQo+ICsg KiBAb2JqOiBHRU0gYnVmZmVyIG9iamVjdAo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIG1l YW50IHRvIGJlIHVzZWQgYnkgZHJpdmVycyB3aGljaCBhcmUgbm90IGVuY3VtYmVyZWQgd2l0aAo+ ICsgKiAmZHJtX2RldmljZS5zdHJ1Y3RfbXV0ZXggbGVnYWN5IGxvY2tpbmcgYW5kIHdoaWNoIGFy ZSB1c2luZyB0aGUKPiArICogZ2VtX2ZyZWVfb2JqZWN0X3VubG9ja2VkIGNhbGxiYWNrLiBJdCBh dm9pZHMgYWxsIHRoZSBsb2NraW5nIGNoZWNrcyBhbmQKPiArICogbG9ja2luZyBvdmVyaGVhZCBv ZiBkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgpIGFuZAo+ICsgKiBkcm1fZ2VtX29iamVjdF91 bnJlZmVyZW5jZV91bmxvY2tlZCgpLgo+ICsgKgo+ICsgKiBEcml2ZXJzIHNob3VsZCBuZXZlciBj YWxsIHRoaXMgZGlyZWN0bHkgaW4gdGhlaXIgY29kZS4gSW5zdGVhZCB0aGV5IHNob3VsZAo+ICsg KiB3cmFwIGl0IHVwIGludG8gYSBgYGRyaXZlcl9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHN0cnVj dCBkcml2ZXJfZ2VtX29iamVjdAo+ICsgKiAqb2JqKWBgIHdyYXBwZXIgZnVuY3Rpb24sIGFuZCB1 c2UgdGhhdC4gU2hhcmVkIGNvZGUgc2hvdWxkIG5ldmVyIGNhbGwgdGhpcywgdG8KPiArICogYXZv aWQgYnJlYWtpbmcgZHJpdmVycyBieSBhY2NpZGVudCB3aGljaCBzdGlsbCBkZXBlbmQgdXBvbgo+ ICsgKiAmZHJtX2RldmljZS5zdHJ1Y3RfbXV0ZXggbG9ja2luZy4KPiArICovCj4gK3N0YXRpYyBp bmxpbmUgdm9pZAo+ICtkcm1fc3luY29ial91bnJlZmVyZW5jZShzdHJ1Y3QgZHJtX3N5bmNvYmog Km9iaikKPiArewo+ICsJa3JlZl9wdXQoJm9iai0+cmVmY291bnQsIGRybV9zeW5jb2JqX2ZyZWUp Owo+ICt9Cj4gKwo+ICtpbnQgZHJtX3N5bmNvYmpfZmVuY2VfZ2V0KHN0cnVjdCBkcm1fZmlsZSAq ZmlsZV9wcml2YXRlLAo+ICsJCQkgIHUzMiBoYW5kbGUsCj4gKwkJCSAgc3RydWN0IGRtYV9mZW5j ZSAqKmZlbmNlKTsKPiAraW50IGRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2Uoc3RydWN0IGRybV9m aWxlICpmaWxlX3ByaXZhdGUsCj4gKwkJCSAgICAgIHUzMiBoYW5kbGUsCj4gKwkJCSAgICAgIHN0 cnVjdCBkbWFfZmVuY2UgKmZlbmNlKTsKPiArCj4gKyNlbmRpZgo+IGRpZmYgLS1naXQgYS9pbmNs dWRlL3VhcGkvZHJtL2RybS5oIGIvaW5jbHVkZS91YXBpL2RybS9kcm0uaAo+IGluZGV4IGIyYzUy ODQuLmRkMGI5OWMgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm0uaAo+ICsrKyBi L2luY2x1ZGUvdWFwaS9kcm0vZHJtLmgKPiBAQCAtNjQ3LDYgKzY0Nyw3IEBAIHN0cnVjdCBkcm1f Z2VtX29wZW4gewo+ICAgI2RlZmluZSBEUk1fQ0FQX0NVUlNPUl9IRUlHSFQJCTB4OQo+ICAgI2Rl ZmluZSBEUk1fQ0FQX0FEREZCMl9NT0RJRklFUlMJMHgxMAo+ICAgI2RlZmluZSBEUk1fQ0FQX1BB R0VfRkxJUF9UQVJHRVQJMHgxMQo+ICsjZGVmaW5lIERSTV9DQVBfU1lOQ09CSgkJMHgxMwo+ICAg Cj4gICAvKiogRFJNX0lPQ1RMX0dFVF9DQVAgaW9jdGwgYXJndW1lbnQgdHlwZSAqLwo+ICAgc3Ry dWN0IGRybV9nZXRfY2FwIHsKPiBAQCAtNjk2LDYgKzY5NywyNSBAQCBzdHJ1Y3QgZHJtX3ByaW1l X2hhbmRsZSB7Cj4gICAJX19zMzIgZmQ7Cj4gICB9Owo+ICAgCj4gK3N0cnVjdCBkcm1fc3luY29i al9jcmVhdGUgewo+ICsJX191MzIgaGFuZGxlOwo+ICsJX191MzIgZmxhZ3M7Cj4gK307Cj4gKwo+ ICtzdHJ1Y3QgZHJtX3N5bmNvYmpfZGVzdHJveSB7Cj4gKwlfX3UzMiBoYW5kbGU7Cj4gKwlfX3Uz MiBwYWQ7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHJtX3N5bmNvYmpfaGFuZGxlIHsKPiArCV9fdTMy IGhhbmRsZTsKPiArCS8qKiBGbGFncy4uIG9ubHkgYXBwbGljYWJsZSBmb3IgaGFuZGxlLT5mZCAq Lwo+ICsJX191MzIgZmxhZ3M7Cj4gKwo+ICsJX19zMzIgZmQ7Cj4gKwlfX3UzMiBwYWQ7Cj4gK307 Cj4gKwo+ICAgI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCj4gICB9Cj4gICAjZW5kaWYKPiBAQCAt ODE0LDYgKzgzNCwxMSBAQCBleHRlcm4gIkMiIHsKPiAgICNkZWZpbmUgRFJNX0lPQ1RMX01PREVf Q1JFQVRFUFJPUEJMT0IJRFJNX0lPV1IoMHhCRCwgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9ibG9i KQo+ICAgI2RlZmluZSBEUk1fSU9DVExfTU9ERV9ERVNUUk9ZUFJPUEJMT0IJRFJNX0lPV1IoMHhC RSwgc3RydWN0IGRybV9tb2RlX2Rlc3Ryb3lfYmxvYikKPiAgIAo+ICsjZGVmaW5lIERSTV9JT0NU TF9TWU5DT0JKX0NSRUFURQlEUk1fSU9XUigweEJGLCBzdHJ1Y3QgZHJtX3N5bmNvYmpfY3JlYXRl KQo+ICsjZGVmaW5lIERSTV9JT0NUTF9TWU5DT0JKX0RFU1RST1kJRFJNX0lPV1IoMHhDMCwgc3Ry dWN0IGRybV9zeW5jb2JqX2Rlc3Ryb3kpCj4gKyNkZWZpbmUgRFJNX0lPQ1RMX1NZTkNPQkpfSEFO RExFX1RPX0ZECURSTV9JT1dSKDB4QzEsIHN0cnVjdCBkcm1fc3luY29ial9oYW5kbGUpCj4gKyNk ZWZpbmUgRFJNX0lPQ1RMX1NZTkNPQkpfRkRfVE9fSEFORExFCURSTV9JT1dSKDB4QzIsIHN0cnVj dCBkcm1fc3luY29ial9oYW5kbGUpCj4gKwo+ICAgLyoqCj4gICAgKiBEZXZpY2Ugc3BlY2lmaWMg aW9jdGxzIHNob3VsZCBvbmx5IGJlIGluIHRoZWlyIHJlc3BlY3RpdmUgaGVhZGVycwo+ICAgICog VGhlIGRldmljZSBzcGVjaWZpYyBpb2N0bCByYW5nZSBpcyBmcm9tIDB4NDAgdG8gMHg5Zi4KCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFp bGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=