trackler 2.2.1.84 → 2.2.1.85
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/problem-specifications/exercises/atbash-cipher/canonical-data.json +38 -14
- data/problem-specifications/exercises/bracket-push/canonical-data.json +44 -16
- data/problem-specifications/exercises/change/canonical-data.json +46 -24
- data/problem-specifications/exercises/collatz-conjecture/canonical-data.json +20 -8
- data/problem-specifications/exercises/connect/canonical-data.json +87 -67
- data/problem-specifications/exercises/crypto-square/canonical-data.json +23 -9
- data/problem-specifications/exercises/diamond/canonical-data.json +16 -6
- data/problem-specifications/exercises/difference-of-squares/canonical-data.json +29 -11
- data/problem-specifications/exercises/dominoes/canonical-data.json +37 -13
- data/problem-specifications/exercises/flatten-array/canonical-data.json +19 -7
- data/problem-specifications/exercises/meetup/canonical-data.json +667 -477
- data/tracks/haskell/config.json +9 -0
- data/tracks/haskell/docs/LEARNING.md +3 -3
- data/tracks/haskell/exercises/food-chain/examples/success-standard/src/FoodChain.hs +1 -1
- data/tracks/haskell/exercises/forth/examples/success-standard/src/Forth.hs +2 -2
- data/tracks/haskell/exercises/parallel-letter-frequency/examples/success-standard/src/Frequency.hs +1 -1
- data/tracks/haskell/exercises/sgf-parsing/examples/success-standard/src/Sgf.hs +1 -1
- data/tracks/haskell/exercises/twelve-days/README.md +89 -0
- data/tracks/haskell/exercises/twelve-days/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/twelve-days/examples/success-standard/src/TwelveDays.hs +36 -0
- data/tracks/haskell/exercises/twelve-days/package.yaml +20 -0
- data/tracks/haskell/exercises/twelve-days/src/TwelveDays.hs +4 -0
- data/tracks/haskell/exercises/twelve-days/stack.yaml +1 -0
- data/tracks/haskell/exercises/twelve-days/test/Tests.hs +146 -0
- data/tracks/haskell/exercises/zipper/examples/success-standard/src/Zipper.hs +3 -3
- data/tracks/java/exercises/allergies/.meta/version +2 -0
- data/tracks/java/exercises/allergies/src/test/java/AllergiesTest.java +10 -65
- data/tracks/java/exercises/anagram/.meta/version +1 -0
- data/tracks/java/exercises/anagram/src/test/java/AnagramTest.java +36 -35
- data/tracks/java/exercises/atbash-cipher/.meta/version +1 -0
- data/tracks/java/exercises/atbash-cipher/src/test/java/AtbashTest.java +3 -2
- data/tracks/java/exercises/bob/.meta/src/reference/java/Bob.java +3 -0
- data/tracks/java/exercises/bob/.meta/version +1 -0
- data/tracks/java/exercises/bob/src/test/java/BobTest.java +79 -15
- data/tracks/java/exercises/crypto-square/.meta/src/reference/java/CryptoSquare.java +62 -0
- data/tracks/java/exercises/crypto-square/.meta/version +1 -0
- data/tracks/java/exercises/crypto-square/src/test/java/CryptoSquareTest.java +28 -101
- data/tracks/java/exercises/custom-set/.meta/version +1 -1
- data/tracks/java/exercises/custom-set/src/test/java/CustomSetTest.java +8 -0
- data/tracks/java/exercises/forth/.meta/version +1 -1
- data/tracks/java/exercises/forth/src/test/java/ForthEvaluatorTest.java +52 -12
- data/tracks/java/exercises/pascals-triangle/.meta/version +1 -1
- data/tracks/java/exercises/pascals-triangle/src/test/java/PascalsTriangleGeneratorTest.java +48 -0
- data/tracks/java/exercises/prime-factors/.meta/version +1 -0
- data/tracks/java/exercises/prime-factors/src/test/java/PrimeFactorsCalculatorTest.java +2 -6
- data/tracks/java/exercises/protein-translation/.meta/version +1 -1
- data/tracks/java/exercises/roman-numerals/.meta/version +1 -0
- data/tracks/java/exercises/roman-numerals/src/test/java/RomanNumeralsTest.java +0 -1
- data/tracks/java/exercises/rotational-cipher/.meta/version +1 -0
- data/tracks/java/exercises/rotational-cipher/src/test/java/RotationalCipherTest.java +7 -7
- data/tracks/javascript/.eslintignore +0 -1
- data/tracks/javascript/README.md +1 -1
- data/tracks/javascript/exercises/clock/example.js +8 -11
- metadata +18 -3
- data/tracks/java/exercises/crypto-square/.meta/src/reference/java/Crypto.java +0 -74
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7892432156062540719c56c731f29a416cd4bbbc
|
|
4
|
+
data.tar.gz: be05d71f796bc3f7b829b2d5c09f5f02d91ddd4c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 77e24716ea69a1a4603e27d4432d633f2c2420b9dbc929a41e706adf9b89c23eae10b3a9db02fa179305e6e294582766f7794525798a149e6a082f4bec9a4a72
|
|
7
|
+
data.tar.gz: 6cf193ad2f4aaa78be8aeaaee7f3e7c694cfde813bd573d89f1753fadb9fd8d9f67991b35dad8e821174cca8a1d556eb916994f3190bc78f79b90e587690127c
|
data/lib/trackler/version.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"exercise": "atbash-cipher",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"comments": [
|
|
5
5
|
"The tests are divided into two groups: ",
|
|
6
6
|
"* Encoding from English to atbash cipher",
|
|
@@ -14,49 +14,65 @@
|
|
|
14
14
|
{
|
|
15
15
|
"description": "encode yes",
|
|
16
16
|
"property": "encode",
|
|
17
|
-
"
|
|
17
|
+
"input": {
|
|
18
|
+
"phrase": "yes"
|
|
19
|
+
},
|
|
18
20
|
"expected": "bvh"
|
|
19
21
|
},
|
|
20
22
|
{
|
|
21
23
|
"description": "encode no",
|
|
22
24
|
"property": "encode",
|
|
23
|
-
"
|
|
25
|
+
"input": {
|
|
26
|
+
"phrase": "no"
|
|
27
|
+
},
|
|
24
28
|
"expected": "ml"
|
|
25
29
|
},
|
|
26
30
|
{
|
|
27
31
|
"description": "encode OMG",
|
|
28
32
|
"property": "encode",
|
|
29
|
-
"
|
|
33
|
+
"input": {
|
|
34
|
+
"phrase": "OMG"
|
|
35
|
+
},
|
|
30
36
|
"expected": "lnt"
|
|
31
37
|
},
|
|
32
38
|
{
|
|
33
39
|
"description": "encode spaces",
|
|
34
40
|
"property": "encode",
|
|
35
|
-
"
|
|
41
|
+
"input": {
|
|
42
|
+
"phrase": "O M G"
|
|
43
|
+
},
|
|
36
44
|
"expected": "lnt"
|
|
37
45
|
},
|
|
38
46
|
{
|
|
39
47
|
"description": "encode mindblowingly",
|
|
40
48
|
"property": "encode",
|
|
41
|
-
"
|
|
49
|
+
"input": {
|
|
50
|
+
"phrase": "mindblowingly"
|
|
51
|
+
},
|
|
42
52
|
"expected": "nrmwy oldrm tob"
|
|
43
53
|
},
|
|
44
54
|
{
|
|
45
55
|
"description": "encode numbers",
|
|
46
56
|
"property": "encode",
|
|
47
|
-
"
|
|
57
|
+
"input": {
|
|
58
|
+
"phrase": "Testing,1 2 3, testing."
|
|
59
|
+
},
|
|
48
60
|
"expected": "gvhgr mt123 gvhgr mt"
|
|
49
61
|
},
|
|
50
62
|
{
|
|
51
63
|
"description": "encode deep thought",
|
|
52
64
|
"property": "encode",
|
|
53
|
-
"
|
|
65
|
+
"input": {
|
|
66
|
+
"phrase": "Truth is fiction."
|
|
67
|
+
},
|
|
54
68
|
"expected": "gifgs rhurx grlm"
|
|
55
69
|
},
|
|
56
70
|
{
|
|
57
71
|
"description": "encode all the letters",
|
|
58
72
|
"property": "encode",
|
|
59
|
-
"
|
|
73
|
+
"input": {
|
|
74
|
+
"phrase": "The quick brown fox jumps over the lazy dog."
|
|
75
|
+
},
|
|
60
76
|
"expected": "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt"
|
|
61
77
|
}
|
|
62
78
|
]
|
|
@@ -68,28 +84,36 @@
|
|
|
68
84
|
{
|
|
69
85
|
"description": "decode exercism",
|
|
70
86
|
"property": "decode",
|
|
71
|
-
"
|
|
87
|
+
"input": {
|
|
88
|
+
"phrase": "vcvix rhn"
|
|
89
|
+
},
|
|
72
90
|
"expected": "exercism"
|
|
73
91
|
},
|
|
74
92
|
{
|
|
75
93
|
"description": "decode a sentence",
|
|
76
94
|
"property": "decode",
|
|
77
|
-
"
|
|
95
|
+
"input": {
|
|
96
|
+
"phrase": "zmlyh gzxov rhlug vmzhg vkkrm thglm v"
|
|
97
|
+
},
|
|
78
98
|
"expected": "anobstacleisoftenasteppingstone"
|
|
79
99
|
},
|
|
80
100
|
{
|
|
81
101
|
"description": "decode numbers",
|
|
82
102
|
"property": "decode",
|
|
83
|
-
"
|
|
103
|
+
"input": {
|
|
104
|
+
"phrase": "gvhgr mt123 gvhgr mt"
|
|
105
|
+
},
|
|
84
106
|
"expected": "testing123testing"
|
|
85
107
|
},
|
|
86
108
|
{
|
|
87
109
|
"description": "decode all the letters",
|
|
88
110
|
"property": "decode",
|
|
89
|
-
"
|
|
111
|
+
"input": {
|
|
112
|
+
"phrase": "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt"
|
|
113
|
+
},
|
|
90
114
|
"expected": "thequickbrownfoxjumpsoverthelazydog"
|
|
91
115
|
}
|
|
92
116
|
]
|
|
93
117
|
}
|
|
94
118
|
]
|
|
95
|
-
}
|
|
119
|
+
}
|
|
@@ -1,90 +1,118 @@
|
|
|
1
1
|
{
|
|
2
2
|
"exercise": "bracket-push",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"cases": [
|
|
5
5
|
{
|
|
6
6
|
"description": "paired square brackets",
|
|
7
7
|
"property": "isPaired",
|
|
8
|
-
"input":
|
|
8
|
+
"input": {
|
|
9
|
+
"value": "[]"
|
|
10
|
+
},
|
|
9
11
|
"expected": true
|
|
10
12
|
},
|
|
11
13
|
{
|
|
12
14
|
"description": "empty string",
|
|
13
15
|
"property": "isPaired",
|
|
14
|
-
"input":
|
|
16
|
+
"input": {
|
|
17
|
+
"value": ""
|
|
18
|
+
},
|
|
15
19
|
"expected": true
|
|
16
20
|
},
|
|
17
21
|
{
|
|
18
22
|
"description": "unpaired brackets",
|
|
19
23
|
"property": "isPaired",
|
|
20
|
-
"input":
|
|
24
|
+
"input": {
|
|
25
|
+
"value": "[["
|
|
26
|
+
},
|
|
21
27
|
"expected": false
|
|
22
28
|
},
|
|
23
29
|
{
|
|
24
30
|
"description": "wrong ordered brackets",
|
|
25
31
|
"property": "isPaired",
|
|
26
|
-
"input":
|
|
32
|
+
"input": {
|
|
33
|
+
"value": "}{"
|
|
34
|
+
},
|
|
27
35
|
"expected": false
|
|
28
36
|
},
|
|
29
37
|
{
|
|
30
38
|
"description": "wrong closing bracket",
|
|
31
39
|
"property": "isPaired",
|
|
32
|
-
"input":
|
|
40
|
+
"input": {
|
|
41
|
+
"value": "{]"
|
|
42
|
+
},
|
|
33
43
|
"expected": false
|
|
34
44
|
},
|
|
35
45
|
{
|
|
36
46
|
"description": "paired with whitespace",
|
|
37
47
|
"property": "isPaired",
|
|
38
|
-
"input":
|
|
48
|
+
"input": {
|
|
49
|
+
"value": "{ }"
|
|
50
|
+
},
|
|
39
51
|
"expected": true
|
|
40
52
|
},
|
|
41
53
|
{
|
|
42
54
|
"description": "simple nested brackets",
|
|
43
55
|
"property": "isPaired",
|
|
44
|
-
"input":
|
|
56
|
+
"input": {
|
|
57
|
+
"value": "{[]}"
|
|
58
|
+
},
|
|
45
59
|
"expected": true
|
|
46
60
|
},
|
|
47
61
|
{
|
|
48
62
|
"description": "several paired brackets",
|
|
49
63
|
"property": "isPaired",
|
|
50
|
-
"input":
|
|
64
|
+
"input": {
|
|
65
|
+
"value": "{}[]"
|
|
66
|
+
},
|
|
51
67
|
"expected": true
|
|
52
68
|
},
|
|
53
69
|
{
|
|
54
70
|
"description": "paired and nested brackets",
|
|
55
71
|
"property": "isPaired",
|
|
56
|
-
"input":
|
|
72
|
+
"input": {
|
|
73
|
+
"value": "([{}({}[])])"
|
|
74
|
+
},
|
|
57
75
|
"expected": true
|
|
58
76
|
},
|
|
59
77
|
{
|
|
60
78
|
"description": "unopened closing brackets",
|
|
61
79
|
"property": "isPaired",
|
|
62
|
-
"input":
|
|
80
|
+
"input": {
|
|
81
|
+
"value": "{[)][]}"
|
|
82
|
+
},
|
|
63
83
|
"expected": false
|
|
64
84
|
},
|
|
65
85
|
{
|
|
66
86
|
"description": "unpaired and nested brackets",
|
|
67
87
|
"property": "isPaired",
|
|
68
|
-
"input":
|
|
88
|
+
"input": {
|
|
89
|
+
"value": "([{])"
|
|
90
|
+
},
|
|
69
91
|
"expected": false
|
|
70
92
|
},
|
|
71
93
|
{
|
|
72
94
|
"description": "paired and wrong nested brackets",
|
|
73
95
|
"property": "isPaired",
|
|
74
|
-
"input":
|
|
96
|
+
"input": {
|
|
97
|
+
"value": "[({]})"
|
|
98
|
+
},
|
|
75
99
|
"expected": false
|
|
76
100
|
},
|
|
77
101
|
{
|
|
78
102
|
"description": "math expression",
|
|
79
103
|
"property": "isPaired",
|
|
80
|
-
"input":
|
|
104
|
+
"input": {
|
|
105
|
+
"value": "(((185 + 223.85) * 15) - 543)/2"
|
|
106
|
+
},
|
|
81
107
|
"expected": true
|
|
82
108
|
},
|
|
83
109
|
{
|
|
84
110
|
"description": "complex latex expression",
|
|
85
111
|
"property": "isPaired",
|
|
86
|
-
"input":
|
|
112
|
+
"input": {
|
|
113
|
+
"value": "\\left(\\begin{array}{cc} \\frac{1}{3} & x\\\\ \\mathrm{e}^{x} &... x^2 \\end{array}\\right)"
|
|
114
|
+
},
|
|
87
115
|
"expected": true
|
|
88
116
|
}
|
|
89
117
|
]
|
|
90
|
-
}
|
|
118
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"exercise": "change",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"comments": [
|
|
5
5
|
"Given an infinite supply of coins with different values, ",
|
|
6
6
|
"find the smallest number of coins needed to make a desired ",
|
|
@@ -10,36 +10,46 @@
|
|
|
10
10
|
{
|
|
11
11
|
"description": "single coin change",
|
|
12
12
|
"property": "findFewestCoins",
|
|
13
|
-
"
|
|
14
|
-
|
|
13
|
+
"input": {
|
|
14
|
+
"coins": [1, 5, 10, 25, 100],
|
|
15
|
+
"target": 25
|
|
16
|
+
},
|
|
15
17
|
"expected": [25]
|
|
16
18
|
},
|
|
17
19
|
{
|
|
18
20
|
"description": "multiple coin change",
|
|
19
21
|
"property": "findFewestCoins",
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
+
"input": {
|
|
23
|
+
"coins": [1, 5, 10, 25, 100],
|
|
24
|
+
"target": 15
|
|
25
|
+
},
|
|
22
26
|
"expected": [5, 10]
|
|
23
27
|
},
|
|
24
28
|
{
|
|
25
29
|
"description": "change with Lilliputian Coins",
|
|
26
30
|
"property": "findFewestCoins",
|
|
27
|
-
"
|
|
28
|
-
|
|
31
|
+
"input": {
|
|
32
|
+
"coins": [1, 4, 15, 20, 50],
|
|
33
|
+
"target": 23
|
|
34
|
+
},
|
|
29
35
|
"expected": [4, 4, 15]
|
|
30
36
|
},
|
|
31
37
|
{
|
|
32
38
|
"description": "change with Lower Elbonia Coins",
|
|
33
39
|
"property": "findFewestCoins",
|
|
34
|
-
"
|
|
35
|
-
|
|
40
|
+
"input": {
|
|
41
|
+
"coins": [1, 5, 10, 21, 25],
|
|
42
|
+
"target": 63
|
|
43
|
+
},
|
|
36
44
|
"expected": [21, 21, 21]
|
|
37
45
|
},
|
|
38
46
|
{
|
|
39
47
|
"description": "large target values",
|
|
40
48
|
"property": "findFewestCoins",
|
|
41
|
-
"
|
|
42
|
-
|
|
49
|
+
"input": {
|
|
50
|
+
"coins": [1, 2, 5, 10, 20, 50, 100],
|
|
51
|
+
"target": 999
|
|
52
|
+
},
|
|
43
53
|
"expected": [ 2, 2, 5, 20, 20
|
|
44
54
|
, 50, 100, 100, 100, 100
|
|
45
55
|
, 100, 100, 100, 100, 100 ]
|
|
@@ -47,44 +57,56 @@
|
|
|
47
57
|
{
|
|
48
58
|
"description": "possible change without unit coins available",
|
|
49
59
|
"property": "findFewestCoins",
|
|
50
|
-
"
|
|
51
|
-
|
|
60
|
+
"input": {
|
|
61
|
+
"coins": [2, 5, 10, 20, 50],
|
|
62
|
+
"target": 21
|
|
63
|
+
},
|
|
52
64
|
"expected": [2, 2, 2, 5, 10]
|
|
53
65
|
},
|
|
54
66
|
{
|
|
55
67
|
"description": "another possible change without unit coins available",
|
|
56
68
|
"property": "findFewestCoins",
|
|
57
|
-
"
|
|
58
|
-
|
|
69
|
+
"input": {
|
|
70
|
+
"coins": [4, 5],
|
|
71
|
+
"target": 27
|
|
72
|
+
},
|
|
59
73
|
"expected": [4, 4, 4, 5, 5, 5]
|
|
60
74
|
},
|
|
61
75
|
{
|
|
62
76
|
"description": "no coins make 0 change",
|
|
63
77
|
"property": "findFewestCoins",
|
|
64
|
-
"
|
|
65
|
-
|
|
78
|
+
"input": {
|
|
79
|
+
"coins": [1, 5, 10, 21, 25],
|
|
80
|
+
"target": 0
|
|
81
|
+
},
|
|
66
82
|
"expected": []
|
|
67
83
|
},
|
|
68
84
|
{
|
|
69
85
|
"description": "error testing for change smaller than the smallest of coins",
|
|
70
86
|
"property": "findFewestCoins",
|
|
71
|
-
"
|
|
72
|
-
|
|
87
|
+
"input": {
|
|
88
|
+
"coins": [5, 10],
|
|
89
|
+
"target": 3
|
|
90
|
+
},
|
|
73
91
|
"expected": -1
|
|
74
92
|
},
|
|
75
93
|
{
|
|
76
94
|
"description": "error if no combination can add up to target",
|
|
77
95
|
"property": "findFewestCoins",
|
|
78
|
-
"
|
|
79
|
-
|
|
96
|
+
"input": {
|
|
97
|
+
"coins": [5, 10],
|
|
98
|
+
"target": 94
|
|
99
|
+
},
|
|
80
100
|
"expected": -1
|
|
81
101
|
},
|
|
82
102
|
{
|
|
83
103
|
"description": "cannot find negative change values",
|
|
84
104
|
"property": "findFewestCoins",
|
|
85
|
-
"
|
|
86
|
-
|
|
105
|
+
"input": {
|
|
106
|
+
"coins": [1, 2, 5],
|
|
107
|
+
"target": -5
|
|
108
|
+
},
|
|
87
109
|
"expected": -1
|
|
88
110
|
}
|
|
89
111
|
]
|
|
90
|
-
}
|
|
112
|
+
}
|
|
@@ -1,42 +1,54 @@
|
|
|
1
1
|
{
|
|
2
2
|
"exercise": "collatz-conjecture",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"cases": [
|
|
5
5
|
{
|
|
6
6
|
"description": "zero steps for one",
|
|
7
7
|
"property": "steps",
|
|
8
|
-
"
|
|
8
|
+
"input": {
|
|
9
|
+
"number": 1
|
|
10
|
+
},
|
|
9
11
|
"expected": 0
|
|
10
12
|
},
|
|
11
13
|
{
|
|
12
14
|
"description": "divide if even",
|
|
13
15
|
"property": "steps",
|
|
14
|
-
"
|
|
16
|
+
"input": {
|
|
17
|
+
"number": 16
|
|
18
|
+
},
|
|
15
19
|
"expected": 4
|
|
16
20
|
},
|
|
17
21
|
{
|
|
18
22
|
"description": "even and odd steps",
|
|
19
23
|
"property": "steps",
|
|
20
|
-
"
|
|
24
|
+
"input": {
|
|
25
|
+
"number": 12
|
|
26
|
+
},
|
|
21
27
|
"expected": 9
|
|
22
28
|
},
|
|
23
29
|
{
|
|
24
30
|
"description": "Large number of even and odd steps",
|
|
25
31
|
"property": "steps",
|
|
26
|
-
"
|
|
32
|
+
"input": {
|
|
33
|
+
"number": 1000000
|
|
34
|
+
},
|
|
27
35
|
"expected": 152
|
|
28
36
|
},
|
|
29
37
|
{
|
|
30
38
|
"description": "zero is an error",
|
|
31
39
|
"property": "steps",
|
|
32
|
-
"
|
|
40
|
+
"input": {
|
|
41
|
+
"number": 0
|
|
42
|
+
},
|
|
33
43
|
"expected": { "error": "Only positive numbers are allowed" }
|
|
34
44
|
},
|
|
35
45
|
{
|
|
36
46
|
"description": "negative value is an error",
|
|
37
47
|
"property": "steps",
|
|
38
|
-
"
|
|
48
|
+
"input": {
|
|
49
|
+
"number": -15
|
|
50
|
+
},
|
|
39
51
|
"expected": { "error": "Only positive numbers are allowed" }
|
|
40
52
|
}
|
|
41
53
|
]
|
|
42
|
-
}
|
|
54
|
+
}
|