From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v2 2/2] drm/i915: Switch to level-based DDB allocation algorithm (v3) Date: Tue, 11 Dec 2018 18:21:29 +0200 Message-ID: <20181211162129.GT9144@intel.com> References: <20181211010543.13309-1-matthew.d.roper@intel.com> <20181211010543.13309-2-matthew.d.roper@intel.com> <20181211155956.GS9144@intel.com> <20181211161116.GD20196@mdroper-desk.amr.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id BF3476E284 for ; Tue, 11 Dec 2018 16:21:32 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20181211161116.GD20196@mdroper-desk.amr.corp.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Matt Roper Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBEZWMgMTEsIDIwMTggYXQgMDg6MTE6MTZBTSAtMDgwMCwgTWF0dCBSb3BlciB3cm90 ZToKPiBPbiBUdWUsIERlYyAxMSwgMjAxOCBhdCAwNTo1OTo1NlBNICswMjAwLCBWaWxsZSBTeXJq w6Rsw6Qgd3JvdGU6Cj4gPiBPbiBNb24sIERlYyAxMCwgMjAxOCBhdCAwNTowNTo0M1BNIC0wODAw LCBNYXR0IFJvcGVyIHdyb3RlOgo+IC4uLnNuaXAuLi4KPiA+ID4gIAo+ID4gPiAtCWFsbG9jX3Np emUgLT0gdG90YWxfbWluX2Jsb2NrczsKPiA+ID4gLQljc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJf eVtQTEFORV9DVVJTT1JdLnN0YXJ0ID0gYWxsb2MtPmVuZCAtIG1pbmltdW1bUExBTkVfQ1VSU09S XTsKPiA+ID4gLQljc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeVtQTEFORV9DVVJTT1JdLmVuZCA9 IGFsbG9jLT5lbmQ7Cj4gPiA+IC0KPiA+ID4gIAkvKgo+ID4gPiAtCSAqIDIuIERpc3RyaWJ1dGUg dGhlIHJlbWFpbmluZyBzcGFjZSBpbiBwcm9wb3J0aW9uIHRvIHRoZSBhbW91bnQgb2YKPiA+ID4g LQkgKiBkYXRhIGVhY2ggcGxhbmUgbmVlZHMgdG8gZmV0Y2ggZnJvbSBtZW1vcnkuCj4gPiA+IC0J ICoKPiA+ID4gLQkgKiBGSVhNRTogd2UgbWF5IG5vdCBhbGxvY2F0ZSBldmVyeSBzaW5nbGUgYmxv Y2sgaGVyZS4KPiA+ID4gKwkgKiBHcmFudCBlYWNoIHBsYW5lIHRoZSBibG9ja3MgaXQgcmVxdWly ZXMgYXQgdGhlIGhpZ2hlc3QgYWNoaWV2YWJsZQo+ID4gPiArCSAqIHdhdGVybWFyayBsZXZlbCwg cGx1cyBhbiBleHRyYSBzaGFyZSBvZiB0aGUgbGVmdG92ZXIgYmxvY2tzCj4gPiA+ICsJICogcHJv cG9ydGlvbmFsIHRvIGl0cyByZWxhdGl2ZSBkYXRhIHJhdGUuCj4gPiA+ICAJICovCj4gPiA+IC0J aWYgKHRvdGFsX2RhdGFfcmF0ZSA9PSAwKQo+ID4gPiAtCQlyZXR1cm4gMDsKPiA+ID4gLQo+ID4g PiAtCXN0YXJ0ID0gYWxsb2MtPnN0YXJ0Owo+ID4gPiAgCWZvcl9lYWNoX3BsYW5lX2lkX29uX2Ny dGMoaW50ZWxfY3J0YywgcGxhbmVfaWQpIHsKPiA+ID4gLQkJdTY0IGRhdGFfcmF0ZSwgdXZfZGF0 YV9yYXRlOwo+ID4gPiAtCQl1aW50MTZfdCBwbGFuZV9ibG9ja3MsIHV2X3BsYW5lX2Jsb2NrczsK PiA+ID4gKwkJdTY0IHJhdGU7Cj4gPiA+ICsJCXUxNiBleHRyYTsKPiA+ID4gIAo+ID4gPiAgCQlp ZiAocGxhbmVfaWQgPT0gUExBTkVfQ1VSU09SKQo+ID4gPiAgCQkJY29udGludWU7Cj4gPiA+ICsJ CWlmIChhbGxvY19zaXplID09IDApCj4gPiA+ICsJCQljb250aW51ZTsKPiA+IAo+ID4gVGhpcyBz ZWVtcyB3cm9uZy4gV2Ugd291bGRuJ3QgYXNzaWduIGFueXRoaW5nIHRvIHRvdGFsL3V2X3RvdGFs IGZvciB0aGUKPiA+IHBsYW5lIGluIHRoaXMgY2FzZS4gSSBndWVzcyB5b3UgY291bGQgbW92ZSB0 aG9zZSBhc3NpZ25tZW50cyB0byB0aGUKPiA+IGVhcmxpZXIgbG9vcCBhbmQgdGhlbiBzL2NvbnRp bnVlL2JyZWFrLyBoZXJlPyBPciB3ZSBqdXN0IHJlbW92ZSB0aGUKPiA+IGNvbnRpbnVlIGVudGly ZWx5IGFuZCBsZXQgdGhlIGNhbGN1bGF0aW9ucyBnbyB0aHJvdWdoIGV2ZW4gaWYKPiA+IGFsbG9j X3NpemU9PTAuCj4gCj4gSXQgc2hvdWxkIHByb2JhYmx5IGJlIGEgYnJlYWssIHNpbmNlIHdlJ2xs IG9ubHkgaGl0IHRoaXMgb24gYSBsb29wCj4gaXRlcmF0aW9uIHdoZXJlIHdlJ3ZlIGhhbmRlZCB0 aGUgd2hvbGUgcGlwZSBhbGxvY2F0aW9uIGFuZCBhbGwgcmVtYWluaW5nCj4gcGxhbmVzIGFyZSBk aXNhYmxlZC4gVGhlIHRvdGFsIGFuZCB1dl90b3RhbCB3ZXJlIGluaXRpYWxpemVkIHRvIDAgYXQK PiBpbml0aWFsaXphdGlvbiB0aW1lLCBzbyB0aGF0IHNob3VsZCBiZSBjb3JyZWN0IGZvciBhbGwg cmVtYWluaW5nIHBsYW5lcy4KCk5vdCBzdXJlIHdlIGNhbiB0cnVzdCBhbGwgdGhlIHJlbWFpbmlu ZyBwbGFuZXMgdG8gYmUgcmVhbGx5IG9mZiBkdWUgdG8KdGhlIHJvdW5kX3VwLgoKPiAKPiBBbHNv LCB3ZSBjYW4ndCBsZXQgdGhlIGNhbGN1bGF0aW9uIHByb2NlZWQgaGVyZSwgb3RoZXJ3aXNlIHdl J2xsIGRpdmlkZQo+IGJ5IDAgKHRvdGFsX2RhdGFfcmF0ZSkgZmFydGhlciBkb3duIHNpbmNlIHRo YXQgdmFsdWUgYWxzbyBkZWNyZWFzZXMgd2l0aAo+IGVhY2ggbG9vcCBpdGVyYXRpb24uCgpKdXN0 IGtlZXAgdGhlICdpZiAodG90YWxfZGF0YV9yYXRlPT0wKSByZXR1cm4gMDsnIGJlZm9yZSB0aGUg bG9vcD8KCj4gCj4gCj4gTWF0dAo+IAo+ID4gCj4gPiA+ICAKPiA+ID4gLQkJZGF0YV9yYXRlID0g cGxhbmVfZGF0YV9yYXRlW3BsYW5lX2lkXTsKPiA+ID4gKwkJd20gPSAmY3N0YXRlLT53bS5za2wu b3B0aW1hbC5wbGFuZXNbcGxhbmVfaWRdOwo+ID4gPiAgCj4gPiA+IC0JCS8qCj4gPiA+IC0JCSAq IGFsbG9jYXRpb24gZm9yIChwYWNrZWQgZm9ybWF0cykgb3IgKHV2LXBsYW5lIHBhcnQgb2YgcGxh bmFyIGZvcm1hdCk6Cj4gPiA+IC0JCSAqIHByb21vdGUgdGhlIGV4cHJlc3Npb24gdG8gNjQgYml0 cyB0byBhdm9pZCBvdmVyZmxvd2luZywgdGhlCj4gPiA+IC0JCSAqIHJlc3VsdCBpcyA8IGF2YWls YWJsZSBhcyBkYXRhX3JhdGUgLyB0b3RhbF9kYXRhX3JhdGUgPCAxCj4gPiA+IC0JCSAqLwo+ID4g PiAtCQlwbGFuZV9ibG9ja3MgPSBtaW5pbXVtW3BsYW5lX2lkXTsKPiA+ID4gLQkJcGxhbmVfYmxv Y2tzICs9IGRpdjY0X3U2NChhbGxvY19zaXplICogZGF0YV9yYXRlLCB0b3RhbF9kYXRhX3JhdGUp Owo+ID4gPiArCQlyYXRlID0gcGxhbmVfZGF0YV9yYXRlW3BsYW5lX2lkXTsKPiA+ID4gKwkJZXh0 cmEgPSBtaW5fdCh1MTYsIGFsbG9jX3NpemUsCj4gPiA+ICsJCQkgICAgICBESVZfUk9VTkRfVVAo YWxsb2Nfc2l6ZSAqIHJhdGUsIHRvdGFsX2RhdGFfcmF0ZSkpOwoKTmVlZHMgRElWNjRfVTY0X1JP VU5EX1VQKCkgb24gMzJiaXQuCgo+ID4gPiArCQl0b3RhbFtwbGFuZV9pZF0gPSB3bS0+d21bbGV2 ZWxdLnBsYW5lX3Jlc19iICsgZXh0cmE7Cj4gPiA+ICsJCWFsbG9jX3NpemUgLT0gZXh0cmE7Cj4g PiA+ICsJCXRvdGFsX2RhdGFfcmF0ZSAtPSByYXRlOwo+ID4gPiAgCj4gPiA+IC0JCS8qIExlYXZl IGRpc2FibGVkIHBsYW5lcyBhdCAoMCwwKSAqLwo+ID4gPiAtCQlpZiAoZGF0YV9yYXRlKSB7Cj4g PiA+IC0JCQljc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeVtwbGFuZV9pZF0uc3RhcnQgPSBzdGFy dDsKPiA+ID4gLQkJCWNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95W3BsYW5lX2lkXS5lbmQgPSBz dGFydCArIHBsYW5lX2Jsb2NrczsKPiA+ID4gLQkJfQo+ID4gPiArCQlpZiAoYWxsb2Nfc2l6ZSA9 PSAwKQo+ID4gPiArCQkJY29udGludWU7Cj4gPiA+ICAKPiA+ID4gLQkJc3RhcnQgKz0gcGxhbmVf YmxvY2tzOwo+ID4gPiArCQlyYXRlID0gdXZfcGxhbmVfZGF0YV9yYXRlW3BsYW5lX2lkXTsKPiA+ ID4gKwkJZXh0cmEgPSBtaW5fdCh1MTYsIGFsbG9jX3NpemUsCj4gPiA+ICsJCQkgICAgICBESVZf Uk9VTkRfVVAoYWxsb2Nfc2l6ZSAqIHJhdGUsIHRvdGFsX2RhdGFfcmF0ZSkpOwo+ID4gPiArCQl1 dl90b3RhbFtwbGFuZV9pZF0gPSB3bS0+dXZfd21bbGV2ZWxdLnBsYW5lX3Jlc19iICsgZXh0cmE7 Cj4gPiA+ICsJCWFsbG9jX3NpemUgLT0gZXh0cmE7Cj4gPiA+ICsJCXRvdGFsX2RhdGFfcmF0ZSAt PSByYXRlOwo+ID4gPiArCX0KPiA+ID4gKwlXQVJOX09OKGFsbG9jX3NpemUgIT0gMCB8fCB0b3Rh bF9kYXRhX3JhdGUgIT0gMCk7Cj4gPiA+ICAKPiA+ID4gLQkJLyogQWxsb2NhdGUgRERCIGZvciBV ViBwbGFuZSBmb3IgcGxhbmFyIGZvcm1hdC9OVjEyICovCj4gPiA+IC0JCXV2X2RhdGFfcmF0ZSA9 IHV2X3BsYW5lX2RhdGFfcmF0ZVtwbGFuZV9pZF07Cj4gPiA+ICsJLyogU2V0IHRoZSBhY3R1YWwg RERCIHN0YXJ0L2VuZCBwb2ludHMgZm9yIGVhY2ggcGxhbmUgKi8KPiA+ID4gKwlzdGFydCA9IGFs bG9jLT5zdGFydDsKPiA+ID4gKwlmb3JfZWFjaF9wbGFuZV9pZF9vbl9jcnRjKGludGVsX2NydGMs IHBsYW5lX2lkKSB7Cj4gPiA+ICsJCXN0cnVjdCBza2xfZGRiX2VudHJ5ICpwbGFuZV9hbGxvYywg KnV2X3BsYW5lX2FsbG9jOwo+ID4gPiAgCj4gPiA+IC0JCXV2X3BsYW5lX2Jsb2NrcyA9IHV2X21p bmltdW1bcGxhbmVfaWRdOwo+ID4gPiAtCQl1dl9wbGFuZV9ibG9ja3MgKz0gZGl2NjRfdTY0KGFs bG9jX3NpemUgKiB1dl9kYXRhX3JhdGUsIHRvdGFsX2RhdGFfcmF0ZSk7Cj4gPiA+ICsJCWlmIChw bGFuZV9pZCA9PSBQTEFORV9DVVJTT1IpCj4gPiA+ICsJCQljb250aW51ZTsKPiA+ID4gKwo+ID4g PiArCQlwbGFuZV9hbGxvYyA9ICZjc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeVtwbGFuZV9pZF07 Cj4gPiA+ICsJCXV2X3BsYW5lX2FsbG9jID0gJmNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl91dltw bGFuZV9pZF07Cj4gPiA+ICAKPiA+ID4gIAkJLyogR2VuMTErIHVzZXMgYSBzZXBhcmF0ZSBwbGFu ZSBmb3IgVVYgd2F0ZXJtYXJrcyAqLwo+ID4gPiAtCQlXQVJOX09OKElOVEVMX0dFTihkZXZfcHJp dikgPj0gMTEgJiYgdXZfcGxhbmVfYmxvY2tzKTsKPiA+ID4gKwkJV0FSTl9PTihJTlRFTF9HRU4o ZGV2X3ByaXYpID49IDExICYmIHV2X3RvdGFsW3BsYW5lX2lkXSk7Cj4gPiA+ICsKPiA+ID4gKwkJ LyogTGVhdmUgZGlzYWJsZWQgcGxhbmVzIGF0ICgwLDApICovCj4gPiA+ICsJCWlmICh0b3RhbFtw bGFuZV9pZF0pIHsKPiA+ID4gKwkJCXBsYW5lX2FsbG9jLT5zdGFydCA9IHN0YXJ0Owo+ID4gPiAr CQkJcGxhbmVfYWxsb2MtPmVuZCA9IHN0YXJ0ICs9IHRvdGFsW3BsYW5lX2lkXTsKPiA+ID4gKwkJ fQo+ID4gPiAgCj4gPiA+IC0JCWlmICh1dl9kYXRhX3JhdGUpIHsKPiA+ID4gLQkJCWNzdGF0ZS0+ d20uc2tsLnBsYW5lX2RkYl91dltwbGFuZV9pZF0uc3RhcnQgPSBzdGFydDsKPiA+ID4gLQkJCWNz dGF0ZS0+d20uc2tsLnBsYW5lX2RkYl91dltwbGFuZV9pZF0uZW5kID0KPiA+ID4gLQkJCQlzdGFy dCArIHV2X3BsYW5lX2Jsb2NrczsKPiA+ID4gKwkJaWYgKHV2X3RvdGFsW3BsYW5lX2lkXSkgewo+ ID4gPiArCQkJdXZfcGxhbmVfYWxsb2MtPnN0YXJ0ID0gc3RhcnQ7Cj4gPiA+ICsJCQl1dl9wbGFu ZV9hbGxvYy0+ZW5kID0gc3RhcnQgKyB1dl90b3RhbFtwbGFuZV9pZF07Cj4gPiA+ICAJCX0KPiA+ ID4gKwl9Cj4gPiA+ICAKPiA+ID4gLQkJc3RhcnQgKz0gdXZfcGxhbmVfYmxvY2tzOwo+ID4gPiAr CS8qCj4gPiA+ICsJICogV2hlbiB3ZSBjYWxjdWxhdGVkIHdhdGVybWFyayB2YWx1ZXMgd2UgZGlk bid0IGtub3cgaG93IGhpZ2gKPiA+ID4gKwkgKiBvZiBhIGxldmVsIHdlJ2QgYWN0dWFsbHkgYmUg YWJsZSB0byBoaXQsIHNvIHdlIGp1c3QgbWFya2VkCj4gPiA+ICsJICogYWxsIGxldmVscyBhcyAi ZW5hYmxlZC4iICBHbyBiYWNrIG5vdyBhbmQgZGlzYWJsZSB0aGUgb25lcwo+ID4gPiArCSAqIHRo YXQgYXJlbid0IGFjdHVhbGx5IHBvc3NpYmxlLgo+ID4gPiArCSAqLwo+ID4gPiArCWZvciAobGV2 ZWwrKzsgbGV2ZWwgPD0gaWxrX3dtX21heF9sZXZlbChkZXZfcHJpdik7IGxldmVsKyspIHsKPiA+ ID4gKwkJZm9yX2VhY2hfcGxhbmVfaWRfb25fY3J0YyhpbnRlbF9jcnRjLCBwbGFuZV9pZCkgewo+ ID4gPiArCQkJd20gPSAmY3N0YXRlLT53bS5za2wub3B0aW1hbC5wbGFuZXNbcGxhbmVfaWRdOwo+ ID4gPiArCQkJbWVtc2V0KCZ3bS0+d21bbGV2ZWxdLCAwLCBzaXplb2Yod20tPndtW2xldmVsXSkp Owo+ID4gPiArCQl9Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJLyoKPiA+ID4gKwkgKiBHbyBi YWNrIGFuZCBkaXNhYmxlIHRoZSB0cmFuc2l0aW9uIHdhdGVybWFyayBpZiBpdCB0dXJucyBvdXQg d2UKPiA+ID4gKwkgKiBkb24ndCBoYXZlIGVub3VnaCBEREIgYmxvY2tzIGZvciBpdC4KPiA+ID4g KwkgKi8KPiA+ID4gKwlmb3JfZWFjaF9wbGFuZV9pZF9vbl9jcnRjKGludGVsX2NydGMsIHBsYW5l X2lkKSB7Cj4gPiA+ICsJCXdtID0gJmNzdGF0ZS0+d20uc2tsLm9wdGltYWwucGxhbmVzW3BsYW5l X2lkXTsKPiA+ID4gKwkJaWYgKHdtLT50cmFuc193bS5wbGFuZV9yZXNfYiA+IHRvdGFsW3BsYW5l X2lkXSkKPiA+ID4gKwkJCW1lbXNldCgmd20tPnRyYW5zX3dtLCAwLCBzaXplb2Yod20tPnRyYW5z X3dtKSk7Cj4gPiA+ICAJfQo+ID4gPiAgCj4gPiA+ICAJcmV0dXJuIDA7Cj4gPiA+IEBAIC00NzE1 LDE3ICs0NjY1LDE1IEBAIHNrbF9jb21wdXRlX3BsYW5lX3dtX3BhcmFtcyhjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ID4gPiAgCXJldHVybiAwOwo+ID4gPiAgfQo+ID4g PiAgCj4gPiA+IC1zdGF0aWMgaW50IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gPiA+IC0JCQkJY29uc3Qgc3RydWN0IGludGVsX3Bs YW5lX3N0YXRlICppbnRlbF9wc3RhdGUsCj4gPiA+IC0JCQkJdWludDE2X3QgZGRiX2FsbG9jYXRp b24sCj4gPiA+IC0JCQkJaW50IGxldmVsLAo+ID4gPiAtCQkJCWNvbnN0IHN0cnVjdCBza2xfd21f cGFyYW1zICp3cCwKPiA+ID4gLQkJCQljb25zdCBzdHJ1Y3Qgc2tsX3dtX2xldmVsICpyZXN1bHRf cHJldiwKPiA+ID4gLQkJCQlzdHJ1Y3Qgc2tsX3dtX2xldmVsICpyZXN1bHQgLyogb3V0ICovKQo+ ID4gPiArc3RhdGljIHZvaWQgc2tsX2NvbXB1dGVfcGxhbmVfd20oY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNzdGF0ZSwKPiA+ID4gKwkJCQkgY29uc3Qgc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICppbnRlbF9wc3RhdGUsCj4gPiA+ICsJCQkJIGludCBsZXZlbCwKPiA+ID4gKwkJCQkg Y29uc3Qgc3RydWN0IHNrbF93bV9wYXJhbXMgKndwLAo+ID4gPiArCQkJCSBjb25zdCBzdHJ1Y3Qg c2tsX3dtX2xldmVsICpyZXN1bHRfcHJldiwKPiA+ID4gKwkJCQkgc3RydWN0IHNrbF93bV9sZXZl bCAqcmVzdWx0IC8qIG91dCAqLykKPiA+ID4gIHsKPiA+ID4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPQo+ID4gPiAgCQl0b19pOTE1KGludGVsX3BzdGF0ZS0+YmFzZS5wbGFu ZS0+ZGV2KTsKPiA+ID4gLQljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwc3RhdGUgPSAm aW50ZWxfcHN0YXRlLT5iYXNlOwo+ID4gPiAgCXVpbnQzMl90IGxhdGVuY3kgPSBkZXZfcHJpdi0+ d20uc2tsX2xhdGVuY3lbbGV2ZWxdOwo+ID4gPiAgCXVpbnRfZml4ZWRfMTZfMTZfdCBtZXRob2Qx LCBtZXRob2QyOwo+ID4gPiAgCXVpbnRfZml4ZWRfMTZfMTZfdCBzZWxlY3RlZF9yZXN1bHQ7Cj4g PiA+IEBAIC00NzMzLDEwICs0NjgxLDYgQEAgc3RhdGljIGludCBza2xfY29tcHV0ZV9wbGFuZV93 bShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ID4gPiAgCXN0cnVjdCBp bnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlID0KPiA+ID4gIAkJdG9faW50ZWxfYXRvbWljX3N0YXRl KGNzdGF0ZS0+YmFzZS5zdGF0ZSk7Cj4gPiA+ICAJYm9vbCBhcHBseV9tZW1vcnlfYndfd2EgPSBz a2xfbmVlZHNfbWVtb3J5X2J3X3dhKHN0YXRlKTsKPiA+ID4gLQl1aW50MzJfdCBtaW5fZGlzcF9i dWZfbmVlZGVkOwo+ID4gPiAtCj4gPiA+IC0JaWYgKGxhdGVuY3kgPT0gMCkKPiA+ID4gLQkJcmV0 dXJuIGxldmVsID09IDAgPyAtRUlOVkFMIDogMDsKPiA+ID4gIAo+ID4gPiAgCS8qIERpc3BsYXkg V0EgIzExNDE6IGtibCxjZmwgKi8KPiA+ID4gIAlpZiAoKElTX0tBQllMQUtFKGRldl9wcml2KSB8 fCBJU19DT0ZGRUVMQUtFKGRldl9wcml2KSB8fAo+ID4gPiBAQCAtNDgwMCw2MSArNDc0NCwyNCBA QCBzdGF0aWMgaW50IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjc3RhdGUsCj4gPiA+ICAJCQlyZXNfYmxvY2tzID0gcmVzdWx0X3ByZXYtPnBsYW5l X3Jlc19iOwo+ID4gPiAgCX0KPiA+ID4gIAo+ID4gPiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDExKSB7Cj4gPiA+IC0JCWlmICh3cC0+eV90aWxlZCkgewo+ID4gPiAtCQkJdWludDMyX3Qg ZXh0cmFfbGluZXM7Cj4gPiA+IC0JCQl1aW50X2ZpeGVkXzE2XzE2X3QgZnBfbWluX2Rpc3BfYnVm X25lZWRlZDsKPiA+ID4gLQo+ID4gPiAtCQkJaWYgKHJlc19saW5lcyAlIHdwLT55X21pbl9zY2Fu bGluZXMgPT0gMCkKPiA+ID4gLQkJCQlleHRyYV9saW5lcyA9IHdwLT55X21pbl9zY2FubGluZXM7 Cj4gPiA+IC0JCQllbHNlCj4gPiA+IC0JCQkJZXh0cmFfbGluZXMgPSB3cC0+eV9taW5fc2Nhbmxp bmVzICogMiAtCj4gPiA+IC0JCQkJCSAgICAgIHJlc19saW5lcyAlIHdwLT55X21pbl9zY2FubGlu ZXM7Cj4gPiA+IC0KPiA+ID4gLQkJCWZwX21pbl9kaXNwX2J1Zl9uZWVkZWQgPSBtdWxfdTMyX2Zp eGVkMTYocmVzX2xpbmVzICsKPiA+ID4gLQkJCQkJCWV4dHJhX2xpbmVzLAo+ID4gPiAtCQkJCQkJ d3AtPnBsYW5lX2Jsb2Nrc19wZXJfbGluZSk7Cj4gPiA+IC0JCQltaW5fZGlzcF9idWZfbmVlZGVk ID0gZml4ZWQxNl90b191MzJfcm91bmRfdXAoCj4gPiA+IC0JCQkJCQlmcF9taW5fZGlzcF9idWZf bmVlZGVkKTsKPiA+ID4gLQkJfSBlbHNlIHsKPiA+ID4gLQkJCW1pbl9kaXNwX2J1Zl9uZWVkZWQg PSBESVZfUk9VTkRfVVAocmVzX2Jsb2NrcyAqIDExLCAxMCk7Cj4gPiA+IC0JCX0KPiA+ID4gLQl9 IGVsc2Ugewo+ID4gPiAtCQltaW5fZGlzcF9idWZfbmVlZGVkID0gcmVzX2Jsb2NrczsKPiA+ID4g LQl9Cj4gPiA+IC0KPiA+ID4gLQlpZiAoKGxldmVsID4gMCAmJiByZXNfbGluZXMgPiAzMSkgfHwK PiA+ID4gLQkgICAgcmVzX2Jsb2NrcyA+PSBkZGJfYWxsb2NhdGlvbiB8fAo+ID4gPiAtCSAgICBt aW5fZGlzcF9idWZfbmVlZGVkID49IGRkYl9hbGxvY2F0aW9uKSB7Cj4gPiA+IC0JCS8qCj4gPiA+ IC0JCSAqIElmIHRoZXJlIGFyZSBubyB2YWxpZCBsZXZlbCAwIHdhdGVybWFya3MsIHRoZW4gd2Ug Y2FuJ3QKPiA+ID4gLQkJICogc3VwcG9ydCB0aGlzIGRpc3BsYXkgY29uZmlndXJhdGlvbi4KPiA+ ID4gLQkJICovCj4gPiA+IC0JCWlmIChsZXZlbCkgewo+ID4gPiAtCQkJcmV0dXJuIDA7Cj4gPiA+ IC0JCX0gZWxzZSB7Cj4gPiA+IC0JCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9IHBzdGF0ZS0+ cGxhbmU7Cj4gPiA+IC0KPiA+ID4gLQkJCURSTV9ERUJVR19LTVMoIlJlcXVlc3RlZCBkaXNwbGF5 IGNvbmZpZ3VyYXRpb24gZXhjZWVkcyBzeXN0ZW0gd2F0ZXJtYXJrIGxpbWl0YXRpb25zXG4iKTsK PiA+ID4gLQkJCURSTV9ERUJVR19LTVMoIltQTEFORTolZDolc10gYmxvY2tzIHJlcXVpcmVkID0g JXUvJXUsIGxpbmVzIHJlcXVpcmVkID0gJXUvMzFcbiIsCj4gPiA+IC0JCQkJICAgICAgcGxhbmUt PmJhc2UuaWQsIHBsYW5lLT5uYW1lLAo+ID4gPiAtCQkJCSAgICAgIHJlc19ibG9ja3MsIGRkYl9h bGxvY2F0aW9uLCByZXNfbGluZXMpOwo+ID4gPiAtCQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+IC0J CX0KPiA+ID4gLQl9Cj4gPiA+IC0KPiA+ID4gIAkvKiBUaGUgbnVtYmVyIG9mIGxpbmVzIGFyZSBp Z25vcmVkIGZvciB0aGUgbGV2ZWwgMCB3YXRlcm1hcmsuICovCj4gPiA+ICsJaWYgKGxldmVsID4g MCAmJiByZXNfbGluZXMgPiAzMSkKPiA+ID4gKwkJcmV0dXJuOwo+ID4gPiArCj4gPiA+ICsJLyoK PiA+ID4gKwkgKiBJZiByZXNfbGluZXMgaXMgdmFsaWQsIGFzc3VtZSB3ZSBjYW4gdXNlIHRoaXMg d2F0ZXJtYXJrIGxldmVsCj4gPiA+ICsJICogZm9yIG5vdy4gIFdlJ2xsIGNvbWUgYmFjayBhbmQg ZGlzYWJsZSBpdCBhZnRlciB3ZSBjYWxjdWxhdGUgdGhlCj4gPiA+ICsJICogRERCIGFsbG9jYXRp b24gaWYgaXQgdHVybnMgb3V0IHdlIGRvbid0IGFjdHVhbGx5IGhhdmUgZW5vdWdoCj4gPiA+ICsJ ICogYmxvY2tzIHRvIHNhdGlzZnkgaXQuCj4gPiA+ICsJICovCj4gPiA+ICAJcmVzdWx0LT5wbGFu ZV9yZXNfYiA9IHJlc19ibG9ja3M7Cj4gPiA+ICAJcmVzdWx0LT5wbGFuZV9yZXNfbCA9IHJlc19s aW5lczsKPiA+ID4gIAlyZXN1bHQtPnBsYW5lX2VuID0gdHJ1ZTsKPiA+ID4gLQo+ID4gPiAtCXJl dHVybiAwOwo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+IC1zdGF0aWMgaW50Cj4gPiA+ICtzdGF0aWMg dm9pZAo+ID4gPiAgc2tsX2NvbXB1dGVfd21fbGV2ZWxzKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjc3RhdGUsCj4gPiA+ICAJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9z dGF0ZSAqaW50ZWxfcHN0YXRlLAo+ID4gPiAtCQkgICAgICB1aW50MTZfdCBkZGJfYmxvY2tzLAo+ ID4gPiAgCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tsX3dtX3BhcmFtcyAqd21fcGFyYW1zLAo+ID4g PiAgCQkgICAgICBzdHJ1Y3Qgc2tsX3dtX2xldmVsICpsZXZlbHMpCj4gPiA+ICB7Cj4gPiA+IEBA IC00ODYyLDI1ICs0NzY5LDE1IEBAIHNrbF9jb21wdXRlX3dtX2xldmVscyhjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ID4gPiAgCQl0b19pOTE1KGludGVsX3BzdGF0ZS0+ YmFzZS5wbGFuZS0+ZGV2KTsKPiA+ID4gIAlpbnQgbGV2ZWwsIG1heF9sZXZlbCA9IGlsa193bV9t YXhfbGV2ZWwoZGV2X3ByaXYpOwo+ID4gPiAgCXN0cnVjdCBza2xfd21fbGV2ZWwgKnJlc3VsdF9w cmV2ID0gJmxldmVsc1swXTsKPiA+ID4gLQlpbnQgcmV0Owo+ID4gPiAgCj4gPiA+ICAJZm9yIChs ZXZlbCA9IDA7IGxldmVsIDw9IG1heF9sZXZlbDsgbGV2ZWwrKykgewo+ID4gPiAgCQlzdHJ1Y3Qg c2tsX3dtX2xldmVsICpyZXN1bHQgPSAmbGV2ZWxzW2xldmVsXTsKPiA+ID4gIAo+ID4gPiAtCQly ZXQgPSBza2xfY29tcHV0ZV9wbGFuZV93bShjc3RhdGUsCj4gPiA+IC0JCQkJCSAgIGludGVsX3Bz dGF0ZSwKPiA+ID4gLQkJCQkJICAgZGRiX2Jsb2NrcywKPiA+ID4gLQkJCQkJICAgbGV2ZWwsCj4g PiA+IC0JCQkJCSAgIHdtX3BhcmFtcywKPiA+ID4gLQkJCQkJICAgcmVzdWx0X3ByZXYsCj4gPiA+ IC0JCQkJCSAgIHJlc3VsdCk7Cj4gPiA+IC0JCWlmIChyZXQpCj4gPiA+IC0JCQlyZXR1cm4gcmV0 Owo+ID4gPiArCQlza2xfY29tcHV0ZV9wbGFuZV93bShjc3RhdGUsIGludGVsX3BzdGF0ZSwgbGV2 ZWwsIHdtX3BhcmFtcywKPiA+ID4gKwkJCQkgICAgIHJlc3VsdF9wcmV2LCByZXN1bHQpOwo+ID4g PiAgCj4gPiA+ICAJCXJlc3VsdF9wcmV2ID0gcmVzdWx0Owo+ID4gPiAgCX0KPiA+ID4gLQo+ID4g PiAtCXJldHVybiAwOwo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+ICBzdGF0aWMgdWludDMyX3QKPiA+ ID4gQEAgLTQ5MDgsOCArNDgwNSw3IEBAIHNrbF9jb21wdXRlX2xpbmV0aW1lX3dtKGNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUpCj4gPiA+ICAKPiA+ID4gIHN0YXRpYyB2b2lk IHNrbF9jb21wdXRlX3RyYW5zaXRpb25fd20oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNzdGF0ZSwKPiA+ID4gIAkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tsX3dtX3BhcmFtcyAqd3As Cj4gPiA+IC0JCQkJICAgICAgc3RydWN0IHNrbF9wbGFuZV93bSAqd20sCj4gPiA+IC0JCQkJICAg ICAgdWludDE2X3QgZGRiX2FsbG9jYXRpb24pCj4gPiA+ICsJCQkJICAgICAgc3RydWN0IHNrbF9w bGFuZV93bSAqd20pCj4gPiA+ICB7Cj4gPiA+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNz dGF0ZS0+YmFzZS5jcnRjLT5kZXY7Cj4gPiA+ICAJY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+ID4gPiBAQCAtNDk1NywxMiArNDg1MywxMyBA QCBzdGF0aWMgdm9pZCBza2xfY29tcHV0ZV90cmFuc2l0aW9uX3dtKGNvbnN0IHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gPiA+ICAKPiA+ID4gIAl9Cj4gPiA+ICAKPiA+ID4gLQly ZXNfYmxvY2tzICs9IDE7Cj4gPiA+IC0KPiA+ID4gLQlpZiAocmVzX2Jsb2NrcyA8IGRkYl9hbGxv Y2F0aW9uKSB7Cj4gPiA+IC0JCXdtLT50cmFuc193bS5wbGFuZV9yZXNfYiA9IHJlc19ibG9ja3M7 Cj4gPiA+IC0JCXdtLT50cmFuc193bS5wbGFuZV9lbiA9IHRydWU7Cj4gPiA+IC0JfQo+ID4gPiAr CS8qCj4gPiA+ICsJICogSnVzdCBhc3N1bWUgd2UgY2FuIGVuYWJsZSB0aGUgdHJhbnNpdGlvbiB3 YXRlcm1hcmsuICBBZnRlcgo+ID4gPiArCSAqIGNvbXB1dGluZyB0aGUgRERCIHdlJ2xsIGNvbWUg YmFjayBhbmQgZGlzYWJsZSBpdCBpZiB0aGF0Cj4gPiA+ICsJICogYXNzdW1wdGlvbiB0dXJucyBv dXQgdG8gYmUgZmFsc2UuCj4gPiA+ICsJICovCj4gPiA+ICsJd20tPnRyYW5zX3dtLnBsYW5lX3Jl c19iID0gcmVzX2Jsb2NrcyArIDE7Cj4gPiA+ICsJd20tPnRyYW5zX3dtLnBsYW5lX2VuID0gdHJ1 ZTsKPiA+ID4gIH0KPiA+ID4gIAo+ID4gPiAgc3RhdGljIGludCBza2xfYnVpbGRfcGxhbmVfd21f c2luZ2xlKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gPiBAQCAtNDk3 MCw3ICs0ODY3LDYgQEAgc3RhdGljIGludCBza2xfYnVpbGRfcGxhbmVfd21fc2luZ2xlKHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gPiAgCQkJCSAgICAgZW51bSBwbGFu ZV9pZCBwbGFuZV9pZCwgaW50IGNvbG9yX3BsYW5lKQo+ID4gPiAgewo+ID4gPiAgCXN0cnVjdCBz a2xfcGxhbmVfd20gKndtID0gJmNydGNfc3RhdGUtPndtLnNrbC5vcHRpbWFsLnBsYW5lc1twbGFu ZV9pZF07Cj4gPiA+IC0JdTE2IGRkYl9ibG9ja3MgPSBza2xfZGRiX2VudHJ5X3NpemUoJmNydGNf c3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeVtwbGFuZV9pZF0pOwo+ID4gPiAgCXN0cnVjdCBza2xf d21fcGFyYW1zIHdtX3BhcmFtczsKPiA+ID4gIAlpbnQgcmV0Owo+ID4gPiAgCj4gPiA+IEBAIC00 OTc5LDEyICs0ODc1LDggQEAgc3RhdGljIGludCBza2xfYnVpbGRfcGxhbmVfd21fc2luZ2xlKHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gPiAgCWlmIChyZXQpCj4gPiA+ ICAJCXJldHVybiByZXQ7Cj4gPiA+ICAKPiA+ID4gLQlyZXQgPSBza2xfY29tcHV0ZV93bV9sZXZl bHMoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUsCj4gPiA+IC0JCQkJICAgIGRkYl9ibG9ja3MsICZ3 bV9wYXJhbXMsIHdtLT53bSk7Cj4gPiA+IC0JaWYgKHJldCkKPiA+ID4gLQkJcmV0dXJuIHJldDsK PiA+ID4gLQo+ID4gPiAtCXNrbF9jb21wdXRlX3RyYW5zaXRpb25fd20oY3J0Y19zdGF0ZSwgJndt X3BhcmFtcywgd20sIGRkYl9ibG9ja3MpOwo+ID4gPiArCXNrbF9jb21wdXRlX3dtX2xldmVscyhj cnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSwgJndtX3BhcmFtcywgd20tPndtKTsKPiA+ID4gKwlza2xf Y29tcHV0ZV90cmFuc2l0aW9uX3dtKGNydGNfc3RhdGUsICZ3bV9wYXJhbXMsIHdtKTsKPiA+ID4g IAo+ID4gPiAgCXJldHVybiAwOwo+ID4gPiAgfQo+ID4gPiBAQCAtNDk5NCw3ICs0ODg2LDYgQEAg c3RhdGljIGludCBza2xfYnVpbGRfcGxhbmVfd21fdXYoc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUsCj4gPiA+ICAJCQkJIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCj4gPiA+ICB7 Cj4gPiA+ICAJc3RydWN0IHNrbF9wbGFuZV93bSAqd20gPSAmY3J0Y19zdGF0ZS0+d20uc2tsLm9w dGltYWwucGxhbmVzW3BsYW5lX2lkXTsKPiA+ID4gLQl1MTYgZGRiX2Jsb2NrcyA9IHNrbF9kZGJf ZW50cnlfc2l6ZSgmY3J0Y19zdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl91dltwbGFuZV9pZF0pOwo+ ID4gPiAgCXN0cnVjdCBza2xfd21fcGFyYW1zIHdtX3BhcmFtczsKPiA+ID4gIAlpbnQgcmV0Owo+ ID4gPiAgCj4gPiA+IEBAIC01MDA2LDEwICs0ODk3LDcgQEAgc3RhdGljIGludCBza2xfYnVpbGRf cGxhbmVfd21fdXYoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gPiA+ICAJ aWYgKHJldCkKPiA+ID4gIAkJcmV0dXJuIHJldDsKPiA+ID4gIAo+ID4gPiAtCXJldCA9IHNrbF9j b21wdXRlX3dtX2xldmVscyhjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSwKPiA+ID4gLQkJCQkgICAg ZGRiX2Jsb2NrcywgJndtX3BhcmFtcywgd20tPnV2X3dtKTsKPiA+ID4gLQlpZiAocmV0KQo+ID4g PiAtCQlyZXR1cm4gcmV0Owo+ID4gPiArCXNrbF9jb21wdXRlX3dtX2xldmVscyhjcnRjX3N0YXRl LCBwbGFuZV9zdGF0ZSwgJndtX3BhcmFtcywgd20tPnV2X3dtKTsKPiA+ID4gIAo+ID4gPiAgCXJl dHVybiAwOwo+ID4gPiAgfQo+ID4gPiBAQCAtNTUyMSwxMyArNTQwOSw5IEBAIHNrbF9jb21wdXRl X3dtKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ID4gPiAgCWlmIChyZXQgfHwg IWNoYW5nZWQpCj4gPiA+ICAJCXJldHVybiByZXQ7Cj4gPiA+ICAKPiA+ID4gLQlyZXQgPSBza2xf Y29tcHV0ZV9kZGIoc3RhdGUpOwo+ID4gPiAtCWlmIChyZXQpCj4gPiA+IC0JCXJldHVybiByZXQ7 Cj4gPiA+IC0KPiA+ID4gIAkvKgo+ID4gPiAgCSAqIENhbGN1bGF0ZSBXTSdzIGZvciBhbGwgcGlw ZXMgdGhhdCBhcmUgcGFydCBvZiB0aGlzIHRyYW5zYWN0aW9uLgo+ID4gPiAtCSAqIE5vdGUgdGhh dCB0aGUgRERCIGFsbG9jYXRpb24gYWJvdmUgbWF5IGhhdmUgYWRkZWQgbW9yZSBDUlRDJ3MgdGhh dAo+ID4gPiArCSAqIE5vdGUgdGhhdCBza2xfZGRiX2FkZF9hZmZlY3RlZF9waXBlcyBtYXkgaGF2 ZSBhZGRlZCBtb3JlIENSVEMncyB0aGF0Cj4gPiA+ICAJICogd2VyZW4ndCBvdGhlcndpc2UgYmVp bmcgbW9kaWZpZWQgKGFuZCBzZXQgYml0cyBpbiBkaXJ0eV9waXBlcykgaWYKPiA+ID4gIAkgKiBw aXBlIGFsbG9jYXRpb25zIGhhZCB0byBjaGFuZ2UuCj4gPiA+ICAJICovCj4gPiA+IEBAIC01NTQ5 LDYgKzU0MzMsMTAgQEAgc2tsX2NvbXB1dGVfd20oc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAq c3RhdGUpCj4gPiA+ICAJCQlyZXN1bHRzLT5kaXJ0eV9waXBlcyB8PSBkcm1fY3J0Y19tYXNrKCZj cnRjLT5iYXNlKTsKPiA+ID4gIAl9Cj4gPiA+ICAKPiA+ID4gKwlyZXQgPSBza2xfY29tcHV0ZV9k ZGIoc3RhdGUpOwo+ID4gPiArCWlmIChyZXQpCj4gPiA+ICsJCXJldHVybiByZXQ7Cj4gPiA+ICsK PiA+ID4gIAlza2xfcHJpbnRfd21fY2hhbmdlcyhzdGF0ZSk7Cj4gPiA+ICAKPiA+ID4gIAlyZXR1 cm4gMDsKPiA+ID4gLS0gCj4gPiA+IDIuMTQuNAo+ID4gCj4gPiAtLSAKPiA+IFZpbGxlIFN5cmrD pGzDpAo+ID4gSW50ZWwKPiAKPiAtLSAKPiBNYXR0IFJvcGVyCj4gR3JhcGhpY3MgU29mdHdhcmUg RW5naW5lZXIKPiBJb1RHIFBsYXRmb3JtIEVuYWJsaW5nICYgRGV2ZWxvcG1lbnQKPiBJbnRlbCBD b3Jwb3JhdGlvbgo+ICg5MTYpIDM1Ni0yNzk1CgotLSAKVmlsbGUgU3lyasOkbMOkCkludGVsCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=