From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: [WIP PATCH 13/15] drm/dp_mst: Start tracking per-port VCPI allocations Date: Thu, 13 Dec 2018 20:25:42 -0500 Message-ID: <20181214012604.13746-14-lyude@redhat.com> References: <20181214012604.13746-1-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181214012604.13746-1-lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, intel-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Sean Paul , Maxime Ripard , Joonas Lahtinen , Maarten Lankhorst , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Jani Nikula , David Airlie , Jerry Zuo , Daniel Vetter , Rodrigo Vivi , Harry Wentland List-Id: intel-gfx@lists.freedesktop.org VGhlcmUgaGFzIGJlZW4gYSBUT0RPIHdhaXRpbmcgZm9yIHF1aXRlIGEgbG9uZyB0aW1lIGluCmRy bV9kcF9tc3RfdG9wb2xvZ3kuYzoKCgkvKiBXZSBjYW5ub3QgcmVseSBvbiBwb3J0LT52Y3BpLm51 bV9zbG90cyB0byB1cGRhdGUKCSAqIHRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyBhcyB0aGUg cG9ydCBtYXkgbm90IGV4aXN0IGlmIHRoZSBwYXJlbnQKCSAqIGJyYW5jaCBkZXZpY2Ugd2FzIHVu cGx1Z2dlZC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnkgdHJhY2tpbmcKCSAqIHBlci1wb3J0IHNs b3QgYWxsb2NhdGlvbiBpbiBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlIGluc3RlYWQgb2YKCSAq IGRlcGVuZGluZyBvbiB0aGUgY2FsbGVyIHRvIHRlbGwgdXMgaG93IG1hbnkgc2xvdHMgdG8gcmVs ZWFzZS4KCSAqLwoKVGhhdCdzIG5vdCB0aGUgb25seSByZWFzb24gd2Ugc2hvdWxkIGZpeCB0aGlz OiBmb3JjaW5nIHRoZSBkcml2ZXIgdG8KdHJhY2sgdGhlIFZDUEkgYWxsb2NhdGlvbnMgdGhyb3Vn aG91dCBhIHN0YXRlJ3MgYXRvbWljIGNoZWNrIGlzCmVycm9yIHByb25lLCBiZWNhdXNlIGl0IG1l YW5zIHRoYXQgZXh0cmEgY2FyZSBoYXMgdG8gYmUgdGFrZW4gd2l0aCB0aGUKb3JkZXIgdGhhdCBk cm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpIGFuZApkcm1fZHBfYXRvbWljX3JlbGVhc2Vf dmNwaV9zbG90cygpIGFyZSBjYWxsZWQgaW4gaW4gb3JkZXIgdG8gZW5zdXJlCmlkZW1wb3RlbmN5 LiBDdXJyZW50bHkgdGhlIG9ubHkgZHJpdmVyIGFjdHVhbGx5IHVzaW5nIHRoZXNlIGhlbHBlcnMs Cmk5MTUsIGRvZXNuJ3QgZXZlbiBkbyB0aGlzIGNvcnJlY3RseTogbXVsdGlwbGUgLT5iZXN0X2Vu Y29kZXIoKSBjaGVja3MKd2l0aCBpOTE1J3MgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBu b3QgYmUgaWRlbXBvdGVudCBhbmQgd291bGQKb3Zlci1hbGxvY2F0ZSBWQ1BJIHNsb3RzLCBzb21l dGhpbmcgSSBsZWFybmVkIHRyeWluZyB0byBpbXBsZW1lbnQKZmFsbGJhY2sgcmV0cmFpbmluZyBp biBNU1QuCgpTbzogc2ltcGxpZnkgdGhpcyB3aG9sZSBtZXNzLCBhbmQgdGVhY2ggZHJtX2RwX2F0 b21pY19maW5kX3ZjcGlfc2xvdHMoKQphbmQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xv dHMoKSB0byB0cmFjayB0aGUgVkNQSSBhbGxvY2F0aW9ucyBmb3IKZWFjaCBwb3J0LiBUaGlzIGFs bG93cyB1cyB0byBlbnN1cmUgaWRlbXBvdGVuY3kgd2l0aG91dCBoYXZpbmcgdG8gcmVseQpvbiB0 aGUgZHJpdmVyIGFzIG11Y2guIEFkZGl0aW9uYWxseTogdGhlIGRyaXZlciBkb2Vzbid0IG5lZWQg dG8gZG8gYW55CmtpbmQgb2YgVkNQSSBzbG90IHRyYWNraW5nIGFueW1vcmUgaWYgaXQgZG9lc24n dCBuZWVkIGl0IGZvciBpdCdzIG93bgppbnRlcm5hbCBzdGF0ZS4KCkFkZGl0aW9uYWxseTsgdGhp cyBhZGRzIGEgbmV3IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkgaGVscGVyIHdoaWNoCm11c3Qg YmUgdXNlZCBieSBhdG9taWMgZHJpdmVycyB0byBwZXJmb3JtIHZhbGlkaXR5IGNoZWNrcyBmb3Ig dGhlIG5ldwpWQ1BJIGFsbG9jYXRpb25zIGluY3VycmVkIGJ5IGEgc3RhdGUuCgpBbHNvOiB1cGRh dGUgdGhlIGRvY3VtZW50YXRpb24gYW5kIG1ha2UgaXQgbW9yZSBvYnZpb3VzIHRoYXQgdGhlc2UK L211c3QvIGJlIGNhbGxlZCBieSAvYWxsLyBhdG9taWMgZHJpdmVycyBzdXBwb3J0aW5nIE1TVC4K CkNoYW5nZXMgc2luY2UgdjY6CiAtIEtlZXAgYSBrcmVmIHRvIGFsbCBvZiB0aGUgcG9ydHMgd2Ug aGF2ZSBhbGxvY2F0aW9ucyBvbi4gVGhpcyByZXF1aXJlZAogICBhIGdvb2QgYml0IG9mIGNoYW5n aW5nIHRvIHdoZW4gd2UgY2FsbCBkcm1fZHBfZmluZF92Y3BpX3Nsb3RzKCksCiAgIG1haW5seSB0 aGF0IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2Ugb25seSByZWRvIFZDUEkgYWxsb2NhdGlvbnMg b24KICAgYWN0dWFsIG1vZGUgb3IgQ1JUQyBjaGFuZ2VzLCBub3QgY3J0Y19zdGF0ZS0+YWN0aXZl IGNoYW5nZXMuCiAgIEFkZGl0aW9uYWxseSwgd2Ugbm8gbG9uZ2VyIHRha2UgdGhlIHJlZ2lzdHJh dGlvbiBvZiB0aGUgRFJNIGNvbm5lY3RvcgogICBmb3IgZWFjaCBwb3J0IGludG8gYWNjb3VudCBi ZWNhdXNlIHNvIGxvbmcgYXMgd2UgaGF2ZSBhIGtyZWYgdG8gdGhlCiAgIHBvcnQgaW4gdGhlIG5l dyBvciBwcmV2aW91cyBhdG9taWMgc3RhdGUsIHRoZSBjb25uZWN0b3Igd2lsbCBzdGF5CiAgIHJl Z2lzdGVyZWQuCiAtIFVzZSB0aGUgc21hbGwgY2hhbmdlcyB0byBkcm1fZHBfcHV0X3BvcnQoKSB0 byBhZGQgZXZlbiBtb3JlIGVycm9yCiAgIGNoZWNraW5nIHRvIG1ha2UgbWlzdXNhZ2Ugb2YgdGhl IGhlbHBlcnMgbW9yZSBvYnZpb3VzLiBJIGFkZGVkIHRoaXMKICAgYWZ0ZXIgaGF2aW5nIHRvIGNo YXNlIGRvd24gdmFyaW91cyB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIHRoYXQKICAgc3RhcnRl ZCBwb3BwaW5nIHVwIGZyb20gdGhlIG5ldyBoZWxwZXJzIHNvIG5vIG9uZSBlbHNlIGhhcyB0bwog ICB0cm91Ymxlc2hvb3QgdGhhdC4KIC0gTW92ZSBzb21lIGFjY2lkZW50YWwgRFJNX0RFQlVHX0tN UygpIGNhbGxzIHRvIERSTV9ERUJVR19BVE9NSUMoKQogLSBVcGRhdGUgZG9jdW1lbnRhdGlvbiBh Z2Fpbiwgbm90ZSB0aGF0IGZpbmQvcmVsZWFzZSgpIHNob3VsZCBib3RoIG5vdCBiZQogICBjYWxs ZWQgb24gdGhlIHNhbWUgcG9ydCBpbiBhIHNpbmdsZSBhdG9taWMgY2hlY2sgcGhhc2UgKGJ1dCBt dWx0aXBsZQogICBjYWxscyB0byBvbmUgb3IgdGhlIG90aGVyIGlzIE9LKQoKQ2hhbmdlcyBzaW5j ZSB2NDoKIC0gRG9uJ3Qgc2tpcCB0aGUgYXRvbWljIGNoZWNrcyBmb3IgVkNQSSBhbGxvY2F0aW9u cyBpZiBubyBuZXcgVkNQSQogICBhbGxvY2F0aW9ucyBoYXBwZW4gaW4gYSBzdGF0ZS4gVGhpcyBt YWtlcyB0aGUgbmV4dCBjaGFuZ2UgSSdtIGFib3V0CiAgIHRvIGxpc3QgaGVyZSBhIGxvdCBlYXNp ZXIgdG8gaW1wbGVtZW50LgogLSBEb24ndCBpZ25vcmUgVkNQSSBhbGxvY2F0aW9ucyBvbiBkZXN0 cm95ZWQgcG9ydHMsIGluc3RlYWQgZW5zdXJlIHRoYXQKICAgd2hlbiBwb3J0cyBhcmUgZGVzdHJv eWVkIGFuZCBzdGlsbCBoYXZlIFZDUEkgYWxsb2NhdGlvbnMgaW4gdGhlCiAgIHRvcG9sb2d5IHN0 YXRlLCB0aGUgb25seSBzdGF0ZSBjaGFuZ2VzIGFsbG93ZWQgYXJlIHJlbGVhc2luZyBzYWlkCiAg IHBvcnRzJyBWQ1BJLiBUaGlzIHByZXZlbnRzIGEgc3RhdGUgd2l0aCBhIG1peCBvZiBWQ1BJIGFs bG9jYXRpb25zCiAgIGZyb20gZGVzdHJveWVkIHBvcnRzLCBhbmQgYWxsb2NhdGlvbnMgZnJvbSB2 YWxpZCBwb3J0cy4KCkNoYW5nZXMgc2luY2UgdjM6CiAtIERvbid0IHJlbGVhc2UgVkNQSSBhbGxv Y2F0aW9ucyBpbiB0aGUgdG9wb2xvZ3kgc3RhdGUgaW1tZWRpYXRlbHkgaW4KICAgZHJtX2RwX2F0 b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSwgaW5zdGVhZCBtYXJrIHRoZW0gYXMgMCBhbmQgc2tp cAogICBvdmVyIHRoZW0gaW4gZHJtX2RwX21zdF9kdXBsaWNhdGVfc3RhdGUoKS4gVGhpcyBtYWtl cyBpdCBzbwogICBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIGlzIHN0aWxsIGlk ZW1wb3RlbnQgd2hpbGUgYWxzbwogICB0aHJvd2luZyB3YXJuaW5ncyBpZiB0aGUgZHJpdmVyIG1l c3NlcyB1cCBpdCdzIGJvb2sga2VlcGluZyBhbmQgdHJpZXMKICAgdG8gcmVsZWFzZSBWQ1BJIHNs b3RzIG9uIGEgcG9ydCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbnkgcHJlLWV4aXN0aW5nCiAgIFZDUEkg YWxsb2NhdGlvbiAtIGRhbnZldAogLSBDaGFuZ2UgbXN0X3N0YXRlL3N0YXRlIGluIHNvbWUgZGVi dWdnaW5nIG1lc3NhZ2VzIHRvICJtc3Qgc3RhdGUiCgpDaGFuZ2VzIHNpbmNlIHYyOgogLSBVc2Ug a21lbWR1cCgpIGZvciBkdXBsaWNhdGluZyBNU1Qgc3RhdGUgLSBkYW52ZXQKIC0gTW92ZSBwb3J0 IHZhbGlkYXRpb24gb3V0IG9mIGR1cGxpY2F0ZSBzdGF0ZSBjYWxsYmFjayAtIGRhbnZldAogLSBI YW5kbGUgbG9vcGluZyB0aHJvdWdoIE1TVCB0b3BvbG9neSBzdGF0ZXMgaW4KICAgZHJtX2RwX21z dF9hdG9taWNfY2hlY2soKSBzbyB0aGUgZHJpdmVyIGRvZXNuJ3QgaGF2ZSB0byBkbyBpdAogLSBG aXggZG9jdW1lbnRhdGlvbiBpbiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpCiAtIE1v dmUgdGhlIGF0b21pYyBjaGVjayBmb3IgZWFjaCBpbmRpdmlkdWFsIHRvcG9sb2d5IHN0YXRlIGlu dG8gaXQncwogICBvd24gZnVuY3Rpb24sIHJlZHVjZXMgaW5kZW50aW5nCiAtIERvbid0IGNvbnNp ZGVyICJzdGFsZSIgTVNUIHBvcnRzIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGJhbmR3aWR0aAogICBy ZXF1aXJlbWVudHMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugb3JpZ2luYWxseSB3ZSByZWxpZWQg b24gdGhlCiAgIHN0YXRlIGR1cGxpY2F0aW9uIGZ1bmN0aW9ucyB0byBwcnVuZSBhbnkgc3RhbGUg cG9ydHMgZnJvbSB0aGUgbmV3CiAgIHN0YXRlLCB3aGljaCB3b3VsZCBwcmV2ZW50IHVzIGZyb20g aW5jb3JyZWN0bHkgY29uc2lkZXJpbmcgdGhlaXIKICAgYmFuZHdpZHRoIHJlcXVpcmVtZW50cyBh bG9uZ3NpZGUgbGVnaXRpbWF0ZSBuZXcgcGF5bG9hZHMuCiAtIEFkZCBmdW5jdGlvbiByZWZlcmVu Y2VzIGluIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkgLSBkYW52ZXQKIC0gQW5u b3RhdGUgYXRvbWljIFZDUEkgYW5kIGF0b21pYyBjaGVjayBmdW5jdGlvbnMgd2l0aCBfX211c3Rf Y2hlY2sKICAgLSBkYW52ZXQKCkNoYW5nZXMgc2luY2UgdjE6CiAtIERvbid0IHVzZSB0aGUgbm93 LXJlbW92ZWQgLT5hdG9taWNfY2hlY2soKSBmb3IgcHJpdmF0ZSBvYmplY3RzIGhvb2ssCiAgIGp1 c3QgZ2l2ZSBkcml2ZXJzIGEgZnVuY3Rpb24gdG8gY2FsbCB0aGVtc2VsdmVzCgpTaWduZWQtb2Zm LWJ5OiBMeXVkZSBQYXVsIDxseXVkZUByZWRoYXQuY29tPgpDYzogRGFuaWVsIFZldHRlciA8ZGFu aWVsLnZldHRlckBmZndsbC5jaD4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3Bv bG9neS5jIHwgMjcxICsrKysrKysrKysrKysrKysrKysrKysrLS0tCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kaXNwbGF5LmMgIHwgICA0ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2RwX21zdC5jICAgfCAgNjQgKysrLS0tCiBpbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5o ICAgICAgIHwgIDI0ICsrLQogNCBmaWxlcyBjaGFuZ2VkLCAyOTggaW5zZXJ0aW9ucygrKSwgNjUg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9w b2xvZ3kuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKaW5kZXggOGQ5 NGM4OTQzYWM3Li5iOTM3NGM5ODFhNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1f ZHBfbXN0X3RvcG9sb2d5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xv Z3kuYwpAQCAtMjg5NywyMSArMjg5Nyw0MiBAQCBzdGF0aWMgaW50IGRybV9kcF9pbml0X3ZjcGko c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCiB9CiAKIC8qKgotICogZHJtX2Rw X2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKSAtIEZpbmQgYW5kIGFkZCB2Y3BpIHNsb3RzIHRvIHRo ZSBzdGF0ZQorICogZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKSAtIEZpbmQgYW5kIGFk ZCBWQ1BJIHNsb3RzIHRvIHRoZSBzdGF0ZQogICogQHN0YXRlOiBnbG9iYWwgYXRvbWljIHN0YXRl CiAgKiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciBmb3IgdGhlIHBvcnQKICAqIEBwb3J0OiBw b3J0IHRvIGZpbmQgdmNwaSBzbG90cyBmb3IKICAqIEBwYm46IGJhbmR3aWR0aCByZXF1aXJlZCBm b3IgdGhlIG1vZGUgaW4gUEJOCiAgKgotICogUkVUVVJOUzoKLSAqIFRvdGFsIHNsb3RzIGluIHRo ZSBhdG9taWMgc3RhdGUgYXNzaWduZWQgZm9yIHRoaXMgcG9ydCBvciBlcnJvcgorICogQWxsb2Nh dGVzIFZDUEkgc2xvdHMgdG8gQHBvcnQsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMgVkNQSSBhbGxv Y2F0aW9ucyBpdAorICogbWF5IGhhdmUgaGFkLiBBbnkgYXRvbWljIGRyaXZlcnMgd2hpY2ggc3Vw cG9ydCBNU1QgbXVzdCBjYWxsIHRoaXMgZnVuY3Rpb24KKyAqIGluIHRoZWlyICZkcm1fZW5jb2Rl cl9oZWxwZXJfZnVuY3MuYXRvbWljX2NoZWNrKCkgY2FsbGJhY2sgdG8gY2hhbmdlIHRoZQorICog Y3VycmVudCBWQ1BJIGFsbG9jYXRpb24gZm9yIHRoZSBuZXcgc3RhdGUsIGJ1dCBvbmx5IHdoZW4K KyAqICZkcm1fY3J0Y19zdGF0ZS5tb2RlX2NoYW5nZWQgb3IgJmRybV9jcnRjX3N0YXRlLmNvbm5l Y3RvcnNfY2hhbmdlZCBpcyBzZXQKKyAqIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5IHdpdGggdXNl cnNwYWNlIGFwcGxpY2F0aW9ucyB0aGF0IHN0aWxsIHVzZSB0aGUKKyAqIGxlZ2FjeSBtb2Rlc2V0 dGluZyBVQVBJLgorICoKKyAqIEFsbG9jYXRpb25zIHNldCBieSB0aGlzIGZ1bmN0aW9uIGFyZSBu b3QgY2hlY2tlZCBhZ2FpbnN0IHRoZSBiYW5kd2lkdGgKKyAqIHJlc3RyYWludHMgb2YgQG1nciB1 bnRpbCB0aGUgZHJpdmVyIGNhbGxzIGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkuCisgKgorICog QWRkaXRpb25hbGx5LCBpdCBpcyBPSyB0byBjYWxsIHRoaXMgZnVuY3Rpb24gbXVsdGlwbGUgdGlt ZXMgb24gdGhlIHNhbWUKKyAqIEBwb3J0IGFzIG5lZWRlZC4gSXQgaXMgbm90IE9LIGhvd2V2ZXIs IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBhbmQKKyAqIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3Bp X3Nsb3RzKCkgaW4gdGhlIHNhbWUgYXRvbWljIGNoZWNrIHBoYXNlLgorICoKKyAqIFNlZSBhbHNv OgorICogZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKQorICogZHJtX2RwX21zdF9h dG9taWNfY2hlY2soKQorICoKKyAqIFJldHVybnM6CisgKiBUb3RhbCBzbG90cyBpbiB0aGUgYXRv bWljIHN0YXRlIGFzc2lnbmVkIGZvciB0aGlzIHBvcnQsIG9yIGEgbmVnYXRpdmUgZXJyb3IKKyAq IGNvZGUgaWYgdGhlIHBvcnQgbm8gbG9uZ2VyIGV4aXN0cwogICovCiBpbnQgZHJtX2RwX2F0b21p Y19maW5kX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAogCQkJCSAg c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCiAJCQkJICBzdHJ1Y3QgZHJtX2Rw X21zdF9wb3J0ICpwb3J0LCBpbnQgcGJuKQogewogCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X3N0YXRlICp0b3BvbG9neV9zdGF0ZTsKLQlpbnQgcmVxX3Nsb3RzOworCXN0cnVjdCBkcm1fZHBf dmNwaV9hbGxvY2F0aW9uICpwb3MsICp2Y3BpID0gTlVMTDsKKwlpbnQgcHJldl9zbG90cywgcmVx X3Nsb3RzLCByZXQ7CiAKIAl0b3BvbG9neV9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X21zdF90b3Bv bG9neV9zdGF0ZShzdGF0ZSwgbWdyKTsKIAlpZiAoSVNfRVJSKHRvcG9sb2d5X3N0YXRlKSkKQEAg LTI5MjAsMjAgKzI5NDEsNTYgQEAgaW50IGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKIAlwb3J0ID0gZHJtX2RwX21zdF90b3BvbG9n eV9nZXRfcG9ydF92YWxpZGF0ZWQobWdyLCBwb3J0KTsKIAlpZiAocG9ydCA9PSBOVUxMKQogCQly ZXR1cm4gLUVJTlZBTDsKLQlyZXFfc2xvdHMgPSBESVZfUk9VTkRfVVAocGJuLCBtZ3ItPnBibl9k aXYpOwotCURSTV9ERUJVR19LTVMoInZjcGkgc2xvdHMgcmVxPSVkLCBhdmFpbD0lZFxuIiwKLQkJ CXJlcV9zbG90cywgdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzKTsKIAotCWlmIChyZXFfc2xv dHMgPiB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMpIHsKLQkJZHJtX2RwX21zdF90b3BvbG9n eV9wdXRfcG9ydChwb3J0KTsKLQkJcmV0dXJuIC1FTk9TUEM7CisJdG9wb2xvZ3lfc3RhdGUtPnZj cGlfYWxsb2NhdGVkID0gdHJ1ZTsKKworCS8qIEZpbmQgdGhlIGN1cnJlbnQgYWxsb2NhdGlvbiBm b3IgdGhpcyBwb3J0LCBpZiBhbnkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJnRvcG9s b2d5X3N0YXRlLT52Y3BpcywgbmV4dCkgeworCQlpZiAocG9zLT5wb3J0ID09IHBvcnQpIHsKKwkJ CXZjcGkgPSBwb3M7CisJCQlwcmV2X3Nsb3RzID0gdmNwaS0+dmNwaTsKKworCQkJLyoKKwkJCSAq IFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgdW5sZXNzIHRoZSBkcml2ZXIgdHJpZXMKKwkJCSAq IHJlbGVhc2luZyBhbmQgYWxsb2NhdGluZyB0aGUgc2FtZSBWQ1BJIGFsbG9jYXRpb24sCisJCQkg KiB3aGljaCBpcyBhbiBlcnJvcgorCQkJICovCisJCQlpZiAoV0FSTl9PTighcHJldl9zbG90cykp IHsKKwkJCQlEUk1fRVJST1IoImNhbm5vdCBhbGxvY2F0ZSBhbmQgcmVsZWFzZSBWQ1BJIG9uIFtN U1QgUE9SVDolcF0gaW4gdGhlIHNhbWUgc3RhdGVcbiIsCisJCQkJCSAgcG9ydCk7CisJCQkJcmV0 dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCWJyZWFrOworCQl9CiAJfQorCWlmICghdmNwaSkKKwkJ cHJldl9zbG90cyA9IDA7CisKKwlyZXFfc2xvdHMgPSBESVZfUk9VTkRfVVAocGJuLCBtZ3ItPnBi bl9kaXYpOworCisJRFJNX0RFQlVHX0FUT01JQygiW0NPTk5FQ1RPUjolZDolc10gW01TVCBQT1JU OiVwXSBWQ1BJICVkIC0+ICVkXG4iLAorCQkJIHBvcnQtPmNvbm5lY3Rvci0+YmFzZS5pZCwgcG9y dC0+Y29ubmVjdG9yLT5uYW1lLAorCQkJIHBvcnQsIHByZXZfc2xvdHMsIHJlcV9zbG90cyk7CiAK LQl0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMgLT0gcmVxX3Nsb3RzOwotCURSTV9ERUJVR19L TVMoInZjcGkgc2xvdHMgYXZhaWw9JWQiLCB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMpOwor CS8qIEFkZCB0aGUgbmV3IGFsbG9jYXRpb24gdG8gdGhlIHN0YXRlICovCisJaWYgKCF2Y3BpKSB7 CisJCXZjcGkgPSBremFsbG9jKHNpemVvZigqdmNwaSksIEdGUF9LRVJORUwpOworCQlpZiAoIXZj cGkpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQogCisJCWRybV9kcF9t c3RfZ2V0X3BvcnRfbWFsbG9jKHBvcnQpOworCQl2Y3BpLT5wb3J0ID0gcG9ydDsKKwkJbGlzdF9h ZGQoJnZjcGktPm5leHQsICZ0b3BvbG9neV9zdGF0ZS0+dmNwaXMpOworCX0KKwl2Y3BpLT52Y3Bp ID0gcmVxX3Nsb3RzOworCisJcmV0ID0gcmVxX3Nsb3RzOworb3V0OgogCWRybV9kcF9tc3RfdG9w b2xvZ3lfcHV0X3BvcnQocG9ydCk7Ci0JcmV0dXJuIHJlcV9zbG90czsKKwlyZXR1cm4gcmV0Owog fQogRVhQT1JUX1NZTUJPTChkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyk7CiAKQEAgLTI5 NDEsMzEgKzI5OTgsNTcgQEAgRVhQT1JUX1NZTUJPTChkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9z bG90cyk7CiAgKiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIC0gUmVsZWFzZSBh bGxvY2F0ZWQgdmNwaSBzbG90cwogICogQHN0YXRlOiBnbG9iYWwgYXRvbWljIHN0YXRlCiAgKiBA bWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciBmb3IgdGhlIHBvcnQKLSAqIEBzbG90czogbnVtYmVy IG9mIHZjcGkgc2xvdHMgdG8gcmVsZWFzZQorICogQHBvcnQ6IFRoZSBwb3J0IHRvIHJlbGVhc2Ug dGhlIFZDUEkgc2xvdHMgZnJvbQogICoKLSAqIFJFVFVSTlM6Ci0gKiAwIGlmIEBzbG90cyB3ZXJl IGFkZGVkIGJhY2sgdG8gJmRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzIG9y Ci0gKiBuZWdhdGl2ZSBlcnJvciBjb2RlCisgKiBSZWxlYXNlcyBhbnkgVkNQSSBzbG90cyB0aGF0 IGhhdmUgYmVlbiBhbGxvY2F0ZWQgdG8gYSBwb3J0IGluIHRoZSBhdG9taWMKKyAqIHN0YXRlLiBB bnkgYXRvbWljIGRyaXZlcnMgd2hpY2ggc3VwcG9ydCBNU1QgbXVzdCBjYWxsIHRoaXMgZnVuY3Rp b24gaW4KKyAqIHRoZWlyICZkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcy5hdG9taWNfY2hlY2so KSBjYWxsYmFjayB3aGVuIHRoZQorICogY29ubmVjdG9yIHdpbGwgbm8gbG9uZ2VyIGhhdmUgVkNQ SSBhbGxvY2F0ZWQgKGUuZy4gYmVjYXVzZSBpdCdzIENSVEMgd2FzCisgKiByZW1vdmVkKSB3aGVu IGl0IGhhZCBWQ1BJIGFsbG9jYXRlZCBpbiB0aGUgcHJldmlvdXMgYXRvbWljIHN0YXRlLgorICoK KyAqIEl0IGlzIE9LIHRvIGNhbGwgdGhpcyBldmVuIGlmIEBwb3J0IGhhcyBiZWVuIHJlbW92ZWQg ZnJvbSB0aGUgc3lzdGVtLgorICogQWRkaXRpb25hbGx5LCBpdCBpcyBPSyB0byBjYWxsIHRoaXMg ZnVuY3Rpb24gbXVsdGlwbGUgdGltZXMgb24gdGhlIHNhbWUKKyAqIEBwb3J0IGFzIG5lZWRlZC4g SXQgaXMgbm90IE9LIGhvd2V2ZXIsIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBhbmQKKyAqIGRybV9k cF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKCkgb24gdGhlIHNhbWUgQHBvcnQgaW4gYSBzaW5nbGUg YXRvbWljIGNoZWNrCisgKiBwaGFzZS4KKyAqCisgKiBTZWUgYWxzbzoKKyAqIGRybV9kcF9hdG9t aWNfZmluZF92Y3BpX3Nsb3RzKCkKKyAqIGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkKKyAqCisg KiBSZXR1cm5zOgorICogMCBpZiBhbGwgc2xvdHMgZm9yIHRoaXMgcG9ydCB3ZXJlIGFkZGVkIGJh Y2sgdG8KKyAqICZkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlLmF2YWlsX3Nsb3RzIG9yIG5lZ2F0 aXZlIGVycm9yIGNvZGUKICAqLwogaW50IGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3Rz KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKIAkJCQkgICAgIHN0cnVjdCBkcm1fZHBf bXN0X3RvcG9sb2d5X21nciAqbWdyLAotCQkJCSAgICAgaW50IHNsb3RzKQorCQkJCSAgICAgc3Ry dWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9n eV9zdGF0ZSAqdG9wb2xvZ3lfc3RhdGU7CisJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24g KnBvczsKKwlib29sIGZvdW5kID0gZmFsc2U7CiAKIAl0b3BvbG9neV9zdGF0ZSA9IGRybV9hdG9t aWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZShzdGF0ZSwgbWdyKTsKIAlpZiAoSVNfRVJSKHRvcG9s b2d5X3N0YXRlKSkKIAkJcmV0dXJuIFBUUl9FUlIodG9wb2xvZ3lfc3RhdGUpOwogCi0JLyogV2Ug Y2Fubm90IHJlbHkgb24gcG9ydC0+dmNwaS5udW1fc2xvdHMgdG8gdXBkYXRlCi0JICogdG9wb2xv Z3lfc3RhdGUtPmF2YWlsX3Nsb3RzIGFzIHRoZSBwb3J0IG1heSBub3QgZXhpc3QgaWYgdGhlIHBh cmVudAotCSAqIGJyYW5jaCBkZXZpY2Ugd2FzIHVucGx1Z2dlZC4gVGhpcyBzaG91bGQgYmUgZml4 ZWQgYnkgdHJhY2tpbmcKLQkgKiBwZXItcG9ydCBzbG90IGFsbG9jYXRpb24gaW4gZHJtX2RwX21z dF90b3BvbG9neV9zdGF0ZSBpbnN0ZWFkIG9mCi0JICogZGVwZW5kaW5nIG9uIHRoZSBjYWxsZXIg dG8gdGVsbCB1cyBob3cgbWFueSBzbG90cyB0byByZWxlYXNlLgotCSAqLwotCXRvcG9sb2d5X3N0 YXRlLT5hdmFpbF9zbG90cyArPSBzbG90czsKLQlEUk1fREVCVUdfS01TKCJ2Y3BpIHNsb3RzIHJl bGVhc2VkPSVkLCBhdmFpbD0lZFxuIiwKLQkJCXNsb3RzLCB0b3BvbG9neV9zdGF0ZS0+YXZhaWxf c2xvdHMpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmdG9wb2xvZ3lfc3RhdGUtPnZjcGlz LCBuZXh0KSB7CisJCWlmIChwb3MtPnBvcnQgPT0gcG9ydCkgeworCQkJZm91bmQgPSB0cnVlOwor CQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKFdBUk5fT04oIWZvdW5kKSkgeworCQlEUk1fRVJST1Io Im5vIFZDUEkgZm9yIFtNU1QgUE9SVDolcF0gZm91bmQgaW4gbXN0IHN0YXRlICVwXG4iLAorCQkJ ICBwb3J0LCAmdG9wb2xvZ3lfc3RhdGUtPmJhc2UpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisK KwlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIFBPUlQ6JXBdIFZDUEkgJWQgLT4gMFxuIiwgcG9ydCwg cG9zLT52Y3BpKTsKKwlpZiAocG9zLT52Y3BpKSB7CisJCWRybV9kcF9tc3RfcHV0X3BvcnRfbWFs bG9jKHBvcnQpOworCQlwb3MtPnZjcGkgPSAwOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMzM5 NSwxNSArMzQ3OCw0MiBAQCBzdGF0aWMgdm9pZCBkcm1fZHBfZGVzdHJveV9jb25uZWN0b3Jfd29y ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiBzdGF0aWMgc3RydWN0IGRybV9wcml2YXRlX3N0 YXRlICoKIGRybV9kcF9tc3RfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcHJpdmF0ZV9vYmog Km9iaikKIHsKLQlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqc3RhdGU7CisJc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKnN0YXRlLCAqb2xkX3N0YXRlID0KKwkJdG9f ZHBfbXN0X3RvcG9sb2d5X3N0YXRlKG9iai0+c3RhdGUpOworCXN0cnVjdCBkcm1fZHBfdmNwaV9h bGxvY2F0aW9uICpwb3MsICp2Y3BpOwogCi0Jc3RhdGUgPSBrbWVtZHVwKG9iai0+c3RhdGUsIHNp emVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlzdGF0ZSA9IGttZW1kdXAob2xkX3N0YXRlLCBz aXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzdGF0ZSkKIAkJcmV0dXJuIE5VTEw7 CiAKIAlfX2RybV9hdG9taWNfaGVscGVyX3ByaXZhdGVfb2JqX2R1cGxpY2F0ZV9zdGF0ZShvYmos ICZzdGF0ZS0+YmFzZSk7CiAKKwlJTklUX0xJU1RfSEVBRCgmc3RhdGUtPnZjcGlzKTsKKwlzdGF0 ZS0+dmNwaV9hbGxvY2F0ZWQgPSBmYWxzZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAm b2xkX3N0YXRlLT52Y3BpcywgbmV4dCkgeworCQkvKiBQcnVuZSBsZWZ0b3ZlciBmcmVlZCBWQ1BJ IGFsbG9jYXRpb25zICovCisJCWlmICghcG9zLT52Y3BpKQorCQkJY29udGludWU7CisKKwkJdmNw aSA9IGttZW1kdXAocG9zLCBzaXplb2YoKnZjcGkpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF2Y3Bp KQorCQkJZ290byBmYWlsOworCisJCWRybV9kcF9tc3RfZ2V0X3BvcnRfbWFsbG9jKHZjcGktPnBv cnQpOworCQlsaXN0X2FkZCgmdmNwaS0+bmV4dCwgJnN0YXRlLT52Y3Bpcyk7CisJfQorCiAJcmV0 dXJuICZzdGF0ZS0+YmFzZTsKKworZmFpbDoKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9z LCB2Y3BpLCAmc3RhdGUtPnZjcGlzLCBuZXh0KSB7CisJCWRybV9kcF9tc3RfcHV0X3BvcnRfbWFs bG9jKHBvcy0+cG9ydCk7CisJCWtmcmVlKHBvcyk7CisJfQorCWtmcmVlKHN0YXRlKTsKKworCXJl dHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBkcm1fZHBfbXN0X2Rlc3Ryb3lfc3RhdGUoc3Ry dWN0IGRybV9wcml2YXRlX29iaiAqb2JqLApAQCAtMzQxMSwxMCArMzUyMSwxMDkgQEAgc3RhdGlj IHZvaWQgZHJtX2RwX21zdF9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogKm9i aiwKIHsKIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlID0KIAkJ dG9fZHBfbXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlKTsKKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxs b2NhdGlvbiAqcG9zLCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgdG1w LCAmbXN0X3N0YXRlLT52Y3BpcywgbmV4dCkgeworCQkvKiBXZSBvbmx5IGtlZXAgcmVmZXJlbmNl cyB0byBwb3J0cyB3aXRoIG5vbi16ZXJvIFZDUElzICovCisJCWlmIChwb3MtPnZjcGkpCisJCQlk cm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhwb3MtPnBvcnQpOworCQlrZnJlZShwb3MpOworCX0K IAogCWtmcmVlKG1zdF9zdGF0ZSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50Citkcm1fZHBfbXN0 X2F0b21pY19jaGVja190b3BvbG9neV9zdGF0ZShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9t Z3IgKm1nciwKKwkJCQkgICAgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1z dF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqdmNwaTsKKwlpbnQg YXZhaWxfc2xvdHMgPSA2MywgcmV0OworCisJLyogVGhlcmUncyBubyBwb3NzaWJsZSBzY2VuYXJp byB3aGVyZSByZWxlYXNpbmcgVkNQSSBvciBrZWVwaW5nIGl0IHRoZQorCSAqIHNhbWUgd291bGQg bWFrZSB0aGUgc3RhdGUgaW52YWxpZAorCSAqLworCWlmICghbXN0X3N0YXRlLT52Y3BpX2FsbG9j YXRlZCkgeworCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIE1HUjolcF0gc3RhdGUgJXAgYWxsb2Nh dGVzIG5vIFZDUEksIGNoZWNrIHNraXBwZWRcbiIsCisJCQkJIG1nciwgJm1zdF9zdGF0ZS0+YmFz ZSk7CisJCXJldHVybiAwOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkodmNwaSwgJm1zdF9z dGF0ZS0+dmNwaXMsIG5leHQpIHsKKwkJLyogUmVsZWFzaW5nIFZDUEkgaXMgYWx3YXlzIE9LLWV2 ZW4gaWYgdGhlIHBvcnQgaXMgZ29uZSAqLworCQlpZiAoIXZjcGktPnZjcGkpIHsKKwkJCURSTV9E RUJVR19BVE9NSUMoIltNU1QgUE9SVDolcF0gcmVsZWFzZXMgYWxsIFZDUEkgc2xvdHNcbiIsCisJ CQkJCSB2Y3BpLT5wb3J0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFkcm1fZHBfbXN0 X3RvcG9sb2d5X2dldF9wb3J0KHZjcGktPnBvcnQpKSB7CisJCQlEUk1fREVCVUdfQVRPTUlDKCJb TVNUIFBPUlQ6JXBdIGlzIGdvbmUgYnV0IHN0aWxsIGhhcyBWQ1BJLCBjYW5ub3QgYWRkIG5ldyBW Q1BJXG4iLAorCQkJCQkgdmNwaS0+cG9ydCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJ CURSTV9ERUJVR19BVE9NSUMoIltNU1QgUE9SVDolcF0gcmVxdWlyZXMgJWQgdmNwaSBzbG90c1xu IiwKKwkJCQkgdmNwaS0+cG9ydCwgdmNwaS0+dmNwaSk7CisKKwkJYXZhaWxfc2xvdHMgLT0gdmNw aS0+dmNwaTsKKwkJaWYgKGF2YWlsX3Nsb3RzIDwgMCkgeworCQkJRFJNX0RFQlVHX0FUT01JQygi W01TVCBQT1JUOiVwXSBub3QgZW5vdWdoIFZDUEkgc2xvdHMgaW4gbXN0IHN0YXRlICVwIChhdmFp bD0lZClcbiIsCisJCQkJCSB2Y3BpLT5wb3J0LCBtc3Rfc3RhdGUsCisJCQkJCSBhdmFpbF9zbG90 cyArIHZjcGktPnZjcGkpOworCQkJcmV0ID0gLUVOT1NQQzsKKwkJCWdvdG8gcG9ydF9mYWlsOwor CQl9CisKKwkJZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydCh2Y3BpLT5wb3J0KTsKKwl9CisJ RFJNX0RFQlVHX0FUT01JQygiW01TVCBNR1I6JXBdIG1zdCBzdGF0ZSAlcCBWQ1BJIGF2YWlsPSVk IHVzZWQ9JWRcbiIsCisJCQkgbWdyLCBtc3Rfc3RhdGUsIGF2YWlsX3Nsb3RzLAorCQkJIDYzIC0g YXZhaWxfc2xvdHMpOworCisJcmV0dXJuIDA7Citwb3J0X2ZhaWw6CisJZHJtX2RwX21zdF90b3Bv bG9neV9wdXRfcG9ydCh2Y3BpLT5wb3J0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGRy bV9kcF9tc3RfYXRvbWljX2NoZWNrIC0gQ2hlY2sgdGhhdCB0aGUgbmV3IHN0YXRlIG9mIGFuIE1T VCB0b3BvbG9neSBpbiBhbgorICogYXRvbWljIHVwZGF0ZSBpcyB2YWxpZAorICogQHN0YXRlOiBQ b2ludGVyIHRvIHRoZSBuZXcgJnN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlCisgKgor ICogQ2hlY2tzIHRoZSBnaXZlbiB0b3BvbG9neSBzdGF0ZSBmb3IgYW4gYXRvbWljIHVwZGF0ZSB0 byBlbnN1cmUgdGhhdCBpdCdzCisgKiB2YWxpZC4gVGhpcyBpbmNsdWRlcyBjaGVja2luZyB3aGV0 aGVyIHRoZXJlJ3MgZW5vdWdoIGJhbmR3aWR0aCB0byBzdXBwb3J0CisgKiB0aGUgbmV3IFZDUEkg YWxsb2NhdGlvbnMgaW4gdGhlIGF0b21pYyB1cGRhdGUuCisgKgorICogQW55IGF0b21pYyBkcml2 ZXJzIHN1cHBvcnRpbmcgRFAgTVNUIG11c3QgbWFrZSBzdXJlIHRvIGNhbGwgdGhpcyBhZnRlcgor ICogY2hlY2tpbmcgdGhlIHJlc3Qgb2YgdGhlaXIgc3RhdGUgaW4gdGhlaXIKKyAqICZkcm1fbW9k ZV9jb25maWdfZnVuY3MuYXRvbWljX2NoZWNrKCkgY2FsbGJhY2suCisgKgorICogU2VlIGFsc286 CisgKiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpCisgKiBkcm1fZHBfYXRvbWljX3Jl bGVhc2VfdmNwaV9zbG90cygpCisgKgorICogUmV0dXJuczoKKyAqCisgKiAwIGlmIHRoZSBuZXcg c3RhdGUgaXMgdmFsaWQsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICovCitpbnQg ZHJtX2RwX21zdF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQor eworCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyOworCXN0cnVjdCBkcm1fZHBf bXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGU7CisJaW50IGksIHJldCA9IDA7CisKKwlmb3Jf ZWFjaF9uZXdfbXN0X21ncl9pbl9zdGF0ZShzdGF0ZSwgbWdyLCBtc3Rfc3RhdGUsIGkpIHsKKwkJ cmV0ID0gZHJtX2RwX21zdF9hdG9taWNfY2hlY2tfdG9wb2xvZ3lfc3RhdGUobWdyLCBtc3Rfc3Rh dGUpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9S VF9TWU1CT0woZHJtX2RwX21zdF9hdG9taWNfY2hlY2spOworCiBjb25zdCBzdHJ1Y3QgZHJtX3By aXZhdGVfc3RhdGVfZnVuY3MgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZV9mdW5jcyA9IHsKIAku YXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9kcF9tc3RfZHVwbGljYXRlX3N0YXRlLAogCS5h dG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9kcF9tc3RfZGVzdHJveV9zdGF0ZSwKQEAgLTM0OTcs OSArMzcwNiw3IEBAIGludCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9pbml0KHN0cnVjdCBkcm1f ZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAogCQlyZXR1cm4gLUVOT01FTTsKIAogCW1zdF9zdGF0 ZS0+bWdyID0gbWdyOwotCi0JLyogbWF4LiB0aW1lIHNsb3RzIC0gb25lIHNsb3QgZm9yIE1UUCBo ZWFkZXIgKi8KLQltc3Rfc3RhdGUtPmF2YWlsX3Nsb3RzID0gNjM7CisJSU5JVF9MSVNUX0hFQUQo Jm1zdF9zdGF0ZS0+dmNwaXMpOwogCiAJZHJtX2F0b21pY19wcml2YXRlX29ial9pbml0KGRldiwg Jm1nci0+YmFzZSwKIAkJCQkgICAgJm1zdF9zdGF0ZS0+YmFzZSwKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rpc3BsYXkuYwppbmRleCAyYzNmM2Y2OGQ1MDYuLjg2OGNiODk3ZjYyOSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtMTI2OTAsNiArMTI2OTAsMTAgQEAgc3RhdGlj IGludCBpbnRlbF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgICAg ICAgIlttb2Rlc2V0XSIgOiAiW2Zhc3RzZXRdIik7CiAJfQogCisJcmV0ID0gZHJtX2RwX21zdF9h dG9taWNfY2hlY2soc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAlpZiAoYW55 X21zKSB7CiAJCXJldCA9IGludGVsX21vZGVzZXRfY2hlY2tzKHN0YXRlKTsKIApkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcF9tc3QuYwppbmRleCA0ZDZjZWQzNGQ0NjUuLjY3NTRkNzkyMmEzNCAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMKQEAgLTQxLDggKzQxLDEzIEBAIHN0YXRpYyBi b29sIGludGVsX2RwX21zdF9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5j b2RlciwKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gY29ubl9zdGF0ZS0+Y29u bmVjdG9yOwogCXZvaWQgKnBvcnQgPSB0b19pbnRlbF9jb25uZWN0b3IoY29ubmVjdG9yKS0+cG9y dDsKIAlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUgPSBwaXBlX2NvbmZpZy0+YmFzZS5z dGF0ZTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBwaXBlX2NvbmZpZy0+YmFzZS5jcnRjOwor CXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUgPQorCQlkcm1fYXRvbWljX2dl dF9vbGRfY3J0Y19zdGF0ZShzdGF0ZSwgY3J0Yyk7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpu ZXdfY3J0Y19zdGF0ZSA9ICZwaXBlX2NvbmZpZy0+YmFzZTsKIAlpbnQgYnBwOwotCWludCBsYW5l X2NvdW50LCBzbG90cyA9IDA7CisJaW50IGxhbmVfY291bnQsIHNsb3RzID0KKwkJdG9faW50ZWxf Y3J0Y19zdGF0ZShvbGRfY3J0Y19zdGF0ZSktPmRwX21fbi50dTsKIAljb25zdCBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSA9ICZwaXBlX2NvbmZpZy0+YmFzZS5hZGp1c3Rl ZF9tb2RlOwogCWludCBtc3RfcGJuOwogCWJvb2wgY29uc3RhbnRfbiA9IGRybV9kcF9oYXNfcXVp cmsoJmludGVsX2RwLT5kZXNjLApAQCAtNzcsOCArODIsMTIgQEAgc3RhdGljIGJvb2wgaW50ZWxf ZHBfbXN0X2NvbXB1dGVfY29uZmlnKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAogCW1z dF9wYm4gPSBkcm1fZHBfY2FsY19wYm5fbW9kZShhZGp1c3RlZF9tb2RlLT5jcnRjX2Nsb2NrLCBi cHApOwogCXBpcGVfY29uZmlnLT5wYm4gPSBtc3RfcGJuOwogCi0JLyogWm9tYmllIGNvbm5lY3Rv cnMgY2FuJ3QgaGF2ZSBWQ1BJIHNsb3RzICovCi0JaWYgKCFkcm1fY29ubmVjdG9yX2lzX3VucmVn aXN0ZXJlZChjb25uZWN0b3IpKSB7CisJLyogT25seSBjaGFuZ2UgVkNQSSBhbGxvY2F0aW9uIG9u IGFjdHVhbCBtb2RlIGNoYW5nZXMsIHRvIHByZXZlbnQgdXMKKwkgKiBmcm9tIHRyeWluZyB0byBh bGxvY2F0ZSBWQ1BJIHRvIHBvcnRzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0IHdoZW4gd2UKKwkgKiBt YXkganVzdCBiZSB0cnlpbmcgdG8gZGlzYWJsZSBEUE1TIG9uIHRoZW0KKwkgKi8KKwlpZiAobmV3 X2NydGNfc3RhdGUtPm1vZGVfY2hhbmdlZCB8fAorCSAgICBuZXdfY3J0Y19zdGF0ZS0+Y29ubmVj dG9yc19jaGFuZ2VkKSB7CiAJCXNsb3RzID0gZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMo c3RhdGUsCiAJCQkJCQkgICAgICAmaW50ZWxfZHAtPm1zdF9tZ3IsCiAJCQkJCQkgICAgICBwb3J0 LApAQCAtMTA3LDM2ICsxMTYsMzkgQEAgc3RhdGljIGJvb2wgaW50ZWxfZHBfbXN0X2NvbXB1dGVf Y29uZmlnKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAogCXJldHVybiB0cnVlOwogfQog Ci1zdGF0aWMgaW50IGludGVsX2RwX21zdF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciwKLQkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm5ld19jb25uX3N0 YXRlKQorc3RhdGljIGludAoraW50ZWxfZHBfbXN0X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yLAorCQkJICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqbmV3 X2Nvbm5fc3RhdGUpCiB7CisJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9y ID0KKwkJdG9faW50ZWxfY29ubmVjdG9yKGNvbm5lY3Rvcik7CisJc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyICptZ3IgPQorCQkmaW50ZWxfY29ubmVjdG9yLT5tc3RfcG9ydC0+bXN0X21n cjsKKwlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0ID0gaW50ZWxfY29ubmVjdG9yLT5wb3J0 OwogCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IG5ld19jb25uX3N0YXRlLT5zdGF0 ZTsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqb2xkX2Nvbm5fc3RhdGU7Ci0Jc3RydWN0 IGRybV9jcnRjICpvbGRfY3J0YzsKLQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7 Ci0JaW50IHNsb3RzLCByZXQgPSAwOworCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpvbGRf Y29ubl9zdGF0ZSA9CisJCWRybV9hdG9taWNfZ2V0X29sZF9jb25uZWN0b3Jfc3RhdGUoc3RhdGUs IGNvbm5lY3Rvcik7CisJc3RydWN0IGRybV9jcnRjICpvbGRfY3J0YyA9IG9sZF9jb25uX3N0YXRl LT5jcnRjLAorCQkJKm5ld19jcnRjID0gbmV3X2Nvbm5fc3RhdGUtPmNydGM7CisJc3RydWN0IGRy bV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSwgKm5ld19jcnRjX3N0YXRlOwogCi0Jb2xkX2Nv bm5fc3RhdGUgPSBkcm1fYXRvbWljX2dldF9vbGRfY29ubmVjdG9yX3N0YXRlKHN0YXRlLCBjb25u ZWN0b3IpOwotCW9sZF9jcnRjID0gb2xkX2Nvbm5fc3RhdGUtPmNydGM7CiAJaWYgKCFvbGRfY3J0 YykKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIDA7CiAKLQljcnRjX3N0YXRlID0gZHJtX2F0b21p Y19nZXRfbmV3X2NydGNfc3RhdGUoc3RhdGUsIG9sZF9jcnRjKTsKLQlzbG90cyA9IHRvX2ludGVs X2NydGNfc3RhdGUoY3J0Y19zdGF0ZSktPmRwX21fbi50dTsKLQlpZiAoZHJtX2F0b21pY19jcnRj X25lZWRzX21vZGVzZXQoY3J0Y19zdGF0ZSkgJiYgc2xvdHMgPiAwKSB7Ci0JCXN0cnVjdCBkcm1f ZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyOwotCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKm9sZF9lbmNv ZGVyOworCW9sZF9jcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfb2xkX2NydGNfc3RhdGUoc3Rh dGUsIG9sZF9jcnRjKTsKKwlpZiAoIW9sZF9jcnRjX3N0YXRlIHx8CisJICAgICF0b19pbnRlbF9j cnRjX3N0YXRlKG9sZF9jcnRjX3N0YXRlKS0+ZHBfbV9uLnR1KQorCQlyZXR1cm4gMDsKIAotCQlv bGRfZW5jb2RlciA9IG9sZF9jb25uX3N0YXRlLT5iZXN0X2VuY29kZXI7Ci0JCW1nciA9ICZlbmNf dG9fbXN0KG9sZF9lbmNvZGVyKS0+cHJpbWFyeS0+ZHAubXN0X21ncjsKKwkvKiBJZiB3ZSBzd2l0 Y2hlZCBDUlRDcywgY2xlYXIgdGhlIHByZXZpb3VzIG9uZSdzIGFsbG9jYXRpb24gKi8KKwluZXdf Y3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X25ld19jcnRjX3N0YXRlKHN0YXRlLCBvbGRfY3J0 Yyk7CisJaWYgKG5ld19jcnRjX3N0YXRlLT5jb25uZWN0b3JzX2NoYW5nZWQgJiYgIW5ld19jcnRj X3N0YXRlLT5lbmFibGUpCisJCXRvX2ludGVsX2NydGNfc3RhdGUobmV3X2NydGNfc3RhdGUpLT5k cF9tX24udHUgPSAwOwogCi0JCXJldCA9IGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3Rz KHN0YXRlLCBtZ3IsIHNsb3RzKTsKLQkJaWYgKHJldCkKLQkJCURSTV9ERUJVR19LTVMoImZhaWxl ZCByZWxlYXNpbmcgJWQgdmNwaSBzbG90czolZFxuIiwgc2xvdHMsIHJldCk7Ci0JCWVsc2UKLQkJ CXRvX2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0ZSktPmRwX21fbi50dSA9IDA7Ci0JfQotCXJl dHVybiByZXQ7CisJaWYgKG5ld19jcnRjKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBkcm1fZHBf YXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cyhzdGF0ZSwgbWdyLCBwb3J0KTsKIH0KIAogc3RhdGlj IHZvaWQgaW50ZWxfbXN0X2Rpc2FibGVfZHAoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIs CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oIGIvaW5jbHVkZS9k cm0vZHJtX2RwX21zdF9oZWxwZXIuaAppbmRleCBiOGE4ZDc1NDEwZDAuLjc5ZTNmOWM3MzBhNSAx MDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAorKysgYi9pbmNsdWRl L2RybS9kcm1fZHBfbXN0X2hlbHBlci5oCkBAIC00MTIsOSArNDEyLDE2IEBAIHN0cnVjdCBkcm1f ZHBfcGF5bG9hZCB7CiAKICNkZWZpbmUgdG9fZHBfbXN0X3RvcG9sb2d5X3N0YXRlKHgpIGNvbnRh aW5lcl9vZih4LCBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSwgYmFzZSkKIAorc3Ry dWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24geworCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBv cnQ7CisJaW50IHZjcGk7CisJc3RydWN0IGxpc3RfaGVhZCBuZXh0OworfTsKKwogc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgewogCXN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSBiYXNl OwotCWludCBhdmFpbF9zbG90czsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHZjcGlzOworCXU4IHZjcGlf YWxsb2NhdGVkOwogCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyOwogfTsKIApA QCAtNjI1LDE0ICs2MzIsMTcgQEAgdm9pZCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9zdXNwZW5k KHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKTsKIGludCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21ncl9yZXN1bWUoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpOwog c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKmRybV9hdG9taWNfZ2V0X21zdF90b3Bv bG9neV9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCiAJCQkJCQkJCSAgICBz dHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncik7Ci1pbnQgZHJtX2RwX2F0b21pY19m aW5kX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAotCQkJCSAgc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCi0JCQkJICBzdHJ1Y3QgZHJtX2RwX21z dF9wb3J0ICpwb3J0LCBpbnQgcGJuKTsKLWludCBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9z bG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCi0JCQkJICAgICBzdHJ1Y3QgZHJt X2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKLQkJCQkgICAgIGludCBzbG90cyk7CitpbnQgX19t dXN0X2NoZWNrCitkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUsCisJCQkgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3Ig Km1nciwKKwkJCSAgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsIGludCBwYm4pOwor aW50IF9fbXVzdF9jaGVjaworZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQkJCSBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9n eV9tZ3IgKm1nciwKKwkJCQkgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCk7CiBpbnQgZHJt X2RwX3NlbmRfcG93ZXJfdXBkb3duX3BoeShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3Ig Km1nciwKIAkJCQkgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgYm9vbCBwb3dlcl91cCk7 CitpbnQgX19tdXN0X2NoZWNrIGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSk7CiAKIHZvaWQgZHJtX2RwX21zdF9nZXRfcG9ydF9tYWxsb2Moc3Ry dWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCk7CiB2b2lkIGRybV9kcF9tc3RfcHV0X3BvcnRfbWFs bG9jKHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOwotLSAKMi4xOS4yCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOb3V2ZWF1IG1haWxpbmcgbGlz dApOb3V2ZWF1QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL25vdXZlYXUK