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:36:17 +0800 Message-ID: <59003FE1.1080905@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 CSAgIHJlZmNvdW50KTsKaGVyZSBmZW5jZSB3aWxsIGxlYWssIHNob3VsZCBiZToKZHJtX2ZlbmNl X3B1dChzeW5jb2JqLT5mZW5jZSk7CgpSZWdhcmRzLApEYXZpZCBaaG91Cj4gKwlrZnJlZShzeW5j b2JqKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcm1fc3luY29ial9jcmVhdGUoc3RydWN0IGRy bV9maWxlICpmaWxlX3ByaXZhdGUsCj4gKwkJCSAgICAgIHUzMiAqaGFuZGxlKQo+ICt7Cj4gKwlp bnQgcmV0Owo+ICsJc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqOwo+ICsKPiArCXN5bmNvYmog PSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX3N5bmNvYmopLCBHRlBfS0VSTkVMKTsKPiArCWlm ICghc3luY29iaikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwltdXRleF9pbml0KCZzeW5j b2JqLT5maWxlX2xvY2spOwo+ICsJa3JlZl9pbml0KCZzeW5jb2JqLT5yZWZjb3VudCk7Cj4gKwo+ ICsJaWRyX3ByZWxvYWQoR0ZQX0tFUk5FTCk7Cj4gKwlzcGluX2xvY2soJmZpbGVfcHJpdmF0ZS0+ c3luY29ial90YWJsZV9sb2NrKTsKPiArCXJldCA9IGlkcl9hbGxvYygmZmlsZV9wcml2YXRlLT5z eW5jb2JqX2lkciwgc3luY29iaiwgMSwgMCwgR0ZQX05PV0FJVCk7Cj4gKwlzcGluX3VubG9jaygm ZmlsZV9wcml2YXRlLT5zeW5jb2JqX3RhYmxlX2xvY2spOwo+ICsKPiArCWlkcl9wcmVsb2FkX2Vu ZCgpOwo+ICsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZHJtX3N5bmNvYmpfdW5yZWZlcmVuY2Uo c3luY29iaik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwkqaGFuZGxlID0gcmV0Owo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHJtX3N5bmNvYmpfZGVzdHJveShz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSwKPiArCQkJICAgICAgIHUzMiBoYW5kbGUpCj4g K3sKPiArCXN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iajsKPiArCj4gKwlzcGluX2xvY2soJmZp bGVfcHJpdmF0ZS0+c3luY29ial90YWJsZV9sb2NrKTsKPiArCXN5bmNvYmogPSBpZHJfcmVtb3Zl KCZmaWxlX3ByaXZhdGUtPnN5bmNvYmpfaWRyLCBoYW5kbGUpOwo+ICsJc3Bpbl91bmxvY2soJmZp bGVfcHJpdmF0ZS0+c3luY29ial90YWJsZV9sb2NrKTsKPiArCj4gKwlpZiAoIXN5bmNvYmopCj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJZHJtX3N5bmNvYmpfdW5yZWZlcmVuY2Uoc3luY29i aik7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcm1fc3luY29ial9maWxl X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCj4gK3sKPiAr CXN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKPiArCj4g Kwlkcm1fc3luY29ial91bnJlZmVyZW5jZShzeW5jb2JqKTsKPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcm1fc3luY29ial9maWxl X2ZvcHMgPSB7Cj4gKwkucmVsZWFzZSA9IGRybV9zeW5jb2JqX2ZpbGVfcmVsZWFzZSwKPiArfTsK PiArCj4gK3N0YXRpYyBpbnQgZHJtX3N5bmNvYmpfYWxsb2NfZmlsZV9sb2NrZWQoc3RydWN0IGRy bV9zeW5jb2JqICpzeW5jb2JqKQo+ICt7Cj4gKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGFub25faW5v ZGVfZ2V0ZmlsZSgic3luY29ial9maWxlIiwKPiArCQkJCQkgICAgICAgJmRybV9zeW5jb2JqX2Zp bGVfZm9wcywKPiArCQkJCQkgICAgICAgc3luY29iaiwgMCk7Cj4gKwlpZiAoSVNfRVJSKGZpbGUp KQo+ICsJCXJldHVybiBQVFJfRVJSKGZpbGUpOwo+ICsKPiArCS8qIHRoZSBmaWxlIGhvbGRzIGEg cmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgKi8KPiArCWRybV9zeW5jb2JqX3JlZmVyZW5jZShzeW5j b2JqKTsKPiArCXN5bmNvYmotPmZpbGUgPSBmaWxlOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGRybV9zeW5jb2JqX2hhbmRsZV90b19mZChzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdmF0ZSwKPiArCQkJCSAgICB1MzIgaGFuZGxlLCBpbnQgKnBfZmQpCj4gK3sKPiAr CXN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiA9IGRybV9zeW5jb2JqX2dldChmaWxlX3ByaXZh dGUsIGhhbmRsZSk7Cj4gKwlpbnQgcmV0Owo+ICsJaW50IGZkOwo+ICsKPiArCWlmICghc3luY29i aikKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlmZCA9IGdldF91bnVzZWRfZmRfZmxhZ3Mo T19DTE9FWEVDKTsKPiArCWlmIChmZCA8IDApIHsKPiArCQlkcm1fc3luY29ial91bnJlZmVyZW5j ZShzeW5jb2JqKTsKPiArCQlyZXR1cm4gZmQ7Cj4gKwl9Cj4gKwo+ICsJbXV0ZXhfbG9jaygmc3lu Y29iai0+ZmlsZV9sb2NrKTsKPiArCWlmICghc3luY29iai0+ZmlsZSkgewo+ICsJCXJldCA9IGRy bV9zeW5jb2JqX2FsbG9jX2ZpbGVfbG9ja2VkKHN5bmNvYmopOwo+ICsJCWlmIChyZXQpCj4gKwkJ CWdvdG8gb3V0X3VubG9jazsKPiArCX0KPiArCWZkX2luc3RhbGwoZmQsIHN5bmNvYmotPmZpbGUp Owo+ICsJbXV0ZXhfdW5sb2NrKCZzeW5jb2JqLT5maWxlX2xvY2spOwo+ICsJZHJtX3N5bmNvYmpf dW5yZWZlcmVuY2Uoc3luY29iaik7Cj4gKwkqcF9mZCA9IGZkOwo+ICsJcmV0dXJuIDA7Cj4gK291 dF91bmxvY2s6Cj4gKwlwdXRfdW51c2VkX2ZkKGZkKTsKPiArCW11dGV4X3VubG9jaygmc3luY29i ai0+ZmlsZV9sb2NrKTsKPiArCWRybV9zeW5jb2JqX3VucmVmZXJlbmNlKHN5bmNvYmopOwo+ICsJ cmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1fc3luY29iaiAqZHJtX3N5 bmNvYmpfZmRnZXQoaW50IGZkKQo+ICt7Cj4gKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGZnZXQoZmQp Owo+ICsKPiArCWlmICghZmlsZSkKPiArCQlyZXR1cm4gTlVMTDsKPiArCWlmIChmaWxlLT5mX29w ICE9ICZkcm1fc3luY29ial9maWxlX2ZvcHMpCj4gKwkJZ290byBlcnI7Cj4gKwo+ICsJcmV0dXJu IGZpbGUtPnByaXZhdGVfZGF0YTsKPiArZXJyOgo+ICsJZnB1dChmaWxlKTsKPiArCXJldHVybiBO VUxMOwo+ICt9Owo+ICsKPiArc3RhdGljIGludCBkcm1fc3luY29ial9mZF90b19oYW5kbGUoc3Ry dWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUsCj4gKwkJCQkgICAgaW50IGZkLCB1MzIgKmhhbmRs ZSkKPiArewo+ICsJc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqID0gZHJtX3N5bmNvYmpfZmRn ZXQoZmQpOwo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoIXN5bmNvYmopCj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4gKwo+ICsJLyogdGFrZSBhIHJlZmVyZW5jZSB0byBwdXQgaW4gdGhlIGlkciAqLwo+ ICsJZHJtX3N5bmNvYmpfcmVmZXJlbmNlKHN5bmNvYmopOwo+ICsKPiArCWlkcl9wcmVsb2FkKEdG UF9LRVJORUwpOwo+ICsJc3Bpbl9sb2NrKCZmaWxlX3ByaXZhdGUtPnN5bmNvYmpfdGFibGVfbG9j ayk7Cj4gKwlyZXQgPSBpZHJfYWxsb2MoJmZpbGVfcHJpdmF0ZS0+c3luY29ial9pZHIsIHN5bmNv YmosIDEsIDAsIEdGUF9OT1dBSVQpOwo+ICsJc3Bpbl91bmxvY2soJmZpbGVfcHJpdmF0ZS0+c3lu Y29ial90YWJsZV9sb2NrKTsKPiArCWlkcl9wcmVsb2FkX2VuZCgpOwo+ICsKPiArCWlmIChyZXQg PCAwKSB7Cj4gKwkJZnB1dChzeW5jb2JqLT5maWxlKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ ICsJKmhhbmRsZSA9IHJldDsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZHJt X3N5bmNvYmpfb3BlbiAtIGluaXRhbGl6ZXMgc3luY29iaiBmaWxlLXByaXZhdGUgc3RydWN0dXJl cyBhdCBkZXZub2RlIG9wZW4gdGltZQo+ICsgKiBAZGV2OiBkcm1fZGV2aWNlIHdoaWNoIGlzIGJl aW5nIG9wZW5lZCBieSB1c2Vyc3BhY2UKPiArICogQGZpbGVfcHJpdmF0ZTogZHJtIGZpbGUtcHJp dmF0ZSBzdHJ1Y3R1cmUgdG8gc2V0IHVwCj4gKyAqCj4gKyAqIENhbGxlZCBhdCBkZXZpY2Ugb3Bl biB0aW1lLCBzZXRzIHVwIHRoZSBzdHJ1Y3R1cmUgZm9yIGhhbmRsaW5nIHJlZmNvdW50aW5nCj4g KyAqIG9mIHN5bmMgb2JqZWN0cy4KPiArICovCj4gK3ZvaWQKPiArZHJtX3N5bmNvYmpfb3Blbihz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSkKPiArewo+ICsJaWRyX2luaXQoJmZpbGVfcHJp dmF0ZS0+c3luY29ial9pZHIpOwo+ICsJc3Bpbl9sb2NrX2luaXQoJmZpbGVfcHJpdmF0ZS0+c3lu Y29ial90YWJsZV9sb2NrKTsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICtkcm1fc3luY29ial9y ZWxlYXNlX2hhbmRsZShpbnQgaWQsIHZvaWQgKnB0ciwgdm9pZCAqZGF0YSkKPiArewo+ICsJc3Ry dWN0IGRybV9zeW5jb2JqICpzeW5jb2JqID0gcHRyOwo+ICsKPiArCWRybV9zeW5jb2JqX3VucmVm ZXJlbmNlKHN5bmNvYmopOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBkcm1f c3luY29ial9yZWxlYXNlIC0gcmVsZWFzZSBmaWxlLXByaXZhdGUgc3luYyBvYmplY3QgcmVzb3Vy Y2VzCj4gKyAqIEBkZXY6IGRybV9kZXZpY2Ugd2hpY2ggaXMgYmVpbmcgY2xvc2VkIGJ5IHVzZXJz cGFjZQo+ICsgKiBAZmlsZV9wcml2YXRlOiBkcm0gZmlsZS1wcml2YXRlIHN0cnVjdHVyZSB0byBj bGVhbiB1cAo+ICsgKgo+ICsgKiBDYWxsZWQgYXQgY2xvc2UgdGltZSB3aGVuIHRoZSBmaWxwIGlz IGdvaW5nIGF3YXkuCj4gKyAqCj4gKyAqIFJlbGVhc2VzIGFueSByZW1haW5pbmcgcmVmZXJlbmNl cyBvbiBvYmplY3RzIGJ5IHRoaXMgZmlscC4KPiArICovCj4gK3ZvaWQKPiArZHJtX3N5bmNvYmpf cmVsZWFzZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSkKPiArewo+ICsJaWRyX2Zvcl9l YWNoKCZmaWxlX3ByaXZhdGUtPnN5bmNvYmpfaWRyLAo+ICsJCSAgICAgJmRybV9zeW5jb2JqX3Jl bGVhc2VfaGFuZGxlLCBmaWxlX3ByaXZhdGUpOwo+ICsJaWRyX2Rlc3Ryb3koJmZpbGVfcHJpdmF0 ZS0+c3luY29ial9pZHIpOwo+ICt9Cj4gKwo+ICtpbnQKPiArZHJtX3N5bmNvYmpfY3JlYXRlX2lv Y3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gKwkJCSBzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGVfcHJpdmF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9zeW5jb2JqX2NyZWF0ZSAq YXJncyA9IGRhdGE7Cj4gKwo+ICsJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJ VkVSX1NZTkNPQkopKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCS8qIG5vIHZhbGlkIGZs YWdzIHlldCAqLwo+ICsJaWYgKGFyZ3MtPmZsYWdzKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsK PiArCXJldHVybiBkcm1fc3luY29ial9jcmVhdGUoZmlsZV9wcml2YXRlLAo+ICsJCQkJICAmYXJn cy0+aGFuZGxlKTsKPiArfQo+ICsKPiAraW50Cj4gK2RybV9zeW5jb2JqX2Rlc3Ryb3lfaW9jdGwo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiArCQkJICBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdmF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9zeW5jb2JqX2Rlc3Ryb3kgKmFy Z3MgPSBkYXRhOwo+ICsKPiArCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZF Ul9TWU5DT0JKKSkKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwkvKiBtYWtlIHN1cmUgcGFk ZGluZyBpcyBlbXB0eSAqLwo+ICsJaWYgKGFyZ3MtPnBhZCkKPiArCQlyZXR1cm4gLUVJTlZBTDsK PiArCXJldHVybiBkcm1fc3luY29ial9kZXN0cm95KGZpbGVfcHJpdmF0ZSwgYXJncy0+aGFuZGxl KTsKPiArfQo+ICsKPiAraW50Cj4gK2RybV9zeW5jb2JqX2hhbmRsZV90b19mZF9pb2N0bChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICsJCQkJICAgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXZhdGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fc3luY29ial9oYW5kbGUgKmFyZ3Mg PSBkYXRhOwo+ICsKPiArCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9T WU5DT0JKKSkKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwlyZXR1cm4gZHJtX3N5bmNvYmpf aGFuZGxlX3RvX2ZkKGZpbGVfcHJpdmF0ZSwgYXJncy0+aGFuZGxlLAo+ICsJCQkJCSZhcmdzLT5m ZCk7Cj4gK30KPiArCj4gK2ludAo+ICtkcm1fc3luY29ial9mZF90b19oYW5kbGVfaW9jdGwoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiArCQkJCSAgIHN0cnVjdCBkcm1fZmls ZSAqZmlsZV9wcml2YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfaGFuZGxlICphcmdz ID0gZGF0YTsKPiArCj4gKwlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJf U1lOQ09CSikpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJcmV0dXJuIGRybV9zeW5jb2Jq X2ZkX3RvX2hhbmRsZShmaWxlX3ByaXZhdGUsIGFyZ3MtPmZkLAo+ICsJCQkJCSZhcmdzLT5oYW5k bGUpOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybVAuaCBiL2luY2x1ZGUvZHJt L2RybVAuaAo+IGluZGV4IDYxMDVjMDUuLjFkNDhmNmYgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9k cm0vZHJtUC5oCj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtUC5oCj4gQEAgLTQwNSw2ICs0MDUsMTEg QEAgc3RydWN0IGRybV9maWxlIHsKPiAgIAkvKiogTG9jayBmb3Igc3luY2hyb25pemF0aW9uIG9m IGFjY2VzcyB0byBvYmplY3RfaWRyLiAqLwo+ICAgCXNwaW5sb2NrX3QgdGFibGVfbG9jazsKPiAg IAo+ICsJLyoqIE1hcHBpbmcgb2Ygc3luYyBvYmplY3QgaGFuZGxlcyB0byBvYmplY3QgcG9pbnRl cnMuICovCj4gKwlzdHJ1Y3QgaWRyIHN5bmNvYmpfaWRyOwo+ICsJLyoqIExvY2sgZm9yIHN5bmNo cm9uaXphdGlvbiBvZiBhY2Nlc3MgdG8gc3luY29ial9pZHIuICovCj4gKwlzcGlubG9ja190IHN5 bmNvYmpfdGFibGVfbG9jazsKPiArCj4gICAJc3RydWN0IGZpbGUgKmZpbHA7Cj4gICAJdm9pZCAq ZHJpdmVyX3ByaXY7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2Rydi5oIGIv aW5jbHVkZS9kcm0vZHJtX2Rydi5oCj4gaW5kZXggNTY5OWY0Mi4uNDhmZjA2YiAxMDA2NDQKPiAt LS0gYS9pbmNsdWRlL2RybS9kcm1fZHJ2LmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZHJ2LmgK PiBAQCAtNTMsNiArNTMsNyBAQCBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWI7Cj4gICAjZGVm aW5lIERSSVZFUl9SRU5ERVIJCQkweDgwMDAKPiAgICNkZWZpbmUgRFJJVkVSX0FUT01JQwkJCTB4 MTAwMDAKPiAgICNkZWZpbmUgRFJJVkVSX0tNU19MRUdBQ1lfQ09OVEVYVAkweDIwMDAwCj4gKyNk ZWZpbmUgRFJJVkVSX1NZTkNPQkogICAgICAgICAgICAgICAgICAweDQwMDAwCj4gICAKPiAgIC8q Kgo+ICAgICogc3RydWN0IGRybV9kcml2ZXIgLSBEUk0gZHJpdmVyIHN0cnVjdHVyZQo+IGRpZmYg LS1naXQgYS9pbmNsdWRlL2RybS9kcm1fc3luY29iai5oIGIvaW5jbHVkZS9kcm0vZHJtX3N5bmNv YmouaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uM2NjNDJiNwo+IC0t LSAvZGV2L251bGwKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fc3luY29iai5oCj4gQEAgLTAsMCAr MSwxMDQgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTcgUmVkIEhhdAo+ICsgKgo+ICsg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1p dGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29m dHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNo YWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9S IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICog SU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKiBBdXRob3JzOgo+ICsgKgo+ICsgKi8KPiArI2lm bmRlZiBfX0RSTV9TWU5DT0JKX0hfXwo+ICsjZGVmaW5lIF9fRFJNX1NZTkNPQkpfSF9fCj4gKwo+ ICsjaW5jbHVkZSAibGludXgvZG1hLWZlbmNlLmgiCj4gKwo+ICsvKioKPiArICogc3RydWN0IGRy bV9zeW5jb2JqIC0gc3luYyBvYmplY3QuCj4gKyAqCj4gKyAqIFRoaXMgc3RydWN0dXJlIGRlZmlu ZXMgYSBnZW5lcmljIHN5bmMgb2JqZWN0IHdoaWNoIHdyYXBzIGEgZG1hIGZlbmNlLgo+ICsgKi8K PiArc3RydWN0IGRybV9zeW5jb2JqIHsKPiArCS8qKgo+ICsJICogQHJlZmNvdW50Ogo+ICsJICoK PiArCSAqIFJlZmVyZW5jZSBjb3VudCBvZiB0aGlzIG9iamVjdC4KPiArCSAqLwo+ICsJc3RydWN0 IGtyZWYgcmVmY291bnQ7Cj4gKwkvKioKPiArCSAqIEBmZW5jZToKPiArCSAqIE5VTEwgb3IgYSBw b2ludGVyIHRvIHRoZSBmZW5jZSBib3VuZCB0byB0aGlzIG9iamVjdC4KPiArCSAqLwo+ICsJc3Ry dWN0IGRtYV9mZW5jZSAqZmVuY2U7Cj4gKwkvKioKPiArCSAqIEBmaWxlX2xvY2sKPiArCSAqIG11 dGV4IHByb3RlY3RpbmcgdGhlIHN0cnVjdCBmaWxlIHBvaW50ZXIuCj4gKwkgKi8KPiArCXN0cnVj dCBtdXRleCBmaWxlX2xvY2s7Cj4gKwkvKioKPiArCSAqIEBmaWxlCj4gKwkgKiBhIGZpbGUgYmFj a2luZyBmb3IgdGhpcyBzeW5jb2JqLgo+ICsJICovCj4gKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKPiAr fTsKPiArCj4gK3ZvaWQgZHJtX3N5bmNvYmpfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZik7Cj4gKwo+ ICsvKioKPiArICogZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlIC0gYWNxdWlyZSBhIEdFTSBCTyBy ZWZlcmVuY2UKPiArICogQG9iajogR0VNIGJ1ZmZlciBvYmplY3QKPiArICoKPiArICogVGhpcyBh Y3F1aXJlcyBhZGRpdGlvbmFsIHJlZmVyZW5jZSB0byBAb2JqLiBJdCBpcyBpbGxlZ2FsIHRvIGNh bGwgdGhpcwo+ICsgKiB3aXRob3V0IGFscmVhZHkgaG9sZGluZyBhIHJlZmVyZW5jZS4gTm8gbG9j a3MgcmVxdWlyZWQuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIHZvaWQKPiArZHJtX3N5bmNvYmpf cmVmZXJlbmNlKHN0cnVjdCBkcm1fc3luY29iaiAqb2JqKQo+ICt7Cj4gKwlrcmVmX2dldCgmb2Jq LT5yZWZjb3VudCk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBfX2RybV9nZW1fb2JqZWN0X3VucmVm ZXJlbmNlIC0gcmF3IGZ1bmN0aW9uIHRvIHJlbGVhc2UgYSBHRU0gQk8gcmVmZXJlbmNlCj4gKyAq IEBvYmo6IEdFTSBidWZmZXIgb2JqZWN0Cj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgbWVh bnQgdG8gYmUgdXNlZCBieSBkcml2ZXJzIHdoaWNoIGFyZSBub3QgZW5jdW1iZXJlZCB3aXRoCj4g KyAqICZkcm1fZGV2aWNlLnN0cnVjdF9tdXRleCBsZWdhY3kgbG9ja2luZyBhbmQgd2hpY2ggYXJl IHVzaW5nIHRoZQo+ICsgKiBnZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQgY2FsbGJhY2suIEl0IGF2 b2lkcyBhbGwgdGhlIGxvY2tpbmcgY2hlY2tzIGFuZAo+ICsgKiBsb2NraW5nIG92ZXJoZWFkIG9m IGRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCkgYW5kCj4gKyAqIGRybV9nZW1fb2JqZWN0X3Vu cmVmZXJlbmNlX3VubG9ja2VkKCkuCj4gKyAqCj4gKyAqIERyaXZlcnMgc2hvdWxkIG5ldmVyIGNh bGwgdGhpcyBkaXJlY3RseSBpbiB0aGVpciBjb2RlLiBJbnN0ZWFkIHRoZXkgc2hvdWxkCj4gKyAq IHdyYXAgaXQgdXAgaW50byBhIGBgZHJpdmVyX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uoc3RydWN0 IGRyaXZlcl9nZW1fb2JqZWN0Cj4gKyAqICpvYmopYGAgd3JhcHBlciBmdW5jdGlvbiwgYW5kIHVz ZSB0aGF0LiBTaGFyZWQgY29kZSBzaG91bGQgbmV2ZXIgY2FsbCB0aGlzLCB0bwo+ICsgKiBhdm9p ZCBicmVha2luZyBkcml2ZXJzIGJ5IGFjY2lkZW50IHdoaWNoIHN0aWxsIGRlcGVuZCB1cG9uCj4g KyAqICZkcm1fZGV2aWNlLnN0cnVjdF9tdXRleCBsb2NraW5nLgo+ICsgKi8KPiArc3RhdGljIGlu bGluZSB2b2lkCj4gK2RybV9zeW5jb2JqX3VucmVmZXJlbmNlKHN0cnVjdCBkcm1fc3luY29iaiAq b2JqKQo+ICt7Cj4gKwlrcmVmX3B1dCgmb2JqLT5yZWZjb3VudCwgZHJtX3N5bmNvYmpfZnJlZSk7 Cj4gK30KPiArCj4gK2ludCBkcm1fc3luY29ial9mZW5jZV9nZXQoc3RydWN0IGRybV9maWxlICpm aWxlX3ByaXZhdGUsCj4gKwkJCSAgdTMyIGhhbmRsZSwKPiArCQkJICBzdHJ1Y3QgZG1hX2ZlbmNl ICoqZmVuY2UpOwo+ICtpbnQgZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5jZShzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdmF0ZSwKPiArCQkJICAgICAgdTMyIGhhbmRsZSwKPiArCQkJICAgICAgc3Ry dWN0IGRtYV9mZW5jZSAqZmVuY2UpOwo+ICsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2luY2x1 ZGUvdWFwaS9kcm0vZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJtL2RybS5oCj4gaW5kZXggYjJjNTI4 NC4uZGQwYjk5YyAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2RybS5oCj4gKysrIGIv aW5jbHVkZS91YXBpL2RybS9kcm0uaAo+IEBAIC02NDcsNiArNjQ3LDcgQEAgc3RydWN0IGRybV9n ZW1fb3BlbiB7Cj4gICAjZGVmaW5lIERSTV9DQVBfQ1VSU09SX0hFSUdIVAkJMHg5Cj4gICAjZGVm aW5lIERSTV9DQVBfQURERkIyX01PRElGSUVSUwkweDEwCj4gICAjZGVmaW5lIERSTV9DQVBfUEFH RV9GTElQX1RBUkdFVAkweDExCj4gKyNkZWZpbmUgRFJNX0NBUF9TWU5DT0JKCQkweDEzCj4gICAK PiAgIC8qKiBEUk1fSU9DVExfR0VUX0NBUCBpb2N0bCBhcmd1bWVudCB0eXBlICovCj4gICBzdHJ1 Y3QgZHJtX2dldF9jYXAgewo+IEBAIC02OTYsNiArNjk3LDI1IEBAIHN0cnVjdCBkcm1fcHJpbWVf aGFuZGxlIHsKPiAgIAlfX3MzMiBmZDsKPiAgIH07Cj4gICAKPiArc3RydWN0IGRybV9zeW5jb2Jq X2NyZWF0ZSB7Cj4gKwlfX3UzMiBoYW5kbGU7Cj4gKwlfX3UzMiBmbGFnczsKPiArfTsKPiArCj4g K3N0cnVjdCBkcm1fc3luY29ial9kZXN0cm95IHsKPiArCV9fdTMyIGhhbmRsZTsKPiArCV9fdTMy IHBhZDsKPiArfTsKPiArCj4gK3N0cnVjdCBkcm1fc3luY29ial9oYW5kbGUgewo+ICsJX191MzIg aGFuZGxlOwo+ICsJLyoqIEZsYWdzLi4gb25seSBhcHBsaWNhYmxlIGZvciBoYW5kbGUtPmZkICov Cj4gKwlfX3UzMiBmbGFnczsKPiArCj4gKwlfX3MzMiBmZDsKPiArCV9fdTMyIHBhZDsKPiArfTsK PiArCj4gICAjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKPiAgIH0KPiAgICNlbmRpZgo+IEBAIC04 MTQsNiArODM0LDExIEBAIGV4dGVybiAiQyIgewo+ICAgI2RlZmluZSBEUk1fSU9DVExfTU9ERV9D UkVBVEVQUk9QQkxPQglEUk1fSU9XUigweEJELCBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2Jsb2Ip Cj4gICAjZGVmaW5lIERSTV9JT0NUTF9NT0RFX0RFU1RST1lQUk9QQkxPQglEUk1fSU9XUigweEJF LCBzdHJ1Y3QgZHJtX21vZGVfZGVzdHJveV9ibG9iKQo+ICAgCj4gKyNkZWZpbmUgRFJNX0lPQ1RM X1NZTkNPQkpfQ1JFQVRFCURSTV9JT1dSKDB4QkYsIHN0cnVjdCBkcm1fc3luY29ial9jcmVhdGUp Cj4gKyNkZWZpbmUgRFJNX0lPQ1RMX1NZTkNPQkpfREVTVFJPWQlEUk1fSU9XUigweEMwLCBzdHJ1 Y3QgZHJtX3N5bmNvYmpfZGVzdHJveSkKPiArI2RlZmluZSBEUk1fSU9DVExfU1lOQ09CSl9IQU5E TEVfVE9fRkQJRFJNX0lPV1IoMHhDMSwgc3RydWN0IGRybV9zeW5jb2JqX2hhbmRsZSkKPiArI2Rl ZmluZSBEUk1fSU9DVExfU1lOQ09CSl9GRF9UT19IQU5ETEUJRFJNX0lPV1IoMHhDMiwgc3RydWN0 IGRybV9zeW5jb2JqX2hhbmRsZSkKPiArCj4gICAvKioKPiAgICAqIERldmljZSBzcGVjaWZpYyBp b2N0bHMgc2hvdWxkIG9ubHkgYmUgaW4gdGhlaXIgcmVzcGVjdGl2ZSBoZWFkZXJzCj4gICAgKiBU aGUgZGV2aWNlIHNwZWNpZmljIGlvY3RsIHJhbmdlIGlzIGZyb20gMHg0MCB0byAweDlmLgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWls aW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==