[jira] [Assigned] (SYSTEMML-659) Update license and notice for main jar artifact

2016-05-12 Thread Deron Eriksson (JIRA)

 [ 
https://issues.apache.org/jira/browse/SYSTEMML-659?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Deron Eriksson reassigned SYSTEMML-659:
---

Assignee: Deron Eriksson

> Update license and notice for main jar artifact
> ---
>
> Key: SYSTEMML-659
> URL: https://issues.apache.org/jira/browse/SYSTEMML-659
> Project: SystemML
>  Issue Type: Task
>  Components: Build
>Reporter: Deron Eriksson
>Assignee: Deron Eriksson
>
> The main project jar file that is built (such as 
> systemml-0.10.0-incubating-SNAPSHOT.jar) contains classes from some other 
> projects since they are set to the default scope (compile). These projects 
> can be seen in META-INF/DEPENDENCIES:
> {code}
> // --
> // Transitive dependencies of this project determined from the
> // maven pom organized by organization.
> // --
> SystemML
> From: 'abego Software GmbH, Germany' (http://abego-software.de)
>   - abego TreeLayout Core (http://code.google.com/p/treelayout/) 
> org.abego.treelayout:org.abego.treelayout.core:jar:1.0.1
> License: BSD 3-Clause "New" or "Revised" License (BSD-3-Clause)  
> (http://treelayout.googlecode.com/files/LICENSE.TXT)
> From: 'an unknown organization'
>   - Guava: Google Core Libraries for Java 
> (http://code.google.com/p/guava-libraries/guava) 
> com.google.guava:guava:bundle:14.0.1
> License: The Apache Software License, Version 2.0  
> (http://www.apache.org/licenses/LICENSE-2.0.txt)
> From: 'ANTLR' (http://www.antlr.org)
>   - ANTLR 4 Runtime Annotations (http://www.antlr.org/antlr4-annotations) 
> org.antlr:antlr4-annotations:jar:4.3
> License: The BSD License  (http://www.antlr.org/license.html)
>   - ANTLR 4 Runtime (http://www.antlr.org/antlr4-runtime) 
> org.antlr:antlr4-runtime:jar:4.3
> License: The BSD License  (http://www.antlr.org/license.html)
> From: 'The Apache Software Foundation' (http://www.apache.org/)
>   - Apache Wink :: JSON4J (http://www.apache.org/wink/wink-json4j/) 
> org.apache.wink:wink-json4j:jar:1.4
> License: The Apache Software License, Version 2.0  
> (http://www.apache.org/licenses/LICENSE-2.0.txt)
> {code}
> The LICENSE and NOTICE files (in META-INF) included in the jar most likely 
> need to be updated to reference these libraries.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Created] (SYSTEMML-688) Package algorithm files in folder in several artifacts

2016-05-12 Thread Deron Eriksson (JIRA)
Deron Eriksson created SYSTEMML-688:
---

 Summary: Package algorithm files in folder in several artifacts
 Key: SYSTEMML-688
 URL: https://issues.apache.org/jira/browse/SYSTEMML-688
 Project: SystemML
  Issue Type: Task
  Components: Build
Reporter: Deron Eriksson


The main algorithm files are written to the base directory of the following 
artifacts:

systemml-0.10.0-incubating-SNAPSHOT.jar
systemml-0.10.0-incubating-SNAPSHOT-inmemory.jar
systemml-0.10.0-incubating-SNAPSHOT-sources.jar
systemml-0.10.0-incubating-SNAPSHOT-standalone.jar

It would be good to package these algorithm files either into a scripts/ folder 
or a scripts/algorithms folder.

As an example, here is the current primary jar file base directory contents:
{code}
$ tree -L 1 systemml-0.10.0-incubating-SNAPSHOT
systemml-0.10.0-incubating-SNAPSHOT
├── ALS-CG.dml
├── ALS-DS.dml
├── ALS_predict.dml
├── ALS_topk_predict.dml
├── Cox-predict.dml
├── Cox.dml
├── CsplineCG.dml
├── CsplineDS.dml
├── GLM-predict.dml
├── GLM.dml
├── KM.dml
├── Kmeans-predict.dml
├── Kmeans.dml
├── LinearRegCG.dml
├── LinearRegDS.dml
├── META-INF
├── MultiLogReg.dml
├── PCA.dml
├── StepGLM.dml
├── StepLinearRegDS.dml
├── Univar-Stats.dml
├── apply-transform.dml
├── bivar-stats.dml
├── com
├── decision-tree-predict.dml
├── decision-tree.dml
├── l2-svm-predict.dml
├── l2-svm.dml
├── m-svm-predict.dml
├── m-svm.dml
├── naive-bayes-predict.dml
├── naive-bayes.dml
├── obsolete
├── org
├── random-forest-predict.dml
├── random-forest.dml
├── stratstats.dml
└── transform.dml
{code}

Placing the *.dml files in a scripts/ or scripts/algorithms/ folder would give 
the following contents in the base directory:

{code}
$ tree -L 1 systemml-0.10.0-incubating-SNAPSHOT
systemml-0.10.0-incubating-SNAPSHOT
├── META-INF
├── com
├── org
└── scripts
{code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Resolved] (SYSTEMML-684) Update LICENSE and NOTICE for standalone jar artifact

2016-05-12 Thread Deron Eriksson (JIRA)

 [ 
https://issues.apache.org/jira/browse/SYSTEMML-684?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Deron Eriksson resolved SYSTEMML-684.
-
Resolution: Fixed

Fixed by [PR153|https://github.com/apache/incubator-systemml/pull/153].

> Update LICENSE and NOTICE for standalone jar artifact
> -
>
> Key: SYSTEMML-684
> URL: https://issues.apache.org/jira/browse/SYSTEMML-684
> Project: SystemML
>  Issue Type: Task
>  Components: Build
>Reporter: Deron Eriksson
>Assignee: Deron Eriksson
>
> Update assembly for the LICENSE and NOTICE for the dependencies contained in 
> the standalone jar.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Closed] (SYSTEMML-683) Update LICENSE and NOTICE for in-memory jar artifact

2016-05-12 Thread Deron Eriksson (JIRA)

 [ 
https://issues.apache.org/jira/browse/SYSTEMML-683?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Deron Eriksson closed SYSTEMML-683.
---

> Update LICENSE and NOTICE for in-memory jar artifact
> 
>
> Key: SYSTEMML-683
> URL: https://issues.apache.org/jira/browse/SYSTEMML-683
> Project: SystemML
>  Issue Type: Task
>  Components: Build
>Reporter: Deron Eriksson
>Assignee: Deron Eriksson
>
> Update assembly for the LICENSE and NOTICE for the dependencies contained in 
> the in-memory jar.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Resolved] (SYSTEMML-590) Improve Namespace Handling for UDFs

2016-05-12 Thread Mike Dusenberry (JIRA)

 [ 
https://issues.apache.org/jira/browse/SYSTEMML-590?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mike Dusenberry resolved SYSTEMML-590.
--
   Resolution: Fixed
Fix Version/s: SystemML 0.10

> Improve Namespace Handling for UDFs
> ---
>
> Key: SYSTEMML-590
> URL: https://issues.apache.org/jira/browse/SYSTEMML-590
> Project: SystemML
>  Issue Type: Improvement
>  Components: Parser
>Affects Versions: SystemML 0.10
>Reporter: Mike Dusenberry
>Assignee: Glenn Weidner
> Fix For: SystemML 0.10
>
>
> Currently, if a UDF body involves calling another UDF, the default global 
> namespace is assumed, unless a namespace is explicitly indicated.  This 
> becomes a problem when a file contains UDFs, and is then sourced from another 
> script.
> Imagine a file {{funcs.dml}} as follows:
> {code}
> f = function(double x, int a) return (double ans) {
>   x2 = g(x)
>   ans = a * x2
> }
> g = function(double x) return (double ans) {
>   ans = x * x
> }
> {code}
> Then, let's try to call {{f}}:
> {code}
> script = """
> source ("funcs.dml") as funcs
> ans = funcs::f(3, 1)
> print(ans)
> """
> ml.reset()
> ml.executeScript(script)
> {code}
> This results in an error since {{f}} is in the {{funcs}} namespace, but the 
> call to {{g}} assumes {{g}} is still in the default namespace.  Clearly, the 
> user intends to the use the {{g}} that is located in the same file.
> Currently, we would need to adjust {{funcs.dml}} as follows to explicitly 
> assume that {{f}} and {{g}} are in a {{funcs}} namespace:
> {code}
> f = function(double x, int a) return (double ans) {
>   x2 = funcs::g(x)
>   ans = a * x2
> }
> g = function(double x) return (double ans) {
>   ans = x * x
> }
> {code}
> Instead, it would be better to simply first look for {{g}} in its parent's 
> namespace.  In this case, the "parent" would be the function {{f}}, and the 
> namespace we have selected is {{funcs}}, although that choice would be left 
> up to the end-user.  Then, namespace assumptions would not be necessary.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Comment Edited] (SYSTEMML-590) Improve Namespace Handling for UDFs

2016-05-12 Thread Mike Dusenberry (JIRA)

[ 
https://issues.apache.org/jira/browse/SYSTEMML-590?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15281897#comment-15281897
 ] 

Mike Dusenberry edited comment on SYSTEMML-590 at 5/12/16 6:41 PM:
---

This has been a lot of work, and UDFs/namespaces are much better now.  Thanks, 
[~gweidner]!


was (Author: mwdus...@us.ibm.com):
This has been a lot of work, and UDFs are much better now.  Thanks, [~gweidner]!

> Improve Namespace Handling for UDFs
> ---
>
> Key: SYSTEMML-590
> URL: https://issues.apache.org/jira/browse/SYSTEMML-590
> Project: SystemML
>  Issue Type: Improvement
>  Components: Parser
>Affects Versions: SystemML 0.10
>Reporter: Mike Dusenberry
>Assignee: Glenn Weidner
>
> Currently, if a UDF body involves calling another UDF, the default global 
> namespace is assumed, unless a namespace is explicitly indicated.  This 
> becomes a problem when a file contains UDFs, and is then sourced from another 
> script.
> Imagine a file {{funcs.dml}} as follows:
> {code}
> f = function(double x, int a) return (double ans) {
>   x2 = g(x)
>   ans = a * x2
> }
> g = function(double x) return (double ans) {
>   ans = x * x
> }
> {code}
> Then, let's try to call {{f}}:
> {code}
> script = """
> source ("funcs.dml") as funcs
> ans = funcs::f(3, 1)
> print(ans)
> """
> ml.reset()
> ml.executeScript(script)
> {code}
> This results in an error since {{f}} is in the {{funcs}} namespace, but the 
> call to {{g}} assumes {{g}} is still in the default namespace.  Clearly, the 
> user intends to the use the {{g}} that is located in the same file.
> Currently, we would need to adjust {{funcs.dml}} as follows to explicitly 
> assume that {{f}} and {{g}} are in a {{funcs}} namespace:
> {code}
> f = function(double x, int a) return (double ans) {
>   x2 = funcs::g(x)
>   ans = a * x2
> }
> g = function(double x) return (double ans) {
>   ans = x * x
> }
> {code}
> Instead, it would be better to simply first look for {{g}} in its parent's 
> namespace.  In this case, the "parent" would be the function {{f}}, and the 
> namespace we have selected is {{funcs}}, although that choice would be left 
> up to the end-user.  Then, namespace assumptions would not be necessary.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Closed] (SYSTEMML-654) DML Functions Should Override Builtin Functions

2016-05-12 Thread Mike Dusenberry (JIRA)

 [ 
https://issues.apache.org/jira/browse/SYSTEMML-654?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mike Dusenberry closed SYSTEMML-654.


> DML Functions Should Override Builtin Functions
> ---
>
> Key: SYSTEMML-654
> URL: https://issues.apache.org/jira/browse/SYSTEMML-654
> Project: SystemML
>  Issue Type: Sub-task
>Affects Versions: SystemML 0.10
>Reporter: Mike Dusenberry
>Assignee: Glenn Weidner
> Fix For: SystemML 0.10
>
>
> Currently, if a user defines a DML-bodied function that has the same name as 
> a builtin function, an error will be returned.  This occurs both if the 
> function is defined in the same file as it is being called (which could look 
> like a builtin function call, although the user does not wish it to be), or 
> if the function is defined in a separate file and called with a namespace 
> notation.  As we grow the language with an increasing number of builtin 
> functions, this is not the desired behavior.  Instead, any DML functions 
> should override any builtin functions.
> Example 1:
> {code}
> min = function(int i) {
>   print("hi" + i)
> }
> tmp = min(1)  # fail!
> {code}
> {code}
> : org.apache.sysml.parser.LanguageException: Unsupported Parameters : ERROR: 
> null -- line 6, column 0 -- Expecting matrix parameter for function MIN
>   at 
> org.apache.sysml.parser.Expression.raiseValidateError(Expression.java:421)
>   at 
> org.apache.sysml.parser.BuiltinFunctionExpression.checkMatrixParam(BuiltinFunctionExpression.java:1221)
>   at 
> org.apache.sysml.parser.BuiltinFunctionExpression.validateExpression(BuiltinFunctionExpression.java:314)
>   at 
> org.apache.sysml.parser.StatementBlock.validate(StatementBlock.java:598)
>   at 
> org.apache.sysml.parser.DMLTranslator.validateParseTree(DMLTranslator.java:136)
>   at 
> org.apache.sysml.api.MLContext.executeUsingSimplifiedCompilationChain(MLContext.java:1325)
>   at 
> org.apache.sysml.api.MLContext.compileAndExecuteScript(MLContext.java:1227)
>   at org.apache.sysml.api.MLContext.executeScript(MLContext.java:1165)
>   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>   at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>   at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>   at java.lang.reflect.Method.invoke(Method.java:497)
>   at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:231)
>   at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:381)
>   at py4j.Gateway.invoke(Gateway.java:259)
>   at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)
>   at py4j.commands.CallCommand.execute(CallCommand.java:79)
>   at py4j.GatewayConnection.run(GatewayConnection.java:209)
>   at java.lang.Thread.run(Thread.java:745)
> {code}
> Example 2:
> {code}
> # util.dml
> min = function(int i) {
>   print("hi" + i)
> }
> {code}
> {code}
> source("util.dml") as util
> tmp = util::min(1)  # fail!
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Resolved] (SYSTEMML-654) DML Functions Should Override Builtin Functions

2016-05-12 Thread Mike Dusenberry (JIRA)

 [ 
https://issues.apache.org/jira/browse/SYSTEMML-654?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mike Dusenberry resolved SYSTEMML-654.
--
   Resolution: Fixed
Fix Version/s: SystemML 0.10

> DML Functions Should Override Builtin Functions
> ---
>
> Key: SYSTEMML-654
> URL: https://issues.apache.org/jira/browse/SYSTEMML-654
> Project: SystemML
>  Issue Type: Sub-task
>Affects Versions: SystemML 0.10
>Reporter: Mike Dusenberry
>Assignee: Glenn Weidner
> Fix For: SystemML 0.10
>
>
> Currently, if a user defines a DML-bodied function that has the same name as 
> a builtin function, an error will be returned.  This occurs both if the 
> function is defined in the same file as it is being called (which could look 
> like a builtin function call, although the user does not wish it to be), or 
> if the function is defined in a separate file and called with a namespace 
> notation.  As we grow the language with an increasing number of builtin 
> functions, this is not the desired behavior.  Instead, any DML functions 
> should override any builtin functions.
> Example 1:
> {code}
> min = function(int i) {
>   print("hi" + i)
> }
> tmp = min(1)  # fail!
> {code}
> {code}
> : org.apache.sysml.parser.LanguageException: Unsupported Parameters : ERROR: 
> null -- line 6, column 0 -- Expecting matrix parameter for function MIN
>   at 
> org.apache.sysml.parser.Expression.raiseValidateError(Expression.java:421)
>   at 
> org.apache.sysml.parser.BuiltinFunctionExpression.checkMatrixParam(BuiltinFunctionExpression.java:1221)
>   at 
> org.apache.sysml.parser.BuiltinFunctionExpression.validateExpression(BuiltinFunctionExpression.java:314)
>   at 
> org.apache.sysml.parser.StatementBlock.validate(StatementBlock.java:598)
>   at 
> org.apache.sysml.parser.DMLTranslator.validateParseTree(DMLTranslator.java:136)
>   at 
> org.apache.sysml.api.MLContext.executeUsingSimplifiedCompilationChain(MLContext.java:1325)
>   at 
> org.apache.sysml.api.MLContext.compileAndExecuteScript(MLContext.java:1227)
>   at org.apache.sysml.api.MLContext.executeScript(MLContext.java:1165)
>   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>   at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>   at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>   at java.lang.reflect.Method.invoke(Method.java:497)
>   at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:231)
>   at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:381)
>   at py4j.Gateway.invoke(Gateway.java:259)
>   at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)
>   at py4j.commands.CallCommand.execute(CallCommand.java:79)
>   at py4j.GatewayConnection.run(GatewayConnection.java:209)
>   at java.lang.Thread.run(Thread.java:745)
> {code}
> Example 2:
> {code}
> # util.dml
> min = function(int i) {
>   print("hi" + i)
> }
> {code}
> {code}
> source("util.dml") as util
> tmp = util::min(1)  # fail!
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (SYSTEMML-654) DML Functions Should Override Builtin Functions

2016-05-12 Thread Mike Dusenberry (JIRA)

[ 
https://issues.apache.org/jira/browse/SYSTEMML-654?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15281893#comment-15281893
 ] 

Mike Dusenberry commented on SYSTEMML-654:
--

Merged in [commit 90f56da | 
https://github.com/apache/incubator-systemml/commit/90f56da29d02d4a7b59d1c46a1b5b12993177233].

> DML Functions Should Override Builtin Functions
> ---
>
> Key: SYSTEMML-654
> URL: https://issues.apache.org/jira/browse/SYSTEMML-654
> Project: SystemML
>  Issue Type: Sub-task
>Affects Versions: SystemML 0.10
>Reporter: Mike Dusenberry
>Assignee: Glenn Weidner
> Fix For: SystemML 0.10
>
>
> Currently, if a user defines a DML-bodied function that has the same name as 
> a builtin function, an error will be returned.  This occurs both if the 
> function is defined in the same file as it is being called (which could look 
> like a builtin function call, although the user does not wish it to be), or 
> if the function is defined in a separate file and called with a namespace 
> notation.  As we grow the language with an increasing number of builtin 
> functions, this is not the desired behavior.  Instead, any DML functions 
> should override any builtin functions.
> Example 1:
> {code}
> min = function(int i) {
>   print("hi" + i)
> }
> tmp = min(1)  # fail!
> {code}
> {code}
> : org.apache.sysml.parser.LanguageException: Unsupported Parameters : ERROR: 
> null -- line 6, column 0 -- Expecting matrix parameter for function MIN
>   at 
> org.apache.sysml.parser.Expression.raiseValidateError(Expression.java:421)
>   at 
> org.apache.sysml.parser.BuiltinFunctionExpression.checkMatrixParam(BuiltinFunctionExpression.java:1221)
>   at 
> org.apache.sysml.parser.BuiltinFunctionExpression.validateExpression(BuiltinFunctionExpression.java:314)
>   at 
> org.apache.sysml.parser.StatementBlock.validate(StatementBlock.java:598)
>   at 
> org.apache.sysml.parser.DMLTranslator.validateParseTree(DMLTranslator.java:136)
>   at 
> org.apache.sysml.api.MLContext.executeUsingSimplifiedCompilationChain(MLContext.java:1325)
>   at 
> org.apache.sysml.api.MLContext.compileAndExecuteScript(MLContext.java:1227)
>   at org.apache.sysml.api.MLContext.executeScript(MLContext.java:1165)
>   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>   at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>   at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>   at java.lang.reflect.Method.invoke(Method.java:497)
>   at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:231)
>   at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:381)
>   at py4j.Gateway.invoke(Gateway.java:259)
>   at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)
>   at py4j.commands.CallCommand.execute(CallCommand.java:79)
>   at py4j.GatewayConnection.run(GatewayConnection.java:209)
>   at java.lang.Thread.run(Thread.java:745)
> {code}
> Example 2:
> {code}
> # util.dml
> min = function(int i) {
>   print("hi" + i)
> }
> {code}
> {code}
> source("util.dml") as util
> tmp = util::min(1)  # fail!
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Created] (SYSTEMML-687) Optimize CP convolution/pooling instructions for sparse inputs

2016-05-12 Thread Niketan Pansare (JIRA)
Niketan Pansare created SYSTEMML-687:


 Summary: Optimize CP convolution/pooling instructions for sparse 
inputs
 Key: SYSTEMML-687
 URL: https://issues.apache.org/jira/browse/SYSTEMML-687
 Project: SystemML
  Issue Type: Task
Reporter: Niketan Pansare






--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Created] (SYSTEMML-686) Implement Spark instructions for convolution and pooling functions

2016-05-12 Thread Niketan Pansare (JIRA)
Niketan Pansare created SYSTEMML-686:


 Summary: Implement Spark instructions for convolution and pooling 
functions
 Key: SYSTEMML-686
 URL: https://issues.apache.org/jira/browse/SYSTEMML-686
 Project: SystemML
  Issue Type: Task
Reporter: Niketan Pansare






--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Created] (SYSTEMML-685) Add documentation to map the NumPy tensor calls to DML expressions.

2016-05-12 Thread Niketan Pansare (JIRA)
Niketan Pansare created SYSTEMML-685:


 Summary: Add documentation to map the NumPy tensor calls to DML 
expressions.
 Key: SYSTEMML-685
 URL: https://issues.apache.org/jira/browse/SYSTEMML-685
 Project: SystemML
  Issue Type: Documentation
Reporter: Niketan Pansare






--
This message was sent by Atlassian JIRA
(v6.3.4#6332)