Skip to content

Commit ca74dcb

Browse files
jmorice91JAuriac
andauthored
fix #26, update ex7 ex8 (#28)
Update ex7 ex8 --------- Co-authored-by: JAuriac <[email protected]>
1 parent 9707882 commit ca74dcb

File tree

9 files changed

+659
-309
lines changed

9 files changed

+659
-309
lines changed

README.md

+34-18
Original file line numberDiff line numberDiff line change
@@ -340,60 +340,76 @@ then triggers an event and finally does all the reclaim in reverse order.
340340
diff ex6.log <(grep Trace-plugin ex6.result.log)
341341
```
342342

343-
344343
### Ex7. Writing a selection
345344

346345
In this exercise, you will only write a selection of the 2D array in memory
347346
excluding ghosts to the HDF5 file.
348347
Once again, you only need to modify the YAML file in this exercise, no need to
349348
touch the C file.
350349

350+
\remark This exercise will run with 4 MPI processes.
351+
351352
* Examine the YAML file and compile the code.
352353

353354
As you can notice, now the dataset is independently described in the file.
354355

355356
* Restrict the selection to the non-ghost part of the array in memory (excluding
356357
one element on each side).
357-
You should be able to match the expected output described in `ex7.h5dump`.
358-
You can easily check if the files are the same by running:
358+
359+
You can achieve this by using the `memory_selection` directive in ex7.yml that
360+
specifies the selection of data from memory to write.
361+
362+
You should be able to match the expected output described in `ex7.h5dump`.
363+
You can easily check if the files are the same by running:
359364
```bash
360365
diff ex7.h5dump <(h5dump ex7*.h5)
361366
```
362-
363-
You can achieve this by using the `memory_selection` directive that specifies
364-
the selection of data from memory to write.
367+
To see your `h5` file in readable file format,
368+
you can check the section [Comparison with the `h5dump` command](#h5comparison).
365369

366370
![graphical representation](PDI_hdf5_selection.jpg)
367371

368-
369372
### Ex8. Selecting on the dataset size
370373

371374
In this exercise, you will once again change the YAML file to handle a selection
372375
in the dataset in addition to the selection in memory from the previous
373376
exercise.
374-
You will write the 2D array from the previous exercise as a slice of 3D dataset
375-
including a dimension for time.
377+
In this exercise, you don't want to get one output file per iteration.
378+
You will write the 2D array from the previous exercise as a slice of a 3D dataset
379+
including a time dimension for iterations 1 to 3 (inclusive).
380+
376381
Once again, you only need to modify the YAML file in this exercise, no need to
377382
touch the C file.
378383

379384
* Examine the YAML file and compile the code.
380385

381-
Notice how the dataset is now extended with an additional dimension for three
382-
time-steps.
386+
Notice how the dataset is extended with an additional dimension
387+
```yaml
388+
datasets:
389+
#*** add one dimention to main_field datasets to represent the time step
390+
main_field: { type: array, subtype: double, size: [..., '$dsize[0]-2', '$dsize[1]-2' ] }
391+
```
392+
393+
* replace `...` in previous line by the number of iteration time, we want to save
394+
in this exercise.
395+
396+
* Change the `when` directive to write the `main_field` at iterations 1 to 3 inclusive.
383397

384398
* Write the 2D selection from `main_field` at iterations 1 to 3 inclusive into
385-
slices at coordinate 0 to 2 of first dimension of the 3D dataset.
386-
Match the expected output described in `ex8.h5dump`. You can easily check if
387-
the files are the same by running:
388-
```bash
389-
diff ex8.h5dump <(h5dump ex8*.h5)
390-
```
399+
slices at coordinate 0 to 2 of the first dimension of the 3D dataset.
391400

392401
You can achieve this by using the `dataset_selection` directive that specifies
393402
the selection where to write in the file dataset.
394403

395-
![graphical representation](PDI_hdf5_selection_advanced.jpg)
404+
You should be able to match the expected output described in `ex8.h5dump`.
405+
You can easily check if the files are the same by running:
406+
```bash
407+
diff ex8.h5dump <(h5dump ex8*.h5)
408+
```
409+
To see your `h5` file in readable file format, you can check the section
410+
[Comparison with the `h5dump` command](#h5comparison).
396411

412+
![graphical representation](PDI_hdf5_selection_advanced.jpg)
397413

398414
## parallel Decl'HDF5
399415

ex7.c

+26-15
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,32 @@ int pcoord[2];
4444
/// the alpha coefficient used in the computation
4545
double alpha;
4646

47+
double L=1.0;
48+
double source1[4]={0.4, 0.4, 0.2, 100};
49+
double source2[4]={0.7, 0.8, 0.1, 200};
50+
4751
/** Initialize the data all to 0 except for the left border (XX==0) initialized to 1 million
4852
* \param[out] dat the local data to initialize
4953
*/
5054
void init(double dat[dsize[0]][dsize[1]])
5155
{
5256
for (int yy=0; yy<dsize[0]; ++yy) for (int xx=0; xx<dsize[1]; ++xx) dat[yy][xx] = 0;
53-
if ( pcoord[1] == 0 ) for (int yy=0; yy<dsize[0]; ++yy) dat[yy][0] = 1000000;
57+
double dy = L / ((dsize[0]-2) *psize[0]) ;
58+
double dx = L / ((dsize[1]-2) *psize[1]) ;
59+
60+
double cpos_x,cpos_y;
61+
for(int yy=0; yy<dsize[0];++yy) {
62+
cpos_y=(yy+pcoord[0]*(dsize[0]-2))*dy-0.5*dy;
63+
for(int xx=0; xx<dsize[1];++xx) {
64+
cpos_x=(xx+pcoord[1]*(dsize[1]-2))*dx-0.5*dx;
65+
if((cpos_y-source1[0])*(cpos_y-source1[0]) + (cpos_x-source1[1])*(cpos_x-source1[1]) <= source1[2]*source1[2]) {
66+
dat[yy][xx] = source1[3];
67+
}
68+
if((cpos_y-source2[0])*(cpos_y-source2[0]) + (cpos_x-source2[1])*(cpos_x-source2[1]) <= source2[2]*source2[2]) {
69+
dat[yy][xx] = source2[3];
70+
}
71+
}
72+
}
5473
}
5574

5675
/** Compute the values at the next time-step based on the values at the current time-step
@@ -60,21 +79,15 @@ void init(double dat[dsize[0]][dsize[1]])
6079
void iter(double cur[dsize[0]][dsize[1]], double next[dsize[0]][dsize[1]])
6180
{
6281
int xx, yy;
63-
for (xx=0; xx<dsize[1]; ++xx) next[0][xx] = cur[0][xx];
6482
for (yy=1; yy<dsize[0]-1; ++yy) {
65-
next[yy][0] = cur[yy][0];
6683
for (xx=1; xx<dsize[1]-1; ++xx) {
67-
next[yy][xx] =
68-
(1.-4.*alpha) * cur[yy][xx]
69-
+ alpha * ( cur[yy][xx-1]
70-
+ cur[yy][xx+1]
71-
+ cur[yy-1][xx]
72-
+ cur[yy+1][xx]
73-
);
84+
next[yy][xx] = (1.-4.*alpha) * cur[yy][xx]
85+
+alpha * ( cur[yy][xx-1]
86+
+ cur[yy][xx+1]
87+
+ cur[yy-1][xx]
88+
+ cur[yy+1][xx]);
7489
}
75-
next[yy][dsize[1]-1] = cur[yy][dsize[1]-1];
7690
}
77-
for (xx=0; xx<dsize[1]; ++xx) next[dsize[0]-1][xx] = cur[dsize[0]-1][xx];
7891
}
7992

8093
/** Exchanges ghost values with neighbours
@@ -162,7 +175,7 @@ int main( int argc, char* argv[] )
162175
dsize[1] = global_size[1]/psize[1] + 2;
163176

164177
// create a 2D Cartesian MPI communicator & get our coordinate (rank) in it
165-
int cart_period[2] = { 0, 0 };
178+
int cart_period[2] = { 1, 1 };
166179
MPI_Comm cart_comm; MPI_Cart_create(main_comm, 2, psize, cart_period, 1, &cart_comm);
167180
MPI_Cart_coords(cart_comm, pcoord_1d, 2, pcoord);
168181

@@ -178,11 +191,9 @@ int main( int argc, char* argv[] )
178191
int ii=0;
179192

180193
// share useful configuration bits with PDI
181-
PDI_expose("ii", &ii, PDI_OUT);
182194
PDI_expose("pcoord", pcoord, PDI_OUT);
183195
PDI_expose("dsize", dsize, PDI_OUT);
184196
PDI_expose("psize", psize, PDI_OUT);
185-
PDI_expose("main_field", cur, PDI_OUT);
186197

187198
// the main loop
188199
for (; ii<10; ++ii) {

ex7.h5dump

+152-62
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,159 @@
1-
HDF5 "ex7-data0x0.h5" {
1+
HDF5 "ex7-data-0x0_iter_1.h5" {
22
GROUP "/" {
33
DATASET "main_field" {
44
DATATYPE H5T_IEEE_F64LE
5-
DATASPACE SIMPLE { ( 60, 12 ) / ( 60, 12 ) }
5+
DATASPACE SIMPLE { ( 30, 6 ) / ( 30, 6 ) }
66
DATA {
7-
(0,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8-
(1,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9-
(2,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10-
(3,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11-
(4,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12-
(5,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
13-
(6,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14-
(7,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15-
(8,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
16-
(9,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
17-
(10,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18-
(11,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
19-
(12,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
20-
(13,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
21-
(14,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
22-
(15,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
23-
(16,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
24-
(17,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
25-
(18,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
26-
(19,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
27-
(20,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
28-
(21,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
29-
(22,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
30-
(23,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
31-
(24,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
32-
(25,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
33-
(26,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
34-
(27,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
35-
(28,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
36-
(29,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
37-
(30,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
38-
(31,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
39-
(32,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
40-
(33,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
41-
(34,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
42-
(35,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
43-
(36,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
44-
(37,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
45-
(38,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
46-
(39,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47-
(40,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
48-
(41,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
49-
(42,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
50-
(43,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
51-
(44,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
52-
(45,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
53-
(46,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
54-
(47,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
55-
(48,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
56-
(49,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
57-
(50,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
58-
(51,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
59-
(52,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
60-
(53,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
61-
(54,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
62-
(55,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
63-
(56,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
64-
(57,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
65-
(58,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
66-
(59,0): 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
7+
(0,0): 0, 0, 0, 0, 0, 0,
8+
(1,0): 0, 0, 0, 0, 0, 0,
9+
(2,0): 0, 0, 0, 0, 0, 0,
10+
(3,0): 0, 0, 0, 0, 0, 0,
11+
(4,0): 0, 0, 0, 0, 0, 0,
12+
(5,0): 0, 0, 0, 0, 0, 0,
13+
(6,0): 0, 0, 0, 0, 0, 0,
14+
(7,0): 0, 0, 0, 0, 0, 0,
15+
(8,0): 0, 0, 0, 0, 0, 0,
16+
(9,0): 0, 0, 0, 0, 0, 0,
17+
(10,0): 0, 0, 0, 0, 0, 0,
18+
(11,0): 0, 0, 0, 0, 12.5, 0,
19+
(12,0): 0, 0, 0, 12.5, 62.5, 25,
20+
(13,0): 0, 0, 0, 25, 87.5, 75,
21+
(14,0): 0, 0, 12.5, 75, 100, 87.5,
22+
(15,0): 0, 0, 12.5, 87.5, 100, 87.5,
23+
(16,0): 0, 0, 12.5, 87.5, 100, 100,
24+
(17,0): 0, 0, 12.5, 87.5, 100, 100,
25+
(18,0): 0, 0, 12.5, 87.5, 100, 100,
26+
(19,0): 0, 0, 12.5, 87.5, 100, 100,
27+
(20,0): 0, 0, 25, 87.5, 100, 100,
28+
(21,0): 0, 12.5, 75, 100, 100, 100,
29+
(22,0): 0, 12.5, 87.5, 100, 100, 100,
30+
(23,0): 0, 12.5, 87.5, 100, 100, 100,
31+
(24,0): 0, 12.5, 87.5, 100, 100, 100,
32+
(25,0): 0, 12.5, 87.5, 100, 100, 100,
33+
(26,0): 0, 12.5, 75, 100, 100, 100,
34+
(27,0): 0, 0, 25, 87.5, 100, 100,
35+
(28,0): 0, 0, 12.5, 87.5, 100, 100,
36+
(29,0): 0, 0, 12.5, 87.5, 100, 100
37+
}
38+
}
39+
}
40+
}
41+
HDF5 "ex7-data-0x1_iter_1.h5" {
42+
GROUP "/" {
43+
DATASET "main_field" {
44+
DATATYPE H5T_IEEE_F64LE
45+
DATASPACE SIMPLE { ( 30, 6 ) / ( 30, 6 ) }
46+
DATA {
47+
(0,0): 0, 0, 0, 0, 0, 0,
48+
(1,0): 0, 0, 0, 0, 0, 0,
49+
(2,0): 0, 0, 0, 0, 0, 0,
50+
(3,0): 0, 0, 0, 0, 0, 0,
51+
(4,0): 0, 0, 0, 0, 0, 0,
52+
(5,0): 0, 0, 0, 0, 0, 0,
53+
(6,0): 0, 0, 0, 0, 0, 0,
54+
(7,0): 0, 0, 0, 0, 0, 0,
55+
(8,0): 0, 0, 0, 0, 0, 0,
56+
(9,0): 0, 0, 0, 0, 0, 0,
57+
(10,0): 0, 0, 0, 0, 0, 0,
58+
(11,0): 0, 0, 0, 0, 0, 0,
59+
(12,0): 0, 0, 0, 0, 0, 0,
60+
(13,0): 12.5, 0, 0, 0, 0, 0,
61+
(14,0): 12.5, 0, 0, 0, 0, 0,
62+
(15,0): 25, 0, 0, 0, 0, 0,
63+
(16,0): 75, 12.5, 0, 0, 0, 0,
64+
(17,0): 87.5, 12.5, 0, 0, 0, 0,
65+
(18,0): 87.5, 12.5, 0, 0, 0, 0,
66+
(19,0): 87.5, 12.5, 0, 0, 0, 0,
67+
(20,0): 87.5, 12.5, 0, 0, 0, 0,
68+
(21,0): 87.5, 12.5, 0, 0, 0, 0,
69+
(22,0): 87.5, 12.5, 0, 0, 0, 0,
70+
(23,0): 87.5, 12.5, 0, 0, 0, 0,
71+
(24,0): 87.5, 12.5, 0, 0, 0, 0,
72+
(25,0): 87.5, 12.5, 0, 0, 0, 0,
73+
(26,0): 87.5, 12.5, 0, 0, 0, 0,
74+
(27,0): 87.5, 12.5, 0, 0, 0, 0,
75+
(28,0): 87.5, 12.5, 0, 0, 0, 0,
76+
(29,0): 87.5, 12.5, 0, 0, 0, 0
77+
}
78+
}
79+
}
80+
}
81+
HDF5 "ex7-data-1x0_iter_1.h5" {
82+
GROUP "/" {
83+
DATASET "main_field" {
84+
DATATYPE H5T_IEEE_F64LE
85+
DATASPACE SIMPLE { ( 30, 6 ) / ( 30, 6 ) }
86+
DATA {
87+
(0,0): 0, 0, 12.5, 87.5, 100, 100,
88+
(1,0): 0, 0, 12.5, 87.5, 100, 100,
89+
(2,0): 0, 0, 12.5, 87.5, 100, 87.5,
90+
(3,0): 0, 0, 12.5, 75, 100, 87.5,
91+
(4,0): 0, 0, 0, 25, 87.5, 75,
92+
(5,0): 0, 0, 0, 12.5, 62.5, 25,
93+
(6,0): 0, 0, 0, 0, 12.5, 0,
94+
(7,0): 0, 0, 0, 0, 0, 0,
95+
(8,0): 0, 0, 0, 0, 0, 0,
96+
(9,0): 0, 0, 0, 0, 0, 0,
97+
(10,0): 0, 0, 0, 0, 0, 0,
98+
(11,0): 0, 0, 0, 0, 0, 0,
99+
(12,0): 0, 0, 0, 0, 0, 0,
100+
(13,0): 0, 0, 0, 0, 0, 0,
101+
(14,0): 0, 0, 0, 0, 0, 0,
102+
(15,0): 0, 0, 0, 0, 0, 0,
103+
(16,0): 0, 0, 0, 0, 0, 0,
104+
(17,0): 0, 0, 0, 0, 0, 0,
105+
(18,0): 0, 0, 0, 0, 0, 0,
106+
(19,0): 0, 0, 0, 0, 0, 0,
107+
(20,0): 0, 0, 0, 0, 0, 0,
108+
(21,0): 0, 0, 0, 0, 0, 0,
109+
(22,0): 0, 0, 0, 0, 0, 0,
110+
(23,0): 0, 0, 0, 0, 0, 0,
111+
(24,0): 0, 0, 0, 0, 0, 0,
112+
(25,0): 0, 0, 0, 0, 0, 0,
113+
(26,0): 0, 0, 0, 0, 0, 0,
114+
(27,0): 0, 0, 0, 0, 0, 0,
115+
(28,0): 0, 0, 0, 0, 0, 0,
116+
(29,0): 0, 0, 0, 0, 0, 0
117+
}
118+
}
119+
}
120+
}
121+
HDF5 "ex7-data-1x1_iter_1.h5" {
122+
GROUP "/" {
123+
DATASET "main_field" {
124+
DATATYPE H5T_IEEE_F64LE
125+
DATASPACE SIMPLE { ( 30, 6 ) / ( 30, 6 ) }
126+
DATA {
127+
(0,0): 87.5, 12.5, 0, 0, 0, 0,
128+
(1,0): 75, 12.5, 0, 0, 0, 0,
129+
(2,0): 25, 0, 0, 0, 0, 0,
130+
(3,0): 12.5, 0, 0, 0, 0, 0,
131+
(4,0): 12.5, 0, 0, 0, 0, 0,
132+
(5,0): 0, 0, 0, 25, 0, 0,
133+
(6,0): 0, 0, 25, 125, 25, 0,
134+
(7,0): 0, 0, 25, 150, 50, 0,
135+
(8,0): 0, 0, 25, 175, 150, 25,
136+
(9,0): 0, 0, 50, 175, 175, 25,
137+
(10,0): 0, 25, 150, 200, 175, 25,
138+
(11,0): 0, 25, 175, 200, 175, 25,
139+
(12,0): 0, 25, 175, 200, 175, 25,
140+
(13,0): 0, 25, 150, 200, 175, 25,
141+
(14,0): 0, 0, 50, 175, 175, 25,
142+
(15,0): 0, 0, 25, 175, 150, 25,
143+
(16,0): 0, 0, 25, 150, 50, 0,
144+
(17,0): 0, 0, 25, 125, 25, 0,
145+
(18,0): 0, 0, 0, 25, 0, 0,
146+
(19,0): 0, 0, 0, 0, 0, 0,
147+
(20,0): 0, 0, 0, 0, 0, 0,
148+
(21,0): 0, 0, 0, 0, 0, 0,
149+
(22,0): 0, 0, 0, 0, 0, 0,
150+
(23,0): 0, 0, 0, 0, 0, 0,
151+
(24,0): 0, 0, 0, 0, 0, 0,
152+
(25,0): 0, 0, 0, 0, 0, 0,
153+
(26,0): 0, 0, 0, 0, 0, 0,
154+
(27,0): 0, 0, 0, 0, 0, 0,
155+
(28,0): 0, 0, 0, 0, 0, 0,
156+
(29,0): 0, 0, 0, 0, 0, 0
67157
}
68158
}
69159
}

0 commit comments

Comments
 (0)