From mboxrd@z Thu Jan 1 00:00:00 1970 From: daeinki Date: Thu, 23 Jun 2011 01:55:50 +0000 Subject: Re: Some questions about DRM(Direct Rendering Manager) Message-Id: <4E029D26.1050902@samsung.com> List-Id: References: <4E016EDC.30200@samsung.com> <4E0185E7.8020708@samsung.com> In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="euc-kr" Content-Transfer-Encoding: base64 To: Rob Clark Cc: linux-fbdev , Kukjin Kim , Kyungmin Park , dri-devel@lists.freedesktop.org, Paul Mundt , jesse.barnes@intel.com, InKi Dae , linux-arm-kernel@lists.infradead.org SGkgUm9iIENsYXJrLAoKSSdtIHNvcnJ5IGZvciB0aGF0IG15IG1lYW4gZGlkbid0IGNvbnZleSB0 byB5b3Ugc28gSSBjb25kZW5zZWQgdGhhdCBpbnRvCmJyaWVmIGFnYWluLgoKSSBrbm93IGRybV9m Yl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKCkgY2FsbHMgcmVnaXN0ZXJfZnJhbWVidWZmZXIoKSwK TXkgcXVlc3Rpb24gaXMgdGhhdCBpdCdzIHJpZ2h0IHdheSB0byBjYWxsIG9ubHkgZHJtX2ZiX2hl bHBlcl9zZXRfcGFyKCkKaWYgZmJfaGVscGVyLT5mdW5jcy0+ZmJfcHJvYmUoKSByZXR1cm5zIG5v bnplcm8uCgpJbiB0aGlzIGNhc2UsIGlmIGZiX2hlbHBlci0+ZnVuY3MtPmZiX3Byb2JlKCkgcmV0 dXJucyB6ZXJvIHRoZW4KcmVnaXN0ZXJfZnJhbWVidWZmZXIoKSBpc24ndCBjYWxsZWQgYW5kIHRo aXMgbWVhbnMgbGludXggZnJhbWVidWZmZXIKaXNuJ3QgdXNlZCBhbnltb3JlLgoKb25lIG1vcmUg cXVlc3Rpb24sIG90aGVyd2lzZSBpZiBpdCB1c2VzIGRybSBiYXNlZCBmcmFtZWJ1ZmZlciwKcmVn aXN0ZXJfZnJhbWVidWZmZXIoKSBzaG91bGQgYmUgY2FsbGVkIG5lY2Vzc2FyaWx5IGF0IGJvb3Rp bmcgdGltZT8KClRoYW5rIHlvdS4KClJvYiBDbGFyayC+tCCx2zoKPiBmd2l3LCBkcm1fZmJfaGVs cGVyX3NpbmdsZV9mYl9wcm9iZSgpIGNhbGxzIHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCkgKGlmCj4g dGhhdCB3YXMgdGhlIHF1ZXN0aW9uPykKPiAKPiBCUiwKPiAtUgo+IAo+IDIwMTEvNi8yMiBJbktp IERhZSA8ZGFlaW5raUBnbWFpbC5jb20+Ogo+PiBJdCBhZGRzIGRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcgdG8gdGhpcyBtYWlsIHRocmVhZC4KPj4gVGhhbmsgeW91Lgo+Pgo+PiAyMDEx s+IgNr/5IDIywM8gv8DIxCAzOjA0LCBkYWVpbmtpIDxpbmtpLmRhZUBzYW1zdW5nLmNvbT601MDH ILi7Ogo+Pj4gYmVsb3cgaXMgYWRkaXRpb25hbCBjb21tZW50cy4KPj4+Cj4+PiBkYWVpbmtpIL60 ILHbOgo+Pj4+IEhpIGFsbCwKPj4+Pgo+Pj4+IEknbSB3cml0aW5nIFNhbXN1bmcgU29DIGJhc2Vk IERSTSBmcmFtZXdvcmsgYW5kIHRoaXMgb25lIGluY2x1ZGVzIEZJTUQKPj4+PiBhbmQgSERNSSBk cml2ZXIgYXMgaGFyZHdhcmUgZGVwZW5kZW50IG1vZHVsZXMuIGFuZCBmb3Igbm93LCBlbmNvZGVy LAo+Pj4+IGNvbm5lY3RvciwgY3J0YyBhbmQgZmIgbW9kdWxlIGhhcyBiZWVuIG1hdGVyaWFsaXpl ZCBhbG1vc3QuIGJ1dCBJJ20KPj4+PiBjb250ZW5kaW5nIHdpdGggIGZyYW1lYnVmZmVyIHNldHRp bmcgaXNzdWUoY3JlYXRlZCBmYl9pbmZvIHNob3VsZCBiZQo+Pj4+IHJlZ2lzdGVyZWQgdG8gbGlu dXggZnJhbWVidWZmZXIgdGhyb3VnaCByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigpIG9yIG5vdClhcwo+ Pj4+IGRlZmF1bHQgZnJhbWVidWZmZXIgYXQgYm9vdGluZyB0aW1lLgo+Pj4+Cj4+Pj4gYXQgZHJt X2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoKSBvZiBkcm1fZmJfaGVscGVyLmMgZmlsZSwgZmJf aGVscGVyJ3MKPj4+PiBmYl9wcm9iZSBjYWxsYmFjayBpcyBjYWxsZWQgYW5kIHRoaXMgb25lIGNy ZWF0ZXMgbmV3IGZyYW1lYnVmZmVyIGFuZAo+Pj4+IHJldHVybnMgYSB2YWx1ZSBtb3JlIHRoZW4g MCBpZiB0cnVlLiBpbnRlcm5hbGx5LCB0aGlzIHByb2Nlc3MgY3JlYXRlcyBhbgo+Pj4+IGZiX2lu Zm8gb2JqZWN0IGFuZCBkcm1fZnJhbWVidWZmZXIgYW5kIHRoZW4gZHJtX2ZyYW1lYnVmZmVyIHdv dWxkIGJlCj4+Pj4gYWRkZWQgdG8gbW9kZV9jb25maWcuZmJfbGlzdCBvZiB0aGUgZHJtX2Rldmlj ZS4KPj4+Pgo+Pj4gaXQncyBteSBtaXN0YWtlLiByZXR1cm4gdmFsdWUgaXMgMCBpZiB0cnVlLCBu b256ZXJvIG90aGVyd2lzZS4KPj4+Cj4+Pj4gYSB2YWx1ZSByZXR1cm5lZCwgbmV3X2ZiIGlzIHVz ZWQgdG8gZGVjaWRlIHRoYXQgaXQgY2FsbHMKPj4+PiByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigpIG9y IGRybV9mYl9oZWxwZXJfc2V0X3BhcigpLiBhdCB0aGlzIHBvaW50LCBJIGFtCj4+Pj4gY29uZnVz ZWQgaXQncyBhIGdvb2Qgd2F5IHRvIGNhbGwgcmVnaXN0ZXJfZnJhbWVidWZmZXIoKSBvdGhlcndp c2UKPj4+PiBkcm1fZmJfaGVscGVyX3NldF9wYXIoKS4gaWYgcmVnaXN0ZXJfZnJhbWVidWZmZXIo KSBpcyBjYWxsZWQgdGhlbiBJCj4+Pj4gZ3Vlc3MgZHJtX2ZiX2hlbHBlcl9zZXRfcGFyKCkgb3Ig ZHJtX2NydGNfaGVscGVyX3NldF9jb25maWcoKSBzaG91bGQgYmUKPj4+PiBjYWxsZWQgc29tZXdo ZXJlIHN1YnNlcXVlbnRseSB0byBhcHBseSB0aGlzIG9uZSB0byByZWFsIGhhcmR3YXJlIGJlY2F1 c2UKPj4+PiBwcmV2aW91cyBwcm9jZXNzIGlzIGp1c3QgZm9yIG1haW50YWluaW5nIGRhdGEgbG9n aWNhbGx5Lihub3Qgc2V0IHVwIGRhdGEKPj4+PiB0byBoL3cpCj4+Pj4KPj4+PiBpdCdzIGEgcmln aHQgd2F5IHRvIGNhbGwgcmVnaXN0ZXJfZnJhbWVidWZmZXIoKSBhbmQgdGhlbgo+Pj4+IGRybV9m Yl9oZWxwZXJfc2V0X3BhcigpIG9yIGRybV9jcnRjX2hlbHBlcl9zZXRfY29uZmlnKCk/IG90aGVy d2lzZSBqdXN0Cj4+Pj4gb25seSBkcm1fZmJfaGVscGVyX3NldF9wYXIoKSBvciBkcm1fY3J0Y19o ZWxwZXJfc2V0X2NvbmZpZygpIGlnbm9yaW5nCj4+Pj4gcmVnaXN0ZXJfZnJhbWVidWZmZXIoKT8g YW5kIHdoYXQgaXMgdGhlIHB1cnBvc2Ugb2YgdXNpbmcKPj4+PiByZWdpc3Rlcl9mcmFtZWJ1ZmZl cigpPwo+Pj4+Cj4+PiBJIHVuZGVyc3Rvb2QgdGhhdCBpZiBmYl9wcm9iZSgpIGNhbGxiYWNrIGlz IGZhaWwgdGhlbiBmYl9pbmZvIG9iamVjdCBpcwo+Pj4gcmVnaXN0ZXJlZCB0byBsaW51eCBmcmFt ZWJ1ZmZlciB0aHJvdWdoIHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCkKPj4+IG90aGVyd2lzZShpZiB0 cnVlKSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIHdvdWxkIGJlIGNvbXBsZXRlZCBieQo+Pj4gZHJt X2ZiX2hlbHBlcl9zZXRfcGFyKCkgc28gdGhlIHJlYXNvbiBvZiB1c2luZyByZWdpc3Rlcl9mcmFt ZWJ1ZmZlcigpIGlzCj4+PiB0aGF0IHRoZSBjYXNlIG9mIGZhaWxpbmcgZmJfcHJvYmUoKSBjYWxs YmFjaywgaXQgaXMgZm9yIGRyYXdpbmcgb24gb25seQo+Pj4gbGludXggZnJhbWVidWZmZXIuIGlz IGl0IHJpZ2h0Pwo+Pj4KPj4+PiBJbiBteSBjYXNlLCBmaXJzdCwgcmVnaXN0ZXJfZnJhbWVidWZm ZXIoKSBpcyBjYWxsZWQgYW5kIHRoZW4gaWYgZGVzaXJlZAo+Pj4+IGRlZmF1bHQgY3J0YyBpZCBp cyBtYXRjaGVkIHdpdGggZHJtX2ZiX2hlbHBlci0+Y3J0Y19pbmZvWzAgfiBuXS5jcnRjX2lkLAo+ Pj4+IGl0IGdldHMgbW9kZV9zZXQgb2YgZHJtX2ZiX2hlbHBlci0+Y3J0Y19pbmZvW25dIGFuZCB0 aGVuICBpdCBjYWxscwo+Pj4+IGRybV9jcnRjX2hlbHBlcl9zZXRfY29uZmlnKG1vZGVfc2V0KS4g YXQgdGhpcyB0aW1lLCBhbGwgdGhlIGhhcmR3YXJlCj4+Pj4gY29uZmlndXJhdGlvbnMgd291bGQg YmUgY29tcGxldGVkLgo+Pj4+Cj4+Pj4gdGhhbmsgeW91IGluIGFkdmFuY2UuCj4+Pj4KPj4+PiBC ZXN0IFJlZ2FyZHMKPj4+PiBJbmtpIERhZS4KPj4+Pgo+Pj4KPj4+IF9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4+PiBsaW51eC1hcm0ta2VybmVsIG1haWxp bmcgbGlzdAo+Pj4gbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCj4+PiBodHRw Oi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK Pj4+Cj4+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4+ IGRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKPj4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y Zwo+PiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVsCj4+Cj4gCgotLQpUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGlu ZSAidW5zdWJzY3JpYmUgbGludXgtZmJkZXYiIGluCnRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBt YWpvcmRvbW9Admdlci5rZXJuZWwub3JnCk1vcmUgbWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6Ly92 Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbA== From mboxrd@z Thu Jan 1 00:00:00 1970 From: inki.dae@samsung.com (daeinki) Date: Thu, 23 Jun 2011 10:55:50 +0900 Subject: Some questions about DRM(Direct Rendering Manager) In-Reply-To: References: <4E016EDC.30200@samsung.com> <4E0185E7.8020708@samsung.com> Message-ID: <4E029D26.1050902@samsung.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi Rob Clark, I'm sorry for that my mean didn't convey to you so I condensed that into brief again. I know drm_fb_helper_single_fb_probe() calls register_framebuffer(), My question is that it's right way to call only drm_fb_helper_set_par() if fb_helper->funcs->fb_probe() returns nonzero. In this case, if fb_helper->funcs->fb_probe() returns zero then register_framebuffer() isn't called and this means linux framebuffer isn't used anymore. one more question, otherwise if it uses drm based framebuffer, register_framebuffer() should be called necessarily at booting time? Thank you. Rob Clark ? ?: > fwiw, drm_fb_helper_single_fb_probe() calls register_framebuffer() (if > that was the question?) > > BR, > -R > > 2011/6/22 InKi Dae : >> It adds dri-devel at lists.freedesktop.org to this mail thread. >> Thank you. >> >> 2011? 6? 22? ?? 3:04, daeinki ?? ?: >>> below is additional comments. >>> >>> daeinki ? ?: >>>> Hi all, >>>> >>>> I'm writing Samsung SoC based DRM framework and this one includes FIMD >>>> and HDMI driver as hardware dependent modules. and for now, encoder, >>>> connector, crtc and fb module has been materialized almost. but I'm >>>> contending with framebuffer setting issue(created fb_info should be >>>> registered to linux framebuffer through register_framebuffer() or not)as >>>> default framebuffer at booting time. >>>> >>>> at drm_fb_helper_single_fb_probe() of drm_fb_helper.c file, fb_helper's >>>> fb_probe callback is called and this one creates new framebuffer and >>>> returns a value more then 0 if true. internally, this process creates an >>>> fb_info object and drm_framebuffer and then drm_framebuffer would be >>>> added to mode_config.fb_list of the drm_device. >>>> >>> it's my mistake. return value is 0 if true, nonzero otherwise. >>> >>>> a value returned, new_fb is used to decide that it calls >>>> register_framebuffer() or drm_fb_helper_set_par(). at this point, I am >>>> confused it's a good way to call register_framebuffer() otherwise >>>> drm_fb_helper_set_par(). if register_framebuffer() is called then I >>>> guess drm_fb_helper_set_par() or drm_crtc_helper_set_config() should be >>>> called somewhere subsequently to apply this one to real hardware because >>>> previous process is just for maintaining data logically.(not set up data >>>> to h/w) >>>> >>>> it's a right way to call register_framebuffer() and then >>>> drm_fb_helper_set_par() or drm_crtc_helper_set_config()? otherwise just >>>> only drm_fb_helper_set_par() or drm_crtc_helper_set_config() ignoring >>>> register_framebuffer()? and what is the purpose of using >>>> register_framebuffer()? >>>> >>> I understood that if fb_probe() callback is fail then fb_info object is >>> registered to linux framebuffer through register_framebuffer() >>> otherwise(if true) hardware configuration would be completed by >>> drm_fb_helper_set_par() so the reason of using register_framebuffer() is >>> that the case of failing fb_probe() callback, it is for drawing on only >>> linux framebuffer. is it right? >>> >>>> In my case, first, register_framebuffer() is called and then if desired >>>> default crtc id is matched with drm_fb_helper->crtc_info[0 ~ n].crtc_id, >>>> it gets mode_set of drm_fb_helper->crtc_info[n] and then it calls >>>> drm_crtc_helper_set_config(mode_set). at this time, all the hardware >>>> configurations would be completed. >>>> >>>> thank you in advance. >>>> >>>> Best Regards >>>> Inki Dae. >>>> >>> >>> _______________________________________________ >>> linux-arm-kernel mailing list >>> linux-arm-kernel at lists.infradead.org >>> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel >>> >> _______________________________________________ >> dri-devel mailing list >> dri-devel at lists.freedesktop.org >> http://lists.freedesktop.org/mailman/listinfo/dri-devel >> > From mboxrd@z Thu Jan 1 00:00:00 1970 From: daeinki Subject: Re: Some questions about DRM(Direct Rendering Manager) Date: Thu, 23 Jun 2011 10:55:50 +0900 Message-ID: <4E029D26.1050902@samsung.com> References: <4E016EDC.30200@samsung.com> <4E0185E7.8020708@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="euc-kr" Content-Transfer-Encoding: base64 Return-path: In-reply-to: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-arm-kernel-bounces@lists.infradead.org Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Rob Clark Cc: linux-fbdev , Kukjin Kim , Kyungmin Park , dri-devel@lists.freedesktop.org, Paul Mundt , jesse.barnes@intel.com, InKi Dae , linux-arm-kernel@lists.infradead.org List-Id: dri-devel@lists.freedesktop.org SGkgUm9iIENsYXJrLAoKSSdtIHNvcnJ5IGZvciB0aGF0IG15IG1lYW4gZGlkbid0IGNvbnZleSB0 byB5b3Ugc28gSSBjb25kZW5zZWQgdGhhdCBpbnRvCmJyaWVmIGFnYWluLgoKSSBrbm93IGRybV9m Yl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKCkgY2FsbHMgcmVnaXN0ZXJfZnJhbWVidWZmZXIoKSwK TXkgcXVlc3Rpb24gaXMgdGhhdCBpdCdzIHJpZ2h0IHdheSB0byBjYWxsIG9ubHkgZHJtX2ZiX2hl bHBlcl9zZXRfcGFyKCkKaWYgZmJfaGVscGVyLT5mdW5jcy0+ZmJfcHJvYmUoKSByZXR1cm5zIG5v bnplcm8uCgpJbiB0aGlzIGNhc2UsIGlmIGZiX2hlbHBlci0+ZnVuY3MtPmZiX3Byb2JlKCkgcmV0 dXJucyB6ZXJvIHRoZW4KcmVnaXN0ZXJfZnJhbWVidWZmZXIoKSBpc24ndCBjYWxsZWQgYW5kIHRo aXMgbWVhbnMgbGludXggZnJhbWVidWZmZXIKaXNuJ3QgdXNlZCBhbnltb3JlLgoKb25lIG1vcmUg cXVlc3Rpb24sIG90aGVyd2lzZSBpZiBpdCB1c2VzIGRybSBiYXNlZCBmcmFtZWJ1ZmZlciwKcmVn aXN0ZXJfZnJhbWVidWZmZXIoKSBzaG91bGQgYmUgY2FsbGVkIG5lY2Vzc2FyaWx5IGF0IGJvb3Rp bmcgdGltZT8KClRoYW5rIHlvdS4KClJvYiBDbGFyayC+tCCx2zoKPiBmd2l3LCBkcm1fZmJfaGVs cGVyX3NpbmdsZV9mYl9wcm9iZSgpIGNhbGxzIHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCkgKGlmCj4g dGhhdCB3YXMgdGhlIHF1ZXN0aW9uPykKPiAKPiBCUiwKPiAtUgo+IAo+IDIwMTEvNi8yMiBJbktp IERhZSA8ZGFlaW5raUBnbWFpbC5jb20+Ogo+PiBJdCBhZGRzIGRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcgdG8gdGhpcyBtYWlsIHRocmVhZC4KPj4gVGhhbmsgeW91Lgo+Pgo+PiAyMDEx s+IgNr/5IDIywM8gv8DIxCAzOjA0LCBkYWVpbmtpIDxpbmtpLmRhZUBzYW1zdW5nLmNvbT601MDH ILi7Ogo+Pj4gYmVsb3cgaXMgYWRkaXRpb25hbCBjb21tZW50cy4KPj4+Cj4+PiBkYWVpbmtpIL60 ILHbOgo+Pj4+IEhpIGFsbCwKPj4+Pgo+Pj4+IEknbSB3cml0aW5nIFNhbXN1bmcgU29DIGJhc2Vk IERSTSBmcmFtZXdvcmsgYW5kIHRoaXMgb25lIGluY2x1ZGVzIEZJTUQKPj4+PiBhbmQgSERNSSBk cml2ZXIgYXMgaGFyZHdhcmUgZGVwZW5kZW50IG1vZHVsZXMuIGFuZCBmb3Igbm93LCBlbmNvZGVy LAo+Pj4+IGNvbm5lY3RvciwgY3J0YyBhbmQgZmIgbW9kdWxlIGhhcyBiZWVuIG1hdGVyaWFsaXpl ZCBhbG1vc3QuIGJ1dCBJJ20KPj4+PiBjb250ZW5kaW5nIHdpdGggIGZyYW1lYnVmZmVyIHNldHRp bmcgaXNzdWUoY3JlYXRlZCBmYl9pbmZvIHNob3VsZCBiZQo+Pj4+IHJlZ2lzdGVyZWQgdG8gbGlu dXggZnJhbWVidWZmZXIgdGhyb3VnaCByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigpIG9yIG5vdClhcwo+ Pj4+IGRlZmF1bHQgZnJhbWVidWZmZXIgYXQgYm9vdGluZyB0aW1lLgo+Pj4+Cj4+Pj4gYXQgZHJt X2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoKSBvZiBkcm1fZmJfaGVscGVyLmMgZmlsZSwgZmJf aGVscGVyJ3MKPj4+PiBmYl9wcm9iZSBjYWxsYmFjayBpcyBjYWxsZWQgYW5kIHRoaXMgb25lIGNy ZWF0ZXMgbmV3IGZyYW1lYnVmZmVyIGFuZAo+Pj4+IHJldHVybnMgYSB2YWx1ZSBtb3JlIHRoZW4g MCBpZiB0cnVlLiBpbnRlcm5hbGx5LCB0aGlzIHByb2Nlc3MgY3JlYXRlcyBhbgo+Pj4+IGZiX2lu Zm8gb2JqZWN0IGFuZCBkcm1fZnJhbWVidWZmZXIgYW5kIHRoZW4gZHJtX2ZyYW1lYnVmZmVyIHdv dWxkIGJlCj4+Pj4gYWRkZWQgdG8gbW9kZV9jb25maWcuZmJfbGlzdCBvZiB0aGUgZHJtX2Rldmlj ZS4KPj4+Pgo+Pj4gaXQncyBteSBtaXN0YWtlLiByZXR1cm4gdmFsdWUgaXMgMCBpZiB0cnVlLCBu b256ZXJvIG90aGVyd2lzZS4KPj4+Cj4+Pj4gYSB2YWx1ZSByZXR1cm5lZCwgbmV3X2ZiIGlzIHVz ZWQgdG8gZGVjaWRlIHRoYXQgaXQgY2FsbHMKPj4+PiByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigpIG9y IGRybV9mYl9oZWxwZXJfc2V0X3BhcigpLiBhdCB0aGlzIHBvaW50LCBJIGFtCj4+Pj4gY29uZnVz ZWQgaXQncyBhIGdvb2Qgd2F5IHRvIGNhbGwgcmVnaXN0ZXJfZnJhbWVidWZmZXIoKSBvdGhlcndp c2UKPj4+PiBkcm1fZmJfaGVscGVyX3NldF9wYXIoKS4gaWYgcmVnaXN0ZXJfZnJhbWVidWZmZXIo KSBpcyBjYWxsZWQgdGhlbiBJCj4+Pj4gZ3Vlc3MgZHJtX2ZiX2hlbHBlcl9zZXRfcGFyKCkgb3Ig ZHJtX2NydGNfaGVscGVyX3NldF9jb25maWcoKSBzaG91bGQgYmUKPj4+PiBjYWxsZWQgc29tZXdo ZXJlIHN1YnNlcXVlbnRseSB0byBhcHBseSB0aGlzIG9uZSB0byByZWFsIGhhcmR3YXJlIGJlY2F1 c2UKPj4+PiBwcmV2aW91cyBwcm9jZXNzIGlzIGp1c3QgZm9yIG1haW50YWluaW5nIGRhdGEgbG9n aWNhbGx5Lihub3Qgc2V0IHVwIGRhdGEKPj4+PiB0byBoL3cpCj4+Pj4KPj4+PiBpdCdzIGEgcmln aHQgd2F5IHRvIGNhbGwgcmVnaXN0ZXJfZnJhbWVidWZmZXIoKSBhbmQgdGhlbgo+Pj4+IGRybV9m Yl9oZWxwZXJfc2V0X3BhcigpIG9yIGRybV9jcnRjX2hlbHBlcl9zZXRfY29uZmlnKCk/IG90aGVy d2lzZSBqdXN0Cj4+Pj4gb25seSBkcm1fZmJfaGVscGVyX3NldF9wYXIoKSBvciBkcm1fY3J0Y19o ZWxwZXJfc2V0X2NvbmZpZygpIGlnbm9yaW5nCj4+Pj4gcmVnaXN0ZXJfZnJhbWVidWZmZXIoKT8g YW5kIHdoYXQgaXMgdGhlIHB1cnBvc2Ugb2YgdXNpbmcKPj4+PiByZWdpc3Rlcl9mcmFtZWJ1ZmZl cigpPwo+Pj4+Cj4+PiBJIHVuZGVyc3Rvb2QgdGhhdCBpZiBmYl9wcm9iZSgpIGNhbGxiYWNrIGlz IGZhaWwgdGhlbiBmYl9pbmZvIG9iamVjdCBpcwo+Pj4gcmVnaXN0ZXJlZCB0byBsaW51eCBmcmFt ZWJ1ZmZlciB0aHJvdWdoIHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCkKPj4+IG90aGVyd2lzZShpZiB0 cnVlKSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIHdvdWxkIGJlIGNvbXBsZXRlZCBieQo+Pj4gZHJt X2ZiX2hlbHBlcl9zZXRfcGFyKCkgc28gdGhlIHJlYXNvbiBvZiB1c2luZyByZWdpc3Rlcl9mcmFt ZWJ1ZmZlcigpIGlzCj4+PiB0aGF0IHRoZSBjYXNlIG9mIGZhaWxpbmcgZmJfcHJvYmUoKSBjYWxs YmFjaywgaXQgaXMgZm9yIGRyYXdpbmcgb24gb25seQo+Pj4gbGludXggZnJhbWVidWZmZXIuIGlz IGl0IHJpZ2h0Pwo+Pj4KPj4+PiBJbiBteSBjYXNlLCBmaXJzdCwgcmVnaXN0ZXJfZnJhbWVidWZm ZXIoKSBpcyBjYWxsZWQgYW5kIHRoZW4gaWYgZGVzaXJlZAo+Pj4+IGRlZmF1bHQgY3J0YyBpZCBp cyBtYXRjaGVkIHdpdGggZHJtX2ZiX2hlbHBlci0+Y3J0Y19pbmZvWzAgfiBuXS5jcnRjX2lkLAo+ Pj4+IGl0IGdldHMgbW9kZV9zZXQgb2YgZHJtX2ZiX2hlbHBlci0+Y3J0Y19pbmZvW25dIGFuZCB0 aGVuICBpdCBjYWxscwo+Pj4+IGRybV9jcnRjX2hlbHBlcl9zZXRfY29uZmlnKG1vZGVfc2V0KS4g YXQgdGhpcyB0aW1lLCBhbGwgdGhlIGhhcmR3YXJlCj4+Pj4gY29uZmlndXJhdGlvbnMgd291bGQg YmUgY29tcGxldGVkLgo+Pj4+Cj4+Pj4gdGhhbmsgeW91IGluIGFkdmFuY2UuCj4+Pj4KPj4+PiBC ZXN0IFJlZ2FyZHMKPj4+PiBJbmtpIERhZS4KPj4+Pgo+Pj4KPj4+IF9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4+PiBsaW51eC1hcm0ta2VybmVsIG1haWxp bmcgbGlzdAo+Pj4gbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCj4+PiBodHRw Oi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK Pj4+Cj4+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4+ IGRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKPj4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y Zwo+PiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVsCj4+Cj4gCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5p bmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v bGludXgtYXJtLWtlcm5lbAo=