diff --git a/.gitignore b/.gitignore
index 24cae48..4e79a63 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,6 +10,7 @@ OUTPUT/
*.csv
*.pdf
logs/
+.idea/
GumTreeInput/
GumTreeInput1/
GumTreeOutput1/
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 19f4360..f35f267 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -2,19 +2,33 @@
+
+
-
+
+
+
+
+
+
+
+
+
-
+
+
+
-
-
+
+
+
+
@@ -29,61 +43,37 @@
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -91,17 +81,8 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -110,19 +91,71 @@
-
+
-
-
+
+
+
+
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -138,23 +171,54 @@
- FileHelper
- contain
- Time
- getSub
- Filenamef
- .keys
- write
+ redis
+ stemmi
+ hget
+ AstNode
+ ConstructorInvocation
+ ClassCreationIns
+ AnonymousClassDeclaration
+ ClassDe
+ ASTNod
+ TO
+ ASTNode
+ ASTN
+ met
+ Exec
+ Executors.
+ shared
+ retrain
+ leaf
+ reverse
+ TreeU
+ [(60@@[(59@@[(42@@)])])]
+ [(60@@[(59@@[
+ [(60@@[(59@@[(
+ regex
+ Pattern.com
+ valid_id
+ checkout
+ time
+ async
+ Compare-EnhancedDiff-System
+
+ $PROJECT_DIR$/../gumtree
+ $MAVEN_REPOSITORY$/org/apache/commons/commons-text/1.3/commons-text-1.3.jar
+
+
@@ -215,7 +295,7 @@
-
+
@@ -232,135 +312,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -370,7 +321,8 @@
-
+
+
@@ -379,6 +331,7 @@
+
@@ -414,7 +367,8 @@
-
+
+
@@ -425,6 +379,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -468,14 +435,16 @@
-
+
+
-
+
+
@@ -493,25 +462,25 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -519,10 +488,48 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -565,19 +572,19 @@
file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffHunkParser.java
- 27
+ 31
file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffHunkParser.java
- 79
+ 84
file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffHunkParser.java
- 77
+ 82
@@ -641,12 +648,6 @@
-
- file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/AkkaTreeParser.java
- 84
-
-
-
file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/AkkaTreeParser.java
23
@@ -697,105 +698,266 @@
file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java
- 61
+ 119
file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/utils/ClusterToPattern.java
- 28
+ 11
file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/utils/ClusterToPattern.java
- 35
+ 18
file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/utils/ClusterToPattern.java
- 41
+ 22
-
+
file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/utils/ClusterToPattern.java
- 56
+ 50
-
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/utils/ClusterToPattern.java
+ 89
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/utils/ClusterToPattern.java
+ 59
+
+
file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java
- 98
+ 101
-
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/EnhancedASTDiff.java
+ 75
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffParser.java
+ 42
+
+
file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java
- 141
+ 259
-
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/utils/EDiffHelper.java
+ 426
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster3.java
+ 177
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster3.java
+ 230
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster3.java
+ 316
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster3.java
+ 353
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster3.java
+ 337
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster3.java
+ 214
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster3.java
+ 309
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster3.java
+ 331
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster3.java
+ 347
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/EnhancedASTDiff.java
+ 80
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/utils/ClusterToPattern.java
+ 87
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/utils/ClusterToPattern.java
+ 27
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/utils/ClusterToPattern.java
+ 36
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/utils/ClusterToPattern.java
+ 76
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/utils/EDiffHelper.java
+ 646
+
+
file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java
- 114
+ 204
-
+
file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java
- 146
+ 170
-
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java
+ 198
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java
+ 233
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java
+ 74
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/AkkaTreeParser.java
+ 92
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java
+ 62
+
+
+
+
+
+
+
- folder.getParent()
+ load.getAnyRef("max-pool-size-max")
JAVA
CODE_FRAGMENT
- shape.getParent()
+ load.getConfig()
JAVA
CODE_FRAGMENT
- cluster.getName()
+ load.getConfig("SimpleConfigObject")
JAVA
CODE_FRAGMENT
- shape.getPath()
+ keyName.split("-")
JAVA
CODE_FRAGMENT
- cluster.getPath()
+ Matcher m = Matchers.getInstance().getMatcher(oldTree, newTree);
+m.match();
+
+
+ActionGenerator ag = new ActionGenerator(oldTree, newTree, m.getMappings());
+ag.generate();
+List<Action> actions = ag.getActions();
JAVA
CODE_FRAGMENT
- actionSet.toString()
+ m.match()
JAVA
CODE_FRAGMENT
- file.getName()
+ Matcher m = Matchers.getInstance().getMatcher(oldTree, newTree);
JAVA
CODE_FRAGMENT
- file.
+ m.match();
JAVA
CODE_FRAGMENT
- inner.get(prefix+"-"+firstValue);
+ String.join(" ",res);
JAVA
CODE_FRAGMENT
@@ -814,315 +976,432 @@
-
-
-
-
-
-
-
-
-
+
-
-
+
+
-
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
-
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
-
+
-
-
-
-
-
-
-
-
+
-
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/FixPatternMiner.iml b/FixPatternMiner.iml
index 82122fc..ccef92c 100644
--- a/FixPatternMiner.iml
+++ b/FixPatternMiner.iml
@@ -51,5 +51,11 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/myfile.txt b/myfile.txt
new file mode 100644
index 0000000..94e7a77
--- /dev/null
+++ b/myfile.txt
@@ -0,0 +1,574 @@
+[(60@@[(59@@[(32@@[(42@@[(14@@[(-2@@)][(43@@)][(42@@)][(14@@[(-2@@)][(43@@)][(32@@[(42@@)][(42@@)])][(38@@[(-1@@)][(34@@)])])][(42@@)])])])])])]
+[(60@@[(59@@[(32@@[(22@@[(52@@)][(42@@)])][(42@@[(42@@)])][(42@@)])])])]
+[(60@@[(83@@)][(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])])])])])]
+[(60@@[(39@@)][(59@@[(42@@)][(32@@[(22@@)][(42@@)])])])]
+[(60@@[(39@@)][(59@@[(42@@)][(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])])])]
+[(60@@[(5@@[(39@@)])][(59@@[(32@@)][(42@@)])])]
+[(60@@[(83@@)][(43@@)][(59@@[(42@@)][(32@@[(42@@[(40@@[(42@@)][(42@@)])][(42@@)][(32@@[(42@@[(32@@[(40@@)][(32@@)][(42@@)])])])])])])])]
+[(60@@)]
+[(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@[(42@@)][(40@@[(42@@)][(42@@)])])])])])]
+[(60@@[(43@@)][(59@@[(32@@)][(32@@[(42@@)][(32@@)][(32@@[(86@@[(59@@[(42@@)])][(32@@[(42@@)][(42@@)][(32@@)])])])][(42@@)])])][(74@@[(43@@)][(43@@)])])]
+[(60@@[(59@@[(36@@[(16@@[(27@@[(-1@@)])][(33@@)][(33@@)])])])])]
+[(60@@[(59@@[(42@@)][(34@@)])])]
+[(60@@[(74@@[(43@@)][(74@@[(43@@)][(76@@)])])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(74@@[(43@@)][(76@@)])])])])])]
+[(60@@[(74@@[(43@@)])])]
+[(60@@[(74@@[(43@@)][(43@@)])][(59@@[(42@@)][(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])])]
+[(60@@[(59@@)])]
+[(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(42@@)][(40@@[(40@@[(42@@)][(42@@)])][(42@@)])])])])])]
+[(60@@[(5@@[(43@@)])][(59@@[(42@@)])])]
+[(60@@[(74@@[(43@@)][(43@@)])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)])][(22@@[(52@@)][(42@@)])])])])]
+[(46@@[(45@@)][(45@@)][(9@@)][(42@@)][(42@@)])]
+[(46@@)]
+[(46@@[(32@@[(42@@)][(42@@)])])]
+[(46@@[(42@@)])]
+[(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(42@@)][(45@@)][(32@@[(42@@)][(42@@)])][(45@@)][(32@@[(42@@)][(42@@)])])])])])])]
+[(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(42@@)])])])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@[(42@@)])])])])])])]
+[(12@@[(44@@[(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(42@@)])])])])]
+[(12@@[(44@@[(43@@)][(42@@)])][(53@@[(14@@[(-2@@)][(43@@)][(32@@[(42@@)][(42@@)])])])])]
+[(12@@[(44@@[(42@@)])][(21@@[(32@@[(42@@[(42@@)])])])])]
+[(12@@[(44@@[(84@@[(43@@)][(43@@)])][(42@@)])][(21@@[(7@@[(42@@)][(-1@@)][(9@@)])])][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])]
+[(12@@[(44@@[(43@@)][(42@@)])][(53@@[(42@@)])])]
+[(12@@[(44@@[(43@@)][(42@@)])][(25@@[(42@@)][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(42@@)])])][(42@@)])])])])])]
+[(12@@)]
+[(12@@[(44@@[(84@@[(43@@)][(43@@)])][(42@@)])][(53@@[(42@@)])])]
+[(12@@[(44@@[(43@@)][(42@@)])][(60@@[(83@@)][(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)][(32@@[(42@@)][(42@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])][(53@@[(42@@)])])]
+[(12@@[(44@@[(43@@)][(42@@)])])]
+[(12@@[(44@@[(43@@)])])]
+[(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(42@@)])])])][(41@@[(33@@)])])]
+[(12@@[(21@@)])]
+[(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(42@@)])][(42@@)])])])])]
+[(12@@[(44@@[(43@@)][(42@@)])][(21@@)])]
+[(49@@)]
+[(49@@[(40@@[(42@@)][(42@@)])])]
+[(49@@[(42@@)][(45@@)])]
+[(49@@[(42@@)])]
+[(49@@[(45@@)][(40@@[(42@@)][(42@@)])])]
+[(55@@[(83@@)][(42@@)][(74@@[(43@@)][(43@@)][(43@@)])])]
+[(55@@[(83@@)][(83@@)][(83@@)][(42@@)][(43@@)])]
+[(55@@)]
+[(55@@[(83@@)][(83@@)][(42@@)][(74@@[(43@@)][(43@@)])][(43@@)])]
+[(55@@[(83@@)][(42@@)][(43@@)])]
+[(55@@[(83@@)][(42@@)])]
+[(55@@[(83@@)])]
+[(55@@[(83@@)][(83@@)][(42@@)][(43@@)])]
+[(41@@[(32@@[(22@@[(52@@)][(42@@)])][(42@@)][(42@@[(33@@)][(33@@)])])])]
+[(41@@[(27@@[(32@@[(42@@[(27@@[(38@@[(34@@)][(42@@)])][(-1@@)][(42@@)][(34@@)])])])])])]
+[(41@@[(14@@[(-2@@)][(43@@)][(42@@)][(42@@)])][(42@@)])]
+[(41@@[(14@@[(42@@)][(22@@[(52@@)][(42@@)])])])]
+[(41@@)]
+[(41@@[(32@@[(14@@[(-2@@)][(74@@[(43@@)][(43@@)])][(42@@)])][(42@@[(32@@)])])])]
+[(41@@[(16@@[(32@@)][(27@@[(42@@)][(-1@@)][(33@@)])][(33@@)])])]
+[(41@@[(22@@[(52@@)][(42@@)])])]
+[(41@@[(86@@[(60@@[(59@@[(16@@[(32@@[(32@@[(32@@[(42@@[(42@@)])])])])][(32@@[(32@@[(32@@[(42@@[(42@@)])])])])])])])])])]
+[(41@@[(33@@)][(42@@)])]
+[(41@@[(32@@[(42@@[(42@@)][(40@@[(42@@)][(42@@)])])])][(14@@[(-2@@)][(43@@)][(42@@)][(40@@)])])]
+[(41@@[(27@@)])]
+[(41@@[(32@@[(42@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])][(14@@[(-2@@)][(43@@)][(42@@)][(42@@)])])])])]
+[(41@@[(32@@[(42@@[(33@@)][(42@@)])])])]
+[(41@@[(14@@[(-2@@)][(74@@[(43@@)][(43@@)])][(42@@)][(40@@)])][(32@@[(42@@[(40@@[(42@@)][(42@@)])][(42@@)])])])]
+[(41@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])][(16@@[(27@@[(42@@)][(-1@@)][(42@@)])][(34@@)][(36@@[(16@@[(27@@[(42@@)][(-1@@)][(42@@)])][(38@@[(-1@@)][(34@@)])][(34@@)])])])])]
+[(51@@[(21@@)][(22@@[(52@@)][(42@@)])][(21@@[(32@@[(22@@[(52@@)][(42@@)])][(42@@)])])])]
+[(51@@[(42@@)][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])]
+[(51@@[(25@@)][(22@@[(52@@)][(42@@)])][(41@@)])]
+[(51@@)]
+[(51@@[(22@@[(52@@)][(42@@)])])]
+[(51@@[(21@@)][(52@@)])]
+[(51@@[(42@@)])]
+[(51@@[(21@@)][(22@@[(52@@)][(42@@)])])]
+[(50@@)]
+[(50@@[(42@@)])]
+[(25@@[(32@@[(45@@)][(42@@[(42@@)])])][(21@@[(7@@[(40@@[(42@@)][(42@@)])][(-1@@)][(32@@[(57@@)][(42@@)])])])][(21@@[(7@@[(40@@[(42@@)][(42@@)])][(-1@@)][(32@@[(57@@)][(42@@)])])])][(21@@[(7@@[(40@@[(42@@)][(42@@)])][(-1@@)][(32@@[(57@@)][(42@@)])])])])]
+[(25@@[(27@@[(40@@[(42@@)][(42@@)])])][(53@@[(14@@[(-2@@)][(43@@)][(45@@)])])][(27@@[(42@@)][(-1@@)][(34@@)])][(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])][(59@@[(42@@)][(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(37@@[(42@@)][(-1@@)])][(21@@[(7@@[(42@@)][(-1@@)][(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(42@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(34@@)])][(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])][(59@@[(42@@)][(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(37@@[(42@@)][(-1@@)])][(60@@[(39@@)][(59@@[(42@@)][(32@@[(42@@[(42@@)][(42@@)])])])])][(21@@[(7@@[(42@@)][(-1@@)][(27@@[(36@@[(27@@[(42@@)][(-1@@)][(36@@[(27@@[(42@@)][(-1@@)][(42@@)])])])])][(-1@@)][(36@@[(27@@[(42@@)][(-1@@)][(42@@)])])])])])])][(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])][(59@@[(42@@)][(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(37@@[(42@@)][(-1@@)])][(60@@[(39@@)][(59@@[(42@@)][(32@@[(42@@[(42@@)][(42@@)])])])])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@[(36@@[(27@@[(42@@)][(-1@@)][(36@@[(27@@[(42@@)][(-1@@)][(42@@)])])])])][(36@@[(27@@[(42@@)][(-1@@)][(42@@)])])])])])])])])])]
+[(25@@[(27@@[(42@@)][(36@@[(27@@[(32@@)][(32@@)])])])][(42@@)][(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(-1@@)][(42@@)][(32@@[(42@@)][(42@@)])])][(37@@[(42@@)][(-1@@)])][(60@@[(39@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@)])])])][(25@@[(27@@[(-1@@)][(42@@)][(13@@)])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])][(61@@[(27@@[(42@@)][(-1@@)][(13@@)])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(38@@[(-1@@)][(42@@)])])])])])])])][(25@@[(53@@)][(27@@[(27@@[(42@@)][(-1@@)][(13@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(13@@)])])])])])]
+[(25@@[(27@@[(32@@[(42@@[(42@@)])])][(-1@@)][(27@@[(40@@[(42@@)][(42@@)])][(-1@@)][(34@@)])])][(21@@[(7@@[(42@@)][(-1@@)][(27@@[(42@@)][(-1@@)][(34@@)])])])])]
+[(25@@[(32@@[(42@@)][(42@@)])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])])]
+[(25@@[(27@@[(36@@[(27@@[(42@@)][(-1@@)][(33@@)])])][(-1@@)][(36@@[(27@@[(32@@[(42@@)][(42@@)])][(-1@@)][(34@@)])])])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@[(42@@)])])])])][(21@@[(7@@[(32@@)][(42@@)][(-1@@)])])])]
+[(25@@[(27@@[(42@@)][(-1@@)][(34@@)])][(21@@[(7@@[(42@@)][(-1@@)])])])]
+[(25@@[(27@@)][(27@@[(-1@@)][(27@@[(42@@)][(-1@@)][(32@@[(42@@)][(32@@)][(42@@)])])])])]
+[(25@@[(27@@[(32@@[(57@@)][(42@@)][(42@@[(42@@)])])])])]
+[(25@@[(27@@[(38@@[(-1@@)][(42@@)])][(-1@@)][(38@@[(-1@@)][(32@@[(42@@[(42@@)])])])])][(25@@[(32@@[(42@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(32@@)][(42@@)])][(45@@)])])])])])][(41@@[(42@@)])])]
+[(25@@[(27@@[(22@@[(52@@)][(42@@)])][(-1@@)][(33@@)])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(32@@[(42@@[(42@@)])])])])])]
+[(25@@[(27@@[(32@@[(42@@)][(42@@)])][(-1@@)][(34@@)])][(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(60@@[(43@@)][(59@@[(42@@)][(11@@[(43@@)][(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@[(42@@)][(40@@[(42@@)][(42@@)])])])])])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(32@@)][(42@@)])][(45@@)][(32@@[(42@@)][(42@@)])][(45@@)][(32@@[(42@@)][(32@@)][(42@@)])][(45@@)])])])])][(25@@[(32@@[(42@@[(42@@)])])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(32@@)][(42@@)])][(45@@)][(32@@[(42@@)][(42@@)])][(45@@)])])])])])])])])]
+[(25@@[(27@@[(42@@)])][(21@@[(7@@[(42@@)])])])]
+[(25@@[(22@@)][(25@@[(22@@)][(21@@[(7@@[(22@@[(42@@)])][(9@@)][(40@@[(42@@)][(42@@)])])])][(27@@[(22@@[(52@@)][(42@@)])][(-1@@)][(40@@[(42@@)][(42@@)])])])][(27@@[(22@@[(52@@)][(42@@)])][(-1@@)][(40@@[(42@@)][(42@@)])])])]
+[(25@@[(32@@[(42@@)][(32@@[(42@@)][(40@@[(40@@[(42@@)][(42@@)])][(42@@)])])][(42@@[(45@@)])])][(53@@[(14@@[(-2@@)][(43@@)][(45@@)])])])]
+[(25@@)]
+[(25@@[(21@@)][(38@@[(-1@@)][(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])])])])])]
+[(25@@[(42@@)][(21@@[(7@@[(42@@)][(-1@@)][(9@@)])])][(21@@[(7@@[(42@@)][(-1@@)][(38@@[(-1@@)][(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])])])])]
+[(25@@[(27@@[(32@@[(42@@)][(42@@)][(42@@[(42@@)])])])][(25@@[(27@@[(27@@[(27@@[(2@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])])])])])][(27@@[(27@@[(2@@)][(2@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])])])])])])])])]
+[(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(51@@[(25@@)][(52@@)])])]
+[(25@@[(38@@[(-1@@)][(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])][(14@@[(-2@@)][(74@@[(43@@)][(43@@)])])])])])])]
+[(25@@[(25@@)][(27@@[(27@@[(42@@)][(-1@@)][(34@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(27@@[(42@@)][(-1@@)][(34@@)])])])][(21@@[(32@@[(42@@)][(42@@[(45@@)])])])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@[(42@@)][(34@@)])])])])])][(21@@[(32@@[(42@@)][(42@@[(13@@)])])])][(21@@[(37@@[(42@@)][(-1@@)])])])]
+[(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(60@@[(74@@[(43@@)][(74@@[(43@@)][(76@@)])])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(74@@[(43@@)][(76@@)])])])])])][(61@@[(38@@[(-1@@)][(32@@[(42@@)][(42@@)])])][(21@@[(7@@[(42@@)][(-1@@)][(32@@)])])])])]
+[(25@@[(60@@)][(21@@)][(27@@[(27@@[(42@@)][(-1@@)][(33@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(33@@)])])][(21@@[(7@@[(11@@)][(42@@)][(-1@@)])])][(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(57@@)])])])])][(21@@[(7@@[(42@@)][(-1@@)][(11@@[(74@@[(43@@)][(43@@)])][(32@@[(42@@)][(42@@)])])])])])]
+[(25@@[(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])][(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(36@@[(27@@[(42@@)][(-1@@)][(34@@)])])][(-1@@)][(36@@[(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])])])][(38@@[(-1@@)][(42@@)])][(21@@[(7@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])][(21@@[(7@@)])])][(25@@[(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])][(53@@[(32@@[(42@@)][(42@@[(33@@)])])])])][(60@@)])]
+[(25@@[(27@@[(42@@)][(-1@@)][(34@@)])][(25@@[(27@@[(27@@[(40@@[(42@@)][(42@@)])][(-1@@)][(34@@)])][(-1@@)][(22@@[(52@@)][(42@@)])])][(53@@[(14@@[(-2@@)][(43@@)])])])][(21@@[(37@@[(22@@[(52@@)][(42@@)])][(-1@@)])])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(2@@[(22@@[(52@@)][(42@@)])][(22@@[(52@@)][(42@@)])])])])][(41@@[(32@@[(22@@[(52@@)][(42@@)])][(42@@)])])])]
+[(25@@[(27@@[(32@@[(42@@)][(42@@)][(42@@[(42@@)])])])][(25@@[(27@@[(27@@[(27@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])])])])][(27@@[(27@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])])][(2@@)])])])])])]
+[(25@@[(38@@[(-1@@)][(32@@[(42@@)][(42@@[(27@@[(40@@[(42@@)][(42@@)])][(-1@@)][(42@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(27@@[(40@@[(42@@)][(42@@)])][(-1@@)][(42@@)])])])])])]
+[(25@@[(27@@[(-1@@)])][(41@@)])]
+[(25@@[(27@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])][(53@@[(14@@[(-2@@)][(43@@)][(27@@[(42@@)][(-1@@)][(45@@)])])])])]
+[(25@@[(42@@)][(41@@)])]
+[(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)])])])][(41@@[(9@@)])])]
+[(25@@[(21@@)])]
+[(25@@[(27@@[(32@@[(42@@)][(42@@)])][(-1@@)][(34@@)])][(21@@[(32@@[(42@@[(42@@)][(42@@)][(42@@)])])])])]
+[(25@@[(27@@[(27@@[(-1@@)])][(-1@@)])])]
+[(25@@[(42@@)][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(42@@)][(45@@)][(32@@[(42@@)][(42@@)])])])])])])]
+[(25@@[(21@@)][(42@@)][(60@@[(74@@[(43@@)][(76@@)])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)][(42@@)][(42@@)])])])])]
+[(25@@[(32@@[(42@@)][(32@@)][(42@@[(45@@)])])][(21@@[(32@@[(32@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(42@@)])][(45@@)][(32@@[(42@@)][(42@@)])][(45@@)][(32@@[(42@@)][(42@@)])])])])])][(18@@)])]
+[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(21@@[(7@@[(42@@)][(-1@@)][(27@@[(11@@[(39@@)][(36@@[(27@@[(-1@@)][(27@@[(42@@)][(-1@@)][(42@@)])][(42@@)])])])][(-1@@)][(11@@[(39@@)][(42@@)])])])])])]
+[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(32@@)])][(37@@[(42@@)][(-1@@)])][(25@@[(38@@[(-1@@)][(32@@[(32@@[(42@@)])][(42@@)])])][(21@@[(7@@[(42@@)][(-1@@)][(34@@)])])][(41@@[(9@@)])])])]
+[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(40@@[(42@@)][(42@@)])])][(38@@[(-1@@)][(42@@)])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(42@@)][(2@@[(42@@)][(42@@)])][(2@@[(42@@)][(42@@)])])])])])])]
+[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(40@@[(42@@)][(42@@)])])][(37@@[(42@@)][(-1@@)])][(21@@)])]
+[(24@@)]
+[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(40@@[(42@@)][(42@@)])])][(37@@[(42@@)][(-1@@)])][(21@@[(7@@[(2@@[(42@@)][(42@@)])][(-1@@)][(2@@[(42@@)][(42@@)])])])])]
+[(24@@[(32@@[(42@@)][(42@@)])])]
+[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(21@@[(32@@)])])]
+[(24@@[(27@@[(42@@)])])]
+[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(32@@)])][(37@@[(42@@)][(-1@@)])][(25@@[(38@@[(-1@@)][(32@@[(32@@[(42@@)])][(42@@)])])][(41@@[(9@@)])])])]
+[(61@@[(32@@[(42@@)][(42@@[(45@@)])])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(45@@)][(45@@)])])])])][(21@@[(37@@[(42@@)][(-1@@)])])])]
+[(61@@[(27@@[(32@@[(42@@)][(42@@[(34@@)])])][(-1@@)][(13@@)])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(34@@)])])])])])]
+[(61@@[(27@@[(36@@[(7@@[(32@@[(42@@)])])])])])]
+[(61@@[(27@@[(32@@[(42@@)][(42@@)])][(-1@@)][(34@@)])][(21@@)][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(32@@)][(42@@[(34@@)])])])])])]
+[(61@@)]
+[(61@@[(32@@[(42@@)])][(21@@[(32@@[(42@@[(32@@[(42@@)])])])])])]
+[(61@@[(27@@[(27@@[(42@@)])])])]
+[(61@@[(27@@[(-1@@)])])]
+[(61@@[(21@@)][(32@@[(42@@)][(42@@)])][(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@)])])])])]
+[(61@@[(32@@)])]
+[(61@@[(27@@[(42@@)][(-1@@)][(42@@)])][(21@@[(7@@[(42@@)][(-1@@)][(42@@)])])][(21@@[(38@@[(-1@@)][(42@@)])])])]
+[(70@@[(44@@[(43@@)][(42@@)][(74@@[(43@@)][(43@@)][(74@@[(43@@)][(43@@)][(43@@)])])])][(32@@[(42@@)])][(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@)])])])])]
+[(70@@[(44@@[(43@@)][(42@@)])][(32@@[(42@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])][(42@@)])])])])])])]
+[(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(60@@[(74@@[(43@@)][(43@@)])][(59@@[(42@@)][(32@@[(42@@)][(42@@[(42@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])])])]
+[(70@@[(21@@)][(44@@[(83@@)][(43@@)][(42@@)])][(32@@[(42@@)][(42@@)])])]
+[(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(21@@[(32@@)])])]
+[(70@@[(44@@[(42@@)])][(25@@[(27@@[(38@@[(32@@[(42@@[(42@@)])])])][(32@@[(42@@[(42@@)])])])][(21@@[(32@@[(42@@[(42@@)])])])])])]
+[(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(21@@)])]
+[(70@@)]
+[(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])]
+[(70@@[(32@@[(42@@)][(42@@)])])]
+[(70@@[(44@@[(43@@)])])]
+[(70@@[(44@@[(83@@)][(43@@)][(42@@)])][(42@@)][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])])]
+[(70@@[(42@@)])]
+[(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])][(42@@)])])])])]
+[(70@@[(32@@[(42@@)][(42@@)])][(42@@)])]
+[(70@@[(44@@[(43@@)][(42@@)])][(32@@[(42@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])])]
+[(10@@)]
+[(17@@)]
+[(17@@[(42@@)][(42@@)][(33@@)])]
+[(17@@[(36@@[(16@@[(27@@[(42@@)][(-1@@)][(33@@)])][(32@@[(42@@)][(42@@)])][(45@@)])])][(45@@)])]
+[(17@@[(42@@)])]
+[(17@@[(33@@)][(33@@)][(40@@[(40@@[(42@@)][(42@@)])][(42@@)])][(40@@[(40@@[(42@@)][(42@@)])][(42@@)])])]
+[(71@@[(83@@)][(42@@)][(72@@[(42@@)])][(72@@[(42@@)])][(72@@[(42@@)])])]
+[(71@@[(83@@)])]
+[(18@@)]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(44@@[(39@@)][(42@@)])][(44@@[(39@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(27@@[(38@@[(-1@@)][(34@@)])][(-1@@)][(42@@)])])])])][(60@@[(39@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(42@@)])])])])][(60@@[(39@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(42@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(42@@)])][(60@@[(39@@)][(59@@[(42@@)][(27@@[(42@@)][(-1@@)][(42@@)])])])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])][(41@@[(42@@)])][(41@@[(34@@)])])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(25@@[(27@@[(42@@)][(-1@@)][(52@@)])][(41@@[(9@@)])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(41@@[(9@@)])])][(25@@[(38@@[(-1@@)][(48@@[(42@@)][(42@@)])])][(41@@[(9@@)])])][(25@@[(32@@[(42@@)][(42@@[(32@@)][(32@@[(42@@)][(42@@)])])])][(41@@[(9@@)])])][(60@@[(43@@)][(59@@[(42@@)][(11@@[(43@@)][(42@@)])])])][(25@@[(32@@[(42@@)][(42@@[(42@@)][(40@@[(42@@)][(42@@)])])])][(41@@[(9@@)])])][(25@@[(32@@[(42@@)][(42@@[(42@@)][(40@@[(42@@)][(42@@)])])])][(41@@[(9@@)])])][(41@@[(9@@)])])]
+[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(41@@[(33@@)])])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(32@@[(32@@[(42@@)][(42@@)])])][(32@@[(34@@)][(40@@[(42@@)][(42@@)])])][(42@@)])])])])][(41@@[(42@@)])])]
+[(31@@[(44@@[(42@@)])][(60@@[(74@@[(43@@)][(43@@)])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)])])])])][(21@@[(32@@[(42@@[(42@@)])])])][(60@@[(74@@[(43@@)][(5@@[(43@@)])])][(59@@[(42@@)][(32@@[(42@@)])])])][(25@@[(38@@[(-1@@)][(32@@[(42@@)][(42@@)])])][(70@@[(44@@[(5@@[(43@@)])][(42@@)])][(42@@)][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@[(2@@[(42@@)][(34@@)])])])])])])])])][(41@@[(32@@)][(42@@)])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(45@@)])])])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])]
+[(31@@[(83@@)][(42@@)][(44@@[(43@@)][(42@@)])][(46@@[(42@@)][(42@@)])][(21@@[(32@@[(42@@[(14@@[(40@@[(42@@)][(42@@)])])])])])][(21@@[(32@@)])])]
+[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(60@@[(43@@)][(59@@[(42@@)][(33@@)])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(7@@[(42@@)][(-1@@)][(14@@[(-2@@)][(43@@)][(42@@)])])])])][(41@@[(42@@)])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(41@@[(27@@[(42@@)][(-1@@)][(42@@)])])])]
+[(31@@[(44@@[(43@@)][(42@@)])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(39@@)][(42@@)])])]
+[(31@@[(83@@)][(83@@)][(39@@)][(42@@)][(44@@[(39@@)][(42@@)])][(44@@[(39@@)][(42@@)])][(41@@[(36@@[(16@@[(27@@[(42@@)][(-1@@)][(42@@)])][(38@@[(-1@@)][(34@@)])][(36@@[(16@@[(27@@[(42@@)][(-1@@)][(42@@)])][(34@@)][(34@@)])])])])])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(74@@[(43@@)][(43@@)])][(42@@)])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])]
+[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(54@@[(60@@[(74@@[(43@@)][(76@@)])][(59@@[(42@@)][(11@@[(74@@[(43@@)][(76@@)])][(32@@[(42@@)][(42@@[(42@@)])])])])])][(41@@[(32@@[(42@@)][(42@@[(42@@)][(14@@[(-2@@)][(43@@)])])])])][(12@@[(44@@[(43@@)][(42@@)])][(53@@[(14@@[(-2@@)][(43@@)][(27@@[(45@@)][(-1@@)][(42@@)])])])])])])]
+[(31@@[(44@@[(42@@)])][(21@@[(32@@[(42@@)])])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(43@@)][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])])]
+[(31@@)]
+[(31@@[(83@@)][(39@@)][(42@@)][(21@@[(32@@)])][(21@@[(32@@[(42@@)][(42@@)])])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(60@@[(43@@)][(59@@[(42@@)][(32@@)])])][(41@@[(27@@[(27@@[(42@@)][(-1@@)][(33@@)])][(-1@@)][(32@@[(42@@)][(42@@)])])])])]
+[(31@@[(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(42@@)])])])])][(41@@[(16@@[(27@@[(42@@)][(-1@@)][(33@@)])][(9@@)][(32@@[(42@@)][(42@@[(9@@)][(9@@)])])])])])]
+[(31@@[(83@@)][(43@@)][(42@@)][(41@@[(32@@[(42@@)][(42@@)])])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)][(9@@)][(42@@)])])])])]
+[(31@@[(41@@[(32@@[(42@@[(14@@)])])])][(44@@[(5@@[(39@@)])][(42@@)])][(60@@[(83@@)][(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)][(1@@[(23@@[(83@@)][(83@@)][(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)])])])][(31@@[(83@@)][(39@@)][(42@@)][(44@@[(39@@)][(42@@)])][(44@@[(5@@[(39@@)])][(42@@)])][(60@@[(39@@)][(59@@[(42@@)][(40@@[(42@@)][(42@@)])])])][(54@@[(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])])][(12@@[(44@@[(43@@)][(42@@)])])])][(41@@[(42@@)])])][(31@@[(83@@)][(5@@[(39@@)])][(42@@)][(44@@[(39@@)][(42@@)])][(44@@[(5@@[(39@@)])][(42@@)])][(60@@[(5@@[(39@@)])][(59@@[(42@@)][(4@@[(40@@[(42@@)][(42@@)])][(40@@[(42@@)][(42@@)])][(40@@[(42@@)][(42@@)])])])])][(54@@[(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])])][(12@@[(44@@[(43@@)][(42@@)])])])][(41@@[(42@@)])])])])])])][(41@@[(32@@[(42@@[(42@@)][(42@@)])])])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(83@@)][(39@@)][(42@@)])][(60@@[(39@@)][(59@@[(42@@)][(27@@[(32@@)][(-1@@)][(42@@)])])])][(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@[(42@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(41@@[(34@@)])])][(24@@[(58@@[(39@@)][(59@@[(42@@)][(32@@)])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(25@@[(27@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])][(34@@)])][(41@@[(34@@)])])])][(41@@)])]
+[(31@@[(83@@)][(43@@)][(42@@)][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(54@@[(60@@[(5@@[(74@@[(43@@)][(76@@)])])][(59@@[(42@@)][(32@@[(42@@)][(42@@[(32@@[(57@@)][(42@@)])][(33@@)])])])])][(70@@[(44@@[(74@@[(43@@)][(76@@)])][(42@@)])][(42@@)][(41@@[(11@@[(43@@)][(32@@[(42@@)][(42@@[(42@@)])])])])])][(41@@[(33@@)])][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)])])])][(41@@[(33@@)])])])][(41@@[(42@@)])])])]
+[(31@@[(60@@)][(83@@)][(74@@[(43@@)][(43@@)])][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(74@@[(43@@)][(43@@)])][(42@@)])][(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(25@@[(27@@[(32@@[(42@@)][(32@@)][(42@@[(42@@)])])][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(32@@)][(42@@)])])])])])])][(41@@[(42@@)])])]
+[(31@@[(83@@)][(74@@[(43@@)][(43@@)])][(42@@)][(44@@[(74@@[(43@@)][(43@@)])][(42@@)])][(60@@[(74@@[(43@@)][(43@@)])][(59@@[(42@@)][(33@@)])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(7@@[(42@@)][(-1@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)])])])])][(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@[(42@@)])])])])])])])][(41@@[(42@@)])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(83@@)][(43@@)][(42@@)])][(43@@)][(60@@[(83@@)][(43@@)][(59@@[(42@@)][(32@@[(42@@[(42@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(86@@[(21@@[(32@@[(42@@)][(32@@)][(42@@[(42@@)])])])][(41@@[(33@@)])])][(32@@[(42@@[(42@@)])])])])])])])]
+[(31@@[(42@@)][(44@@[(74@@[(43@@)][(76@@)])][(42@@)])][(44@@[(43@@)][(42@@)])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])]
+[(31@@[(83@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])]
+[(31@@[(44@@[(39@@)][(42@@)])])]
+[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(43@@)][(41@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])])]
+[(31@@[(83@@)][(83@@)])]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@[(42@@)][(9@@)])])])])]
+[(31@@[(83@@)])]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])])]
+[(31@@[(39@@)][(43@@)][(41@@[(52@@)])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(41@@[(16@@[(27@@[(42@@)][(-1@@)][(33@@)])][(34@@)][(32@@[(42@@)][(42@@)])])])])]
+[(31@@[(39@@)][(42@@)][(41@@[(27@@[(27@@[(27@@[(42@@)][(-1@@)][(33@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(33@@)])])][(-1@@)][(27@@[(22@@[(52@@)][(42@@)])][(-1@@)][(33@@)])])])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(43@@)][(54@@[(21@@[(32@@)])][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(42@@)])])][(42@@)])])])][(21@@[(32@@)])])])])]
+[(21@@[(7@@[(14@@[(14@@[(-2@@)][(43@@)][(1@@[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(60@@[(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)][(42@@)])])])][(21@@[(32@@[(42@@)][(42@@[(27@@[(42@@)][(-1@@)][(45@@)][(32@@[(42@@)][(42@@)])])])])])][(41@@[(42@@)])])])])])])])]
+[(21@@[(7@@[(27@@[(36@@[(27@@[(27@@[(-1@@)][(32@@[(42@@)][(42@@)])])][(-1@@)][(27@@[(32@@[(42@@)][(42@@)])][(-1@@)][(32@@[(42@@)][(42@@)])])])])][(32@@)])])])]
+[(21@@[(7@@[(42@@)][(-1@@)][(27@@[(36@@[(16@@[(27@@[(42@@)][(-1@@)][(34@@)])][(27@@[(42@@)][(-1@@)][(42@@)])][(42@@)])])][(-1@@)][(42@@)])])])]
+[(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(45@@)][(42@@)])])])])]
+[(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(42@@)][(32@@[(40@@)][(42@@)])])])])])]
+[(21@@[(32@@[(42@@)][(32@@[(42@@)])][(42@@[(45@@)])])])]
+[(21@@[(32@@[(42@@)][(42@@[(2@@[(42@@)][(34@@)])][(2@@[(42@@)][(34@@)])][(32@@[(42@@)][(42@@)])][(32@@[(42@@)][(42@@)])])])])]
+[(21@@[(32@@[(42@@[(42@@)][(42@@)])][(32@@)])])]
+[(21@@[(32@@[(42@@)][(42@@[(42@@)][(14@@[(-2@@)][(43@@)][(42@@)][(27@@[(32@@[(42@@)][(42@@[(34@@)])])][(-1@@)][(34@@)])][(27@@[(32@@[(42@@)][(42@@[(34@@)])])][(-1@@)][(32@@[(42@@)][(42@@[(34@@)])])][(34@@)])][(42@@)])])])])]
+[(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])][(32@@[(42@@)])][(32@@[(27@@[(45@@)][(-1@@)][(45@@)])])][(42@@)])])])])]
+[(21@@)]
+[(21@@[(32@@)][(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(32@@[(42@@)][(42@@)])])])]
+[(21@@[(32@@[(42@@[(42@@)][(14@@[(-2@@)][(43@@)][(14@@[(-2@@)][(43@@)][(45@@)])][(14@@[(-2@@)][(43@@)][(42@@)][(14@@[(-2@@)][(43@@)][(45@@)])])])])])])]
+[(21@@[(14@@[(-2@@)][(43@@)][(42@@)][(1@@[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(43@@)][(21@@[(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])][(45@@)])])])][(41@@[(48@@[(42@@)][(42@@)])])])])])])]
+[(21@@[(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])][(45@@)])])])]
+[(21@@[(7@@[(27@@[(32@@[(42@@)][(42@@[(22@@[(52@@)][(42@@)])])])][(36@@[(16@@[(27@@[(22@@[(52@@)][(42@@)])][(-1@@)][(33@@)])][(34@@)][(32@@[(22@@)][(42@@)])])])])])])]
+[(21@@[(7@@[(2@@[(40@@[(42@@)][(42@@)])][(42@@)])][(27@@[(36@@[(27@@[(36@@[(27@@[(2@@[(42@@)][(42@@)])][(-1@@)][(34@@)])])][(-1@@)][(2@@[(40@@[(42@@)][(42@@)])][(42@@)])])])][(-1@@)][(36@@[(27@@[(2@@[(40@@[(42@@)][(42@@)])][(42@@)])][(-1@@)][(36@@[(27@@[(2@@[(42@@)][(42@@)])][(-1@@)][(34@@)])])])])][(36@@[(27@@)])])])])]
+[(21@@[(7@@[(42@@)][(-1@@)][(16@@[(36@@[(27@@[(32@@[(42@@)][(32@@)][(42@@)])][(-1@@)][(40@@[(42@@)][(42@@)])])])][(32@@[(42@@[(32@@[(42@@)][(32@@[(34@@)])][(32@@)][(42@@)])])])][(42@@)])])])]
+[(21@@[(32@@[(42@@)][(42@@[(40@@[(40@@[(40@@[(40@@[(40@@[(40@@[(40@@[(40@@[(40@@[(42@@)][(42@@)])][(42@@)])][(42@@)])][(42@@)])][(42@@)])][(42@@)])][(42@@)])][(42@@)])][(42@@)])])])])]
+[(21@@[(7@@[(42@@)][(9@@)])])]
+[(21@@[(32@@[(42@@[(32@@)][(27@@[(32@@[(42@@)][(32@@)][(42@@)])][(-1@@)][(45@@)][(32@@[(42@@)][(32@@)][(42@@)])])])])])]
+[(21@@[(7@@[(14@@)])])]
+[(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)][(42@@)][(42@@)][(42@@)][(45@@)][(9@@)][(9@@)])])])]
+[(21@@[(32@@)])]
+[(21@@[(32@@[(42@@[(14@@[(40@@)][(16@@[(42@@)][(40@@[(42@@)][(42@@)])][(40@@[(42@@)][(42@@)])])])])])])]
+[(21@@[(32@@[(42@@[(22@@[(42@@)])])])])]
+[(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])][(32@@[(42@@)])][(32@@[(45@@)])][(42@@)])])])])]
+[(21@@[(7@@[(27@@[(38@@[(-1@@)][(42@@)])])][(27@@[(36@@[(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(27@@[(-1@@)][(42@@)][(42@@)][(42@@)])])])][(-1@@)][(36@@[(27@@[(42@@)][(-1@@)][(42@@)])])])])])]
+[(54@@[(21@@[(32@@[(42@@)][(42@@)])])][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])][(41@@[(42@@)])][(12@@[(44@@[(43@@)][(42@@)])][(41@@[(42@@)])])])]
+[(54@@[(8@@[(25@@[(42@@)][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])])])]
+[(54@@[(21@@)][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])])]
+[(54@@[(41@@)][(8@@[(21@@[(32@@[(42@@[(42@@)])])])])])]
+[(54@@[(21@@)][(21@@)][(8@@)][(41@@)][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])][(53@@[(42@@)])])])]
+[(54@@[(21@@)][(12@@[(44@@[(43@@)][(42@@)])])])]
+[(54@@[(25@@[(27@@[(62@@[(42@@)][(-3@@)][(43@@)])][(-1@@)][(38@@[(-1@@)][(32@@[(42@@[(42@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(32@@[(42@@)][(42@@)])])])])])][(41@@[(32@@)])][(8@@[(21@@[(32@@[(42@@[(42@@)])])])])])]
+[(54@@[(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])][(12@@[(44@@[(43@@)][(42@@)])][(53@@[(14@@[(-2@@)][(43@@)][(42@@)])])])])]
+[(54@@)]
+[(54@@[(21@@)][(12@@[(44@@[(43@@)][(42@@)])][(53@@[(32@@[(42@@[(42@@)])])])])])]
+[(54@@[(21@@)][(8@@[(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])])]
+[(54@@[(21@@[(7@@[(42@@)][(-1@@)][(14@@[(-2@@)][(43@@)][(42@@)][(42@@)])])])][(21@@)][(8@@[(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@)])])])])])]
+[(54@@[(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])][(42@@)][(9@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(14@@[(-2@@)][(43@@)][(42@@)])])])])])][(12@@[(44@@[(43@@)][(42@@)])][(53@@[(14@@[(-2@@)][(43@@)][(32@@[(40@@)][(42@@[(42@@)])])])])])])]
+[(54@@[(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])][(42@@)][(9@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(14@@[(-2@@)][(43@@)][(42@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(14@@[(-2@@)][(43@@)][(42@@)])])])])])][(12@@[(44@@[(43@@)][(42@@)])][(53@@[(14@@[(-2@@)][(43@@)][(32@@[(40@@)][(42@@[(42@@)])])])])])])]
+[(54@@[(21@@[(7@@[(32@@)][(42@@)][(-1@@)])])][(12@@[(44@@[(43@@)][(42@@)])][(25@@[(32@@[(42@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(42@@)][(45@@)])][(42@@)])])])])])])]
+[(54@@[(21@@)][(8@@[(21@@)])])]
+[(54@@[(58@@[(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)][(42@@)])])])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])])]
+[(54@@[(21@@)][(21@@)])]
+[(54@@[(21@@)][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(42@@)])])])])])]
+[(54@@[(60@@)])]
+[(54@@[(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(9@@)])])])][(53@@[(42@@)])])][(21@@)])]
+[(54@@[(12@@[(44@@[(43@@)][(42@@)])])])]
+[(54@@[(21@@)][(12@@[(44@@[(84@@[(43@@)][(43@@)])][(42@@)])][(21@@[(32@@[(42@@)][(42@@)])])][(53@@[(42@@)])])])]
+[(54@@[(21@@[(7@@[(42@@)][(-1@@)][(32@@[(52@@)][(42@@)])])])][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(42@@)])])])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])])]
+[(6@@[(27@@[(27@@[(42@@)][(-1@@)][(34@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(42@@)])])])]
+[(6@@[(36@@[(27@@)])])]
+[(6@@[(27@@)])]
+[(6@@[(27@@[(42@@)][(-1@@)][(33@@)])])]
+[(53@@[(14@@[(45@@)][(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])])]
+[(53@@[(14@@[(32@@[(42@@[(27@@[(32@@)][(32@@[(42@@[(32@@[(42@@)][(42@@)])])])])])])])])]
+[(53@@[(14@@[(27@@[(45@@)][(-1@@)][(42@@)][(45@@)])])])]
+[(53@@[(14@@[(42@@)][(32@@[(42@@[(42@@)])])])])]
+[(53@@)]
+[(53@@[(14@@[(-2@@)][(43@@)][(27@@[(45@@)][(-1@@)][(42@@)][(45@@)][(42@@)])])])]
+[(53@@[(14@@[(-2@@)][(43@@)][(27@@[(45@@)][(-1@@)][(42@@)])])])]
+[(53@@[(14@@[(27@@[(45@@)])])])]
+[(53@@[(14@@[(45@@)])])]
+[(53@@[(42@@)])]
+[(53@@[(14@@[(27@@[(32@@[(42@@)])])])])]
+[(23@@[(83@@)][(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)][(9@@)])])])]
+[(23@@[(83@@)][(83@@)][(83@@)][(39@@)][(59@@[(42@@)][(27@@[(42@@)][(-1@@)][(42@@)])])])]
+[(23@@[(83@@)][(83@@)][(43@@)][(59@@[(42@@)][(33@@)])])]
+[(23@@[(83@@)][(83@@)][(83@@)][(5@@[(39@@)])][(59@@[(42@@)][(3@@[(5@@[(39@@)])][(4@@[(34@@)][(34@@)][(34@@)][(34@@)])])])])]
+[(23@@[(59@@[(27@@[(45@@)][(45@@)][(45@@)])])])]
+[(23@@[(83@@)][(83@@)][(74@@[(43@@)][(74@@[(43@@)][(76@@)])])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(74@@[(43@@)][(76@@)])])])])])]
+[(23@@)]
+[(23@@[(83@@)][(83@@)][(83@@)][(43@@)][(59@@[(42@@)][(32@@[(57@@)][(42@@)])])])]
+[(23@@[(83@@)][(83@@)][(43@@)][(59@@[(42@@)][(32@@[(14@@[(-2@@)][(43@@)][(40@@[(42@@)][(42@@)])][(40@@[(42@@)][(42@@)])][(9@@)])][(32@@)][(42@@)])])])]
+[(23@@[(83@@)][(83@@)][(83@@)][(39@@)][(59@@[(42@@)][(42@@)])])]
+[(23@@[(59@@[(14@@[(45@@)])])])]
+[(23@@[(83@@)][(83@@)][(74@@[(43@@)][(43@@)][(43@@)])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)][(43@@)])])])])]
+[(23@@[(43@@)][(39@@)])]
+[(23@@[(83@@)][(83@@)][(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(32@@[(57@@)][(42@@)])])])])])]
+[(23@@[(83@@)])]
+[(23@@[(59@@[(32@@[(32@@[(14@@[(-2@@)][(43@@)][(34@@)][(40@@[(42@@)][(42@@)])][(9@@)][(9@@)])])])])])]
+[(23@@[(59@@[(32@@[(32@@[(45@@)])])])])]
+[(23@@[(83@@)][(74@@[(43@@)][(43@@)][(43@@)])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)][(43@@)])])])])]
+[(60@@[(59@@[(32@@[(42@@[(14@@[(-2@@)][(43@@)][(42@@)][(14@@[(-2@@)][(43@@)][(32@@[(42@@)][(42@@)])][(38@@[(-1@@)][(34@@)])])][(42@@)])])])])])]
+[(60@@[(59@@[(32@@[(22@@[(52@@)][(42@@)])][(42@@[(42@@)])][(42@@)])])])]
+[(60@@[(83@@)][(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])])])])])]
+[(60@@[(39@@)][(59@@[(42@@)][(32@@[(22@@)][(42@@)])])])]
+[(60@@[(39@@)][(59@@[(42@@)][(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])])])]
+[(60@@[(5@@[(39@@)])][(59@@[(32@@)][(42@@)])])]
+[(60@@[(83@@)][(43@@)][(59@@[(42@@)][(32@@[(42@@[(40@@[(42@@)][(42@@)])][(42@@)][(32@@[(42@@[(32@@[(40@@)][(32@@)][(42@@)])])])])])])])]
+[(60@@)]
+[(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@[(42@@)][(40@@[(42@@)][(42@@)])])])])])]
+[(60@@[(43@@)][(59@@[(32@@)][(32@@[(42@@)][(32@@)][(32@@[(86@@[(59@@[(42@@)])][(32@@[(42@@)][(42@@)][(32@@)])])])][(42@@)])])][(74@@[(43@@)][(43@@)])])]
+[(60@@[(59@@[(36@@[(16@@[(27@@[(-1@@)])][(33@@)][(33@@)])])])])]
+[(60@@[(59@@[(42@@)][(34@@)])])]
+[(60@@[(74@@[(43@@)][(74@@[(43@@)][(76@@)])])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(74@@[(43@@)][(76@@)])])])])])]
+[(60@@[(74@@[(43@@)])])]
+[(60@@[(74@@[(43@@)][(43@@)])][(59@@[(42@@)][(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])])]
+[(60@@[(59@@)])]
+[(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(42@@)][(40@@[(40@@[(42@@)][(42@@)])][(42@@)])])])])])]
+[(60@@[(5@@[(43@@)])][(59@@[(42@@)])])]
+[(60@@[(74@@[(43@@)][(43@@)])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)])][(22@@[(52@@)][(42@@)])])])])]
+[(46@@[(45@@)][(45@@)][(9@@)][(42@@)][(42@@)])]
+[(46@@)]
+[(46@@[(32@@[(42@@)][(42@@)])])]
+[(46@@[(42@@)])]
+[(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(42@@)][(45@@)][(32@@[(42@@)][(42@@)])][(45@@)][(32@@[(42@@)][(42@@)])])])])])])]
+[(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(42@@)])])])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@[(42@@)])])])])])])]
+[(12@@[(44@@[(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(42@@)])])])])]
+[(12@@[(44@@[(43@@)][(42@@)])][(53@@[(14@@[(-2@@)][(43@@)][(32@@[(42@@)][(42@@)])])])])]
+[(12@@[(44@@[(42@@)])][(21@@[(32@@[(42@@[(42@@)])])])])]
+[(12@@[(44@@[(84@@[(43@@)][(43@@)])][(42@@)])][(21@@[(7@@[(42@@)][(-1@@)][(9@@)])])][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])]
+[(12@@[(44@@[(43@@)][(42@@)])][(53@@[(42@@)])])]
+[(12@@[(44@@[(43@@)][(42@@)])][(25@@[(42@@)][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(42@@)])])][(42@@)])])])])])]
+[(12@@)]
+[(12@@[(44@@[(84@@[(43@@)][(43@@)])][(42@@)])][(53@@[(42@@)])])]
+[(12@@[(44@@[(43@@)][(42@@)])][(60@@[(83@@)][(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)][(32@@[(42@@)][(42@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])][(53@@[(42@@)])])]
+[(12@@[(44@@[(43@@)][(42@@)])])]
+[(12@@[(44@@[(43@@)])])]
+[(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(42@@)])])])][(41@@[(33@@)])])]
+[(12@@[(21@@)])]
+[(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(42@@)])][(42@@)])])])])]
+[(12@@[(44@@[(43@@)][(42@@)])][(21@@)])]
+[(49@@)]
+[(49@@[(40@@[(42@@)][(42@@)])])]
+[(49@@[(42@@)][(45@@)])]
+[(49@@[(42@@)])]
+[(49@@[(45@@)][(40@@[(42@@)][(42@@)])])]
+[(55@@[(83@@)][(42@@)][(74@@[(43@@)][(43@@)][(43@@)])])]
+[(55@@[(83@@)][(83@@)][(83@@)][(42@@)][(43@@)])]
+[(55@@)]
+[(55@@[(83@@)][(83@@)][(42@@)][(74@@[(43@@)][(43@@)])][(43@@)])]
+[(55@@[(83@@)][(42@@)][(43@@)])]
+[(55@@[(83@@)][(42@@)])]
+[(55@@[(83@@)])]
+[(55@@[(83@@)][(83@@)][(42@@)][(43@@)])]
+[(41@@[(32@@[(22@@[(52@@)][(42@@)])][(42@@)][(42@@[(33@@)][(33@@)])])])]
+[(41@@[(27@@[(32@@[(42@@[(27@@[(38@@[(34@@)][(42@@)])][(-1@@)][(42@@)][(34@@)])])])])])]
+[(41@@[(14@@[(-2@@)][(43@@)][(42@@)][(42@@)])][(42@@)])]
+[(41@@[(14@@[(42@@)][(22@@[(52@@)][(42@@)])])])]
+[(41@@)]
+[(41@@[(32@@[(14@@[(-2@@)][(74@@[(43@@)][(43@@)])][(42@@)])][(42@@[(32@@)])])])]
+[(41@@[(16@@[(32@@)][(27@@[(42@@)][(-1@@)][(33@@)])][(33@@)])])]
+[(41@@[(22@@[(52@@)][(42@@)])])]
+[(41@@[(86@@[(60@@[(59@@[(16@@[(32@@[(32@@[(32@@[(42@@[(42@@)])])])])][(32@@[(32@@[(32@@[(42@@[(42@@)])])])])])])])])])]
+[(41@@[(33@@)][(42@@)])]
+[(41@@[(32@@[(42@@[(42@@)][(40@@[(42@@)][(42@@)])])])][(14@@[(-2@@)][(43@@)][(42@@)][(40@@)])])]
+[(41@@[(27@@)])]
+[(41@@[(32@@[(42@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])][(14@@[(-2@@)][(43@@)][(42@@)][(42@@)])])])])]
+[(41@@[(32@@[(42@@[(33@@)][(42@@)])])])]
+[(41@@[(14@@[(-2@@)][(74@@[(43@@)][(43@@)])][(42@@)][(40@@)])][(32@@[(42@@[(40@@[(42@@)][(42@@)])][(42@@)])])])]
+[(41@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])][(16@@[(27@@[(42@@)][(-1@@)][(42@@)])][(34@@)][(36@@[(16@@[(27@@[(42@@)][(-1@@)][(42@@)])][(38@@[(-1@@)][(34@@)])][(34@@)])])])])]
+[(51@@[(21@@)][(22@@[(52@@)][(42@@)])][(21@@[(32@@[(22@@[(52@@)][(42@@)])][(42@@)])])])]
+[(51@@[(42@@)][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])]
+[(51@@[(25@@)][(22@@[(52@@)][(42@@)])][(41@@)])]
+[(51@@)]
+[(51@@[(22@@[(52@@)][(42@@)])])]
+[(51@@[(21@@)][(52@@)])]
+[(51@@[(42@@)])]
+[(51@@[(21@@)][(22@@[(52@@)][(42@@)])])]
+[(50@@)]
+[(50@@[(42@@)])]
+[(25@@[(32@@[(45@@)][(42@@[(42@@)])])][(21@@[(7@@[(40@@[(42@@)][(42@@)])][(-1@@)][(32@@[(57@@)][(42@@)])])])][(21@@[(7@@[(40@@[(42@@)][(42@@)])][(-1@@)][(32@@[(57@@)][(42@@)])])])][(21@@[(7@@[(40@@[(42@@)][(42@@)])][(-1@@)][(32@@[(57@@)][(42@@)])])])])]
+[(25@@[(27@@[(40@@[(42@@)][(42@@)])])][(53@@[(14@@[(-2@@)][(43@@)][(45@@)])])][(27@@[(42@@)][(-1@@)][(34@@)])][(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])][(59@@[(42@@)][(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(37@@[(42@@)][(-1@@)])][(21@@[(7@@[(42@@)][(-1@@)][(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(42@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(34@@)])][(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])][(59@@[(42@@)][(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(37@@[(42@@)][(-1@@)])][(60@@[(39@@)][(59@@[(42@@)][(32@@[(42@@[(42@@)][(42@@)])])])])][(21@@[(7@@[(42@@)][(-1@@)][(27@@[(36@@[(27@@[(42@@)][(-1@@)][(36@@[(27@@[(42@@)][(-1@@)][(42@@)])])])])][(-1@@)][(36@@[(27@@[(42@@)][(-1@@)][(42@@)])])])])])])][(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])][(59@@[(42@@)][(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(37@@[(42@@)][(-1@@)])][(60@@[(39@@)][(59@@[(42@@)][(32@@[(42@@[(42@@)][(42@@)])])])])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@[(36@@[(27@@[(42@@)][(-1@@)][(36@@[(27@@[(42@@)][(-1@@)][(42@@)])])])])][(36@@[(27@@[(42@@)][(-1@@)][(42@@)])])])])])])])])])]
+[(25@@[(27@@[(42@@)][(36@@[(27@@[(32@@)][(32@@)])])])][(42@@)][(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(-1@@)][(42@@)][(32@@[(42@@)][(42@@)])])][(37@@[(42@@)][(-1@@)])][(60@@[(39@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@)])])])][(25@@[(27@@[(-1@@)][(42@@)][(13@@)])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])][(61@@[(27@@[(42@@)][(-1@@)][(13@@)])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(38@@[(-1@@)][(42@@)])])])])])])])][(25@@[(53@@)][(27@@[(27@@[(42@@)][(-1@@)][(13@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(13@@)])])])])])]
+[(25@@[(27@@[(32@@[(42@@[(42@@)])])][(-1@@)][(27@@[(40@@[(42@@)][(42@@)])][(-1@@)][(34@@)])])][(21@@[(7@@[(42@@)][(-1@@)][(27@@[(42@@)][(-1@@)][(34@@)])])])])]
+[(25@@[(32@@[(42@@)][(42@@)])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])])]
+[(25@@[(27@@[(36@@[(27@@[(42@@)][(-1@@)][(33@@)])])][(-1@@)][(36@@[(27@@[(32@@[(42@@)][(42@@)])][(-1@@)][(34@@)])])])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@[(42@@)])])])])][(21@@[(7@@[(32@@)][(42@@)][(-1@@)])])])]
+[(25@@[(27@@[(42@@)][(-1@@)][(34@@)])][(21@@[(7@@[(42@@)][(-1@@)])])])]
+[(25@@[(27@@)][(27@@[(-1@@)][(27@@[(42@@)][(-1@@)][(32@@[(42@@)][(32@@)][(42@@)])])])])]
+[(25@@[(27@@[(32@@[(57@@)][(42@@)][(42@@[(42@@)])])])])]
+[(25@@[(27@@[(38@@[(-1@@)][(42@@)])][(-1@@)][(38@@[(-1@@)][(32@@[(42@@[(42@@)])])])])][(25@@[(32@@[(42@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(32@@)][(42@@)])][(45@@)])])])])])][(41@@[(42@@)])])]
+[(25@@[(27@@[(22@@[(52@@)][(42@@)])][(-1@@)][(33@@)])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(32@@[(42@@[(42@@)])])])])])]
+[(25@@[(27@@[(32@@[(42@@)][(42@@)])][(-1@@)][(34@@)])][(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(60@@[(43@@)][(59@@[(42@@)][(11@@[(43@@)][(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@[(42@@)][(40@@[(42@@)][(42@@)])])])])])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(32@@)][(42@@)])][(45@@)][(32@@[(42@@)][(42@@)])][(45@@)][(32@@[(42@@)][(32@@)][(42@@)])][(45@@)])])])])][(25@@[(32@@[(42@@[(42@@)])])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(32@@)][(42@@)])][(45@@)][(32@@[(42@@)][(42@@)])][(45@@)])])])])])])])])]
+[(25@@[(27@@[(42@@)])][(21@@[(7@@[(42@@)])])])]
+[(25@@[(22@@)][(25@@[(22@@)][(21@@[(7@@[(22@@[(42@@)])][(9@@)][(40@@[(42@@)][(42@@)])])])][(27@@[(22@@[(52@@)][(42@@)])][(-1@@)][(40@@[(42@@)][(42@@)])])])][(27@@[(22@@[(52@@)][(42@@)])][(-1@@)][(40@@[(42@@)][(42@@)])])])]
+[(25@@[(32@@[(42@@)][(32@@[(42@@)][(40@@[(40@@[(42@@)][(42@@)])][(42@@)])])][(42@@[(45@@)])])][(53@@[(14@@[(-2@@)][(43@@)][(45@@)])])])]
+[(25@@)]
+[(25@@[(21@@)][(38@@[(-1@@)][(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])])])])])]
+[(25@@[(42@@)][(21@@[(7@@[(42@@)][(-1@@)][(9@@)])])][(21@@[(7@@[(42@@)][(-1@@)][(38@@[(-1@@)][(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])])])])]
+[(25@@[(27@@[(32@@[(42@@)][(42@@)][(42@@[(42@@)])])])][(25@@[(27@@[(27@@[(27@@[(2@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])])])])])][(27@@[(27@@[(2@@)][(2@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])])])])])])])])]
+[(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(51@@[(25@@)][(52@@)])])]
+[(25@@[(38@@[(-1@@)][(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])][(14@@[(-2@@)][(74@@[(43@@)][(43@@)])])])])])])]
+[(25@@[(25@@)][(27@@[(27@@[(42@@)][(-1@@)][(34@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(27@@[(42@@)][(-1@@)][(34@@)])])])][(21@@[(32@@[(42@@)][(42@@[(45@@)])])])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@[(42@@)][(34@@)])])])])])][(21@@[(32@@[(42@@)][(42@@[(13@@)])])])][(21@@[(37@@[(42@@)][(-1@@)])])])]
+[(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(60@@[(74@@[(43@@)][(74@@[(43@@)][(76@@)])])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(74@@[(43@@)][(76@@)])])])])])][(61@@[(38@@[(-1@@)][(32@@[(42@@)][(42@@)])])][(21@@[(7@@[(42@@)][(-1@@)][(32@@)])])])])]
+[(25@@[(60@@)][(21@@)][(27@@[(27@@[(42@@)][(-1@@)][(33@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(33@@)])])][(21@@[(7@@[(11@@)][(42@@)][(-1@@)])])][(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(57@@)])])])])][(21@@[(7@@[(42@@)][(-1@@)][(11@@[(74@@[(43@@)][(43@@)])][(32@@[(42@@)][(42@@)])])])])])]
+[(25@@[(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])][(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(36@@[(27@@[(42@@)][(-1@@)][(34@@)])])][(-1@@)][(36@@[(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])])])][(38@@[(-1@@)][(42@@)])][(21@@[(7@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])][(21@@[(7@@)])])][(25@@[(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])][(53@@[(32@@[(42@@)][(42@@[(33@@)])])])])][(60@@)])]
+[(25@@[(27@@[(42@@)][(-1@@)][(34@@)])][(25@@[(27@@[(27@@[(40@@[(42@@)][(42@@)])][(-1@@)][(34@@)])][(-1@@)][(22@@[(52@@)][(42@@)])])][(53@@[(14@@[(-2@@)][(43@@)])])])][(21@@[(37@@[(22@@[(52@@)][(42@@)])][(-1@@)])])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(2@@[(22@@[(52@@)][(42@@)])][(22@@[(52@@)][(42@@)])])])])][(41@@[(32@@[(22@@[(52@@)][(42@@)])][(42@@)])])])]
+[(25@@[(27@@[(32@@[(42@@)][(42@@)][(42@@[(42@@)])])])][(25@@[(27@@[(27@@[(27@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])])])])][(27@@[(27@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])])][(2@@)])])])])])]
+[(25@@[(38@@[(-1@@)][(32@@[(42@@)][(42@@[(27@@[(40@@[(42@@)][(42@@)])][(-1@@)][(42@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(27@@[(40@@[(42@@)][(42@@)])][(-1@@)][(42@@)])])])])])]
+[(25@@[(27@@[(-1@@)])][(41@@)])]
+[(25@@[(27@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])][(53@@[(14@@[(-2@@)][(43@@)][(27@@[(42@@)][(-1@@)][(45@@)])])])])]
+[(25@@[(42@@)][(41@@)])]
+[(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)])])])][(41@@[(9@@)])])]
+[(25@@[(21@@)])]
+[(25@@[(27@@[(32@@[(42@@)][(42@@)])][(-1@@)][(34@@)])][(21@@[(32@@[(42@@[(42@@)][(42@@)][(42@@)])])])])]
+[(25@@[(27@@[(27@@[(-1@@)])][(-1@@)])])]
+[(25@@[(42@@)][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(42@@)][(45@@)][(32@@[(42@@)][(42@@)])])])])])])]
+[(25@@[(21@@)][(42@@)][(60@@[(74@@[(43@@)][(76@@)])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)][(42@@)][(42@@)])])])])]
+[(25@@[(32@@[(42@@)][(32@@)][(42@@[(45@@)])])][(21@@[(32@@[(32@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(42@@)])][(45@@)][(32@@[(42@@)][(42@@)])][(45@@)][(32@@[(42@@)][(42@@)])])])])])][(18@@)])]
+[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(21@@[(7@@[(42@@)][(-1@@)][(27@@[(11@@[(39@@)][(36@@[(27@@[(-1@@)][(27@@[(42@@)][(-1@@)][(42@@)])][(42@@)])])])][(-1@@)][(11@@[(39@@)][(42@@)])])])])])]
+[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(32@@)])][(37@@[(42@@)][(-1@@)])][(25@@[(38@@[(-1@@)][(32@@[(32@@[(42@@)])][(42@@)])])][(21@@[(7@@[(42@@)][(-1@@)][(34@@)])])][(41@@[(9@@)])])])]
+[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(40@@[(42@@)][(42@@)])])][(38@@[(-1@@)][(42@@)])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(42@@)][(2@@[(42@@)][(42@@)])][(2@@[(42@@)][(42@@)])])])])])])]
+[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(40@@[(42@@)][(42@@)])])][(37@@[(42@@)][(-1@@)])][(21@@)])]
+[(24@@)]
+[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(40@@[(42@@)][(42@@)])])][(37@@[(42@@)][(-1@@)])][(21@@[(7@@[(2@@[(42@@)][(42@@)])][(-1@@)][(2@@[(42@@)][(42@@)])])])])]
+[(24@@[(32@@[(42@@)][(42@@)])])]
+[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(21@@[(32@@)])])]
+[(24@@[(27@@[(42@@)])])]
+[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(32@@)])][(37@@[(42@@)][(-1@@)])][(25@@[(38@@[(-1@@)][(32@@[(32@@[(42@@)])][(42@@)])])][(41@@[(9@@)])])])]
+[(61@@[(32@@[(42@@)][(42@@[(45@@)])])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(45@@)][(45@@)])])])])][(21@@[(37@@[(42@@)][(-1@@)])])])]
+[(61@@[(27@@[(32@@[(42@@)][(42@@[(34@@)])])][(-1@@)][(13@@)])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(34@@)])])])])])]
+[(61@@[(27@@[(36@@[(7@@[(32@@[(42@@)])])])])])]
+[(61@@[(27@@[(32@@[(42@@)][(42@@)])][(-1@@)][(34@@)])][(21@@)][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(32@@)][(42@@[(34@@)])])])])])]
+[(61@@)]
+[(61@@[(32@@[(42@@)])][(21@@[(32@@[(42@@[(32@@[(42@@)])])])])])]
+[(61@@[(27@@[(27@@[(42@@)])])])]
+[(61@@[(27@@[(-1@@)])])]
+[(61@@[(21@@)][(32@@[(42@@)][(42@@)])][(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@)])])])])]
+[(61@@[(32@@)])]
+[(61@@[(27@@[(42@@)][(-1@@)][(42@@)])][(21@@[(7@@[(42@@)][(-1@@)][(42@@)])])][(21@@[(38@@[(-1@@)][(42@@)])])])]
+[(70@@[(44@@[(43@@)][(42@@)][(74@@[(43@@)][(43@@)][(74@@[(43@@)][(43@@)][(43@@)])])])][(32@@[(42@@)])][(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@)])])])])]
+[(70@@[(44@@[(43@@)][(42@@)])][(32@@[(42@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])][(42@@)])])])])])])]
+[(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(60@@[(74@@[(43@@)][(43@@)])][(59@@[(42@@)][(32@@[(42@@)][(42@@[(42@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])])])]
+[(70@@[(21@@)][(44@@[(83@@)][(43@@)][(42@@)])][(32@@[(42@@)][(42@@)])])]
+[(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(21@@[(32@@)])])]
+[(70@@[(44@@[(42@@)])][(25@@[(27@@[(38@@[(32@@[(42@@[(42@@)])])])][(32@@[(42@@[(42@@)])])])][(21@@[(32@@[(42@@[(42@@)])])])])])]
+[(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(21@@)])]
+[(70@@)]
+[(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])]
+[(70@@[(32@@[(42@@)][(42@@)])])]
+[(70@@[(44@@[(43@@)])])]
+[(70@@[(44@@[(83@@)][(43@@)][(42@@)])][(42@@)][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])])]
+[(70@@[(42@@)])]
+[(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])][(42@@)])])])])]
+[(70@@[(32@@[(42@@)][(42@@)])][(42@@)])]
+[(70@@[(44@@[(43@@)][(42@@)])][(32@@[(42@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])])]
+[(10@@)]
+[(17@@)]
+[(17@@[(42@@)][(42@@)][(33@@)])]
+[(17@@[(36@@[(16@@[(27@@[(42@@)][(-1@@)][(33@@)])][(32@@[(42@@)][(42@@)])][(45@@)])])][(45@@)])]
+[(17@@[(42@@)])]
+[(17@@[(33@@)][(33@@)][(40@@[(40@@[(42@@)][(42@@)])][(42@@)])][(40@@[(40@@[(42@@)][(42@@)])][(42@@)])])]
+[(71@@[(83@@)][(42@@)][(72@@[(42@@)])][(72@@[(42@@)])][(72@@[(42@@)])])]
+[(71@@[(83@@)])]
+[(18@@)]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(44@@[(39@@)][(42@@)])][(44@@[(39@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(27@@[(38@@[(-1@@)][(34@@)])][(-1@@)][(42@@)])])])])][(60@@[(39@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(42@@)])])])])][(60@@[(39@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(42@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(42@@)])][(60@@[(39@@)][(59@@[(42@@)][(27@@[(42@@)][(-1@@)][(42@@)])])])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])][(41@@[(42@@)])][(41@@[(34@@)])])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(25@@[(27@@[(42@@)][(-1@@)][(52@@)])][(41@@[(9@@)])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(41@@[(9@@)])])][(25@@[(38@@[(-1@@)][(48@@[(42@@)][(42@@)])])][(41@@[(9@@)])])][(25@@[(32@@[(42@@)][(42@@[(32@@)][(32@@[(42@@)][(42@@)])])])][(41@@[(9@@)])])][(60@@[(43@@)][(59@@[(42@@)][(11@@[(43@@)][(42@@)])])])][(25@@[(32@@[(42@@)][(42@@[(42@@)][(40@@[(42@@)][(42@@)])])])][(41@@[(9@@)])])][(25@@[(32@@[(42@@)][(42@@[(42@@)][(40@@[(42@@)][(42@@)])])])][(41@@[(9@@)])])][(41@@[(9@@)])])]
+[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(41@@[(33@@)])])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(32@@[(32@@[(42@@)][(42@@)])])][(32@@[(34@@)][(40@@[(42@@)][(42@@)])])][(42@@)])])])])][(41@@[(42@@)])])]
+[(31@@[(44@@[(42@@)])][(60@@[(74@@[(43@@)][(43@@)])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)])])])])][(21@@[(32@@[(42@@[(42@@)])])])][(60@@[(74@@[(43@@)][(5@@[(43@@)])])][(59@@[(42@@)][(32@@[(42@@)])])])][(25@@[(38@@[(-1@@)][(32@@[(42@@)][(42@@)])])][(70@@[(44@@[(5@@[(43@@)])][(42@@)])][(42@@)][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@[(2@@[(42@@)][(34@@)])])])])])])])])][(41@@[(32@@)][(42@@)])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(45@@)])])])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])]
+[(31@@[(83@@)][(42@@)][(44@@[(43@@)][(42@@)])][(46@@[(42@@)][(42@@)])][(21@@[(32@@[(42@@[(14@@[(40@@[(42@@)][(42@@)])])])])])][(21@@[(32@@)])])]
+[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(60@@[(43@@)][(59@@[(42@@)][(33@@)])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(7@@[(42@@)][(-1@@)][(14@@[(-2@@)][(43@@)][(42@@)])])])])][(41@@[(42@@)])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(41@@[(27@@[(42@@)][(-1@@)][(42@@)])])])]
+[(31@@[(44@@[(43@@)][(42@@)])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(39@@)][(42@@)])])]
+[(31@@[(83@@)][(83@@)][(39@@)][(42@@)][(44@@[(39@@)][(42@@)])][(44@@[(39@@)][(42@@)])][(41@@[(36@@[(16@@[(27@@[(42@@)][(-1@@)][(42@@)])][(38@@[(-1@@)][(34@@)])][(36@@[(16@@[(27@@[(42@@)][(-1@@)][(42@@)])][(34@@)][(34@@)])])])])])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(74@@[(43@@)][(43@@)])][(42@@)])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])]
+[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(54@@[(60@@[(74@@[(43@@)][(76@@)])][(59@@[(42@@)][(11@@[(74@@[(43@@)][(76@@)])][(32@@[(42@@)][(42@@[(42@@)])])])])])][(41@@[(32@@[(42@@)][(42@@[(42@@)][(14@@[(-2@@)][(43@@)])])])])][(12@@[(44@@[(43@@)][(42@@)])][(53@@[(14@@[(-2@@)][(43@@)][(27@@[(45@@)][(-1@@)][(42@@)])])])])])])]
+[(31@@[(44@@[(42@@)])][(21@@[(32@@[(42@@)])])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(43@@)][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])])]
+[(31@@)]
+[(31@@[(83@@)][(39@@)][(42@@)][(21@@[(32@@)])][(21@@[(32@@[(42@@)][(42@@)])])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(60@@[(43@@)][(59@@[(42@@)][(32@@)])])][(41@@[(27@@[(27@@[(42@@)][(-1@@)][(33@@)])][(-1@@)][(32@@[(42@@)][(42@@)])])])])]
+[(31@@[(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(42@@)])])])])][(41@@[(16@@[(27@@[(42@@)][(-1@@)][(33@@)])][(9@@)][(32@@[(42@@)][(42@@[(9@@)][(9@@)])])])])])]
+[(31@@[(83@@)][(43@@)][(42@@)][(41@@[(32@@[(42@@)][(42@@)])])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)][(9@@)][(42@@)])])])])]
+[(31@@[(41@@[(32@@[(42@@[(14@@)])])])][(44@@[(5@@[(39@@)])][(42@@)])][(60@@[(83@@)][(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)][(1@@[(23@@[(83@@)][(83@@)][(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)])])])][(31@@[(83@@)][(39@@)][(42@@)][(44@@[(39@@)][(42@@)])][(44@@[(5@@[(39@@)])][(42@@)])][(60@@[(39@@)][(59@@[(42@@)][(40@@[(42@@)][(42@@)])])])][(54@@[(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])])][(12@@[(44@@[(43@@)][(42@@)])])])][(41@@[(42@@)])])][(31@@[(83@@)][(5@@[(39@@)])][(42@@)][(44@@[(39@@)][(42@@)])][(44@@[(5@@[(39@@)])][(42@@)])][(60@@[(5@@[(39@@)])][(59@@[(42@@)][(4@@[(40@@[(42@@)][(42@@)])][(40@@[(42@@)][(42@@)])][(40@@[(42@@)][(42@@)])])])])][(54@@[(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])])][(12@@[(44@@[(43@@)][(42@@)])])])][(41@@[(42@@)])])])])])])][(41@@[(32@@[(42@@[(42@@)][(42@@)])])])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(83@@)][(39@@)][(42@@)])][(60@@[(39@@)][(59@@[(42@@)][(27@@[(32@@)][(-1@@)][(42@@)])])])][(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@[(42@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(41@@[(34@@)])])][(24@@[(58@@[(39@@)][(59@@[(42@@)][(32@@)])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(25@@[(27@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])][(34@@)])][(41@@[(34@@)])])])][(41@@)])]
+[(31@@[(83@@)][(43@@)][(42@@)][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(54@@[(60@@[(5@@[(74@@[(43@@)][(76@@)])])][(59@@[(42@@)][(32@@[(42@@)][(42@@[(32@@[(57@@)][(42@@)])][(33@@)])])])])][(70@@[(44@@[(74@@[(43@@)][(76@@)])][(42@@)])][(42@@)][(41@@[(11@@[(43@@)][(32@@[(42@@)][(42@@[(42@@)])])])])])][(41@@[(33@@)])][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)])])])][(41@@[(33@@)])])])][(41@@[(42@@)])])])]
+[(31@@[(60@@)][(83@@)][(74@@[(43@@)][(43@@)])][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(74@@[(43@@)][(43@@)])][(42@@)])][(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(25@@[(27@@[(32@@[(42@@)][(32@@)][(42@@[(42@@)])])][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(32@@)][(42@@)])])])])])])][(41@@[(42@@)])])]
+[(31@@[(83@@)][(74@@[(43@@)][(43@@)])][(42@@)][(44@@[(74@@[(43@@)][(43@@)])][(42@@)])][(60@@[(74@@[(43@@)][(43@@)])][(59@@[(42@@)][(33@@)])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(7@@[(42@@)][(-1@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)])])])])][(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@[(42@@)])])])])])])])][(41@@[(42@@)])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(83@@)][(43@@)][(42@@)])][(43@@)][(60@@[(83@@)][(43@@)][(59@@[(42@@)][(32@@[(42@@[(42@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(86@@[(21@@[(32@@[(42@@)][(32@@)][(42@@[(42@@)])])])][(41@@[(33@@)])])][(32@@[(42@@[(42@@)])])])])])])])]
+[(31@@[(42@@)][(44@@[(74@@[(43@@)][(76@@)])][(42@@)])][(44@@[(43@@)][(42@@)])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])]
+[(31@@[(83@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])]
+[(31@@[(44@@[(39@@)][(42@@)])])]
+[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(43@@)][(41@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])])]
+[(31@@[(83@@)][(83@@)])]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@[(42@@)][(9@@)])])])])]
+[(31@@[(83@@)])]
+[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])])]
+[(31@@[(39@@)][(43@@)][(41@@[(52@@)])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(41@@[(16@@[(27@@[(42@@)][(-1@@)][(33@@)])][(34@@)][(32@@[(42@@)][(42@@)])])])])]
+[(31@@[(39@@)][(42@@)][(41@@[(27@@[(27@@[(27@@[(42@@)][(-1@@)][(33@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(33@@)])])][(-1@@)][(27@@[(22@@[(52@@)][(42@@)])][(-1@@)][(33@@)])])])])]
+[(31@@[(83@@)][(39@@)][(42@@)][(43@@)][(54@@[(21@@[(32@@)])][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(42@@)])])][(42@@)])])])][(21@@[(32@@)])])])])]
+[(21@@[(7@@[(14@@[(14@@[(-2@@)][(43@@)][(1@@[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(60@@[(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)][(42@@)])])])][(21@@[(32@@[(42@@)][(42@@[(27@@[(42@@)][(-1@@)][(45@@)][(32@@[(42@@)][(42@@)])])])])])][(41@@[(42@@)])])])])])])])]
+[(21@@[(7@@[(27@@[(36@@[(27@@[(27@@[(-1@@)][(32@@[(42@@)][(42@@)])])][(-1@@)][(27@@[(32@@[(42@@)][(42@@)])][(-1@@)][(32@@[(42@@)][(42@@)])])])])][(32@@)])])])]
+[(21@@[(7@@[(42@@)][(-1@@)][(27@@[(36@@[(16@@[(27@@[(42@@)][(-1@@)][(34@@)])][(27@@[(42@@)][(-1@@)][(42@@)])][(42@@)])])][(-1@@)][(42@@)])])])]
+[(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(45@@)][(42@@)])])])])]
+[(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(42@@)][(32@@[(40@@)][(42@@)])])])])])]
+[(21@@[(32@@[(42@@)][(32@@[(42@@)])][(42@@[(45@@)])])])]
+[(21@@[(32@@[(42@@)][(42@@[(2@@[(42@@)][(34@@)])][(2@@[(42@@)][(34@@)])][(32@@[(42@@)][(42@@)])][(32@@[(42@@)][(42@@)])])])])]
+[(21@@[(32@@[(42@@[(42@@)][(42@@)])][(32@@)])])]
+[(21@@[(32@@[(42@@)][(42@@[(42@@)][(14@@[(-2@@)][(43@@)][(42@@)][(27@@[(32@@[(42@@)][(42@@[(34@@)])])][(-1@@)][(34@@)])][(27@@[(32@@[(42@@)][(42@@[(34@@)])])][(-1@@)][(32@@[(42@@)][(42@@[(34@@)])])][(34@@)])][(42@@)])])])])]
+[(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])][(32@@[(42@@)])][(32@@[(27@@[(45@@)][(-1@@)][(45@@)])])][(42@@)])])])])]
+[(21@@)]
+[(21@@[(32@@)][(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(32@@[(42@@)][(42@@)])])])]
+[(21@@[(32@@[(42@@[(42@@)][(14@@[(-2@@)][(43@@)][(14@@[(-2@@)][(43@@)][(45@@)])][(14@@[(-2@@)][(43@@)][(42@@)][(14@@[(-2@@)][(43@@)][(45@@)])])])])])])]
+[(21@@[(14@@[(-2@@)][(43@@)][(42@@)][(1@@[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(43@@)][(21@@[(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])][(45@@)])])])][(41@@[(48@@[(42@@)][(42@@)])])])])])])]
+[(21@@[(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])][(45@@)])])])]
+[(21@@[(7@@[(27@@[(32@@[(42@@)][(42@@[(22@@[(52@@)][(42@@)])])])][(36@@[(16@@[(27@@[(22@@[(52@@)][(42@@)])][(-1@@)][(33@@)])][(34@@)][(32@@[(22@@)][(42@@)])])])])])])]
+[(21@@[(7@@[(2@@[(40@@[(42@@)][(42@@)])][(42@@)])][(27@@[(36@@[(27@@[(36@@[(27@@[(2@@[(42@@)][(42@@)])][(-1@@)][(34@@)])])][(-1@@)][(2@@[(40@@[(42@@)][(42@@)])][(42@@)])])])][(-1@@)][(36@@[(27@@[(2@@[(40@@[(42@@)][(42@@)])][(42@@)])][(-1@@)][(36@@[(27@@[(2@@[(42@@)][(42@@)])][(-1@@)][(34@@)])])])])][(36@@[(27@@)])])])])]
+[(21@@[(7@@[(42@@)][(-1@@)][(16@@[(36@@[(27@@[(32@@[(42@@)][(32@@)][(42@@)])][(-1@@)][(40@@[(42@@)][(42@@)])])])][(32@@[(42@@[(32@@[(42@@)][(32@@[(34@@)])][(32@@)][(42@@)])])])][(42@@)])])])]
+[(21@@[(32@@[(42@@)][(42@@[(40@@[(40@@[(40@@[(40@@[(40@@[(40@@[(40@@[(40@@[(40@@[(42@@)][(42@@)])][(42@@)])][(42@@)])][(42@@)])][(42@@)])][(42@@)])][(42@@)])][(42@@)])][(42@@)])])])])]
+[(21@@[(7@@[(42@@)][(9@@)])])]
+[(21@@[(32@@[(42@@[(32@@)][(27@@[(32@@[(42@@)][(32@@)][(42@@)])][(-1@@)][(45@@)][(32@@[(42@@)][(32@@)][(42@@)])])])])])]
+[(21@@[(7@@[(14@@)])])]
+[(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)][(42@@)][(42@@)][(42@@)][(45@@)][(9@@)][(9@@)])])])]
+[(21@@[(32@@)])]
+[(21@@[(32@@[(42@@[(14@@[(40@@)][(16@@[(42@@)][(40@@[(42@@)][(42@@)])][(40@@[(42@@)][(42@@)])])])])])])]
+[(21@@[(32@@[(42@@[(22@@[(42@@)])])])])]
+[(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])][(32@@[(42@@)])][(32@@[(45@@)])][(42@@)])])])])]
+[(21@@[(7@@[(27@@[(38@@[(-1@@)][(42@@)])])][(27@@[(36@@[(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(27@@[(-1@@)][(42@@)][(42@@)][(42@@)])])])][(-1@@)][(36@@[(27@@[(42@@)][(-1@@)][(42@@)])])])])])]
+[(54@@[(21@@[(32@@[(42@@)][(42@@)])])][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])][(41@@[(42@@)])][(12@@[(44@@[(43@@)][(42@@)])][(41@@[(42@@)])])])]
+[(54@@[(8@@[(25@@[(42@@)][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])])])]
+[(54@@[(21@@)][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])])]
+[(54@@[(41@@)][(8@@[(21@@[(32@@[(42@@[(42@@)])])])])])]
+[(54@@[(21@@)][(21@@)][(8@@)][(41@@)][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])][(53@@[(42@@)])])])]
+[(54@@[(21@@)][(12@@[(44@@[(43@@)][(42@@)])])])]
+[(54@@[(25@@[(27@@[(62@@[(42@@)][(-3@@)][(43@@)])][(-1@@)][(38@@[(-1@@)][(32@@[(42@@[(42@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(32@@[(42@@)][(42@@)])])])])])][(41@@[(32@@)])][(8@@[(21@@[(32@@[(42@@[(42@@)])])])])])]
+[(54@@[(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])][(12@@[(44@@[(43@@)][(42@@)])][(53@@[(14@@[(-2@@)][(43@@)][(42@@)])])])])]
+[(54@@)]
+[(54@@[(21@@)][(12@@[(44@@[(43@@)][(42@@)])][(53@@[(32@@[(42@@[(42@@)])])])])])]
+[(54@@[(21@@)][(8@@[(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])])]
+[(54@@[(21@@[(7@@[(42@@)][(-1@@)][(14@@[(-2@@)][(43@@)][(42@@)][(42@@)])])])][(21@@)][(8@@[(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@)])])])])])]
+[(54@@[(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])][(42@@)][(9@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(14@@[(-2@@)][(43@@)][(42@@)])])])])])][(12@@[(44@@[(43@@)][(42@@)])][(53@@[(14@@[(-2@@)][(43@@)][(32@@[(40@@)][(42@@[(42@@)])])])])])])]
+[(54@@[(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])][(42@@)][(9@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(14@@[(-2@@)][(43@@)][(42@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(14@@[(-2@@)][(43@@)][(42@@)])])])])])][(12@@[(44@@[(43@@)][(42@@)])][(53@@[(14@@[(-2@@)][(43@@)][(32@@[(40@@)][(42@@[(42@@)])])])])])])]
+[(54@@[(21@@[(7@@[(32@@)][(42@@)][(-1@@)])])][(12@@[(44@@[(43@@)][(42@@)])][(25@@[(32@@[(42@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(42@@)][(45@@)])][(42@@)])])])])])])]
+[(54@@[(21@@)][(8@@[(21@@)])])]
+[(54@@[(58@@[(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)][(42@@)])])])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])])]
+[(54@@[(21@@)][(21@@)])]
+[(54@@[(21@@)][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(42@@)])])])])])]
+[(54@@[(60@@)])]
+[(54@@[(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(9@@)])])])][(53@@[(42@@)])])][(21@@)])]
+[(54@@[(12@@[(44@@[(43@@)][(42@@)])])])]
+[(54@@[(21@@)][(12@@[(44@@[(84@@[(43@@)][(43@@)])][(42@@)])][(21@@[(32@@[(42@@)][(42@@)])])][(53@@[(42@@)])])])]
+[(54@@[(21@@[(7@@[(42@@)][(-1@@)][(32@@[(52@@)][(42@@)])])])][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(42@@)])])])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])])]
+[(6@@[(27@@[(27@@[(42@@)][(-1@@)][(34@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(42@@)])])])]
+[(6@@[(36@@[(27@@)])])]
+[(6@@[(27@@)])]
+[(6@@[(27@@[(42@@)][(-1@@)][(33@@)])])]
+[(53@@[(14@@[(45@@)][(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])])]
+[(53@@[(14@@[(32@@[(42@@[(27@@[(32@@)][(32@@[(42@@[(32@@[(42@@)][(42@@)])])])])])])])])]
+[(53@@[(14@@[(27@@[(45@@)][(-1@@)][(42@@)][(45@@)])])])]
+[(53@@[(14@@[(42@@)][(32@@[(42@@[(42@@)])])])])]
+[(53@@)]
+[(53@@[(14@@[(-2@@)][(43@@)][(27@@[(45@@)][(-1@@)][(42@@)][(45@@)][(42@@)])])])]
+[(53@@[(14@@[(-2@@)][(43@@)][(27@@[(45@@)][(-1@@)][(42@@)])])])]
+[(53@@[(14@@[(27@@[(45@@)])])])]
+[(53@@[(14@@[(45@@)])])]
+[(53@@[(42@@)])]
+[(53@@[(14@@[(27@@[(32@@[(42@@)])])])])]
+[(23@@[(83@@)][(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)][(9@@)])])])]
+[(23@@[(83@@)][(83@@)][(83@@)][(39@@)][(59@@[(42@@)][(27@@[(42@@)][(-1@@)][(42@@)])])])]
+[(23@@[(83@@)][(83@@)][(43@@)][(59@@[(42@@)][(33@@)])])]
+[(23@@[(83@@)][(83@@)][(83@@)][(5@@[(39@@)])][(59@@[(42@@)][(3@@[(5@@[(39@@)])][(4@@[(34@@)][(34@@)][(34@@)][(34@@)])])])])]
+[(23@@[(59@@[(27@@[(45@@)][(45@@)][(45@@)])])])]
+[(23@@[(83@@)][(83@@)][(74@@[(43@@)][(74@@[(43@@)][(76@@)])])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(74@@[(43@@)][(76@@)])])])])])]
+[(23@@)]
+[(23@@[(83@@)][(83@@)][(83@@)][(43@@)][(59@@[(42@@)][(32@@[(57@@)][(42@@)])])])]
+[(23@@[(83@@)][(83@@)][(43@@)][(59@@[(42@@)][(32@@[(14@@[(-2@@)][(43@@)][(40@@[(42@@)][(42@@)])][(40@@[(42@@)][(42@@)])][(9@@)])][(32@@)][(42@@)])])])]
+[(23@@[(83@@)][(83@@)][(83@@)][(39@@)][(59@@[(42@@)][(42@@)])])]
+[(23@@[(59@@[(14@@[(45@@)])])])]
+[(23@@[(83@@)][(83@@)][(74@@[(43@@)][(43@@)][(43@@)])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)][(43@@)])])])])]
+[(23@@[(43@@)][(39@@)])]
+[(23@@[(83@@)][(83@@)][(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(32@@[(57@@)][(42@@)])])])])])]
+[(23@@[(83@@)])]
+[(23@@[(59@@[(32@@[(32@@[(14@@[(-2@@)][(43@@)][(34@@)][(40@@[(42@@)][(42@@)])][(9@@)][(9@@)])])])])])]
+[(23@@[(59@@[(32@@[(32@@[(45@@)])])])])]
+[(23@@[(83@@)][(74@@[(43@@)][(43@@)][(43@@)])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)][(43@@)])])])])]
diff --git a/pom.xml b/pom.xml
old mode 100644
new mode 100755
index e783f0d..6f93ad0
--- a/pom.xml
+++ b/pom.xml
@@ -107,8 +107,51 @@
4.11
+
+
+ org.apache.lucene
+ lucene-core
+ 4.8.0
+
+
+
+ org.apache.lucene
+ lucene-analyzers-common
+ 4.8.0
+
+
+
+ org.apache.commons
+ commons-math3
+ 3.6.1
+
-
+
+
+ com.thoughtworks.xstream
+ xstream
+ 1.3.1
+
+
+ commons-io
+ commons-io
+ 2.4
+
+
+
+ org.redisson
+ redisson
+ 3.3.0
+
+
+ org.eclipse.jetty
+ jetty-util
+ 9.4.4.v20170414
+ compile
+
+
+
+
@@ -149,3 +192,8 @@
+
+
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/Launcher.java b/src/main/java/edu/lu/uni/serval/fixminer/Launcher.java
old mode 100644
new mode 100755
index 79e1c22..74579aa
--- a/src/main/java/edu/lu/uni/serval/fixminer/Launcher.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/Launcher.java
@@ -71,14 +71,15 @@ public class Launcher {
pairsPath = datasetPath + "/pairs";
dumpsName = "dumps-"+pjName+".rdb";
int iCursor = Integer.valueOf(cursor);
+// jobType = "CACHE";
try {
switch (jobType) {
case "ENHANCEDASTDIFF":
- EnhancedASTDiff.main(gumInput, gumOutput, numOfWorkers, pjName, eDiffTimeout,actionType,parallelism);
+ EnhancedASTDiff.main(gumInput, gumOutput, numOfWorkers, pjName, eDiffTimeout,actionType,parallelism,portDumps, dbDir, actionType+dumpsName);
break;
case "CACHE":
- StoreEDiffInCache.main(gumOutput, portDumps, dbDir, actionType+dumpsName,actionType);
+ StoreEDiffInCache.main(gumOutput, portDumps, dbDir, actionType+dumpsName);
break;
case "SI":
// CalculatePairs.main(dbDir, actionType+dumpsName, portDumps, pairsPath+actionType, pjName+actionType,isBigPair,iCursor);
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/TestTreeLoader.java b/src/main/java/edu/lu/uni/serval/fixminer/TestTreeLoader.java
old mode 100644
new mode 100755
index 9beb253..5d519be
--- a/src/main/java/edu/lu/uni/serval/fixminer/TestTreeLoader.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/TestTreeLoader.java
@@ -22,7 +22,8 @@ public class TestTreeLoader {
// String inputPath = "/Users/anilkoyuncu/bugStudy/dataset/GumTreeOutput/ENTESB/ASTDumps";
- String inputPath = "/Users/anilkoyuncu/bugStudy/dataset/GumTreeOutput2/";
+// String inputPath = "/Users/anilkoyuncu/bugStudy/dataset/GumTreeOutput2/";
+ String inputPath ="/Users/anil.koyuncu/projects/fixminer-all/enhancedASTDiff/python/data/EnhancedASTDiffgumInput-old/AssertStatement";
File folder = new File(inputPath);
File[] listOfFiles = folder.listFiles();
Stream stream = Arrays.stream(listOfFiles);
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/BaseMessage.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/BaseMessage.java
old mode 100644
new mode 100755
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/DocumentSimilarity.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/DocumentSimilarity.java
new file mode 100755
index 0000000..4b813f1
--- /dev/null
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/DocumentSimilarity.java
@@ -0,0 +1,601 @@
+package edu.lu.uni.serval.fixminer.akka;
+
+//Import the Java utility classes
+
+import java.io.BufferedReader;
+
+import java.io.FileReader;
+
+import java.io.PrintWriter;
+
+import java.util.ArrayList;
+
+import java.util.HashMap;
+
+import java.util.HashSet;
+
+import java.util.Map;
+
+import java.util.Set;
+
+//Import the Apache Commons Maths library classes to handle the term-vectors from Apache Lucene
+
+import org.apache.commons.math3.linear.ArrayRealVector;
+
+import org.apache.commons.math3.linear.RealVector;
+
+//Import the Apache Lucene classes
+
+import org.apache.lucene.analysis.Analyzer;
+
+import org.apache.lucene.analysis.core.SimpleAnalyzer;
+
+import org.apache.lucene.document.Document;
+
+import org.apache.lucene.document.Field;
+
+import org.apache.lucene.document.FieldType;
+
+import org.apache.lucene.index.AtomicReader;
+
+import org.apache.lucene.index.DirectoryReader;
+
+import org.apache.lucene.index.DocsEnum;
+
+import org.apache.lucene.index.IndexReader;
+
+import org.apache.lucene.index.IndexWriter;
+
+import org.apache.lucene.index.IndexWriterConfig;
+
+import org.apache.lucene.index.MultiFields;
+
+import org.apache.lucene.index.Term;
+
+import org.apache.lucene.index.Terms;
+
+import org.apache.lucene.index.TermsEnum;
+
+import org.apache.lucene.search.similarities.DefaultSimilarity;
+
+import org.apache.lucene.search.similarities.TFIDFSimilarity;
+
+import org.apache.lucene.store.Directory;
+
+import org.apache.lucene.store.RAMDirectory;
+
+import org.apache.lucene.util.Bits;
+
+import org.apache.lucene.util.BytesRef;
+
+import org.apache.lucene.util.Version;
+
+
+
+import com.thoughtworks.xstream.core.util.Fields;
+
+
+
+//A class to find the similarity of all text documents referenced in a text file
+
+public class DocumentSimilarity {
+
+ private static final String CONTENT = "Content"; /*the name of the field stored by Apache Lucene which includes the text from the
+
+text documents.*/
+
+ private Set terms = new HashSet<>(); //changed state with new terms after each call to getTermFrequencies() method
+
+
+
+ private ArrayList directoryIndex; //The Apache Lucene index for documents to mine for similarities
+
+ /* Indexed, tokenized, stored. */
+
+ public final FieldType TYPE_STORED = new FieldType(); //This is the field profiled by Apache Lucene to collect its term frequencies
+
+ private HashMap termsCount; //stores the counts of all terms found in the corpus
+
+ private ArrayList scannedDocs; //stores the IDs of docs already scanned and stored in termsCount
+
+
+
+
+
+ DocumentSimilarity(String lookupFile) {
+
+ //Initialise the field to profile in each document
+
+ TYPE_STORED.setIndexed(true);
+
+ TYPE_STORED.setTokenized(true);
+
+ TYPE_STORED.setStored(true);
+
+ TYPE_STORED.setStoreTermVectors(true);
+
+ TYPE_STORED.setStoreTermVectorPositions(true);
+
+ TYPE_STORED.freeze();
+
+
+
+ termsCount = new HashMap();
+
+ scannedDocs = new ArrayList();
+
+
+
+ try {
+
+ //initialise an in-memory (RAM-based) index of the documents in the input folder using Apache Lucene
+
+ Directory directory = createIndex(lookupFile);
+
+ IndexReader reader = DirectoryReader.open(directory);
+
+
+
+ String outputFile = "C:/Users/default/test/docs_similarity.csv"; /* the output file where the document similarities will be stored */
+
+ PrintWriter writer;
+
+ writer = new PrintWriter(outputFile, "UTF-8");
+
+ writer.println("doc1,doc2,similarity");
+
+
+
+
+
+ //loop on the documents in the folder and compare them together
+
+ for (int i=0; i f1 = getTermFrequencies(reader, i); //get the term frequencies profile of the first document
+
+ RealVector v1 = toRealVector(f1); //convert term frequencies profile to a vector
+
+ Map f2 = getTermFrequencies2(reader, j); //get the term frequencies profile of the second document
+
+ RealVector v2 = toRealVector(f2); //convert term frequencies profile to a vector
+
+ double sim = getCosineSimilarity(v1, v2); //compute the cosine similarity of the documents pair using their terms frequencies profiles
+
+ writer.println(directoryIndex.get(i)+","+directoryIndex.get(j)+","+sim); //write the similarity to an output CSV file
+
+ }
+
+ terms = new HashSet<>();
+
+ }
+
+ reader.close();
+
+ writer.close();
+
+ } catch (Exception e) {
+
+ e.printStackTrace();
+
+ }
+
+
+
+ writeTermsCount();
+
+ }
+
+
+
+
+
+ //A method to initialise an in-memory (RAM-based) index of the documents in the input file using Apache Lucene
+
+ Directory createIndex(String lookupFile) {
+
+ try {
+
+ Directory directory = new RAMDirectory();
+
+
+
+ /* Initialize the analyzer which profiles the text inside the documents. This analyser does all the pre-processing of the
+
+ * text including stop-word removal, tokenization, etc. depending on the type of analyzer used.
+
+ * Check the reference website for different types of analyzers: https://www.tutorialspoint.com/lucene/lucene_analysis.htm
+
+ */
+
+ Analyzer analyzer = new SimpleAnalyzer(Version.LUCENE_CURRENT); //create a new SimpleAnalyzer
+
+ IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_CURRENT,
+
+ analyzer);
+
+ IndexWriter writer = new IndexWriter(directory, iwc); //write the index of the documents with their analysis in-memory
+
+
+
+ int did=1; //documents are numbered by a document ID as 1,2,3...n in a lookup file of the documents to be indexed
+
+ BufferedReader dsLookup;
+
+ dsLookup = new BufferedReader(new FileReader(lookupFile));
+
+ String ds; //The document number in each line
+
+
+
+ ArrayList directoryIndex = new ArrayList();
+
+
+
+ while ((ds = dsLookup.readLine()) != null) {
+
+ //Set the document id to the string read from the line in lookup file
+
+ try {
+
+
+
+ String documentText = ""; //stores the text from the document
+
+
+
+ FileReader fr = new FileReader(did+".txt");
+
+ BufferedReader br = new BufferedReader(fr);
+
+ String sCurrentLine;
+
+ while ((sCurrentLine = br.readLine()) != null) {
+
+ documentText += (sCurrentLine);
+
+ }
+
+
+
+ //add the document to the index
+
+ addDocument(writer, documentText);
+
+ directoryIndex.add(did);
+
+ } catch (Exception e) {
+
+ System.out.println("!!! Document "+did+" has an error and was skipped !!!");
+
+ continue;
+
+ }
+
+ }
+
+ writer.close();
+
+ this.directoryIndex = directoryIndex;
+
+ return directory;
+
+ } catch (Exception e) {
+
+ e.printStackTrace();
+
+ }
+
+ return null;
+
+ }
+
+
+
+
+
+ //a method to add a document to the index by writing its text as a "content" field in Apache Lucene
+
+ void addDocument(IndexWriter writer, String content) {
+
+ try {
+
+ Document doc = new Document(); //create a new Apache Lucene document
+
+ Field field = new Field(CONTENT, content, TYPE_STORED); //Add the field with the text content to the index
+
+ doc.add(field);
+
+ writer.addDocument(doc);
+
+ } catch (Exception e) {
+
+ e.printStackTrace();
+
+ }
+
+
+
+ }
+
+
+
+
+ //a method to get the cosine similarity between two term-frequency vectors from a pair of documents
+
+ public double getCosineSimilarity(RealVector v1, RealVector v2) {
+
+ return (v1.dotProduct(v2)) / (v1.getNorm() * v2.getNorm());
+
+ }
+
+
+
+
+
+ //a method to get the term frequencies from a document
+
+ Map getTermFrequencies(IndexReader reader, int docId) {
+
+ try {
+
+ Terms vector = reader.getTermVector(docId, CONTENT);
+
+ TermsEnum termsEnum = null;
+
+ termsEnum = vector.iterator(termsEnum);
+
+ Map frequencies = new HashMap<>();
+
+ BytesRef text = null;
+
+ TFIDFSimilarity tfidfSim = new DefaultSimilarity();
+
+ boolean scannedDoc = scannedDocs.contains(docId);
+
+
+
+ while ((text = termsEnum.next()) != null) {
+
+ String term = text.utf8ToString();
+
+ org.apache.lucene.index.Fields fields = reader.getTermVectors(0);
+
+ Term termInstance = new Term("Content", term);
+
+ long indexDf = reader.docFreq(termInstance);
+
+ int docCount = reader.numDocs();
+
+
+
+ //increment the term count in the terms count lookup if doc not scanned before
+
+ if(!scannedDoc) {
+
+ if(termsCount.containsKey(termInstance.toString())) {
+
+ Integer cnt = termsCount.get(termInstance.toString());
+
+ cnt++;
+
+ termsCount.replace(termInstance.toString(), cnt);
+
+ } else {
+
+ termsCount.put(termInstance.toString(), 1);
+
+ }
+
+ }
+
+
+
+
+
+ DocsEnum docs = termsEnum.docs(MultiFields.getLiveDocs(reader),null,0);
+
+
+
+ //calculate the TF-IDF of the term, as compared to all documents in the corpus (the Apache Lucene Index)
+
+ double tfidf = 0.0;
+
+ while(docs.nextDoc() != DocsEnum.NO_MORE_DOCS) {
+
+ tfidf = tfidfSim.tf(docs.freq()) * tfidfSim.idf(docCount, indexDf);
+
+ }
+
+
+
+
+
+ frequencies.put(term, tfidf);
+
+ scannedDocs.add(docId);
+
+ terms.add(term);
+
+ }
+
+ return frequencies;
+
+ } catch (Exception e) {
+
+ e.printStackTrace();
+
+ }
+
+ return null;
+
+ }
+
+
+
+ Map getTermFrequencies2(IndexReader reader, int docId) {
+
+ try {
+
+ Terms vector = reader.getTermVector(docId, CONTENT);
+
+ TermsEnum termsEnum = null;
+
+ termsEnum = vector.iterator(termsEnum);
+
+ Map frequencies = new HashMap<>();
+
+ BytesRef text = null;
+
+ TFIDFSimilarity tfidfSim = new DefaultSimilarity();
+
+ boolean scannedDoc = scannedDocs.contains(docId);
+
+ int docCount = reader.numDocs();
+
+
+
+ while ((text = termsEnum.next()) != null) {
+
+ String term = text.utf8ToString();
+
+ Term termInstance = new Term("Content", term);
+
+ long indexDf = reader.docFreq(termInstance);
+
+
+
+
+
+ //increment the term count in the terms count lookup if doc not scanned before
+
+ if(!scannedDoc) {
+
+ if(termsCount.containsKey(termInstance.toString())) {
+
+ Integer cnt = termsCount.get(termInstance.toString());
+
+ cnt++;
+
+ termsCount.replace(termInstance.toString(), cnt);
+
+ } else {
+
+ termsCount.put(termInstance.toString(), 1);
+
+ }
+
+ }
+
+
+
+ DocsEnum docs = termsEnum.docs(MultiFields.getLiveDocs(reader),null,0);
+
+ double tfidf = 0.0;
+
+ while(docs.nextDoc() != DocsEnum.NO_MORE_DOCS) {
+
+ tfidf = tfidfSim.tf(docs.freq()) * tfidfSim.idf(docCount, indexDf);
+
+ }
+
+
+
+
+
+ frequencies.put(term, tfidf);
+
+ scannedDocs.add(docId);
+
+
+
+ }
+
+ return frequencies;
+
+ } catch (Exception e) {
+
+ e.printStackTrace();
+
+ }
+
+ return null;
+
+ }
+
+
+
+
+
+ //convert the term-frequencies extracted to a real vector
+
+ RealVector toRealVector(Map map) {
+
+ RealVector vector = new ArrayRealVector(terms.size());
+
+ int i = 0;
+
+ for (String term : terms) {
+
+ double value = map.containsKey(term) ? map.get(term) : 0.0;
+
+ vector.setEntry(i++, value);
+
+ }
+
+ return (RealVector) vector.mapDivide(vector.getL1Norm());
+
+ }
+
+
+
+
+ //Write the terms-frequencies from the documents to a CSV file
+
+ private void writeTermsCount() {
+
+ try {
+
+ String outputFile = "C:/Users/default/test/document_terms_count.csv";
+
+ PrintWriter writer;
+
+ writer = new PrintWriter(outputFile, "UTF-8");
+
+ writer.println("term,count");
+
+
+
+ for (String key : termsCount.keySet()) {
+
+ writer.println(key+","+termsCount.get(key));
+
+ }
+
+
+
+ writer.close();
+
+
+
+ } catch (Exception e) {
+
+ e.printStackTrace();
+
+ }
+
+ }
+
+
+
+ //MAIN class to execute with the .txt-file lookup of the documents to index
+
+ public static void main(String[] args) {
+
+ new DocumentSimilarity("documents_lookup.txt");
+
+ }
+
+}
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/AkkaTreeParser.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/AkkaTreeParser.java
old mode 100644
new mode 100755
index 6a23292..1d767fb
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/AkkaTreeParser.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/AkkaTreeParser.java
@@ -26,19 +26,19 @@ public class AkkaTreeParser {
switch (parallelism){
case "AKKA":
- ActorSystem system = null;
- ActorRef parsingActor = null;
- final TreeMessage msg = new TreeMessage(0,listOfPairs, innerPool,outerPool,eDiffTimeout);
- try {
- log.info("Akka begins...");
- system = ActorSystem.create("Compare-EnhancedDiff-System");
-
- parsingActor = system.actorOf(TreeActor.props(Integer.valueOf(numOfWorkers)), "mine-fix-pattern-actor");
- parsingActor.tell(msg, ActorRef.noSender());
- } catch (Exception e) {
- system.shutdown();
- e.printStackTrace();
- }
+// ActorSystem system = null;
+// ActorRef parsingActor = null;
+// final TreeMessage msg = new TreeMessage(0,listOfPairs, innerPool,outerPool,eDiffTimeout);
+// try {
+// log.info("Akka begins...");
+// system = ActorSystem.create("Compare-EnhancedDiff-System");
+//
+// parsingActor = system.actorOf(TreeActor.props(Integer.valueOf(numOfWorkers)), "mine-fix-pattern-actor");
+// parsingActor.tell(msg, ActorRef.noSender());
+// } catch (Exception e) {
+// system.shutdown();
+// e.printStackTrace();
+// }
break;
case "FORKJOIN":
int counter = new Object() {
@@ -70,6 +70,15 @@ public class AkkaTreeParser {
+ }
+ public static List getRMessages(JedisPool innerPool, int cursor){
+ try (Jedis inner = innerPool.getResource()) {
+ while (!inner.ping().equals("PONG")){
+ log.info("wait");
+ }
+ List pairs = inner.srandmember("pairs", cursor);
+ return pairs;
+ }
}
public static List getMessages(JedisPool innerPool, int cursor){
@@ -81,7 +90,6 @@ public class AkkaTreeParser {
while (!inner.ping().equals("PONG")){
log.info("wait");
}
-
ScanParams sc = new ScanParams();
//150000000
log.info("Scanning ");
@@ -91,6 +99,7 @@ public class AkkaTreeParser {
// sc.match("pair_[0-9]*");
scan = inner.scan("0", sc);
+
int size = scan.getResult().size();
log.info("Scanned " + String.valueOf(size));
}
@@ -102,5 +111,27 @@ public class AkkaTreeParser {
+ }
+
+ public static String getMessage(JedisPool innerPool){
+
+
+ ScanResult scan;
+
+ try (Jedis inner = innerPool.getResource()) {
+ while (!inner.ping().equals("PONG")){
+ log.info("wait");
+ }
+
+ String myset = inner.spop("pairs");
+ return myset;
+
+ }
+
+
+
+
+
+
}
}
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/Compare.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/Compare.java
old mode 100644
new mode 100755
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java
old mode 100644
new mode 100755
index 510230e..ab7fb7d
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java
@@ -1,22 +1,29 @@
package edu.lu.uni.serval.fixminer.akka.compare;
+import akka.actor.ActorRef;
+import akka.actor.ActorSystem;
import com.github.gumtreediff.actions.ActionGenerator;
import com.github.gumtreediff.actions.model.Action;
import com.github.gumtreediff.matchers.Matcher;
import com.github.gumtreediff.matchers.Matchers;
import com.github.gumtreediff.tree.ITree;
+import com.typesafe.config.Config;
+import com.typesafe.config.ConfigFactory;
+import edu.lu.uni.serval.fixminer.akka.ediff.HierarchicalActionSet;
+import edu.lu.uni.serval.utils.CallShell;
import edu.lu.uni.serval.utils.EDiffHelper;
import edu.lu.uni.serval.utils.PoolBuilder;
import org.apache.commons.text.similarity.JaroWinklerDistance;
+import org.javatuples.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import static edu.lu.uni.serval.fixminer.jobs.MultiThreadTreeLoaderCluster3.getNames;
@@ -29,168 +36,300 @@ public class CompareTrees {
private static Logger log = LoggerFactory.getLogger(CompareTrees.class);
- public static void main(String[] args) throws IOException {
+ public static void main(String[] args) throws Exception {
+
+
String portInner = "6380";
String port = "6399";
+ CallShell cs = new CallShell();
+ String cmd = "bash "+args[1] + "/" + "startServer.sh" +" %s %s %s";
+ cmd = String.format(cmd, args[1],args[2],Integer.valueOf(port));
+ log.info(cmd);
+ cs.runShell(cmd, port);
+
+ String cmdInner = "bash "+args[1] + "/" + "startServer.sh" +" %s %s %s";
+ cmdInner = String.format(cmdInner, args[1],args[3],Integer.valueOf(portInner));
+ log.info(cmdInner);
+ cs.runShell(cmdInner, portInner);
+
+ String numOfWorkers = "100000000";//args[4];
+ String host = "localhost";//args[5];
+// -Djava.util.concurrent.ForkJoinPool.common.parallelism=256
+
+ final JedisPool innerPool = new JedisPool(PoolBuilder.getPoolConfig(), host,Integer.valueOf(portInner),20000000);
+
+ final JedisPool outerPool = new JedisPool(PoolBuilder.getPoolConfig(), host,Integer.valueOf(port),20000000);
+
+ List listOfPairs = AkkaTreeParser.getMessages(innerPool,Integer.valueOf(numOfWorkers));
+
+// String pair = AkkaTreeParser.getMessage(innerPool);
+
+
+
+// ActorSystem system = null;
+// ActorRef parsingActor = null;
+// final TreeMessage msg = new TreeMessage(0,listOfPairs, innerPool,outerPool,timeout,args[0]);
+// try {
+// log.info("Akka begins...");
+// Config load = ConfigFactory.load();
+// system = ActorSystem.create("Compare-EnhancedDiff-System");
//
- JedisPool innerPool = new JedisPool(PoolBuilder.getPoolConfig(), "127.0.0.1",Integer.valueOf(portInner),20000000);
-
- JedisPool outerPool = new JedisPool(PoolBuilder.getPoolConfig(), "127.0.0.1",Integer.valueOf(port),20000000);
-
- List listOfPairs = AkkaTreeParser.getMessages(innerPool,100000000);
-// listOfPairs.stream().parallel().
-
- int counter = new Object() {
- int counter = 0;
-
- {
-
- listOfPairs.parallelStream().
- peek(x -> counter++).
- forEach(m ->
- {
-// Compare compare = new Compare();
- coreCompare(m, args[0],innerPool, outerPool);
- if (counter % 1000 == 0) {
- log.info("Finalized parsing " + counter + " files... remaing " + (listOfPairs.size() - counter));
- }
- }
- );
- }
- }.counter;
-// coreCompare(args[0],args[1],args[2],args[3]);
- }
- public static void coreCompare(String pairName, String treeType,JedisPool innerPool,JedisPool outerPool ) {
-
-
-// String portInner = "6380";
-// String port = "6399";
-
-// JedisPool innerPool = new JedisPool(PoolBuilder.getPoolConfig(), "127.0.0.1",Integer.valueOf(portInner),20000000);
+// parsingActor = system.actorOf(TreeActor.props(Integer.valueOf(numOfWorkers)), "mine-fix-pattern-actor");
+// parsingActor.tell(msg, ActorRef.noSender());
+// } catch (Exception e) {
+// system.shutdown();
+// e.printStackTrace();
+// }
+// try {
+// coreCompare(pair, args[0], innerPool, outerPool);
+// } catch (Exception e) {
+// try (Jedis inner = innerPool.getResource()) {
//
-// JedisPool outerPool = new JedisPool(PoolBuilder.getPoolConfig(), "127.0.0.1",Integer.valueOf(port),20000000);
-
- Map resultMap;
- Jedis jedis = null;
- ITree oldTree = null;
- ITree newTree = null;
-
- try {
- jedis = innerPool.getResource();
-
- String[] split = pairName.split("_");
-
-
- String i = split[1];
- String j = split[2];
- String keyName = split[0];
-
- switch (treeType) {
- case "shape":
- oldTree = EDiffHelper.getShapes(keyName, i, outerPool);
- newTree = EDiffHelper.getShapes(keyName, j, outerPool);
- break;
- case "action":
- oldTree = EDiffHelper.getActions(keyName, i, outerPool,innerPool);
- newTree = EDiffHelper.getActions(keyName, j, outerPool,innerPool);
- break;
- case "token":
- oldTree = EDiffHelper.getTokens(keyName, i, outerPool,innerPool);
- newTree = EDiffHelper.getTokens(keyName, j, outerPool,innerPool);
- List oldTokens = new ArrayList<>();
- List newTokens = new ArrayList<>();
+// inner.sadd("pairs",pair);
+//
+//
+// }
+// }
+ ArrayList samePairs = new ArrayList<>();
+ ArrayList errorPairs = new ArrayList<>();
+ listOfPairs.stream().parallel().forEach(m->coreCompare(m, args[0],innerPool, outerPool,samePairs,errorPairs));
- oldTokens = getNames(oldTree,oldTokens);
- newTokens = getNames(newTree,newTokens);
-
-
- CharSequence[] oldSequences = oldTokens.toArray(new CharSequence[oldTokens.size()]);
- CharSequence[] newSequences = newTokens.toArray(new CharSequence[newTokens.size()]);
- JaroWinklerDistance jwd = new JaroWinklerDistance();
-
- Double overallSimi = Double.valueOf(0);
- if(oldSequences.length > 0 && (oldSequences.length == newSequences.length)){
- for (int idx = 0; idx < newSequences.length; idx++) {
- Double simi = jwd.apply(newSequences[idx], oldSequences[idx]);
- overallSimi = simi + overallSimi;
- }
- overallSimi = overallSimi / oldSequences.length;
- }else{
- overallSimi = Double.valueOf(0);
-// if(oldSequences.length != 0) {
-// log.info("ERROR");
-// }
- }
-
- int retval = Double.compare(overallSimi, Double.valueOf(0.8));
- String matchKey = keyName+"_" + (String.valueOf(i)) + "_" + String.valueOf(j);
- if(retval >= 0){
-
-
-
- String result = i + "," + j + ","+String.join(",", oldTokens);
- jedis.select(2);
- jedis.set(matchKey, result);
- }
- jedis.select(0);
- jedis.del(matchKey);
-
- return;
- default:
- break;
- }
-
- Matcher m = Matchers.getInstance().getMatcher(oldTree, newTree);
- m.match();
-
-
- ActionGenerator ag = new ActionGenerator(oldTree, newTree, m.getMappings());
- ag.generate();
- List actions = ag.getActions();
-
- double chawatheSimilarity1 = m.chawatheSimilarity(oldTree, newTree);
- String chawatheSimilarity = String.format("%1.2f", chawatheSimilarity1);
- double diceSimilarity1 = m.diceSimilarity(oldTree, newTree);
- String diceSimilarity = String.format("%1.2f", diceSimilarity1);
- double jaccardSimilarity1 = m.jaccardSimilarity(oldTree, newTree);
- String jaccardSimilarity = String.format("%1.2f", jaccardSimilarity1);
-
- String editDistance = String.valueOf(actions.size());
-
- String result = i + "," + j + "," + chawatheSimilarity + "," + diceSimilarity + "," + jaccardSimilarity + "," + editDistance;
-
- String matchKey = keyName+"_" + (String.valueOf(i)) + "_" + String.valueOf(j);
-
- if (((Double) chawatheSimilarity1).equals(1.0) || ((Double) diceSimilarity1).equals(1.0)
- || ((Double) jaccardSimilarity1).equals(1.0) || actions.size() == 0) {
-// log.info("{} tagged to be similar" ,matchKey);
-
- jedis.select(2);
- jedis.set(matchKey, result);
-
- }
-
+// int size = samePairs.size();
+ try (Jedis jedis = innerPool.getResource()) {
+// jedis.select(2);
+// for (String samePair : samePairs) {
+// jedis.set(samePair,"1");
+// }
jedis.select(0);
- jedis.del(matchKey);
-
-
-
- } catch (Exception e) {
-
- log.debug("{} not comparable", pairName);
-// e.printStackTrace();
-
-
- }finally {
- if (jedis != null) {
- jedis.close();
+ jedis.flushDB();
+ for (String errorPair : errorPairs) {
+ jedis.hset(errorPair, "0", "1");
}
+
+
}
+ log.info("End process");
+// listOfPairs.parallelStream().forEach(m->coreCompare(m, args[0],innerPool, outerPool));
+
+// for (String listOfPair : listOfPairs) {
+// coreCompare(listOfPair, args[0],innerPool, outerPool);
+// }
+
+
+// int counter = new Object() {
+// int counter = 0;
+//
+// {
+//
+// listOfPairs.parallelStream().
+// peek(x -> counter++).
+// forEach(m ->
+// {
+//// Compare compare = new Compare();
+// coreCompare(m, args[0],innerPool, outerPool);
+// if (counter % 1000 == 0) {
+// log.info("Finalized parsing " + counter + " files... remaing " + (listOfPairs.size() - counter));
+// }
+// }
+// );
+// }
+// }.counter;
+// coreCompare(args[0],args[1],args[2],args[3]);
+ }
+ public static void coreCompare(String pairName, String treeType,JedisPool innerPool,JedisPool outerPool,ArrayList samePairs,ArrayList errorPairs ) {
+
+// if (samePairs.size() % 1000 == 0) {
+// log.info("Same pairs size "+samePairs.size());
+// }
+
+ ITree oldTree = null;
+ ITree newTree = null;
+ Pair oldPair = null;
+ Pair newPair = null;
+ String matchKey = null;
+
+ try {
+
+ String[] split = pairName.split("_");
+
+
+ String i = split[1];
+ String j = split[2];
+ String keyName = split[0];
+ matchKey = keyName + "_" + (String.valueOf(i)) + "_" + String.valueOf(j);
+// jedis.select(0);
+// Set keys = jedis.keys(matchKey);
+// if (keys.size() > 0) {
+// jedis.del(matchKey);
+// } else {
+// return;
+// }
+// jedis.srem("pairs",matchKey);
+
+ switch (treeType) {
+ case "shape":
+ oldTree = EDiffHelper.getShapes(keyName, i, outerPool, innerPool);
+ newTree = EDiffHelper.getShapes(keyName, j, outerPool, innerPool);
+ break;
+ case "action":
+ oldPair = EDiffHelper.getActions(keyName, i, outerPool, innerPool);
+ newPair = EDiffHelper.getActions(keyName, j, outerPool, innerPool);
+ oldTree = oldPair.getValue0();
+ newTree = newPair.getValue0();
+
+
+ break;
+ case "token":
+ oldTree = EDiffHelper.getTokens(keyName, i, outerPool, innerPool);
+ newTree = EDiffHelper.getTokens(keyName, j, outerPool, innerPool);
+
+ String oldTokens = EDiffHelper.getNames2(oldTree);
+ String newTokens = EDiffHelper.getNames2(newTree);
+
+ JaroWinklerDistance jwd = new JaroWinklerDistance();
+
+
+ Double overallSimi = Double.valueOf(0);
+
+ if (!(oldTokens.trim().isEmpty() || newTokens.trim().isEmpty())) {
+ overallSimi = jwd.apply(oldTokens, newTokens);
+
+ }
+
+
+ int retval = Double.compare(overallSimi, Double.valueOf(1));
+
+ if (retval >= 0) {
+ String result = i + "," + j + "," + String.join(",", oldTokens);
+// jedis.select(2);
+// jedis.set(matchKey, result);
+ try (Jedis jedis = innerPool.getResource()) {
+// jedis.del(matchKey);
+ jedis.select(2);
+ jedis.set(matchKey, result);
+ }
+// samePairs.add(matchKey);
+// try (Jedis jedis = innerPool.getResource()) {
+//// jedis.del(matchKey);
+// jedis.select(2);
+// jedis.set(matchKey, result);
+// }
+ }
+// jedis.select(0);
+//// jedis.srem("pairs",matchKey);
+// jedis.del(matchKey);
+
+ return;
+ default:
+ break;
+ }
+
+
+
+ if(oldTree.toStaticHashString().equals(newTree.toStaticHashString())){
+ String editDistance = "0";
+ String result = i + "," + j + "," + editDistance;
+ if (editDistance.equals("0")) {
+
+ if (treeType.equals("action")) {
+ HierarchicalActionSet oldProject = oldPair.getValue1();
+ HierarchicalActionSet newProject = newPair.getValue1();
+
+ oldTree = EDiffHelper.getTargets(oldProject);
+ newTree = EDiffHelper.getTargets(newProject);
+ if (oldTree.toStaticHashString().equals(newTree.toStaticHashString())) {
+ try (Jedis jedis = innerPool.getResource()) {
+// jedis.del(matchKey);
+ jedis.select(2);
+ jedis.set(matchKey, result);
+ }
+ }
+ } else {
+ try (Jedis jedis = innerPool.getResource()) {
+// jedis.del(matchKey);
+ jedis.select(2);
+ jedis.set(matchKey, result);
+ }
+ }
+ }
+
+
+ }
+// if(oldTree.toString().equals(newTree.toString())) {
+// Matcher m = Matchers.getInstance().getMatcher(oldTree, newTree);
+// m.match();
+//
+//
+// ActionGenerator ag = new ActionGenerator(oldTree, newTree, m.getMappings());
+// ag.generate();
+// List actions = ag.getActions();
+//
+//
+// String editDistance;
+//
+// editDistance = String.valueOf(actions.size());
+// String result = i + "," + j + "," + editDistance;
+//
+//
+// if (editDistance.equals("0")) {
+//
+// if (treeType.equals("action")) {
+//
+// HierarchicalActionSet oldProject = oldPair.getValue1();
+// HierarchicalActionSet newProject = newPair.getValue1();
+//
+// oldTree = EDiffHelper.getTargets(oldProject);
+// newTree = EDiffHelper.getTargets(newProject);
+//
+// if(oldTree.toString().equals(newTree.toString())) {
+// m = Matchers.getInstance().getMatcher(oldTree, newTree);
+// m.match();
+//
+//
+// ag = new ActionGenerator(oldTree, newTree, m.getMappings());
+// ag.generate();
+// actions = ag.getActions();
+//
+// editDistance = String.valueOf(actions.size());
+//
+// if (editDistance.equals("0")) {
+// try (Jedis jedis = innerPool.getResource()) {
+// jedis.del(matchKey);
+// jedis.select(2);
+// jedis.set(matchKey, result);
+// }
+// }
+// }
+//
+//
+// } else {
+// try (Jedis jedis = innerPool.getResource()) {
+// jedis.del(matchKey);
+// jedis.select(2);
+// jedis.set(matchKey, result);
+// }
+//// jedis.select(2);
+//// jedis.set(matchKey, result);
+//// samePairs.add(matchKey);
+// }
+//
+// }
+// }
+
+ } catch (Exception e) {
+ errorPairs.add(matchKey);
+// jedis.select(0);
+//// jedis.srem("pairs",matchKey);
+//
+// jedis.hset(matchKey, "0", "1");
+
+ log.debug("{} not comparable", pairName);
+ }
}
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/RunnableCompare.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/RunnableCompare.java
old mode 100644
new mode 100755
index 4ee2ced..40993fb
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/RunnableCompare.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/RunnableCompare.java
@@ -7,17 +7,19 @@ public class RunnableCompare implements Runnable {
private String name;
private JedisPool innerPool;
private JedisPool outerPool;
- private Compare comparer;
+ private CompareTrees comparer;
+ private String type;
- public RunnableCompare(String name , JedisPool innerPool, JedisPool outerPool, Compare comp) {
+ public RunnableCompare(String name , JedisPool innerPool, JedisPool outerPool,String type) {
this.name = name;
this.innerPool = innerPool;
this.outerPool = outerPool;
- this.comparer = comp;
+ this.type = type;
+
}
@Override
public void run() {
- comparer.coreCompare(name, innerPool, outerPool);
+// comparer.coreCompare(name,type, innerPool, outerPool);
}
}
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/TreeActor.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/TreeActor.java
old mode 100644
new mode 100755
index 24b2045..f2ae12c
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/TreeActor.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/TreeActor.java
@@ -4,6 +4,7 @@ import akka.actor.ActorRef;
import akka.actor.Props;
import akka.actor.UntypedActor;
import akka.japi.Creator;
+import akka.routing.BalancingPool;
import akka.routing.RoundRobinPool;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -21,7 +22,7 @@ public class TreeActor extends UntypedActor {
public TreeActor(int numberOfWorkers) {
- mineRouter = this.getContext().actorOf(new RoundRobinPool(numberOfWorkers)
+ mineRouter = this.getContext().actorOf(new BalancingPool(numberOfWorkers)
.props(TreeWorker.props()), "tree-router");
this.numberOfWorkers = numberOfWorkers;
}
@@ -47,6 +48,7 @@ public class TreeActor extends UntypedActor {
List pairs = ((TreeMessage) message).getName();
JedisPool innerPool = ((TreeMessage) message).getInnerPool();
JedisPool outerPool = ((TreeMessage) message).getOuterPool();
+ String type = ((TreeMessage) message).getType();
int size = pairs.size();
@@ -60,7 +62,7 @@ public class TreeActor extends UntypedActor {
int toIndex = (i + 1) * average + counter;
List pairsOfWorkers = pairs.subList(fromIndex, toIndex);
- final TreeMessage workMsg = new TreeMessage(i + 1, pairsOfWorkers,innerPool,outerPool,((TreeMessage) message).getSECONDS_TO_WAIT());
+ final TreeMessage workMsg = new TreeMessage(i + 1, pairsOfWorkers,innerPool,outerPool,((TreeMessage) message).getSECONDS_TO_WAIT(),type);
mineRouter.tell(workMsg, getSelf());
logger.info("Assign {} task to worker #" + (i + 1) + "...",pairsOfWorkers.size());
}
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/TreeMessage.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/TreeMessage.java
old mode 100644
new mode 100755
index a99752c..335b2eb
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/TreeMessage.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/TreeMessage.java
@@ -13,21 +13,32 @@ public class TreeMessage extends BaseMessage{
private JedisPool innerPool;
private JedisPool outerPool;
+ public String getType() {
+ return type;
+ }
- public TreeMessage(int id, List name, JedisPool innerPool, JedisPool outerPool,String eDiffTimeout) {
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ private String type;
+
+
+ public TreeMessage(int id, List name, JedisPool innerPool, JedisPool outerPool,String eDiffTimeout,String treeType) {
super(id,new Long(eDiffTimeout));
this.name = name;
this.innerPool = innerPool;
this.outerPool = outerPool;
-
+ this.type = treeType;
}
- public TreeMessage(int id, List name, JedisPool innerPool, JedisPool outerPool,Long eDiffTimeout) {
+ public TreeMessage(int id, List name, JedisPool innerPool, JedisPool outerPool,Long eDiffTimeout,String treeType) {
super(id,eDiffTimeout);
this.name = name;
this.innerPool = innerPool;
this.outerPool = outerPool;
+ this.type = treeType;
}
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/TreeWorker.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/TreeWorker.java
old mode 100644
new mode 100755
index ae79022..32ebbac
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/TreeWorker.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/TreeWorker.java
@@ -41,6 +41,7 @@ public class TreeWorker extends UntypedActor {
List files = msg.getName();
JedisPool innerPool = msg.getInnerPool();
JedisPool outerPool = msg.getOuterPool();
+ String type = msg.getType();
int id = msg.getId();
int counter = 0;
@@ -49,19 +50,21 @@ public class TreeWorker extends UntypedActor {
{
- Compare compare = new Compare();
- final ExecutorService executor = Executors.newSingleThreadExecutor();
+
+
+ final ExecutorService executor = Executors.newFixedThreadPool(1);
// // schedule the work
- final Future> future = executor.submit(new RunnableCompare(name, innerPool, outerPool, compare));
+ final Future> future = executor.submit(new RunnableCompare(name, innerPool, outerPool,type));
try {
// wait for task to complete
future.get(msg.getSECONDS_TO_WAIT(), TimeUnit.SECONDS);
counter++;
- if (counter % 100 == 0) {
+ if (counter % 1000 == 0) {
log.info("Worker #" + id +" finalized parsing " + counter + " pairs... remaing "+ (files.size() - counter));
}
} catch (TimeoutException e) {
future.cancel(true);
+ System.err.println("#Timeout: " + name);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffActor.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffActor.java
old mode 100644
new mode 100755
index 5d16315..9e714ea
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffActor.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffActor.java
@@ -54,7 +54,7 @@ public class EDiffActor extends UntypedActor {
int toIndex = (i + 1) * average + counter;
List filesOfWorkers = files.subList(fromIndex, toIndex);
- final EDiffMessage workMsg = new EDiffMessage(i + 1, filesOfWorkers,((EDiffMessage) message).getSECONDS_TO_WAIT(),((EDiffMessage) message).getActionType());
+ final EDiffMessage workMsg = new EDiffMessage(i + 1, filesOfWorkers,((EDiffMessage) message).getSECONDS_TO_WAIT(),((EDiffMessage) message).getInnerPool());
mineRouter.tell(workMsg, getSelf());
logger.info("Assign {} task to worker #" + (i + 1) ,filesOfWorkers.size());
}
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffHunkParser.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffHunkParser.java
old mode 100644
new mode 100755
index 667680b..d73c643
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffHunkParser.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffHunkParser.java
@@ -4,9 +4,13 @@ import com.github.gumtreediff.actions.model.Delete;
import com.github.gumtreediff.actions.model.Insert;
import com.github.gumtreediff.actions.model.Move;
import com.github.gumtreediff.actions.model.Update;
+import edu.lu.uni.serval.utils.EDiffHelper;
import edu.lu.uni.serval.utils.FileHelper;
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.JedisPool;
import java.io.*;
+import java.util.ArrayList;
import java.util.List;
@@ -21,7 +25,7 @@ public class EDiffHunkParser extends EDiffParser {
@Override
- public void parseFixPatterns(File prevFile, File revFile, File diffentryFile,String project,String actionType) {
+ public void parseFixPatterns(File prevFile, File revFile, File diffentryFile, String project, JedisPool innerPool) {
List actionSets = parseChangedSourceCodeWithGumTree2(prevFile, revFile);
if (actionSets.size() != 0) {
// String folder= null;
@@ -73,8 +77,9 @@ public class EDiffHunkParser extends EDiffParser {
try {
String astNodeType = actionSet.getAstNodeType();
- int size = actionSet.toString().split("\\n").length;
-
+// int size = actionSet.toString().split("\\n").length;
+ actionSet.toString();
+ int size = actionSet.getActionSize();
// int size = actionSet.strList.size();
String datasetName = project;
@@ -82,19 +87,30 @@ public class EDiffHunkParser extends EDiffParser {
String root = split1[0];
String pj = split1[1].split("/")[1];
- File file = new File(root + "EnhancedASTDiff" + datasetName + "/"+astNodeType+"/"+String.valueOf(size)+"/");
- file.mkdirs();
- String hunkTreeFileName = root + "EnhancedASTDiff" + datasetName + "/"+astNodeType+"/"+String.valueOf(size)+"/" + pj +"_" + diffentryFile.getName() + "_" + String.valueOf(hunkSet);
+// File file = new File(root + "EnhancedASTDiff" + datasetName + "/"+astNodeType+"/"+String.valueOf(size)+"/");
+// file.mkdirs();
+// String hunkTreeFileName = root + "EnhancedASTDiff" + datasetName + "/"+astNodeType+"/"+String.valueOf(size)+"/" + pj +"_" + diffentryFile.getName() + "_" + String.valueOf(hunkSet);
// String hunkTreeFileName = root + "EnhancedASTDiff" + datasetName + "/" + pj + folder + diffentryFile.getName() + "_" + String.valueOf(hunkSet);
- f = new FileOutputStream(new File(hunkTreeFileName));
- ObjectOutputStream o = new ObjectOutputStream(f);
- o.writeObject(actionSet);
- o.close();
- f.close();
+// f = new FileOutputStream(new File(hunkTreeFileName));
+// ObjectOutputStream o = new ObjectOutputStream(f);
+// o.writeObject(actionSet);
+//
+// o.close();
+// f.close();
+
+// String name = f.getName();
+
+ String key = astNodeType+"/"+String.valueOf(size)+"/" + pj +"_" + diffentryFile.getName() + "_" + String.valueOf(hunkSet);
+
+ try (Jedis inner = innerPool.getResource()) {
+
+ inner.set(key.getBytes(), EDiffHelper.toByteArray(actionSet));
+ }
+
} catch (FileNotFoundException e) {
e.printStackTrace();
- } catch (IOException e) {
+ } catch (Exception e) {
e.printStackTrace();
}
hunkSet++;
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffMessage.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffMessage.java
old mode 100644
new mode 100755
index ac5e11d..d19a365
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffMessage.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffMessage.java
@@ -1,6 +1,7 @@
package edu.lu.uni.serval.fixminer.akka.ediff;
import edu.lu.uni.serval.fixminer.akka.BaseMessage;
+import redis.clients.jedis.JedisPool;
import java.util.List;
@@ -13,19 +14,31 @@ public class EDiffMessage extends BaseMessage{
private String actionType;
+ public JedisPool getInnerPool() {
+ return innerPool;
+ }
+
+ public void setInnerPool(JedisPool innerPool) {
+ this.innerPool = innerPool;
+ }
+
+ private JedisPool innerPool;
+
- public EDiffMessage(int id, List msgFiles,String eDiffTimeout,String actionType) {
+ public EDiffMessage(int id, List msgFiles,String eDiffTimeout,JedisPool pool) {
super(id,new Long(eDiffTimeout));
this.msgFiles = msgFiles;
this.actionType = actionType;
+ this.innerPool = pool;
}
- public EDiffMessage(int id, List msgFiles,Long eDiffTimeout,String actionType) {
+ public EDiffMessage(int id, List msgFiles,Long eDiffTimeout,JedisPool pool) {
super(id,eDiffTimeout);
this.msgFiles = msgFiles;
this.actionType = actionType;
+ this.innerPool = pool;
}
public String getActionType() {
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffParser.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffParser.java
old mode 100644
new mode 100755
index 8e0e9d7..1f8d203
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffParser.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffParser.java
@@ -3,6 +3,7 @@ package edu.lu.uni.serval.fixminer.akka.ediff;
import com.github.gumtreediff.actions.model.Action;
import edu.lu.uni.serval.gumtree.GumTreeComparer;
import edu.lu.uni.serval.utils.ListSorter;
+import redis.clients.jedis.JedisPool;
import java.io.File;
import java.util.ArrayList;
@@ -62,7 +63,7 @@ public class EDiffParser extends Parser {
}
@Override
- public void parseFixPatterns(File prevFile, File revFile, File diffEntryFile, String project, String actionType) {
+ public void parseFixPatterns(File prevFile, File revFile, File diffEntryFile, String project, JedisPool innerPool) {
}
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffWorker.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffWorker.java
old mode 100644
new mode 100755
index 77a30b0..2b18154
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffWorker.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffWorker.java
@@ -5,6 +5,7 @@ import akka.actor.UntypedActor;
import akka.japi.Creator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import redis.clients.jedis.JedisPool;
import java.io.File;
import java.util.List;
@@ -41,7 +42,8 @@ public class EDiffWorker extends UntypedActor {
int id = msg.getId();
int counter = 0;
-
+ JedisPool innerPool = msg.getInnerPool();
+
for (MessageFile msgFile : files) {
File revFile = msgFile.getRevFile();
File prevFile = msgFile.getPrevFile();
@@ -53,7 +55,7 @@ public class EDiffWorker extends UntypedActor {
final ExecutorService executor = Executors.newSingleThreadExecutor();
// schedule the work
- final Future> future = executor.submit(new RunnableParser(prevFile, revFile, diffentryFile, parser,project,msg.getActionType()));
+ final Future> future = executor.submit(new RunnableParser(prevFile, revFile, diffentryFile, parser,project,msg.getInnerPool()));
try {
// wait for task to complete
future.get(msg.getSECONDS_TO_WAIT(), TimeUnit.SECONDS);
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/HierarchicalActionSet.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/HierarchicalActionSet.java
old mode 100644
new mode 100755
index 62f44e4..a338d64
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/HierarchicalActionSet.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/HierarchicalActionSet.java
@@ -171,6 +171,10 @@ public class HierarchicalActionSet implements Comparable,
private List strList = new ArrayList<>();
+ public int getActionSize(){
+ return strList.size();
+ }
+
@Override
public String toString() {
String str = actionString;
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/HierarchicalRegrouper.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/HierarchicalRegrouper.java
old mode 100644
new mode 100755
index 5549e2f..09c0686
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/HierarchicalRegrouper.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/HierarchicalRegrouper.java
@@ -187,7 +187,7 @@ public class HierarchicalRegrouper {
if (action instanceof Addition) {
parent = ((Addition) action).getParent(); // parent in the fixed source code tree
}
-
+
if (parent.getType() == 55) {
int type = action.getNode().getType();
// Modifier, NormalAnnotation, MarkerAnnotation, SingleMemberAnnotation
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/MessageFile.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/MessageFile.java
old mode 100644
new mode 100755
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/Parser.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/Parser.java
old mode 100644
new mode 100755
index 21bd9b4..349410b
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/Parser.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/Parser.java
@@ -1,5 +1,7 @@
package edu.lu.uni.serval.fixminer.akka.ediff;
+import redis.clients.jedis.JedisPool;
+
import java.io.File;
/**
@@ -18,7 +20,7 @@ public abstract class Parser implements ParserInterface {
protected String originalTree = ""; // Guide of generating patches.
protected String actionSets = ""; // Guide of generating patches.
- public abstract void parseFixPatterns(File prevFile, File revFile, File diffEntryFile,String project,String actionType);
+ public abstract void parseFixPatterns(File prevFile, File revFile, File diffEntryFile, String project, JedisPool innerPool);
@Override
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/ParserInterface.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/ParserInterface.java
old mode 100644
new mode 100755
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/RunnableParser.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/RunnableParser.java
old mode 100644
new mode 100755
index b74726f..b4b48a4
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/RunnableParser.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/RunnableParser.java
@@ -1,5 +1,7 @@
package edu.lu.uni.serval.fixminer.akka.ediff;
+import redis.clients.jedis.JedisPool;
+
import java.io.File;
public class RunnableParser implements Runnable {
@@ -9,7 +11,7 @@ public class RunnableParser implements Runnable {
private File diffentryFile;
private Parser parser;
private String project;
- private String actionType;
+ private JedisPool pool;
public RunnableParser(File prevFile, File revFile, File diffentryFile, Parser parser) {
this.prevFile = prevFile;
@@ -18,17 +20,17 @@ public class RunnableParser implements Runnable {
this.parser = parser;
}
- public RunnableParser(File prevFile, File revFile, File diffentryFile, Parser parser,String project,String actionType) {
+ public RunnableParser(File prevFile, File revFile, File diffentryFile, Parser parser, String project, JedisPool innerPool) {
this.prevFile = prevFile;
this.revFile = revFile;
this.diffentryFile = diffentryFile;
this.parser = parser;
this.project = project;
- this.actionType= actionType;
+ this.pool = innerPool;
}
@Override
public void run() {
- parser.parseFixPatterns(prevFile, revFile, diffentryFile,project,actionType);
+ parser.parseFixPatterns(prevFile, revFile, diffentryFile,project,pool);
}
}
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/jobs/AkkaTreeLoader.java b/src/main/java/edu/lu/uni/serval/fixminer/jobs/AkkaTreeLoader.java
old mode 100644
new mode 100755
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/jobs/CalculatePairs.java b/src/main/java/edu/lu/uni/serval/fixminer/jobs/CalculatePairs.java
old mode 100644
new mode 100755
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/jobs/EnhancedASTDiff.java b/src/main/java/edu/lu/uni/serval/fixminer/jobs/EnhancedASTDiff.java
old mode 100644
new mode 100755
index f2d3c44..a9f51ec
--- a/src/main/java/edu/lu/uni/serval/fixminer/jobs/EnhancedASTDiff.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/jobs/EnhancedASTDiff.java
@@ -6,9 +6,12 @@ import edu.lu.uni.serval.fixminer.akka.ediff.EDiffActor;
import edu.lu.uni.serval.fixminer.akka.ediff.EDiffHunkParser;
import edu.lu.uni.serval.fixminer.akka.ediff.EDiffMessage;
import edu.lu.uni.serval.fixminer.akka.ediff.MessageFile;
+import edu.lu.uni.serval.utils.CallShell;
import edu.lu.uni.serval.utils.FileHelper;
+import edu.lu.uni.serval.utils.PoolBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import redis.clients.jedis.JedisPool;
import java.io.File;
import java.util.ArrayList;
@@ -21,12 +24,20 @@ public class EnhancedASTDiff {
private static Logger log = LoggerFactory.getLogger(EnhancedASTDiff.class);
- public static void main(String inputPath, String outputPath, String numOfWorkers, String project, String eDiffTimeout, String actionType, String parallelism) {
+ public static void main(String inputPath, String outputPath, String numOfWorkers, String project, String eDiffTimeout, String actionType, String parallelism, String portInner, String dbDir, String chunkName) throws Exception {
String parameters = String.format("\nInput path %s \nOutput path %s",inputPath,outputPath);
log.info(parameters);
+ CallShell cs = new CallShell();
+ String cmd = "bash "+dbDir + "/" + "startServer.sh" +" %s %s %s";
+ cmd = String.format(cmd, dbDir,chunkName,Integer.valueOf(portInner));
+
+ cs.runShell(cmd, portInner);
+
+ JedisPool innerPool = new JedisPool(PoolBuilder.getPoolConfig(), "127.0.0.1",Integer.valueOf(portInner),20000000);
+
File folder = new File(inputPath);
File[] listOfFiles = folder.listFiles();
Stream stream = Arrays.stream(listOfFiles);
@@ -41,10 +52,11 @@ public class EnhancedASTDiff {
List msgFiles = getMessageFiles(target.toString() + "/"); //"/Users/anilkoyuncu/bugStudy/code/python/GumTreeInput/Apache/CAMEL/"
- allMessageFiles.addAll(msgFiles);
+
// System.out.println(msgFiles.size());
- if (msgFiles.size() == 0)
+ if (msgFiles == null)
continue;
+ allMessageFiles.addAll(msgFiles);
String GUM_TREE_OUTPUT = outputPath + "/" + pjName + "/";
@@ -65,7 +77,7 @@ public class EnhancedASTDiff {
case "AKKA":
ActorSystem system = null;
ActorRef parsingActor = null;
- final EDiffMessage msg = new EDiffMessage(0, allMessageFiles,eDiffTimeout,actionType);
+ final EDiffMessage msg = new EDiffMessage(0, allMessageFiles,eDiffTimeout,innerPool);
try {
log.info("Akka begins...");
log.info("{} files to process ...", allMessageFiles.size());
@@ -79,25 +91,25 @@ public class EnhancedASTDiff {
}
break;
case "FORKJOIN":
- int counter = new Object() {
- int counter = 0;
-
- {
- allMessageFiles.stream().
- parallel().
- peek(x -> counter++).
- forEach(m ->
- {
- EDiffHunkParser parser = new EDiffHunkParser();
- parser.parseFixPatterns(m.getPrevFile(),m.getRevFile(), m.getDiffEntryFile(),project,actionType);
- if (counter % 10 == 0) {
- log.info("Finalized parsing " + counter + " files... remaing " + (allMessageFiles.size() - counter));
- }
- }
- );
- }
- }.counter;
- log.info("Finished parsing {} files",counter);
+// int counter = new Object() {
+// int counter = 0;
+//
+// {
+// allMessageFiles.stream().
+// parallel().
+// peek(x -> counter++).
+// forEach(m ->
+// {
+// EDiffHunkParser parser = new EDiffHunkParser();
+// parser.parseFixPatterns(m.getPrevFile(),m.getRevFile(), m.getDiffEntryFile(),project,msg.getInnerPool());
+// if (counter % 10 == 0) {
+// log.info("Finalized parsing " + counter + " files... remaing " + (allMessageFiles.size() - counter));
+// }
+// }
+// );
+// }
+// }.counter;
+// log.info("Finished parsing {} files",counter);
break;
default:
log.error("Unknown parallelism {}", parallelism);
@@ -115,26 +127,29 @@ public class EnhancedASTDiff {
private static List getMessageFiles(String gumTreeInput) {
String inputPath = gumTreeInput; // prevFiles revFiles diffentryFile positionsFile
File revFilesPath = new File(inputPath + "revFiles/");
- File[] revFiles = revFilesPath.listFiles(); // project folders
- List msgFiles = new ArrayList<>();
- if (revFiles.length >= 0) {
- for (File revFile : revFiles) {
- String fileName = revFile.getName();
- File prevFile = new File(gumTreeInput + "prevFiles/prev_" + fileName);// previous file
- fileName = fileName.replace(".java", ".txt");
- File diffentryFile = new File(gumTreeInput + "DiffEntries/" + fileName); // DiffEntry file
+ log.info(revFilesPath.getPath());
+ File[] revFiles = revFilesPath.listFiles();
+ if (revFiles!= null ){
+ // List collect = Arrays.stream(revFiles).filter(x -> x.getName().startsWith("b50867_6e80c3_src#main#java#org#apache#hadoop#hbase#regionserver#HRegion"))
+ // .collect(Collectors.toList());// project folders
+ List msgFiles = new ArrayList<>();
+ for (File revFile : revFiles) {
+ // for (File revFile : collect) {
+ String fileName = revFile.getName();
+ File prevFile = new File(gumTreeInput + "prevFiles/prev_" + fileName);// previous file
+ fileName = fileName.replace(".java", ".txt");
+ File diffentryFile = new File(gumTreeInput + "DiffEntries/" + fileName); // DiffEntry file
- MessageFile msgFile = new MessageFile(revFile, prevFile, diffentryFile);
+ MessageFile msgFile = new MessageFile(revFile, prevFile, diffentryFile);
- msgFiles.add(msgFile);
+ msgFiles.add(msgFile);
- }
+ }
- return msgFiles;
- }
- else{
- return null;
- }
+ return msgFiles;
+ }else{
+ return null;
+ }
}
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/jobs/ImportPairs2DB.java b/src/main/java/edu/lu/uni/serval/fixminer/jobs/ImportPairs2DB.java
old mode 100644
new mode 100755
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster.java b/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster.java
old mode 100644
new mode 100755
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster3.java b/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster3.java
old mode 100644
new mode 100755
index e542cc5..10aa82f
--- a/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster3.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster3.java
@@ -2,6 +2,7 @@ package edu.lu.uni.serval.fixminer.jobs;
import com.github.gumtreediff.tree.ITree;
import com.github.gumtreediff.tree.TreeContext;
+import com.github.gumtreediff.tree.TreeUtils;
import edu.lu.uni.serval.fixminer.akka.ediff.HierarchicalActionSet;
import edu.lu.uni.serval.utils.CallShell;
import edu.lu.uni.serval.utils.EDiffHelper;
@@ -171,6 +172,7 @@ public class MultiThreadTreeLoaderCluster3 {
+
public static List getNames(ITree oldTree, List oldTokens){
List descendants = oldTree.getDescendants();
@@ -209,17 +211,26 @@ public class MultiThreadTreeLoaderCluster3 {
List m = new ArrayList();
if(label.startsWith("UPD")){
upd = true;
- java.util.regex.Matcher matcher;
- if(sType.equals("53")){
- String timeRegex = ".*@@(ClassInstanceCreation:new [a-zA-Z0-9]+).*@TO@\\s(ClassInstanceCreation:new [a-zA-Z0-9]+).*";
- Pattern pattern = Pattern.compile(timeRegex, Pattern.DOTALL);
- matcher= pattern.matcher(split[1]);
- }else {
- String timeRegex = "@@(.*)@TO@(.*)";
- Pattern pattern = Pattern.compile(timeRegex, Pattern.DOTALL);
- matcher = pattern.matcher(split[1]);
- }
+
+ String timeRegex = "UPD (AnonymousClassDeclaration|ArrayAccess|ArrayCreation|ArrayInitializer|ArrayType|AssertStatement|Assignment|Block|BooleanLiteral|BreakStatement|CastExpression|CatchClause|CharacterLiteral|ClassInstanceCreation|CompilationUnit|ConditionalExpression|ConstructorInvocation|ContinueStatement|DoStatement|EmptyStatement|ExpressionStatement|FieldAccess|FieldDeclaration|ForStatement|IfStatement|ImportDeclaration|InfixExpression|Initializer|Javadoc|LabeledStatement|MethodDeclaration|MethodInvocation|NullLiteral|NumberLiteral|PackageDeclaration|ParenthesizedExpression|PostfixExpression|PrefixExpression|PrimitiveType|QualifiedName|ReturnStatement|SimpleName|SimpleType|SingleVariableDeclaration|StringLiteral|SuperConstructorInvocation|SuperFieldAccess|SuperMethodInvocation|SwitchCase|SwitchStatement|SynchronizedStatement|ThisExpression|ThrowStatement|TryStatement|TypeDeclaration|TypeDeclarationStatement|TypeLiteral|VariableDeclarationExpression|VariableDeclarationFragment|VariableDeclarationStatement|WhileStatement|InstanceofExpression|LineComment|BlockComment|TagElement|TextElement|MemberRef|MethodRef|MethodRefParameter|EnhancedForStatement|EnumDeclaration|EnumConstantDeclaration|TypeParameter|ParameterizedType|QualifiedType|WildcardType|NormalAnnotation|MarkerAnnotation|SingleMemberAnnotation|MemberValuePair|AnnotationTypeDeclaration|AnnotationTypeMemberDeclaration|Modifier|UnionType|Dimension|LambdaExpression|IntersectionType|NameQualifiedType|CreationReference|ExpressionMethodReference|SuperMethodReference|TypeMethodReference)@@(.*)@TO@(.*)@AT@";
+// java.util.regex.Matcher matcher;
+// if(sType.equals("53")){
+// String timeRegex = ".*@@(ClassInstanceCreation:new [a-zA-Z0-9]+).*@TO@\\s(ClassInstanceCreation:new [a-zA-Z0-9]+).*";
+// Pattern pattern = Pattern.compile(timeRegex, Pattern.DOTALL);
+// matcher= pattern.matcher(split[1]);
+// }else {
+// String timeRegex = "@@(.*)@TO@(.*)";
+// Pattern pattern = Pattern.compile(timeRegex, Pattern.DOTALL);
+// matcher = pattern.matcher(split[1]);
+// }
+ Pattern pattern = Pattern.compile(timeRegex, Pattern.DOTALL);
+ java.util.regex.Matcher matcher = pattern.matcher(label);
+
+
if (matcher.matches()) {
+ String group = matcher.group(2);
+ String group1 = matcher.group(3);
+
String hours = matcher.group(1);
String to = matcher.group(2);
if(sType.equals("31")){
@@ -296,11 +307,16 @@ public class MultiThreadTreeLoaderCluster3 {
}
}else if(label.startsWith("INS") && upd == false){
- String timeRegex = "@@(.*)@TO@(.*)";
+ String timeRegex ="MOV (AnonymousClassDeclaration|ArrayAccess|ArrayCreation|ArrayInitializer|ArrayType|AssertStatement|Assignment|Block|BooleanLiteral|BreakStatement|CastExpression|CatchClause|CharacterLiteral|ClassInstanceCreation|CompilationUnit|ConditionalExpression|ConstructorInvocation|ContinueStatement|DoStatement|EmptyStatement|ExpressionStatement|FieldAccess|FieldDeclaration|ForStatement|IfStatement|ImportDeclaration|InfixExpression|Initializer|Javadoc|LabeledStatement|MethodDeclaration|MethodInvocation|NullLiteral|NumberLiteral|PackageDeclaration|ParenthesizedExpression|PostfixExpression|PrefixExpression|PrimitiveType|QualifiedName|ReturnStatement|SimpleName|SimpleType|SingleVariableDeclaration|StringLiteral|SuperConstructorInvocation|SuperFieldAccess|SuperMethodInvocation|SwitchCase|SwitchStatement|SynchronizedStatement|ThisExpression|ThrowStatement|TryStatement|TypeDeclaration|TypeDeclarationStatement|TypeLiteral|VariableDeclarationExpression|VariableDeclarationFragment|VariableDeclarationStatement|WhileStatement|InstanceofExpression|LineComment|BlockComment|TagElement|TextElement|MemberRef|MethodRef|MethodRefParameter|EnhancedForStatement|EnumDeclaration|EnumConstantDeclaration|TypeParameter|ParameterizedType|QualifiedType|WildcardType|NormalAnnotation|MarkerAnnotation|SingleMemberAnnotation|MemberValuePair|AnnotationTypeDeclaration|AnnotationTypeMemberDeclaration|Modifier|UnionType|Dimension|LambdaExpression|IntersectionType|NameQualifiedType|CreationReference|ExpressionMethodReference|SuperMethodReference|TypeMethodReference)@@(.*)@TO@ (AnonymousClassDeclaration|ArrayAccess|ArrayCreation|ArrayInitializer|ArrayType|AssertStatement|Assignment|Block|BooleanLiteral|BreakStatement|CastExpression|CatchClause|CharacterLiteral|ClassInstanceCreation|CompilationUnit|ConditionalExpression|ConstructorInvocation|ContinueStatement|DoStatement|EmptyStatement|ExpressionStatement|FieldAccess|FieldDeclaration|ForStatement|IfStatement|ImportDeclaration|InfixExpression|Initializer|Javadoc|LabeledStatement|MethodDeclaration|MethodInvocation|NullLiteral|NumberLiteral|PackageDeclaration|ParenthesizedExpression|PostfixExpression|PrefixExpression|PrimitiveType|QualifiedName|ReturnStatement|SimpleName|SimpleType|SingleVariableDeclaration|StringLiteral|SuperConstructorInvocation|SuperFieldAccess|SuperMethodInvocation|SwitchCase|SwitchStatement|SynchronizedStatement|ThisExpression|ThrowStatement|TryStatement|TypeDeclaration|TypeDeclarationStatement|TypeLiteral|VariableDeclarationExpression|VariableDeclarationFragment|VariableDeclarationStatement|WhileStatement|InstanceofExpression|LineComment|BlockComment|TagElement|TextElement|MemberRef|MethodRef|MethodRefParameter|EnhancedForStatement|EnumDeclaration|EnumConstantDeclaration|TypeParameter|ParameterizedType|QualifiedType|WildcardType|NormalAnnotation|MarkerAnnotation|SingleMemberAnnotation|MemberValuePair|AnnotationTypeDeclaration|AnnotationTypeMemberDeclaration|Modifier|UnionType|Dimension|LambdaExpression|IntersectionType|NameQualifiedType|CreationReference|ExpressionMethodReference|SuperMethodReference|TypeMethodReference)@@(.*)@AT@";
+//
+// String timeRegex = "@@(.*)@TO@(.*)";
Pattern pattern = Pattern.compile(timeRegex, Pattern.DOTALL);
- java.util.regex.Matcher matcher = pattern.matcher(split[1]);
+ java.util.regex.Matcher matcher = pattern.matcher(label);
if (matcher.matches()) {
+ String group = matcher.group(2);
+ String group1 = matcher.group(4);
+
String hours = matcher.group(1);
if (hours.startsWith("MethodName:")) {
String methodName = hours.split(":")[1];
@@ -313,11 +329,13 @@ public class MultiThreadTreeLoaderCluster3 {
}
}else if(label.startsWith("DEL") && upd == false){
- String timeRegex = "@@(.*)";
+ String timeRegex = "DEL (AnonymousClassDeclaration|ArrayAccess|ArrayCreation|ArrayInitializer|ArrayType|AssertStatement|Assignment|Block|BooleanLiteral|BreakStatement|CastExpression|CatchClause|CharacterLiteral|ClassInstanceCreation|CompilationUnit|ConditionalExpression|ConstructorInvocation|ContinueStatement|DoStatement|EmptyStatement|ExpressionStatement|FieldAccess|FieldDeclaration|ForStatement|IfStatement|ImportDeclaration|InfixExpression|Initializer|Javadoc|LabeledStatement|MethodDeclaration|MethodInvocation|NullLiteral|NumberLiteral|PackageDeclaration|ParenthesizedExpression|PostfixExpression|PrefixExpression|PrimitiveType|QualifiedName|ReturnStatement|SimpleName|SimpleType|SingleVariableDeclaration|StringLiteral|SuperConstructorInvocation|SuperFieldAccess|SuperMethodInvocation|SwitchCase|SwitchStatement|SynchronizedStatement|ThisExpression|ThrowStatement|TryStatement|TypeDeclaration|TypeDeclarationStatement|TypeLiteral|VariableDeclarationExpression|VariableDeclarationFragment|VariableDeclarationStatement|WhileStatement|InstanceofExpression|LineComment|BlockComment|TagElement|TextElement|MemberRef|MethodRef|MethodRefParameter|EnhancedForStatement|EnumDeclaration|EnumConstantDeclaration|TypeParameter|ParameterizedType|QualifiedType|WildcardType|NormalAnnotation|MarkerAnnotation|SingleMemberAnnotation|MemberValuePair|AnnotationTypeDeclaration|AnnotationTypeMemberDeclaration|Modifier|UnionType|Dimension|LambdaExpression|IntersectionType|NameQualifiedType|CreationReference|ExpressionMethodReference|SuperMethodReference|TypeMethodReference)@@(.*)@AT@";
+// String timeRegex = "@@(.*)";
Pattern pattern = Pattern.compile(timeRegex, Pattern.DOTALL);
- java.util.regex.Matcher matcher = pattern.matcher(split[1]);
+ java.util.regex.Matcher matcher = pattern.matcher(label);
if (matcher.matches()) {
+ String group = matcher.group(2);
String hours = matcher.group(1);
if (hours.startsWith("MethodName:")){
String methodName = hours.split(":")[1];
@@ -327,11 +345,15 @@ public class MultiThreadTreeLoaderCluster3 {
}
}
}else if(label.startsWith("MOV") && upd == false){
- String timeRegex = "@@(.*)@TO@(.*)";
+ String timeRegex ="MOV (AnonymousClassDeclaration|ArrayAccess|ArrayCreation|ArrayInitializer|ArrayType|AssertStatement|Assignment|Block|BooleanLiteral|BreakStatement|CastExpression|CatchClause|CharacterLiteral|ClassInstanceCreation|CompilationUnit|ConditionalExpression|ConstructorInvocation|ContinueStatement|DoStatement|EmptyStatement|ExpressionStatement|FieldAccess|FieldDeclaration|ForStatement|IfStatement|ImportDeclaration|InfixExpression|Initializer|Javadoc|LabeledStatement|MethodDeclaration|MethodInvocation|NullLiteral|NumberLiteral|PackageDeclaration|ParenthesizedExpression|PostfixExpression|PrefixExpression|PrimitiveType|QualifiedName|ReturnStatement|SimpleName|SimpleType|SingleVariableDeclaration|StringLiteral|SuperConstructorInvocation|SuperFieldAccess|SuperMethodInvocation|SwitchCase|SwitchStatement|SynchronizedStatement|ThisExpression|ThrowStatement|TryStatement|TypeDeclaration|TypeDeclarationStatement|TypeLiteral|VariableDeclarationExpression|VariableDeclarationFragment|VariableDeclarationStatement|WhileStatement|InstanceofExpression|LineComment|BlockComment|TagElement|TextElement|MemberRef|MethodRef|MethodRefParameter|EnhancedForStatement|EnumDeclaration|EnumConstantDeclaration|TypeParameter|ParameterizedType|QualifiedType|WildcardType|NormalAnnotation|MarkerAnnotation|SingleMemberAnnotation|MemberValuePair|AnnotationTypeDeclaration|AnnotationTypeMemberDeclaration|Modifier|UnionType|Dimension|LambdaExpression|IntersectionType|NameQualifiedType|CreationReference|ExpressionMethodReference|SuperMethodReference|TypeMethodReference)@@(.*)@TO@ (AnonymousClassDeclaration|ArrayAccess|ArrayCreation|ArrayInitializer|ArrayType|AssertStatement|Assignment|Block|BooleanLiteral|BreakStatement|CastExpression|CatchClause|CharacterLiteral|ClassInstanceCreation|CompilationUnit|ConditionalExpression|ConstructorInvocation|ContinueStatement|DoStatement|EmptyStatement|ExpressionStatement|FieldAccess|FieldDeclaration|ForStatement|IfStatement|ImportDeclaration|InfixExpression|Initializer|Javadoc|LabeledStatement|MethodDeclaration|MethodInvocation|NullLiteral|NumberLiteral|PackageDeclaration|ParenthesizedExpression|PostfixExpression|PrefixExpression|PrimitiveType|QualifiedName|ReturnStatement|SimpleName|SimpleType|SingleVariableDeclaration|StringLiteral|SuperConstructorInvocation|SuperFieldAccess|SuperMethodInvocation|SwitchCase|SwitchStatement|SynchronizedStatement|ThisExpression|ThrowStatement|TryStatement|TypeDeclaration|TypeDeclarationStatement|TypeLiteral|VariableDeclarationExpression|VariableDeclarationFragment|VariableDeclarationStatement|WhileStatement|InstanceofExpression|LineComment|BlockComment|TagElement|TextElement|MemberRef|MethodRef|MethodRefParameter|EnhancedForStatement|EnumDeclaration|EnumConstantDeclaration|TypeParameter|ParameterizedType|QualifiedType|WildcardType|NormalAnnotation|MarkerAnnotation|SingleMemberAnnotation|MemberValuePair|AnnotationTypeDeclaration|AnnotationTypeMemberDeclaration|Modifier|UnionType|Dimension|LambdaExpression|IntersectionType|NameQualifiedType|CreationReference|ExpressionMethodReference|SuperMethodReference|TypeMethodReference)@@(.*)@AT@";
+// String timeRegex = "@@(.*)@TO@(.*)";
Pattern pattern = Pattern.compile(timeRegex, Pattern.DOTALL);
- java.util.regex.Matcher matcher = pattern.matcher(split[1]);
+ java.util.regex.Matcher matcher = pattern.matcher(label);
if (matcher.matches()) {
+ String group = matcher.group(2);
+ String group1 = matcher.group(4);
+
String hours = matcher.group(1);
if (hours.startsWith("MethodName:")){
String methodName = hours.split(":")[1];
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/jobs/PatternExtractor.java b/src/main/java/edu/lu/uni/serval/fixminer/jobs/PatternExtractor.java
old mode 100644
new mode 100755
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/jobs/StoreEDiffInCache.java b/src/main/java/edu/lu/uni/serval/fixminer/jobs/StoreEDiffInCache.java
old mode 100644
new mode 100755
index e04f260..ccd523a
--- a/src/main/java/edu/lu/uni/serval/fixminer/jobs/StoreEDiffInCache.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/jobs/StoreEDiffInCache.java
@@ -4,6 +4,8 @@ import edu.lu.uni.serval.fixminer.akka.ediff.HierarchicalActionSet;
import edu.lu.uni.serval.utils.CallShell;
import edu.lu.uni.serval.utils.EDiffHelper;
import edu.lu.uni.serval.utils.PoolBuilder;
+import org.redisson.Redisson;
+import org.redisson.api.RedissonClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
@@ -25,9 +27,9 @@ public class StoreEDiffInCache {
private static Logger log = LoggerFactory.getLogger(StoreEDiffInCache.class);
- public static void main(String inputPath,String portInner,String dbDir,String chunkName,String operation) throws Exception {
+ public static void main(String inputPath,String portInner,String dbDir,String chunkName) throws Exception {
- String parameters = String.format("\nInput path %s \nportInner %s \nchunkName %s \ndbDir %s \noperation %s",inputPath,portInner,chunkName,dbDir,operation);
+ String parameters = String.format("\nInput path %s \nportInner %s \nchunkName %s \ndbDir %s \noperation %s",inputPath,portInner,chunkName,dbDir);
log.info(parameters);
CallShell cs = new CallShell();
String cmd = "bash "+dbDir + "/" + "startServer.sh" +" %s %s %s";
@@ -137,7 +139,7 @@ public class StoreEDiffInCache {
try (Jedis inner = innerPool.getResource()) {
- inner.set(key, EDiffHelper.toString(actionSet));
+ inner.set(key.getBytes(), EDiffHelper.toByteArray(actionSet));
}
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/jobs/TreeLoaderClusterL1.java b/src/main/java/edu/lu/uni/serval/fixminer/jobs/TreeLoaderClusterL1.java
old mode 100644
new mode 100755
diff --git a/src/main/java/edu/lu/uni/serval/utils/ASTNodeMap.java b/src/main/java/edu/lu/uni/serval/utils/ASTNodeMap.java
old mode 100644
new mode 100755
diff --git a/src/main/java/edu/lu/uni/serval/utils/CallShell.java b/src/main/java/edu/lu/uni/serval/utils/CallShell.java
old mode 100644
new mode 100755
index 85c76ab..6b70789
--- a/src/main/java/edu/lu/uni/serval/utils/CallShell.java
+++ b/src/main/java/edu/lu/uni/serval/utils/CallShell.java
@@ -81,6 +81,7 @@ try{
runPing(command);
}else{
+ TimeUnit.MINUTES.sleep(1);
System.out.println(e);
}
diff --git a/src/main/java/edu/lu/uni/serval/utils/Checker.java b/src/main/java/edu/lu/uni/serval/utils/Checker.java
old mode 100644
new mode 100755
diff --git a/src/main/java/edu/lu/uni/serval/utils/ClusterToPattern.java b/src/main/java/edu/lu/uni/serval/utils/ClusterToPattern.java
old mode 100644
new mode 100755
index 0285940..4b095a4
--- a/src/main/java/edu/lu/uni/serval/utils/ClusterToPattern.java
+++ b/src/main/java/edu/lu/uni/serval/utils/ClusterToPattern.java
@@ -3,16 +3,12 @@ package edu.lu.uni.serval.utils;
import com.github.gumtreediff.tree.ITree;
import com.github.gumtreediff.tree.TreeContext;
import edu.lu.uni.serval.fixminer.akka.ediff.HierarchicalActionSet;
+import org.apache.commons.io.FileUtils;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
+import java.io.*;
+import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -22,8 +18,81 @@ public class ClusterToPattern {
String shapesFolder = "/Users/anil.koyuncu/projects/fixminer-all/enhancedASTDiff/python/data/shapes";
String port = "6399";
- JedisPool outerPool = new JedisPool(PoolBuilder.getPoolConfig(), "127.0.0.1",Integer.valueOf(port),20000000);
+// JedisPool outerPool = new JedisPool(PoolBuilder.getPoolConfig(), "127.0.0.1",Integer.valueOf(port),20000000);
+ Jedis jedis = new Jedis("127.0.0.1",Integer.valueOf(port),20000000);
+// writeTofFile(shapesFolder, outerPool);
+// File file = new File(shapesFolder);
+//
+//
+// File[] files = file.listFiles();
+// ArrayList strings = new ArrayList<>();
+// List folders = Arrays.stream(files).filter(x -> x.isDirectory())
+// .collect(Collectors.toList());
+// for (File target : folders) {
+// File[] files2 = target.listFiles();
+// for (File file1 : files2) {
+// File[] files1 = file1.listFiles();
+// strings.add(((File)files1[0]).listFiles()[0].getName());
+//// System.out.println();
+//
+// }
+//
+//// Collection files1 = FileUtils.listFiles(target, null, true);
+//
+// }
+//
+// for (String string : strings) {
+// export("*"+string,jedis);
+// }
+
+// String export = export("VariableDeclarationStatement"+"/*/camel_8f0c15_ab3e17_camel-core#src#main#java#org#apache#camel#component#bean#BeanInfo.txt_0", jedis);
+ String export = export(args[0], jedis);
+ System.out.println(export);
+
+ }
+
+ private static String export(String filename,Jedis outer) throws IOException, ClassNotFoundException {
+
+// String key = shape.getName() + "/*/" + file.getName();
+// Jedis outer = outerPool.getResource();
+ String s = null;//inner.get(prefix.replace("-","/") +"/"+dist2load);
+ Set keys = outer.keys(filename);
+ if (keys.size() == 1) {
+ s = (String) keys.toArray()[0];
+ } else {
+ throw new Error("cok key");
+ }
+
+ byte[] si = outer.get(s.getBytes());
+// HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromString(si);
+ HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromByteArray(si);
+// ITree tree = null;
+// ITree parent = null;
+// ITree children =null;
+// TreeContext tc = new TreeContext();
+// tree = EDiffHelper.getASTTree(actionSet, parent, children,tc);
+// tree.setParent(null);
+// tc.validate();
+//
+// String s2 = tree.toStaticHashString();
+// try(FileWriter fw = new FileWriter("myfile.txt", true);
+// BufferedWriter bw = new BufferedWriter(fw);
+// PrintWriter out = new PrintWriter(bw))
+// {
+// out.println(s2);
+// //more code
+// } catch (IOException e) {
+// //exception handling left as an exercise for the reader
+// }
+
+ String s1 = actionSet.toString();
+ outer.close();
+ return s1;
+ }
+
+
+ private static void writeTofFile(String shapesFolder, JedisPool outerPool) throws IOException, ClassNotFoundException {
File folder = new File(shapesFolder);
File[] listOfFiles = folder.listFiles();
@@ -39,8 +108,10 @@ public class ClusterToPattern {
.collect(Collectors.toList());
for(File cluster:fileList){
File[] files = cluster.listFiles();
+// for (File f:files) {
+// File file = f.listFiles()[0];
File file = files[0];
- String key = shape.getName() + "/*/"+file.getName();
+ String key = shape.getName() + "/*/" + file.getName();
Jedis outer = outerPool.getResource();
String s = null;//inner.get(prefix.replace("-","/") +"/"+dist2load);
Set keys = outer.keys(key);
@@ -55,17 +126,18 @@ public class ClusterToPattern {
String s1 = actionSet.toString();
- File saveFile = new File(folder.getParent()+"/shapePatterns/" +shape.getName()+"/"+cluster.getName()+".pattern");
+// File saveFile = new File(folder.getParent() + "/actionPatterns/" + shape.getName() + "/" + cluster.getName() +"/"+f.getName()+ ".pattern");
+ File saveFile = new File(folder.getParent() + "/shapePatterns/" + shape.getName() + "/" + cluster.getName() + ".pattern");
saveFile.getParentFile().mkdirs();
BufferedWriter writer = new BufferedWriter(new FileWriter(saveFile));
writer.write(s1);
- writer.close();
+ writer.close();
+// }
}
}
-
}
}
diff --git a/src/main/java/edu/lu/uni/serval/utils/EDiffHelper.java b/src/main/java/edu/lu/uni/serval/utils/EDiffHelper.java
old mode 100644
new mode 100755
index 766f154..df95124
--- a/src/main/java/edu/lu/uni/serval/utils/EDiffHelper.java
+++ b/src/main/java/edu/lu/uni/serval/utils/EDiffHelper.java
@@ -3,14 +3,18 @@ package edu.lu.uni.serval.utils;
import com.github.gumtreediff.actions.model.*;
import com.github.gumtreediff.tree.ITree;
import com.github.gumtreediff.tree.TreeContext;
+import com.github.gumtreediff.tree.TreeUtils;
import edu.lu.uni.serval.fixminer.akka.ediff.HierarchicalActionSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
+import org.javatuples.Pair;
import java.io.*;
import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
@@ -39,6 +43,24 @@ public class EDiffHelper {
}
+ public static Object fromByteArray( byte[] data ) throws IOException,
+ ClassNotFoundException {
+// byte [] data = Base64.getDecoder().decode( s );
+ ObjectInputStream ois = new ObjectInputStream(
+ new ByteArrayInputStream( data ) );
+ Object o = ois.readObject();
+ ois.close();
+ return o;
+ }
+ /** Write the object to a Base64 string. */
+ public static byte[] toByteArray(Serializable o ) throws IOException {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream oos = new ObjectOutputStream( baos );
+ oos.writeObject( o );
+ oos.close();
+ return baos.toByteArray();
+ }
+
public static ITree getTokenTree(HierarchicalActionSet actionSet, ITree parent, ITree children,TreeContext tc){
int newType = 0;
@@ -79,6 +101,66 @@ public class EDiffHelper {
}
+
+ public static ITree getTargetTree(HierarchicalActionSet actionSet, ITree parent, ITree children, TreeContext tc){
+
+ int newType = 0;
+
+ String astNodeType = null;
+
+ Action action = actionSet.getAction();
+ if (action instanceof Update){
+ astNodeType = actionSet.getAstNodeType();
+ List keysByValue = getKeysByValue(ASTNodeMap.map, astNodeType);
+
+ if(keysByValue.size() != 1){
+ log.error("More than 1");
+ }
+ newType = keysByValue.get(0);
+ }else if(action instanceof Insert){
+ newType = ((Insert)action).getParent().getType();
+ }else if(action instanceof Move){
+ newType = ((Move)action).getParent().getType();
+ }else if(action instanceof Delete){
+ astNodeType = actionSet.getAstNodeType();
+ List keysByValue = getKeysByValue(ASTNodeMap.map, astNodeType);
+
+ if(keysByValue.size() != 1){
+ log.error("More than 1");
+ }
+ newType = keysByValue.get(0);
+ }
+
+
+
+ if(actionSet.getParent() == null){
+ //root
+
+// parent = new Tree(newType,"");
+ parent = tc.createTree(newType, "", null);
+ tc.setRoot(parent);
+ }else{
+// children = new Tree(newType,"");
+// parent.addChild(children);
+ children = tc.createTree(newType, "", null);
+ children.setParentAndUpdateChildren(parent);
+ }
+ List subActions = actionSet.getSubActions();
+ if (subActions.size() != 0){
+ for (HierarchicalActionSet subAction : subActions) {
+
+ if(actionSet.getParent() == null){
+ children = parent;
+ }
+ getTargetTree(subAction,children,null,tc);
+
+ }
+
+
+ }
+ return parent;
+ }
+
public static ITree getASTTree(HierarchicalActionSet actionSet, ITree parent, ITree children, TreeContext tc){
int newType = 0;
@@ -163,25 +245,89 @@ public class EDiffHelper {
}
- public static ITree getShapes(String prefix, String fn, JedisPool outerPool) {
+ public static ITree getShapes(String prefix, String fn, JedisPool outerPool,JedisPool innerPool) {
ITree tree = null;
- Jedis inner = null;
- try {
- inner = outerPool.getResource();
- while (!inner.ping().equals("PONG")){
- log.info("wait");
+// Jedis inner = null;
+// Jedis outer = null;
+ try (Jedis inner = innerPool.getResource(); Jedis outer = outerPool.getResource()) {
+// inner = innerPool.getResource();
+ try {
+ while (!inner.ping().equals("PONG")) {
+ log.info("wait");
+ }
+ inner.select(1);
+ String dist2load = inner.get(prefix + "-" + fn);
+
+// outer = outerPool.getResource();
+ outer.select(0);
+ String key = prefix.replace("-", "/") + "/" + dist2load;
+ byte[] s = outer.get(key.getBytes());
+ HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromByteArray(s);
+
+ ITree parent = null;
+ ITree children = null;
+ TreeContext tc = new TreeContext();
+ tree = EDiffHelper.getASTTree(actionSet, parent, children, tc);
+ //tree.setParent(null);
+ tc.validate();
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
}
- inner.select(1);
- String dist2load = inner.get(prefix+"-"+fn);
- inner.select(0);
- String s = inner.get(prefix.replace("-","/") +"/"+dist2load);
- HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromString(s);
+ }
+// finally {
+// if (inner != null) {
+// inner.close();
+// }
+// if (outer != null) {
+// outer.close();
+// }
+// }
+ return tree;
+
+ }
+
+
+ public static ITree getTargets(String prefix, String fn, JedisPool outerPool,JedisPool innerPool) {
+
+ ITree tree = null;
+// Jedis inner = null;
+// Jedis outer = null;
+ try {
+ String dist2load = null;
+ String si = null;
+ try(Jedis inner = innerPool.getResource()){
+ inner.select(1);
+ dist2load = inner.get(prefix+"-"+fn);
+
+ }
+// while (!inner.ping().equals("PONG")){
+// log.info("wait");
+// }
+ try(Jedis outer = outerPool.getResource()){
+ outer.select(0);
+ String s = null;
+ Set keys = outer.keys(prefix.split("-")[0] + "/*/" + dist2load);
+ if (keys.size() == 1) {
+ s = (String) keys.toArray()[0];
+ } else {
+ throw new Error("cok key");
+ }
+ si = outer.get(s);
+
+ }
+
+
+// String filename = project + "/"+type+"/" + pureFileName + ".txt_" + actionSetPosition;
+ HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromString(si);
ITree parent = null;
ITree children =null;
TreeContext tc = new TreeContext();
- tree = EDiffHelper.getASTTree(actionSet, parent, children,tc);
+ tree = EDiffHelper.getTargetTree(actionSet, parent, children,tc);
//tree.setParent(null);
tc.validate();
@@ -189,43 +335,100 @@ public class EDiffHelper {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
- }finally {
- if (inner != null) {
- inner.close();
- }
}
return tree;
}
- public static ITree getActions(String prefix,String firstValue, JedisPool outerPool,JedisPool innerPool) {
+ public static ITree getTargets(HierarchicalActionSet actionSet) {
+
+ ITree tree = null;
+// Jedis inner = null;
+// Jedis outer = null;
+ try {
+// String dist2load = null;
+// String si = null;
+// try(Jedis inner = innerPool.getResource()){
+// inner.select(1);
+// dist2load = inner.get(prefix+"-"+fn);
+//
+// }
+//// while (!inner.ping().equals("PONG")){
+//// log.info("wait");
+//// }
+// try(Jedis outer = outerPool.getResource()){
+// outer.select(0);
+// String s = null;
+// Set keys = outer.keys(prefix.split("-")[0] + "/*/" + dist2load);
+// if (keys.size() == 1) {
+// s = (String) keys.toArray()[0];
+// } else {
+// throw new Error("cok key");
+// }
+// si = outer.get(s);
+//
+// }
+//
+//
+//// String filename = project + "/"+type+"/" + pureFileName + ".txt_" + actionSetPosition;
+// HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromString(si);
+
+ ITree parent = null;
+ ITree children =null;
+ TreeContext tc = new TreeContext();
+ tree = EDiffHelper.getTargetTree(actionSet, parent, children,tc);
+ //tree.setParent(null);
+ tc.validate();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+//
+// } catch (IOException e) {
+// e.printStackTrace();
+// } catch (ClassNotFoundException e) {
+// e.printStackTrace();
+// }
+ return tree;
+
+ }
+
+
+ public static Pair getActions(String prefix,String firstValue, JedisPool outerPool,JedisPool innerPool) {
ITree tree = null;
- Jedis inner = null;
- Jedis outer = null;
-
+// Jedis inner = null;
+// Jedis outer = null;
+ HierarchicalActionSet actionSet = null;
try {
- inner = innerPool.getResource();
- inner.select(1);
- String dist2load = inner.get(prefix + "-" + firstValue);
- outer = outerPool.getResource();
- outer.select(0);
- String s = null;//inner.get(prefix.replace("-","/") +"/"+dist2load);
- Set keys = outer.keys(prefix.split("-")[0] + "/*/" + dist2load);
- if (keys.size() == 1) {
- s = (String) keys.toArray()[0];
- } else {
- throw new Error("cok key");
- }
+ String dist2load = null;
+ byte[] si = null;
+ try (Jedis inner = innerPool.getResource();Jedis outer = outerPool.getResource()){
+ inner.select(1);
+ dist2load = inner.get(prefix + "-" + firstValue);
+
+ outer.select(0);
+ String[] split = prefix.split("-");
+ String s = null;//inner.get(prefix.replace("-","/") +"/"+dist2load);
+// Set keys = outer.keys(split[0] + "/"+split[1]+"/" + dist2load);
+ String key = split[0] + "/"+split[1]+"/" + dist2load;
+// if (keys.size() == 1) {
+// s = (String) keys.toArray()[0];
+// } else {
+// throw new Error("cok key");
+// }
+ si = outer.get(key.getBytes());
+
+// String key = prefix.replace("-", "/") + "/" + dist2load;
+// byte[] s = outer.get(key.getBytes());
+ actionSet = (HierarchicalActionSet) EDiffHelper.fromByteArray(si);
// String filename = project + "/"+type+"/" + pureFileName + ".txt_" + actionSetPosition;
- String si = outer.get(s);
- HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromString(si);
-
+// actionSet = (HierarchicalActionSet) EDiffHelper.fromString(si);
+ }
ITree parent = null;
ITree children = null;
@@ -239,45 +442,56 @@ public class EDiffHelper {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
- } finally {
- if (inner != null) {
- inner.close();
- }
- if (outer != null) {
- outer.close();
- }
}
-
- return tree;
+ Pair pair = new Pair<>(tree,actionSet);
+ return pair;
+// return tree;
}
+ public static void getLeaves(ITree tc){
+
+ int height = tc.getHeight();
+ if(height == 0){
+ log.info(tc.getLabel());
+ }else{
+ List children = tc.getChildren();
+ for (ITree child:children){
+ getLeaves(child);
+ }
+ }
+ }
public static ITree getTokens(String prefix,String firstValue, JedisPool outerPool,JedisPool innerPool) {
ITree tree = null;
- Jedis inner = null;
- Jedis outer = null;
+// Jedis inner = null;
+// Jedis outer = null;
-
- try {
- inner = innerPool.getResource();
+ try{
+ try (Jedis inner = innerPool.getResource();Jedis outer = outerPool.getResource()) {
+// inner = innerPool.getResource();
inner.select(1);
String dist2load = inner.get(prefix + "-" + firstValue);
- outer = outerPool.getResource();
+// outer = outerPool.getResource();
outer.select(0);
- String s = null;//inner.get(prefix.replace("-","/") +"/"+dist2load);
- Set keys = outer.keys(prefix.split("-")[0] + "/*/" + dist2load);
- if (keys.size() == 1) {
- s = (String) keys.toArray()[0];
- } else {
- throw new Error("cok key");
- }
+// String s = null;//inner.get(prefix.replace("-","/") +"/"+dist2load);
+// Set keys = outer.keys(prefix.split("-")[0] + "/*/" + dist2load);
+// if (keys.size() == 1) {
+// s = (String) keys.toArray()[0];
+// } else {
+// throw new Error("cok key");
+// }
// String filename = project + "/"+type+"/" + pureFileName + ".txt_" + actionSetPosition;
- String si = outer.get(s);
- HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromString(si);
+ String[] split = prefix.split("-");
+// String s = null;//inner.get(prefix.replace("-","/") +"/"+dist2load);
+// Set keys = outer.keys(split[0] + "/"+split[1]+"/" + dist2load);
+ String key = split[0] + "/"+split[1]+"/" + dist2load;
+ byte[] si = outer.get(key.getBytes());
+// HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromString(si);
+ HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromByteArray(si);
ITree parent = null;
@@ -286,21 +500,25 @@ public class EDiffHelper {
tree = EDiffHelper.getTokenTree(actionSet, parent, children, tc);
tree.setParent(null);
tc.validate();
+// getLeaves(tree);
+ }
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
- } finally {
- if (inner != null) {
- inner.close();
- }
- if (outer != null) {
- outer.close();
- }
}
+// finally {
+// if (inner != null) {
+// inner.close();
+// }
+// if (outer != null) {
+// outer.close();
+// }
+
+
return tree;
}
@@ -349,4 +567,150 @@ public class EDiffHelper {
}
return parent;
}
+
+
+ public static List retainLeaves(List trees) {
+ Iterator tIt = trees.iterator();
+ while (tIt.hasNext()) {
+ ITree t = tIt.next();
+ if (!t.isLeaf()) tIt.remove();
+ }
+ return trees;
+ }
+
+ public static String getTokenAtNode(ITree leaf,String token){
+// if (leaf.getParent() == null) {
+ String label = leaf.getLabel();
+ String key = label.split(String.valueOf(leaf.getType()))[0];
+ String group="";
+ Pattern pattern;
+ java.util.regex.Matcher matcher;
+
+ List parents;
+ List actionList = new ArrayList<>();
+ Set uniqueGas = new HashSet(actionList);
+ switch (key.trim()) {
+
+ case "DEL":
+ parents = leaf.getParents();
+
+ for (ITree parent : parents) {
+ String s = parent.getLabel().split(String.valueOf(parent.getType()))[0];
+ actionList.add(s);
+ }
+ actionList.add(key);
+
+ if (uniqueGas.size() == 1){
+ Optional first = parents.stream().filter(p -> p.isRoot()).findFirst();
+ if(first.isPresent()){
+ ITree parent = first.get();
+ label = parent.getLabel();
+ }
+ }
+
+ pattern = Pattern.compile(delPattern);
+ matcher = pattern.matcher(label);
+ if (matcher.matches()) {
+ group = matcher.group(2);
+
+ }
+ break;
+ case "INS":
+ parents = leaf.getParents();
+
+ for (ITree parent : parents) {
+ String s = parent.getLabel().split(String.valueOf(parent.getType()))[0];
+ actionList.add(s);
+ }
+ actionList.add(key);
+
+ if (uniqueGas.size() == 1){
+ Optional first = parents.stream().filter(p -> p.isRoot()).findFirst();
+ if(first.isPresent()){
+ ITree parent = first.get();
+ label = parent.getLabel();
+ }
+ }
+
+//
+ pattern = Pattern.compile(insPattern);
+ matcher = pattern.matcher(label);
+ if (matcher.matches()) {
+ group = matcher.group(2);// +" " + matcher.group(3);
+
+ }
+ break;
+ case "MOV":
+ parents = leaf.getParents();
+
+ for (ITree parent : parents) {
+ String s = parent.getLabel().split(String.valueOf(parent.getType()))[0];
+ actionList.add(s);
+ }
+ actionList.add(key);
+
+ if (uniqueGas.size() == 1){
+ Optional first = parents.stream().filter(p -> p.isRoot()).findFirst();
+ if(first.isPresent()){
+ ITree parent = first.get();
+ label = parent.getLabel();
+ }
+ }
+
+ pattern = Pattern.compile(movPattern);
+ matcher = pattern.matcher(label);
+ if (matcher.matches()) {
+ group = matcher.group(2);
+ String group1 = matcher.group(3);
+
+ }
+ break;
+ case "UPD":
+ pattern = Pattern.compile(updPattern);
+ matcher = pattern.matcher(label);
+ if (matcher.matches()) {
+ group = matcher.group(2) +" " + matcher.group(3);
+
+ }
+ break;
+
+ }
+ token = group;
+ return group;
+// }else{
+// getTokenAtNode(leaf.getParent(),token);
+// return token;
+// }
+ }
+
+ static String movPattern = "MOV (.*)@@(.*)@TO@ (.*)@@(.*)@AT@.*";
+ static String delPattern = "DEL (.*)@@(.*)@AT@.*";
+ static String insPattern = "INS (.*)@@(.*)@TO@ (.*)@@(.*)@AT@.*";
+ static String updPattern = "UPD (.*)@@(.*)@TO@(.*)@AT@.*";
+
+ public static String getNames2(ITree oldTree){
+
+ List leaves = retainLeaves(TreeUtils.postOrder(oldTree));
+ List res = new ArrayList<>();
+ String resu="";
+ for (ITree leaf : leaves) {
+ String tokenAtNode = getTokenAtNode(leaf, resu);
+
+ res.add(tokenAtNode);
+ }
+
+// log.info("s");
+
+ if (res.size() == 1){
+ final String regex = "MethodName:([a-zA-Z0-9]+):.*MethodName:([a-zA-Z0-9]+):.*";
+ Pattern compile = Pattern.compile(regex);
+ Matcher matcher = compile.matcher(res.get(0));
+ if(matcher.matches()){
+ res.set(0,matcher.group(1) +" " + matcher.group(2));
+ }
+ }
+
+ return String.join(" ",res);
+
+ }
}
diff --git a/src/main/java/edu/lu/uni/serval/utils/PoolBuilder.java b/src/main/java/edu/lu/uni/serval/utils/PoolBuilder.java
old mode 100644
new mode 100755
index 31562f2..ce78ca5
--- a/src/main/java/edu/lu/uni/serval/utils/PoolBuilder.java
+++ b/src/main/java/edu/lu/uni/serval/utils/PoolBuilder.java
@@ -15,19 +15,23 @@ public class PoolBuilder {
static final JedisPoolConfig poolConfig = buildPoolConfig();
+
+
+
private static JedisPoolConfig buildPoolConfig() {
final JedisPoolConfig poolConfig = new JedisPoolConfig();
- poolConfig.setMaxTotal(128);
- poolConfig.setMaxIdle(128);
- poolConfig.setMinIdle(16);
- poolConfig.setTestOnBorrow(true);
- poolConfig.setTestOnReturn(true);
- poolConfig.setTestWhileIdle(true);
+ poolConfig.setMaxTotal(1024);
+ poolConfig.setMaxIdle(1024);
+// poolConfig.setMinIdle(16);
+// poolConfig.setTestOnBorrow(true);
+// poolConfig.setTestOnReturn(true);
+// poolConfig.setTestWhileIdle(true);
poolConfig.setMinEvictableIdleTimeMillis(Duration.ofMinutes(60).toMillis());
poolConfig.setTimeBetweenEvictionRunsMillis(Duration.ofHours(30).toMillis());
poolConfig.setNumTestsPerEvictionRun(3);
poolConfig.setBlockWhenExhausted(true);
+
return poolConfig;
}
}
diff --git a/src/main/resource/app.properties b/src/main/resource/app.properties
old mode 100644
new mode 100755
diff --git a/src/main/resource/logback.xml b/src/main/resource/logback.xml
old mode 100644
new mode 100755
diff --git a/src/test/java/edu/lu/uni/serval/FixPatternMiner/AppTest.java b/src/test/java/edu/lu/uni/serval/FixPatternMiner/AppTest.java
old mode 100644
new mode 100755