dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #01644
Re: Include JRE in DHIS2 lite?
Hi Saptarshi
I don't think the question is off topic at all. I have managed to create a
little windows executable for launching dhis lite which works ok. But I
don't think I can embed the sun jre without the usual click through licence
stuff which is a pain. Would be great to have a freeer java version to
distribute.
Regards
Bob
2009/8/25 Saptarshi Purkayastha <sunbiz@xxxxxxxxx>
> While this is a bit off topic, has anyone tried to run DHIS2 on another
> implementation of Java... like JRockit or Harmony...If its been tried,
> please provide experiences and versions.
>
> ---
> Regards,
> Saptarshi PURKAYASTHA
> Director R & D, HISP India
> Health Information Systems Programme
>
> My Tech Blog: http://sunnytalkstech.blogspot.com
> You Live by CHOICE, Not by CHANCE
>
>
> 2009/8/23 Knut Staring <knutst@xxxxxxxxx>
>
> Launch4j looks good. Even before getting into that, a quick way of
>> improving the experience (for users with sufficient bandwidth) could be to
>> just include JRE, add the new release (scheduled for next week?), and change
>> the .bat file.
>> Knut
>>
>> On Sat, Aug 22, 2009 at 10:41 PM, Bob Jolliffe <bobjolliffe@xxxxxxxxx>wrote:
>>
>>> Yes I suppose this gets back to Saptarshi's earlier suggestion of native
>>> executables (which could embed the jre). eg.
>>> http://launch4j.sourceforge.net/
>>>
>>> I think it's an excellent delivery mechanism. But that executable is
>>> getting pretty BIG. Lets give it a go.
>>>
>>> Cheers
>>> Bob
>>> |
>>> |
>>>
>>> 2009/8/22 Knut Staring <knutst@xxxxxxxxx>
>>>
>>> Since it looks like we should ensure that users have JRE6u14 (see below
>>>> discussion), I think it would make sense to include it in the DHIS2 lite
>>>> package, and not rely on whatever JRE the user has, even though the download
>>>> will of course not be as "lite".
>>>> Knut
>>>>
>>>> On Wed, Aug 19, 2009 at 5:41 PM, Hiatt, Tom <hiattt@xxxxxxx> wrote:
>>>>
>>>>> Thanks!
>>>>>
>>>>>
>>>>>
>>>>> Installing the newest version of Java seems to work although it still
>>>>> takes awhile for the data entry screen to show up. How many fields do you
>>>>> think is recommended for each custom form? Is there a way to make custom
>>>>> forms for dataset sections without breaking up the dataset?
>>>>>
>>>>>
>>>>>
>>>>> Thanks again for your help,
>>>>>
>>>>> Tom
>>>>>
>>>>>
>>>>> ------------------------------
>>>>>
>>>>> *From:* Knut Staring [mailto:knutst@xxxxxxxxx]
>>>>> *Sent:* 19 August 2009 17:12
>>>>> *To:* Saptarshi Purkayastha
>>>>> *Cc:* DHIS 2 developers; Hiatt, Tom
>>>>> *Subject:* Re: [Dhis2-devs] Error help
>>>>>
>>>>>
>>>>>
>>>>> Thanks, Saptarshi.
>>>>>
>>>>> So Tom, it seems to me that the Java that comes on our machines is 1.6
>>>>> update 11 (you can type "java -version" in a command prompt to verify this).
>>>>> So you could try installing the latest update, as Saptarshi suggest.
>>>>>
>>>>> And, you can also try adding "-XX:-UseGCOverheadLimit" to the
>>>>> JAVA_OPTS environment variable and restart the server.
>>>>>
>>>>> Knut
>>>>>
>>>>> On Wed, Aug 19, 2009 at 5:05 PM, Saptarshi Purkayastha <
>>>>> sunbiz@xxxxxxxxx> wrote:
>>>>>
>>>>> This error may not necessarily be solved through allocating more
>>>>> PermSize or Heap space
>>>>> You should disable the GC Overtime feature as mentioned here:
>>>>> http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html#par_gc.oom
>>>>>
>>>>> Or Ideally, the new G1 garbage collector which was made to run neatly
>>>>> on parallel processors should solve this issue. JDK6u14 or JRE6u14 has G1
>>>>> included... Please try if it solves the issue... try to reproduce it and if
>>>>> its solved then we can document it on the wiki and give Sun, a pat on its
>>>>> back!!
>>>>>
>>>>> ---
>>>>> Regards,
>>>>> Saptarshi PURKAYASTHA
>>>>> Director R & D, HISP India
>>>>> Health Information Systems Programme
>>>>>
>>>>> My Tech Blog: http://sunnytalkstech.blogspot.com
>>>>> You Live by CHOICE, Not by CHANCE
>>>>>
>>>>> 2009/8/19 Knut Staring <knutst@xxxxxxxxx>
>>>>>
>>>>> Hi Tom,
>>>>>
>>>>> You need to allocate more memory to Java, as indicated at the bottom of
>>>>> your message:
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> java.lang.OutOfMemoryError: GC overhead limit exceeded
>>>>>
>>>>> I copy this to our developer list (which you should also subscribe to).
>>>>>
>>>>> You should create an environment variable with the name JAVA_OPTS.
>>>>> Right click on My Computer, select Properties, and then the Advanced tab.
>>>>> Then Environment Variables and New.
>>>>>
>>>>> The content of it could be like the following, or the figures could be
>>>>> even higher if you have a lot of RAM:
>>>>>
>>>>> -Xmx768m -Xms768m -XX:PermSize=128m -XX:MaxPermSize=768m
>>>>>
>>>>> Knut
>>>>>
>>>>> On Wed, Aug 19, 2009 at 4:37 PM, Hiatt, Tom <hiattt@xxxxxxx> wrote:
>>>>>
>>>>> Hi Knut,
>>>>>
>>>>>
>>>>>
>>>>> Could you help me with this error I got making a custom form in DHIS?
>>>>>
>>>>>
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Tom
>>>>>
>>>>>
>>>>> *HTTP Status 500 -*
>>>>> ------------------------------
>>>>>
>>>>> *type* Exception report
>>>>>
>>>>> *message*
>>>>>
>>>>> *description* *The server encountered an internal error () that
>>>>> prevented it from fulfilling this request.*
>>>>>
>>>>> *exception*
>>>>>
>>>>> javax.servlet.ServletException: java.lang.reflect.InvocationTargetException
>>>>>
>>>>> com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:284)
>>>>>
>>>>> com.opensymphony.webwork.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:202)
>>>>>
>>>>> org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:264)
>>>>>
>>>>> org.hisp.dhis.security.filter.RequiredLoginFilter.doFilter(RequiredLoginFilter.java:131)
>>>>>
>>>>> org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
>>>>>
>>>>> org.hisp.dhis.security.filter.AutomaticAccessFilter.doFilter(AutomaticAccessFilter.java:107)
>>>>>
>>>>> org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
>>>>>
>>>>> org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:108)
>>>>>
>>>>> org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
>>>>>
>>>>> org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:217)
>>>>>
>>>>> org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
>>>>>
>>>>> org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:193)
>>>>>
>>>>> org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
>>>>>
>>>>> org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:148)
>>>>>
>>>>> org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
>>>>>
>>>>> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
>>>>>
>>>>> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
>>>>>
>>>>> *root cause*
>>>>>
>>>>> java.lang.reflect.InvocationTargetException
>>>>>
>>>>> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>>
>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>>>
>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>>>
>>>>> java.lang.reflect.Method.invoke(Method.java:597)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:358)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:218)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:192)
>>>>>
>>>>> org.hisp.dhis.webportal.interceptor.WebWorkPortalUserInterceptor.intercept(WebWorkPortalUserInterceptor.java:82)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.webportal.interceptor.WebWorkPortalModuleInterceptor.intercept(WebWorkPortalModuleInterceptor.java:85)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.webportal.interceptor.WebWorkPortalMenuInterceptor.intercept(WebWorkPortalMenuInterceptor.java:91)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.webportal.interceptor.WebWorkPortalParamsInterceptor.intercept(WebWorkPortalParamsInterceptor.java:118)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.webwork.interceptor.WebWorkStyleInterceptor.intercept(WebWorkStyleInterceptor.java:89)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.webwork.interceptor.WebWorkSystemSettingInterceptor.intercept(WebWorkSystemSettingInterceptor.java:89)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.webwork.interceptor.WebWorkDataDictionaryModeInterceptor.intercept(WebWorkDataDictionaryModeInterceptor.java:109)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.webwork.interceptor.WebWorkDisplayPropertyInterceptor.intercept(WebWorkDisplayPropertyInterceptor.java:90)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.webwork.interceptor.WebWorkSortOrderInterceptor.intercept(WebWorkSortOrderInterceptor.java:124)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.security.intercept.WebWorkSecurityInterceptor.intercept(WebWorkSecurityInterceptor.java:98)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.webwork.interceptor.WebWorkI18nInterceptor.intercept(WebWorkI18nInterceptor.java:122)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.webwork.interceptor.AbstractPreResultListener.intercept(AbstractPreResultListener.java:71)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116)
>>>>>
>>>>> com.opensymphony.xwork.ActionChainResult.execute(ActionChainResult.java:156)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:313)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:208)
>>>>>
>>>>> org.hisp.dhis.webportal.interceptor.WebWorkPortalUserInterceptor.intercept(WebWorkPortalUserInterceptor.java:82)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.webportal.interceptor.WebWorkPortalModuleInterceptor.intercept(WebWorkPortalModuleInterceptor.java:85)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.webportal.interceptor.WebWorkPortalMenuInterceptor.intercept(WebWorkPortalMenuInterceptor.java:91)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.webportal.interceptor.WebWorkPortalParamsInterceptor.intercept(WebWorkPortalParamsInterceptor.java:118)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.webwork.interceptor.WebWorkStyleInterceptor.intercept(WebWorkStyleInterceptor.java:89)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.webwork.interceptor.WebWorkSystemSettingInterceptor.intercept(WebWorkSystemSettingInterceptor.java:89)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.webwork.interceptor.WebWorkDataDictionaryModeInterceptor.intercept(WebWorkDataDictionaryModeInterceptor.java:109)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.webwork.interceptor.WebWorkDisplayPropertyInterceptor.intercept(WebWorkDisplayPropertyInterceptor.java:90)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.webwork.interceptor.WebWorkSortOrderInterceptor.intercept(WebWorkSortOrderInterceptor.java:124)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.security.intercept.WebWorkSecurityInterceptor.intercept(WebWorkSecurityInterceptor.java:98)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.webwork.interceptor.WebWorkI18nInterceptor.intercept(WebWorkI18nInterceptor.java:122)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> org.hisp.dhis.webwork.interceptor.AbstractPreResultListener.intercept(AbstractPreResultListener.java:71)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
>>>>>
>>>>> com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116)
>>>>>
>>>>> com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:273)
>>>>>
>>>>> com.opensymphony.webwork.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:202)
>>>>>
>>>>> org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:264)
>>>>>
>>>>> org.hisp.dhis.security.filter.RequiredLoginFilter.doFilter(RequiredLoginFilter.java:131)
>>>>>
>>>>> org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
>>>>>
>>>>> org.hisp.dhis.security.filter.AutomaticAccessFilter.doFilter(AutomaticAccessFilter.java:107)
>>>>>
>>>>> org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
>>>>>
>>>>> org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:108)
>>>>>
>>>>> org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
>>>>>
>>>>> org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:217)
>>>>>
>>>>> org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
>>>>>
>>>>> org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:193)
>>>>>
>>>>> org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
>>>>>
>>>>> org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:148)
>>>>>
>>>>> org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
>>>>>
>>>>> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
>>>>>
>>>>> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
>>>>>
>>>>> *root cause*
>>>>>
>>>>> java.lang.OutOfMemoryError: GC overhead limit exceeded
>>>>>
>>>>> *note* *The full stack trace of the root cause is available in the
>>>>> Apache Tomcat/6.0.14 logs.*
>>>>> ------------------------------
>>>>> *Apache Tomcat/6.0.14*
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Cheers,
>>>>> Knut Staring
>>>>>
>>>>> _______________________________________________
>>>>> Mailing list: https://launchpad.net/~dhis2-devs<https://launchpad.net/%7Edhis2-devs>
>>>>> Post to : dhis2-devs@xxxxxxxxxxxxxxxxxxx
>>>>> Unsubscribe : https://launchpad.net/~dhis2-devs<https://launchpad.net/%7Edhis2-devs>
>>>>> More help : https://help.launchpad.net/ListHelp
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Mailing list: https://launchpad.net/~dhis2-devs<https://launchpad.net/%7Edhis2-devs>
>>>>> Post to : dhis2-devs@xxxxxxxxxxxxxxxxxxx
>>>>> Unsubscribe : https://launchpad.net/~dhis2-devs<https://launchpad.net/%7Edhis2-devs>
>>>>> More help : https://help.launchpad.net/ListHelp
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Cheers,
>>>>> Knut Staring
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Cheers,
>>>> Knut Staring
>>>>
>>>> _______________________________________________
>>>> Mailing list: https://launchpad.net/~dhis2-devs<https://launchpad.net/%7Edhis2-devs>
>>>> Post to : dhis2-devs@xxxxxxxxxxxxxxxxxxx
>>>> Unsubscribe : https://launchpad.net/~dhis2-devs<https://launchpad.net/%7Edhis2-devs>
>>>> More help : https://help.launchpad.net/ListHelp
>>>>
>>>>
>>>
>>
>>
>> --
>> Cheers,
>> Knut Staring
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~dhis2-devs<https://launchpad.net/%7Edhis2-devs>
>> Post to : dhis2-devs@xxxxxxxxxxxxxxxxxxx
>> Unsubscribe : https://launchpad.net/~dhis2-devs<https://launchpad.net/%7Edhis2-devs>
>> More help : https://help.launchpad.net/ListHelp
>>
>>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~dhis2-devs<https://launchpad.net/%7Edhis2-devs>
> Post to : dhis2-devs@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~dhis2-devs<https://launchpad.net/%7Edhis2-devs>
> More help : https://help.launchpad.net/ListHelp
>
>
References